<?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>126408</bug_id>
          
          <creation_ts>2014-01-02 14:49:53 -0800</creation_ts>
          <short_desc>[WebGL2] Context creation</short_desc>
          <delta_ts>2015-09-14 10:51:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>140424</dependson>
    
    <dependson>140431</dependson>
          <blocked>126404</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
    
    <cc>roger_fong</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>963903</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-01-02 14:49:53 -0800</bug_when>
    <thetext>Support creation of a WebGL2 context

var ctx = canvas.getContext(&quot;webgl2&quot;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963905</commentid>
    <comment_count>1</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2014-01-02 14:50:49 -0800</bug_when>
    <thetext>&lt;rdar://problem/15002170&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>963906</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-01-02 14:51:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/15740768&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060719</commentid>
    <comment_count>3</comment_count>
      <attachid>244478</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-12 16:52:42 -0800</bug_when>
    <thetext>Created attachment 244478
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060720</commentid>
    <comment_count>4</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-12 16:53:49 -0800</bug_when>
    <thetext>I&apos;ve neglected to fix the non mac ports. Will do in next patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060900</commentid>
    <comment_count>5</comment_count>
      <attachid>244537</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-13 13:01:11 -0800</bug_when>
    <thetext>Created attachment 244537
patch

Will fix Windows build after the patch lands.
Ignore remaining style errors, I&apos;ve made all the style fixes I thin are appropriate for this changeset.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060912</commentid>
    <comment_count>6</comment_count>
      <attachid>244538</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-13 13:44:55 -0800</bug_when>
    <thetext>Created attachment 244538
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060947</commentid>
    <comment_count>7</comment_count>
      <attachid>244538</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-01-13 14:37:36 -0800</bug_when>
    <thetext>Comment on attachment 244538
Patch

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

rs=me with a small comment

&gt; Source/WebCore/html/canvas/CanvasRenderingContext.h:57
&gt;      virtual bool is2d() const { return false; }
&gt;      virtual bool is3d() const { return false; }
&gt;      virtual bool isAccelerated() const { return false; }
&gt; +    virtual String type() const { return m_type; }

I wonder if we should change this to be: is2d(), isWebGL(), isWebGL2() and not have a type flag. We only support two (now three) context types, so we can think about a type field if we ever have more (which isn&apos;t really likely in the near term).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060997</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-13 16:37:23 -0800</bug_when>
    <thetext>This may have broken the iOS build:
Source/WebCore/html/canvas/WebGLContextGroup.h:29:10: error: &apos;WebGLRenderingContextBase.h&apos; file not found with &lt;angled&gt; include; use &quot;quotes&quot; instead
#include &lt;WebGLRenderingContextBase.h&gt;
         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         &quot;WebGLRenderingContextBase.h&quot;
1 error generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060998</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-13 16:39:25 -0800</bug_when>
    <thetext>and
/Volumes/Data/cdumez/WebKit/OpenSource/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:118:5: error: use of undeclared identifier &apos;m_type&apos;
    m_type = &quot;2d&quot;;
    ^
1 error generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1060999</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-01-13 16:45:37 -0800</bug_when>
    <thetext>Follow-up build fix landed in &lt;https://trac.webkit.org/r178392&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061017</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2015-01-13 17:49:13 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; I&apos;ve neglected to fix the non mac ports. Will do in next patch.

The GTK build fails with this: https://build.webkit.org/builders/GTK%20Linux%2064-bit%20Release%20%28Build%29/builds/54425/steps/compile-webkit/logs/stdio

Maybe you mean &apos;NULL&apos; instead of &apos;nil&apos; ? (C++)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061023</commentid>
    <comment_count>12</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-13 18:12:01 -0800</bug_when>
    <thetext>I think all the builds are fixed now:

Main patch was landed:
http://trac.webkit.org/changeset/178390

Windows and GTK fix was landed:
http://trac.webkit.org/changeset/178398</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061034</commentid>
    <comment_count>13</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-13 19:12:10 -0800</bug_when>
    <thetext>Keeping track of test failures:
https://bugs.webkit.org/show_bug.cgi?id=140423</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061091</commentid>
    <comment_count>14</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-01-13 23:20:28 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; I think all the builds are fixed now:
&gt; 
&gt; Main patch was landed:
&gt; http://trac.webkit.org/changeset/178390
&gt; 
&gt; Windows and GTK fix was landed:
&gt; http://trac.webkit.org/changeset/178398

It broke the EFL/GTK build: bug140424</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061098</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-01-14 00:06:01 -0800</bug_when>
    <thetext>As mentioned in bug 140423 comment 1, changes to js/dom/global-constructors-attributes.html results look quite suspicious. Given that you also had to skip all WebGL tests, this seems like too many issues to keep in the tree, Ill try to roll out if I can.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061101</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-14 00:06:20 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 140431</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061982</commentid>
    <comment_count>17</comment_count>
      <attachid>244806</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-16 15:06:27 -0800</bug_when>
    <thetext>Created attachment 244806
patch v2

WebGL1RenderingContext is renamed to WebGLRenderingContext</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1061984</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-16 15:08:36 -0800</bug_when>
    <thetext>Attachment 244806 did not pass style-queue:

ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:131:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:224:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:227:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:229:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:231:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:234:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:241:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:242:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:244:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:246:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:248:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:251:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:254:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:255:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:256:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:256:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:257:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:258:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:259:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:259:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:260:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:261:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:262:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:262:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:263:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:264:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:265:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:265:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:266:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:267:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:268:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:268:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:269:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:270:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:271:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:271:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:272:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:273:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:274:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:274:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:275:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:276:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:277:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:277:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:278:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:279:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:279:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:280:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:281:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:281:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:282:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:283:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:283:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:290:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:293:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:296:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:299:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:301:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:485:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:621:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:648:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:653:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:654:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:655:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:656:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:657:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:668:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:669:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:670:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:671:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:682:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:683:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:695:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:67:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:147:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:501:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:731:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:732:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:733:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:774:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:776:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1370:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1401:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1413:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1439:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1486:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1489:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1559:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3862:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3870:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3954:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3955:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3964:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3965:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3966:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3967:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3968:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/ca
nvas/WebGLRenderingContextBase.cpp:3978:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3984:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4025:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4042:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4086:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4218:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4219:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4228:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4229:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4230:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4231:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4232:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4247:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4273:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4290:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4306:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5050:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5055:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5057:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5059:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5061:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5063:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5065:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5317:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5318:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5319:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5320:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5321:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5378:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5454:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5455:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5560:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:6218:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:6232:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/DerivedSources.cpp:72:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:162:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:205:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:462:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:463:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:467:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 138 in 95 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>1061987</commentid>
    <comment_count>19</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-16 15:11:25 -0800</bug_when>
    <thetext>
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.

I chose to leave a lot of these style errors here because the spacing and inclusion of parameter names in the header files are there to make things clearer, which is very helpful for WebGL code as many function calls take a slew of various parameters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062000</commentid>
    <comment_count>20</comment_count>
      <attachid>244806</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-01-16 15:41:09 -0800</bug_when>
    <thetext>Comment on attachment 244806
patch v2

Attachment 244806 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/5328759708188672

New failing tests:
js/dom/global-constructors-attributes.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062001</commentid>
    <comment_count>21</comment_count>
      <attachid>244811</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-01-16 15:41:12 -0800</bug_when>
    <thetext>Created attachment 244811
Archive of layout-test-results from ews103 for mac-mavericks

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews103  Port: mac-mavericks  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062037</commentid>
    <comment_count>22</comment_count>
      <attachid>244819</attachid>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-16 16:41:02 -0800</bug_when>
    <thetext>Created attachment 244819
patch v3

With a layout test fix.
Actual build (not test) results will not differ from patch v2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062045</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-16 16:56:10 -0800</bug_when>
    <thetext>Attachment 244819 did not pass style-queue:

ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:131:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:224:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:227:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:229:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:231:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:234:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:241:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:242:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:244:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:246:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:248:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:251:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:254:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:255:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:256:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:256:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:257:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:258:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:259:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:259:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:260:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:261:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:262:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:262:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:263:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:264:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:265:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:265:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:266:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:267:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:268:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:268:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:269:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:270:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:271:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:271:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:272:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:273:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:274:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:274:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:275:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:276:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:277:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:277:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:278:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:279:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:279:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:280:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:281:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:281:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:282:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:283:  The parameter name &quot;location&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:283:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:290:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:293:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:296:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:299:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:301:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:485:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:648:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:653:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:654:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:655:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:656:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:657:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:668:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:669:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:670:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:671:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:682:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:683:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.h:695:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:147:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:731:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:732:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:733:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:774:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:776:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1370:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1401:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1413:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1439:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1486:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1489:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:1559:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3862:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3870:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3954:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3955:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3964:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3965:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3966:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3967:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3968:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3977:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:3983:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4024:  Weird number of spaces at l
ine-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4041:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4085:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4217:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4218:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4227:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4228:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4229:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4230:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4231:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4245:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4271:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4288:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:4304:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5048:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5053:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5055:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5057:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5059:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5061:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5063:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5315:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5316:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5317:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5318:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5319:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5376:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5452:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5453:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:5558:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:6216:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/html/canvas/WebGLRenderingContextBase.cpp:6230:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:162:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:205:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:462:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:463:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
ERROR: Source/WebCore/bindings/js/JSWebGLRenderingContextBaseCustom.cpp:467:  enum members should use InterCaps with an initial capital letter.  [readability/enum_casing] [4]
Total errors found: 134 in 96 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>1062052</commentid>
    <comment_count>24</comment_count>
      <attachid>244819</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-01-16 17:11:43 -0800</bug_when>
    <thetext>Comment on attachment 244819
patch v3

I talked with Roger about this. He&apos;ll split into two commits - one that renames the WebGLRenderingContext to WebGLRenderingContextBase (although keeping the contents the same), and then a followup to change the name in the contents. That should be smaller.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062058</commentid>
    <comment_count>25</comment_count>
      <attachid>244819</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-01-16 17:46:50 -0800</bug_when>
    <thetext>Comment on attachment 244819
patch v3

Attachment 244819 did not pass mac-ews (mac):
Output: http://webkit-queues.appspot.com/results/5989221659574272

New failing tests:
js/dom/global-constructors-attributes.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062059</commentid>
    <comment_count>26</comment_count>
      <attachid>244824</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2015-01-16 17:46:54 -0800</bug_when>
    <thetext>Created attachment 244824
Archive of layout-test-results from ews103 for mac-mavericks

The attached test failures were seen while running run-webkit-tests on the mac-ews.
Bot: ews103  Port: mac-mavericks  Platform: Mac OS X 10.9.5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1062524</commentid>
    <comment_count>27</comment_count>
    <who name="Roger Fong">roger_fong</who>
    <bug_when>2015-01-19 15:29:58 -0800</bug_when>
    <thetext>ReCommitted: https://trac.webkit.org/changeset/178674
With a minor test fix here: https://trac.webkit.org/changeset/178677</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125620</commentid>
    <comment_count>28</comment_count>
      <attachid>244806</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-09-14 10:51:39 -0700</bug_when>
    <thetext>Comment on attachment 244806
patch v2

Cleared review? from attachment 244806 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244478</attachid>
            <date>2015-01-12 16:52:42 -0800</date>
            <delta_ts>2015-01-13 13:01:11 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>1596114</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODMwNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1NCBAQAorMjAxNS0wMS0xMiAgUm9nZXIg
Rm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkdMMjogU3VwcG9ydCB3
ZWJnbDIgY29udGV4dCBjcmVhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNjQwOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUwMDIxNzA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMg
Y292ZXJlZCBieSBleGlzdGluZyBLaHJvbm9zIHRlc3RzIGZvciBXZWJHTCAxLjAgY29uZm9ybWFu
Y2UuCisKKyAgICAgICAgQ3JlYXRlIGEgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSBjbGFzcyB0
aGF0IGV4dGVuZHMgdG8gYSBXZWJHTDFSZW5kZXJpbmdDb250ZXh0IGFuZCBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LgorICAgICAgICBSZXBsYWNlIGFsbCBwcmV2aW91cyBpbnN0YW5jZXMgb2YgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0IHVzYWdlcyB3aXRoIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Ug
dXNhZ2VzIGZvciBub3cuCisgICAgICAgIEFzIHRoZSBmaXJzdCBzdGVwLCB0aGUgV2ViR0wxIGFu
ZCBXZWJHTDIgY29udGV4dHMgd2lsbCBoYXZlIHRoZSBleGFjdCBzYW1lIGZ1bmN0aW9uYWxpdHku
CisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGlu
Z3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3Mv
anMvSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwLgor
ICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9u
YWxDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjp0b0pTKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OmdldE9iamVjdFBhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFj
aGVkU2hhZGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0RXh0ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQ
YXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFNoYWRlclBhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1l
dGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRVbmlmb3JtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
dG9WZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6ZnVuY3Rpb25Gb3JVbmlmb3Jt
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlvbmYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6ZGF0YUZ1bmN0aW9uaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpkYXRhRnVuY3Rpb25NYXRyaXgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0y
aXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0zZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0zaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm1NYXRyaXgzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0
ZXhBdHRyaWIzZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdik6IERlbGV0ZWQuCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVu
KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0
b20uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvSlMpOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0T2JqZWN0UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBdHRhY2hlZFNoYWRlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRFeHRlbnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCdWZm
ZXJQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYXJhbWV0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQcm9ncmFtUGFyYW1ldGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Z2V0U2hhZGVyUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyk6CisgICAgICAg
IChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFRleFBhcmFtZXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZv
cm0pOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRW
ZXJ0ZXhBdHRyaWIpOgorICAgICAgICAoV2ViQ29yZTo6dG9WZWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6ZnVuY3Rpb25Gb3JVbmlmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OmRhdGFGdW5jdGlv
bmYpOgorICAgICAgICAoV2ViQ29yZTo6ZGF0YUZ1bmN0aW9uaSk6CisgICAgICAgIChXZWJDb3Jl
OjpkYXRhRnVuY3Rpb25NYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp1bmlmb3JtMWZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFpdik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMml2KToKKyAgICAgICAgKFdlYkNvcmU6
OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNmdik6CisgICAgICAgIChXZWJD
b3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zaXYpOgorICAgICAgICAo
V2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRy
aXgyZnYpOgorICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1
bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjFmdik6CisgICAgICAgIChXZWJDb3JlOjpK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmdik6CisgICAgICAgIChX
ZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjNmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJp
YjRmdik6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
ckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgICogaHRt
bC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxl
bWVudDo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6
aXMzZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBTkdM
RUluc3RhbmNlZEFycmF5czo6QU5HTEVJbnN0YW5jZWRBcnJheXMpOgorICAgICAgICAoV2ViQ29y
ZTo6QU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCk6CisgICAgICAgICogaHRtbC9jYW52
YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0Ojp0eXBlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVFNoYWRlclRl
eHR1cmVMT0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RVhUU2hhZGVyVGV4dHVyZUxPRDo6RVhU
U2hhZGVyVGV4dHVyZUxPRCk6CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4dHVy
ZUxPRC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM6OkVY
VFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyk6CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTRWxlbWVu
dEluZGV4VWludC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPRVNFbGVtZW50SW5kZXhVaW50OjpP
RVNFbGVtZW50SW5kZXhVaW50KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNFbGVtZW50SW5k
ZXhVaW50Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpPRVNTdGFuZGFyZERlcml2YXRpdmVzOjpPRVNTdGFuZGFy
ZERlcml2YXRpdmVzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRp
dmVzLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok9FU1RleHR1cmVGbG9hdDo6T0VTVGV4dHVyZUZsb2F0KToKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9P
RVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T0VTVGV4dHVyZUZs
b2F0TGluZWFyOjpPRVNUZXh0dXJlRmxvYXRMaW5lYXIpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L09FU1RleHR1cmVGbG9hdExpbmVhci5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1
cmVIYWxmRmxvYXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T0VTVGV4dHVyZUhhbGZGbG9hdDo6
T0VTVGV4dHVyZUhhbGZGbG9hdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhh
bGZGbG9hdC5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5l
YXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcjo6T0VT
VGV4dHVyZUhhbGZGbG9hdExpbmVhcik6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTVGV4dHVy
ZUhhbGZGbG9hdExpbmVhci5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9FU1ZlcnRleEFycmF5T2JqZWN0OjpPRVNW
ZXJ0ZXhBcnJheU9iamVjdCk6CisgICAgICAgICogaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlP
YmplY3QuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMVJlbmRlcmluZ0NvbnRleHQ6Oldl
YkdMMVJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0TG9zdENhbGxiYWNrOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2spOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxi
YWNrOjp+V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjayk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjazo6
fldlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpzZXR1cEZsYWdzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZENvbXBy
ZXNzZWRUZXh0dXJlRm9ybWF0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6fldlYkdMUmVuZGVyaW5nQ29udGV4dCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlc3Ryb3lHcmFwaGljc0NvbnRleHQz
RCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1h
cmtDb250ZXh0Q2hhbmdlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNsZWFySWZDb21wb3NpdGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtMYXllckNv
bXBvc2l0ZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1h
Z2VEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cmVzaGFwZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWlnaHQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaXplSW5CeXRlcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1
cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojph
dHRhY2hTaGFkZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpiaW5kQXR0cmliTG9jYXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja09iamVjdFRvQmVCb3VuZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kRnJhbWVi
dWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpiaW5kUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvbik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb25TZXBh
cmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmJsZW5kRnVuYyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y2xlYXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjbGVhckNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXJEZXB0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyU3RlbmNpbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbG9yTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZXIpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1h
Z2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJE
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29w
eVRleFN1YkltYWdlMkQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpjcmVhdGVCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVRleHR1cmUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVQcm9ncmFt
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3Jl
YXRlUmVuZGVyYnVmZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlU2hhZGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3VsbEZhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVPYmplY3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVGcmFtZWJ1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlbGV0ZVByb2dyYW0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVTaGFkZXIpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXJlKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhGdW5jKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhN
YXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVwdGhSYW5nZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRldGFjaFNoYWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRpc2FibGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUVsZW1lbnRB
cnJheVNpemUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNl
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVXZWJHTE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd0FycmF5cyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJh
eXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZURyYXdFbGVtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRyYXdFbGVtZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZmluaXNoKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmx1c2gp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJvbnRGYWNlKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXApOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3Rp
dmVBdHRyaWIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRBY3RpdmVVbmlmb3JtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRpb24pOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQ
YXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRDb250ZXh0QXR0cmlidXRlcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEVycm9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXh0ZW5zaW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0UGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1JbmZvTG9nKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVySW5mb0xvZyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclByZWNpc2lv
bkZvcm1hdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFNoYWRlclNvdXJjZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3Jt
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VW5pZm9ybUxvY2F0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGludCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVmZmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0
TG9zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmlzQ29udGV4dExvc3RPclBlbmRpbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0ZyYW1lYnVmZmVyKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNQcm9ncmFtKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNSZW5kZXJidWZmZXIp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1No
YWRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmlzVGV4dHVyZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmxpbmVXaWR0aCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWkpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpwb2x5Z29uT2Zmc2V0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbGVhc2VTaGFk
ZXJDb21waWxlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzYW1wbGVDb3ZlcmFnZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNjaXNzb3IpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaGFkZXJTb3VyY2UpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVu
Yyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0
ZW5jaWxGdW5jU2VwYXJhdGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFzayk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3ApOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3BTZXBh
cmF0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleEltYWdlMkRCYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyREltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmMpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0ltYWdlSW50b0J1
ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZpZGVvRnJhbWVUb0ltYWdlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyZik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcmkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJE
QmFzZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleFN1YkltYWdlMkRJbXBsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWkpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTJmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0yaSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2YpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00Zik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm00ZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtNGkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtNGl2KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNl
UHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlUHJvZ3JhbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmYpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWIyZnYpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdik6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliUG9pbnRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZpZXdwb3J0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Zm9yY2VMb3N0Q29udGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxvc2VDb250ZXh0SW1wbCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlUmVzdG9yZUNvbnRl
eHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpw
bGF0Zm9ybUxheWVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cmVtb3ZlU2hhcmVkT2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkU2hhcmVkT2JqZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVtb3ZlQ29udGV4dE9iamVjdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZENv
bnRleHRPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RvcCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xlYW5Q
YXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGbG9hdFBhcmFtZXRlcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEludFBhcmFtZXRlcik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xJbnRBcnJheVBh
cmFtZXRlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4
SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVy
Q29sb3JGb3JtYXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVUZXh0dXJlQmluZGluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlTG9jYXRpb25MZW5ndGgpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVNpemUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0cmluZyk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNMZXZlbCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY1BhcmFt
ZXRlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVz
c2VkVGV4RnVuY0RhdGEpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2Vk
VGV4U3ViRGltZW5zaW9ucyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd01vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3Rl
bmNpbEZ1bmMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpwcmludEdMRXJyb3JUb0NvbnNvbGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludFdhcm5pbmdUb0NvbnNvbGUpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVm
ZmVyRnVuY1BhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRXF1YXRpb24pOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZUNhcGFiaWxpdHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFy
YW1ldGVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUhUTUxDYW52YXNFbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZkltcGwpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWJmdkltcGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojppbml0VmVydGV4QXR0cmliMCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVsYXRlVmVydGV4QXR0cmliMCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZXNBZnRl
clZlcnRleEF0dHJpYjBTaW11bGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29u
dGV4dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmVuc3VyZU5vdE51bGwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VC
dWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpidWJibGVUb0Zyb250KTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3ludGhl
c2l6ZUdMRXJyb3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpwcmludEdMV2FybmluZ1RvQ29uc29sZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U3RlbmNpbFRlc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVPckRpc2FibGUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGFt
cGVkQ2FudmFzU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldE1heERyYXdCdWZmZXJzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0TWF4Q29sb3JBdHRhY2htZW50cyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldEJhY2tEcmF3QnVm
ZmVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cmVzdG9yZUN1cnJlbnRGcmFtZWJ1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVDdXJyZW50VGV4dHVyZTJEKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3VwcG9ydHNEcmF3QnVm
ZmVycyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRyYXdBcnJheXNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHNJbnN0YW5jZWQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJEaXZpc29yKTog
RGVsZXRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0Lmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRs
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaWRsLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6Oldl
YkdMMlJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVy
aW5nQ29udGV4dC5pZGw6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xCdWZmZXI6OldlYkdMQnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTEJ1ZmZlci5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRl
eHR1cmVBVEMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENv
bXByZXNzZWRUZXh0dXJlUFZSVEMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVz
c2VkVGV4dHVyZVBWUlRDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJl
UzNUQyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3Vw
cG9ydGVkKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNU
Qy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdyb3VwOjpnZXRBR3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6OmFkZENvbnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6OnJlbW92ZUNvbnRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6Omxvc2VDb250ZXh0R3JvdXApOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xDb250ZXh0T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9i
amVjdDo6V2ViR0xDb250ZXh0T2JqZWN0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENv
bnRleHRPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6Y29u
dGV4dCk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpXZWJHTERlYnVnUmVu
ZGVyZXJJbmZvKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZv
Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xEZWJ1Z1NoYWRlcnM6OldlYkdMRGVidWdTaGFkZXJzKToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTERlYnVnU2hhZGVycy5oOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMRGVwdGhUZXh0dXJlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRGVwdGhU
ZXh0dXJlOjpXZWJHTERlcHRoVGV4dHVyZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xE
ZXB0aFRleHR1cmUuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRHJhd0J1ZmZlcnM6OldlYkdMRHJhd0J1ZmZlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMRHJhd0J1ZmZlcnM6OnNhdGlzZmllc1dlYkdMUmVxdWlyZW1lbnRz
KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmg6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xF
eHRlbnNpb246OldlYkdMRXh0ZW5zaW9uKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEV4
dGVuc2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xFeHRlbnNpb246OmNvbnRleHQpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
RnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMRnJhbWVidWZmZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTG9zZUNvbnRleHQ6OldlYkdMTG9zZUNvbnRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMb3NlQ29udGV4dDo6bG9zZUNvbnRleHQpOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQuaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTE9iamVjdDo6
V2ViR0xPYmplY3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0Lmg6CisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6V2Vi
R0xQcm9ncmFtKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaDoKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJidWZmZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5oOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5pZGw6IFJlbW92ZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0TG9zdENhbGxiYWNrOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrOjp+
V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjazo6fldlYkdMUmVuZGVyaW5nQ29udGV4dEVy
cm9yTWVzc2FnZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmluaXRpYWxpemVOZXdDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNldHVwRmxhZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWxsb3dQcml2aWxlZ2VkRXh0
ZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjph
ZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp+V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXN0cm95R3JhcGhpY3NDb250ZXh0
M0QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWFya0Nv
bnRleHRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNsZWFySWZDb21wb3NpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWFya0xheWVyQ29tcG9zaXRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdpbmdCdWZmZXJXaWR0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3aW5nQnVmZmVySGVpZ2h0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNpemVJbkJ5dGVz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFjdGl2ZVRl
eHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YXR0
YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmJpbmRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpjaGVja09iamVjdFRvQmVCb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRUZXh0dXJlKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kQ29sb3IpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmxlbmRFcXVhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEVx
dWF0aW9uU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6YmxlbmRGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyU3ViRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFyQ29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xlYXJEZXB0aCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhclN0ZW5jaWwpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29sb3JNYXNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXBpbGVTaGFkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcHJlc3Nl
ZFRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Y29tcHJlc3NlZFRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4SW1hZ2UyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb3B5VGV4U3ViSW1hZ2Uy
RCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3Jl
YXRlRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmNyZWF0ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3VsbEZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlT2JqZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZUJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVGcmFtZWJ1ZmZlcik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZGVsZXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpkZXB0aEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmRlcHRoUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6ZGV0YWNoU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRWxlbWVudEFycmF5
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVZlcnRleEF0dHJpYnV0
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVXZWJHTE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZURyYXdBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZURyYXdFbGVtZW50cyk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZpbmlzaCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmbHVzaCk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpm
cmFtZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpmcm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dHJpYkxvY2F0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJ1
ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRDb250ZXh0QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFBhcmFtZXRl
cik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQcm9n
cmFtUGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVySW5mb0xvZyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJQ
cmVjaXNpb25Gb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Z2V0U2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VGV4UGFyYW1ldGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0pOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFZlcnRleEF0
dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRW
ZXJ0ZXhBdHRyaWJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6aGludCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjppc0NvbnRleHRMb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmlzQ29udGV4dExvc3RPclBlbmRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNQcm9ncmFtKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzU2hhZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzVGV4dHVyZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsaW5lV2lkdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bGlua1Byb2dyYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGl4ZWxTdG9yZWkpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cG9seWdvbk9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4
ZWxzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlbGVh
c2VTaGFkZXJDb21waWxlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNjaXNzb3IpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxGdW5jKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxGdW5jU2VwYXJhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE1hc2tT
ZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpz
dGVuY2lsT3ApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
c3RlbmNpbE9wU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dGV4SW1hZ2UyREJhc2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyREltcGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0ltYWdlSW50b0J1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2aWRlb0ZyYW1lVG9JbWFn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJh
bWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
UGFyYW1ldGVyZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhQYXJhbWV0ZXJpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleFN1YkltYWdlMkRCYXNlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFmKToKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0xaXYpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJmKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJpKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNmKToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zZnYpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zaXYp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRm
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00
ZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9y
bTRpKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZv
cm00aXYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5p
Zm9ybU1hdHJpeDJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXg0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dXNlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMWYpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMWZ2KToKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJm
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0
dHJpYjJmdik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
ZXJ0ZXhBdHRyaWIzZik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmVydGV4QXR0cmliNGYpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliNGZ2KToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmlld3BvcnQpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Zm9yY2VMb3N0Q29udGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsb3NlQ29udGV4dElt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Zm9yY2VS
ZXN0b3JlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpwbGF0Zm9ybUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnJlbW92ZVNoYXJlZE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjphZGRTaGFyZWRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVtb3ZlQ29udGV4dE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRDb250ZXh0T2JqZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRldGFjaEFuZFJl
bW92ZUFsbE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Z2V0Qm9vbGVhblBhcmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RmxvYXRQYXJhbWV0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0SW50UGFy
YW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omdl
dFVuc2lnbmVkSW50UGFyYW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcik6CisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRXZWJHTEludEFycmF5UGFyYW1ldGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrVGV4
dHVyZUNvbXBsZXRlbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVm
ZmVyQ29tYmluYXRpb25WYWxpZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJvdW5k
RnJhbWVidWZmZXJIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVUZXh0dXJlQmluZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU2l6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVN0cmluZyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRl
eEZ1bmNGb3JtYXRBbmRUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY0xldmVsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZUNvbXByZXNzZWRUZXhGb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RGlt
ZW5zaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd01vZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVT
dGVuY2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpwcmludEdMRXJyb3JUb0NvbnNvbGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6cHJpbnRXYXJuaW5nVG9Db25zb2xlKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1l
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZUJsZW5kRXF1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKToKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ2FwYWJpbGl0eSk6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxJbWFnZUVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVIVE1MQ2FudmFzRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliZkltcGwpOgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliZnZJbXBs
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmluaXRWZXJ0
ZXhBdHRyaWIwKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnNpbXVsYXRlVmVydGV4QXR0cmliMCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpyZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNwYXRjaENv
bnRleHRMb3N0RXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6bWF5YmVSZXN0b3JlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjplbnN1cmVOb3ROdWxsKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OkxSVUltYWdlQnVmZmVy
Q2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJV
SW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxlVG9Gcm9udCk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzeW50aGVzaXpl
R0xFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpw
cmludEdMV2FybmluZ1RvQ29uc29sZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjphcHBseVN0ZW5jaWxUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZU9yRGlzYWJsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGFtcGVkQ2FudmFzU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRNYXhEcmF3QnVmZmVycyk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRNYXhDb2xv
ckF0dGFjaG1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnNldEJhY2tEcmF3QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9yZUN1cnJlbnRUZXh0dXJlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3VwcG9ydHNEcmF3
QnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpk
cmF3QXJyYXlzSW5zdGFuY2VkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmRyYXdFbGVtZW50c0luc3RhbmNlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWJEaXZpc29yKToKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z3JhcGhpY3NDb250ZXh0M0QpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29udGV4dEdyb3Vw
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldE1heFZl
cnRleEF0dHJpYnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6aXNHTEVTMkNvbXBsaWFudCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjppc0dMRVMyTlBPVFN0cmljdCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjppc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzUmVzb3Vy
Y2VTYWZlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omlz
RGVwdGhTdGVuY2lsU3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnNldEJvdW5kVmVydGV4QXJyYXlPYmplY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6VmVydGV4QXR0cmliVmFsdWU6OlZlcnRleEF0
dHJpYlZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OlZlcnRleEF0dHJpYlZhbHVlOjppbml0VmFsdWUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaWRsOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTFNoYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYWRlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMU2hhZGVyOjpXZWJHTFNoYWRlcik6CisgICAgICAg
ICogaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFNoYXJlZE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFNoYXJlZE9iamVjdDo6
V2ViR0xTaGFyZWRPYmplY3QpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2Jq
ZWN0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMVGV4dHVyZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
VGV4dHVyZTo6V2ViR0xUZXh0dXJlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFRleHR1
cmUuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTLmg6CisKIDIwMTUtMDEtMTIgIFRpbW90aHkgSG9ydG9uICA8dGltb3RoeV9ob3J0
b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxNzc2NTYpOiBUZXh0IGluIGZp
bmQtaW4tcGFnZSB5ZWxsb3cgYm91bmN5IHJlY3RhbmdsZSBpcyBub3QgY3Jpc3AKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dl
YkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtNDQ2LDEyICs0NDYs
MTQgQEAgTk9OX1NWR19CSU5ESU5HX0lETFMgPSBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZh
cy9XZWJHTExvc2VDb250ZXh0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJH
TFByb2dyYW0uaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVm
ZmVyLmlkbCBcCi0gICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbCBcCiAg
ICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5pZGwg
XAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmlkbCBcCiAgICAgJChX
ZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTFVuaWZvcm1Mb2NhdGlvbi5pZGwgXAogICAgICQoV2Vi
Q29yZSkvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5pZGwgXAorICAgICQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGwgXAorICAg
ICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGwgXAorCSQo
V2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwgXAogICAgICQo
V2ViQ29yZSkvaHRtbC90cmFjay9BdWRpb1RyYWNrLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1s
L3RyYWNrL0F1ZGlvVHJhY2tMaXN0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL3RyYWNrL0Rh
dGFDdWUuaWRsIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY5Niw4
ICsxNjk2LDggQEAKIAkJNDlDN0I5REExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyYnVm
ZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3
QjlCQTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJidWZmZXIuaCAqLzsgfTsKIAkJNDlD
N0I5REMxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkMxMDQyRDMy
RjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9OwogCQk0OUM3QjlE
RDEwNDJEMzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkQxMDQyRDMyRjAwMDlE
NDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKLQkJNDlDN0I5REYxMDQyRDMy
RjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlCRjEwNDJEMzJGMDAwOUQ0NDcgLyog
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCAqLzsgfTsKLQkJNDlDN0I5RTAxMDQyRDMyRjAwMDlE
NDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oICovOyB9OworCQk0OUM3QjlERjEwNDJEMzJGMDAwOUQ0NDcgLyogV2Vi
R0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUM3QjlCRjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5n
Q29udGV4dC5jcHAgKi87IH07CisJCTQ5QzdCOUUwMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUM3QjlDMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4
dC5oICovOyB9OwogCQk0OUM3QjlFMjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzIx
MDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmNwcCAqLzsgfTsKIAkJNDlDN0I5RTMxMDQy
RDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlDMzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFk
ZXIuaCAqLzsgfTsKIAkJNDlDN0I5RTUxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMVGV4dHVyZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3QjlD
NTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xUZXh0dXJlLmNwcCAqLzsgfTsKQEAgLTE3MzcsMTAg
KzE3MzcsMTAgQEAKIAkJNDlFRUQxNDMxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFRUQxM0QxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
ICovOyB9OwogCQk0OUVFRDE0NDEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlFRUQxM0UxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcCAqLzsgfTsKIAkJNDlFRUQxNDUxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0OUVFRDEzRjEwNTE5Njk0MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaCAqLzsgfTsKLQkJNDlFRUQxNDYxMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5RUVEMTQwMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5j
cHAgKi87IH07Ci0JCTQ5RUVEMTQ3MTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDlFRUQxNDExMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggKi87
IH07CisJCTQ5RUVEMTQ2MTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRl
eHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlF
RUQxNDAxMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87
IH07CisJCTQ5RUVEMTQ3MTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRl
eHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVE
MTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsK
IAkJNDlFRUQxNEUxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDQ5RUVEMTRCMTA1MTk3MTkwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1
c3RvbS5jcHAgKi87IH07Ci0JCTQ5RUVEMTRGMTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHRDdXN0b20uY3BwICovOyB9OworCQk0OUVFRDE0RjEwNTE5NzFBMDAwOTlGQUIgLyog
SlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTRDMTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dl
YkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovOyB9OwogCQk0OUVFRDE1MDEwNTE5NzFB
MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTREMTA1MTk3MUEwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovOyB9OwogCQk0OUZD
N0E1MDE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5RkM3QTRGMTQ0NEFGNUYw
MEE1RDg2NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwICovOyB9OwogCQk0OUZGQkYxRDEx
Qzg1NTBFMDA2QTcxMTggLyogR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTgg
LyogR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gKi87IH07CkBAIC01ODQzLDYgKzU4NDMsMTIgQEAK
IAkJRDM1OUQ3OTMxMjlDQTNDMDAwMDZFNUQyIC8qIERPTUhUTUxEZXRhaWxzRWxlbWVudEludGVy
bmFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzU5
RDc5MDEyOUNBM0MwMDAwNkU1RDIgLyogRE9NSFRNTERldGFpbHNFbGVtZW50SW50ZXJuYWwuaCAq
LzsgfTsKIAkJRDM1OUQ4QkUxMjlDQTU1QzAwMDZFNUQyIC8qIEpTSFRNTERldGFpbHNFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzNTlE
OEJDMTI5Q0E1NUMwMDA2RTVEMiAvKiBKU0hUTUxEZXRhaWxzRWxlbWVudC5jcHAgKi87IH07CiAJ
CUQzNTlEOEJGMTI5Q0E1NUMwMDA2RTVEMiAvKiBKU0hUTUxEZXRhaWxzRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDM1OUQ4QkQxMjlDQTU1
QzAwMDZFNUQyIC8qIEpTSFRNTERldGFpbHNFbGVtZW50LmggKi87IH07CisJCUQzOUM3MkQ3MUE1
QzhCMEIwMEFFRDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzOUM3MkQ1MUE1QzhCMEIwMEFF
RDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCAqLzsgfTsKKwkJRDM5QzcyRDgx
QTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzOUM3MkQ2MUE1QzhCMEIwMEFF
RDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggKi87IH07CisJCUQzOUM3MkREMUE1
QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzOUM3MkRCMUE1QzhDOEUwMEFFRDg5
QyAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCAqLzsgfTsKKwkJRDM5QzcyREUxQTVDOEM4
RTAwQUVEODlDIC8qIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzOUM3MkRDMUE1QzhDOEUwMEFFRDg5QyAvKiBX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggKi87IH07CisJCUQzOUM3MkU0MUE1QzkzQUYwMEFFRDg5
QyAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDM5QzcyRTMxQTVDOTNBRjAwQUVEODlDIC8q
IEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi87IH07CisJCUQzOUM3MkU2MUE1
Qzk0MEIwMEFFRDg5QyAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDM5QzcyRTUxQTVD
OTQwQjAwQUVEODlDIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAgKi87
IH07CiAJCUQzQTk0QTM4MTIyREFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1ZXJ5TGlzdC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0E5NEEzMTEyMkRB
QkFDMDBBMzdCQkMgLyogTWVkaWFRdWVyeUxpc3QuY3BwICovOyB9OwogCQlEM0E5NEEzOTEyMkRB
QkFDMDBBMzdCQkMgLyogTWVkaWFRdWVyeUxpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzQTk0QTMyMTIyREFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1
ZXJ5TGlzdC5oICovOyB9OwogCQlEM0E5NEEzQjEyMkRBQkFDMDBBMzdCQkMgLyogTWVkaWFRdWVy
eUxpc3RMaXN0ZW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRDNBOTRBMzQxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIu
aCAqLzsgfTsKQEAgLTU4NTIsNiArNTg1OCwxMCBAQAogCQlEM0FBMTBGNDEyM0E5OEFBMDA5MjE1
MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEQzQUExMEYyMTIzQTk4QUEwMDkyMTUyQiAvKiBNZWRpYVF1ZXJ5TWF0
Y2hlci5oICovOyB9OwogCQlEM0Q0RTk3MjEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlF
bGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQzRDRFOTcwMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFyeUVsZW1lbnQuY3BwICovOyB9
OwogCQlEM0Q0RTk3MzEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0Q0RTk3MTEzMEM3
Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggKi87IH07CisJCUQzRTE0QkI1MUE1
RENGNEIwMDk3QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNFMTRCQjMxQTVEQ0Y0QjAwOTdB
NkU5IC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CisJCUQzRTE0QkI2MUE1
RENGNEIwMDk3QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRTE0QkI0MUE1RENGNEIwMDk3QTZF
OSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKKwkJRDNFMTRCQjkxQTVEQ0Y3
QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0UxNEJCNzFBNURDRjdCMDA5N0E2
RTkgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCAqLzsgfTsKKwkJRDNFMTRCQkEx
QTVEQ0Y3QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNFMTRCQjgxQTVEQ0Y3QjAw
OTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovOyB9OwogCQlENjE5QTMw
NzE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENjE5QTMwNTE0NEUwMEJFMDA0
QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5jcHAgKi87IH07CiAJCUQ2MTlBMzA4MTQ0
RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENjE5QTMwNjE0NEUwMEJFMDA0QkMzMDIg
LyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oICovOyB9OwogCQlENjQ4OUQyNTE2NkZGQ0YxMDA3
QzAzMUIgLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQ2NDg5RDIzMTY2RkZDRjEwMDdDMDMxQiAvKiBKU0hU
TUxUZW1wbGF0ZUVsZW1lbnQuY3BwICovOyB9OwpAQCAtODgwOSw5ICs4ODE5LDkgQEAKIAkJNDlD
N0I5QkMxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5j
cHA7IHBhdGggPSBjYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUJEMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuaDsgcGF0aCA9IGNhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUJFMTA0MkQzMkYwMDA5RDQ0NyAv
KiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBDYW52
YXNSZW5kZXJpbmdDb250ZXh0LmlkbDsgcGF0aCA9IGNhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlDN0I5QkYxMDQyRDMyRjAw
MDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTQ5QzdCOUMwMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg7IHBh
dGggPSBjYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTQ5QzdCOUMxMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGw7
IHBhdGggPSBjYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNDlDN0I5QkYxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmlu
Z0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0wx
UmVuZGVyaW5nQ29udGV4dC5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUMwMTA0MkQzMkYwMDA5
RDQ0NyAvKiBXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTDFS
ZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUMx
MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmlkbCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHRleHQ7IG5hbWUgPSBXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmlkbDsgcGF0aCA9IGNhbnZhcy9X
ZWJHTDFSZW5kZXJpbmdDb250ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlDN0I5QzIxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdMU2hhZGVyLmNwcDsgcGF0aCA9IGNhbnZhcy9X
ZWJHTFNoYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUMzMTA0
MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBXZWJHTFNoYWRlci5oOyBwYXRoID0gY2FudmFzL1dlYkdMU2hhZGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QzdCOUM0MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJH
TFNoYWRlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xTaGFkZXIuaWRsOyBwYXRo
ID0gY2FudmFzL1dlYkdMU2hhZGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTg4NTMsMTAgKzg4NjMsMTAgQEAKIAkJNDlFRUQxM0QxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlFRUQxM0UxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFRUQxM0YxMDUx
OTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5RUVEMTQwMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFRDE0MDEwNTE5Njk0MDAw
OTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdM
MVJlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNX
ZWJHTDFSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5
RUVEMTRCMTA1MTk3MTkwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3Rv
bS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5
RUVEMTRDMTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5RUVEMTRD
MTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTDFSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlFRUQxNEQxMDUx
OTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRD
dXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUZDN0E0RjE0NDRBRjVG
MDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTQ5RkZCRjFDMTFDODU1MEUwMDZBNzExOCAvKiBHcmFwaGljc0Nv
bnRleHQzRE1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEdy
YXBoaWNzQ29udGV4dDNETWFjLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMz
NjUsNiArMTMzNzUsMTIgQEAKIAkJRDM1OUQ3OTAxMjlDQTNDMDAwMDZFNUQyIC8qIERPTUhUTUxE
ZXRhaWxzRWxlbWVudEludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERPTUhUTUxEZXRhaWxzRWxlbWVudEludGVybmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUQzNTlEOEJDMTI5Q0E1NUMwMDA2RTVEMiAvKiBKU0hUTUxEZXRhaWxzRWxlbWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxEZXRhaWxzRWxl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzNTlEOEJEMTI5Q0E1NUMw
MDA2RTVEMiAvKiBKU0hUTUxEZXRhaWxzRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU0hUTUxEZXRhaWxzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlEMzlDNzJENTFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmNwcDsgcGF0aCA9IGNhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDM5QzcyRDYxQTVDOEIwQjAw
QUVEODlDIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oOyBwYXRoID0gY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRDM5QzcyREIxQTVDOEM4RTAwQUVEODlDIC8qIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dC5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzOUM3MkRDMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdl
YkdMMlJlbmRlcmluZ0NvbnRleHQuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250
ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzOUM3MkUzMUE1QzkzQUYwMEFF
RDg5QyAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDM5QzcyRTUxQTVDOTQwQjAwQUVEODlD
IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0E5NEEzMTEyMkRBQkFDMDBBMzdC
QkMgLyogTWVkaWFRdWVyeUxpc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTWVkaWFRdWVyeUxpc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlE
M0E5NEEzMjEyMkRBQkFDMDBBMzdCQkMgLyogTWVkaWFRdWVyeUxpc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFRdWVyeUxpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDNBOTRBMzMxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0Lmlk
bCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBNZWRpYVF1ZXJ5TGlzdC5pZGw7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMzM3Niw2ICsxMzM5MiwxMiBAQAogCQlEM0FBMTBGMjEyM0E5
OEFBMDA5MjE1MkIgLyogTWVkaWFRdWVyeU1hdGNoZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gTWVkaWFRdWVyeU1hdGNoZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRDNENEU5NzAxMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBIVE1MU3VtbWFyeUVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEM0Q0RTk3MTEzMEM3Q0ZFMDA3QkE1
NDAgLyogSFRNTFN1bW1hcnlFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEhUTUxTdW1tYXJ5RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlE
M0UxNEJCMzFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzRTE0QkI0MUE1RENGNEIw
MDk3QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUQzRTE0QkI3MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRDNFMTRCQjgxQTVEQ0Y3QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDNFMTRCQkIxQTVE
RThGNTAwOTdBNkU5IC8qIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuaWRsICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4
dDsgbmFtZSA9IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0Ux
NEJCQzFBNURFOEY1MDA5N0E2RTkgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGw7IHBhdGgg
PSBjYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUQ2MTlBMzA1MTQ0RTAwQkUwMDRCQzMwMiAvKiBDaGlsZExpc3RNdXRhdGlv
blNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENoaWxkTGlz
dE11dGF0aW9uU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENjE5QTMw
NjE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQ2NDg5RDIzMTY2RkZDRjEwMDdDMDMxQiAvKiBKU0hUTUxU
ZW1wbGF0ZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNIVE1MVGVtcGxhdGVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE1ODkxLDkgKzE1OTEzLDE1IEBACiAJCQkJNDlDN0I5QjkxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMUmVuZGVyYnVmZmVyLmNwcCAqLywKIAkJCQk0OUM3QjlCQTEwNDJEMzJGMDAwOUQ0NDcgLyog
V2ViR0xSZW5kZXJidWZmZXIuaCAqLywKIAkJCQk0OUM3QjlCQjEwNDJEMzJGMDAwOUQ0NDcgLyog
V2ViR0xSZW5kZXJidWZmZXIuaWRsICovLAotCQkJCTQ5QzdCOUJGMTA0MkQzMkYwMDA5RDQ0NyAv
KiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovLAotCQkJCTQ5QzdCOUMwMTA0MkQzMkYwMDA5
RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCAqLywKLQkJCQk0OUM3QjlDMTEwNDJEMzJG
MDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbCAqLywKKwkJCQk0OUM3QjlCRjEw
NDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8sCisJCQkJNDlD
N0I5QzAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuaCAqLywKKwkJ
CQk0OUM3QjlDMTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGwg
Ki8sCisJCQkJRDM5QzcyREIxQTVDOEM4RTAwQUVEODlDIC8qIFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuY3BwICovLAorCQkJCUQzOUM3MkRDMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmggKi8sCisJCQkJRDNFMTRCQkIxQTVERThGNTAwOTdBNkU5IC8qIFdlYkdMMlJl
bmRlcmluZ0NvbnRleHQuaWRsICovLAorCQkJCUQzOUM3MkQ1MUE1QzhCMEIwMEFFRDg5QyAvKiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCAqLywKKwkJCQlEMzlDNzJENjFBNUM4QjBCMDBB
RUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovLAorCQkJCUQzRTE0QkJDMUE1
REU4RjUwMDk3QTZFOSAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbCAqLywKIAkJCQk0
OUM3QjlDMjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuY3BwICovLAogCQkJCTQ5QzdC
OUMzMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5oICovLAogCQkJCTQ5QzdCOUM0MTA0
MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5pZGwgKi8sCkBAIC0xODk4MSw4ICsxOTAwOSwx
MiBAQAogCQkJCTQ5QzdCOTg5MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMUHJvZ3JhbS5oICov
LAogCQkJCTQ5QzdCOThBMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMUmVuZGVyYnVmZmVyLmNw
cCAqLywKIAkJCQk0OUM3Qjk4QjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFJlbmRlcmJ1ZmZl
ci5oICovLAotCQkJCTQ5RUVEMTQwMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAgKi8sCi0JCQkJNDlFRUQxNDExMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmggKi8sCisJCQkJRDNFMTRCQjcxQTVEQ0Y3QjAwOTdBNkU5IC8qIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi8sCisJCQkJRDNFMTRCQjgxQTVEQ0Y3QjAw
OTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovLAorCQkJCTQ5RUVEMTQw
MTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwICovLAorCQkJ
CTQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaCAq
LywKKwkJCQlEM0UxNEJCMzFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250
ZXh0LmNwcCAqLywKKwkJCQlEM0UxNEJCNDFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0LmggKi8sCiAJCQkJNDlDN0I5OEYxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2Vi
R0xTaGFkZXIuY3BwICovLAogCQkJCTQ5QzdCOTkwMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdM
U2hhZGVyLmggKi8sCiAJCQkJQTA3RDMzNTMxNTJCNjMwRTAwMUI2MzkzIC8qIEpTV2ViR0xTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQuY3BwICovLApAQCAtMjEwOTEsNyArMjExMjMsOSBAQAogCQkJCTdD
NzNGQjE3MTkxRUY4MDgwMDdERTA2MSAvKiBKU1VzZXJNZXNzYWdlSGFuZGxlcnNOYW1lc3BhY2VD
dXN0b20uY3BwICovLAogCQkJCUJFNkRGNzA4MTcxQ0EyQzUwMERENTJCOCAvKiBKU1ZpZGVvVHJh
Y2tDdXN0b20uY3BwICovLAogCQkJCUJFNkRGNzBBMTcxQ0EyQzUwMERENTJCOCAvKiBKU1ZpZGVv
VHJhY2tMaXN0Q3VzdG9tLmNwcCAqLywKLQkJCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyog
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovLAorCQkJCUQzOUM3MkU1MUE1Qzk0
MEIwMEFFRDg5QyAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwICovLAor
CQkJCTQ5RUVEMTRDMTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRD
dXN0b20uY3BwICovLAorCQkJCUQzOUM3MkUzMUE1QzkzQUYwMEFFRDg5QyAvKiBKU1dlYkdMMlJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovLAogCQkJCUJDMjc1Qjc4MTFDNUQxQzMwMEM5MjA2
QyAvKiBKU1dlYktpdFBvaW50Q3VzdG9tLmNwcCAqLywKIAkJCQlFMUNBNUNCQjBFOENEQ0FGMDBF
OEVGOTAgLyogSlNXb3JrZXJDdXN0b20uY3BwICovLAogCQkJCUUxODI1OEFCMEVGM0NENzAwMDkz
MzI0MiAvKiBKU1dvcmtlckdsb2JhbFNjb3BlQ3VzdG9tLmNwcCAqLywKQEAgLTI1MzIxLDcgKzI1
MzU1LDcgQEAKIAkJCQk5M0YxRDVDMTEyRDUzMzU2MDA4MzJCRUMgLyogSlNXZWJHTExvc2VDb250
ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3Qjk5QzEwNDJEMkQzMDAwOUQ0NDcgLyogSlNX
ZWJHTFByb2dyYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOTlFMTA0MkQyRDMwMDA5RDQ0
NyAvKiBKU1dlYkdMUmVuZGVyYnVmZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUVFRDE0NzEw
NTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTQ5RUVEMTQ3MTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRl
eHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUEzMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dl
YkdMU2hhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMDdEMzM1NjE1MkI2MzBFMDAxQjYzOTMg
LyogSlNXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlD
N0I5QTUxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xUZXh0dXJlLmggaW4gSGVhZGVycyAqLywK
QEAgLTI1NTU4LDYgKzI1NTkyLDcgQEAKIAkJCQkxNDExNUI1MjA5Rjg0QjcxMDBDQTRGQzEgLyog
Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzEwQTIyOTdCRTAwNThEN0FEIC8qIE5v
ZGVGaWx0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NEZFNzMzMEEyMjk3QkUwMDU4RDdBRCAv
KiBOb2RlRmlsdGVyQ29uZGl0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlEM0UxNEJCNjFBNURD
RjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NTRGRTczNTBBMjI5N0JFMDA1OEQ3QUQgLyogTm9kZUl0ZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBODE4NzIxQjA5NzdEM0MwMDA1ODI2RDkgLyogTm9kZUxpc3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTYzMTg5QUUzMEU4M0EzMzMwMDAxMkU0MSAvKiBOb2RlUmFyZURhdGEuaCBp
biBIZWFkZXJzICovLApAQCAtMjU3ODksNiArMjU4MjQsNyBAQAogCQkJCUU0M0EwMjNCMTdFQjM3
MEEwMDRDREQyNSAvKiBSZW5kZXJFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVCN0E1
NTEwRjY1RDdBMDAzNzYzMDIgLyogUmVuZGVyRW1iZWRkZWRPYmplY3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4RUE3M0M0MEExOTAwRTMwMEE4RUY1RiAvKiBSZW5kZXJGaWVsZHNldC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRDNFMTRCQkExQTVEQ0Y3QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDY2Qzc3MzEwQUI2MDNGRDAwMjM4
Q0M0IC8qIFJlbmRlckZpbGVVcGxvYWRDb250cm9sLmggaW4gSGVhZGVycyAqLywKIAkJCQk1M0M4
Mjk4RTEzRDhEOTI3MDBERTJERUIgLyogUmVuZGVyRmxleGlibGVCb3guaCBpbiBIZWFkZXJzICov
LAogCQkJCTUwOENDQTRGMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFkLmggaW4g
SGVhZGVycyAqLywKQEAgLTI2MDU3LDYgKzI2MDkzLDcgQEAKIAkJCQlGNTVCM0REMjEyNTFGMTJE
MDAzRUYyNjkgLyogU2VhcmNoSW5wdXRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBQjcxNzA4
OTBCMzExODA4MDAxNzEyM0UgLyogU2VhcmNoUG9wdXBNZW51LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NzZGMzZFQjE0Njg2MjI1MDA1RTkzQjQgLyogU2VjdXJpdHlDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQlEMzlDNzJEODFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMEUwRkIwRTk3MkMzNTAwMjY1REVBIC8q
IFNlY3VyaXR5T3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0QwRTBGQzBFOTcyQzM1MDAy
NjVERUEgLyogU2VjdXJpdHlPcmlnaW5IYXNoLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NzREMkRB
NTE0NkE1MzVEMDBENTFGOEIgLyogU2VjdXJpdHlQb2xpY3kuaCBpbiBIZWFkZXJzICovLApAQCAt
MjY3NDUsNyArMjY3ODIsNyBAQAogCQkJCTQ5QzdCOUQ1MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJH
TE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5RDcxMDQyRDMyRjAwMDlENDQ3IC8q
IFdlYkdMUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5REExMDQyRDMyRjAwMDlE
NDQ3IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUM3QjlFMDEw
NDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
KwkJCQk0OUM3QjlFMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5RTMxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hh
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMDdEMzM1ODE1MkI2MzJEMDAxQjYzOTMgLyogV2Vi
R0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTAxRDNDRjg3MTRC
RDBBMzAwMEZFOTk3MCAvKiBXZWJHTFNoYXJlZE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NjgxNCw2ICsyNjg1MSw3IEBACiAJCQkJQTE0ODMyQzExODdGNjU3QTAwREE2M0E2IC8qIFdLVHlw
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNDgzMkMzMTg3RjY1REYwMERBNjNBNiAvKiBXS1V0
aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE0ODMyQzQxODdGNjYzQzAwREE2M0E2IC8q
IFdLVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJRDM5QzcyREUxQTVDOEM4RTAwQUVEODlDIC8q
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNDgzMkM2MTg3
RjY2OEYwMERBNjNBNiAvKiBXS1ZpZXdQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzk5
MTk5NzEyMDBEREY0MDBFQTA0MUMgLyogV09GRkZpbGVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTJFNDM0NjQ2MEY1NDZBODIwMEIwRjFCQSAvKiBXb3JrZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtMjc3OTAsNiArMjc4MjgsNyBAQAogCQkJCUJDNTNEQTQ4MTE0MzEzNEQwMDBEODE3RSAvKiBE
T01XcmFwcGVyV29ybGQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUExRDEzODEwQTUzMjU1MjAw
NjRCRjVGIC8qIERPTVhQYXRoLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJODVFOUUwQTIwQUIzQTBD
NzAwMDY5Q0QwIC8qIERPTVhQYXRoRXhwcmVzc2lvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCUQz
OUM3MkQ3MUE1QzhCMEIwMEFFRDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg1RTlFMEE2MEFCM0EwQzcwMDA2OUNEMCAvKiBET01YUGF0aFJl
c3VsdC5tbSBpbiBTb3VyY2VzICovLAogCQkJCUZEMTc2MkUzMTc2Njg2RUEwMEQ4MzZBOCAvKiBE
b3duU2FtcGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0NBNTk1RTBCMjdCRDlFMDBGQTAy
MUQgLyogRHJhZ0NvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODg0Myw2ICsyODg4
Miw3IEBACiAJCQkJRTQ0NjE0MUEwQ0Q2ODI2OTAwRkFEQTc1IC8qIEpTVGltZVJhbmdlcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkRBN0MxNjE4ODMyMkVCMDBDOTU0QjUgLyogSlNUb3VjaC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkRBN0MxODE4ODMyMkVCMDBDOTU0QjUgLyogSlNUb3Vj
aEV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQzOUM3MkU2MUE1Qzk0MEIwMEFFRDg5QyAv
KiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZEQTdDMUExODgzMjJFQjAwQzk1NEI1IC8qIEpTVG91Y2hMaXN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTA3MDMzNEU5MTQ1QTFGMzYwMDhEOEQ0NSAvKiBKU1RyYWNrQ3VzdG9tLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTA3ODQ2MzQyMTQ1QjE1MUEwMEE1OERGMSAvKiBKU1RyYWNrRXZl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yODg4Miw4ICsyODkyMiw4IEBACiAJCQkJOTNGMUQ1
QzAxMkQ1MzM1NjAwODMyQkVDIC8qIEpTV2ViR0xMb3NlQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0OUM3Qjk5QjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFByb2dyYW0uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5OUQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xSZW5k
ZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlFRUQxNDYxMDUxOTY5NDAwMDk5RkFC
IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVE
MTRGMTA1MTk3MUEwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQk0OUVFRDE0NjEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5RUVEMTRGMTA1MTk3MUEw
MDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDlDN0I5QTIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xTaGFkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTA3RDMzNTUxNTJCNjMwRTAwMUI2MzkzIC8qIEpTV2ViR0xTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5QTQxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTV2ViR0xUZXh0dXJlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjkwNDUs
NiArMjkwODUsNyBAQAogCQkJCTA3OEUwOTAzMTdEMTRDRUUwMDQyMEFBMSAvKiBNZWRpYVN0cmVh
bVRyYWNrRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdGRkRFNjgxODFBRUQ0MjAwNzJE
NDA5IC8qIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3
NjMwNkQyMTdFMTQ3OEQwMDVBN0M0RSAvKiBNZWRpYVN0cmVhbVRyYWNrU291cmNlc1JlcXVlc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDNFMTRCQjUxQTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRDY0MUVCRjE4MTlC
MzYwMDBFRTRDNDEgLyogTWVkaWFUaW1lQVZGb3VuZGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUNENjBDMEM2MTkzRTg3QzcwMDNDNjU2QiAvKiBNZWRpYVRpbWVRVEtpdC5tbSBpbiBTb3Vy
Y2VzICovLAogCQkJCTA3MDU4NTNBMTdGRTA3NzAwMDVGMkJDQiAvKiBNZWRpYVRyYWNrQ29uc3Ry
YWludC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5NTQ0LDYgKzI5NTg1LDcgQEAKIAkJCQk0QjZG
QTZGNzBDMzlFNEExMDAwODcwMTEgLyogU21hcnRSZXBsYWNlQ0YuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTRBRkQwMEIwREFGMzM1NDAwRjVGNTVDIC8qIFNNSUxUaW1lLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUU0QUZEMDBEMERBRjMzNTUwMEY1RjU1QyAvKiBTTUlMVGltZUNvbnRhaW5lci5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQlEMzlDNzJFNDFBNUM5M0FGMDBBRUQ4OUMgLyogSlNXZWJH
TDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEQ0QTMz
MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTEwRDRBMzYxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFBQkFFMUYxMDNDMTkxMzAwOEM1MjYwIC8qIFNv
Y2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjk4NDEsNiArMjk4
ODMsNyBAQAogCQkJCTY1NTBCNkE1MDk5REYwMjcwMDkwRDc4MSAvKiBUZXh0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUNFN0IyREI2MTU4NkFCQUQwMDk4QjNGQSAvKiBUZXh0QWx0ZXJuYXRpdmVX
aXRoUmFuZ2UubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjU0RENFNTE4ODEwNTFEMDAzRUVEQkIg
LyogVGV4dEF1dG9TaXppbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDNFMTRCQjkxQTVEQ0Y3
QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkzNzJDMDBDNDEyOTYxMUYxMDA1Qzk1NzUgLyogVGV4dEJvdW5kYXJpZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQjJBRkZDOTcwRDAwQTVERjAwMzAwNzREIC8qIFRleHRCb3VuZGFy
aWVzLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNEOEE1RjAxNUY1NkYyQzAwOThEMDcxIC8qIFRl
eHRCcmVha0l0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzAwMzEsNyArMzAwNzQsNyBA
QAogCQkJCTQ5QzdCOUQ0MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTE9iamVjdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0OUM3QjlENjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xQcm9ncmFtLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOUQ5MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJl
bmRlcmJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUM3QjlERjEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTQ5QzdC
OURGMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQ5QzdCOUUyMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBMDhDRjE1NDE1MkI3N0IzMDA5QzU3NzUgLyogV2ViR0xTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDFEM0NGODYxNEJEMEEz
MDAwRkU5OTcwIC8qIFdlYkdMU2hhcmVkT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMzAw
ODEsNiArMzAxMjQsNyBAQAogCQkJCTkzRUM0NEExMTg4RjRCQjgwMDY2MURGMSAvKiBXaGVlbEV2
ZW50RGVsdGFUcmFja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzODBGNDczMDlBMTFBQjQw
MDFGREIzNCAvKiBXaWRnZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTQ1MzkwNEQwRUFGRDYz
NzAwMzY5NUM4IC8qIFdpZGdldElPUy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUQzOUM3MkREMUE1
QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTkzODBGNDc4MDlBMTFBQ0MwMDFGREIzNCAvKiBXaWRnZXRNYWMubW0gaW4gU291cmNl
cyAqLywKIAkJCQk5MzlCMDJFRTBFQTJEQkM0MDBDNTQ1NzAgLyogV2lkdGhJdGVyYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQzgyNDNFODBEMENGRDc1MDA0NjBDOEYgLyogV2luZG93RmVh
dHVyZXMuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJ
KHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMyLDggKzMyLDEwIEBACiAjaW5j
bHVkZSAiSlNOb2RlLmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCi0jaW5jbHVkZSAiSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJKU1dlYkdMMlJl
bmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIgogI2VuZGlmCiAKIHVzaW5nIG5hbWVz
cGFjZSBKU0M7CkBAIC01MSw4ICs1MywxMiBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSosIEpTRE9NCiAgICAgICAgIHJldHVybiBqc051bGwoKTsKIAogI2lmIEVOQUJMRShXRUJH
TCkKLSAgICBpZiAob2JqZWN0LT5pczNkKCkpCi0gICAgICAgIHJldHVybiB3cmFwPEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0PihnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5n
Q29udGV4dCo+KG9iamVjdCkpOworICAgIGlmIChvYmplY3QtPmlzM2QoKSkgeworICAgICAgICBp
ZiAob2JqZWN0LT50eXBlKCkgPT0gIndlYmdsMSIpCisgICAgICAgICAgICByZXR1cm4gd3JhcDxK
U1dlYkdMMVJlbmRlcmluZ0NvbnRleHQ+KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0wx
UmVuZGVyaW5nQ29udGV4dCo+KG9iamVjdCkpOworICAgICAgICBpZiAob2JqZWN0LT50eXBlKCkg
PT0gIndlYmdsMiIpCisgICAgICAgICAgICByZXR1cm4gd3JhcDxKU1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQ+KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0wyUmVuZGVyaW5nQ29udGV4dCo+
KG9iamVjdCkpOworICAgIH0KICNlbmRpZgogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKG9iamVjdC0+aXMyZCgpKTsKICAgICByZXR1cm4gd3JhcDxKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRD4oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQqPihvYmplY3QpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRG9j
dW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRG9jdW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NyArMzcsNyBAQAogI2luY2x1ZGUgPHd0Zi9HZXRQdHIuaD4KIAogI2lmIEVOQUJMRShXRUJHTCkK
LSNpbmNsdWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogI2VuZGlmCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRT
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1
c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNIVE1M
Q2FudmFzRWxlbWVudEN1c3RvbS5jcHAJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSw3ICszNSw3IEBACiAKICNpZiBFTkFCTEUoV0VCR0wpCiAjaW5jbHVkZSAiSlNE
aWN0aW9uYXJ5LmgiCi0jaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKICNpbmNsdWRlICJXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzLmgiCiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
CShyZXZpc2lvbiAxNzY5OTQpCShmcm9tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKwor
I2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisKKyNpbmNsdWRlICJBTkdMRUlu
c3RhbmNlZEFycmF5cy5oIgorI2luY2x1ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKKyNpbmNs
dWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25D
b2RlLmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW1h
Z2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNBTkdMRUluc3RhbmNlZEFycmF5cy5oIgorI2luY2x1
ZGUgIkpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkpTRVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljLmgiCisjaW5jbHVkZSAiSlNIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1
ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTSW1hZ2VEYXRhLmgiCisjaW5j
bHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCisjaW5jbHVkZSAiSlNPRVNTdGFuZGFyZERl
cml2YXRpdmVzLmgiCisjaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxvYXQuaCIKKyNpbmNsdWRlICJK
U09FU1RleHR1cmVGbG9hdExpbmVhci5oIgorI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9h
dC5oIgorI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oIgorI2luY2x1ZGUg
IkpTT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRlICJKU1dlYkdMQnVmZmVyLmgiCisj
aW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgiCisjaW5jbHVkZSAiSlNXZWJH
TENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKKyNpbmNsdWRlICJKU1dlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDLmgiCisjaW5jbHVkZSAiSlNXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCisjaW5j
bHVkZSAiSlNXZWJHTERlYnVnU2hhZGVycy5oIgorI2luY2x1ZGUgIkpTV2ViR0xEZXB0aFRleHR1
cmUuaCIKKyNpbmNsdWRlICJKU1dlYkdMRHJhd0J1ZmZlcnMuaCIKKyNpbmNsdWRlICJKU1dlYkdM
RnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMTG9zZUNvbnRleHQuaCIKKyNpbmNsdWRl
ICJKU1dlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJidWZmZXIuaCIKKyNp
bmNsdWRlICJKU1dlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiSlNXZWJHTFRleHR1cmUuaCIKKyNp
bmNsdWRlICJKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiSlNXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTLmgiCisjaW5jbHVkZSAiSlNXZWJLaXRDU1NNYXRyaXguaCIKKyNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk9FU0VsZW1lbnRJbmRleFVpbnQuaCIK
KyNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCisjaW5jbHVkZSAiT0VTVGV4dHVy
ZUZsb2F0LmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgiCisjaW5jbHVkZSAi
T0VTVGV4dHVyZUhhbGZGbG9hdC5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXRMaW5l
YXIuaCIKKyNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIgorI2luY2x1ZGUgIldlYkdM
QnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgorI2luY2x1
ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJl
c3NlZFRleHR1cmVTM1RDLmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgor
I2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5jbHVkZSAiV2ViR0xEZXB0aFRleHR1
cmUuaCIKKyNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCisjaW5jbHVkZSAiV2ViR0xFeHRl
bnNpb24uaCIKKyNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xH
ZXRJbmZvLmgiCisjaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdM
UHJvZ3JhbS5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUg
IldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+
CisjaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9U
eXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCisjaWYgRU5BQkxFKFZJREVPKQorI2luY2x1ZGUg
IkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0hUTUxWaWRlb0VsZW1lbnQuaCIKKyNl
bmRpZgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBjb25zdCBXZWJHTEdldEluZm8mIGluZm8pCit7CisgICAgc3dpdGNoIChpbmZv
LmdldFR5cGUoKSkgeworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJvb2w6CisgICAgICAg
IHJldHVybiBqc0Jvb2xlYW4oaW5mby5nZXRCb29sKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZv
OjprVHlwZUJvb2xBcnJheTogeworICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0Owor
ICAgICAgICBjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlID0gaW5mby5nZXRCb29sQXJyYXkoKTsK
KyAgICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytpaSkKKyAg
ICAgICAgICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1ZVtpaV0pKTsKKyAgICAgICAgcmV0
dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgfQor
ICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUZsb2F0OgorICAgICAgICByZXR1cm4ganNOdW1i
ZXIoaW5mby5nZXRGbG9hdCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVJbnQ6Cisg
ICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEludCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0
SW5mbzo6a1R5cGVOdWxsOgorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlU3RyaW5nOgorICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUo
ZXhlYywgaW5mby5nZXRTdHJpbmcoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlVW5z
aWduZWRJbnQ6CisgICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldFVuc2lnbmVkSW50KCkp
OworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMQnVmZmVyOgorICAgICAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xCdWZmZXIoKSk7CisgICAg
Y2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xGbG9hdEFycmF5OgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xGbG9hdEFycmF5KCkpOworICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRnJhbWVidWZmZXI6CisgICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEZyYW1lYnVmZmVyKCkpOwor
ICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMSW50QXJyYXk6CisgICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEludEFycmF5KCkpOworICAg
IC8vIEZJWE1FOiBpbXBsZW1lbnQgV2ViR0xPYmplY3RBcnJheQorICAgIC8vIGNhc2UgV2ViR0xH
ZXRJbmZvOjprVHlwZVdlYkdMT2JqZWN0QXJyYXk6CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xQcm9ncmFtOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IGluZm8uZ2V0V2ViR0xQcm9ncmFtKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdl
YkdMUmVuZGVyYnVmZmVyOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IGluZm8uZ2V0V2ViR0xSZW5kZXJidWZmZXIoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xUZXh0dXJlOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IGluZm8uZ2V0V2ViR0xUZXh0dXJlKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdl
YkdMVW5zaWduZWRCeXRlQXJyYXk6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KCkpOworICAgIGNhc2UgV2ViR0xH
ZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRJbnRBcnJheToKKyAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVW5zaWduZWRJbnRBcnJheSgpKTsKKyAg
ICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOgorICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUygpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9Cit9CisKK2VudW0gT2JqZWN0
VHlwZSB7CisgICAga0J1ZmZlciwga1JlbmRlcmJ1ZmZlciwga1RleHR1cmUsIGtWZXJ0ZXhBdHRy
aWIKK307CisKK3N0YXRpYyBKU1ZhbHVlIGdldE9iamVjdFBhcmFtZXRlcihKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dCogb2JqLCBFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFR5cGUgb2JqZWN0VHlwZSkK
K3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVybiBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGV4ZWMpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCYgY29udGV4dCA9IG9iai0+aW1wbCgpOworICAgIHVuc2lnbmVkIHRhcmdldCA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB1bnNp
Z25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Cisg
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKKyAgICBXZWJHTEdldEluZm8gaW5mbzsKKyAgICBzd2l0Y2ggKG9iamVjdFR5cGUpIHsKKyAg
ICBjYXNlIGtCdWZmZXI6CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldEJ1ZmZlclBhcmFtZXRl
cih0YXJnZXQsIHBuYW1lLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1JlbmRlcmJ1
ZmZlcjoKKyAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKHRh
cmdldCwgcG5hbWUsIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrVGV4dHVyZToKKyAg
ICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0VGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIGVjKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrVmVydGV4QXR0cmliOgorICAgICAgICAvLyB0YXJn
ZXQgPT4gaW5kZXgKKyAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0VmVydGV4QXR0cmliKHRhcmdl
dCwgcG5hbWUsIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChlYykgeworICAg
ICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgb2JqLT5nbG9iYWxPYmplY3QoKSwg
aW5mbyk7Cit9CisKK2VudW0gV2hpY2hQcm9ncmFtQ2FsbCB7CisgICAga1Byb2dyYW1QYXJhbWV0
ZXIsIGtVbmlmb3JtCit9OworCitzdGF0aWMgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywg
SlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lv
bikKK3sKKyAgICBpZiAoIWV4dGVuc2lvbikKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAg
IHN3aXRjaCAoZXh0ZW5zaW9uLT5nZXROYW1lKCkpIHsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9u
OjpXZWJHTExvc2VDb250ZXh0TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTExvc2VDb250ZXh0Kj4oZXh0ZW5zaW9uKSk7CisgICAg
Y2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUU2hhZGVyVGV4dHVyZUxPRE5hbWU6CisgICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUU2hhZGVyVGV4dHVy
ZUxPRCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVFRleHR1cmVG
aWx0ZXJBbmlzb3Ryb3BpY05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKj4oZXh0ZW5zaW9u
KSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTU3RhbmRhcmREZXJpdmF0aXZlc05hbWU6
CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VT
U3RhbmRhcmREZXJpdmF0aXZlcyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNp
b246Ok9FU1RleHR1cmVGbG9hdE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2Jh
bE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0Kj4oZXh0ZW5zaW9uKSk7CisgICAg
Y2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUZsb2F0TGluZWFyTmFtZToKKyAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxv
YXRMaW5lYXIqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0
dXJlSGFsZkZsb2F0TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlSGFsZkZsb2F0Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2Fz
ZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhck5hbWU6CisgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhh
bGZGbG9hdExpbmVhcio+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9F
U1ZlcnRleEFycmF5T2JqZWN0TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNWZXJ0ZXhBcnJheU9iamVjdCo+KGV4dGVuc2lvbikpOwor
ICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU0VsZW1lbnRJbmRleFVpbnROYW1lOgorICAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU0VsZW1lbnRJ
bmRleFVpbnQqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERl
YnVnUmVuZGVyZXJJbmZvTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlYnVnUmVuZGVyZXJJbmZvKj4oZXh0ZW5zaW9uKSk7Cisg
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1NoYWRlcnNOYW1lOgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVidWdTaGFk
ZXJzKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVz
c2VkVGV4dHVyZUFUQ05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyo+KGV4dGVuc2lvbikpOwor
ICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQ05hbWU6
CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4
dGVuc2lvbjo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVENOYW1lOgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZXB0
aFRleHR1cmVOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PFdlYkdMRGVwdGhUZXh0dXJlKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xEcmF3QnVmZmVyc05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEcmF3QnVmZmVycyo+KGV4dGVuc2lv
bikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkFOR0xFSW5zdGFuY2VkQXJyYXlzTmFtZToK
KyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxBTkdM
RUluc3RhbmNlZEFycmF5cyo+KGV4dGVuc2lvbikpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4ganNOdWxsKCk7Cit9CisKK3ZvaWQgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQor
eworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgpKTsKK30KKworSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGV4
ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBK
U1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAg
ICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVk
T3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICBWZWN0
b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4gc2hhZGVyczsKKyAgICBib29sIHN1Y2NlZWQgPSBjb250
ZXh0LmdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBq
c051bGwoKTsKKyAgICB9CisgICAgaWYgKCFzdWNjZWVkKQorICAgICAgICByZXR1cm4ganNOdWxs
KCk7CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKKyAgICBmb3IgKHNpemVfdCBpaSA9
IDA7IGlpIDwgc2hhZGVycy5zaXplKCk7ICsraWkpCisgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0KCksIHNoYWRlcnNbaWldLmdldCgpKSk7CisgICAgcmV0dXJuIGNv
bnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKK30KKworSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXh0ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGV4
ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOworCisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgp
OworICAgIGNvbnN0IFN0cmluZyBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9T
dHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVu
c2lvbiA9IGNvbnRleHQuZ2V0RXh0ZW5zaW9uKG5hbWUpOworICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBleHRlbnNpb24pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJl
dHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga0J1ZmZlcik7Cit9CisKK0pTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFt
ZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAh
PSAzKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVh
dGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7CisgICAg
dW5zaWduZWQgdGFyZ2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVj
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIHVuc2lnbmVkIGF0dGFjaG1lbnQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgyKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGlu
Zm8gPSBjb250ZXh0LmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJnZXQsIGF0
dGFjaG1lbnQsIHBuYW1lLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAxKQorICAgICAgICByZXR1cm4gZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihleGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZv
IGluZm8gPSBjb250ZXh0LmdldFBhcmFtZXRlcihwbmFtZSwgZWMpOworICAgIGlmIChlYykgewor
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGlu
Zm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFy
YW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ICE9IDIpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAg
ICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjKTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNv
bnRleHQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBwbmFtZSwgZWMpOworICAgIGlmIChl
YykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5k
ZXJidWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmpl
Y3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1JlbmRlcmJ1ZmZlcik7Cit9CisKK0pTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgaWYgKCFleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKS5pbmhlcml0cyhKU1dlYkdMU2hhZGVyOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gdGhy
b3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IEpTV2ViR0xTaGFk
ZXI6OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgdW5zaWduZWQg
cG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIs
IHBuYW1lLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQor
eworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICBpZiAo
Y29udGV4dC5pc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBW
ZWN0b3I8U3RyaW5nPiB2YWx1ZSA9IGNvbnRleHQuZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOwor
ICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBp
aSA8IHZhbHVlLnNpemUoKTsgKytpaSkKKyAgICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmdXaXRo
Q2FjaGUoZXhlYywgdmFsdWVbaWldKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMs
IDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0VGV4UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
Z2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtUZXh0dXJlKTsKK30KKworSlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybShFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihl
eGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNX
ZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAg
aWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFw
cGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBpZiAoIWxvY2F0aW9uICYmICFl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250
ZXh0LmdldFVuaWZvcm0ocHJvZ3JhbSwgbG9jYXRpb24sIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZv
KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmli
KEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMs
IGV4ZWMsIGtWZXJ0ZXhBdHRyaWIpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3Qg
aW5saW5lQ2FwYWNpdHk+Citib29sIHRvVmVjdG9yKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6
OkpTVmFsdWUgdmFsdWUsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKK3sKKyAg
ICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpT
Qzo6SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKKyAgICBpbnQzMl90IGxlbmd0
aCA9IG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50
b0ludDMyKGV4ZWMpOworCisgICAgaWYgKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0
aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB2ZWN0b3IucmVzaXplKGxlbmd0aCk7CisK
KyAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU0M6
OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOworICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHZlY3Rvcltp
XSA9IHN0YXRpY19jYXN0PFQ+KHYudG9OdW1iZXIoZXhlYykpOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCitlbnVtIERhdGFGdW5jdGlvblRvQ2FsbCB7CisgICAgZl91bmlmb3JtMXYs
IGZfdW5pZm9ybTJ2LCBmX3VuaWZvcm0zdiwgZl91bmlmb3JtNHYsCisgICAgZl92ZXJ0ZXhBdHRy
aWIxdiwgZl92ZXJ0ZXhBdHRyaWIydiwgZl92ZXJ0ZXhBdHRyaWIzdiwgZl92ZXJ0ZXhBdHRyaWI0
dgorfTsKKworZW51bSBEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgeworICAgIGZfdW5pZm9ybU1h
dHJpeDJmdiwgZl91bmlmb3JtTWF0cml4M2Z2LCBmX3VuaWZvcm1NYXRyaXg0ZnYKK307CisKK3N0
YXRpYyBib29sIGZ1bmN0aW9uRm9yVW5pZm9ybShEYXRhRnVuY3Rpb25Ub0NhbGwgZikKK3sKKyAg
ICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5pZm9ybTF2OgorICAgIGNhc2UgZl91bmlmb3Jt
MnY6CisgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAgICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1bmN0aW9u
VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNv
bnRleHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICBy
ZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7CisgICAgCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uID0gMDsKKyAgICBsb25nIGluZGV4ID0gLTE7CisgICAgCisgICAgaWYgKGZ1bmN0aW9uRm9y
VW5pZm9ybShmKSkgeworICAgICAgICBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246
OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgICAgIGlmICghbG9j
YXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkp
CisgICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgfSBlbHNlCisg
ICAgICAgIGluZGV4ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsK
KworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgICAgIAorICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0
b0Zsb2F0MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSAgICAKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
ICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIGlmICh3ZWJHTEFycmF5KSB7Cisg
ICAgICAgIHN3aXRjaCAoZikgeworICAgICAgICBjYXNlIGZfdW5pZm9ybTF2OgorICAgICAgICAg
ICAgY29udGV4dC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjoKKyAgICAgICAgICAg
IGNvbnRleHQudW5pZm9ybTJmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgICAgICBj
b250ZXh0LnVuaWZvcm0zZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICAgICAgY29u
dGV4dC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OgorICAgICAgICAgICAg
Y29udGV4dC52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgICAg
IGNvbnRleHQudmVydGV4QXR0cmliMmZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6CisgICAgICAgICAg
ICBjb250ZXh0LnZlcnRleEF0dHJpYjNmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OgorICAgICAgICAg
ICAgY29udGV4dC52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKwor
ICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OworICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGV4ZWMpOworCisgICAgc3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoK
KyAgICAgICAgY29udGV4dC51bmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5
LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAg
ICAgICBjb250ZXh0LnVuaWZvcm0yZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6
ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAg
IGNvbnRleHQudW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCks
IGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgY29u
dGV4dC51bmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6CisgICAgICAgIGNv
bnRleHQudmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgY29u
dGV4dC52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OgorICAgICAgICBjb250
ZXh0LnZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6CisgICAgICAgIGNvbnRl
eHQudmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRh
dGFGdW5jdGlvbmkoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBw
ZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghbG9jYXRpb24gJiYgIWV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgCisgICAgUmVmUHRyPEludDMyQXJyYXk+IHdl
YkdMQXJyYXkgPSB0b0ludDMyQXJyYXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworCisg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgaWYgKHdlYkdMQXJyYXkpIHsKKyAgICAgICAg
c3dpdGNoIChmKSB7CisgICAgICAgIGNhc2UgZl91bmlmb3JtMXY6CisgICAgICAgICAgICBjb250
ZXh0LnVuaWZvcm0xaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICAgICAgY29udGV4
dC51bmlmb3JtMml2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAgICAgICAgICAgIGNvbnRleHQu
dW5pZm9ybTNpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtNHY6CisgICAgICAgICAgICBjb250ZXh0LnVu
aWZvcm00aXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIH0KKworCisgICAgVmVjdG9yPGludCwgNjQ+IGFycmF5Owor
ICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5
KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworCisgICAgc3dpdGNoIChm
KSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtMWl2KGxv
Y2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0yaXYobG9jYXRp
b24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwg
YXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBmX3VuaWZvcm00djoKKyAgICAgICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJh
eS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworc3RhdGljIEpTQzo6SlNWYWx1
ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50
aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7
CisKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxv
Y2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICgh
bG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKworICAgIGJvb2wgdHJh
bnNwb3NlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgICAgICAKKyAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9G
bG9hdDMyQXJyYXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikpOworICAgICAgICAKKyAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBzd2l0
Y2ggKGYpIHsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6CisgICAgICAgICAgICBj
b250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5n
ZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtTWF0
cml4M2Z2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQor
CisgICAgVmVjdG9yPGZsb2F0LCA2ND4gYXJyYXk7CisgICAgaWYgKCF0b1ZlY3RvcihleGVjLCBl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgYXJyYXkpKQorICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoZXhlYyk7CisKKyAgICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5pZm9ybU1h
dHJpeDJmdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFu
c3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgZl91bmlmb3JtTWF0cml4M2Z2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRy
aXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVj
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6CisgICAgICAg
IGNvbnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRh
KCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitK
U0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMXYsIGV4
ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTFpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0
aW9uaShmX3VuaWZvcm0xdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOworfQor
CitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMnYs
IGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uZihmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOwor
fQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3Jt
NHYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTRpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uaShmX3VuaWZvcm00diwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhlY1N0YXRl
KiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4
MmZ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgzZnYsIGV4ZWMsIGltcGwoKSk7
Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJp
eDRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0
cml4KGZfdW5pZm9ybU1hdHJpeDRmdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIxdiwgZXhl
YywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWIyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFG
dW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIydiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIzdiwg
ZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRh
dGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWI0diwgZXhlYywgaW1wbCgpKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMVJlbmRlcmlu
Z0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3
MjcgKzI2LDE3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCi0K
LSNpbmNsdWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiQU5HTEVJ
bnN0YW5jZWRBcnJheXMuaCIKLSNpbmNsdWRlICJFWFRTaGFkZXJUZXh0dXJlTE9ELmgiCi0jaW5j
bHVkZSAiRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgotI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTElt
YWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkpTQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKLSNpbmNs
dWRlICJKU0VYVFNoYWRlclRleHR1cmVMT0QuaCIKLSNpbmNsdWRlICJKU0VYVFRleHR1cmVGaWx0
ZXJBbmlzb3Ryb3BpYy5oIgotI2luY2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNs
dWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2lu
Y2x1ZGUgIkpTT0VTRWxlbWVudEluZGV4VWludC5oIgotI2luY2x1ZGUgIkpTT0VTU3RhbmRhcmRE
ZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAi
SlNPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxv
YXQuaCIKLSNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRl
ICJKU09FU1ZlcnRleEFycmF5T2JqZWN0LmgiCi0jaW5jbHVkZSAiSlNXZWJHTEJ1ZmZlci5oIgot
I2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgotI2luY2x1ZGUgIkpTV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCi0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUzNUQy5oIgotI2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgotI2lu
Y2x1ZGUgIkpTV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKLSNpbmNsdWRlICJKU1dlYkdMRGVwdGhUZXh0
dXJlLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAiSlNXZWJH
TEZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTExvc2VDb250ZXh0LmgiCi0jaW5jbHVk
ZSAiSlNXZWJHTFByb2dyYW0uaCIKLSNpbmNsdWRlICJKU1dlYkdMUmVuZGVyYnVmZmVyLmgiCi0j
aW5jbHVkZSAiSlNXZWJHTFNoYWRlci5oIgotI2luY2x1ZGUgIkpTV2ViR0xUZXh0dXJlLmgiCi0j
aW5jbHVkZSAiSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgotI2luY2x1ZGUgIkpTV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUy5oIgotI2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4LmgiCi0jaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50Lmgi
Ci0jaW5jbHVkZSAiT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUgIk9FU1RleHR1
cmVGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUg
Ik9FU1RleHR1cmVIYWxmRmxvYXQuaCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0TGlu
ZWFyLmgiCi0jaW5jbHVkZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJH
TEJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKLSNpbmNs
dWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQy5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8uaCIK
LSNpbmNsdWRlICJXZWJHTERlYnVnU2hhZGVycy5oIgotI2luY2x1ZGUgIldlYkdMRGVwdGhUZXh0
dXJlLmgiCi0jaW5jbHVkZSAiV2ViR0xEcmF3QnVmZmVycy5oIgotI2luY2x1ZGUgIldlYkdMRXh0
ZW5zaW9uLmgiCi0jaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdM
R2V0SW5mby5oIgotI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJH
TFByb2dyYW0uaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCi0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5o
PgotI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
VHlwZWRBcnJheUlubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+Ci0j
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KLQotI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRl
ICJIVE1MVmlkZW9FbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNIVE1MVmlkZW9FbGVtZW50LmgiCi0j
ZW5kaWYKKyNpbmNsdWRlICJKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIEpTQzsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSlNWYWx1ZSB0b0pT
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3Qg
V2ViR0xHZXRJbmZvJiBpbmZvKQotewotICAgIHN3aXRjaCAoaW5mby5nZXRUeXBlKCkpIHsKLSAg
ICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVCb29sOgotICAgICAgICByZXR1cm4ganNCb29sZWFu
KGluZm8uZ2V0Qm9vbCgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVCb29sQXJyYXk6
IHsKLSAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgY29uc3QgVmVj
dG9yPGJvb2w+JiB2YWx1ZSA9IGluZm8uZ2V0Qm9vbEFycmF5KCk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGlpID0gMDsgaWkgPCB2YWx1ZS5zaXplKCk7ICsraWkpCi0gICAgICAgICAgICBsaXN0LmFw
cGVuZChqc0Jvb2xlYW4odmFsdWVbaWldKSk7Ci0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJh
eShleGVjLCAwLCBnbG9iYWxPYmplY3QsIGxpc3QpOwotICAgIH0KLSAgICBjYXNlIFdlYkdMR2V0
SW5mbzo6a1R5cGVGbG9hdDoKLSAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZm8uZ2V0RmxvYXQo
KSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlSW50OgotICAgICAgICByZXR1cm4ganNO
dW1iZXIoaW5mby5nZXRJbnQoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlTnVsbDoK
LSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVN0
cmluZzoKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGluZm8uZ2V0U3Ry
aW5nKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVVuc2lnbmVkSW50OgotICAgICAg
ICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRVbnNpZ25lZEludCgpKTsKLSAgICBjYXNlIFdlYkdM
R2V0SW5mbzo6a1R5cGVXZWJHTEJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMQnVmZmVyKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZv
OjprVHlwZVdlYkdMRmxvYXRBcnJheToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBpbmZvLmdldFdlYkdMRmxvYXRBcnJheSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5m
bzo6a1R5cGVXZWJHTEZyYW1lYnVmZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIGluZm8uZ2V0V2ViR0xGcmFtZWJ1ZmZlcigpKTsKLSAgICBjYXNlIFdlYkdMR2V0
SW5mbzo6a1R5cGVXZWJHTEludEFycmF5OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIGluZm8uZ2V0V2ViR0xJbnRBcnJheSgpKTsKLSAgICAvLyBGSVhNRTogaW1wbGVt
ZW50IFdlYkdMT2JqZWN0QXJyYXkKLSAgICAvLyBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJH
TE9iamVjdEFycmF5OgotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMUHJvZ3JhbToK
LSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUHJv
Z3JhbSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFJlbmRlcmJ1ZmZlcjoK
LSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUmVu
ZGVyYnVmZmVyKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVGV4dHVyZToK
LSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVGV4
dHVyZSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkQnl0ZUFy
cmF5OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJH
TFVuc2lnbmVkSW50QXJyYXk6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkSW50QXJyYXkoKSk7Ci0gICAgY2FzZSBXZWJHTEdldElu
Zm86OmtUeXBlV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzoKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKSk7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotfQotCi1lbnVtIE9iamVjdFR5cGUgewotICAgIGtCdWZm
ZXIsIGtSZW5kZXJidWZmZXIsIGtUZXh0dXJlLCBrVmVydGV4QXR0cmliCi19OwotCi1zdGF0aWMg
SlNWYWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG9iaiwg
RXhlY1N0YXRlKiBleGVjLCBPYmplY3RUeXBlIG9iamVjdFR5cGUpCi17Ci0gICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4
Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRl
eHQgPSBvYmotPmltcGwoKTsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgV2ViR0xHZXRJ
bmZvIGluZm87Ci0gICAgc3dpdGNoIChvYmplY3RUeXBlKSB7Ci0gICAgY2FzZSBrQnVmZmVyOgot
ICAgICAgICBpbmZvID0gY29udGV4dC5nZXRCdWZmZXJQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwg
ZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGtSZW5kZXJidWZmZXI6Ci0gICAgICAgIGlu
Zm8gPSBjb250ZXh0LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Uga1RleHR1cmU6Ci0gICAgICAgIGluZm8gPSBjb250
ZXh0LmdldFRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2Uga1ZlcnRleEF0dHJpYjoKLSAgICAgICAgLy8gdGFyZ2V0ID0+IGluZGV4Ci0gICAg
ICAgIGluZm8gPSBjb250ZXh0LmdldFZlcnRleEF0dHJpYih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAg
IHJldHVybiB0b0pTKGV4ZWMsIG9iai0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1lbnVt
IFdoaWNoUHJvZ3JhbUNhbGwgewotICAgIGtQcm9ncmFtUGFyYW1ldGVyLCBrVW5pZm9ybQotfTsK
LQotc3RhdGljIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24pCi17Ci0gICAgaWYgKCFl
eHRlbnNpb24pCi0gICAgICAgIHJldHVybiBqc051bGwoKTsKLSAgICBzd2l0Y2ggKGV4dGVuc2lv
bi0+Z2V0TmFtZSgpKSB7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xMb3NlQ29udGV4
dE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8V2ViR0xMb3NlQ29udGV4dCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNp
b246OkVYVFNoYWRlclRleHR1cmVMT0ROYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFNoYWRlclRleHR1cmVMT0QqPihleHRlbnNpb24p
KTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNO
YW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246Ok9FU1N0YW5kYXJkRGVyaXZhdGl2ZXNOYW1lOgotICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1N0YW5kYXJkRGVyaXZhdGl2
ZXMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxv
YXROYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PE9FU1RleHR1cmVGbG9hdCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNp
b246Ok9FU1RleHR1cmVGbG9hdExpbmVhck5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0TGluZWFyKj4oZXh0ZW5z
aW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6
Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VT
VGV4dHVyZUhhbGZGbG9hdCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246
Ok9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXJOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIqPihl
eHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNWZXJ0ZXhBcnJheU9iamVj
dE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8T0VTVmVydGV4QXJyYXlPYmplY3QqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0
ZW5zaW9uOjpPRVNFbGVtZW50SW5kZXhVaW50TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Kj4oZXh0ZW5z
aW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05h
bWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8
V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRl
bnNpb246OldlYkdMRGVidWdTaGFkZXJzTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlYnVnU2hhZGVycyo+KGV4dGVuc2lvbikp
OwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVENOYW1l
OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVBVEMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0
ZW5zaW9uOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVENOYW1lOgotICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVQVlJUQyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29t
cHJlc3NlZFRleHR1cmVTM1RDTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyo+KGV4dGVuc2lv
bikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVwdGhUZXh0dXJlTmFtZToKLSAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERl
cHRoVGV4dHVyZSo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdM
RHJhd0J1ZmZlcnNOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IHN0YXRpY19jYXN0PFdlYkdMRHJhd0J1ZmZlcnMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdl
YkdMRXh0ZW5zaW9uOjpBTkdMRUluc3RhbmNlZEFycmF5c05hbWU6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5jZWRBcnJheXMq
PihleHRlbnNpb24pKTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIGpzTnVsbCgpOwotfQotCi12b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSlNXZWJHTDFSZW5k
ZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRv
cikKIHsKICAgICB2aXNpdG9yLmFkZE9wYXF1ZVJvb3QoJmltcGwoKSk7CiB9CiAKLUpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dGFjaGVkU2hhZGVycyhFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVy
biBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFt
ID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7
Ci0gICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVm
aW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAg
VmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNoYWRlcnM7Ci0gICAgYm9vbCBzdWNjZWVkID0g
Y29udGV4dC5nZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgc2hhZGVycywgZWMpOwotICAgIGlm
IChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1
cm4ganNOdWxsKCk7Ci0gICAgfQotICAgIGlmICghc3VjY2VlZCkKLSAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgZm9yIChzaXplX3Qg
aWkgPSAwOyBpaSA8IHNoYWRlcnMuc2l6ZSgpOyArK2lpKQotICAgICAgICBsaXN0LmFwcGVuZCh0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBzaGFkZXJzW2lpXS5nZXQoKSkpOwotICAgIHJldHVy
biBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19Ci0KLUpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGVuc2lvbihFeGVjU3RhdGUqIGV4
ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVy
biBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKLQotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGlt
cGwoKTsKLSAgICBjb25zdCBTdHJpbmcgbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMRXh0ZW5zaW9uKiBl
eHRlbnNpb24gPSBjb250ZXh0LmdldEV4dGVuc2lvbihuYW1lKTsKLSAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QoKSwgZXh0ZW5zaW9uKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0QnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtCdWZmZXIpOwotfQotCi1K
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQ
YXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50
KCkgIT0gMykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwot
ICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIo
ZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLSAgICB1bnNpZ25lZCBhdHRhY2htZW50ID0gZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMikudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5m
byBpbmZvID0gY29udGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodGFyZ2V0
LCBhdHRhY2htZW50LCBwbmFtZSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1KU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVj
KQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMSkKLSAgICAgICAgcmV0dXJu
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0
SW5mbyBpbmZvID0gY29udGV4dC5nZXRQYXJhbWV0ZXIocG5hbWUsIGVjKTsKLSAgICBpZiAoZWMp
IHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgp
LCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3Jh
bVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291
bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7
Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgV2ViR0xHZXRJbmZvIGluZm8g
PSBjb250ZXh0LmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsKLSAgICBp
ZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0
T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtSZW5kZXJidWZmZXIpOwotfQotCi1KU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0
dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIGlmICghZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSAmJiAhZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkuaW5oZXJpdHMoSlNXZWJHTFNoYWRlcjo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJu
IHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBKU1dlYkdM
U2hhZGVyOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIHVuc2ln
bmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hh
ZGVyLCBwbmFtZSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKEV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAg
aWYgKGNvbnRleHQuaXNDb250ZXh0TG9zdCgpKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0g
ICAgVmVjdG9yPFN0cmluZz4gdmFsdWUgPSBjb250ZXh0LmdldFN1cHBvcnRlZEV4dGVuc2lvbnMo
KTsKLSAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgIGZvciAoc2l6ZV90IGlpID0g
MDsgaWkgPCB2YWx1ZS5zaXplKCk7ICsraWkpCi0gICAgICAgIGxpc3QuYXBwZW5kKGpzU3RyaW5n
V2l0aENhY2hlKGV4ZWMsIHZhbHVlW2lpXSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShl
eGVjLCAwLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFRleFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0
dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrVGV4dHVyZSk7Ci19Ci0KLUpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm0oRXhlY1N0YXRlKiBleGVjKQot
ewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4
ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9
IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwot
ICAgIGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmlu
ZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRv
V3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAm
JiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0g
Y29udGV4dC5nZXRVbmlmb3JtKHByb2dyYW0sIGxvY2F0aW9uLCBlYyk7Ci0gICAgaWYgKGVjKSB7
Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwg
aW5mbyk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0
dHJpYihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0
aGlzLCBleGVjLCBrVmVydGV4QXR0cmliKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6
ZV90IGlubGluZUNhcGFjaXR5PgotYm9vbCB0b1ZlY3RvcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywg
SlNDOjpKU1ZhbHVlIHZhbHVlLCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi17
Ci0gICAgaWYgKCF2YWx1ZS5pc09iamVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgaW50MzJfdCBs
ZW5ndGggPSBvYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0
aCkudG9JbnQzMihleGVjKTsKLQotICAgIGlmICghdmVjdG9yLnRyeVJlc2VydmVDYXBhY2l0eShs
ZW5ndGgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdmVjdG9yLnJlc2l6ZShsZW5ndGgp
OwotCi0gICAgZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
SlNDOjpKU1ZhbHVlIHYgPSBvYmplY3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2ZWN0
b3JbaV0gPSBzdGF0aWNfY2FzdDxUPih2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotZW51bSBEYXRhRnVuY3Rpb25Ub0NhbGwgewotICAgIGZfdW5pZm9y
bTF2LCBmX3VuaWZvcm0ydiwgZl91bmlmb3JtM3YsIGZfdW5pZm9ybTR2LAotICAgIGZfdmVydGV4
QXR0cmliMXYsIGZfdmVydGV4QXR0cmliMnYsIGZfdmVydGV4QXR0cmliM3YsIGZfdmVydGV4QXR0
cmliNHYKLX07Ci0KLWVudW0gRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIHsKLSAgICBmX3VuaWZv
cm1NYXRyaXgyZnYsIGZfdW5pZm9ybU1hdHJpeDNmdiwgZl91bmlmb3JtTWF0cml4NGZ2Ci19Owot
Ci1zdGF0aWMgYm9vbCBmdW5jdGlvbkZvclVuaWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxsIGYpCi17
Ci0gICAgc3dpdGNoIChmKSB7Ci0gICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICBjYXNlIGZfdW5p
Zm9ybTJ2OgotICAgIGNhc2UgZl91bmlmb3JtM3Y6Ci0gICAgY2FzZSBmX3VuaWZvcm00djoKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotICAgIHJldHVy
biBmYWxzZTsKLX0KLQotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdW5j
dGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0
JiBjb250ZXh0KQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAg
ICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIAotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiA9IDA7Ci0gICAgbG9uZyBpbmRleCA9IC0xOwotICAgIAotICAgIGlmIChmdW5jdGlv
bkZvclVuaWZvcm0oZikpIHsKLSAgICAgICAgbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0
aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgICAgICBpZiAo
IWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQotICAgICAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIH0gZWxz
ZQotICAgICAgICBpbmRleCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhl
Yyk7Ci0KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwotICAgICAgICAKLSAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5
ID0gdG9GbG9hdDMyQXJyYXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
ICAgICAgICAKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAod2ViR0xBcnJheSkg
ewotICAgICAgICBzd2l0Y2ggKGYpIHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICAg
ICAgICAgIGNvbnRleHQudW5pZm9ybTFmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAgICAg
ICAgICBjb250ZXh0LnVuaWZvcm0yZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICAg
ICAgY29udGV4dC51bmlmb3JtM2Z2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgICAg
IGNvbnRleHQudW5pZm9ybTRmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIxdjoKLSAgICAgICAg
ICAgIGNvbnRleHQudmVydGV4QXR0cmliMWZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMnY6Ci0gICAgICAg
ICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjJmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OgotICAgICAg
ICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djoKLSAgICAg
ICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliNGZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9
Ci0KLSAgICBWZWN0b3I8ZmxvYXQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMs
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBhcnJheSkpCi0gICAgICAgIHJldHVybiB0aHJv
d1R5cGVFcnJvcihleGVjKTsKLQotICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91bmlmb3Jt
MXY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBh
cnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoK
LSAgICAgICAgY29udGV4dC51bmlmb3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5
LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAg
ICAgICBjb250ZXh0LnVuaWZvcm0zZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6
ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAg
IGNvbnRleHQudW5pZm9ybTRmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCks
IGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OgotICAgICAg
ICBjb250ZXh0LnZlcnRleEF0dHJpYjFmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXpl
KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdmVydGV4QXR0cmliMnY6Ci0gICAgICAg
IGNvbnRleHQudmVydGV4QXR0cmliMmZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUo
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjoKLSAgICAgICAg
Y29udGV4dC52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgp
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OgotICAgICAgICBj
b250ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotc3RhdGljIEpTQzo6SlNWYWx1
ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhl
YywgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9X
cmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWxvY2F0aW9uICYm
ICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gIAotICAgIFJlZlB0cjxJbnQzMkFycmF5
PiB3ZWJHTEFycmF5ID0gdG9JbnQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsK
LQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlmICh3ZWJHTEFycmF5KSB7Ci0gICAg
ICAgIHN3aXRjaCAoZikgewotICAgICAgICBjYXNlIGZfdW5pZm9ybTF2OgotICAgICAgICAgICAg
Y29udGV4dC51bmlmb3JtMWl2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICAgICAgICAgIGNv
bnRleHQudW5pZm9ybTJpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtM3Y6Ci0gICAgICAgICAgICBjb250
ZXh0LnVuaWZvcm0zaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybTR2OgotICAgICAgICAgICAgY29udGV4
dC51bmlmb3JtNGl2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLQotICAgIFZlY3RvcjxpbnQsIDY0PiBhcnJh
eTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBh
cnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLQotICAgIHN3aXRj
aCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTFp
dihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtMml2KGxv
Y2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0zaXYobG9jYXRp
b24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTRpdihsb2NhdGlvbiwg
YXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIHNldERPTUV4Y2VwdGlvbihl
eGVjLCBlYyk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyBKU0M6OkpT
VmFsdWUgZGF0YUZ1bmN0aW9uTWF0cml4KERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCBmLCBKU0M6
OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQotewotICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOwotCi0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZv
cm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBp
ZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9y
TnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0KLSAgICBib29s
IHRyYW5zcG9zZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsK
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAgIAotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICAgICAgCi0gICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9
IHRvRmxvYXQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgCi0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKHdlYkdMQXJyYXkpIHsKLSAgICAgICAg
c3dpdGNoIChmKSB7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2OgotICAgICAgICAg
ICAgY29udGV4dC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJy
YXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9y
bU1hdHJpeDNmdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlv
biwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVu
aWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAg
IH0KLQotICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OwotICAgIGlmICghdG9WZWN0b3IoZXhl
YywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGFycmF5KSkKLSAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOwotCi0gICAgc3dpdGNoIChmKSB7Ci0gICAgY2FzZSBmX3VuaWZv
cm1NYXRyaXgyZnY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwg
dHJhbnNwb3NlLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDNmdjoKLSAgICAgICAgY29udGV4dC51bmlmb3Jt
TWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgp
LCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtTWF0cml4NGZ2OgotICAg
ICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXku
ZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg
c2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0K
LQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KEpTQzo6
RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTF2
LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm0xaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFG
dW5jdGlvbmkoZl91bmlmb3JtMXYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0ydiwgZXhlYywgaW1wbCgpKTsK
LX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9y
bTJ2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0zZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRh
dGFGdW5jdGlvbmYoZl91bmlmb3JtM3YsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgp
KTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2
KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5p
Zm9ybTR2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm00aXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJu
IGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtNHYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1h
dHJpeDJmdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2LCBleGVjLCBpbXBs
KCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1N
YXRyaXg0ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlv
bk1hdHJpeChmX3VuaWZvcm1NYXRyaXg0ZnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMXYs
IGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBk
YXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEpTQzo6RXhl
Y1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmli
M3YsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliNGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVy
biBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliNHYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5k
ZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKyNpbmNs
dWRlICJKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAordm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAg
IHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2VDdXN0b20uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKyNpbmNsdWRlICJK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKKworI2luY2x1ZGUgIkFOR0xFSW5zdGFuY2Vk
QXJyYXlzLmgiCisjaW5jbHVkZSAiRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkVY
VFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1l
bnQuaCIKKyNpbmNsdWRlICJKU0FOR0xFSW5zdGFuY2VkQXJyYXlzLmgiCisjaW5jbHVkZSAiSlNF
WFRTaGFkZXJUZXh0dXJlTE9ELmgiCisjaW5jbHVkZSAiSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMuaCIKKyNpbmNsdWRlICJKU0hUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNI
VE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJK
U09FU0VsZW1lbnRJbmRleFVpbnQuaCIKKyNpbmNsdWRlICJKU09FU1N0YW5kYXJkRGVyaXZhdGl2
ZXMuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdC5oIgorI2luY2x1ZGUgIkpTT0VTVGV4
dHVyZUZsb2F0TGluZWFyLmgiCisjaW5jbHVkZSAiSlNPRVNUZXh0dXJlSGFsZkZsb2F0LmgiCisj
aW5jbHVkZSAiSlNPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCisjaW5jbHVkZSAiSlNPRVNW
ZXJ0ZXhBcnJheU9iamVjdC5oIgorI2luY2x1ZGUgIkpTV2ViR0xCdWZmZXIuaCIKKyNpbmNsdWRl
ICJKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKKyNpbmNsdWRlICJKU1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQy5oIgorI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMz
VEMuaCIKKyNpbmNsdWRlICJKU1dlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKKyNpbmNsdWRlICJK
U1dlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5jbHVkZSAiSlNXZWJHTERlcHRoVGV4dHVyZS5oIgor
I2luY2x1ZGUgIkpTV2ViR0xEcmF3QnVmZmVycy5oIgorI2luY2x1ZGUgIkpTV2ViR0xGcmFtZWJ1
ZmZlci5oIgorI2luY2x1ZGUgIkpTV2ViR0xMb3NlQ29udGV4dC5oIgorI2luY2x1ZGUgIkpTV2Vi
R0xQcm9ncmFtLmgiCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUg
IkpTV2ViR0xTaGFkZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMVGV4dHVyZS5oIgorI2luY2x1ZGUg
IkpTV2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKKyNpbmNsdWRlICJKU1dlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVMuaCIKKyNpbmNsdWRlICJKU1dlYktpdENTU01hdHJpeC5oIgorI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiT0VTRWxlbWVudEluZGV4VWludC5oIgorI2luY2x1
ZGUgIk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQu
aCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJPRVNUZXh0
dXJlSGFsZkZsb2F0LmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oIgor
I2luY2x1ZGUgIk9FU1ZlcnRleEFycmF5T2JqZWN0LmgiCisjaW5jbHVkZSAiV2ViR0xCdWZmZXIu
aCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgiCisjaW5jbHVkZSAiV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCisjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4
dHVyZVMzVEMuaCIKKyNpbmNsdWRlICJXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCisjaW5jbHVk
ZSAiV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKKyNpbmNsdWRlICJXZWJHTERlcHRoVGV4dHVyZS5oIgor
I2luY2x1ZGUgIldlYkdMRHJhd0J1ZmZlcnMuaCIKKyNpbmNsdWRlICJXZWJHTEV4dGVuc2lvbi5o
IgorI2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTEdldEluZm8u
aCIKKyNpbmNsdWRlICJXZWJHTExvc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xQcm9ncmFt
LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorI2luY2x1ZGUgIldl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCIKKyNpbmNsdWRlIDxydW50aW1lL0Vycm9yLmg+Cisj
aW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBl
ZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheXMuaD4KKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCisjaWYgRU5BQkxFKFZJREVPKQorI2luY2x1ZGUgIkhU
TUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0hUTUxWaWRlb0VsZW1lbnQuaCIKKyNlbmRp
ZgorCit1c2luZyBuYW1lc3BhY2UgSlNDOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBjb25zdCBXZWJHTEdldEluZm8mIGluZm8pCit7CisgICAgc3dpdGNoIChpbmZvLmdl
dFR5cGUoKSkgeworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJvb2w6CisgICAgICAgIHJl
dHVybiBqc0Jvb2xlYW4oaW5mby5nZXRCb29sKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjpr
VHlwZUJvb2xBcnJheTogeworICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAg
ICAgICBjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlID0gaW5mby5nZXRCb29sQXJyYXkoKTsKKyAg
ICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytpaSkKKyAgICAg
ICAgICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1ZVtpaV0pKTsKKyAgICAgICAgcmV0dXJu
IGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCwgbGlzdCk7CisgICAgfQorICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUZsb2F0OgorICAgICAgICByZXR1cm4ganNOdW1iZXIo
aW5mby5nZXRGbG9hdCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVJbnQ6CisgICAg
ICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEludCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5m
bzo6a1R5cGVOdWxsOgorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgY2FzZSBXZWJHTEdl
dEluZm86OmtUeXBlU3RyaW5nOgorICAgICAgICByZXR1cm4ganNTdHJpbmdXaXRoQ2FjaGUoZXhl
YywgaW5mby5nZXRTdHJpbmcoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlVW5zaWdu
ZWRJbnQ6CisgICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldFVuc2lnbmVkSW50KCkpOwor
ICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMQnVmZmVyOgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xCdWZmZXIoKSk7CisgICAgY2Fz
ZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xGbG9hdEFycmF5OgorICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xGbG9hdEFycmF5KCkpOworICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRnJhbWVidWZmZXI6CisgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEZyYW1lYnVmZmVyKCkpOworICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMSW50QXJyYXk6CisgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEludEFycmF5KCkpOworICAgICAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IFdlYkdMT2JqZWN0QXJyYXkKKyAgICAgICAgLy8gY2FzZSBX
ZWJHTEdldEluZm86OmtUeXBlV2ViR0xPYmplY3RBcnJheToKKyAgICBjYXNlIFdlYkdMR2V0SW5m
bzo6a1R5cGVXZWJHTFByb2dyYW06CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgaW5mby5nZXRXZWJHTFByb2dyYW0oKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xSZW5kZXJidWZmZXI6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgaW5mby5nZXRXZWJHTFJlbmRlcmJ1ZmZlcigpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5m
bzo6a1R5cGVXZWJHTFRleHR1cmU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgaW5mby5nZXRXZWJHTFRleHR1cmUoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xVbnNpZ25lZEJ5dGVBcnJheToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xv
YmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVW5zaWduZWRCeXRlQXJyYXkoKSk7CisgICAgY2FzZSBX
ZWJHTEdldEluZm86OmtUeXBlV2ViR0xVbnNpZ25lZEludEFycmF5OgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xVbnNpZ25lZEludEFycmF5KCkp
OworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6
CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KK30KKworZW51bSBP
YmplY3RUeXBlIHsKKyAgICBrQnVmZmVyLCBrUmVuZGVyYnVmZmVyLCBrVGV4dHVyZSwga1ZlcnRl
eEF0dHJpYgorfTsKKworc3RhdGljIEpTVmFsdWUgZ2V0T2JqZWN0UGFyYW1ldGVyKEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSogb2JqLCBFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFR5cGUgb2Jq
ZWN0VHlwZSkKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAg
IHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gb2JqLT5pbXBsKCk7CisgICAg
dW5zaWduZWQgdGFyZ2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVj
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSku
dG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgIFdlYkdMR2V0SW5mbyBpbmZvOworICAgIHN3aXRjaCAo
b2JqZWN0VHlwZSkgeworICAgIGNhc2Uga0J1ZmZlcjoKKyAgICAgICAgaW5mbyA9IGNvbnRleHQu
Z2V0QnVmZmVyUGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBrUmVuZGVyYnVmZmVyOgorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIGtUZXh0dXJlOgorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRUZXhQYXJhbWV0ZXIodGFy
Z2V0LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtWZXJ0ZXhBdHRyaWI6
CisgICAgICAgIC8vIHRhcmdldCA9PiBpbmRleAorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRW
ZXJ0ZXhBdHRyaWIodGFyZ2V0LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBvYmot
Pmdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworZW51bSBXaGljaFByb2dyYW1DYWxsIHsKKyAg
ICBrUHJvZ3JhbVBhcmFtZXRlciwga1VuaWZvcm0KK307CisKK3N0YXRpYyBKU1ZhbHVlIHRvSlMo
RXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBXZWJHTEV4
dGVuc2lvbiogZXh0ZW5zaW9uKQoreworICAgIGlmICghZXh0ZW5zaW9uKQorICAgICAgICByZXR1
cm4ganNOdWxsKCk7CisgICAgc3dpdGNoIChleHRlbnNpb24tPmdldE5hbWUoKSkgeworICAgIGNh
c2UgV2ViR0xFeHRlbnNpb246OldlYkdMTG9zZUNvbnRleHROYW1lOgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMTG9zZUNvbnRleHQqPihl
eHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRTaGFkZXJUZXh0dXJlTE9E
TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDxFWFRTaGFkZXJUZXh0dXJlTE9EKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVu
c2lvbjo6RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljTmFtZToKKyAgICAgICAgcmV0dXJuIHRv
SlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNTdGFuZGFy
ZERlcml2YXRpdmVzTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDxPRVNTdGFuZGFyZERlcml2YXRpdmVzKj4oZXh0ZW5zaW9uKSk7CisgICAg
Y2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUZsb2F0TmFtZToKKyAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxvYXQqPihl
eHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXRMaW5l
YXJOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PE9FU1RleHR1cmVGbG9hdExpbmVhcio+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246Ok9FU1RleHR1cmVIYWxmRmxvYXROYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXQqPihleHRl
bnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlSGFsZkZsb2F0TGlu
ZWFyTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBX
ZWJHTEV4dGVuc2lvbjo6T0VTVmVydGV4QXJyYXlPYmplY3ROYW1lOgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1ZlcnRleEFycmF5T2JqZWN0
Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTRWxlbWVudEluZGV4
VWludE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8T0VTRWxlbWVudEluZGV4VWludCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246OldlYkdMRGVidWdSZW5kZXJlckluZm9OYW1lOgorICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVidWdSZW5kZXJlckluZm8q
PihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERlYnVnU2hhZGVy
c05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8V2ViR0xEZWJ1Z1NoYWRlcnMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5z
aW9uOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0
LCBzdGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMqPihleHRlbnNpb24pKTsK
KyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQ05hbWU6
CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVMzVEMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0
ZW5zaW9uOjpXZWJHTERlcHRoVGV4dHVyZU5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZXB0aFRleHR1cmUqPihleHRlbnNpb24p
KTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERyYXdCdWZmZXJzTmFtZToKKyAgICAg
ICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERyYXdC
dWZmZXJzKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6QU5HTEVJbnN0
YW5jZWRBcnJheXNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qs
IHN0YXRpY19jYXN0PEFOR0xFSW5zdGFuY2VkQXJyYXlzKj4oZXh0ZW5zaW9uKSk7CisgICAgfQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBqc051bGwoKTsKK30KKwordm9p
ZCBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgp
KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEF0dGFjaGVk
U2hhZGVycyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSA8IDEpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOwor
ICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworICAgIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFkZXI+PiBzaGFk
ZXJzOworICAgIGJvb2wgc3VjY2VlZCA9IGNvbnRleHQuZ2V0QXR0YWNoZWRTaGFkZXJzKHByb2dy
YW0sIHNoYWRlcnMsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIH0KKyAgICBpZiAoIXN1
Y2NlZWQpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZl
ciBsaXN0OworICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCBzaGFkZXJzLnNpemUoKTsgKytp
aSkKKyAgICAgICAgbGlzdC5hcHBlbmQodG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgc2hhZGVy
c1tpaV0uZ2V0KCkpKTsKKyAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xvYmFs
T2JqZWN0KCksIGxpc3QpOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0RXh0ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24o
ZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIAorICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgY29uc3QgU3Ry
aW5nIG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uID0gY29udGV4dC5n
ZXRFeHRlbnNpb24obmFtZSk7CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IGV4dGVuc2lvbik7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpn
ZXRCdWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmpl
Y3RQYXJhbWV0ZXIodGhpcywgZXhlYywga0J1ZmZlcik7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKKyAg
ICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAg
dW5zaWduZWQgdGFyZ2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVj
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIHVuc2lnbmVkIGF0dGFjaG1lbnQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgyKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGlu
Zm8gPSBjb250ZXh0LmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJnZXQsIGF0
dGFjaG1lbnQsIHBuYW1lLCBlYyk7CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVj
KQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMSkKKyAgICAgICAgcmV0dXJu
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRz
RXJyb3IoZXhlYykpOworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgdW5zaWduZWQgcG5h
bWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
V2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFBhcmFtZXRlcihwbmFtZSwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4
Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAg
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYgY29udGV4dCA9IGltcGwoKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdM
UHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICBpZiAo
IXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICB1bnNpZ25lZCBw
bmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFt
LCBwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhl
YywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtSZW5k
ZXJidWZmZXIpOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
U2hhZGVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1l
bnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9u
KGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250
ZXh0ID0gaW1wbCgpOworICAgIGlmICghZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRl
ZmluZWRPck51bGwoKSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaW5oZXJpdHMoSlNX
ZWJHTFNoYWRlcjo6aW5mbygpKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMp
OworICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBKU1dlYkdMU2hhZGVyOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFdlYkdMR2V0SW5mbyBp
bmZvID0gY29udGV4dC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBwbmFtZSwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKKyAgICBpZiAoY29udGV4dC5p
c0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBWZWN0b3I8U3Ry
aW5nPiB2YWx1ZSA9IGNvbnRleHQuZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOworICAgIE1hcmtl
ZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVl
LnNpemUoKTsgKytpaSkKKyAgICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoZXhl
YywgdmFsdWVbaWldKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2Jh
bE9iamVjdCgpLCBsaXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFRleFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldE9i
amVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrVGV4dHVyZSk7Cit9CisKK0pTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVybiBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOworICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OworICAgIGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRl
ZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAg
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246
OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgaWYgKCFsb2NhdGlv
biAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIFdlYkdMR2V0SW5mbyBpbmZv
ID0gY29udGV4dC5nZXRVbmlmb3JtKHByb2dyYW0sIGxvY2F0aW9uLCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qo
KSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRW
ZXJ0ZXhBdHRyaWIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmplY3RQYXJh
bWV0ZXIodGhpcywgZXhlYywga1ZlcnRleEF0dHJpYik7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KK2Jvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIEpTQzo6SlNWYWx1ZSB2YWx1ZSwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVj
dG9yKQoreworICAgIGlmICghdmFsdWUuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKKyAg
ICBpbnQzMl90IGxlbmd0aCA9IG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlO
YW1lcy0+bGVuZ3RoKS50b0ludDMyKGV4ZWMpOworICAgIAorICAgIGlmICghdmVjdG9yLnRyeVJl
c2VydmVDYXBhY2l0eShsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdmVjdG9y
LnJlc2l6ZShsZW5ndGgpOworICAgIAorICAgIGZvciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0
aDsgKytpKSB7CisgICAgICAgIEpTQzo6SlNWYWx1ZSB2ID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgdmVjdG9yW2ldID0gc3RhdGljX2Nhc3Q8VD4odi50b051bWJlcihleGVj
KSk7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCitlbnVtIERhdGFGdW5jdGlv
blRvQ2FsbCB7CisgICAgZl91bmlmb3JtMXYsIGZfdW5pZm9ybTJ2LCBmX3VuaWZvcm0zdiwgZl91
bmlmb3JtNHYsCisgICAgZl92ZXJ0ZXhBdHRyaWIxdiwgZl92ZXJ0ZXhBdHRyaWIydiwgZl92ZXJ0
ZXhBdHRyaWIzdiwgZl92ZXJ0ZXhBdHRyaWI0dgorfTsKKworZW51bSBEYXRhRnVuY3Rpb25NYXRy
aXhUb0NhbGwgeworICAgIGZfdW5pZm9ybU1hdHJpeDJmdiwgZl91bmlmb3JtTWF0cml4M2Z2LCBm
X3VuaWZvcm1NYXRyaXg0ZnYKK307CisKK3N0YXRpYyBib29sIGZ1bmN0aW9uRm9yVW5pZm9ybShE
YXRhRnVuY3Rpb25Ub0NhbGwgZikKK3sKKyAgICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5p
Zm9ybTF2OgorICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAg
ICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OiBi
cmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgSlNDOjpKU1ZhbHVl
IGRhdGFGdW5jdGlvbmYoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVj
LCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQoreworICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIAor
ICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IDA7CisgICAgbG9uZyBpbmRleCA9
IC0xOworICAgIAorICAgIGlmIChmdW5jdGlvbkZvclVuaWZvcm0oZikpIHsKKyAgICAgICAgbG9j
YXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgICAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRB
cmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICAgICAgcmV0dXJuIHRocm93
VHlwZUVycm9yKGV4ZWMpOworICAgIH0gZWxzZQorICAgICAgICBpbmRleCA9IGV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7CisgICAgCisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAKKyAgICBSZWZQ
dHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMSkpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgaWYgKHdlYkdMQXJyYXkpIHsKKyAgICAgICAgc3dpdGNoIChmKSB7CisgICAgICAgIGNhc2Ug
Zl91bmlmb3JtMXY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIHdl
YkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZf
dW5pZm9ybTJ2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB3ZWJH
TEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3Vu
aWZvcm0zdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTNmdihsb2NhdGlvbiwgd2ViR0xB
cnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlm
b3JtNHY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm00ZnYobG9jYXRpb24sIHdlYkdMQXJy
YXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdmVydGV4
QXR0cmliMXY6CisgICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjFmdihpbmRleCwgd2Vi
R0xBcnJheS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBmX3ZlcnRl
eEF0dHJpYjJ2OgorICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHdl
YkdMQXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl92ZXJ0
ZXhBdHRyaWIzdjoKKyAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliM2Z2KGluZGV4LCB3
ZWJHTEFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdmVy
dGV4QXR0cmliNHY6CisgICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRleCwg
d2ViR0xBcnJheS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgfQorICAgIAorICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5Owor
ICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5
KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIAorICAgIHN3aXRj
aCAoZikgeworICAgIGNhc2UgZl91bmlmb3JtMXY6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTFm
dihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBmX3VuaWZvcm0ydjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtMmZ2KGxv
Y2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGZfdW5pZm9ybTN2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0zZnYobG9jYXRp
b24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgZl91bmlmb3JtNHY6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihsb2NhdGlvbiwg
YXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBmX3ZlcnRleEF0dHJpYjF2OgorICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjFmdihpbmRl
eCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IGZfdmVydGV4QXR0cmliMnY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMmZ2KGluZGV4
LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Zl92ZXJ0ZXhBdHRyaWIzdjoKKyAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgs
IGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBm
X3ZlcnRleEF0dHJpYjR2OgorICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRleCwg
YXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKK30KKworc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFGdW5jdGlvblRv
Q2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYg
Y29udGV4dCkKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAg
IHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMCkpOworICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihleGVjKTsKKyAgICAKKyAgICBSZWZQdHI8SW50MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvSW50
MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgCisgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgaWYgKHdlYkdMQXJyYXkpIHsKKyAgICAgICAgc3dpdGNoIChmKSB7
CisgICAgICAgIGNhc2UgZl91bmlmb3JtMXY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0x
aXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMml2
KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihs
b2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgZl91bmlmb3JtNHY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYobG9j
YXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworICAgIH0KKyAgICAKKyAgICAKKyAgICBWZWN0b3I8aW50LCA2ND4gYXJyYXk7CisgICAg
aWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQor
ICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgCisgICAgc3dpdGNoIChm
KSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtMWl2KGxv
Y2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0yaXYobG9jYXRp
b24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwg
YXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBmX3VuaWZvcm00djoKKyAgICAgICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJh
eS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworc3RhdGljIEpTQzo6SlNWYWx1
ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQoreworICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZt
KCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhl
YykpOworICAgIAorICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xV
bmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Cisg
ICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmlu
ZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIAor
ICAgIGJvb2wgdHJhbnNwb3NlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFu
KGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgCisgICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9
IHRvRmxvYXQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKKyAgICAKKyAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBzd2l0
Y2ggKGYpIHsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6CisgICAgICAgICAgICBj
b250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5n
ZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtTWF0
cml4M2Z2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQor
ICAgIAorICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OworICAgIGlmICghdG9WZWN0b3IoZXhl
YywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworICAgIAorICAgIHN3aXRjaCAoZikgeworICAgIGNhc2UgZl91
bmlmb3JtTWF0cml4MmZ2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRp
b24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6CisgICAgICAgIGNvbnRleHQudW5p
Zm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKCksIGFycmF5LnNp
emUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoK
KyAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFy
cmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlm
b3JtMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25m
KGZfdW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOworfQor
CitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMmZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9y
bTJ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp1bmlmb3JtMml2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2Z2KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTN2LCBleGVj
LCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25pKGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkp
OworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3Jt
NGl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZf
dW5pZm9ybTR2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4MmZ2LCBleGVj
LCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtTWF0cml4M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBk
YXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2LCBleGVjLCBpbXBsKCkpOworfQor
CitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4
NGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRy
aXgoZl91bmlmb3JtTWF0cml4NGZ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZnYoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIxdiwg
ZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dmVydGV4QXR0cmliMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMnYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pT
Qzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjNmdihK
U0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRl
eEF0dHJpYjN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWI0diwgZXhlYywgaW1wbCgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdM
KQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDc1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJM
RShXRUJHTCkKLQotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCi0KLSNpbmNs
dWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkVYVFNoYWRlclRleHR1cmVM
T0QuaCIKLSNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKLSNpbmNsdWRl
ICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNs
dWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiSlNBTkdMRUluc3RhbmNlZEFycmF5
cy5oIgotI2luY2x1ZGUgIkpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgotI2luY2x1ZGUgIkpTRVhU
VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgiCi0jaW5jbHVkZSAiSlNIVE1MQ2FudmFzRWxlbWVu
dC5oIgotI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkpTSW1hZ2VE
YXRhLmgiCi0jaW5jbHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCi0jaW5jbHVkZSAiSlNP
RVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0jaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxvYXQuaCIK
LSNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIkpTT0VTVGV4
dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5o
IgotI2luY2x1ZGUgIkpTT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJKU1dlYkdM
QnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgiCi0jaW5j
bHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJKU1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERlYnVnUmVuZGVyZXJJ
bmZvLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERlYnVnU2hhZGVycy5oIgotI2luY2x1ZGUgIkpTV2Vi
R0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJKU1dlYkdMRHJhd0J1ZmZlcnMuaCIKLSNpbmNs
dWRlICJKU1dlYkdMRnJhbWVidWZmZXIuaCIKLSNpbmNsdWRlICJKU1dlYkdMTG9zZUNvbnRleHQu
aCIKLSNpbmNsdWRlICJKU1dlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJi
dWZmZXIuaCIKLSNpbmNsdWRlICJKU1dlYkdMU2hhZGVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTFRl
eHR1cmUuaCIKLSNpbmNsdWRlICJKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCi0jaW5jbHVkZSAi
SlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCi0jaW5jbHVkZSAiSlNXZWJLaXRDU1NNYXRy
aXguaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9FU0VsZW1lbnRJ
bmRleFVpbnQuaCIKLSNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0jaW5jbHVk
ZSAiT0VTVGV4dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgi
Ci0jaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVI
YWxmRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIgotI2lu
Y2x1ZGUgIldlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgotI2luY2x1ZGUg
IldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCi0jaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRl
cmVySW5mby5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCi0jaW5jbHVkZSAiV2Vi
R0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCi0jaW5jbHVk
ZSAiV2ViR0xFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCi0jaW5j
bHVkZSAiV2ViR0xHZXRJbmZvLmgiCi0jaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5o
IgotI2luY2x1ZGUgIldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCIKLSNpbmNsdWRlIDxydW50
aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRB
cnJheXMuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotCi0jaWYgRU5BQkxFKFZJREVP
KQotI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0hUTUxWaWRlb0Vs
ZW1lbnQuaCIKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLXN0YXRpYyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RPTUdsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEdldEluZm8mIGluZm8pCi17Ci0gICAg
c3dpdGNoIChpbmZvLmdldFR5cGUoKSkgewotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJv
b2w6Ci0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oaW5mby5nZXRCb29sKCkpOwotICAgIGNhc2Ug
V2ViR0xHZXRJbmZvOjprVHlwZUJvb2xBcnJheTogewotICAgICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBsaXN0OwotICAgICAgICBjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlID0gaW5mby5nZXRC
b29sQXJyYXkoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUo
KTsgKytpaSkKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1ZVtpaV0pKTsK
LSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCwgbGlz
dCk7Ci0gICAgfQotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUZsb2F0OgotICAgICAgICBy
ZXR1cm4ganNOdW1iZXIoaW5mby5nZXRGbG9hdCgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6
a1R5cGVJbnQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEludCgpKTsKLSAgICBj
YXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVOdWxsOgotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0g
ICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlU3RyaW5nOgotICAgICAgICByZXR1cm4ganNTdHJp
bmdXaXRoQ2FjaGUoZXhlYywgaW5mby5nZXRTdHJpbmcoKSk7Ci0gICAgY2FzZSBXZWJHTEdldElu
Zm86OmtUeXBlVW5zaWduZWRJbnQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldFVu
c2lnbmVkSW50KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMQnVmZmVyOgot
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xCdWZm
ZXIoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xGbG9hdEFycmF5OgotICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xGbG9hdEFy
cmF5KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRnJhbWVidWZmZXI6Ci0g
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEZyYW1l
YnVmZmVyKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMSW50QXJyYXk6Ci0g
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTEludEFy
cmF5KCkpOwotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgV2ViR0xPYmplY3RBcnJheQotICAgIC8v
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMT2JqZWN0QXJyYXk6Ci0gICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlV2ViR0xQcm9ncmFtOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xQcm9ncmFtKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJ
bmZvOjprVHlwZVdlYkdMUmVuZGVyYnVmZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xSZW5kZXJidWZmZXIoKSk7Ci0gICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlV2ViR0xUZXh0dXJlOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xUZXh0dXJlKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJ
bmZvOjprVHlwZVdlYkdMVW5zaWduZWRCeXRlQXJyYXk6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KCkpOwotICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRJbnRBcnJheToKLSAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVW5zaWduZWRJbnRB
cnJheSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUygpKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJ
bXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci19Ci0K
LWVudW0gT2JqZWN0VHlwZSB7Ci0gICAga0J1ZmZlciwga1JlbmRlcmJ1ZmZlciwga1RleHR1cmUs
IGtWZXJ0ZXhBdHRyaWIKLX07Ci0KLXN0YXRpYyBKU1ZhbHVlIGdldE9iamVjdFBhcmFtZXRlcihK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dCogb2JqLCBFeGVjU3RhdGUqIGV4ZWMsIE9iamVjdFR5cGUg
b2JqZWN0VHlwZSkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAg
ICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3Vn
aEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IG9iai0+aW1wbCgpOwotICAgIHVuc2ln
bmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50
MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbzsKLSAgICBzd2l0Y2ggKG9iamVj
dFR5cGUpIHsKLSAgICBjYXNlIGtCdWZmZXI6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0LmdldEJ1
ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2Uga1JlbmRlcmJ1ZmZlcjoKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0UmVuZGVyYnVmZmVy
UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBr
VGV4dHVyZToKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0VGV4UGFyYW1ldGVyKHRhcmdldCwg
cG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrVmVydGV4QXR0cmliOgotICAg
ICAgICAvLyB0YXJnZXQgPT4gaW5kZXgKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0VmVydGV4
QXR0cmliKHRhcmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlm
IChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgb2JqLT5nbG9i
YWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLWVudW0gV2hpY2hQcm9ncmFtQ2FsbCB7Ci0gICAga1By
b2dyYW1QYXJhbWV0ZXIsIGtVbmlmb3JtCi19OwotCi1zdGF0aWMgSlNWYWx1ZSB0b0pTKEV4ZWNT
dGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViR0xFeHRlbnNp
b24qIGV4dGVuc2lvbikKLXsKLSAgICBpZiAoIWV4dGVuc2lvbikKLSAgICAgICAgcmV0dXJuIGpz
TnVsbCgpOwotICAgIHN3aXRjaCAoZXh0ZW5zaW9uLT5nZXROYW1lKCkpIHsKLSAgICBjYXNlIFdl
YkdMRXh0ZW5zaW9uOjpXZWJHTExvc2VDb250ZXh0TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTExvc2VDb250ZXh0Kj4oZXh0ZW5z
aW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUU2hhZGVyVGV4dHVyZUxPRE5hbWU6
Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhU
U2hhZGVyVGV4dHVyZUxPRCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246
OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTU3RhbmRhcmREZXJp
dmF0aXZlc05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8T0VTU3RhbmRhcmREZXJpdmF0aXZlcyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2Ug
V2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVGbG9hdE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0Kj4oZXh0ZW5z
aW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUZsb2F0TGluZWFyTmFt
ZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxP
RVNUZXh0dXJlRmxvYXRMaW5lYXIqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5z
aW9uOjpPRVNUZXh0dXJlSGFsZkZsb2F0TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlSGFsZkZsb2F0Kj4oZXh0ZW5zaW9u
KSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhck5h
bWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8
T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcio+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246Ok9FU1ZlcnRleEFycmF5T2JqZWN0TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNWZXJ0ZXhBcnJheU9iamVjdCo+KGV4
dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU0VsZW1lbnRJbmRleFVpbnRO
YW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PE9FU0VsZW1lbnRJbmRleFVpbnQqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5z
aW9uOjpXZWJHTERlYnVnUmVuZGVyZXJJbmZvTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlYnVnUmVuZGVyZXJJbmZvKj4oZXh0
ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1NoYWRlcnNOYW1l
OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdl
YkdMRGVidWdTaGFkZXJzKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQ05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyo+KGV4
dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1
cmVQVlJUQ05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKj4oZXh0ZW5zaW9uKSk7Ci0gICAg
Y2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVENOYW1lOgotICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29t
cHJlc3NlZFRleHR1cmVTM1RDKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lv
bjo6V2ViR0xEZXB0aFRleHR1cmVOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVwdGhUZXh0dXJlKj4oZXh0ZW5zaW9uKSk7Ci0g
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEcmF3QnVmZmVyc05hbWU6Ci0gICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEcmF3QnVmZmVy
cyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkFOR0xFSW5zdGFuY2Vk
QXJyYXlzTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxBTkdMRUluc3RhbmNlZEFycmF5cyo+KGV4dGVuc2lvbikpOwotICAgIH0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4ganNOdWxsKCk7Ci19Ci0KLXZvaWQgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotewotICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgpKTsKLX0KLQot
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKEV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAg
ICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoZXhlYykpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICBXZWJHTFByb2dyYW0q
IHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKLSAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
KTsKLSAgICBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4gc2hhZGVyczsKLSAgICBib29sIHN1
Y2NlZWQgPSBjb250ZXh0LmdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7
Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAg
ICAgIHJldHVybiBqc051bGwoKTsKLSAgICB9Ci0gICAgaWYgKCFzdWNjZWVkKQotICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7Ci0gICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICBmb3Ig
KHNpemVfdCBpaSA9IDA7IGlpIDwgc2hhZGVycy5zaXplKCk7ICsraWkpCi0gICAgICAgIGxpc3Qu
YXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIHNoYWRlcnNbaWldLmdldCgpKSk7Ci0g
ICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsK
LX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXh0ZW5zaW9uKEV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAg
ICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdo
QXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250
ZXh0ID0gaW1wbCgpOwotICAgIGNvbnN0IFN0cmluZyBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgV2ViR0xFeHRl
bnNpb24qIGV4dGVuc2lvbiA9IGNvbnRleHQuZ2V0RXh0ZW5zaW9uKG5hbWUpOwotICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBleHRlbnNpb24pOwotfQotCi1KU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga0J1ZmZlcik7
Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSAhPSAzKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBp
bXBsKCk7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCku
dG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHVuc2lnbmVkIGF0dGFjaG1lbnQgPSBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQgcG5hbWUg
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgV2Vi
R0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19
Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAxKQotICAgICAg
ICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgdW5zaWduZWQgcG5h
bWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
V2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFBhcmFtZXRlcihwbmFtZSwgZWMpOwotICAg
IGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRQcm9ncmFtUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0
aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9
IGltcGwoKTsKLSAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9X
cmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXByb2dyYW0gJiYg
IWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAg
IHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldElu
Zm8gaW5mbyA9IGNvbnRleHQuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBwbmFtZSwgZWMp
OwotICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywg
Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJl
dHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1JlbmRlcmJ1ZmZlcik7Ci19Ci0K
LUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclBhcmFtZXRlcihFeGVj
U3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAg
ICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgaWYgKCFleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpICYmICFleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgwKS5pbmhlcml0cyhKU1dlYkdMU2hhZGVyOjppbmZvKCkpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9
IEpTV2ViR0xTaGFkZXI6OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0g
ICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFNoYWRlclBhcmFt
ZXRlcihzaGFkZXIsIHBuYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4
Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0K
LSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLUpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwo
KTsKLSAgICBpZiAoY29udGV4dC5pc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHJldHVybiBqc051
bGwoKTsKLSAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZSA9IGNvbnRleHQuZ2V0U3VwcG9ydGVkRXh0
ZW5zaW9ucygpOwotICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgZm9yIChzaXpl
X3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytpaSkKLSAgICAgICAgbGlzdC5hcHBlbmQo
anNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdmFsdWVbaWldKSk7Ci0gICAgcmV0dXJuIGNvbnN0cnVj
dEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKLX0KLQotSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsK
LSAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtUZXh0dXJlKTsKLX0K
LQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybShFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICBy
ZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJH
TFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBw
cm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7
Ci0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2Nh
dGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoIWxv
Y2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgp
KQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgV2ViR0xHZXRJbmZv
IGluZm8gPSBjb250ZXh0LmdldFVuaWZvcm0ocHJvZ3JhbSwgbG9jYXRpb24sIGVjKTsKLSAgICBp
ZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VmVydGV4QXR0cmliKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFy
YW1ldGVyKHRoaXMsIGV4ZWMsIGtWZXJ0ZXhBdHRyaWIpOwotfQotCi10ZW1wbGF0ZTx0eXBlbmFt
ZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Ci1ib29sIHRvVmVjdG9yKEpTQzo6RXhlY1N0YXRl
KiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIHZl
Y3RvcikKLXsKLSAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKLSAgICBp
bnQzMl90IGxlbmd0aCA9IG9iamVjdC0+Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1l
cy0+bGVuZ3RoKS50b0ludDMyKGV4ZWMpOwotCi0gICAgaWYgKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNh
cGFjaXR5KGxlbmd0aCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB2ZWN0b3IucmVzaXpl
KGxlbmd0aCk7Ci0KLSAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewot
ICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KGV4ZWMsIGkpOwotICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHZlY3RvcltpXSA9IHN0YXRpY19jYXN0PFQ+KHYudG9OdW1iZXIoZXhlYykpOwotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi1lbnVtIERhdGFGdW5jdGlvblRvQ2FsbCB7Ci0gICAg
Zl91bmlmb3JtMXYsIGZfdW5pZm9ybTJ2LCBmX3VuaWZvcm0zdiwgZl91bmlmb3JtNHYsCi0gICAg
Zl92ZXJ0ZXhBdHRyaWIxdiwgZl92ZXJ0ZXhBdHRyaWIydiwgZl92ZXJ0ZXhBdHRyaWIzdiwgZl92
ZXJ0ZXhBdHRyaWI0dgotfTsKLQotZW51bSBEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgewotICAg
IGZfdW5pZm9ybU1hdHJpeDJmdiwgZl91bmlmb3JtTWF0cml4M2Z2LCBmX3VuaWZvcm1NYXRyaXg0
ZnYKLX07Ci0KLXN0YXRpYyBib29sIGZ1bmN0aW9uRm9yVW5pZm9ybShEYXRhRnVuY3Rpb25Ub0Nh
bGwgZikKLXsKLSAgICBzd2l0Y2ggKGYpIHsKLSAgICBjYXNlIGZfdW5pZm9ybTF2OgotICAgIGNh
c2UgZl91bmlmb3JtMnY6Ci0gICAgY2FzZSBmX3VuaWZvcm0zdjoKLSAgICBjYXNlIGZfdW5pZm9y
bTR2OgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OiBicmVhazsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYo
RGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAy
KQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0gICAgCi0gICAgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uID0gMDsKLSAgICBsb25nIGluZGV4ID0gLTE7Ci0gICAgCi0gICAgaWYg
KGZ1bmN0aW9uRm9yVW5pZm9ybShmKSkgewotICAgICAgICBsb2NhdGlvbiA9IEpTV2ViR0xVbmlm
b3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAg
ICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZp
bmVkT3JOdWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0g
ICAgfSBlbHNlCi0gICAgICAgIGluZGV4ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9J
bnQzMihleGVjKTsKLQotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgICAgIAotICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdl
YkdMQXJyYXkgPSB0b0Zsb2F0MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7Ci0gICAgICAgIAotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGlmICh3ZWJH
TEFycmF5KSB7Ci0gICAgICAgIHN3aXRjaCAoZikgewotICAgICAgICBjYXNlIGZfdW5pZm9ybTF2
OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMWZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5Lmdl
dCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0ydjoK
LSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTJmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQo
KSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtM3Y6Ci0g
ICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0zZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCks
IGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybTR2OgotICAg
ICAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBl
Yyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2Ogot
ICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0
KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoK
LSAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMmZ2KGluZGV4LCB3ZWJHTEFycmF5Lmdl
dCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6
Ci0gICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjNmdihpbmRleCwgd2ViR0xBcnJheS5n
ZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2
OgotICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHdlYkdMQXJyYXku
Z2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIH0KLQotICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OwotICAgIGlmICghdG9WZWN0
b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5KSkKLSAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotCi0gICAgc3dpdGNoIChmKSB7Ci0gICAgY2FzZSBm
X3VuaWZvcm0xdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5k
YXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5p
Zm9ybTJ2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0yZnYobG9jYXRpb24sIGFycmF5LmRhdGEo
KSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3Jt
M3Y6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTNmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBh
cnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm00djoK
LSAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5
LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6
Ci0gICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFy
cmF5LnNpemUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoK
LSAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2Ogot
ICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjNmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJh
eS5zaXplKCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6Ci0g
ICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliNGZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5
LnNpemUoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOwotICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1zdGF0aWMgSlND
OjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCi17Ci0gICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0K
LSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0
aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghbG9j
YXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgCi0gICAgUmVmUHRyPElu
dDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0ludDMyQXJyYXkoZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMSkpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKHdlYkdMQXJyYXkp
IHsKLSAgICAgICAgc3dpdGNoIChmKSB7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAg
ICAgICAgICBjb250ZXh0LnVuaWZvcm0xaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVj
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OgotICAgICAg
ICAgICAgY29udGV4dC51bmlmb3JtMml2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjoKLSAgICAgICAg
ICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgICAg
ICBjb250ZXh0LnVuaWZvcm00aXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0g
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotCi0gICAgVmVjdG9yPGludCwg
NjQ+IGFycmF5OwotICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1l
bnQoMSksIGFycmF5KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotCi0g
ICAgc3dpdGNoIChmKSB7Ci0gICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICAgICAgY29udGV4dC51
bmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTJ2OgotICAgICAgICBjb250ZXh0LnVuaWZv
cm0yaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtM3Y6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTNp
dihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgY29udGV4dC51bmlmb3JtNGl2KGxv
Y2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotc3RhdGlj
IEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgoRGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxs
IGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQp
Ci17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQotICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7Ci0KLSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dl
YkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkp
OwotICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLQot
ICAgIGJvb2wgdHJhbnNwb3NlID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9Cb29sZWFu
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgICAgCi0gICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwotICAgICAgICAKLSAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJH
TEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMikpOwotICAg
ICAgICAKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAod2ViR0xBcnJheSkgewot
ICAgICAgICBzd2l0Y2ggKGYpIHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6Ci0g
ICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwg
d2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Zl91bmlmb3JtTWF0cml4M2Z2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4M2Z2
KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoKLSAgICAgICAgICAgIGNv
bnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5Lmdl
dCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7Ci0gICAgfQotCi0gICAgVmVjdG9yPGZsb2F0LCA2ND4gYXJyYXk7Ci0gICAgaWYgKCF0b1Zl
Y3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSwgYXJyYXkpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0KLSAgICBzd2l0Y2ggKGYpIHsKLSAgICBjYXNl
IGZfdW5pZm9ybU1hdHJpeDJmdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtTWF0cml4M2Z2OgotICAgICAgICBjb250ZXh0
LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJh
eS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0
ZnY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3Nl
LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICB9
Ci0KLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91
bmlmb3JtMXYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTFpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1
cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0xdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KEpTQzo6RXhlY1N0YXRl
KiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTJ2LCBleGVjLCBp
bXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0yaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmko
Zl91bmlmb3JtMnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlND
OjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTN2LCBleGVj
LCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm00ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlv
bmYoZl91bmlmb3JtNHYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm00diwgZXhlYywgaW1wbCgpKTsKLX0KLQot
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91
bmlmb3JtTWF0cml4MmZ2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgzZnYsIGV4
ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybU1hdHJpeDRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDRmdiwgZXhlYywgaW1wbCgpKTsKLX0KLQot
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhB
dHRyaWIxdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIydiwgZXhlYywgaW1wbCgpKTsKLX0K
LQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0
ZXhBdHRyaWIzdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0g
ICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWI0diwgZXhlYywgaW1wbCgpKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9ySlMucG0JKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCSh3b3JraW5nIGNvcHkpCkBAIC0yOTgxLDcgKzI5ODEs
NyBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgaWYgKEdldEdlbmVy
YXRlSXNSZWFjaGFibGUoJGludGVyZmFjZSkgZXEgIkltcGwiKSB7CiAgICAgICAgICAgICAgICAg
JHJvb3RTdHJpbmcgID0gIiAgICAke2ltcGxUeXBlfSogcm9vdCA9ICZqcyR7aW50ZXJmYWNlTmFt
ZX0tPmltcGwoKTtcbiI7CiAgICAgICAgICAgICB9IGVsc2lmIChHZXRHZW5lcmF0ZUlzUmVhY2hh
YmxlKCRpbnRlcmZhY2UpIGVxICJJbXBsV2ViR0xSZW5kZXJpbmdDb250ZXh0IikgewotICAgICAg
ICAgICAgICAgICRyb290U3RyaW5nICA9ICIgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiByb290
ID0gV1RGOjpnZXRQdHIoanMke2ludGVyZmFjZU5hbWV9LT5pbXBsKCkuY29udGV4dCgpKTtcbiI7
CisgICAgICAgICAgICAgICAgJHJvb3RTdHJpbmcgID0gIiAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKiByb290ID0gV1RGOjpnZXRQdHIoanMke2ludGVyZmFjZU5hbWV9LT5pbXBsKCkuY29u
dGV4dCgpKTtcbiI7CiAgICAgICAgICAgICB9IGVsc2lmIChHZXRHZW5lcmF0ZUlzUmVhY2hhYmxl
KCRpbnRlcmZhY2UpIGVxICJJbXBsRnJhbWUiKSB7CiAgICAgICAgICAgICAgICAgJHJvb3RTdHJp
bmcgID0gIiAgICBGcmFtZSogcm9vdCA9IFdURjo6Z2V0UHRyKGpzJHtpbnRlcmZhY2VOYW1lfS0+
aW1wbCgpLmZyYW1lKCkpO1xuIjsKICAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAuPSAiICAg
IGlmICghcm9vdClcbiI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQ2Fu
dmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDEwIEBACiAjaW5jbHVk
ZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KIAot
I2lmIEVOQUJMRShXRUJHTCkgICAgCisjaWYgRU5BQkxFKFdFQkdMKQorI2luY2x1ZGUgIldlYkdM
MVJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmgi
CiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIldlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTIxMiw3
ICsyMTMsOCBAQCBDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBIVE1MQ2FudmFzRWxlbWVuCiAgICAg
ICAgICAgICBpZiAobV9jb250ZXh0ICYmICFtX2NvbnRleHQtPmlzM2QoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIGlmICghbV9jb250ZXh0KSB7Ci0gICAg
ICAgICAgICAgICAgbV9jb250ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUodGhp
cywgc3RhdGljX2Nhc3Q8V2ViR0xDb250ZXh0QXR0cmlidXRlcyo+KGF0dHJzKSk7CisgICAgICAg
ICAgICAgICAgbV9jb250ZXh0ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlKHRo
aXMsIHN0YXRpY19jYXN0PFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqPihhdHRycyksIHR5cGUpOwor
ICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChtX2NvbnRleHQpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gTmVlZCB0byBtYWtlIHN1cmUgYSBSZW5kZXJMYXllciBhbmQgY29t
cG9zaXRpbmcgbGF5ZXIgZ2V0IGNyZWF0ZWQgZm9yIHRoZSBDYW52YXMKICAgICAgICAgICAgICAg
ICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhTeW50aGV0aWNTdHlsZUNoYW5nZSk7CkBAIC0yNTUs
NyArMjU3LDcgQEAgYm9vbCBIVE1MQ2FudmFzRWxlbWVudDo6aXMyZFR5cGUoY29uc3QgUwogYm9v
bCBIVE1MQ2FudmFzRWxlbWVudDo6aXMzZFR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAg
IC8vIFJldGFpbiBzdXBwb3J0IGZvciB0aGUgbGVnYWN5ICJ3ZWJraXQtM2QiIG5hbWUuCi0gICAg
cmV0dXJuIHR5cGUgPT0gIndlYmdsIiB8fCB0eXBlID09ICJleHBlcmltZW50YWwtd2ViZ2wiIHx8
IHR5cGUgPT0gIndlYmtpdC0zZCI7CisgICAgcmV0dXJuIHR5cGUgPT0gIndlYmdsIiB8fCB0eXBl
ID09ICJleHBlcmltZW50YWwtd2ViZ2wiIHx8IHR5cGUgPT0gIndlYmtpdC0zZCIgfHwgdHlwZSA9
PSAiZXhwZXJpbWVudGFsLXdlYmdsMiI7CiB9CiAjZW5kaWYKIApAQCAtMzI3LDcgKzMyOSw3IEBA
IHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KCkKIAogI2lmIEVOQUJMRShXRUJHTCkKICAg
ICBpZiAoaXMzRCgpICYmIG9sZFNpemUgIT0gc2l6ZSgpKQotICAgICAgICBzdGF0aWNfY2FzdDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkpLT5yZXNoYXBlKHdpZHRoKCks
IGhlaWdodCgpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSo+KG1fY29udGV4dC5nZXQoKSktPnJlc2hhcGUod2lkdGgoKSwgaGVpZ2h0KCkpOwogI2VuZGlm
CiAKICAgICBpZiAoYXV0byByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpIHsKQEAgLTM5NCw3
ICszOTYsNyBAQCB2b2lkIEhUTUxDYW52YXNFbGVtZW50OjpwYWludChHcmFwaGljc0NvCiAKICNp
ZiBFTkFCTEUoV0VCR0wpICAgIAogICAgIGlmIChpczNEKCkpCi0gICAgICAgIHN0YXRpY19jYXN0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KG1fY29udGV4dC5nZXQoKSktPm1hcmtMYXllckNvbXBv
c2l0ZWQoKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSo+
KG1fY29udGV4dC5nZXQoKSktPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKICNlbmRpZgogfQogCkBA
IC00NzUsNyArNDc3LDcgQEAgUmVmUHRyPEltYWdlRGF0YT4gSFRNTENhbnZhc0VsZW1lbnQ6Omdl
dAogICAgIGlmICghaXMzRCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY3R4ID0gc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0
Kj4obV9jb250ZXh0LmdldCgpKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjdHgg
PSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj4obV9jb250ZXh0LmdldCgp
KTsKIAogICAgIHJldHVybiBjdHgtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7
CiAjZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQU5HTEVJbnN0YW5jZWRB
cnJheXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FOR0xF
SW5zdGFuY2VkQXJyYXlzLmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCw3ICszNCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQU5HTEVJbnN0YW5jZWRBcnJh
eXM6OkFOR0xFSW5zdGFuY2VkQXJyYXlzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkK
K0FOR0xFSW5zdGFuY2VkQXJyYXlzOjpBTkdMRUluc3RhbmNlZEFycmF5cyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsK
IH0KQEAgLTQ4LDcgKzQ4LDcgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgQU5HTEVJ
bnN0YQogICAgIHJldHVybiBBTkdMRUluc3RhbmNlZEFycmF5c05hbWU7CiB9CiAKLWJvb2wgQU5H
TEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQpCitib29sIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSogY29udGV4dCkKIHsKICNpZiBQTEFURk9STShJT1MpIHx8IFBMQVRGT1JNKE1B
QykgJiYgX19NQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA+PSAxMDkwCiAgICAgVU5VU0VE
X1BBUkFNKGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQU5HTEVJ
bnN0YW5jZWRBcnJheXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9BTkdMRUluc3RhbmNlZEFycmF5cy5oCShyZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCwxNiArMzAsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOwogCiBjbGFz
cyBBTkdMRUluc3RhbmNlZEFycmF5cyBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgQU5HTEVJbnN0YW5jZWRBcnJheXMoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgZXhwbGljaXQgQU5HTEVJbnN0YW5jZWRBcnJheXMoV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfkFOR0xFSW5zdGFuY2VkQXJyYXlzKCk7CiAK
ICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0OwogCi0gICAgc3RhdGlj
IGJvb2wgc3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIHN0YXRpYyBib29s
IHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2b2lkIGRyYXdB
cnJheXNJbnN0YW5jZWRBTkdMRShHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6
ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpOwogICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5z
dGFuY2VkQU5HTEUoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBl
LCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw3
IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Q2FudmFzUmVuZGVyaW4KICNpZiAhRU5BQkxF
KERBU0hCT0FSRF9TVVBQT1JUKQogICAgIEFTU0VSVF9VTlVTRUQodXNlc0Rhc2hib2FyZENvbXBh
dGliaWxpdHlNb2RlLCAhdXNlc0Rhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlKTsKICNlbmRpZgor
ICAgIG1fdHlwZSA9ICIyZCI7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjp1
bndpbmRTdGF0ZVN0YWNrKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNiArNTQsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlzMmQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpczNkKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBTdHJpbmcgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKCkge30KICAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dCB7IHJldHVybiAwOyB9CkBAIC03Myw2ICs3NCw3IEBAIHByb3RlY3RlZDoKICAgICB9CiAgICAg
dm9pZCBjaGVja09yaWdpbihjb25zdCBVUkwmKTsKIAorICAgIFN0cmluZyBtX3R5cGU7CiBwcml2
YXRlOgogICAgIEhUTUxDYW52YXNFbGVtZW50KiBtX2NhbnZhczsKIH07CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmNwcAkocmV2
aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4
dHVyZUxPRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1FWFRTaGFkZXJUZXh0dXJlTE9EOjpFWFRTaGFkZXJUZXh0dXJlTE9EKFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK0VYVFNoYWRlclRleHR1cmVMT0Q6OkVYVFNo
YWRlclRleHR1cmVMT0QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6
IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4dHVyZUxPRC5oCShyZXZpc2lvbiAxNzY5OTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBF
WFRTaGFkZXJUZXh0dXJlTE9EIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBFWFRTaGFkZXJUZXh0dXJlTE9EKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOworICAgIGV4cGxpY2l0IEVYVFNoYWRlclRleHR1cmVMT0QoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfkVYVFNoYWRlclRleHR1cmVMT0QoKTsKIAogICAgIHZp
cnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3BpYy5jcHAJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWM6OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpCitFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM6OkVYVFRleHR1cmVG
aWx0ZXJBbmlzb3Ryb3BpYyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAg
IDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oCShy
ZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRUZXh0dXJl
RmlsdGVyQW5pc290cm9waWMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyBmaW5h
bCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxp
Y2l0IEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Kik7CiAgICAgdmlydHVhbCB+RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKCk7CiAKICAgICB2
aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5jcHAJ
KHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU0VsZW1l
bnRJbmRleFVpbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotT0VTRWxlbWVudEluZGV4VWludDo6T0VTRWxlbWVudEluZGV4VWlu
dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitPRVNFbGVtZW50SW5kZXhVaW50OjpP
RVNFbGVtZW50SW5kZXhVaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAg
ICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL09FU0VsZW1lbnRJbmRleFVpbnQuaAkocmV2aXNpb24gMTc2OTk0
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgT0VTRWxlbWVudEluZGV4VWludCBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgT0VTRWxlbWVudEluZGV4VWludChXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqKTsKKyAgICBleHBsaWNpdCBPRVNFbGVtZW50SW5kZXhVaW50KFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5PRVNFbGVtZW50SW5kZXhVaW50KCk7CiAKICAg
ICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0
aXZlcy5jcHAJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L09FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotT0VTU3RhbmRhcmREZXJpdmF0aXZlczo6T0VT
U3RhbmRhcmREZXJpdmF0aXZlcyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitPRVNT
dGFuZGFyZERlcml2YXRpdmVzOjpPRVNTdGFuZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1N0YW5kYXJk
RGVyaXZhdGl2ZXMuaAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgT0VTU3RhbmRhcmREZXJpdmF0aXZl
cyBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
T0VTU3RhbmRhcmREZXJpdmF0aXZlcyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBs
aWNpdCBPRVNTdGFuZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsK
ICAgICB2aXJ0dWFsIH5PRVNTdGFuZGFyZERlcml2YXRpdmVzKCk7CiAKICAgICB2aXJ0dWFsIEV4
dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuY3BwCShyZXZpc2lvbiAxNzY5OTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotT0VT
VGV4dHVyZUZsb2F0OjpPRVNUZXh0dXJlRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQorT0VTVGV4dHVyZUZsb2F0OjpPRVNUZXh0dXJlRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuaAkocmV2
aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZs
b2F0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBPRVNUZXh0dXJlRmxvYXQgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24g
ewogcHVibGljOgotICAgIE9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsK
KyAgICBPRVNUZXh0dXJlRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZp
cnR1YWwgfk9FU1RleHR1cmVGbG9hdCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdl
dE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L09FU1RleHR1cmVGbG9hdExpbmVhci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmNwcAkocmV2aXNpb24gMTc2OTk0KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LU9FU1RleHR1cmVGbG9hdExpbmVhcjo6T0VTVGV4dHVyZUZsb2F0TGluZWFyKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCkKK09FU1RleHR1cmVGbG9hdExpbmVhcjo6T0VTVGV4dHVyZUZs
b2F0TGluZWFyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJH
TEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgJKHJldmlzaW9uIDE3Njk5NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdExpbmVhci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
T0VTVGV4dHVyZUZsb2F0TGluZWFyIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBPRVNUZXh0dXJlRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgZXhwbGljaXQgT0VTVGV4dHVyZUZsb2F0TGluZWFyKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5PRVNUZXh0dXJlRmxvYXRMaW5lYXIoKTsK
IAogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZs
b2F0LmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
T0VTVGV4dHVyZUhhbGZGbG9hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNUZXh0dXJlSGFsZkZsb2F0OjpPRVNUZXh0dXJl
SGFsZkZsb2F0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK09FU1RleHR1cmVIYWxm
RmxvYXQ6Ok9FU1RleHR1cmVIYWxmRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29u
dGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5oCShyZXZpc2lv
biAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZs
b2F0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBPRVNUZXh0dXJlSGFsZkZsb2F0IGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5z
aW9uIHsKIHB1YmxpYzoKLSAgICBPRVNUZXh0dXJlSGFsZkZsb2F0KFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCopOworICAgIE9FU1RleHR1cmVIYWxmRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSopOwogICAgIHZpcnR1YWwgfk9FU1RleHR1cmVIYWxmRmxvYXQoKTsKIAogICAgIHZpcnR1YWwg
RXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFy
LmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VT
VGV4dHVyZUhhbGZGbG9hdExpbmVhci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyOjpP
RVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkK
K09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI6Ok9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNv
bnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJl
SGFsZkZsb2F0TGluZWFyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oCShyZXZpc2lvbiAxNzY5OTQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBP
RVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsK
IHB1YmxpYzoKLSAgICBPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCopOworICAgIE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIoKTsKIAog
ICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmpl
Y3QuY3BwCShyZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9P
RVNWZXJ0ZXhBcnJheU9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNWZXJ0ZXhBcnJheU9iamVjdDo6T0VTVmVydGV4
QXJyYXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorT0VTVmVydGV4QXJy
YXlPYmplY3Q6Ok9FU1ZlcnRleEFycmF5T2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
IGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5oCShy
ZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhB
cnJheU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsMTQgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7CitjbGFzcyBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOwogY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsK
IAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKIAogY2xhc3MgT0VTVmVydGV4QXJyYXlPYmpl
Y3QgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIE9FU1ZlcnRl
eEFycmF5T2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIE9FU1ZlcnRleEFycmF5
T2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5PRVNWZXJ0
ZXhBcnJheU9iamVjdCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBj
b25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMVJl
bmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNzY5OTQpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHA6MTc2OTk0
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MjYyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA5LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShXRUJHTCkKKworI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4
dC5oIgorCisjaW5jbHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJDYWNo
ZWRJbWFnZS5oIgorI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkVYVFRleHR1cmVG
aWx0ZXJBbmlzb3Ryb3BpYy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRl
ICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFz
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
VmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIk1haW5GcmFtZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiT0VTRWxlbWVudEluZGV4VWludC5oIgorI2luY2x1ZGUgIk9FU1N0YW5kYXJkRGVyaXZhdGl2
ZXMuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJl
RmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0LmgiCisjaW5jbHVk
ZSAiT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oIgorI2luY2x1ZGUgIk9FU1ZlcnRleEFycmF5
T2JqZWN0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViR0xBY3RpdmVJbmZvLmgiCisjaW5jbHVk
ZSAiV2ViR0xCdWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgi
CisjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCisjaW5jbHVkZSAiV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRBdHRyaWJ1
dGVzLmgiCisjaW5jbHVkZSAiV2ViR0xDb250ZXh0RXZlbnQuaCIKKyNpbmNsdWRlICJXZWJHTENv
bnRleHRHcm91cC5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKKyNpbmNs
dWRlICJXZWJHTERlYnVnU2hhZGVycy5oIgorI2luY2x1ZGUgIldlYkdMRGVwdGhUZXh0dXJlLmgi
CisjaW5jbHVkZSAiV2ViR0xEcmF3QnVmZmVycy5oIgorI2luY2x1ZGUgIldlYkdMRnJhbWVidWZm
ZXIuaCIKKyNpbmNsdWRlICJXZWJHTExvc2VDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xQcm9n
cmFtLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTFNo
YWRlci5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmgiCisjaW5jbHVk
ZSAiV2ViR0xUZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xVbmlmb3JtTG9jYXRpb24uaCIKKwor
I2luY2x1ZGUgPHJ1bnRpbWUvSlNDSW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRB
cnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1VpbnQzMkFycmF5Lmg+CisjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY29uc3QgZG91YmxlIHNlY29uZHNCZXR3ZWVuUmVzdG9yZUF0dGVtcHRzID0gMS4wOworY29u
c3QgaW50IG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSA9IDI1NjsKKworbmFtZXNwYWNlIHsK
KworICAgIGNsYXNzIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcihEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVm
ZmVyLCBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICA6
IG1fZHJhd2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgLCBtX2ZyYW1lYnVm
ZmVyQmluZGluZyhmcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcp
CisgICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZl
cikKKyAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgICAgICB9
CisKKyAgICAgICAgflNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIoKQorICAgICAgICB7CisgICAg
ICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgICAgICBp
ZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgRHJhd2luZ0J1ZmZlciogbV9kcmF3aW5nQnVmZmVyOworICAgICAgICBXZWJHTEZy
YW1lYnVmZmVyKiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKKyAgICB9OworCisgICAgUGxhdGZvcm0z
RE9iamVjdCBvYmplY3RPclplcm8oV2ViR0xPYmplY3QqIG9iamVjdCkKKyAgICB7CisgICAgICAg
IHJldHVybiBvYmplY3QgPyBvYmplY3QtPm9iamVjdCgpIDogMDsKKyAgICB9CisKKyAgICB2b2lk
IGNsaXAxRChHQzNEaW50IHN0YXJ0LCBHQzNEc2l6ZWkgcmFuZ2UsIEdDM0RzaXplaSBzb3VyY2VS
YW5nZSwgR0MzRGludCogY2xpcHBlZFN0YXJ0LCBHQzNEc2l6ZWkqIGNsaXBwZWRSYW5nZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChjbGlwcGVkU3RhcnQgJiYgY2xpcHBlZFJhbmdlKTsKKyAgICAg
ICAgaWYgKHN0YXJ0IDwgMCkgeworICAgICAgICAgICAgcmFuZ2UgKz0gc3RhcnQ7CisgICAgICAg
ICAgICBzdGFydCA9IDA7CisgICAgICAgIH0KKyAgICAgICAgR0MzRGludCBlbmQgPSBzdGFydCAr
IHJhbmdlOworICAgICAgICBpZiAoZW5kID4gc291cmNlUmFuZ2UpCisgICAgICAgICAgICByYW5n
ZSAtPSBlbmQgLSBzb3VyY2VSYW5nZTsKKyAgICAgICAgKmNsaXBwZWRTdGFydCA9IHN0YXJ0Owor
ICAgICAgICAqY2xpcHBlZFJhbmdlID0gcmFuZ2U7CisgICAgfQorCisgICAgLy8gUmV0dXJucyBm
YWxzZSBpZiBubyBjbGlwcGluZyBpcyBuZWNlc3NhcnksIGkuZS4sIHgsIHksIHdpZHRoLCBoZWln
aHQgc3RheSB0aGUgc2FtZS4KKyAgICBib29sIGNsaXAyRChHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgIEdDM0Rz
aXplaSBzb3VyY2VXaWR0aCwgR0MzRHNpemVpIHNvdXJjZUhlaWdodCwKKyAgICAgICAgICAgICAg
ICBHQzNEaW50KiBjbGlwcGVkWCwgR0MzRGludCogY2xpcHBlZFksIEdDM0RzaXplaSogY2xpcHBl
ZFdpZHRoLCBHQzNEc2l6ZWkqY2xpcHBlZEhlaWdodCkKKyAgICB7CisgICAgICAgIEFTU0VSVChj
bGlwcGVkWCAmJiBjbGlwcGVkWSAmJiBjbGlwcGVkV2lkdGggJiYgY2xpcHBlZEhlaWdodCk7Cisg
ICAgICAgIGNsaXAxRCh4LCB3aWR0aCwgc291cmNlV2lkdGgsIGNsaXBwZWRYLCBjbGlwcGVkV2lk
dGgpOworICAgICAgICBjbGlwMUQoeSwgaGVpZ2h0LCBzb3VyY2VIZWlnaHQsIGNsaXBwZWRZLCBj
bGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuICgqY2xpcHBlZFggIT0geCB8fCAqY2xpcHBl
ZFkgIT0geSB8fCAqY2xpcHBlZFdpZHRoICE9IHdpZHRoIHx8ICpjbGlwcGVkSGVpZ2h0ICE9IGhl
aWdodCk7CisgICAgfQorCisgICAgR0MzRGludCBjbGFtcChHQzNEaW50IHZhbHVlLCBHQzNEaW50
IG1pbiwgR0MzRGludCBtYXgpCisgICAgeworICAgICAgICBpZiAodmFsdWUgPCBtaW4pCisgICAg
ICAgICAgICB2YWx1ZSA9IG1pbjsKKyAgICAgICAgaWYgKHZhbHVlID4gbWF4KQorICAgICAgICAg
ICAgdmFsdWUgPSBtYXg7CisgICAgICAgIHJldHVybiB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyBS
ZXR1cm4gdHJ1ZSBpZiBhIGNoYXJhY3RlciBiZWxvbmdzIHRvIHRoZSBBU0NJSSBzdWJzZXQgYXMg
ZGVmaW5lZCBpbgorICAgIC8vIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCisgICAgYm9v
bCB2YWxpZGF0ZUNoYXJhY3Rlcih1bnNpZ25lZCBjaGFyIGMpCisgICAgeworICAgICAgICAvLyBQ
cmludGluZyBjaGFyYWN0ZXJzIGFyZSB2YWxpZCBleGNlcHQgIiAkIGAgQCBcICcgREVMLgorICAg
ICAgICBpZiAoYyA+PSAzMiAmJiBjIDw9IDEyNgorICAgICAgICAgICAgJiYgYyAhPSAnIicgJiYg
YyAhPSAnJCcgJiYgYyAhPSAnYCcgJiYgYyAhPSAnQCcgJiYgYyAhPSAnXFwnICYmIGMgIT0gJ1wn
JykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAvLyBIb3Jpem9udGFsIHRhYiwg
bGluZSBmZWVkLCB2ZXJ0aWNhbCB0YWIsIGZvcm0gZmVlZCwgY2FycmlhZ2UgcmV0dXJuCisgICAg
ICAgIC8vIGFyZSBhbHNvIHZhbGlkLgorICAgICAgICBpZiAoYyA+PSA5ICYmIGMgPD0gMTMpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIGJvb2wgaXNQcmVmaXhSZXNlcnZlZChjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgeworICAg
ICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCJnbF8iKSB8fCBuYW1lLnN0YXJ0c1dpdGgoIndlYmds
XyIpIHx8IG5hbWUuc3RhcnRzV2l0aCgiX3dlYmdsXyIpKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBTdHJpcHMgY29tbWVu
dHMgZnJvbSBzaGFkZXIgdGV4dC4gVGhpcyBhbGxvd3Mgbm9uLUFTQ0lJIGNoYXJhY3RlcnMKKyAg
ICAvLyB0byBiZSB1c2VkIGluIGNvbW1lbnRzIHdpdGhvdXQgcG90ZW50aWFsbHkgYnJlYWtpbmcg
T3BlbkdMCisgICAgLy8gaW1wbGVtZW50YXRpb25zIG5vdCBleHBlY3RpbmcgY2hhcmFjdGVycyBv
dXRzaWRlIHRoZSBHTFNMIEVTIHNldC4KKyAgICBjbGFzcyBTdHJpcENvbW1lbnRzIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFN0cmlwQ29tbWVudHMoY29uc3QgU3RyaW5nJiBzdHIpCisgICAgICAg
ICAgICA6IG1fcGFyc2VTdGF0ZShCZWdpbm5pbmdPZkxpbmUpCisgICAgICAgICAgICAsIG1fc291
cmNlU3RyaW5nKHN0cikKKyAgICAgICAgICAgICwgbV9sZW5ndGgoc3RyLmxlbmd0aCgpKQorICAg
ICAgICAgICAgLCBtX3Bvc2l0aW9uKDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhcnNlKCk7
CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgcmVzdWx0KCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOworICAgICAgICB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBib29sIGhhc01vcmVDaGFyYWN0ZXJzKCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIChtX3Bvc2l0aW9uIDwgbV9sZW5ndGgpOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBwYXJzZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChoYXNN
b3JlQ2hhcmFjdGVycygpKSB7CisgICAgICAgICAgICAgICAgcHJvY2VzcyhjdXJyZW50KCkpOwor
ICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MoKSBtaWdodCBhZHZhbmNlIHRoZSBwb3NpdGlvbi4K
KyAgICAgICAgICAgICAgICBpZiAoaGFzTW9yZUNoYXJhY3RlcnMoKSkKKyAgICAgICAgICAgICAg
ICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBwcm9jZXNzKFVDaGFyKTsKKworICAgICAgICBib29sIHBlZWsoVUNoYXImIGNoYXJhY3Rlcikg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fcG9zaXRpb24gKyAxID49IG1fbGVu
Z3RoKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNoYXJhY3Rl
ciA9IG1fc291cmNlU3RyaW5nW21fcG9zaXRpb24gKyAxXTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgVUNoYXIgY3VycmVudCgpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fcG9zaXRp
b24gPCBtX2xlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gbV9zb3VyY2VTdHJpbmdbbV9wb3Np
dGlvbl07CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFkdmFuY2UoKQorICAgICAgICB7Cisg
ICAgICAgICAgICArK21fcG9zaXRpb247CisgICAgICAgIH0KKworICAgICAgICBib29sIGlzTmV3
bGluZShVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIERv
bid0IGF0dGVtcHQgdG8gY2Fub25pY2FsaXplIG5ld2xpbmUgcmVsYXRlZCBjaGFyYWN0ZXJzLgor
ICAgICAgICAgICAgcmV0dXJuIChjaGFyYWN0ZXIgPT0gJ1xuJyB8fCBjaGFyYWN0ZXIgPT0gJ1xy
Jyk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGVtaXQoVUNoYXIgY2hhcmFjdGVyKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX2J1aWxkZXIuYXBwZW5kKGNoYXJhY3Rlcik7CisgICAgICAg
IH0KKworICAgICAgICBlbnVtIFBhcnNlU3RhdGUgeworICAgICAgICAgICAgLy8gSGF2ZSBub3Qg
c2VlbiBhbiBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgeWV0IG9uCisgICAgICAgICAg
ICAvLyB0aGlzIGxpbmUuIFBvc3NpYmxlIHRoYXQgd2UgbWlnaHQgc2VlIGEgcHJlcHJvY2Vzc29y
CisgICAgICAgICAgICAvLyBkaXJlY3RpdmUuCisgICAgICAgICAgICBCZWdpbm5pbmdPZkxpbmUs
CisKKyAgICAgICAgICAgIC8vIEhhdmUgc2VlbiBhdCBsZWFzdCBvbmUgQVNDSUkgbm9uLXdoaXRl
c3BhY2UgY2hhcmFjdGVyCisgICAgICAgICAgICAvLyBvbiB0aGlzIGxpbmUuCisgICAgICAgICAg
ICBNaWRkbGVPZkxpbmUsCisKKyAgICAgICAgICAgIC8vIEhhbmRsaW5nIGEgcHJlcHJvY2Vzc29y
IGRpcmVjdGl2ZS4gUGFzc2VzIHRocm91Z2ggYWxsCisgICAgICAgICAgICAvLyBjaGFyYWN0ZXJz
IHVwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuIERpc2FibGVzIGNvbW1lbnQKKyAgICAgICAgICAg
IC8vIHByb2Nlc3NpbmcuCisgICAgICAgICAgICBJblByZXByb2Nlc3NvckRpcmVjdGl2ZSwKKwor
ICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBzaW5nbGUtbGluZSBjb21tZW50LiBUaGUgY29tbWVu
dCB0ZXh0IGlzCisgICAgICAgICAgICAvLyByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIHNwYWNlLgor
ICAgICAgICAgICAgSW5TaW5nbGVMaW5lQ29tbWVudCwKKworICAgICAgICAgICAgLy8gSGFuZGxp
bmcgYSBtdWx0aS1saW5lIGNvbW1lbnQuIE5ld2xpbmVzIGFyZSBwYXNzZWQKKyAgICAgICAgICAg
IC8vIHRocm91Z2ggdG8gcHJlc2VydmUgbGluZSBudW1iZXJzLgorICAgICAgICAgICAgSW5NdWx0
aUxpbmVDb21tZW50CisgICAgICAgIH07CisKKyAgICAgICAgUGFyc2VTdGF0ZSBtX3BhcnNlU3Rh
dGU7CisgICAgICAgIFN0cmluZyBtX3NvdXJjZVN0cmluZzsKKyAgICAgICAgdW5zaWduZWQgbV9s
ZW5ndGg7CisgICAgICAgIHVuc2lnbmVkIG1fcG9zaXRpb247CisgICAgICAgIFN0cmluZ0J1aWxk
ZXIgbV9idWlsZGVyOworICAgIH07CisKKyAgICB2b2lkIFN0cmlwQ29tbWVudHM6OnByb2Nlc3Mo
VUNoYXIgYykKKyAgICB7CisgICAgICAgIGlmIChpc05ld2xpbmUoYykpIHsKKyAgICAgICAgICAg
IC8vIE5vIG1hdHRlciB3aGF0IHN0YXRlIHdlIGFyZSBpbiwgcGFzcyB0aHJvdWdoIG5ld2xpbmVz
CisgICAgICAgICAgICAvLyBzbyB3ZSBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCisgICAgICAgICAg
ICBlbWl0KGMpOworCisgICAgICAgICAgICBpZiAobV9wYXJzZVN0YXRlICE9IEluTXVsdGlMaW5l
Q29tbWVudCkKKyAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBCZWdpbm5pbmdPZkxpbmU7
CisKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIFVDaGFyIHRlbXAg
PSAwOworICAgICAgICBzd2l0Y2ggKG1fcGFyc2VTdGF0ZSkgeworICAgICAgICBjYXNlIEJlZ2lu
bmluZ09mTGluZToKKyAgICAgICAgICAgIGlmIChXVEY6OmlzQVNDSUlTcGFjZShjKSkgeworICAg
ICAgICAgICAgICAgIGVtaXQoYyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmIChjID09ICcjJykgeworICAgICAgICAgICAgICAgIG1fcGFy
c2VTdGF0ZSA9IEluUHJlcHJvY2Vzc29yRGlyZWN0aXZlOworICAgICAgICAgICAgICAgIGVtaXQo
Yyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIFRyYW5zaXRpb24gdG8gbm9ybWFsIHN0YXRlIGFuZCByZS1oYW5kbGUgY2hhcmFjdGVyLgor
ICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gTWlkZGxlT2ZMaW5lOworICAgICAgICAgICAgcHJv
Y2VzcyhjKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTWlkZGxlT2ZMaW5l
OgorICAgICAgICAgICAgaWYgKGMgPT0gJy8nICYmIHBlZWsodGVtcCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAodGVtcCA9PSAnLycpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9wYXJzZVN0YXRl
ID0gSW5TaW5nbGVMaW5lQ29tbWVudDsKKyAgICAgICAgICAgICAgICAgICAgZW1pdCgnICcpOwor
ICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICh0ZW1wID09ICcqJykg
eworICAgICAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBJbk11bHRpTGluZUNvbW1lbnQ7
CisgICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNvbW1lbnQgc3RhcnQgaW4gY2FzZSB0
aGUgdXNlciBoYXMKKyAgICAgICAgICAgICAgICAgICAgLy8gYW4gdW5jbG9zZWQgY29tbWVudCBh
bmQgd2Ugd2FudCB0byBsYXRlcgorICAgICAgICAgICAgICAgICAgICAvLyBzaWduYWwgYW4gZXJy
b3IuCisgICAgICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsKKyAgICAgICAgICAgICAgICAgICAg
ZW1pdCgnKicpOworICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSW5QcmVw
cm9jZXNzb3JEaXJlY3RpdmU6CisgICAgICAgICAgICAvLyBObyBtYXR0ZXIgd2hhdCB0aGUgY2hh
cmFjdGVyIGlzLCBqdXN0IHBhc3MgaXQKKyAgICAgICAgICAgIC8vIHRocm91Z2guIERvIG5vdCBw
YXJzZSBjb21tZW50cyBpbiB0aGlzIHN0YXRlLiBUaGlzCisgICAgICAgICAgICAvLyBtaWdodCBu
b3QgYmUgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGxvbmcgdGVybSwgYnV0IGl0CisgICAgICAgICAg
ICAvLyBzaG91bGQgaGFuZGxlIHRoZSAjZXJyb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4KKyAg
ICAgICAgICAgIGVtaXQoYyk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElu
U2luZ2xlTGluZUNvbW1lbnQ6CisgICAgICAgICAgICAvLyBUaGUgbmV3bGluZSBjb2RlIGF0IHRo
ZSB0b3Agb2YgdGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlCisgICAgICAgICAgICAvLyBvZiByZXNl
dHRpbmcgb3VyIHN0YXRlIHdoZW4gd2UgZ2V0IG91dCBvZiB0aGUKKyAgICAgICAgICAgIC8vIHNp
bmdsZS1saW5lIGNvbW1lbnQuIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIEluTXVsdGlMaW5lQ29tbWVudDoKKyAgICAgICAg
ICAgIGlmIChjID09ICcqJyAmJiBwZWVrKHRlbXApICYmIHRlbXAgPT0gJy8nKSB7CisgICAgICAg
ICAgICAgICAgZW1pdCgnKicpOworICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsKKyAgICAgICAg
ICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7CisgICAgICAgICAgICAgICAgYWR2
YW5jZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBTd2FsbG93IGFsbCBvdGhlciBjaGFyYWN0ZXJzLiBVbmNsZWFyIHdoZXRoZXIgd2Ug
bWF5CisgICAgICAgICAgICAvLyB3YW50IG9yIG5lZWQgdG8ganVzdCBlbWl0IGEgc3BhY2UgcGVy
IGNoYXJhY3RlciB0byB0cnkKKyAgICAgICAgICAgIC8vIHRvIHByZXNlcnZlIGNvbHVtbiBudW1i
ZXJzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KK30gLy8gbmFtZXNwYWNlIGFub255bW91cworCitjbGFzcyBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRMb3N0Q2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0M0Q6OkNvbnRleHRM
b3N0Q2FsbGJhY2sgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjayhXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikgeyB9CisgICAgdmlydHVhbCB2b2lkIG9uQ29u
dGV4dExvc3QoKSBvdmVycmlkZSB7IG1fY29udGV4dC0+Zm9yY2VMb3N0Q29udGV4dChXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OlJlYWxMb3N0Q29udGV4dCk7IH0KKyAgICB2aXJ0dWFsIH5XZWJHTFJl
bmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2soKSB7fQorcHJpdmF0ZToKKyAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQqIG1fY29udGV4dDsKK307CisKK2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEVycm9yTWVzc2FnZUNhbGxiYWNrIDogcHVibGljIEdyYXBoaWNzQ29udGV4dDNEOjpFcnJvck1l
c3NhZ2VDYWxsYmFjayB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2soV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjYikgOiBtX2NvbnRleHQoY2IpIHsgfQorICAgIHZpcnR1YWwg
dm9pZCBvbkVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UsIEdDM0RpbnQpIG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAobV9jb250ZXh0LT5tX3N5bnRoZXNpemVkRXJyb3JzVG9D
b25zb2xlKQorICAgICAgICAgICAgbV9jb250ZXh0LT5wcmludEdMRXJyb3JUb0NvbnNvbGUobWVz
c2FnZSk7CisgICAgfQorICAgIHZpcnR1YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVz
c2FnZUNhbGxiYWNrKCkgeyB9Citwcml2YXRlOgorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCog
bV9jb250ZXh0OworfTsKKworc3RkOjp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywg
V2ViR0xDb250ZXh0QXR0cmlidXRlcyogYXR0cnMpCit7CisgICAgRG9jdW1lbnQmIGRvY3VtZW50
ID0gY2FudmFzLT5kb2N1bWVudCgpOworICAgIEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LmZyYW1l
KCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAvLyBU
aGUgRnJhbWVMb2FkZXJDbGllbnQgbWlnaHQgYmxvY2sgY3JlYXRpb24gb2YgYSBuZXcgV2ViR0wg
Y29udGV4dCBkZXNwaXRlIHRoZSBwYWdlIHNldHRpbmdzOyBpbgorICAgIC8vIHBhcnRpY3VsYXIs
IGlmIFdlYkdMIGNvbnRleHRzIHdlcmUgbG9zdCBvbmUgb3IgbW9yZSB0aW1lcyB2aWEgdGhlIEdM
X0FSQl9yb2J1c3RuZXNzIGV4dGVuc2lvbi4KKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS5jbGll
bnQoKS5hbGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdMRW5hYmxlZCgpKSkgeworICAg
ICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxzZSwgdHJ1ZSwgIldl
YiBwYWdlIHdhcyBub3QgYWxsb3dlZCB0byBjcmVhdGUgYSBXZWJHTCBjb250ZXh0LiIpKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgYm9vbCBpc1BlbmRpbmdQb2xpY3lS
ZXNvbHV0aW9uID0gZmFsc2U7CisgICAgRG9jdW1lbnQmIHRvcERvY3VtZW50ID0gZG9jdW1lbnQu
dG9wRG9jdW1lbnQoKTsKKyAgICBQYWdlKiBwYWdlID0gdG9wRG9jdW1lbnQucGFnZSgpOworICAg
IGlmIChwYWdlICYmICF0b3BEb2N1bWVudC51cmwoKS5pc0xvY2FsRmlsZSgpKSB7CisgICAgICAg
IFdlYkdMTG9hZFBvbGljeSBwb2xpY3kgPSBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGll
bnQoKS53ZWJHTFBvbGljeUZvclVSTCh0b3BEb2N1bWVudC51cmwoKSk7CisKKyAgICAgICAgaWYg
KHBvbGljeSA9PSBXZWJHTEJsb2NrQ3JlYXRpb24pIHsKKyAgICAgICAgICAgIExPRyhXZWJHTCwg
IlRoZSBwb2xpY3kgZm9yIHRoaXMgVVJMICglcykgaXMgdG8gYmxvY2sgV2ViR0wuIiwgdG9wRG9j
dW1lbnQudXJsKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMUGVuZGluZ0Ny
ZWF0aW9uKSB7CisgICAgICAgICAgICBMT0coV2ViR0wsICJXZWJHTCBwb2xpY3kgaXMgcGVuZGlu
Zy4gTWF5IG5lZWQgdG8gYmUgcmVzb2x2ZWQgbGF0ZXIuIik7CisgICAgICAgICAgICBpc1BlbmRp
bmdQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBhdHRycyA/IGF0dHJzLT5hdHRy
aWJ1dGVzKCkgOiBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcygpOworCisgICAgaWYgKGF0
dHJpYnV0ZXMuYW50aWFsaWFzKSB7CisgICAgICAgIGlmICghZnJhbWUtPnNldHRpbmdzKCkub3Bl
bkdMTXVsdGlzYW1wbGluZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMuYW50aWFs
aWFzID0gZmFsc2U7CisgICAgfQorCisgICAgYXR0cmlidXRlcy5ub0V4dGVuc2lvbnMgPSB0cnVl
OworICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBmYWxzZTsKKyAgICBhdHRyaWJ1dGVz
LnByZWZlckRpc2NyZXRlR1BVID0gdHJ1ZTsKKworICAgIGlmIChmcmFtZS0+c2V0dGluZ3MoKS5m
b3JjZVNvZnR3YXJlV2ViR0xSZW5kZXJpbmcoKSkKKyAgICAgICAgYXR0cmlidXRlcy5mb3JjZVNv
ZnR3YXJlUmVuZGVyZXIgPSB0cnVlOworCisgICAgaWYgKHBhZ2UpCisgICAgICAgIGF0dHJpYnV0
ZXMuZGV2aWNlUGl4ZWxSYXRpbyA9IHBhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CisKKyAgICBp
ZiAoaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgeworICAgICAgICBMT0coV2ViR0wsICJDcmVh
dGUgYSBXZWJHTCBjb250ZXh0IHRoYXQgbG9va3MgcmVhbCwgYnV0IHdpbGwgcmVxdWlyZSBhIHBv
bGljeSByZXNvbHV0aW9uIGlmIHVzZWQuIik7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJH
TFJlbmRlcmluZ0NvbnRleHQ+IHJlbmRlcmluZ0NvbnRleHQobmV3IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dChjYW52YXMsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4dC0+c3Vz
cGVuZElmTmVlZGVkKCk7CisgICAgICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0OworICAgIH0K
KworICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1bWVudC52aWV3KCktPnJvb3QoKS0+
aG9zdFdpbmRvdygpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKKworICAgIGlm
ICghY29udGV4dCB8fCAhY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpIHsKKyAgICAgICAg
Y2FudmFzLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwgZmFsc2UsIHRydWUsICJDb3VsZCBu
b3QgY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdldEV4dGVu
c2lvbnMoKTsKKyAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9kZWJ1Z19tYXJr
ZXIiKSkKKyAgICAgICAgZXh0ZW5zaW9ucy0+cHVzaEdyb3VwTWFya2VyRVhUKCJXZWJHTFJlbmRl
cmluZ0NvbnRleHQiKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ+IHJlbmRlcmluZ0NvbnRleHQobmV3IFdlYkdMUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGNv
bnRleHQsIGF0dHJpYnV0ZXMpKTsKKyAgICByZW5kZXJpbmdDb250ZXh0LT5zdXNwZW5kSWZOZWVk
ZWQoKTsKKworICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0OworfQorCitXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2Vk
Q2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDog
Q2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBBY3RpdmVET01PYmpl
Y3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY29udGV4dCgwKQorICAgICwg
bV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVy
KCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQp
CisgICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQorICAgICwgbV9yZXN0b3JlVGltZXIoKnRo
aXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQpCisgICAgLCBt
X2dlbmVyYXRlZEltYWdlQ2FjaGUoMCkKKyAgICAsIG1fY29udGV4dExvc3QoZmFsc2UpCisgICAg
LCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4dCkKKyAgICAsIG1fYXR0cmli
dXRlcyhhdHRyaWJ1dGVzKQorICAgICwgbV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZSh0cnVl
KQorICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQobWF4R0xFcnJvcnNBbGxvd2Vk
VG9Db25zb2xlKQorICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKHRydWUpCisgICAg
LCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24oZmFsc2UpCit7Cit9CisKK1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiBw
YXNzZWRDYW52YXMsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsCisgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQocGFzc2VkQ2FudmFzKQorICAgICwgQWN0aXZlRE9NT2JqZWN0KCZwYXNz
ZWRDYW52YXMtPmRvY3VtZW50KCkpCisgICAgLCBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1f
ZHJhd2luZ0J1ZmZlcigwKQorICAgICwgbV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcigq
dGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KQor
ICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKKyAgICAsIG1fcmVzdG9yZVRpbWVyKCp0aGlz
LCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJlc3RvcmVDb250ZXh0KQorICAgICwgbV9n
ZW5lcmF0ZWRJbWFnZUNhY2hlKDQpCisgICAgLCBtX2NvbnRleHRMb3N0KGZhbHNlKQorICAgICwg
bV9jb250ZXh0TG9zdE1vZGUoU3ludGhldGljTG9zdENvbnRleHQpCisgICAgLCBtX2F0dHJpYnV0
ZXMoYXR0cmlidXRlcykKKyAgICAsIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUodHJ1ZSkK
KyAgICAsIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkKG1heEdMRXJyb3JzQWxsb3dlZFRv
Q29uc29sZSkKKyAgICAsIG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbihmYWxzZSkKKyAgICAs
IG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxzZSkKK3sKKyAgICBBU1NFUlQobV9j
b250ZXh0KTsKKyAgICBtX2NvbnRleHRHcm91cCA9IFdlYkdMQ29udGV4dEdyb3VwOjpjcmVhdGUo
KTsKKyAgICBtX2NvbnRleHRHcm91cC0+YWRkQ29udGV4dCh0aGlzKTsKKworICAgIG1fbWF4Vmll
d3BvcnREaW1zWzBdID0gbV9tYXhWaWV3cG9ydERpbXNbMV0gPSAwOworICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WSUVXUE9SVF9ESU1TLCBtX21heFZp
ZXdwb3J0RGltcyk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdp
bmdCdWZmZXItPmJpbmQoKTsKKworICAgIHNldHVwRmxhZ3MoKTsKKyAgICBpbml0aWFsaXplTmV3
Q29udGV4dCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aW5pdGlhbGl6ZU5l
d0NvbnRleHQoKQoreworICAgIEFTU0VSVCghbV9jb250ZXh0TG9zdCk7CisgICAgbV9uZWVkc1Vw
ZGF0ZSA9IHRydWU7CisgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOworICAgIG1fYWN0
aXZlVGV4dHVyZVVuaXQgPSAwOworICAgIG1fcGFja0FsaWdubWVudCA9IDQ7CisgICAgbV91bnBh
Y2tBbGlnbm1lbnQgPSA0OworICAgIG1fdW5wYWNrRmxpcFkgPSBmYWxzZTsKKyAgICBtX3VucGFj
a1ByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTsKKyAgICBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJz
aW9uID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVGQVVMVF9XRUJHTDsKKyAgICBtX2Jv
dW5kQXJyYXlCdWZmZXIgPSAwOworICAgIG1fY3VycmVudFByb2dyYW0gPSAwOworICAgIG1fZnJh
bWVidWZmZXJCaW5kaW5nID0gMDsKKyAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSAwOworICAg
IG1fZGVwdGhNYXNrID0gdHJ1ZTsKKyAgICBtX3N0ZW5jaWxFbmFibGVkID0gZmFsc2U7CisgICAg
bV9zdGVuY2lsTWFzayA9IDB4RkZGRkZGRkY7CisgICAgbV9zdGVuY2lsTWFza0JhY2sgPSAweEZG
RkZGRkZGOworICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSAwOworICAgIG1fc3RlbmNpbEZ1bmNSZWZC
YWNrID0gMDsKKyAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IDB4RkZGRkZGRkY7CisgICAgbV9zdGVu
Y2lsRnVuY01hc2tCYWNrID0gMHhGRkZGRkZGRjsKKyAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNl
OworICAgIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkID0gbWF4R0xFcnJvcnNBbGxvd2Vk
VG9Db25zb2xlOworICAgIAorICAgIG1fY2xlYXJDb2xvclswXSA9IG1fY2xlYXJDb2xvclsxXSA9
IG1fY2xlYXJDb2xvclsyXSA9IG1fY2xlYXJDb2xvclszXSA9IDA7CisgICAgbV9zY2lzc29yRW5h
YmxlZCA9IGZhbHNlOworICAgIG1fY2xlYXJEZXB0aCA9IDE7CisgICAgbV9jbGVhclN0ZW5jaWwg
PSAwOworICAgIG1fY29sb3JNYXNrWzBdID0gbV9jb2xvck1hc2tbMV0gPSBtX2NvbG9yTWFza1sy
XSA9IG1fY29sb3JNYXNrWzNdID0gdHJ1ZTsKKworICAgIEdDM0RpbnQgbnVtQ29tYmluZWRUZXh0
dXJlSW1hZ2VVbml0cyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZudW1Db21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzKTsKKyAgICBtX3RleHR1cmVVbml0cy5jbGVhcigpOworICAgIG1fdGV4
dHVyZVVuaXRzLnJlc2l6ZShudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKworICAgIEdD
M0RpbnQgbnVtVmVydGV4QXR0cmlicyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTLCAmbnVtVmVydGV4QXR0cmlicyk7
CisgICAgbV9tYXhWZXJ0ZXhBdHRyaWJzID0gbnVtVmVydGV4QXR0cmliczsKKyAgICAKKyAgICBt
X21heFRleHR1cmVTaXplID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9t
YXhUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1dGVMZXZlbENvdW50KG1fbWF4VGV4
dHVyZVNpemUsIG1fbWF4VGV4dHVyZVNpemUpOworICAgIG1fbWF4Q3ViZU1hcFRleHR1cmVTaXpl
ID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhf
Q1VCRV9NQVBfVEVYVFVSRV9TSVpFLCAmbV9tYXhDdWJlTWFwVGV4dHVyZVNpemUpOworICAgIG1f
bWF4Q3ViZU1hcFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxldmVsQ291bnQo
bV9tYXhDdWJlTWFwVGV4dHVyZVNpemUsIG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplKTsKKyAgICBt
X21heFJlbmRlcmJ1ZmZlclNpemUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRSwgJm1fbWF4UmVuZGVyYnVmZmVy
U2l6ZSk7CisKKyAgICAvLyBUaGVzZSB0d28gdmFsdWVzIGZyb20gRVhUX2RyYXdfYnVmZmVycyBh
cmUgbGF6aWx5IHF1ZXJpZWQuCisgICAgbV9tYXhEcmF3QnVmZmVycyA9IDA7CisgICAgbV9tYXhD
b2xvckF0dGFjaG1lbnRzID0gMDsKKworICAgIG1fYmFja0RyYXdCdWZmZXIgPSBHcmFwaGljc0Nv
bnRleHQzRDo6QkFDSzsKKyAgICBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2Vk
ID0gZmFsc2U7CisgICAgbV9kcmF3QnVmZmVyc1N1cHBvcnRlZCA9IGZhbHNlOworCisgICAgbV9k
ZWZhdWx0VmVydGV4QXJyYXlPYmplY3QgPSBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpjcmVh
dGUodGhpcywgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmFvVHlwZURlZmF1bHQpOworICAg
IGFkZENvbnRleHRPYmplY3QobV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QuZ2V0KCkpOworICAg
IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0Owor
ICAgIAorICAgIG1fdmVydGV4QXR0cmliVmFsdWUucmVzaXplKG1fbWF4VmVydGV4QXR0cmlicyk7
CisKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNyZWF0ZUZhbGxiYWNr
QmxhY2tUZXh0dXJlczF4MSgpOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAg
ICBpbml0VmVydGV4QXR0cmliMCgpOworCisgICAgSW50U2l6ZSBjYW52YXNTaXplID0gY2xhbXBl
ZENhbnZhc1NpemUoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdp
bmdCdWZmZXItPnJlc2V0KGNhbnZhc1NpemUpOworCisgICAgbV9jb250ZXh0LT5yZXNoYXBlKGNh
bnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7CisgICAgbV9jb250ZXh0LT52
aWV3cG9ydCgwLCAwLCBjYW52YXNTaXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOwor
ICAgIG1fY29udGV4dC0+c2Npc3NvcigwLCAwLCBjYW52YXNTaXplLndpZHRoKCksIGNhbnZhc1Np
emUuaGVpZ2h0KCkpOworCisgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0TG9zdENhbGxiYWNrKHN0
ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrPih0aGlzKSk7
CisgICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhzdGQ6Om1ha2VfdW5pcXVl
PFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrPih0aGlzKSk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzZXR1cEZsYWdzKCkKK3sKKyAgICBBU1NFUlQo
bV9jb250ZXh0KTsKKworICAgIGlmIChQYWdlKiBwYWdlID0gY2FudmFzKCktPmRvY3VtZW50KCku
cGFnZSgpKQorICAgICAgICBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlID0gcGFnZS0+c2V0
dGluZ3MoKS53ZWJHTEVycm9yc1RvQ29uc29sZUVuYWJsZWQoKTsKKworICAgIG1faXNHTEVTMkNv
bXBsaWFudCA9IG1fY29udGV4dC0+aXNHTEVTMkNvbXBsaWFudCgpOworICAgIG1faXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3N0cmljdF9hdHRyaWJzIik7CisgICAgbV9pc1Jlc291
cmNlU2FmZSA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0NIUk9N
SVVNX3Jlc291cmNlX3NhZmUiKTsKKyAgICBpZiAobV9pc0dMRVMyQ29tcGxpYW50KSB7CisgICAg
ICAgIG1faXNHTEVTMk5QT1RTdHJpY3QgPSAhbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlz
RW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfbnBvdCIpOworICAgICAgICBtX2lzRGVwdGhTdGVuY2ls
U3VwcG9ydGVkID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfT0VT
X3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9pc0dMRVMy
TlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9B
UkJfdGV4dHVyZV9ub25fcG93ZXJfb2ZfdHdvIik7CisgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxT
dXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9FWFRf
cGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKyAgICB9CisgICAgbV9pc1JvYnVzdG5lc3NFWFRTdXBw
b3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9FWFRfcm9i
dXN0bmVzcyIpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWxsb3dQcml2aWxl
Z2VkRXh0ZW5zaW9ucygpIGNvbnN0Cit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMoKS0+
ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLnByaXZp
bGVnZWRXZWJHTEV4dGVuc2lvbnNFbmFibGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0Mz
RGVudW0gZm9ybWF0KQoreworICAgIGlmICghbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuY29u
dGFpbnMoZm9ybWF0KSkKKyAgICAgICAgbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuYXBwZW5k
KGZvcm1hdCk7Cit9CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6fldlYkdMUmVuZGVyaW5nQ29u
dGV4dCgpCit7CisgICAgLy8gUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIFdlYkdMT2JqZWN0cyBz
byBpZiB0aGV5IGFyZSB0aGUgbGFzdCByZWZlcmVuY2UKKyAgICAvLyB0aGV5IHdpbGwgYmUgZnJl
ZWQgYmVmb3JlIHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb250ZXh0IGdy
b3VwLgorICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IG51bGxwdHI7CisgICAgbV9kZWZhdWx0VmVy
dGV4QXJyYXlPYmplY3QgPSBudWxscHRyOworICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9
IG51bGxwdHI7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX2N1
cnJlbnRQcm9ncmFtID0gbnVsbHB0cjsKKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IG51bGxw
dHI7CisgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gbnVsbHB0cjsKKworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgbV90
ZXh0dXJlVW5pdHNbaV0udGV4dHVyZTJEQmluZGluZyA9IG51bGxwdHI7CisgICAgICAgIG1fdGV4
dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZyA9IG51bGxwdHI7CisgICAgfQorCisg
ICAgbV9ibGFja1RleHR1cmUyRCA9IG51bGxwdHI7CisgICAgbV9ibGFja1RleHR1cmVDdWJlTWFw
ID0gbnVsbHB0cjsKKworICAgIGlmICghbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7Cisg
ICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKyAgICAgICAgZGVzdHJveUdyYXBo
aWNzQ29udGV4dDNEKCk7CisgICAgICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVDb250ZXh0KHRo
aXMpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlc3Ryb3lHcmFw
aGljc0NvbnRleHQzRCgpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikK
KyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIGRyYXdpbmcgYnVmZmVyIGhvbGRzIGEgY29u
dGV4dCByZWZlcmVuY2UuIEl0IG11c3QgYWxzbyBiZSBkZXN0cm95ZWQKKyAgICAvLyBpbiBvcmRl
ciBmb3IgdGhlIGNvbnRleHQgdG8gYmUgcmVsZWFzZWQuCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLmNsZWFyKCk7CisKKyAgICBpZiAobV9jb250ZXh0
KSB7CisgICAgICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhudWxscHRyKTsK
KyAgICAgICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VDYWxsYmFjayhudWxscHRyKTsKKyAg
ICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+bWFya0NvbnRleHRDaGFu
Z2VkKCk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPm1hcmtDb250ZW50c0NoYW5nZWQoKTsKKworICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7
CisgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7CisgICAg
aWYgKGlzQWNjZWxlcmF0ZWQoKSAmJiByZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVy
YXRlZENvbXBvc2l0aW5nKCkpIHsKKyAgICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IHRydWU7
CisgICAgICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdlKCk7CisgICAgICAgIHJlbmRlckJv
eC0+Y29udGVudENoYW5nZWQoQ2FudmFzQ2hhbmdlZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKCFtX21hcmtlZENhbnZhc0RpcnR5KSB7CisgICAgICAgICAgICBtX21hcmtlZENhbnZhc0Rp
cnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIGNhbnZhcygpLT5kaWREcmF3KEZsb2F0UmVjdChGbG9h
dFBvaW50KDAsIDApLCBjbGFtcGVkQ2FudmFzU2l6ZSgpKSk7CisgICAgICAgIH0KKyAgICB9Cit9
CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcklmQ29tcG9zaXRlZChHQzNEYml0
ZmllbGQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIW1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkg
fHwgbV9sYXllckNsZWFyZWQKKyAgICAgICAgfHwgbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2lu
Z0J1ZmZlciB8fCAobWFzayAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZykpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBjb250ZXh0QXR0
cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICAvLyBEZXRlcm1pbmUgaWYg
aXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVhciB0aGUgdXNlciBhc2tlZCBmb3IgYW5k
IHRoaXMgY2xlYXIuCisgICAgYm9vbCBjb21iaW5lZENsZWFyID0gbWFzayAmJiAhbV9zY2lzc29y
RW5hYmxlZDsKKworICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJ
U1NPUl9URVNUKTsKKyAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9y
KG1fY29sb3JNYXNrWzBdID8gbV9jbGVhckNvbG9yWzBdIDogMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY29sb3JNYXNrWzFdID8gbV9jbGVhckNvbG9yWzFdIDogMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzJdID8gbV9jbGVhckNvbG9yWzJd
IDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzNdID8gbV9j
bGVhckNvbG9yWzNdIDogMCk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPmNsZWFyQ29s
b3IoMCwgMCwgMCwgMCk7CisgICAgbV9jb250ZXh0LT5jb2xvck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1
ZSwgdHJ1ZSk7CisgICAgR0MzRGJpdGZpZWxkIGNsZWFyTWFzayA9IEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9CVUZGRVJfQklUOworICAgIGlmIChjb250ZXh0QXR0cmlidXRlcy0+ZGVwdGgoKSkg
eworICAgICAgICBpZiAoIWNvbWJpbmVkQ2xlYXIgfHwgIW1fZGVwdGhNYXNrIHx8ICEobWFzayAm
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUKSkKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+Y2xlYXJEZXB0aCgxLjBmKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9CVUZGRVJfQklUOworICAgICAgICBtX2NvbnRleHQtPmRlcHRoTWFzayh0
cnVlKTsKKyAgICB9CisgICAgaWYgKGNvbnRleHRBdHRyaWJ1dGVzLT5zdGVuY2lsKCkpIHsKKyAg
ICAgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9CVUZGRVJfQklUKSkKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKG1f
Y2xlYXJTdGVuY2lsICYgbV9zdGVuY2lsTWFzayk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOworICAgICAgICBjbGVhck1hc2sgfD0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVDsKKyAgICAgICAgbV9jb250ZXh0LT5zdGVu
Y2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVCwgMHhGRkZGRkZGRik7Cisg
ICAgfQorICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
Y2xlYXJGcmFtZWJ1ZmZlcnMoY2xlYXJNYXNrKTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICAgICAgbV9jb250ZXh0
LT5jbGVhcihjbGVhck1hc2spOworICAgIH0KKworICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIo
KTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJv
KG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgbV9sYXllckNsZWFyZWQgPSB0cnVl
OworCisgICAgcmV0dXJuIGNvbWJpbmVkQ2xlYXI7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZXN0b3JlU3RhdGVBZnRlckNsZWFyKCkKK3sKKyAgICAvLyBSZXN0b3JlIHRoZSBz
dGF0ZSB0aGF0IHRoZSBjb250ZXh0IHNldC4KKyAgICBpZiAobV9zY2lzc29yRW5hYmxlZCkKKyAg
ICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7
CisgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY2xlYXJDb2xvclswXSwgbV9jbGVhckNvbG9y
WzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NsZWFyQ29sb3JbMl0sIG1fY2xlYXJD
b2xvclszXSk7CisgICAgbV9jb250ZXh0LT5jb2xvck1hc2sobV9jb2xvck1hc2tbMF0sIG1fY29s
b3JNYXNrWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzJdLCBtX2Nv
bG9yTWFza1szXSk7CisgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKG1fY2xlYXJEZXB0aCk7Cisg
ICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwpOworICAgIG1fY29udGV4
dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIG1fc3RlbmNp
bE1hc2spOworICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKG1fZGVwdGhNYXNrKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRl
eHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoY2FudmFzKCktPmRv
Y3VtZW50KCkucHJpbnRpbmcoKSkKKyAgICAgICAgY2FudmFzKCktPmNsZWFyUHJlc2VudGF0aW9u
Q29weSgpOworCisgICAgLy8gVW50aWwgdGhlIGNhbnZhcyBpcyB3cml0dGVuIHRvIGJ5IHRoZSBh
cHBsaWNhdGlvbiwgdGhlIGNsZWFyIHRoYXQKKyAgICAvLyBoYXBwZW5lZCBhZnRlciBpdCB3YXMg
Y29tcG9zaXRlZCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgY29tcG9zaXRvci4KKyAgICBpZiAo
bV9jb250ZXh0LT5sYXllckNvbXBvc2l0ZWQoKSAmJiAhbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJh
d2luZ0J1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPnBhaW50Q29tcG9zaXRlZFJlc3VsdHNU
b0NhbnZhcyhjYW52YXMoKS0+YnVmZmVyKCkpOworCisgICAgICAgIGNhbnZhcygpLT5tYWtlUHJl
c2VudGF0aW9uQ29weSgpOworICAgIH0gZWxzZQorICAgICAgICBjYW52YXMoKS0+Y2xlYXJQcmVz
ZW50YXRpb25Db3B5KCk7CisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAgIGlmICghbV9t
YXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9sYXllckNsZWFyZWQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdlKCk7CisgICAgbV9tYXJrZWRDYW52YXNEaXJ0
eSA9IGZhbHNlOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5n
QnVmZmVyLT5jb21taXQoKTsKKyAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSwgbV9kcmF3aW5nQnVmZmVyLmdldCgpKTsKKworICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5n
KQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkp
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Cisg
ICAgfQorfQorCitQYXNzUmVmUHRyPEltYWdlRGF0YT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY2xlYXJJZkNvbXBv
c2l0ZWQoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmNvbW1pdCgpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IG1fY29udGV4
dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEobV9kcmF3aW5nQnVmZmVyLmdldCgp
KTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nKQorICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRp
bmcuZ2V0KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5i
aW5kKCk7CisgICAgfQorCisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRo
aXMgaXMgYW4gYXBwcm94aW1hdGlvbiBiZWNhdXNlIGF0IFdlYkdMUmVuZGVyaW5nQ29udGV4dCBs
ZXZlbCB3ZSBkb24ndAorICAgIC8vIGtub3cgaWYgdGhlIHVuZGVybHlpbmcgRkJPIHVzZXMgdGV4
dHVyZXMgb3IgcmVuZGVyYnVmZmVycy4KKyAgICBHQzNEaW50IG1heFNpemUgPSBzdGQ6Om1pbiht
X21heFRleHR1cmVTaXplLCBtX21heFJlbmRlcmJ1ZmZlclNpemUpOworICAgIC8vIExpbWl0IGRy
YXdpbmcgYnVmZmVyIHNpemUgdG8gNGsgdG8gYXZvaWQgbWVtb3J5IGV4aGF1c3Rpb24uCisgICAg
Y29uc3QgaW50IHNpemVVcHBlckxpbWl0ID0gNDA5NjsKKyAgICBtYXhTaXplID0gc3RkOjptaW4o
bWF4U2l6ZSwgc2l6ZVVwcGVyTGltaXQpOworICAgIEdDM0RpbnQgbWF4V2lkdGggPSBzdGQ6Om1p
bihtYXhTaXplLCBtX21heFZpZXdwb3J0RGltc1swXSk7CisgICAgR0MzRGludCBtYXhIZWlnaHQg
PSBzdGQ6Om1pbihtYXhTaXplLCBtX21heFZpZXdwb3J0RGltc1sxXSk7CisgICAgd2lkdGggPSBj
bGFtcCh3aWR0aCwgMSwgbWF4V2lkdGgpOworICAgIGhlaWdodCA9IGNsYW1wKGhlaWdodCwgMSwg
bWF4SGVpZ2h0KTsKKworICAgIGlmIChtX25lZWRzVXBkYXRlKSB7CisgICAgICAgIFJlbmRlckJv
eCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOworICAgICAgICBpZiAocmVuZGVy
Qm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQorICAgICAgICAg
ICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKKyAgICAgICAgbV9u
ZWVkc1VwZGF0ZSA9IGZhbHNlOworICAgIH0KKworICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gbWFy
ayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUgbmV3bHkgY3JlYXRlZCBpbWFnZSBidWZm
ZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgorICAgIC8vIGNsZWFyIChhbmQgdGhpcyBtYXRjaGVzIHdo
YXQgcmVzaGFwZSB3aWxsIGRvKS4KKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CisgICAgICAg
IHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0
LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOworCisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0T3JaZXJvKG1fdGV4dHVyZVVuaXRz
W21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcuZ2V0KCkpKTsKKyAgICBtX2Nv
bnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwg
b2JqZWN0T3JaZXJvKG1fcmVuZGVyYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZykKKyAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5k
aW5nLmdldCgpKSk7Cit9CisKK2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZm
ZXJXaWR0aCgpIGNvbnN0Cit7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgcmV0
dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7CisKKyAgICByZXR1cm4gbV9jb250
ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7Cit9CisKK2ludCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWlnaHQoKSBjb25zdAoreworICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNpemUo
KS5oZWlnaHQoKTsKKworICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZm
ZXJTaXplKCkuaGVpZ2h0KCk7Cit9CisKK3Vuc2lnbmVkIGludCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKKyAgICAgICAgcmV0dXJuIHNpemVvZihH
QzNEYnl0ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAg
ICAgICAgcmV0dXJuIHNpemVvZihHQzNEdWJ5dGUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNIT1JUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RzaG9ydCk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgICAgIHJldHVybiBzaXplb2Yo
R0MzRHVzaG9ydCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgorICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEdDM0RpbnQpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0lOVDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEdWludCk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RkxPQVQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGZsb2F0KTsK
KyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICh0ZXh0dXJl
IC0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwID49IG1fdGV4dHVyZVVuaXRzLnNpemUoKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiYWN0aXZlVGV4dHVyZSIsICJ0ZXh0dXJlIHVuaXQgb3V0IG9mIHJhbmdlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmUgLSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTA7CisgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJl
KHRleHR1cmUpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5n
QnVmZmVyLT5zZXRBY3RpdmVUZXh0dXJlVW5pdCh0ZXh0dXJlKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHByb2dyYW0sIFdlYkdM
U2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9i
amVjdCgiYXR0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImF0
dGFjaFNoYWRlciIsIHNoYWRlcikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXByb2dyYW0t
PmF0dGFjaFNoYWRlcihzaGFkZXIpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImF0dGFjaFNoYWRlciIsICJzaGFkZXIg
YXR0YWNobWVudCBhbHJlYWR5IGhhcyBzaGFkZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihvYmplY3RPclplcm8ocHJvZ3JhbSksIG9iamVj
dE9yWmVybyhzaGFkZXIpKTsKKyAgICBzaGFkZXItPm9uQXR0YWNoZWQoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgcHJv
Z3JhbSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgo
ImJpbmRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2
YWxpZGF0ZVN0cmluZygiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kQXR0cmli
TG9jYXRpb24iLCAicmVzZXJ2ZWQgcHJlZml4Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJpbmRBdHRyaWJMb2Nh
dGlvbiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBtX2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIGlu
ZGV4LCBuYW1lKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrT2JqZWN0
VG9CZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqIG9iamVjdCwg
Ym9vbCYgZGVsZXRlZCkKK3sKKyAgICBkZWxldGVkID0gZmFsc2U7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChvYmplY3Qp
IHsKKyAgICAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkg
eworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmplY3Qgbm90IGZyb20gdGhpcyBjb250ZXh0
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZGVsZXRl
ZCA9ICFvYmplY3QtPm9iamVjdCgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJH
TEJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJi
aW5kQnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChk
ZWxldGVkKQorICAgICAgICBidWZmZXIgPSAwOworICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5n
ZXRUYXJnZXQoKSAmJiBidWZmZXItPmdldFRhcmdldCgpICE9IHRhcmdldCkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJi
aW5kQnVmZmVyIiwgImJ1ZmZlcnMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0
cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUikKKyAgICAgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gYnVm
ZmVyOworICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9B
UlJBWV9CVUZGRVIpCisgICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0RWxlbWVu
dEFycmF5QnVmZmVyKGJ1ZmZlcik7CisgICAgZWxzZSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kQnVmZmVyIiwgImludmFs
aWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPmJp
bmRCdWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8oYnVmZmVyKSk7CisgICAgaWYgKGJ1ZmZlcikK
KyAgICAgICAgYnVmZmVyLT5zZXRUYXJnZXQodGFyZ2V0KTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVi
dWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmlu
ZEZyYW1lYnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
IChkZWxldGVkKQorICAgICAgICBidWZmZXIgPSAwOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kRnJhbWVidWZmZXIiLCAiaW52YWxp
ZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2ZyYW1lYnVmZmVyQmlu
ZGluZyA9IGJ1ZmZlcjsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdp
bmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZyhvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZl
ckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJh
d2luZ0J1ZmZlcikgeworICAgICAgICAvLyBJbnN0ZWFkIG9mIGJpbmRpbmcgZmIgMCwgYmluZCB0
aGUgZHJhd2luZyBidWZmZXIuCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAg
IH0gZWxzZQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIG9iamVj
dE9yWmVybyhidWZmZXIpKTsKKyAgICBpZiAoYnVmZmVyKQorICAgICAgICBidWZmZXItPnNldEhh
c0V2ZXJCZWVuQm91bmQoKTsKKyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2Vi
R0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVj
dFRvQmVCb3VuZCgiYmluZFJlbmRlcmJ1ZmZlciIsIHJlbmRlckJ1ZmZlciwgZGVsZXRlZCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAgcmVuZGVyQnVmZmVyID0g
MDsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImJpbmRSZW5kZXJidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSByZW5kZXJCdWZmZXI7CisgICAg
bV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKHJlbmRlckJ1
ZmZlcikpOworICAgIGlmIChyZW5kZXJCdWZmZXIpCisgICAgICAgIHJlbmRlckJ1ZmZlci0+c2V0
SGFzRXZlckJlZW5Cb3VuZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymlu
ZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgYm9vbCBkZWxldGVkOwor
ICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRUZXh0dXJlIiwgdGV4dHVyZSwgZGVs
ZXRlZCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAgdGV4dHVy
ZSA9IDA7CisgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgJiYgdGV4dHVy
ZS0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRUZXh0dXJlIiwgInRleHR1
cmVzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBHQzNEaW50IG1heExldmVsID0gMDsKKyAgICBpZiAodGFyZ2V0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKSB7CisgICAgICAgIG1fdGV4dHVyZVVuaXRz
W21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcgPSB0ZXh0dXJlOworICAgICAg
ICBtYXhMZXZlbCA9IG1fbWF4VGV4dHVyZUxldmVsOworCisgICAgICAgIGlmIChtX2RyYXdpbmdC
dWZmZXIgJiYgIW1fYWN0aXZlVGV4dHVyZVVuaXQpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPnNldFRleHR1cmUyREJpbmRpbmcob2JqZWN0T3JaZXJvKHRleHR1cmUpKTsKKworICAgIH0g
ZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQKSB7
CisgICAgICAgIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJl
TWFwQmluZGluZyA9IHRleHR1cmU7CisgICAgICAgIG1heExldmVsID0gbV9tYXhDdWJlTWFwVGV4
dHVyZUxldmVsOworICAgIH0gZWxzZSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kVGV4dHVyZSIsICJpbnZhbGlkIHRhcmdl
dCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
dGFyZ2V0LCBvYmplY3RPclplcm8odGV4dHVyZSkpOworICAgIGlmICh0ZXh0dXJlKQorICAgICAg
ICB0ZXh0dXJlLT5zZXRUYXJnZXQodGFyZ2V0LCBtYXhMZXZlbCk7CisKKyAgICAvLyBOb3RlOiBw
cmV2aW91c2x5IHdlIHVzZWQgdG8gYXV0b21hdGljYWxseSBzZXQgdGhlIFRFWFRVUkVfV1JBUF9S
CisgICAgLy8gcmVwZWF0IG1vZGUgdG8gQ0xBTVBfVE9fRURHRSBmb3IgY3ViZSBtYXAgdGV4dHVy
ZXMsIGJlY2F1c2UgT3BlbkdMCisgICAgLy8gRVMgMi4wIGRvZXNuJ3QgZXhwb3NlIHRoaXMgZmxh
ZyAoYSBidWcgaW4gdGhlIHNwZWNpZmljYXRpb24pIGFuZAorICAgIC8vIG90aGVyd2lzZSB0aGUg
YXBwbGljYXRpb24gaGFzIG5vIGNvbnRyb2wgb3ZlciB0aGUgc2VhbXMgaW4gdGhpcworICAgIC8v
IGRpbWVuc2lvbi4gSG93ZXZlciwgaXQgYXBwZWFycyB0aGF0IHN1cHBvcnRpbmcgdGhpcyBwcm9w
ZXJseSBvbiBhbGwKKyAgICAvLyBwbGF0Zm9ybXMgaXMgZmFpcmx5IGludm9sdmVkICh3aWxsIHJl
cXVpcmUgYSBIYXNoTWFwIGZyb20gdGV4dHVyZSBJRAorICAgIC8vIGluIGFsbCBwb3J0cyksIGFu
ZCB3ZSBoYXZlIG5vdCBoYWQgYW55IGNvbXBsYWludHMsIHNvIHRoZSBsb2dpYyBoYXMKKyAgICAv
LyBiZWVuIHJlbW92ZWQuCit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZENv
bG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwgR0MzRGZsb2F0IGJsdWUsIEdDM0Rm
bG9hdCBhbHBoYSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9jb250ZXh0LT5ibGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb24oR0Mz
RGVudW0gbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBH
QzNEZW51bSBtb2RlQWxwaGEpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZVJHQikgfHwgIXZh
bGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGVBbHBoYSkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NvbnRleHQtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBt
b2RlQWxwaGEpOworfQorCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEZ1bmMo
R0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3RvcikKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoImJsZW5kRnVuYyIs
IHNmYWN0b3IsIGRmYWN0b3IpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5ibGVu
ZEZ1bmMoc2ZhY3RvciwgZGZhY3Rvcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0Mz
RGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQoreworICAgIC8vIE5vdGU6IEFscGhh
IGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIFJHQi4KKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoImJsZW5k
RnVuYyIsIHNyY1JHQiwgZHN0UkdCKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+
YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgbG9uZyBsb25nIHNpemUsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZm
ZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNhZ2UpOworICAgIGlmICgh
YnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHNpemUgPCAwKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVy
RGF0YSIsICJzaXplIDwgMCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghc2l6
ZSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAic2l6ZSA9PSAwIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsK
KyAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoc3RhdGljX2Nhc3Q8R0Mz
RHNpemVpcHRyPihzaXplKSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZl
ciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX2NvbnRleHQtPmJ1
ZmZlckRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpLCB1c2FnZSk7
CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsK
KyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZm
ZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgorICAgICAgICBi
dWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXIq
IGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1l
dGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNhZ2UpOworICAgIGlmICghYnVmZmVyKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCFkYXRhKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJubyBkYXRh
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25P
dXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKKyAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1
ZmZlckRhdGEoZGF0YSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgbV9jb250ZXh0
LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZl
ckRhdGEodGFyZ2V0LCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmRhdGEoKSwgdXNhZ2UpOwor
ICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Cisg
ICAgICAgIC8vIFRoZSBidWZmZXJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVy
IGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVm
ZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyVmll
dyogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJh
bWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7CisgICAgaWYgKCFidWZmZXIpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgIm5vIGRh
dGEiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRP
bk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRl
QnVmZmVyRGF0YShkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVy
Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2NvbnRl
eHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+YnVm
ZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSwg
dXNhZ2UpOworICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlz
dCgpKSB7CisgICAgICAgIC8vIFRoZSBidWZmZXJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0
aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAg
ICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxv
bmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZm
ZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyU3ViRGF0YSIsIHRhcmdldCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgPCAwIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKKyAgICAg
ICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEoc3RhdGljX2Nhc3Q8R0MzRGlu
dHB0cj4ob2Zmc2V0KSwgZGF0YSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQg
b3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1f
Y29udGV4dC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9m
ZnNldCksIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+ZGF0YSgpKTsKKyAgICBpZiAobV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUg
YnVmZmVyU3ViRGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0
IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNz
b2NpYXRlQnVmZmVyRGF0YSgpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJh
eUJ1ZmZlclZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJz
KCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcp
OworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG9mZnNldCA8IDAp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRXJyb3JH
ZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+
YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBk
YXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIG1fY29udGV4dC0+
bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZmZXJT
dWJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0
ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyU3Vi
RGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhl
IGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVm
ZmVyRGF0YSgpOworICAgIH0KK30KKworR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIiwgImludmFsaWQg
dGFyZ2V0Iik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoIW1fZnJhbWVidWZm
ZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgIHJl
dHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEU7CisgICAgY29uc3Qg
Y2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIEdDM0RlbnVtIHJl
c3VsdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5jaGVja1N0YXR1cygmcmVhc29uKTsKKyAgICBp
ZiAocmVzdWx0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewor
ICAgICAgICBwcmludEdMV2FybmluZ1RvQ29uc29sZSgiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyIs
IHJlYXNvbik7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIHJlc3VsdCA9IG1f
Y29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhcihHQzNEYml0ZmllbGQg
bWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKG1hc2sgJiB+KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklU
IHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyIiwgImludmFsaWQgbWFzayIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1
ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJj
ZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY2xlYXIiLCByZWFzb24p
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghY2xlYXJJZkNvbXBvc2l0ZWQobWFz
aykpCisgICAgICAgIG1fY29udGV4dC0+Y2xlYXIobWFzayk7CisgICAgbWFya0NvbnRleHRDaGFu
Z2VkKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhckNvbG9yKEdDM0Rm
bG9hdCByLCBHQzNEZmxvYXQgZywgR0MzRGZsb2F0IGIsIEdDM0RmbG9hdCBhKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoc3Rk
Ojppc25hbihyKSkKKyAgICAgICAgciA9IDA7CisgICAgaWYgKHN0ZDo6aXNuYW4oZykpCisgICAg
ICAgIGcgPSAwOworICAgIGlmIChzdGQ6OmlzbmFuKGIpKQorICAgICAgICBiID0gMDsKKyAgICBp
ZiAoc3RkOjppc25hbihhKSkKKyAgICAgICAgYSA9IDE7CisgICAgbV9jbGVhckNvbG9yWzBdID0g
cjsKKyAgICBtX2NsZWFyQ29sb3JbMV0gPSBnOworICAgIG1fY2xlYXJDb2xvclsyXSA9IGI7Cisg
ICAgbV9jbGVhckNvbG9yWzNdID0gYTsKKyAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IociwgZywg
YiwgYSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhckRlcHRoKEdDM0Rm
bG9hdCBkZXB0aCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9jbGVhckRlcHRoID0gZGVwdGg7CisgICAgbV9jb250ZXh0LT5jbGVh
ckRlcHRoKGRlcHRoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFyU3Rl
bmNpbChHQzNEaW50IHMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fY2xlYXJTdGVuY2lsID0gczsKKyAgICBtX2NvbnRleHQtPmNs
ZWFyU3RlbmNpbChzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbG9yTWFz
ayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBH
QzNEYm9vbGVhbiBhbHBoYSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQor
ICAgICAgICByZXR1cm47CisgICAgbV9jb2xvck1hc2tbMF0gPSByZWQ7CisgICAgbV9jb2xvck1h
c2tbMV0gPSBncmVlbjsKKyAgICBtX2NvbG9yTWFza1syXSA9IGJsdWU7CisgICAgbV9jb2xvck1h
c2tbM10gPSBhbHBoYTsKKyAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVl
LCBhbHBoYSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21waWxlU2hhZGVy
KFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgiY29tcGlsZVNoYWRlciIsIHNoYWRlcikpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIob2JqZWN0T3JaZXJvKHNoYWRlcikpOworICAgIEdD
M0RpbnQgdmFsdWU7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hh
ZGVyKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVTLCAmdmFsdWUpOworICAgIHNo
YWRlci0+c2V0VmFsaWQodmFsdWUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQg
Ym9yZGVyLCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVUZXhGdW5jTGV2
ZWwoImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KGludGVybmFsZm9ybWF0
KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiY29tcHJlc3NlZFRleEltYWdlMkQiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChib3JkZXIpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb21wcmVz
c2VkVGV4SW1hZ2UyRCIsICJib3JkZXIgbm90IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoImNvbXByZXNzZWRUZXhJ
bWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YSgi
Y29tcHJlc3NlZFRleEltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCwgZGF0
YSkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVU
ZXh0dXJlQmluZGluZygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAg
IGlmICghdGV4KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgp
KSB7CisgICAgICAgIGlmIChsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVp
Z2h0KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBv
d2VyIG9mIDIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBt
X2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4
dC0+Y29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsCisgICAgICAgIGJvcmRlciwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5i
YXNlQWRkcmVzcygpKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgY29tcHJlc3NlZFRleEltYWdlMkQgZnVuY3Rp
b24gZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1cmUgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRh
IGZvciB0aGlzIGxldmVsLgorICAgICAgICB0ZXgtPm1hcmtJbnZhbGlkKHRhcmdldCwgbGV2ZWwp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFKTsKKyAgICB0ZXgtPnNldENvbXByZXNzZWQoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVy
VmlldyogZGF0YSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleFN1
YkltYWdlMkQiLCB0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFs
aWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KGZvcm1hdCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNvbXByZXNzZWRUZXhTdWJJ
bWFnZTJEIiwgImludmFsaWQgZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YSgiY29tcHJlc3NlZFRleFN1YkltYWdl
MkQiLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGRhdGEpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvbXByZXNzZWRU
ZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGZvcm1hdCAhPSB0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwg
bGV2ZWwpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgImZvcm1hdCBkb2Vz
IG5vdCBtYXRjaCB0ZXh0dXJlIGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKCJjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgdGV4KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ3JhcGhpY3NDb250ZXh0
M0QoKS0+Y29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJl
c3MoKSk7CisgICAgdGV4LT5zZXRDb21wcmVzc2VkKCk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gZm9ybWF0KQoreworICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6Z2V0
Q2xlYXJCaXRzQnlGb3JtYXQoZm9ybWF0KSAmIChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVG
RkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiZm9ybWF0IGNhbiBub3QgYmUgc2V0LCBvbmx5IHJlbmRlcmVkIHRv
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
cikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJjb3B5VGV4SW1hZ2UyRCIsIE5v
dFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LCBib3JkZXIsIGludGVybmFsZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3Jt
YXQoImNvcHlUZXhJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKQorICAgICAgICByZXR1cm47Cisg
ICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb3B5VGV4SW1h
Z2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoaW50
ZXJuYWxmb3JtYXQsIGdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpKSkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJjb3B5VGV4SW1hZ2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGlibGUgZm9ybWF0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpICYm
IGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29w
eVRleEltYWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxl
dGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVh
c29uKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4SW1hZ2UyRCIsIHJlYXNvbik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKyAgICBpZiAo
aXNSZXNvdXJjZVNhZmUoKSkgeworICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJp
bmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsK
KyAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0
KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKKyAgICAgICAgR0MzRGludCBjbGlwcGVk
WCwgY2xpcHBlZFk7CisgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWln
aHQ7CisgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFt
ZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAm
Y2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgeworICAgICAgICAgICAg
bV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFLCBtX3VucGFja0FsaWdubWVudCk7CisgICAgICAgICAgICBpZiAoY2xpcHBl
ZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgeworICAgICAgICAgICAgICAgIG1fY29u
dGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgY2xpcHBlZFggLSB4LCBjbGlw
cGVkWSAtIHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
bGlwcGVkWCwgY2xpcHBlZFksIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyKTsKKyAgICB9CisgICAgLy8gRklYTUU6IGlmIHRoZSBmcmFtZWJ1ZmZlciBpcyBub3Qg
Y29tcGxldGUsIG5vbmUgb2YgdGhlIGJlbG93IHNob3VsZCBiZSBleGVjdXRlZC4KKyAgICB0ZXgt
PnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0
ZVRleEZ1bmNMZXZlbCgiY29weVRleFN1YkltYWdlMkQiLCB0YXJnZXQsIGxldmVsKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGlu
ZygiY29weVRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4KQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVNpemUoImNvcHlUZXhTdWJJbWFnZTJEIiwg
eG9mZnNldCwgeW9mZnNldCkgfHwgIXZhbGlkYXRlU2l6ZSgiY29weVRleFN1YkltYWdlMkQiLCB3
aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIEJlZm9yZSBjaGVja2luZyBp
ZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92ZXJmbG93IGhhcHBlbnMgZmlyc3QuCisg
ICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJiYWQgZGltZW5zaW9ucyIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXgtPmdldFdpZHRoKHRhcmdldCwg
bGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVs
KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgInJlY3RhbmdsZSBvdXQgb2YgcmFuZ2UiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCA9IHRl
eC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CisgICAgaWYgKCF2YWxpZGF0ZVNl
dHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4U3ViSW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29t
YmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9y
bWF0KCkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGlu
Y29tcGF0aWJsZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBj
aGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3ND
b250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJB
VElPTiwgImNvcHlUZXhTdWJJbWFnZTJEIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7
CisgICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZl
ci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQt
PmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHks
IHdpZHRoLCBoZWlnaHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIEdDM0RpbnQgY2xpcHBlZFgs
IGNsaXBwZWRZOworICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0
OworICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVi
dWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNs
aXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKKyAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCA9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7Cisg
ICAgICAgICAgICBHQzNEZW51bSB0eXBlID0gdGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpOwor
ICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVuc2lnbmVkIGNoYXJbXT4gemVybzsKKyAgICAg
ICAgICAgIGlmICh3aWR0aCAmJiBoZWlnaHQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgc2l6ZTsKKyAgICAgICAgICAgICAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29t
cHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3VucGFj
a0FsaWdubWVudCwgJnNpemUsIDApOworICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoZXJyb3IsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJiYWQgZGltZW5zaW9ucyIpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHplcm8gPSBzdGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVkIGNoYXJbXT4oc2l6ZSk7Cisg
ICAgICAgICAgICAgICAgaWYgKCF6ZXJvKSB7CisgICAgICAgICAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1Yklt
YWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1lbXNldCh6ZXJvLmdldCgpLCAwLCBz
aXplKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHplcm8uZ2V0KCkpOworICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYg
Y2xpcHBlZEhlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVy
QmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5n
LmdldCgpKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQgKyBjbGlwcGVkWCAtIHgsIHlvZmZzZXQgKyBjbGlwcGVkWSAt
IHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGlwcGVk
WCwgY2xpcHBlZFksIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVy
IGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgp
KTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH0KKyAg
ICB9Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG8gPSBXZWJHTEJ1
ZmZlcjo6Y3JlYXRlKHRoaXMpOworICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICBy
ZXR1cm4gbzsKK30KKworUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8V2ViR0xGcmFt
ZWJ1ZmZlcj4gbyA9IFdlYkdMRnJhbWVidWZmZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRDb250
ZXh0T2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPFdlYkdM
VGV4dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBvID0gV2ViR0xUZXh0dXJlOjpjcmVhdGUodGhpcyk7Cisg
ICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVm
UHRyPFdlYkdMUHJvZ3JhbT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVQcm9ncmFtKCkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBvID0gV2ViR0xQcm9ncmFtOjpjcmVhdGUo
dGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQor
CitQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBv
ID0gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qo
by5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBR01FTlRfU0hBREVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjcmVhdGVTaGFkZXIiLCAiaW52YWxpZCBzaGFk
ZXIgdHlwZSIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBSZWZQdHI8
V2ViR0xTaGFkZXI+IG8gPSBXZWJHTFNoYWRlcjo6Y3JlYXRlKHRoaXMsIHR5cGUpOworICAgIGFk
ZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+Y3Vs
bEZhY2UobW9kZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVPYmpl
Y3QoV2ViR0xPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICFvYmplY3QpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW9iamVjdC0+
dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRlbGV0ZSIsICJvYmpl
Y3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGlmIChvYmplY3QtPm9iamVjdCgpKQorICAgICAgICAvLyBXZSBuZWVk
IHRvIHBhc3MgaW4gY29udGV4dCBoZXJlIGJlY2F1c2Ugd2Ugd2FudAorICAgICAgICAvLyB0aGlu
Z3MgaW4gdGhpcyBjb250ZXh0IHVuYm91bmQuCisgICAgICAgIG9iamVjdC0+ZGVsZXRlT2JqZWN0
KGdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCit7Cisg
ICAgaWYgKCFkZWxldGVPYmplY3QoYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICht
X2JvdW5kQXJyYXlCdWZmZXIgPT0gYnVmZmVyKQorICAgICAgICBtX2JvdW5kQXJyYXlCdWZmZXIg
PSAwOworCisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT51bmJpbmRCdWZmZXIoYnVmZmVy
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKFdl
YkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQoreworICAgIGlmICghZGVsZXRlT2JqZWN0KGZy
YW1lYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChmcmFtZWJ1ZmZlciA9PSBtX2Zy
YW1lYnVmZmVyQmluZGluZykgeworICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IDA7Cisg
ICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKDApOworICAgICAgICAgICAgLy8gSGF2ZSB0byBjYWxs
IGJpbmRGcmFtZWJ1ZmZlciBoZXJlIHRvIGJpbmQgYmFjayB0byBpbnRlcm5hbCBmYm8uCisgICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIDApOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0
ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIGRlbGV0ZU9iamVjdChwcm9n
cmFtKTsKKyAgICAvLyBXZSBkb24ndCByZXNldCBtX2N1cnJlbnRQcm9ncmFtIHRvIDAgaGVyZSBi
ZWNhdXNlIHRoZSBkZWxldGlvbiBvZiB0aGUKKyAgICAvLyBjdXJyZW50IHByb2dyYW0gaXMgZGVs
YXllZC4KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVJlbmRlcmJ1ZmZl
cihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghZGVsZXRlT2Jq
ZWN0KHJlbmRlcmJ1ZmZlcikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVuZGVyYnVmZmVy
ID09IG1fcmVuZGVyYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5n
ID0gMDsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIocmVuZGVyYnVm
ZmVyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVNoYWRlcihXZWJH
TFNoYWRlciogc2hhZGVyKQoreworICAgIGRlbGV0ZU9iamVjdChzaGFkZXIpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUqIHRleHR1
cmUpCit7CisgICAgaWYgKCFkZWxldGVPYmplY3QodGV4dHVyZSkpCisgICAgICAgIHJldHVybjsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmICh0ZXh0dXJlID09IG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmUyREJpbmRp
bmcpCisgICAgICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nID0gbnVs
bHB0cjsKKyAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1
YmVNYXBCaW5kaW5nKQorICAgICAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVN
YXBCaW5kaW5nID0gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5n
KQorICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNobWVudEZyb21Cb3Vu
ZEZyYW1lYnVmZmVyKHRleHR1cmUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+ZGVwdGhGdW5jKGZ1bmMpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZs
YWcpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fZGVwdGhNYXNrID0gZmxhZzsKKyAgICBtX2NvbnRleHQtPmRlcHRoTWFzayhmbGFn
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoUmFuZ2UoR0MzRGZsb2F0
IHpOZWFyLCBHQzNEZmxvYXQgekZhcikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHpOZWFyID4gekZhcikgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJk
ZXB0aFJhbmdlIiwgInpOZWFyID4gekZhciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG1fY29udGV4dC0+ZGVwdGhSYW5nZSh6TmVhciwgekZhcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNo
YWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoImRldGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRh
Y2hTaGFkZXIiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFwcm9ncmFtLT5k
ZXRhY2hTaGFkZXIoc2hhZGVyKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZXRhY2hTaGFkZXIiLCAic2hhZGVyIG5v
dCBhdHRhY2hlZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+ZGV0
YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOwor
ICAgIHNoYWRlci0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQzRCgpKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUoR0MzRGVudW0gY2FwKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZGlzYWJsZSIs
IGNhcCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX1RFU1QpIHsKKyAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCA9IGZhbHNlOworICAg
ICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7CisgICAgICAgIG1fc2Np
c3NvckVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAg
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxl
ZCk7CisgICAgfQorICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXApOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaW5kZXgg
Pj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5Iiwg
ImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisgICAgc3Rh
dGUuZW5hYmxlZCA9IGZhbHNlOworCisgICAgaWYgKGluZGV4ID4gMCB8fCBpc0dMRVMyQ29tcGxp
YW50KCkpCisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4
KTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRWxlbWVudEFycmF5
U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQor
eworICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZl
cnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAgICAKKyAgICBpZiAo
IWVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG9m
ZnNldCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICh0eXBlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKKyAgICAgICAgLy8gRm9yIGFuIHVuc2lnbmVk
IGludCBhcnJheSwgb2Zmc2V0IG11c3QgYmUgZGl2aXNpYmxlIGJ5IDQgZm9yIGFsaWdubWVudCBy
ZWFzb25zLgorICAgICAgICBpZiAob2Zmc2V0ICUgNCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCisgICAgICAg
IG9mZnNldCAvPSA0OworCisgICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVm
ZmVyLT5ieXRlTGVuZ3RoKCkgLyA0OworICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+
IG4gLSBvZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmICh0
eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCkgeworICAgICAgICAvLyBG
b3IgYW4gdW5zaWduZWQgc2hvcnQgYXJyYXksIG9mZnNldCBtdXN0IGJlIGRpdmlzaWJsZSBieSAy
IGZvciBhbGlnbm1lbnQgcmVhc29ucy4KKyAgICAgICAgaWYgKG9mZnNldCAlIDIpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVsZW1lbnQg
b2Zmc2V0LgorICAgICAgICBvZmZzZXQgLz0gMjsKKworICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9
IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gMjsKKyAgICAgICAgaWYgKG9mZnNl
dCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkg
eworICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0
aCgpOworICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKEdD
M0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKQoreworICAgIC8vIFBl
cmZvcm1zIGNvbnNlcnZhdGl2ZSB2YWxpZGF0aW9uIGJ5IGNhY2hpbmcgYSBtYXhpbXVtIGluZGV4
IG9mCisgICAgLy8gdGhlIGdpdmVuIHR5cGUgcGVyIGVsZW1lbnQgYXJyYXkgYnVmZmVyLiBJZiBh
bGwgb2YgdGhlIGJvdW5kCisgICAgLy8gYXJyYXkgYnVmZmVycyBoYXZlIGVub3VnaCBlbGVtZW50
cyB0byBzYXRpc2Z5IHRoYXQgbWF4aW11bQorICAgIC8vIGluZGV4LCBza2lwcyB0aGUgZXhwZW5z
aXZlIHBlci1kcmF3LWNhbGwgaXRlcmF0aW9uIGluCisgICAgLy8gdmFsaWRhdGVJbmRleEFycmF5
UHJlY2lzZS4KKyAgICAKKyAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZl
ciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CisK
KyAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgR0MzRHNpemVpcHRyIG51bUVsZW1lbnRzID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVu
Z3RoKCk7CisgICAgLy8gVGhlIGNhc2UgY291bnQ9PTAgaXMgYWxyZWFkeSBkZWFsdCB3aXRoIGlu
IGRyYXdFbGVtZW50cyBiZWZvcmUgdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlLgorICAg
IGlmICghbnVtRWxlbWVudHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBBcnJh
eUJ1ZmZlciogYnVmZmVyID0gZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIo
KTsKKyAgICBBU1NFUlQoYnVmZmVyKTsKKworICAgIGludCBtYXhJbmRleCA9IGVsZW1lbnRBcnJh
eUJ1ZmZlci0+Z2V0Q2FjaGVkTWF4SW5kZXgodHlwZSk7CisgICAgaWYgKG1heEluZGV4IDwgMCkg
eworICAgICAgICAvLyBDb21wdXRlIHRoZSBtYXhpbXVtIGluZGV4IGluIHRoZSBlbnRpcmUgYnVm
ZmVyIGZvciB0aGUgZ2l2ZW4gdHlwZSBvZiBpbmRleC4KKyAgICAgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6IHsKKyAgICAg
ICAgICAgIGNvbnN0IEdDM0R1Ynl0ZSogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1Ynl0ZSo+
KGJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBp
IDwgbnVtRWxlbWVudHM7IGkrKykKKyAgICAgICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4
KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
OiB7CisgICAgICAgICAgICBudW1FbGVtZW50cyAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAg
ICAgICAgICBjb25zdCBHQzNEdXNob3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVzaG9y
dCo+KGJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAw
OyBpIDwgbnVtRWxlbWVudHM7IGkrKykKKyAgICAgICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6
bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lO
VDogeworICAgICAgICAgICAgaWYgKCFtX29lc0VsZW1lbnRJbmRleFVpbnQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9mKEdD
M0R1aW50KTsKKyAgICAgICAgICAgIGNvbnN0IEdDM0R1aW50KiBwID0gc3RhdGljX2Nhc3Q8Y29u
c3QgR0MzRHVpbnQqPihidWZmZXItPmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKEdDM0RzaXpl
aXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCisgICAgICAgICAgICAgICAgbWF4SW5k
ZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsZW1lbnRBcnJheUJ1ZmZlci0+c2V0Q2Fj
aGVkTWF4SW5kZXgodHlwZSwgbWF4SW5kZXgpOworICAgIH0KKworICAgIGlmIChtYXhJbmRleCA+
PSAwKSB7CisgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgcmVxdWlyZWQgZWxlbWVudHMgaXMgb25l
IG1vcmUgdGhhbiB0aGUgbWF4aW11bQorICAgICAgICAvLyBpbmRleCB0aGF0IHdpbGwgYmUgYWNj
ZXNzZWQuCisgICAgICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSBtYXhJbmRleCArIDE7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoR0MzRHNpemVp
IGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgdW5zaWduZWQmIG51bUVs
ZW1lbnRzUmVxdWlyZWQpCit7CisgICAgQVNTRVJUKGNvdW50ID49IDAgJiYgb2Zmc2V0ID49IDAp
OworICAgIHVuc2lnbmVkIGxhc3RJbmRleCA9IDA7CisgICAgCisgICAgUmVmUHRyPFdlYkdMQnVm
ZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVs
ZW1lbnRBcnJheUJ1ZmZlcigpOworCisgICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghY291bnQpIHsKKyAgICAgICAgbnVtRWxlbWVu
dHNSZXF1aXJlZCA9IDA7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICgh
ZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgdW5zaWduZWQgbG9uZyB1b2Zmc2V0ID0gb2Zmc2V0OworICAgIHVuc2ln
bmVkIGxvbmcgbiA9IGNvdW50OworCisgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0lOVCkgeworICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBvZmZz
ZXQuCisgICAgICAgIHVvZmZzZXQgLz0gc2l6ZW9mKEdDM0R1aW50KTsKKyAgICAgICAgY29uc3Qg
R0MzRHVpbnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWludCo+KGVsZW1lbnRBcnJheUJ1
ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyB1b2Zmc2V0OworICAgICAgICB3
aGlsZSAobi0tID4gMCkgeworICAgICAgICAgICAgaWYgKCpwID4gbGFzdEluZGV4KQorICAgICAg
ICAgICAgICAgIGxhc3RJbmRleCA9ICpwOworICAgICAgICAgICAgKytwOworICAgICAgICB9Cisg
ICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCkg
eworICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCisgICAgICAgIHVv
ZmZzZXQgLz0gc2l6ZW9mKEdDM0R1c2hvcnQpOworICAgICAgICBjb25zdCBHQzNEdXNob3J0KiBw
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVzaG9ydCo+KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxl
bWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyB1b2Zmc2V0OworICAgICAgICB3aGlsZSAobi0t
ID4gMCkgeworICAgICAgICAgICAgaWYgKCpwID4gbGFzdEluZGV4KQorICAgICAgICAgICAgICAg
IGxhc3RJbmRleCA9ICpwOworICAgICAgICAgICAgKytwOworICAgICAgICB9CisgICAgfSBlbHNl
IGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAg
IGNvbnN0IEdDM0R1Ynl0ZSogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1Ynl0ZSo+KGVsZW1l
bnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyB1b2Zmc2V0Owor
ICAgICAgICB3aGlsZSAobi0tID4gMCkgeworICAgICAgICAgICAgaWYgKCpwID4gbGFzdEluZGV4
KQorICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOworICAgICAgICAgICAgKytwOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gVGhlbiBzZXQgdGhlIGxhc3QgaW5kZXggaW4gdGhlIGlu
ZGV4IGFycmF5IGFuZCBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuCisgICAgbnVtRWxlbWVudHNSZXF1
aXJlZCA9IGxhc3RJbmRleCArIDE7CisgICAgcmV0dXJuIG51bUVsZW1lbnRzUmVxdWlyZWQgPiAw
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1
dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3VudCwgdW5zaWduZWQgcHJpbWl0aXZlQ291bnQpCit7Cisg
ICAgaWYgKCFtX2N1cnJlbnRQcm9ncmFtKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBMb29rIGluIGVhY2ggZW5hYmxlZCB2ZXJ0ZXggYXR0cmliIGFuZCBjaGVjayBpZiB0aGV5J3Zl
IGJlZW4gYm91bmQgdG8gYSBidWZmZXIuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1f
bWF4VmVydGV4QXR0cmliczsgKytpKSB7CisgICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpKS52YWxpZGF0ZUJpbmRpbmcoKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoZWxlbWVudENvdW50IDw9IDAp
CisgICAgICAgIHJldHVybiB0cnVlOworCisKKyAgICAvLyBMb29rIGluIGVhY2ggY29uc3VtZWQg
dmVydGV4IGF0dHJpYiAoYnkgdGhlIGN1cnJlbnQgcHJvZ3JhbSkuCisgICAgYm9vbCBzYXdOb25J
bnN0YW5jZWRBdHRyaWIgPSBmYWxzZTsKKyAgICBib29sIHNhd0VuYWJsZWRBdHRyaWIgPSBmYWxz
ZTsKKyAgICBpbnQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zID0gbV9jdXJyZW50UHJvZ3JhbS0+
bnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1B
Y3RpdmVBdHRyaWJMb2NhdGlvbnM7ICsraSkgeworICAgICAgICBpbnQgbG9jID0gbV9jdXJyZW50
UHJvZ3JhbS0+Z2V0QWN0aXZlQXR0cmliTG9jYXRpb24oaSk7CisgICAgICAgIGlmIChsb2MgPj0g
MCAmJiBsb2MgPCBzdGF0aWNfY2FzdDxpbnQ+KG1fbWF4VmVydGV4QXR0cmlicykpIHsKKyAgICAg
ICAgICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRl
JiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUo
bG9jKTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5lbmFibGVkKSB7CisgICAgICAgICAgICAgICAg
c2F3RW5hYmxlZEF0dHJpYiA9IHRydWU7CisgICAgICAgICAgICAgICAgLy8gQXZvaWQgb2ZmLWJ5
LW9uZSBlcnJvcnMgaW4gbnVtRWxlbWVudHMgY29tcHV0YXRpb24uCisgICAgICAgICAgICAgICAg
Ly8gRm9yIHRoZSBsYXN0IGVsZW1lbnQsIHdlIHdpbGwgb25seSB0b3VjaCB0aGUgZGF0YSBmb3Ig
dGhlCisgICAgICAgICAgICAgICAgLy8gZWxlbWVudCBhbmQgbm90aGluZyBiZXlvbmQgaXQuCisg
ICAgICAgICAgICAgICAgaW50IGJ5dGVzUmVtYWluaW5nID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0
ZS5idWZmZXJCaW5kaW5nLT5ieXRlTGVuZ3RoKCkgLSBzdGF0ZS5vZmZzZXQpOworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMDsKKyAgICAgICAgICAgICAgICBBU1NFUlQo
c3RhdGUuc3RyaWRlID4gMCk7CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVzUmVtYWluaW5nID49
IHN0YXRlLmJ5dGVzUGVyRWxlbWVudCkKKyAgICAgICAgICAgICAgICAgICAgbnVtRWxlbWVudHMg
PSAxICsgKGJ5dGVzUmVtYWluaW5nIC0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KSAvIHN0YXRlLnN0
cmlkZTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLmRpdmlzb3IpCisgICAgICAgICAgICAg
ICAgICAgIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYg
KCghc3RhdGUuZGl2aXNvciAmJiBlbGVtZW50Q291bnQgPiBudW1FbGVtZW50cykgfHwgKHN0YXRl
LmRpdmlzb3IgJiYgcHJpbWl0aXZlQ291bnQgPiBudW1FbGVtZW50cykpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICghc2F3Tm9uSW5zdGFuY2VkQXR0cmliICYmIHNhd0VuYWJsZWRBdHRyaWIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVXZWJHTE9iamVjdChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIFdlYkdMT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKCFvYmplY3QgfHwgIW9iamVjdC0+
b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIG9iamVjdCBvciBvYmplY3QgZGVsZXRl
ZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghb2JqZWN0LT52YWxp
ZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmpl
Y3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVEcmF3QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNv
dW50KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRHJh
d01vZGUoZnVuY3Rpb25OYW1lLCBtb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBpZiAoZmlyc3QgPCAwIHx8IGNvdW50IDwgMCkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiZmlyc3Qgb3IgY291bnQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAoIWNvdW50KSB7CisgICAgICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHByaW1jb3VudCA8IDApIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nl
cygpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRl
CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRGaXJzdChm
aXJzdCk7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRD
b3VudChjb3VudCk7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNo
ZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVja2VkQ291bnQ7CisgICAgICAgIENoZWNrZWQ8
R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQcmltQ291bnQocHJpbWNvdW50KTsKKyAg
ICAgICAgaWYgKGNoZWNrZWRTdW0uaGFzT3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRQcmltQ291bnQu
aGFzT3ZlcmZsb3dlZCgpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51
bnNhZmVHZXQoKSwgY2hlY2tlZFByaW1Db3VudC51bnNhZmVHZXQoKSkpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmICghdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKDApKSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgY2hhciogcmVhc29uID0g
ImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAm
JiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFp
c1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5cyhHQzNE
ZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0Fy
cmF5cygiZHJhd0FycmF5cyIsIG1vZGUsIGZpcnN0LCBjb3VudCwgMCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisKKyAgICBib29sIHZlcnRleEF0dHJpYjBT
aW11bGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICAgICAg
dmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChmaXJzdCArIGNv
dW50IC0gMSk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1Rl
eHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXMiLCB0cnVlKTsKKyAgICBtX2NvbnRleHQtPmRy
YXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkK
KyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOwor
ICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQs
IHVuc2lnbmVkJiBudW1FbGVtZW50cykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rpb25O
YW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICBpZiAobV9vZXNFbGVtZW50SW5k
ZXhVaW50KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlw
ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1l
LCAiaW52YWxpZCB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
ZiAoY291bnQgPCAwIHx8IG9mZnNldCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImNvdW50IG9y
IG9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICgh
Y291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxl
bWVudEFycmF5QnVmZmVyKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJubyBFTEVNRU5UX0FS
UkFZX0JVRkZFUiBib3VuZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKKyAgICAgICAg
Ly8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCByZW5kZXJpbmcgc3RhdGUKKyAgICAgICAgaWYgKCF2
YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRw
dHI+KG9mZnNldCkpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInJlcXVlc3Qgb3V0IG9m
IGJvdW5kcyBmb3IgY3VycmVudCBFTEVNRU5UX0FSUkFZX0JVRkZFUiIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghY291bnQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0
aXZlKHR5cGUsIG51bUVsZW1lbnRzKSB8fCAhdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKG51bUVs
ZW1lbnRzKSkgeworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNv
dW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cykg
fHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cykpIHsKKyAgICAgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlz
Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMo
MCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0cmlicyBub3Qgc2V0dXAgY29ycmVj
dGx5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYg
KG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3Mo
Z3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFzb24pOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNE
ZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworCisgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOworICAgIGlm
ICghdmFsaWRhdGVEcmF3RWxlbWVudHMoImRyYXdFbGVtZW50cyIsIG1vZGUsIGNvdW50LCB0eXBl
LCBvZmZzZXQsIG51bUVsZW1lbnRzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xlYXJJZkNv
bXBvc2l0ZWQoKTsKKworICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwor
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIGlmICghbnVtRWxlbWVudHMp
CisgICAgICAgICAgICB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0
aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cyk7CisgICAgICAgIHZlcnRl
eEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOwor
ICAgIH0KKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVy
ZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzIiwgdHJ1ZSk7CisgICAgbV9jb250ZXh0LT5kcmF3
RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNl
dCkpOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0
ZWQpCisgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7
CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21w
bGV0ZW5lc3MoImRyYXdFbGVtZW50cyIsIGZhbHNlKTsKKyAgICBtYXJrQ29udGV4dENoYW5nZWQo
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZShHQzNEZW51bSBjYXAp
Cit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmls
aXR5KCJlbmFibGUiLCBjYXApKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGNhcCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7CisgICAgICAgIG1fc3RlbmNpbEVuYWJsZWQg
PSB0cnVlOworICAgICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7Cisg
ICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3Nj
aXNzb3JFbmFibGVkKTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1
aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUg
PSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsK
KyAgICBzdGF0ZS5lbmFibGVkID0gdHJ1ZTsKKworICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4
QXR0cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zmlu
aXNoKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm47CisgICAgbV9jb250ZXh0LT5maW5pc2goKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmZsdXNoKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5mbHVzaCgpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVu
ZGVyYnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFt
ZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsIHRhcmdldCwg
YXR0YWNobWVudCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVuZGVyYnVmZmVydGFyZ2V0
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImZyYW1lYnVmZmVyUmVu
ZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gYnVmZmVyIG9yIGJ1ZmZl
ciBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAv
LyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRhdGVkOyBhbGwg
Y3VycmVudAorICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVybmFsbHkgaW4g
cGxhY2Ugb2YgdGhlIGRlZmF1bHQKKyAgICAvLyBGQk8uCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBidWZmZXJPYmplY3QgPSBvYmpl
Y3RPclplcm8oYnVmZmVyKTsKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29u
dGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOworICAg
ICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJP
YmplY3QpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX2NvbnRleHQt
PmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVuZGVyYnVmZmVy
dGFyZ2V0LCBidWZmZXJPYmplY3QpOworICAgIH0KKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+
c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgYnVmZmVyKTsKKyAg
ICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpm
cmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQs
IEdDM0RlbnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBHQzNEaW50IGxldmVs
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1l
dGVycygiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKGxldmVsKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAi
bGV2ZWwgbm90IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodGV4dHVyZSAm
JiAhdGV4dHVyZS0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZy
YW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIHRleHR1cmUgb3IgdGV4dHVyZSBub3QgZnJvbSB0aGlz
IGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBEb24ndCBhbGxvdyB0
aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRhdGVkOyBhbGwgY3VycmVudAorICAgIC8v
IGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVybmFsbHkgaW4gcGxhY2Ugb2YgdGhlIGRl
ZmF1bHQKKyAgICAvLyBGQk8uCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyVGV4dHVy
ZTJEIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlT2JqZWN0ID0gb2JqZWN0T3JaZXJvKHRleHR1cmUp
OworICAgIHN3aXRjaCAoYXR0YWNobWVudCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZl
clRleHR1cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCB0
ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFD
SE1FTlQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgorICAgICAgICBt
X2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFy
Z2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKKyAgICAgICAgbV9jb250ZXh0LT5m
cmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVy
ZU9iamVjdCwgbGV2ZWwpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBt
X2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFy
Z2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgfQorICAgIG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5zZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihhdHRhY2htZW50LCB0ZXh0YXJn
ZXQsIHRleHR1cmUsIGxldmVsKTsKKyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250
ZXh0LT5mcm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFs
aWRhdGVUZXh0dXJlQmluZGluZygiZ2VuZXJhdGVNaXBtYXAiLCB0YXJnZXQsIGZhbHNlKTsKKyAg
ICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdGV4LT5jYW5HZW5lcmF0ZU1p
cG1hcHMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIsICJsZXZlbCAwIG5vdCBwb3dlciBv
ZiAyIG9yIG5vdCBhbGwgdGhlIHNhbWUgc2l6ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIz
OTE2LiBDb21wcmVzc2VkIHRleHR1cmVzIHNob3VsZCBiZSBhbGxvd2VkIGluIFdlYkdMIDI6Cisg
ICAgaWYgKHRleC0+aXNDb21wcmVzc2VkKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBtYXAiLCAi
dHJ5aW5nIHRvIGdlbmVyYXRlIG1pcG1hcHMgZnJvbSBjb21wcmVzc2VkIHRleHR1cmUiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQo
ImdlbmVyYXRlTWlwbWFwIiwgdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIDApKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gZ2VuZXJhdGVNaXBtYXAgd29uJ3Qgd29yayBwcm9wZXJs
eSBpZiBtaW5GaWx0ZXIgaXMgbm90IE5FQVJFU1RfTUlQTUFQX0xJTkVBUgorICAgIC8vIG9uIE1h
Yy4gIFJlbW92ZSB0aGUgaGFjayBvbmNlIHRoaXMgZHJpdmVyIGJ1ZyBpcyBmaXhlZC4KKyNpZiBP
UyhEQVJXSU4pCisgICAgYm9vbCBuZWVkVG9SZXNldE1pbkZpbHRlciA9IGZhbHNlOworICAgIGlm
ICh0ZXgtPmdldE1pbkZpbHRlcigpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1B
UF9MSU5FQVIpIHsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5F
QVJFU1RfTUlQTUFQX0xJTkVBUik7CisgICAgICAgIG5lZWRUb1Jlc2V0TWluRmlsdGVyID0gdHJ1
ZTsKKyAgICB9CisjZW5kaWYKKyAgICBtX2NvbnRleHQtPmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7
CisjaWYgT1MoREFSV0lOKQorICAgIGlmIChuZWVkVG9SZXNldE1pbkZpbHRlcikKKyAgICAgICAg
bV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfTUlOX0ZJTFRFUiwgdGV4LT5nZXRNaW5GaWx0ZXIoKSk7CisjZW5kaWYKKyAgICB0ZXgtPmdl
bmVyYXRlTWlwbWFwTGV2ZWxJbmZvKCk7Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZv
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3QoImdldEFjdGl2ZUF0dHJpYiIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICBBY3RpdmVJbmZvIGluZm87CisgICAgaWYgKCFtX2NvbnRleHQtPmdldEFj
dGl2ZUF0dHJpYihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBMT0coV2ViR0wsICJSZXR1cm5pbmcgYWN0aXZlIGF0dHJp
YnV0ZSAlZDogJXMiLCBpbmRleCwgaW5mby5uYW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcmV0
dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNp
emUpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5k
ZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QWN0
aXZlVW5pZm9ybSIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBY3RpdmVJbmZv
IGluZm87CisgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3JaZXJv
KHByb2dyYW0pLCBpbmRleCwgaW5mbykpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICBpZiAoaW5mby5zaXplID4gMSAmJiAhaW5m
by5uYW1lLmVuZHNXaXRoKCJbMF0iKSkKKyAgICAgICAgICAgIGluZm8ubmFtZS5hcHBlbmQoIlsw
XSIpOworCisgICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSB1bmlmb3JtICVkOiAlcyIs
IGluZGV4LCBpbmZvLm5hbWUudXRmOCgpLmRhdGEoKSk7CisKKyAgICByZXR1cm4gV2ViR0xBY3Rp
dmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGluZm8uc2l6ZSk7Cit9CisKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4mIHNoYWRlck9iamVjdHMsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgc2hhZGVyT2Jq
ZWN0cy5jbGVhcigpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImdldEF0dGFjaGVkU2hhZGVycyIsIHByb2dyYW0pKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBHQzNEZW51bSBzaGFkZXJUeXBlW10gPSB7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSLAorICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRDo6RlJBR01FTlRfU0hBREVSCisgICAgfTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZW9mKHNoYWRlclR5cGUpIC8gc2l6ZW9mKEdDM0RlbnVtKTsgKytpKSB7CisgICAg
ICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihzaGFk
ZXJUeXBlW2ldKTsKKyAgICAgICAgaWYgKHNoYWRlcikKKyAgICAgICAgICAgIHNoYWRlck9iamVj
dHMuYXBwZW5kKHNoYWRlcik7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitHQzNEaW50
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBw
cm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QXR0cmliTG9jYXRpb24iLCBwcm9n
cmFtKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmICghdmFsaWRhdGVMb2NhdGlvbkxlbmd0
aCgiZ2V0QXR0cmliTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlm
ICghdmFsaWRhdGVTdHJpbmcoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJl
dHVybiAtMTsKKyAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkKKyAgICAgICAgcmV0dXJu
IC0xOworICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEF0
dHJpYkxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOworICAgICAgICByZXR1cm4gLTE7
CisgICAgfQorICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKG9iamVjdE9y
WmVybyhwcm9ncmFtKSwgbmFtZSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
KyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIgJiYgdGFy
Z2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKKyAgICB9CisKKyAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkJVRkZFUl9TSVpFICYmIHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfVVNBR0Up
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Cisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisKKyAgICBHQzNEaW50IHZhbHVl
ID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUs
ICZ2YWx1ZSk7CisgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0la
RSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Cit9CisKK1Bhc3NSZWZQ
dHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRDb250
ZXh0QXR0cmlidXRlcygpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gV2UgYWx3YXlzIG5lZWQgdG8gcmV0dXJuIGEg
bmV3IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgb2JqZWN0IHRvCisgICAgLy8gcHJldmVudCB0aGUg
dXNlciBmcm9tIG11dGF0aW5nIGFueSBjYWNoZWQgdmVyc2lvbi4KKworICAgIC8vIEFsc28sIHdl
IG5lZWQgdG8gZW5mb3JjZSByZXF1ZXN0ZWQgdmFsdWVzIG9mICJmYWxzZSIgZm9yIGRlcHRoCisg
ICAgLy8gYW5kIHN0ZW5jaWwsIHJlZ2FyZGxlc3Mgb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHVu
ZGVybHlpbmcKKyAgICAvLyBHcmFwaGljc0NvbnRleHQzRCBvciBEcmF3aW5nQnVmZmVyLgorICAg
IFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1dGVzID0gV2ViR0xDb250ZXh0
QXR0cmlidXRlczo6Y3JlYXRlKG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSk7Cisg
ICAgaWYgKCFtX2F0dHJpYnV0ZXMuZGVwdGgpCisgICAgICAgIGF0dHJpYnV0ZXMtPnNldERlcHRo
KGZhbHNlKTsKKyAgICBpZiAoIW1fYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICBhdHRyaWJ1
dGVzLT5zZXRTdGVuY2lsKGZhbHNlKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAg
ICAgIC8vIFRoZSBEcmF3aW5nQnVmZmVyIG9idGFpbnMgaXRzIHBhcmFtZXRlcnMgZnJvbSBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSwKKyAgICAgICAgLy8gYnV0IGl0
IG1ha2VzIGl0cyBvd24gZGV0ZXJtaW5hdGlvbiBvZiB3aGV0aGVyIG11bHRpc2FtcGxpbmcgaXMg
c3VwcG9ydGVkLgorICAgICAgICBhdHRyaWJ1dGVzLT5zZXRBbnRpYWxpYXMobV9kcmF3aW5nQnVm
ZmVyLT5tdWx0aXNhbXBsZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIGF0dHJpYnV0ZXMucmVsZWFz
ZSgpOworfQorCitHQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEVycm9yKCkKK3sK
KyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOworICAgIHJldHVybiBtX2NvbnRleHQtPmdldEVycm9y
KCk7Cit9CisKK1dlYkdMRXh0ZW5zaW9uKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGVu
c2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UobmFtZSwgIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKQorICAgICAgICAmJiAobV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikg
fHwgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVyX3Rl
eHR1cmVfbG9kIikpKSB7CisgICAgICAgIGlmICghbV9leHRTaGFkZXJUZXh0dXJlTE9EKSB7Cisg
ICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xf
RVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOworICAgICAgICAgICAgbV9leHRTaGFkZXJUZXh0dXJl
TE9EID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRTaGFkZXJUZXh0dXJlTE9EPih0aGlzKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbV9leHRTaGFkZXJUZXh0dXJlTE9ELmdldCgpOworICAgIH0K
KyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9FWFRfdGV4dHVyZV9maWx0
ZXJfYW5pc290cm9waWMiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKSB7CisgICAgICAg
IGlmICghbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHsKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfdGV4dHVyZV9maWx0
ZXJfYW5pc290cm9waWMiKTsKKyAgICAgICAgICAgIG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJv
cGljID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM+KHRoaXMp
OworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yy5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfc3Rh
bmRhcmRfZGVyaXZhdGl2ZXMiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpKSB7CisgICAgICAgIGlm
ICghbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVz
Iik7CisgICAgICAgICAgICBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfZmxvYXQiKQorICAgICAgICAmJiBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0Iikp
IHsKKyAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdCkgeworICAgICAgICAgICAgbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2Zsb2F0
Iik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VT
VGV4dHVyZUZsb2F0Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vZXNUZXh0
dXJlRmxvYXQuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
T0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSkgeworICAg
ICAgICBpZiAoIW1fb2VzVGV4dHVyZUZsb2F0TGluZWFyKSB7CisgICAgICAgICAgICBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfZmxvYXRf
bGluZWFyIik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVGbG9hdExpbmVhciA9IHN0ZDo6bWFr
ZV91bmlxdWU8T0VTVGV4dHVyZUZsb2F0TGluZWFyPih0aGlzKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIuZ2V0KCk7CisgICAgfQorICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpCisgICAgICAg
ICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVf
aGFsZl9mbG9hdCIpKSB7CisgICAgICAgIGlmICghbV9vZXNUZXh0dXJlSGFsZkZsb2F0KSB7Cisg
ICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xf
T0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlSGFsZkZs
b2F0ID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNUZXh0dXJlSGFsZkZsb2F0Pih0aGlzKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0LmdldCgpOworICAgIH0K
KyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRf
bGluZWFyIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKSB7CisgICAgICAgIGlmICghbV9v
ZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIiKTsKKyAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhciA9IHN0ZDo6bWFr
ZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcj4odGhpcyk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhci5nZXQoKTsKKyAgICB9Cisg
ICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdmVydGV4X2FycmF5X29iamVjdCIp
CisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VT
X3ZlcnRleF9hcnJheV9vYmplY3QiKSkgeworICAgICAgICBpZiAoIW1fb2VzVmVydGV4QXJyYXlP
YmplY3QpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVF
bmFibGVkKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpOworICAgICAgICAgICAgbV9vZXNW
ZXJ0ZXhBcnJheU9iamVjdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVmVydGV4QXJyYXlPYmplY3Q+
KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX29lc1ZlcnRleEFycmF5T2JqZWN0
LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU19lbGVt
ZW50X2luZGV4X3VpbnQiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKSkgeworICAgICAgICBpZiAoIW1f
b2VzRWxlbWVudEluZGV4VWludCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKTsKKyAgICAg
ICAgICAgIG1fb2VzRWxlbWVudEluZGV4VWludCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTRWxlbWVu
dEluZGV4VWludD4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2VzRWxlbWVu
dEluZGV4VWludC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJXRUJHTF9sb3NlX2NvbnRleHQiKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xMb3NlQ29udGV4
dCkKKyAgICAgICAgICAgIG1fd2ViZ2xMb3NlQ29udGV4dCA9IHN0ZDo6bWFrZV91bmlxdWU8V2Vi
R0xMb3NlQ29udGV4dD4odGhpcyk7CisgICAgICAgIHJldHVybiBtX3dlYmdsTG9zZUNvbnRleHQu
Z2V0KCk7CisgICAgfQorICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9X
RUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIikpCisgICAgICAgICYmIFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xDb21w
cmVzc2VkVGV4dHVyZUFUQykKKyAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFU
QyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQz4odGhpcyk7Cisg
ICAgICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMuZ2V0KCk7CisgICAgfQor
ICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9XRUJHTF9jb21wcmVzc2Vk
X3RleHR1cmVfcHZydGMiKSkKKyAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRD
OjpzdXBwb3J0ZWQodGhpcykpIHsKKyAgICAgICAgaWYgKCFtX3dlYmdsQ29tcHJlc3NlZFRleHR1
cmVQVlJUQykKKyAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDID0gc3Rk
OjptYWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM+KHRoaXMpOworICAgICAg
ICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMuZ2V0KCk7CisgICAgfQorICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3Mz
dGMiKQorICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKHRo
aXMpKSB7CisgICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUzNUQykKKyAgICAg
ICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPih0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fd2ViZ2xD
b21wcmVzc2VkVGV4dHVyZVMzVEMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAiV0VCR0xfZGVwdGhfdGV4dHVyZSIpCisgICAgICAgICYmIFdlYkdMRGVwdGhU
ZXh0dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkpIHsKKyAgICAgICAgaWYgKCFt
X3dlYmdsRGVwdGhUZXh0dXJlKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fZGVwdGhfdGV4dHVyZSIpOworICAgICAg
ICAgICAgbV93ZWJnbERlcHRoVGV4dHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZXB0aFRl
eHR1cmU+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3dlYmdsRGVwdGhUZXh0
dXJlLmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdM
X2RyYXdfYnVmZmVycyIpICYmIHN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkgeworICAgICAgICBpZiAo
IW1fd2ViZ2xEcmF3QnVmZmVycykgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICAgICAgICAg
IG1fd2ViZ2xEcmF3QnVmZmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEcmF3QnVmZmVycz4o
dGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fd2ViZ2xEcmF3QnVmZmVycy5nZXQo
KTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJBTkdMRV9pbnN0YW5j
ZWRfYXJyYXlzIikgJiYgQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCh0aGlzKSkgewor
ICAgICAgICBpZiAoIW1fYW5nbGVJbnN0YW5jZWRBcnJheXMpIHsKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9pbnN0YW5jZWRf
YXJyYXlzIik7CisgICAgICAgICAgICBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzID0gc3RkOjptYWtl
X3VuaXF1ZTxBTkdMRUluc3RhbmNlZEFycmF5cz4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIG1fYW5nbGVJbnN0YW5jZWRBcnJheXMuZ2V0KCk7CisgICAgfQorICAgIGlmIChhbGxv
d1ByaXZpbGVnZWRFeHRlbnNpb25zKCkpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNl
KG5hbWUsICJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIikpIHsKKyAgICAgICAgICAgIGlmICgh
bV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQorICAgICAgICAgICAgICAgIG1fd2ViZ2xEZWJ1Z1Jl
bmRlcmVySW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbz4odGhp
cyk7CisgICAgICAgICAgICByZXR1cm4gbV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvLmdldCgpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVi
dWdfc2hhZGVycyIpCisgICAgICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIpKSB7CisgICAgICAg
ICAgICBpZiAoIW1fd2ViZ2xEZWJ1Z1NoYWRlcnMpCisgICAgICAgICAgICAgICAgbV93ZWJnbERl
YnVnU2hhZGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZWJ1Z1NoYWRlcnM+KHRoaXMpOwor
ICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMuZ2V0KCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJnZXRGcmFt
ZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisKKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5n
IHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7CisgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisKKyAgICBXZWJHTFNoYXJlZE9iamVj
dCogb2JqZWN0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldEF0dGFjaG1lbnRPYmplY3QoYXR0
YWNobWVudCk7CisgICAgaWYgKCFvYmplY3QpIHsKKyAgICAgICAgaWYgKHBuYW1lID09IEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFKQorICAgICAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7CisgICAg
ICAgIC8vIE9wZW5HTCBFUyAyLjAgc3BlY2lmaWVzIElOVkFMSURfRU5VTSBpbiB0aGlzIGNhc2Us
IHdoaWxlIGRlc2t0b3AgR0wKKyAgICAgICAgLy8gc3BlY2lmaWVzIElOVkFMSURfT1BFUkFUSU9O
LgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKworICAg
IEFTU0VSVChvYmplY3QtPmlzVGV4dHVyZSgpIHx8IG9iamVjdC0+aXNSZW5kZXJidWZmZXIoKSk7
CisgICAgaWYgKG9iamVjdC0+aXNUZXh0dXJlKCkpIHsKKyAgICAgICAgc3dpdGNoIChwbmFtZSkg
eworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihyZWludGVycHJldF9jYXN0PFdlYkdMVGV4
dHVyZSo+KG9iamVjdCkpKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VCRV9NQVBfRkFDRToKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICAgICAg
ICAgICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRh
cmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyIG5hbWUgZm9yIHRleHR1cmUgYXR0YWNobWVudCIpOworICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3dpdGNoIChw
bmFtZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRB
Q0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKTsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4ocmVpbnRlcnBy
ZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCkpKTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJh
bWV0ZXIgbmFtZSBmb3IgcmVuZGVyYnVmZmVyIGF0dGFjaG1lbnQiKTsKKyAgICAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAgICAgfQorICAgIH0KK30KKworV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBj
b25zdCBpbnQgaW50WmVybyA9IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFDVElWRV9URVhUVVJFOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFT
RURfTElORV9XSURUSF9SQU5HRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBh
cmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9QT0lO
VF9TSVpFX1JBTkdFOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVy
KHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQV9CSVRTOgorICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpBUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQ
YXNzUmVmUHRyPFdlYkdMQnVmZmVyPihtX2JvdW5kQXJyYXlCdWZmZXIpKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORDoKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0NPTE9SOgorICAg
ICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9EU1RfQUxQSEE6CisgICAgICAgIHJldHVybiBnZXRV
bnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
QkxFTkRfRFNUX1JHQjoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBu
YW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9FUVVBVElPTl9BTFBIQToK
KyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9FUVVBVElPTl9SR0I6CisgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkRfU1JDX0FMUEhBOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19SR0I6Cisg
ICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QkxVRV9CSVRTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9WQUxV
RToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLOgorICAgICAgICByZXR1
cm4gZ2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKKyAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhVaW50MzJBcnJheTo6Y3JlYXRlKG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmRh
dGEoKSwgbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuc2l6ZSgpKSk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFX01PREU6
CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9HUkFNOgorICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPihtX2N1cnJlbnRQcm9ncmFtKSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQklUUzoKKyAgICAgICAgaWYgKCFtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLmRlcHRoKQorICAgICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ0xFQVJfVkFMVUU6
CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfRlVOQzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9SQU5H
RToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVDoKKyAgICAgICAgcmV0dXJuIGdl
dEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
UFRIX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUjoKKyAgICAgICAgcmV0dXJuIGdl
dEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVM
RU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
UGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJH
TEZyYW1lYnVmZmVyPihtX2ZyYW1lYnVmZmVyQmluZGluZykpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZST05UX0ZBQ0U6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R0VORVJBVEVfTUlQTUFQ
X0hJTlQ6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JFRU5fQklUUzoKKyAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9X
SURUSDoKKyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzoKKyAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKKyAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdN
RU5UX1VOSUZPUk1fVkVDVE9SUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFOgor
ICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKKyAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRV
UkVfU0laRToKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9SUzoKKyAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1ZFUlRFWF9BVFRSSUJTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5J
VFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOgorICAgICAgICByZXR1
cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpN
QVhfVklFV1BPUlRfRElNUzoKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMSW50QXJyYXlQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5VTV9TSEFERVJfQklOQVJZ
X0ZPUk1BVFM6CisgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgd2UgYWx3YXlzIHJldHVybiAwIGZv
ciB0aGlzPworICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9P
RkZTRVRfRkFDVE9SOgorICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZJTEw6CisgICAgICAg
IHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpQT0xZR09OX09GRlNFVF9VTklUUzoKKyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRURfQklUUzoKKyAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4obV9yZW5kZXJidWZmZXJCaW5kaW5nKSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSRVI6CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oU3RyaW5nKCJXZWJLaXQgV2ViR0wiKSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFX0JVRkZFUlM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9DT1ZFUkFHRV9JTlZF
UlQ6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfVkFMVUU6CisgICAgICAgIHJldHVy
biBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U0FNUExFUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6CisgICAgICAgIHJldHVybiBnZXRXZWJH
TEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1Q6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT046Cisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oIldlYkdMIEdMU0wgRVMgMS4wICgiICsgbV9jb250
ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURJTkdfTEFOR1VBR0VfVkVSU0lP
TikgKyAiKSIpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19GQUlM
OgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19GVU5DOgorICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6CisgICAgICAgIHJldHVybiBnZXRVbnNp
Z25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JB
Q0tfUkVGOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSzoKKyAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQklUUzoKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1
dGVzLnN0ZW5jaWwpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGludFplcm8pOwor
ICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0NMRUFSX1ZBTFVFOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0ZBSUw6
CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GVU5DOgorICAgICAgICByZXR1cm4gZ2V0VW5z
aWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfUEFTU19ERVBUSF9GQUlMOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUEFTU19E
RVBUSF9QQVNTOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUkVGOgorICAgICAgICByZXR1
cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX1RFU1Q6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1ZBTFVFX01BU0s6CisgICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9XUklURU1BU0s6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25l
ZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1VCUElY
RUxfQklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HXzJEOgorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihtX3RleHR1cmVVbml0c1ttX2Fj
dGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nKSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgorICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRl
eHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVy
KHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfRkxJUF9ZX1dFQkdM
OgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrRmxpcFkpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6
CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lv
bik7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SOgorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IikpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlZFUlNJT046CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oIldlYkdMIDEuMCAoIiAr
IG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJTSU9OKSArICIpIik7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6CisgICAgICAgIHJldHVybiBn
ZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcworICAgICAgICBpZiAobV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKQorICAgICAgICAg
ICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4dGVuc2lvbnMzRDo6RlJBR01FTlRf
U0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVMpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUsIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBub3QgZW5hYmxlZCIpOwor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2FzZSBXZWJHTERlYnVnUmVuZGVy
ZXJJbmZvOjpVTk1BU0tFRF9SRU5ERVJFUl9XRUJHTDoKKyAgICAgICAgaWYgKG1fd2ViZ2xEZWJ1
Z1JlbmRlcmVySW5mbykKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9jb250ZXh0
LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSKSk7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBu
b3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2FzZSBX
ZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9WRU5ET1JfV0VCR0w6CisgICAgICAgIGlm
IChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpWRU5ET1IpKTsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kZWJ1Z19yZW5k
ZXJlcl9pbmZvIG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
KyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VkVSVEVYX0FSUkFZX0JJTkRJTkdfT0VTOiAvLyBPRVNf
dmVydGV4X2FycmF5X29iamVjdAorICAgICAgICBpZiAobV9vZXNWZXJ0ZXhBcnJheU9iamVjdCkg
eworICAgICAgICAgICAgaWYgKCFtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmlzRGVmYXVsdE9i
amVjdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPihtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QpKTsKKyAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAgICAgfQorICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1l
dGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IG5v
dCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljKQorICAgICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4dGVu
c2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9w
aWMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhUOiAvLyBFWFRfZHJhd19i
dWZmZXJzIEJFR0lOCisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMpCisgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKGdldE1heENvbG9yQXR0YWNobWVudHMoKSk7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZHJhd19idWZmZXJzIG5v
dCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQ6CisgICAgICAgIGlmIChtX3dlYmdsRHJh
d0J1ZmZlcnMpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGdldE1heERyYXdCdWZm
ZXJzKCkpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdM
X2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycworICAgICAg
ICAgICAgJiYgcG5hbWUgPj0gRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUCisgICAgICAg
ICAgICAmJiBwbmFtZSA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihFeHRlbnNpb25zM0Q6OkRSQVdf
QlVGRkVSMF9FWFQgKyBnZXRNYXhEcmF3QnVmZmVycygpKSkgeworICAgICAgICAgICAgR0MzRGlu
dCB2YWx1ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FOworICAgICAgICAgICAgaWYgKG1fZnJh
bWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgICAgIHZhbHVlID0gbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPmdldERyYXdCdWZmZXIocG5hbWUpOworICAgICAgICAgICAgZWxzZSAvLyBlbXVsYXRl
ZCBiYWNrYnVmZmVyCisgICAgICAgICAgICAgICAgdmFsdWUgPSBtX2JhY2tEcmF3QnVmZmVyOwor
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgICAgIH0KKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKKyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJn
ZXRQcm9ncmFtUGFyYW1ldGVyIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RBVFVTOgorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHByb2dyYW0tPmlzRGVsZXRlZCgpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpWQUxJREFURV9TVEFUVVM6CisgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2
KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5LX1NUQVRVUzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhwcm9n
cmFtLT5nZXRMaW5rU3RhdHVzKCkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFUVEFD
SEVEX1NIQURFUlM6CisgICAgICAgIG1fY29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
dmFsdWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9BVFRSSUJVVEVTOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUzoKKyAgICAgICAgbV9j
b250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQob2JqZWN0T3JaZXJvKHByb2dy
YW0pLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImdldFByb2dyYW1QYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0
ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQorCitT
dHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dy
YW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFN0cmlu
ZygpOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbUluZm9Mb2ciLCBw
cm9ncmFtKSkKKyAgICAgICAgcmV0dXJuICIiOworICAgIHJldHVybiBlbnN1cmVOb3ROdWxsKG1f
Y29udGV4dC0+Z2V0UHJvZ3JhbUluZm9Mb2cob2JqZWN0T3JaZXJvKHByb2dyYW0pKSk7Cit9CisK
K1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBpZiAodGFyZ2V0ICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFt
ZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CisgICAgfQorICAgIGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5nIHx8ICFtX3JlbmRlcmJ1ZmZl
ckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIs
ICJubyByZW5kZXJidWZmZXIgYm91bmQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OworICAgIH0KKworICAgIGlmIChtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9y
bWF0KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUwKKyAgICAgICAgJiYgIW1f
cmVuZGVyYnVmZmVyQmluZGluZy0+aXNWYWxpZCgpKSB7CisgICAgICAgIEFTU0VSVCghaXNEZXB0
aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7CisgICAgICAgIGludCB2YWx1ZSA9IDA7CisgICAgICAgIHN3
aXRjaCAocG5hbWUpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX1dJRFRIOgorICAgICAgICAgICAgdmFsdWUgPSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdl
dFdpZHRoKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKKyAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJi
dWZmZXJCaW5kaW5nLT5nZXRIZWlnaHQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFOgorICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQkxVRV9TSVpFOgorICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICAgICAg
ICAgIHZhbHVlID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKKyAgICAgICAgICAgIHZhbHVlID0g
MjQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSX1NURU5DSUxfU0laRToKKyAgICAgICAgICAgIHZhbHVlID0gODsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVJfSU5URVJOQUxfRk9STUFUOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkpOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lIik7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgfQorCisgICAgR0MzRGludCB2
YWx1ZSA9IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVJfSEVJR0hUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9SRURfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JF
RU5fU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQkxVRV9T
SVpFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6Cisg
ICAgICAgIG1fY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFt
ZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDoKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFs
Rm9ybWF0KCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAi
aW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CisgICAgfQorfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFk
ZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVyUGFyYW1ldGVy
Iiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIEdDM0RpbnQg
dmFsdWUgPSAwOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpERUxFVEVfU1RBVFVTOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHNoYWRlci0+
aXNEZWxldGVkKCkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVT
OgorICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBw
bmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxi
b29sPih2YWx1ZSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURFUl9UWVBFOgor
ICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBwbmFt
ZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNp
Z25lZCBpbnQ+KHZhbHVlKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclBhcmFtZXRlciIs
ICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKKyAgICB9Cit9CisKK1N0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlcklu
Zm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFk
ZXJJbmZvTG9nIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuICIiOworICAgIHJldHVybiBlbnN1
cmVOb3ROdWxsKG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhvYmplY3RPclplcm8oc2hhZGVy
KSkpOworfQorCitQYXNzUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0PiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJU
eXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgeworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBR01FTlRfU0hBREVSOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHN3aXRjaCAocHJlY2lzaW9uVHlwZSkgewor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxPV19GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpNRURJVU1fRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElH
SF9GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfSU5UOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6Ok1FRElVTV9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SElHSF9JTlQ6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQ
cmVjaXNpb25Gb3JtYXQiLCAiaW52YWxpZCBwcmVjaXNpb24gdHlwZSIpOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBHQzNEaW50IHJhbmdlWzJdID0gezAsIDB9OworICAg
IEdDM0RpbnQgcHJlY2lzaW9uID0gMDsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlclByZWNpc2lv
bkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZSwgJnByZWNpc2lvbik7Cisg
ICAgcmV0dXJuIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0OjpjcmVhdGUocmFuZ2VbMF0sIHJh
bmdlWzFdLCBwcmVjaXNpb24pOworfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgaWYgKCF2YWxpZGF0ZVdlYkdMT2JqZWN0
KCJnZXRTaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm4gIiI7CisgICAgcmV0
dXJuIGVuc3VyZU5vdE51bGwoc2hhZGVyLT5nZXRTb3VyY2UoKSk7Cit9CisKK1ZlY3RvcjxTdHJp
bmc+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpCit7Cisg
ICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OworCisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVz
b2x1dGlvbikKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmIChtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0IikpCisgICAgICAg
IHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2Zsb2F0Iik7CisgICAgaWYgKG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikp
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpOworICAg
IGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJl
X2hhbGZfZmxvYXQiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfaGFsZl9m
bG9hdCIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQo
Ik9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikpCisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOworICAgIGlm
IChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9zaGFkZXJfdGV4
dHVyZV9sb2QiKSB8fCBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FS
Ql9zaGFkZXJfdGV4dHVyZV9sb2QiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiRVhUX3NoYWRl
cl90ZXh0dXJlX2xvZCIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3Vw
cG9ydHMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKQorICAgICAgICByZXN1
bHQuYXBwZW5kKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisgICAg
aWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3ZlcnRleF9hcnJheV9v
YmplY3QiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU19l
bGVtZW50X2luZGV4X3VpbnQiKTsKKyAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9sb3NlX2NvbnRl
eHQiKTsKKyAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6c3VwcG9ydGVkKHRoaXMp
KQorICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJl
X2F0YyIpOworICAgIGlmIChXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZCh0
aGlzKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4
dHVyZV9wdnJ0YyIpOworICAgIGlmIChXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9y
dGVkKHRoaXMpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1
cmVfczN0YyIpOworICAgIGlmIChXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNz
Q29udGV4dDNEKCkpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kZXB0aF90ZXh0dXJl
Iik7CisgICAgaWYgKHN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiV0VCR0xfZHJhd19idWZmZXJzIik7CisgICAgaWYgKEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpz
dXBwb3J0ZWQodGhpcykpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIkFOR0xFX2luc3RhbmNlZF9h
cnJheXMiKTsKKworICAgIGlmIChhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkpIHsKKyAgICAg
ICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQU5HTEVfdHJh
bnNsYXRlZF9zaGFkZXJfc291cmNlIikpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJH
TF9kZWJ1Z19zaGFkZXJzIik7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RlYnVnX3Jl
bmRlcmVyX2luZm8iKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJHTEdl
dEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1
cmVCaW5kaW5nKCJnZXRUZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsKKyAgICBpZiAoIXRl
eCkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIEdDM0RpbnQgdmFsdWUgPSAw
OworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01BR19GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5f
RklMVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgorICAgICAgICBtX2NvbnRl
eHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOworICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3Rl
eHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisgICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3BpYykgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0
YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7CisgICAgICAgIH0KKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRleFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5p
c290cm9waWMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFt
ZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQorCitXZWJHTEdl
dEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIHVuaWZvcm1Mb2NhdGlvbiwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlmb3JtIiwgcHJv
Z3JhbSkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBpZiAoIXVuaWZvcm1M
b2NhdGlvbiB8fCB1bmlmb3JtTG9jYXRpb24tPnByb2dyYW0oKSAhPSBwcm9ncmFtKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImdldFVuaWZvcm0iLCAibm8gdW5pZm9ybWxvY2F0aW9uIG9yIG5vdCB2YWxpZCBmb3IgdGhp
cyBwcm9ncmFtIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAg
R0MzRGludCBsb2NhdGlvbiA9IHVuaWZvcm1Mb2NhdGlvbi0+bG9jYXRpb24oKTsKKworICAgIEdD
M0RlbnVtIGJhc2VUeXBlOworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICBzd2l0Y2ggKHVuaWZv
cm1Mb2NhdGlvbi0+dHlwZSgpKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDoK
KyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICAgICAgbGVu
Z3RoID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9P
TF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAg
ICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCT09MX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJP
T0w7CisgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkJPT0xfVkVDNDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Qk9PTDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBo
aWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMzOgorICAgICAgICBiYXNlVHlwZSA9
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUM0OgorICAgICAgICBiYXNl
VHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgICAgICBi
YXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gMTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMjoK
KyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxl
bmd0aCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwor
ICAgICAgICBsZW5ndGggPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVF9WRUM0OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVRfTUFUMjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDM6CisgICAgICAgIGJhc2VUeXBl
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSA5OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQ0OgorICAgICAg
ICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0g
MTY7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJf
MkQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFOgorICAgICAgICBi
YXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDE7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIENhbid0IGhhbmRsZSB0aGlz
IHR5cGUKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVuaGFuZGxlZCB0eXBlIik7CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgc3dpdGNoIChiYXNlVHlwZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiB7CisgICAgICAgIEdDM0RmbG9hdCB2YWx1ZVsx
Nl0gPSB7MH07CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWZ2RVhUKG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIDE2ICogc2l6ZW9mKEdDM0RmbG9hdCksIHZhbHVl
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtZnYob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICBpZiAobGVuZ3Ro
ID09IDEpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3Ro
KSk7CisgICAgfQorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDogeworICAgICAgICBH
QzNEaW50IHZhbHVlWzRdID0gezB9OworICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBw
b3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0blVuaWZv
cm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCA0ICogc2l6ZW9mKEdDM0Rp
bnQpLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5p
Zm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKKyAgICAgICAg
aWYgKGxlbmd0aCA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZVsw
XSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVl
LCBsZW5ndGgpKTsKKyAgICB9CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDogewor
ICAgICAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OworICAgICAgICBpZiAobV9pc1JvYnVzdG5l
c3NFWFRTdXBwb3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
Z2V0blVuaWZvcm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCA0ICogc2l6
ZW9mKEdDM0RpbnQpLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0VW5pZm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsK
KyAgICAgICAgaWYgKGxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIGJvb2wgYm9vbFZhbHVlWzE2
XSA9IHswfTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBsZW5ndGg7IGor
KykKKyAgICAgICAgICAgICAgICBib29sVmFsdWVbal0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1
ZVtqXSk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGJvb2xWYWx1ZSwgbGVuZ3Ro
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJv
b2w+KHZhbHVlWzBdKSk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgfQorCisgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIHNvbWV0aGluZyB3ZW50IHdy
b25nIGluIG91ciB1bmZvcnR1bmF0ZWx5IGNvbXBsZXggbG9naWMgYWJvdmUKKyAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFVuaWZvcm0i
LCAidW5rbm93biBlcnJvciIpOworICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKK30KKworUGFz
c1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRV
bmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0VW5pZm9y
bUxvY2F0aW9uIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICgh
dmFsaWRhdGVMb2NhdGlvbkxlbmd0aCgiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImdldFVuaWZvcm1M
b2NhdGlvbiIsIG5hbWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoaXNQcmVm
aXhSZXNlcnZlZChuYW1lKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFwcm9n
cmFtLT5nZXRMaW5rU3RhdHVzKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgInBy
b2dyYW0gbm90IGxpbmtlZCIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAg
R0MzRGludCB1bmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihv
YmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOworICAgIGlmICh1bmlmb3JtTG9jYXRpb24gPT0g
LTEpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgR0MzRGludCBhY3RpdmVVbmlmb3Jt
cyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZFX1VOSUZPUk1TLCAm
YWN0aXZlVW5pZm9ybXMpOworICAgIGZvciAoR0MzRGludCBpID0gMDsgaSA8IGFjdGl2ZVVuaWZv
cm1zOyBpKyspIHsKKyAgICAgICAgQWN0aXZlSW5mbyBpbmZvOworICAgICAgICBpZiAoIW1fY29u
dGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShvYmplY3RPclplcm8ocHJvZ3JhbSksIGksIGluZm8pKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIC8vIFN0cmlwICJbMF0iIGZyb20g
dGhlIG5hbWUgaWYgaXQncyBhbiBhcnJheS4KKyAgICAgICAgaWYgKGluZm8ubmFtZS5lbmRzV2l0
aCgiWzBdIikpCisgICAgICAgICAgICBpbmZvLm5hbWUgPSBpbmZvLm5hbWUubGVmdChpbmZvLm5h
bWUubGVuZ3RoKCkgLSAzKTsKKyAgICAgICAgLy8gSWYgaXQncyBhbiBhcnJheSwgd2UgbmVlZCB0
byBpdGVyYXRlIHRocm91Z2ggZWFjaCBlbGVtZW50LCBhcHBlbmRpbmcgIltpbmRleF0iIHRvIHRo
ZSBuYW1lLgorICAgICAgICBmb3IgKEdDM0RpbnQgaW5kZXggPSAwOyBpbmRleCA8IGluZm8uc2l6
ZTsgKytpbmRleCkgeworICAgICAgICAgICAgU3RyaW5nIHVuaWZvcm1OYW1lID0gaW5mby5uYW1l
ICsgIlsiICsgU3RyaW5nOjpudW1iZXIoaW5kZXgpICsgIl0iOworCisgICAgICAgICAgICBpZiAo
bmFtZSA9PSB1bmlmb3JtTmFtZSB8fCBuYW1lID09IGluZm8ubmFtZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gV2ViR0xVbmlmb3JtTG9jYXRpb246OmNyZWF0ZShwcm9ncmFtLCB1bmlmb3JtTG9j
YXRpb24sIGluZm8udHlwZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJp
YihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisKKyAgICBpZiAoaW5kZXggPj0gbV9t
YXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VmVydGV4QXR0cmliIiwgImluZGV4IG91dCBvZiBy
YW5nZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorCisgICAgY29u
c3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0g
bV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisK
KyAgICBpZiAobV9hbmdsZUluc3RhbmNlZEFycmF5cyAmJiBwbmFtZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFKQorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHN0YXRlLmRpdmlzb3IpOworCisgICAgc3dpdGNoIChwbmFtZSkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJ
Tkc6CisgICAgICAgIGlmICgoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiAhaW5kZXggJiYgbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKS5idWZmZXJCaW5kaW5n
ID09IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikKKyAgICAgICAgICAgIHx8ICFzdGF0ZS5idWZmZXJC
aW5kaW5nCisgICAgICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisg
ICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4oc3RhdGUuYnVmZmVyQmluZGluZykpOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5lbmFibGVkKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGUubm9ybWFsaXplZCk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgorICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKHN0YXRlLnNpemUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9B
VFRSSUJfQVJSQVlfU1RSSURFOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLm9y
aWdpbmFsU3RyaWRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklC
X0FSUkFZX1RZUEU6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUudHlwZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9WRVJURVhfQVRUUklCOgorICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKG1fdmVydGV4QXR0cmli
VmFsdWVbaW5kZXhdLnZhbHVlLCA0KSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFZlcnRleEF0dHJp
YiIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICB9Cit9CisKK2xvbmcgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZl
cnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgR0Mz
RHNpemVpcHRyIHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0VmVydGV4QXR0cmliT2Zmc2V0KGluZGV4
LCBwbmFtZSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4ocmVzdWx0KTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
ZW51bSBtb2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBib29sIGlzVmFsaWQgPSBmYWxzZTsKKyAgICBzd2l0Y2ggKHRhcmdldCkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgorICAg
ICAgICBpc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRf
ZGVyaXZhdGl2ZXMKKyAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKKyAgICAg
ICAgICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKCFp
c1ZhbGlkKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJoaW50IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbV9jb250ZXh0LT5oaW50KHRhcmdldCwgbW9kZSk7Cit9CisKK0dDM0Rib29s
ZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikK
K3sKKyAgICBpZiAoIWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgaWYgKCFidWZmZXItPmhhc0V2ZXJCZWVuQm91bmQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc0J1ZmZlcihidWZmZXItPm9i
amVjdCgpKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQ29udGV4dExvc3Qo
KSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRMb3N0OworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdE9yUGVuZGluZygpCit7CisgICAgaWYgKG1faXNQ
ZW5kaW5nUG9saWN5UmVzb2x1dGlvbiAmJiAhbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9u
KSB7CisgICAgICAgIExPRyhXZWJHTCwgIkNvbnRleHQgaXMgYmVpbmcgdXNlZC4gQXR0ZW1wdCB0
byByZXNvbHZlIHRoZSBwb2xpY3kuIik7CisgICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNh
bnZhcygpLT5kb2N1bWVudCgpLnRvcERvY3VtZW50KCk7CisgICAgICAgIFBhZ2UqIHBhZ2UgPSBk
b2N1bWVudC5wYWdlKCk7CisgICAgICAgIGlmIChwYWdlICYmICFkb2N1bWVudC51cmwoKS5pc0xv
Y2FsRmlsZSgpKQorICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuY2xpZW50
KCkucmVzb2x2ZVdlYkdMUG9saWN5Rm9yVVJMKGRvY3VtZW50LnVybCgpKTsKKyAgICAgICAgLy8g
RklYTUU6IFdlIGRvbid0IGN1cnJlbnRseSBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXN1bHQgZnJv
bSByZXNvbHV0aW9uLiBBIG1vcmUKKyAgICAgICAgLy8gY29tcGxldGUgaW1wbGVtZW50YXRpb24g
bWlnaHQgdHJ5IHRvIGNvbnN0cnVjdCBhIHJlYWwgY29udGV4dCwgZXRjIGFuZCBwcm9jZWVkCisg
ICAgICAgIC8vIHdpdGggbm9ybWFsIG9wZXJhdGlvbi4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTEyMgorICAgICAgICBtX2hhc1JlcXVlc3Rl
ZFBvbGljeVJlc29sdXRpb24gPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBtX2NvbnRleHRM
b3N0IHx8IG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbjsKK30KKworR0MzRGJvb2xlYW4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiaXNFbmFibGVk
IiwgY2FwKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9URVNUKQorICAgICAgICByZXR1cm4gbV9zdGVuY2lsRW5hYmxlZDsKKyAg
ICByZXR1cm4gbV9jb250ZXh0LT5pc0VuYWJsZWQoY2FwKTsKK30KKworR0MzRGJvb2xlYW4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1l
YnVmZmVyKQoreworICAgIGlmICghZnJhbWVidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmICghZnJhbWVidWZmZXItPmhhc0V2ZXJC
ZWVuQm91bmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9jb250ZXh0LT5p
c0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyLT5vYmplY3QoKSk7Cit9CisKK0dDM0Rib29sZWFuIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6aXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKK3sK
KyAgICBpZiAoIXByb2dyYW0gfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIHJldHVybiBtX2NvbnRleHQtPmlzUHJvZ3JhbShwcm9ncmFtLT5vYmpl
Y3QoKSk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNSZW5kZXJi
dWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAoIXJlbmRl
cmJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaWYgKCFyZW5kZXJidWZmZXItPmhhc0V2ZXJCZWVuQm91bmQoKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZm
ZXItPm9iamVjdCgpKTsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpp
c1NoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyIHx8IGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9j
b250ZXh0LT5pc1NoYWRlcihzaGFkZXItPm9iamVjdCgpKTsKK30KKworR0MzRGJvb2xlYW4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQorewor
ICAgIGlmICghdGV4dHVyZSB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKCF0ZXh0dXJlLT5oYXNFdmVyQmVlbkJvdW5kKCkpCisgICAgICAg
IHJldHVybiAwOworCisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNUZXh0dXJlKHRleHR1cmUtPm9i
amVjdCgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmVXaWR0aChHQzNE
ZmxvYXQgd2lkdGgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+bGluZVdpZHRoKHdpZHRoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJsaW5rUHJvZ3Jh
bSIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50
KCkpIHsKKyAgICAgICAgV2ViR0xTaGFkZXIqIHZlcnRleFNoYWRlciA9IHByb2dyYW0tPmdldEF0
dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICAgICAg
V2ViR0xTaGFkZXIqIGZyYWdtZW50U2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7CisgICAgICAgIGlmICghdmVydGV4
U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlzVmFsaWQoKSB8fCAhZnJhZ21lbnRTaGFkZXIgfHwg
IWZyYWdtZW50U2hhZGVyLT5pc1ZhbGlkKCkgfHwgIW1fY29udGV4dC0+cHJlY2lzaW9uc01hdGNo
KG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIpLCBvYmplY3RPclplcm8oZnJhZ21lbnRTaGFkZXIp
KSB8fCAhbV9jb250ZXh0LT5jaGVja1ZhcnlpbmdzUGFja2luZyhvYmplY3RPclplcm8odmVydGV4
U2hhZGVyKSwgb2JqZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVyKSkpIHsKKyAgICAgICAgICAgIHBy
b2dyYW0tPnNldExpbmtTdGF0dXMoZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorCisgICAgbV9jb250ZXh0LT5saW5rUHJvZ3JhbShvYmplY3RPclplcm8ocHJv
Z3JhbSkpOworICAgIHByb2dyYW0tPmluY3JlYXNlTGlua0NvdW50KCk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBw
YXJhbSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm47CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
UEFDS19GTElQX1lfV0VCR0w6CisgICAgICAgIG1fdW5wYWNrRmxpcFkgPSBwYXJhbTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX1BSRU1VTFRJUExZ
X0FMUEhBX1dFQkdMOgorICAgICAgICBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgPSBwYXJhbTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0NPTE9S
U1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoKKyAgICAgICAgaWYgKHBhcmFtID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpCUk9XU0VSX0RFRkFVTFRfV0VCR0wgfHwgcGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PTkUpCisgICAgICAgICAgICBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0gc3Rh
dGljX2Nhc3Q8R0MzRGVudW0+KHBhcmFtKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInBpeGVs
U3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJT
SU9OX1dFQkdMIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgaWYgKHBhcmFt
ID09IDEgfHwgcGFyYW0gPT0gMiB8fCBwYXJhbSA9PSA0IHx8IHBhcmFtID09IDgpIHsKKyAgICAg
ICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQpCisg
ICAgICAgICAgICAgICAgbV9wYWNrQWxpZ25tZW50ID0gcGFyYW07CisgICAgICAgICAgICBlbHNl
IC8vIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgorICAgICAgICAgICAgICAg
IG1fdW5wYWNrQWxpZ25tZW50ID0gcGFyYW07CisgICAgICAgICAgICBtX2NvbnRleHQtPnBpeGVs
U3RvcmVpKHBuYW1lLCBwYXJhbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInBpeGVsU3Rv
cmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBhbGlnbm1lbnQiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicGl4ZWxT
dG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cG9seWdvbk9mZnNldChHQzNEZmxv
YXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+cG9seWdvbk9mZnNldChm
YWN0b3IsIHVuaXRzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlYWRQaXhl
bHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVs
cywgRXhjZXB0aW9uQ29kZSYpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIC8vIER1ZSB0byBXZWJHTCdzIHNhbWUtb3JpZ2luIHJlc3Ry
aWN0aW9ucywgaXQgaXMgbm90IHBvc3NpYmxlIHRvCisgICAgLy8gdGFpbnQgdGhlIG9yaWdpbiB1
c2luZyB0aGUgV2ViR0wgQVBJLgorICAgIEFTU0VSVChjYW52YXMoKS0+b3JpZ2luQ2xlYW4oKSk7
CisgICAgLy8gVmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycy4KKyAgICBpZiAoIXBpeGVscykgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgInJlYWRQaXhlbHMiLCAibm8gZGVzdGluYXRpb24gQXJyYXlCdWZmZXJWaWV3Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NI
T1JUXzVfNl81OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRf
NF80XzQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVf
MToKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiaW52YWxp
ZCB0eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGZvcm1hdCAhPSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSB8fCB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiZm9ybWF0IG5vdCBSR0JBIG9yIHR5cGUg
bm90IFVOU0lHTkVEX0JZVEUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBWYWxp
ZGF0ZSBhcnJheSB0eXBlIGFnYWluc3QgcGl4ZWwgdHlwZS4KKyAgICBpZiAocGl4ZWxzLT5nZXRU
eXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJheUJ1
ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBj
b25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3Jh
cGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCByZWFzb24pOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIC8vIENhbGN1bGF0ZSBhcnJheSBzaXplLCB0YWtpbmcgaW50byBjb25zaWRlcmF0aW9u
IG9mIFBBQ0tfQUxJR05NRU5ULgorICAgIHVuc2lnbmVkIGludCB0b3RhbEJ5dGVzUmVxdWlyZWQg
PSAwOworICAgIHVuc2lnbmVkIGludCBwYWRkaW5nID0gMDsKKyAgICBpZiAoIW1faXNSb2J1c3Ru
ZXNzRVhUU3VwcG9ydGVkKSB7CisgICAgICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5j
b21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fcGFj
a0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgJnBhZGRpbmcpOworICAgICAgICBpZiAo
ZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihlcnJvciwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCBkaW1lbnNpb25zIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBpeGVscy0+Ynl0
ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxz
IiwgIkFycmF5QnVmZmVyVmlldyBub3QgbGFyZ2UgZW5vdWdoIGZvciBkaW1lbnNpb25zIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbGVhcklmQ29tcG9z
aXRlZCgpOworICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMtPmJhc2VBZGRyZXNzKCk7CisKKyAgICB7
CisgICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZl
ci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICBpZiAobV9pc1Jv
YnVzdG5lc3NFWFRTdXBwb3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+cmVhZG5QaXhlbHNFWFQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBw
aXhlbHMtPmJ5dGVMZW5ndGgoKSwgZGF0YSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
Y29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRh
dGEpOworICAgIH0KKworI2lmIE9TKERBUldJTikKKyAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRT
dXBwb3J0ZWQpIC8vIHdlIGhhdmVuJ3QgY29tcHV0ZWQgcGFkZGluZworICAgICAgICBtX2NvbnRl
eHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwg
bV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAmcGFkZGluZyk7CisgICAgLy8g
RklYTUU6IHJlbW92ZSB0aGlzIHNlY3Rpb24gd2hlbiBHTCBkcml2ZXIgYnVnIG9uIE1hYyBBTkQg
dGhlIEdMRVMgZHJpdmVyIGJ1ZworICAgIC8vIG9uIFFDIGlzIGZpeGVkLCBpLmUuLCB3aGVuIGFs
cGhhIGlzIG9mZiwgcmVhZFBpeGVscyBzaG91bGQKKyAgICAvLyBzZXQgYWxwaGEgdG8gMjU1IGlu
c3RlYWQgb2YgMC4KKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2NvbnRleHQt
PmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciog
cGl4ZWxzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oZGF0YSk7CisgICAgICAg
IGZvciAoR0MzRHNpemVpIGl5ID0gMDsgaXkgPCBoZWlnaHQ7ICsraXkpIHsKKyAgICAgICAgICAg
IGZvciAoR0MzRHNpemVpIGl4ID0gMDsgaXggPCB3aWR0aDsgKytpeCkgeworICAgICAgICAgICAg
ICAgIHBpeGVsc1szXSA9IDI1NTsKKyAgICAgICAgICAgICAgICBwaXhlbHMgKz0gNDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHBpeGVscyArPSBwYWRkaW5nOworICAgICAgICB9CisgICAg
fQorI2VuZGlmCit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWxlYXNlU2hhZGVy
Q29tcGlsZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NvbnRleHQtPnJlbGVhc2VTaGFkZXJDb21waWxlcigpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5nIHx8ICFtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlbmRlcmJ1ZmZlclN0b3Jh
Z2UiLCAibm8gYm91bmQgcmVuZGVyYnVmZmVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKCF2YWxpZGF0ZVNpemUoInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCB3aWR0aCwgaGVpZ2h0
KSkKKyAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1X0Ex
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0lOREVYODoKKyAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZm
ZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworICAgICAg
ICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldEludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0
KTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJc1ZhbGlkKHRydWUpOworICAg
ICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdodCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6Cisg
ICAgICAgIGlmIChpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKSB7CisgICAgICAgICAgICBtX2Nv
bnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBFeHRlbnNpb25zM0Q6OkRFUFRIMjRf
U1RFTkNJTDgsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgICAgIG1fcmVuZGVyYnVm
ZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5zZXRJc1ZhbGlkKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpOworICAgICAg
ICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldEludGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2Ui
LCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGFwcGx5U3RlbmNpbFRlc3QoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNh
bXBsZUNvdmVyYWdlKEdDM0RmbG9hdCB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQoreworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Nv
bnRleHQtPnNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgic2Npc3NvciIsIHdp
ZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5zY2lzc29yKHgs
IHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2hh
ZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInNoYWRlclNvdXJjZSIs
IHNoYWRlcikpCisgICAgICAgIHJldHVybjsKKyAgICBTdHJpbmcgc3RyaW5nV2l0aG91dENvbW1l
bnRzID0gU3RyaXBDb21tZW50cyhzdHJpbmcpLnJlc3VsdCgpOworICAgIGlmICghdmFsaWRhdGVT
dHJpbmcoInNoYWRlclNvdXJjZSIsIHN0cmluZ1dpdGhvdXRDb21tZW50cykpCisgICAgICAgIHJl
dHVybjsKKyAgICBzaGFkZXItPnNldFNvdXJjZShzdHJpbmcpOworICAgIG1fY29udGV4dC0+c2hh
ZGVyU291cmNlKG9iamVjdE9yWmVybyhzaGFkZXIpLCBzdHJpbmdXaXRob3V0Q29tbWVudHMpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVu
YywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVTdGVuY2lsRnVu
Yygic3RlbmNpbEZ1bmMiLCBmdW5jKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3RlbmNpbEZ1
bmNSZWYgPSByZWY7CisgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSByZWY7CisgICAgbV9zdGVu
Y2lsRnVuY01hc2sgPSBtYXNrOworICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9IG1hc2s7Cisg
ICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBH
QzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0
ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuY1NlcGFyYXRlIiwgZnVuYykpCisgICAgICAgIHJldHVy
bjsKKyAgICBzd2l0Y2ggKGZhY2UpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9O
VF9BTkRfQkFDSzoKKyAgICAgICAgbV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICAgICAgbV9z
dGVuY2lsRnVuY1JlZkJhY2sgPSByZWY7CisgICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFz
azsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQ6CisgICAgICAgIG1fc3RlbmNpbEZ1
bmNSZWYgPSByZWY7CisgICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzoKKyAgICAgICAgbV9zdGVu
Y2lsRnVuY1JlZkJhY2sgPSByZWY7CisgICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9IG1h
c2s7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJzdGVuY2lsRnVuY1NlcGFyYXRl
IiwgImludmFsaWQgZmFjZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4
dC0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKK3sKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9z
dGVuY2lsTWFzayA9IG1hc2s7CisgICAgbV9zdGVuY2lsTWFza0JhY2sgPSBtYXNrOworICAgIG1f
Y29udGV4dC0+c3RlbmNpbE1hc2sobWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCit7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHN3aXRjaCAoZmFjZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0FORF9C
QUNLOgorICAgICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKKyAgICAgICAgbV9zdGVuY2lsTWFz
a0JhY2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUk9OVDoKKyAgICAgICAgbV9zdGVuY2lsTWFzayA9IG1hc2s7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0s6CisgICAgICAgIG1fc3RlbmNpbE1hc2tC
YWNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxNYXNr
U2VwYXJhdGUiLCAiaW52YWxpZCBmYWNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
bV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpm
YWlsLCBHQzNEZW51bSB6cGFzcykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5zdGVuY2lsT3AoZmFpbCwgemZhaWws
IHpwYXNzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcFNlcGFy
YXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51
bSB6cGFzcykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9jb250ZXh0LT5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFp
bCwgenBhc3MpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyREJh
c2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3Jz
IHJldHVybmVkLgorICAgIGVjID0gMDsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRl
VGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIEFTU0VSVCh2
YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwg
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9y
bWF0LCB0eXBlKSk7CisgICAgQVNTRVJUKHRleCk7CisgICAgQVNTRVJUKCFsZXZlbCB8fCAhV2Vi
R0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpOworICAgIGlmICghcGl4ZWxzKSB7Cisg
ICAgICAgIC8vIE5vdGU6IENocm9taXVtJ3MgT3BlbkdMIGltcGxlbWVudGF0aW9uIGNsZWFycyB0
ZXh0dXJlcyBhbmQgaXNSZXNvdXJjZVNhZmUoKSBpcyB0aGVyZWZvcmUgdHJ1ZS4KKyAgICAgICAg
Ly8gRm9yIG90aGVyIGltcGxlbWVudGF0aW9ucywgaWYgdGhleSBhcmUgdXNpbmcgQU5HTEVfZGVw
dGhfdGV4dHVyZSwgQU5HTEUgZGVwdGggdGV4dHVyZXMKKyAgICAgICAgLy8gY2FuIG5vdCBiZSBj
bGVhcmVkIHdpdGggdGV4SW1hZ2UyRCBhbmQgbXVzdCBiZSBjbGVhcmVkIGJ5IGJpbmRpbmcgdG8g
YW4gZmJvIGFuZCBjYWxsaW5nCisgICAgICAgIC8vIGNsZWFyLgorICAgICAgICBpZiAoaXNSZXNv
dXJjZVNhZmUoKSkKKyAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUs
IG51bGxwdHIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGJvb2wgc3VjY2VlZCA9IG1f
Y29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tB
bGlnbm1lbnQpOworICAgICAgICAgICAgaWYgKCFzdWNjZWVkKQorICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh2YWxpZGF0ZVNl
dHRhYmxlVGV4Rm9ybWF0KCJ0ZXhJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKTsKKyAgICAgICAg
bV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICAgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5
cGUsIHBpeGVscyk7CisgICAgICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpKSB7CisgICAgICAgICAgICAvLyBUaGUgdGV4SW1hZ2UyRCBmdW5jdGlvbiBm
YWlsZWQuIFRlbGwgdGhlIFdlYkdMVGV4dHVyZSBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgZm9y
IHRoaXMgbGV2ZWwuCisgICAgICAgICAgICB0ZXgtPm1hcmtJbnZhbGlkKHRhcmdldCwgbGV2ZWwp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIHRleC0+c2V0TGV2
ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCB0eXBl
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRJbXBsKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQz
RDo6SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IGRhdGE7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGlt
YWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNr
Q29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOworICAgIGlm
ICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIs
ICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5p
bWFnZVNvdXJjZUZvcm1hdCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhh
T3AgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKKyAgICBjb25zdCB2b2lkKiBpbWFn
ZVBpeGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRhKCk7CisKKyAgICBib29s
IG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYm
IGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nICYmICFmbGlwWSkK
KyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYg
KCFtX2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQs
IHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5p
bWFnZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9y
LmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdl
MkQiLCAicGFja0ltYWdlIGVycm9yIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250
ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7
CisgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGltYWdl
LT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNp
b24gPyBkYXRhLmRhdGEoKSA6IGltYWdlUGl4ZWxEYXRhLCBlYyk7CisgICAgaWYgKG1fdW5wYWNr
QWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3ND
b250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKworYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuYyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwgVGV4
RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHNvdXJjZVR5cGUsIEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQpCit7CisgICAgaWYgKCF2YWxp
ZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgZnVuY3Rpb25UeXBlLCB0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5
cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCB0cnVlKTsKKyAg
ICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChmdW5jdGlv
blR5cGUgPT0gTm90VGV4U3ViSW1hZ2UyRCkgeworICAgICAgICBpZiAobGV2ZWwgJiYgV2ViR0xU
ZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJs
ZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICAvLyBGb3IgU291cmNlQXJyYXlCdWZmZXJWaWV3LCBmdW5jdGlvbiB2
YWxpZGF0ZVRleEZ1bmNEYXRhKCkgd291bGQgaGFuZGxlIHdoZXRoZXIgdG8gdmFsaWRhdGUgdGhl
IFNldHRhYmxlVGV4Rm9ybWF0CisgICAgICAgIC8vIGJ5IGNoZWNraW5nIGlmIHRoZSBBcnJheUJ1
ZmZlclZpZXcgaXMgbnVsbCBvciBub3QuCisgICAgICAgIGlmIChzb3VyY2VUeXBlICE9IFNvdXJj
ZUFycmF5QnVmZmVyVmlldykgeworICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4
Rm9ybWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXZhbGlkYXRlU2V0dGFi
bGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBpZiAoIXZhbGlkYXRlU2l6ZShmdW5jdGlvbk5hbWUsIHhvZmZzZXQsIHlv
ZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBCZWZvcmUgY2hl
Y2tpbmcgaWYgaXQgaXMgaW4gdGhlIHJhbmdlLCBjaGVjayBpZiBvdmVyZmxvdyBoYXBwZW5zIGZp
cnN0LgorICAgICAgICBpZiAoeG9mZnNldCArIHdpZHRoIDwgMCB8fCB5b2Zmc2V0ICsgaGVpZ2h0
IDwgMCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJhZCBkaW1lbnNpb25zIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHhvZmZzZXQgKyB3aWR0
aCA+IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQg
PiB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGlmICh0ZXh0dXJlLT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJn
ZXQsIGxldmVsKSAhPSBmb3JtYXQgfHwgdGV4dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSAh
PSB0eXBlKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgYW5kIGZvcm1hdCBkbyBu
b3QgbWF0Y2ggdGV4dHVyZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVUZXhGdW5jRGF0YSgi
dGV4SW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscywg
TnVsbEFsbG93ZWQpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBO
b3RUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgMCwgMCkp
CisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiBkYXRhID0gcGl4ZWxzID8gcGl4ZWxzLT5iYXNl
QWRkcmVzcygpIDogMDsKKyAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7CisgICAgYm9vbCBj
aGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAgICBpZiAoZGF0YSAmJiAobV91bnBhY2tG
bGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7CisgICAgICAgIGlmICghbV9jb250
ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRlbXBEYXRhKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YSA9
IHRlbXBEYXRhLmRhdGEoKTsKKyAgICAgICAgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gdHJ1ZTsK
KyAgICB9CisgICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKKyAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Cisg
ICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIGRhdGEsIGVj
KTsKKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBp
eGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0Fs
aWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhcGl4ZWxzIHx8
ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VJ
bWFnZURhdGEsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCks
IHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBib29sIG5lZWRDb252ZXJzaW9uID0g
dHJ1ZTsKKyAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgb2YgZm9ybWF0
IFJHQkE4LgorICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0aW9uIGZv
cm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxpcCBvciBQcmVt
dWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKCFtX3VucGFja0ZsaXBZICYm
ICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpCisgICAg
ICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghbV9j
b250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0LCB0eXBlLCBtX3VucGFja0Zs
aXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdl
MkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Cisg
ICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVscy0+
d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVyc2lv
biA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEoKSwgZWMpOworICAgIGlmICht
X3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9
CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0ltYWdlSW50
b0J1ZmZlcihJbWFnZSogaW1hZ2UsIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRldmljZVNj
YWxlRmFjdG9yKQoreworICAgIEludFNpemUgc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBzaXpl
LnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKKyAgICBJbWFnZUJ1ZmZlciogYnVmID0gbV9nZW5l
cmF0ZWRJbWFnZUNhY2hlLmltYWdlQnVmZmVyKHNpemUpOworICAgIGlmICghYnVmKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZLCAi
dGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKworICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2UtPnNpemUo
KSk7CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSk7CisgICAgYnVm
LT5jb250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgZGVzdFJl
Y3QsIHNyY1JlY3QpOworICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShJbWFnZUJ1ZmZlcjo6ZmFz
dENvcHlJbWFnZU1vZGUoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhJbWFnZTJEIiwgaW1hZ2UsIGVjKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlciA9IGlt
YWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKTsK
KyAgICBpZiAoaW1hZ2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkKKyAgICAgICAgaW1hZ2VGb3JS
ZW5kZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9yUmVuZGVyLmdldCgpLCBpbWFnZS0+
d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxKTsKKworICAgIGlmICghaW1hZ2VGb3JSZW5kZXIg
fHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJj
ZUhUTUxJbWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBpbWFnZUZv
clJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIDAsIDApKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZUZvclJlbmRlci5nZXQo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21JbWFnZSwgbV91bnBhY2tGbGlwWSwgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KCJ0ZXhJbWFnZTJEIiwgY2Fu
dmFzLCBlYykgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdl
MkQsIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAs
IDApKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUgPSB2YWxp
ZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICAvLyBJ
ZiBwb3NzaWJsZSwgY29weSBmcm9tIHRoZSBjYW52YXMgZWxlbWVudCBkaXJlY3RseSB0byB0aGUg
dGV4dHVyZQorICAgIC8vIHZpYSB0aGUgR1BVLCB3aXRob3V0IGEgcmVhZC1iYWNrIHRvIHN5c3Rl
bSBtZW1vcnkuCisgICAgLy8KKyAgICAvLyBGSVhNRTogcmVzdHJpY3Rpb24gb2YgKFJHQiB8fCBS
R0JBKS9VTlNJR05FRF9CWVRFIHNob3VsZCBiZSBsaWZ0ZWQgd2hlbgorICAgIC8vIEltYWdlQnVm
ZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUgaW1wbGVtZW50YXRpb25zIGFyZSBmdWxseSBmdW5j
dGlvbmFsLgorICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCA9PSB0YXJnZXQg
JiYgdGV4dHVyZSAmJiB0eXBlID09IHRleHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkKKyAg
ICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCIHx8IGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSkgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfQllURSkgeworICAgICAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gY2FudmFzLT5idWZm
ZXIoKTsKKyAgICAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNvcHlUb1BsYXRmb3JtVGV4dHVy
ZSgqbV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwgaW50ZXJuYWxmb3JtYXQsIG1f
dW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgIHRl
eHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFz
LT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGNh
bnZhcy0+Z2V0SW1hZ2VEYXRhKCk7CisgICAgaWYgKGltYWdlRGF0YSkKKyAgICAgICAgdGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZURh
dGEuZ2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2Uo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1fdW5wYWNrRmxpcFksIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQorUGFzc1Jl
ZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aWRlb0ZyYW1lVG9JbWFnZShIVE1M
VmlkZW9FbGVtZW50KiB2aWRlbywgQmFja2luZ1N0b3JlQ29weSBiYWNraW5nU3RvcmVDb3B5LCBF
eGNlcHRpb25Db2RlJikKK3sKKyAgICBJbnRTaXplIHNpemUodmlkZW8tPnZpZGVvV2lkdGgoKSwg
dmlkZW8tPnZpZGVvSGVpZ2h0KCkpOworICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2dlbmVyYXRl
ZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7CisgICAgaWYgKCFidWYpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlksICJ0ZXhJ
bWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorICAgIEludFJlY3QgZGVzdFJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKKyAgICAvLyBGSVhNRTogVHVybiB0aGlzIGludG8gYSBHUFUtR1BVIHRleHR1cmUgY29weSBp
bnN0ZWFkIG9mIENQVSByZWFkYmFjay4KKyAgICB2aWRlby0+cGFpbnRDdXJyZW50RnJhbWVJbkNv
bnRleHQoYnVmLT5jb250ZXh0KCksIGRlc3RSZWN0KTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1h
Z2UoYmFja2luZ1N0b3JlQ29weSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhJbWFnZTJEIiwgdmlkZW8sIGVj
KQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1h
Z2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQs
IHR5cGUsIDAsIDApKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBHbyB0aHJvdWdoIHRoZSBm
YXN0IHBhdGggZG9pbmcgYSBHUFUtR1BVIHRleHR1cmVzIGNvcHkgd2l0aG91dCBhIHJlYWRiYWNr
IHRvIHN5c3RlbSBtZW1vcnkgaWYgcG9zc2libGUuCisgICAgLy8gT3RoZXJ3aXNlLCBpdCB3aWxs
IGZhbGwgYmFjayB0byB0aGUgbm9ybWFsIFNXIHBhdGguCisgICAgLy8gRklYTUU6IFRoZSBjdXJy
ZW50IHJlc3RyaWN0aW9ucyByZXF1aXJlIHRoYXQgZm9ybWF0IHNob3VkIGJlIFJHQiBvciBSR0JB
LAorICAgIC8vIHR5cGUgc2hvdWxkIGJlIFVOU0lHTkVEX0JZVEUgYW5kIGxldmVsIHNob3VsZCBi
ZSAwLiBJdCBtYXkgYmUgbGlmdGVkIGluIHRoZSBmdXR1cmUuCisgICAgV2ViR0xUZXh0dXJlKiB0
ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1
ZSk7CisgICAgaWYgKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEID09IHRhcmdldCAmJiB0
ZXh0dXJlCisgICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBm
b3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpCisgICAgICAgICYmIHR5cGUgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgJiYgKHRleHR1cmUtPmdldFR5
cGUodGFyZ2V0LCBsZXZlbCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgfHwg
IXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpCisgICAgICAgICYmICFsZXZlbCkgewor
ICAgICAgICBpZiAodmlkZW8tPmNvcHlWaWRlb1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShtX2Nv
bnRleHQuZ2V0KCksIHRleHR1cmUtPm9iamVjdCgpLCBsZXZlbCwgdHlwZSwgaW50ZXJuYWxmb3Jt
YXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAg
ICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
dmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIHR5cGUpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm9ybWFsIHB1cmUgU1cg
cGF0aC4KKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8s
IEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpLCBlYyk7CisgICAgaWYgKCFpbWFnZSkK
KyAgICAgICAgcmV0dXJuOworICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6
SHRtbERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVj
KTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVy
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbWYsIEdDM0Rp
bnQgcGFyYW1pLCBib29sIGlzRmxvYXQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVU
ZXh0dXJlQmluZGluZygidGV4UGFyYW1ldGVyIiwgdGFyZ2V0LCBmYWxzZSk7CisgICAgaWYgKCF0
ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9XUkFQX1Q6CisgICAgICAgIGlmICgoaXNGbG9hdCAmJiBwYXJhbWYgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBF
QVQpCisgICAgICAgICAgICB8fCAoIWlzRmxvYXQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TUlSUk9S
RURfUkVQRUFUICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFUKSkgeworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciIpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpU
RVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJv
cGljCisgICAgICAgIGlmICghbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIsIEVYVF90ZXh0dXJlX2ZpbHRlcl9h
bmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpc0Zs
b2F0KSB7CisgICAgICAgIHRleC0+c2V0UGFyYW1ldGVyZihwbmFtZSwgcGFyYW1mKTsKKyAgICAg
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHBhcmFtZik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJpKHBuYW1lLCBwYXJhbWkpOworICAg
ICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFyYW1pKTsKKyAg
ICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJmKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSkKK3sKKyAgICB0ZXhQ
YXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgcGFyYW0sIDAsIHRydWUpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBuYW1lLCBHQzNEaW50IHBhcmFtKQoreworICAgIHRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1l
LCAwLCBwYXJhbSwgZmFsc2UpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBl
cnJvcnMgcmV0dXJuZWQKKyAgICBlYyA9IDA7CisgICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkp
OworICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJ0ZXhTdWJJbWFnZTJEIiwg
VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBm
b3JtYXQsIHR5cGUpKTsKKyAgICBBU1NFUlQodmFsaWRhdGVTaXplKCJ0ZXhTdWJJbWFnZTJEIiwg
eG9mZnNldCwgeW9mZnNldCkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0
KCJ0ZXhTdWJJbWFnZTJEIiwgZm9ybWF0KSk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxp
ZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBp
ZiAoIXRleCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBBU1NFUlQoKHhvZmZzZXQgKyB3aWR0aCkgPj0gMCk7CisgICAgQVNTRVJU
KCh5b2Zmc2V0ICsgaGVpZ2h0KSA+PSAwKTsKKyAgICBBU1NFUlQodGV4LT5nZXRXaWR0aCh0YXJn
ZXQsIGxldmVsKSA+PSAoeG9mZnNldCArIHdpZHRoKSk7CisgICAgQVNTRVJUKHRleC0+Z2V0SGVp
Z2h0KHRhcmdldCwgbGV2ZWwpID49ICh5b2Zmc2V0ICsgaGVpZ2h0KSk7CisgICAgQVNTRVJUKHRl
eC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgPT0gZm9ybWF0KTsKKyAgICBBU1NF
UlQodGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IHR5cGUpOworICAgIG1fY29udGV4dC0+
dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJj
ZSBkb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwg
ZG9tU291cmNlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9u
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsgIAorICAgIGlmICghaW1hZ2VFeHRyYWN0b3Iu
ZXh0cmFjdFN1Y2NlZWRlZCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1h
dCBzb3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsK
KyAgICBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3Iu
aW1hZ2VBbHBoYU9wKCk7CisgICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4
dHJhY3Rvci5pbWFnZVBpeGVsRGF0YSgpOworCisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRy
dWU7CisgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYg
c291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYm
IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNz
Q29udGV4dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxpcFkpCisgICAgICAgIG5lZWRDb252ZXJz
aW9uID0gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1h
Z2VEYXRhKGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFP
cCwgc291cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4
dHJhY3Rvci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0Fs
aWdubWVudCgpLCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRh
Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV91
bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgdGV4U3ViSW1hZ2UyREJh
c2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgaW1hZ2UtPndpZHRoKCksIGltYWdl
LT5oZWlnaHQoKSwgZm9ybWF0LCB0eXBlLCAgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6
IGltYWdlUGl4ZWxEYXRhLCBlYyk7CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisg
ICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19B
TElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVGV4RnVuY0Rh
dGEoInRleFN1YkltYWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBw
aXhlbHMsIE51bGxOb3RBbGxvd2VkKQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhT
dWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlQXJyYXlCdWZmZXJWaWV3LCB0YXJnZXQs
IGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwg
eW9mZnNldCkpCisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNl
QWRkcmVzcygpOworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKKyAgICBib29sIGNoYW5n
ZVVucGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIGlmIChkYXRhICYmIChtX3VucGFja0ZsaXBZ
IHx8IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQt
PmV4dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGVtcERhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkYXRhID0gdGVt
cERhdGEuZGF0YSgpOworICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAg
IH0KKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBp
eGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0
ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEsIGVjKTsKKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxp
Z25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNE
OjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhcGl4ZWxzIHx8ICF2YWxpZGF0ZVRl
eEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VJbWFnZURhdGEsIHRh
cmdldCwgbGV2ZWwsIGZvcm1hdCwgIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwg
MCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7
CisgICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBSR0JB
OC4KKyAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3JtYXQg
aXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVsdGlw
bHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAm
JiAhbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKQorICAgICAgICBu
ZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fY29udGV4
dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJE
IiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+
cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAg
IHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHBpeGVs
cy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVyc2lv
biA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEoKSwgZWMpOworICAgIGlmICht
X3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgaW1hZ2UsIGVjKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlciA9IGltYWdl
LT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKTsKKyAg
ICBpZiAoaW1hZ2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkKKyAgICAgICAgaW1hZ2VGb3JSZW5k
ZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9yUmVuZGVyLmdldCgpLCBpbWFnZS0+d2lk
dGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxKTsKKworICAgIGlmICghaW1hZ2VGb3JSZW5kZXIgfHwg
IXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhU
TUxJbWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndp
ZHRoKCksIGltYWdlRm9yUmVuZGVyLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0
LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdGV4U3ViSW1hZ2UyREltcGwodGFy
Z2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZUZvclJlbmRl
ci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21JbWFnZSwgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52
YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVt
ZW50KCJ0ZXhTdWJJbWFnZTJEIiwgY2FudmFzLCBlYykKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4
RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxDYW52YXNFbGVt
ZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWln
aHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gY2FudmFzLT5nZXRJbWFnZURh
dGEoKTsKKyAgICBpZiAoaW1hZ2VEYXRhKQorICAgICAgICB0ZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdldCgpLCBl
Yyk7CisgICAgZWxzZQorICAgICAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSwgZWMpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0g
MDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRl
b0VsZW1lbnQoInRleFN1YkltYWdlMkQiLCB2aWRlbywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0
ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MVmlkZW9F
bGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVv
LT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1h
Z2UodmlkZW8sIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpLCBlYyk7CisgICAgaWYg
KCFpbWFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBo
aWNzQ29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgZWMpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxv
YXQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1bmlmb3JtMWYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB4KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCAxKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSwg
di0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMoInVuaWZvcm0xZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMSkpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6
ZSwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWkoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsb2NhdGlv
bi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTFpIiwg
ImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNB
TVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExF
Ul9DVUJFKSAmJiB4ID49IChpbnQpbV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9y
bTFpIiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYs
IDEpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNz
Q29udGV4dDNEOjpTQU1QTEVSX0NVQkUpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB2LT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAodi0+ZGF0YSgpW2ldID49IHN0
YXRpY19jYXN0PGludD4obV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSkgeworICAgICAgICAgICAgICAg
IExPRyhXZWJHTCwgIlRleHR1cmUgdW5pdCBzaXplPSV6dSwgdlslZF09JWQuIExvY2F0aW9uIHR5
cGUgPSAlMDRYLiIsIG1fdGV4dHVyZVVuaXRzLnNpemUoKSwgaSwgdi0+ZGF0YSgpW2ldLCBsb2Nh
dGlvbi0+dHlwZSgpKTsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaXYiLCAiaW52YWxpZCB0ZXh0dXJl
IHVuaXQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
bGVuZ3RoKCksIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycygidW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
U0FNUExFUl9DVUJFKQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHNpemUpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgoKEdDM0RpbnQqKXYp
W2ldID49IHN0YXRpY19jYXN0PGludD4obV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSkgeworICAgICAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAidW5pZm9ybTFpdiIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgbV9jb250ZXh0LT51
bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplLCB2KTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMmYiLCAibG9jYXRp
b24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5KTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9u
LCB2LCAyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDIsIHYtPmRhdGEoKSk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMmZ2Iiwg
bG9jYXRpb24sIHYsIHNpemUsIDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQt
PnVuaWZvcm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAyLCB2KTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnBy
b2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0yaSIsICJsb2Nh
dGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgbV9jb250ZXh0LT51bmlmb3JtMmkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHkpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJpdiIsIGxvY2F0aW9u
LCB2LCAyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDIsIHYtPmRhdGEoKSk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJpdiIsIGxv
Y2F0aW9uLCB2LCBzaXplLCAyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51
bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMiwgdik7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVu
aWZvcm0zZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2YobG9jYXRpb24tPmxvY2F0
aW9uKCksIHgsIHksIHopOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSog
diwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1
bmlmb3JtM2Z2IiwgbG9jYXRpb24sIHYsIDMpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Nv
bnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMywg
di0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMoInVuaWZvcm0zZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6
ZSAvIDMsIHYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3Jh
bSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJ1bmlmb3JtM2kiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dy
YW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTNp
KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoInVuaWZvcm0zaXYiLCBsb2NhdGlvbiwgdiwgMykpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
bGVuZ3RoKCkgLyAzLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rp
bnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
VW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9j
YXRpb24oKSwgc2l6ZSAvIDMsIHYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0
IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsb2NhdGlv
bi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTRmIiwg
ImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00Zihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwg
eSwgeiwgdyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00
ZnYiLCBsb2NhdGlvbiwgdiwgNCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+
dW5pZm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB2LT5kYXRh
KCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNp
emUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygi
dW5pZm9ybTRmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwg
dik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGkoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGlu
dCB6LCBHQzNEaW50IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFBy
b2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTRpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBw
cm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm00aShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeiwgdyk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGl2IiwgbG9jYXRpb24sIHYsIDQpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGl2IiwgbG9jYXRpb24sIHYsIHNpemUs
IDQpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHNpemUgLyA0LCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0
cml4MmZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgNCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxl
bmd0aCgpIC8gNCwgdHJhbnNwb3NlLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkg
c2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJh
bWV0ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwg
NCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyA0LCB0cmFuc3Bvc2UsIHYpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRl
cnMoInVuaWZvcm1NYXRyaXgzZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA5KSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbi0+bG9j
YXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA5LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQq
IHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFS
QU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgzZnYiLCBsb2NhdGlvbiwgdHJhbnNw
b3NlLCB2LCBzaXplLCA5KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9y
bU1hdHJpeDNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDksIHRyYW5zcG9zZSwgdik7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBG
bG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
TWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2Us
IHYsIDE2KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRm
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAxNiwgdHJhbnNwb3NlLCB2LT5k
YXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5z
cG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4NGZ2Iiwg
bG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgMTYpKQorICAgICAgICByZXR1cm47CisgICAg
bV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8g
MTYsIHRyYW5zcG9zZSwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1c2VQ
cm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVj
dFRvQmVCb3VuZCgidXNlUHJvZ3JhbSIsIHByb2dyYW0sIGRlbGV0ZWQpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKGRlbGV0ZWQpCisgICAgICAgIHByb2dyYW0gPSAwOworICAgIGlmIChwcm9n
cmFtICYmICFwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidXNlUHJvZ3JhbSIs
ICJwcm9ncmFtIG5vdCB2YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICht
X2N1cnJlbnRQcm9ncmFtICE9IHByb2dyYW0pIHsKKyAgICAgICAgaWYgKG1fY3VycmVudFByb2dy
YW0pCisgICAgICAgICAgICBtX2N1cnJlbnRQcm9ncmFtLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29u
dGV4dDNEKCkpOworICAgICAgICBtX2N1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsKKyAgICAgICAg
bV9jb250ZXh0LT51c2VQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CisgICAgICAgIGlm
IChwcm9ncmFtKQorICAgICAgICAgICAgcHJvZ3JhbS0+b25BdHRhY2hlZCgpOworICAgIH0KK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dy
YW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVj
dCgidmFsaWRhdGVQcm9ncmFtIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2Nv
bnRleHQtPnZhbGlkYXRlUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3JhbSkpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCB2MCkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliMWYiLCBp
bmRleCwgMSwgdjAsIDAuMGYsIDAuMGYsIDEuMGYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYp
Cit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIxZnYiLCBpbmRleCwgdiwg
MSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgdmVydGV4
QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIxZnYiLCBpbmRleCwgdiwgc2l6ZSwgMSk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCit7CisgICAgdmVydGV4QXR0cmliZkltcGwo
InZlcnRleEF0dHJpYjJmIiwgaW5kZXgsIDIsIHYwLCB2MSwgMC4wZiwgMS4wZik7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgs
IEZsb2F0MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJp
YjJmdiIsIGluZGV4LCB2LCAyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6
ZSkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjJmdiIsIGluZGV4LCB2
LCBzaXplLCAyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0
IHYyKQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZiIsIGluZGV4LCAz
LCB2MCwgdjEsIHYyLCAxLjBmKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQoreworICAgIHZl
cnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliM2Z2IiwgaW5kZXgsIHYsIDMpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1w
bCgidmVydGV4QXR0cmliM2Z2IiwgaW5kZXgsIHYsIHNpemUsIDMpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKK3sKKyAgICB2
ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliNGYiLCBpbmRleCwgNCwgdjAsIHYxLCB2Miwg
djMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KEdD
M0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCit7CisgICAgdmVydGV4QXR0cmliZnZJbXBs
KCJ2ZXJ0ZXhBdHRyaWI0ZnYiLCBpbmRleCwgdiwgNCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwg
R0MzRHNpemVpIHNpemUpCit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0
ZnYiLCBpbmRleCwgdiwgc2l6ZSwgNCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0Rl
bnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIGxvbmcg
bG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJZVEU6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTSE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW52YWxpZCB0eXBlIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0
cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHNpemUgPCAxIHx8IHNpemUgPiA0IHx8
IHN0cmlkZSA8IDAgfHwgc3RyaWRlID4gMjU1IHx8IG9mZnNldCA8IDApIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhB
dHRyaWJQb2ludGVyIiwgImJhZCBzaXplLCBzdHJpZGUgb3Igb2Zmc2V0Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZmZXIpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidmVy
dGV4QXR0cmliUG9pbnRlciIsICJubyBib3VuZCBBUlJBWV9CVUZGRVIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAvLyBEZXRlcm1pbmUgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0aGUg
Ym91bmQgYnVmZmVyIGNhbiBob2xkLCBnaXZlbiB0aGUgb2Zmc2V0LCBzaXplLCB0eXBlIGFuZCBz
dHJpZGUKKyAgICB1bnNpZ25lZCBpbnQgdHlwZVNpemUgPSBzaXplSW5CeXRlcyh0eXBlKTsKKyAg
ICBpZiAoIXR5cGVTaXplKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImludmFsaWQgdHlw
ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICgoc3RyaWRlICUgdHlwZVNpemUp
IHx8IChzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpICUgdHlwZVNpemUpKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAic3RyaWRlIG9yIG9mZnNldCBub3QgdmFsaWQgZm9y
IHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBHQzNEc2l6ZWkgYnl0ZXNQZXJF
bGVtZW50ID0gc2l6ZSAqIHR5cGVTaXplOworCisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwgYnl0ZXNQZXJFbGVtZW50LCBzaXplLCB0eXBl
LCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG1f
Ym91bmRBcnJheUJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGlu
ZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXRpY19jYXN0PEdDM0RpbnRw
dHI+KG9mZnNldCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlld3BvcnQo
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKCF2YWxpZGF0ZVNpemUoInZpZXdwb3J0Iiwgd2lkdGgsIGhlaWdodCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NvbnRleHQtPnZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VMb3N0Q29udGV4dChXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQoreworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBhbHJl
YWR5IGxvc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dEdyb3Vw
LT5sb3NlQ29udGV4dEdyb3VwKG1vZGUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6bG9zZUNvbnRleHRJbXBsKFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2Rl
IG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9jb250ZXh0TG9zdCA9IHRydWU7CisgICAgbV9jb250ZXh0TG9zdE1vZGUgPSBtb2RlOwor
CisgICAgaWYgKG1vZGUgPT0gUmVhbExvc3RDb250ZXh0KSB7CisgICAgICAgIC8vIEluZm9ybSB0
aGUgZW1iZWRkZXIgdGhhdCBhIGxvc3QgY29udGV4dCB3YXMgcmVjZWl2ZWQuIEluIHJlc3BvbnNl
LCB0aGUgZW1iZWRkZXIgbWlnaHQKKyAgICAgICAgLy8gZGVjaWRlIHRvIHRha2UgYWN0aW9uIHN1
Y2ggYXMgYXNraW5nIHRoZSB1c2VyIGZvciBwZXJtaXNzaW9uIHRvIHVzZSBXZWJHTCBhZ2Fpbi4K
KyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLmZyYW1lKCkp
CisgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuZGlkTG9zZVdlYkdMQ29udGV4
dChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigp
KTsKKyAgICB9CisKKyAgICBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CisKKyAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8vIE1ha2UgYWJzb2x1dGVseSBzdXJlIHdlIGRv
IG5vdCByZWZlciB0byBhbiBhbHJlYWR5LWRlbGV0ZWQgdGV4dHVyZSBvciBmcmFtZWJ1ZmZlci4K
KyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRUZXh0dXJlMkRCaW5kaW5nKDApOworICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZygwKTsKKyAgICB9CisKKyAg
ICAvLyBUaGVyZSBpcyBubyBkaXJlY3Qgd2F5IHRvIGNsZWFyIGVycm9ycyBmcm9tIGEgR0wgaW1w
bGVtZW50YXRpb24gYW5kCisgICAgLy8gbG9vcGluZyB1bnRpbCBnZXRFcnJvcigpIGJlY29tZXMg
Tk9fRVJST1IgbWlnaHQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcCBpZgorICAgIC8vIHRoZSBkcml2
ZXIgb3IgY29udGV4dCBpbXBsZW1lbnRhdGlvbiBoYWQgYSBidWcuIFNvLCBsb29wIGEgcmVhc29u
YWJseQorICAgIC8vIGxhcmdlIG51bWJlciBvZiB0aW1lcyB0byBjbGVhciBhbnkgZXhpc3Rpbmcg
ZXJyb3JzLgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgaWYg
KG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCisg
ICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlIGRp
c3BsYXkgPSAobW9kZSA9PSBSZWFsTG9zdENvbnRleHQpID8gRGlzcGxheUluQ29uc29sZTogRG9u
dERpc3BsYXlJbkNvbnNvbGU7CisgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTCwgImxvc2VDb250ZXh0IiwgImNvbnRleHQgbG9zdCIsIGRp
c3BsYXkpOworCisgICAgLy8gRG9uJ3QgYWxsb3cgcmVzdG9yYXRpb24gdW5sZXNzIHRoZSBjb250
ZXh0IGxvc3QgZXZlbnQgaGFzIGJvdGggYmVlbgorICAgIC8vIGRpc3BhdGNoZWQgYW5kIGl0cyBk
ZWZhdWx0IGJlaGF2aW9yIHByZXZlbnRlZC4KKyAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZmFsc2U7
CisKKyAgICAvLyBBbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRoZSBjb250ZXh0IGxvc3Qg
ZXZlbnQsIHRvIGltcGxlbWVudAorICAgIC8vIHRoZSBzcGVjIGJlaGF2aW9yIG9mIHF1ZXVlaW5n
IGEgdGFzay4KKyAgICBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyLnN0YXJ0T25lU2hv
dCgwKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlUmVzdG9yZUNvbnRl
eHQoKQoreworICAgIGlmICghaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJl
c3RvcmVDb250ZXh0IiwgImNvbnRleHQgbm90IGxvc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmICghbV9yZXN0b3JlQWxsb3dlZCkgeworICAgICAgICBpZiAobV9jb250ZXh0
TG9zdE1vZGUgPT0gU3ludGhldGljTG9zdENvbnRleHQpCisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29u
dGV4dCIsICJjb250ZXh0IHJlc3RvcmF0aW9uIG5vdCBhbGxvd2VkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoIW1fcmVzdG9yZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAg
IG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKworUGxhdGZvcm1MYXllciogV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
KCFpc0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgPyBtX2Nv
bnRleHQtPnBsYXRmb3JtTGF5ZXIoKSA6IDA7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpyZW1vdmVTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisKKyAg
ICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlT2JqZWN0KG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjphZGRTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqIG9iamVj
dCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1
cm47CisKKyAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7CisgICAgbV9jb250ZXh0R3JvdXAt
PmFkZE9iamVjdChvYmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVt
b3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAo
bV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Nv
bnRleHRPYmplY3RzLnJlbW92ZShvYmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6YWRkQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisKKyAg
ICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7CisgICAgbV9jb250ZXh0T2JqZWN0cy5hZGQob2Jq
ZWN0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaEFuZFJlbW92ZUFs
bE9iamVjdHMoKQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAg
ICAgIHJldHVybjsKKworICAgIHdoaWxlIChtX2NvbnRleHRPYmplY3RzLnNpemUoKSA+IDApIHsK
KyAgICAgICAgSGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPjo6aXRlcmF0b3IgaXQgPSBtX2Nv
bnRleHRPYmplY3RzLmJlZ2luKCk7CisgICAgICAgICgqaXQpLT5kZXRhY2hDb250ZXh0KCk7Cisg
ICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aGFzUGVuZGluZ0FjdGl2aXR5
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpzdG9wKCkKK3sKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRp
bmdQb2xpY3lSZXNvbHV0aW9uKSB7CisgICAgICAgIGZvcmNlTG9zdENvbnRleHQoU3ludGhldGlj
TG9zdENvbnRleHQpOworICAgICAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB9
Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xlYW5QYXJh
bWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7CisgICAgR0MzRGJvb2xlYW4gdmFsdWUgPSAwOworICAg
IG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZSkpOworfQorCitXZWJHTEdldEluZm8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5h
bWUpCit7CisgICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9XUklURU1B
U0spIHsKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygwLCAwKTsKKyAgICB9CisgICAgR0MzRGJvb2xlYW4gdmFsdWVbNF0gPSB7MH07CisgICAg
bV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOworICAgIGJvb2wgYm9vbFZhbHVl
WzRdOworICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCA0OyArK2lpKQorICAgICAgICBib29sVmFs
dWVbaWldID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbaWldKTsKKyAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKGJvb2xWYWx1ZSwgNCk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEZsb2F0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RmbG9h
dCB2YWx1ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsICZ2YWx1ZSk7Cisg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldEludFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBH
QzNEaW50IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCAmdmFs
dWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworfQorCitXZWJHTEdldEluZm8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbnNpZ25lZEludFBhcmFtZXRlcihHQzNEZW51bSBw
bmFtZSkKK3sKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8
dW5zaWduZWQgaW50Pih2YWx1ZSkpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7Cisg
ICAgR0MzRGZsb2F0IHZhbHVlWzRdID0gezB9OworICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2KHBu
YW1lLCB2YWx1ZSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICBzd2l0Y2ggKHBuYW1l
KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9SQU5HRToKKyAgICAgICAgbGVuZ3Ro
ID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRf
Q09MT1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6Cisg
ICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQz
MkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1l
KQoreworICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250ZXh0LT5nZXRJbnRl
Z2VydihwbmFtZSwgdmFsdWUpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7CisgICAgc3dpdGNo
IChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WSUVXUE9SVF9ESU1T
OgorICAgICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX0JPWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWSUVX
UE9SVDoKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgYm9vbCBwcmVwYXJlVG9EcmF3KQoreworICAgIGJvb2wgcmVzZXRBY3RpdmVVbml0
ID0gZmFsc2U7CisgICAgV2ViR0xUZXh0dXJlOjpUZXh0dXJlRXh0ZW5zaW9uRmxhZyBleHRlbnNp
b25zID0gc3RhdGljX2Nhc3Q8V2ViR0xUZXh0dXJlOjpUZXh0dXJlRXh0ZW5zaW9uRmxhZz4oKG1f
b2VzVGV4dHVyZUZsb2F0TGluZWFyID8gV2ViR0xUZXh0dXJlOjpUZXh0dXJlRXh0ZW5zaW9uRmxv
YXRMaW5lYXJFbmFibGVkIDogMCkgfCAobV9vZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyID8gV2Vi
R0xUZXh0dXJlOjpUZXh0dXJlRXh0ZW5zaW9uSGFsZkZsb2F0TGluZWFyRW5hYmxlZCA6IDApKTsK
KworICAgIGZvciAodW5zaWduZWQgaWkgPSAwOyBpaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsg
KytpaSkgeworICAgICAgICBpZiAoKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5n
ICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1Rl
eHR1cmUoZXh0ZW5zaW9ucykpCisgICAgICAgICAgICB8fCAobV90ZXh0dXJlVW5pdHNbaWldLnRl
eHR1cmVDdWJlTWFwQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBC
aW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykpKSB7CisgICAgICAgICAg
ICBpZiAoaWkgIT0gbV9hY3RpdmVUZXh0dXJlVW5pdCkgeworICAgICAgICAgICAgICAgIG1fY29u
dGV4dC0+YWN0aXZlVGV4dHVyZShpaSk7CisgICAgICAgICAgICAgICAgcmVzZXRBY3RpdmVVbml0
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzZXRBY3RpdmVVbml0KSB7CisgICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlpKTsKKyAgICAgICAgICAgICAg
ICByZXNldEFjdGl2ZVVuaXQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFdl
YkdMVGV4dHVyZSogdGV4MkQ7CisgICAgICAgICAgICBXZWJHTFRleHR1cmUqIHRleEN1YmVNYXA7
CisgICAgICAgICAgICBpZiAocHJlcGFyZVRvRHJhdykgeworICAgICAgICAgICAgICAgIFN0cmlu
ZyBtc2coU3RyaW5nKCJ0ZXh0dXJlIGJvdW5kIHRvIHRleHR1cmUgdW5pdCAiKSArIFN0cmluZzo6
bnVtYmVyKGlpKQorICAgICAgICAgICAgICAgICAgICArICIgaXMgbm90IHJlbmRlcmFibGUuIEl0
IG1heWJlIG5vbi1wb3dlci1vZi0yIGFuZCBoYXZlIGluY29tcGF0aWJsZSB0ZXh0dXJlIGZpbHRl
cmluZyBvciBpcyBub3QgJ3RleHR1cmUgY29tcGxldGUnLCIKKyAgICAgICAgICAgICAgICAgICAg
KyAiIG9yIGl0IGlzIGEgZmxvYXQvaGFsZi1mbG9hdCB0eXBlIHdpdGggbGluZWFyIGZpbHRlcmlu
ZyBhbmQgd2l0aG91dCB0aGUgcmVsZXZhbnQgZmxvYXQvaGFsZi1mbG9hdCBsaW5lYXIgZXh0ZW5z
aW9uIGVuYWJsZWQuIik7CisgICAgICAgICAgICAgICAgcHJpbnRHTFdhcm5pbmdUb0NvbnNvbGUo
ZnVuY3Rpb25OYW1lLCBtc2cudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgdGV4MkQg
PSBtX2JsYWNrVGV4dHVyZTJELmdldCgpOworICAgICAgICAgICAgICAgIHRleEN1YmVNYXAgPSBt
X2JsYWNrVGV4dHVyZUN1YmVNYXAuZ2V0KCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHRleDJEID0gbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmcuZ2V0
KCk7CisgICAgICAgICAgICAgICAgdGV4Q3ViZU1hcCA9IG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0
dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
bV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWld
LnRleHR1cmUyREJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkKKyAg
ICAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBvYmplY3RPclplcm8odGV4MkQpKTsKKyAgICAgICAgICAgIGlmIChtX3RleHR1
cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50
ZXh0dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkK
KyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQLCBvYmplY3RPclplcm8odGV4Q3ViZU1hcCkpOworICAgICAgICB9
CisgICAgfQorICAgIGlmIChyZXNldEFjdGl2ZVVuaXQpCisgICAgICAgIG1fY29udGV4dC0+YWN0
aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1cmVVbml0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpCit7CisgICAgdW5zaWdu
ZWQgY2hhciBibGFja1tdID0gezAsIDAsIDAsIDI1NX07CisgICAgbV9ibGFja1RleHR1cmUyRCA9
IGNyZWF0ZVRleHR1cmUoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX2JsYWNrVGV4dHVyZTJELT5vYmplY3QoKSk7CisgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
LCBibGFjayk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCk7CisgICAgbV9ibGFja1RleHR1cmVDdWJlTWFwID0gY3JlYXRlVGV4dHVy
ZSgpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVAsIG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC0+b2JqZWN0KCkpOworICAgIG1fY29u
dGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1gsIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNr
KTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+dGV4
SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZLCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1osIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBt
X2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIDApOworfQorCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRp
b25WYWxpZChHQzNEZW51bSB0ZXhJbnRlcm5hbEZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGNvbG9yQnVmZmVyRm9ybWF0KQoreworICAgIHVuc2lnbmVkIG5lZWQgPSBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdCh0ZXhJbnRlcm5hbEZvcm1hdCk7Cisg
ICAgdW5zaWduZWQgaGF2ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5Rm9y
bWF0KGNvbG9yQnVmZmVyRm9ybWF0KTsKKyAgICByZXR1cm4gKG5lZWQgJiBoYXZlKSA9PSBuZWVk
OworfQorCitHQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZm
ZXJDb2xvckZvcm1hdCgpCit7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJC
aW5kaW5nLT5nZXRDb2xvckJ1ZmZlckZvcm1hdCgpOworICAgIGlmIChtX2F0dHJpYnV0ZXMuYWxw
aGEpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKKyAgICByZXR1cm4g
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICByZXR1cm4gbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyV2lkdGgoKTsKKyAgICByZXR1cm4gbV9k
cmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKSA6IG1fY29udGV4
dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOworfQorCitpbnQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCkKK3sKKyAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQor
ICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVySGVpZ2h0
KCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgp
LmhlaWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhlaWdo
dCgpOworfQorCitXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVU
ZXh0dXJlQmluZGluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwg
Ym9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApCit7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJl
ID0gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2Fj
dGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Y
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElW
RV9aOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWjoKKyAgICAgICAgaWYgKCF1c2VTaXhFbnVtc0ZvckN1YmVNYXApIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICB9CisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2Fj
dGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVA6CisgICAg
ICAgIGlmICh1c2VTaXhFbnVtc0ZvckN1YmVNYXApIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICB9CisgICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVV
bml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJubyB0ZXh0dXJlIik7CisgICAgcmV0dXJuIHRleHR1cmU7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgY29uc3QgdW5zaWdu
ZWQgbWF4V2ViR0xMb2NhdGlvbkxlbmd0aCA9IDI1NjsKKyAgICBpZiAoc3RyaW5nLmxlbmd0aCgp
ID4gbWF4V2ViR0xMb2NhdGlvbkxlbmd0aCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibG9jYXRpb24g
bGVuZ3RoID4gMjU2Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVNpemUoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IHgsIEdDM0RpbnQgeSkKK3sKKyAgICBpZiAo
eCA8IDAgfHwgeSA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInNpemUgPCAwIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IFN0cmluZyYgc3RyaW5nKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3Ry
aW5nLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZUNoYXJhY3RlcihzdHJp
bmdbaV0pKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic3RyaW5nIG5vdCBBU0NJSSIpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiB0cnVl
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jRm9ybWF0
QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgR0MzRGludCBsZXZlbCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkxVTUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkE6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX1NURU5DSUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9O
RU5UOgorICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJkZXB0aCB0ZXh0dXJlIGZvcm1hdHMgbm90IGVuYWJsZWQiKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgaWYg
KG1fb2VzVGV4dHVyZUZsb2F0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgaWYgKG1fb2VzVGV4
dHVyZUhhbGZGbG9hdCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0lOVF8yNF84OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUOgorICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0
dXJlIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFZlcmlm
eSB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiBmb3JtYXQgYW5kIHR5cGUgaXMgc3VwcG9ydGVkLgor
ICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpIQUxGX0ZMT0FUX09FUykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHR5cGUgZm9yIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICAg
ICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAg
ICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81Cisg
ICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAorICAgICAgICAg
ICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0IgZm9ybWF0Iik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQKKyAgICAgICAgICAgICYmIHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzEKKyAgICAgICAgICAgICYm
IHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUCisgICAgICAgICAgICAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUykgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIFJHQkEgZm9ybWF0Iik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQ09NUE9ORU5UOgorICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1
cmUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LiBERVBUSF9DT01QT05F
TlQgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQKKyAg
ICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIERFUFRIX0NPTVBPTkVO
VCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAobGV2ZWwgPiAwKSB7CisgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJl
IDAgZm9yIERFUFRIX0NPTVBPTkVOVCBmb3JtYXQiKTsKKyAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTDoKKyAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdC4gREVQVEhfU1RFTkNJTCBub3QgZW5hYmxl
ZCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh0
eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfOCkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIERFUFRIX1NURU5DSUwgZm9ybWF0Iik7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxldmVs
ID4gMCkgeworICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgbXVzdCBiZSAwIGZvciBERVBU
SF9TVEVOQ0lMIGZvcm1hdCIpOworICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKQoreworICAgIGlmIChsZXZlbCA8IDApIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImxldmVsIDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRDoKKyAgICAgICAgaWYgKGxldmVsID49IG1fbWF4VGV4dHVyZUxldmVsKSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGlmIChs
ZXZlbCA+PSBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IGNo
ZWNrcyBpZiBsZXZlbCBpcyBsZWdhbCwgc28gd2UgcmV0dXJuIHRydWUgYW5kIGRvbid0CisgICAg
Ly8gZ2VuZXJhdGUgSU5WQUxJRF9FTlVNIGlmIHRhcmdldCBpcyBpbGxlZ2FsLgorICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5j
UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0
aW9uVHlwZSBmdW5jdGlvblR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGlu
dCBib3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpCit7CisgICAgLy8gV2UgYWJz
b2x1dGVseSBoYXZlIHRvIHZhbGlkYXRlIHRoZSBmb3JtYXQgYW5kIHR5cGUgY29tYmluYXRpb24u
CisgICAgLy8gVGhlIHRleEltYWdlMkQgZW50cnkgcG9pbnRzIHRha2luZyBIVE1MSW1hZ2UsIGV0
Yy4gd2lsbCBwcm9kdWNlCisgICAgLy8gdGVtcG9yYXJ5IGRhdGEgYmFzZWQgb24gdGhpcyBjb21i
aW5hdGlvbiwgc28gaXQgbXVzdCBiZSBsZWdhbC4KKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zv
cm1hdEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5cGUsIGxldmVsKSB8fCAhdmFsaWRh
dGVUZXhGdW5jTGV2ZWwoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBHQzNEaW50IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgPSBwb3coMi4wLCBt
X21heFRleHR1cmVMZXZlbCAtIDEgLSBsZXZlbCk7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICBpZiAod2lkdGgg
PiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsIHx8IGhlaWdodCA+IG1heFRleHR1cmVTaXplRm9yTGV2
ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdl
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9Y
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZF
X1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElW
RV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1o6CisgICAgICAgIGlmIChmdW5jdGlvblR5cGUgIT0gVGV4U3ViSW1hZ2UyRCAmJiB3aWR0
aCAhPSBoZWlnaHQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCAhPSBoZWlnaHQgZm9y
IGN1YmUgbWFwIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgLy8gTm8gbmVlZCB0byBjaGVjayBoZWlnaHQgaGVyZS4gRm9yIHRleEltYWdlIHdpZHRoID09
IGhlaWdodC4KKyAgICAgICAgLy8gRm9yIHRleFN1YkltYWdlIHRoYXQgd2lsbCBiZSBjaGVja2Vk
IHdoZW4gY2hlY2tpbmcgeW9mZnNldCArIGhlaWdodCBpcyBpbiByYW5nZS4KKyAgICAgICAgaWYg
KHdpZHRoID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
IndpZHRoIG9yIGhlaWdodCBvdXQgb2YgcmFuZ2UgZm9yIGN1YmUgbWFwIik7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmIChmb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJmb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGlmIChib3JkZXIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJv
cmRlciAhPSAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0Rh
dGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IGxldmVsLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsRGlzcG9z
aXRpb24gZGlzcG9zaXRpb24pCit7CisgICAgaWYgKCFwaXhlbHMpIHsKKyAgICAgICAgaWYgKGRp
c3Bvc2l0aW9uID09IE51bGxBbGxvd2VkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJubyBwaXhlbHMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGZv
cm1hdCwgdHlwZSwgbGV2ZWwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF2YWxp
ZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0KSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURToKKyAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpT
Qzo6VHlwZVVpbnQ4KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5TSUdORURf
QllURSBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5Iik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkg
IT0gSlNDOjpUeXBlVWludDE2KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgVU5T
SUdORURfU0hPUlQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWludDE2QXJyYXkiKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogLy8gT0VTX3RleHR1cmVfZmxvYXQKKyAgICAgICAg
aWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZUZsb2F0MzIpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAidHlwZSBGTE9BVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBGbG9hdDMy
QXJyYXkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzogLy8gT0VT
X3RleHR1cmVfaGFsZl9mbG9hdAorICAgICAgICAvLyBBcyBwZXIgdGhlIHNwZWNpZmljYXRpb24s
IEFycmF5QnVmZmVyVmlldyBzaG91bGQgYmUgbnVsbCB3aGVuCisgICAgICAgIC8vIE9FU190ZXh0
dXJlX2hhbGZfZmxvYXQgaXMgZW5hYmxlZC4KKyAgICAgICAgaWYgKHBpeGVscykgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEhBTEZfRkxPQVRfT0VTIGJ1dCBBcnJheUJ1ZmZlclZp
ZXcgaXMgbm90IE5VTEwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgdG90YWxCeXRlc1JlcXVpcmVkOworICAgIEdD
M0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQs
IHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVp
cmVkLCAwKTsKKyAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHRleHR1cmUgZGltZW5zaW9ucyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkgeworICAgICAg
ICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkgeworICAgICAgICAgIGVycm9yID0gbV9jb250
ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQs
IDEsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsIDApOworICAgICAgICAgIGlmIChwaXhlbHMtPmJ5dGVM
ZW5ndGgoKSA9PSB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0IHdpdGggVU5QQUNL
X0FMSUdOTUVOVCA+IDEiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90IGJp
ZyBlbm91Z2ggZm9yIHJlcXVlc3QiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
Q29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51bSBmb3JtYXQpCit7CisgICAgcmV0dXJuIG1fY29t
cHJlc3NlZFRleHR1cmVGb3JtYXRzLmNvbnRhaW5zKGZvcm1hdCk7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMpCit7CisgICAgaWYgKCFwaXhl
bHMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgaW50IGJ5dGVzUmVxdWlyZWQgPSAwOworCisgICAgc3dpdGNo
IChmb3JtYXQpIHsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19E
WFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
MV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQl9BTUQ6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gODsKKyAgICAgICAg
ICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7CisgICAgICAgICAgICBjb25zdCBpbnQga0Js
b2NrSGVpZ2h0ID0gNDsKKyAgICAgICAgICAgIGludCBudW1CbG9ja3NBY3Jvc3MgPSAod2lkdGgg
KyBrQmxvY2tXaWR0aCAtIDEpIC8ga0Jsb2NrV2lkdGg7CisgICAgICAgICAgICBpbnQgbnVtQmxv
Y2tzRG93biA9IChoZWlnaHQgKyBrQmxvY2tIZWlnaHQgLSAxKSAvIGtCbG9ja0hlaWdodDsKKyAg
ICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1CbG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3du
ICoga0Jsb2NrU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6CisgICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0VYUExJQ0lUX0FMUEhBX0FNRDoKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9JTlRFUlBPTEFURURfQUxQSEFfQU1EOgor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDE2OworICAgICAg
ICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKKyAgICAgICAgICAgIGNvbnN0IGludCBr
QmxvY2tIZWlnaHQgPSA0OworICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Fjcm9zcyA9ICh3aWR0
aCArIGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxvY2tXaWR0aDsKKyAgICAgICAgICAgIGludCBudW1C
bG9ja3NEb3duID0gKGhlaWdodCArIGtCbG9ja0hlaWdodCAtIDEpIC8ga0Jsb2NrSGVpZ2h0Owor
ICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51bUJsb2Nrc0Rv
d24gKiBrQmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OworICAgICAgICAgICAgY29uc3Qg
aW50IGtCbG9ja1dpZHRoID0gODsKKyAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQg
PSA4OworICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IChzdGQ6Om1heCh3aWR0aCwga0Jsb2Nr
V2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tIZWlnaHQpICogNCArIDcpIC8ga0Jsb2Nr
U2l6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgICAgIHsKKyAgICAgICAgICAg
IGNvbnN0IGludCBrQmxvY2tTaXplID0gODsKKyAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tX
aWR0aCA9IDE2OworICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDg7CisgICAg
ICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdpZHRoLCBrQmxvY2tXaWR0aCkgKiBz
dGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiAyICsgNykgLyBrQmxvY2tTaXplOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgZm9ybWF0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
cGl4ZWxzLT5ieXRlTGVuZ3RoKCkgIT0gYnl0ZXNSZXF1aXJlZCkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAibGVuZ3RoIG9mIEFycmF5QnVmZmVyVmlldyBpcyBub3QgY29ycmVjdCBmb3IgZGltZW5zaW9u
cyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1l
bnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUM19FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDVfRVhUOiB7CisgICAgICAgIGNvbnN0IEdDM0RzaXplaSBrQmxvY2tXaWR0
aCA9IDQ7CisgICAgICAgIGNvbnN0IEdDM0RzaXplaSBrQmxvY2tIZWlnaHQgPSA0OworICAgICAg
ICBjb25zdCBHQzNEaW50IG1heFRleHR1cmVTaXplID0gdGFyZ2V0ID8gbV9tYXhUZXh0dXJlU2l6
ZSA6IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOworICAgICAgICBjb25zdCBHQzNEc2l6ZWkgbWF4
Q29tcHJlc3NlZERpbWVuc2lvbiA9IG1heFRleHR1cmVTaXplID4+IGxldmVsOworICAgICAgICBi
b29sIHdpZHRoVmFsaWQgPSAobGV2ZWwgJiYgd2lkdGggPT0gMSkgfHwgKGxldmVsICYmIHdpZHRo
ID09IDIpIHx8ICghKHdpZHRoICUga0Jsb2NrV2lkdGgpICYmIHdpZHRoIDw9IG1heENvbXByZXNz
ZWREaW1lbnNpb24pOworICAgICAgICBib29sIGhlaWdodFZhbGlkID0gKGxldmVsICYmIGhlaWdo
dCA9PSAxKSB8fCAobGV2ZWwgJiYgaGVpZ2h0ID09IDIpIHx8ICghKGhlaWdodCAlIGtCbG9ja0hl
aWdodCkgJiYgaGVpZ2h0IDw9IG1heENvbXByZXNzZWREaW1lbnNpb24pOworICAgICAgICBpZiAo
IXdpZHRoVmFsaWQgfHwgIWhlaWdodFZhbGlkKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
IndpZHRoIG9yIGhlaWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOgorICAgICAg
ICAvLyBIZWlnaHQgYW5kIHdpZHRoIG11c3QgYmUgcG93ZXJzIG9mIDIuCisgICAgICAgIGlmICgo
d2lkdGggJiAod2lkdGggLSAxKSkgfHwgKGhlaWdodCAmIChoZWlnaHQgLSAxKSkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxldmVsIik7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lv
bnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIFdlYkdMVGV4dHVyZSogdGV4
KQoreworICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCkgeworICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgInhvZmZzZXQgb3IgeW9mZnNldCA8IDAiKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQl9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9S
R0JBX1MzVENfRFhUM19FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdC
QV9TM1RDX0RYVDVfRVhUOiB7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7Cisg
ICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OworICAgICAgICBpZiAoKHhvZmZzZXQg
JSBrQmxvY2tXaWR0aCkgfHwgKHlvZmZzZXQgJSBrQmxvY2tIZWlnaHQpKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgb3IgeW9mZnNldCBub3QgbXVsdGlwbGUgb2YgNCIpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh3aWR0aCAt
IHhvZmZzZXQgPiB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpCisgICAgICAgICAgICB8fCBo
ZWlnaHQgLSB5b2Zmc2V0ID4gdGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdmFsaWRhdGVDb21w
cmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCk7CisgICAgfQorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQl9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQl9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6IHsKKyAgICAgICAgaWYgKHhvZmZzZXQgfHwgeW9mZnNl
dCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IGFuZCB5b2Zmc2V0IG11c3Qg
YmUgemVybyIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IGlmICh3aWR0aCAhPSB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpCisgICAgICAgICAgICB8
fCBoZWlnaHQgIT0gdGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBtdXN0IG1hdGNoIGV4aXN0aW5nIGxldmVsIik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbGlk
YXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxldmVsLCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVEcmF3TW9kZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUpCit7Cisg
ICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9JTlRTOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfU1RSSVA6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TElORV9MT09QOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVT
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpUUklBTkdMRVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgZHJhdyBtb2RlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0ZW5jaWxT
ZXR0aW5ncyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCit7CisgICAgaWYgKG1fc3RlbmNpbE1h
c2sgIT0gbV9zdGVuY2lsTWFza0JhY2sgfHwgbV9zdGVuY2lsRnVuY1JlZiAhPSBtX3N0ZW5jaWxG
dW5jUmVmQmFjayB8fCBtX3N0ZW5jaWxGdW5jTWFzayAhPSBtX3N0ZW5jaWxGdW5jTWFza0JhY2sp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmcm9udCBhbmQgYmFjayBzdGVuY2lscyBzZXR0aW5n
cyBkbyBub3QgbWF0Y2giKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3RlbmNp
bEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmdW5jKQoreworICAgIHN3
aXRjaCAoZnVuYykgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FVkVSOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxFU1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TEVRVUFMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUFURVI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6R0VRVUFMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVR
VUFMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PVEVRVUFMOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFMV0FZUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmdW5jdGlvbiIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cHJpbnRHTEVy
cm9yVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoIW1fbnVtR0xF
cnJvcnNUb0NvbnNvbGVBbGxvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAtLW1fbnVtR0xF
cnJvcnNUb0NvbnNvbGVBbGxvd2VkOworICAgIHByaW50V2FybmluZ1RvQ29uc29sZShtZXNzYWdl
KTsKKworICAgIGlmICghbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQpCisgICAgICAgIHBy
aW50V2FybmluZ1RvQ29uc29sZSgiV2ViR0w6IHRvbyBtYW55IGVycm9ycywgbm8gbW9yZSBlcnJv
cnMgd2lsbCBiZSByZXBvcnRlZCB0byB0aGUgY29uc29sZSBmb3IgdGhpcyBjb250ZXh0LiIpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cHJpbnRXYXJuaW5nVG9Db25zb2xlKGNv
bnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoIWNhbnZhcygpKQorICAgICAgICByZXR1
cm47CisgICAgY2FudmFzKCktPmRvY3VtZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNv
dXJjZTo6UmVuZGVyaW5nLCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcsIG1lc3NhZ2UpOworfQorCiti
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0
ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBh
dHRhY2htZW50KQoreworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgc3dpdGNoIChhdHRhY2htZW50KSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDA6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RF
TkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBp
ZiAobV93ZWJnbERyYXdCdWZmZXJzCisgICAgICAgICAgICAmJiBhdHRhY2htZW50ID4gR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwCisgICAgICAgICAgICAmJiBhdHRhY2htZW50
IDwgc3RhdGljX2Nhc3Q8R0MzRGVudW0+KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hN
RU5UMCArIGdldE1heENvbG9yQXR0YWNobWVudHMoKSkpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBhdHRhY2htZW50Iik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
ZW51bSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZVTkNfQUREOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfU1VCVFJB
Q1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19SRVZFUlNFX1NVQlRSQUNUOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIG1vZGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtIHNyYywgR0MzRGVudW0gZHN0KQoreworICAgIGlmICgoKHNy
YyA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgc3JjID09IEdyYXBoaWNz
Q29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCisgICAgICAgICAmJiAoZHN0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBkc3QgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpCisgICAgICAgIHx8ICgoZHN0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9DT0xPUiB8fCBkc3QgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xPUikKKyAgICAgICAgICAgICYmIChzcmMgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0FMUEhBIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQz
RDo6T05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJp
bmNvbXBhdGlibGUgc3JjIGFuZCBkc3QiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlQ2FwYWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGNhcCkKK3sK
KyAgICBzd2l0Y2ggKGNhcCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhF
UjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0U6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfVEVTVDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCBjYXBhYmlsaXR5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJh
bWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUp
Cit7CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQ
YXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCksIHYtPmxl
bmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgR0MzRHNp
emVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
Im5vIGFycmF5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZh
bGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFs
c2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCB2
b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAg
ICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxv
Y2F0aW9uLCBmYWxzZSwgdiwgc2l6ZSwgcmVxdWlyZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWly
ZWRNaW5TaXplKQoreworICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXki
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVVbmlm
b3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYt
PmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkg
cmVxdWlyZWRNaW5TaXplKQoreworICAgIGlmICghbG9jYXRpb24pCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibG9jYXRpb24gaXMgbm90IGZyb20gY3VycmVudCBwcm9n
cmFtIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCF2KSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJubyBhcnJheSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGlmICh0cmFuc3Bvc2UpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInRyYW5zcG9zZSBub3QgRkFM
U0UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoc2l6ZSA8IHJlcXVp
cmVkTWluU2l6ZSB8fCAoc2l6ZSAlIHJlcXVpcmVkTWluU2l6ZSkpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgc2l6ZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitXZWJHTEJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0g
MDsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVM
RU1FTlRfQVJSQVlfQlVGRkVSOgorICAgICAgICBidWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlP
YmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpLmdldCgpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVI6CisgICAgICAgIGJ1ZmZlciA9
IG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8g
YnVmZmVyIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBzd2l0Y2ggKHVz
YWdlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RSRUFNX0RSQVc6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RFlOQU1JQ19EUkFXOgorICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0KKyAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHVzYWdlIik7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmNhY2hlZEltYWdlKCkpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgIm5vIGltYWdlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgY29uc3QgVVJMJiB1cmwgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+cmVzcG9uc2UoKS51cmwo
KTsKKyAgICBpZiAodXJsLmlzTnVsbCgpIHx8IHVybC5pc0VtcHR5KCkgfHwgIXVybC5pc1ZhbGlk
KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgaW1hZ2UiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbihpbWFnZSkpIHsKKyAgICAg
ICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhU
TUxDYW52YXNFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTENhbnZhc0VsZW1l
bnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFjYW52YXMgfHwgIWNh
bnZhcy0+YnVmZmVyKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGNhbnZhcyIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGNhbnZhcykp
IHsKKyAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIGlmICghdmlkZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRoKCkgfHwgIXZpZGVvLT52aWRl
b0hlaWdodCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyB2aWRlbyIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKHZpZGVvKSkgeworICAg
ICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliZkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRl
eCwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdD
M0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRy
aWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJp
YjAgdmFsdWVzLgorICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAg
ICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAg
bV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmYo
aW5kZXgsIHYwLCB2MSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAg
ICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZihpbmRleCwgdjAsIHYxLCB2Mik7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgbV9jb250ZXh0
LT52ZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisgICAgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJpYlZhbHVl
ID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07CisgICAgYXR0cmliVmFsdWUudmFsdWVbMF0g
PSB2MDsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVsxXSA9IHYxOworICAgIGF0dHJpYlZhbHVlLnZh
bHVlWzJdID0gdjI7CisgICAgYXR0cmliVmFsdWUudmFsdWVbM10gPSB2MzsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSBleHBl
Y3RlZFNpemUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoZnVuY3Rpb25OYW1l
LCBpbmRleCwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgZXhwZWN0ZWRTaXplKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXpl
LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
Im5vIGFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHNpemUgPCBleHBl
Y3RlZFNpemUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgc2l6ZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVydGV4QXR0cmliMCB2YWx1ZXMu
CisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBzd2l0Y2gg
KGV4cGVjdGVkU2l6ZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBtX2NvbnRleHQt
PnZlcnRleEF0dHJpYjFmdihpbmRleCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAyOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHYp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCB2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIDQ6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjRmdihpbmRl
eCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBWZXJ0ZXhB
dHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XTsKKyAg
ICBhdHRyaWJWYWx1ZS5pbml0VmFsdWUoKTsKKyAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwgZXhw
ZWN0ZWRTaXplOyArK2lpKQorICAgICAgICBhdHRyaWJWYWx1ZS52YWx1ZVtpaV0gPSB2W2lpXTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRWZXJ0ZXhBdHRyaWIwKCkKK3sK
KyAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUg
PSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOworICAg
IAorICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlciA9IGNyZWF0ZUJ1ZmZlcigpOworICAgIG1fY29u
dGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3Jh
cGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFN
SUNfRFJBVyk7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOworICAgIHN0YXRlLmJ1ZmZlckJpbmRp
bmcgPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApOworICAgIG1fY29udGV4dC0+ZW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoMCk7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IDA7
CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0gPSAwLjBmOworICAgIG1fdmVydGV4
QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJW
YWx1ZVsyXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10gPSAxLjBm
OworICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gZmFsc2U7CisgICAgbV92ZXJ0ZXhB
dHRyaWIwVXNlZEJlZm9yZSA9IGZhbHNlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdDM0RzaXplaSBudW1WZXJ0ZXgpCit7CisgICAgY29u
c3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0g
bV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKyAgICBj
b25zdCBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBtX3ZlcnRleEF0dHJpYlZhbHVl
WzBdOworICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGJvb2wgdXNpbmdWZXJ0ZXhBdHRyaWIwID0gbV9jdXJyZW50UHJvZ3JhbS0+aXNVc2luZ1Zl
cnRleEF0dHJpYjAoKTsKKyAgICBpZiAodXNpbmdWZXJ0ZXhBdHRyaWIwKQorICAgICAgICBtX3Zl
cnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKKyAgICBpZiAoc3RhdGUuZW5hYmxlZCAmJiB1
c2luZ1ZlcnRleEF0dHJpYjApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIXVzaW5n
VmVydGV4QXR0cmliMCAmJiAhbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSB0cnVlOworICAgIG1f
Y29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3Zl
cnRleEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKKyAgICBHQzNEc2l6ZWlwdHIgYnVmZmVyRGF0
YVNpemUgPSAobnVtVmVydGV4ICsgMSkgKiA0ICogc2l6ZW9mKEdDM0RmbG9hdCk7CisgICAgaWYg
KGJ1ZmZlckRhdGFTaXplID4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSkgeworICAgICAgICBt
X2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgYnVm
ZmVyRGF0YVNpemUsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOworICAgICAg
ICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplID0gYnVmZmVyRGF0YVNpemU7CisgICAgICAgIG1f
Zm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKHVzaW5nVmVy
dGV4QXR0cmliMAorICAgICAgICAmJiAobV9mb3JjZUF0dHJpYjBCdWZmZXJSZWZpbGwKKyAgICAg
ICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzBdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZh
bHVlWzBdCisgICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVsxXSAhPSBtX3ZlcnRleEF0
dHJpYjBCdWZmZXJWYWx1ZVsxXQorICAgICAgICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVbMl0g
IT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KKyAgICAgICAgICAgIHx8IGF0dHJpYlZh
bHVlLnZhbHVlWzNdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdKSkgeworICAgICAg
ICBhdXRvIGJ1ZmZlckRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPEdDM0RmbG9hdFtdPigobnVtVmVy
dGV4ICsgMSkgKiA0KTsKKyAgICAgICAgZm9yIChHQzNEc2l6ZWkgaWkgPSAwOyBpaSA8IG51bVZl
cnRleCArIDE7ICsraWkpIHsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0XSA9IGF0dHJp
YlZhbHVlLnZhbHVlWzBdOworICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAxXSA9IGF0
dHJpYlZhbHVlLnZhbHVlWzFdOworICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAyXSA9
IGF0dHJpYlZhbHVlLnZhbHVlWzJdOworICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAz
XSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOworICAgICAgICB9CisgICAgICAgIG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzBdID0gYXR0cmliVmFsdWUudmFsdWVbMF07CisgICAgICAgIG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gYXR0cmliVmFsdWUudmFsdWVbMV07CisgICAgICAg
IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdID0gYXR0cmliVmFsdWUudmFsdWVbMl07Cisg
ICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0gYXR0cmliVmFsdWUudmFsdWVb
M107CisgICAgICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gZmFsc2U7CisgICAgICAg
IG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVS
LCAwLCBidWZmZXJEYXRhU2l6ZSwgYnVmZmVyRGF0YS5nZXQoKSk7CisgICAgfQorICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQs
IDAsIDAsIDApOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKQoreworICAg
IGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0
ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7Cisg
ICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKSB7Cisg
ICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVG
RkVSLCBvYmplY3RPclplcm8oc3RhdGUuYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgICAgICBt
X2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgc3RhdGUuc2l6ZSwgc3RhdGUudHlwZSwg
c3RhdGUubm9ybWFsaXplZCwgc3RhdGUub3JpZ2luYWxTdHJpZGUsIHN0YXRlLm9mZnNldCk7Cisg
ICAgfQorICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlf
QlVGRkVSLCBvYmplY3RPclplcm8obV9ib3VuZEFycmF5QnVmZmVyLmdldCgpKSk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKQorewor
ICAgIFJlZlB0cjxXZWJHTENvbnRleHRFdmVudD4gZXZlbnQgPSBXZWJHTENvbnRleHRFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZhbHNlLCB0cnVlLCAi
Iik7CisgICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoZXZlbnQpOworICAgIG1fcmVzdG9yZUFs
bG93ZWQgPSBldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOworICAgIGlmIChtX2NvbnRleHRMb3N0
TW9kZSA9PSBSZWFsTG9zdENvbnRleHQgJiYgbV9yZXN0b3JlQWxsb3dlZCkKKyAgICAgICAgbV9y
ZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCgpCit7CisgICAgQVNTRVJUKG1fY29udGV4dExvc3Qp
OworICAgIGlmICghbV9jb250ZXh0TG9zdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhl
IHJlbmRlcmluZyBjb250ZXh0IGlzIG5vdCByZXN0b3JlZCB1bmxlc3MgdGhlIGRlZmF1bHQgYmVo
YXZpb3Igb2YgdGhlCisgICAgLy8gd2ViZ2xjb250ZXh0bG9zdCBldmVudCB3YXMgcHJldmVudGVk
IGVhcmxpZXIuCisgICAgLy8KKyAgICAvLyBCZWNhdXNlIG9mIHRoZSB3YXkgbV9yZXN0b3JlVGlt
ZXIgaXMgc2V0IHVwIGZvciByZWFsIHZzLiBzeW50aGV0aWMgbG9zdAorICAgIC8vIGNvbnRleHQg
ZXZlbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdGVzdCBzaG9ydC1jaXJj
dWl0aW5nCisgICAgLy8gdGhlIHJldHJ5IGxvb3AgZm9yIHJlYWwgY29udGV4dCBsb3N0IGV2ZW50
cy4KKyAgICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlu
dCBjb250ZXh0TG9zdFJlYXNvbiA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKCk7CisKKyAgICBzd2l0Y2ggKGNvbnRleHRMb3N0UmVhc29uKSB7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I6CisgICAgICAgIC8vIFRoZSBH
cmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbiBtaWdodCBub3QgZnVsbHkKKyAgICAgICAg
Ly8gc3VwcG9ydCBHTF9BUkJfcm9idXN0bmVzcyBzZW1hbnRpY3MgeWV0LiBBbHRlcm5hdGl2ZWx5
LCB0aGUKKyAgICAgICAgLy8gV0VCR0xfbG9zZV9jb250ZXh0IGV4dGVuc2lvbiBtaWdodCBoYXZl
IGJlZW4gdXNlZCB0byBmb3JjZQorICAgICAgICAvLyBhIGxvc3QgY29udGV4dC4KKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkdVSUxUWV9DT05URVhUX1JFU0VUX0FSQjoK
KyAgICAgICAgLy8gVGhlIHJlbmRlcmluZyBjb250ZXh0IGlzIG5vdCByZXN0b3JlZCBpZiB0aGlz
IGNvbnRleHQgd2FzCisgICAgICAgIC8vIGd1aWx0eSBvZiBjYXVzaW5nIHRoZSBncmFwaGljcyBy
ZXNldC4KKyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBjb250
ZW50IG9uIHRoZSBwYWdlIGNhdXNlZCB0aGUgZ3JhcGhpY3MgY2FyZCB0byByZXNldDsgbm90IHJl
c3RvcmluZyB0aGUgY29udGV4dCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeHRlbnNp
b25zM0Q6OklOTk9DRU5UX0NPTlRFWFRfUkVTRVRfQVJCOgorICAgICAgICAvLyBBbHdheXMgYWxs
b3cgdGhlIGNvbnRleHQgdG8gYmUgcmVzdG9yZWQuCisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpVTktOT1dOX0NPTlRFWFRfUkVTRVRfQVJCOgorICAgICAgICAvLyBXYXJu
LiBJZGVhbGx5LCBwcm9tcHQgdGhlIHVzZXIgdGVsbGluZyB0aGVtIHRoYXQgV2ViR0wKKyAgICAg
ICAgLy8gY29udGVudCBvbiB0aGUgcGFnZSBtaWdodCBoYXZlIGNhdXNlZCB0aGUgZ3JhcGhpY3Mg
Y2FyZCB0bworICAgICAgICAvLyByZXNldCBhbmQgYXNrIHRoZW0gd2hldGhlciB0aGV5IHdhbnQg
dG8gY29udGludWUgcnVubmluZworICAgICAgICAvLyB0aGUgY29udGVudC4gT25seSBpZiB0aGV5
IHNheSAieWVzIiBzaG91bGQgd2Ugc3RhcnQKKyAgICAgICAgLy8gYXR0ZW1wdGluZyB0byByZXN0
b3JlIHRoZSBjb250ZXh0LgorICAgICAgICBwcmludFdhcm5pbmdUb0NvbnNvbGUoIldBUk5JTkc6
IFdlYkdMIGNvbnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNz
IGNhcmQgdG8gcmVzZXQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgRnJhbWUqIGZy
YW1lID0gY2FudmFzKCktPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5hbGxvd1dl
YkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdMRW5hYmxlZCgpKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpCisg
ICAgICAgIHJldHVybjsKKyAgICBTY3JvbGxWaWV3KiByb290ID0gdmlldy0+cm9vdCgpOworICAg
IGlmICghcm9vdCkKKyAgICAgICAgcmV0dXJuOworICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cg
PSByb290LT5ob3N0V2luZG93KCk7CisgICAgaWYgKCFob3N0V2luZG93KQorICAgICAgICByZXR1
cm47CisKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZShtX2F0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKKyAgICBpZiAoIWNvbnRl
eHQpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFJlYWxMb3N0Q29udGV4dCkK
KyAgICAgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdChzZWNvbmRzQmV0d2VlblJl
c3RvcmVBdHRlbXB0cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8vIFRoaXMgbGlrZWx5
IHNob3VsZG4ndCBoYXBwZW4gYnV0IGlzIHRoZSBiZXN0IHdheSB0byByZXBvcnQgaXQgdG8gdGhl
IFdlYkdMIGFwcC4KKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgIiIsICJlcnJvciByZXN0b3JpbmcgY29udGV4dCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gQ29uc3RydWN0IGEgbmV3IGRyYXdpbmcg
YnVmZmVyIHdpdGggdGhlIG5ldyBHcmFwaGljc0NvbnRleHQzRC4KKyAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKSB7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+ZGlzY2FyZFJlc291cmNlcygpOwor
ICAgICAgICBEcmF3aW5nQnVmZmVyOjpQcmVzZXJ2ZURyYXdpbmdCdWZmZXIgcHJlc2VydmUgPSBt
X2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID8gRHJhd2luZ0J1ZmZlcjo6UHJlc2Vy
dmUgOiBEcmF3aW5nQnVmZmVyOjpEaXNjYXJkOworICAgICAgICBEcmF3aW5nQnVmZmVyOjpBbHBo
YVJlcXVpcmVtZW50IGFscGhhID0gbV9hdHRyaWJ1dGVzLmFscGhhID8gRHJhd2luZ0J1ZmZlcjo6
QWxwaGEgOiBEcmF3aW5nQnVmZmVyOjpPcGFxdWU7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9
IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShjb250ZXh0LmdldCgpLCBtX2RyYXdpbmdCdWZmZXItPnNp
emUoKSwgcHJlc2VydmUsIGFscGhhKTsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7
CisgICAgfQorCisgICAgbV9jb250ZXh0ID0gY29udGV4dDsKKyAgICBtX2NvbnRleHRMb3N0ID0g
ZmFsc2U7CisgICAgc2V0dXBGbGFncygpOworICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Cisg
ICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkud2ViZ2xjb250ZXh0cmVzdG9yZWRFdmVudCwgZmFsc2UsIHRydWUsICIiKSk7Cit9
CisKK1N0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuc3VyZU5vdE51bGwoY29uc3QgU3Ry
aW5nJiB0ZXh0KSBjb25zdAoreworICAgIGlmICh0ZXh0LmlzTnVsbCgpKQorICAgICAgICByZXR1
cm4gV1RGOjplbXB0eVN0cmluZygpOworICAgIHJldHVybiB0ZXh0OworfQorCitXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OkxSVUltYWdlQnVmZmVyQ2FjaGUoaW50
IGNhcGFjaXR5KQorICAgIDogbV9idWZmZXJzKHN0ZDo6bWFrZV91bmlxdWU8c3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPltdPihjYXBhY2l0eSkpCisgICAgLCBtX2NhcGFjaXR5KGNhcGFjaXR5
KQoreworfQorCitJbWFnZUJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1
ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIGludCBp
OworICAgIGZvciAoaSA9IDA7IGkgPCBtX2NhcGFjaXR5OyArK2kpIHsKKyAgICAgICAgSW1hZ2VC
dWZmZXIqIGJ1ZiA9IG1fYnVmZmVyc1tpXS5nZXQoKTsKKyAgICAgICAgaWYgKCFidWYpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKGJ1Zi0+bG9naWNhbFNpemUoKSAhPSBzaXplKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJ1YmJsZVRvRnJvbnQoaSk7CisgICAgICAg
IHJldHVybiBidWY7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0
ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCAxKTsKKyAgICBpZiAoIXRlbXApCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGkgPSBzdGQ6Om1pbihtX2NhcGFjaXR5IC0gMSwgaSk7
CisgICAgbV9idWZmZXJzW2ldID0gV1RGOjptb3ZlKHRlbXApOworCisgICAgSW1hZ2VCdWZmZXIq
IGJ1ZiA9IG1fYnVmZmVyc1tpXS5nZXQoKTsKKyAgICBidWJibGVUb0Zyb250KGkpOworICAgIHJl
dHVybiBidWY7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZl
ckNhY2hlOjpidWJibGVUb0Zyb250KGludCBpZHgpCit7CisgICAgZm9yIChpbnQgaSA9IGlkeDsg
aSA+IDA7IC0taSkKKyAgICAgICAgbV9idWZmZXJzW2ldLnN3YXAobV9idWZmZXJzW2ktMV0pOwor
fQorCituYW1lc3BhY2UgeworCisgICAgU3RyaW5nIEdldEVycm9yU3RyaW5nKEdDM0RlbnVtIGVy
cm9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChlcnJvcikgeworICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU06CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURf
RU5VTSI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU6Cisg
ICAgICAgICAgICByZXR1cm4gIklOVkFMSURfVkFMVUUiOworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTjoKKyAgICAgICAgICAgIHJldHVybiAiSU5WQUxJ
RF9PUEVSQVRJT04iOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVN
T1JZOgorICAgICAgICAgICAgcmV0dXJuICJPVVRfT0ZfTUVNT1JZIjsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046CisgICAgICAg
ICAgICByZXR1cm4gIklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OIjsKKyAgICAgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMOgorICAgICAgICAgICAgcmV0
dXJuICJDT05URVhUX0xPU1RfV0VCR0wiOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJXZWJHTCBFUlJPUiglMDR4KSIsIGVycm9yKTsKKyAgICAg
ICAgfQorICAgIH0KKworfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJvciwgY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQ
cmVmZXJlbmNlIGRpc3BsYXkpCit7CisgICAgaWYgKG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNv
bGUgJiYgZGlzcGxheSA9PSBEaXNwbGF5SW5Db25zb2xlKSB7CisgICAgICBTdHJpbmcgc3RyID0g
U3RyaW5nKCJXZWJHTDogIikgKyBHZXRFcnJvclN0cmluZyhlcnJvcikgKyAgIjogIiArIFN0cmlu
ZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0cmluZyhkZXNjcmlwdGlvbik7CisgICAgICBwcmlu
dEdMRXJyb3JUb0NvbnNvbGUoc3RyKTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5zeW50aGVzaXpl
R0xFcnJvcihlcnJvcik7Cit9CisKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnByaW50
R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciog
ZGVzY3JpcHRpb24pCit7CisgICAgaWYgKG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUpIHsK
KyAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIpICsgU3RyaW5nKGZ1bmN0aW9u
TmFtZSkgKyAiOiAiICsgU3RyaW5nKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgcHJpbnRHTEVycm9y
VG9Db25zb2xlKHN0cik7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YXBwbHlTdGVuY2lsVGVzdCgpCit7CisgICAgYm9vbCBoYXZlU3RlbmNpbEJ1ZmZlciA9IGZhbHNl
OworCisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBoYXZlU3RlbmNpbEJ1
ZmZlciA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5oYXNTdGVuY2lsQnVmZmVyKCk7CisgICAgZWxz
ZSB7CisgICAgICAgIFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1dGVzID0g
Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBhdHRy
aWJ1dGVzLT5zdGVuY2lsKCk7CisgICAgfQorICAgIGVuYWJsZU9yRGlzYWJsZShHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9URVNULAorICAgICAgICAgICAgICAgICAgICBtX3N0ZW5jaWxFbmFi
bGVkICYmIGhhdmVTdGVuY2lsQnVmZmVyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmVuYWJsZU9yRGlzYWJsZShHQzNEZW51bSBjYXBhYmlsaXR5LCBib29sIGVuYWJsZSkKK3sK
KyAgICBpZiAoZW5hYmxlKQorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShjYXBhYmlsaXR5KTsK
KyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXBhYmlsaXR5KTsKK30KKwor
SW50U2l6ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsYW1wZWRDYW52YXNTaXplKCkKK3sKKyAg
ICByZXR1cm4gSW50U2l6ZShjbGFtcChjYW52YXMoKS0+d2lkdGgoKSwgMSwgbV9tYXhWaWV3cG9y
dERpbXNbMF0pLAorICAgICAgICAgICAgICAgICAgIGNsYW1wKGNhbnZhcygpLT5oZWlnaHQoKSwg
MSwgbV9tYXhWaWV3cG9ydERpbXNbMV0pKTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldE1heERyYXdCdWZmZXJzKCkKK3sKKyAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZl
cnMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heERyYXdCdWZmZXJzKQorICAg
ICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVS
U19FWFQsICZtX21heERyYXdCdWZmZXJzKTsKKyAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2htZW50
cykKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xP
Ul9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAgIC8vIFdFQkdM
X2RyYXdfYnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVOVFMgPj0gTUFYX0RSQVdf
QlVGRkVSUy4KKyAgICByZXR1cm4gc3RkOjptaW4obV9tYXhEcmF3QnVmZmVycywgbV9tYXhDb2xv
ckF0dGFjaG1lbnRzKTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldE1h
eENvbG9yQXR0YWNobWVudHMoKQoreworICAgIGlmICghc3VwcG9ydHNEcmF3QnVmZmVycygpKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2htZW50cykKKyAgICAg
ICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hN
RU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAgIHJldHVybiBtX21heENvbG9y
QXR0YWNobWVudHM7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzZXRCYWNrRHJh
d0J1ZmZlcihHQzNEZW51bSBidWYpCit7CisgICAgbV9iYWNrRHJhd0J1ZmZlciA9IGJ1ZjsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIo
KQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCksIGVjKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVDdXJyZW50VGV4dHVyZTJE
KCkKK3sKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAgIGJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50
ZXh0dXJlMkRCaW5kaW5nLmdldCgpLCBlYyk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpzdXBwb3J0c0RyYXdCdWZmZXJzKCkKK3sKKyAgICBpZiAoIW1fZHJhd0J1ZmZlcnNXZWJH
TFJlcXVpcmVtZW50c0NoZWNrZWQpIHsKKyAgICAgICAgbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWly
ZW1lbnRzQ2hlY2tlZCA9IHRydWU7CisgICAgICAgIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQgPSBX
ZWJHTERyYXdCdWZmZXJzOjpzdXBwb3J0ZWQodGhpcyk7CisgICAgfQorICAgIHJldHVybiBtX2Ry
YXdCdWZmZXJzU3VwcG9ydGVkOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJh
d0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkg
Y291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCit7CisgICAgaWYgKCF2YWxpZGF0ZURyYXdBcnJh
eXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCkp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwcmltY291bnQgPCAwKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0Fy
cmF5c0luc3RhbmNlZCIsICJwcmltY291bnQgPCAwIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoIXByaW1jb3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisKKyAg
ICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzR0xFUzJD
b21wbGlhbnQoKSkKKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVy
dGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmlj
dCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXNJbnN0YW5j
ZWQiLCB0cnVlKTsKKyAgICBVTlVTRURfUEFSQU0ocHJpbWNvdW50KTsKKyAgICBtX2NvbnRleHQt
PmRyYXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpOworICAg
IGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCisgICAg
ICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAgaWYg
KCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3Mo
ImRyYXdBcnJheXNJbnN0YW5jZWQiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHNJbnN0YW5jZWQo
R0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcg
b2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQoreworICAgIHVuc2lnbmVkIG51bUVsZW1lbnRz
ID0gMDsKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHNJbnN0YW5j
ZWQiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cykpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmIChwcmltY291bnQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0VsZW1lbnRzSW5zdGFu
Y2VkIiwgInByaW1jb3VudCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
ICghcHJpbWNvdW50KSB7CisgICAgICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAgIGJvb2wgdmVy
dGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgp
KSB7CisgICAgICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgICAgICB2YWxpZGF0ZUluZGV4
QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQp
LCBudW1FbGVtZW50cyk7CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0
ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOworICAgIH0KKyAgICBpZiAoIWlzR0xFUzJOUE9U
U3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRz
SW5zdGFuY2VkIiwgdHJ1ZSk7CisgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHNJbnN0YW5jZWQo
bW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIHByaW1j
b3VudCk7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVs
YXRlZCkKKyAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24o
KTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNv
bXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgZmFsc2UpOworICAgIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0
cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikKK3sKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoaW5k
ZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliRGl2aXNvciIsICJp
bmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fYm91
bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNv
cik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZpc29yKTsK
K30KKworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5k
ZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2
LDYyMzcgKzI2LDIyIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoV0VCR0wp
Ci0KLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKLQotI2luY2x1ZGUgIkFOR0xF
SW5zdGFuY2VkQXJyYXlzLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJE
T01XaW5kb3cuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkVYVFNoYWRlclRl
eHR1cmVMT0QuaCIKLSNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKLSNp
bmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5j
bHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgotI2luY2x1ZGUgIkZyYW1l
TG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJI
VE1MSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxlbWVudC5oIgotI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSW50
U2l6ZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNYWluRnJhbWUuaCIKLSNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9FU0VsZW1lbnRJbmRleFVpbnQu
aCIKLSNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0jaW5jbHVkZSAiT0VTVGV4
dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgiCi0jaW5jbHVk
ZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXIuaCIKLSNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5oIgotI2luY2x1ZGUgIlBh
Z2UuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJTZXR0aW5ncy5oIgotI2lu
Y2x1ZGUgIldlYkdMQWN0aXZlSW5mby5oIgotI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCi0jaW5j
bHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RD
LmgiCi0jaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIldlYkdM
Q29udGV4dEV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKLSNpbmNsdWRl
ICJXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCi0jaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMu
aCIKLSNpbmNsdWRlICJXZWJHTERlcHRoVGV4dHVyZS5oIgotI2luY2x1ZGUgIldlYkdMRHJhd0J1
ZmZlcnMuaCIKLSNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xM
b3NlQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIldlYkdM
UmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIKLSNpbmNsdWRlICJXZWJH
TFNoYWRlclByZWNpc2lvbkZvcm1hdC5oIgotI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5oIgotI2lu
Y2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCi0KLSNpbmNsdWRlIDxydW50aW1lL0pTQ0lu
bGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxpbmVzLmg+Ci0jaW5jbHVk
ZSA8cnVudGltZS9VaW50MzJBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgorI2luY2x1ZGUgIldlYkdMMVJlbmRlcmluZ0NvbnRleHQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1jb25zdCBkb3VibGUgc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1w
dHMgPSAxLjA7Ci1jb25zdCBpbnQgbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlID0gMjU2Owot
Ci1uYW1lc3BhY2UgewotCi0gICAgY2xhc3MgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciB7Ci0g
ICAgcHVibGljOgotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyKERyYXdpbmdCdWZm
ZXIqIGRyYXdpbmdCdWZmZXIsIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyQmluZGluZykK
LSAgICAgICAgICAgIDogbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCi0gICAgICAgICAg
ICAsIG1fZnJhbWVidWZmZXJCaW5kaW5nKGZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3Ig
bXVsdGlzYW1wbGluZykKLSAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
bV9kcmF3aW5nQnVmZmVyKQotICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB+U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQK
LSAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVy
KQotICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgICAgICB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7Ci0g
ICAgICAgIFdlYkdMRnJhbWVidWZmZXIqIG1fZnJhbWVidWZmZXJCaW5kaW5nOwotICAgIH07Ci0K
LSAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9yWmVybyhXZWJHTE9iamVjdCogb2JqZWN0KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+b2JqZWN0KCkgOiAwOwotICAg
IH0KLQotICAgIHZvaWQgY2xpcDFEKEdDM0RpbnQgc3RhcnQsIEdDM0RzaXplaSByYW5nZSwgR0Mz
RHNpemVpIHNvdXJjZVJhbmdlLCBHQzNEaW50KiBjbGlwcGVkU3RhcnQsIEdDM0RzaXplaSogY2xp
cHBlZFJhbmdlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNsaXBwZWRTdGFydCAmJiBjbGlwcGVk
UmFuZ2UpOwotICAgICAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgICAgICByYW5nZSArPSBz
dGFydDsKLSAgICAgICAgICAgIHN0YXJ0ID0gMDsKLSAgICAgICAgfQotICAgICAgICBHQzNEaW50
IGVuZCA9IHN0YXJ0ICsgcmFuZ2U7Ci0gICAgICAgIGlmIChlbmQgPiBzb3VyY2VSYW5nZSkKLSAg
ICAgICAgICAgIHJhbmdlIC09IGVuZCAtIHNvdXJjZVJhbmdlOwotICAgICAgICAqY2xpcHBlZFN0
YXJ0ID0gc3RhcnQ7Ci0gICAgICAgICpjbGlwcGVkUmFuZ2UgPSByYW5nZTsKLSAgICB9Ci0KLSAg
ICAvLyBSZXR1cm5zIGZhbHNlIGlmIG5vIGNsaXBwaW5nIGlzIG5lY2Vzc2FyeSwgaS5lLiwgeCwg
eSwgd2lkdGgsIGhlaWdodCBzdGF5IHRoZSBzYW1lLgotICAgIGJvb2wgY2xpcDJEKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgR0MzRHNpemVpIHNvdXJjZVdpZHRoLCBHQzNEc2l6ZWkgc291cmNlSGVpZ2h0LAot
ICAgICAgICAgICAgICAgIEdDM0RpbnQqIGNsaXBwZWRYLCBHQzNEaW50KiBjbGlwcGVkWSwgR0Mz
RHNpemVpKiBjbGlwcGVkV2lkdGgsIEdDM0RzaXplaSpjbGlwcGVkSGVpZ2h0KQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGNsaXBwZWRYICYmIGNsaXBwZWRZICYmIGNsaXBwZWRXaWR0aCAmJiBjbGlw
cGVkSGVpZ2h0KTsKLSAgICAgICAgY2xpcDFEKHgsIHdpZHRoLCBzb3VyY2VXaWR0aCwgY2xpcHBl
ZFgsIGNsaXBwZWRXaWR0aCk7Ci0gICAgICAgIGNsaXAxRCh5LCBoZWlnaHQsIHNvdXJjZUhlaWdo
dCwgY2xpcHBlZFksIGNsaXBwZWRIZWlnaHQpOwotICAgICAgICByZXR1cm4gKCpjbGlwcGVkWCAh
PSB4IHx8ICpjbGlwcGVkWSAhPSB5IHx8ICpjbGlwcGVkV2lkdGggIT0gd2lkdGggfHwgKmNsaXBw
ZWRIZWlnaHQgIT0gaGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBHQzNEaW50IGNsYW1wKEdDM0RpbnQg
dmFsdWUsIEdDM0RpbnQgbWluLCBHQzNEaW50IG1heCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZSA8IG1pbikKLSAgICAgICAgICAgIHZhbHVlID0gbWluOwotICAgICAgICBpZiAodmFsdWUgPiBt
YXgpCi0gICAgICAgICAgICB2YWx1ZSA9IG1heDsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
IH0KLQotICAgIC8vIFJldHVybiB0cnVlIGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhlIEFT
Q0lJIHN1YnNldCBhcyBkZWZpbmVkIGluCi0gICAgLy8gR0xTTCBFUyAxLjAgc3BlYyBzZWN0aW9u
IDMuMS4KLSAgICBib29sIHZhbGlkYXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIgYykKLSAgICB7
Ci0gICAgICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQgYCBA
IFwgJyBERUwuCi0gICAgICAgIGlmIChjID49IDMyICYmIGMgPD0gMTI2Ci0gICAgICAgICAgICAm
JiBjICE9ICciJyAmJiBjICE9ICckJyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAmJiBjICE9ICdc
XCcgJiYgYyAhPSAnXCcnKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIC8vIEhv
cml6b250YWwgdGFiLCBsaW5lIGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJyaWFn
ZSByZXR1cm4KLSAgICAgICAgLy8gYXJlIGFsc28gdmFsaWQuCi0gICAgICAgIGlmIChjID49IDkg
JiYgYyA8PSAxMykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgYm9vbCBpc1ByZWZpeFJlc2VydmVkKGNvbnN0IFN0cmluZyYgbmFt
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoImdsXyIpIHx8IG5hbWUuc3Rh
cnRzV2l0aCgid2ViZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRoKCJfd2ViZ2xfIikpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFN0cmlwcyBjb21tZW50cyBmcm9tIHNoYWRlciB0ZXh0LiBUaGlzIGFsbG93cyBub24tQVNDSUkg
Y2hhcmFjdGVycwotICAgIC8vIHRvIGJlIHVzZWQgaW4gY29tbWVudHMgd2l0aG91dCBwb3RlbnRp
YWxseSBicmVha2luZyBPcGVuR0wKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMgbm90IGV4cGVjdGlu
ZyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEdMU0wgRVMgc2V0LgotICAgIGNsYXNzIFN0cmlwQ29t
bWVudHMgewotICAgIHB1YmxpYzoKLSAgICAgICAgU3RyaXBDb21tZW50cyhjb25zdCBTdHJpbmcm
IHN0cikKLSAgICAgICAgICAgIDogbV9wYXJzZVN0YXRlKEJlZ2lubmluZ09mTGluZSkKLSAgICAg
ICAgICAgICwgbV9zb3VyY2VTdHJpbmcoc3RyKQotICAgICAgICAgICAgLCBtX2xlbmd0aChzdHIu
bGVuZ3RoKCkpCi0gICAgICAgICAgICAsIG1fcG9zaXRpb24oMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcGFyc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyByZXN1bHQoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgICAg
IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgaGFzTW9yZUNoYXJhY3RlcnMoKSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHBhcnNlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgd2hpbGUgKGhhc01vcmVDaGFyYWN0ZXJzKCkpIHsKLSAgICAgICAgICAgICAgICBwcm9jZXNz
KGN1cnJlbnQoKSk7Ci0gICAgICAgICAgICAgICAgLy8gcHJvY2VzcygpIG1pZ2h0IGFkdmFuY2Ug
dGhlIHBvc2l0aW9uLgotICAgICAgICAgICAgICAgIGlmIChoYXNNb3JlQ2hhcmFjdGVycygpKQot
ICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIHByb2Nlc3MoVUNoYXIpOwotCi0gICAgICAgIGJvb2wgcGVlayhVQ2hh
ciYgY2hhcmFjdGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9wb3NpdGlv
biArIDEgPj0gbV9sZW5ndGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgY2hhcmFjdGVyID0gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbiArIDFdOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBVQ2hhciBjdXJyZW50KCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04obV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiBtX3NvdXJj
ZVN0cmluZ1ttX3Bvc2l0aW9uXTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYWR2YW5jZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICsrbV9wb3NpdGlvbjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNoYXJhY3RlcikgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBjYW5vbmljYWxpemUgbmV3bGluZSByZWxhdGVk
IGNoYXJhY3RlcnMuCi0gICAgICAgICAgICByZXR1cm4gKGNoYXJhY3RlciA9PSAnXG4nIHx8IGNo
YXJhY3RlciA9PSAnXHInKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZW1pdChVQ2hhciBj
aGFyYWN0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoY2hhcmFj
dGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVudW0gUGFyc2VTdGF0ZSB7Ci0gICAgICAgICAg
ICAvLyBIYXZlIG5vdCBzZWVuIGFuIEFTQ0lJIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciB5ZXQg
b24KLSAgICAgICAgICAgIC8vIHRoaXMgbGluZS4gUG9zc2libGUgdGhhdCB3ZSBtaWdodCBzZWUg
YSBwcmVwcm9jZXNzb3IKLSAgICAgICAgICAgIC8vIGRpcmVjdGl2ZS4KLSAgICAgICAgICAgIEJl
Z2lubmluZ09mTGluZSwKLQotICAgICAgICAgICAgLy8gSGF2ZSBzZWVuIGF0IGxlYXN0IG9uZSBB
U0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIKLSAgICAgICAgICAgIC8vIG9uIHRoaXMgbGlu
ZS4KLSAgICAgICAgICAgIE1pZGRsZU9mTGluZSwKLQotICAgICAgICAgICAgLy8gSGFuZGxpbmcg
YSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBQYXNzZXMgdGhyb3VnaCBhbGwKLSAgICAgICAgICAg
IC8vIGNoYXJhY3RlcnMgdXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gRGlzYWJsZXMgY29tbWVu
dAotICAgICAgICAgICAgLy8gcHJvY2Vzc2luZy4KLSAgICAgICAgICAgIEluUHJlcHJvY2Vzc29y
RGlyZWN0aXZlLAotCi0gICAgICAgICAgICAvLyBIYW5kbGluZyBhIHNpbmdsZS1saW5lIGNvbW1l
bnQuIFRoZSBjb21tZW50IHRleHQgaXMKLSAgICAgICAgICAgIC8vIHJlcGxhY2VkIHdpdGggYSBz
aW5nbGUgc3BhY2UuCi0gICAgICAgICAgICBJblNpbmdsZUxpbmVDb21tZW50LAotCi0gICAgICAg
ICAgICAvLyBIYW5kbGluZyBhIG11bHRpLWxpbmUgY29tbWVudC4gTmV3bGluZXMgYXJlIHBhc3Nl
ZAotICAgICAgICAgICAgLy8gdGhyb3VnaCB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCi0gICAg
ICAgICAgICBJbk11bHRpTGluZUNvbW1lbnQKLSAgICAgICAgfTsKLQotICAgICAgICBQYXJzZVN0
YXRlIG1fcGFyc2VTdGF0ZTsKLSAgICAgICAgU3RyaW5nIG1fc291cmNlU3RyaW5nOwotICAgICAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKLSAgICAgICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKLSAgICAg
ICAgU3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7Ci0gICAgfTsKLQotICAgIHZvaWQgU3RyaXBDb21t
ZW50czo6cHJvY2VzcyhVQ2hhciBjKQotICAgIHsKLSAgICAgICAgaWYgKGlzTmV3bGluZShjKSkg
ewotICAgICAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgc3RhdGUgd2UgYXJlIGluLCBwYXNzIHRo
cm91Z2ggbmV3bGluZXMKLSAgICAgICAgICAgIC8vIHNvIHdlIHByZXNlcnZlIGxpbmUgbnVtYmVy
cy4KLSAgICAgICAgICAgIGVtaXQoYyk7Ci0KLSAgICAgICAgICAgIGlmIChtX3BhcnNlU3RhdGUg
IT0gSW5NdWx0aUxpbmVDb21tZW50KQotICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEJl
Z2lubmluZ09mTGluZTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgVUNoYXIgdGVtcCA9IDA7Ci0gICAgICAgIHN3aXRjaCAobV9wYXJzZVN0YXRlKSB7Ci0gICAg
ICAgIGNhc2UgQmVnaW5uaW5nT2ZMaW5lOgotICAgICAgICAgICAgaWYgKFdURjo6aXNBU0NJSVNw
YWNlKGMpKSB7Ci0gICAgICAgICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGMgPT0gJyMnKSB7Ci0gICAgICAg
ICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU7Ci0gICAgICAg
ICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiB0byBub3JtYWwgc3RhdGUgYW5kIHJlLWhhbmRs
ZSBjaGFyYWN0ZXIuCi0gICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7Ci0g
ICAgICAgICAgICBwcm9jZXNzKGMpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBNaWRkbGVPZkxpbmU6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnLycgJiYgcGVlayh0ZW1wKSkg
ewotICAgICAgICAgICAgICAgIGlmICh0ZW1wID09ICcvJykgewotICAgICAgICAgICAgICAgICAg
ICBtX3BhcnNlU3RhdGUgPSBJblNpbmdsZUxpbmVDb21tZW50OwotICAgICAgICAgICAgICAgICAg
ICBlbWl0KCcgJyk7Ci0gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KHRlbXAgPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluTXVs
dGlMaW5lQ29tbWVudDsKLSAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgY29tbWVudCBz
dGFydCBpbiBjYXNlIHRoZSB1c2VyIGhhcwotICAgICAgICAgICAgICAgICAgICAvLyBhbiB1bmNs
b3NlZCBjb21tZW50IGFuZCB3ZSB3YW50IHRvIGxhdGVyCi0gICAgICAgICAgICAgICAgICAgIC8v
IHNpZ25hbCBhbiBlcnJvci4KLSAgICAgICAgICAgICAgICAgICAgZW1pdCgnLycpOwotICAgICAg
ICAgICAgICAgICAgICBlbWl0KCcqJyk7Ci0gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBlbWl0KGMpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBJblByZXByb2Nlc3NvckRpcmVjdGl2ZToKLSAgICAgICAgICAgIC8vIE5vIG1hdHRl
ciB3aGF0IHRoZSBjaGFyYWN0ZXIgaXMsIGp1c3QgcGFzcyBpdAotICAgICAgICAgICAgLy8gdGhy
b3VnaC4gRG8gbm90IHBhcnNlIGNvbW1lbnRzIGluIHRoaXMgc3RhdGUuIFRoaXMKLSAgICAgICAg
ICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gbG9uZyB0ZXJtLCBidXQg
aXQKLSAgICAgICAgICAgIC8vIHNob3VsZCBoYW5kbGUgdGhlICNlcnJvciBwcmVwcm9jZXNzb3Ig
ZGlyZWN0aXZlLgotICAgICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgSW5TaW5nbGVMaW5lQ29tbWVudDoKLSAgICAgICAgICAgIC8vIFRoZSBuZXds
aW5lIGNvZGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUKLSAgICAgICAg
ICAgIC8vIG9mIHJlc2V0dGluZyBvdXIgc3RhdGUgd2hlbiB3ZSBnZXQgb3V0IG9mIHRoZQotICAg
ICAgICAgICAgLy8gc2luZ2xlLWxpbmUgY29tbWVudC4gU3dhbGxvdyBhbGwgb3RoZXIgY2hhcmFj
dGVycy4KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW5NdWx0aUxpbmVDb21t
ZW50OgotICAgICAgICAgICAgaWYgKGMgPT0gJyonICYmIHBlZWsodGVtcCkgJiYgdGVtcCA9PSAn
LycpIHsKLSAgICAgICAgICAgICAgICBlbWl0KCcqJyk7Ci0gICAgICAgICAgICAgICAgZW1pdCgn
LycpOwotICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKLSAgICAg
ICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuIFVuY2xl
YXIgd2hldGhlciB3ZSBtYXkKLSAgICAgICAgICAgIC8vIHdhbnQgb3IgbmVlZCB0byBqdXN0IGVt
aXQgYSBzcGFjZSBwZXIgY2hhcmFjdGVyIHRvIHRyeQotICAgICAgICAgICAgLy8gdG8gcHJlc2Vy
dmUgY29sdW1uIG51bWJlcnMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCi0KLWNsYXNz
IFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjayA6IHB1YmxpYyBHcmFwaGljc0NvbnRl
eHQzRDo6Q29udGV4dExvc3RDYWxsYmFjayB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNr
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY2IpIDogbV9jb250ZXh0KGNiKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgb25Db250ZXh0TG9zdCgpIG92ZXJyaWRlIHsgbV9jb250ZXh0LT5mb3JjZUxvc3RD
b250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6UmVhbExvc3RDb250ZXh0KTsgfQotICAgIHZp
cnR1YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjaygpIHt9Ci1wcml2YXRlOgot
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OwotfTsKLQotY2xhc3MgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3NDb250
ZXh0M0Q6OkVycm9yTWVzc2FnZUNhbGxiYWNrIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3Nh
Z2VDYWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIG9uRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
R0MzRGludCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPm1fc3ludGhl
c2l6ZWRFcnJvcnNUb0NvbnNvbGUpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnByaW50R0xFcnJv
clRvQ29uc29sZShtZXNzYWdlKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdD
b250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2soKSB7IH0KLXByaXZhdGU6Ci0gICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7Ci19OwotCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShIVE1MQ2FudmFzRWxl
bWVudCogY2FudmFzLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKiBhdHRycykKLXsKLSAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBjYW52YXMtPmRvY3VtZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIC8vIFRoZSBGcmFtZUxvYWRlckNsaWVudCBtaWdodCBibG9jayBjcmVhdGlvbiBv
ZiBhIG5ldyBXZWJHTCBjb250ZXh0IGRlc3BpdGUgdGhlIHBhZ2Ugc2V0dGluZ3M7IGluCi0gICAg
Ly8gcGFydGljdWxhciwgaWYgV2ViR0wgY29udGV4dHMgd2VyZSBsb3N0IG9uZSBvciBtb3JlIHRp
bWVzIHZpYSB0aGUgR0xfQVJCX3JvYnVzdG5lc3MgZXh0ZW5zaW9uLgotICAgIGlmICghZnJhbWUt
PmxvYWRlcigpLmNsaWVudCgpLmFsbG93V2ViR0woZnJhbWUtPnNldHRpbmdzKCkud2ViR0xFbmFi
bGVkKCkpKSB7Ci0gICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsIGZh
bHNlLCB0cnVlLCAiV2ViIHBhZ2Ugd2FzIG5vdCBhbGxvd2VkIHRvIGNyZWF0ZSBhIFdlYkdMIGNv
bnRleHQuIikpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBib29sIGlz
UGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSBmYWxzZTsKLSAgICBEb2N1bWVudCYgdG9wRG9jdW1l
bnQgPSBkb2N1bWVudC50b3BEb2N1bWVudCgpOwotICAgIFBhZ2UqIHBhZ2UgPSB0b3BEb2N1bWVu
dC5wYWdlKCk7Ci0gICAgaWYgKHBhZ2UgJiYgIXRvcERvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxl
KCkpIHsKLSAgICAgICAgV2ViR0xMb2FkUG9saWN5IHBvbGljeSA9IHBhZ2UtPm1haW5GcmFtZSgp
LmxvYWRlcigpLmNsaWVudCgpLndlYkdMUG9saWN5Rm9yVVJMKHRvcERvY3VtZW50LnVybCgpKTsK
LQotICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMQmxvY2tDcmVhdGlvbikgewotICAgICAgICAg
ICAgTE9HKFdlYkdMLCAiVGhlIHBvbGljeSBmb3IgdGhpcyBVUkwgKCVzKSBpcyB0byBibG9jayBX
ZWJHTC4iLCB0b3BEb2N1bWVudC51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwb2xpY3kgPT0g
V2ViR0xQZW5kaW5nQ3JlYXRpb24pIHsKLSAgICAgICAgICAgIExPRyhXZWJHTCwgIldlYkdMIHBv
bGljeSBpcyBwZW5kaW5nLiBNYXkgbmVlZCB0byBiZSByZXNvbHZlZCBsYXRlci4iKTsKLSAgICAg
ICAgICAgIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGF0dHJz
ID8gYXR0cnMtPmF0dHJpYnV0ZXMoKSA6IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCk7
Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+
c2V0dGluZ3MoKS5vcGVuR0xNdWx0aXNhbXBsaW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgYXR0
cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBhdHRyaWJ1dGVzLm5vRXh0
ZW5zaW9ucyA9IHRydWU7Ci0gICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNlOwot
ICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3JldGVHUFUgPSB0cnVlOwotCi0gICAgaWYgKGZyYW1l
LT5zZXR0aW5ncygpLmZvcmNlU29mdHdhcmVXZWJHTFJlbmRlcmluZygpKQotICAgICAgICBhdHRy
aWJ1dGVzLmZvcmNlU29mdHdhcmVSZW5kZXJlciA9IHRydWU7Ci0KLSAgICBpZiAocGFnZSkKLSAg
ICAgICAgYXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvID0gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKTsKLQotICAgIGlmIChpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7Ci0gICAgICAgIExP
RyhXZWJHTCwgIkNyZWF0ZSBhIFdlYkdMIGNvbnRleHQgdGhhdCBsb29rcyByZWFsLCBidXQgd2ls
bCByZXF1aXJlIGEgcG9saWN5IHJlc29sdXRpb24gaWYgdXNlZC4iKTsKLSAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgYXR0cmlidXRlcykpOwotICAgICAgICByZW5kZXJp
bmdDb250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICAgICAgcmV0dXJuIHJlbmRlcmluZ0Nv
bnRleHQ7Ci0gICAgfQotCi0gICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRvY3VtZW50LnZp
ZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCk7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdpbmRv
dykpOwotCi0gICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkgewotICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxzZSwg
dHJ1ZSwgIkNvdWxkIG5vdCBjcmVhdGUgYSBXZWJHTCBjb250ZXh0LiIpKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwotICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygiR0xf
RVhUX2RlYnVnX21hcmtlciIpKQotICAgICAgICBleHRlbnNpb25zLT5wdXNoR3JvdXBNYXJrZXJF
WFQoIldlYkdMUmVuZGVyaW5nQ29udGV4dCIpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdM
UmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcgV2ViR0xSZW5kZXJpbmdDb250
ZXh0KGNhbnZhcywgY29udGV4dCwgYXR0cmlidXRlcykpOwotICAgIHJlbmRlcmluZ0NvbnRleHQt
PnN1c3BlbmRJZk5lZWRlZCgpOwotCi0gICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7Ci19Ci0K
LVdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNF
bGVtZW50KiBwYXNzZWRDYW52YXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJp
YnV0ZXMpCi0gICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKLSAgICAs
IEFjdGl2ZURPTU9iamVjdCgmcGFzc2VkQ2FudmFzLT5kb2N1bWVudCgpKQotICAgICwgbV9jb250
ZXh0KDApCi0gICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKLSAgICAsIG1fZGlzcGF0Y2hDb250ZXh0
TG9zdEV2ZW50VGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc3BhdGNoQ29u
dGV4dExvc3RFdmVudCkKLSAgICAsIG1fcmVzdG9yZUFsbG93ZWQoZmFsc2UpCi0gICAgLCBtX3Jl
c3RvcmVUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29u
dGV4dCkKLSAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSgwKQotICAgICwgbV9jb250ZXh0TG9z
dChmYWxzZSkKLSAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0KQot
ICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgLCBtX3N5bnRoZXNpemVkRXJyb3Jz
VG9Db25zb2xlKHRydWUpCi0gICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZChtYXhH
TEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCi0gICAgLCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRp
b24odHJ1ZSkKLSAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxzZSkKLXsK
LX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENh
bnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCwKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQot
ICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCi0gICAgLCBBY3RpdmVE
T01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fY29udGV4dChjb250
ZXh0KQotICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCi0gICAgLCBtX2Rpc3BhdGNoQ29udGV4dExv
c3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENvbnRl
eHRMb3N0RXZlbnQpCi0gICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQotICAgICwgbV9yZXN0
b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRl
eHQpCi0gICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoNCkKLSAgICAsIG1fY29udGV4dExvc3Qo
ZmFsc2UpCi0gICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4dCkKLSAg
ICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICwgbV9zeW50aGVzaXplZEVycm9yc1Rv
Q29uc29sZSh0cnVlKQotICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQobWF4R0xF
cnJvcnNBbGxvd2VkVG9Db25zb2xlKQotICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
KGZhbHNlKQotICAgICwgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uKGZhbHNlKQotewot
ICAgIEFTU0VSVChtX2NvbnRleHQpOwotICAgIG1fY29udGV4dEdyb3VwID0gV2ViR0xDb250ZXh0
R3JvdXA6OmNyZWF0ZSgpOwotICAgIG1fY29udGV4dEdyb3VwLT5hZGRDb250ZXh0KHRoaXMpOwot
Ci0gICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdwb3J0RGltc1sxXSA9IDA7Ci0g
ICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JU
X0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotCi0gICAgc2V0dXBGbGFncygpOwotICAg
IGluaXRpYWxpemVOZXdDb250ZXh0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCi17Ci0gICAgQVNTRVJUKCFtX2NvbnRleHRMb3N0KTsK
LSAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsKLSAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFs
c2U7Ci0gICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IDA7Ci0gICAgbV9wYWNrQWxpZ25tZW50ID0g
NDsKLSAgICBtX3VucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbV91bnBhY2tGbGlwWSA9IGZhbHNl
OwotICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlOwotICAgIG1fdW5wYWNrQ29s
b3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dF
QkdMOwotICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7Ci0gICAgbV9jdXJyZW50UHJvZ3JhbSA9
IDA7Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwotICAgIG1fcmVuZGVyYnVmZmVyQmlu
ZGluZyA9IDA7Ci0gICAgbV9kZXB0aE1hc2sgPSB0cnVlOwotICAgIG1fc3RlbmNpbEVuYWJsZWQg
PSBmYWxzZTsKLSAgICBtX3N0ZW5jaWxNYXNrID0gMHhGRkZGRkZGRjsKLSAgICBtX3N0ZW5jaWxN
YXNrQmFjayA9IDB4RkZGRkZGRkY7Ci0gICAgbV9zdGVuY2lsRnVuY1JlZiA9IDA7Ci0gICAgbV9z
dGVuY2lsRnVuY1JlZkJhY2sgPSAwOwotICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gMHhGRkZGRkZG
RjsKLSAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSAweEZGRkZGRkZGOwotICAgIG1fbGF5ZXJD
bGVhcmVkID0gZmFsc2U7Ci0gICAgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQgPSBtYXhH
TEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7Ci0gICAgCi0gICAgbV9jbGVhckNvbG9yWzBdID0gbV9j
bGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9yWzJdID0gbV9jbGVhckNvbG9yWzNdID0gMDsKLSAg
ICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgbV9jbGVhckRlcHRoID0gMTsKLSAgICBt
X2NsZWFyU3RlbmNpbCA9IDA7Ci0gICAgbV9jb2xvck1hc2tbMF0gPSBtX2NvbG9yTWFza1sxXSA9
IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1hc2tbM10gPSB0cnVlOwotCi0gICAgR0MzRGludCBu
dW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywg
Jm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgIG1fdGV4dHVyZVVuaXRzLmNsZWFy
KCk7Ci0gICAgbV90ZXh0dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMpOwotCi0gICAgR0MzRGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKLSAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZudW1W
ZXJ0ZXhBdHRyaWJzKTsKLSAgICBtX21heFZlcnRleEF0dHJpYnMgPSBudW1WZXJ0ZXhBdHRyaWJz
OwotICAgIAotICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVT
aXplKTsKLSAgICBtX21heFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxldmVs
Q291bnQobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSk7Ci0gICAgbV9tYXhDdWJl
TWFwVGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtX21heEN1YmVNYXBUZXh0dXJl
U2l6ZSk7Ci0gICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21w
dXRlTGV2ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSwgbV9tYXhDdWJlTWFwVGV4dHVy
ZVNpemUpOwotICAgIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFLCAmbV9t
YXhSZW5kZXJidWZmZXJTaXplKTsKLQotICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJvbSBFWFRf
ZHJhd19idWZmZXJzIGFyZSBsYXppbHkgcXVlcmllZC4KLSAgICBtX21heERyYXdCdWZmZXJzID0g
MDsKLSAgICBtX21heENvbG9yQXR0YWNobWVudHMgPSAwOwotCi0gICAgbV9iYWNrRHJhd0J1ZmZl
ciA9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOwotICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVp
cmVtZW50c0NoZWNrZWQgPSBmYWxzZTsKLSAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gZmFs
c2U7Ci0KLSAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM6OmNyZWF0ZSh0aGlzLCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWYW9UeXBl
RGVmYXVsdCk7Ci0gICAgYWRkQ29udGV4dE9iamVjdChtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVj
dC5nZXQoKSk7Ci0gICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4
QXJyYXlPYmplY3Q7Ci0gICAgCi0gICAgbV92ZXJ0ZXhBdHRyaWJWYWx1ZS5yZXNpemUobV9tYXhW
ZXJ0ZXhBdHRyaWJzKTsKLQotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAg
Y3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxp
YW50KCkpCi0gICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7Ci0KLSAgICBJbnRTaXplIGNhbnZh
c1NpemUgPSBjbGFtcGVkQ2FudmFzU2l6ZSgpOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoY2FudmFzU2l6ZSk7Ci0KLSAgICBtX2NvbnRl
eHQtPnJlc2hhcGUoY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKLSAg
ICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6
ZS5oZWlnaHQoKSk7Ci0gICAgbV9jb250ZXh0LT5zY2lzc29yKDAsIDAsIGNhbnZhc1NpemUud2lk
dGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBtX2NvbnRleHQtPnNldENvbnRleHRM
b3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2Fs
bGJhY2s+KHRoaXMpKTsKLSAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKHN0
ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2s+
KHRoaXMpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldHVwRmxhZ3MoKQot
ewotICAgIEFTU0VSVChtX2NvbnRleHQpOwotCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMo
KS0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNv
bGUgPSBwYWdlLT5zZXR0aW5ncygpLndlYkdMRXJyb3JzVG9Db25zb2xlRW5hYmxlZCgpOwotCi0g
ICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5pc0dMRVMyQ29tcGxpYW50KCk7Ci0g
ICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzID0gbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fc3RyaWN0X2F0dHJpYnMiKTsK
LSAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5h
YmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOwotICAgIGlmIChtX2lzR0xFUzJDb21w
bGlhbnQpIHsKLSAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7Ci0gICAgICAgIG1f
aXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNF
bmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5p
c0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28iKTsKLSAgICAgICAgbV9p
c0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0Vu
YWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotICAgIH0KLSAgICBtX2lzUm9i
dXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJs
ZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjphbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3QKLXsKLSAgICBpZiAoUGFnZSogcGFn
ZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIHBhZ2UtPnNl
dHRpbmdzKCkucHJpdmlsZWdlZFdlYkdMRXh0ZW5zaW9uc0VuYWJsZWQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb21wcmVzc2VkVGV4
dHVyZUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCi17Ci0gICAgaWYgKCFtX2NvbXByZXNzZWRUZXh0
dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpKQotICAgICAgICBtX2NvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0cy5hcHBlbmQoZm9ybWF0KTsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp+V2Vi
R0xSZW5kZXJpbmdDb250ZXh0KCkKLXsKLSAgICAvLyBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8g
V2ViR0xPYmplY3RzIHNvIGlmIHRoZXkgYXJlIHRoZSBsYXN0IHJlZmVyZW5jZQotICAgIC8vIHRo
ZXkgd2lsbCBiZSBmcmVlZCBiZWZvcmUgdGhlIGxhc3QgY29udGV4dCBpcyByZW1vdmVkIGZyb20g
dGhlIGNvbnRleHQgZ3JvdXAuCi0gICAgbV9ib3VuZEFycmF5QnVmZmVyID0gbnVsbHB0cjsKLSAg
ICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7Ci0gICAgbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0ID0gbnVsbHB0cjsKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBudWxs
cHRyOwotICAgIG1fY3VycmVudFByb2dyYW0gPSBudWxscHRyOwotICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nID0gbnVsbHB0cjsKLSAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSBudWxscHRyOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraSkg
ewotICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nID0gbnVsbHB0cjsK
LSAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBtX2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKLSAgICBtX2JsYWNr
VGV4dHVyZUN1YmVNYXAgPSBudWxscHRyOwotCi0gICAgaWYgKCFtX2lzUGVuZGluZ1BvbGljeVJl
c29sdXRpb24pIHsKLSAgICAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwotICAgICAg
ICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKLSAgICAgICAgbV9jb250ZXh0R3JvdXAtPnJl
bW92ZUNvbnRleHQodGhpcyk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xp
Y3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgZHJhd2luZyBidWZm
ZXIgaG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3llZAot
ICAgIC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KLSAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKLQotICAg
IGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0TG9zdENhbGxi
YWNrKG51bGxwdHIpOwotICAgICAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNr
KG51bGxwdHIpOwotICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQoKQotewotICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5t
YXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+bWFya0NvbnRlbnRzQ2hhbmdlZCgpOwotCi0gICAgbV9sYXllckNs
ZWFyZWQgPSBmYWxzZTsKLSAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygpLT5yZW5k
ZXJCb3goKTsKLSAgICBpZiAoaXNBY2NlbGVyYXRlZCgpICYmIHJlbmRlckJveCAmJiByZW5kZXJC
b3gtPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewotICAgICAgICBtX21hcmtlZENhbnZh
c0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKLSAg
ICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkpIHsKLSAgICAgICAgICAgIG1f
bWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOwotICAgICAgICAgICAgY2FudmFzKCktPmRpZERyYXco
RmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGNsYW1wZWRDYW52YXNTaXplKCkpKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFySWZDb21w
b3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9jb250ZXh0LT5sYXll
ckNvbXBvc2l0ZWQoKSB8fCBtX2xheWVyQ2xlYXJlZAotICAgICAgICB8fCBtX2F0dHJpYnV0ZXMu
cHJlc2VydmVEcmF3aW5nQnVmZmVyIHx8IChtYXNrICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXM+IGNvbnRleHRBdHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIC8v
IERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1c2Vy
IGFza2VkIGZvciBhbmQgdGhpcyBjbGVhci4KLSAgICBib29sIGNvbWJpbmVkQ2xlYXIgPSBtYXNr
ICYmICFtX3NjaXNzb3JFbmFibGVkOwotCi0gICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIGlmIChjb21iaW5lZENsZWFyICYmIChtYXNr
ICYgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQotICAgICAgICBtX2NvbnRl
eHQtPmNsZWFyQ29sb3IobV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFyQ29sb3Jb
MV0gOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMl0gPyBt
X2NsZWFyQ29sb3JbMl0gOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xv
ck1hc2tbM10gPyBtX2NsZWFyQ29sb3JbM10gOiAwKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29u
dGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayh0
cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKLSAgICBHQzNEYml0ZmllbGQgY2xlYXJNYXNrID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgaWYgKGNvbnRleHRBdHRyaWJ1
dGVzLT5kZXB0aCgpKSB7Ci0gICAgICAgIGlmICghY29tYmluZWRDbGVhciB8fCAhbV9kZXB0aE1h
c2sgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpKQotICAg
ICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEuMGYpOwotICAgICAgICBjbGVhck1hc2sg
fD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgICAgIG1fY29udGV4
dC0+ZGVwdGhNYXNrKHRydWUpOwotICAgIH0KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPnN0
ZW5jaWwoKSkgewotICAgICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKQotICAgICAgICAgICAgbV9jb250ZXh0LT5j
bGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwgJiBtX3N0ZW5jaWxNYXNrKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7Ci0gICAgICAgIGNsZWFy
TWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOwotICAgICAgICBt
X2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCAw
eEZGRkZGRkZGKTsKLSAgICB9Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5jbGVhckZyYW1lYnVmZmVycyhjbGVhck1hc2spOwotICAgIGVsc2Ugewot
ICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQt
PmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwotICAg
ICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7Ci0gICAgfQotCi0gICAgcmVzdG9yZVN0
YXRlQWZ0ZXJDbGVhcigpOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAg
bV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICBtX2xheWVy
Q2xlYXJlZCA9IHRydWU7Ci0KLSAgICByZXR1cm4gY29tYmluZWRDbGVhcjsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKQotewotICAgIC8v
IFJlc3RvcmUgdGhlIHN0YXRlIHRoYXQgdGhlIGNvbnRleHQgc2V0LgotICAgIGlmIChtX3NjaXNz
b3JFbmFibGVkKQotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9URVNUKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jbGVhckNvbG9yWzBd
LCBtX2NsZWFyQ29sb3JbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xlYXJDb2xv
clsyXSwgbV9jbGVhckNvbG9yWzNdKTsKLSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhtX2NvbG9y
TWFza1swXSwgbV9jb2xvck1hc2tbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xv
ck1hc2tbMl0sIG1fY29sb3JNYXNrWzNdKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgobV9j
bGVhckRlcHRoKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNpbCk7
Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVCwgbV9zdGVuY2lsTWFzayk7Ci0gICAgbV9jb250ZXh0LT5kZXB0aE1hc2sobV9kZXB0aE1h
c2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0xheWVyQ29tcG9zaXRl
ZCgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChjYW52YXMoKS0+ZG9jdW1lbnQoKS5wcmludGluZygpKQotICAgICAgICBjYW52YXMoKS0+Y2xl
YXJQcmVzZW50YXRpb25Db3B5KCk7Ci0KLSAgICAvLyBVbnRpbCB0aGUgY2FudmFzIGlzIHdyaXR0
ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAotICAgIC8vIGhhcHBlbmVk
IGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBjb21wb3Np
dG9yLgotICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpICYmICFtX2F0dHJpYnV0
ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fY29udGV4dC0+cGFpbnRDb21w
b3NpdGVkUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSk7Ci0KLSAgICAgICAgY2Fu
dmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbnZh
cygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwot
Ci0gICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5ICYmICFtX2xheWVyQ2xlYXJlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKLSAgICBtX21h
cmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwotICAgIG1fY29udGV4dC0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoY2FudmFzKCktPmJ1ZmZlcigpLCBtX2RyYXdpbmdCdWZmZXIu
Z2V0KCkpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVy
QmluZGluZy5nZXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmJpbmQoKTsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VE
YXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShtX2RyYXdp
bmdCdWZmZXIuZ2V0KCkpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2Zy
YW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGJlY2F1c2UgYXQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IGxldmVsIHdlIGRvbid0Ci0gICAgLy8ga25vdyBpZiB0aGUgdW5kZXJseWlu
ZyBGQk8gdXNlcyB0ZXh0dXJlcyBvciByZW5kZXJidWZmZXJzLgotICAgIEdDM0RpbnQgbWF4U2l6
ZSA9IHN0ZDo6bWluKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7Ci0g
ICAgLy8gTGltaXQgZHJhd2luZyBidWZmZXIgc2l6ZSB0byA0ayB0byBhdm9pZCBtZW1vcnkgZXho
YXVzdGlvbi4KLSAgICBjb25zdCBpbnQgc2l6ZVVwcGVyTGltaXQgPSA0MDk2OwotICAgIG1heFNp
emUgPSBzdGQ6Om1pbihtYXhTaXplLCBzaXplVXBwZXJMaW1pdCk7Ci0gICAgR0MzRGludCBtYXhX
aWR0aCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzBdKTsKLSAgICBHQzNE
aW50IG1heEhlaWdodCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzFdKTsK
LSAgICB3aWR0aCA9IGNsYW1wKHdpZHRoLCAxLCBtYXhXaWR0aCk7Ci0gICAgaGVpZ2h0ID0gY2xh
bXAoaGVpZ2h0LCAxLCBtYXhIZWlnaHQpOwotCi0gICAgaWYgKG1fbmVlZHNVcGRhdGUpIHsKLSAg
ICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7Ci0gICAg
ICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkpCi0gICAgICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0NoYW5nZWQp
OwotICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gV2UgZG9u
J3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHksIHNpbmNlIHRoZSBuZXdseSBjcmVh
dGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2ZmCi0gICAgLy8gY2xlYXIgKGFuZCB0
aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgotICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpIHsKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdpZHRoLCBoZWln
aHQpKTsKLSAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwotICAgIH0gZWxzZQotICAg
ICAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7Ci0KLSAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8o
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQo
KSkpOwotICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBvYmplY3RPclplcm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKSk7
Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgbV9jb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9m
cmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLX0KLQotaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKLXsKLSAgICBpZiAobV9kcmF3aW5nQnVmZmVy
KQotICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsKLQotICAg
IHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsK
LX0KLQotaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNv
bnN0Ci17Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgcmV0dXJuIG1fZHJhd2lu
Z0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKLX0KLQotdW5zaWduZWQgaW50IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkKLXsKLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1Ynl0ZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRHNob3J0
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihHQzNEdXNob3J0KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRGludCk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1aW50KTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKLSAgICAgICAgcmV0dXJuIHNpemVv
ZihHQzNEZmxvYXQpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUoR0Mz
RGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0dXJl
VW5pdHMuc2l6ZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJhY3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQgb2Yg
cmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2FjdGl2ZVRleHR1cmVVbml0
ID0gdGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMDsKLSAgICBtX2NvbnRleHQt
PmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEFjdGl2ZVRleHR1cmVVbml0KHRleHR1cmUpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNoYWRlcikpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYXR0YWNoU2hh
ZGVyIiwgInNoYWRlciBhdHRhY2htZW50IGFscmVhZHkgaGFzIHNoYWRlciIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhw
cm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOwotICAgIHNoYWRlci0+b25BdHRhY2hlZCgp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJpYkxvY2F0aW9uKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5kQXR0cmli
TG9jYXRpb24iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVM
b2NhdGlvbkxlbmd0aCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1lKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
YmluZEF0dHJpYkxvY2F0aW9uIiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgaW5kZXgsIG5hbWUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y2hlY2tPYmplY3RUb0JlQm91bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9i
amVjdCogb2JqZWN0LCBib29sJiBkZWxldGVkKQotewotICAgIGRlbGV0ZWQgPSBmYWxzZTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKG9iamVjdCkgewotICAgICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdy
b3VwKCksIHRoaXMpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBub3QgZnJv
bSB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBkZWxldGVkID0gIW9iamVjdC0+b2JqZWN0KCk7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmpl
Y3RUb0JlQm91bmQoImJpbmRCdWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIGJ1ZmZlciA9IDA7Ci0gICAgaWYgKGJ1ZmZl
ciAmJiBidWZmZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImJpbmRCdWZmZXIiLCAiYnVmZmVycyBjYW4gbm90IGJlIHVzZWQgd2l0aCBt
dWx0aXBsZSB0YXJnZXRzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRhcmdl
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKQotICAgICAgICBtX2JvdW5kQXJy
YXlCdWZmZXIgPSBidWZmZXI7Ci0gICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKLSAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2Jq
ZWN0LT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRC
dWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKLSAg
ICBpZiAoYnVmZmVyKQotICAgICAgICBidWZmZXItPnNldFRhcmdldCh0YXJnZXQpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAoIWNoZWNrT2JqZWN0
VG9CZUJvdW5kKCJiaW5kRnJhbWVidWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIGJ1ZmZlciA9IDA7Ci0gICAgaWYgKHRh
cmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRGcmFtZWJ1
ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
ZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKG9iamVjdE9yWmVy
byhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIC8vIEluc3RlYWQgb2YgYmluZGlu
ZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4KLSAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5iaW5kKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwotICAgIGlmIChidWZmZXIpCi0gICAgICAg
IGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwotICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBp
ZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kUmVuZGVyYnVmZmVyIiwgcmVuZGVyQnVmZmVy
LCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBy
ZW5kZXJCdWZmZXIgPSAwOwotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IHJlbmRl
ckJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBvYmplY3RP
clplcm8ocmVuZGVyQnVmZmVyKSk7Ci0gICAgaWYgKHJlbmRlckJ1ZmZlcikKLSAgICAgICAgcmVu
ZGVyQnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4
dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBi
b29sIGRlbGV0ZWQ7Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFRleHR1cmUi
LCB0ZXh0dXJlLCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQot
ICAgICAgICB0ZXh0dXJlID0gMDsKLSAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJn
ZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZFRl
eHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdDM0RpbnQgbWF4TGV2ZWwgPSAwOwotICAg
IGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKLSAgICAgICAg
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZyA9IHRl
eHR1cmU7Ci0gICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0dXJlTGV2ZWw7Ci0KLSAgICAgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlciAmJiAhbV9hY3RpdmVUZXh0dXJlVW5pdCkKLSAgICAgICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZyhvYmplY3RPclplcm8odGV4dHVy
ZSkpOwotCi0gICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVApIHsKLSAgICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gdGV4dHVyZTsKLSAgICAgICAgbWF4TGV2ZWwgPSBt
X21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRUZXh0dXJlIiwg
ImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZSh0YXJnZXQsIG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7Ci0gICAgaWYgKHRl
eHR1cmUpCi0gICAgICAgIHRleHR1cmUtPnNldFRhcmdldCh0YXJnZXQsIG1heExldmVsKTsKLQot
ICAgIC8vIE5vdGU6IHByZXZpb3VzbHkgd2UgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNldCB0aGUg
VEVYVFVSRV9XUkFQX1IKLSAgICAvLyByZXBlYXQgbW9kZSB0byBDTEFNUF9UT19FREdFIGZvciBj
dWJlIG1hcCB0ZXh0dXJlcywgYmVjYXVzZSBPcGVuR0wKLSAgICAvLyBFUyAyLjAgZG9lc24ndCBl
eHBvc2UgdGhpcyBmbGFnIChhIGJ1ZyBpbiB0aGUgc3BlY2lmaWNhdGlvbikgYW5kCi0gICAgLy8g
b3RoZXJ3aXNlIHRoZSBhcHBsaWNhdGlvbiBoYXMgbm8gY29udHJvbCBvdmVyIHRoZSBzZWFtcyBp
biB0aGlzCi0gICAgLy8gZGltZW5zaW9uLiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQgc3VwcG9y
dGluZyB0aGlzIHByb3Blcmx5IG9uIGFsbAotICAgIC8vIHBsYXRmb3JtcyBpcyBmYWlybHkgaW52
b2x2ZWQgKHdpbGwgcmVxdWlyZSBhIEhhc2hNYXAgZnJvbSB0ZXh0dXJlIElECi0gICAgLy8gaW4g
YWxsIHBvcnRzKSwgYW5kIHdlIGhhdmUgbm90IGhhZCBhbnkgY29tcGxhaW50cywgc28gdGhlIGxv
Z2ljIGhhcwotICAgIC8vIGJlZW4gcmVtb3ZlZC4KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxv
YXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kQ29sb3IocmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymxl
bmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQorV2ViR0wxUmVuZGVyaW5nQ29udGV4dDo6V2ViR0wx
UmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBHcmFwaGlj
c0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDogV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZShwYXNzZWRDYW52YXMsIGF0dHJpYnV0ZXMpCiB7Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9u
IiwgbW9kZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kRXF1YXRpb24o
bW9kZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRF
cXVhdGlvbiIsIG1vZGVSR0IpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRp
b24iLCBtb2RlQWxwaGEpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEVx
dWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKLX0KLQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0
b3IpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVu
ZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMiLCBzZmFjdG9yLCBkZmFjdG9yKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3Jj
UkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBo
YSkKLXsKLSAgICAvLyBOb3RlOiBBbHBoYSBkb2VzIG5vdCBoYXZlIHRoZSBzYW1lIHJlc3RyaWN0
aW9ucyBhcyBSR0IuCi0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVCbGVuZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMiLCBzcmNSR0IsIGRzdFJHQikpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdC
LCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzaXplLCBHQzNEZW51bSB1c2Fn
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZm
ZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0
YXJnZXQsIHVzYWdlKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
IChzaXplIDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAic2l6ZSA8IDAiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoIXNpemUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPT0g
MCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9u
T3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVC
dWZmZXJEYXRhKHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4oc2l6ZSkpKSB7Ci0gICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1
ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8R0Mz
RHNpemVpcHRyPihzaXplKSwgdXNhZ2UpOwotICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNU
b1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8vIFRoZSBidWZmZXJEYXRhIGZ1bmN0
aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0
aGlua3MgaXQgZG9lcy4KLSAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7
Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YShHQzNE
ZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9
IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdl
KTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghZGF0YSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAg
IGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZl
ckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0
KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0aCgp
LCBkYXRhLT5kYXRhKCksIHVzYWdlKTsKLSAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9T
eW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlv
biBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhp
bmtzIGl0IGRvZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOwot
ICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVu
dW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTEJ1ZmZlciogYnVmZmVy
ID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNh
Z2UpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFkYXRhKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiYnVmZmVyRGF0YSIsICJubyBkYXRhIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKLSAgICAg
ICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YSkpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVm
ZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLT5ieXRlTGVuZ3Ro
KCksIGRhdGEtPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsKLSAgICBpZiAobV9jb250ZXh0LT5tb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAvLyBUaGUgYnVmZmVyRGF0
YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRh
dGEgaXQgdGhpbmtzIGl0IGRvZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVy
RGF0YSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1
YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlciogZGF0
YSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZm
ZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEi
LCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7Ci0gICAgaWYgKCFidWZm
ZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAob2Zmc2V0IDwgMCkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1
YkRhdGEiLCAib2Zmc2V0IDwgMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgh
ZGF0YSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZC
b3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJT
dWJEYXRhKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEpKSB7Ci0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBz
dGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEt
PmRhdGEoKSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlclN1YkRhdGEgZnVuY3Rpb24gZmFpbGVkLiBU
ZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2Vz
LgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFs
aWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyU3ViRGF0YSIsIHRhcmdldCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmIChvZmZzZXQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQg
PCAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFkYXRhKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkp
IHsKLSAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEoc3RhdGljX2Nh
c3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIs
ICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgp
OwotICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0Rp
bnRwdHI+KG9mZnNldCksIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7
Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsK
LSAgICAgICAgLy8gVGhlIGJ1ZmZlclN1YkRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBi
dWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgotICAgICAg
ICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKLSAgICB9Ci19Ci0KLUdDM0RlbnVt
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0
YXJnZXQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICBpZiAo
dGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gMDsKLSAg
ICB9Ci0gICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPm9iamVjdCgpKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0NPTVBMRVRFOwotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNv
bXBsZXRlIjsKLSAgICBHQzNEZW51bSByZXN1bHQgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Y2hl
Y2tTdGF0dXMoJnJlYXNvbik7Ci0gICAgaWYgKHJlc3VsdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgICAgcHJpbnRHTFdhcm5pbmdUb0NvbnNvbGUo
ImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCByZWFzb24pOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0KLSAgICByZXN1bHQgPSBtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
dGFyZ2V0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChtYXNrICYgfihHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZG
RVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJj
bGVhciIsICJpbnZhbGlkIG1hc2siKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb25z
dCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJh
bWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhp
Y3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09Q
RVJBVElPTiwgImNsZWFyIiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoIWNsZWFySWZDb21wb3NpdGVkKG1hc2spKQotICAgICAgICBtX2NvbnRleHQtPmNsZWFyKG1h
c2spOwotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXJDb2xvcihHQzNEZmxvYXQgciwgR0MzRGZsb2F0IGcsIEdDM0RmbG9hdCBi
LCBHQzNEZmxvYXQgYSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKHN0ZDo6aXNuYW4ocikpCi0gICAgICAgIHIgPSAwOwotICAg
IGlmIChzdGQ6OmlzbmFuKGcpKQotICAgICAgICBnID0gMDsKLSAgICBpZiAoc3RkOjppc25hbihi
KSkKLSAgICAgICAgYiA9IDA7Ci0gICAgaWYgKHN0ZDo6aXNuYW4oYSkpCi0gICAgICAgIGEgPSAx
OwotICAgIG1fY2xlYXJDb2xvclswXSA9IHI7Ci0gICAgbV9jbGVhckNvbG9yWzFdID0gZzsKLSAg
ICBtX2NsZWFyQ29sb3JbMl0gPSBiOwotICAgIG1fY2xlYXJDb2xvclszXSA9IGE7Ci0gICAgbV9j
b250ZXh0LT5jbGVhckNvbG9yKHIsIGcsIGIsIGEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXJEZXB0aChHQzNEZmxvYXQgZGVwdGgpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY2xlYXJEZXB0aCA9IGRl
cHRoOwotICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChkZXB0aCk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjbGVhclN0ZW5jaWwoR0MzRGludCBzKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NsZWFyU3RlbmNp
bCA9IHM7Ci0gICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwocyk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBn
cmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCi17Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29sb3JNYXNr
WzBdID0gcmVkOwotICAgIG1fY29sb3JNYXNrWzFdID0gZ3JlZW47Ci0gICAgbV9jb2xvck1hc2tb
Ml0gPSBibHVlOwotICAgIG1fY29sb3JNYXNrWzNdID0gYWxwaGE7Ci0gICAgbV9jb250ZXh0LT5j
b2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImNvbXBpbGVTaGFkZXIiLCBzaGFk
ZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5jb21waWxlU2hhZGVyKG9iamVj
dE9yWmVybyhzaGFkZXIpKTsKLSAgICBHQzNEaW50IHZhbHVlOwotICAgIG1fY29udGV4dC0+Z2V0
U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRlciksIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxF
X1NUQVRVUywgJnZhbHVlKTsKLSAgICBzaGFkZXItPnNldFZhbGlkKHZhbHVlKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdl
dCwgbGV2ZWwpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3Nl
ZFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwg
ImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBp
ZiAoYm9yZGVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAiY29tcHJlc3NlZFRleEltYWdlMkQiLCAiYm9yZGVyIG5vdCAwIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhE
aW1lbnNpb25zKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBo
ZWlnaHQsIGludGVybmFsZm9ybWF0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRh
dGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgd2lkdGgsIGhl
aWdodCwgaW50ZXJuYWxmb3JtYXQsIGRhdGEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJH
TFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvbXByZXNzZWRUZXhJbWFn
ZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkgewotICAgICAgICBpZiAobGV2ZWwgJiYgV2ViR0xU
ZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29tcHJlc3NlZFRleElt
YWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmNvbXByZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICBib3JkZXIsIGRh
dGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7Ci0gICAgaWYgKG1fY29udGV4
dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGNv
bXByZXNzZWRUZXhJbWFnZTJEIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJl
IGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBmb3IgdGhpcyBsZXZlbC4KLSAgICAgICAgdGV4LT5t
YXJrSW52YWxpZCh0YXJnZXQsIGxldmVsKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci0gICAgdGV4LT5zZXRD
b21wcmVzc2VkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2Vk
VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhG
dW5jTGV2ZWwoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChmb3JtYXQp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIGZvcm1hdCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0Rh
dGEoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBkYXRh
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRl
eHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0g
ICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChmb3JtYXQgIT0gdGV4LT5n
ZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCIsICJmb3JtYXQgZG9lcyBub3QgbWF0Y2ggdGV4dHVyZSBmb3JtYXQiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4U3Vi
RGltZW5zaW9ucygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHRleCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGdyYXBoaWNzQ29udGV4dDNEKCktPmNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBkYXRhLT5ieXRl
TGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAgIHRleC0+c2V0Q29tcHJlc3NlZCgp
OworICAgIG1fdHlwZSA9ICJ3ZWJnbDEiOwogfQogCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIGZvcm1hdCkKK1dlYkdMMVJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMVJlbmRlcmluZ0Nv
bnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCwKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBh
dHRyaWJ1dGVzKSA6IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UocGFzc2VkQ2FudmFzLCBjb250
ZXh0LCBhdHRyaWJ1dGVzKQogewotICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xlYXJC
aXRzQnlGb3JtYXQoZm9ybWF0KSAmIChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJ
VCB8IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAiZm9ybWF0IGNhbiBub3QgYmUgc2V0LCBvbmx5IHJlbmRlcmVkIHRvIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgbV90eXBl
ID0gIndlYmdsMSI7CiB9CiAKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlcikKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJj
b3B5VGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGludGVybmFsZm9ybWF0LCBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfQllURSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlk
YXRlU2V0dGFibGVUZXhGb3JtYXQoImNvcHlUZXhJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKQot
ICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVC
aW5kaW5nKCJjb3B5VGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNv
bWJpbmF0aW9uVmFsaWQoaW50ZXJuYWxmb3JtYXQsIGdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZv
cm1hdCgpKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJjb3B5VGV4SW1hZ2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNv
bXBhdGlibGUgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFpc0dM
RVMyTlBPVFN0cmljdCgpICYmIGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBo
ZWlnaHQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAiY29weVRleEltYWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAy
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZy
YW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAh
bV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jl
c291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4SW1h
Z2UyRCIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2xlYXJJZkNvbXBv
c2l0ZWQoKTsKLSAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkgewotICAgICAgICBTY29wZWREcmF3
aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZm
ZXJCaW5kaW5nLmdldCgpKTsKLSAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlciht
X2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKLSAgICAg
ICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7Ci0gICAgICAgIEdDM0RzaXplaSBjbGlwcGVk
V2lkdGgsIGNsaXBwZWRIZWlnaHQ7Ci0gICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhl
aWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWln
aHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0
KSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBtX3VucGFja0FsaWdubWVudCk7Ci0gICAg
ICAgICAgICBpZiAoY2xpcHBlZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgewotICAg
ICAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
Y2xpcHBlZFggLSB4LCBjbGlwcGVkWSAtIHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjbGlwcGVkWCwgY2xpcHBlZFksIGNsaXBwZWRXaWR0aCwgY2xpcHBl
ZEhlaWdodCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9j
b250ZXh0LT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKLSAgICB9Ci0gICAgLy8gRklYTUU6IGlmIHRoZSBm
cmFtZWJ1ZmZlciBpcyBub3QgY29tcGxldGUsIG5vbmUgb2YgdGhlIGJlbG93IHNob3VsZCBiZSBl
eGVjdXRlZC4KLSAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29weVRleFN1YkltYWdlMkQiLCB0YXJn
ZXQsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFs
aWRhdGVUZXh0dXJlQmluZGluZygiY29weVRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwot
ICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUoImNv
cHlUZXhTdWJJbWFnZTJEIiwgeG9mZnNldCwgeW9mZnNldCkgfHwgIXZhbGlkYXRlU2l6ZSgiY29w
eVRleFN1YkltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8v
IEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92ZXJmbG93
IGhhcHBlbnMgZmlyc3QuCi0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA8IDAgfHwgeW9mZnNldCAr
IGhlaWdodCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJiYWQgZGltZW5zaW9ucyIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXgt
PmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXgtPmdldEhl
aWdodCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgInJlY3Rhbmds
ZSBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCA9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7Ci0g
ICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4U3ViSW1hZ2UyRCIsIGlu
dGVybmFsZm9ybWF0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNUZXhJbnRlcm5hbEZv
cm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRG
cmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFnZTJEIiwg
ImZyYW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7
Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24p
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFnZTJEIiwgcmVhc29uKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIGlmIChp
c1Jlc291cmNlU2FmZSgpKSB7Ci0gICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmlu
ZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwot
ICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOwotICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdp
ZHRoLCBjbGlwcGVkSGVpZ2h0OwotICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWln
aHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0
KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkp
IHsKLSAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCA9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQo
dGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgICAgICBHQzNEZW51bSB0eXBlID0gdGV4LT5nZXRUeXBl
KHRhcmdldCwgbGV2ZWwpOwotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHVuc2lnbmVkIGNo
YXJbXT4gemVybzsKLSAgICAgICAgICAgIGlmICh3aWR0aCAmJiBoZWlnaHQpIHsKLSAgICAgICAg
ICAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKLSAgICAgICAgICAgICAgICBHQzNEZW51bSBlcnJv
ciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0
aCwgaGVpZ2h0LCBtX3VucGFja0FsaWdubWVudCwgJnNpemUsIDApOwotICAgICAgICAgICAgICAg
IGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJi
YWQgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgIHplcm8gPSBzdGQ6Om1ha2VfdW5pcXVlPHVuc2lnbmVk
IGNoYXJbXT4oc2l6ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF6ZXJvKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOwotICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbXNl
dCh6ZXJvLmdldCgpLCAwLCBzaXplKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fY29u
dGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHplcm8uZ2V0KCkpOwotICAgICAgICAgICAgaWYgKGNs
aXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhlaWdodCA+IDApIHsKLSAgICAgICAgICAgICAgICBT
Y29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1f
ZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNv
cHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQgKyBjbGlwcGVkWCAtIHgsIHlv
ZmZzZXQgKyBjbGlwcGVkWSAtIHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjbGlwcGVkWCwgY2xpcHBlZFksIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdo
dCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTY29wZWRE
cmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLmdldCgpKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdo
dCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8V2ViR0xC
dWZmZXI+IG8gPSBXZWJHTEJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZFNoYXJlZE9iamVj
dChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVm
ZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gbyA9IFdlYkdMRnJhbWVidWZmZXI6OmNyZWF0ZSh0
aGlzKTsKLSAgICBhZGRDb250ZXh0T2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVybiBvOwotfQot
Ci1QYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVU
ZXh0dXJlKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBvID0gV2ViR0xUZXh0dXJl
OjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVy
biBvOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVQcm9ncmFtKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBvID0gV2Vi
R0xQcm9ncmFtOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwot
ICAgIHJldHVybiBvOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdl
YkdMUmVuZGVyYnVmZmVyPiBvID0gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAg
ICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQ
dHI8V2ViR0xTaGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlU2hhZGVyKEdDM0Rl
bnVtIHR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIgJiYgdHlw
ZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjcmVhdGVTaGFk
ZXIiLCAiaW52YWxpZCBzaGFkZXIgdHlwZSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8V2ViR0xTaGFkZXI+IG8gPSBXZWJHTFNoYWRlcjo6Y3JlYXRlKHRo
aXMsIHR5cGUpOwotICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUp
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29udGV4dC0+Y3VsbEZhY2UobW9kZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZWxldGVPYmplY3QoV2ViR0xPYmplY3QqIG9iamVjdCkKLXsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFvYmplY3QpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImRlbGV0ZSIsICJvYmplY3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmIChvYmplY3QtPm9iamVjdCgpKQot
ICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gY29udGV4dCBoZXJlIGJlY2F1c2Ugd2Ugd2Fu
dAotICAgICAgICAvLyB0aGluZ3MgaW4gdGhpcyBjb250ZXh0IHVuYm91bmQuCi0gICAgICAgIG9i
amVjdC0+ZGVsZXRlT2JqZWN0KGdyYXBoaWNzQ29udGV4dDNEKCkpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlQnVmZmVyKFdlYkdMQnVm
ZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKCFkZWxldGVPYmplY3QoYnVmZmVyKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmIChtX2JvdW5kQXJyYXlCdWZmZXIgPT0gYnVmZmVyKQotICAgICAgICBt
X2JvdW5kQXJyYXlCdWZmZXIgPSAwOwotCi0gICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT51
bmJpbmRCdWZmZXIoYnVmZmVyKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
bGV0ZUZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQotewotICAgIGlm
ICghZGVsZXRlT2JqZWN0KGZyYW1lYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChm
cmFtZWJ1ZmZlciA9PSBtX2ZyYW1lYnVmZmVyQmluZGluZykgewotICAgICAgICBtX2ZyYW1lYnVm
ZmVyQmluZGluZyA9IDA7Ci0gICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKDApOwotICAgICAgICAg
ICAgLy8gSGF2ZSB0byBjYWxsIGJpbmRGcmFtZWJ1ZmZlciBoZXJlIHRvIGJpbmQgYmFjayB0byBp
bnRlcm5hbCBmYm8uCi0gICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRlbGV0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQotewotICAg
IGRlbGV0ZU9iamVjdChwcm9ncmFtKTsKLSAgICAvLyBXZSBkb24ndCByZXNldCBtX2N1cnJlbnRQ
cm9ncmFtIHRvIDAgaGVyZSBiZWNhdXNlIHRoZSBkZWxldGlvbiBvZiB0aGUKLSAgICAvLyBjdXJy
ZW50IHByb2dyYW0gaXMgZGVsYXllZC4KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQotewot
ICAgIGlmICghZGVsZXRlT2JqZWN0KHJlbmRlcmJ1ZmZlcikpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAocmVuZGVyYnVmZmVyID09IG1fcmVuZGVyYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9y
ZW5kZXJidWZmZXJCaW5kaW5nID0gMDsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0g
ICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJh
bWVidWZmZXIocmVuZGVyYnVmZmVyKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQotewotICAgIGRlbGV0ZU9iamVjdChz
aGFkZXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlVGV4dHVyZShX
ZWJHTFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgaWYgKCFkZWxldGVPYmplY3QodGV4dHVyZSkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdGV4dHVyZVVu
aXRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICh0ZXh0dXJlID09IG1fdGV4dHVyZVVuaXRz
W2ldLnRleHR1cmUyREJpbmRpbmcpCi0gICAgICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0
dXJlMkRCaW5kaW5nID0gbnVsbHB0cjsKLSAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJl
VW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nKQotICAgICAgICAgICAgbV90ZXh0dXJlVW5p
dHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKG1f
ZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3Zl
QXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKHRleHR1cmUpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCi17Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+
ZGVwdGhGdW5jKGZ1bmMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhN
YXNrKEdDM0Rib29sZWFuIGZsYWcpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fZGVwdGhNYXNrID0gZmxhZzsKLSAgICBtX2NvbnRl
eHQtPmRlcHRoTWFzayhmbGFnKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRl
cHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxvYXQgekZhcikKLXsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHpOZWFyID4g
ekZhcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICJkZXB0aFJhbmdlIiwgInpOZWFyID4gekZhciIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+ZGVwdGhSYW5nZSh6TmVhciwgekZhcik7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlV2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0
ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBzaGFkZXIpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKCFwcm9ncmFtLT5kZXRhY2hTaGFkZXIoc2hhZGVyKSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZXRhY2hT
aGFkZXIiLCAic2hhZGVyIG5vdCBhdHRhY2hlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0
T3JaZXJvKHNoYWRlcikpOwotICAgIHNoYWRlci0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQz
RCgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGUoR0MzRGVudW0g
Y2FwKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2Fw
YWJpbGl0eSgiZGlzYWJsZSIsIGNhcCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoY2FwID09
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpIHsKLSAgICAgICAgbV9zdGVuY2lsRW5h
YmxlZCA9IGZhbHNlOwotICAgICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KSB7Ci0gICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgaWYgKG1fZHJh
d2luZ0J1ZmZlcikKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJs
ZWQobV9zY2lzc29yRW5hYmxlZCk7Ci0gICAgfQotICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXAp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZGlzYWJsZVZl
cnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3Rh
dGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0
ZShpbmRleCk7Ci0gICAgc3RhdGUuZW5hYmxlZCA9IGZhbHNlOwotCi0gICAgaWYgKGluZGV4ID4g
MCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpCi0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZVZlcnRl
eEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdD
M0RpbnRwdHIgb2Zmc2V0KQotewotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5
QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIo
KTsKLSAgICAKLSAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgaWYgKG9mZnNldCA8IDApCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKLSAgICAgICAg
Ly8gRm9yIGFuIHVuc2lnbmVkIGludCBhcnJheSwgb2Zmc2V0IG11c3QgYmUgZGl2aXNpYmxlIGJ5
IDQgZm9yIGFsaWdubWVudCByZWFzb25zLgotICAgICAgICBpZiAob2Zmc2V0ICUgNCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVu
dCBvZmZzZXQuCi0gICAgICAgIG9mZnNldCAvPSA0OwotCi0gICAgICAgIEdDM0RzaXplaXB0ciBu
ID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyA0OwotICAgICAgICBpZiAob2Zm
c2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VCkgewotICAgICAgICAvLyBGb3IgYW4gdW5zaWduZWQgc2hvcnQgYXJyYXksIG9mZnNldCBtdXN0
IGJlIGRpdmlzaWJsZSBieSAyIGZvciBhbGlnbm1lbnQgcmVhc29ucy4KLSAgICAgICAgaWYgKG9m
ZnNldCAlIDIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gTWFrZSB1
b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICBvZmZzZXQgLz0gMjsKLQotICAgICAg
ICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gMjsK
LSAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSkgewotICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJh
eUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwotICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+
IG4gLSBvZmZzZXQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFy
cmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVp
cmVkKQotewotICAgIC8vIFBlcmZvcm1zIGNvbnNlcnZhdGl2ZSB2YWxpZGF0aW9uIGJ5IGNhY2hp
bmcgYSBtYXhpbXVtIGluZGV4IG9mCi0gICAgLy8gdGhlIGdpdmVuIHR5cGUgcGVyIGVsZW1lbnQg
YXJyYXkgYnVmZmVyLiBJZiBhbGwgb2YgdGhlIGJvdW5kCi0gICAgLy8gYXJyYXkgYnVmZmVycyBo
YXZlIGVub3VnaCBlbGVtZW50cyB0byBzYXRpc2Z5IHRoYXQgbWF4aW11bQotICAgIC8vIGluZGV4
LCBza2lwcyB0aGUgZXhwZW5zaXZlIHBlci1kcmF3LWNhbGwgaXRlcmF0aW9uIGluCi0gICAgLy8g
dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZS4KLSAgICAKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+
IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVu
dEFycmF5QnVmZmVyKCk7Ci0KLSAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlcikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgR0MzRHNpemVpcHRyIG51bUVsZW1lbnRzID0gZWxlbWVudEFy
cmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7Ci0gICAgLy8gVGhlIGNhc2UgY291bnQ9PTAgaXMgYWxy
ZWFkeSBkZWFsdCB3aXRoIGluIGRyYXdFbGVtZW50cyBiZWZvcmUgdmFsaWRhdGVJbmRleEFycmF5
Q29uc2VydmF0aXZlLgotICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBjb25zdCBBcnJheUJ1ZmZlciogYnVmZmVyID0gZWxlbWVudEFycmF5QnVmZmVyLT5l
bGVtZW50QXJyYXlCdWZmZXIoKTsKLSAgICBBU1NFUlQoYnVmZmVyKTsKLQotICAgIGludCBtYXhJ
bmRleCA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Z2V0Q2FjaGVkTWF4SW5kZXgodHlwZSk7Ci0gICAg
aWYgKG1heEluZGV4IDwgMCkgewotICAgICAgICAvLyBDb21wdXRlIHRoZSBtYXhpbXVtIGluZGV4
IGluIHRoZSBlbnRpcmUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gdHlwZSBvZiBpbmRleC4KLSAgICAg
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEU6IHsKLSAgICAgICAgICAgIGNvbnN0IEdDM0R1Ynl0ZSogcCA9IHN0YXRpY19jYXN0
PGNvbnN0IEdDM0R1Ynl0ZSo+KGJ1ZmZlci0+ZGF0YSgpKTsKLSAgICAgICAgICAgIGZvciAoR0Mz
RHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKLSAgICAgICAgICAgICAgICBt
YXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KHBbaV0pKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUOiB7Ci0gICAgICAgICAgICBudW1FbGVtZW50cyAvPSBzaXplb2Yo
R0MzRHVzaG9ydCk7Ci0gICAgICAgICAgICBjb25zdCBHQzNEdXNob3J0KiBwID0gc3RhdGljX2Nh
c3Q8Y29uc3QgR0MzRHVzaG9ydCo+KGJ1ZmZlci0+ZGF0YSgpKTsKLSAgICAgICAgICAgIGZvciAo
R0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKLSAgICAgICAgICAgICAg
ICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KHBbaV0pKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0lOVDogewotICAgICAgICAgICAgaWYgKCFtX29lc0VsZW1lbnRJbmRl
eFVpbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgbnVtRWxl
bWVudHMgLz0gc2l6ZW9mKEdDM0R1aW50KTsKLSAgICAgICAgICAgIGNvbnN0IEdDM0R1aW50KiBw
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVpbnQqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAg
ICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCi0gICAg
ICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50
PihwW2ldKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGVsZW1lbnRB
cnJheUJ1ZmZlci0+c2V0Q2FjaGVkTWF4SW5kZXgodHlwZSwgbWF4SW5kZXgpOwotICAgIH0KLQot
ICAgIGlmIChtYXhJbmRleCA+PSAwKSB7Ci0gICAgICAgIC8vIFRoZSBudW1iZXIgb2YgcmVxdWly
ZWQgZWxlbWVudHMgaXMgb25lIG1vcmUgdGhhbiB0aGUgbWF4aW11bQotICAgICAgICAvLyBpbmRl
eCB0aGF0IHdpbGwgYmUgYWNjZXNzZWQuCi0gICAgICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSBt
YXhJbmRleCArIDE7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJh
eVByZWNpc2UoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNl
dCwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQpCi17Ci0gICAgQVNTRVJUKGNvdW50ID49
IDAgJiYgb2Zmc2V0ID49IDApOwotICAgIHVuc2lnbmVkIGxhc3RJbmRleCA9IDA7Ci0gICAgCi0g
ICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotCi0gICAgaWYgKCFlbGVtZW50
QXJyYXlCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghY291bnQpIHsK
LSAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IDA7Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLQotICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgbG9uZyB1b2Zmc2V0ID0g
b2Zmc2V0OwotICAgIHVuc2lnbmVkIGxvbmcgbiA9IGNvdW50OwotCi0gICAgaWYgKHR5cGUgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgewotICAgICAgICAvLyBNYWtlIHVvZmZz
ZXQgYW4gZWxlbWVudCBvZmZzZXQuCi0gICAgICAgIHVvZmZzZXQgLz0gc2l6ZW9mKEdDM0R1aW50
KTsKLSAgICAgICAgY29uc3QgR0MzRHVpbnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWlu
dCo+KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyB1
b2Zmc2V0OwotICAgICAgICB3aGlsZSAobi0tID4gMCkgewotICAgICAgICAgICAgaWYgKCpwID4g
bGFzdEluZGV4KQotICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOwotICAgICAgICAgICAg
KytwOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVCkgewotICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBv
ZmZzZXQuCi0gICAgICAgIHVvZmZzZXQgLz0gc2l6ZW9mKEdDM0R1c2hvcnQpOwotICAgICAgICBj
b25zdCBHQzNEdXNob3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVzaG9ydCo+KGVsZW1l
bnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkgKyB1b2Zmc2V0Owot
ICAgICAgICB3aGlsZSAobi0tID4gMCkgewotICAgICAgICAgICAgaWYgKCpwID4gbGFzdEluZGV4
KQotICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOwotICAgICAgICAgICAgKytwOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFKSB7Ci0gICAgICAgIGNvbnN0IEdDM0R1Ynl0ZSogcCA9IHN0YXRpY19jYXN0PGNvbnN0
IEdDM0R1Ynl0ZSo+KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRh
dGEoKSkgKyB1b2Zmc2V0OwotICAgICAgICB3aGlsZSAobi0tID4gMCkgewotICAgICAgICAgICAg
aWYgKCpwID4gbGFzdEluZGV4KQotICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOwotICAg
ICAgICAgICAgKytwOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gVGhlbiBzZXQgdGhlIGxh
c3QgaW5kZXggaW4gdGhlIGluZGV4IGFycmF5IGFuZCBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuCi0g
ICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IGxhc3RJbmRleCArIDE7Ci0gICAgcmV0dXJuIG51bUVs
ZW1lbnRzUmVxdWlyZWQgPiAwOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3VudCwgdW5zaWduZWQgcHJp
bWl0aXZlQ291bnQpCi17Ci0gICAgaWYgKCFtX2N1cnJlbnRQcm9ncmFtKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAvLyBMb29rIGluIGVhY2ggZW5hYmxlZCB2ZXJ0ZXggYXR0cmliIGFu
ZCBjaGVjayBpZiB0aGV5J3ZlIGJlZW4gYm91bmQgdG8gYSBidWZmZXIuCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fbWF4VmVydGV4QXR0cmliczsgKytpKSB7Ci0gICAgICAgIGlmICgh
bV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpKS52YWxpZGF0
ZUJpbmRpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAo
ZWxlbWVudENvdW50IDw9IDApCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0KLSAgICAvLyBMb29r
IGluIGVhY2ggY29uc3VtZWQgdmVydGV4IGF0dHJpYiAoYnkgdGhlIGN1cnJlbnQgcHJvZ3JhbSku
Ci0gICAgYm9vbCBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSBmYWxzZTsKLSAgICBib29sIHNhd0Vu
YWJsZWRBdHRyaWIgPSBmYWxzZTsKLSAgICBpbnQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zID0g
bV9jdXJyZW50UHJvZ3JhbS0+bnVtQWN0aXZlQXR0cmliTG9jYXRpb25zKCk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnM7ICsraSkgewotICAgICAgICBp
bnQgbG9jID0gbV9jdXJyZW50UHJvZ3JhbS0+Z2V0QWN0aXZlQXR0cmliTG9jYXRpb24oaSk7Ci0g
ICAgICAgIGlmIChsb2MgPj0gMCAmJiBsb2MgPCBzdGF0aWNfY2FzdDxpbnQ+KG1fbWF4VmVydGV4
QXR0cmlicykpIHsKLSAgICAgICAgICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6
OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0
VmVydGV4QXR0cmliU3RhdGUobG9jKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS5lbmFibGVkKSB7
Ci0gICAgICAgICAgICAgICAgc2F3RW5hYmxlZEF0dHJpYiA9IHRydWU7Ci0gICAgICAgICAgICAg
ICAgLy8gQXZvaWQgb2ZmLWJ5LW9uZSBlcnJvcnMgaW4gbnVtRWxlbWVudHMgY29tcHV0YXRpb24u
Ci0gICAgICAgICAgICAgICAgLy8gRm9yIHRoZSBsYXN0IGVsZW1lbnQsIHdlIHdpbGwgb25seSB0
b3VjaCB0aGUgZGF0YSBmb3IgdGhlCi0gICAgICAgICAgICAgICAgLy8gZWxlbWVudCBhbmQgbm90
aGluZyBiZXlvbmQgaXQuCi0gICAgICAgICAgICAgICAgaW50IGJ5dGVzUmVtYWluaW5nID0gc3Rh
dGljX2Nhc3Q8aW50PihzdGF0ZS5idWZmZXJCaW5kaW5nLT5ieXRlTGVuZ3RoKCkgLSBzdGF0ZS5v
ZmZzZXQpOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMDsKLSAgICAg
ICAgICAgICAgICBBU1NFUlQoc3RhdGUuc3RyaWRlID4gMCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGJ5dGVzUmVtYWluaW5nID49IHN0YXRlLmJ5dGVzUGVyRWxlbWVudCkKLSAgICAgICAgICAgICAg
ICAgICAgbnVtRWxlbWVudHMgPSAxICsgKGJ5dGVzUmVtYWluaW5nIC0gc3RhdGUuYnl0ZXNQZXJF
bGVtZW50KSAvIHN0YXRlLnN0cmlkZTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLmRpdmlz
b3IpCi0gICAgICAgICAgICAgICAgICAgIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgaWYgKCghc3RhdGUuZGl2aXNvciAmJiBlbGVtZW50Q291bnQgPiBudW1F
bGVtZW50cykgfHwgKHN0YXRlLmRpdmlzb3IgJiYgcHJpbWl0aXZlQ291bnQgPiBudW1FbGVtZW50
cykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmICghc2F3Tm9uSW5zdGFuY2VkQXR0cmliICYmIHNhd0Vu
YWJsZWRBdHRyaWIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVXZWJHTE9iamVjdChjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKCFv
YmplY3QgfHwgIW9iamVjdC0+b2JqZWN0KCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIG9iamVj
dCBvciBvYmplY3QgZGVsZXRlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJvYmplY3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVEcmF3QXJyYXlzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50
LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1lLCBtb2RlKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhmdW5jdGlvbk5h
bWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZmlyc3QgPCAwIHx8IGNvdW50
IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZmlyc3Qgb3IgY291bnQgPCAwIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAgIG1hcmtD
b250ZXh0Q2hhbmdlZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYg
KHByaW1jb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9u
T3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFs
aWQgcmVuZGVyaW5nIHN0YXRlCi0gICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZs
b3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7Ci0gICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3Jk
T3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7Ci0gICAgICAgIENoZWNrZWQ8R0MzRGludCwg
UmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVja2VkQ291bnQ7
Ci0gICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQcmltQ291
bnQocHJpbWNvdW50KTsKLSAgICAgICAgaWYgKGNoZWNrZWRTdW0uaGFzT3ZlcmZsb3dlZCgpIHx8
IGNoZWNrZWRQcmltQ291bnQuaGFzT3ZlcmZsb3dlZCgpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJp
YnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwgY2hlY2tlZFByaW1Db3VudC51bnNhZmVHZXQo
KSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9m
IGJvdW5kcyBhcnJheXMiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKDApKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29u
c3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBo
aWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291
bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0KLSAgICBp
ZiAoIXZhbGlkYXRlRHJhd0FycmF5cygiZHJhd0FycmF5cyIsIG1vZGUsIGZpcnN0LCBjb3VudCwg
MCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0KLSAgICBi
b29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWlzR0xFUzJDb21w
bGlhbnQoKSkKLSAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4
QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgp
KQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXMiLCB0cnVlKTsK
LSAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKLSAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICBy
ZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNH
TEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3
QXJyYXlzIiwgZmFsc2UpOwotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi1ib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUs
IGxvbmcgbG9uZyBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50cykKLXsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwg
bW9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghdmFsaWRhdGVTdGVuY2ls
U2V0dGluZ3MoZnVuY3Rpb25OYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dp
dGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgotICAgICAgICBp
ZiAobV9vZXNFbGVtZW50SW5kZXhVaW50KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICBpZiAoY291bnQgPCAwIHx8IG9mZnNldCA8IDApIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImNvdW50IG9yIG9mZnNldCA8IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIGlmICghY291bnQpIHsKLSAgICAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJubyBFTEVNRU5UX0FSUkFZX0JVRkZFUiBib3VuZCIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vz
c2VzKCkpIHsKLSAgICAgICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCByZW5kZXJpbmcgc3Rh
dGUKLSAgICAgICAgaWYgKCF2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoY291bnQsIHR5cGUsIHN0
YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgInJlcXVlc3Qgb3V0IG9mIGJvdW5kcyBmb3IgY3VycmVudCBFTEVNRU5UX0FSUkFZX0JVRkZF
UiIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmICgh
Y291bnQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghdmFsaWRhdGVJ
bmRleEFycmF5Q29uc2VydmF0aXZlKHR5cGUsIG51bUVsZW1lbnRzKSB8fCAhdmFsaWRhdGVWZXJ0
ZXhBdHRyaWJ1dGVzKG51bUVsZW1lbnRzKSkgewotICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUlu
ZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZz
ZXQpLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50
cykpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91
dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCF2YWxpZGF0
ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0cmli
cyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5j
b21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVy
QmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCks
ICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFzb24pOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0Mz
RHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotCi0gICAgdW5zaWduZWQgbnVtRWxl
bWVudHMgPSAwOwotICAgIGlmICghdmFsaWRhdGVEcmF3RWxlbWVudHMoImRyYXdFbGVtZW50cyIs
IG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRzKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLQotICAgIGJvb2wgdmVydGV4QXR0cmliMFNp
bXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAg
IGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgICAgICB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNl
KGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50
cyk7Ci0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJp
YjAobnVtRWxlbWVudHMpOwotICAgIH0KLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0g
ICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzIiwgdHJ1ZSk7Ci0g
ICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0
PEdDM0RpbnRwdHI+KG9mZnNldCkpOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZl
cnRleEF0dHJpYjBTaW11bGF0ZWQpCi0gICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0
dHJpYjBTaW11bGF0aW9uKCk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAg
ICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50cyIsIGZhbHNlKTsKLSAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVu
YWJsZShHQzNEZW51bSBjYXApCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJlbmFibGUiLCBjYXApKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7Ci0gICAgICAg
IG1fc3RlbmNpbEVuYWJsZWQgPSB0cnVlOwotICAgICAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9URVNUKSB7Ci0gICAgICAgIG1fc2Npc3NvckVuYWJsZWQgPSB0cnVlOwotICAgICAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRT
Y2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5l
bmFibGUoY2FwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhB
dHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0
dHJpYlN0YXRlKGluZGV4KTsKLSAgICBzdGF0ZS5lbmFibGVkID0gdHJ1ZTsKLQotICAgIG1fY29u
dGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZmluaXNoKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5maW5pc2goKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZsdXNoKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5mbHVzaCgpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZm
ZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlciIsIHRhcmdldCwgYXR0YWNobWVudCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
cmVuZGVyYnVmZmVydGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxpZGF0ZShjb250
ZXh0R3JvdXAoKSwgdGhpcykpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAi
bm8gYnVmZmVyIG9yIGJ1ZmZlciBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0
byBiZSBtdXRhdGVkOyBhbGwgY3VycmVudAotICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4g
RkJPIGludGVybmFsbHkgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQKLSAgICAvLyBGQk8uCi0gICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVj
dCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGZyYW1lYnVmZmVy
IGJvdW5kIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBi
dWZmZXJPYmplY3QgPSBvYmplY3RPclplcm8oYnVmZmVyKTsKLSAgICBzd2l0Y2ggKGF0dGFjaG1l
bnQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1F
TlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBi
dWZmZXJPYmplY3QpOwotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgcmVuZGVyYnVm
ZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNo
bWVudCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOwotICAgIH0KLSAgICBtX2Zy
YW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNo
bWVudCwgYnVmZmVyKTsKLSAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0
dXJlLCBHQzNEaW50IGxldmVsLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJh
bWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCB0YXJnZXQsIGF0
dGFjaG1lbnQpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGxldmVsKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZnJhbWVi
dWZmZXJUZXh0dXJlMkQiLCAibGV2ZWwgbm90IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAodGV4dHVyZSAmJiAhdGV4dHVyZS0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRo
aXMpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIHRleHR1cmUgb3IgdGV4
dHVyZSBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRhdGVkOyBh
bGwgY3VycmVudAotICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVybmFsbHkg
aW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQKLSAgICAvLyBGQk8uCi0gICAgaWYgKCFtX2ZyYW1lYnVm
ZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlT2JqZWN0ID0gb2Jq
ZWN0T3JaZXJvKHRleHR1cmUpOwotICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKLSAgICAg
ICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRB
Q0hNRU5UOgotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwg
YXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKLSAg
ICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQs
IHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwg
YXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7Ci0gICAgfQotICAg
IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5zZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihh
dHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKLSAgICBhcHBseVN0ZW5jaWxU
ZXN0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmcm9udEZhY2UoR0MzRGVu
dW0gbW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgbV9jb250ZXh0LT5mcm9udEZhY2UobW9kZSk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdM
VGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2VuZXJhdGVNaXBtYXAiLCB0
YXJnZXQsIGZhbHNlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
dGV4LT5jYW5HZW5lcmF0ZU1pcG1hcHMoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIsICJs
ZXZlbCAwIG5vdCBwb3dlciBvZiAyIG9yIG5vdCBhbGwgdGhlIHNhbWUgc2l6ZSIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTIzOTE2LiBDb21wcmVzc2VkIHRleHR1cmVzIHNob3VsZCBiZSBhbGxv
d2VkIGluIFdlYkdMIDI6Ci0gICAgaWYgKHRleC0+aXNDb21wcmVzc2VkKCkpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
Z2VuZXJhdGVNaXBtYXAiLCAidHJ5aW5nIHRvIGdlbmVyYXRlIG1pcG1hcHMgZnJvbSBjb21wcmVz
c2VkIHRleHR1cmUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRl
U2V0dGFibGVUZXhGb3JtYXQoImdlbmVyYXRlTWlwbWFwIiwgdGV4LT5nZXRJbnRlcm5hbEZvcm1h
dCh0YXJnZXQsIDApKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gZ2VuZXJhdGVNaXBtYXAg
d29uJ3Qgd29yayBwcm9wZXJseSBpZiBtaW5GaWx0ZXIgaXMgbm90IE5FQVJFU1RfTUlQTUFQX0xJ
TkVBUgotICAgIC8vIG9uIE1hYy4gIFJlbW92ZSB0aGUgaGFjayBvbmNlIHRoaXMgZHJpdmVyIGJ1
ZyBpcyBmaXhlZC4KLSNpZiBPUyhEQVJXSU4pCi0gICAgYm9vbCBuZWVkVG9SZXNldE1pbkZpbHRl
ciA9IGZhbHNlOwotICAgIGlmICh0ZXgtPmdldE1pbkZpbHRlcigpICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpIHsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUik7Ci0gICAgICAgIG5lZWRUb1Jl
c2V0TWluRmlsdGVyID0gdHJ1ZTsKLSAgICB9Ci0jZW5kaWYKLSAgICBtX2NvbnRleHQtPmdlbmVy
YXRlTWlwbWFwKHRhcmdldCk7Ci0jaWYgT1MoREFSV0lOKQotICAgIGlmIChuZWVkVG9SZXNldE1p
bkZpbHRlcikKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgdGV4LT5nZXRNaW5GaWx0ZXIoKSk7Ci0j
ZW5kaWYKLSAgICB0ZXgtPmdlbmVyYXRlTWlwbWFwTGV2ZWxJbmZvKCk7Ci19Ci0KLVBhc3NSZWZQ
dHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEFjdGl2ZUF0dHJp
YihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZUF0dHJpYiIsIHByb2dyYW0p
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgaWYg
KCFtX2NvbnRleHQtPmdldEFjdGl2ZUF0dHJpYihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4
LCBpbmZvKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBMT0coV2ViR0wsICJSZXR1
cm5pbmcgYWN0aXZlIGF0dHJpYnV0ZSAlZDogJXMiLCBpbmRleCwgaW5mby5uYW1lLnV0ZjgoKS5k
YXRhKCkpOwotCi0gICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwg
aW5mby50eXBlLCBpbmZvLnNpemUpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgiZ2V0QWN0aXZlVW5pZm9ybSIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBBY3RpdmVJbmZvIGluZm87Ci0gICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVu
aWZvcm0ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICBpZiAoaW5m
by5zaXplID4gMSAmJiAhaW5mby5uYW1lLmVuZHNXaXRoKCJbMF0iKSkKLSAgICAgICAgICAgIGlu
Zm8ubmFtZS5hcHBlbmQoIlswXSIpOwotCi0gICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2
ZSB1bmlmb3JtICVkOiAlcyIsIGluZGV4LCBpbmZvLm5hbWUudXRmOCgpLmRhdGEoKSk7Ci0KLSAg
ICByZXR1cm4gV2ViR0xBY3RpdmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGlu
Zm8uc2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBdHRhY2hlZFNo
YWRlcnMoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4m
IHNoYWRlck9iamVjdHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgc2hhZGVyT2JqZWN0cy5jbGVhcigpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEF0dGFjaGVkU2hhZGVycyIsIHBy
b2dyYW0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBjb25zdCBHQzNEZW51bSBzaGFk
ZXJUeXBlW10gPSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSLAot
ICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSCi0gICAgfTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZW9mKHNoYWRlclR5cGUpIC8gc2l6ZW9mKEdDM0Rl
bnVtKTsgKytpKSB7Ci0gICAgICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBwcm9ncmFtLT5nZXRB
dHRhY2hlZFNoYWRlcihzaGFkZXJUeXBlW2ldKTsKLSAgICAgICAgaWYgKHNoYWRlcikKLSAgICAg
ICAgICAgIHNoYWRlck9iamVjdHMuYXBwZW5kKHNoYWRlcik7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi1HQzNEaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0cmliTG9jYXRp
b24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QXR0
cmliTG9jYXRpb24iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmICghdmFs
aWRhdGVMb2NhdGlvbkxlbmd0aCgiZ2V0QXR0cmliTG9jYXRpb24iLCBuYW1lKSkKLSAgICAgICAg
cmV0dXJuIC0xOwotICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImdldEF0dHJpYkxvY2F0aW9uIiwg
bmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1l
KSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImdldEF0dHJpYkxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOwot
ICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJp
YkxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7Ci19Ci0KLVdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVIgJiYgdGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZ
X0JVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0Iik7Ci0g
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0KLSAgICBpZiAocG5hbWUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkJVRkZFUl9TSVpFICYmIHBuYW1lICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpCVUZGRVJfVVNBR0UpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0K
LSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEJ1ZmZlclBhcmFtZXRl
cml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpCVUZGRVJfU0laRSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7
Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVl
KSk7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRDb250ZXh0QXR0cmlidXRlcygpCi17Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgLy8gV2UgYWx3YXlz
IG5lZWQgdG8gcmV0dXJuIGEgbmV3IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgb2JqZWN0IHRvCi0g
ICAgLy8gcHJldmVudCB0aGUgdXNlciBmcm9tIG11dGF0aW5nIGFueSBjYWNoZWQgdmVyc2lvbi4K
LQotICAgIC8vIEFsc28sIHdlIG5lZWQgdG8gZW5mb3JjZSByZXF1ZXN0ZWQgdmFsdWVzIG9mICJm
YWxzZSIgZm9yIGRlcHRoCi0gICAgLy8gYW5kIHN0ZW5jaWwsIHJlZ2FyZGxlc3Mgb2YgdGhlIHBy
b3BlcnRpZXMgb2YgdGhlIHVuZGVybHlpbmcKLSAgICAvLyBHcmFwaGljc0NvbnRleHQzRCBvciBE
cmF3aW5nQnVmZmVyLgotICAgIFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1
dGVzID0gV2ViR0xDb250ZXh0QXR0cmlidXRlczo6Y3JlYXRlKG1fY29udGV4dC0+Z2V0Q29udGV4
dEF0dHJpYnV0ZXMoKSk7Ci0gICAgaWYgKCFtX2F0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgIGF0
dHJpYnV0ZXMtPnNldERlcHRoKGZhbHNlKTsKLSAgICBpZiAoIW1fYXR0cmlidXRlcy5zdGVuY2ls
KQotICAgICAgICBhdHRyaWJ1dGVzLT5zZXRTdGVuY2lsKGZhbHNlKTsKLSAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKSB7Ci0gICAgICAgIC8vIFRoZSBEcmF3aW5nQnVmZmVyIG9idGFpbnMgaXRzIHBh
cmFtZXRlcnMgZnJvbSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSwK
LSAgICAgICAgLy8gYnV0IGl0IG1ha2VzIGl0cyBvd24gZGV0ZXJtaW5hdGlvbiBvZiB3aGV0aGVy
IG11bHRpc2FtcGxpbmcgaXMgc3VwcG9ydGVkLgotICAgICAgICBhdHRyaWJ1dGVzLT5zZXRBbnRp
YWxpYXMobV9kcmF3aW5nQnVmZmVyLT5tdWx0aXNhbXBsZSgpKTsKLSAgICB9Ci0gICAgcmV0dXJu
IGF0dHJpYnV0ZXMucmVsZWFzZSgpOwotfQotCi1HQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEVycm9yKCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQot
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOwotICAgIHJldHVybiBt
X2NvbnRleHQtPmdldEVycm9yKCk7Ci19Ci0KLVdlYkdMRXh0ZW5zaW9uKiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKQotICAg
ICAgICAmJiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc2hh
ZGVyX3RleHR1cmVfbG9kIikgfHwgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9BUkJfc2hhZGVyX3RleHR1cmVfbG9kIikpKSB7Ci0gICAgICAgIGlmICghbV9leHRTaGFk
ZXJUZXh0dXJlTE9EKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOwotICAgICAgICAgICAg
bV9leHRTaGFkZXJUZXh0dXJlTE9EID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRTaGFkZXJUZXh0dXJl
TE9EPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9leHRTaGFkZXJUZXh0dXJl
TE9ELmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJ
VF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKQotICAgICAgICAmJiBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ry
b3BpYyIpKSB7Ci0gICAgICAgIGlmICghbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHsK
LSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJH
TF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKTsKLSAgICAgICAgICAgIG1fZXh0VGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWM+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2V4dFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3BpYy5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdD
YXNlKG5hbWUsICJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKQotICAgICAgICAmJiBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZl
cyIpKSB7Ci0gICAgICAgIGlmICghbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKSB7Ci0gICAgICAg
ICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzIik7Ci0gICAgICAgICAgICBtX29lc1N0YW5kYXJkRGVyaXZhdGl2
ZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+KHRoaXMpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMuZ2V0KCk7Ci0g
ICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfZmxvYXQi
KQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09F
U190ZXh0dXJlX2Zsb2F0IikpIHsKLSAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdCkgewot
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdM
X09FU190ZXh0dXJlX2Zsb2F0Iik7Ci0gICAgICAgICAgICBtX29lc1RleHR1cmVGbG9hdCA9IHN0
ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUZsb2F0Pih0aGlzKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbV9vZXNUZXh0dXJlRmxvYXQuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikKLSAgICAgICAgJiYg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9h
dF9saW5lYXIiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUZsb2F0TGluZWFyKSB7Ci0g
ICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xf
T0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIik7Ci0gICAgICAgICAgICBtX29lc1RleHR1cmVGbG9h
dExpbmVhciA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUZsb2F0TGluZWFyPih0aGlzKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIuZ2V0KCk7
Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdCIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0
cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpKSB7Ci0gICAgICAgIGlmICghbV9vZXNUZXh0
dXJlSGFsZkZsb2F0KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOwotICAgICAgICAgICAg
bV9vZXNUZXh0dXJlSGFsZkZsb2F0ID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNUZXh0dXJlSGFsZkZs
b2F0Pih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNUZXh0dXJlSGFsZkZs
b2F0LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190
ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKSB7
Ci0gICAgICAgIGlmICghbV9vZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyKSB7Ci0gICAgICAgICAg
ICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1
cmVfaGFsZl9mbG9hdF9saW5lYXIiKTsKLSAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhhbGZGbG9h
dExpbmVhciA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcj4odGhp
cyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVh
ci5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdmVy
dGV4X2FycmF5X29iamVjdCIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSkgewotICAgICAgICBpZiAo
IW1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpOwot
ICAgICAgICAgICAgbV9vZXNWZXJ0ZXhBcnJheU9iamVjdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VT
VmVydGV4QXJyYXlPYmplY3Q+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29l
c1ZlcnRleEFycmF5T2JqZWN0LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UobmFtZSwgIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKQotICAgICAgICAmJiBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKSkg
ewotICAgICAgICBpZiAoIW1fb2VzRWxlbWVudEluZGV4VWludCkgewotICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19lbGVtZW50X2lu
ZGV4X3VpbnQiKTsKLSAgICAgICAgICAgIG1fb2VzRWxlbWVudEluZGV4VWludCA9IHN0ZDo6bWFr
ZV91bmlxdWU8T0VTRWxlbWVudEluZGV4VWludD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIG1fb2VzRWxlbWVudEluZGV4VWludC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9sb3NlX2NvbnRleHQiKSkgewotICAgICAgICBpZiAo
IW1fd2ViZ2xMb3NlQ29udGV4dCkKLSAgICAgICAgICAgIG1fd2ViZ2xMb3NlQ29udGV4dCA9IHN0
ZDo6bWFrZV91bmlxdWU8V2ViR0xMb3NlQ29udGV4dD4odGhpcyk7Ci0gICAgICAgIHJldHVybiBt
X3dlYmdsTG9zZUNvbnRleHQuZ2V0KCk7Ci0gICAgfQotICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nh
c2UobmFtZSwgIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIikpCi0gICAgICAg
ICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkgewotICAgICAg
ICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFUQykKLSAgICAgICAgICAgIG1fd2ViZ2xD
b21wcmVzc2VkVGV4dHVyZUFUQyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQz4odGhpcyk7Ci0gICAgICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVB
VEMuZ2V0KCk7Ci0gICAgfQotICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJ
VF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKSkKLSAgICAgICAgJiYgV2ViR0xDb21w
cmVzc2VkVGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAgaWYgKCFtX3dl
YmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQykKLSAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZS
VEM+KHRoaXMpOwotICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMu
Z2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfY29t
cHJlc3NlZF90ZXh0dXJlX3MzdGMiKQotICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJl
UzNUQzo6c3VwcG9ydGVkKHRoaXMpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRU
ZXh0dXJlUzNUQykKLSAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMgPSBz
dGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPih0aGlzKTsKLSAgICAg
ICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMuZ2V0KCk7Ci0gICAgfQotICAg
IGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVwdGhfdGV4dHVyZSIpCi0gICAg
ICAgICYmIFdlYkdMRGVwdGhUZXh0dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkp
IHsKLSAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fZGVwdGhf
dGV4dHVyZSIpOwotICAgICAgICAgICAgbV93ZWJnbERlcHRoVGV4dHVyZSA9IHN0ZDo6bWFrZV91
bmlxdWU8V2ViR0xEZXB0aFRleHR1cmU+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBtX3dlYmdsRGVwdGhUZXh0dXJlLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UobmFtZSwgIldFQkdMX2RyYXdfYnVmZmVycyIpICYmIHN1cHBvcnRzRHJhd0J1ZmZlcnMo
KSkgewotICAgICAgICBpZiAoIW1fd2ViZ2xEcmF3QnVmZmVycykgewotICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9kcmF3X2J1ZmZl
cnMiKTsKLSAgICAgICAgICAgIG1fd2ViZ2xEcmF3QnVmZmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8
V2ViR0xEcmF3QnVmZmVycz4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fd2Vi
Z2xEcmF3QnVmZmVycy5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5h
bWUsICJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIikgJiYgQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1
cHBvcnRlZCh0aGlzKSkgewotICAgICAgICBpZiAoIW1fYW5nbGVJbnN0YW5jZWRBcnJheXMpIHsK
LSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJH
TF9BTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7Ci0gICAgICAgICAgICBtX2FuZ2xlSW5zdGFuY2Vk
QXJyYXlzID0gc3RkOjptYWtlX3VuaXF1ZTxBTkdMRUluc3RhbmNlZEFycmF5cz4odGhpcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fYW5nbGVJbnN0YW5jZWRBcnJheXMuZ2V0KCk7Ci0g
ICAgfQotICAgIGlmIChhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkpIHsKLSAgICAgICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIikpIHsK
LSAgICAgICAgICAgIGlmICghbV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQotICAgICAgICAgICAg
ICAgIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZWJ1
Z1JlbmRlcmVySW5mbz4odGhpcyk7Ci0gICAgICAgICAgICByZXR1cm4gbV93ZWJnbERlYnVnUmVu
ZGVyZXJJbmZvLmdldCgpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShuYW1lLCAiV0VCR0xfZGVidWdfc2hhZGVycyIpCi0gICAgICAgICAgICAmJiBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3Nv
dXJjZSIpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fd2ViZ2xEZWJ1Z1NoYWRlcnMpCi0gICAgICAg
ICAgICAgICAgbV93ZWJnbERlYnVnU2hhZGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZWJ1
Z1NoYWRlcnM+KHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMu
Z2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0g
cG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQ
YXJhbWV0ZXJzKCJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCB0YXJnZXQsIGF0
dGFjaG1lbnQpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0KLSAgICBpZiAoIW1f
ZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgIm5vIGZyYW1lYnVm
ZmVyIGJvdW5kIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0KLSAg
ICBXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldEF0
dGFjaG1lbnRPYmplY3QoYXR0YWNobWVudCk7Ci0gICAgaWYgKCFvYmplY3QpIHsKLSAgICAgICAg
aWYgKHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09C
SkVDVF9UWVBFKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhHcmFwaGljc0NvbnRl
eHQzRDo6Tk9ORSk7Ci0gICAgICAgIC8vIE9wZW5HTCBFUyAyLjAgc3BlY2lmaWVzIElOVkFMSURf
RU5VTSBpbiB0aGlzIGNhc2UsIHdoaWxlIGRlc2t0b3AgR0wKLSAgICAgICAgLy8gc3BlY2lmaWVz
IElOVkFMSURfT1BFUkFUSU9OLgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOwotICAgIH0KLQotICAgIEFTU0VSVChvYmplY3QtPmlzVGV4dHVyZSgpIHx8IG9iamVjdC0+
aXNSZW5kZXJidWZmZXIoKSk7Ci0gICAgaWYgKG9iamVjdC0+aXNUZXh0dXJlKCkpIHsKLSAgICAg
ICAgc3dpdGNoIChwbmFtZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRSk7Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Ci0gICAgICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihyZWludGVy
cHJldF9jYXN0PFdlYkdMVGV4dHVyZSo+KG9iamVjdCkpKTsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgotICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVf
Q1VCRV9NQVBfRkFDRToKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBHQzNEaW50IHZh
bHVlID0gMDsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNo
bWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHRleHR1cmUgYXR0YWNobWVudCIpOwotICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgc3dpdGNoIChwbmFtZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgotICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKTsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFN
RToKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRl
cmJ1ZmZlcj4ocmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCkpKTsK
LSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgcmVuZGVyYnVmZmVyIGF0dGFjaG1lbnQi
KTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKLSAgICBjb25zdCBpbnQgaW50WmVybyA9IDA7Ci0gICAgc3dpdGNoIChwbmFt
ZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9URVhUVVJFOgotICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRToKLSAgICAgICAgcmV0dXJuIGdl
dFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xG
bG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpB
TFBIQV9CSVRTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPihtX2JvdW5kQXJyYXlCdWZm
ZXIpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKLSAgICAgICAgcmV0dXJu
IGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EX0NPTE9SOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9EU1RfQUxQSEE6Ci0g
ICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX1JHQjoKLSAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RF9FUVVBVElPTl9BTFBIQToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9FUVVBVElPTl9SR0I6
Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfU1JDX0FMUEhBOgotICAgICAgICByZXR1cm4gZ2V0
VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EX1NSQ19SR0I6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxVRV9CSVRTOgotICAgICAgICBy
ZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpDT0xPUl9DTEVBUl9WQUxVRToKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVN
QVNLOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhVaW50MzJBcnJheTo6Y3JlYXRlKG1fY29tcHJlc3Nl
ZFRleHR1cmVGb3JtYXRzLmRhdGEoKSwgbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuc2l6ZSgp
KSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFOgotICAgICAgICByZXR1
cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6Q1VMTF9GQUNFX01PREU6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9HUkFNOgot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPihtX2N1
cnJlbnRQcm9ncmFtKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQklUUzoK
LSAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLmRlcHRo
KQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKLSAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQ0xFQVJfVkFMVUU6Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfRlVOQzoKLSAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9SQU5HRToKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVDoK
LSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xl
YW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUjoK
LSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPihtX2ZyYW1lYnVmZmVyQmluZGluZykpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0ZBQ0U6Ci0gICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JFRU5fQklUUzoK
LSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TElORV9XSURUSDoKLSAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVS
RV9JTUFHRV9VTklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToKLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JF
TkRFUkJVRkZFUl9TSVpFOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzoKLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRToKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVDVE9S
UzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTOgotICAgICAgICByZXR1cm4gZ2V0SW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVY
X1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNU
T1JTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoKLSAgICAgICAgcmV0dXJuIGdldFdl
YkdMSW50QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok5VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6Ci0gICAgICAgIC8vIEZJWE1FOiBzaG91bGQgd2Ug
YWx3YXlzIHJldHVybiAwIGZvciB0aGlzPwotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoKLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRkFDVE9SOgotICAgICAgICByZXR1cm4gZ2V0RmxvYXRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZG
U0VUX0ZJTEw6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9VTklUUzoKLSAgICAgICAg
cmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpSRURfQklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4obV9yZW5k
ZXJidWZmZXJCaW5kaW5nKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSRVI6
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oU3RyaW5nKCJXZWJLaXQgV2ViR0wiKSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0JVRkZFUlM6Ci0gICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNB
TVBMRV9DT1ZFUkFHRV9JTlZFUlQ6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfVkFM
VUU6Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0FNUExFUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6Ci0gICAg
ICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Q6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xB
TkdVQUdFX1ZFUlNJT046Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oIldlYkdMIEdMU0wg
RVMgMS4wICgiICsgbV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlNIQURJ
TkdfTEFOR1VBR0VfVkVSU0lPTikgKyAiKSIpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfQkFDS19GQUlMOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19GVU5D
OgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6Ci0gICAg
ICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoKLSAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUkVGOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVy
KHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfVkFMVUVf
TUFTSzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgotICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQklUUzoKLSAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiAhbV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKGludFplcm8pOwotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0NMRUFSX1ZBTFVFOgotICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0ZBSUw6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GVU5DOgotICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUEFTU19ERVBUSF9GQUlMOgotICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfUEFTU19ERVBUSF9QQVNTOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
UkVGOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1ZB
TFVFX01BU0s6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9XUklURU1BU0s6Ci0gICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1VCUElYRUxfQklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HXzJE
OgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiht
X3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nKSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihtX3RleHR1
cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgotICAgICAgICByZXR1
cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlBBQ0tfRkxJUF9ZX1dFQkdMOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNr
RmxpcFkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9B
TFBIQV9XRUJHTDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNF
X0NPTlZFUlNJT05fV0VCR0w6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tD
b2xvcnNwYWNlQ29udmVyc2lvbik7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVORE9S
OgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IikpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlNJT046Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oIldlYkdMIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNE
OjpWRVJTSU9OKSArICIpIik7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6
Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6IC8v
IE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcwotICAgICAgICBpZiAobV9vZXNTdGFuZGFyZERlcml2
YXRpdmVzKQotICAgICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4dGVu
c2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVMpOwotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZl
cyBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2Fz
ZSBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9SRU5ERVJFUl9XRUJHTDoKLSAgICAg
ICAgaWYgKG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKLSAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8obV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVS
KSk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVi
dWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7Ci0gICAgY2FzZSBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9WRU5ET1Jf
V0VCR0w6Ci0gICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCi0gICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4
dDNEOjpWRU5ET1IpKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
LCBXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VkVSVEVYX0FSUkFZX0JJ
TkRJTkdfT0VTOiAvLyBPRVNfdmVydGV4X2FycmF5X29iamVjdAotICAgICAgICBpZiAobV9vZXNW
ZXJ0ZXhBcnJheU9iamVjdCkgewotICAgICAgICAgICAgaWYgKCFtX2JvdW5kVmVydGV4QXJyYXlP
YmplY3QtPmlzRGVmYXVsdE9iamVjdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPihtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QpKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICAg
ICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU192ZXJ0
ZXhfYXJyYXlfb2JqZWN0IG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlf
RVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKLSAgICAgICAgaWYgKG1fZXh0
VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKQotICAgICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVk
SW50UGFyYW1ldGVyKEV4dGVuc2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhU
KTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNf
RVhUOiAvLyBFWFRfZHJhd19idWZmZXJzIEJFR0lOCi0gICAgICAgIGlmIChtX3dlYmdsRHJhd0J1
ZmZlcnMpCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGdldE1heENvbG9yQXR0YWNo
bWVudHMoKSk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VC
R0xfZHJhd19idWZmZXJzIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQ6Ci0gICAg
ICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMpCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKGdldE1heERyYXdCdWZmZXJzKCkpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFy
YW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOwotICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKG1fd2ViZ2xE
cmF3QnVmZmVycwotICAgICAgICAgICAgJiYgcG5hbWUgPj0gRXh0ZW5zaW9uczNEOjpEUkFXX0JV
RkZFUjBfRVhUCi0gICAgICAgICAgICAmJiBwbmFtZSA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihF
eHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMF9FWFQgKyBnZXRNYXhEcmF3QnVmZmVycygpKSkgewot
ICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FOwotICAg
ICAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgICAgIHZhbHVl
ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldERyYXdCdWZmZXIocG5hbWUpOwotICAgICAgICAg
ICAgZWxzZSAvLyBlbXVsYXRlZCBiYWNrYnVmZmVyCi0gICAgICAgICAgICAgICAgdmFsdWUgPSBt
X2JhY2tEcmF3QnVmZmVyOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7
Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFt
KiBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KCJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgcHJvZ3JhbSkpCi0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKLQotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIHN3
aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RBVFVT
OgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHByb2dyYW0tPmlzRGVsZXRlZCgpKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWQUxJREFURV9TVEFUVVM6Ci0gICAgICAgIG1fY29u
dGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUzoKLSAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFUVEFDSEVEX1NIQURFUlM6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0UHJv
Z3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFD
VElWRV9BVFRSSUJVVEVTOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklG
T1JNUzoKLSAgICAgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291bnQo
b2JqZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyh2YWx1ZSk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFByb2dyYW1QYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgfQotfQotCi1TdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFt
SW5mb0xvZyhXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0
UHJvZ3JhbUluZm9Mb2ciLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuICIiOwotICAgIHJldHVy
biBlbnN1cmVOb3ROdWxsKG1fY29udGV4dC0+Z2V0UHJvZ3JhbUluZm9Mb2cob2JqZWN0T3JaZXJv
KHByb2dyYW0pKSk7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAg
ICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotICAgIGlmICghbV9yZW5kZXJidWZmZXJCaW5kaW5n
IHx8ICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlciIsICJubyByZW5kZXJidWZmZXIgYm91bmQiKTsKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLQotICAgIGlmIChtX3JlbmRlcmJ1ZmZlckJpbmRp
bmctPmdldEludGVybmFsRm9ybWF0KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5D
SUwKLSAgICAgICAgJiYgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+aXNWYWxpZCgpKSB7Ci0gICAg
ICAgIEFTU0VSVCghaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7Ci0gICAgICAgIGludCB2YWx1
ZSA9IDA7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSX1dJRFRIOgotICAgICAgICAgICAgdmFsdWUgPSBtX3JlbmRl
cmJ1ZmZlckJpbmRpbmctPmdldFdpZHRoKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKLSAgICAgICAgICAg
IHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRIZWlnaHQoKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVE
X1NJWkU6Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9HUkVF
Tl9TSVpFOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQkxV
RV9TSVpFOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQ
SEFfU0laRToKLSAgICAgICAgICAgIHZhbHVlID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKLSAg
ICAgICAgICAgIHZhbHVlID0gMjQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1NURU5DSUxfU0laRToKLSAgICAgICAgICAg
IHZhbHVlID0gODsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgotICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkp
OwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci0gICAg
fQotCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSEVJR0hUOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUl9SRURfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVJfQkxVRV9TSVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUl9BTFBIQV9TSVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUl9ERVBUSF9TSVpFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9TVEVOQ0lMX1NJWkU6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1l
dGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byh2YWx1ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVS
TkFMX0ZPUk1BVDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJp
bmRpbmctPmdldEludGVybmFsRm9ybWF0KCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJi
dWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgR0MzRGVu
dW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgi
Z2V0U2hhZGVyUGFyYW1ldGVyIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOwotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RBVFVTOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHNoYWRlci0+aXNEZWxldGVkKCkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTVBJTEVfU1RBVFVTOgotICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVj
dE9yWmVybyhzaGFkZXIpLCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNIQURFUl9UWVBFOgotICAgICAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9iamVjdE9y
WmVybyhzaGFkZXIpLCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dFNoYWRlclBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci19Ci0KLVN0cmluZyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKCF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJnZXRTaGFkZXJJbmZvTG9nIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuICIi
OwotICAgIHJldHVybiBlbnN1cmVOb3ROdWxsKG1fY29udGV4dC0+Z2V0U2hhZGVySW5mb0xvZyhv
YmplY3RPclplcm8oc2hhZGVyKSkpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lz
aW9uRm9ybWF0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFNoYWRlclByZWNpc2lvbkZvcm1h
dChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHN3aXRjaCAoc2hhZGVy
VHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVI6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hBREVSOgotICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQgc2hh
ZGVyIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIHN3aXRjaCAo
cHJlY2lzaW9uVHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxPV19GTE9BVDoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNRURJVU1fRkxPQVQ6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6SElHSF9GTE9BVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpM
T1dfSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1FRElVTV9JTlQ6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9JTlQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQiLCAiaW52YWxpZCBwcmVjaXNpb24gdHlw
ZSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBHQzNEaW50IHJhbmdl
WzJdID0gezAsIDB9OwotICAgIEdDM0RpbnQgcHJlY2lzaW9uID0gMDsKLSAgICBtX2NvbnRleHQt
PmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5n
ZSwgJnByZWNpc2lvbik7Ci0gICAgcmV0dXJuIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0Ojpj
cmVhdGUocmFuZ2VbMF0sIHJhbmdlWzFdLCBwcmVjaXNpb24pOwotfQotCi1TdHJpbmcgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgaWYgKCF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQotICAgICAgICBy
ZXR1cm4gIiI7Ci0gICAgcmV0dXJuIGVuc3VyZU5vdE51bGwoc2hhZGVyLT5nZXRTb3VyY2UoKSk7
Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVk
RXh0ZW5zaW9ucygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OwotCi0gICAgaWYgKG1f
aXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLQotICAg
IGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJl
X2Zsb2F0IikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2Zsb2F0Iik7Ci0g
ICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1
cmVfZmxvYXRfbGluZWFyIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2Zs
b2F0X2xpbmVhciIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9y
dHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgi
T0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIikpCi0gICAg
ICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7Ci0gICAg
aWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3N0YW5kYXJk
X2Rlcml2YXRpdmVzIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcyIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB8fCBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+c3VwcG9ydHMoIkdMX0FSQl9zaGFkZXJfdGV4dHVyZV9sb2QiKSkKLSAgICAgICAgcmVzdWx0
LmFwcGVuZCgiRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpOwotICAgIGlmIChtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3Bp
YyIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2Fu
aXNvdHJvcGljIik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0
cygiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgi
T0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpCi0gICAgICAgIHJl
c3VsdC5hcHBlbmQoIk9FU19lbGVtZW50X2luZGV4X3VpbnQiKTsKLSAgICByZXN1bHQuYXBwZW5k
KCJXRUJHTF9sb3NlX2NvbnRleHQiKTsKLSAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qzo6c3VwcG9ydGVkKHRoaXMpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJLSVRfV0VCR0xf
Y29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpOwotICAgIGlmIChXZWJHTENvbXByZXNzZWRUZXh0dXJl
UFZSVEM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dF
QkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIpOwotICAgIGlmIChXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUzNUQzo6c3VwcG9ydGVkKHRoaXMpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJH
TF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpOwotICAgIGlmIChXZWJHTERlcHRoVGV4dHVyZTo6
c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJX
RUJHTF9kZXB0aF90ZXh0dXJlIik7Ci0gICAgaWYgKHN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZHJhd19idWZmZXJzIik7Ci0gICAgaWYgKEFOR0xF
SW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQo
IkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKTsKLQotICAgIGlmIChhbGxvd1ByaXZpbGVnZWRFeHRl
bnNpb25zKCkpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBw
b3J0cygiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIikpCi0gICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJXRUJHTF9kZWJ1Z19zaGFkZXJzIik7Ci0gICAgICAgIHJlc3VsdC5hcHBl
bmQoIldFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8iKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRUZXhQYXJh
bWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgV2ViR0xUZXh0dXJlKiB0
ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJnZXRUZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZh
bHNlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAg
IEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfV1JBUF9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9U
OgotICAgICAgICBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2
YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQg
aW50Pih2YWx1ZSkpOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpURVhUVVJFX01BWF9BTklTT1RS
T1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCi0gICAgICAgIGlmICht
X2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykgewotICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImdldFRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRf
dGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0g
ICAgfQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3Jt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIHVuaWZv
cm1Mb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0
KCJnZXRVbmlmb3JtIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
LSAgICBpZiAoIXVuaWZvcm1Mb2NhdGlvbiB8fCB1bmlmb3JtTG9jYXRpb24tPnByb2dyYW0oKSAh
PSBwcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImdldFVuaWZvcm0iLCAibm8gdW5pZm9ybWxvY2F0aW9uIG9y
IG5vdCB2YWxpZCBmb3IgdGhpcyBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKLSAgICB9Ci0gICAgR0MzRGludCBsb2NhdGlvbiA9IHVuaWZvcm1Mb2NhdGlvbi0+bG9j
YXRpb24oKTsKLQotICAgIEdDM0RlbnVtIGJhc2VUeXBlOwotICAgIHVuc2lnbmVkIGxlbmd0aDsK
LSAgICBzd2l0Y2ggKHVuaWZvcm1Mb2NhdGlvbi0+dHlwZSgpKSB7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6Qk9PTDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
Qk9PTDsKLSAgICAgICAgbGVuZ3RoID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6Qk9PTF9WRUMyOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpCT09MOwotICAgICAgICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzM6Ci0gICAgICAgIGJhc2VUeXBlID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDM7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDNDoKLSAgICAgICAgYmFzZVR5
cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKLSAgICAgICAgbGVuZ3RoID0gNDsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgotICAgICAgICBiYXNl
VHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMyOgotICAgICAg
ICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7Ci0gICAgICAgIGxlbmd0aCA9IDI7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMzOgot
ICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7Ci0gICAgICAgIGxlbmd0
aCA9IDM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9W
RUM0OgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7Ci0gICAgICAg
IGxlbmd0aCA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAg
ICAgICAgbGVuZ3RoID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVRfVkVDMjoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzM6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSAzOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUM0OgotICAgICAgICBiYXNlVHlwZSA9
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVuZ3RoID0gNDsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfTUFUMjoKLSAgICAgICAg
YmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDM6
Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBs
ZW5ndGggPSA5OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
TE9BVF9NQVQ0OgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsK
LSAgICAgICAgbGVuZ3RoID0gMTY7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNBTVBMRVJfMkQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExF
Ul9DVUJFOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7Ci0gICAg
ICAgIGxlbmd0aCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8v
IENhbid0IGhhbmRsZSB0aGlzIHR5cGUKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVuaGFuZGxlZCB0eXBl
Iik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0gICAgc3dpdGNoIChi
YXNlVHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiB7Ci0gICAgICAg
IEdDM0RmbG9hdCB2YWx1ZVsxNl0gPSB7MH07Ci0gICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VY
VFN1cHBvcnRlZCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRu
VW5pZm9ybWZ2RVhUKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIDE2ICogc2l6ZW9m
KEdDM0RmbG9hdCksIHZhbHVlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRVbmlmb3JtZnYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOwot
ICAgICAgICBpZiAobGVuZ3RoID09IDEpCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KHZhbHVlWzBdKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNy
ZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OklOVDogewotICAgICAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OwotICAgICAgICBpZiAobV9p
c1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+Z2V0blVuaWZvcm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9u
LCA0ICogc2l6ZW9mKEdDM0RpbnQpLCB2YWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0VW5pZm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24s
IHZhbHVlKTsKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyh2YWx1ZVswXSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJB
cnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6Qk9PTDogewotICAgICAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OwotICAgICAg
ICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpCi0gICAgICAgICAgICBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+Z2V0blVuaWZvcm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSks
IGxvY2F0aW9uLCA0ICogc2l6ZW9mKEdDM0RpbnQpLCB2YWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwg
bG9jYXRpb24sIHZhbHVlKTsKLSAgICAgICAgaWYgKGxlbmd0aCA+IDEpIHsKLSAgICAgICAgICAg
IGJvb2wgYm9vbFZhbHVlWzE2XSA9IHswfTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9
IDA7IGogPCBsZW5ndGg7IGorKykKLSAgICAgICAgICAgICAgICBib29sVmFsdWVbal0gPSBzdGF0
aWNfY2FzdDxib29sPih2YWx1ZVtqXSk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KGJvb2xWYWx1ZSwgbGVuZ3RoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlWzBdKSk7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgZ2V0IGhlcmUs
IHNvbWV0aGluZyB3ZW50IHdyb25nIGluIG91ciB1bmZvcnR1bmF0ZWx5IGNvbXBsZXggbG9naWMg
YWJvdmUKLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImdldFVuaWZvcm0iLCAidW5rbm93biBlcnJvciIpOwotICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJH
TE9iamVjdCgiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGlmICghdmFsaWRhdGVMb2NhdGlvbkxlbmd0aCgiZ2V0VW5pZm9ybUxvY2F0
aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghdmFsaWRhdGVT
dHJpbmcoImdldFVuaWZvcm1Mb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgaWYgKCFwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5p
Zm9ybUxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOwotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0gICAgR0MzRGludCB1bmlmb3JtTG9jYXRpb24gPSBtX2NvbnRleHQtPmdl
dFVuaWZvcm1Mb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwotICAgIGlmICh1
bmlmb3JtTG9jYXRpb24gPT0gLTEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgR0Mz
RGludCBhY3RpdmVVbmlmb3JtcyA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0
aXZlU3ltYm9sQ291bnQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHQzRDo6
QUNUSVZFX1VOSUZPUk1TLCAmYWN0aXZlVW5pZm9ybXMpOwotICAgIGZvciAoR0MzRGludCBpID0g
MDsgaSA8IGFjdGl2ZVVuaWZvcm1zOyBpKyspIHsKLSAgICAgICAgQWN0aXZlSW5mbyBpbmZvOwot
ICAgICAgICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShvYmplY3RPclplcm8ocHJv
Z3JhbSksIGksIGluZm8pKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIC8v
IFN0cmlwICJbMF0iIGZyb20gdGhlIG5hbWUgaWYgaXQncyBhbiBhcnJheS4KLSAgICAgICAgaWYg
KGluZm8ubmFtZS5lbmRzV2l0aCgiWzBdIikpCi0gICAgICAgICAgICBpbmZvLm5hbWUgPSBpbmZv
Lm5hbWUubGVmdChpbmZvLm5hbWUubGVuZ3RoKCkgLSAzKTsKLSAgICAgICAgLy8gSWYgaXQncyBh
biBhcnJheSwgd2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggZWFjaCBlbGVtZW50LCBhcHBlbmRp
bmcgIltpbmRleF0iIHRvIHRoZSBuYW1lLgotICAgICAgICBmb3IgKEdDM0RpbnQgaW5kZXggPSAw
OyBpbmRleCA8IGluZm8uc2l6ZTsgKytpbmRleCkgewotICAgICAgICAgICAgU3RyaW5nIHVuaWZv
cm1OYW1lID0gaW5mby5uYW1lICsgIlsiICsgU3RyaW5nOjpudW1iZXIoaW5kZXgpICsgIl0iOwot
Ci0gICAgICAgICAgICBpZiAobmFtZSA9PSB1bmlmb3JtTmFtZSB8fCBuYW1lID09IGluZm8ubmFt
ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xVbmlmb3JtTG9jYXRpb246OmNyZWF0ZShw
cm9ncmFtLCB1bmlmb3JtTG9jYXRpb24sIGluZm8udHlwZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFZlcnRleEF0dHJpYihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0KLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0KLSAg
ICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VmVydGV4QXR0cmli
IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
Ci0gICAgfQotCi0gICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0
cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRy
aWJTdGF0ZShpbmRleCk7Ci0KLSAgICBpZiAobV9hbmdsZUluc3RhbmNlZEFycmF5cyAmJiBwbmFt
ZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xF
KQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLmRpdmlzb3IpOwotCi0gICAgc3dp
dGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJf
QVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgIGlmICgoIWlzR0xFUzJDb21wbGlhbnQoKSAm
JiAhaW5kZXggJiYgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0
ZSgwKS5idWZmZXJCaW5kaW5nID09IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikKLSAgICAgICAgICAg
IHx8ICFzdGF0ZS5idWZmZXJCaW5kaW5nCi0gICAgICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmlu
ZGluZy0+b2JqZWN0KCkpCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4oc3RhdGUuYnVm
ZmVyQmluZGluZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJf
QVJSQVlfRU5BQkxFRDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5lbmFibGVk
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX05PUk1B
TElaRUQ6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUubm9ybWFsaXplZCk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLnNpemUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHN0YXRlLm9yaWdpbmFsU3RyaWRlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1RZUEU6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oc3RhdGUudHlwZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9WRVJU
RVhfQVRUUklCOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3Jl
YXRlKG1fdmVydGV4QXR0cmliVmFsdWVbaW5kZXhdLnZhbHVlLCA0KSk7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImdldFZlcnRleEF0dHJpYiIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci19Ci0KLWxvbmcgbG9uZyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVu
dW0gcG5hbWUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgR0MzRHNpemVpcHRyIHJlc3VsdCA9IG1fY29udGV4dC0+Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KGluZGV4LCBwbmFtZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcg
bG9uZz4ocmVzdWx0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmhpbnQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBib29sIGlzVmFsaWQgPSBmYWxzZTsKLSAg
ICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRF
X01JUE1BUF9ISU5UOgotICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VT
OiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKLSAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmRE
ZXJpdmF0aXZlcykKLSAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0gICAgaWYgKCFpc1ZhbGlkKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJoaW50IiwgImludmFsaWQgdGFyZ2V0Iik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5oaW50KHRhcmdldCwgbW9k
ZSk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNCdWZmZXIoV2Vi
R0xCdWZmZXIqIGJ1ZmZlcikKLXsKLSAgICBpZiAoIWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFidWZmZXItPmhhc0V2ZXJC
ZWVuQm91bmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5p
c0J1ZmZlcihidWZmZXItPm9iamVjdCgpKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmlzQ29udGV4dExvc3QoKSBjb25zdAotewotICAgIHJldHVybiBtX2NvbnRleHRMb3N0Owot
fQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdE9yUGVuZGluZygp
Ci17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbiAmJiAhbV9oYXNSZXF1ZXN0
ZWRQb2xpY3lSZXNvbHV0aW9uKSB7Ci0gICAgICAgIExPRyhXZWJHTCwgIkNvbnRleHQgaXMgYmVp
bmcgdXNlZC4gQXR0ZW1wdCB0byByZXNvbHZlIHRoZSBwb2xpY3kuIik7Ci0gICAgICAgIERvY3Vt
ZW50JiBkb2N1bWVudCA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnRvcERvY3VtZW50KCk7Ci0gICAg
ICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudC5wYWdlKCk7Ci0gICAgICAgIGlmIChwYWdlICYmICFk
b2N1bWVudC51cmwoKS5pc0xvY2FsRmlsZSgpKQotICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1l
KCkubG9hZGVyKCkuY2xpZW50KCkucmVzb2x2ZVdlYkdMUG9saWN5Rm9yVVJMKGRvY3VtZW50LnVy
bCgpKTsKLSAgICAgICAgLy8gRklYTUU6IFdlIGRvbid0IGN1cnJlbnRseSBkbyBhbnl0aGluZyB3
aXRoIHRoZSByZXN1bHQgZnJvbSByZXNvbHV0aW9uLiBBIG1vcmUKLSAgICAgICAgLy8gY29tcGxl
dGUgaW1wbGVtZW50YXRpb24gbWlnaHQgdHJ5IHRvIGNvbnN0cnVjdCBhIHJlYWwgY29udGV4dCwg
ZXRjIGFuZCBwcm9jZWVkCi0gICAgICAgIC8vIHdpdGggbm9ybWFsIG9wZXJhdGlvbi4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTEyMgotICAg
ICAgICBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24gPSB0cnVlOwotICAgIH0KLQotICAg
IHJldHVybiBtX2NvbnRleHRMb3N0IHx8IG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbjsKLX0K
LQotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0VuYWJsZWQoR0MzRGVudW0g
Y2FwKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2Fw
YWJpbGl0eSgiaXNFbmFibGVkIiwgY2FwKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGNh
cCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKQotICAgICAgICByZXR1cm4gbV9z
dGVuY2lsRW5hYmxlZDsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5pc0VuYWJsZWQoY2FwKTsKLX0K
LQotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0ZyYW1lYnVmZmVyKFdlYkdM
RnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyKQotewotICAgIGlmICghZnJhbWVidWZmZXIgfHwgaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghZnJh
bWVidWZmZXItPmhhc0V2ZXJCZWVuQm91bmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBy
ZXR1cm4gbV9jb250ZXh0LT5pc0ZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyLT5vYmplY3QoKSk7Ci19
Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNQcm9ncmFtKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSkKLXsKLSAgICBpZiAoIXByb2dyYW0gfHwgaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRleHQtPmlzUHJv
Z3JhbShwcm9ncmFtLT5vYmplY3QoKSk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikK
LXsKLSAgICBpZiAoIXJlbmRlcmJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFyZW5kZXJidWZmZXItPmhhc0V2ZXJCZWVuQm91
bmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5pc1JlbmRl
cmJ1ZmZlcihyZW5kZXJidWZmZXItPm9iamVjdCgpKTsKLX0KLQotR0MzRGJvb2xlYW4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojppc1NoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQotewotICAgIGlm
ICghc2hhZGVyIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5pc1NoYWRlcihzaGFkZXItPm9iamVjdCgpKTsKLX0K
LQotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleHR1cmUoV2ViR0xUZXh0
dXJlKiB0ZXh0dXJlKQotewotICAgIGlmICghdGV4dHVyZSB8fCBpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCF0ZXh0dXJlLT5oYXNFdmVyQmVl
bkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNU
ZXh0dXJlKHRleHR1cmUtPm9iamVjdCgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+bGluZVdpZHRoKHdp
ZHRoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmxpbmtQcm9ncmFtKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdM
T2JqZWN0KCJsaW5rUHJvZ3JhbSIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgV2ViR0xTaGFkZXIqIHZlcnRleFNoYWRl
ciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
U0hBREVSKTsKLSAgICAgICAgV2ViR0xTaGFkZXIqIGZyYWdtZW50U2hhZGVyID0gcHJvZ3JhbS0+
Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUik7Ci0g
ICAgICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlzVmFsaWQoKSB8fCAh
ZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyLT5pc1ZhbGlkKCkgfHwgIW1fY29udGV4
dC0+cHJlY2lzaW9uc01hdGNoKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIpLCBvYmplY3RPclpl
cm8oZnJhZ21lbnRTaGFkZXIpKSB8fCAhbV9jb250ZXh0LT5jaGVja1ZhcnlpbmdzUGFja2luZyhv
YmplY3RPclplcm8odmVydGV4U2hhZGVyKSwgb2JqZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVyKSkp
IHsKLSAgICAgICAgICAgIHByb2dyYW0tPnNldExpbmtTdGF0dXMoZmFsc2UpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5saW5rUHJvZ3Jh
bShvYmplY3RPclplcm8ocHJvZ3JhbSkpOwotICAgIHByb2dyYW0tPmluY3JlYXNlTGlua0NvdW50
KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwaXhlbFN0b3JlaShHQzNEZW51
bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOUEFDS19GTElQX1lfV0VCR0w6Ci0gICAgICAgIG1fdW5wYWNrRmxp
cFkgPSBwYXJhbTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5QQUNLX1BSRU1VTFRJUExZX0FMUEhBX1dFQkdMOgotICAgICAgICBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGEgPSBwYXJhbTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoKLSAgICAgICAgaWYgKHBh
cmFtID09IEdyYXBoaWNzQ29udGV4dDNEOjpCUk9XU0VSX0RFRkFVTFRfV0VCR0wgfHwgcGFyYW0g
PT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpCi0gICAgICAgICAgICBtX3VucGFja0NvbG9yc3Bh
Y2VDb252ZXJzaW9uID0gc3RhdGljX2Nhc3Q8R0MzRGVudW0+KHBhcmFtKTsKLSAgICAgICAgZWxz
ZSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBVTlBBQ0tf
Q09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19B
TElHTk1FTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoK
LSAgICAgICAgaWYgKHBhcmFtID09IDEgfHwgcGFyYW0gPT0gMiB8fCBwYXJhbSA9PSA0IHx8IHBh
cmFtID09IDgpIHsKLSAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UEFDS19BTElHTk1FTlQpCi0gICAgICAgICAgICAgICAgbV9wYWNrQWxpZ25tZW50ID0gcGFyYW07
Ci0gICAgICAgICAgICBlbHNlIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
OgotICAgICAgICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50ID0gcGFyYW07Ci0gICAgICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7Ci0gICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBhbGlnbm1lbnQi
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cG9s
eWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4
dC0+cG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJh
eUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIER1ZSB0byBXZWJHTCdz
IHNhbWUtb3JpZ2luIHJlc3RyaWN0aW9ucywgaXQgaXMgbm90IHBvc3NpYmxlIHRvCi0gICAgLy8g
dGFpbnQgdGhlIG9yaWdpbiB1c2luZyB0aGUgV2ViR0wgQVBJLgotICAgIEFTU0VSVChjYW52YXMo
KS0+b3JpZ2luQ2xlYW4oKSk7Ci0gICAgLy8gVmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycy4KLSAg
ICBpZiAoIXBpeGVscykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgInJlYWRQaXhlbHMiLCAibm8gZGVzdGluYXRpb24gQXJyYXlC
dWZmZXJWaWV3Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3dpdGNoIChmb3JtYXQp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKLSAgICAg
ICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCBmb3JtYXQi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJl
YWRQaXhlbHMiLCAiaW52YWxpZCB0eXBlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aWYgKGZvcm1hdCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSB8fCB0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiZm9ybWF0
IG5vdCBSR0JBIG9yIHR5cGUgbm90IFVOU0lHTkVEX0JZVEUiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICAvLyBWYWxpZGF0ZSBhcnJheSB0eXBlIGFnYWluc3QgcGl4ZWwgdHlwZS4KLSAg
ICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVh
ZFBpeGVscyIsICJBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21w
bGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmlu
ZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZy
ZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCByZWFzb24pOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIENhbGN1bGF0ZSBhcnJheSBzaXplLCB0YWtpbmcg
aW50byBjb25zaWRlcmF0aW9uIG9mIFBBQ0tfQUxJR05NRU5ULgotICAgIHVuc2lnbmVkIGludCB0
b3RhbEJ5dGVzUmVxdWlyZWQgPSAwOwotICAgIHVuc2lnbmVkIGludCBwYWRkaW5nID0gMDsKLSAg
ICBpZiAoIW1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKSB7Ci0gICAgICAgIEdDM0RlbnVtIGVy
cm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdp
ZHRoLCBoZWlnaHQsIG1fcGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgJnBhZGRp
bmcpOwotICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgInJlYWRQaXhlbHMiLCAiaW52
YWxpZCBkaW1lbnNpb25zIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgbGFyZ2UgZW5vdWdoIGZv
ciBkaW1lbnNpb25zIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMtPmJhc2VB
ZGRyZXNzKCk7Ci0KLSAgICB7Ci0gICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmlu
ZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwot
ICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpCi0gICAgICAgICAgICBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+cmVhZG5QaXhlbHNFWFQoeCwgeSwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMtPmJ5dGVMZW5ndGgoKSwgZGF0YSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIGRhdGEpOwotICAgIH0KLQotI2lmIE9TKERBUldJTikKLSAgICBpZiAo
bV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIC8vIHdlIGhhdmVuJ3QgY29tcHV0ZWQgcGFkZGlu
ZwotICAgICAgICBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlw
ZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAm
cGFkZGluZyk7Ci0gICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHNlY3Rpb24gd2hlbiBHTCBkcml2
ZXIgYnVnIG9uIE1hYyBBTkQgdGhlIEdMRVMgZHJpdmVyIGJ1ZwotICAgIC8vIG9uIFFDIGlzIGZp
eGVkLCBpLmUuLCB3aGVuIGFscGhhIGlzIG9mZiwgcmVhZFBpeGVscyBzaG91bGQKLSAgICAvLyBz
ZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KLSAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5k
aW5nICYmICFtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEpIHsKLSAgICAg
ICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFy
Kj4oZGF0YSk7Ci0gICAgICAgIGZvciAoR0MzRHNpemVpIGl5ID0gMDsgaXkgPCBoZWlnaHQ7ICsr
aXkpIHsKLSAgICAgICAgICAgIGZvciAoR0MzRHNpemVpIGl4ID0gMDsgaXggPCB3aWR0aDsgKytp
eCkgewotICAgICAgICAgICAgICAgIHBpeGVsc1szXSA9IDI1NTsKLSAgICAgICAgICAgICAgICBw
aXhlbHMgKz0gNDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHBpeGVscyArPSBwYWRkaW5n
OwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpyZWxlYXNlU2hhZGVyQ29tcGlsZXIoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnJlbGVhc2VTaGFkZXJD
b21waWxlcigpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVuZGVyYnVmZmVy
U3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJpbnZhbGlk
IHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV9yZW5kZXJidWZm
ZXJCaW5kaW5nIHx8ICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
InJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAibm8gYm91bmQgcmVuZGVyYnVmZmVyIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUoInJlbmRlcmJ1ZmZlclN0b3Jh
Z2UiLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAoaW50ZXJu
YWxmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQx
NjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I1X0ExOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjU2NToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYODoKLSAgICAgICAgbV9j
b250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRo
LCBoZWlnaHQpOwotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldEludGVybmFsRm9y
bWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJ
c1ZhbGlkKHRydWUpOwotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lk
dGgsIGhlaWdodCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX1NURU5DSUw6Ci0gICAgICAgIGlmIChpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKSB7
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBFeHRl
bnNpb25zM0Q6OkRFUFRIMjRfU1RFTkNJTDgsIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICB9Ci0g
ICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAg
ICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJc1ZhbGlkKGlzRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKCkpOwotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldEludGVybmFsRm9y
bWF0KGludGVybmFsZm9ybWF0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJl
bmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnNhbXBsZUNvdmVyYWdlKEdDM0RmbG9hdCB2YWx1ZSwgR0MzRGJvb2xl
YW4gaW52ZXJ0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2NvbnRleHQtPnNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2Npc3NvcihHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRl
U2l6ZSgic2Npc3NvciIsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9j
b250ZXh0LT5zY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6c2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoInNoYWRlclNvdXJjZSIsIHNoYWRlcikpCi0gICAgICAgIHJldHVybjsKLSAgICBTdHJpbmcg
c3RyaW5nV2l0aG91dENvbW1lbnRzID0gU3RyaXBDb21tZW50cyhzdHJpbmcpLnJlc3VsdCgpOwot
ICAgIGlmICghdmFsaWRhdGVTdHJpbmcoInNoYWRlclNvdXJjZSIsIHN0cmluZ1dpdGhvdXRDb21t
ZW50cykpCi0gICAgICAgIHJldHVybjsKLSAgICBzaGFkZXItPnNldFNvdXJjZShzdHJpbmcpOwot
ICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG9iamVjdE9yWmVybyhzaGFkZXIpLCBzdHJpbmdX
aXRob3V0Q29tbWVudHMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNp
bEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
dmFsaWRhdGVTdGVuY2lsRnVuYygic3RlbmNpbEZ1bmMiLCBmdW5jKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSByZWY7Ci0gICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sg
PSByZWY7Ci0gICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOwotICAgIG1fc3RlbmNpbEZ1bmNN
YXNrQmFjayA9IG1hc2s7Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuYyhmdW5jLCByZWYsIG1h
c2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbEZ1bmNTZXBhcmF0
ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFz
aykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuY1NlcGFyYXRlIiwgZnVu
YykpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKGZhY2UpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgbV9zdGVuY2lsRnVuY1JlZiA9
IHJlZjsKLSAgICAgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSByZWY7Ci0gICAgICAgIG1fc3Rl
bmNpbEZ1bmNNYXNrID0gbWFzazsKLSAgICAgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gbWFz
azsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQ6Ci0g
ICAgICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSByZWY7Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNr
ID0gbWFzazsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFD
SzoKLSAgICAgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSByZWY7Ci0gICAgICAgIG1fc3RlbmNp
bEZ1bmNNYXNrQmFjayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJz
dGVuY2lsRnVuY1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCByZWYs
IG1hc2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2soR0Mz
RHVpbnQgbWFzaykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm47Ci0gICAgbV9zdGVuY2lsTWFzayA9IG1hc2s7Ci0gICAgbV9zdGVuY2lsTWFza0Jh
Y2sgPSBtYXNrOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2sobWFzayk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0R1aW50IG1hc2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAoZmFjZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZST05UX0FORF9CQUNLOgotICAgICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKLSAg
ICAgICAgbV9zdGVuY2lsTWFza0JhY2sgPSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVDoKLSAgICAgICAgbV9zdGVuY2lsTWFzayA9IG1hc2s7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0s6Ci0gICAg
ICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgInN0ZW5jaWxNYXNrU2VwYXJhdGUiLCAiaW52YWxpZCBmYWNlIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1h
c2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE9wKEdDM0RlbnVt
IGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5zdGVu
Y2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0Rl
bnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsT3BTZXBhcmF0
ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8vIEZJWE1FOiBGb3Igbm93IHdl
IGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkLgotICAgIGVjID0gMDsKLSAgICBXZWJHTFRleHR1
cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRy
dWUpOwotICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKCJ0ZXhJbWFnZTJEIiwg
Tm90VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlKSk7Ci0gICAgQVNTRVJUKHRleCk7Ci0gICAgQVNT
RVJUKCFsZXZlbCB8fCAhV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpOwotICAg
IGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIC8vIE5vdGU6IENocm9taXVtJ3MgT3BlbkdMIGltcGxl
bWVudGF0aW9uIGNsZWFycyB0ZXh0dXJlcyBhbmQgaXNSZXNvdXJjZVNhZmUoKSBpcyB0aGVyZWZv
cmUgdHJ1ZS4KLSAgICAgICAgLy8gRm9yIG90aGVyIGltcGxlbWVudGF0aW9ucywgaWYgdGhleSBh
cmUgdXNpbmcgQU5HTEVfZGVwdGhfdGV4dHVyZSwgQU5HTEUgZGVwdGggdGV4dHVyZXMKLSAgICAg
ICAgLy8gY2FuIG5vdCBiZSBjbGVhcmVkIHdpdGggdGV4SW1hZ2UyRCBhbmQgbXVzdCBiZSBjbGVh
cmVkIGJ5IGJpbmRpbmcgdG8gYW4gZmJvIGFuZCBjYWxsaW5nCi0gICAgICAgIC8vIGNsZWFyLgot
ICAgICAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkKLSAgICAgICAgICAgIG1fY29udGV4dC0+dGV4
SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUsIG51bGxwdHIpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAg
IGJvb2wgc3VjY2VlZCA9IG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZSh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgbV91bnBhY2tBbGlnbm1lbnQpOwotICAgICAgICAgICAgaWYgKCFzdWNjZWVkKQot
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IEFTU0VSVCh2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhJbWFnZTJEIiwgaW50ZXJuYWxm
b3JtYXQpKTsKLSAgICAgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPm1v
dmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgdGV4
SW1hZ2UyRCBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIFdlYkdMVGV4dHVyZSBpdCBkb2Vzbid0
IGhhdmUgdGhlIGRhdGEgZm9yIHRoaXMgbGV2ZWwuCi0gICAgICAgICAgICB0ZXgtPm1hcmtJbnZh
bGlkKHRhcmdldCwgbGV2ZWwpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAg
fQotICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCB0eXBlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdl
LCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBm
bGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBl
YyA9IDA7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRp
cGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PTkUpOwotICAgIGlmICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQg
PSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZUZvcm1hdCgpOwotICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKLSAg
ICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxE
YXRhKCk7Ci0KLSAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKLSAgICBpZiAodHlwZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9O
b3RoaW5nICYmICFmbGlwWSkKLSAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBl
bHNlIHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdl
UGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0
LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0
KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgInRleEltYWdlMkQiLCAicGFja0ltYWdlIGVycm9yIik7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0g
MSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDAsIGZvcm1hdCwg
dHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IGltYWdlUGl4ZWxEYXRhLCBlYyk7
Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVu
Yyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBl
IGZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHNvdXJjZVR5cGUsIEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQp
Ci17Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgZnVu
Y3Rpb25UeXBlLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBXZWJH
TFRleHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGZ1bmN0aW9uTmFtZSwg
dGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGlmIChmdW5jdGlvblR5cGUgPT0gTm90VGV4U3ViSW1hZ2UyRCkgewotICAgICAgICBp
ZiAobGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAvLyBGb3IgU291cmNlQXJyYXlCdWZm
ZXJWaWV3LCBmdW5jdGlvbiB2YWxpZGF0ZVRleEZ1bmNEYXRhKCkgd291bGQgaGFuZGxlIHdoZXRo
ZXIgdG8gdmFsaWRhdGUgdGhlIFNldHRhYmxlVGV4Rm9ybWF0Ci0gICAgICAgIC8vIGJ5IGNoZWNr
aW5nIGlmIHRoZSBBcnJheUJ1ZmZlclZpZXcgaXMgbnVsbCBvciBub3QuCi0gICAgICAgIGlmIChz
b3VyY2VUeXBlICE9IFNvdXJjZUFycmF5QnVmZmVyVmlldykgewotICAgICAgICAgICAgaWYgKCF2
YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0KSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBp
ZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXZhbGlkYXRlU2l6ZShmdW5jdGlv
bk5hbWUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAvLyBCZWZvcmUgY2hlY2tpbmcgaWYgaXQgaXMgaW4gdGhlIHJhbmdlLCBjaGVjayBpZiBv
dmVyZmxvdyBoYXBwZW5zIGZpcnN0LgotICAgICAgICBpZiAoeG9mZnNldCArIHdpZHRoIDwgMCB8
fCB5b2Zmc2V0ICsgaGVpZ2h0IDwgMCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJhZCBkaW1l
bnNpb25zIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleHR1cmUtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8
IHlvZmZzZXQgKyBoZWlnaHQgPiB0ZXh0dXJlLT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsK
LSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmICh0ZXh0dXJlLT5nZXRJ
bnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSAhPSBmb3JtYXQgfHwgdGV4dHVyZS0+Z2V0VHlw
ZSh0YXJnZXQsIGxldmVsKSAhPSB0eXBlKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5
cGUgYW5kIGZvcm1hdCBkbyBub3QgbWF0Y2ggdGV4dHVyZSIpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rp
bnQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVUZXhGdW5jRGF0YSgidGV4SW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHBpeGVscywgTnVsbEFsbG93ZWQpCi0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1
bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcs
IHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybjsKLSAgICB2b2lkKiBkYXRhID0gcGl4
ZWxzID8gcGl4ZWxzLT5iYXNlQWRkcmVzcygpIDogMDsKLSAgICBWZWN0b3I8dWludDhfdD4gdGVt
cERhdGE7Ci0gICAgYm9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKLSAgICBpZiAo
ZGF0YSAmJiAobV91bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7Ci0g
ICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fdW5wYWNrQWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgZGF0YSA9IHRlbXBEYXRhLmRhdGEoKTsKLSAgICAgICAgY2hhbmdlVW5wYWNr
QWxpZ25tZW50ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkK
LSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICBmb3Jt
YXQsIHR5cGUsIGRhdGEsIGVjKTsKLSAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQotICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhcGl4ZWxzIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhT
dWJJbWFnZTJELCBTb3VyY2VJbWFnZURhdGEsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwg
MCkpCi0gICAgICAgIHJldHVybjsKLSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBib29s
IG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKLSAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBp
cyBhbHdheXMgb2YgZm9ybWF0IFJHQkE4LgotICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVk
IGlmIGRlc3RpbmF0aW9uIGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBh
bmQgbm8gRmxpcCBvciBQcmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgaWYg
KCFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgJiYgZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUpCi0gICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7Ci0gICAgZWxzZSB7
Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0
LCB0eXBlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkK
LSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0
eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEo
KSwgZWMpOwotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSogaW1hZ2UsIGludCB3aWR0aCwgaW50IGhl
aWdodCwgaW50IGRldmljZVNjYWxlRmFjdG9yKQotewotICAgIEludFNpemUgc2l6ZSh3aWR0aCwg
aGVpZ2h0KTsKLSAgICBzaXplLnNjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKLSAgICBJbWFnZUJ1
ZmZlciogYnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNhY2hlLmltYWdlQnVmZmVyKHNpemUpOwotICAg
IGlmICghYnVmKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9p
bnQoKSwgaW1hZ2UtPnNpemUoKSk7Ci0gICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQo
KSwgc2l6ZSk7Ci0gICAgYnVmLT5jb250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFj
ZURldmljZVJHQiwgZGVzdFJlY3QsIHNyY1JlY3QpOwotICAgIHJldHVybiBidWYtPmNvcHlJbWFn
ZShJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQq
IGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhJbWFn
ZTJEIiwgaW1hZ2UsIGVjKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEltYWdlPiBp
bWFnZUZvclJlbmRlciA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGlt
YWdlLT5yZW5kZXJlcigpKTsKLSAgICBpZiAoaW1hZ2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkK
LSAgICAgICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9yUmVu
ZGVyLmdldCgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxKTsKLQotICAgIGlm
ICghaW1hZ2VGb3JSZW5kZXIgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRl
eFN1YkltYWdlMkQsIFNvdXJjZUhUTUxJbWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBpbWFnZUZvclJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdo
dCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0ZXhJ
bWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBp
bWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21JbWFnZSwgbV91
bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNF
bGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50
KCJ0ZXhJbWFnZTJEIiwgY2FudmFzLCBlYykgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2Uy
RCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LCB0YXJnZXQsIGxl
dmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCAw
LCBmb3JtYXQsIHR5cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJHTFRleHR1
cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0
LCB0cnVlKTsKLSAgICAvLyBJZiBwb3NzaWJsZSwgY29weSBmcm9tIHRoZSBjYW52YXMgZWxlbWVu
dCBkaXJlY3RseSB0byB0aGUgdGV4dHVyZQotICAgIC8vIHZpYSB0aGUgR1BVLCB3aXRob3V0IGEg
cmVhZC1iYWNrIHRvIHN5c3RlbSBtZW1vcnkuCi0gICAgLy8KLSAgICAvLyBGSVhNRTogcmVzdHJp
Y3Rpb24gb2YgKFJHQiB8fCBSR0JBKS9VTlNJR05FRF9CWVRFIHNob3VsZCBiZSBsaWZ0ZWQgd2hl
bgotICAgIC8vIEltYWdlQnVmZmVyOjpjb3B5VG9QbGF0Zm9ybVRleHR1cmUgaW1wbGVtZW50YXRp
b25zIGFyZSBmdWxseSBmdW5jdGlvbmFsLgotICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCA9PSB0YXJnZXQgJiYgdGV4dHVyZSAmJiB0eXBlID09IHRleHR1cmUtPmdldFR5cGUo
dGFyZ2V0LCBsZXZlbCkKLSAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkgJiYgdHlwZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAgICBJbWFnZUJ1ZmZlciogYnVm
ZmVyID0gY2FudmFzLT5idWZmZXIoKTsKLSAgICAgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmNv
cHlUb1BsYXRmb3JtVGV4dHVyZSgqbV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwg
aW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tGbGlwWSkp
IHsKLSAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCB0eXBlKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFJlZlB0cjxJbWFnZURh
dGE+IGltYWdlRGF0YSA9IGNhbnZhcy0+Z2V0SW1hZ2VEYXRhKCk7Ci0gICAgaWYgKGltYWdlRGF0
YSkKLSAgICAgICAgdGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9y
bWF0LCB0eXBlLCBpbWFnZURhdGEuZ2V0KCksIGVjKTsKLSAgICBlbHNlCi0gICAgICAgIHRleElt
YWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNh
bnZhcy0+Y29waWVkSW1hZ2UoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1f
dW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotfQotCi0jaWYgRU5B
QkxFKFZJREVPKQotUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aWRl
b0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgQmFja2luZ1N0b3JlQ29weSBi
YWNraW5nU3RvcmVDb3B5LCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBJbnRTaXplIHNpemUodmlk
ZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCkpOwotICAgIEltYWdlQnVmZmVy
KiBidWYgPSBtX2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7Ci0gICAgaWYg
KCFidWYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9V
VF9PRl9NRU1PUlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIEludFJlY3QgZGVzdFJlY3QoMCwgMCwgc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpKTsKLSAgICAvLyBGSVhNRTogVHVybiB0aGlzIGludG8gYSBHUFUt
R1BVIHRleHR1cmUgY29weSBpbnN0ZWFkIG9mIENQVSByZWFkYmFjay4KLSAgICB2aWRlby0+cGFp
bnRDdXJyZW50RnJhbWVJbkNvbnRleHQoYnVmLT5jb250ZXh0KCksIGRlc3RSZWN0KTsKLSAgICBy
ZXR1cm4gYnVmLT5jb3B5SW1hZ2UoYmFja2luZ1N0b3JlQ29weSk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1l
bnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhJ
bWFnZTJEIiwgdmlkZW8sIGVjKQotICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFn
ZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hl
aWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICAv
LyBHbyB0aHJvdWdoIHRoZSBmYXN0IHBhdGggZG9pbmcgYSBHUFUtR1BVIHRleHR1cmVzIGNvcHkg
d2l0aG91dCBhIHJlYWRiYWNrIHRvIHN5c3RlbSBtZW1vcnkgaWYgcG9zc2libGUuCi0gICAgLy8g
T3RoZXJ3aXNlLCBpdCB3aWxsIGZhbGwgYmFjayB0byB0aGUgbm9ybWFsIFNXIHBhdGguCi0gICAg
Ly8gRklYTUU6IFRoZSBjdXJyZW50IHJlc3RyaWN0aW9ucyByZXF1aXJlIHRoYXQgZm9ybWF0IHNo
b3VkIGJlIFJHQiBvciBSR0JBLAotICAgIC8vIHR5cGUgc2hvdWxkIGJlIFVOU0lHTkVEX0JZVEUg
YW5kIGxldmVsIHNob3VsZCBiZSAwLiBJdCBtYXkgYmUgbGlmdGVkIGluIHRoZSBmdXR1cmUuCi0g
ICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1h
Z2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJEID09IHRhcmdldCAmJiB0ZXh0dXJlCi0gICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpCi0gICAg
ICAgICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKLSAgICAgICAg
JiYgKHRleHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUgfHwgIXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBsZXZlbCkpCi0gICAg
ICAgICYmICFsZXZlbCkgewotICAgICAgICBpZiAodmlkZW8tPmNvcHlWaWRlb1RleHR1cmVUb1Bs
YXRmb3JtVGV4dHVyZShtX2NvbnRleHQuZ2V0KCksIHRleHR1cmUtPm9iamVjdCgpLCBsZXZlbCwg
dHlwZSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tG
bGlwWSkpIHsKLSAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0
KCksIHR5cGUpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
Ly8gTm9ybWFsIHB1cmUgU1cgcGF0aC4KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9G
cmFtZVRvSW1hZ2UodmlkZW8sIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpLCBlYyk7
Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHRleEltYWdlMkRJbXBsKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBH
cmFwaGljc0NvbnRleHQzRDo6SHRtbERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rm
bG9hdCBwYXJhbWYsIEdDM0RpbnQgcGFyYW1pLCBib29sIGlzRmxvYXQpCi17Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVy
ZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4UGFyYW1ldGVyIiwgdGFyZ2V0LCBm
YWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKHBuYW1l
KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Q6Ci0gICAgICAgIGlmICgoaXNGbG9h
dCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1m
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1mICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpSRVBFQVQpCi0gICAgICAgICAgICB8fCAoIWlzRmxvYXQgJiYgcGFyYW1p
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFtaSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQz
RDo6UkVQRUFUKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciIp
OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljCi0gICAgICAgIGlmICghbV9leHRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIsIEVY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmIChpc0Zsb2F0KSB7Ci0gICAgICAgIHRleC0+c2V0UGFyYW1ldGVyZihwbmFt
ZSwgcGFyYW1mKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5h
bWUsIHBhcmFtZik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJpKHBu
YW1lLCBwYXJhbWkpOwotICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBw
bmFtZSwgcGFyYW1pKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBw
YXJhbSkKLXsKLSAgICB0ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgcGFyYW0sIDAsIHRydWUp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyaShHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIHRleFBhcmFt
ZXRlcih0YXJnZXQsIHBuYW1lLCAwLCBwYXJhbSwgZmFsc2UpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0
IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gRklYTUU6IEZvciBu
b3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKLSAgICBlYyA9IDA7Ci0gICAgQVNTRVJU
KCFpc0NvbnRleHRMb3N0KCkpOwotICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJz
KCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUpKTsKLSAgICBBU1NFUlQodmFsaWRhdGVTaXpl
KCJ0ZXhTdWJJbWFnZTJEIiwgeG9mZnNldCwgeW9mZnNldCkpOwotICAgIEFTU0VSVCh2YWxpZGF0
ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhTdWJJbWFnZTJEIiwgZm9ybWF0KSk7Ci0gICAgV2ViR0xU
ZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhTdWJJbWFnZTJEIiwgdGFy
Z2V0LCB0cnVlKTsKLSAgICBpZiAoIXRleCkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBBU1NFUlQoKHhvZmZzZXQgKyB3aWR0aCkg
Pj0gMCk7Ci0gICAgQVNTRVJUKCh5b2Zmc2V0ICsgaGVpZ2h0KSA+PSAwKTsKLSAgICBBU1NFUlQo
dGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSA+PSAoeG9mZnNldCArIHdpZHRoKSk7Ci0gICAg
QVNTRVJUKHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpID49ICh5b2Zmc2V0ICsgaGVpZ2h0
KSk7Ci0gICAgQVNTRVJUKHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgPT0g
Zm9ybWF0KTsKLSAgICBBU1NFUlQodGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IHR5cGUp
OwotICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6
OkltYWdlSHRtbERvbVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlw
bHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIFZlY3Rvcjx1
aW50OF90PiBkYXRhOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFn
ZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0Nv
bG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsgIAotICAgIGlm
ICghaW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2Uy
RCIsICJiYWQgaW1hZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBHcmFwaGljc0Nv
bnRleHQzRDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1h
Z2VTb3VyY2VGb3JtYXQoKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9w
ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCk7Ci0gICAgY29uc3Qgdm9pZCogaW1hZ2VQ
aXhlbERhdGEgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVBpeGVsRGF0YSgpOwotCi0gICAgYm9vbCBu
ZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBh
bHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxpcFkpCi0g
ICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICgh
bV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0
eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1h
Z2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5p
bWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBkYXRhKSkgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJE
IiwgImJhZCBpbWFnZSBkYXRhIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0g
ICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgaW1h
Z2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgZm9ybWF0LCB0eXBlLCAgbmVlZENvbnZlcnNp
b24gPyBkYXRhLmRhdGEoKSA6IGltYWdlUGl4ZWxEYXRhLCBlYyk7Ci0gICAgaWYgKG1fdW5wYWNr
QWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3ND
b250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleFN1YkltYWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxOb3RBbGxvd2VkKQotICAgICAgICB8fCAhdmFs
aWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlQXJyYXlC
dWZmZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1h
dCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLSAgICB2b2lkKiBk
YXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOwotICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0
YTsKLSAgICBib29sIGNoYW5nZVVucGFja0FsaWdubWVudCA9IGZhbHNlOwotICAgIGlmIChkYXRh
ICYmIChtX3VucGFja0ZsaXBZIHx8IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKLSAgICAg
ICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91
bnBhY2tBbGlnbm1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGVtcERhdGEpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBkYXRhID0gdGVtcERhdGEuZGF0YSgpOwotICAgICAgICBjaGFuZ2VVbnBhY2tBbGln
bm1lbnQgPSB0cnVlOwotICAgIH0KLSAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQotICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0
LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEsIGVjKTsKLSAgICBp
ZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhcGl4
ZWxzIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBT
b3VyY2VJbWFnZURhdGEsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgIHBpeGVscy0+d2lkdGgoKSwg
cGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgYm9vbCBuZWVk
Q29udmVyc2lvbiA9IHRydWU7Ci0gICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3
YXlzIG9mIGZvcm1hdCBSR0JBOC4KLSAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBk
ZXN0aW5hdGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5v
IEZsaXAgb3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgotICAgIGlmIChmb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSAmJiAhbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAgIGVsc2UgewotICAg
ICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlw
ZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0g
ICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19B
TElHTk1FTlQsIDEpOwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgZm9ybWF0LCB0
eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEo
KSwgZWMpOwotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdl
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KCJ0ZXhTdWJJbWFnZTJE
IiwgaW1hZ2UsIGVjKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEltYWdlPiBpbWFn
ZUZvclJlbmRlciA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdl
LT5yZW5kZXJlcigpKTsKLSAgICBpZiAoaW1hZ2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkKLSAg
ICAgICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9yUmVuZGVy
LmdldCgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxKTsKLQotICAgIGlmICgh
aW1hZ2VGb3JSZW5kZXIgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1
YkltYWdlMkQsIFNvdXJjZUhUTUxJbWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwg
aW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVuZGVyLT5oZWlnaHQoKSwgMCwgZm9y
bWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGV4
U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0
eXBlLCBpbWFnZUZvclJlbmRlci5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21JbWFn
ZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUhUTUxDYW52YXNFbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgY2FudmFzLCBlYykKLSAgICAg
ICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNv
dXJjZUhUTUxDYW52YXNFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGNhbnZhcy0+d2lk
dGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0g
Y2FudmFzLT5nZXRJbWFnZURhdGEoKTsKLSAgICBpZiAoaW1hZ2VEYXRhKQotICAgICAgICB0ZXhT
dWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwg
aW1hZ2VEYXRhLmdldCgpLCBlYyk7Ci0gICAgZWxzZQotICAgICAgICB0ZXhTdWJJbWFnZTJESW1w
bCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+
Y29waWVkSW1hZ2UoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1fdW5wYWNr
RmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotfQotCi0jaWYgRU5BQkxFKFZJ
REVPKQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoInRleFN1YkltYWdlMkQiLCB2aWRlbywgZWMpCi0g
ICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJE
LCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHZpZGVvLT52
aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZz
ZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdl
ID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8sIEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9k
ZSgpLCBlYyk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuOwotICAgIHRleFN1Yklt
YWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwg
aW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxp
cFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotfQotI2VuZGlmCi0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9j
dXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMWYiLCAibG9jYXRpb24gbm90IGZvciBj
dXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4
dC0+dW5pZm9ybTFmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4KTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCAxKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB2LT5sZW5ndGgoKSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwg
MSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50
IHgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTFpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoKGxvY2F0aW9uLT50eXBlKCkgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKSAmJiB4ID49IChpbnQpbV90ZXh0dXJlVW5pdHMuc2l6
ZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAidW5pZm9ybTFpIiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShsb2NhdGlvbi0+bG9j
YXRpb24oKSwgeCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3Jt
MWl2IiwgbG9jYXRpb24sIHYsIDEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRp
b24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+
dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSX0NVQkUpCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB2LT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAo
di0+ZGF0YSgpW2ldID49IHN0YXRpY19jYXN0PGludD4obV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSkg
ewotICAgICAgICAgICAgICAgIExPRyhXZWJHTCwgIlRleHR1cmUgdW5pdCBzaXplPSV6dSwgdlsl
ZF09JWQuIExvY2F0aW9uIHR5cGUgPSAlMDRYLiIsIG1fdGV4dHVyZVVuaXRzLnNpemUoKSwgaSwg
di0+ZGF0YSgpW2ldLCBsb2NhdGlvbi0+dHlwZSgpKTsKLSAgICAgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaXYi
LCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCksIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2
LCBzaXplLCAxKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT50eXBlKCkg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNpemUpOyArK2kpIHsKLSAgICAgICAgICAg
IGlmICgoKEdDM0RpbnQqKXYpW2ldID49IHN0YXRpY19jYXN0PGludD4obV90ZXh0dXJlVW5pdHMu
c2l6ZSgpKSkgewotICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZhbGlkIHRleHR1cmUgdW5p
dCIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplLCB2
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
bmlmb3JtMmYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB4LCB5KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0y
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5p
Zm9ybTJmdiIsIGxvY2F0aW9uLCB2LCAyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250
ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDIsIHYt
PmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6
ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0
ZXJzKCJ1bmlmb3JtMmZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDIpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUg
LyAyLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaShjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
InVuaWZvcm0yaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMmkobG9jYXRpb24tPmxv
Y2F0aW9uKCksIHgsIHkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5p
Zm9ybTJpdiIsIGxvY2F0aW9uLCB2LCAyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250
ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDIsIHYt
PmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVp
IHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cygidW5pZm9ybTJpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8g
Miwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2YoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHks
IEdDM0RmbG9hdCB6LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9n
cmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgInVuaWZvcm0zZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJv
Z3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3Jt
M2YobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2Z2IiwgbG9jYXRpb24sIHYsIDMpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmxlbmd0aCgpIC8gMywgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwg
MykpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgc2l6ZSAvIDMsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFs
b2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkg
IT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtM2kiLCAibG9jYXRpb24gbm90
IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1f
Y29udGV4dC0+dW5pZm9ybTNpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zaXYiLCBsb2NhdGlvbiwgdiwg
MykpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAzLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zaXYiLCBsb2NhdGlv
biwgdiwgc2l6ZSwgMykpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9y
bTNpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDMsIHYpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0
IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTRmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm00Zihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgeCwgeSwgeiwgdyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoInVuaWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwgNCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVu
Z3RoKCkgLyA0LCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplIC8gNCwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3Jh
bSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTRpIiwgImxvY2F0aW9u
IG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBtX2NvbnRleHQtPnVuaWZvcm00aShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeiwgdyk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGl2IiwgbG9jYXRp
b24sIHYsIDQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGl2Iiwg
bG9jYXRpb24sIHYsIHNpemUsIDQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQt
PnVuaWZvcm00aXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyA0LCB2KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJh
eSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJh
bWV0ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgNCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24t
PmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdHJhbnNwb3NlLCB2LT5kYXRhKCkpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZs
b2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRpb24sIHRy
YW5zcG9zZSwgdiwgc2l6ZSwgNCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVu
aWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyA0LCB0cmFuc3Bvc2Us
IHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgzZnYiLCBsb2NhdGlvbiwgdHJhbnNw
b3NlLCB2LCA5KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJp
eDNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA5LCB0cmFuc3Bvc2UsIHYt
PmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4
M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgzZnYi
LCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA5KSkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAv
IDksIHRyYW5zcG9zZSwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxv
Y2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDE2KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4
dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAx
NiwgdHJhbnNwb3NlLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1
bmlmb3JtTWF0cml4NGZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgMTYpKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5s
b2NhdGlvbigpLCBzaXplIC8gMTYsIHRyYW5zcG9zZSwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBib29sIGRlbGV0ZWQ7Ci0g
ICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgidXNlUHJvZ3JhbSIsIHByb2dyYW0sIGRlbGV0
ZWQpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIHByb2dyYW0g
PSAwOwotICAgIGlmIChwcm9ncmFtICYmICFwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidXNlUHJvZ3JhbSIsICJwcm9ncmFtIG5vdCB2YWxpZCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIGlmIChtX2N1cnJlbnRQcm9ncmFtICE9IHByb2dyYW0pIHsKLSAgICAgICAg
aWYgKG1fY3VycmVudFByb2dyYW0pCi0gICAgICAgICAgICBtX2N1cnJlbnRQcm9ncmFtLT5vbkRl
dGFjaGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpOwotICAgICAgICBtX2N1cnJlbnRQcm9ncmFtID0g
cHJvZ3JhbTsKLSAgICAgICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9n
cmFtKSk7Ci0gICAgICAgIGlmIChwcm9ncmFtKQotICAgICAgICAgICAgcHJvZ3JhbS0+b25BdHRh
Y2hlZCgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
UHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdCgidmFsaWRhdGVQcm9ncmFtIiwgcHJvZ3JhbSkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2NvbnRleHQtPnZhbGlkYXRlUHJvZ3JhbShvYmplY3RPclplcm8ocHJv
Z3JhbSkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCkKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgi
dmVydGV4QXR0cmliMWYiLCBpbmRleCwgMSwgdjAsIDAuMGYsIDAuMGYsIDEuMGYpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4
LCBGbG9hdDMyQXJyYXkqIHYpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRy
aWIxZnYiLCBpbmRleCwgdiwgMSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNp
emUpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIxZnYiLCBpbmRleCwg
diwgc2l6ZSwgMSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEpCi17Ci0gICAg
dmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjJmIiwgaW5kZXgsIDIsIHYwLCB2MSwgMC4w
ZiwgMS4wZik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIy
ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJm
dkltcGwoInZlcnRleEF0dHJpYjJmdiIsIGluZGV4LCB2LCAyKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0
KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0
dHJpYjJmdiIsIGluZGV4LCB2LCBzaXplLCAyKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0Rm
bG9hdCB2MSwgR0MzRGZsb2F0IHYyKQotewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhB
dHRyaWIzZiIsIGluZGV4LCAzLCB2MCwgdjEsIHYyLCAxLjBmKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFy
cmF5KiB2KQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliM2Z2IiwgaW5k
ZXgsIHYsIDMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmli
M2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAg
IHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliM2Z2IiwgaW5kZXgsIHYsIHNpemUsIDMp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0Rm
bG9hdCB2MykKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliNGYiLCBpbmRl
eCwgNCwgdjAsIHYxLCB2MiwgdjMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCi17Ci0gICAg
dmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZnYiLCBpbmRleCwgdiwgNCk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJ
bXBsKCJ2ZXJ0ZXhBdHRyaWI0ZnYiLCBpbmRleCwgdiwgc2l6ZSwgNCk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBH
QzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0Rz
aXplaSBzdHJpZGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkJZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VDoKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIi
LCAiaW52YWxpZCB0eXBlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGluZGV4
ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW5k
ZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHNpemUg
PCAxIHx8IHNpemUgPiA0IHx8IHN0cmlkZSA8IDAgfHwgc3RyaWRlID4gMjU1IHx8IG9mZnNldCA8
IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImJhZCBzaXplLCBzdHJpZGUgb3Igb2Zm
c2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtX2JvdW5kQXJyYXlCdWZm
ZXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJubyBib3VuZCBBUlJBWV9CVUZG
RVIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBEZXRlcm1pbmUgdGhlIG51bWJl
ciBvZiBlbGVtZW50cyB0aGUgYm91bmQgYnVmZmVyIGNhbiBob2xkLCBnaXZlbiB0aGUgb2Zmc2V0
LCBzaXplLCB0eXBlIGFuZCBzdHJpZGUKLSAgICB1bnNpZ25lZCBpbnQgdHlwZVNpemUgPSBzaXpl
SW5CeXRlcyh0eXBlKTsKLSAgICBpZiAoIXR5cGVTaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQb2lu
dGVyIiwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgo
c3RyaWRlICUgdHlwZVNpemUpIHx8IChzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpICUg
dHlwZVNpemUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAic3RyaWRlIG9yIG9m
ZnNldCBub3QgdmFsaWQgZm9yIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBH
QzNEc2l6ZWkgYnl0ZXNQZXJFbGVtZW50ID0gc2l6ZSAqIHR5cGVTaXplOwotCi0gICAgbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5zZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCwgYnl0ZXNQZXJF
bGVtZW50LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0YXRpY19jYXN0PEdDM0Rp
bnRwdHI+KG9mZnNldCksIG1fYm91bmRBcnJheUJ1ZmZlcik7Ci0gICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWJQb2ludGVyKGluZGV4LCBzaXplLCB0eXBlLCBub3JtYWxpemVkLCBzdHJpZGUsIHN0
YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUoInZpZXdwb3J0Iiwgd2lkdGgs
IGhlaWdodCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnZpZXdwb3J0KHgsIHks
IHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VM
b3N0Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAibG9zZUNvbnRl
eHQiLCAiY29udGV4dCBhbHJlYWR5IGxvc3QiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIG1fY29udGV4dEdyb3VwLT5sb3NlQ29udGV4dEdyb3VwKG1vZGUpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6bG9zZUNvbnRleHRJbXBsKFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3QoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0TG9zdCA9IHRydWU7Ci0gICAgbV9jb250ZXh0
TG9zdE1vZGUgPSBtb2RlOwotCi0gICAgaWYgKG1vZGUgPT0gUmVhbExvc3RDb250ZXh0KSB7Ci0g
ICAgICAgIC8vIEluZm9ybSB0aGUgZW1iZWRkZXIgdGhhdCBhIGxvc3QgY29udGV4dCB3YXMgcmVj
ZWl2ZWQuIEluIHJlc3BvbnNlLCB0aGUgZW1iZWRkZXIgbWlnaHQKLSAgICAgICAgLy8gZGVjaWRl
IHRvIHRha2UgYWN0aW9uIHN1Y2ggYXMgYXNraW5nIHRoZSB1c2VyIGZvciBwZXJtaXNzaW9uIHRv
IHVzZSBXZWJHTCBhZ2Fpbi4KLSAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNhbnZhcygpLT5k
b2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCku
ZGlkTG9zZVdlYkdMQ29udGV4dChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhp
Y3NSZXNldFN0YXR1c0FSQigpKTsKLSAgICB9Ci0KLSAgICBkZXRhY2hBbmRSZW1vdmVBbGxPYmpl
Y3RzKCk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIC8vIE1ha2UgYWJz
b2x1dGVseSBzdXJlIHdlIGRvIG5vdCByZWZlciB0byBhbiBhbHJlYWR5LWRlbGV0ZWQgdGV4dHVy
ZSBvciBmcmFtZWJ1ZmZlci4KLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRUZXh0dXJlMkRC
aW5kaW5nKDApOwotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGlu
ZygwKTsKLSAgICB9Ci0KLSAgICAvLyBUaGVyZSBpcyBubyBkaXJlY3Qgd2F5IHRvIGNsZWFyIGVy
cm9ycyBmcm9tIGEgR0wgaW1wbGVtZW50YXRpb24gYW5kCi0gICAgLy8gbG9vcGluZyB1bnRpbCBn
ZXRFcnJvcigpIGJlY29tZXMgTk9fRVJST1IgbWlnaHQgY2F1c2UgYW4gaW5maW5pdGUgbG9vcCBp
ZgotICAgIC8vIHRoZSBkcml2ZXIgb3IgY29udGV4dCBpbXBsZW1lbnRhdGlvbiBoYWQgYSBidWcu
IFNvLCBsb29wIGEgcmVhc29uYWJseQotICAgIC8vIGxhcmdlIG51bWJlciBvZiB0aW1lcyB0byBj
bGVhciBhbnkgZXhpc3RpbmcgZXJyb3JzLgotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyAr
K2kpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6Tk9fRVJST1IpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQ29uc29sZURp
c3BsYXlQcmVmZXJlbmNlIGRpc3BsYXkgPSAobW9kZSA9PSBSZWFsTG9zdENvbnRleHQpID8gRGlz
cGxheUluQ29uc29sZTogRG9udERpc3BsYXlJbkNvbnNvbGU7Ci0gICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTCwgImxvc2VDb250ZXh0Iiwg
ImNvbnRleHQgbG9zdCIsIGRpc3BsYXkpOwotCi0gICAgLy8gRG9uJ3QgYWxsb3cgcmVzdG9yYXRp
b24gdW5sZXNzIHRoZSBjb250ZXh0IGxvc3QgZXZlbnQgaGFzIGJvdGggYmVlbgotICAgIC8vIGRp
c3BhdGNoZWQgYW5kIGl0cyBkZWZhdWx0IGJlaGF2aW9yIHByZXZlbnRlZC4KLSAgICBtX3Jlc3Rv
cmVBbGxvd2VkID0gZmFsc2U7Ci0KLSAgICAvLyBBbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9m
IHRoZSBjb250ZXh0IGxvc3QgZXZlbnQsIHRvIGltcGxlbWVudAotICAgIC8vIHRoZSBzcGVjIGJl
aGF2aW9yIG9mIHF1ZXVlaW5nIGEgdGFzay4KLSAgICBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVu
dFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmZvcmNlUmVzdG9yZUNvbnRleHQoKQotewotICAgIGlmICghaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgInJlc3RvcmVDb250ZXh0IiwgImNvbnRleHQgbm90IGxvc3QiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9yZXN0b3JlQWxsb3dlZCkgewotICAg
ICAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gU3ludGhldGljTG9zdENvbnRleHQpCi0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJjb250ZXh0IHJlc3RvcmF0aW9uIG5vdCBhbGxvd2Vk
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVzdG9yZVRpbWVyLmlz
QWN0aXZlKCkpCi0gICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQot
UGxhdGZvcm1MYXllciogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwbGF0Zm9ybUxheWVyKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gKCFpc0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5
UmVzb2x1dGlvbikgPyBtX2NvbnRleHQtPnBsYXRmb3JtTGF5ZXIoKSA6IDA7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW1vdmVTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmpl
Y3QqIG9iamVjdCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlT2JqZWN0KG9iamVjdCk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRTaGFyZWRPYmplY3QoV2ViR0xT
aGFyZWRPYmplY3QqIG9iamVjdCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7Ci0g
ICAgbV9jb250ZXh0R3JvdXAtPmFkZE9iamVjdChvYmplY3QpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6cmVtb3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqIG9i
amVjdCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2NvbnRleHRPYmplY3RzLnJlbW92ZShvYmplY3QpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmpl
Y3QqIG9iamVjdCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7Ci0gICAgbV9jb250
ZXh0T2JqZWN0cy5hZGQob2JqZWN0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIHdoaWxlIChtX2NvbnRleHRPYmpl
Y3RzLnNpemUoKSA+IDApIHsKLSAgICAgICAgSGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPjo6
aXRlcmF0b3IgaXQgPSBtX2NvbnRleHRPYmplY3RzLmJlZ2luKCk7Ci0gICAgICAgICgqaXQpLT5k
ZXRhY2hDb250ZXh0KCk7Ci0gICAgfQotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdG9wKCkKLXsKLSAgICBpZiAoIWlzQ29udGV4dExv
c3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7Ci0gICAgICAgIGZvcmNlTG9z
dENvbnRleHQoU3ludGhldGljTG9zdENvbnRleHQpOwotICAgICAgICBkZXN0cm95R3JhcGhpY3ND
b250ZXh0M0QoKTsKLSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEJvb2xlYW5QYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGJvb2xl
YW4gdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsICZ2YWx1ZSk7
Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZSkpOwotfQot
Ci1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb29sZWFuQXJyYXlQYXJh
bWV0ZXIoR0MzRGVudW0gcG5hbWUpCi17Ci0gICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9XUklURU1BU0spIHsKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygwLCAwKTsKLSAgICB9Ci0gICAgR0MzRGJvb2xlYW4gdmFs
dWVbNF0gPSB7MH07Ci0gICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOwot
ICAgIGJvb2wgYm9vbFZhbHVlWzRdOwotICAgIGZvciAoaW50IGlpID0gMDsgaWkgPCA0OyArK2lp
KQotICAgICAgICBib29sVmFsdWVbaWldID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbaWldKTsK
LSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGJvb2xWYWx1ZSwgNCk7Ci19Ci0KLVdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZsb2F0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1l
KQotewotICAgIEdDM0RmbG9hdCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRGbG9hdHYo
cG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci19Ci0KLVdl
YkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEludFBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSkKLXsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwot
fQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRVbnNpZ25lZEludFBh
cmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBt
X2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdl
dEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOwotfQotCi1XZWJHTEdldElu
Zm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIoR0Mz
RGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGZsb2F0IHZhbHVlWzRdID0gezB9OwotICAgIG1fY29u
dGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCB2YWx1ZSk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsK
LSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNF
RF9QT0lOVF9TSVpFX1JBTkdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURf
TElORV9XSURUSF9SQU5HRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9SQU5H
RToKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfQ09MT1I6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQ0xFQVJfVkFMVUU6Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotICAgIHJldHVybiBX
ZWJHTEdldEluZm8oRmxvYXQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwotfQotCi1X
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRXZWJHTEludEFycmF5UGFyYW1l
dGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07Ci0gICAg
bV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOwotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IDA7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9WSUVXUE9SVF9ESU1TOgotICAgICAgICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX0JPWDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpWSUVXUE9SVDoKLSAgICAgICAgbGVuZ3RoID0gNDsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNz
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgYm9vbCBwcmVwYXJlVG9EcmF3KQotewotICAgIGJv
b2wgcmVzZXRBY3RpdmVVbml0ID0gZmFsc2U7Ci0gICAgV2ViR0xUZXh0dXJlOjpUZXh0dXJlRXh0
ZW5zaW9uRmxhZyBleHRlbnNpb25zID0gc3RhdGljX2Nhc3Q8V2ViR0xUZXh0dXJlOjpUZXh0dXJl
RXh0ZW5zaW9uRmxhZz4oKG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyID8gV2ViR0xUZXh0dXJlOjpU
ZXh0dXJlRXh0ZW5zaW9uRmxvYXRMaW5lYXJFbmFibGVkIDogMCkgfCAobV9vZXNUZXh0dXJlSGFs
ZkZsb2F0TGluZWFyID8gV2ViR0xUZXh0dXJlOjpUZXh0dXJlRXh0ZW5zaW9uSGFsZkZsb2F0TGlu
ZWFyRW5hYmxlZCA6IDApKTsKLQotICAgIGZvciAodW5zaWduZWQgaWkgPSAwOyBpaSA8IG1fdGV4
dHVyZVVuaXRzLnNpemUoKTsgKytpaSkgewotICAgICAgICBpZiAoKG1fdGV4dHVyZVVuaXRzW2lp
XS50ZXh0dXJlMkRCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5n
LT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCi0gICAgICAgICAgICB8fCAobV90
ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tp
aV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9u
cykpKSB7Ci0gICAgICAgICAgICBpZiAoaWkgIT0gbV9hY3RpdmVUZXh0dXJlVW5pdCkgewotICAg
ICAgICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShpaSk7Ci0gICAgICAgICAgICAg
ICAgcmVzZXRBY3RpdmVVbml0ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzZXRB
Y3RpdmVVbml0KSB7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlp
KTsKLSAgICAgICAgICAgICAgICByZXNldEFjdGl2ZVVuaXQgPSBmYWxzZTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4MkQ7Ci0gICAgICAgICAgICBXZWJHTFRl
eHR1cmUqIHRleEN1YmVNYXA7Ci0gICAgICAgICAgICBpZiAocHJlcGFyZVRvRHJhdykgewotICAg
ICAgICAgICAgICAgIFN0cmluZyBtc2coU3RyaW5nKCJ0ZXh0dXJlIGJvdW5kIHRvIHRleHR1cmUg
dW5pdCAiKSArIFN0cmluZzo6bnVtYmVyKGlpKQotICAgICAgICAgICAgICAgICAgICArICIgaXMg
bm90IHJlbmRlcmFibGUuIEl0IG1heWJlIG5vbi1wb3dlci1vZi0yIGFuZCBoYXZlIGluY29tcGF0
aWJsZSB0ZXh0dXJlIGZpbHRlcmluZyBvciBpcyBub3QgJ3RleHR1cmUgY29tcGxldGUnLCIKLSAg
ICAgICAgICAgICAgICAgICAgKyAiIG9yIGl0IGlzIGEgZmxvYXQvaGFsZi1mbG9hdCB0eXBlIHdp
dGggbGluZWFyIGZpbHRlcmluZyBhbmQgd2l0aG91dCB0aGUgcmVsZXZhbnQgZmxvYXQvaGFsZi1m
bG9hdCBsaW5lYXIgZXh0ZW5zaW9uIGVuYWJsZWQuIik7Ci0gICAgICAgICAgICAgICAgcHJpbnRH
TFdhcm5pbmdUb0NvbnNvbGUoZnVuY3Rpb25OYW1lLCBtc2cudXRmOCgpLmRhdGEoKSk7Ci0gICAg
ICAgICAgICAgICAgdGV4MkQgPSBtX2JsYWNrVGV4dHVyZTJELmdldCgpOwotICAgICAgICAgICAg
ICAgIHRleEN1YmVNYXAgPSBtX2JsYWNrVGV4dHVyZUN1YmVNYXAuZ2V0KCk7Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRleDJEID0gbV90ZXh0dXJlVW5pdHNbaWldLnRl
eHR1cmUyREJpbmRpbmcuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgdGV4Q3ViZU1hcCA9IG1fdGV4
dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmcgJiYg
bV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVy
ZShleHRlbnNpb25zKSkKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8odGV4MkQpKTsKLSAgICAg
ICAgICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1f
dGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4
dHVyZShleHRlbnNpb25zKSkKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBvYmplY3RPclplcm8odGV4Q3Vi
ZU1hcCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChyZXNldEFjdGl2ZVVuaXQpCi0gICAg
ICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1cmVVbml0KTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4
MSgpCi17Ci0gICAgdW5zaWduZWQgY2hhciBibGFja1tdID0gezAsIDAsIDAsIDI1NX07Ci0gICAg
bV9ibGFja1RleHR1cmUyRCA9IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2JsYWNrVGV4dHVyZTJELT5v
YmplY3QoKSk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7Ci0gICAgbV9ibGFja1RleHR1cmVDdWJl
TWFwID0gY3JlYXRlVGV4dHVyZSgpOwotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC0+b2Jq
ZWN0KCkpOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwg
MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSwgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwot
ICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFn
ZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1osIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29u
dGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIDAp
OwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXhJbnRlcm5hbEZvcm1hdENv
bG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChHQzNEZW51bSB0ZXhJbnRlcm5hbEZvcm1hdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGNvbG9yQnVmZmVyRm9ybWF0KQotewotICAgIHVuc2ln
bmVkIG5lZWQgPSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdCh0ZXhJ
bnRlcm5hbEZvcm1hdCk7Ci0gICAgdW5zaWduZWQgaGF2ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRDaGFubmVsQml0c0J5Rm9ybWF0KGNvbG9yQnVmZmVyRm9ybWF0KTsKLSAgICByZXR1cm4gKG5l
ZWQgJiBoYXZlKSA9PSBuZWVkOwotfQotCi1HQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpCi17Ci0gICAgaWYgKG1fZnJhbWVidWZm
ZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgcmV0
dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZlckZvcm1hdCgpOwotICAgIGlm
IChtX2F0dHJpYnV0ZXMuYWxwaGEpCi0gICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQTsKLSAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKLX0KLQotaW50IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCkKLXsKLSAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQot
ICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyV2lkdGgo
KTsKLSAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCku
d2lkdGgoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgp
OwotfQotCi1pbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVySGVp
Z2h0KCkKLXsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPm9iamVjdCgpKQotICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdl
dENvbG9yQnVmZmVySGVpZ2h0KCk7Ci0gICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJh
d2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1l
YnVmZmVyU2l6ZSgpLmhlaWdodCgpOwotfQotCi1XZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVUZXh0dXJlQmluZGluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApCi17Ci0gICAgV2Vi
R0xUZXh0dXJlKiB0ZXh0dXJlID0gbnVsbHB0cjsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIHRleHR1cmUgPSBt
X3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nLmdldCgp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgaWYgKCF1c2VTaXhFbnVtc0ZvckN1YmVN
YXApIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIHRleHR1cmUgPSBt
X3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcu
Z2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVA6Ci0gICAgICAgIGlmICh1c2VTaXhFbnVtc0ZvckN1YmVNYXApIHsKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0YXJnZXQiKTsKLSAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgICAgIHRleHR1cmUgPSBtX3RleHR1cmVVbml0
c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVy
ZSB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIGlmICghdGV4
dHVyZSkKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJubyB0ZXh0dXJlIik7Ci0gICAgcmV0dXJuIHRl
eHR1cmU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUxvY2F0aW9u
TGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17
Ci0gICAgY29uc3QgdW5zaWduZWQgbWF4V2ViR0xMb2NhdGlvbkxlbmd0aCA9IDI1NjsKLSAgICBp
ZiAoc3RyaW5nLmxlbmd0aCgpID4gbWF4V2ViR0xMb2NhdGlvbkxlbmd0aCkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAibG9jYXRpb24gbGVuZ3RoID4gMjU2Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVNpemUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IHgsIEdDM0Rp
bnQgeSkKLXsKLSAgICBpZiAoeCA8IDAgfHwgeSA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInNp
emUgPCAwIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0cmluZyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgaWYgKCF2YWxp
ZGF0ZUNoYXJhY3RlcihzdHJpbmdbaV0pKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic3RyaW5n
IG5vdCBBU0NJSSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBsZXZlbCkKLXsKLSAgICBzd2l0Y2gg
KGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQ09NUE9ORU5UOgotICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJkZXB0aCB0ZXh0dXJlIGZvcm1h
dHMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
U0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VF81XzVfNV8xOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
TE9BVDoKLSAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUZsb2F0KQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKLSAg
ICAgICAgaWYgKG1fb2VzVGV4dHVyZUhhbGZGbG9hdCkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgotICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVy
ZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUg
dHlwZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vIFZlcmlmeSB0aGF0IHRoZSBjb21iaW5hdGlvbiBvZiBmb3JtYXQgYW5kIHR5
cGUgaXMgc3VwcG9ydGVkLgotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNF
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKLSAgICAgICAg
aWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKLSAgICAgICAgICAg
ICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUCi0gICAgICAgICAgICAmJiB0eXBl
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUykgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQjoKLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX1NIT1JUXzVfNl81Ci0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9G
TE9BVF9PRVMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBS
R0IgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKLSAgICAgICAgaWYg
KHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKLSAgICAgICAgICAgICYm
IHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQKLSAgICAg
ICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81
XzEKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUCi0gICAg
ICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUykgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIFJHQkEgZm9ybWF0Iik7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UOgotICAgICAgICBpZiAo
IW1fd2ViZ2xEZXB0aFRleHR1cmUpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9y
bWF0LiBERVBUSF9DT01QT05FTlQgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlQKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0lOVCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUg
Zm9yIERFUFRIX0NPTVBPTkVOVCBmb3JtYXQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICBpZiAobGV2ZWwgPiAwKSB7Ci0gICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJsZXZlbCBtdXN0IGJlIDAgZm9yIERFUFRIX0NPTVBPTkVOVCBmb3JtYXQiKTsKLSAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKLSAgICAgICAgaWYgKCFtX3dlYmdsRGVw
dGhUZXh0dXJlKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdC4gREVQVEhf
U1RFTkNJTCBub3QgZW5hYmxlZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRf
MjRfOCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9yIERFUFRI
X1NURU5DSUwgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGxldmVsID4gMCkgewotICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibGV2ZWwg
bXVzdCBiZSAwIGZvciBERVBUSF9TVEVOQ0lMIGZvcm1hdCIpOwotICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKQotewotICAgIGlm
IChsZXZlbCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIDwgMCIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKLSAgICAgICAgaWYgKGxldmVsID49IG1fbWF4VGV4
dHVyZUxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1o6Ci0gICAgICAgIGlmIChsZXZlbCA+PSBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWwpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgLy8gVGhp
cyBmdW5jdGlvbiBvbmx5IGNoZWNrcyBpZiBsZXZlbCBpcyBsZWdhbCwgc28gd2UgcmV0dXJuIHRy
dWUgYW5kIGRvbid0Ci0gICAgLy8gZ2VuZXJhdGUgSU5WQUxJRF9FTlVNIGlmIHRhcmdldCBpcyBp
bGxlZ2FsLgotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhG
dW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUp
Ci17Ci0gICAgLy8gV2UgYWJzb2x1dGVseSBoYXZlIHRvIHZhbGlkYXRlIHRoZSBmb3JtYXQgYW5k
IHR5cGUgY29tYmluYXRpb24uCi0gICAgLy8gVGhlIHRleEltYWdlMkQgZW50cnkgcG9pbnRzIHRh
a2luZyBIVE1MSW1hZ2UsIGV0Yy4gd2lsbCBwcm9kdWNlCi0gICAgLy8gdGVtcG9yYXJ5IGRhdGEg
YmFzZWQgb24gdGhpcyBjb21iaW5hdGlvbiwgc28gaXQgbXVzdCBiZSBsZWdhbC4KLSAgICBpZiAo
IXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5cGUs
IGxldmVsKSB8fCAhdmFsaWRhdGVUZXhGdW5jTGV2ZWwoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxl
dmVsKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWln
aHQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBHQzNEaW50IG1heFRleHR1cmVTaXplRm9y
TGV2ZWwgPSBwb3coMi4wLCBtX21heFRleHR1cmVMZXZlbCAtIDEgLSBsZXZlbCk7Ci0gICAgc3dp
dGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgot
ICAgICAgICBpZiAod2lkdGggPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsIHx8IGhlaWdodCA+IG1h
eFRleHR1cmVTaXplRm9yTGV2ZWwpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBo
ZWlnaHQgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGlmIChmdW5jdGlvblR5cGUgIT0gVGV4
U3ViSW1hZ2UyRCAmJiB3aWR0aCAhPSBoZWlnaHQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3
aWR0aCAhPSBoZWlnaHQgZm9yIGN1YmUgbWFwIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgLy8gTm8gbmVlZCB0byBjaGVjayBoZWlnaHQgaGVyZS4gRm9y
IHRleEltYWdlIHdpZHRoID09IGhlaWdodC4KLSAgICAgICAgLy8gRm9yIHRleFN1YkltYWdlIHRo
YXQgd2lsbCBiZSBjaGVja2VkIHdoZW4gY2hlY2tpbmcgeW9mZnNldCArIGhlaWdodCBpcyBpbiBy
YW5nZS4KLSAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQgb2YgcmFuZ2UgZm9yIGN1YmUg
bWFwIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChmb3JtYXQgIT0gaW50ZXJuYWxm
b3JtYXQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgIT0gaW50ZXJuYWxmb3JtYXQi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChib3JkZXIpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImJvcmRlciAhPSAwIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IGxl
dmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXlCdWZm
ZXJWaWV3KiBwaXhlbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBOdWxsRGlzcG9zaXRpb24gZGlzcG9zaXRpb24pCi17Ci0gICAgaWYgKCFwaXhlbHMp
IHsKLSAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09IE51bGxBbGxvd2VkKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBwaXhlbHMiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlw
ZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwgdHlwZSwgbGV2ZWwpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFtZSwgZm9y
bWF0KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICAgICAgaWYgKHBpeGVs
cy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQ4KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgInR5cGUgVU5TSUdORURfQllURSBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBpZiAo
cGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDE2KSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgInR5cGUgVU5TSUdORURfU0hPUlQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWlu
dDE2QXJyYXkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogLy8gT0VTX3RleHR1
cmVfZmxvYXQKLSAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZUZsb2F0
MzIpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBGTE9BVCBidXQgQXJyYXlCdWZm
ZXJWaWV3IG5vdCBGbG9hdDMyQXJyYXkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxG
X0ZMT0FUX09FUzogLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdAotICAgICAgICAvLyBBcyBwZXIg
dGhlIHNwZWNpZmljYXRpb24sIEFycmF5QnVmZmVyVmlldyBzaG91bGQgYmUgbnVsbCB3aGVuCi0g
ICAgICAgIC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQgaXMgZW5hYmxlZC4KLSAgICAgICAgaWYg
KHBpeGVscykgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEhBTEZfRkxPQVRfT0VT
IGJ1dCBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IE5VTEwiKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgdG90YWxCeXRl
c1JlcXVpcmVkOwotICAgIEdDM0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VT
aXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50
LCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKLSAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZGltZW5zaW9ucyIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA8IHRvdGFsQnl0ZXNS
ZXF1aXJlZCkgewotICAgICAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkgewotICAgICAg
ICAgIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5
cGUsIHdpZHRoLCBoZWlnaHQsIDEsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsIDApOwotICAgICAgICAg
IGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA9PSB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciBy
ZXF1ZXN0IHdpdGggVU5QQUNLX0FMSUdOTUVOVCA+IDEiKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJBcnJh
eUJ1ZmZlclZpZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJlcXVlc3QiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51bSBmb3JtYXQpCi17
Ci0gICAgcmV0dXJuIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmNvbnRhaW5zKGZvcm1hdCk7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhG
dW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMp
Ci17Ci0gICAgaWYgKCFwaXhlbHMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0
IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IGJ5dGVzUmVxdWlyZWQg
PSAwOwotCi0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfQVRDX1JHQl9BTUQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tT
aXplID0gODsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7Ci0gICAgICAg
ICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgICAgIGludCBudW1CbG9j
a3NBY3Jvc3MgPSAod2lkdGggKyBrQmxvY2tXaWR0aCAtIDEpIC8ga0Jsb2NrV2lkdGg7Ci0gICAg
ICAgICAgICBpbnQgbnVtQmxvY2tzRG93biA9IChoZWlnaHQgKyBrQmxvY2tIZWlnaHQgLSAxKSAv
IGtCbG9ja0hlaWdodDsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1CbG9ja3NBY3Jv
c3MgKiBudW1CbG9ja3NEb3duICoga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0VYUExJQ0lUX0FMUEhB
X0FNRDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9JTlRFUlBP
TEFURURfQUxQSEFfQU1EOgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2Nr
U2l6ZSA9IDE2OwotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKLSAgICAg
ICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OwotICAgICAgICAgICAgaW50IG51bUJs
b2Nrc0Fjcm9zcyA9ICh3aWR0aCArIGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxvY2tXaWR0aDsKLSAg
ICAgICAgICAgIGludCBudW1CbG9ja3NEb3duID0gKGhlaWdodCArIGtCbG9ja0hlaWdodCAtIDEp
IC8ga0Jsb2NrSGVpZ2h0OwotICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fj
cm9zcyAqIG51bUJsb2Nrc0Rvd24gKiBrQmxvY2tTaXplOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFf
SU1HOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYx
X0lNRzoKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4Owot
ICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gODsKLSAgICAgICAgICAgIGNvbnN0
IGludCBrQmxvY2tIZWlnaHQgPSA4OwotICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IChzdGQ6
Om1heCh3aWR0aCwga0Jsb2NrV2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tIZWlnaHQp
ICogNCArIDcpIC8ga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gODsKLSAgICAgICAgICAg
IGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDE2OwotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9j
a0hlaWdodCA9IDg7Ci0gICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdpZHRo
LCBrQmxvY2tXaWR0aCkgKiBzdGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiAyICsgNykg
LyBrQmxvY2tTaXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgIT0gYnl0ZXNSZXF1aXJlZCkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibGVuZ3RoIG9mIEFycmF5QnVmZmVyVmlldyBpcyBub3QgY29y
cmVjdCBmb3IgZGltZW5zaW9ucyIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RlbnVtIGZvcm1hdCkKLXsKLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOiB7Ci0gICAgICAgIGNvbnN0IEdD
M0RzaXplaSBrQmxvY2tXaWR0aCA9IDQ7Ci0gICAgICAgIGNvbnN0IEdDM0RzaXplaSBrQmxvY2tI
ZWlnaHQgPSA0OwotICAgICAgICBjb25zdCBHQzNEaW50IG1heFRleHR1cmVTaXplID0gdGFyZ2V0
ID8gbV9tYXhUZXh0dXJlU2l6ZSA6IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOwotICAgICAgICBj
b25zdCBHQzNEc2l6ZWkgbWF4Q29tcHJlc3NlZERpbWVuc2lvbiA9IG1heFRleHR1cmVTaXplID4+
IGxldmVsOwotICAgICAgICBib29sIHdpZHRoVmFsaWQgPSAobGV2ZWwgJiYgd2lkdGggPT0gMSkg
fHwgKGxldmVsICYmIHdpZHRoID09IDIpIHx8ICghKHdpZHRoICUga0Jsb2NrV2lkdGgpICYmIHdp
ZHRoIDw9IG1heENvbXByZXNzZWREaW1lbnNpb24pOwotICAgICAgICBib29sIGhlaWdodFZhbGlk
ID0gKGxldmVsICYmIGhlaWdodCA9PSAxKSB8fCAobGV2ZWwgJiYgaGVpZ2h0ID09IDIpIHx8ICgh
KGhlaWdodCAlIGtCbG9ja0hlaWdodCkgJiYgaGVpZ2h0IDw9IG1heENvbXByZXNzZWREaW1lbnNp
b24pOwotICAgICAgICBpZiAoIXdpZHRoVmFsaWQgfHwgIWhlaWdodFZhbGlkKSB7Ci0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIH0KLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQ
UFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQ
UFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRC
UFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18y
QlBQVjFfSU1HOgotICAgICAgICAvLyBIZWlnaHQgYW5kIHdpZHRoIG11c3QgYmUgcG93ZXJzIG9m
IDIuCi0gICAgICAgIGlmICgod2lkdGggJiAod2lkdGggLSAxKSkgfHwgKGhlaWdodCAmIChoZWln
aHQgLSAxKSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGlu
dmFsaWQgZm9yIGxldmVsIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJl
c3NlZFRleFN1YkRpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQs
IFdlYkdMVGV4dHVyZSogdGV4KQotewotICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwg
MCkgewotICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgb3IgeW9mZnNldCA8IDAiKTsKLSAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOiB7Ci0gICAgICAgIGNvbnN0IGludCBr
QmxvY2tXaWR0aCA9IDQ7Ci0gICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OwotICAg
ICAgICBpZiAoKHhvZmZzZXQgJSBrQmxvY2tXaWR0aCkgfHwgKHlvZmZzZXQgJSBrQmxvY2tIZWln
aHQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgb3IgeW9mZnNldCBub3Qg
bXVsdGlwbGUgb2YgNCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmICh3aWR0aCAtIHhvZmZzZXQgPiB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwp
Ci0gICAgICAgICAgICB8fCBoZWlnaHQgLSB5b2Zmc2V0ID4gdGV4LT5nZXRIZWlnaHQodGFyZ2V0
LCBsZXZlbCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2Yg
cmFuZ2UiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdl
dCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7Ci0gICAgfQotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6IHsKLSAgICAgICAgaWYg
KHhvZmZzZXQgfHwgeW9mZnNldCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0
IGFuZCB5b2Zmc2V0IG11c3QgYmUgemVybyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGlmICh3aWR0aCAhPSB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2
ZWwpCi0gICAgICAgICAgICB8fCBoZWlnaHQgIT0gdGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZl
bCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBtdXN0IG1hdGNoIGV4
aXN0aW5nIGxldmVsIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoZnVuY3Rpb25OYW1l
LCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOwotICAgIH0KLSAgICBkZWZh
dWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmFsaWRhdGVEcmF3TW9kZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIG1vZGUpCi17Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UE9JTlRTOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfU1RSSVA6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxJTkVTOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xF
X1NUUklQOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTjoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVM6Ci0gICAgICAgIHJldHVybiB0cnVlOwot
ICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZHJhdyBtb2RlIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpCi17Ci0g
ICAgaWYgKG1fc3RlbmNpbE1hc2sgIT0gbV9zdGVuY2lsTWFza0JhY2sgfHwgbV9zdGVuY2lsRnVu
Y1JlZiAhPSBtX3N0ZW5jaWxGdW5jUmVmQmFjayB8fCBtX3N0ZW5jaWxGdW5jTWFzayAhPSBtX3N0
ZW5jaWxGdW5jTWFza0JhY2spIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmcm9udCBhbmQgYmFj
ayBzdGVuY2lscyBzZXR0aW5ncyBkbyBub3QgbWF0Y2giKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlU3RlbmNpbEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSBmdW5jKQotewotICAgIHN3aXRjaCAoZnVuYykgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok5FVkVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxFU1M6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TEVRVUFMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdS
RUFURVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R0VRVUFMOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkVRVUFMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PVEVR
VUFMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMV0FZUzoKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmdW5jdGlvbiIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cHJpbnRHTEVycm9yVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsK
LSAgICBpZiAoIW1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAtLW1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkOwotICAgIHByaW50V2Fybmlu
Z1RvQ29uc29sZShtZXNzYWdlKTsKLQotICAgIGlmICghbV9udW1HTEVycm9yc1RvQ29uc29sZUFs
bG93ZWQpCi0gICAgICAgIHByaW50V2FybmluZ1RvQ29uc29sZSgiV2ViR0w6IHRvbyBtYW55IGVy
cm9ycywgbm8gbW9yZSBlcnJvcnMgd2lsbCBiZSByZXBvcnRlZCB0byB0aGUgY29uc29sZSBmb3Ig
dGhpcyBjb250ZXh0LiIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cHJpbnRX
YXJuaW5nVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKLXsKLSAgICBpZiAoIWNhbnZh
cygpKQotICAgICAgICByZXR1cm47Ci0gICAgY2FudmFzKCktPmRvY3VtZW50KCkuYWRkQ29uc29s
ZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6UmVuZGVyaW5nLCBNZXNzYWdlTGV2ZWw6Oldhcm5pbmcs
IG1lc3NhZ2UpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVGcmFt
ZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50KQotewotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFy
Z2V0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgc3dpdGNoIChhdHRhY2ht
ZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDA6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzCi0gICAgICAgICAgICAmJiBh
dHRhY2htZW50ID4gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwCi0gICAgICAg
ICAgICAmJiBhdHRhY2htZW50IDwgc3RhdGljX2Nhc3Q8R0MzRGVudW0+KEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCArIGdldE1heENvbG9yQXR0YWNobWVudHMoKSkpCi0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBhdHRhY2htZW50Iik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfQUREOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZVTkNfU1VCVFJBQ1Q6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19S
RVZFUlNFX1NVQlRSQUNUOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRGdW5jRmFj
dG9ycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHNyYywgR0MzRGVudW0gZHN0
KQotewotICAgIGlmICgoKHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1Ig
fHwgc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCi0g
ICAgICAgICAmJiAoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBk
c3QgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpCi0gICAg
ICAgIHx8ICgoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9DT0xPUiB8fCBkc3Qg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xPUikKLSAgICAgICAg
ICAgICYmIChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0FMUEhBIHx8IHNyYyA9
PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKSkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJpbmNvbXBhdGlibGUgc3JjIGFuZCBkc3QiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIGNhcCkKLXsKLSAgICBzd2l0Y2ggKGNhcCkgewotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRJVEhFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09O
X09GRlNFVF9GSUxMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9BTFBIQV9U
T19DT1ZFUkFHRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0U6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBjYXBhYmlsaXR5Iik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXpl
aSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBhcnJheSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNl
LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50
MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKLXsKLSAgICBpZiAoIXYpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25O
YW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWlu
U2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVp
cmVkTWluU2l6ZSkKLXsKLSAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVy
cyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdiwgc2l6ZSwgcmVxdWlyZWRNaW5TaXpl
KTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybU1hdHJp
eFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2
LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQotewotICAgIGlmICghdikgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0
aW9uLCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQ
YXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqIHYsIEdDM0RzaXpl
aSBzaXplLCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQotewotICAgIGlmICghbG9jYXRpb24p
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBt
X2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibG9jYXRpb24gaXMgbm90
IGZyb20gY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICh0cmFuc3Bvc2UpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
InRyYW5zcG9zZSBub3QgRkFMU0UiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICBpZiAoc2l6ZSA8IHJlcXVpcmVkTWluU2l6ZSB8fCAoc2l6ZSAlIHJlcXVpcmVkTWluU2l6ZSkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgc2l6ZSIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1XZWJHTEJ1ZmZlciogV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBXZWJH
TEJ1ZmZlciogYnVmZmVyID0gMDsKLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSOgotICAgICAgICBidWZmZXIgPSBt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpLmdldCgpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVI6
Ci0gICAgICAgIGJ1ZmZlciA9IG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIGlmICghYnVmZmVyKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAibm8gYnVmZmVyIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLSAgICBzd2l0Y2ggKHVzYWdlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RS
RUFNX0RSQVc6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVc6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXOgotICAgICAgICByZXR1cm4gYnVm
ZmVyOwotICAgIH0KLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHVzYWdlIik7Ci0gICAgcmV0dXJuIG51
bGxwdHI7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUhUTUxJbWFn
ZUVsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFn
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgaWYgKCFpbWFnZSB8fCAhaW1hZ2UtPmNhY2hl
ZEltYWdlKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGltYWdlIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgY29uc3QgVVJMJiB1cmwgPSBpbWFnZS0+Y2FjaGVkSW1hZ2Uo
KS0+cmVzcG9uc2UoKS51cmwoKTsKLSAgICBpZiAodXJsLmlzTnVsbCgpIHx8IHVybC5pc0VtcHR5
KCkgfHwgIXVybC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgaW1hZ2Ui
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAod291bGRUYWludE9yaWdp
bihpbWFnZSkpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
aWYgKCFjYW52YXMgfHwgIWNhbnZhcy0+YnVmZmVyKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5v
IGNhbnZhcyIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICh3b3VsZFRh
aW50T3JpZ2luKGNhbnZhcykpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLSNpZiBFTkFCTEUo
VklERU8pCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MVmlkZW9FbGVt
ZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghdmlkZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRo
KCkgfHwgIXZpZGVvLT52aWRlb0hlaWdodCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyB2aWRl
byIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICh3b3VsZFRhaW50T3Jp
Z2luKHZpZGVvKSkgewotICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliZkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEdWludCBpbmRleCwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSwgR0MzRGZsb2F0IHYw
LCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoaW5kZXgg
Pj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBvdXQgb2Yg
cmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBJbiBHTCwgd2Ugc2tpcCBz
ZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgotICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29t
cGxpYW50KCkpIHsKLSAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsKLSAgICAgICAgY2Fz
ZSAxOgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZihpbmRleCwgdjApOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliMmYoaW5kZXgsIHYwLCB2MSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSAzOgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIzZihpbmRl
eCwgdjAsIHYxLCB2Mik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAg
ICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZihpbmRleCwgdjAsIHYxLCB2MiwgdjMp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgVmVydGV4QXR0cmli
VmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07Ci0gICAgYXR0
cmliVmFsdWUudmFsdWVbMF0gPSB2MDsKLSAgICBhdHRyaWJWYWx1ZS52YWx1ZVsxXSA9IHYxOwot
ICAgIGF0dHJpYlZhbHVlLnZhbHVlWzJdID0gdjI7Ci0gICAgYXR0cmliVmFsdWUudmFsdWVbM10g
PSB2MzsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2SW1w
bChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkq
IHYsIEdDM0RzaXplaSBleHBlY3RlZFNpemUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdikgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICB2ZXJ0ZXhBdHRyaWJm
dkltcGwoZnVuY3Rpb25OYW1lLCBpbmRleCwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgZXhwZWN0
ZWRTaXplKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZ2
SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQq
IHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXYpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKHNpemUgPCBleHBlY3RlZFNpemUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
c2l6ZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChpbmRleCA+PSBtX21heFZl
cnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVy
dGV4QXR0cmliMCB2YWx1ZXMuCi0gICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkg
ewotICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkU2l6ZSkgewotICAgICAgICBjYXNlIDE6Ci0gICAg
ICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmdihpbmRleCwgdik7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhB
dHRyaWIyZnYoaW5kZXgsIHYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoK
LSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCB2KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDQ6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYjRmdihpbmRleCwgdik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBtX3ZlcnRleEF0dHJp
YlZhbHVlW2luZGV4XTsKLSAgICBhdHRyaWJWYWx1ZS5pbml0VmFsdWUoKTsKLSAgICBmb3IgKGlu
dCBpaSA9IDA7IGlpIDwgZXhwZWN0ZWRTaXplOyArK2lpKQotICAgICAgICBhdHRyaWJWYWx1ZS52
YWx1ZVtpaV0gPSB2W2lpXTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRW
ZXJ0ZXhBdHRyaWIwKCkKLXsKLSAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhB
dHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0
dHJpYlN0YXRlKDApOwotICAgIAotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlciA9IGNyZWF0ZUJ1
ZmZlcigpOwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKLSAgICBtX2NvbnRl
eHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVyk7Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQ
b2ludGVyKDAsIDQsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOwotICAg
IHN0YXRlLmJ1ZmZlckJpbmRpbmcgPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7Ci0gICAgbV9jb250
ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDApOwotICAg
IG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7Ci0gICAgbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyU2l6ZSA9IDA7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0gPSAw
LjBmOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gMC4wZjsKLSAgICBtX3Zl
cnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9IDAuMGY7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyVmFsdWVbM10gPSAxLjBmOwotICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gZmFs
c2U7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSA9IGZhbHNlOwotfQotCi1ib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdDM0RzaXplaSBudW1W
ZXJ0ZXgpCi17Ci0gICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0
cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRy
aWJTdGF0ZSgwKTsKLSAgICBjb25zdCBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBt
X3ZlcnRleEF0dHJpYlZhbHVlWzBdOwotICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGJvb2wgdXNpbmdWZXJ0ZXhBdHRyaWIwID0gbV9jdXJyZW50
UHJvZ3JhbS0+aXNVc2luZ1ZlcnRleEF0dHJpYjAoKTsKLSAgICBpZiAodXNpbmdWZXJ0ZXhBdHRy
aWIwKQotICAgICAgICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKLSAgICBpZiAo
c3RhdGUuZW5hYmxlZCAmJiB1c2luZ1ZlcnRleEF0dHJpYjApCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoIXVzaW5nVmVydGV4QXR0cmliMCAmJiAhbV92ZXJ0ZXhBdHRyaWIwVXNlZEJl
Zm9yZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZv
cmUgPSB0cnVlOwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKLSAgICBHQzNE
c2l6ZWlwdHIgYnVmZmVyRGF0YVNpemUgPSAobnVtVmVydGV4ICsgMSkgKiA0ICogc2l6ZW9mKEdD
M0RmbG9hdCk7Ci0gICAgaWYgKGJ1ZmZlckRhdGFTaXplID4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
U2l6ZSkgewotICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgYnVmZmVyRGF0YVNpemUsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5B
TUlDX0RSQVcpOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplID0gYnVmZmVyRGF0
YVNpemU7Ci0gICAgICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gdHJ1ZTsKLSAgICB9
Ci0gICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMAotICAgICAgICAmJiAobV9mb3JjZUF0dHJpYjBC
dWZmZXJSZWZpbGwKLSAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzBdICE9IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdCi0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1
ZVsxXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXQotICAgICAgICAgICAgfHwgYXR0
cmliVmFsdWUudmFsdWVbMl0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KLSAgICAg
ICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzNdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZh
bHVlWzNdKSkgewotICAgICAgICBhdXRvIGJ1ZmZlckRhdGEgPSBzdGQ6Om1ha2VfdW5pcXVlPEdD
M0RmbG9hdFtdPigobnVtVmVydGV4ICsgMSkgKiA0KTsKLSAgICAgICAgZm9yIChHQzNEc2l6ZWkg
aWkgPSAwOyBpaSA8IG51bVZlcnRleCArIDE7ICsraWkpIHsKLSAgICAgICAgICAgIGJ1ZmZlckRh
dGFbaWkgKiA0XSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOwotICAgICAgICAgICAgYnVmZmVyRGF0
YVtpaSAqIDQgKyAxXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzFdOwotICAgICAgICAgICAgYnVmZmVy
RGF0YVtpaSAqIDQgKyAyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwotICAgICAgICAgICAgYnVm
ZmVyRGF0YVtpaSAqIDQgKyAzXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOwotICAgICAgICB9Ci0g
ICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdID0gYXR0cmliVmFsdWUudmFsdWVb
MF07Ci0gICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gYXR0cmliVmFsdWUu
dmFsdWVbMV07Ci0gICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdID0gYXR0cmli
VmFsdWUudmFsdWVbMl07Ci0gICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0g
YXR0cmliVmFsdWUudmFsdWVbM107Ci0gICAgICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxs
ID0gZmFsc2U7Ci0gICAgICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YShHcmFwaGljc0NvbnRl
eHQzRDo6QVJSQVlfQlVGRkVSLCAwLCBidWZmZXJEYXRhU2l6ZSwgYnVmZmVyRGF0YS5nZXQoKSk7
Ci0gICAgfQotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQsIDAsIDAsIDApOwotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNp
bXVsYXRpb24oKQotewotICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRl
eEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4
QXR0cmliU3RhdGUoMCk7Ci0gICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgIT0gbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyKSB7Ci0gICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSLCBvYmplY3RPclplcm8oc3RhdGUuYnVmZmVyQmluZGluZy5n
ZXQoKSkpOwotICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgc3RhdGUu
c2l6ZSwgc3RhdGUudHlwZSwgc3RhdGUubm9ybWFsaXplZCwgc3RhdGUub3JpZ2luYWxTdHJpZGUs
IHN0YXRlLm9mZnNldCk7Ci0gICAgfQotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBvYmplY3RPclplcm8obV9ib3VuZEFycmF5QnVmZmVy
LmdldCgpKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENvbnRl
eHRMb3N0RXZlbnQoKQotewotICAgIFJlZlB0cjxXZWJHTENvbnRleHRFdmVudD4gZXZlbnQgPSBX
ZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRsb3N0RXZl
bnQsIGZhbHNlLCB0cnVlLCAiIik7Ci0gICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoZXZlbnQp
OwotICAgIG1fcmVzdG9yZUFsbG93ZWQgPSBldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpOwotICAg
IGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQgJiYgbV9yZXN0b3JlQWxs
b3dlZCkKLSAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCgpCi17Ci0gICAgQVNT
RVJUKG1fY29udGV4dExvc3QpOwotICAgIGlmICghbV9jb250ZXh0TG9zdCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gVGhlIHJlbmRlcmluZyBjb250ZXh0IGlzIG5vdCByZXN0b3JlZCB1bmxl
c3MgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlCi0gICAgLy8gd2ViZ2xjb250ZXh0bG9zdCBl
dmVudCB3YXMgcHJldmVudGVkIGVhcmxpZXIuCi0gICAgLy8KLSAgICAvLyBCZWNhdXNlIG9mIHRo
ZSB3YXkgbV9yZXN0b3JlVGltZXIgaXMgc2V0IHVwIGZvciByZWFsIHZzLiBzeW50aGV0aWMgbG9z
dAotICAgIC8vIGNvbnRleHQgZXZlbnRzLCB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRo
aXMgdGVzdCBzaG9ydC1jaXJjdWl0aW5nCi0gICAgLy8gdGhlIHJldHJ5IGxvb3AgZm9yIHJlYWwg
Y29udGV4dCBsb3N0IGV2ZW50cy4KLSAgICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGludCBjb250ZXh0TG9zdFJlYXNvbiA9IG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3RhdHVzQVJCKCk7Ci0KLSAgICBzd2l0Y2ggKGNv
bnRleHRMb3N0UmVhc29uKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I6
Ci0gICAgICAgIC8vIFRoZSBHcmFwaGljc0NvbnRleHQzRCBpbXBsZW1lbnRhdGlvbiBtaWdodCBu
b3QgZnVsbHkKLSAgICAgICAgLy8gc3VwcG9ydCBHTF9BUkJfcm9idXN0bmVzcyBzZW1hbnRpY3Mg
eWV0LiBBbHRlcm5hdGl2ZWx5LCB0aGUKLSAgICAgICAgLy8gV0VCR0xfbG9zZV9jb250ZXh0IGV4
dGVuc2lvbiBtaWdodCBoYXZlIGJlZW4gdXNlZCB0byBmb3JjZQotICAgICAgICAvLyBhIGxvc3Qg
Y29udGV4dC4KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkdVSUxUWV9D
T05URVhUX1JFU0VUX0FSQjoKLSAgICAgICAgLy8gVGhlIHJlbmRlcmluZyBjb250ZXh0IGlzIG5v
dCByZXN0b3JlZCBpZiB0aGlzIGNvbnRleHQgd2FzCi0gICAgICAgIC8vIGd1aWx0eSBvZiBjYXVz
aW5nIHRoZSBncmFwaGljcyByZXNldC4KLSAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJX
QVJOSU5HOiBXZWJHTCBjb250ZW50IG9uIHRoZSBwYWdlIGNhdXNlZCB0aGUgZ3JhcGhpY3MgY2Fy
ZCB0byByZXNldDsgbm90IHJlc3RvcmluZyB0aGUgY29udGV4dCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OklOTk9DRU5UX0NPTlRFWFRfUkVTRVRfQVJCOgotICAg
ICAgICAvLyBBbHdheXMgYWxsb3cgdGhlIGNvbnRleHQgdG8gYmUgcmVzdG9yZWQuCi0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpVTktOT1dOX0NPTlRFWFRfUkVTRVRfQVJC
OgotICAgICAgICAvLyBXYXJuLiBJZGVhbGx5LCBwcm9tcHQgdGhlIHVzZXIgdGVsbGluZyB0aGVt
IHRoYXQgV2ViR0wKLSAgICAgICAgLy8gY29udGVudCBvbiB0aGUgcGFnZSBtaWdodCBoYXZlIGNh
dXNlZCB0aGUgZ3JhcGhpY3MgY2FyZCB0bwotICAgICAgICAvLyByZXNldCBhbmQgYXNrIHRoZW0g
d2hldGhlciB0aGV5IHdhbnQgdG8gY29udGludWUgcnVubmluZwotICAgICAgICAvLyB0aGUgY29u
dGVudC4gT25seSBpZiB0aGV5IHNheSAieWVzIiBzaG91bGQgd2Ugc3RhcnQKLSAgICAgICAgLy8g
YXR0ZW1wdGluZyB0byByZXN0b3JlIHRoZSBjb250ZXh0LgotICAgICAgICBwcmludFdhcm5pbmdU
b0NvbnNvbGUoIldBUk5JTkc6IFdlYkdMIGNvbnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBj
YXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQiKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCi0gICAgRnJhbWUqIGZyYW1lID0gY2FudmFzKCktPmRvY3VtZW50KCkuZnJhbWUoKTsKLSAg
ICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWZyYW1lLT5sb2FkZXIo
KS5jbGllbnQoKS5hbGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdMRW5hYmxlZCgpKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgRnJhbWVWaWV3KiB2aWV3ID0gZnJhbWUtPnZpZXcoKTsK
LSAgICBpZiAoIXZpZXcpCi0gICAgICAgIHJldHVybjsKLSAgICBTY3JvbGxWaWV3KiByb290ID0g
dmlldy0+cm9vdCgpOwotICAgIGlmICghcm9vdCkKLSAgICAgICAgcmV0dXJuOwotICAgIEhvc3RX
aW5kb3cqIGhvc3RXaW5kb3cgPSByb290LT5ob3N0V2luZG93KCk7Ci0gICAgaWYgKCFob3N0V2lu
ZG93KQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQoR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShtX2F0dHJpYnV0ZXMsIGhvc3RXaW5kb3cp
KTsKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09
IFJlYWxMb3N0Q29udGV4dCkKLSAgICAgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hv
dChzZWNvbmRzQmV0d2VlblJlc3RvcmVBdHRlbXB0cyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIC8vIFRoaXMgbGlrZWx5IHNob3VsZG4ndCBoYXBwZW4gYnV0IGlzIHRoZSBiZXN0IHdheSB0
byByZXBvcnQgaXQgdG8gdGhlIFdlYkdMIGFwcC4KLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgIiIsICJlcnJvciByZXN0
b3JpbmcgY29udGV4dCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ29uc3Ry
dWN0IGEgbmV3IGRyYXdpbmcgYnVmZmVyIHdpdGggdGhlIG5ldyBHcmFwaGljc0NvbnRleHQzRC4K
LSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+ZGlz
Y2FyZFJlc291cmNlcygpOwotICAgICAgICBEcmF3aW5nQnVmZmVyOjpQcmVzZXJ2ZURyYXdpbmdC
dWZmZXIgcHJlc2VydmUgPSBtX2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID8gRHJh
d2luZ0J1ZmZlcjo6UHJlc2VydmUgOiBEcmF3aW5nQnVmZmVyOjpEaXNjYXJkOwotICAgICAgICBE
cmF3aW5nQnVmZmVyOjpBbHBoYVJlcXVpcmVtZW50IGFscGhhID0gbV9hdHRyaWJ1dGVzLmFscGhh
ID8gRHJhd2luZ0J1ZmZlcjo6QWxwaGEgOiBEcmF3aW5nQnVmZmVyOjpPcGFxdWU7Ci0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShjb250ZXh0LmdldCgpLCBt
X2RyYXdpbmdCdWZmZXItPnNpemUoKSwgcHJlc2VydmUsIGFscGhhKTsKLSAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgfQotCi0gICAgbV9jb250ZXh0ID0gY29udGV4dDsKLSAg
ICBtX2NvbnRleHRMb3N0ID0gZmFsc2U7Ci0gICAgc2V0dXBGbGFncygpOwotICAgIGluaXRpYWxp
emVOZXdDb250ZXh0KCk7Ci0gICAgY2FudmFzKCktPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0cmVzdG9yZWRFdmVudCwgZmFs
c2UsIHRydWUsICIiKSk7Ci19Ci0KLVN0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuc3Vy
ZU5vdE51bGwoY29uc3QgU3RyaW5nJiB0ZXh0KSBjb25zdAotewotICAgIGlmICh0ZXh0LmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gV1RGOjplbXB0eVN0cmluZygpOwotICAgIHJldHVybiB0ZXh0
OwotfQotCi1XZWJHTFJlbmRlcmluZ0NvbnRleHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OkxSVUlt
YWdlQnVmZmVyQ2FjaGUoaW50IGNhcGFjaXR5KQotICAgIDogbV9idWZmZXJzKHN0ZDo6bWFrZV91
bmlxdWU8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPltdPihjYXBhY2l0eSkpCi0gICAgLCBt
X2NhcGFjaXR5KGNhcGFjaXR5KQotewotfQotCi1JbWFnZUJ1ZmZlciogV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBz
aXplKQotewotICAgIGludCBpOwotICAgIGZvciAoaSA9IDA7IGkgPCBtX2NhcGFjaXR5OyArK2kp
IHsKLSAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fYnVmZmVyc1tpXS5nZXQoKTsKLSAgICAg
ICAgaWYgKCFidWYpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKGJ1Zi0+bG9naWNh
bFNpemUoKSAhPSBzaXplKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGJ1YmJsZVRv
RnJvbnQoaSk7Ci0gICAgICAgIHJldHVybiBidWY7Ci0gICAgfQotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCAxKTsKLSAg
ICBpZiAoIXRlbXApCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGkgPSBzdGQ6Om1pbiht
X2NhcGFjaXR5IC0gMSwgaSk7Ci0gICAgbV9idWZmZXJzW2ldID0gV1RGOjptb3ZlKHRlbXApOwot
Ci0gICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fYnVmZmVyc1tpXS5nZXQoKTsKLSAgICBidWJibGVU
b0Zyb250KGkpOwotICAgIHJldHVybiBidWY7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpidWJibGVUb0Zyb250KGludCBpZHgpCi17Ci0gICAg
Zm9yIChpbnQgaSA9IGlkeDsgaSA+IDA7IC0taSkKLSAgICAgICAgbV9idWZmZXJzW2ldLnN3YXAo
bV9idWZmZXJzW2ktMV0pOwotfQotCi1uYW1lc3BhY2UgewotCi0gICAgU3RyaW5nIEdldEVycm9y
U3RyaW5nKEdDM0RlbnVtIGVycm9yKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChlcnJvcikgewot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU06Ci0gICAgICAgICAg
ICByZXR1cm4gIklOVkFMSURfRU5VTSI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUU6Ci0gICAgICAgICAgICByZXR1cm4gIklOVkFMSURfVkFMVUUiOwotICAg
ICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTjoKLSAgICAgICAg
ICAgIHJldHVybiAiSU5WQUxJRF9PUEVSQVRJT04iOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpPVVRfT0ZfTUVNT1JZOgotICAgICAgICAgICAgcmV0dXJuICJPVVRfT0ZfTUVNT1JZ
IjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9P
UEVSQVRJT046Ci0gICAgICAgICAgICByZXR1cm4gIklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFU
SU9OIjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdM
OgotICAgICAgICAgICAgcmV0dXJuICJDT05URVhUX0xPU1RfV0VCR0wiOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCJXZWJHTCBFUlJPUiglMDR4
KSIsIGVycm9yKTsKLSAgICAgICAgfQotICAgIH0KLQotfSAvLyBuYW1lc3BhY2UgYW5vbnltb3Vz
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51
bSBlcnJvciwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlv
biwgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlIGRpc3BsYXkpCi17Ci0gICAgaWYgKG1fc3ludGhl
c2l6ZWRFcnJvcnNUb0NvbnNvbGUgJiYgZGlzcGxheSA9PSBEaXNwbGF5SW5Db25zb2xlKSB7Ci0g
ICAgICBTdHJpbmcgc3RyID0gU3RyaW5nKCJXZWJHTDogIikgKyBHZXRFcnJvclN0cmluZyhlcnJv
cikgKyAgIjogIiArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0cmluZyhkZXNjcmlw
dGlvbik7Ci0gICAgICBwcmludEdMRXJyb3JUb0NvbnNvbGUoc3RyKTsKLSAgICB9Ci0gICAgbV9j
b250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihlcnJvcik7Ci19Ci0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24pCi17Ci0gICAgaWYgKG1fc3ludGhlc2l6ZWRF
cnJvcnNUb0NvbnNvbGUpIHsKLSAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIp
ICsgU3RyaW5nKGZ1bmN0aW9uTmFtZSkgKyAiOiAiICsgU3RyaW5nKGRlc2NyaXB0aW9uKTsKLSAg
ICAgICAgcHJpbnRHTEVycm9yVG9Db25zb2xlKHN0cik7Ci0gICAgfQotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YXBwbHlTdGVuY2lsVGVzdCgpCi17Ci0gICAgYm9vbCBoYXZlU3Rl
bmNpbEJ1ZmZlciA9IGZhbHNlOwotCi0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAg
ICAgICBoYXZlU3RlbmNpbEJ1ZmZlciA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5oYXNTdGVuY2ls
QnVmZmVyKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1
dGVzPiBhdHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLSAgICAgICAgaGF2ZVN0
ZW5jaWxCdWZmZXIgPSBhdHRyaWJ1dGVzLT5zdGVuY2lsKCk7Ci0gICAgfQotICAgIGVuYWJsZU9y
RGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNULAotICAgICAgICAgICAgICAg
ICAgICBtX3N0ZW5jaWxFbmFibGVkICYmIGhhdmVTdGVuY2lsQnVmZmVyKTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmVuYWJsZU9yRGlzYWJsZShHQzNEZW51bSBjYXBhYmlsaXR5
LCBib29sIGVuYWJsZSkKLXsKLSAgICBpZiAoZW5hYmxlKQotICAgICAgICBtX2NvbnRleHQtPmVu
YWJsZShjYXBhYmlsaXR5KTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShj
YXBhYmlsaXR5KTsKLX0KLQotSW50U2l6ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsYW1wZWRD
YW52YXNTaXplKCkKLXsKLSAgICByZXR1cm4gSW50U2l6ZShjbGFtcChjYW52YXMoKS0+d2lkdGgo
KSwgMSwgbV9tYXhWaWV3cG9ydERpbXNbMF0pLAotICAgICAgICAgICAgICAgICAgIGNsYW1wKGNh
bnZhcygpLT5oZWlnaHQoKSwgMSwgbV9tYXhWaWV3cG9ydERpbXNbMV0pKTsKLX0KLQotR0MzRGlu
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldE1heERyYXdCdWZmZXJzKCkKLXsKLSAgICBpZiAo
IXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtX21h
eERyYXdCdWZmZXJzKQotICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMz
RDo6TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtX21heERyYXdCdWZmZXJzKTsKLSAgICBpZiAoIW1f
bWF4Q29sb3JBdHRhY2htZW50cykKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRl
bnNpb25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVu
dHMpOwotICAgIC8vIFdFQkdMX2RyYXdfYnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNI
TUVOVFMgPj0gTUFYX0RSQVdfQlVGRkVSUy4KLSAgICByZXR1cm4gc3RkOjptaW4obV9tYXhEcmF3
QnVmZmVycywgbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKLX0KLQotR0MzRGludCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldE1heENvbG9yQXR0YWNobWVudHMoKQotewotICAgIGlmICghc3VwcG9y
dHNEcmF3QnVmZmVycygpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIW1fbWF4Q29sb3JB
dHRhY2htZW50cykKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6
Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOwotICAg
IHJldHVybiBtX21heENvbG9yQXR0YWNobWVudHM7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSBidWYpCi17Ci0gICAgbV9iYWNrRHJh
d0J1ZmZlciA9IGJ1ZjsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVD
dXJyZW50RnJhbWVidWZmZXIoKQotewotICAgIEV4Y2VwdGlvbkNvZGUgZWM7Ci0gICAgYmluZEZy
YW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlckJp
bmRpbmcuZ2V0KCksIGVjKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3Rv
cmVDdXJyZW50VGV4dHVyZTJEKCkKLXsKLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAgIGJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX3RleHR1cmVVbml0c1ttX2Fj
dGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpLCBlYyk7Ci19Ci0KLWJvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdXBwb3J0c0RyYXdCdWZmZXJzKCkKLXsKLSAgICBpZiAo
IW1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQpIHsKLSAgICAgICAgbV9kcmF3
QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZCA9IHRydWU7Ci0gICAgICAgIG1fZHJhd0J1
ZmZlcnNTdXBwb3J0ZWQgPSBXZWJHTERyYXdCdWZmZXJzOjpzdXBwb3J0ZWQodGhpcyk7Ci0gICAg
fQotICAgIHJldHVybiBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50
IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCi17Ci0gICAgaWYg
KCF2YWxpZGF0ZURyYXdBcnJheXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2RlLCBmaXJzdCwg
Y291bnQsIHByaW1jb3VudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcmltY291bnQg
PCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAiZHJhd0FycmF5c0luc3RhbmNlZCIsICJwcmltY291bnQgPCAwIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXByaW1jb3VudCkgewotICAgICAgICBtYXJr
Q29udGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNsZWFySWZD
b21wb3NpdGVkKCk7Ci0KLSAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsK
LSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAgdmVydGV4QXR0cmliMFNpbXVs
YXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7Ci0gICAgaWYg
KCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3Mo
ImRyYXdBcnJheXNJbnN0YW5jZWQiLCB0cnVlKTsKLSAgICBVTlVTRURfUEFSQU0ocHJpbWNvdW50
KTsKLSAgICBtX2NvbnRleHQtPmRyYXdBcnJheXNJbnN0YW5jZWQobW9kZSwgZmlyc3QsIGNvdW50
LCBwcmltY291bnQpOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQpCi0gICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11
bGF0aW9uKCk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1Rl
eHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBmYWxzZSk7Ci0gICAgbWFy
a0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3
RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51
bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIHVu
c2lnbmVkIG51bUVsZW1lbnRzID0gMDsKLSAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJk
cmF3RWxlbWVudHNJbnN0YW5jZWQiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVt
ZW50cykpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcmltY291bnQgPCAwKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
ZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgInByaW1jb3VudCA8IDAiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmICghcHJpbWNvdW50KSB7Ci0gICAgICAgIG1hcmtDb250ZXh0Q2hh
bmdlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQo
KTsKLQotICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAg
ICAgICB2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxH
QzNEaW50cHRyPihvZmZzZXQpLCBudW1FbGVtZW50cyk7Ci0gICAgICAgIHZlcnRleEF0dHJpYjBT
aW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOwotICAgIH0KLSAg
ICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRl
bmVzcygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgdHJ1ZSk7Ci0gICAgbV9jb250ZXh0LT5kcmF3
RWxlbWVudHNJbnN0YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRw
dHI+KG9mZnNldCksIHByaW1jb3VudCk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYg
dmVydGV4QXR0cmliMFNpbXVsYXRlZCkKLSAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4
QXR0cmliMFNpbXVsYXRpb24oKTsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAg
ICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgZmFs
c2UpOwotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2
aXNvcikKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4
QXR0cmliRGl2aXNvciIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0cmliRGl2
aXNvcihpbmRleCwgZGl2aXNvcik7Ci0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJEaXZpc29y
KGluZGV4LCBkaXZpc29yKTsKLX0KLQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TDFSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAxNzY5OTQpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOjE3Njk5NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSwgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFdlYkdMUmVuZGVyaW5nQ29udGV4
dF9oCisjZGVmaW5lIFdlYkdMUmVuZGVyaW5nQ29udGV4dF9oCisKKyNpbmNsdWRlICJBY3RpdmVE
T01PYmplY3QuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVk
ZSAiRHJhd2luZ0J1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJUaW1lci5oIgorI2luY2x1ZGUgIldlYkdM
R2V0SW5mby5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDxydW50aW1lL0Zsb2F0MzJB
cnJheS5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSW50MzJBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEFOR0xFSW5z
dGFuY2VkQXJyYXlzOworY2xhc3MgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOworY2xhc3Mg
RVhUU2hhZGVyVGV4dHVyZUxPRDsKK2NsYXNzIEhUTUxJbWFnZUVsZW1lbnQ7CitjbGFzcyBIVE1M
VmlkZW9FbGVtZW50OworY2xhc3MgSW1hZ2VCdWZmZXI7CitjbGFzcyBJbWFnZURhdGE7CitjbGFz
cyBJbnRTaXplOworY2xhc3MgT0VTU3RhbmRhcmREZXJpdmF0aXZlczsKK2NsYXNzIE9FU1RleHR1
cmVGbG9hdDsKK2NsYXNzIE9FU1RleHR1cmVGbG9hdExpbmVhcjsKK2NsYXNzIE9FU1RleHR1cmVI
YWxmRmxvYXQ7CitjbGFzcyBPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyOworY2xhc3MgT0VTVmVy
dGV4QXJyYXlPYmplY3Q7CitjbGFzcyBPRVNFbGVtZW50SW5kZXhVaW50OworY2xhc3MgV2ViR0xB
Y3RpdmVJbmZvOworY2xhc3MgV2ViR0xCdWZmZXI7CitjbGFzcyBXZWJHTENvbnRleHRHcm91cDsK
K2NsYXNzIFdlYkdMQ29udGV4dE9iamVjdDsKK2NsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVB
VEM7CitjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM7CitjbGFzcyBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQzsKK2NsYXNzIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM7CitjbGFzcyBX
ZWJHTERlYnVnUmVuZGVyZXJJbmZvOworY2xhc3MgV2ViR0xEZWJ1Z1NoYWRlcnM7CitjbGFzcyBX
ZWJHTERlcHRoVGV4dHVyZTsKK2NsYXNzIFdlYkdMRHJhd0J1ZmZlcnM7CitjbGFzcyBXZWJHTEV4
dGVuc2lvbjsKK2NsYXNzIFdlYkdMRnJhbWVidWZmZXI7CitjbGFzcyBXZWJHTExvc2VDb250ZXh0
OworY2xhc3MgV2ViR0xPYmplY3Q7CitjbGFzcyBXZWJHTFByb2dyYW07CitjbGFzcyBXZWJHTFJl
bmRlcmJ1ZmZlcjsKK2NsYXNzIFdlYkdMU2hhZGVyOworY2xhc3MgV2ViR0xTaGFyZWRPYmplY3Q7
CitjbGFzcyBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDsKK2NsYXNzIFdlYkdMVGV4dHVyZTsK
K2NsYXNzIFdlYkdMVW5pZm9ybUxvY2F0aW9uOworY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUzsKKwordHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsKKworY2xhc3MgV2ViR0xSZW5kZXJp
bmdDb250ZXh0IGZpbmFsIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQsIHB1YmxpYyBB
Y3RpdmVET01PYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqLCBXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzKik7CisgICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0KCk7CisK
KyAgICB2aXJ0dWFsIGJvb2wgaXMzZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
KyNpZiBQTEFURk9STShXSU4pCisgICAgLy8gRklYTUU6IEltcGxlbWVudCBhY2NlbGVyYXRlZCAz
ZCBjYW52YXMgb24gV2luZG93cy4KKyAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisjZWxzZQorICAgIHZpcnR1YWwgYm9vbCBp
c0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorI2VuZGlmCisK
KyAgICBpbnQgZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3Q7CisgICAgaW50IGRyYXdpbmdCdWZm
ZXJIZWlnaHQoKSBjb25zdDsKKworICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0
dXJlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFt
KiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBiaW5kQXR0cmliTG9j
YXRpb24oV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdl
YkdMQnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdD
M0RlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIGJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlcios
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwg
V2ViR0xUZXh0dXJlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmxlbmRDb2xvcihHQzNE
ZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxw
aGEpOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKTsKKyAgICB2b2lkIGJs
ZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEp
OworICAgIHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3Ip
OworICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBk
c3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7CisKKyAgICB2b2lk
IGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNh
Z2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEs
IEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBidWZmZXJTdWJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBs
b25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsK
KworICAgIEdDM0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KTsK
KyAgICB2b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKTsKKyAgICB2b2lkIGNsZWFyQ29sb3Io
R0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZsb2F0
IGFscGhhKTsKKyAgICB2b2lkIGNsZWFyRGVwdGgoR0MzRGZsb2F0KTsKKyAgICB2b2lkIGNsZWFy
U3RlbmNpbChHQzNEaW50KTsKKyAgICB2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdD
M0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSk7Cisg
ICAgdm9pZCBjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOworCisg
ICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJy
YXlCdWZmZXJWaWV3KiBkYXRhKTsKKyAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRh
KTsKKworICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpOworICAgIHZvaWQg
Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisKKyAgICBQYXNzUmVmUHRyPFdlYkdMQnVmZmVy
PiBjcmVhdGVCdWZmZXIoKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0
ZUZyYW1lYnVmZmVyKCk7CisgICAgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZVByb2dy
YW0oKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBjcmVhdGVSZW5kZXJidWZm
ZXIoKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGVTaGFkZXIoR0MzRGVudW0g
dHlwZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVh
dGVUZXh0dXJlKCk7CisKKyAgICB2b2lkIGN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpOworCisgICAg
dm9pZCBkZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIqKTsKKyAgICB2b2lkIGRlbGV0ZUZyYW1lYnVm
ZmVyKFdlYkdMRnJhbWVidWZmZXIqKTsKKyAgICB2b2lkIGRlbGV0ZVByb2dyYW0oV2ViR0xQcm9n
cmFtKik7CisgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsK
KyAgICB2b2lkIGRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciopOworICAgIHZvaWQgZGVsZXRlVGV4
dHVyZShXZWJHTFRleHR1cmUqKTsKKworICAgIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtKTsKKyAg
ICB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbik7CisgICAgdm9pZCBkZXB0aFJhbmdlKEdDM0Rm
bG9hdCB6TmVhciwgR0MzRGZsb2F0IHpGYXIpOworICAgIHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdM
UHJvZ3JhbSosIFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZGlzYWJs
ZShHQzNEZW51bSBjYXApOworICAgIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1
aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVt
IG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0Mz
RGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9p
ZCBlbmFibGUoR0MzRGVudW0gY2FwKTsKKyAgICB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBmaW5pc2goKTsKKyAg
ICB2b2lkIGZsdXNoKCk7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgV2ViR0xSZW5kZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBmcmFtZWJ1
ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0Rl
bnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpOworICAgIHZvaWQgZ2VuZXJh
dGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KTsKKworICAgIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJ
bmZvPiBnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZlVW5p
Zm9ybShXZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAg
IGJvb2wgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSosIFZlY3RvcjxSZWZQdHI8V2Vi
R0xTaGFkZXI+PiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBHQzNEaW50IGdldEF0dHJpYkxvY2F0
aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgV2ViR0xHZXRJbmZv
IGdldEJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBnZXRD
b250ZXh0QXR0cmlidXRlcygpOworICAgIEdDM0RlbnVtIGdldEVycm9yKCk7CisgICAgV2ViR0xF
eHRlbnNpb24qIGdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIFdlYkdMR2V0
SW5mbyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAg
IFdlYkdMR2V0SW5mbyBnZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICBXZWJHTEdldEluZm8gZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qLCBH
QzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmluZyBnZXRQcm9ncmFtSW5m
b0xvZyhXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdldFNoYWRlclBhcmFtZXRlcihXZWJH
TFNoYWRlciosIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIGdl
dFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1Jl
ZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0
KEdDM0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFZlY3RvcjxTdHJpbmc+IGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKKyAg
ICBXZWJHTEdldEluZm8gZ2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0VW5pZm9ybShXZWJH
TFByb2dyYW0qLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBnZXRVbmlmb3JtTG9jYXRpb24o
V2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYkdM
R2V0SW5mbyBnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJik7CisgICAgbG9uZyBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNldChHQzNE
dWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpOworCisgICAgdm9pZCBoaW50KEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gbW9kZSk7CisgICAgR0MzRGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xCdWZm
ZXIqKTsKKyAgICBib29sIGlzQ29udGV4dExvc3QoKSBjb25zdDsKKyAgICBHQzNEYm9vbGVhbiBp
c0VuYWJsZWQoR0MzRGVudW0gY2FwKTsKKyAgICBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFdl
YkdMRnJhbWVidWZmZXIqKTsKKyAgICBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oV2ViR0xQcm9ncmFt
Kik7CisgICAgR0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsK
KyAgICBHQzNEYm9vbGVhbiBpc1NoYWRlcihXZWJHTFNoYWRlciopOworICAgIEdDM0Rib29sZWFu
IGlzVGV4dHVyZShXZWJHTFRleHR1cmUqKTsKKworICAgIHZvaWQgbGluZVdpZHRoKEdDM0RmbG9h
dCk7CisgICAgdm9pZCBsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCBwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7Cisg
ICAgdm9pZCBwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cyk7
CisgICAgdm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJy
YXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHJlbGVhc2VT
aGFkZXJDb21waWxlcigpOworICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpOworICAgIHZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNE
Ym9vbGVhbiBpbnZlcnQpOworICAgIHZvaWQgc2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIHNoYWRlclNvdXJj
ZShXZWJHTFNoYWRlciosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lk
IHN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsK
KyAgICB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVu
YywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOworICAgIHZvaWQgc3RlbmNpbE1hc2soR0Mz
RHVpbnQpOworICAgIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNE
dWludCBtYXNrKTsKKyAgICB2b2lkIHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6
ZmFpbCwgR0MzRGVudW0genBhc3MpOworICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVu
dW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsK
KworICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKyNpZiBF
TkFCTEUoVklERU8pCisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlv
bkNvZGUmKTsKKyNlbmRpZgorCisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSk7CisgICAgdm9pZCB0ZXhQYXJhbWV0
ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOworCisg
ICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqLCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVs
ZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjaWYgRU5BQkxFKFZJREVPKQor
ICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRp
b25Db2RlJik7CisjZW5kaWYKKworICAgIHZvaWQgdW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0xZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBz
aXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIHVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQz
MkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMWl2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgdW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9y
bTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwg
R0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0yaShjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBF
eGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgdW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rp
bnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3Jt
M2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0Mz
RGZsb2F0IHksIEdDM0RmbG9hdCB6LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3Jt
M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0z
aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNE
c2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTRmKGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBH
QzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZv
cm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkq
IHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNl
cHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcs
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCB1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZv
cm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBz
aXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9h
dDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4
M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2
YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZvaWQgdXNlUHJv
Z3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB2YWxpZGF0ZVBy
b2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCB2ZXJ0ZXhB
dHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpOworICAgIHZvaWQgdmVydGV4QXR0
cmliMWZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6
ZWkgc2l6ZSk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0IHgsIEdDM0RmbG9hdCB5KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBp
bmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOworICAgIHZv
aWQgdmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQg
eSwgR0MzRGZsb2F0IHopOworICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4
LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBH
QzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpOworICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1
aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0
ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Cisg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUs
IEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RzaXplaSBzdHJpZGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlv
bkNvZGUmKTsKKworICAgIHZvaWQgdmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisKKyAgICAvLyBXRUJLSVRfbG9zZV9jb250
ZXh0IHN1cHBvcnQKKyAgICBlbnVtIExvc3RDb250ZXh0TW9kZSB7CisgICAgICAgIC8vIExvc3Qg
Y29udGV4dCBvY2N1cnJlZCBhdCB0aGUgZ3JhcGhpY3Mgc3lzdGVtIGxldmVsLgorICAgICAgICBS
ZWFsTG9zdENvbnRleHQsCisKKyAgICAgICAgLy8gTG9zdCBjb250ZXh0IHByb3Zva2VkIGJ5IFdF
QktJVF9sb3NlX2NvbnRleHQuCisgICAgICAgIFN5bnRoZXRpY0xvc3RDb250ZXh0CisgICAgfTsK
KyAgICB2b2lkIGZvcmNlTG9zdENvbnRleHQoTG9zdENvbnRleHRNb2RlKTsKKyAgICB2b2lkIGZv
cmNlUmVzdG9yZUNvbnRleHQoKTsKKyAgICB2b2lkIGxvc2VDb250ZXh0SW1wbChMb3N0Q29udGV4
dE1vZGUpOworCisgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29u
c3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9CisgICAgV2ViR0xDb250ZXh0R3JvdXAqIGNv
bnRleHRHcm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dEdyb3VwLmdldCgpOyB9CisgICAg
dmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKKworICAgIHZvaWQgbWFy
a0xheWVyQ29tcG9zaXRlZCgpOworICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcygpIG92ZXJyaWRlOworICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworCisgICAgdm9pZCByZW1vdmVTaGFyZWRPYmpl
Y3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHRPYmplY3QoV2Vi
R0xDb250ZXh0T2JqZWN0Kik7CisgICAgCisgICAgdW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0cmli
cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VmVydGV4QXR0cmliczsgfQorCisgICAgLy8gQU5HTEVf
aW5zdGFuY2VkX2FycmF5cyBleHRlbnNpb24gZnVuY3Rpb25zLgorICAgIHZvaWQgZHJhd0FycmF5
c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQs
IEdDM0RzaXplaSBwcmltY291bnQpOworICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdD
M0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9m
ZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29y
KEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKTsKKworcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgV2ViR0xEcmF3QnVmZmVyczsKKyAgICBmcmllbmQgY2xhc3MgV2ViR0xGcmFtZWJ1
ZmZlcjsKKyAgICBmcmllbmQgY2xhc3MgV2ViR0xPYmplY3Q7CisgICAgZnJpZW5kIGNsYXNzIE9F
U1ZlcnRleEFycmF5T2JqZWN0OworICAgIGZyaWVuZCBjbGFzcyBXZWJHTERlYnVnU2hhZGVyczsK
KyAgICBmcmllbmQgY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKKyAgICBmcmllbmQg
Y2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOworICAgIGZyaWVuZCBjbGFzcyBXZWJH
TENvbXByZXNzZWRUZXh0dXJlUzNUQzsKKyAgICBmcmllbmQgY2xhc3MgV2ViR0xSZW5kZXJpbmdD
b250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2s7CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM7CisKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0Vs
ZW1lbnQqLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7CisgICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4sIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKTsKKyAgICB2b2lkIGluaXRpYWxpemVO
ZXdDb250ZXh0KCk7CisgICAgdm9pZCBzZXR1cEZsYWdzKCk7CisKKyAgICAvLyBBY3RpdmVET01P
YmplY3QKKyAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoKSBvdmVycmlkZTsKKworICAgIHZvaWQgYWRkU2hh
cmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7CisgICAgdm9pZCBhZGRDb250ZXh0T2JqZWN0
KFdlYkdMQ29udGV4dE9iamVjdCopOworICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0
cygpOworCisgICAgdm9pZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB2b2lkIG1h
cmtDb250ZXh0Q2hhbmdlZCgpOworCisgICAgLy8gUXVlcnkgd2hldGhlciBpdCBpcyBidWlsdCBv
biB0b3Agb2YgY29tcGxpYW50IEdMRVMyIGltcGxlbWVudGF0aW9uLgorICAgIGJvb2wgaXNHTEVT
MkNvbXBsaWFudCgpIHsgcmV0dXJuIG1faXNHTEVTMkNvbXBsaWFudDsgfQorICAgIC8vIFF1ZXJ5
IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpcyBOUE9UIHN0cmljdC4KKyAgICBib29sIGlzR0xF
UzJOUE9UU3RyaWN0KCkgeyByZXR1cm4gbV9pc0dMRVMyTlBPVFN0cmljdDsgfQorICAgIC8vIFF1
ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZXMgZXJyb3JzIG9uIG91dC1vZi1i
b3VuZHMgYnVmZmVyIGFjY2Vzc2VzLgorICAgIGJvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZC
b3VuZHNBY2Nlc3NlcygpIHsgcmV0dXJuIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNB
Y2Nlc3NlczsgfQorICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpbml0aWFs
aXplcyB0ZXh0dXJlcy9yZW5kZXJidWZmZXJzIHRvIDAuCisgICAgYm9vbCBpc1Jlc291cmNlU2Fm
ZSgpIHsgcmV0dXJuIG1faXNSZXNvdXJjZVNhZmU7IH0KKyAgICAvLyBRdWVyeSBpZiBkZXB0aF9z
dGVuY2lsIGJ1ZmZlciBpcyBzdXBwb3J0ZWQuCisgICAgYm9vbCBpc0RlcHRoU3RlbmNpbFN1cHBv
cnRlZCgpIHsgcmV0dXJuIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQ7IH0KKworICAgIC8vIEhl
bHBlciB0byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKKyAg
ICAvLyBsaWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KKyAgICB1bnNpZ25lZCBpbnQgc2l6ZUlu
Qnl0ZXMoR0MzRGVudW0gdHlwZSk7CisKKyAgICAvLyBCYXNpYyB2YWxpZGF0aW9uIG9mIGNvdW50
IGFuZCBvZmZzZXQgYWdhaW5zdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gZWxlbWVudCBhcnJheSBi
dWZmZXIKKyAgICBib29sIHZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQs
IEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKKworICAgIC8vIENvbnNlcnZhdGl2
ZSBidXQgcXVpY2sgaW5kZXggdmFsaWRhdGlvbgorICAgIGJvb2wgdmFsaWRhdGVJbmRleEFycmF5
Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVk
KTsKKworICAgIC8vIFByZWNpc2UgYnV0IHNsb3cgaW5kZXggdmFsaWRhdGlvbiAtLSBvbmx5IGRv
bmUgaWYgY29uc2VydmF0aXZlIGNoZWNrcyBmYWlsCisgICAgYm9vbCB2YWxpZGF0ZUluZGV4QXJy
YXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZz
ZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKKyAgICBib29sIHZhbGlkYXRlVmVy
dGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2ZUNv
dW50ID0gMCk7CisKKyAgICBib29sIHZhbGlkYXRlV2ViR0xPYmplY3QoY29uc3QgY2hhciosIFdl
YkdMT2JqZWN0Kik7CisKKyAgICBib29sIHZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3Vu
dCwgR0MzRHNpemVpIHByaW1jb3VudCk7CisgICAgYm9vbCB2YWxpZGF0ZURyYXdFbGVtZW50cyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwg
R0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzKTsK
KworICAgIC8vIEFkZHMgYSBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0LgorICAgIHZvaWQgYWRk
Q29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOworCisgICAgUGFzc1JlZlB0cjxJbWFn
ZT4gZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSosIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50
IGRldmljZVNjYWxlRmFjdG9yKTsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICBQYXNzUmVmUHRy
PEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgQmFja2luZ1N0b3Jl
Q29weSwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBSZWZQdHI8V2ViR0xDb250ZXh0R3JvdXA+IG1fY29udGV4
dEdyb3VwOworCisgICAgLy8gT3B0aW9uYWwgc3RydWN0dXJlIGZvciByZW5kZXJpbmcgdG8gYSBE
cmF3aW5nQnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVjdGx5CisgICAgLy8gdG8gdGhlIGJhY2stYnVm
ZmVyIG9mIG1fY29udGV4dC4KKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVm
ZmVyOworCisgICAgLy8gRGlzcGF0Y2hlcyBhIGNvbnRleHQgbG9zdCBldmVudCBvbmNlIGl0IGlz
IGRldGVybWluZWQgdGhhdCBvbmUgaXMgbmVlZGVkLgorICAgIC8vIFRoaXMgaXMgdXNlZCBib3Ro
IGZvciBzeW50aGV0aWMgYW5kIHJlYWwgY29udGV4dCBsb3NzZXMuIEZvciByZWFsIG9uZXMsIGl0
J3MKKyAgICAvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3JpcHQgb24gdGhlIHN0YWNr
LCBidXQgdGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKKyAgICAvLyBvbiBob3cgZXhhY3RseSB0aGUg
cGxhdGZvcm0gZGlzY292ZXJzIHRoYXQgdGhlIGNvbnRleHQgd2FzIGxvc3QuIEZvciBiZXR0ZXIK
KyAgICAvLyBwb3J0YWJpbGl0eSB3ZSBhbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRoZSBl
dmVudC4KKyAgICBUaW1lciBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyOworICAgIGJv
b2wgbV9yZXN0b3JlQWxsb3dlZDsKKyAgICBUaW1lciBtX3Jlc3RvcmVUaW1lcjsKKworICAgIGJv
b2wgbV9uZWVkc1VwZGF0ZTsKKyAgICBib29sIG1fbWFya2VkQ2FudmFzRGlydHk7CisgICAgSGFz
aFNldDxXZWJHTENvbnRleHRPYmplY3QqPiBtX2NvbnRleHRPYmplY3RzOworCisgICAgLy8gTGlz
dCBvZiBib3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFpbiBpbmZvIGFib3V0IHNpemVzIGZvciBB
UlJBWV9CVUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9yIEVMRU1FTlRfQVJSQVlfQlVGRkVSCisg
ICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBtX2JvdW5kQXJyYXlCdWZmZXI7CisgICAgCisgICAgUmVm
UHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0
OworICAgIFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBtX2JvdW5kVmVydGV4QXJy
YXlPYmplY3Q7CisgICAgdm9pZCBzZXRCb3VuZFZlcnRleEFycmF5T2JqZWN0KFBhc3NSZWZQdHI8
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gYXJyYXlPYmplY3QpCisgICAgeworICAgICAgICBp
ZiAoYXJyYXlPYmplY3QpCisgICAgICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBh
cnJheU9iamVjdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7CisgICAgfQorICAgIAorICAgIGNs
YXNzIFZlcnRleEF0dHJpYlZhbHVlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZlcnRleEF0dHJp
YlZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5pdFZhbHVlKCk7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIHZvaWQgaW5pdFZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgdmFsdWVbMF0gPSAwLjBmOworICAgICAgICAgICAgdmFsdWVbMV0gPSAwLjBmOworICAgICAg
ICAgICAgdmFsdWVbMl0gPSAwLjBmOworICAgICAgICAgICAgdmFsdWVbM10gPSAxLjBmOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBHQzNEZmxvYXQgdmFsdWVbNF07CisgICAgfTsKKyAg
ICBWZWN0b3I8VmVydGV4QXR0cmliVmFsdWU+IG1fdmVydGV4QXR0cmliVmFsdWU7CisgICAgdW5z
aWduZWQgbV9tYXhWZXJ0ZXhBdHRyaWJzOworICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyOworICAgIGxvbmcgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZTsKKyAg
ICBHQzNEZmxvYXQgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbNF07CisgICAgYm9vbCBtX2Zv
cmNlQXR0cmliMEJ1ZmZlclJlZmlsbDsKKyAgICBib29sIG1fdmVydGV4QXR0cmliMFVzZWRCZWZv
cmU7CisKKyAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBtX2N1cnJlbnRQcm9ncmFtOworICAgIFJl
ZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKKyAgICBSZWZQdHI8
V2ViR0xSZW5kZXJidWZmZXI+IG1fcmVuZGVyYnVmZmVyQmluZGluZzsKKyAgICBzdHJ1Y3QgVGV4
dHVyZVVuaXRTdGF0ZSB7CisgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmUyREJp
bmRpbmc7CisgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmVDdWJlTWFwQmluZGlu
ZzsKKyAgICB9OworICAgIFZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBtX3RleHR1cmVVbml0czsK
KyAgICB1bnNpZ25lZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7CisKKyAgICBSZWZQdHI8V2Vi
R0xUZXh0dXJlPiBtX2JsYWNrVGV4dHVyZTJEOworICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG1f
YmxhY2tUZXh0dXJlQ3ViZU1hcDsKKworICAgIFZlY3RvcjxHQzNEZW51bT4gbV9jb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdHM7CisKKyAgICAvLyBGaXhlZC1zaXplIGNhY2hlIG9mIHJldXNhYmxlIGlt
YWdlIGJ1ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCisgICAgY2xhc3MgTFJVSW1h
Z2VCdWZmZXJDYWNoZSB7CisgICAgcHVibGljOgorICAgICAgICBMUlVJbWFnZUJ1ZmZlckNhY2hl
KGludCBjYXBhY2l0eSk7CisgICAgICAgIC8vIFRoZSBwb2ludGVyIHJldHVybmVkIGlzIG93bmVk
IGJ5IHRoZSBpbWFnZSBidWZmZXIgbWFwLgorICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZm
ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBidWJi
bGVUb0Zyb250KGludCBpZHgpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7CisgICAgICAgIGludCBtX2NhcGFjaXR5Owor
ICAgIH07CisgICAgTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRlZEltYWdlQ2FjaGU7CisK
KyAgICBHQzNEaW50IG1fbWF4VGV4dHVyZVNpemU7CisgICAgR0MzRGludCBtX21heEN1YmVNYXBU
ZXh0dXJlU2l6ZTsKKyAgICBHQzNEaW50IG1fbWF4UmVuZGVyYnVmZmVyU2l6ZTsKKyAgICBHQzNE
aW50IG1fbWF4Vmlld3BvcnREaW1zWzJdOworICAgIEdDM0RpbnQgbV9tYXhUZXh0dXJlTGV2ZWw7
CisgICAgR0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CisKKyAgICBHQzNEaW50IG1f
bWF4RHJhd0J1ZmZlcnM7CisgICAgR0MzRGludCBtX21heENvbG9yQXR0YWNobWVudHM7CisgICAg
R0MzRGVudW0gbV9iYWNrRHJhd0J1ZmZlcjsKKyAgICBib29sIG1fZHJhd0J1ZmZlcnNXZWJHTFJl
cXVpcmVtZW50c0NoZWNrZWQ7CisgICAgYm9vbCBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkOworCisg
ICAgR0MzRGludCBtX3BhY2tBbGlnbm1lbnQ7CisgICAgR0MzRGludCBtX3VucGFja0FsaWdubWVu
dDsKKyAgICBib29sIG1fdW5wYWNrRmxpcFk7CisgICAgYm9vbCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGE7CisgICAgR0MzRGVudW0gbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbjsKKyAgICBi
b29sIG1fY29udGV4dExvc3Q7CisgICAgTG9zdENvbnRleHRNb2RlIG1fY29udGV4dExvc3RNb2Rl
OworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKKworICAg
IGJvb2wgbV9sYXllckNsZWFyZWQ7CisgICAgR0MzRGZsb2F0IG1fY2xlYXJDb2xvcls0XTsKKyAg
ICBib29sIG1fc2Npc3NvckVuYWJsZWQ7CisgICAgR0MzRGZsb2F0IG1fY2xlYXJEZXB0aDsKKyAg
ICBHQzNEaW50IG1fY2xlYXJTdGVuY2lsOworICAgIEdDM0Rib29sZWFuIG1fY29sb3JNYXNrWzRd
OworICAgIEdDM0Rib29sZWFuIG1fZGVwdGhNYXNrOworCisgICAgYm9vbCBtX3N0ZW5jaWxFbmFi
bGVkOworICAgIEdDM0R1aW50IG1fc3RlbmNpbE1hc2ssIG1fc3RlbmNpbE1hc2tCYWNrOworICAg
IEdDM0RpbnQgbV9zdGVuY2lsRnVuY1JlZiwgbV9zdGVuY2lsRnVuY1JlZkJhY2s7IC8vIE5vdGUg
dGhhdCB0aGVzZSBhcmUgdGhlIHVzZXIgc3BlY2lmaWVkIHZhbHVlcywgbm90IHRoZSBpbnRlcm5h
bCBjbGFtcGVkIHZhbHVlLgorICAgIEdDM0R1aW50IG1fc3RlbmNpbEZ1bmNNYXNrLCBtX3N0ZW5j
aWxGdW5jTWFza0JhY2s7CisKKyAgICBib29sIG1faXNHTEVTMkNvbXBsaWFudDsKKyAgICBib29s
IG1faXNHTEVTMk5QT1RTdHJpY3Q7CisgICAgYm9vbCBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9m
Qm91bmRzQWNjZXNzZXM7CisgICAgYm9vbCBtX2lzUmVzb3VyY2VTYWZlOworICAgIGJvb2wgbV9p
c0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsKKyAgICBib29sIG1faXNSb2J1c3RuZXNzRVhUU3VwcG9y
dGVkOworCisgICAgYm9vbCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlOworICAgIGludCBt
X251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKKworICAgIC8vIEEgV2ViR0xSZW5kZXJpbmdD
b250ZXh0IGNhbiBiZSBjcmVhdGVkIGluIGEgc3RhdGUgd2hlcmUgaXQgYXBwZWFycyBhcworICAg
IC8vIGEgdmFsaWQgYW5kIGFjdGl2ZSBjb250ZXh0LCBidXQgd2lsbCBub3QgZXhlY3V0ZSBhbnkg
aW1wb3J0YW50IG9wZXJhdGlvbnMKKyAgICAvLyB1bnRpbCBpdHMgbG9hZCBwb2xpY3kgaXMgY29t
cGxldGVseSByZXNvbHZlZC4KKyAgICBib29sIG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbjsK
KyAgICBib29sIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbjsKKyAgICBib29sIGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKTsKKworICAgIC8vIEVuYWJsZWQgZXh0ZW5zaW9uIG9iamVjdHMu
CisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz4gbV9leHRU
ZXh0dXJlRmlsdGVyQW5pc290cm9waWM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVFNoYWRlclRl
eHR1cmVMT0Q+IG1fZXh0U2hhZGVyVGV4dHVyZUxPRDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VT
VGV4dHVyZUZsb2F0PiBtX29lc1RleHR1cmVGbG9hdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VT
VGV4dHVyZUZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVGbG9hdExpbmVhcjsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8T0VTVGV4dHVyZUhhbGZGbG9hdD4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0OworICAg
IHN0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVI
YWxmRmxvYXRMaW5lYXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPE9FU1N0YW5kYXJkRGVyaXZhdGl2
ZXM+IG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVmVy
dGV4QXJyYXlPYmplY3Q+IG1fb2VzVmVydGV4QXJyYXlPYmplY3Q7CisgICAgc3RkOjp1bmlxdWVf
cHRyPE9FU0VsZW1lbnRJbmRleFVpbnQ+IG1fb2VzRWxlbWVudEluZGV4VWludDsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8V2ViR0xMb3NlQ29udGV4dD4gbV93ZWJnbExvc2VDb250ZXh0OworICAgIHN0
ZDo6dW5pcXVlX3B0cjxXZWJHTERlYnVnUmVuZGVyZXJJbmZvPiBtX3dlYmdsRGVidWdSZW5kZXJl
ckluZm87CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMRGVidWdTaGFkZXJzPiBtX3dlYmdsRGVi
dWdTaGFkZXJzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
PiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVQVlJUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEM7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPiBtX3dlYmdsQ29t
cHJlc3NlZFRleHR1cmVTM1RDOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlcHRoVGV4dHVy
ZT4gbV93ZWJnbERlcHRoVGV4dHVyZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEcmF3QnVm
ZmVycz4gbV93ZWJnbERyYXdCdWZmZXJzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUluc3Rh
bmNlZEFycmF5cz4gbV9hbmdsZUluc3RhbmNlZEFycmF5czsKKworICAgIC8vIEhlbHBlcnMgZm9y
IGdldFBhcmFtZXRlciBhbmQgb3RoZXJzCisgICAgV2ViR0xHZXRJbmZvIGdldEJvb2xlYW5QYXJh
bWV0ZXIoR0MzRGVudW0pOworICAgIFdlYkdMR2V0SW5mbyBnZXRCb29sZWFuQXJyYXlQYXJhbWV0
ZXIoR0MzRGVudW0pOworICAgIFdlYkdMR2V0SW5mbyBnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51
bSk7CisgICAgV2ViR0xHZXRJbmZvIGdldEludFBhcmFtZXRlcihHQzNEZW51bSk7CisgICAgV2Vi
R0xHZXRJbmZvIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdDM0RlbnVtKTsKKyAgICBXZWJHTEdl
dEluZm8gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKKyAgICBXZWJHTEdl
dEluZm8gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7CisKKyAgICAvLyBDbGVh
ciB0aGUgYmFja2J1ZmZlciBpZiBpdCB3YXMgY29tcG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBvcGVy
YXRpb24uCisgICAgLy8gY2xlYXJNYXNrIGlzIHNldCB0byB0aGUgYml0ZmllbGQgb2YgYW55IGNs
ZWFyIHRoYXQgd291bGQgaGFwcGVuIGFueXdheSBhdCB0aGlzIHRpbWUKKyAgICAvLyBhbmQgdGhl
IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNsZWFyIGlzIG5vdyB1bm5lY2Vzc2FyeS4K
KyAgICBib29sIGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSAwKTsK
KworICAgIC8vIEhlbHBlciB0byByZXN0b3JlIHN0YXRlIHRoYXQgY2xlYXJpbmcgdGhlIGZyYW1l
YnVmZmVyIG1heSBkZXN0cm95LgorICAgIHZvaWQgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwor
CisgICAgdm9pZCB0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0
IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4SW1hZ2UyREltcGwo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNE
OjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4
U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJ
bWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFks
IGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBjaGVj
a1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hhciosIGJvb2wpOworCisgICAgdm9pZCBjcmVh
dGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBm
b3IgY29weVRleHtTdWJ9SW1hZ2UsIGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0Cisg
ICAgLy8gYW5kIHRoZSBjb2xvciBidWZmZXIgZm9ybWF0IG9mIHRoZSBjdXJyZW50IGJvdW5kIGZy
YW1lYnVmZmVyIGNvbWJpbmF0aW9uCisgICAgLy8gaXMgdmFsaWQuCisgICAgYm9vbCBpc1RleElu
dGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVy
bmFsRm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCk7CisKKyAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGNvbG9yIGJ1ZmZlciBmb3Jt
YXQuCisgICAgR0MzRGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCk7CisKKyAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIHdpZHRo
LgorICAgIGludCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKTsKKworICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgorICAgIGludCBn
ZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
dmVyaWZ5IGxpbWl0cyBvbiB0aGUgbGVuZ3RoIG9mIHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBsb2Nh
dGlvbnMuCisgICAgYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hl
Y2sgaWYgc2l6ZSBpcyBub24tbmVnYXRpdmUuCisgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5k
IHJldHVybiBmYWxzZSBmb3IgbmVnYXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVl
LgorICAgIGJvb2wgdmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGlu
dCB4LCBHQzNEaW50IHkpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFs
bCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYmVsb25nIHRvIHRoZQorICAgIC8vIEFTQ0lJIHN1
YnNldCBhcyBkZWZpbmVkIGluIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCisgICAgYm9v
bCB2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYp
OworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRhcmdldCBhbmQgdGV4dHVyZSBi
b3VuZCB0byB0aGUgdGFyZ2V0LgorICAgIC8vIEdlbmVyYXRlIEdMIGVycm9ycyBhbmQgcmV0dXJu
IDAgaWYgdGFyZ2V0IGlzIGludmFsaWQgb3IgdGV4dHVyZSBib3VuZCBpcworICAgIC8vIG51bGwu
ICBPdGhlcndpc2UsIHJldHVybiB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0LgorICAg
IFdlYkdMVGV4dHVyZSogdmFsaWRhdGVUZXh0dXJlQmluZGluZyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApOworCisg
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGZvcm1hdC90eXBlIGZvciBmdW5j
dGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KKyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5k
IHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KKyAgICBib29sIHZhbGlk
YXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpOworCisgICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGxldmVsIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1
Yn1JbWFnZS4KKyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYg
bGV2ZWwgaXMgaW52YWxpZC4KKyAgICBib29sIHZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKTsKKworICAg
IGVudW0gVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgeworICAgICAgICBOb3RUZXhTdWJJ
bWFnZTJELAorICAgICAgICBUZXhTdWJJbWFnZTJELAorICAgIH07CisKKyAgICBlbnVtIFRleEZ1
bmNWYWxpZGF0aW9uU291cmNlVHlwZSB7CisgICAgICAgIFNvdXJjZUFycmF5QnVmZmVyVmlldywK
KyAgICAgICAgU291cmNlSW1hZ2VEYXRhLAorICAgICAgICBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50
LAorICAgICAgICBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwKKyAgICAgICAgU291cmNlSFRNTFZp
ZGVvRWxlbWVudCwKKyAgICB9OworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3Vi
fUltYWdlMkQgdG8gY2hlY2sgaWYgdGhlIGlucHV0IGZvcm1hdC90eXBlL2xldmVsL3RhcmdldC93
aWR0aC9oZWlnaHQvYm9yZGVyL3hvZmZzZXQveW9mZnNldCBhcmUgdmFsaWQuCisgICAgLy8gT3Ro
ZXJ3aXNlLCBpdCB3b3VsZCByZXR1cm4gcXVpY2tseSB3aXRob3V0IGRvaW5nIG90aGVyIHdvcmsu
CisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhG
dW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlLCBH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBH
QzNEc2l6ZWkgd2lkdGgsCisgICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVy
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJh
bWV0ZXJzIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KKyAgICAvLyBHZW5lcmF0
ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4K
KyAgICBib29sIHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlv
bkZ1bmN0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlKTsKKworICAgIGVudW0gTnVsbERpc3Bvc2l0aW9uIHsKKyAgICAgICAgTnVs
bEFsbG93ZWQsCisgICAgICAgIE51bGxOb3RBbGxvd2VkCisgICAgfTsKKworICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZpZXcKKyAg
ICAvLyBpcyBvZiB0aGUgY29ycmVjdCB0eXBlIGFuZCBjb250YWlucyBlbm91Z2ggZGF0YSBmb3Ig
dGhlIHRleEltYWdlIGNhbGwuCisgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5z
IGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1
bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsRGlzcG9zaXRpb24pOworCisgICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgZ2l2ZW4gdGV4dHVyZSBmb3JtYXQgaXMg
c2V0dGFibGUgYXMgaW4KKyAgICAvLyB5b3UgY2FuIHN1cHBseSBkYXRhIHRvIHRleEltYWdlMkQs
IG9yIGNhbGwgdGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQgYW5kCisgICAgLy8gY29weVRleFN1
YkltYWdlMkQuCisgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlm
IHRoZSBmb3JtYXQgaXMgbm90IHNldHRhYmxlLgorICAgIGJvb2wgdmFsaWRhdGVTZXR0YWJsZVRl
eEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCk7CisKKyAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEg
aXMgY29ycmVjdCBzaXplCisgICAgLy8gZm9yIHRoZSBnaXZlbiBmb3JtYXQgYW5kIGRpbWVuc2lv
bnMuCisgICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsK
KworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBjb21wcmVzc2VkIHRleHR1
cmUgZm9ybWF0cy4KKyAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51
bSBmb3JtYXQpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNz
ZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IKKyAgICAvLyB0aGUgZ2l2ZW4gZm9y
bWF0LgorICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpOworCisgICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFy
ZSB2YWxpZCBmb3IKKyAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgorICAgIGJvb2wgdmFsaWRhdGVD
b21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUq
KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2RlIGZvciBkcmF3e0Fy
cmF5cy9FbGVtZW50c30uCisgICAgYm9vbCB2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGVudW0pOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlk
YXRlIGlmIGZyb250L2JhY2sgc3RlbmNpbE1hc2sgYW5kIHN0ZW5jaWxGdW5jIHNldHRpbmdzIGFy
ZSB0aGUgc2FtZS4KKyAgICBib29sIHZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgc3Rl
bmNpbCBmdW5jLgorICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4UGFy
YW1ldGVyZiBhbmQgdGV4UGFyYW1ldGVyaS4KKyAgICB2b2lkIHRleFBhcmFtZXRlcihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1pLCBHQzNEaW50IHBhcmFt
ZiwgYm9vbCBpc0Zsb2F0KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmludCBHTCBl
cnJvcnMgdG8gY29uc29sZS4KKyAgICB2b2lkIHByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBT
dHJpbmcmKTsKKyAgICB2b2lkIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uLCBjb25zdCBjaGFyKiByZWFzb24pOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IHByaW50IHdhcm5pbmdzIHRvIGNvbnNvbGUuIEN1cnJlbnRseQorICAgIC8vIHVzZWQgb25seSB0
byB3YXJuIGFib3V0IHVzZSBvZiBvYnNvbGV0ZSBmdW5jdGlvbnMuCisgICAgdm9pZCBwcmludFdh
cm5pbmdUb0NvbnNvbGUoY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gdmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnJhbWVidWZmZXIgZnVuY3Rpb25zLgor
ICAgIC8vIEdlbmVyYXRlIEdMIGVycm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVnYWwuCisgICAg
Ym9vbCB2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpOworCisgICAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGJsZW5kIGVxdWF0aW9uIG1vZGUuCisgICAgYm9v
bCB2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZnVuYyBmYWN0
b3JzLgorICAgIGJvb2wgdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0gc3JjLCBHQzNEZW51bSBkc3QpOworCisgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHZhbGlkYXRlIGEgR0wgY2FwYWJpbGl0eS4KKyAgICBib29sIHZhbGlkYXRlQ2Fw
YWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKKworICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB1bmlmb3JtIGZ1
bmN0aW9ucy4KKyAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJheSos
IEdDM0RzaXplaSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgSW50MzJB
cnJheSosIEdDM0RzaXplaSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwg
dm9pZCosIEdDM0RzaXplaSwgR0MzRHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZv
cm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSosIEdD
M0RzaXplaSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0Mz
RGJvb2xlYW4gdHJhbnNwb3NlLCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKKwor
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZmZXJE
YXRhLgorICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBv
ciAwIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCisgICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRl
QnVmZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHVzYWdlKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4
e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBpbWFnZSBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFp
bnQgT3JpZ2luLgorICAgIGJvb2wgdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKworICAg
IC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBjYW52
YXMgaXMgcmVhZHkgYW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KKyAgICBib29sIHZhbGlkYXRl
SFRNTENhbnZhc0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFzRWxl
bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlkZW8gaXMgcmVh
ZHkgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgorICAgIGJvb2wgdmFsaWRhdGVIVE1MVmlkZW9FbGVt
ZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlv
bkNvZGUmKTsKKyNlbmRpZgorCisgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdmVydGV4QXR0
cmliTmZ7dn0uCisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQs
IEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpOworICAgIHZvaWQgdmVydGV4QXR0cmli
ZnZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJB
cnJheSosIEdDM0RzaXplaSBleHBlY3RlZFNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliZnZJ
bXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCos
IEdDM0RzaXplaSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7CisKKyAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gZm9yIGRlbGV0ZSogKGRlbGV0ZUJ1ZmZlciwgZGVsZXRlUHJvZ3JhbSwgZXRjKSBmdW5j
dGlvbnMuCisgICAgLy8gUmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJuIHdpdGhv
dXQgZnVydGhlciBwcm9jZXNzaW5nLgorICAgIGJvb2wgZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0
Kik7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJpbmQqIChiaW5kQnVmZmVyLCBiaW5k
VGV4dHVyZSwgZXRjKSBhbmQgdXNlUHJvZ3JhbS4KKyAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBh
bHJlYWR5IGJlZW4gZGVsZXRlZCwgc2V0IGRlbGV0ZWQgdG8gdHJ1ZSB1cG9uIHJldHVybi4KKyAg
ICAvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVy
IHByb2Nlc3NpbmcuCisgICAgYm9vbCBjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVsZXRlZCk7CisKKyAgICAvLyBIZWxw
ZXJzIGZvciBzaW11bGF0aW5nIHZlcnRleEF0dHJpYjAKKyAgICB2b2lkIGluaXRWZXJ0ZXhBdHRy
aWIwKCk7CisgICAgYm9vbCBzaW11bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51bVZlcnRl
eCk7CisgICAgdm9pZCByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigp
OworCisgICAgdm9pZCBkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKTsKKyAgICAvLyBIZWxwZXIg
Zm9yIHJlc3RvcmF0aW9uIGFmdGVyIGNvbnRleHQgbG9zdC4KKyAgICB2b2lkIG1heWJlUmVzdG9y
ZUNvbnRleHQoKTsKKworICAgIC8vIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBwcml2aWxl
Z2VkIGNvZGUgaW4gdGhlIGJyb3dzZXIsIGZvciBleGFtcGxlLAorICAgIC8vIGEgU2FmYXJpIG9y
IENocm9tZSBleHRlbnNpb24uCisgICAgYm9vbCBhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkg
Y29uc3Q7CisKKyAgICBlbnVtIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSB7CisgICAgICAgIERp
c3BsYXlJbkNvbnNvbGUsCisgICAgICAgIERvbnREaXNwbGF5SW5Db25zb2xlCisgICAgfTsKKwor
ICAgIC8vIFdyYXBwZXIgZm9yIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvciB0
aGF0IHNlbmRzIGEgbWVzc2FnZQorICAgIC8vIHRvIHRoZSBKYXZhU2NyaXB0IGNvbnNvbGUuCisg
ICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSwgY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlID0g
RGlzcGxheUluQ29uc29sZSk7CisKKyAgICBTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBTdHJp
bmcmKSBjb25zdDsKKworICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHN0ZW5jaWwgdGVzdCBiYXNl
ZCBvbiB1c2VyIHNldHRpbmcgYW5kCisgICAgLy8gd2hldGhlciB0aGUgY3VycmVudCBGQk8gaGFz
IGEgc3RlbmNpbCBidWZmZXIuCisgICAgdm9pZCBhcHBseVN0ZW5jaWxUZXN0KCk7CisKKyAgICAv
LyBIZWxwZXIgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhIGNhcGFiaWxpdHkuCisgICAgdm9p
ZCBlbmFibGVPckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpOworCisg
ICAgLy8gQ2xhbXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQT1JUX0RJTVMu
CisgICAgSW50U2l6ZSBjbGFtcGVkQ2FudmFzU2l6ZSgpOworCisgICAgLy8gRmlyc3QgdGltZSBj
YWxsZWQsIGlmIEVYVF9kcmF3X2J1ZmZlcnMgaXMgc3VwcG9ydGVkLCBxdWVyeSB0aGUgdmFsdWU7
IG90aGVyd2lzZSByZXR1cm4gMC4KKyAgICAvLyBMYXRlciwgcmV0dXJuIHRoZSBjYWNoZWQgdmFs
dWUuCisgICAgR0MzRGludCBnZXRNYXhEcmF3QnVmZmVycygpOworICAgIEdDM0RpbnQgZ2V0TWF4
Q29sb3JBdHRhY2htZW50cygpOworCisgICAgdm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51
bSk7CisKKyAgICB2b2lkIHJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsKKyAgICB2b2lkIHJl
c3RvcmVDdXJyZW50VGV4dHVyZTJEKCk7CisKKyAgICAvLyBDaGVjayBpZiBFWFRfZHJhd19idWZm
ZXJzIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQgYW5kIGlmIGl0IHNhdGlzZmllcyB0aGUgV2ViR0wg
cmVxdWlyZW1lbnRzLgorICAgIGJvb2wgc3VwcG9ydHNEcmF3QnVmZmVycygpOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjYsNzg0ICsyNiwxNiBAQAogI2lmbmRlZiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRfaAogI2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAogCi0jaW5jbHVkZSAiQWN0
aXZlRE9NT2JqZWN0LmgiCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgot
I2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJX
ZWJHTEdldEluZm8uaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8cnVudGltZS9GbG9h
dDMyQXJyYXkuaD4KLSNpbmNsdWRlIDxydW50aW1lL0ludDMyQXJyYXkuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQU5HTEVJbnN0YW5jZWRBcnJheXM7
Ci1jbGFzcyBFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM7Ci1jbGFzcyBFWFRTaGFkZXJUZXh0
dXJlTE9EOwotY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKLWNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7
Ci1jbGFzcyBJbWFnZUJ1ZmZlcjsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFNpemU7Ci1j
bGFzcyBPRVNTdGFuZGFyZERlcml2YXRpdmVzOwotY2xhc3MgT0VTVGV4dHVyZUZsb2F0OwotY2xh
c3MgT0VTVGV4dHVyZUZsb2F0TGluZWFyOwotY2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdDsKLWNs
YXNzIE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI7Ci1jbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVj
dDsKLWNsYXNzIE9FU0VsZW1lbnRJbmRleFVpbnQ7Ci1jbGFzcyBXZWJHTEFjdGl2ZUluZm87Ci1j
bGFzcyBXZWJHTEJ1ZmZlcjsKLWNsYXNzIFdlYkdMQ29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xD
b250ZXh0T2JqZWN0OwotY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLWNsYXNzIFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzsKLWNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDOwotY2xhc3MgV2ViR0xDb250ZXh0QXR0cmlidXRlczsKLWNsYXNzIFdlYkdMRGVidWdSZW5k
ZXJlckluZm87Ci1jbGFzcyBXZWJHTERlYnVnU2hhZGVyczsKLWNsYXNzIFdlYkdMRGVwdGhUZXh0
dXJlOwotY2xhc3MgV2ViR0xEcmF3QnVmZmVyczsKLWNsYXNzIFdlYkdMRXh0ZW5zaW9uOwotY2xh
c3MgV2ViR0xGcmFtZWJ1ZmZlcjsKLWNsYXNzIFdlYkdMTG9zZUNvbnRleHQ7Ci1jbGFzcyBXZWJH
TE9iamVjdDsKLWNsYXNzIFdlYkdMUHJvZ3JhbTsKLWNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyOwot
Y2xhc3MgV2ViR0xTaGFkZXI7Ci1jbGFzcyBXZWJHTFNoYXJlZE9iamVjdDsKLWNsYXNzIFdlYkdM
U2hhZGVyUHJlY2lzaW9uRm9ybWF0OwotY2xhc3MgV2ViR0xUZXh0dXJlOwotY2xhc3MgV2ViR0xV
bmlmb3JtTG9jYXRpb247Ci1jbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwotCi10eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOwotCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQgZmlu
YWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHVibGljIEFjdGl2ZURPTU9iamVj
dCB7CitjbGFzcyBXZWJHTDFSZW5kZXJpbmdDb250ZXh0IGZpbmFsIDogcHVibGljIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
V2ViR0xSZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqLCBXZWJHTENv
bnRleHRBdHRyaWJ1dGVzKik7Ci0gICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0KCk7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXMzZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7
IH0KLSNpZiBQTEFURk9STShXSU4pCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCBhY2NlbGVyYXRl
ZCAzZCBjYW52YXMgb24gV2luZG93cy4KLSAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0jZWxzZQotICAgIHZpcnR1YWwgYm9v
bCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlm
Ci0KLSAgICBpbnQgZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3Q7Ci0gICAgaW50IGRyYXdpbmdC
dWZmZXJIZWlnaHQoKSBjb25zdDsKLQotICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0
ZXh0dXJlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xQcm9n
cmFtKiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBiaW5kQXR0cmli
TG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQs
IFdlYkdMQnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZEZyYW1lYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZl
ciosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdl
dCwgV2ViR0xUZXh0dXJlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmxlbmRDb2xvcihH
QzNEZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQg
YWxwaGEpOwotICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKTsKLSAgICB2b2lk
IGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxw
aGEpOwotICAgIHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0
b3IpOwotICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51
bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7Ci0KLSAgICB2
b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0g
dXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRh
dGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBidWZmZXJTdWJE
YXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgIEdDM0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0
KTsKLSAgICB2b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKTsKLSAgICB2b2lkIGNsZWFyQ29s
b3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZs
b2F0IGFscGhhKTsKLSAgICB2b2lkIGNsZWFyRGVwdGgoR0MzRGZsb2F0KTsKLSAgICB2b2lkIGNs
ZWFyU3RlbmNpbChHQzNEaW50KTsKLSAgICB2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQs
IEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSk7
Ci0gICAgdm9pZCBjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwot
Ci0gICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
QXJyYXlCdWZmZXJWaWV3KiBkYXRhKTsKLSAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBk
YXRhKTsKLQotICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpOwotICAgIHZv
aWQgY29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0KLSAgICBQYXNzUmVmUHRyPFdlYkdMQnVm
ZmVyPiBjcmVhdGVCdWZmZXIoKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IGNy
ZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZVBy
b2dyYW0oKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBjcmVhdGVSZW5kZXJi
dWZmZXIoKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGVTaGFkZXIoR0MzRGVu
dW0gdHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBj
cmVhdGVUZXh0dXJlKCk7Ci0KLSAgICB2b2lkIGN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpOwotCi0g
ICAgdm9pZCBkZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIqKTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1l
YnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqKTsKLSAgICB2b2lkIGRlbGV0ZVByb2dyYW0oV2ViR0xQ
cm9ncmFtKik7Ci0gICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIq
KTsKLSAgICB2b2lkIGRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciopOwotICAgIHZvaWQgZGVsZXRl
VGV4dHVyZShXZWJHTFRleHR1cmUqKTsKLQotICAgIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtKTsK
LSAgICB2b2lkIGRlcHRoTWFzayhHQzNEYm9vbGVhbik7Ci0gICAgdm9pZCBkZXB0aFJhbmdlKEdD
M0RmbG9hdCB6TmVhciwgR0MzRGZsb2F0IHpGYXIpOwotICAgIHZvaWQgZGV0YWNoU2hhZGVyKFdl
YkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZGlz
YWJsZShHQzNEZW51bSBjYXApOwotICAgIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdD
M0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkcmF3QXJyYXlzKEdDM0Rl
bnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwg
R0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAg
dm9pZCBlbmFibGUoR0MzRGVudW0gY2FwKTsKLSAgICB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmaW5pc2goKTsK
LSAgICB2b2lkIGZsdXNoKCk7Ci0gICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgV2ViR0xSZW5kZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmcmFt
ZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQgZ2Vu
ZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KTsKLQotICAgIFBhc3NSZWZQdHI8V2ViR0xBY3Rp
dmVJbmZvPiBnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZl
VW5pZm9ybShXZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIGJvb2wgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSosIFZlY3RvcjxSZWZQdHI8
V2ViR0xTaGFkZXI+PiYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBHQzNEaW50IGdldEF0dHJpYkxv
Y2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgV2ViR0xHZXRJ
bmZvIGdldEJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBn
ZXRDb250ZXh0QXR0cmlidXRlcygpOwotICAgIEdDM0RlbnVtIGdldEVycm9yKCk7Ci0gICAgV2Vi
R0xFeHRlbnNpb24qIGdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIFdlYkdM
R2V0SW5mbyBnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIFdlYkdMR2V0SW5mbyBnZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0q
LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBnZXRQcm9ncmFt
SW5mb0xvZyhXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZv
IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFNoYWRlclBhcmFtZXRlcihX
ZWJHTFNoYWRlciosIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5n
IGdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFz
c1JlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gZ2V0U2hhZGVyUHJlY2lzaW9uRm9y
bWF0KEdDM0RlbnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIFZlY3RvcjxTdHJpbmc+IGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsK
LSAgICBXZWJHTEdldEluZm8gZ2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0VW5pZm9ybShX
ZWJHTFByb2dyYW0qLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBnZXRVbmlmb3JtTG9jYXRp
b24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdl
YkdMR2V0SW5mbyBnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1l
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgbG9uZyBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNldChH
QzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUpOwotCi0gICAgdm9pZCBoaW50KEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gbW9kZSk7Ci0gICAgR0MzRGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xC
dWZmZXIqKTsKLSAgICBib29sIGlzQ29udGV4dExvc3QoKSBjb25zdDsKLSAgICBHQzNEYm9vbGVh
biBpc0VuYWJsZWQoR0MzRGVudW0gY2FwKTsKLSAgICBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVy
KFdlYkdMRnJhbWVidWZmZXIqKTsKLSAgICBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oV2ViR0xQcm9n
cmFtKik7Ci0gICAgR0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIq
KTsKLSAgICBHQzNEYm9vbGVhbiBpc1NoYWRlcihXZWJHTFNoYWRlciopOwotICAgIEdDM0Rib29s
ZWFuIGlzVGV4dHVyZShXZWJHTFRleHR1cmUqKTsKLQotICAgIHZvaWQgbGluZVdpZHRoKEdDM0Rm
bG9hdCk7Ci0gICAgdm9pZCBsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCBwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7
Ci0gICAgdm9pZCBwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0
cyk7Ci0gICAgdm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
QXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlbGVh
c2VTaGFkZXJDb21waWxlcigpOwotICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQpOwotICAgIHZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBH
QzNEYm9vbGVhbiBpbnZlcnQpOwotICAgIHZvaWQgc2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQg
eSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHNoYWRlclNv
dXJjZShXZWJHTFNoYWRlciosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNr
KTsKLSAgICB2b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0g
ZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbE1hc2so
R0MzRHVpbnQpOwotICAgIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBH
QzNEdWludCBtYXNrKTsKLSAgICB2b2lkIHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51
bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpOwotICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0Mz
RGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNz
KTsKLQotICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAotICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSNp
ZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2Vw
dGlvbkNvZGUmKTsKLSNlbmRpZgotCi0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSk7Ci0gICAgdm9pZCB0ZXhQYXJh
bWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwot
Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAg
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqLCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFn
ZUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZz
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgSFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0jaWYgRU5BQkxFKFZJREVP
KQotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqLCBFeGNl
cHRpb25Db2RlJik7Ci0jZW5kaWYKLQotICAgIHZvaWQgdW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBG
bG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0xZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXpl
aSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMWkoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIHVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJ
bnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMWl2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNp
emUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5p
Zm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0yaShj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlm
b3JtM2YoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwg
R0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlm
b3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5
KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZv
cm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTRmKGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5
LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVu
aWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50
IHcsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdm9pZCB1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVu
aWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNE
Ym9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXpl
aSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBG
bG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0
cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4g
dHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0
KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgdXNl
UHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB2YWxpZGF0
ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB2ZXJ0
ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpOwotICAgIHZvaWQgdmVydGV4
QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNE
c2l6ZWkgc2l6ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0IHgsIEdDM0RmbG9hdCB5KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWlu
dCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOwotICAg
IHZvaWQgdmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxv
YXQgeSwgR0MzRGZsb2F0IHopOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGlu
ZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5
LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpOwotICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdD
M0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRy
aWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7
Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNp
emUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSBzdHJpZGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2Vw
dGlvbkNvZGUmKTsKLQotICAgIHZvaWQgdmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0KLSAgICAvLyBXRUJLSVRfbG9zZV9j
b250ZXh0IHN1cHBvcnQKLSAgICBlbnVtIExvc3RDb250ZXh0TW9kZSB7Ci0gICAgICAgIC8vIExv
c3QgY29udGV4dCBvY2N1cnJlZCBhdCB0aGUgZ3JhcGhpY3Mgc3lzdGVtIGxldmVsLgotICAgICAg
ICBSZWFsTG9zdENvbnRleHQsCi0KLSAgICAgICAgLy8gTG9zdCBjb250ZXh0IHByb3Zva2VkIGJ5
IFdFQktJVF9sb3NlX2NvbnRleHQuCi0gICAgICAgIFN5bnRoZXRpY0xvc3RDb250ZXh0Ci0gICAg
fTsKLSAgICB2b2lkIGZvcmNlTG9zdENvbnRleHQoTG9zdENvbnRleHRNb2RlKTsKLSAgICB2b2lk
IGZvcmNlUmVzdG9yZUNvbnRleHQoKTsKLSAgICB2b2lkIGxvc2VDb250ZXh0SW1wbChMb3N0Q29u
dGV4dE1vZGUpOwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkg
Y29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0gICAgV2ViR0xDb250ZXh0R3JvdXAq
IGNvbnRleHRHcm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dEdyb3VwLmdldCgpOyB9Ci0g
ICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7
Ci0KLSAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLQotICAgIHZvaWQg
bWFya0xheWVyQ29tcG9zaXRlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcygpIG92ZXJyaWRlOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwotCi0gICAgdm9pZCByZW1vdmVTaGFyZWRP
YmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHRPYmplY3Qo
V2ViR0xDb250ZXh0T2JqZWN0Kik7Ci0gICAgCi0gICAgdW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0
cmlicygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VmVydGV4QXR0cmliczsgfQotCi0gICAgLy8gQU5H
TEVfaW5zdGFuY2VkX2FycmF5cyBleHRlbnNpb24gZnVuY3Rpb25zLgotICAgIHZvaWQgZHJhd0Fy
cmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291
bnQsIEdDM0RzaXplaSBwcmltY291bnQpOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2Vk
KEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25n
IG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZp
c29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKTsKLQotcHJpdmF0ZToKLSAgICBm
cmllbmQgY2xhc3MgV2ViR0xEcmF3QnVmZmVyczsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xGcmFt
ZWJ1ZmZlcjsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xPYmplY3Q7Ci0gICAgZnJpZW5kIGNsYXNz
IE9FU1ZlcnRleEFycmF5T2JqZWN0OwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTERlYnVnU2hhZGVy
czsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLSAgICBmcmll
bmQgY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOwotICAgIGZyaWVuZCBjbGFzcyBX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xSZW5kZXJp
bmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2s7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVM7Ci0KLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZh
c0VsZW1lbnQqLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7Ci0gICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRl
eHQzRD4sIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKTsKLSAgICB2b2lkIGluaXRpYWxp
emVOZXdDb250ZXh0KCk7Ci0gICAgdm9pZCBzZXR1cEZsYWdzKCk7Ci0KLSAgICAvLyBBY3RpdmVE
T01PYmplY3QKLSAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYWRk
U2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7Ci0gICAgdm9pZCBhZGRDb250ZXh0T2Jq
ZWN0KFdlYkdMQ29udGV4dE9iamVjdCopOwotICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2Jq
ZWN0cygpOwotCi0gICAgdm9pZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKLSAgICB2b2lk
IG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotCi0gICAgLy8gUXVlcnkgd2hldGhlciBpdCBpcyBidWls
dCBvbiB0b3Agb2YgY29tcGxpYW50IEdMRVMyIGltcGxlbWVudGF0aW9uLgotICAgIGJvb2wgaXNH
TEVTMkNvbXBsaWFudCgpIHsgcmV0dXJuIG1faXNHTEVTMkNvbXBsaWFudDsgfQotICAgIC8vIFF1
ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpcyBOUE9UIHN0cmljdC4KLSAgICBib29sIGlz
R0xFUzJOUE9UU3RyaWN0KCkgeyByZXR1cm4gbV9pc0dMRVMyTlBPVFN0cmljdDsgfQotICAgIC8v
IFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZXMgZXJyb3JzIG9uIG91dC1v
Zi1ib3VuZHMgYnVmZmVyIGFjY2Vzc2VzLgotICAgIGJvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0
T2ZCb3VuZHNBY2Nlc3NlcygpIHsgcmV0dXJuIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3Vu
ZHNBY2Nlc3NlczsgfQotICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpbml0
aWFsaXplcyB0ZXh0dXJlcy9yZW5kZXJidWZmZXJzIHRvIDAuCi0gICAgYm9vbCBpc1Jlc291cmNl
U2FmZSgpIHsgcmV0dXJuIG1faXNSZXNvdXJjZVNhZmU7IH0KLSAgICAvLyBRdWVyeSBpZiBkZXB0
aF9zdGVuY2lsIGJ1ZmZlciBpcyBzdXBwb3J0ZWQuCi0gICAgYm9vbCBpc0RlcHRoU3RlbmNpbFN1
cHBvcnRlZCgpIHsgcmV0dXJuIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQ7IH0KLQotICAgIC8v
IEhlbHBlciB0byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMK
LSAgICAvLyBsaWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KLSAgICB1bnNpZ25lZCBpbnQgc2l6
ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSk7Ci0KLSAgICAvLyBCYXNpYyB2YWxpZGF0aW9uIG9mIGNv
dW50IGFuZCBvZmZzZXQgYWdhaW5zdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gZWxlbWVudCBhcnJh
eSBidWZmZXIKLSAgICBib29sIHZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291
bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKLQotICAgIC8vIENvbnNlcnZh
dGl2ZSBidXQgcXVpY2sgaW5kZXggdmFsaWRhdGlvbgotICAgIGJvb2wgdmFsaWRhdGVJbmRleEFy
cmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVp
cmVkKTsKLQotICAgIC8vIFByZWNpc2UgYnV0IHNsb3cgaW5kZXggdmFsaWRhdGlvbiAtLSBvbmx5
IGRvbmUgaWYgY29uc2VydmF0aXZlIGNoZWNrcyBmYWlsCi0gICAgYm9vbCB2YWxpZGF0ZUluZGV4
QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBv
ZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKLSAgICBib29sIHZhbGlkYXRl
VmVydGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2
ZUNvdW50ID0gMCk7Ci0KLSAgICBib29sIHZhbGlkYXRlV2ViR0xPYmplY3QoY29uc3QgY2hhcios
IFdlYkdMT2JqZWN0Kik7Ci0KLSAgICBib29sIHZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBj
b3VudCwgR0MzRHNpemVpIHByaW1jb3VudCk7Ci0gICAgYm9vbCB2YWxpZGF0ZURyYXdFbGVtZW50
cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3Vu
dCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRz
KTsKLQotICAgIC8vIEFkZHMgYSBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0LgotICAgIHZvaWQg
YWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOwotCi0gICAgUGFzc1JlZlB0cjxJ
bWFnZT4gZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSosIGludCB3aWR0aCwgaW50IGhlaWdodCwg
aW50IGRldmljZVNjYWxlRmFjdG9yKTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICBQYXNzUmVm
UHRyPEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgQmFja2luZ1N0
b3JlQ29weSwgRXhjZXB0aW9uQ29kZSYpOwotI2VuZGlmCi0KLSAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IG1fY29udGV4dDsKLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0R3JvdXA+IG1fY29u
dGV4dEdyb3VwOwotCi0gICAgLy8gT3B0aW9uYWwgc3RydWN0dXJlIGZvciByZW5kZXJpbmcgdG8g
YSBEcmF3aW5nQnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVjdGx5Ci0gICAgLy8gdG8gdGhlIGJhY2st
YnVmZmVyIG9mIG1fY29udGV4dC4KLSAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5n
QnVmZmVyOwotCi0gICAgLy8gRGlzcGF0Y2hlcyBhIGNvbnRleHQgbG9zdCBldmVudCBvbmNlIGl0
IGlzIGRldGVybWluZWQgdGhhdCBvbmUgaXMgbmVlZGVkLgotICAgIC8vIFRoaXMgaXMgdXNlZCBi
b3RoIGZvciBzeW50aGV0aWMgYW5kIHJlYWwgY29udGV4dCBsb3NzZXMuIEZvciByZWFsIG9uZXMs
IGl0J3MKLSAgICAvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3JpcHQgb24gdGhlIHN0
YWNrLCBidXQgdGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKLSAgICAvLyBvbiBob3cgZXhhY3RseSB0
aGUgcGxhdGZvcm0gZGlzY292ZXJzIHRoYXQgdGhlIGNvbnRleHQgd2FzIGxvc3QuIEZvciBiZXR0
ZXIKLSAgICAvLyBwb3J0YWJpbGl0eSB3ZSBhbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRo
ZSBldmVudC4KLSAgICBUaW1lciBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyOwotICAg
IGJvb2wgbV9yZXN0b3JlQWxsb3dlZDsKLSAgICBUaW1lciBtX3Jlc3RvcmVUaW1lcjsKLQotICAg
IGJvb2wgbV9uZWVkc1VwZGF0ZTsKLSAgICBib29sIG1fbWFya2VkQ2FudmFzRGlydHk7Ci0gICAg
SGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPiBtX2NvbnRleHRPYmplY3RzOwotCi0gICAgLy8g
TGlzdCBvZiBib3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFpbiBpbmZvIGFib3V0IHNpemVzIGZv
ciBBUlJBWV9CVUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9yIEVMRU1FTlRfQVJSQVlfQlVGRkVS
Ci0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBtX2JvdW5kQXJyYXlCdWZmZXI7Ci0gICAgCi0gICAg
UmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fZGVmYXVsdFZlcnRleEFycmF5T2Jq
ZWN0OwotICAgIFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3Q7Ci0gICAgdm9pZCBzZXRCb3VuZFZlcnRleEFycmF5T2JqZWN0KFBhc3NSZWZQ
dHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gYXJyYXlPYmplY3QpCi0gICAgewotICAgICAg
ICBpZiAoYXJyYXlPYmplY3QpCi0gICAgICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3Qg
PSBhcnJheU9iamVjdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgfQotICAgIAotICAg
IGNsYXNzIFZlcnRleEF0dHJpYlZhbHVlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFZlcnRleEF0
dHJpYlZhbHVlKCkKLSAgICAgICAgewotICAgICAgICAgICAgaW5pdFZhbHVlKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQgaW5pdFZhbHVlKCkKLSAgICAgICAgewotICAgICAg
ICAgICAgdmFsdWVbMF0gPSAwLjBmOwotICAgICAgICAgICAgdmFsdWVbMV0gPSAwLjBmOwotICAg
ICAgICAgICAgdmFsdWVbMl0gPSAwLjBmOwotICAgICAgICAgICAgdmFsdWVbM10gPSAxLjBmOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBHQzNEZmxvYXQgdmFsdWVbNF07Ci0gICAgfTsK
LSAgICBWZWN0b3I8VmVydGV4QXR0cmliVmFsdWU+IG1fdmVydGV4QXR0cmliVmFsdWU7Ci0gICAg
dW5zaWduZWQgbV9tYXhWZXJ0ZXhBdHRyaWJzOwotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbV92
ZXJ0ZXhBdHRyaWIwQnVmZmVyOwotICAgIGxvbmcgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZTsK
LSAgICBHQzNEZmxvYXQgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbNF07Ci0gICAgYm9vbCBt
X2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbDsKLSAgICBib29sIG1fdmVydGV4QXR0cmliMFVzZWRC
ZWZvcmU7Ci0KLSAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBtX2N1cnJlbnRQcm9ncmFtOwotICAg
IFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKLSAgICBSZWZQ
dHI8V2ViR0xSZW5kZXJidWZmZXI+IG1fcmVuZGVyYnVmZmVyQmluZGluZzsKLSAgICBzdHJ1Y3Qg
VGV4dHVyZVVuaXRTdGF0ZSB7Ci0gICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmUy
REJpbmRpbmc7Ci0gICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmVDdWJlTWFwQmlu
ZGluZzsKLSAgICB9OwotICAgIFZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBtX3RleHR1cmVVbml0
czsKLSAgICB1bnNpZ25lZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7Ci0KLSAgICBSZWZQdHI8
V2ViR0xUZXh0dXJlPiBtX2JsYWNrVGV4dHVyZTJEOwotICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+
IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcDsKLQotICAgIFZlY3RvcjxHQzNEZW51bT4gbV9jb21wcmVz
c2VkVGV4dHVyZUZvcm1hdHM7Ci0KLSAgICAvLyBGaXhlZC1zaXplIGNhY2hlIG9mIHJldXNhYmxl
IGltYWdlIGJ1ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCi0gICAgY2xhc3MgTFJV
SW1hZ2VCdWZmZXJDYWNoZSB7Ci0gICAgcHVibGljOgotICAgICAgICBMUlVJbWFnZUJ1ZmZlckNh
Y2hlKGludCBjYXBhY2l0eSk7Ci0gICAgICAgIC8vIFRoZSBwb2ludGVyIHJldHVybmVkIGlzIG93
bmVkIGJ5IHRoZSBpbWFnZSBidWZmZXIgbWFwLgotICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VC
dWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBi
dWJibGVUb0Zyb250KGludCBpZHgpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjp1bmlx
dWVfcHRyPEltYWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7Ci0gICAgICAgIGludCBtX2NhcGFjaXR5
OwotICAgIH07Ci0gICAgTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRlZEltYWdlQ2FjaGU7
Ci0KLSAgICBHQzNEaW50IG1fbWF4VGV4dHVyZVNpemU7Ci0gICAgR0MzRGludCBtX21heEN1YmVN
YXBUZXh0dXJlU2l6ZTsKLSAgICBHQzNEaW50IG1fbWF4UmVuZGVyYnVmZmVyU2l6ZTsKLSAgICBH
QzNEaW50IG1fbWF4Vmlld3BvcnREaW1zWzJdOwotICAgIEdDM0RpbnQgbV9tYXhUZXh0dXJlTGV2
ZWw7Ci0gICAgR0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7Ci0KLSAgICBHQzNEaW50
IG1fbWF4RHJhd0J1ZmZlcnM7Ci0gICAgR0MzRGludCBtX21heENvbG9yQXR0YWNobWVudHM7Ci0g
ICAgR0MzRGVudW0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAgICBib29sIG1fZHJhd0J1ZmZlcnNXZWJH
TFJlcXVpcmVtZW50c0NoZWNrZWQ7Ci0gICAgYm9vbCBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkOwot
Ci0gICAgR0MzRGludCBtX3BhY2tBbGlnbm1lbnQ7Ci0gICAgR0MzRGludCBtX3VucGFja0FsaWdu
bWVudDsKLSAgICBib29sIG1fdW5wYWNrRmxpcFk7Ci0gICAgYm9vbCBtX3VucGFja1ByZW11bHRp
cGx5QWxwaGE7Ci0gICAgR0MzRGVudW0gbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbjsKLSAg
ICBib29sIG1fY29udGV4dExvc3Q7Ci0gICAgTG9zdENvbnRleHRNb2RlIG1fY29udGV4dExvc3RN
b2RlOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKLQot
ICAgIGJvb2wgbV9sYXllckNsZWFyZWQ7Ci0gICAgR0MzRGZsb2F0IG1fY2xlYXJDb2xvcls0XTsK
LSAgICBib29sIG1fc2Npc3NvckVuYWJsZWQ7Ci0gICAgR0MzRGZsb2F0IG1fY2xlYXJEZXB0aDsK
LSAgICBHQzNEaW50IG1fY2xlYXJTdGVuY2lsOwotICAgIEdDM0Rib29sZWFuIG1fY29sb3JNYXNr
WzRdOwotICAgIEdDM0Rib29sZWFuIG1fZGVwdGhNYXNrOwotCi0gICAgYm9vbCBtX3N0ZW5jaWxF
bmFibGVkOwotICAgIEdDM0R1aW50IG1fc3RlbmNpbE1hc2ssIG1fc3RlbmNpbE1hc2tCYWNrOwot
ICAgIEdDM0RpbnQgbV9zdGVuY2lsRnVuY1JlZiwgbV9zdGVuY2lsRnVuY1JlZkJhY2s7IC8vIE5v
dGUgdGhhdCB0aGVzZSBhcmUgdGhlIHVzZXIgc3BlY2lmaWVkIHZhbHVlcywgbm90IHRoZSBpbnRl
cm5hbCBjbGFtcGVkIHZhbHVlLgotICAgIEdDM0R1aW50IG1fc3RlbmNpbEZ1bmNNYXNrLCBtX3N0
ZW5jaWxGdW5jTWFza0JhY2s7Ci0KLSAgICBib29sIG1faXNHTEVTMkNvbXBsaWFudDsKLSAgICBi
b29sIG1faXNHTEVTMk5QT1RTdHJpY3Q7Ci0gICAgYm9vbCBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91
dE9mQm91bmRzQWNjZXNzZXM7Ci0gICAgYm9vbCBtX2lzUmVzb3VyY2VTYWZlOwotICAgIGJvb2wg
bV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsKLSAgICBib29sIG1faXNSb2J1c3RuZXNzRVhUU3Vw
cG9ydGVkOwotCi0gICAgYm9vbCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlOwotICAgIGlu
dCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKLQotICAgIC8vIEEgV2ViR0xSZW5kZXJp
bmdDb250ZXh0IGNhbiBiZSBjcmVhdGVkIGluIGEgc3RhdGUgd2hlcmUgaXQgYXBwZWFycyBhcwot
ICAgIC8vIGEgdmFsaWQgYW5kIGFjdGl2ZSBjb250ZXh0LCBidXQgd2lsbCBub3QgZXhlY3V0ZSBh
bnkgaW1wb3J0YW50IG9wZXJhdGlvbnMKLSAgICAvLyB1bnRpbCBpdHMgbG9hZCBwb2xpY3kgaXMg
Y29tcGxldGVseSByZXNvbHZlZC4KLSAgICBib29sIG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bjsKLSAgICBib29sIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbjsKLSAgICBib29sIGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKTsKLQotICAgIC8vIEVuYWJsZWQgZXh0ZW5zaW9uIG9iamVj
dHMuCi0gICAgc3RkOjp1bmlxdWVfcHRyPEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz4gbV9l
eHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEVYVFNoYWRl
clRleHR1cmVMT0Q+IG1fZXh0U2hhZGVyVGV4dHVyZUxPRDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
T0VTVGV4dHVyZUZsb2F0PiBtX29lc1RleHR1cmVGbG9hdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
T0VTVGV4dHVyZUZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVGbG9hdExpbmVhcjsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUhhbGZGbG9hdD4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyPiBtX29lc1RleHR1
cmVIYWxmRmxvYXRMaW5lYXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9FU1N0YW5kYXJkRGVyaXZh
dGl2ZXM+IG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VT
VmVydGV4QXJyYXlPYmplY3Q+IG1fb2VzVmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPE9FU0VsZW1lbnRJbmRleFVpbnQ+IG1fb2VzRWxlbWVudEluZGV4VWludDsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViR0xMb3NlQ29udGV4dD4gbV93ZWJnbExvc2VDb250ZXh0OwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlYnVnUmVuZGVyZXJJbmZvPiBtX3dlYmdsRGVidWdSZW5k
ZXJlckluZm87Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMRGVidWdTaGFkZXJzPiBtX3dlYmds
RGVidWdTaGFkZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJl
QVRDPiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEM7
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPiBtX3dlYmds
Q29tcHJlc3NlZFRleHR1cmVTM1RDOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlcHRoVGV4
dHVyZT4gbV93ZWJnbERlcHRoVGV4dHVyZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEcmF3
QnVmZmVycz4gbV93ZWJnbERyYXdCdWZmZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUlu
c3RhbmNlZEFycmF5cz4gbV9hbmdsZUluc3RhbmNlZEFycmF5czsKLQotICAgIC8vIEhlbHBlcnMg
Zm9yIGdldFBhcmFtZXRlciBhbmQgb3RoZXJzCi0gICAgV2ViR0xHZXRJbmZvIGdldEJvb2xlYW5Q
YXJhbWV0ZXIoR0MzRGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRCb29sZWFuQXJyYXlQYXJh
bWV0ZXIoR0MzRGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRGbG9hdFBhcmFtZXRlcihHQzNE
ZW51bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEludFBhcmFtZXRlcihHQzNEZW51bSk7Ci0gICAg
V2ViR0xHZXRJbmZvIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJH
TEdldEluZm8gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJH
TEdldEluZm8gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7Ci0KLSAgICAvLyBD
bGVhciB0aGUgYmFja2J1ZmZlciBpZiBpdCB3YXMgY29tcG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBv
cGVyYXRpb24uCi0gICAgLy8gY2xlYXJNYXNrIGlzIHNldCB0byB0aGUgYml0ZmllbGQgb2YgYW55
IGNsZWFyIHRoYXQgd291bGQgaGFwcGVuIGFueXdheSBhdCB0aGlzIHRpbWUKLSAgICAvLyBhbmQg
dGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNsZWFyIGlzIG5vdyB1bm5lY2Vzc2Fy
eS4KLSAgICBib29sIGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSAw
KTsKLQotICAgIC8vIEhlbHBlciB0byByZXN0b3JlIHN0YXRlIHRoYXQgY2xlYXJpbmcgdGhlIGZy
YW1lYnVmZmVyIG1heSBkZXN0cm95LgotICAgIHZvaWQgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigp
OwotCi0gICAgdm9pZCB0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNv
bnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyRElt
cGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4
dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxp
cFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBj
aGVja1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hhciosIGJvb2wpOwotCi0gICAgdm9pZCBj
cmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlv
biBmb3IgY29weVRleHtTdWJ9SW1hZ2UsIGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0
Ci0gICAgLy8gYW5kIHRoZSBjb2xvciBidWZmZXIgZm9ybWF0IG9mIHRoZSBjdXJyZW50IGJvdW5k
IGZyYW1lYnVmZmVyIGNvbWJpbmF0aW9uCi0gICAgLy8gaXMgdmFsaWQuCi0gICAgYm9vbCBpc1Rl
eEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleElu
dGVybmFsRm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCk7Ci0KLSAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGNvbG9yIGJ1ZmZlciBm
b3JtYXQuCi0gICAgR0MzRGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCk7Ci0K
LSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIHdp
ZHRoLgotICAgIGludCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKTsKLQotICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgotICAgIGlu
dCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gdmVyaWZ5IGxpbWl0cyBvbiB0aGUgbGVuZ3RoIG9mIHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBs
b2NhdGlvbnMuCi0gICAgYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
Y2hlY2sgaWYgc2l6ZSBpcyBub24tbmVnYXRpdmUuCi0gICAgLy8gR2VuZXJhdGUgR0wgZXJyb3Ig
YW5kIHJldHVybiBmYWxzZSBmb3IgbmVnYXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0
cnVlLgotICAgIGJvb2wgdmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGludCB4LCBHQzNEaW50IHkpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlm
IGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYmVsb25nIHRvIHRoZQotICAgIC8vIEFTQ0lJ
IHN1YnNldCBhcyBkZWZpbmVkIGluIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCi0gICAg
Ym9vbCB2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmlu
ZyYpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRhcmdldCBhbmQgdGV4dHVy
ZSBib3VuZCB0byB0aGUgdGFyZ2V0LgotICAgIC8vIEdlbmVyYXRlIEdMIGVycm9ycyBhbmQgcmV0
dXJuIDAgaWYgdGFyZ2V0IGlzIGludmFsaWQgb3IgdGV4dHVyZSBib3VuZCBpcwotICAgIC8vIG51
bGwuICBPdGhlcndpc2UsIHJldHVybiB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0Lgot
ICAgIFdlYkdMVGV4dHVyZSogdmFsaWRhdGVUZXh0dXJlQmluZGluZyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApOwot
Ci0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGZvcm1hdC90eXBlIGZvciBm
dW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KLSAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3Ig
YW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBib29sIHZh
bGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpOwotCi0gICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGxldmVsIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4
e1N1Yn1JbWFnZS4KLSAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2Ug
aWYgbGV2ZWwgaXMgaW52YWxpZC4KLSAgICBib29sIHZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKTsKLQot
ICAgIGVudW0gVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgewotICAgICAgICBOb3RUZXhT
dWJJbWFnZTJELAotICAgICAgICBUZXhTdWJJbWFnZTJELAotICAgIH07Ci0KLSAgICBlbnVtIFRl
eEZ1bmNWYWxpZGF0aW9uU291cmNlVHlwZSB7Ci0gICAgICAgIFNvdXJjZUFycmF5QnVmZmVyVmll
dywKLSAgICAgICAgU291cmNlSW1hZ2VEYXRhLAotICAgICAgICBTb3VyY2VIVE1MSW1hZ2VFbGVt
ZW50LAotICAgICAgICBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwKLSAgICAgICAgU291cmNlSFRN
TFZpZGVvRWxlbWVudCwKLSAgICB9OwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7
U3VifUltYWdlMkQgdG8gY2hlY2sgaWYgdGhlIGlucHV0IGZvcm1hdC90eXBlL2xldmVsL3Rhcmdl
dC93aWR0aC9oZWlnaHQvYm9yZGVyL3hvZmZzZXQveW9mZnNldCBhcmUgdmFsaWQuCi0gICAgLy8g
T3RoZXJ3aXNlLCBpdCB3b3VsZCByZXR1cm4gcXVpY2tseSB3aXRob3V0IGRvaW5nIG90aGVyIHdv
cmsuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBU
ZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBl
LCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsCi0gICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0Mz
RGludCB5b2Zmc2V0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBw
YXJhbWV0ZXJzIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KLSAgICAvLyBHZW5l
cmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxp
ZC4KLSAgICBib29sIHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRh
dGlvbkZ1bmN0aW9uVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlKTsKLQotICAgIGVudW0gTnVsbERpc3Bvc2l0aW9uIHsKLSAgICAgICAg
TnVsbEFsbG93ZWQsCi0gICAgICAgIE51bGxOb3RBbGxvd2VkCi0gICAgfTsKLQotICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZpZXcK
LSAgICAvLyBpcyBvZiB0aGUgY29ycmVjdCB0eXBlIGFuZCBjb250YWlucyBlbm91Z2ggZGF0YSBm
b3IgdGhlIHRleEltYWdlIGNhbGwuCi0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1
cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRl
eEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4
ZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsRGlzcG9zaXRpb24pOwotCi0g
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgZ2l2ZW4gdGV4dHVyZSBmb3JtYXQg
aXMgc2V0dGFibGUgYXMgaW4KLSAgICAvLyB5b3UgY2FuIHN1cHBseSBkYXRhIHRvIHRleEltYWdl
MkQsIG9yIGNhbGwgdGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQgYW5kCi0gICAgLy8gY29weVRl
eFN1YkltYWdlMkQuCi0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNl
IGlmIHRoZSBmb3JtYXQgaXMgbm90IHNldHRhYmxlLgotICAgIGJvb2wgdmFsaWRhdGVTZXR0YWJs
ZVRleEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCk7Ci0K
LSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRh
dGEgaXMgY29ycmVjdCBzaXplCi0gICAgLy8gZm9yIHRoZSBnaXZlbiBmb3JtYXQgYW5kIGRpbWVu
c2lvbnMuCi0gICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxz
KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBjb21wcmVzc2VkIHRl
eHR1cmUgZm9ybWF0cy4KLSAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNE
ZW51bSBmb3JtYXQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXBy
ZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IKLSAgICAvLyB0aGUgZ2l2ZW4g
Zm9ybWF0LgotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpOwotCi0gICAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25z
IGFyZSB2YWxpZCBmb3IKLSAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgotICAgIGJvb2wgdmFsaWRh
dGVDb21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRleHR1
cmUqKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2RlIGZvciBkcmF3
e0FycmF5cy9FbGVtZW50c30uCi0gICAgYm9vbCB2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZh
bGlkYXRlIGlmIGZyb250L2JhY2sgc3RlbmNpbE1hc2sgYW5kIHN0ZW5jaWxGdW5jIHNldHRpbmdz
IGFyZSB0aGUgc2FtZS4KLSAgICBib29sIHZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUg
c3RlbmNpbCBmdW5jLgotICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4
UGFyYW1ldGVyZiBhbmQgdGV4UGFyYW1ldGVyaS4KLSAgICB2b2lkIHRleFBhcmFtZXRlcihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1pLCBHQzNEaW50IHBh
cmFtZiwgYm9vbCBpc0Zsb2F0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmludCBH
TCBlcnJvcnMgdG8gY29uc29sZS4KLSAgICB2b2lkIHByaW50R0xFcnJvclRvQ29uc29sZShjb25z
dCBTdHJpbmcmKTsKLSAgICB2b2lkIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uLCBjb25zdCBjaGFyKiByZWFzb24pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHByaW50IHdhcm5pbmdzIHRvIGNvbnNvbGUuIEN1cnJlbnRseQotICAgIC8vIHVzZWQgb25s
eSB0byB3YXJuIGFib3V0IHVzZSBvZiBvYnNvbGV0ZSBmdW5jdGlvbnMuCi0gICAgdm9pZCBwcmlu
dFdhcm5pbmdUb0NvbnNvbGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gdmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnJhbWVidWZmZXIgZnVuY3Rpb25z
LgotICAgIC8vIEdlbmVyYXRlIEdMIGVycm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVnYWwuCi0g
ICAgYm9vbCB2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpOwotCi0gICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGJsZW5kIGVxdWF0aW9uIG1vZGUuCi0gICAg
Ym9vbCB2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
ZW51bSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZnVuYyBm
YWN0b3JzLgotICAgIGJvb2wgdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGVudW0gc3JjLCBHQzNEZW51bSBkc3QpOwotCi0gICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgR0wgY2FwYWJpbGl0eS4KLSAgICBib29sIHZhbGlkYXRl
Q2FwYWJpbGl0eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotICAgIC8v
IEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB1bmlmb3Jt
IGZ1bmN0aW9ucy4KLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJh
eSosIEdDM0RzaXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgSW50
MzJBcnJheSosIEdDM0RzaXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1l
dGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
Kiwgdm9pZCosIEdDM0RzaXplaSwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVu
aWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSos
IEdDM0RzaXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVy
cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsK
LQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZm
ZXJEYXRhLgotICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0
LCBvciAwIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0gICAgV2ViR0xCdWZmZXIqIHZhbGlk
YXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHVzYWdlKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3Ig
dGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBpbWFnZSBpcyByZWFkeSBhbmQgd291bGRuJ3Qg
dGFpbnQgT3JpZ2luLgotICAgIGJvb2wgdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLQot
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBj
YW52YXMgaXMgcmVhZHkgYW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KLSAgICBib29sIHZhbGlk
YXRlSFRNTENhbnZhc0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFz
RWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlkZW8gaXMg
cmVhZHkgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgotICAgIGJvb2wgdmFsaWRhdGVIVE1MVmlkZW9F
bGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2Vw
dGlvbkNvZGUmKTsKLSNlbmRpZgotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdmVydGV4
QXR0cmliTmZ7dn0uCi0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxv
YXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpOwotICAgIHZvaWQgdmVydGV4QXR0
cmliZnZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0
MzJBcnJheSosIEdDM0RzaXplaSBleHBlY3RlZFNpemUpOwotICAgIHZvaWQgdmVydGV4QXR0cmli
ZnZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCosIEdDM0RzaXplaSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7Ci0KLSAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gZm9yIGRlbGV0ZSogKGRlbGV0ZUJ1ZmZlciwgZGVsZXRlUHJvZ3JhbSwgZXRjKSBm
dW5jdGlvbnMuCi0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJuIHdp
dGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLgotICAgIGJvb2wgZGVsZXRlT2JqZWN0KFdlYkdMT2Jq
ZWN0Kik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJpbmQqIChiaW5kQnVmZmVyLCBi
aW5kVGV4dHVyZSwgZXRjKSBhbmQgdXNlUHJvZ3JhbS4KLSAgICAvLyBJZiB0aGUgb2JqZWN0IGhh
cyBhbHJlYWR5IGJlZW4gZGVsZXRlZCwgc2V0IGRlbGV0ZWQgdG8gdHJ1ZSB1cG9uIHJldHVybi4K
LSAgICAvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0
aGVyIHByb2Nlc3NpbmcuCi0gICAgYm9vbCBjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVsZXRlZCk7Ci0KLSAgICAvLyBI
ZWxwZXJzIGZvciBzaW11bGF0aW5nIHZlcnRleEF0dHJpYjAKLSAgICB2b2lkIGluaXRWZXJ0ZXhB
dHRyaWIwKCk7Ci0gICAgYm9vbCBzaW11bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51bVZl
cnRleCk7Ci0gICAgdm9pZCByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlv
bigpOwotCi0gICAgdm9pZCBkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKTsKLSAgICAvLyBIZWxw
ZXIgZm9yIHJlc3RvcmF0aW9uIGFmdGVyIGNvbnRleHQgbG9zdC4KLSAgICB2b2lkIG1heWJlUmVz
dG9yZUNvbnRleHQoKTsKLQotICAgIC8vIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBwcml2
aWxlZ2VkIGNvZGUgaW4gdGhlIGJyb3dzZXIsIGZvciBleGFtcGxlLAotICAgIC8vIGEgU2FmYXJp
IG9yIENocm9tZSBleHRlbnNpb24uCi0gICAgYm9vbCBhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25z
KCkgY29uc3Q7Ci0KLSAgICBlbnVtIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSB7Ci0gICAgICAg
IERpc3BsYXlJbkNvbnNvbGUsCi0gICAgICAgIERvbnREaXNwbGF5SW5Db25zb2xlCi0gICAgfTsK
LQotICAgIC8vIFdyYXBwZXIgZm9yIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJv
ciB0aGF0IHNlbmRzIGEgbWVzc2FnZQotICAgIC8vIHRvIHRoZSBKYXZhU2NyaXB0IGNvbnNvbGUu
Ci0gICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSwgY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNl
ID0gRGlzcGxheUluQ29uc29sZSk7Ci0KLSAgICBTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBT
dHJpbmcmKSBjb25zdDsKLQotICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHN0ZW5jaWwgdGVzdCBi
YXNlZCBvbiB1c2VyIHNldHRpbmcgYW5kCi0gICAgLy8gd2hldGhlciB0aGUgY3VycmVudCBGQk8g
aGFzIGEgc3RlbmNpbCBidWZmZXIuCi0gICAgdm9pZCBhcHBseVN0ZW5jaWxUZXN0KCk7Ci0KLSAg
ICAvLyBIZWxwZXIgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhIGNhcGFiaWxpdHkuCi0gICAg
dm9pZCBlbmFibGVPckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpOwot
Ci0gICAgLy8gQ2xhbXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQT1JUX0RJ
TVMuCi0gICAgSW50U2l6ZSBjbGFtcGVkQ2FudmFzU2l6ZSgpOwotCi0gICAgLy8gRmlyc3QgdGlt
ZSBjYWxsZWQsIGlmIEVYVF9kcmF3X2J1ZmZlcnMgaXMgc3VwcG9ydGVkLCBxdWVyeSB0aGUgdmFs
dWU7IG90aGVyd2lzZSByZXR1cm4gMC4KLSAgICAvLyBMYXRlciwgcmV0dXJuIHRoZSBjYWNoZWQg
dmFsdWUuCi0gICAgR0MzRGludCBnZXRNYXhEcmF3QnVmZmVycygpOwotICAgIEdDM0RpbnQgZ2V0
TWF4Q29sb3JBdHRhY2htZW50cygpOwotCi0gICAgdm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNE
ZW51bSk7Ci0KLSAgICB2b2lkIHJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsKLSAgICB2b2lk
IHJlc3RvcmVDdXJyZW50VGV4dHVyZTJEKCk7Ci0KLSAgICAvLyBDaGVjayBpZiBFWFRfZHJhd19i
dWZmZXJzIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQgYW5kIGlmIGl0IHNhdGlzZmllcyB0aGUgV2Vi
R0wgcmVxdWlyZW1lbnRzLgotICAgIGJvb2wgc3VwcG9ydHNEcmF3QnVmZmVycygpOworICAgIFdl
YkdMMVJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqLCBHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyk7CisgICAgV2ViR0wxUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxl
bWVudCosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyk7CiB9OwotCisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4
dC5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVu
ZGVyaW5nQ29udGV4dC5pZGwJKHJldmlzaW9uIDE3Njk5NCkJKGZyb20gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbDoxNzY5OTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmlkbAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMZW51bTsKK3R5cGVkZWYgYm9v
bGVhbiAgICAgICAgR0xib29sZWFuOwordHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTGJpdGZpZWxk
OwordHlwZWRlZiBieXRlICAgICAgICAgICBHTGJ5dGU7ICAgICAgICAgLyogJ2J5dGUnIHNob3Vs
ZCBiZSBhIHNpZ25lZCA4IGJpdCB0eXBlLiAqLwordHlwZWRlZiBzaG9ydCAgICAgICAgICBHTHNo
b3J0OwordHlwZWRlZiBsb25nICAgICAgICAgICBHTGludDsKK3R5cGVkZWYgbG9uZyAgICAgICAg
ICAgR0xzaXplaTsKK3R5cGVkZWYgbG9uZyBsb25nICAgICAgR0xpbnRwdHI7Cit0eXBlZGVmIGxv
bmcgbG9uZyAgICAgIEdMc2l6ZWlwdHI7Cit0eXBlZGVmIG9jdGV0ICAgICAgICAgIEdMdWJ5dGU7
ICAgICAgICAvKiAnb2N0ZXQnIHNob3VsZCBiZSBhbiB1bnNpZ25lZCA4IGJpdCB0eXBlLiAqLwor
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBHTHVzaG9ydDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAg
R0x1aW50OwordHlwZWRlZiB1bnJlc3RyaWN0ZWQgZmxvYXQgR0xmbG9hdDsKK3R5cGVkZWYgdW5y
ZXN0cmljdGVkIGZsb2F0IEdMY2xhbXBmOworCitbCisgICAgQ29uZGl0aW9uYWw9V0VCR0wsCisg
ICAgSlNDdXN0b21NYXJrRnVuY3Rpb24sCisgICAgRG9Ob3RDaGVja0NvbnN0YW50cywKK10gaW50
ZXJmYWNlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewor
CisgICAgLyogQ2xlYXJCdWZmZXJNYXNrICovCisgICAgY29uc3QgR0xlbnVtIERFUFRIX0JVRkZF
Ul9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDAxMDA7CisgICAgY29uc3QgR0xlbnVtIFNURU5D
SUxfQlVGRkVSX0JJVCAgICAgICAgICAgICA9IDB4MDAwMDA0MDA7CisgICAgY29uc3QgR0xlbnVt
IENPTE9SX0JVRkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDA7CisKKyAgICAvKiBC
ZWdpbk1vZGUgKi8KKyAgICBjb25zdCBHTGVudW0gUE9JTlRTICAgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwMDAwOworICAgIGNvbnN0IEdMZW51bSBMSU5FUyAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDAwMDE7CisgICAgY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDAwMjsKKyAgICBjb25zdCBHTGVudW0gTElORV9TVFJJUCAgICAgICAgICAg
ICAgICAgICAgID0gMHgwMDAzOworICAgIGNvbnN0IEdMZW51bSBUUklBTkdMRVMgICAgICAgICAg
ICAgICAgICAgICAgPSAweDAwMDQ7CisgICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAg
ICAgICAgICAgICAgICA9IDB4MDAwNTsKKyAgICBjb25zdCBHTGVudW0gVFJJQU5HTEVfRkFOICAg
ICAgICAgICAgICAgICAgID0gMHgwMDA2OworCisgICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1
cHBvcnRlZCBpbiBFUzIwKSAqLworICAgIC8qICAgICAgTkVWRVIgKi8KKyAgICAvKiAgICAgIExF
U1MgKi8KKyAgICAvKiAgICAgIEVRVUFMICovCisgICAgLyogICAgICBMRVFVQUwgKi8KKyAgICAv
KiAgICAgIEdSRUFURVIgKi8KKyAgICAvKiAgICAgIE5PVEVRVUFMICovCisgICAgLyogICAgICBH
RVFVQUwgKi8KKyAgICAvKiAgICAgIEFMV0FZUyAqLworCisgICAgLyogQmxlbmRpbmdGYWN0b3JE
ZXN0ICovCisgICAgY29uc3QgR0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA9
IDA7CisgICAgY29uc3QgR0xlbnVtIE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDE7
CisgICAgY29uc3QgR0xlbnVtIFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMw
MDsKKyAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgw
MzAxOworICAgIGNvbnN0IEdMZW51bSBTUkNfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgPSAw
eDAzMDI7CisgICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAgICA9
IDB4MDMwMzsKKyAgICBjb25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAg
ID0gMHgwMzA0OworICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfRFNUX0FMUEhBICAgICAgICAg
ICAgPSAweDAzMDU7CisKKyAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLworICAgIC8qICAgICAg
WkVSTyAqLworICAgIC8qICAgICAgT05FICovCisgICAgY29uc3QgR0xlbnVtIERTVF9DT0xPUiAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MDMwNjsKKyAgICBjb25zdCBHTGVudW0gT05FX01JTlVT
X0RTVF9DT0xPUiAgICAgICAgICAgID0gMHgwMzA3OworICAgIGNvbnN0IEdMZW51bSBTUkNfQUxQ
SEFfU0FUVVJBVEUgICAgICAgICAgICAgPSAweDAzMDg7CisgICAgLyogICAgICBTUkNfQUxQSEEg
Ki8KKyAgICAvKiAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgKi8KKyAgICAvKiAgICAgIERTVF9B
TFBIQSAqLworICAgIC8qICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqLworCisgICAgLyogQmxl
bmRFcXVhdGlvblNlcGFyYXRlICovCisgICAgY29uc3QgR0xlbnVtIEZVTkNfQUREICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODAwNjsKKyAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT04g
ICAgICAgICAgICAgICAgID0gMHg4MDA5OworICAgIGNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElP
Tl9SR0IgICAgICAgICAgICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAq
LworICAgIGNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgPSAweDg4
M0Q7CisKKyAgICAvKiBCbGVuZFN1YnRyYWN0ICovCisgICAgY29uc3QgR0xlbnVtIEZVTkNfU1VC
VFJBQ1QgICAgICAgICAgICAgICAgICA9IDB4ODAwQTsKKyAgICBjb25zdCBHTGVudW0gRlVOQ19S
RVZFUlNFX1NVQlRSQUNUICAgICAgICAgID0gMHg4MDBCOworCisgICAgLyogU2VwYXJhdGUgQmxl
bmQgRnVuY3Rpb25zICovCisgICAgY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9SR0IgICAgICAgICAg
ICAgICAgICA9IDB4ODBDODsKKyAgICBjb25zdCBHTGVudW0gQkxFTkRfU1JDX1JHQiAgICAgICAg
ICAgICAgICAgID0gMHg4MEM5OworICAgIGNvbnN0IEdMZW51bSBCTEVORF9EU1RfQUxQSEEgICAg
ICAgICAgICAgICAgPSAweDgwQ0E7CisgICAgY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBIQSAg
ICAgICAgICAgICAgICA9IDB4ODBDQjsKKyAgICBjb25zdCBHTGVudW0gQ09OU1RBTlRfQ09MT1Ig
ICAgICAgICAgICAgICAgID0gMHg4MDAxOworICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09O
U1RBTlRfQ09MT1IgICAgICAgPSAweDgwMDI7CisgICAgY29uc3QgR0xlbnVtIENPTlNUQU5UX0FM
UEhBICAgICAgICAgICAgICAgICA9IDB4ODAwMzsKKyAgICBjb25zdCBHTGVudW0gT05FX01JTlVT
X0NPTlNUQU5UX0FMUEhBICAgICAgID0gMHg4MDA0OworICAgIGNvbnN0IEdMZW51bSBCTEVORF9D
T0xPUiAgICAgICAgICAgICAgICAgICAgPSAweDgwMDU7CisKKyAgICAvKiBCdWZmZXIgT2JqZWN0
cyAqLworICAgIGNvbnN0IEdMZW51bSBBUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgPSAw
eDg4OTI7CisgICAgY29uc3QgR0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICA9
IDB4ODg5MzsKKyAgICBjb25zdCBHTGVudW0gQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAg
ID0gMHg4ODk0OworICAgIGNvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5H
ICAgPSAweDg4OTU7CisKKyAgICBjb25zdCBHTGVudW0gU1RSRUFNX0RSQVcgICAgICAgICAgICAg
ICAgICAgID0gMHg4OEUwOworICAgIGNvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAgICAgICAgICAg
ICAgICAgICAgPSAweDg4RTQ7CisgICAgY29uc3QgR0xlbnVtIERZTkFNSUNfRFJBVyAgICAgICAg
ICAgICAgICAgICA9IDB4ODhFODsKKworICAgIGNvbnN0IEdMZW51bSBCVUZGRVJfU0laRSAgICAg
ICAgICAgICAgICAgICAgPSAweDg3NjQ7CisgICAgY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAg
ICAgICAgICAgICAgICAgICA9IDB4ODc2NTsKKworICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1ZF
UlRFWF9BVFRSSUIgICAgICAgICAgPSAweDg2MjY7CisKKyAgICAvKiBDdWxsRmFjZU1vZGUgKi8K
KyAgICBjb25zdCBHTGVudW0gRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA0
OworICAgIGNvbnN0IEdMZW51bSBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA0
MDU7CisgICAgY29uc3QgR0xlbnVtIEZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICA9IDB4
MDQwODsKKworICAgIC8qIERlcHRoRnVuY3Rpb24gKi8KKyAgICAvKiAgICAgIE5FVkVSICovCisg
ICAgLyogICAgICBMRVNTICovCisgICAgLyogICAgICBFUVVBTCAqLworICAgIC8qICAgICAgTEVR
VUFMICovCisgICAgLyogICAgICBHUkVBVEVSICovCisgICAgLyogICAgICBOT1RFUVVBTCAqLwor
ICAgIC8qICAgICAgR0VRVUFMICovCisgICAgLyogICAgICBBTFdBWVMgKi8KKworICAgIC8qIEVu
YWJsZUNhcCAqLworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFXzJEICAgICAgICAgICAgICAgICAg
ICAgPSAweDBERTE7CisgICAgY29uc3QgR0xlbnVtIENVTExfRkFDRSAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MEI0NDsKKyAgICBjb25zdCBHTGVudW0gQkxFTkQgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgwQkUyOworICAgIGNvbnN0IEdMZW51bSBESVRIRVIgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDBCRDA7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfVEVTVCAgICAgICAg
ICAgICAgICAgICA9IDB4MEI5MDsKKyAgICBjb25zdCBHTGVudW0gREVQVEhfVEVTVCAgICAgICAg
ICAgICAgICAgICAgID0gMHgwQjcxOworICAgIGNvbnN0IEdMZW51bSBTQ0lTU09SX1RFU1QgICAg
ICAgICAgICAgICAgICAgPSAweDBDMTE7CisgICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VU
X0ZJTEwgICAgICAgICAgICA9IDB4ODAzNzsKKyAgICBjb25zdCBHTGVudW0gU0FNUExFX0FMUEhB
X1RPX0NPVkVSQUdFICAgICAgID0gMHg4MDlFOworICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQ09W
RVJBR0UgICAgICAgICAgICAgICAgPSAweDgwQTA7CisKKyAgICAvKiBFcnJvckNvZGUgKi8KKyAg
ICBjb25zdCBHTGVudW0gTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsKKyAgICBj
b25zdCBHTGVudW0gSU5WQUxJRF9FTlVNICAgICAgICAgICAgICAgICAgID0gMHgwNTAwOworICAg
IGNvbnN0IEdMZW51bSBJTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgPSAweDA1MDE7Cisg
ICAgY29uc3QgR0xlbnVtIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4MDUwMjsK
KyAgICBjb25zdCBHTGVudW0gT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgID0gMHgwNTA1
OworCisgICAgLyogRnJvbnRGYWNlRGlyZWN0aW9uICovCisgICAgY29uc3QgR0xlbnVtIENXICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDkwMDsKKyAgICBjb25zdCBHTGVudW0gQ0NX
ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwOTAxOworCisgICAgLyogR2V0UE5hbWUg
Ki8KKyAgICBjb25zdCBHTGVudW0gTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgID0gMHgw
QjIxOworICAgIGNvbnN0IEdMZW51bSBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UgICAgICAgPSAw
eDg0NkQ7CisgICAgY29uc3QgR0xlbnVtIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA9
IDB4ODQ2RTsKKyAgICBjb25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAg
ID0gMHgwQjQ1OworICAgIGNvbnN0IEdMZW51bSBGUk9OVF9GQUNFICAgICAgICAgICAgICAgICAg
ICAgPSAweDBCNDY7CisgICAgY29uc3QgR0xlbnVtIERFUFRIX1JBTkdFICAgICAgICAgICAgICAg
ICAgICA9IDB4MEI3MDsKKyAgICBjb25zdCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAgICAg
ICAgICAgID0gMHgwQjcyOworICAgIGNvbnN0IEdMZW51bSBERVBUSF9DTEVBUl9WQUxVRSAgICAg
ICAgICAgICAgPSAweDBCNzM7CisgICAgY29uc3QgR0xlbnVtIERFUFRIX0ZVTkMgICAgICAgICAg
ICAgICAgICAgICA9IDB4MEI3NDsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9DTEVBUl9WQUxV
RSAgICAgICAgICAgID0gMHgwQjkxOworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZVTkMgICAg
ICAgICAgICAgICAgICAgPSAweDBCOTI7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfRkFJTCAg
ICAgICAgICAgICAgICAgICA9IDB4MEI5NDsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNT
X0RFUFRIX0ZBSUwgICAgICAgID0gMHgwQjk1OworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1BB
U1NfREVQVEhfUEFTUyAgICAgICAgPSAweDBCOTY7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxf
UkVGICAgICAgICAgICAgICAgICAgICA9IDB4MEI5NzsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJ
TF9WQUxVRV9NQVNLICAgICAgICAgICAgID0gMHgwQjkzOworICAgIGNvbnN0IEdMZW51bSBTVEVO
Q0lMX1dSSVRFTUFTSyAgICAgICAgICAgICAgPSAweDBCOTg7CisgICAgY29uc3QgR0xlbnVtIFNU
RU5DSUxfQkFDS19GVU5DICAgICAgICAgICAgICA9IDB4ODgwMDsKKyAgICBjb25zdCBHTGVudW0g
U1RFTkNJTF9CQUNLX0ZBSUwgICAgICAgICAgICAgID0gMHg4ODAxOworICAgIGNvbnN0IEdMZW51
bSBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMICAgPSAweDg4MDI7CisgICAgY29uc3QgR0xl
bnVtIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA9IDB4ODgwMzsKKyAgICBjb25zdCBH
TGVudW0gU1RFTkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOworICAgIGNvbnN0
IEdMZW51bSBTVEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyAgICAgICAgPSAweDhDQTQ7CisgICAgY29u
c3QgR0xlbnVtIFNURU5DSUxfQkFDS19XUklURU1BU0sgICAgICAgICA9IDB4OENBNTsKKyAgICBj
b25zdCBHTGVudW0gVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEyOworICAg
IGNvbnN0IEdMZW51bSBTQ0lTU09SX0JPWCAgICAgICAgICAgICAgICAgICAgPSAweDBDMTA7Cisg
ICAgLyogICAgICBTQ0lTU09SX1RFU1QgKi8KKyAgICBjb25zdCBHTGVudW0gQ09MT1JfQ0xFQVJf
VkFMVUUgICAgICAgICAgICAgID0gMHgwQzIyOworICAgIGNvbnN0IEdMZW51bSBDT0xPUl9XUklU
RU1BU0sgICAgICAgICAgICAgICAgPSAweDBDMjM7CisgICAgY29uc3QgR0xlbnVtIFVOUEFDS19B
TElHTk1FTlQgICAgICAgICAgICAgICA9IDB4MENGNTsKKyAgICBjb25zdCBHTGVudW0gUEFDS19B
TElHTk1FTlQgICAgICAgICAgICAgICAgID0gMHgwRDA1OworICAgIGNvbnN0IEdMZW51bSBNQVhf
VEVYVFVSRV9TSVpFICAgICAgICAgICAgICAgPSAweDBEMzM7CisgICAgY29uc3QgR0xlbnVtIE1B
WF9WSUVXUE9SVF9ESU1TICAgICAgICAgICAgICA9IDB4MEQzQTsKKyAgICBjb25zdCBHTGVudW0g
U1VCUElYRUxfQklUUyAgICAgICAgICAgICAgICAgID0gMHgwRDUwOworICAgIGNvbnN0IEdMZW51
bSBSRURfQklUUyAgICAgICAgICAgICAgICAgICAgICAgPSAweDBENTI7CisgICAgY29uc3QgR0xl
bnVtIEdSRUVOX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MzsKKyAgICBjb25zdCBH
TGVudW0gQkxVRV9CSVRTICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OworICAgIGNvbnN0
IEdMZW51bSBBTFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTU7CisgICAgY29u
c3QgR0xlbnVtIERFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NjsKKyAgICBj
b25zdCBHTGVudW0gU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3OworICAg
IGNvbnN0IEdMZW51bSBQT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgPSAweDJBMDA7Cisg
ICAgLyogICAgICBQT0xZR09OX09GRlNFVF9GSUxMICovCisgICAgY29uc3QgR0xlbnVtIFBPTFlH
T05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICA9IDB4ODAzODsKKyAgICBjb25zdCBHTGVudW0gVEVY
VFVSRV9CSU5ESU5HXzJEICAgICAgICAgICAgID0gMHg4MDY5OworICAgIGNvbnN0IEdMZW51bSBT
QU1QTEVfQlVGRkVSUyAgICAgICAgICAgICAgICAgPSAweDgwQTg7CisgICAgY29uc3QgR0xlbnVt
IFNBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODBBOTsKKyAgICBjb25zdCBHTGVu
dW0gU0FNUExFX0NPVkVSQUdFX1ZBTFVFICAgICAgICAgID0gMHg4MEFBOworICAgIGNvbnN0IEdM
ZW51bSBTQU1QTEVfQ09WRVJBR0VfSU5WRVJUICAgICAgICAgPSAweDgwQUI7CisKKyAgICAvKiBH
ZXRUZXh0dXJlUGFyYW1ldGVyICovCisgICAgLyogICAgICBURVhUVVJFX01BR19GSUxURVIgKi8K
KyAgICAvKiAgICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAqLworICAgIC8qICAgICAgVEVYVFVSRV9X
UkFQX1MgKi8KKyAgICAvKiAgICAgIFRFWFRVUkVfV1JBUF9UICovCisKKyAgICBjb25zdCBHTGVu
dW0gQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgID0gMHg4NkEzOworCisgICAgLyogSGlu
dE1vZGUgKi8KKyAgICBjb25zdCBHTGVudW0gRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAg
ID0gMHgxMTAwOworICAgIGNvbnN0IEdMZW51bSBGQVNURVNUICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDExMDE7CisgICAgY29uc3QgR0xlbnVtIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MTEwMjsKKworICAgIC8qIEhpbnRUYXJnZXQgKi8KKyAgICBjb25zdCBHTGVudW0g
R0VORVJBVEVfTUlQTUFQX0hJTlQgICAgICAgICAgICA9IDB4ODE5MjsKKworICAgIC8qIERhdGFU
eXBlICovCisgICAgY29uc3QgR0xlbnVtIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MTQwMDsKKyAgICBjb25zdCBHTGVudW0gVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAg
ID0gMHgxNDAxOworICAgIGNvbnN0IEdMZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDE0MDI7CisgICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAg
ICAgICA9IDB4MTQwMzsKKyAgICBjb25zdCBHTGVudW0gSU5UICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgxNDA0OworICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9JTlQgICAgICAgICAg
ICAgICAgICAgPSAweDE0MDU7CisgICAgY29uc3QgR0xlbnVtIEZMT0FUICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MTQwNjsKKworICAgIC8qIFBpeGVsRm9ybWF0ICovCisgICAgY29uc3Qg
R0xlbnVtIERFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsKKyAgICBjb25z
dCBHTGVudW0gQUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA2OworICAgIGNv
bnN0IEdMZW51bSBSR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDc7CisgICAg
Y29uc3QgR0xlbnVtIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKKyAg
ICBjb25zdCBHTGVudW0gTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA5Owor
ICAgIGNvbnN0IEdMZW51bSBMVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgPSAweDE5MEE7
CisKKyAgICAvKiBQaXhlbFR5cGUgKi8KKyAgICAvKiAgICAgIFVOU0lHTkVEX0JZVEUgKi8KKyAg
ICBjb25zdCBHTGVudW0gVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgID0gMHg4MDMzOwor
ICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7
CisgICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICA9IDB4ODM2
MzsKKworICAgIC8qIFNoYWRlcnMgKi8KKyAgICBjb25zdCBHTGVudW0gRlJBR01FTlRfU0hBREVS
ICAgICAgICAgICAgICAgICAgPSAweDhCMzA7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9TSEFE
RVIgICAgICAgICAgICAgICAgICAgID0gMHg4QjMxOworICAgIGNvbnN0IEdMZW51bSBNQVhfVkVS
VEVYX0FUVFJJQlMgICAgICAgICAgICAgICA9IDB4ODg2OTsKKyAgICBjb25zdCBHTGVudW0gTUFY
X1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgPSAweDhERkI7CisgICAgY29uc3QgR0xlbnVt
IE1BWF9WQVJZSU5HX1ZFQ1RPUlMgICAgICAgICAgICAgID0gMHg4REZDOworICAgIGNvbnN0IEdM
ZW51bSBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0RDsKKyAgICBjb25z
dCBHTGVudW0gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7CisgICAg
Y29uc3QgR0xlbnVtIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgID0gMHg4ODcyOwor
ICAgIGNvbnN0IEdMZW51bSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA9IDB4OERG
RDsKKyAgICBjb25zdCBHTGVudW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgPSAw
eDhCNEY7CisgICAgY29uc3QgR0xlbnVtIERFTEVURV9TVEFUVVMgICAgICAgICAgICAgICAgICAg
ID0gMHg4QjgwOworICAgIGNvbnN0IEdMZW51bSBMSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAg
ICAgICA9IDB4OEI4MjsKKyAgICBjb25zdCBHTGVudW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAg
ICAgICAgICAgPSAweDhCODM7CisgICAgY29uc3QgR0xlbnVtIEFUVEFDSEVEX1NIQURFUlMgICAg
ICAgICAgICAgICAgID0gMHg4Qjg1OworICAgIGNvbnN0IEdMZW51bSBBQ1RJVkVfVU5JRk9STVMg
ICAgICAgICAgICAgICAgICA9IDB4OEI4NjsKKyAgICBjb25zdCBHTGVudW0gQUNUSVZFX0FUVFJJ
QlVURVMgICAgICAgICAgICAgICAgPSAweDhCODk7CisgICAgY29uc3QgR0xlbnVtIFNIQURJTkdf
TEFOR1VBR0VfVkVSU0lPTiAgICAgICAgID0gMHg4QjhDOworICAgIGNvbnN0IEdMZW51bSBDVVJS
RU5UX1BST0dSQU0gICAgICAgICAgICAgICAgICA9IDB4OEI4RDsKKworICAgIC8qIFN0ZW5jaWxG
dW5jdGlvbiAqLworICAgIGNvbnN0IEdMZW51bSBORVZFUiAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDAyMDA7CisgICAgY29uc3QgR0xlbnVtIExFU1MgICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDIwMTsKKyAgICBjb25zdCBHTGVudW0gRVFVQUwgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgwMjAyOworICAgIGNvbnN0IEdMZW51bSBMRVFVQUwgICAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDAyMDM7CisgICAgY29uc3QgR0xlbnVtIEdSRUFURVIgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MDIwNDsKKyAgICBjb25zdCBHTGVudW0gTk9URVFVQUwgICAgICAgICAg
ICAgICAgICAgICAgID0gMHgwMjA1OworICAgIGNvbnN0IEdMZW51bSBHRVFVQUwgICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDAyMDY7CisgICAgY29uc3QgR0xlbnVtIEFMV0FZUyAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDIwNzsKKworICAgIC8qIFN0ZW5jaWxPcCAqLworICAgIC8q
ICAgICAgWkVSTyAqLworICAgIGNvbnN0IEdMZW51bSBLRUVQICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDFFMDA7CisgICAgY29uc3QgR0xlbnVtIFJFUExBQ0UgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MUUwMTsKKyAgICBjb25zdCBHTGVudW0gSU5DUiAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHgxRTAyOworICAgIGNvbnN0IEdMZW51bSBERUNSICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDFFMDM7CisgICAgY29uc3QgR0xlbnVtIElOVkVSVCAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MTUwQTsKKyAgICBjb25zdCBHTGVudW0gSU5DUl9XUkFQICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NTA3OworICAgIGNvbnN0IEdMZW51bSBERUNSX1dSQVAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg1MDg7CisKKyAgICAvKiBTdHJpbmdOYW1lICovCisgICAg
Y29uc3QgR0xlbnVtIFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMDsKKyAg
ICBjb25zdCBHTGVudW0gUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAxOwor
ICAgIGNvbnN0IEdMZW51bSBWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDI7
CisKKyAgICAvKiBUZXh0dXJlTWFnRmlsdGVyICovCisgICAgY29uc3QgR0xlbnVtIE5FQVJFU1Qg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjYwMDsKKyAgICBjb25zdCBHTGVudW0gTElORUFS
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyNjAxOworCisgICAgLyogVGV4dHVyZU1pbkZp
bHRlciAqLworICAgIC8qICAgICAgTkVBUkVTVCAqLworICAgIC8qICAgICAgTElORUFSICovCisg
ICAgY29uc3QgR0xlbnVtIE5FQVJFU1RfTUlQTUFQX05FQVJFU1QgICAgICAgICA9IDB4MjcwMDsK
KyAgICBjb25zdCBHTGVudW0gTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgID0gMHgyNzAx
OworICAgIGNvbnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgPSAweDI3
MDI7CisgICAgY29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAgICA9IDB4
MjcwMzsKKworICAgIC8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCisgICAgY29uc3QgR0xlbnVt
IFRFWFRVUkVfTUFHX0ZJTFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKKyAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRV9NSU5fRklMVEVSICAgICAgICAgICAgID0gMHgyODAxOworICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgPSAweDI4MDI7CisgICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA9IDB4MjgwMzsKKworICAgIC8q
IFRleHR1cmVUYXJnZXQgKi8KKyAgICAvKiAgICAgIFRFWFRVUkVfMkQgKi8KKyAgICBjb25zdCBH
TGVudW0gVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNzAyOworCisgICAgY29u
c3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA9IDB4ODUxMzsKKyAgICBj
b25zdCBHTGVudW0gVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgID0gMHg4NTE0OworICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1MTU7Cisg
ICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA9IDB4ODUxNjsK
KyAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgID0gMHg4NTE3
OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAgPSAweDg1
MTg7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA9IDB4
ODUxOTsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgID0g
MHg4NTFBOworICAgIGNvbnN0IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAg
PSAweDg1MUM7CisKKyAgICAvKiBUZXh0dXJlVW5pdCAqLworICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFMCAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzA7CisgICAgY29uc3QgR0xlbnVtIFRF
WFRVUkUxICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMTsKKyAgICBjb25zdCBHTGVudW0g
VEVYVFVSRTIgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMyOworICAgIGNvbnN0IEdMZW51
bSBURVhUVVJFMyAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzM7CisgICAgY29uc3QgR0xl
bnVtIFRFWFRVUkU0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNDsKKyAgICBjb25zdCBH
TGVudW0gVEVYVFVSRTUgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM1OworICAgIGNvbnN0
IEdMZW51bSBURVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzY7CisgICAgY29u
c3QgR0xlbnVtIFRFWFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNzsKKyAgICBj
b25zdCBHTGVudW0gVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM4OworICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzk7Cisg
ICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQTsK
KyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENC
OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0
Q0M7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODRDRDsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NENFOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAg
PSAweDg0Q0Y7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAg
ICA9IDB4ODREMDsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NEQxOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTggICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0RDI7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAgICAgICAgICAgICAg
ICAgICAgICA9IDB4ODREMzsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIwICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NEQ0OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjEgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg0RDU7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMiAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODRENjsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIzICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NEQ3OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjQgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0RDg7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNSAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODREOTsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI2
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERBOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJF
MjcgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REI7CisgICAgY29uc3QgR0xlbnVtIFRFWFRV
UkUyOCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREQzsKKyAgICBjb25zdCBHTGVudW0gVEVY
VFVSRTI5ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEREOworICAgIGNvbnN0IEdMZW51bSBU
RVhUVVJFMzAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REU7CisgICAgY29uc3QgR0xlbnVt
IFRFWFRVUkUzMSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRERjsKKyAgICBjb25zdCBHTGVu
dW0gQUNUSVZFX1RFWFRVUkUgICAgICAgICAgICAgICAgID0gMHg4NEUwOworCisgICAgLyogVGV4
dHVyZVdyYXBNb2RlICovCisgICAgY29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MjkwMTsKKyAgICBjb25zdCBHTGVudW0gQ0xBTVBfVE9fRURHRSAgICAgICAg
ICAgICAgICAgID0gMHg4MTJGOworICAgIGNvbnN0IEdMZW51bSBNSVJST1JFRF9SRVBFQVQgICAg
ICAgICAgICAgICAgPSAweDgzNzA7CisKKyAgICAvKiBVbmlmb3JtIFR5cGVzICovCisgICAgY29u
c3QgR0xlbnVtIEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MDsKKyAgICBj
b25zdCBHTGVudW0gRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUxOworICAg
IGNvbnN0IEdMZW51bSBGTE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTI7Cisg
ICAgY29uc3QgR0xlbnVtIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MzsK
KyAgICBjb25zdCBHTGVudW0gSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU0
OworICAgIGNvbnN0IEdMZW51bSBJTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhC
NTU7CisgICAgY29uc3QgR0xlbnVtIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
OEI1NjsKKyAgICBjb25zdCBHTGVudW0gQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgID0g
MHg4QjU3OworICAgIGNvbnN0IEdMZW51bSBCT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAg
PSAweDhCNTg7CisgICAgY29uc3QgR0xlbnVtIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAg
ICA9IDB4OEI1OTsKKyAgICBjb25zdCBHTGVudW0gRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAg
ICAgID0gMHg4QjVBOworICAgIGNvbnN0IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAgICAgICAg
ICAgICAgPSAweDhCNUI7CisgICAgY29uc3QgR0xlbnVtIEZMT0FUX01BVDQgICAgICAgICAgICAg
ICAgICAgICA9IDB4OEI1QzsKKyAgICBjb25zdCBHTGVudW0gU0FNUExFUl8yRCAgICAgICAgICAg
ICAgICAgICAgID0gMHg4QjVFOworICAgIGNvbnN0IEdMZW51bSBTQU1QTEVSX0NVQkUgICAgICAg
ICAgICAgICAgICAgPSAweDhCNjA7CisKKyAgICAvKiBWZXJ0ZXggQXJyYXlzICovCisgICAgY29u
c3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgPSAweDg2MjI7Cisg
ICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAgPSAweDg2
MjM7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAgICAg
PSAweDg2MjQ7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAg
ICAgICAgPSAweDg2MjU7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9S
TUFMSVpFRCAgICAgPSAweDg4NkE7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJS
QVlfUE9JTlRFUiAgICAgICAgPSAweDg2NDU7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRS
SUJfQVJSQVlfQlVGRkVSX0JJTkRJTkcgPSAweDg4OUY7CisKKyAgICAvKiBTaGFkZXIgU291cmNl
ICovCisgICAgY29uc3QgR0xlbnVtIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA9IDB4
OEI4MTsKKworICAgIC8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovCisgICAg
Y29uc3QgR0xlbnVtIExPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMDsKKyAg
ICBjb25zdCBHTGVudW0gTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgID0gMHg4REYxOwor
ICAgIGNvbnN0IEdMZW51bSBISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgPSAweDhERjI7
CisgICAgY29uc3QgR0xlbnVtIExPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERG
MzsKKyAgICBjb25zdCBHTGVudW0gTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgID0gMHg4
REY0OworICAgIGNvbnN0IEdMZW51bSBISUdIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDhERjU7CisKKyAgICAvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCisgICAgY29uc3QgR0xlbnVt
IEZSQU1FQlVGRkVSICAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MDsKKyAgICBjb25zdCBHTGVu
dW0gUkVOREVSQlVGRkVSICAgICAgICAgICAgICAgICAgID0gMHg4RDQxOworCisgICAgY29uc3Qg
R0xlbnVtIFJHQkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKKyAgICBjb25z
dCBHTGVudW0gUkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDU3OworICAgIGNv
bnN0IEdMZW51bSBSR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhENjI7CisgICAg
Y29uc3QgR0xlbnVtIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9IDB4ODFBNTsKKyAg
ICBjb25zdCBHTGVudW0gU1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAgID0gMHgxOTAxOwor
ICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgPSAweDhENDg7
CisgICAgY29uc3QgR0xlbnVtIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA9IDB4ODRG
OTsKKworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAgICAgPSAw
eDhENDI7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9IRUlHSFQgICAgICAgICAgICA9
IDB4OEQ0MzsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAg
ID0gMHg4RDQ0OworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfUkVEX1NJWkUgICAgICAg
ICAgPSAweDhENTA7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFICAg
ICAgICA9IDB4OEQ1MTsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JMVUVfU0laRSAg
ICAgICAgID0gMHg4RDUyOworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfQUxQSEFfU0la
RSAgICAgICAgPSAweDhENTM7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9ERVBUSF9T
SVpFICAgICAgICA9IDB4OEQ1NDsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1NURU5D
SUxfU0laRSAgICAgID0gMHg4RDU1OworCisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfT0JKRUNUX1RZUEUgICAgICAgICAgID0gMHg4Q0QwOworICAgIGNvbnN0IEdMZW51
bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA9IDB4OENEMTsK
KyAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAg
ICAgICAgPSAweDhDRDI7CisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
VEVYVFVSRV9DVUJFX01BUF9GQUNFID0gMHg4Q0QzOworCisgICAgY29uc3QgR0xlbnVtIENPTE9S
X0FUVEFDSE1FTlQwICAgICAgICAgICAgICA9IDB4OENFMDsKKyAgICBjb25zdCBHTGVudW0gREVQ
VEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgID0gMHg4RDAwOworICAgIGNvbnN0IEdMZW51bSBT
VEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgICAgICAgPSAweDhEMjA7CisgICAgY29uc3QgR0xlbnVt
IERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICA9IDB4ODIxQTsKKworICAgIGNvbnN0IEdM
ZW51bSBOT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworCisgICAgY29uc3QgR0xl
bnVtIEZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgID0gMHg4Q0Q1Owor
ICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgICAgICAg
ICA9IDB4OENENjsKKyAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNT
SU5HX0FUVEFDSE1FTlQgPSAweDhDRDc7CisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0lO
Q09NUExFVEVfRElNRU5TSU9OUyAgICAgICAgID0gMHg4Q0Q5OworICAgIGNvbnN0IEdMZW51bSBG
UkFNRUJVRkZFUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICA9IDB4OENERDsKKworICAg
IGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAweDhDQTY7Cisg
ICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4OENBNzsK
KyAgICBjb25zdCBHTGVudW0gTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgID0gMHg4NEU4
OworCisgICAgY29uc3QgR0xlbnVtIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA9IDB4
MDUwNjsKKworICAgIC8qIFdlYkdMLXNwZWNpZmljIGVudW1zICovCisgICAgY29uc3QgR0xlbnVt
IFVOUEFDS19GTElQX1lfV0VCR0wgICAgICAgICAgICAgICAgPSAweDkyNDA7CisgICAgY29uc3Qg
R0xlbnVtIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAgICAgPSAweDkyNDE7CisgICAg
Y29uc3QgR0xlbnVtIENPTlRFWFRfTE9TVF9XRUJHTCAgICAgICAgICAgICAgICAgPSAweDkyNDI7
CisgICAgY29uc3QgR0xlbnVtIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wgPSAw
eDkyNDM7CisgICAgY29uc3QgR0xlbnVtIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICAg
ICAgPSAweDkyNDQ7CisKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgR0xzaXplaSBkcmF3aW5nQnVm
ZmVyV2lkdGg7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIEdMc2l6ZWkgZHJhd2luZ0J1ZmZlckhl
aWdodDsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAg
ICAgICAgIGFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpOworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGF0dGFjaFNoYWRlcihXZWJHTFBy
b2dyYW0gcHJvZ3JhbSwgV2ViR0xTaGFkZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kQXR0cmliTG9jYXRpb24oV2Vi
R0xQcm9ncmFtIHByb2dyYW0sIEdMdWludCBpbmRleCwgRE9NU3RyaW5nIG5hbWUpOworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRCdWZm
ZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIgYnVmZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kRnJhbWVidWZmZXIoR0xl
bnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CisgICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZFJlbmRlcmJ1ZmZl
cihHTGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRUZXh0
dXJlKEdMZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBm
IGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRXF1YXRpb24oR0xlbnVtIG1vZGUpOworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0xl
bnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBibGVuZEZ1bmMoR0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFjdG9yKTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRGdW5jU2VwYXJhdGUo
R0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVudW0gZHN0
QWxwaGEpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAg
ICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXI/IGRhdGEsIEdMZW51
bSB1c2FnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXc/IGRhdGEs
IEdMZW51bSB1c2FnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUs
IEdMZW51bSB1c2FnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZz
ZXQsIEFycmF5QnVmZmVyPyBkYXRhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJTdWJEYXRhKEdMZW51bSB0YXJnZXQsIEdMaW50
cHRyIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3PyBkYXRhKTsKKworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIEdMZW51bSAgICAgICBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMZW51bSB0YXJnZXQp
OworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJpdGZpZWxk
IG1hc2spOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhckNvbG9y
KEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFs
cGhhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXJEZXB0aChH
TGNsYW1wZiBkZXB0aCk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNs
ZWFyU3RlbmNpbChHTGludCBzKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgY29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJs
dWUsIEdMYm9vbGVhbiBhbHBoYSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciBzaGFkZXIpOwor
CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRUZXhJbWFn
ZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEFycmF5QnVmZmVy
VmlldyBkYXRhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29tcHJl
c3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7CisgICAgCisgICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIpOworICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBjb3B5VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgW1N0cmljdFR5cGVDaGVj
a2luZ10gV2ViR0xCdWZmZXIgY3JlYXRlQnVmZmVyKCk7CisgICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gV2ViR0xGcmFtZWJ1ZmZlciBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIFdlYkdMUHJvZ3JhbSBjcmVhdGVQcm9ncmFtKCk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gV2ViR0xSZW5kZXJidWZmZXIgY3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTFNoYWRlciBjcmVhdGVTaGFk
ZXIoR0xlbnVtIHR5cGUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMVGV4dHVyZSBj
cmVhdGVUZXh0dXJlKCk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
Y3VsbEZhY2UoR0xlbnVtIG1vZGUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIGRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOworICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVy
IGZyYW1lYnVmZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVs
ZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CisgICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciByZW5k
ZXJidWZmZXIpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVT
aGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7CisKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhGdW5jKEdMZW51bSBmdW5jKTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhNYXNrKEdMYm9vbGVhbiBm
bGFnKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhSYW5nZShH
TGNsYW1wZiB6TmVhciwgR0xjbGFtcGYgekZhcik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSBw
cm9ncmFtLCBXZWJHTFNoYWRlciBzaGFkZXIpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICBkaXNhYmxlKEdMZW51bSBjYXApOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShH
THVpbnQgaW5kZXgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVp
IGNvdW50KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0
eXBlLCBHTGludHB0ciBvZmZzZXQpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIGVuYWJsZShHTGVudW0gY2FwKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQg
aW5kZXgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBmaW5pc2goKTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmx1c2goKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJl
bmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKKyAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFtZWJ1
ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRl
eHRhcmdldCwgV2ViR0xUZXh0dXJlIHRleHR1cmUsIEdMaW50IGxldmVsKTsKKyAgICBbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51bSBtb2RlKTsKKyAgICBb
U3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZ2VuZXJhdGVNaXBtYXAoR0xlbnVtIHRh
cmdldCk7CisgICAgCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBX
ZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVp
bnQgaW5kZXgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2Vi
R0xBY3RpdmVJbmZvIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMdWlu
dCBpbmRleCk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtIHByb2dyYW0pOworCisg
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xpbnQgICAgICAgIGdldEF0dHJpYkxvY2F0aW9uKFdl
YkdMUHJvZ3JhbSBwcm9ncmFtLCBET01TdHJpbmcgbmFtZSk7CisKKyAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBDdXN0b21dIGFueSBnZXRCdWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIHBuYW1lKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMQ29udGV4dEF0dHJp
YnV0ZXMgZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IEdMZW51bSBnZXRFcnJvcigpOworCisgICAgLy8gb2JqZWN0IGdldEV4dGVuc2lvbihET01TdHJp
bmcgbmFtZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSBhbnkgZ2V0RXh0ZW5z
aW9uKERPTVN0cmluZyBuYW1lKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwg
UmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUpOworICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UGFyYW1ldGVy
KEdMZW51bSBwbmFtZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNF
eGNlcHRpb25dIGFueSBnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBH
TGVudW0gcG5hbWUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxs
U3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0UHJvZ3JhbUluZm9M
b2coV2ViR0xQcm9ncmFtIHByb2dyYW0pOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBS
YWlzZXNFeGNlcHRpb25dIGFueSBnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIgc2hhZGVy
LCBHTGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5l
ZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFk
ZXJJbmZvTG9nKFdlYkdMU2hhZGVyIHNoYWRlcik7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0IGdldFNoYWRlclBy
ZWNpc2lvbkZvcm1hdChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUpOwor
CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxs
LCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFk
ZXIgc2hhZGVyKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gc2VxdWVuY2U8
RE9NU3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CisKKyAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFRleFBhcmFtZXRlcihHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSBwcm9ncmFt
LCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbik7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGdldFVuaWZvcm1Mb2Nh
dGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOworCisgICAgW1N0cmlj
dFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRWZXJ0ZXhBdHRy
aWIoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gR0xzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0x1aW50IGluZGV4LCBHTGVudW0g
cG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhpbnQoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9v
bGVhbiAgICBpc0J1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIEdMYm9vbGVhbiAgICBpc0NvbnRleHRMb3N0KCk7CisgICAgW1N0cmljdFR5cGVDaGVj
a2luZ10gR0xib29sZWFuICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyIGZy
YW1lYnVmZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNQcm9n
cmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJv
b2xlYW4gICAgaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNTaGFkZXIoV2ViR0xTaGFk
ZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNUZXh0
dXJlKFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgbGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGxpbmtQcm9ncmFtKFdlYkdMUHJvZ3Jh
bSBwcm9ncmFtKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcGl4ZWxT
dG9yZWkoR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CisgICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIHBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5p
dHMpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgcmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyBwaXhl
bHMpOworICAgIAorICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZWxlYXNl
U2hhZGVyQ29tcGlsZXIoKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
cmVuZGVyYnVmZmVyU3RvcmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgc2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBp
bnZlcnQpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lzc29yKEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBzaGFkZXJTb3Vy
Y2UoV2ViR0xTaGFkZXIgc2hhZGVyLCBET01TdHJpbmcgc3RyaW5nKTsKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmMoR0xlbnVtIGZ1bmMsIEdMaW50IHJl
ZiwgR0x1aW50IG1hc2spOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBz
dGVuY2lsRnVuY1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBH
THVpbnQgbWFzayk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5j
aWxNYXNrKEdMdWludCBtYXNrKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgc3RlbmNpbE1hc2tTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3AoR0xlbnVtIGZhaWwsIEdM
ZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgc3RlbmNpbE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVu
dW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgdGV4UGFyYW1ldGVyZihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxv
YXQgcGFyYW0pOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0ZXhQYXJh
bWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworCisgICAg
Ly8gU3VwcG9ydGVkIGZvcm1zOgorICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJv
cmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldz8gcGl4ZWxz
KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAg
ICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50PyBjYW52YXMpOworI2lmIGRlZmluZWQoRU5BQkxF
X1ZJREVPKSAmJiBFTkFCTEVfVklERU8KKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxWaWRl
b0VsZW1lbnQ/IHZpZGVvKTsKKyNlbmRpZgorCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXc/IHBp
eGVscyk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSW1hZ2VEYXRhPyBw
aXhlbHMpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAg
ICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVs
ZW1lbnQ/IGltYWdlKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1M
Q2FudmFzRWxlbWVudD8gY2FudmFzKTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5B
QkxFX1ZJREVPCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTFZpZGVv
RWxlbWVudD8gdmlkZW8pOworI2VuZGlmCisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9u
LCBHTGZsb2F0IHgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkIHVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZs
b2F0MzJBcnJheSB2KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgdW5pZm9ybTFpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGludCB4KTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1
bmlmb3JtMWl2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOwor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmYo
V2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlm
b3JtMmZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Cisg
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yaShX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSk7CisgICAgW1N0
cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJp
dihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmKFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1
bmlmb3JtM2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7
CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0z
aShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQg
eik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgdW5pZm9ybTNpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2
KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9y
bTRmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwg
R0xmbG9hdCB6LCBHTGZsb2F0IHcpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9j
YXRpb24sIEZsb2F0MzJBcnJheSB2KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgdW5pZm9ybTRpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBH
TGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGl2KFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOworCisgICAgW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihXZWJH
TFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFy
cmF5IGFycmF5KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9u
LCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRyaXg0
ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEZs
b2F0MzJBcnJheSBhcnJheSk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB2YWxp
ZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOworCisgICAgW1N0cmljdFR5cGVDaGVj
a2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjFmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgp
OworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYo
R0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBH
TGZsb2F0IHkpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhB
dHRyaWIyZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5keCwgR0xm
bG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywg
Q3VzdG9tXSB2b2lkIHZlcnRleEF0dHJpYjNmdihHTHVpbnQgaW5keCwgRmxvYXQzMkFycmF5IHZh
bHVlcyk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJp
YjRmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0
IHcpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWI0
ZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYlBvaW50ZXIo
R0x1aW50IGluZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXpl
ZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xzaXplaSBzdHJpZGUsIEdMaW50cHRyIG9mZnNldCk7CisKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsCSh3b3JraW5nIGNv
cHkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0
LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtMjMsNjQ3ICsyMyw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi10
eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMZW51bTsKLXR5cGVkZWYgYm9vbGVhbiAgICAgICAgR0xi
b29sZWFuOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTGJpdGZpZWxkOwotdHlwZWRlZiBieXRl
ICAgICAgICAgICBHTGJ5dGU7ICAgICAgICAgLyogJ2J5dGUnIHNob3VsZCBiZSBhIHNpZ25lZCA4
IGJpdCB0eXBlLiAqLwotdHlwZWRlZiBzaG9ydCAgICAgICAgICBHTHNob3J0OwotdHlwZWRlZiBs
b25nICAgICAgICAgICBHTGludDsKLXR5cGVkZWYgbG9uZyAgICAgICAgICAgR0xzaXplaTsKLXR5
cGVkZWYgbG9uZyBsb25nICAgICAgR0xpbnRwdHI7Ci10eXBlZGVmIGxvbmcgbG9uZyAgICAgIEdM
c2l6ZWlwdHI7Ci10eXBlZGVmIG9jdGV0ICAgICAgICAgIEdMdWJ5dGU7ICAgICAgICAvKiAnb2N0
ZXQnIHNob3VsZCBiZSBhbiB1bnNpZ25lZCA4IGJpdCB0eXBlLiAqLwotdHlwZWRlZiB1bnNpZ25l
ZCBzaG9ydCBHTHVzaG9ydDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgR0x1aW50OwotdHlwZWRl
ZiB1bnJlc3RyaWN0ZWQgZmxvYXQgR0xmbG9hdDsKLXR5cGVkZWYgdW5yZXN0cmljdGVkIGZsb2F0
IEdMY2xhbXBmOwotCiBbCiAgICAgQ29uZGl0aW9uYWw9V0VCR0wsCiAgICAgSlNDdXN0b21NYXJr
RnVuY3Rpb24sCiAgICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLV0gaW50ZXJmYWNlIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewotCi0gICAgLyogQ2xlYXJC
dWZmZXJNYXNrICovCi0gICAgY29uc3QgR0xlbnVtIERFUFRIX0JVRkZFUl9CSVQgICAgICAgICAg
ICAgICA9IDB4MDAwMDAxMDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQlVGRkVSX0JJVCAg
ICAgICAgICAgICA9IDB4MDAwMDA0MDA7Ci0gICAgY29uc3QgR0xlbnVtIENPTE9SX0JVRkZFUl9C
SVQgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDA7Ci0KLSAgICAvKiBCZWdpbk1vZGUgKi8KLSAg
ICBjb25zdCBHTGVudW0gUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAwOwot
ICAgIGNvbnN0IEdMZW51bSBMSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDE7
Ci0gICAgY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAw
MjsKLSAgICBjb25zdCBHTGVudW0gTElORV9TVFJJUCAgICAgICAgICAgICAgICAgICAgID0gMHgw
MDAzOwotICAgIGNvbnN0IEdMZW51bSBUUklBTkdMRVMgICAgICAgICAgICAgICAgICAgICAgPSAw
eDAwMDQ7Ci0gICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAgICAgICAgICAgICAgICA9
IDB4MDAwNTsKLSAgICBjb25zdCBHTGVudW0gVFJJQU5HTEVfRkFOICAgICAgICAgICAgICAgICAg
ID0gMHgwMDA2OwotCi0gICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1cHBvcnRlZCBpbiBFUzIw
KSAqLwotICAgIC8qICAgICAgTkVWRVIgKi8KLSAgICAvKiAgICAgIExFU1MgKi8KLSAgICAvKiAg
ICAgIEVRVUFMICovCi0gICAgLyogICAgICBMRVFVQUwgKi8KLSAgICAvKiAgICAgIEdSRUFURVIg
Ki8KLSAgICAvKiAgICAgIE5PVEVRVUFMICovCi0gICAgLyogICAgICBHRVFVQUwgKi8KLSAgICAv
KiAgICAgIEFMV0FZUyAqLwotCi0gICAgLyogQmxlbmRpbmdGYWN0b3JEZXN0ICovCi0gICAgY29u
c3QgR0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA9IDA7Ci0gICAgY29uc3Qg
R0xlbnVtIE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDE7Ci0gICAgY29uc3QgR0xl
bnVtIFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMDsKLSAgICBjb25zdCBH
TGVudW0gT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAxOwotICAgIGNvbnN0
IEdMZW51bSBTUkNfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDI7Ci0gICAgY29u
c3QgR0xlbnVtIE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAgICA9IDB4MDMwMzsKLSAgICBj
b25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzA0OwotICAg
IGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfRFNUX0FMUEhBICAgICAgICAgICAgPSAweDAzMDU7Ci0K
LSAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLwotICAgIC8qICAgICAgWkVSTyAqLwotICAgIC8q
ICAgICAgT05FICovCi0gICAgY29uc3QgR0xlbnVtIERTVF9DT0xPUiAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDMwNjsKLSAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0RTVF9DT0xPUiAgICAg
ICAgICAgID0gMHgwMzA3OwotICAgIGNvbnN0IEdMZW51bSBTUkNfQUxQSEFfU0FUVVJBVEUgICAg
ICAgICAgICAgPSAweDAzMDg7Ci0gICAgLyogICAgICBTUkNfQUxQSEEgKi8KLSAgICAvKiAgICAg
IE9ORV9NSU5VU19TUkNfQUxQSEEgKi8KLSAgICAvKiAgICAgIERTVF9BTFBIQSAqLwotICAgIC8q
ICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqLwotCi0gICAgLyogQmxlbmRFcXVhdGlvblNlcGFy
YXRlICovCi0gICAgY29uc3QgR0xlbnVtIEZVTkNfQUREICAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODAwNjsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT04gICAgICAgICAgICAgICAg
ID0gMHg4MDA5OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9SR0IgICAgICAgICAg
ICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLwotICAgIGNvbnN0IEdM
ZW51bSBCTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgPSAweDg4M0Q7Ci0KLSAgICAvKiBC
bGVuZFN1YnRyYWN0ICovCi0gICAgY29uc3QgR0xlbnVtIEZVTkNfU1VCVFJBQ1QgICAgICAgICAg
ICAgICAgICA9IDB4ODAwQTsKLSAgICBjb25zdCBHTGVudW0gRlVOQ19SRVZFUlNFX1NVQlRSQUNU
ICAgICAgICAgID0gMHg4MDBCOwotCi0gICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rpb25zICov
Ci0gICAgY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9SR0IgICAgICAgICAgICAgICAgICA9IDB4ODBD
ODsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRfU1JDX1JHQiAgICAgICAgICAgICAgICAgID0gMHg4
MEM5OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAgICAgPSAw
eDgwQ0E7Ci0gICAgY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBIQSAgICAgICAgICAgICAgICA9
IDB4ODBDQjsKLSAgICBjb25zdCBHTGVudW0gQ09OU1RBTlRfQ09MT1IgICAgICAgICAgICAgICAg
ID0gMHg4MDAxOwotICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IgICAg
ICAgPSAweDgwMDI7Ci0gICAgY29uc3QgR0xlbnVtIENPTlNUQU5UX0FMUEhBICAgICAgICAgICAg
ICAgICA9IDB4ODAwMzsKLSAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5UX0FMUEhB
ICAgICAgID0gMHg4MDA0OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9DT0xPUiAgICAgICAgICAg
ICAgICAgICAgPSAweDgwMDU7Ci0KLSAgICAvKiBCdWZmZXIgT2JqZWN0cyAqLwotICAgIGNvbnN0
IEdMZW51bSBBUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgPSAweDg4OTI7Ci0gICAgY29u
c3QgR0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICA9IDB4ODg5MzsKLSAgICBj
b25zdCBHTGVudW0gQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4ODk0OwotICAg
IGNvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgPSAweDg4OTU7Ci0K
LSAgICBjb25zdCBHTGVudW0gU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAgID0gMHg4OEUw
OwotICAgIGNvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgPSAweDg4
RTQ7Ci0gICAgY29uc3QgR0xlbnVtIERZTkFNSUNfRFJBVyAgICAgICAgICAgICAgICAgICA9IDB4
ODhFODsKLQotICAgIGNvbnN0IEdMZW51bSBCVUZGRVJfU0laRSAgICAgICAgICAgICAgICAgICAg
PSAweDg3NjQ7Ci0gICAgY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAgICAgICAgICAgICAgICAg
ICA9IDB4ODc2NTsKLQotICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1ZFUlRFWF9BVFRSSUIgICAg
ICAgICAgPSAweDg2MjY7Ci0KLSAgICAvKiBDdWxsRmFjZU1vZGUgKi8KLSAgICBjb25zdCBHTGVu
dW0gRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA0OwotICAgIGNvbnN0IEdM
ZW51bSBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA0MDU7Ci0gICAgY29uc3Qg
R0xlbnVtIEZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICA9IDB4MDQwODsKLQotICAgIC8q
IERlcHRoRnVuY3Rpb24gKi8KLSAgICAvKiAgICAgIE5FVkVSICovCi0gICAgLyogICAgICBMRVNT
ICovCi0gICAgLyogICAgICBFUVVBTCAqLwotICAgIC8qICAgICAgTEVRVUFMICovCi0gICAgLyog
ICAgICBHUkVBVEVSICovCi0gICAgLyogICAgICBOT1RFUVVBTCAqLwotICAgIC8qICAgICAgR0VR
VUFMICovCi0gICAgLyogICAgICBBTFdBWVMgKi8KLQotICAgIC8qIEVuYWJsZUNhcCAqLwotICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFXzJEICAgICAgICAgICAgICAgICAgICAgPSAweDBERTE7Ci0g
ICAgY29uc3QgR0xlbnVtIENVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICA9IDB4MEI0NDsK
LSAgICBjb25zdCBHTGVudW0gQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkUy
OwotICAgIGNvbnN0IEdMZW51bSBESVRIRVIgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDBC
RDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfVEVTVCAgICAgICAgICAgICAgICAgICA9IDB4
MEI5MDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfVEVTVCAgICAgICAgICAgICAgICAgICAgID0g
MHgwQjcxOwotICAgIGNvbnN0IEdMZW51bSBTQ0lTU09SX1RFU1QgICAgICAgICAgICAgICAgICAg
PSAweDBDMTE7Ci0gICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX0ZJTEwgICAgICAgICAg
ICA9IDB4ODAzNzsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFICAg
ICAgID0gMHg4MDlFOwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQ09WRVJBR0UgICAgICAgICAg
ICAgICAgPSAweDgwQTA7Ci0KLSAgICAvKiBFcnJvckNvZGUgKi8KLSAgICBjb25zdCBHTGVudW0g
Tk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsKLSAgICBjb25zdCBHTGVudW0gSU5W
QUxJRF9FTlVNICAgICAgICAgICAgICAgICAgID0gMHgwNTAwOwotICAgIGNvbnN0IEdMZW51bSBJ
TlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgPSAweDA1MDE7Ci0gICAgY29uc3QgR0xlbnVt
IElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4MDUwMjsKLSAgICBjb25zdCBHTGVu
dW0gT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgID0gMHgwNTA1OwotCi0gICAgLyogRnJv
bnRGYWNlRGlyZWN0aW9uICovCi0gICAgY29uc3QgR0xlbnVtIENXICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MDkwMDsKLSAgICBjb25zdCBHTGVudW0gQ0NXICAgICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMHgwOTAxOwotCi0gICAgLyogR2V0UE5hbWUgKi8KLSAgICBjb25zdCBH
TGVudW0gTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjIxOwotICAgIGNvbnN0
IEdMZW51bSBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UgICAgICAgPSAweDg0NkQ7Ci0gICAgY29u
c3QgR0xlbnVtIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA9IDB4ODQ2RTsKLSAgICBj
b25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgID0gMHgwQjQ1OwotICAg
IGNvbnN0IEdMZW51bSBGUk9OVF9GQUNFICAgICAgICAgICAgICAgICAgICAgPSAweDBCNDY7Ci0g
ICAgY29uc3QgR0xlbnVtIERFUFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICA9IDB4MEI3MDsK
LSAgICBjb25zdCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0gMHgwQjcy
OwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9DTEVBUl9WQUxVRSAgICAgICAgICAgICAgPSAweDBC
NzM7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAgICA9IDB4
MEI3NDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAgICAgID0g
MHgwQjkxOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZVTkMgICAgICAgICAgICAgICAgICAg
PSAweDBCOTI7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfRkFJTCAgICAgICAgICAgICAgICAg
ICA9IDB4MEI5NDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwgICAg
ICAgID0gMHgwQjk1OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUyAg
ICAgICAgPSAweDBCOTY7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfUkVGICAgICAgICAgICAg
ICAgICAgICA9IDB4MEI5NzsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9WQUxVRV9NQVNLICAg
ICAgICAgICAgID0gMHgwQjkzOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1dSSVRFTUFTSyAg
ICAgICAgICAgICAgPSAweDBCOTg7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19GVU5D
ICAgICAgICAgICAgICA9IDB4ODgwMDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX0ZB
SUwgICAgICAgICAgICAgID0gMHg4ODAxOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tf
UEFTU19ERVBUSF9GQUlMICAgPSAweDg4MDI7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFD
S19QQVNTX0RFUFRIX1BBU1MgICA9IDB4ODgwMzsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9C
QUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lM
X0JBQ0tfVkFMVUVfTUFTSyAgICAgICAgPSAweDhDQTQ7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5D
SUxfQkFDS19XUklURU1BU0sgICAgICAgICA9IDB4OENBNTsKLSAgICBjb25zdCBHTGVudW0gVklF
V1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEyOwotICAgIGNvbnN0IEdMZW51bSBT
Q0lTU09SX0JPWCAgICAgICAgICAgICAgICAgICAgPSAweDBDMTA7Ci0gICAgLyogICAgICBTQ0lT
U09SX1RFU1QgKi8KLSAgICBjb25zdCBHTGVudW0gQ09MT1JfQ0xFQVJfVkFMVUUgICAgICAgICAg
ICAgID0gMHgwQzIyOwotICAgIGNvbnN0IEdMZW51bSBDT0xPUl9XUklURU1BU0sgICAgICAgICAg
ICAgICAgPSAweDBDMjM7Ci0gICAgY29uc3QgR0xlbnVtIFVOUEFDS19BTElHTk1FTlQgICAgICAg
ICAgICAgICA9IDB4MENGNTsKLSAgICBjb25zdCBHTGVudW0gUEFDS19BTElHTk1FTlQgICAgICAg
ICAgICAgICAgID0gMHgwRDA1OwotICAgIGNvbnN0IEdMZW51bSBNQVhfVEVYVFVSRV9TSVpFICAg
ICAgICAgICAgICAgPSAweDBEMzM7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WSUVXUE9SVF9ESU1T
ICAgICAgICAgICAgICA9IDB4MEQzQTsKLSAgICBjb25zdCBHTGVudW0gU1VCUElYRUxfQklUUyAg
ICAgICAgICAgICAgICAgID0gMHgwRDUwOwotICAgIGNvbnN0IEdMZW51bSBSRURfQklUUyAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDBENTI7Ci0gICAgY29uc3QgR0xlbnVtIEdSRUVOX0JJVFMg
ICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MzsKLSAgICBjb25zdCBHTGVudW0gQkxVRV9CSVRT
ICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OwotICAgIGNvbnN0IEdMZW51bSBBTFBIQV9C
SVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTU7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRI
X0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NjsKLSAgICBjb25zdCBHTGVudW0gU1RF
TkNJTF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3OwotICAgIGNvbnN0IEdMZW51bSBQ
T0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgPSAweDJBMDA7Ci0gICAgLyogICAgICBQT0xZ
R09OX09GRlNFVF9GSUxMICovCi0gICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX0ZBQ1RP
UiAgICAgICAgICA9IDB4ODAzODsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9CSU5ESU5HXzJE
ICAgICAgICAgICAgID0gMHg4MDY5OwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQlVGRkVSUyAg
ICAgICAgICAgICAgICAgPSAweDgwQTg7Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRVMgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODBBOTsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0NPVkVS
QUdFX1ZBTFVFICAgICAgICAgID0gMHg4MEFBOwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQ09W
RVJBR0VfSU5WRVJUICAgICAgICAgPSAweDgwQUI7Ci0KLSAgICAvKiBHZXRUZXh0dXJlUGFyYW1l
dGVyICovCi0gICAgLyogICAgICBURVhUVVJFX01BR19GSUxURVIgKi8KLSAgICAvKiAgICAgIFRF
WFRVUkVfTUlOX0ZJTFRFUiAqLwotICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi8KLSAgICAv
KiAgICAgIFRFWFRVUkVfV1JBUF9UICovCi0KLSAgICBjb25zdCBHTGVudW0gQ09NUFJFU1NFRF9U
RVhUVVJFX0ZPUk1BVFMgICAgID0gMHg4NkEzOwotCi0gICAgLyogSGludE1vZGUgKi8KLSAgICBj
b25zdCBHTGVudW0gRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAwOwotICAg
IGNvbnN0IEdMZW51bSBGQVNURVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDE7Ci0g
ICAgY29uc3QgR0xlbnVtIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTEwMjsK
LQotICAgIC8qIEhpbnRUYXJnZXQgKi8KLSAgICBjb25zdCBHTGVudW0gR0VORVJBVEVfTUlQTUFQ
X0hJTlQgICAgICAgICAgICA9IDB4ODE5MjsKLQotICAgIC8qIERhdGFUeXBlICovCi0gICAgY29u
c3QgR0xlbnVtIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwMDsKLSAgICBj
b25zdCBHTGVudW0gVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgID0gMHgxNDAxOwotICAg
IGNvbnN0IEdMZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDI7Ci0g
ICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICA9IDB4MTQwMzsK
LSAgICBjb25zdCBHTGVudW0gSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDA0
OwotICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgPSAweDE0
MDU7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MTQwNjsKLQotICAgIC8qIFBpeGVsRm9ybWF0ICovCi0gICAgY29uc3QgR0xlbnVtIERFUFRIX0NP
TVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsKLSAgICBjb25zdCBHTGVudW0gQUxQSEEg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA2OwotICAgIGNvbnN0IEdMZW51bSBSR0Ig
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDc7Ci0gICAgY29uc3QgR0xlbnVtIFJH
QkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKLSAgICBjb25zdCBHTGVudW0g
TFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA5OwotICAgIGNvbnN0IEdMZW51
bSBMVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgPSAweDE5MEE7Ci0KLSAgICAvKiBQaXhl
bFR5cGUgKi8KLSAgICAvKiAgICAgIFVOU0lHTkVEX0JZVEUgKi8KLSAgICBjb25zdCBHTGVudW0g
VU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgID0gMHg4MDMzOwotICAgIGNvbnN0IEdMZW51
bSBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7Ci0gICAgY29uc3QgR0xl
bnVtIFVOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICA9IDB4ODM2MzsKLQotICAgIC8qIFNo
YWRlcnMgKi8KLSAgICBjb25zdCBHTGVudW0gRlJBR01FTlRfU0hBREVSICAgICAgICAgICAgICAg
ICAgPSAweDhCMzA7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9TSEFERVIgICAgICAgICAgICAg
ICAgICAgID0gMHg4QjMxOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVkVSVEVYX0FUVFJJQlMgICAg
ICAgICAgICAgICA9IDB4ODg2OTsKLSAgICBjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9VTklGT1JN
X1ZFQ1RPUlMgICAgICAgPSAweDhERkI7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WQVJZSU5HX1ZF
Q1RPUlMgICAgICAgICAgICAgID0gMHg4REZDOwotICAgIGNvbnN0IEdMZW51bSBNQVhfQ09NQklO
RURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0RDsKLSAgICBjb25zdCBHTGVudW0gTUFYX1ZF
UlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7Ci0gICAgY29uc3QgR0xlbnVtIE1B
WF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgID0gMHg4ODcyOwotICAgIGNvbnN0IEdMZW51
bSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA9IDB4OERGRDsKLSAgICBjb25zdCBH
TGVudW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNEY7Ci0gICAgY29u
c3QgR0xlbnVtIERFTEVURV9TVEFUVVMgICAgICAgICAgICAgICAgICAgID0gMHg4QjgwOwotICAg
IGNvbnN0IEdMZW51bSBMSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI4MjsK
LSAgICBjb25zdCBHTGVudW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgPSAweDhC
ODM7Ci0gICAgY29uc3QgR0xlbnVtIEFUVEFDSEVEX1NIQURFUlMgICAgICAgICAgICAgICAgID0g
MHg4Qjg1OwotICAgIGNvbnN0IEdMZW51bSBBQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAgICAg
ICA9IDB4OEI4NjsKLSAgICBjb25zdCBHTGVudW0gQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAg
ICAgICAgPSAweDhCODk7Ci0gICAgY29uc3QgR0xlbnVtIFNIQURJTkdfTEFOR1VBR0VfVkVSU0lP
TiAgICAgICAgID0gMHg4QjhDOwotICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1BST0dSQU0gICAg
ICAgICAgICAgICAgICA9IDB4OEI4RDsKLQotICAgIC8qIFN0ZW5jaWxGdW5jdGlvbiAqLwotICAg
IGNvbnN0IEdMZW51bSBORVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDA7Ci0g
ICAgY29uc3QgR0xlbnVtIExFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMTsK
LSAgICBjb25zdCBHTGVudW0gRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAy
OwotICAgIGNvbnN0IEdMZW51bSBMRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAy
MDM7Ci0gICAgY29uc3QgR0xlbnVtIEdSRUFURVIgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MDIwNDsKLSAgICBjb25zdCBHTGVudW0gTk9URVFVQUwgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwMjA1OwotICAgIGNvbnN0IEdMZW51bSBHRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDAyMDY7Ci0gICAgY29uc3QgR0xlbnVtIEFMV0FZUyAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDIwNzsKLQotICAgIC8qIFN0ZW5jaWxPcCAqLwotICAgIC8qICAgICAgWkVSTyAqLwot
ICAgIGNvbnN0IEdMZW51bSBLRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDA7
Ci0gICAgY29uc3QgR0xlbnVtIFJFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUUw
MTsKLSAgICBjb25zdCBHTGVudW0gSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgx
RTAyOwotICAgIGNvbnN0IEdMZW51bSBERUNSICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDFFMDM7Ci0gICAgY29uc3QgR0xlbnVtIElOVkVSVCAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MTUwQTsKLSAgICBjb25zdCBHTGVudW0gSU5DUl9XUkFQICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NTA3OwotICAgIGNvbnN0IEdMZW51bSBERUNSX1dSQVAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg1MDg7Ci0KLSAgICAvKiBTdHJpbmdOYW1lICovCi0gICAgY29uc3QgR0xlbnVtIFZF
TkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMDsKLSAgICBjb25zdCBHTGVudW0g
UkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAxOwotICAgIGNvbnN0IEdMZW51
bSBWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDI7Ci0KLSAgICAvKiBUZXh0
dXJlTWFnRmlsdGVyICovCi0gICAgY29uc3QgR0xlbnVtIE5FQVJFU1QgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MjYwMDsKLSAgICBjb25zdCBHTGVudW0gTElORUFSICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHgyNjAxOwotCi0gICAgLyogVGV4dHVyZU1pbkZpbHRlciAqLwotICAgIC8q
ICAgICAgTkVBUkVTVCAqLwotICAgIC8qICAgICAgTElORUFSICovCi0gICAgY29uc3QgR0xlbnVt
IE5FQVJFU1RfTUlQTUFQX05FQVJFU1QgICAgICAgICA9IDB4MjcwMDsKLSAgICBjb25zdCBHTGVu
dW0gTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgID0gMHgyNzAxOwotICAgIGNvbnN0IEdM
ZW51bSBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgPSAweDI3MDI7Ci0gICAgY29uc3Qg
R0xlbnVtIExJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAgICA9IDB4MjcwMzsKLQotICAgIC8q
IFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCi0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfTUFHX0ZJ
TFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9NSU5f
RklMVEVSICAgICAgICAgICAgID0gMHgyODAxOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX1dS
QVBfUyAgICAgICAgICAgICAgICAgPSAweDI4MDI7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVf
V1JBUF9UICAgICAgICAgICAgICAgICA9IDB4MjgwMzsKLQotICAgIC8qIFRleHR1cmVUYXJnZXQg
Ki8KLSAgICAvKiAgICAgIFRFWFRVUkVfMkQgKi8KLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRSAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxNzAyOwotCi0gICAgY29uc3QgR0xlbnVtIFRFWFRV
UkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA9IDB4ODUxMzsKLSAgICBjb25zdCBHTGVudW0gVEVY
VFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgID0gMHg4NTE0OwotICAgIGNvbnN0IEdMZW51bSBU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1MTU7Ci0gICAgY29uc3QgR0xlbnVt
IFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA9IDB4ODUxNjsKLSAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgID0gMHg4NTE3OwotICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAgPSAweDg1MTg7Ci0gICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA9IDB4ODUxOTsKLSAgICBjb25z
dCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgID0gMHg4NTFBOwotICAgIGNv
bnN0IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAgPSAweDg1MUM7Ci0KLSAg
ICAvKiBUZXh0dXJlVW5pdCAqLwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMCAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg0QzA7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODRDMTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIgICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NEMyOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMyAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0QzM7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkU0ICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTUg
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM1OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJF
NiAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzY7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRV
UkU3ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNzsKLSAgICBjb25zdCBHTGVudW0gVEVY
VFVSRTggICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM4OwotICAgIGNvbnN0IEdMZW51bSBU
RVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzk7Ci0gICAgY29uc3QgR0xlbnVt
IFRFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQTsKLSAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENCOwotICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0M7Ci0gICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRDsKLSAgICBjb25z
dCBHTGVudW0gVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENFOwotICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0Y7Ci0gICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREMDsKLSAg
ICBjb25zdCBHTGVudW0gVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQxOwot
ICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDI7
Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRE
MzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEQ0OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjEgICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0RDU7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMiAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODRENjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIzICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEQ3OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjQgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0RDg7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNSAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODREOTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI2ICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NERBOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjcgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0REI7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyOCAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODREQzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI5ICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NEREOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMzAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0REU7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUzMSAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODRERjsKLSAgICBjb25zdCBHTGVudW0gQUNUSVZFX1RFWFRV
UkUgICAgICAgICAgICAgICAgID0gMHg4NEUwOwotCi0gICAgLyogVGV4dHVyZVdyYXBNb2RlICov
Ci0gICAgY29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4Mjkw
MTsKLSAgICBjb25zdCBHTGVudW0gQ0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAgID0gMHg4
MTJGOwotICAgIGNvbnN0IEdMZW51bSBNSVJST1JFRF9SRVBFQVQgICAgICAgICAgICAgICAgPSAw
eDgzNzA7Ci0KLSAgICAvKiBVbmlmb3JtIFR5cGVzICovCi0gICAgY29uc3QgR0xlbnVtIEZMT0FU
X1ZFQzIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MDsKLSAgICBjb25zdCBHTGVudW0gRkxP
QVRfVkVDMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUxOwotICAgIGNvbnN0IEdMZW51bSBG
TE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTI7Ci0gICAgY29uc3QgR0xlbnVt
IElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MzsKLSAgICBjb25zdCBHTGVu
dW0gSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU0OwotICAgIGNvbnN0IEdM
ZW51bSBJTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTU7Ci0gICAgY29uc3Qg
R0xlbnVtIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NjsKLSAgICBjb25z
dCBHTGVudW0gQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU3OwotICAgIGNv
bnN0IEdMZW51bSBCT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTg7Ci0gICAg
Y29uc3QgR0xlbnVtIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1OTsKLSAg
ICBjb25zdCBHTGVudW0gRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVBOwot
ICAgIGNvbnN0IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUI7
Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1
QzsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAgID0gMHg4
QjVFOwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAgICAgPSAw
eDhCNjA7Ci0KLSAgICAvKiBWZXJ0ZXggQXJyYXlzICovCi0gICAgY29uc3QgR0xlbnVtIFZFUlRF
WF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgPSAweDg2MjI7Ci0gICAgY29uc3QgR0xlbnVt
IFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAgPSAweDg2MjM7Ci0gICAgY29uc3Qg
R0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAgICAgPSAweDg2MjQ7Ci0gICAg
Y29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAgICAgPSAweDg2MjU7
Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCAgICAgPSAw
eDg4NkE7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRFUiAgICAg
ICAgPSAweDg2NDU7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVS
X0JJTkRJTkcgPSAweDg4OUY7Ci0KLSAgICAvKiBTaGFkZXIgU291cmNlICovCi0gICAgY29uc3Qg
R0xlbnVtIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA9IDB4OEI4MTsKLQotICAgIC8q
IFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovCi0gICAgY29uc3QgR0xlbnVtIExP
V19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMDsKLSAgICBjb25zdCBHTGVudW0g
TUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgID0gMHg4REYxOwotICAgIGNvbnN0IEdMZW51
bSBISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgPSAweDhERjI7Ci0gICAgY29uc3QgR0xl
bnVtIExPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMzsKLSAgICBjb25zdCBH
TGVudW0gTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgID0gMHg4REY0OwotICAgIGNvbnN0
IEdMZW51bSBISUdIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhERjU7Ci0KLSAgICAv
KiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCi0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSICAg
ICAgICAgICAgICAgICAgICA9IDB4OEQ0MDsKLSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVS
ICAgICAgICAgICAgICAgICAgID0gMHg4RDQxOwotCi0gICAgY29uc3QgR0xlbnVtIFJHQkE0ICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKLSAgICBjb25zdCBHTGVudW0gUkdCNV9B
MSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDU3OwotICAgIGNvbnN0IEdMZW51bSBSR0I1
NjUgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhENjI7Ci0gICAgY29uc3QgR0xlbnVtIERF
UFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9IDB4ODFBNTsKLSAgICBjb25zdCBHTGVudW0g
U1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAgID0gMHgxOTAxOwotICAgIGNvbnN0IEdMZW51
bSBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgPSAweDhENDg7Ci0gICAgY29uc3QgR0xl
bnVtIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA9IDB4ODRGOTsKLQotICAgIGNvbnN0
IEdMZW51bSBSRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAgICAgPSAweDhENDI7Ci0gICAgY29u
c3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9IRUlHSFQgICAgICAgICAgICA9IDB4OEQ0MzsKLSAgICBj
b25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAgID0gMHg4RDQ0OwotICAg
IGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfUkVEX1NJWkUgICAgICAgICAgPSAweDhENTA7Ci0g
ICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFICAgICAgICA9IDB4OEQ1MTsK
LSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JMVUVfU0laRSAgICAgICAgID0gMHg4RDUy
OwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSAgICAgICAgPSAweDhE
NTM7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFICAgICAgICA9IDB4
OEQ1NDsKLSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAgICAgID0g
MHg4RDU1OwotCi0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNU
X1RZUEUgICAgICAgICAgID0gMHg4Q0QwOwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA9IDB4OENEMTsKLSAgICBjb25zdCBHTGVu
dW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAgICAgICAgPSAweDhDRDI7
Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJFX01B
UF9GQUNFID0gMHg4Q0QzOwotCi0gICAgY29uc3QgR0xlbnVtIENPTE9SX0FUVEFDSE1FTlQwICAg
ICAgICAgICAgICA9IDB4OENFMDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfQVRUQUNITUVOVCAg
ICAgICAgICAgICAgID0gMHg4RDAwOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0FUVEFDSE1F
TlQgICAgICAgICAgICAgPSAweDhEMjA7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX1NURU5DSUxf
QVRUQUNITUVOVCAgICAgICA9IDB4ODIxQTsKLQotICAgIGNvbnN0IEdMZW51bSBOT05FICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAwOwotCi0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVS
X0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgID0gMHg4Q0Q1OwotICAgIGNvbnN0IEdMZW51
bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgICAgICAgICA9IDB4OENENjsKLSAg
ICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQg
PSAweDhDRDc7Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfRElNRU5T
SU9OUyAgICAgICAgID0gMHg4Q0Q5OwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9VTlNV
UFBPUlRFRCAgICAgICAgICAgICAgICAgICA9IDB4OENERDsKLQotICAgIGNvbnN0IEdMZW51bSBG
UkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAweDhDQTY7Ci0gICAgY29uc3QgR0xlbnVt
IFJFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4OENBNzsKLSAgICBjb25zdCBHTGVu
dW0gTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgID0gMHg4NEU4OwotCi0gICAgY29uc3Qg
R0xlbnVtIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA9IDB4MDUwNjsKLQotICAgIC8q
IFdlYkdMLXNwZWNpZmljIGVudW1zICovCi0gICAgY29uc3QgR0xlbnVtIFVOUEFDS19GTElQX1lf
V0VCR0wgICAgICAgICAgICAgICAgPSAweDkyNDA7Ci0gICAgY29uc3QgR0xlbnVtIFVOUEFDS19Q
UkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAgICAgPSAweDkyNDE7Ci0gICAgY29uc3QgR0xlbnVtIENP
TlRFWFRfTE9TVF9XRUJHTCAgICAgICAgICAgICAgICAgPSAweDkyNDI7Ci0gICAgY29uc3QgR0xl
bnVtIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wgPSAweDkyNDM7Ci0gICAgY29u
c3QgR0xlbnVtIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICAgICAgPSAweDkyNDQ7Ci0K
LSAgICByZWFkb25seSBhdHRyaWJ1dGUgR0xzaXplaSBkcmF3aW5nQnVmZmVyV2lkdGg7Ci0gICAg
cmVhZG9ubHkgYXR0cmlidXRlIEdMc2l6ZWkgZHJhd2luZ0J1ZmZlckhlaWdodDsKLQotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGFjdGl2ZVRl
eHR1cmUoR0xlbnVtIHRleHR1cmUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwg
V2ViR0xTaGFkZXIgc2hhZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtIHByb2dy
YW0sIEdMdWludCBpbmRleCwgRE9NU3RyaW5nIG5hbWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRCdWZmZXIoR0xlbnVtIHRhcmdl
dCwgV2ViR0xCdWZmZXIgYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdldCwgV2Vi
R0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZFJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0
LCBXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRUZXh0dXJlKEdMZW51bSB0YXJn
ZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgYmxlbmRDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1w
ZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIGJsZW5kRXF1YXRpb24oR0xlbnVtIG1vZGUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVSR0IsIEdM
ZW51bSBtb2RlQWxwaGEpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBi
bGVuZEZ1bmMoR0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFjdG9yKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRGdW5jU2VwYXJhdGUoR0xlbnVtIHNyY1JHQiwg
R0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVudW0gZHN0QWxwaGEpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlckRh
dGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXI/IGRhdGEsIEdMZW51bSB1c2FnZSk7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVy
RGF0YShHTGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXc/IGRhdGEsIEdMZW51bSB1c2FnZSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
YnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1c2FnZSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
YnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEFycmF5QnVmZmVy
PyBkYXRhKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICBidWZmZXJTdWJEYXRhKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgQXJy
YXlCdWZmZXJWaWV3PyBkYXRhKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMZW51bSAg
ICAgICBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMZW51bSB0YXJnZXQpOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJpdGZpZWxkIG1hc2spOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhckNvbG9yKEdMY2xhbXBmIHJlZCwg
R0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXJEZXB0aChHTGNsYW1wZiBkZXB0aCk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyU3RlbmNpbChHTGlu
dCBzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29sb3JNYXNrKEdM
Ym9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUsIEdMYm9vbGVhbiBh
bHBoYSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciBzaGFkZXIpOwotCi0gICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyBkYXRhKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29tcHJlc3NlZFRleFN1YkltYWdl
MkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBB
cnJheUJ1ZmZlclZpZXcgZGF0YSk7Ci0gICAgCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIGNvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICBjb3B5VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xCdWZm
ZXIgY3JlYXRlQnVmZmVyKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xGcmFtZWJ1
ZmZlciBjcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdM
UHJvZ3JhbSBjcmVhdGVQcm9ncmFtKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xS
ZW5kZXJidWZmZXIgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTFNoYWRlciBjcmVhdGVTaGFkZXIoR0xlbnVtIHR5cGUp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMVGV4dHVyZSBjcmVhdGVUZXh0dXJlKCk7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY3VsbEZhY2UoR0xlbnVt
IG1vZGUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZUJ1
ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICBkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVmZmVyKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlUHJvZ3JhbShXZWJH
TFByb2dyYW0gcHJvZ3JhbSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IGRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVTaGFkZXIoV2ViR0xTaGFk
ZXIgc2hhZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRl
VGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgZGVwdGhGdW5jKEdMZW51bSBmdW5jKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhNYXNrKEdMYm9vbGVhbiBmbGFnKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhSYW5nZShHTGNsYW1wZiB6TmVhciwg
R0xjbGFtcGYgekZhcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBXZWJHTFNo
YWRlciBzaGFkZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkaXNh
YmxlKEdMZW51bSBjYXApOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCAgICAgICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRy
YXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBkcmF3RWxl
bWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBHTGludHB0ciBv
ZmZzZXQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGVuYWJsZShH
TGVudW0gY2FwKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgICAgICAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBmaW5pc2goKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmx1c2goKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihH
TGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdl
dCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFtZWJ1ZmZlclRleHR1cmUyRChH
TGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwgV2ViR0xU
ZXh0dXJlIHRleHR1cmUsIEdMaW50IGxldmVsKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51bSBtb2RlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgZ2VuZXJhdGVNaXBtYXAoR0xlbnVtIHRhcmdldCk7Ci0gICAgCi0g
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2ZUluZm8g
Z2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xBY3RpdmVJbmZvIGdl
dEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMdWludCBpbmRleCk7Ci0KLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCBnZXRB
dHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtIHByb2dyYW0pOwotCi0gICAgW1N0cmljdFR5cGVD
aGVja2luZ10gR0xpbnQgICAgICAgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9n
cmFtLCBET01TdHJpbmcgbmFtZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21d
IGFueSBnZXRCdWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lKTsKLQot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgZ2V0Q29udGV4
dEF0dHJpYnV0ZXMoKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMZW51bSBnZXRFcnJv
cigpOwotCi0gICAgLy8gb2JqZWN0IGdldEV4dGVuc2lvbihET01TdHJpbmcgbmFtZSk7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSBhbnkgZ2V0RXh0ZW5zaW9uKERPTVN0cmluZyBu
YW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9u
XSBhbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UGFyYW1ldGVyKEdMZW51bSBwbmFtZSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBn
ZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTGVudW0gcG5hbWUpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwg
UmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFt
IHByb2dyYW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0
aW9uXSBhbnkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBw
bmFtZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25d
IGFueSBnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIgc2hhZGVyLCBHTGVudW0gcG5hbWUp
OwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1O
dWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJJbmZvTG9nKFdlYkdM
U2hhZGVyIHNoYWRlcik7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0IGdldFNoYWRlclByZWNpc2lvbkZvcm1hdChH
TGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUpOwotCi0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNFeGNlcHRp
b25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIgc2hhZGVyKTsKLQot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gc2VxdWVuY2U8RE9NU3RyaW5nPiBnZXRT
dXBwb3J0ZWRFeHRlbnNpb25zKCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20s
IFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFRleFBhcmFtZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNl
cHRpb25dIGFueSBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiBsb2NhdGlvbik7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dy
YW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywg
Q3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4
LCBHTGVudW0gcG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xzaXplaXB0ciBn
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpOwotCi0gICAg
W1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhpbnQoR0xlbnVtIHRhcmdldCwgR0xl
bnVtIG1vZGUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc0J1ZmZl
cihXZWJHTEJ1ZmZlciBidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVh
biAgICBpc0NvbnRleHRMb3N0KCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFu
ICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJv
b2xlYW4gICAgaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVmZmVyKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNQcm9ncmFtKFdlYkdMUHJvZ3Jh
bSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNSZW5k
ZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNUZXh0dXJlKFdlYkdMVGV4dHVy
ZSB0ZXh0dXJlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgbGluZVdp
ZHRoKEdMZmxvYXQgd2lkdGgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIGxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcGl4ZWxTdG9yZWkoR0xlbnVtIHBu
YW1lLCBHTGludCBwYXJhbSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IHBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpOwotCi0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgcmVhZFBpeGVs
cyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyBwaXhlbHMpOwotICAgIAotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZWxlYXNlU2hhZGVyQ29tcGlsZXIo
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcmVuZGVyYnVmZmVyU3Rv
cmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
c2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lzc29yKEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIg
c2hhZGVyLCBET01TdHJpbmcgc3RyaW5nKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgc3RlbmNpbEZ1bmMoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2sp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsRnVuY1NlcGFy
YXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNrKEdMdWludCBt
YXNrKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE1hc2tT
ZXBhcmF0ZShHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBzdGVuY2lsT3AoR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xl
bnVtIHpwYXNzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNp
bE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWwsIEdMZW51
bSB6cGFzcyk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdGV4UGFy
YW1ldGVyZihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0pOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0ZXhQYXJhbWV0ZXJpKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwotCi0gICAgLy8gU3VwcG9ydGVkIGZv
cm1zOgotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldz8gcGl4ZWxzKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50
IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxD
YW52YXNFbGVtZW50PyBjYW52YXMpOwotI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFC
TEVfVklERU8KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQ/IHZpZGVv
KTsKLSNlbmRpZgotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXc/IHBpeGVscyk7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1h
Z2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSW1hZ2VEYXRhPyBwaXhlbHMpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1Yklt
YWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0
ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudD8g
Y2FudmFzKTsKLSNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVPCi0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3Vi
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudD8gdmlkZW8p
OwotI2VuZGlmCi0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgdW5pZm9ybTFmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVu
aWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFp
KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGludCB4KTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWl2KFdlYkdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmYoV2ViR0xVbmlmb3JtTG9j
YXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmZ2KFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yaShXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJpdihXZWJHTFVuaWZvcm1M
b2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxv
Y2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2Z2KFdlYkdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zaShXZWJHTFVuaWZvcm1M
b2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNpdihX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRmKFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZs
b2F0IHcpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkIHVuaWZvcm00ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJB
cnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
dW5pZm9ybTRpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5
LCBHTGludCB6LCBHTGludCB3KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGl2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0
aW9uLCBJbnQzMkFycmF5IHYpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihXZWJHTFVuaWZvcm1Mb2NhdGlv
biBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlm
b3JtTWF0cml4M2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJh
bnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1
c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoV2ViR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSBhcnJh
eSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAg
ICAgICB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB2YWxpZGF0ZVByb2dyYW0oV2Vi
R0xQcm9ncmFtIHByb2dyYW0pOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIHZlcnRleEF0dHJpYjFmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgpOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGluZHgsIEZs
b2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAg
ICB2ZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0x1aW50
IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0
IHksIEdMZmxvYXQgeik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSB2b2lkIHZl
cnRleEF0dHJpYjNmdihHTHVpbnQgaW5keCwgRmxvYXQzMkFycmF5IHZhbHVlcyk7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjRmKEdMdWludCBpbmR4
LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50IGluZHgs
IEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYlBvaW50ZXIoR0x1aW50IGluZHgsIEdM
aW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBz
dHJpZGUsIEdMaW50cHRyIG9mZnNldCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgdmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOworXSBpbnRlcmZhY2UgV2ViR0wxUmVuZGVyaW5nQ29udGV4dCA6IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UgewogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJH
TCkKKyNpbmNsdWRlICJXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dChI
VE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRyaWJ1dGVzKQorICAgIDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShwYXNzZWRD
YW52YXMsIGF0dHJpYnV0ZXMpCit7CisgICAgbV90eXBlID0gIndlYmdsMiI7Cit9CisKK1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1l
bnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwK
KyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKSA6IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UocGFzc2VkQ2FudmFzLCBjb250ZXh0LCBhdHRyaWJ1dGVzKQorewor
ICAgIG1fdHlwZSA9ICJ3ZWJnbDIiOworfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmbmRlZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0X2gKKyNkZWZpbmUgV2ViR0wy
UmVuZGVyaW5nQ29udGV4dF9oCisKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dCBmaW5hbCA6IHB1YmxpYyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIHsKK3B1YmxpYzoKKyAg
ICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkF0dHJpYnV0ZXMpOworICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZh
c0VsZW1lbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkF0dHJpYnV0ZXMpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
aWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRl
cmluZ0NvbnRleHQuaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK1sKKyAg
ICBDb25kaXRpb25hbD1XRUJHTCwKKyAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKKyAgICBEb05v
dENoZWNrQ29uc3RhbnRzLAorXSBpbnRlcmZhY2UgV2ViR0wyUmVuZGVyaW5nQ29udGV4dCA6IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgeworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTYg
KzMwLDE2IEBACiAjaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIKIAogI2luY2x1ZGUgIldlYkdMQ29u
dGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LVBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IFdlYkdMQnVmZmVyOjpjcmVhdGUoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjdHgpCitQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTEJ1ZmZlcjo6Y3Jl
YXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFdlYkdMQnVmZmVyKGN0eCkpOwogfQogCi1XZWJHTEJ1ZmZlcjo6V2ViR0xCdWZmZXIo
V2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitXZWJHTEJ1ZmZlcjo6V2ViR0xCdWZmZXIoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4
KQogICAgICwgbV90YXJnZXQoMCkKICAgICAsIG1fYnl0ZUxlbmd0aCgwKQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCShyZXZpc2lvbiAxNzY5OTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIGNsYXNzIFdlYkdMQnVmZmVyIGZpbmFsIDogcHVibGljIFdlYkdMU2gK
IHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTEJ1ZmZlcigpOwogCi0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8V2ViR0xCdWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UqKTsKIAogICAgIGJvb2wgYXNzb2NpYXRlQnVmZmVyRGF0YShHQzNEc2l6ZWlwdHIgc2l6
ZSk7CiAgICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJEYXRhKEpTQzo6QXJyYXlCdWZmZXIqKTsKQEAg
LTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXZlckJlZW5Cb3VuZCgpIGNvbnN0
IHsgcmV0dXJuIG9iamVjdCgpICYmIG1fdGFyZ2V0OyB9CiAKIHByb3RlY3RlZDoKLSAgICBXZWJH
TEJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBXZWJHTEJ1ZmZlcihXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0SW1w
bChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDLmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVRDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OldlYkdMQ29tcHJlc3NlZFRl
eHR1cmVBVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdM
RXh0ZW5zaW9uKGNvbnRleHQpCiB7CiAgICAgY29udGV4dC0+YWRkQ29tcHJlc3NlZFRleHR1cmVG
b3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JfQU1EKTsKQEAgLTUwLDcgKzUw
LDcgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgV2ViR0xDb21wcgogICAgIHJldHVy
biBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDTmFtZTsKIH0KIAotYm9vbCBXZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQor
Ym9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSogY29udGV4dCkKIHsKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBj
b250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCk7CiAgICAgcmV0dXJu
IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVyZSIpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMuaAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NCwxMCArMzQsMTAgQEAgY2xhc3MgV2ViR0xUZXh0dXJlOwogCiBjbGFzcyBXZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOworICAgIGV4cGxpY2l0IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMoV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMo
KTsKIAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsK
KyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwog
CiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKIH07
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
UFZSVEMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAogI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRl
eHR1cmVQVlJUQy5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJU
Qzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4
dGVuc2lvbihjb250ZXh0KQogewogICAgIGNvbnRleHQtPmFkZENvbXByZXNzZWRUZXh0dXJlRm9y
bWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyk7CkBAIC01
Miw3ICs1Miw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIFdlYkdMQ29tcHIKICAg
ICByZXR1cm4gV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDTmFtZTsKIH0KIAotYm9vbCBXZWJH
TENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQq
IGNvbnRleHQpCitib29sIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7CiAgICAgRXh0ZW5zaW9uczNEKiBl
eHRlbnNpb25zID0gY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygp
OwogICAgIHJldHVybiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfSU1HX3RleHR1cmVfY29tcHJl
c3Npb25fcHZydGMiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVQVlJUQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oCShyZXZpc2lvbiAxNzY5OTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDIGZpbmFsIDogcHVibGljIFdlYkdM
RXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTENvbXByZXNzZWRUZXh0dXJl
UFZSVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xDb21wcmVz
c2VkVGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFs
IH5XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMoKTsKIAotICAgIHN0YXRpYyBib29sIHN1cHBv
cnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBn
ZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuY3BwCShy
ZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAog
I2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCiAKICNpbmNsdWRlICJFeHRl
bnNpb25zM0QuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RD
OjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBj
b250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKICAgICBjb250ZXh0LT5h
ZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1Mz
VENfRFhUMV9FWFQpOwpAQCAtNTIsNyArNTIsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9u
TmFtZSBXZWJHTENvbXByCiAgICAgcmV0dXJuIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDTmFt
ZTsKIH0KIAotYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK2Jvb2wgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMz
VEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogewogICAg
IEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCkt
PmdldEV4dGVuc2lvbnMoKTsKICAgICByZXR1cm4gZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VY
VF90ZXh0dXJlX2NvbXByZXNzaW9uX3MzdGMiKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oCShyZXZpc2lv
biAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRU
ZXh0dXJlUzNUQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAgY2xhc3MgV2Vi
R0xUZXh0dXJlOwogCiBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyBmaW5hbCA6IHB1
YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xDb21wcmVz
c2VkVGV4dHVyZVMzVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVMzVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAg
IHZpcnR1YWwgfldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKCk7CiAKLSAgICBzdGF0aWMgYm9v
bCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgc3Vw
cG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5z
aW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcAkocmV2aXNpb24gMTc2
OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0
R3JvdXAuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oIgogI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTUzLDE2ICs1MywxNiBAQCBXZWJHTENvbnRleHRHcm91cDo6fldlYkdMQ29udGV4dEdy
b3VwKCkKIEdyYXBoaWNzQ29udGV4dDNEKiBXZWJHTENvbnRleHRHcm91cDo6Z2V0QUdyYXBoaWNz
Q29udGV4dDNEKCkKIHsKICAgICBBU1NFUlQoIW1fY29udGV4dHMuaXNFbXB0eSgpKTsKLSAgICBI
YXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+OjppdGVyYXRvciBpdCA9IG1fY29udGV4dHMu
YmVnaW4oKTsKKyAgICBIYXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqPjo6aXRlcmF0
b3IgaXQgPSBtX2NvbnRleHRzLmJlZ2luKCk7CiAgICAgcmV0dXJuICgqaXQpLT5ncmFwaGljc0Nv
bnRleHQzRCgpOwogfQogCi12b2lkIFdlYkdMQ29udGV4dEdyb3VwOjphZGRDb250ZXh0KFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6OmFkZENv
bnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKIHsKICAgICBtX2NvbnRl
eHRzLmFkZChjb250ZXh0KTsKIH0KIAotdm9pZCBXZWJHTENvbnRleHRHcm91cDo6cmVtb3ZlQ29u
dGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit2b2lkIFdlYkdMQ29udGV4dEdy
b3VwOjpyZW1vdmVDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7
CiAgICAgLy8gV2UgbXVzdCBjYWxsIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMgYmVmb3JlIHJl
bW92aW5nIHRoZSBsYXN0IGNvbnRleHQuCiAgICAgaWYgKG1fY29udGV4dHMuc2l6ZSgpID09IDEg
JiYgbV9jb250ZXh0cy5jb250YWlucyhjb250ZXh0KSkKQEAgLTg5LDkgKzg5LDkgQEAgdm9pZCBX
ZWJHTENvbnRleHRHcm91cDo6ZGV0YWNoQW5kUmVtb3ZlQQogICAgIH0KIH0KIAotdm9pZCBXZWJH
TENvbnRleHRHcm91cDo6bG9zZUNvbnRleHRHcm91cChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Okxv
c3RDb250ZXh0TW9kZSBtb2RlKQordm9pZCBXZWJHTENvbnRleHRHcm91cDo6bG9zZUNvbnRleHRH
cm91cChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMb3N0Q29udGV4dE1vZGUgbW9kZSkKIHsK
LSAgICBmb3IgKEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj46Oml0ZXJhdG9yIGl0ID0g
bV9jb250ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVuZCgpOyArK2l0KQorICAgIGZv
ciAoSGFzaFNldDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj46Oml0ZXJhdG9yIGl0ID0gbV9j
b250ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVuZCgpOyArK2l0KQogICAgICAgICAo
Kml0KS0+bG9zZUNvbnRleHRJbXBsKG1vZGUpOwogCiAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2Jq
ZWN0cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3Jv
dXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRl
eHRHcm91cC5oCShyZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTENvbnRleHRHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAj
aWZuZGVmIFdlYkdMQ29udGV4dEdyb3VwX2gKICNkZWZpbmUgV2ViR0xDb250ZXh0R3JvdXBfaAog
Ci0jaW5jbHVkZSA8V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8
d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtMzYsNyAr
MzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNs
YXNzIFdlYkdMRXh0ZW5zaW9uOwogY2xhc3MgV2ViR0xTaGFyZWRPYmplY3Q7Ci1jbGFzcyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOwogCiB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC00NSwxNSArNDUsMTUgQEAgcHVibGljOgog
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBjcmVhdGUoKTsKICAgICB+
V2ViR0xDb250ZXh0R3JvdXAoKTsKIAotICAgIHZvaWQgYWRkQ29udGV4dChXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0
Kik7CisgICAgdm9pZCBhZGRDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAg
ICB2b2lkIHJlbW92ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAg
dm9pZCBhZGRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKICAgICB2b2lkIHJlbW92ZU9iamVj
dChXZWJHTFNoYXJlZE9iamVjdCopOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFw
aGljc0NvbnRleHQzRCgpOwogCi0gICAgdm9pZCBsb3NlQ29udGV4dEdyb3VwKFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlKTsKKyAgICB2b2lkIGxvc2VDb250ZXh0R3JvdXAo
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TG9zdENvbnRleHRNb2RlKTsKIAogICBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBXZWJHTE9iamVjdDsKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGlj
OgogCiAgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CiAKLSAgICBIYXNoU2V0
PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+IG1fY29udGV4dHM7CisgICAgSGFzaFNldDxXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKj4gbV9jb250ZXh0czsKICAgICBIYXNoU2V0PFdlYkdMU2hhcmVk
T2JqZWN0Kj4gbV9ncm91cE9iamVjdHM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAJKHJldmlzaW9uIDE3Njk5NCkK
KysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMSBAQAogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0
T2JqZWN0LmgiCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
V2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBjb250ZXh0KQorV2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmplY3QoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMT2JqZWN0KGNvbnRl
eHQpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oCShyZXZpc2lvbiAxNzY5OTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIC8vIFdlYkdMQ29udGV4dE9iamVjdCB0aGUgYmFz
ZSBjbGFzcyBmb3Igb2JqZWN0cyB0aGF0IGFyZSBvd25lZCBieSBhIHNwZWNpZmljCiAvLyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQuCkBAIC0zOSw5ICszOSw5IEBAIGNsYXNzIFdlYkdMQ29udGV4dE9i
amVjdCA6IHB1YmxpYyBXZWJHTE8KIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTENvbnRleHRP
YmplY3QoKTsKIAotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dDsgfQorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRl
eHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAotICAgIHZpcnR1YWwgYm9vbCB2YWxp
ZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCosIGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGUoY29u
c3QgV2ViR0xDb250ZXh0R3JvdXAqLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBj
b250ZXh0KSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbnRleHQgPT0g
bV9jb250ZXh0OwogICAgIH0KQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZvaWQgZGV0
YWNoQ29udGV4dCgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViR0xDb250ZXh0T2JqZWN0KFdlYkdM
UmVuZGVyaW5nQ29udGV4dCopOworICAgIFdlYkdMQ29udGV4dE9iamVjdChXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzR3JvdXBPckNvbnRleHQoKSBj
b25zdCBvdmVycmlkZQogICAgIHsKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgogICAgIHZp
cnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IG92
ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0
OworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIG1fY29udGV4dDsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RGVidWdSZW5kZXJlckluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwCShyZXZpc2lvbiAxNzY5OTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDExIEBACiAKICNpbmNsdWRlICJXZWJHTERlYnVnUmVu
ZGVyZXJJbmZvLmgiCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyhXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpXZWJHTERl
YnVnUmVuZGVyZXJJbmZvKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAg
OiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uaAkocmV2aXNpb24gMTc2
OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5m
by5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICAgICAgVU5N
QVNLRURfUkVOREVSRVJfV0VCR0wgPSAweDkyNDYKICAgICB9OwogCi0gICAgZXhwbGljaXQgV2Vi
R0xEZWJ1Z1JlbmRlcmVySW5mbyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBsaWNp
dCBXZWJHTERlYnVnUmVuZGVyZXJJbmZvKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAg
ICB2aXJ0dWFsIH5XZWJHTERlYnVnUmVuZGVyZXJJbmZvKCk7CiAKICAgICB2aXJ0dWFsIEV4dGVu
c2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcAkocmV2aXNpb24gMTc2OTk0
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAKICNpbmNsdWRlICJXZWJHTERlYnVnU2hh
ZGVycy5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgog
I2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xE
ZWJ1Z1NoYWRlcnM6OldlYkdMRGVidWdTaGFkZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCkKK1dlYkdMRGVidWdTaGFkZXJzOjpXZWJHTERlYnVnU2hhZGVycyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRl
cnMuaAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xEZWJ1Z1NoYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB0eXBlZGVm
IGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBXZWJHTERlYnVnU2hhZGVycyBmaW5hbCA6IHB1
YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xEZWJ1Z1No
YWRlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xEZWJ1Z1No
YWRlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfldlYkdMRGVi
dWdTaGFkZXJzKCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRl
eHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RGVwdGhUZXh0dXJlLmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICsz
Myw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xEZXB0aFRleHR1cmU6OldlYkdM
RGVwdGhUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dlYkdMRGVwdGhU
ZXh0dXJlOjpXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250
ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaAkocmV2aXNpb24gMTc2
OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIFdlYkdMRGVwdGhUZXh0dXJlIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBleHBsaWNpdCBXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKik7CiAgICAgdmlydHVhbCB+V2ViR0xEZXB0aFRleHR1cmUoKTsKIAogICAgIHN0YXRp
YyBib29sIHN1cHBvcnRlZChHcmFwaGljc0NvbnRleHQzRCopOwpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAJKHJldmlzaW9uIDE3Njk5
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
V2ViR0xEcmF3QnVmZmVyczo6V2ViR0xEcmF3QnVmZmVycyhXZWJHTFJlbmRlcmluZ0NvbnRleHQq
IGNvbnRleHQpCitXZWJHTERyYXdCdWZmZXJzOjpXZWJHTERyYXdCdWZmZXJzKFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQog
ewogfQpAQCAtNDgsNyArNDgsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBXZWJH
TERyYXdCCiAKICNpZiBPUyhEQVJXSU4pCiAKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9y
dGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopCitib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBv
cnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKikKIHsKICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEyNDg2CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAt
NTYsNyArNTYsNyBAQCBib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBvcnRlZChXZWJHTFJlCiAK
ICNlbHNlCiAKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkKK2Jvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7CiAgICAgRXh0ZW5zaW9uczNEKiBleHRl
bnNpb25zID0gY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygpOwog
ICAgIHJldHVybiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX2RyYXdfYnVmZmVycyIpCkBA
IC0xMDAsNyArMTAwLDcgQEAgdm9pZCBXZWJHTERyYXdCdWZmZXJzOjpkcmF3QnVmZmVyc1dFQkdM
KAogfQogCiAvLyBzdGF0aWMKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c2F0aXNmaWVzV2ViR0xS
ZXF1aXJlbWVudHMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiB3ZWJnbENvbnRleHQpCitib29sIFdl
YkdMRHJhd0J1ZmZlcnM6OnNhdGlzZmllc1dlYkdMUmVxdWlyZW1lbnRzKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqIHdlYmdsQ29udGV4dCkKIHsKICAgICBHcmFwaGljc0NvbnRleHQzRCogY29u
dGV4dCA9IHdlYmdsQ29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKTsKIApJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuaAkocmV2aXNpb24gMTc2
OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxNyArMzIsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBXZWJHTERyYXdCdWZmZXJzIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1
YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTERyYXdCdWZmZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOworICAgIGV4cGxpY2l0IFdlYkdMRHJhd0J1ZmZlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSopOwogICAgIHZpcnR1YWwgfldlYkdMRHJhd0J1ZmZlcnMoKTsKIAotICAgIHN0YXRpYyBi
b29sIHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBzdGF0aWMgYm9vbCBz
dXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAgdmlydHVhbCBFeHRl
bnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgZHJhd0J1ZmZl
cnNXRUJHTChjb25zdCBWZWN0b3I8R0MzRGVudW0+JiBidWZmZXJzKTsKIAogcHJpdmF0ZToKLSAg
ICBzdGF0aWMgYm9vbCBzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqKTsKKyAgICBzdGF0aWMgYm9vbCBzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uY3BwCShy
ZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVu
c2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1XZWJHTEV4dGVuc2lvbjo6V2ViR0xFeHRlbnNpb24oV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0KQorV2ViR0xFeHRlbnNpb246OldlYkdMRXh0ZW5zaW9uKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKIHsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uaAko
cmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRl
bnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNyBAQAogI2lmbmRlZiBXZWJHTEV4
dGVuc2lvbl9oCiAjZGVmaW5lIFdlYkdMRXh0ZW5zaW9uX2gKIAotI2luY2x1ZGUgIldlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01NywxNCArNTcsMTQgQEAgcHVibGljOgogCiAg
ICAgdm9pZCByZWYoKSB7IG1fY29udGV4dC0+cmVmKCk7IH0KICAgICB2b2lkIGRlcmVmKCkgeyBt
X2NvbnRleHQtPmRlcmVmKCk7IH0KLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQo
KSB7IHJldHVybiBtX2NvbnRleHQ7IH0KKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBj
b250ZXh0KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CiAKICAgICB2aXJ0dWFsIH5XZWJHTEV4dGVu
c2lvbigpOwogICAgIHZpcnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3QgPSAwOwog
CiBwcm90ZWN0ZWQ6Ci0gICAgV2ViR0xFeHRlbnNpb24oV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7
Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7CisgICAgV2ViR0xFeHRlbnNp
b24oV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UqIG1fY29udGV4dDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuY3BwCShyZXZp
c2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVm
ZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkV4dGVu
c2lvbnMzRC5oIgogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCiAjaW5jbHVkZSAiV2Vi
R0xEcmF3QnVmZmVycy5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0yNjksMTIgKzI2OSwxMiBAQCBXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEF0dGFjaG1l
bnQ6On5XZWJHCiB7CiB9CiAKLVBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xGcmFt
ZWJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQorUGFzc1JlZlB0cjxX
ZWJHTEZyYW1lYnVmZmVyPiBXZWJHTEZyYW1lYnVmZmVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSogY3R4KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xGcmFtZWJ1
ZmZlcihjdHgpKTsKIH0KIAotV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xGcmFtZWJ1ZmZlcihXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKK1dlYkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZm
ZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4KQogICAgIDogV2ViR0xDb250ZXh0T2Jq
ZWN0KGN0eCkKICAgICAsIG1faGFzRXZlckJlZW5Cb3VuZChmYWxzZSkKIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJKHJldmlzaW9uIDE3
Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIH5X
ZWJHTEZyYW1lYnVmZmVyKCk7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVm
ZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8V2ViR0xGcmFtZWJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsK
IAogICAgIHZvaWQgc2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoR0MzRGVudW0gYXR0
YWNobWVudCwgR0MzRGVudW0gdGV4VGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBHQzNEaW50IGxldmVs
KTsKICAgICB2b2lkIHNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0
dGFjaG1lbnQsIFdlYkdMUmVuZGVyYnVmZmVyKik7CkBAIC0xMDEsNyArMTAxLDcgQEAgcHVibGlj
OgogICAgIEdDM0RlbnVtIGdldERyYXdCdWZmZXIoR0MzRGVudW0pOwogCiBwcm90ZWN0ZWQ6Ci0g
ICAgV2ViR0xGcmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBXZWJHTEZy
YW1lYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkg
b3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMTG9zZUNv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
TG9zZUNvbnRleHQuY3BwCShyZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTExvc2VDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5
LDExIEBACiAKICNpbmNsdWRlICJXZWJHTExvc2VDb250ZXh0LmgiCiAKLSNpbmNsdWRlICJXZWJH
TFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xMb3NlQ29udGV4dDo6V2ViR0xMb3Nl
Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitXZWJHTExvc2VDb250ZXh0
OjpXZWJHTExvc2VDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAg
ICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpAQCAtNDksNyArNDksNyBAQCBXZWJH
TEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBXZWJHTExvc2VDCiAKIHZvaWQgV2ViR0xMb3NlQ29u
dGV4dDo6bG9zZUNvbnRleHQoKQogewotICAgIG1fY29udGV4dC0+Zm9yY2VMb3N0Q29udGV4dChX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OlN5bnRoZXRpY0xvc3RDb250ZXh0KTsKKyAgICBtX2NvbnRl
eHQtPmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6U3ludGhldGlj
TG9zdENvbnRleHQpOwogfQogCiB2b2lkIFdlYkdMTG9zZUNvbnRleHQ6OnJlc3RvcmVDb250ZXh0
KCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0
LmgJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
TG9zZUNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDExIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OworY2xhc3MgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTsKIAogY2xhc3MgV2ViR0xMb3NlQ29udGV4dCBmaW5hbCA6
IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xMb3Nl
Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBsaWNpdCBXZWJHTExvc2VD
b250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5XZWJHTExv
c2VDb250ZXh0KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0
LmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTEgQEAKICNpbmNsdWRl
ICJXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCiAjaW5jbHVkZSAiV2ViR0xEZWJ1Z1NoYWRlcnMu
aCIKICNpbmNsdWRlICJXZWJHTExvc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMT2JqZWN0OjpXZWJHTE9iamVjdChXZWJHTFJlbmRl
cmluZ0NvbnRleHQqKQorV2ViR0xPYmplY3Q6OldlYkdMT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UqKQogICAgIDogbV9vYmplY3QoMCkKICAgICAsIG1fYXR0YWNobWVudENvdW50KDAp
CiAgICAgLCBtX2RlbGV0ZWQoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMT2JqZWN0LmgJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFdlYkdM
Q29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OworY2xhc3MgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTsKIAogY2xhc3MgV2ViR0xPYmplY3QgOiBwdWJsaWMgUmVmQ291
bnRlZDxXZWJHTE9iamVjdD4gewogcHVibGljOgpAQCAtNTYsMTAgKzU2LDEwIEBAIHB1YmxpYzoK
ICAgICBib29sIGlzRGVsZXRlZCgpIHsgcmV0dXJuIG1fZGVsZXRlZDsgfQogCiAgICAgLy8gVHJ1
ZSBpZiB0aGlzIG9iamVjdCBiZWxvbmdzIHRvIHRoZSBncm91cCBvciBjb250ZXh0LgotICAgIHZp
cnR1YWwgYm9vbCB2YWxpZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCosIGNvbnN0IFdlYkdM
UmVuZGVyaW5nQ29udGV4dCopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGUo
Y29uc3QgV2ViR0xDb250ZXh0R3JvdXAqLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
KikgY29uc3QgPSAwOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViR0xPYmplY3QoV2ViR0xSZW5kZXJp
bmdDb250ZXh0Kik7CisgICAgV2ViR0xPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSop
OwogCiAgICAgLy8gc2V0T2JqZWN0IHNob3VsZCBiZSBvbmx5IGNhbGxlZCBvbmNlIHJpZ2h0IGFm
dGVyIGNyZWF0aW5nIGEgV2ViR0xPYmplY3QuCiAgICAgdm9pZCBzZXRPYmplY3QoUGxhdGZvcm0z
RE9iamVjdCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3Jh
bS5jcHAJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUHJvZ3JhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE2ICszMCwxNiBAQAogI2luY2x1
ZGUgIldlYkdMUHJvZ3JhbS5oIgogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKLSNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxXZWJH
TFByb2dyYW0+IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4
KQorUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdM
UHJvZ3JhbShjdHgpKTsKIH0KIAotV2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0oV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjdHgpCitXZWJHTFByb2dyYW06OldlYkdMUHJvZ3JhbShXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlKiBjdHgpCiAgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAg
LCBtX2xpbmtTdGF0dXMoZmFsc2UpCiAgICAgLCBtX2xpbmtDb3VudCgwKQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmgJKHJldmlzaW9uIDE3Njk5NCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIFdlYkdMUHJvZ3JhbSBmaW5hbCA6IHB1YmxpYyBXZWJH
TFMKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTFByb2dyYW0oKTsKIAotICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOwor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gY3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqKTsKIAogICAgIHVuc2lnbmVkIG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygp
OwogICAgIEdDM0RpbnQgZ2V0QWN0aXZlQXR0cmliTG9jYXRpb24oR0MzRHVpbnQgaW5kZXgpOwpA
QCAtNjIsNyArNjIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBkZXRhY2hTaGFkZXIoV2ViR0xTaGFk
ZXIqKTsKIAogcHJvdGVjdGVkOgotICAgIFdlYkdMUHJvZ3JhbShXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAg
ICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0
Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAkocmV2aXNpb24gMTc2OTk0KQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgog
CiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xS
ZW5kZXJidWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKK1Bhc3NSZWZQ
dHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVyYnVmZmVyOjpjcmVhdGUoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSogY3R4KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xS
ZW5kZXJidWZmZXIoY3R4KSk7CiB9CkBAIC00NCw3ICs0NCw3IEBAIFdlYkdMUmVuZGVyYnVmZmVy
Ojp+V2ViR0xSZW5kZXJidWZmZXIoKQogICAgIGRlbGV0ZU9iamVjdCgwKTsKIH0KIAotV2ViR0xS
ZW5kZXJidWZmZXI6OldlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4
KQorV2ViR0xSZW5kZXJidWZmZXI6OldlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UqIGN0eCkKICAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKICAgICAsIG1faW50
ZXJuYWxGb3JtYXQoR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0KQogICAgICwgbV9pbml0aWFsaXpl
ZChmYWxzZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVm
ZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJidWZmZXIuaAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBj
bGFzcyBXZWJHTFJlbmRlcmJ1ZmZlciBmaW5hbCA6IHB1YmxpYyBXCiBwdWJsaWM6CiAgICAgdmly
dHVhbCB+V2ViR0xSZW5kZXJidWZmZXIoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdM
UmVuZGVyYnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKik7CiAKICAgICB2b2lkIHNldEludGVybmFsRm9ybWF0KEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0KQogICAgIHsKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0SGFz
RXZlckJlZW5Cb3VuZCgpIHsgbV9oYXNFdmVyQmVlbkJvdW5kID0gdHJ1ZTsgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgV2ViR0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAg
V2ViR0xSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAgdmly
dHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNE
T2JqZWN0KSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNzY5OTQpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYyNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwg
MjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEUoV0VCR0wpCi0KLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKLQot
I2luY2x1ZGUgIkFOR0xFSW5zdGFuY2VkQXJyYXlzLmgiCi0jaW5jbHVkZSAiQ2FjaGVkSW1hZ2Uu
aCIKLSNpbmNsdWRlICJET01XaW5kb3cuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1
ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKLSNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0jaW5jbHVkZSAiRXh0ZW5z
aW9uczNELmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgot
I2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3LmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQu
aCIKLSNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTFZpZGVvRWxl
bWVudC5oIgotI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgi
Ci0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJN
YWluRnJhbWUuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9FU0Vs
ZW1lbnRJbmRleFVpbnQuaCIKLSNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0j
aW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGlu
ZWFyLmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5o
IgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJT
ZXR0aW5ncy5oIgotI2luY2x1ZGUgIldlYkdMQWN0aXZlSW5mby5oIgotI2luY2x1ZGUgIldlYkdM
QnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgotI2luY2x1
ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJl
c3NlZFRleHR1cmVTM1RDLmgiCi0jaW5jbHVkZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgot
I2luY2x1ZGUgIldlYkdMQ29udGV4dEV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViR0xDb250ZXh0R3Jv
dXAuaCIKLSNpbmNsdWRlICJXZWJHTERlYnVnUmVuZGVyZXJJbmZvLmgiCi0jaW5jbHVkZSAiV2Vi
R0xEZWJ1Z1NoYWRlcnMuaCIKLSNpbmNsdWRlICJXZWJHTERlcHRoVGV4dHVyZS5oIgotI2luY2x1
ZGUgIldlYkdMRHJhd0J1ZmZlcnMuaCIKLSNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgiCi0j
aW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgot
I2luY2x1ZGUgIldlYkdMUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xTaGFkZXIuaCIK
LSNpbmNsdWRlICJXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdC5oIgotI2luY2x1ZGUgIldlYkdM
VGV4dHVyZS5oIgotI2luY2x1ZGUgIldlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCi0KLSNpbmNsdWRl
IDxydW50aW1lL0pTQ0lubGluZXMuaD4KLSNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlJbmxp
bmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9VaW50MzJBcnJheS5oPgotI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNvbnN0
IGRvdWJsZSBzZWNvbmRzQmV0d2VlblJlc3RvcmVBdHRlbXB0cyA9IDEuMDsKLWNvbnN0IGludCBt
YXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUgPSAyNTY7Ci0KLW5hbWVzcGFjZSB7Ci0KLSAgICBj
bGFzcyBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNj
b3BlZERyYXdpbmdCdWZmZXJCaW5kZXIoRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgV2Vi
R0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgOiBtX2RyYXdp
bmdCdWZmZXIoZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAgICwgbV9mcmFtZWJ1ZmZlckJpbmRp
bmcoZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBDb21taXQg
RHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQgKGUuZy4sIGZvciBtdWx0aXNhbXBsaW5nKQotICAgICAg
ICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCi0gICAg
ICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIH5TY29wZWREcmF3aW5nQnVmZmVyQmluZGVyKCkKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gUmVzdG9yZSBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZAotICAgICAgICAgICAgaWYgKCFtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgICAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IERyYXdpbmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKLSAgICAgICAgV2ViR0xGcmFtZWJ1ZmZl
ciogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7Ci0gICAgfTsKLQotICAgIFBsYXRmb3JtM0RPYmplY3Qg
b2JqZWN0T3JaZXJvKFdlYkdMT2JqZWN0KiBvYmplY3QpCi0gICAgewotICAgICAgICByZXR1cm4g
b2JqZWN0ID8gb2JqZWN0LT5vYmplY3QoKSA6IDA7Ci0gICAgfQotCi0gICAgdm9pZCBjbGlwMUQo
R0MzRGludCBzdGFydCwgR0MzRHNpemVpIHJhbmdlLCBHQzNEc2l6ZWkgc291cmNlUmFuZ2UsIEdD
M0RpbnQqIGNsaXBwZWRTdGFydCwgR0MzRHNpemVpKiBjbGlwcGVkUmFuZ2UpCi0gICAgewotICAg
ICAgICBBU1NFUlQoY2xpcHBlZFN0YXJ0ICYmIGNsaXBwZWRSYW5nZSk7Ci0gICAgICAgIGlmIChz
dGFydCA8IDApIHsKLSAgICAgICAgICAgIHJhbmdlICs9IHN0YXJ0OwotICAgICAgICAgICAgc3Rh
cnQgPSAwOwotICAgICAgICB9Ci0gICAgICAgIEdDM0RpbnQgZW5kID0gc3RhcnQgKyByYW5nZTsK
LSAgICAgICAgaWYgKGVuZCA+IHNvdXJjZVJhbmdlKQotICAgICAgICAgICAgcmFuZ2UgLT0gZW5k
IC0gc291cmNlUmFuZ2U7Ci0gICAgICAgICpjbGlwcGVkU3RhcnQgPSBzdGFydDsKLSAgICAgICAg
KmNsaXBwZWRSYW5nZSA9IHJhbmdlOwotICAgIH0KLQotICAgIC8vIFJldHVybnMgZmFsc2UgaWYg
bm8gY2xpcHBpbmcgaXMgbmVjZXNzYXJ5LCBpLmUuLCB4LCB5LCB3aWR0aCwgaGVpZ2h0IHN0YXkg
dGhlIHNhbWUuCi0gICAgYm9vbCBjbGlwMkQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgc291
cmNlV2lkdGgsIEdDM0RzaXplaSBzb3VyY2VIZWlnaHQsCi0gICAgICAgICAgICAgICAgR0MzRGlu
dCogY2xpcHBlZFgsIEdDM0RpbnQqIGNsaXBwZWRZLCBHQzNEc2l6ZWkqIGNsaXBwZWRXaWR0aCwg
R0MzRHNpemVpKmNsaXBwZWRIZWlnaHQpCi0gICAgewotICAgICAgICBBU1NFUlQoY2xpcHBlZFgg
JiYgY2xpcHBlZFkgJiYgY2xpcHBlZFdpZHRoICYmIGNsaXBwZWRIZWlnaHQpOwotICAgICAgICBj
bGlwMUQoeCwgd2lkdGgsIHNvdXJjZVdpZHRoLCBjbGlwcGVkWCwgY2xpcHBlZFdpZHRoKTsKLSAg
ICAgICAgY2xpcDFEKHksIGhlaWdodCwgc291cmNlSGVpZ2h0LCBjbGlwcGVkWSwgY2xpcHBlZEhl
aWdodCk7Ci0gICAgICAgIHJldHVybiAoKmNsaXBwZWRYICE9IHggfHwgKmNsaXBwZWRZICE9IHkg
fHwgKmNsaXBwZWRXaWR0aCAhPSB3aWR0aCB8fCAqY2xpcHBlZEhlaWdodCAhPSBoZWlnaHQpOwot
ICAgIH0KLQotICAgIEdDM0RpbnQgY2xhbXAoR0MzRGludCB2YWx1ZSwgR0MzRGludCBtaW4sIEdD
M0RpbnQgbWF4KQotICAgIHsKLSAgICAgICAgaWYgKHZhbHVlIDwgbWluKQotICAgICAgICAgICAg
dmFsdWUgPSBtaW47Ci0gICAgICAgIGlmICh2YWx1ZSA+IG1heCkKLSAgICAgICAgICAgIHZhbHVl
ID0gbWF4OwotICAgICAgICByZXR1cm4gdmFsdWU7Ci0gICAgfQotCi0gICAgLy8gUmV0dXJuIHRy
dWUgaWYgYSBjaGFyYWN0ZXIgYmVsb25ncyB0byB0aGUgQVNDSUkgc3Vic2V0IGFzIGRlZmluZWQg
aW4KLSAgICAvLyBHTFNMIEVTIDEuMCBzcGVjIHNlY3Rpb24gMy4xLgotICAgIGJvb2wgdmFsaWRh
dGVDaGFyYWN0ZXIodW5zaWduZWQgY2hhciBjKQotICAgIHsKLSAgICAgICAgLy8gUHJpbnRpbmcg
Y2hhcmFjdGVycyBhcmUgdmFsaWQgZXhjZXB0ICIgJCBgIEAgXCAnIERFTC4KLSAgICAgICAgaWYg
KGMgPj0gMzIgJiYgYyA8PSAxMjYKLSAgICAgICAgICAgICYmIGMgIT0gJyInICYmIGMgIT0gJyQn
ICYmIGMgIT0gJ2AnICYmIGMgIT0gJ0AnICYmIGMgIT0gJ1xcJyAmJiBjICE9ICdcJycpCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgLy8gSG9yaXpvbnRhbCB0YWIsIGxpbmUgZmVl
ZCwgdmVydGljYWwgdGFiLCBmb3JtIGZlZWQsIGNhcnJpYWdlIHJldHVybgotICAgICAgICAvLyBh
cmUgYWxzbyB2YWxpZC4KLSAgICAgICAgaWYgKGMgPj0gOSAmJiBjIDw9IDEzKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib29s
IGlzUHJlZml4UmVzZXJ2ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQotICAgIHsKLSAgICAgICAgaWYg
KG5hbWUuc3RhcnRzV2l0aCgiZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRoKCJ3ZWJnbF8iKSB8fCBu
YW1lLnN0YXJ0c1dpdGgoIl93ZWJnbF8iKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gU3RyaXBzIGNvbW1lbnRzIGZyb20g
c2hhZGVyIHRleHQuIFRoaXMgYWxsb3dzIG5vbi1BU0NJSSBjaGFyYWN0ZXJzCi0gICAgLy8gdG8g
YmUgdXNlZCBpbiBjb21tZW50cyB3aXRob3V0IHBvdGVudGlhbGx5IGJyZWFraW5nIE9wZW5HTAot
ICAgIC8vIGltcGxlbWVudGF0aW9ucyBub3QgZXhwZWN0aW5nIGNoYXJhY3RlcnMgb3V0c2lkZSB0
aGUgR0xTTCBFUyBzZXQuCi0gICAgY2xhc3MgU3RyaXBDb21tZW50cyB7Ci0gICAgcHVibGljOgot
ICAgICAgICBTdHJpcENvbW1lbnRzKGNvbnN0IFN0cmluZyYgc3RyKQotICAgICAgICAgICAgOiBt
X3BhcnNlU3RhdGUoQmVnaW5uaW5nT2ZMaW5lKQotICAgICAgICAgICAgLCBtX3NvdXJjZVN0cmlu
ZyhzdHIpCi0gICAgICAgICAgICAsIG1fbGVuZ3RoKHN0ci5sZW5ndGgoKSkKLSAgICAgICAgICAg
ICwgbV9wb3NpdGlvbigwKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYXJzZSgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgU3RyaW5nIHJlc3VsdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBtX2J1aWxkZXIudG9TdHJpbmcoKTsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgYm9vbCBoYXNNb3JlQ2hhcmFjdGVycygpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIHJldHVybiAobV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHZvaWQgcGFyc2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICB3aGlsZSAoaGFzTW9yZUNoYXJh
Y3RlcnMoKSkgewotICAgICAgICAgICAgICAgIHByb2Nlc3MoY3VycmVudCgpKTsKLSAgICAgICAg
ICAgICAgICAvLyBwcm9jZXNzKCkgbWlnaHQgYWR2YW5jZSB0aGUgcG9zaXRpb24uCi0gICAgICAg
ICAgICAgICAgaWYgKGhhc01vcmVDaGFyYWN0ZXJzKCkpCi0gICAgICAgICAgICAgICAgICAgIGFk
dmFuY2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcHJvY2Vz
cyhVQ2hhcik7Ci0KLSAgICAgICAgYm9vbCBwZWVrKFVDaGFyJiBjaGFyYWN0ZXIpIGNvbnN0Ci0g
ICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3Bvc2l0aW9uICsgMSA+PSBtX2xlbmd0aCkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBjaGFyYWN0ZXIgPSBtX3Nv
dXJjZVN0cmluZ1ttX3Bvc2l0aW9uICsgMV07Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdAotICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihtX3Bvc2l0aW9uIDwgbV9s
ZW5ndGgpOwotICAgICAgICAgICAgcmV0dXJuIG1fc291cmNlU3RyaW5nW21fcG9zaXRpb25dOwot
ICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBhZHZhbmNlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgKyttX3Bvc2l0aW9uOwotICAgICAgICB9Ci0KLSAgICAgICAgYm9vbCBpc05ld2xpbmUoVUNo
YXIgY2hhcmFjdGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBEb24ndCBhdHRl
bXB0IHRvIGNhbm9uaWNhbGl6ZSBuZXdsaW5lIHJlbGF0ZWQgY2hhcmFjdGVycy4KLSAgICAgICAg
ICAgIHJldHVybiAoY2hhcmFjdGVyID09ICdcbicgfHwgY2hhcmFjdGVyID09ICdccicpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBlbWl0KFVDaGFyIGNoYXJhY3RlcikKLSAgICAgICAgewot
ICAgICAgICAgICAgbV9idWlsZGVyLmFwcGVuZChjaGFyYWN0ZXIpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgZW51bSBQYXJzZVN0YXRlIHsKLSAgICAgICAgICAgIC8vIEhhdmUgbm90IHNlZW4gYW4g
QVNDSUkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIHlldCBvbgotICAgICAgICAgICAgLy8gdGhp
cyBsaW5lLiBQb3NzaWJsZSB0aGF0IHdlIG1pZ2h0IHNlZSBhIHByZXByb2Nlc3NvcgotICAgICAg
ICAgICAgLy8gZGlyZWN0aXZlLgotICAgICAgICAgICAgQmVnaW5uaW5nT2ZMaW5lLAotCi0gICAg
ICAgICAgICAvLyBIYXZlIHNlZW4gYXQgbGVhc3Qgb25lIEFTQ0lJIG5vbi13aGl0ZXNwYWNlIGNo
YXJhY3RlcgotICAgICAgICAgICAgLy8gb24gdGhpcyBsaW5lLgotICAgICAgICAgICAgTWlkZGxl
T2ZMaW5lLAotCi0gICAgICAgICAgICAvLyBIYW5kbGluZyBhIHByZXByb2Nlc3NvciBkaXJlY3Rp
dmUuIFBhc3NlcyB0aHJvdWdoIGFsbAotICAgICAgICAgICAgLy8gY2hhcmFjdGVycyB1cCB0byB0
aGUgZW5kIG9mIHRoZSBsaW5lLiBEaXNhYmxlcyBjb21tZW50Ci0gICAgICAgICAgICAvLyBwcm9j
ZXNzaW5nLgotICAgICAgICAgICAgSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmUsCi0KLSAgICAgICAg
ICAgIC8vIEhhbmRsaW5nIGEgc2luZ2xlLWxpbmUgY29tbWVudC4gVGhlIGNvbW1lbnQgdGV4dCBp
cwotICAgICAgICAgICAgLy8gcmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBzcGFjZS4KLSAgICAgICAg
ICAgIEluU2luZ2xlTGluZUNvbW1lbnQsCi0KLSAgICAgICAgICAgIC8vIEhhbmRsaW5nIGEgbXVs
dGktbGluZSBjb21tZW50LiBOZXdsaW5lcyBhcmUgcGFzc2VkCi0gICAgICAgICAgICAvLyB0aHJv
dWdoIHRvIHByZXNlcnZlIGxpbmUgbnVtYmVycy4KLSAgICAgICAgICAgIEluTXVsdGlMaW5lQ29t
bWVudAotICAgICAgICB9OwotCi0gICAgICAgIFBhcnNlU3RhdGUgbV9wYXJzZVN0YXRlOwotICAg
ICAgICBTdHJpbmcgbV9zb3VyY2VTdHJpbmc7Ci0gICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwot
ICAgICAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uOwotICAgICAgICBTdHJpbmdCdWlsZGVyIG1fYnVp
bGRlcjsKLSAgICB9OwotCi0gICAgdm9pZCBTdHJpcENvbW1lbnRzOjpwcm9jZXNzKFVDaGFyIGMp
Ci0gICAgewotICAgICAgICBpZiAoaXNOZXdsaW5lKGMpKSB7Ci0gICAgICAgICAgICAvLyBObyBt
YXR0ZXIgd2hhdCBzdGF0ZSB3ZSBhcmUgaW4sIHBhc3MgdGhyb3VnaCBuZXdsaW5lcwotICAgICAg
ICAgICAgLy8gc28gd2UgcHJlc2VydmUgbGluZSBudW1iZXJzLgotICAgICAgICAgICAgZW1pdChj
KTsKLQotICAgICAgICAgICAgaWYgKG1fcGFyc2VTdGF0ZSAhPSBJbk11bHRpTGluZUNvbW1lbnQp
Ci0gICAgICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gQmVnaW5uaW5nT2ZMaW5lOwotCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICBVQ2hhciB0ZW1wID0gMDsKLSAg
ICAgICAgc3dpdGNoIChtX3BhcnNlU3RhdGUpIHsKLSAgICAgICAgY2FzZSBCZWdpbm5pbmdPZkxp
bmU6Ci0gICAgICAgICAgICBpZiAoV1RGOjppc0FTQ0lJU3BhY2UoYykpIHsKLSAgICAgICAgICAg
ICAgICBlbWl0KGMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBpZiAoYyA9PSAnIycpIHsKLSAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUg
PSBJblByZXByb2Nlc3NvckRpcmVjdGl2ZTsKLSAgICAgICAgICAgICAgICBlbWl0KGMpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBUcmFu
c2l0aW9uIHRvIG5vcm1hbCBzdGF0ZSBhbmQgcmUtaGFuZGxlIGNoYXJhY3Rlci4KLSAgICAgICAg
ICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKLSAgICAgICAgICAgIHByb2Nlc3MoYyk7
Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIE1pZGRsZU9mTGluZToKLSAgICAg
ICAgICAgIGlmIChjID09ICcvJyAmJiBwZWVrKHRlbXApKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KHRlbXAgPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluU2lu
Z2xlTGluZUNvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoJyAnKTsKLSAgICAgICAg
ICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSAnKicpIHsKLSAgICAg
ICAgICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5NdWx0aUxpbmVDb21tZW50OwotICAgICAg
ICAgICAgICAgICAgICAvLyBFbWl0IHRoZSBjb21tZW50IHN0YXJ0IGluIGNhc2UgdGhlIHVzZXIg
aGFzCi0gICAgICAgICAgICAgICAgICAgIC8vIGFuIHVuY2xvc2VkIGNvbW1lbnQgYW5kIHdlIHdh
bnQgdG8gbGF0ZXIKLSAgICAgICAgICAgICAgICAgICAgLy8gc2lnbmFsIGFuIGVycm9yLgotICAg
ICAgICAgICAgICAgICAgICBlbWl0KCcvJyk7Ci0gICAgICAgICAgICAgICAgICAgIGVtaXQoJyon
KTsKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGVt
aXQoYyk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEluUHJlcHJvY2Vzc29y
RGlyZWN0aXZlOgotICAgICAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgdGhlIGNoYXJhY3RlciBp
cywganVzdCBwYXNzIGl0Ci0gICAgICAgICAgICAvLyB0aHJvdWdoLiBEbyBub3QgcGFyc2UgY29t
bWVudHMgaW4gdGhpcyBzdGF0ZS4gVGhpcwotICAgICAgICAgICAgLy8gbWlnaHQgbm90IGJlIHRo
ZSByaWdodCB0aGluZyB0byBkbyBsb25nIHRlcm0sIGJ1dCBpdAotICAgICAgICAgICAgLy8gc2hv
dWxkIGhhbmRsZSB0aGUgI2Vycm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuCi0gICAgICAgICAg
ICBlbWl0KGMpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBJblNpbmdsZUxp
bmVDb21tZW50OgotICAgICAgICAgICAgLy8gVGhlIG5ld2xpbmUgY29kZSBhdCB0aGUgdG9wIG9m
IHRoaXMgZnVuY3Rpb24gdGFrZXMgY2FyZQotICAgICAgICAgICAgLy8gb2YgcmVzZXR0aW5nIG91
ciBzdGF0ZSB3aGVuIHdlIGdldCBvdXQgb2YgdGhlCi0gICAgICAgICAgICAvLyBzaW5nbGUtbGlu
ZSBjb21tZW50LiBTd2FsbG93IGFsbCBvdGhlciBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgY2FzZSBJbk11bHRpTGluZUNvbW1lbnQ6Ci0gICAgICAgICAgICBpZiAo
YyA9PSAnKicgJiYgcGVlayh0ZW1wKSAmJiB0ZW1wID09ICcvJykgewotICAgICAgICAgICAgICAg
IGVtaXQoJyonKTsKLSAgICAgICAgICAgICAgICBlbWl0KCcvJyk7Ci0gICAgICAgICAgICAgICAg
bV9wYXJzZVN0YXRlID0gTWlkZGxlT2ZMaW5lOwotICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8g
U3dhbGxvdyBhbGwgb3RoZXIgY2hhcmFjdGVycy4gVW5jbGVhciB3aGV0aGVyIHdlIG1heQotICAg
ICAgICAgICAgLy8gd2FudCBvciBuZWVkIHRvIGp1c3QgZW1pdCBhIHNwYWNlIHBlciBjaGFyYWN0
ZXIgdG8gdHJ5Ci0gICAgICAgICAgICAvLyB0byBwcmVzZXJ2ZSBjb2x1bW4gbnVtYmVycyBmb3Ig
ZGVidWdnaW5nIHB1cnBvc2VzLgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci19IC8vIG5hbWVzcGFjZSBhbm9ueW1vdXMKLQotY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0
TG9zdENhbGxiYWNrIDogcHVibGljIEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxi
YWNrIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNp
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2soV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBjYikgOiBtX2NvbnRleHQoY2IpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBvbkNvbnRleHRMb3N0
KCkgb3ZlcnJpZGUgeyBtX2NvbnRleHQtPmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpSZWFsTG9zdENvbnRleHQpOyB9Ci0gICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdD
b250ZXh0TG9zdENhbGxiYWNrKCkge30KLXByaXZhdGU6Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBtX2NvbnRleHQ7Ci19OwotCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1l
c3NhZ2VDYWxsYmFjayA6IHB1YmxpYyBHcmFwaGljc0NvbnRleHQzRDo6RXJyb3JNZXNzYWdlQ2Fs
bGJhY2sgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxp
Y2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY2IpIDogbV9jb250ZXh0KGNiKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgb25F
cnJvck1lc3NhZ2UoY29uc3QgU3RyaW5nJiBtZXNzYWdlLCBHQzNEaW50KSBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+bV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZSkK
LSAgICAgICAgICAgIG1fY29udGV4dC0+cHJpbnRHTEVycm9yVG9Db25zb2xlKG1lc3NhZ2UpOwot
ICAgIH0KLSAgICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxs
YmFjaygpIHsgfQotcHJpdmF0ZToKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1fY29udGV4
dDsKLX07Ci0KLXN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIFdlYkdMQ29u
dGV4dEF0dHJpYnV0ZXMqIGF0dHJzKQotewotICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGNhbnZh
cy0+ZG9jdW1lbnQoKTsKLSAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5mcmFtZSgpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgLy8gVGhlIEZyYW1l
TG9hZGVyQ2xpZW50IG1pZ2h0IGJsb2NrIGNyZWF0aW9uIG9mIGEgbmV3IFdlYkdMIGNvbnRleHQg
ZGVzcGl0ZSB0aGUgcGFnZSBzZXR0aW5nczsgaW4KLSAgICAvLyBwYXJ0aWN1bGFyLCBpZiBXZWJH
TCBjb250ZXh0cyB3ZXJlIGxvc3Qgb25lIG9yIG1vcmUgdGltZXMgdmlhIHRoZSBHTF9BUkJfcm9i
dXN0bmVzcyBleHRlbnNpb24uCi0gICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxs
b3dXZWJHTChmcmFtZS0+c2V0dGluZ3MoKS53ZWJHTEVuYWJsZWQoKSkpIHsKLSAgICAgICAgY2Fu
dmFzLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwgZmFsc2UsIHRydWUsICJXZWIgcGFnZSB3
YXMgbm90IGFsbG93ZWQgdG8gY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGJvb2wgaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
biA9IGZhbHNlOwotICAgIERvY3VtZW50JiB0b3BEb2N1bWVudCA9IGRvY3VtZW50LnRvcERvY3Vt
ZW50KCk7Ci0gICAgUGFnZSogcGFnZSA9IHRvcERvY3VtZW50LnBhZ2UoKTsKLSAgICBpZiAocGFn
ZSAmJiAhdG9wRG9jdW1lbnQudXJsKCkuaXNMb2NhbEZpbGUoKSkgewotICAgICAgICBXZWJHTExv
YWRQb2xpY3kgcG9saWN5ID0gcGFnZS0+bWFpbkZyYW1lKCkubG9hZGVyKCkuY2xpZW50KCkud2Vi
R0xQb2xpY3lGb3JVUkwodG9wRG9jdW1lbnQudXJsKCkpOwotCi0gICAgICAgIGlmIChwb2xpY3kg
PT0gV2ViR0xCbG9ja0NyZWF0aW9uKSB7Ci0gICAgICAgICAgICBMT0coV2ViR0wsICJUaGUgcG9s
aWN5IGZvciB0aGlzIFVSTCAoJXMpIGlzIHRvIGJsb2NrIFdlYkdMLiIsIHRvcERvY3VtZW50LnVy
bCgpLmhvc3QoKS51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBvbGljeSA9PSBXZWJHTFBlbmRpbmdDcmVhdGlvbikg
ewotICAgICAgICAgICAgTE9HKFdlYkdMLCAiV2ViR0wgcG9saWN5IGlzIHBlbmRpbmcuIE1heSBu
ZWVkIHRvIGJlIHJlc29sdmVkIGxhdGVyLiIpOwotICAgICAgICAgICAgaXNQZW5kaW5nUG9saWN5
UmVzb2x1dGlvbiA9IHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gYXR0cnMgPyBhdHRycy0+YXR0cmlidXRlcygp
IDogR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMoKTsKLQotICAgIGlmIChhdHRyaWJ1dGVz
LmFudGlhbGlhcykgewotICAgICAgICBpZiAoIWZyYW1lLT5zZXR0aW5ncygpLm9wZW5HTE11bHRp
c2FtcGxpbmdFbmFibGVkKCkpCi0gICAgICAgICAgICBhdHRyaWJ1dGVzLmFudGlhbGlhcyA9IGZh
bHNlOwotICAgIH0KLQotICAgIGF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gdHJ1ZTsKLSAgICBh
dHRyaWJ1dGVzLnNoYXJlUmVzb3VyY2VzID0gZmFsc2U7Ci0gICAgYXR0cmlidXRlcy5wcmVmZXJE
aXNjcmV0ZUdQVSA9IHRydWU7Ci0KLSAgICBpZiAoZnJhbWUtPnNldHRpbmdzKCkuZm9yY2VTb2Z0
d2FyZVdlYkdMUmVuZGVyaW5nKCkpCi0gICAgICAgIGF0dHJpYnV0ZXMuZm9yY2VTb2Z0d2FyZVJl
bmRlcmVyID0gdHJ1ZTsKLQotICAgIGlmIChwYWdlKQotICAgICAgICBhdHRyaWJ1dGVzLmRldmlj
ZVBpeGVsUmF0aW8gPSBwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOwotCi0gICAgaWYgKGlzUGVu
ZGluZ1BvbGljeVJlc29sdXRpb24pIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiQ3JlYXRlIGEgV2Vi
R0wgY29udGV4dCB0aGF0IGxvb2tzIHJlYWwsIGJ1dCB3aWxsIHJlcXVpcmUgYSBwb2xpY3kgcmVz
b2x1dGlvbiBpZiB1c2VkLiIpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJp
bmdDb250ZXh0PiByZW5kZXJpbmdDb250ZXh0KG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRleHQoY2Fu
dmFzLCBhdHRyaWJ1dGVzKSk7Ci0gICAgICAgIHJlbmRlcmluZ0NvbnRleHQtPnN1c3BlbmRJZk5l
ZWRlZCgpOwotICAgICAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKLSAgICB9Ci0KLSAgICBI
b3N0V2luZG93KiBob3N0V2luZG93ID0gZG9jdW1lbnQudmlldygpLT5yb290KCktPmhvc3RXaW5k
b3coKTsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZShhdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7Ci0KLSAgICBpZiAoIWNvbnRl
eHQgfHwgIWNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKSB7Ci0gICAgICAgIGNhbnZhcy0+
ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJn
bGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsIGZhbHNlLCB0cnVlLCAiQ291bGQgbm90IGNyZWF0
ZSBhIFdlYkdMIGNvbnRleHQuIikpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMgPSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7
Ci0gICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfZGVidWdfbWFya2VyIikpCi0g
ICAgICAgIGV4dGVuc2lvbnMtPnB1c2hHcm91cE1hcmtlckVYVCgiV2ViR0xSZW5kZXJpbmdDb250
ZXh0Iik7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5kZXJpbmdDb250ZXh0PiByZW5k
ZXJpbmdDb250ZXh0KG5ldyBXZWJHTFJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBjb250ZXh0LCBh
dHRyaWJ1dGVzKSk7Ci0gICAgcmVuZGVyaW5nQ29udGV4dC0+c3VzcGVuZElmTmVlZGVkKCk7Ci0K
LSAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcykKLSAgICA6IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQocGFzc2VkQ2FudmFzKQotICAgICwgQWN0aXZlRE9NT2JqZWN0KCZwYXNz
ZWRDYW52YXMtPmRvY3VtZW50KCkpCi0gICAgLCBtX2NvbnRleHQoMCkKLSAgICAsIG1fZHJhd2lu
Z0J1ZmZlcigwKQotICAgICwgbV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcigqdGhpcywg
JldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KQotICAgICwg
bV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKLSAgICAsIG1fcmVzdG9yZVRpbWVyKCp0aGlzLCAmV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJlc3RvcmVDb250ZXh0KQotICAgICwgbV9nZW5lcmF0
ZWRJbWFnZUNhY2hlKDApCi0gICAgLCBtX2NvbnRleHRMb3N0KGZhbHNlKQotICAgICwgbV9jb250
ZXh0TG9zdE1vZGUoU3ludGhldGljTG9zdENvbnRleHQpCi0gICAgLCBtX2F0dHJpYnV0ZXMoYXR0
cmlidXRlcykKLSAgICAsIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUodHJ1ZSkKLSAgICAs
IG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkKG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29s
ZSkKLSAgICAsIG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbih0cnVlKQotICAgICwgbV9oYXNS
ZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uKGZhbHNlKQotewotfQotCi1XZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2Fu
dmFzLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LAotICAgIEdyYXBoaWNz
Q29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi0gICAgOiBDYW52YXNSZW5kZXJpbmdD
b250ZXh0KHBhc3NlZENhbnZhcykKLSAgICAsIEFjdGl2ZURPTU9iamVjdCgmcGFzc2VkQ2FudmFz
LT5kb2N1bWVudCgpKQotICAgICwgbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2RyYXdpbmdC
dWZmZXIoMCkKLSAgICAsIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIoKnRoaXMsICZX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc3BhdGNoQ29udGV4dExvc3RFdmVudCkKLSAgICAsIG1f
cmVzdG9yZUFsbG93ZWQoZmFsc2UpCi0gICAgLCBtX3Jlc3RvcmVUaW1lcigqdGhpcywgJldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29udGV4dCkKLSAgICAsIG1fZ2VuZXJhdGVk
SW1hZ2VDYWNoZSg0KQotICAgICwgbV9jb250ZXh0TG9zdChmYWxzZSkKLSAgICAsIG1fY29udGV4
dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0KQotICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJp
YnV0ZXMpCi0gICAgLCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKHRydWUpCi0gICAgLCBt
X251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZChtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUp
Ci0gICAgLCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24oZmFsc2UpCi0gICAgLCBtX2hhc1Jl
cXVlc3RlZFBvbGljeVJlc29sdXRpb24oZmFsc2UpCi17Ci0gICAgQVNTRVJUKG1fY29udGV4dCk7
Ci0gICAgbV9jb250ZXh0R3JvdXAgPSBXZWJHTENvbnRleHRHcm91cDo6Y3JlYXRlKCk7Ci0gICAg
bV9jb250ZXh0R3JvdXAtPmFkZENvbnRleHQodGhpcyk7Ci0KLSAgICBtX21heFZpZXdwb3J0RGlt
c1swXSA9IG1fbWF4Vmlld3BvcnREaW1zWzFdID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUywgbV9tYXhWaWV3cG9ydERp
bXMpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5iaW5kKCk7Ci0KLSAgICBzZXR1cEZsYWdzKCk7Ci0gICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQo
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmluaXRpYWxpemVOZXdDb250ZXh0
KCkKLXsKLSAgICBBU1NFUlQoIW1fY29udGV4dExvc3QpOwotICAgIG1fbmVlZHNVcGRhdGUgPSB0
cnVlOwotICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKLSAgICBtX2FjdGl2ZVRleHR1
cmVVbml0ID0gMDsKLSAgICBtX3BhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1fdW5wYWNrQWxpZ25t
ZW50ID0gNDsKLSAgICBtX3VucGFja0ZsaXBZID0gZmFsc2U7Ci0gICAgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhID0gZmFsc2U7Ci0gICAgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9IEdy
YXBoaWNzQ29udGV4dDNEOjpCUk9XU0VSX0RFRkFVTFRfV0VCR0w7Ci0gICAgbV9ib3VuZEFycmF5
QnVmZmVyID0gMDsKLSAgICBtX2N1cnJlbnRQcm9ncmFtID0gMDsKLSAgICBtX2ZyYW1lYnVmZmVy
QmluZGluZyA9IDA7Ci0gICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gMDsKLSAgICBtX2RlcHRo
TWFzayA9IHRydWU7Ci0gICAgbV9zdGVuY2lsRW5hYmxlZCA9IGZhbHNlOwotICAgIG1fc3RlbmNp
bE1hc2sgPSAweEZGRkZGRkZGOwotICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gMHhGRkZGRkZGRjsK
LSAgICBtX3N0ZW5jaWxGdW5jUmVmID0gMDsKLSAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IDA7
Ci0gICAgbV9zdGVuY2lsRnVuY01hc2sgPSAweEZGRkZGRkZGOwotICAgIG1fc3RlbmNpbEZ1bmNN
YXNrQmFjayA9IDB4RkZGRkZGRkY7Ci0gICAgbV9sYXllckNsZWFyZWQgPSBmYWxzZTsKLSAgICBt
X251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCA9IG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29s
ZTsKLSAgICAKLSAgICBtX2NsZWFyQ29sb3JbMF0gPSBtX2NsZWFyQ29sb3JbMV0gPSBtX2NsZWFy
Q29sb3JbMl0gPSBtX2NsZWFyQ29sb3JbM10gPSAwOwotICAgIG1fc2Npc3NvckVuYWJsZWQgPSBm
YWxzZTsKLSAgICBtX2NsZWFyRGVwdGggPSAxOwotICAgIG1fY2xlYXJTdGVuY2lsID0gMDsKLSAg
ICBtX2NvbG9yTWFza1swXSA9IG1fY29sb3JNYXNrWzFdID0gbV9jb2xvck1hc2tbMl0gPSBtX2Nv
bG9yTWFza1szXSA9IHRydWU7Ci0KLSAgICBHQzNEaW50IG51bUNvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmbnVtQ29tYmluZWRUZXh0dXJlSW1h
Z2VVbml0cyk7Ci0gICAgbV90ZXh0dXJlVW5pdHMuY2xlYXIoKTsKLSAgICBtX3RleHR1cmVVbml0
cy5yZXNpemUobnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0KLSAgICBHQzNEaW50IG51
bVZlcnRleEF0dHJpYnMgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJm51bVZlcnRleEF0dHJpYnMpOwotICAgIG1f
bWF4VmVydGV4QXR0cmlicyA9IG51bVZlcnRleEF0dHJpYnM7Ci0gICAgCi0gICAgbV9tYXhUZXh0
dXJlU2l6ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fbWF4VGV4dHVyZVNpemUpOwotICAgIG1fbWF4VGV4dHVy
ZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21wdXRlTGV2ZWxDb3VudChtX21heFRleHR1cmVTaXpl
LCBtX21heFRleHR1cmVTaXplKTsKLSAgICBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSA9IDA7Ci0g
ICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVfTUFQ
X1RFWFRVUkVfU0laRSwgJm1fbWF4Q3ViZU1hcFRleHR1cmVTaXplKTsKLSAgICBtX21heEN1YmVN
YXBUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1dGVMZXZlbENvdW50KG1fbWF4Q3Vi
ZU1hcFRleHR1cmVTaXplLCBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSk7Ci0gICAgbV9tYXhSZW5k
ZXJidWZmZXJTaXplID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUsICZtX21heFJlbmRlcmJ1ZmZlclNpemUpOwot
Ci0gICAgLy8gVGhlc2UgdHdvIHZhbHVlcyBmcm9tIEVYVF9kcmF3X2J1ZmZlcnMgYXJlIGxhemls
eSBxdWVyaWVkLgotICAgIG1fbWF4RHJhd0J1ZmZlcnMgPSAwOwotICAgIG1fbWF4Q29sb3JBdHRh
Y2htZW50cyA9IDA7Ci0KLSAgICBtX2JhY2tEcmF3QnVmZmVyID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkJBQ0s7Ci0gICAgbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZCA9IGZhbHNl
OwotICAgIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQgPSBmYWxzZTsKLQotICAgIG1fZGVmYXVsdFZl
cnRleEFycmF5T2JqZWN0ID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKHRoaXMs
IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZhb1R5cGVEZWZhdWx0KTsKLSAgICBhZGRDb250
ZXh0T2JqZWN0KG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgpKTsKLSAgICBtX2JvdW5k
VmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdDsKLSAgICAKLSAg
ICBtX3ZlcnRleEF0dHJpYlZhbHVlLnJlc2l6ZShtX21heFZlcnRleEF0dHJpYnMpOwotCi0gICAg
aWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjcmVhdGVGYWxsYmFja0JsYWNrVGV4
dHVyZXMxeDEoKTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAgaW5pdFZl
cnRleEF0dHJpYjAoKTsKLQotICAgIEludFNpemUgY2FudmFzU2l6ZSA9IGNsYW1wZWRDYW52YXNT
aXplKCk7Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5yZXNldChjYW52YXNTaXplKTsKLQotICAgIG1fY29udGV4dC0+cmVzaGFwZShjYW52YXNTaXpl
LndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOwotICAgIG1fY29udGV4dC0+dmlld3BvcnQo
MCwgMCwgY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKLSAgICBtX2Nv
bnRleHQtPnNjaXNzb3IoMCwgMCwgY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdo
dCgpKTsKLQotICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExvc3RDYWxsYmFjayhzdGQ6Om1ha2Vf
dW5pcXVlPFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjaz4odGhpcykpOwotICAgIG1f
Y29udGV4dC0+c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJl
bmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjaz4odGhpcykpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c2V0dXBGbGFncygpCi17Ci0gICAgQVNTRVJUKG1fY29udGV4
dCk7Ci0KLSAgICBpZiAoUGFnZSogcGFnZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkK
LSAgICAgICAgbV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZSA9IHBhZ2UtPnNldHRpbmdzKCku
d2ViR0xFcnJvcnNUb0NvbnNvbGVFbmFibGVkKCk7Ci0KLSAgICBtX2lzR0xFUzJDb21wbGlhbnQg
PSBtX2NvbnRleHQtPmlzR0xFUzJDb21wbGlhbnQoKTsKLSAgICBtX2lzRXJyb3JHZW5lcmF0ZWRP
bk91dE9mQm91bmRzQWNjZXNzZXMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFi
bGVkKCJHTF9DSFJPTUlVTV9zdHJpY3RfYXR0cmlicyIpOwotICAgIG1faXNSZXNvdXJjZVNhZmUg
PSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9DSFJPTUlVTV9yZXNv
dXJjZV9zYWZlIik7Ci0gICAgaWYgKG1faXNHTEVTMkNvbXBsaWFudCkgewotICAgICAgICBtX2lz
R0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQo
IkdMX09FU190ZXh0dXJlX25wb3QiKTsKLSAgICAgICAgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRl
ZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX09FU19wYWNrZWRf
ZGVwdGhfc3RlbmNpbCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faXNHTEVTMk5QT1RTdHJp
Y3QgPSAhbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQVJCX3RleHR1
cmVfbm9uX3Bvd2VyX29mX3R3byIpOwotICAgICAgICBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVk
ID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfRVhUX3BhY2tlZF9k
ZXB0aF9zdGVuY2lsIik7Ci0gICAgfQotICAgIG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkID0g
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfRVhUX3JvYnVzdG5lc3Mi
KTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFsbG93UHJpdmlsZWdlZEV4dGVu
c2lvbnMoKSBjb25zdAotewotICAgIGlmIChQYWdlKiBwYWdlID0gY2FudmFzKCktPmRvY3VtZW50
KCkucGFnZSgpKQotICAgICAgICByZXR1cm4gcGFnZS0+c2V0dGluZ3MoKS5wcml2aWxlZ2VkV2Vi
R0xFeHRlbnNpb25zRW5hYmxlZCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtIGZv
cm1hdCkKLXsKLSAgICBpZiAoIW1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmNvbnRhaW5zKGZv
cm1hdCkpCi0gICAgICAgIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmFwcGVuZChmb3JtYXQp
OwotfQotCi1XZWJHTFJlbmRlcmluZ0NvbnRleHQ6On5XZWJHTFJlbmRlcmluZ0NvbnRleHQoKQot
ewotICAgIC8vIFJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBXZWJHTE9iamVjdHMgc28gaWYgdGhl
eSBhcmUgdGhlIGxhc3QgcmVmZXJlbmNlCi0gICAgLy8gdGhleSB3aWxsIGJlIGZyZWVkIGJlZm9y
ZSB0aGUgbGFzdCBjb250ZXh0IGlzIHJlbW92ZWQgZnJvbSB0aGUgY29udGV4dCBncm91cC4KLSAg
ICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBudWxscHRyOwotICAgIG1fZGVmYXVsdFZlcnRleEFycmF5
T2JqZWN0ID0gbnVsbHB0cjsKLSAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBudWxscHRy
OwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlciA9IG51bGxwdHI7Ci0gICAgbV9jdXJyZW50UHJv
Z3JhbSA9IG51bGxwdHI7Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBudWxscHRyOwotICAg
IG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IG51bGxwdHI7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVu
aXRzW2ldLnRleHR1cmUyREJpbmRpbmcgPSBudWxscHRyOwotICAgICAgICBtX3RleHR1cmVVbml0
c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOwotICAgIH0KLQotICAgIG1fYmxh
Y2tUZXh0dXJlMkQgPSBudWxscHRyOwotICAgIG1fYmxhY2tUZXh0dXJlQ3ViZU1hcCA9IG51bGxw
dHI7Ci0KLSAgICBpZiAoIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgewotICAgICAgICBk
ZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7Ci0gICAgICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRl
eHQzRCgpOwotICAgICAgICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlQ29udGV4dCh0aGlzKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXN0cm95R3JhcGhpY3NDb250
ZXh0M0QoKQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFRoZSBkcmF3aW5nIGJ1ZmZlciBob2xkcyBhIGNvbnRleHQgcmVm
ZXJlbmNlLiBJdCBtdXN0IGFsc28gYmUgZGVzdHJveWVkCi0gICAgLy8gaW4gb3JkZXIgZm9yIHRo
ZSBjb250ZXh0IHRvIGJlIHJlbGVhc2VkLgotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci5jbGVhcigpOwotCi0gICAgaWYgKG1fY29udGV4dCkgewotICAg
ICAgICBtX2NvbnRleHQtPnNldENvbnRleHRMb3N0Q2FsbGJhY2sobnVsbHB0cik7Ci0gICAgICAg
IG1fY29udGV4dC0+c2V0RXJyb3JNZXNzYWdlQ2FsbGJhY2sobnVsbHB0cik7Ci0gICAgICAgIG1f
Y29udGV4dC5jbGVhcigpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
Om1hcmtDb250ZXh0Q2hhbmdlZCgpCi17Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPm1hcmtDb250ZXh0Q2hhbmdlZCgpOwot
Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5tYXJr
Q29udGVudHNDaGFuZ2VkKCk7Ci0KLSAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOwotICAgIFJl
bmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOwotICAgIGlmIChpc0Fj
Y2VsZXJhdGVkKCkgJiYgcmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpKSB7Ci0gICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOwotICAgICAg
ICBjYW52YXMoKS0+Y2xlYXJDb3BpZWRJbWFnZSgpOwotICAgICAgICByZW5kZXJCb3gtPmNvbnRl
bnRDaGFuZ2VkKENhbnZhc0NoYW5nZWQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghbV9t
YXJrZWRDYW52YXNEaXJ0eSkgewotICAgICAgICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IHRy
dWU7Ci0gICAgICAgICAgICBjYW52YXMoKS0+ZGlkRHJhdyhGbG9hdFJlY3QoRmxvYXRQb2ludCgw
LCAwKSwgY2xhbXBlZENhbnZhc1NpemUoKSkpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1ib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJJZkNvbXBvc2l0ZWQoR0MzRGJpdGZpZWxkIG1h
c2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgaWYgKCFtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpIHx8IG1fbGF5
ZXJDbGVhcmVkCi0gICAgICAgIHx8IG1fYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZmZXIg
fHwgKG1hc2sgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmcpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gY29udGV4dEF0dHJpYnV0ZXMg
PSBnZXRDb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIGl0J3MgcG9z
c2libGUgdG8gY29tYmluZSB0aGUgY2xlYXIgdGhlIHVzZXIgYXNrZWQgZm9yIGFuZCB0aGlzIGNs
ZWFyLgotICAgIGJvb2wgY29tYmluZWRDbGVhciA9IG1hc2sgJiYgIW1fc2Npc3NvckVuYWJsZWQ7
Ci0KLSAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVT
VCk7Ci0gICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQlVGRkVSX0JJVCkpCi0gICAgICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NvbG9y
TWFza1swXSA/IG1fY2xlYXJDb2xvclswXSA6IDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2NvbG9yTWFza1sxXSA/IG1fY2xlYXJDb2xvclsxXSA6IDAsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1syXSA/IG1fY2xlYXJDb2xvclsyXSA6IDAsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1szXSA/IG1fY2xlYXJDb2xv
clszXSA6IDApOwotICAgIGVsc2UKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAs
IDAsIDApOwotICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRydWUsIHRydWUp
OwotICAgIEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
QlVGRkVSX0JJVDsKLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPmRlcHRoKCkpIHsKLSAgICAg
ICAgaWYgKCFjb21iaW5lZENsZWFyIHx8ICFtX2RlcHRoTWFzayB8fCAhKG1hc2sgJiBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCkpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmNs
ZWFyRGVwdGgoMS4wZik7Ci0gICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfQlVGRkVSX0JJVDsKLSAgICAgICAgbV9jb250ZXh0LT5kZXB0aE1hc2sodHJ1ZSk7Ci0g
ICAgfQotICAgIGlmIChjb250ZXh0QXR0cmlidXRlcy0+c3RlbmNpbCgpKSB7Ci0gICAgICAgIGlm
IChjb21iaW5lZENsZWFyICYmIChtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVG
RkVSX0JJVCkpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3Rl
bmNpbCAmIG1fc3RlbmNpbE1hc2spOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NvbnRl
eHQtPmNsZWFyU3RlbmNpbCgwKTsKLSAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7Ci0gICAgICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tT
ZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIDB4RkZGRkZGRkYpOwotICAgIH0KLSAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNsZWFyRnJh
bWVidWZmZXJzKGNsZWFyTWFzayk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lYnVm
ZmVyQmluZGluZykKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7Ci0gICAgICAgIG1fY29udGV4dC0+Y2xlYXIo
Y2xlYXJNYXNrKTsKLSAgICB9Ci0KLSAgICByZXN0b3JlU3RhdGVBZnRlckNsZWFyKCk7Ci0gICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1l
YnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgIG1fbGF5ZXJDbGVhcmVkID0gdHJ1ZTsKLQotICAg
IHJldHVybiBjb21iaW5lZENsZWFyOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
cmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpCi17Ci0gICAgLy8gUmVzdG9yZSB0aGUgc3RhdGUgdGhh
dCB0aGUgY29udGV4dCBzZXQuCi0gICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCi0gICAgICAgIG1f
Y29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIG1f
Y29udGV4dC0+Y2xlYXJDb2xvcihtX2NsZWFyQ29sb3JbMF0sIG1fY2xlYXJDb2xvclsxXSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9jbGVhckNvbG9yWzJdLCBtX2NsZWFyQ29sb3JbM10p
OwotICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKG1fY29sb3JNYXNrWzBdLCBtX2NvbG9yTWFza1sx
XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9yTWFza1syXSwgbV9jb2xvck1hc2tb
M10pOwotICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChtX2NsZWFyRGVwdGgpOwotICAgIG1fY29u
dGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsKTsKLSAgICBtX2NvbnRleHQtPnN0ZW5j
aWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCBtX3N0ZW5jaWxNYXNrKTsK
LSAgICBtX2NvbnRleHQtPmRlcHRoTWFzayhtX2RlcHRoTWFzayk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5tYXJr
TGF5ZXJDb21wb3NpdGVkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGNhbnZhcygpLT5kb2N1bWVudCgp
LnByaW50aW5nKCkpCi0gICAgICAgIGNhbnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsK
LQotICAgIC8vIFVudGlsIHRoZSBjYW52YXMgaXMgd3JpdHRlbiB0byBieSB0aGUgYXBwbGljYXRp
b24sIHRoZSBjbGVhciB0aGF0Ci0gICAgLy8gaGFwcGVuZWQgYWZ0ZXIgaXQgd2FzIGNvbXBvc2l0
ZWQgc2hvdWxkIGJlIGlnbm9yZWQgYnkgdGhlIGNvbXBvc2l0b3IuCi0gICAgaWYgKG1fY29udGV4
dC0+bGF5ZXJDb21wb3NpdGVkKCkgJiYgIW1fYXR0cmlidXRlcy5wcmVzZXJ2ZURyYXdpbmdCdWZm
ZXIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5wYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMo
Y2FudmFzKCktPmJ1ZmZlcigpKTsKLQotICAgICAgICBjYW52YXMoKS0+bWFrZVByZXNlbnRhdGlv
bkNvcHkoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgY2FudmFzKCktPmNsZWFyUHJlc2VudGF0aW9u
Q29weSgpOwotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0KLSAgICBpZiAoIW1fbWFya2VkQ2Fu
dmFzRGlydHkgJiYgIW1fbGF5ZXJDbGVhcmVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjYW52
YXMoKS0+Y2xlYXJDb3BpZWRJbWFnZSgpOwotICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxz
ZTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
Y29tbWl0KCk7Ci0gICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhj
YW52YXMoKS0+YnVmZmVyKCksIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7Ci0KLSAgICBpZiAobV9k
cmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAg
ICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgIH0KLX0K
LQotUGFzc1JlZlB0cjxJbWFnZURhdGE+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7
Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21t
aXQoKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBtX2NvbnRleHQtPnBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7Ci0KLSAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZykKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgp
KSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwot
ICAgIH0KLQotICAgIHJldHVybiBpbWFnZURhdGE7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGlzIGlzIGFu
IGFwcHJveGltYXRpb24gYmVjYXVzZSBhdCBXZWJHTFJlbmRlcmluZ0NvbnRleHQgbGV2ZWwgd2Ug
ZG9uJ3QKLSAgICAvLyBrbm93IGlmIHRoZSB1bmRlcmx5aW5nIEZCTyB1c2VzIHRleHR1cmVzIG9y
IHJlbmRlcmJ1ZmZlcnMuCi0gICAgR0MzRGludCBtYXhTaXplID0gc3RkOjptaW4obV9tYXhUZXh0
dXJlU2l6ZSwgbV9tYXhSZW5kZXJidWZmZXJTaXplKTsKLSAgICAvLyBMaW1pdCBkcmF3aW5nIGJ1
ZmZlciBzaXplIHRvIDRrIHRvIGF2b2lkIG1lbW9yeSBleGhhdXN0aW9uLgotICAgIGNvbnN0IGlu
dCBzaXplVXBwZXJMaW1pdCA9IDQwOTY7Ci0gICAgbWF4U2l6ZSA9IHN0ZDo6bWluKG1heFNpemUs
IHNpemVVcHBlckxpbWl0KTsKLSAgICBHQzNEaW50IG1heFdpZHRoID0gc3RkOjptaW4obWF4U2l6
ZSwgbV9tYXhWaWV3cG9ydERpbXNbMF0pOwotICAgIEdDM0RpbnQgbWF4SGVpZ2h0ID0gc3RkOjpt
aW4obWF4U2l6ZSwgbV9tYXhWaWV3cG9ydERpbXNbMV0pOwotICAgIHdpZHRoID0gY2xhbXAod2lk
dGgsIDEsIG1heFdpZHRoKTsKLSAgICBoZWlnaHQgPSBjbGFtcChoZWlnaHQsIDEsIG1heEhlaWdo
dCk7Ci0KLSAgICBpZiAobV9uZWVkc1VwZGF0ZSkgewotICAgICAgICBSZW5kZXJCb3gqIHJlbmRl
ckJveCA9IGNhbnZhcygpLT5yZW5kZXJCb3goKTsKLSAgICAgICAgaWYgKHJlbmRlckJveCAmJiBy
ZW5kZXJCb3gtPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKLSAgICAgICAgICAgIHJlbmRl
ckJveC0+Y29udGVudENoYW5nZWQoQ2FudmFzQ2hhbmdlZCk7Ci0gICAgICAgIG1fbmVlZHNVcGRh
dGUgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBXZSBkb24ndCBoYXZlIHRvIG1hcmsgdGhlIGNh
bnZhcyBhcyBkaXJ0eSwgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2UgYnVmZmVyIHdpbGwg
YWxzbyBzdGFydCBvZmYKLSAgICAvLyBjbGVhciAoYW5kIHRoaXMgbWF0Y2hlcyB3aGF0IHJlc2hh
cGUgd2lsbCBkbykuCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBtX2RyYXdp
bmdCdWZmZXItPnJlc2V0KEludFNpemUod2lkdGgsIGhlaWdodCkpOwotICAgICAgICByZXN0b3Jl
U3RhdGVBZnRlckNsZWFyKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+cmVzaGFw
ZSh3aWR0aCwgaGVpZ2h0KTsKLQotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyhtX3RleHR1cmVVbml0c1ttX2FjdGl2
ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpKSk7Ci0gICAgbV9jb250ZXh0LT5i
aW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG9iamVjdE9y
WmVybyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICBpZiAobV9mcmFtZWJ1ZmZl
ckJpbmRpbmcpCi0gICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQo
KSkpOwotfQotCi1pbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3aW5nQnVmZmVyV2lkdGgo
KSBjb25zdAotewotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgIHJldHVybiBtX2Ry
YXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS53aWR0aCgpOwotfQotCi1pbnQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpkcmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3QKLXsKLSAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQotICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0
KCk7Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgp
LmhlaWdodCgpOwotfQotCi11bnNpZ25lZCBpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzaXpl
SW5CeXRlcyhHQzNEZW51bSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJZVEU6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRGJ5dGUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgIHJl
dHVybiBzaXplb2YoR0MzRHVieXRlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9S
VDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEc2hvcnQpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1c2hv
cnQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKLSAgICAgICAgcmV0dXJuIHNp
emVvZihHQzNEaW50KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6
Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRHVpbnQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RmbG9hdCk7Ci0gICAgfQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAodGV4dHVyZSAtIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCA+PSBtX3RleHR1cmVVbml0cy5zaXplKCkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImFj
dGl2ZVRleHR1cmUiLCAidGV4dHVyZSB1bml0IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIG1fYWN0aXZlVGV4dHVyZVVuaXQgPSB0ZXh0dXJlIC0gR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkUwOwotICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZSh0ZXh0dXJl
KTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
c2V0QWN0aXZlVGV4dHVyZVVuaXQodGV4dHVyZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciog
c2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImF0
dGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFk
ZXIiLCBzaGFkZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFwcm9ncmFtLT5hdHRhY2hT
aGFkZXIoc2hhZGVyKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJhdHRhY2hTaGFkZXIiLCAic2hhZGVyIGF0dGFjaG1l
bnQgYWxyZWFkeSBoYXMgc2hhZGVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9j
b250ZXh0LT5hdHRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmplY3RPclplcm8o
c2hhZGVyKSk7Ci0gICAgc2hhZGVyLT5vbkF0dGFjaGVkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBH
QzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImJpbmRBdHRyaWJMb2NhdGlvbiIsIHByb2dyYW0pKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJiaW5kQXR0
cmliTG9jYXRpb24iLCBuYW1lKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVT
dHJpbmcoImJpbmRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZEF0dHJpYkxvY2F0aW9u
IiwgInJlc2VydmVkIHByZWZpeCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChp
bmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJiaW5kQXR0cmliTG9jYXRpb24iLCAi
aW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jb250
ZXh0LT5iaW5kQXR0cmliTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgbmFt
ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja09iamVjdFRvQmVCb3Vu
ZChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiBvYmplY3QsIGJvb2wmIGRl
bGV0ZWQpCi17Ci0gICAgZGVsZXRlZCA9IGZhbHNlOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAob2JqZWN0KSB7Ci0gICAg
ICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGRlbGV0ZWQgPSAhb2Jq
ZWN0LT5vYmplY3QoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIq
IGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBib29sIGRlbGV0ZWQ7Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZEJ1ZmZl
ciIsIGJ1ZmZlciwgZGVsZXRlZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZGVsZXRlZCkK
LSAgICAgICAgYnVmZmVyID0gMDsKLSAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0
KCkgJiYgYnVmZmVyLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZEJ1ZmZl
ciIsICJidWZmZXJzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpBUlJBWV9CVUZGRVIpCi0gICAgICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IGJ1ZmZlcjsKLSAg
ICBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVG
RkVSKQotICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldEVsZW1lbnRBcnJheUJ1
ZmZlcihidWZmZXIpOwotICAgIGVsc2UgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEJ1ZmZlciIsICJpbnZhbGlkIHRhcmdl
dCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVy
KHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwotICAgIGlmIChidWZmZXIpCi0gICAgICAg
IGJ1ZmZlci0+c2V0VGFyZ2V0KHRhcmdldCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiBi
dWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
Ym9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRGcmFtZWJ1
ZmZlciIsIGJ1ZmZlciwgZGVsZXRlZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZGVsZXRl
ZCkKLSAgICAgICAgYnVmZmVyID0gMDsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEZyYW1lYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSBi
dWZmZXI7Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcob2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5n
LmdldCgpKSk7Ci0gICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZm
ZXIpIHsKLSAgICAgICAgLy8gSW5zdGVhZCBvZiBiaW5kaW5nIGZiIDAsIGJpbmQgdGhlIGRyYXdp
bmcgYnVmZmVyLgotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8o
YnVmZmVyKSk7Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAgICAgYnVmZmVyLT5zZXRIYXNFdmVyQmVl
bkJvdW5kKCk7Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6YmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMUmVuZGVy
YnVmZmVyKiByZW5kZXJCdWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91
bmQoImJpbmRSZW5kZXJidWZmZXIiLCByZW5kZXJCdWZmZXIsIGRlbGV0ZWQpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIHJlbmRlckJ1ZmZlciA9IDA7Ci0gICAg
aWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5k
UmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gcmVuZGVyQnVmZmVyOwotICAgIG1fY29udGV4
dC0+YmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhyZW5kZXJCdWZmZXIpKTsK
LSAgICBpZiAocmVuZGVyQnVmZmVyKQotICAgICAgICByZW5kZXJCdWZmZXItPnNldEhhc0V2ZXJC
ZWVuQm91bmQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRUZXh0dXJl
KEdDM0RlbnVtIHRhcmdldCwgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAo
IWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kVGV4dHVyZSIsIHRleHR1cmUsIGRlbGV0ZWQpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIHRleHR1cmUgPSAwOwot
ICAgIGlmICh0ZXh0dXJlICYmIHRleHR1cmUtPmdldFRhcmdldCgpICYmIHRleHR1cmUtPmdldFRh
cmdldCgpICE9IHRhcmdldCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kVGV4dHVyZSIsICJ0ZXh0dXJlcyBjYW4g
bm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSB0YXJnZXRzIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgR0MzRGludCBtYXhMZXZlbCA9IDA7Ci0gICAgaWYgKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCkgewotICAgICAgICBtX3RleHR1cmVVbml0c1ttX2FjdGl2
ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nID0gdGV4dHVyZTsKLSAgICAgICAgbWF4TGV2
ZWwgPSBtX21heFRleHR1cmVMZXZlbDsKLQotICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyICYm
ICFtX2FjdGl2ZVRleHR1cmVVbml0KQotICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRU
ZXh0dXJlMkRCaW5kaW5nKG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7Ci0KLSAgICB9IGVsc2UgaWYg
KHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCkgewotICAgICAg
ICBtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRp
bmcgPSB0ZXh0dXJlOwotICAgICAgICBtYXhMZXZlbCA9IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZl
bDsKLSAgICB9IGVsc2UgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZFRleHR1cmUiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHRhcmdldCwg
b2JqZWN0T3JaZXJvKHRleHR1cmUpKTsKLSAgICBpZiAodGV4dHVyZSkKLSAgICAgICAgdGV4dHVy
ZS0+c2V0VGFyZ2V0KHRhcmdldCwgbWF4TGV2ZWwpOwotCi0gICAgLy8gTm90ZTogcHJldmlvdXNs
eSB3ZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBURVhUVVJFX1dSQVBfUgotICAgIC8v
IHJlcGVhdCBtb2RlIHRvIENMQU1QX1RPX0VER0UgZm9yIGN1YmUgbWFwIHRleHR1cmVzLCBiZWNh
dXNlIE9wZW5HTAotICAgIC8vIEVTIDIuMCBkb2Vzbid0IGV4cG9zZSB0aGlzIGZsYWcgKGEgYnVn
IGluIHRoZSBzcGVjaWZpY2F0aW9uKSBhbmQKLSAgICAvLyBvdGhlcndpc2UgdGhlIGFwcGxpY2F0
aW9uIGhhcyBubyBjb250cm9sIG92ZXIgdGhlIHNlYW1zIGluIHRoaXMKLSAgICAvLyBkaW1lbnNp
b24uIEhvd2V2ZXIsIGl0IGFwcGVhcnMgdGhhdCBzdXBwb3J0aW5nIHRoaXMgcHJvcGVybHkgb24g
YWxsCi0gICAgLy8gcGxhdGZvcm1zIGlzIGZhaXJseSBpbnZvbHZlZCAod2lsbCByZXF1aXJlIGEg
SGFzaE1hcCBmcm9tIHRleHR1cmUgSUQKLSAgICAvLyBpbiBhbGwgcG9ydHMpLCBhbmQgd2UgaGF2
ZSBub3QgaGFkIGFueSBjb21wbGFpbnRzLCBzbyB0aGUgbG9naWMgaGFzCi0gICAgLy8gYmVlbiBy
ZW1vdmVkLgotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRDb2xvcihHQzNE
ZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxw
aGEpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fY29udGV4dC0+YmxlbmRDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1v
ZGUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVu
ZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NvbnRleHQtPmJsZW5kRXF1YXRpb24obW9kZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0g
bW9kZUFscGhhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGVSR0IpIHx8ICF2YWxpZGF0ZUJs
ZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlQWxwaGEpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhh
KTsKLX0KLQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRGdW5jKEdDM0RlbnVt
IHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMiLCBzZmFjdG9y
LCBkZmFjdG9yKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKHNm
YWN0b3IsIGRmYWN0b3IpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRG
dW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNy
Y0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKLXsKLSAgICAvLyBOb3RlOiBBbHBoYSBkb2VzIG5v
dCBoYXZlIHRoZSBzYW1lIHJlc3RyaWN0aW9ucyBhcyBSR0IuCi0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMiLCBz
cmNSR0IsIGRzdFJHQikpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kRnVu
Y1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcg
bG9uZyBzaXplLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBh
cmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKLSAgICBpZiAoIWJ1ZmZlcikK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmIChzaXplIDwgMCkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAi
c2l6ZSA8IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXNpemUpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJidWZmZXJEYXRhIiwgInNpemUgPT0gMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAg
IGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKHN0YXRpY19jYXN0PEdDM0RzaXplaXB0
cj4oc2l6ZSkpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92
ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRh
KHRhcmdldCwgc3RhdGljX2Nhc3Q8R0MzRHNpemVpcHRyPihzaXplKSwgdXNhZ2UpOwotICAgIGlm
IChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAg
IC8vIFRoZSBidWZmZXJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRv
ZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KLSAgICAgICAgYnVmZmVyLT5k
aXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBH
QzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0g
ICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1
ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmICghZGF0YSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3Vu
ZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRh
KGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVy
cm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRh
cmdldCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5kYXRhKCksIHVzYWdlKTsKLSAgICBpZiAo
bV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAv
LyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vz
bid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlz
YXNzb2NpYXRlQnVmZmVyRGF0YSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEs
IEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygi
YnVmZmVyRGF0YSIsIHRhcmdldCwgdXNhZ2UpOwotICAgIGlmICghYnVmZmVyKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCFkYXRhKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJubyBkYXRhIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJv
dW5kc0FjY2Vzc2VzKCkpIHsKLSAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRh
dGEoZGF0YSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5tb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEo
dGFyZ2V0LCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCksIHVzYWdlKTsK
LSAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewot
ICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZl
ciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMuCi0gICAgICAgIGJ1
ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcg
b2Zmc2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBh
cmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFU
SUNfRFJBVyk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAob2Zm
c2V0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICgh
YnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9m
ZnNldCksIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiBy
YW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbV9j
b250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX2NvbnRleHQt
PmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBk
YXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmRhdGEoKSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92
ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlclN1
YkRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRo
ZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1
ZmZlckRhdGEoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZm
ZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJW
aWV3KiBkYXRhLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBX
ZWJHTEJ1ZmZlciogYnVmZmVyID0gdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVy
U3ViRGF0YSIsIHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKLSAgICBp
ZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChvZmZzZXQgPCAwKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
YnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgPCAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKCFkYXRhKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVk
T25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKLSAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0
ZUJ1ZmZlclN1YkRhdGEoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YSkpIHsK
LSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YSh0
YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEtPmJ5dGVMZW5ndGgo
KSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlclN1YkRhdGEgZnVu
Y3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0
IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEo
KTsKLSAgICB9Ci19Ci0KLUdDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRDsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyIsICJpbnZhbGlkIHRhcmdldCIp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGlu
ZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQotICAgICAgICByZXR1cm4gR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFOwotICAgIGNvbnN0IGNoYXIqIHJl
YXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBHQzNEZW51bSByZXN1bHQgPSBt
X2ZyYW1lYnVmZmVyQmluZGluZy0+Y2hlY2tTdGF0dXMoJnJlYXNvbik7Ci0gICAgaWYgKHJlc3Vs
dCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKLSAgICAgICAg
cHJpbnRHTFdhcm5pbmdUb0NvbnNvbGUoImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCByZWFzb24p
OwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICByZXN1bHQgPSBtX2NvbnRleHQt
PmNoZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChtYXNrICYgfihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQlVGRkVSX0JJVCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjbGVhciIsICJpbnZhbGlkIG1hc2siKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5j
b21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVy
QmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCks
ICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNsZWFyIiwgcmVhc29uKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWNsZWFySWZDb21wb3NpdGVkKG1hc2spKQotICAg
ICAgICBtX2NvbnRleHQtPmNsZWFyKG1hc2spOwotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJDb2xvcihHQzNEZmxvYXQgciwg
R0MzRGZsb2F0IGcsIEdDM0RmbG9hdCBiLCBHQzNEZmxvYXQgYSkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHN0ZDo6aXNuYW4o
cikpCi0gICAgICAgIHIgPSAwOwotICAgIGlmIChzdGQ6OmlzbmFuKGcpKQotICAgICAgICBnID0g
MDsKLSAgICBpZiAoc3RkOjppc25hbihiKSkKLSAgICAgICAgYiA9IDA7Ci0gICAgaWYgKHN0ZDo6
aXNuYW4oYSkpCi0gICAgICAgIGEgPSAxOwotICAgIG1fY2xlYXJDb2xvclswXSA9IHI7Ci0gICAg
bV9jbGVhckNvbG9yWzFdID0gZzsKLSAgICBtX2NsZWFyQ29sb3JbMl0gPSBiOwotICAgIG1fY2xl
YXJDb2xvclszXSA9IGE7Ci0gICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKHIsIGcsIGIsIGEpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJEZXB0aChHQzNEZmxvYXQgZGVw
dGgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fY2xlYXJEZXB0aCA9IGRlcHRoOwotICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChk
ZXB0aCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVhclN0ZW5jaWwoR0Mz
RGludCBzKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX2NsZWFyU3RlbmNpbCA9IHM7Ci0gICAgbV9jb250ZXh0LT5jbGVhclN0ZW5j
aWwocyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb2xvck1hc2soR0MzRGJv
b2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xl
YW4gYWxwaGEpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIG1fY29sb3JNYXNrWzBdID0gcmVkOwotICAgIG1fY29sb3JNYXNrWzFdID0g
Z3JlZW47Ci0gICAgbV9jb2xvck1hc2tbMl0gPSBibHVlOwotICAgIG1fY29sb3JNYXNrWzNdID0g
YWxwaGE7Ci0gICAgbV9jb250ZXh0LT5jb2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcGlsZVNoYWRlcihXZWJHTFNo
YWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoImNvbXBpbGVTaGFkZXIiLCBzaGFkZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250
ZXh0LT5jb21waWxlU2hhZGVyKG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAgICBHQzNEaW50IHZh
bHVlOwotICAgIG1fY29udGV4dC0+Z2V0U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRlciksIEdy
YXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUywgJnZhbHVlKTsKLSAgICBzaGFkZXItPnNl
dFZhbGlkKHZhbHVlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvbXByZXNz
ZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
QXJyYXlCdWZmZXJWaWV3KiBkYXRhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21w
cmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChpbnRlcm5hbGZvcm1hdCkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoYm9yZGVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29tcHJlc3NlZFRleElt
YWdlMkQiLCAiYm9yZGVyIG5vdCAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYg
KCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIs
IHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0KSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoImNvbXByZXNz
ZWRUZXhJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCwgaW50ZXJuYWxmb3JtYXQsIGRhdGEpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoIXRl
eCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkgewotICAg
ICAgICBpZiAobGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdodCkpIHsK
LSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCAiY29tcHJlc3NlZFRleEltYWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAy
Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9jb250ZXh0
LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmNvbXBy
ZXNzZWRUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVp
Z2h0LAotICAgICAgICBib3JkZXIsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJl
c3MoKSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0
KCkpIHsKLSAgICAgICAgLy8gVGhlIGNvbXByZXNzZWRUZXhJbWFnZTJEIGZ1bmN0aW9uIGZhaWxl
ZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBmb3IgdGhp
cyBsZXZlbC4KLSAgICAgICAgdGV4LT5tYXJrSW52YWxpZCh0YXJnZXQsIGxldmVsKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSk7Ci0gICAgdGV4LT5zZXRDb21wcmVzc2VkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIGRh
dGEpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jTGV2ZWwoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJE
IiwgdGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlQ29t
cHJlc3NlZFRleEZvcm1hdChmb3JtYXQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIs
ICJpbnZhbGlkIGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFs
aWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCBkYXRhKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViR0xU
ZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChmb3JtYXQgIT0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJmb3JtYXQgZG9lcyBub3QgbWF0
Y2ggdGV4dHVyZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICgh
dmFsaWRhdGVDb21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucygiY29tcHJlc3NlZFRleFN1YkltYWdl
MkQiLCB0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHRleCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGdyYXBoaWNzQ29udGV4dDNEKCktPmNv
bXByZXNzZWRUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwot
ICAgIHRleC0+c2V0Q29tcHJlc3NlZCgpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIGZvcm1hdCkKLXsKLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OmdldENsZWFyQml0
c0J5Rm9ybWF0KGZvcm1hdCkgJiAoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQg
fCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgImZvcm1hdCBjYW4gbm90IGJlIHNldCwgb25seSByZW5kZXJlZCB0byIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHks
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCi17Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
ICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygiY29weVRleEltYWdlMkQiLCBOb3RUZXhTdWJJ
bWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5
VGV4SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdM
VGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29weVRleEltYWdlMkQiLCB0
YXJnZXQsIHRydWUpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFp
c1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9y
bWF0LCBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRl
eEltYWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAm
JiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhJbWFn
ZTJEIiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFj
Y2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCByZWFzb24pOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVzb3Vy
Y2VTYWZlKCkpIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9k
cmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAg
IG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU2Nv
cGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2Zy
YW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBw
ZWRZOwotICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwotICAg
ICAgICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJX
aWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZ
LCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4
dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludGVybmFsZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgbV91bnBhY2tBbGlnbm1lbnQpOwotICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+
IDAgJiYgY2xpcHBlZEhlaWdodCA+IDApIHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNv
cHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGNsaXBwZWRYIC0geCwgY2xpcHBlZFkgLSB5
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgs
IGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7
Ci0gICAgfQotICAgIC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRl
LCBub25lIG9mIHRoZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0ZWQuCi0gICAgdGV4LT5zZXRMZXZl
bEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5j
TGV2ZWwoImNvcHlUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvcHlU
ZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmICghdmFsaWRhdGVTaXplKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQs
IHlvZmZzZXQpIHx8ICF2YWxpZGF0ZVNpemUoImNvcHlUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhl
aWdodCkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBCZWZvcmUgY2hlY2tpbmcgaWYgaXQgaXMg
aW4gdGhlIHJhbmdlLCBjaGVjayBpZiBvdmVyZmxvdyBoYXBwZW5zIGZpcnN0LgotICAgIGlmICh4
b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlvZmZzZXQgKyBoZWlnaHQgPCAwKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRl
eFN1YkltYWdlMkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBpZiAoeG9mZnNldCArIHdpZHRoID4gdGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8
fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJyZWN0YW5nbGUgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQgPSB0ZXgtPmdldElu
dGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRl
eEZvcm1hdCgiY29weVRleFN1YkltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9u
VmFsaWQoaW50ZXJuYWxmb3JtYXQsIGdldEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGli
bGUgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVh
c29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNE
KCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJj
b3B5VGV4U3ViSW1hZ2UyRCIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
Y2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkgewotICAgICAg
ICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCks
IG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKLSAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVk
WTsKLSAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKLSAgICAg
ICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lk
dGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwg
JmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7Ci0gICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQgPSB0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpOwotICAgICAgICAg
ICAgR0MzRGVudW0gdHlwZSA9IHRleC0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKTsKLSAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjx1bnNpZ25lZCBjaGFyW10+IHplcm87Ci0gICAgICAgICAgICBp
ZiAod2lkdGggJiYgaGVpZ2h0KSB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemU7
Ci0gICAgICAgICAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFn
ZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1l
bnQsICZzaXplLCAwKTsKLSAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KGVycm9yLCAiY29weVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB6
ZXJvID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZCBjaGFyW10+KHNpemUpOwotICAgICAgICAg
ICAgICAgIGlmICghemVybykgewotICAgICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwg
Im91dCBvZiBtZW1vcnkiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6
ZXJvLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRI
ZWlnaHQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBi
aW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7
Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0ICsgY2xpcHBlZFggLSB4LCB5b2Zmc2V0ICsgY2xpcHBlZFkgLSB5LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBw
ZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIo
bV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAg
ICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci1QYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUJ1
ZmZlcigpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBvID0gV2ViR0xCdWZmZXI6OmNy
ZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87
Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+
IG8gPSBXZWJHTEZyYW1lYnVmZmVyOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkQ29udGV4dE9iamVj
dChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRy
PFdlYkdMVGV4dHVyZT4gbyA9IFdlYkdMVGV4dHVyZTo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZFNo
YXJlZE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJH
TFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgUmVmUHRyPFdlYkdMUHJvZ3JhbT4gbyA9IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKHRoaXMpOwot
ICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1Jl
ZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVSZW5k
ZXJidWZmZXIoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbyA9IFdlYkdM
UmVuZGVyYnVmZmVyOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkp
OwotICAgIHJldHVybiBvOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICh0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJURVhfU0hBREVSICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QUdNRU5UX1NIQURFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiY3JlYXRlU2hhZGVyIiwgImludmFsaWQgc2hhZGVyIHR5cGUi
KTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYkdMU2hh
ZGVyPiBvID0gV2ViR0xTaGFkZXI6OmNyZWF0ZSh0aGlzLCB0eXBlKTsKLSAgICBhZGRTaGFyZWRP
YmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmN1bGxGYWNlKG1v
ZGUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRlT2JqZWN0KFdlYkdM
T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
b2JqZWN0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCFvYmplY3QtPnZhbGlkYXRl
KGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZWxldGUiLCAib2JqZWN0IGRvZXMg
bm90IGJlbG9uZyB0byB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBpZiAob2JqZWN0LT5vYmplY3QoKSkKLSAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNz
IGluIGNvbnRleHQgaGVyZSBiZWNhdXNlIHdlIHdhbnQKLSAgICAgICAgLy8gdGhpbmdzIGluIHRo
aXMgY29udGV4dCB1bmJvdW5kLgotICAgICAgICBvYmplY3QtPmRlbGV0ZU9iamVjdChncmFwaGlj
c0NvbnRleHQzRCgpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQotewotICAgIGlmICgh
ZGVsZXRlT2JqZWN0KGJ1ZmZlcikpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobV9ib3VuZEFy
cmF5QnVmZmVyID09IGJ1ZmZlcikKLSAgICAgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gMDsKLQot
ICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+dW5iaW5kQnVmZmVyKGJ1ZmZlcik7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1l
YnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdChmcmFtZWJ1ZmZl
cikpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcpIHsKLSAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwotICAgICAgICBp
ZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZy
YW1lYnVmZmVyQmluZGluZygwKTsKLSAgICAgICAgICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJh
bWVidWZmZXIgaGVyZSB0byBiaW5kIGJhY2sgdG8gaW50ZXJuYWwgZmJvLgotICAgICAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAw
KTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVQcm9ncmFt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkKLXsKLSAgICBkZWxldGVPYmplY3QocHJvZ3JhbSk7Ci0g
ICAgLy8gV2UgZG9uJ3QgcmVzZXQgbV9jdXJyZW50UHJvZ3JhbSB0byAwIGhlcmUgYmVjYXVzZSB0
aGUgZGVsZXRpb24gb2YgdGhlCi0gICAgLy8gY3VycmVudCBwcm9ncmFtIGlzIGRlbGF5ZWQuCi19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xS
ZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdChyZW5k
ZXJidWZmZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHJlbmRlcmJ1ZmZlciA9PSBtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7Ci0g
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGlu
Zy0+cmVtb3ZlQXR0YWNobWVudEZyb21Cb3VuZEZyYW1lYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIq
IHNoYWRlcikKLXsKLSAgICBkZWxldGVPYmplY3Qoc2hhZGVyKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQotewot
ICAgIGlmICghZGVsZXRlT2JqZWN0KHRleHR1cmUpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraSkgewotICAgICAg
ICBpZiAodGV4dHVyZSA9PSBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nKQotICAg
ICAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZTJEQmluZGluZyA9IG51bGxwdHI7Ci0g
ICAgICAgIGlmICh0ZXh0dXJlID09IG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmlu
ZGluZykKLSAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGlu
ZyA9IG51bGxwdHI7Ci0gICAgfQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAg
ICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1
ZmZlcih0ZXh0dXJlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVu
YyhHQzNEZW51bSBmdW5jKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmRlcHRoRnVuYyhmdW5jKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2RlcHRoTWFzayA9IGZsYWc7Ci0gICAgbV9jb250ZXh0LT5kZXB0aE1hc2soZmxhZyk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aFJhbmdlKEdDM0RmbG9hdCB6TmVhciwg
R0MzRGZsb2F0IHpGYXIpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICh6TmVhciA+IHpGYXIpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVwdGhSYW5n
ZSIsICJ6TmVhciA+IHpGYXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRl
eHQtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNo
YWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRh
Y2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVy
Iiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghcHJvZ3JhbS0+ZGV0YWNoU2hh
ZGVyKHNoYWRlcikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGV0YWNoU2hhZGVyIiwgInNoYWRlciBub3QgYXR0YWNo
ZWQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRl
cihvYmplY3RPclplcm8ocHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAgICBzaGFk
ZXItPm9uRGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoImRpc2FibGUiLCBjYXApKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJ
TF9URVNUKSB7Ci0gICAgICAgIG1fc3RlbmNpbEVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgYXBw
bHlTdGVuY2lsVGVzdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjYXAgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewotICAgICAgICBtX3NjaXNzb3JFbmFi
bGVkID0gZmFsc2U7Ci0gICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOwotICAg
IH0KLSAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4
VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheSIsICJpbmRleCBv
dXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIFdlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOwotICAgIHN0YXRlLmVuYWJs
ZWQgPSBmYWxzZTsKLQotICAgIGlmIChpbmRleCA+IDAgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQot
ICAgICAgICBtX2NvbnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0K
LWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoR0Mz
RHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBS
ZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgCi0gICAgaWYgKCFlbGVtZW50
QXJyYXlCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChvZmZzZXQgPCAw
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UKSB7Ci0gICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBpbnQgYXJy
YXksIG9mZnNldCBtdXN0IGJlIGRpdmlzaWJsZSBieSA0IGZvciBhbGlnbm1lbnQgcmVhc29ucy4K
LSAgICAgICAgaWYgKG9mZnNldCAlIDQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICBvZmZzZXQg
Lz0gNDsKLQotICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0
ZUxlbmd0aCgpIC8gNDsKLSAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zm
c2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQpIHsKLSAgICAgICAgLy8gRm9yIGFuIHVu
c2lnbmVkIHNob3J0IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUgYnkgMiBmb3IgYWxp
Z25tZW50IHJlYXNvbnMuCi0gICAgICAgIGlmIChvZmZzZXQgJSAyKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4K
LSAgICAgICAgb2Zmc2V0IC89IDI7Ci0KLSAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVtZW50
QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDI7Ci0gICAgICAgIGlmIChvZmZzZXQgPiBuIHx8
IGNvdW50ID4gbiAtIG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAg
ICAgR0MzRHNpemVpcHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKLSAg
ICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0
eXBlLCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKLXsKLSAgICAvLyBQZXJmb3JtcyBj
b25zZXJ2YXRpdmUgdmFsaWRhdGlvbiBieSBjYWNoaW5nIGEgbWF4aW11bSBpbmRleCBvZgotICAg
IC8vIHRoZSBnaXZlbiB0eXBlIHBlciBlbGVtZW50IGFycmF5IGJ1ZmZlci4gSWYgYWxsIG9mIHRo
ZSBib3VuZAotICAgIC8vIGFycmF5IGJ1ZmZlcnMgaGF2ZSBlbm91Z2ggZWxlbWVudHMgdG8gc2F0
aXNmeSB0aGF0IG1heGltdW0KLSAgICAvLyBpbmRleCwgc2tpcHMgdGhlIGV4cGVuc2l2ZSBwZXIt
ZHJhdy1jYWxsIGl0ZXJhdGlvbiBpbgotICAgIC8vIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2Uu
Ci0gICAgCi0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2Jv
dW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotCi0gICAgaWYg
KCFlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdDM0Rz
aXplaXB0ciBudW1FbGVtZW50cyA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwot
ICAgIC8vIFRoZSBjYXNlIGNvdW50PT0wIGlzIGFscmVhZHkgZGVhbHQgd2l0aCBpbiBkcmF3RWxl
bWVudHMgYmVmb3JlIHZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZS4KLSAgICBpZiAoIW51
bUVsZW1lbnRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY29uc3QgQXJyYXlCdWZmZXIq
IGJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAg
QVNTRVJUKGJ1ZmZlcik7Ci0KLSAgICBpbnQgbWF4SW5kZXggPSBlbGVtZW50QXJyYXlCdWZmZXIt
PmdldENhY2hlZE1heEluZGV4KHR5cGUpOwotICAgIGlmIChtYXhJbmRleCA8IDApIHsKLSAgICAg
ICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSBpbmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZlciBmb3Ig
dGhlIGdpdmVuIHR5cGUgb2YgaW5kZXguCi0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOiB7Ci0gICAgICAgICAgICBj
b25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihidWZmZXIt
PmRhdGEoKSk7Ci0gICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVs
ZW1lbnRzOyBpKyspCi0gICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRl
eCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDogewotICAg
ICAgICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9mKEdDM0R1c2hvcnQpOwotICAgICAgICAgICAg
Y29uc3QgR0MzRHVzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQqPihidWZm
ZXItPmRhdGEoKSk7Ci0gICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51
bUVsZW1lbnRzOyBpKyspCi0gICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJ
bmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6IHsKLSAg
ICAgICAgICAgIGlmICghbV9vZXNFbGVtZW50SW5kZXhVaW50KQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNEdWludCk7
Ci0gICAgICAgICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1
aW50Kj4oYnVmZmVyLT5kYXRhKCkpOwotICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWlwdHIgaSA9
IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQotICAgICAgICAgICAgICAgIG1heEluZGV4ID0gc3Rk
OjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBlbGVtZW50QXJyYXlCdWZmZXItPnNldENhY2hlZE1heElu
ZGV4KHR5cGUsIG1heEluZGV4KTsKLSAgICB9Ci0KLSAgICBpZiAobWF4SW5kZXggPj0gMCkgewot
ICAgICAgICAvLyBUaGUgbnVtYmVyIG9mIHJlcXVpcmVkIGVsZW1lbnRzIGlzIG9uZSBtb3JlIHRo
YW4gdGhlIG1heGltdW0KLSAgICAgICAgLy8gaW5kZXggdGhhdCB3aWxsIGJlIGFjY2Vzc2VkLgot
ICAgICAgICBudW1FbGVtZW50c1JlcXVpcmVkID0gbWF4SW5kZXggKyAxOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwg
R0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50c1Jl
cXVpcmVkKQotewotICAgIEFTU0VSVChjb3VudCA+PSAwICYmIG9mZnNldCA+PSAwKTsKLSAgICB1
bnNpZ25lZCBsYXN0SW5kZXggPSAwOwotICAgIAotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxl
bWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJy
YXlCdWZmZXIoKTsKLQotICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAgIG51bUVsZW1lbnRzUmVxdWly
ZWQgPSAwOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWVsZW1lbnRB
cnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHVuc2lnbmVkIGxvbmcgdW9mZnNldCA9IG9mZnNldDsKLSAgICB1bnNpZ25lZCBsb25n
IG4gPSBjb3VudDsKLQotICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9JTlQpIHsKLSAgICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgotICAg
ICAgICB1b2Zmc2V0IC89IHNpemVvZihHQzNEdWludCk7Ci0gICAgICAgIGNvbnN0IEdDM0R1aW50
KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVpbnQqPihlbGVtZW50QXJyYXlCdWZmZXItPmVs
ZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpICsgdW9mZnNldDsKLSAgICAgICAgd2hpbGUgKG4t
LSA+IDApIHsKLSAgICAgICAgICAgIGlmICgqcCA+IGxhc3RJbmRleCkKLSAgICAgICAgICAgICAg
ICBsYXN0SW5kZXggPSAqcDsKLSAgICAgICAgICAgICsrcDsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQpIHsKLSAgICAg
ICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICB1b2Zmc2V0IC89
IHNpemVvZihHQzNEdXNob3J0KTsKLSAgICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0YXRp
Y19jYXN0PGNvbnN0IEdDM0R1c2hvcnQqPihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJh
eUJ1ZmZlcigpLT5kYXRhKCkpICsgdW9mZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsK
LSAgICAgICAgICAgIGlmICgqcCA+IGxhc3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5k
ZXggPSAqcDsKLSAgICAgICAgICAgICsrcDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAgICBjb25zdCBH
QzNEdWJ5dGUqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihlbGVtZW50QXJyYXlC
dWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpICsgdW9mZnNldDsKLSAgICAgICAg
d2hpbGUgKG4tLSA+IDApIHsKLSAgICAgICAgICAgIGlmICgqcCA+IGxhc3RJbmRleCkKLSAgICAg
ICAgICAgICAgICBsYXN0SW5kZXggPSAqcDsKLSAgICAgICAgICAgICsrcDsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIC8vIFRoZW4gc2V0IHRoZSBsYXN0IGluZGV4IGluIHRoZSBpbmRleCBhcnJh
eSBhbmQgbWFrZSBzdXJlIGl0IGlzIHZhbGlkLgotICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSBs
YXN0SW5kZXggKyAxOwotICAgIHJldHVybiBudW1FbGVtZW50c1JlcXVpcmVkID4gMDsKLX0KLQot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyh1bnNp
Z25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2ZUNvdW50KQotewotICAgIGlmICgh
bV9jdXJyZW50UHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTG9vayBp
biBlYWNoIGVuYWJsZWQgdmVydGV4IGF0dHJpYiBhbmQgY2hlY2sgaWYgdGhleSd2ZSBiZWVuIGJv
dW5kIHRvIGEgYnVmZmVyLgotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21heFZlcnRl
eEF0dHJpYnM7ICsraSkgewotICAgICAgICBpZiAoIW1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+
Z2V0VmVydGV4QXR0cmliU3RhdGUoaSkudmFsaWRhdGVCaW5kaW5nKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGVsZW1lbnRDb3VudCA8PSAwKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQotCi0gICAgLy8gTG9vayBpbiBlYWNoIGNvbnN1bWVkIHZlcnRleCBh
dHRyaWIgKGJ5IHRoZSBjdXJyZW50IHByb2dyYW0pLgotICAgIGJvb2wgc2F3Tm9uSW5zdGFuY2Vk
QXR0cmliID0gZmFsc2U7Ci0gICAgYm9vbCBzYXdFbmFibGVkQXR0cmliID0gZmFsc2U7Ci0gICAg
aW50IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucyA9IG1fY3VycmVudFByb2dyYW0tPm51bUFjdGl2
ZUF0dHJpYkxvY2F0aW9ucygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQWN0aXZlQXR0
cmliTG9jYXRpb25zOyArK2kpIHsKLSAgICAgICAgaW50IGxvYyA9IG1fY3VycmVudFByb2dyYW0t
PmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKGkpOwotICAgICAgICBpZiAobG9jID49IDAgJiYgbG9j
IDwgc3RhdGljX2Nhc3Q8aW50PihtX21heFZlcnRleEF0dHJpYnMpKSB7Ci0gICAgICAgICAgICBj
b25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUg
PSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGxvYyk7Ci0g
ICAgICAgICAgICBpZiAoc3RhdGUuZW5hYmxlZCkgewotICAgICAgICAgICAgICAgIHNhd0VuYWJs
ZWRBdHRyaWIgPSB0cnVlOwotICAgICAgICAgICAgICAgIC8vIEF2b2lkIG9mZi1ieS1vbmUgZXJy
b3JzIGluIG51bUVsZW1lbnRzIGNvbXB1dGF0aW9uLgotICAgICAgICAgICAgICAgIC8vIEZvciB0
aGUgbGFzdCBlbGVtZW50LCB3ZSB3aWxsIG9ubHkgdG91Y2ggdGhlIGRhdGEgZm9yIHRoZQotICAg
ICAgICAgICAgICAgIC8vIGVsZW1lbnQgYW5kIG5vdGhpbmcgYmV5b25kIGl0LgotICAgICAgICAg
ICAgICAgIGludCBieXRlc1JlbWFpbmluZyA9IHN0YXRpY19jYXN0PGludD4oc3RhdGUuYnVmZmVy
QmluZGluZy0+Ynl0ZUxlbmd0aCgpIC0gc3RhdGUub2Zmc2V0KTsKLSAgICAgICAgICAgICAgICB1
bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHN0YXRlLnN0
cmlkZSA+IDApOwotICAgICAgICAgICAgICAgIGlmIChieXRlc1JlbWFpbmluZyA+PSBzdGF0ZS5i
eXRlc1BlckVsZW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIG51bUVsZW1lbnRzID0gMSArIChi
eXRlc1JlbWFpbmluZyAtIHN0YXRlLmJ5dGVzUGVyRWxlbWVudCkgLyBzdGF0ZS5zdHJpZGU7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFzdGF0ZS5kaXZpc29yKQotICAgICAgICAgICAgICAgICAgICBz
YXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmICgoIXN0YXRl
LmRpdmlzb3IgJiYgZWxlbWVudENvdW50ID4gbnVtRWxlbWVudHMpIHx8IChzdGF0ZS5kaXZpc29y
ICYmIHByaW1pdGl2ZUNvdW50ID4gbnVtRWxlbWVudHMpKQotICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IXNhd05vbkluc3RhbmNlZEF0dHJpYiAmJiBzYXdFbmFibGVkQXR0cmliKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZhbGlkYXRlV2ViR0xPYmplY3QoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJH
TE9iamVjdCogb2JqZWN0KQotewotICAgIGlmICghb2JqZWN0IHx8ICFvYmplY3QtPm9iamVjdCgp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBvYmplY3Qgb3Igb2JqZWN0IGRlbGV0ZWQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29u
dGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IGRvZXMg
bm90IGJlbG9uZyB0byB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZh
bGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUs
IEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1
bmN0aW9uTmFtZSwgbW9kZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghdmFs
aWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rpb25OYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgaWYgKGZpcnN0IDwgMCB8fCBjb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
ImZpcnN0IG9yIGNvdW50IDwgMCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKCFjb3VudCkgewotICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChwcmltY291bnQgPCAwKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJwcmltY291bnQgPCAwIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewot
ICAgICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQotICAgICAg
ICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkRmlyc3QoZmlyc3QpOwot
ICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkQ291bnQoY291
bnQpOwotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkU3Vt
ID0gY2hlY2tlZEZpcnN0ICsgY2hlY2tlZENvdW50OwotICAgICAgICBDaGVja2VkPEdDM0RpbnQs
IFJlY29yZE92ZXJmbG93PiBjaGVja2VkUHJpbUNvdW50KHByaW1jb3VudCk7Ci0gICAgICAgIGlm
IChjaGVja2VkU3VtLmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbUNvdW50Lmhhc092ZXJm
bG93ZWQoKSB8fCAhdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKGNoZWNrZWRTdW0udW5zYWZlR2V0
KCksIGNoZWNrZWRQcmltQ291bnQudW5zYWZlR2V0KCkpKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
IXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcygwKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJhdHRyaWJzIG5vdCBzZXR1cCBjb3JyZWN0bHkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1
ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJj
ZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsIHJl
YXNvbik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9k
ZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBVTlVTRURfUEFSQU0oZWMpOwotCi0gICAgaWYgKCF2YWxpZGF0ZURyYXdBcnJheXMoImRy
YXdBcnJheXMiLCBtb2RlLCBmaXJzdCwgY291bnQsIDApKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBjbGVhcklmQ29tcG9zaXRlZCgpOwotCi0gICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVk
ID0gZmFsc2U7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCi0gICAgICAgIHZlcnRleEF0
dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEp
OwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29t
cGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgdHJ1ZSk7Ci0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlz
KG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVy
dGV4QXR0cmliMFNpbXVsYXRlZCkKLSAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0
cmliMFNpbXVsYXRpb24oKTsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAg
IGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0FycmF5cyIsIGZhbHNlKTsKLSAgICBtYXJr
Q29udGV4dENoYW5nZWQoKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwg
R0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNpZ25l
ZCYgbnVtRWxlbWVudHMpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVEcmF3TW9kZShmdW5jdGlvbk5hbWUsIG1vZGUpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGZ1bmN0aW9uTmFtZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfU0hPUlQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAgICAgICAgaWYgKG1fb2VzRWxlbWVudEluZGV4VWludCkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGNvdW50
IDwgMCB8fCBvZmZzZXQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJjb3VudCBvciBvZmZzZXQg
PCAwIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvdW50KSB7
Ci0gICAgICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKCFtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJh
eUJ1ZmZlcigpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gRUxFTUVOVF9BUlJBWV9CVUZG
RVIgYm91bmQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNF
cnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIC8vIEVuc3Vy
ZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCi0gICAgICAgIGlmICghdmFsaWRhdGVF
bGVtZW50QXJyYXlTaXplKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZz
ZXQpKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJyZXF1ZXN0IG91dCBvZiBib3VuZHMg
Zm9yIGN1cnJlbnQgRUxFTUVOVF9BUlJBWV9CVUZGRVIiKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWNvdW50KQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSh0eXBl
LCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cykp
IHsKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlw
ZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpIHx8ICF2YWxp
ZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVtRWxlbWVudHMpKSB7Ci0gICAgICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmICghdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKDApKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3Qg
Y2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNz
Q29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlw
ZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLQotICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMDsKLSAgICBpZiAoIXZhbGlk
YXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHMiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0
LCBudW1FbGVtZW50cykpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsZWFySWZDb21wb3NpdGVk
KCk7Ci0KLSAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQotICAgICAg
ICAgICAgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8
R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpOwotICAgICAgICB2ZXJ0ZXhBdHRyaWIw
U2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKLSAgICB9Ci0g
ICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0
ZW5lc3MoImRyYXdFbGVtZW50cyIsIHRydWUpOwotICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRz
KG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsKLSAg
ICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAg
ICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlm
ICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNz
KCJkcmF3RWxlbWVudHMiLCBmYWxzZSk7Ci0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5h
YmxlIiwgY2FwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfVEVTVCkgewotICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsK
LSAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewotICAgICAgICBt
X3NjaXNzb3JFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAg
ICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5h
YmxlZCk7Ci0gICAgfQotICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRl
eCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4
ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5Iiwg
ImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7Ci0gICAgc3Rh
dGUuZW5hYmxlZCA9IHRydWU7Ci0KLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGluZGV4KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgpCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fY29udGV4dC0+ZmluaXNoKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpm
bHVzaCgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fY29udGV4dC0+Zmx1c2goKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
YXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZl
ciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJG
dW5jUGFyYW1ldGVycygiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1l
bnQpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChi
dWZmZXIgJiYgIWJ1ZmZlci0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZy
b20gdGhpcyBjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3Qg
YWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQK
LSAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9m
IHRoZSBkZWZhdWx0Ci0gICAgLy8gRkJPLgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
fHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJv
KGJ1ZmZlcik7Ci0gICAgc3dpdGNoIChhdHRhY2htZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICBtX2NvbnRleHQtPmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FU
VEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1
ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
YnVmZmVyT2JqZWN0KTsKLSAgICB9Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFj
aG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQsIGJ1ZmZlcik7Ci0gICAgYXBwbHlT
dGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZm
ZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51
bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZy
YW1lYnVmZmVyVGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmIChsZXZlbCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5v
dCAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRleHR1cmUgJiYgIXRleHR1
cmUtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZl
clRleHR1cmUyRCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1
bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBpbXBsZW1l
bnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0Ci0g
ICAgLy8gRkJPLgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJu
byBmcmFtZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBsYXRm
b3JtM0RPYmplY3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9yWmVybyh0ZXh0dXJlKTsKLSAgICBz
d2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9T
VEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgdGV4dGFyZ2V0
LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJU
ZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCB0
ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4
dHVyZU9iamVjdCwgbGV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZm
ZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3Qs
IGxldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4
dHVyZU9iamVjdCwgbGV2ZWwpOwotICAgIH0KLSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0
QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlLCBsZXZlbCk7Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZnJv
bnRGYWNlKG1vZGUpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVN
aXBtYXAoR0MzRGVudW0gdGFyZ2V0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4
dHVyZUJpbmRpbmcoImdlbmVyYXRlTWlwbWFwIiwgdGFyZ2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0
ZXgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBtYXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBu
b3QgYWxsIHRoZSBzYW1lIHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzkxNi4gQ29t
cHJlc3NlZCB0ZXh0dXJlcyBzaG91bGQgYmUgYWxsb3dlZCBpbiBXZWJHTCAyOgotICAgIGlmICh0
ZXgtPmlzQ29tcHJlc3NlZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0
byBnZW5lcmF0ZSBtaXBtYXBzIGZyb20gY29tcHJlc3NlZCB0ZXh0dXJlIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJnZW5lcmF0
ZU1pcG1hcCIsIHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIC8vIGdlbmVyYXRlTWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWlu
RmlsdGVyIGlzIG5vdCBORUFSRVNUX01JUE1BUF9MSU5FQVIKLSAgICAvLyBvbiBNYWMuICBSZW1v
dmUgdGhlIGhhY2sgb25jZSB0aGlzIGRyaXZlciBidWcgaXMgZml4ZWQuCi0jaWYgT1MoREFSV0lO
KQotICAgIGJvb2wgbmVlZFRvUmVzZXRNaW5GaWx0ZXIgPSBmYWxzZTsKLSAgICBpZiAodGV4LT5n
ZXRNaW5GaWx0ZXIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFS
KSB7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01J
UE1BUF9MSU5FQVIpOwotICAgICAgICBuZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7Ci0gICAg
fQotI2VuZGlmCi0gICAgbV9jb250ZXh0LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotI2lmIE9T
KERBUldJTikKLSAgICBpZiAobmVlZFRvUmVzZXRNaW5GaWx0ZXIpCi0gICAgICAgIG1fY29udGV4
dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9G
SUxURVIsIHRleC0+Z2V0TWluRmlsdGVyKCkpOwotI2VuZGlmCi0gICAgdGV4LT5nZW5lcmF0ZU1p
cG1hcExldmVsSW5mbygpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBH
QzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2Jq
ZWN0KCJnZXRBY3RpdmVBdHRyaWIiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwotICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRy
aWIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotCi0gICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6
ICVzIiwgaW5kZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKLQotICAgIHJldHVybiBXZWJH
TEFjdGl2ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKLX0K
LQotUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZv
cm0iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwot
ICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgaW5kZXgsIGluZm8pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWlzR0xF
UzJDb21wbGlhbnQoKSkKLSAgICAgICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5l
bmRzV2l0aCgiWzBdIikpCi0gICAgICAgICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKLQot
ICAgIExPRyhXZWJHTCwgIlJldHVybmluZyBhY3RpdmUgdW5pZm9ybSAlZDogJXMiLCBpbmRleCwg
aW5mby5uYW1lLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6
Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOwotfQotCi1ib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3Jh
bSwgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiBzaGFkZXJPYmplY3RzLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIHNoYWRlck9iamVjdHMuY2xl
YXIoKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdM
T2JqZWN0KCJnZXRBdHRhY2hlZFNoYWRlcnMiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgY29uc3QgR0MzRGVudW0gc2hhZGVyVHlwZVtdID0gewotICAgICAgICBHcmFw
aGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQUdNRU5UX1NIQURFUgotICAgIH07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emVvZihzaGFkZXJUeXBlKSAvIHNpemVvZihHQzNEZW51bSk7ICsraSkgewotICAgICAgICBXZWJH
TFNoYWRlciogc2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtp
XSk7Ci0gICAgICAgIGlmIChzaGFkZXIpCi0gICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVu
ZChzaGFkZXIpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotR0MzRGludCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwg
Y29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0g
ICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0
dHJpYkxvY2F0aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlk
YXRlU3RyaW5nKCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gLTE7
Ci0gICAgaWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAg
ICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2Nh
dGlvbiIsICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0K
LSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJv
Z3JhbSksIG5hbWUpOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYg
KHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSICYmIHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBh
cmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgfQotCi0gICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJf
U0laRSAmJiBwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJn
ZXRCdWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0g
ICAgbV9jb250ZXh0LT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUp
OwotICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCi0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdM
Q29udGV4dEF0dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJp
YnV0ZXMoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIC8vIFdlIGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJH
TENvbnRleHRBdHRyaWJ1dGVzIG9iamVjdCB0bwotICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJv
bSBtdXRhdGluZyBhbnkgY2FjaGVkIHZlcnNpb24uCi0KLSAgICAvLyBBbHNvLCB3ZSBuZWVkIHRv
IGVuZm9yY2UgcmVxdWVzdGVkIHZhbHVlcyBvZiAiZmFsc2UiIGZvciBkZXB0aAotICAgIC8vIGFu
ZCBzdGVuY2lsLCByZWdhcmRsZXNzIG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5n
Ci0gICAgLy8gR3JhcGhpY3NDb250ZXh0M0Qgb3IgRHJhd2luZ0J1ZmZlci4KLSAgICBSZWZQdHI8
V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXM6OmNyZWF0ZShtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOwotICAgIGlmICgh
bV9hdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7
Ci0gICAgaWYgKCFtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgYXR0cmlidXRlcy0+c2V0
U3RlbmNpbChmYWxzZSk7Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBU
aGUgRHJhd2luZ0J1ZmZlciBvYnRhaW5zIGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250
ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1dGVzKCksCi0gICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBp
dHMgb3duIGRldGVybWluYXRpb24gb2Ygd2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRl
ZC4KLSAgICAgICAgYXR0cmlidXRlcy0+c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVs
dGlzYW1wbGUoKSk7Ci0gICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKLX0K
LQotR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFcnJvcigpCi17Ci0gICAgaWYg
KG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29u
dGV4dDNEOjpOT19FUlJPUjsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOwotfQot
Ci1XZWJHTEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKLSAgICAgICAgJiYgKG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8IG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xv
ZCIpKSkgewotICAgICAgICBpZiAoIW1fZXh0U2hhZGVyVGV4dHVyZUxPRCkgewotICAgICAgICAg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9zaGFk
ZXJfdGV4dHVyZV9sb2QiKTsKLSAgICAgICAgICAgIG1fZXh0U2hhZGVyVGV4dHVyZUxPRCA9IHN0
ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVyVGV4dHVyZUxPRD4odGhpcyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIG1fZXh0U2hhZGVyVGV4dHVyZUxPRC5nZXQoKTsKLSAgICB9Ci0gICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNv
dHJvcGljIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkgewotICAgICAgICBpZiAoIW1f
ZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNv
dHJvcGljIik7Ci0gICAgICAgICAgICBtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyA9IHN0
ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljPih0aGlzKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuZ2V0KCk7
Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3N0YW5kYXJkX2Rl
cml2YXRpdmVzIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBv
cnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkgewotICAgICAgICBpZiAoIW1fb2Vz
U3RhbmRhcmREZXJpdmF0aXZlcykgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAg
ICAgICAgICAgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNT
dGFuZGFyZERlcml2YXRpdmVzPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9v
ZXNTdGFuZGFyZERlcml2YXRpdmVzLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpKSB7Ci0gICAg
ICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpOwotICAg
ICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVG
bG9hdD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0
LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0
dXJlX2Zsb2F0X2xpbmVhciIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpIHsKLSAgICAgICAgaWYg
KCFtX29lc1RleHR1cmVGbG9hdExpbmVhcikgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIp
OwotICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PE9FU1RleHR1cmVGbG9hdExpbmVhcj4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQotICAgICAgICAmJiBtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxv
YXQiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdCkgewotICAgICAgICAg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0
dXJlX2hhbGZfZmxvYXQiKTsKLSAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhhbGZGbG9hdCA9IHN0
ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdD4odGhpcyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYg
KGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIp
Ci0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VT
X3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVy
ZUhhbGZGbG9hdExpbmVhcikgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7Ci0g
ICAgICAgICAgICBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2VfdW5pcXVl
PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKQotICAgICAg
ICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhf
YXJyYXlfb2JqZWN0IikpIHsKLSAgICAgICAgaWYgKCFtX29lc1ZlcnRleEFycmF5T2JqZWN0KSB7
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgi
R0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKLSAgICAgICAgICAgIG1fb2VzVmVydGV4QXJy
YXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1ZlcnRleEFycmF5T2JqZWN0Pih0aGlzKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNWZXJ0ZXhBcnJheU9iamVjdC5nZXQoKTsK
LSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfZWxlbWVudF9pbmRl
eF91aW50IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpIHsKLSAgICAgICAgaWYgKCFtX29lc0VsZW1l
bnRJbmRleFVpbnQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5l
bnN1cmVFbmFibGVkKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7Ci0gICAgICAgICAgICBt
X29lc0VsZW1lbnRJbmRleFVpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU0VsZW1lbnRJbmRleFVp
bnQ+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc0VsZW1lbnRJbmRleFVp
bnQuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xf
bG9zZV9jb250ZXh0IikpIHsKLSAgICAgICAgaWYgKCFtX3dlYmdsTG9zZUNvbnRleHQpCi0gICAg
ICAgICAgICBtX3dlYmdsTG9zZUNvbnRleHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMTG9zZUNv
bnRleHQ+KHRoaXMpOwotICAgICAgICByZXR1cm4gbV93ZWJnbExvc2VDb250ZXh0LmdldCgpOwot
ICAgIH0KLSAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29t
cHJlc3NlZF90ZXh0dXJlX2F0YyIpKQotICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJl
QVRDOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAgaWYgKCFtX3dlYmdsQ29tcHJlc3NlZFRl
eHR1cmVBVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMgPSBzdGQ6
Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+KHRoaXMpOwotICAgICAgICBy
ZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDLmdldCgpOwotICAgIH0KLSAgICBpZiAo
KGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJl
X3B2cnRjIikpCi0gICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9y
dGVkKHRoaXMpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMp
Ci0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQyA9IHN0ZDo6bWFrZV91
bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPih0aGlzKTsKLSAgICAgICAgcmV0dXJu
IG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIikKLSAg
ICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlzKSkgewot
ICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMpCi0gICAgICAgICAgICBt
X3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7Ci0gICAgICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3Nl
ZFRleHR1cmVTM1RDLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiKQotICAgICAgICAmJiBXZWJHTERlcHRoVGV4dHVyZTo6
c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbERl
cHRoVGV4dHVyZSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVu
c3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2RlcHRoX3RleHR1cmUiKTsKLSAgICAgICAgICAgIG1f
d2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVwdGhUZXh0dXJlPih0
aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV93ZWJnbERlcHRoVGV4dHVyZS5nZXQo
KTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9kcmF3X2J1
ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdCdWZmZXJzKCkpIHsKLSAgICAgICAgaWYgKCFtX3dlYmds
RHJhd0J1ZmZlcnMpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5l
bnN1cmVFbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7Ci0gICAgICAgICAgICBtX3dlYmds
RHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRHJhd0J1ZmZlcnM+KHRoaXMpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX3dlYmdsRHJhd0J1ZmZlcnMuZ2V0KCk7Ci0gICAg
fQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiQU5HTEVfaW5zdGFuY2VkX2FycmF5
cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAg
aWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIp
OwotICAgICAgICAgICAgbV9hbmdsZUluc3RhbmNlZEFycmF5cyA9IHN0ZDo6bWFrZV91bmlxdWU8
QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBt
X2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdldCgpOwotICAgIH0KLSAgICBpZiAoYWxsb3dQcml2aWxl
Z2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
V0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fd2ViZ2xE
ZWJ1Z1JlbmRlcmVySW5mbykKLSAgICAgICAgICAgICAgICBtX3dlYmdsRGVidWdSZW5kZXJlcklu
Zm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdSZW5kZXJlckluZm8+KHRoaXMpOwotICAg
ICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mby5nZXQoKTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlYnVnX3NoYWRl
cnMiKQotICAgICAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkgewotICAgICAgICAgICAgaWYg
KCFtX3dlYmdsRGVidWdTaGFkZXJzKQotICAgICAgICAgICAgICAgIG1fd2ViZ2xEZWJ1Z1NoYWRl
cnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdTaGFkZXJzPih0aGlzKTsKLSAgICAgICAg
ICAgIHJldHVybiBtX3dlYmdsRGVidWdTaGFkZXJzLmdldCgpOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZ2V0RnJhbWVidWZmZXJB
dHRhY2htZW50UGFyYW1ldGVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOwotCi0gICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgV2ViR0xTaGFyZWRPYmplY3QqIG9iamVj
dCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50T2JqZWN0KGF0dGFjaG1lbnQp
OwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSkKLSAgICAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOwotICAgICAgICAvLyBP
cGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJTlZBTElEX0VOVU0gaW4gdGhpcyBjYXNlLCB3aGlsZSBk
ZXNrdG9wIEdMCi0gICAgICAgIC8vIHNwZWNpZmllcyBJTlZBTElEX09QRVJBVElPTi4KLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
Iik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQo
b2JqZWN0LT5pc1RleHR1cmUoKSB8fCBvYmplY3QtPmlzUmVuZGVyYnVmZmVyKCkpOwotICAgIGlm
IChvYmplY3QtPmlzVGV4dHVyZSgpKSB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1Rf
VFlQRToKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkUpOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX09CSkVDVF9OQU1FOgotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQ
YXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4ocmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUqPihv
YmplY3QpKSk7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FU
VEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6Ci0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICAgICAg
bV9jb250ZXh0LT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0
dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8odmFsdWUpOwotICAgICAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
IGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9P
QkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUik7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Ci0gICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViR0xSZW5kZXJidWZmZXIqPihvYmplY3QpKSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7Ci0gICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY29uc3QgaW50
IGludFplcm8gPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVf
V0lEVEhfUkFOR0U6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9S
QU5HRToKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFfQklUUzoKLSAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0
cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZEFycmF5QnVmZmVyKSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQ6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUjoKLSAgICAgICAgcmV0
dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RT
VF9SR0I6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6Ci0gICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
X1NSQ19BTFBIQToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNfUkdCOgotICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkJMVUVfQklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAg
ICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldEJv
b2xlYW5BcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
VWludDMyQXJyYXk6OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1f
Y29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkNVTExfRkFDRToKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgotICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4obV9jdXJyZW50UHJvZ3JhbSkpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oaW50WmVybyk7Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgotICAgICAg
ICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0ZVTkM6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6Ci0gICAg
ICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklU
RU1BU0s6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FS
UkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQ
dHI8V2ViR0xCdWZmZXI+KG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5
QnVmZmVyKCkpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5E
SU5HOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4obV9mcmFtZWJ1ZmZlckJpbmRpbmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUk9OVF9GQUNFOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgot
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6Ci0g
ICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklG
T1JNX1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkU6
Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhf
QVRUUklCUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQ
T1JUX0RJTVM6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRT
OgotICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGFsd2F5cyByZXR1cm4gMCBmb3IgdGhpcz8K
LSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZB
Q1RPUjoKLSAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgotICAgICAgICByZXR1cm4g
Z2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UE9MWUdPTl9PRkZTRVRfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0JJVFM6Ci0gICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NS
ZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KG1fcmVuZGVyYnVmZmVyQmluZGluZykpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKFN0cmluZygiV2ViS2l0IFdlYkdMIikpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNBTVBMRV9CVUZGRVJTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgotICAg
ICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgotICAgICAgICByZXR1cm4gZ2V0Rmxv
YXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVM6
Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJh
eVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0
U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIiki
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKLSAgICAg
ICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFD
S19QQVNTX0RFUFRIX1BBU1M6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1JFRjoK
LSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6Ci0gICAgICAgIHJldHVybiBnZXRV
bnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JJVFM6
Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5zdGVu
Y2lsKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKLSAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9DTEVBUl9WQUxVRToKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgotICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BB
U1NfREVQVEhfRkFJTDoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBu
YW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFT
UzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1JFRjoKLSAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9U
RVNUOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9NQVNLOgotICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6
Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0
dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQklORElOR19DVUJFX01BUDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQ
YXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5QQUNLX0FMSUdOTUVOVDoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKLSAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja0ZsaXBZKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8obV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24pOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhTdHJpbmcoIldlYktpdCIpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJT
SU9OOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCAxLjAgKCIgKyBtX2NvbnRl
eHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVSU0lPTikgKyAiKSIpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJ
bnRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5U
X1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMK
LSAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKLSAgICAgICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9E
RVJJVkFUSVZFX0hJTlRfT0VTKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6
VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6Ci0gICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJl
ckluZm8pCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3Ry
aW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUikpOwotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJs
ZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2ViR0xEZWJ1
Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdMOgotICAgICAgICBpZiAobV93ZWJn
bERlYnVnUmVuZGVyZXJJbmZvKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX2Nv
bnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SKSk7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJh
bWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5m
byBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QKLSAgICAgICAgaWYgKG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKLSAgICAg
ICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUz4obV9ib3VuZFZlcnRleEFycmF5T2JqZWN0KSk7Ci0gICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgZW5hYmxl
ZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljCi0gICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykK
LSAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6
Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBl
bmFibGVkIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBC
RUdJTgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQotICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpOwotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxl
ZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJz
KQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1
ZmZlcnMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYm
IHBuYW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVAotICAgICAgICAgICAgJiYg
cG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBf
RVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKLSAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUg
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKLSAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZykKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5n
ZXREcmF3QnVmZmVyKHBuYW1lKTsKLSAgICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1
ZmZlcgotICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7Ci0gICAgfQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3Jh
bVBhcmFtZXRlciIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0K
LSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhwcm9ncmFtLT5pc0RlbGV0ZWQoKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VkFMSURBVEVfU1RBVFVTOgotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RP
clplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TElOS19TVEFUVVM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+Z2V0
TGlua1N0YXR1cygpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFE
RVJTOgotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3Jh
bSksIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVM6Ci0gICAgICAgIG1fY29udGV4dC0+
Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5h
bWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotU3RyaW5nIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAg
ICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkp
Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQt
PmdldFByb2dyYW1JbmZvTG9nKG9iamVjdE9yWmVybyhwcm9ncmFtKSkpOwotfQotCi1XZWJHTEdl
dEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAi
aW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0K
LSAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVu
ZGVyYnVmZmVyIGJvdW5kIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9
Ci0KLSAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMCi0gICAgICAgICYmICFtX3JlbmRlcmJ1
ZmZlckJpbmRpbmctPmlzVmFsaWQoKSkgewotICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2ls
U3VwcG9ydGVkKCkpOwotICAgICAgICBpbnQgdmFsdWUgPSAwOwotICAgICAgICBzd2l0Y2ggKHBu
YW1lKSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURU
SDoKLSAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUl9IRUlHSFQ6Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmlu
ZGluZy0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6Ci0gICAgICAgICAgICB2YWx1
ZSA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDI0OwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUl9TVEVOQ0lMX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDg7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVS
TkFMX0ZPUk1BVDoKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwot
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIH0KLQotICAgIEdDM0RpbnQgdmFsdWUgPSAw
OwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVJfV0lEVEg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
X0hFSUdIVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJ
WkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgotICAgICAgICBt
X2NvbnRleHQtPmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1
ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgp
KTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0K
LX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1l
dGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlclBhcmFtZXRlciIsIHNoYWRl
cikpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBHQzNEaW50IHZhbHVlID0g
MDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVM
RVRFX1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlzRGVsZXRl
ZCgpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKLSAgICAg
ICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2
YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFs
dWUpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRToKLSAgICAgICAg
bV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1
ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Pih2YWx1ZSkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAg
fQotfQotCi1TdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdl
YkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xv
ZyIsIHNoYWRlcikpCi0gICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJlTm90TnVs
bChtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsKLX0K
LQotUGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0Mz
RGVudW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJURVhfU0hBREVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QUdNRU5UX1NIQURFUjoKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRl
clByZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLSAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUVESVVNX0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpNRURJVU1fSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hf
SU5UOgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9u
Rm9ybWF0IiwgImludmFsaWQgcHJlY2lzaW9uIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotCi0gICAgR0MzRGludCByYW5nZVsyXSA9IHswLCAwfTsKLSAgICBHQzNEaW50
IHByZWNpc2lvbiA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQo
c2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVjaXNpb24pOwotICAgIHJldHVy
biBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwg
cHJlY2lzaW9uKTsKLX0KLQotU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVy
U291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAg
ICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hh
ZGVyU291cmNlIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiBlbnN1
cmVOb3ROdWxsKHNoYWRlci0+Z2V0U291cmNlKCkpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQotewotICAgIFZlY3Rv
cjxTdHJpbmc+IHJlc3VsdDsKLQotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24p
Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpKQotICAgICAgICByZXN1bHQu
YXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9hdCIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpKQotICAgICAg
ICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKTsKLSAgICBpZiAobV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zs
b2F0IikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsK
LSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4
dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4
dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpKQotICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKLSAgICBpZiAobV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9k
IikgfHwgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVy
X3RleHR1cmVfbG9kIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9zaGFkZXJfdGV4dHVy
ZV9sb2QiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpOwotICAgIGlmIChtX2Nv
bnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2Jq
ZWN0IikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7
Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX2Vs
ZW1lbnRfaW5kZXhfdWludCIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfZWxlbWVudF9p
bmRleF91aW50Iik7Ci0gICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7Ci0g
ICAgaWYgKFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMiKTsK
LSAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQodGhpcykpCi0g
ICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZy
dGMiKTsKLSAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlz
KSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMi
KTsKLSAgICBpZiAoV2ViR0xEZXB0aFRleHR1cmU6OnN1cHBvcnRlZChncmFwaGljc0NvbnRleHQz
RCgpKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpOwotICAg
IGlmIChzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdM
X2RyYXdfYnVmZmVycyIpOwotICAgIGlmIChBTkdMRUluc3RhbmNlZEFycmF5czo6c3VwcG9ydGVk
KHRoaXMpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7
Ci0KLSAgICBpZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAgICAgIGlmICht
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRf
c2hhZGVyX3NvdXJjZSIpKQotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdf
c2hhZGVycyIpOwotICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9p
bmZvIik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotV2ViR0xHZXRJbmZvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGlu
ZygiZ2V0VGV4UGFyYW1ldGVyIiwgdGFyZ2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBz
d2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdf
RklMVEVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKLSAgICAgICAgbV9jb250ZXh0LT5nZXRU
ZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUpKTsKLSAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2Zp
bHRlcl9hbmlzb3Ryb3BpYwotICAgICAgICBpZiAobV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9w
aWMpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgJnZhbHVlKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
IG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBkZWZh
dWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiB1bmlmb3JtTG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0VW5pZm9ybSIsIHByb2dyYW0pKQot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYgKCF1bmlmb3JtTG9jYXRpb24g
fHwgdW5pZm9ybUxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gcHJvZ3JhbSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRV
bmlmb3JtIiwgIm5vIHVuaWZvcm1sb2NhdGlvbiBvciBub3QgdmFsaWQgZm9yIHRoaXMgcHJvZ3Jh
bSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotICAgIEdDM0RpbnQg
bG9jYXRpb24gPSB1bmlmb3JtTG9jYXRpb24tPmxvY2F0aW9uKCk7Ci0KLSAgICBHQzNEZW51bSBi
YXNlVHlwZTsKLSAgICB1bnNpZ25lZCBsZW5ndGg7Ci0gICAgc3dpdGNoICh1bmlmb3JtTG9jYXRp
b24tPnR5cGUoKSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6Ci0gICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDE7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMjoK
LSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKLSAgICAgICAgbGVu
Z3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9P
TF9WRUMzOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOwotICAg
ICAgICBsZW5ndGggPSAzOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCT09MX1ZFQzQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJP
T0w7Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
SU5UOwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpJTlRfVkVDMjoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UOwotICAgICAgICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDMzoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGlj
c0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5ndGggPSAzOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDNDoKLSAgICAgICAgYmFzZVR5cGUgPSBH
cmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKLSAgICAgICAgYmFzZVR5cGUg
PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzI6Ci0gICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSAy
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMz
OgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAg
bGVuZ3RoID0gMzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVRfVkVDNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7
Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUX01BVDI6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQzOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVuZ3RoID0gOTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfTUFUNDoKLSAgICAgICAgYmFzZVR5
cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDE2OwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRToKLSAgICAgICAgYmFzZVR5cGUg
PSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBi
cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICAvLyBDYW4ndCBoYW5kbGUgdGhpcyB0eXBlCi0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiZ2V0VW5pZm9ybSIsICJ1bmhhbmRsZWQgdHlwZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKCk7Ci0gICAgfQotICAgIHN3aXRjaCAoYmFzZVR5cGUpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVDogewotICAgICAgICBHQzNEZmxvYXQgdmFsdWVbMTZdID0gezB9
OwotICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpCi0gICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0blVuaWZvcm1mdkVYVChvYmplY3RPclplcm8o
cHJvZ3JhbSksIGxvY2F0aW9uLCAxNiAqIHNpemVvZihHQzNEZmxvYXQpLCB2YWx1ZSk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5pZm9ybWZ2KG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQot
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZVswXSk7Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oRmxvYXQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwotICAg
IH0KLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6IHsKLSAgICAgICAgR0MzRGludCB2
YWx1ZVs0XSA9IHswfTsKLSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQot
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQo
b2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFs
dWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihv
YmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5n
dGggPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWVbMF0pOwotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3Ro
KSk7Ci0gICAgfQotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6IHsKLSAgICAgICAg
R0MzRGludCB2YWx1ZVs0XSA9IHswfTsKLSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3Vw
cG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlm
b3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNE
aW50KSwgdmFsdWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldFVu
aWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAg
IGlmIChsZW5ndGggPiAxKSB7Ci0gICAgICAgICAgICBib29sIGJvb2xWYWx1ZVsxNl0gPSB7MH07
Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspCi0gICAg
ICAgICAgICAgICAgYm9vbFZhbHVlW2pdID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbal0pOwot
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhib29sVmFsdWUsIGxlbmd0aCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1
ZVswXSkpOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwot
ICAgIH0KLQotICAgIC8vIElmIHdlIGdldCBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiBv
dXIgdW5mb3J0dW5hdGVseSBjb21wbGV4IGxvZ2ljIGFib3ZlCi0gICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVua25v
d24gZXJyb3IiKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci19Ci0KLVBhc3NSZWZQdHI8
V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxv
Y2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm1Mb2NhdGlv
biIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIXZhbGlkYXRl
TG9jYXRpb25MZW5ndGgoImdldFVuaWZvcm1Mb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJnZXRVbmlmb3JtTG9jYXRpb24i
LCBuYW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKGlzUHJlZml4UmVzZXJ2
ZWQobmFtZSkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGlmICghcHJvZ3JhbS0+Z2V0
TGlua1N0YXR1cygpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFVuaWZvcm1Mb2NhdGlvbiIsICJwcm9ncmFtIG5v
dCBsaW5rZWQiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIEdDM0RpbnQg
dW5pZm9ybUxvY2F0aW9uID0gbV9jb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBuYW1lKTsKLSAgICBpZiAodW5pZm9ybUxvY2F0aW9uID09IC0xKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEdDM0RpbnQgYWN0aXZlVW5pZm9ybXMgPSAwOwot
ICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVu
aWZvcm1zKTsKLSAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCBhY3RpdmVVbmlmb3JtczsgaSsr
KSB7Ci0gICAgICAgIEFjdGl2ZUluZm8gaW5mbzsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmdl
dEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpLCBpbmZvKSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAvLyBTdHJpcCAiWzBdIiBmcm9tIHRoZSBuYW1l
IGlmIGl0J3MgYW4gYXJyYXkuCi0gICAgICAgIGlmIChpbmZvLm5hbWUuZW5kc1dpdGgoIlswXSIp
KQotICAgICAgICAgICAgaW5mby5uYW1lID0gaW5mby5uYW1lLmxlZnQoaW5mby5uYW1lLmxlbmd0
aCgpIC0gMyk7Ci0gICAgICAgIC8vIElmIGl0J3MgYW4gYXJyYXksIHdlIG5lZWQgdG8gaXRlcmF0
ZSB0aHJvdWdoIGVhY2ggZWxlbWVudCwgYXBwZW5kaW5nICJbaW5kZXhdIiB0byB0aGUgbmFtZS4K
LSAgICAgICAgZm9yIChHQzNEaW50IGluZGV4ID0gMDsgaW5kZXggPCBpbmZvLnNpemU7ICsraW5k
ZXgpIHsKLSAgICAgICAgICAgIFN0cmluZyB1bmlmb3JtTmFtZSA9IGluZm8ubmFtZSArICJbIiAr
IFN0cmluZzo6bnVtYmVyKGluZGV4KSArICJdIjsKLQotICAgICAgICAgICAgaWYgKG5hbWUgPT0g
dW5pZm9ybU5hbWUgfHwgbmFtZSA9PSBpbmZvLm5hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpjcmVhdGUocHJvZ3JhbSwgdW5pZm9ybUxvY2F0aW9uLCBp
bmZvLnR5cGUpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1X
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVp
bnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVT
RURfUEFSQU0oZWMpOwotCi0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotCi0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4
QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImdldFZlcnRleEF0dHJpYiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsK
LSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLQotICAgIGNvbnN0IFdlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOwotCi0gICAgaWYg
KG1fYW5nbGVJbnN0YW5jZWRBcnJheXMgJiYgcG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZF
UlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BTkdMRSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhzdGF0ZS5kaXZpc29yKTsKLQotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAg
ICAgICBpZiAoKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgIWluZGV4ICYmIG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCkuYnVmZmVyQmluZGluZyA9PSBtX3Zl
cnRleEF0dHJpYjBCdWZmZXIpCi0gICAgICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZwot
ICAgICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQotICAgICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBh
c3NSZWZQdHI8V2ViR0xCdWZmZXI+KHN0YXRlLmJ1ZmZlckJpbmRpbmcpKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGUuZW5hYmxlZCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHN0YXRlLm5vcm1hbGl6ZWQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhz
dGF0ZS5zaXplKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FS
UkFZX1NUUklERToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5vcmlnaW5hbFN0
cmlkZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9U
WVBFOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLnR5cGUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfVkVSVEVYX0FUVFJJQjoKLSAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZShtX3ZlcnRleEF0dHJpYlZhbHVlW2lu
ZGV4XS52YWx1ZSwgNCkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0g
ICAgfQotfQotCi1sb25nIGxvbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRy
aWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIEdDM0RzaXplaXB0
ciByZXN1bHQgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5hbWUp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHJlc3VsdCk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9k
ZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47
Ci0gICAgYm9vbCBpc1ZhbGlkID0gZmFsc2U7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRU5FUkFURV9NSVBNQVBfSElOVDoKLSAgICAgICAgaXNW
YWxpZCA9IHRydWU7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFH
TUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUzogLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRp
dmVzCi0gICAgICAgIGlmIChtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMpCi0gICAgICAgICAgICBp
c1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICghaXNWYWxpZCkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAiaGludCIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIG1fY29udGV4dC0+aGludCh0YXJnZXQsIG1vZGUpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCi17Ci0gICAg
aWYgKCFidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIGlmICghYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNCdWZmZXIoYnVmZmVyLT5vYmplY3QoKSk7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0NvbnRleHRMb3N0KCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9jb250ZXh0TG9zdDsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmlzQ29udGV4dExvc3RPclBlbmRpbmcoKQotewotICAgIGlmIChtX2lzUGVuZGluZ1Bv
bGljeVJlc29sdXRpb24gJiYgIW1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbikgewotICAg
ICAgICBMT0coV2ViR0wsICJDb250ZXh0IGlzIGJlaW5nIHVzZWQuIEF0dGVtcHQgdG8gcmVzb2x2
ZSB0aGUgcG9saWN5LiIpOwotICAgICAgICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+
ZG9jdW1lbnQoKS50b3BEb2N1bWVudCgpOwotICAgICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQu
cGFnZSgpOwotICAgICAgICBpZiAocGFnZSAmJiAhZG9jdW1lbnQudXJsKCkuaXNMb2NhbEZpbGUo
KSkKLSAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLnJlc29s
dmVXZWJHTFBvbGljeUZvclVSTChkb2N1bWVudC51cmwoKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBX
ZSBkb24ndCBjdXJyZW50bHkgZG8gYW55dGhpbmcgd2l0aCB0aGUgcmVzdWx0IGZyb20gcmVzb2x1
dGlvbi4gQSBtb3JlCi0gICAgICAgIC8vIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG1pZ2h0IHRy
eSB0byBjb25zdHJ1Y3QgYSByZWFsIGNvbnRleHQsIGV0YyBhbmQgcHJvY2VlZAotICAgICAgICAv
LyB3aXRoIG5vcm1hbCBvcGVyYXRpb24uCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkxMjIKLSAgICAgICAgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lS
ZXNvbHV0aW9uID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0TG9zdCB8fCBt
X2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb247Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoImlzRW5hYmxlZCIsIGNhcCkp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfVEVTVCkKLSAgICAgICAgcmV0dXJuIG1fc3RlbmNpbEVuYWJsZWQ7Ci0gICAgcmV0dXJu
IG1fY29udGV4dC0+aXNFbmFibGVkKGNhcCk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikK
LXsKLSAgICBpZiAoIWZyYW1lYnVmZmVyIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWZyYW1lYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5k
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNGcmFtZWJ1
ZmZlcihmcmFtZWJ1ZmZlci0+b2JqZWN0KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmlzUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCi17Ci0gICAgaWYg
KCFwcm9ncmFtIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5pc1Byb2dyYW0ocHJvZ3JhbS0+b2JqZWN0KCkpOwot
fQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUmVuZGVyYnVmZmVyKFdl
YkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJidWZmZXIg
fHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlm
ICghcmVuZGVyYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyLT5vYmpl
Y3QoKSk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIo
V2ViR0xTaGFkZXIqIHNoYWRlcikKLXsKLSAgICBpZiAoIXNoYWRlciB8fCBpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+
aXNTaGFkZXIoc2hhZGVyLT5vYmplY3QoKSk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBpZiAo
IXRleHR1cmUgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIGlmICghdGV4dHVyZS0+aGFzRXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBtX2NvbnRleHQtPmlzVGV4dHVyZSh0ZXh0dXJlLT5vYmplY3QoKSk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdp
ZHRoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2NvbnRleHQtPmxpbmVXaWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgibGlua1Byb2dyYW0iLCBwcm9n
cmFtKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0g
ICAgICAgIFdlYkdMU2hhZGVyKiB2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNo
YWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7Ci0gICAgICAgIFdlYkdMU2hh
ZGVyKiBmcmFnbWVudFNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOwotICAgICAgICBpZiAoIXZlcnRleFNoYWRlciB8
fCAhdmVydGV4U2hhZGVyLT5pc1ZhbGlkKCkgfHwgIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVu
dFNoYWRlci0+aXNWYWxpZCgpIHx8ICFtX2NvbnRleHQtPnByZWNpc2lvbnNNYXRjaChvYmplY3RP
clplcm8odmVydGV4U2hhZGVyKSwgb2JqZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVyKSkgfHwgIW1f
Y29udGV4dC0+Y2hlY2tWYXJ5aW5nc1BhY2tpbmcob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciks
IG9iamVjdE9yWmVybyhmcmFnbWVudFNoYWRlcikpKSB7Ci0gICAgICAgICAgICBwcm9ncmFtLT5z
ZXRMaW5rU3RhdHVzKGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAg
IH0KLQotICAgIG1fY29udGV4dC0+bGlua1Byb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsK
LSAgICBwcm9ncmFtLT5pbmNyZWFzZUxpbmtDb3VudCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfRkxJ
UF9ZX1dFQkdMOgotICAgICAgICBtX3VucGFja0ZsaXBZID0gcGFyYW07Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9X
RUJHTDoKLSAgICAgICAgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhID0gcGFyYW07Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NP
TlZFUlNJT05fV0VCR0w6Ci0gICAgICAgIGlmIChwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
QlJPV1NFUl9ERUZBVUxUX1dFQkdMIHx8IHBhcmFtID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05F
KQotICAgICAgICAgICAgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9IHN0YXRpY19jYXN0
PEdDM0RlbnVtPihwYXJhbSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIs
ICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgVU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJH
TCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfQUxJR05NRU5UOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQ6Ci0gICAgICAgIGlmIChwYXJhbSA9PSAxIHx8
IHBhcmFtID09IDIgfHwgcGFyYW0gPT0gNCB8fCBwYXJhbSA9PSA4KSB7Ci0gICAgICAgICAgICBp
ZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlBBQ0tfQUxJR05NRU5UKQotICAgICAgICAg
ICAgICAgIG1fcGFja0FsaWdubWVudCA9IHBhcmFtOwotICAgICAgICAgICAgZWxzZSAvLyBHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKLSAgICAgICAgICAgICAgICBtX3VucGFj
a0FsaWdubWVudCA9IHBhcmFtOwotICAgICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShw
bmFtZSwgcGFyYW0pOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJp
bnZhbGlkIHBhcmFtZXRlciBmb3IgYWxpZ25tZW50Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInBpeGVsU3RvcmVpIiwg
ImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3Rv
ciwgR0MzRGZsb2F0IHVuaXRzKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1
bml0cyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2Vw
dGlvbkNvZGUmKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICAvLyBEdWUgdG8gV2ViR0wncyBzYW1lLW9yaWdpbiByZXN0cmljdGlvbnMs
IGl0IGlzIG5vdCBwb3NzaWJsZSB0bwotICAgIC8vIHRhaW50IHRoZSBvcmlnaW4gdXNpbmcgdGhl
IFdlYkdMIEFQSS4KLSAgICBBU1NFUlQoY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpOwotICAgIC8v
IFZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMuCi0gICAgaWYgKCFwaXhlbHMpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJyZWFk
UGl4ZWxzIiwgIm5vIGRlc3RpbmF0aW9uIEFycmF5QnVmZmVyVmlldyIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJyZWFkUGl4ZWxzIiwgImludmFsaWQgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZf
NToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80Ogot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgdHlwZSIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEgfHwgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgImZvcm1hdCBub3QgUkdCQSBvciB0eXBlIG5vdCBVTlNJ
R05FRF9CWVRFIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gVmFsaWRhdGUgYXJy
YXkgdHlwZSBhZ2FpbnN0IHBpeGVsIHR5cGUuCi0gICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9
IEpTQzo6VHlwZVVpbnQ4KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3
IG5vdCBVaW50OEFycmF5Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hh
ciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29u
dGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJ
T04sICJyZWFkUGl4ZWxzIiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAv
LyBDYWxjdWxhdGUgYXJyYXkgc2l6ZSwgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNL
X0FMSUdOTUVOVC4KLSAgICB1bnNpZ25lZCBpbnQgdG90YWxCeXRlc1JlcXVpcmVkID0gMDsKLSAg
ICB1bnNpZ25lZCBpbnQgcGFkZGluZyA9IDA7Ci0gICAgaWYgKCFtX2lzUm9idXN0bmVzc0VYVFN1
cHBvcnRlZCkgewotICAgICAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUlt
YWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1l
bnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsICZwYWRkaW5nKTsKLSAgICAgICAgaWYgKGVycm9yICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoZXJyb3IsICJyZWFkUGl4ZWxzIiwgImludmFsaWQgZGltZW5zaW9ucyIpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgo
KSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJh
eUJ1ZmZlclZpZXcgbm90IGxhcmdlIGVub3VnaCBmb3IgZGltZW5zaW9ucyIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsK
LSAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOwotCi0gICAgewotICAgICAg
ICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCks
IG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKLSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNz
RVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJl
YWRuUGl4ZWxzRVhUKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLT5i
eXRlTGVuZ3RoKCksIGRhdGEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQt
PnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLSAg
ICB9Ci0KLSNpZiBPUyhEQVJXSU4pCi0gICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVk
KSAvLyB3ZSBoYXZlbid0IGNvbXB1dGVkIHBhZGRpbmcKLSAgICAgICAgbV9jb250ZXh0LT5jb21w
dXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fcGFja0Fs
aWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgJnBhZGRpbmcpOwotICAgIC8vIEZJWE1FOiBy
ZW1vdmUgdGhpcyBzZWN0aW9uIHdoZW4gR0wgZHJpdmVyIGJ1ZyBvbiBNYWMgQU5EIHRoZSBHTEVT
IGRyaXZlciBidWcKLSAgICAvLyBvbiBRQyBpcyBmaXhlZCwgaS5lLiwgd2hlbiBhbHBoYSBpcyBv
ZmYsIHJlYWRQaXhlbHMgc2hvdWxkCi0gICAgLy8gc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9m
IDAuCi0gICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9jb250ZXh0LT5nZXRDb250
ZXh0QXR0cmlidXRlcygpLmFscGhhKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEpOwotICAgICAgICBmb3IgKEdD
M0RzaXplaSBpeSA9IDA7IGl5IDwgaGVpZ2h0OyArK2l5KSB7Ci0gICAgICAgICAgICBmb3IgKEdD
M0RzaXplaSBpeCA9IDA7IGl4IDwgd2lkdGg7ICsraXgpIHsKLSAgICAgICAgICAgICAgICBwaXhl
bHNbM10gPSAyNTU7Ci0gICAgICAgICAgICAgICAgcGl4ZWxzICs9IDQ7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBwaXhlbHMgKz0gcGFkZGluZzsKLSAgICAgICAgfQotICAgIH0KLSNlbmRp
ZgotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVsZWFzZVNoYWRlckNvbXBpbGVy
KCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9jb250ZXh0LT5yZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
InJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgIm5v
IGJvdW5kIHJlbmRlcmJ1ZmZlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICgh
dmFsaWRhdGVTaXplKCJyZW5kZXJidWZmZXJTdG9yYWdlIiwgd2lkdGgsIGhlaWdodCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQTQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9JTkRFWDg6Ci0gICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFn
ZSh0YXJnZXQsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgbV9yZW5k
ZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAg
ICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZCh0cnVlKTsKLSAgICAgICAgbV9y
ZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgICAgICBp
ZiAoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5y
ZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgRXh0ZW5zaW9uczNEOjpERVBUSDI0X1NURU5DSUw4
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgfQotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRp
bmctPnNldFNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGlu
Zy0+c2V0SXNWYWxpZChpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgpKTsKLSAgICAgICAgbV9yZW5k
ZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFs
aWQgaW50ZXJuYWxmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhcHBseVN0
ZW5jaWxUZXN0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzYW1wbGVDb3Zl
cmFnZShHQzNEZmxvYXQgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKLXsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5z
YW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52ZXJ0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVNpemUoInNjaXNzb3IiLCB3aWR0aCwgaGVp
Z2h0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+c2Npc3Nvcih4LCB5LCB3aWR0
aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJj
ZShXZWJHTFNoYWRlciogc2hhZGVyLCBjb25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJzaGFkZXJTb3VyY2UiLCBzaGFkZXIp
KQotICAgICAgICByZXR1cm47Ci0gICAgU3RyaW5nIHN0cmluZ1dpdGhvdXRDb21tZW50cyA9IFN0
cmlwQ29tbWVudHMoc3RyaW5nKS5yZXN1bHQoKTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJz
aGFkZXJTb3VyY2UiLCBzdHJpbmdXaXRob3V0Q29tbWVudHMpKQotICAgICAgICByZXR1cm47Ci0g
ICAgc2hhZGVyLT5zZXRTb3VyY2Uoc3RyaW5nKTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJj
ZShvYmplY3RPclplcm8oc2hhZGVyKSwgc3RyaW5nV2l0aG91dENvbW1lbnRzKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0Rp
bnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5j
aWxGdW5jIiwgZnVuYykpCi0gICAgICAgIHJldHVybjsKLSAgICBtX3N0ZW5jaWxGdW5jUmVmID0g
cmVmOwotICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOwotICAgIG1fc3RlbmNpbEZ1bmNN
YXNrID0gbWFzazsKLSAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOwotICAgIG1fY29u
dGV4dC0+c3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0g
ZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTdGVuY2ls
RnVuYygic3RlbmNpbEZ1bmNTZXBhcmF0ZSIsIGZ1bmMpKQotICAgICAgICByZXR1cm47Ci0gICAg
c3dpdGNoIChmYWNlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfQU5EX0JB
Q0s6Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSByZWY7Ci0gICAgICAgIG1fc3RlbmNpbEZ1
bmNSZWZCYWNrID0gcmVmOwotICAgICAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7Ci0gICAg
ICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UOgotICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0g
cmVmOwotICAgICAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNS
ZWZCYWNrID0gcmVmOwotICAgICAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAic3RlbmNpbEZ1bmNTZXBhcmF0ZSIsICJpbnZh
bGlkIGZhY2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnN0ZW5j
aWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCi17Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fc3RlbmNpbE1h
c2sgPSBtYXNrOwotICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsKLSAgICBtX2NvbnRleHQt
PnN0ZW5jaWxNYXNrKG1hc2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQotewotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2gg
KGZhY2UpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFDSzoKLSAg
ICAgICAgbV9zdGVuY2lsTWFzayA9IG1hc2s7Ci0gICAgICAgIG1fc3RlbmNpbE1hc2tCYWNrID0g
bWFzazsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQ6
Ci0gICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgotICAgICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1h
c2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJzdGVuY2lsTWFza1NlcGFyYXRl
IiwgImludmFsaWQgZmFjZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4
dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0Mz
RGVudW0genBhc3MpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNE
ZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3Mp
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29udGV4dC0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNz
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYXNlKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5l
ZC4KLSAgICBlYyA9IDA7Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVC
aW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBBU1NFUlQodmFsaWRhdGVU
ZXhGdW5jUGFyYW1ldGVycygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlw
ZSkpOwotICAgIEFTU0VSVCh0ZXgpOwotICAgIEFTU0VSVCghbGV2ZWwgfHwgIVdlYkdMVGV4dHVy
ZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKTsKLSAgICBpZiAoIXBpeGVscykgewotICAgICAgICAv
LyBOb3RlOiBDaHJvbWl1bSdzIE9wZW5HTCBpbXBsZW1lbnRhdGlvbiBjbGVhcnMgdGV4dHVyZXMg
YW5kIGlzUmVzb3VyY2VTYWZlKCkgaXMgdGhlcmVmb3JlIHRydWUuCi0gICAgICAgIC8vIEZvciBv
dGhlciBpbXBsZW1lbnRhdGlvbnMsIGlmIHRoZXkgYXJlIHVzaW5nIEFOR0xFX2RlcHRoX3RleHR1
cmUsIEFOR0xFIGRlcHRoIHRleHR1cmVzCi0gICAgICAgIC8vIGNhbiBub3QgYmUgY2xlYXJlZCB3
aXRoIHRleEltYWdlMkQgYW5kIG11c3QgYmUgY2xlYXJlZCBieSBiaW5kaW5nIHRvIGFuIGZibyBh
bmQgY2FsbGluZwotICAgICAgICAvLyBjbGVhci4KLSAgICAgICAgaWYgKGlzUmVzb3VyY2VTYWZl
KCkpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBudWxscHRy
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBib29sIHN1Y2NlZWQgPSBtX2NvbnRleHQt
PnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrQWxpZ25tZW50
KTsKLSAgICAgICAgICAgIGlmICghc3VjY2VlZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBBU1NFUlQodmFsaWRhdGVTZXR0YWJsZVRl
eEZvcm1hdCgidGV4SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSk7Ci0gICAgICAgIG1fY29udGV4
dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgICAgIG1fY29udGV4dC0+
dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhl
bHMpOwotICAgICAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKSkgewotICAgICAgICAgICAgLy8gVGhlIHRleEltYWdlMkQgZnVuY3Rpb24gZmFpbGVkLiBU
ZWxsIHRoZSBXZWJHTFRleHR1cmUgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGZvciB0aGlzIGxl
dmVsLgotICAgICAgICAgICAgdGV4LT5tYXJrSW52YWxpZCh0YXJnZXQsIGxldmVsKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLSAgICB0ZXgtPnNldExldmVsSW5mbyh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdl
SHRtbERvbVNvdXJjZSBkb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBo
YSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIFZlY3Rvcjx1aW50OF90
PiBkYXRhOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJh
Y3RvcihpbWFnZSwgZG9tU291cmNlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3Bh
Y2VDb252ZXJzaW9uID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsKLSAgICBpZiAoIWltYWdl
RXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGlt
YWdlIGRhdGEiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRhRm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3Vy
Y2VGb3JtYXQoKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1h
Z2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9wKCk7Ci0gICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERh
dGEgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVBpeGVsRGF0YSgpOwotCi0gICAgYm9vbCBuZWVkQ29u
dmVyc2lvbiA9IHRydWU7Ci0gICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZv
cm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9w
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxpcFkpCi0gICAgICAg
IG5lZWRDb252ZXJzaW9uID0gZmFsc2U7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghbV9jb250
ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBm
bGlwWSwgYWxwaGFPcCwgc291cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0
aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNv
dXJjZVVucGFja0FsaWdubWVudCgpLCBkYXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgInBh
Y2tJbWFnZSBlcnJvciIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRl
eEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBpbWFnZS0+d2lkdGgo
KSwgaW1hZ2UtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0
YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSwgZWMpOwotICAgIGlmIChtX3VucGFja0FsaWdubWVu
dCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNE
OjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Ci19Ci0KLWJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUsIFRleEZ1bmNWYWxp
ZGF0aW9uU291cmNlVHlwZSBzb3VyY2VUeXBlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0KQotewotICAgIGlmICghdmFsaWRhdGVUZXhG
dW5jUGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGZ1bmN0aW9uVHlwZSwgdGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRh
dGVUZXh0dXJlQmluZGluZyhmdW5jdGlvbk5hbWUsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0
ZXh0dXJlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoZnVuY3Rpb25UeXBlID09
IE5vdFRleFN1YkltYWdlMkQpIHsKLSAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6
aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPiAw
IG5vdCBwb3dlciBvZiAyIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgLy8gRm9yIFNvdXJjZUFycmF5QnVmZmVyVmlldywgZnVuY3Rpb24gdmFsaWRhdGVU
ZXhGdW5jRGF0YSgpIHdvdWxkIGhhbmRsZSB3aGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBTZXR0YWJs
ZVRleEZvcm1hdAotICAgICAgICAvLyBieSBjaGVja2luZyBpZiB0aGUgQXJyYXlCdWZmZXJWaWV3
IGlzIG51bGwgb3Igbm90LgotICAgICAgICBpZiAoc291cmNlVHlwZSAhPSBTb3VyY2VBcnJheUJ1
ZmZlclZpZXcpIHsKLSAgICAgICAgICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChm
dW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9y
bWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgaWYgKCF2YWxpZGF0ZVNpemUoZnVuY3Rpb25OYW1lLCB4b2Zmc2V0LCB5b2Zmc2V0KSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlm
IGl0IGlzIGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KLSAg
ICAgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsK
LSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJiYWQgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0
dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVy
ZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZGlt
ZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAodGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCkgIT0gZm9ybWF0IHx8IHRleHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgIT0gdHlwZSkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIGFuZCBmb3JtYXQgZG8gbm90IG1hdGNo
IHRleHR1cmUiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
QXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleEltYWdl
MkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxBbGxv
d2VkKQotICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3Vi
SW1hZ2UyRCwgU291cmNlQXJyYXlCdWZmZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIDAsIDApKQotICAgICAg
ICByZXR1cm47Ci0gICAgdm9pZCogZGF0YSA9IHBpeGVscyA/IHBpeGVscy0+YmFzZUFkZHJlc3Mo
KSA6IDA7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOwotICAgIGJvb2wgY2hhbmdlVW5w
YWNrQWxpZ25tZW50ID0gZmFsc2U7Ci0gICAgaWYgKGRhdGEgJiYgKG1fdW5wYWNrRmxpcFkgfHwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhKSkgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0
cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0FsaWdubWVudCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZW1wRGF0YSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRhdGEgPSB0ZW1wRGF0
YS5kYXRhKCk7Ci0gICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVudCA9IHRydWU7Ci0gICAgfQot
ICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleElt
YWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsCi0gICAgICAgICAgICAgICAgICAgZm9ybWF0LCB0eXBlLCBkYXRhLCBlYyk7Ci0gICAg
aWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3Jl
aShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAw
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8fCAhdmFsaWRh
dGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlSW1hZ2VEYXRh
LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMt
PmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0gICAg
VmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0gICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0g
ICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBSR0JBOC4K
LSAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3JtYXQgaXMg
UkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVsdGlwbHkg
b3BlcmF0aW9uIGlzIHJlcXVpcmVkLgotICAgIGlmICghbV91bnBhY2tGbGlwWSAmJiAhbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAm
JiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKQotICAgICAgICBuZWVk
Q29udmVyc2lvbiA9IGZhbHNlOwotICAgIGVsc2UgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+
ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJh
ZCBpbWFnZSBkYXRhIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0g
ICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleElt
YWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCks
IHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRh
LmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCksIGVjKTsKLSAgICBpZiAobV91bnBhY2tB
bGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0Nv
bnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi1QYXNz
UmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdJbWFnZUludG9CdWZmZXIo
SW1hZ2UqIGltYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXZpY2VTY2FsZUZhY3Rv
cikKLXsKLSAgICBJbnRTaXplIHNpemUod2lkdGgsIGhlaWdodCk7Ci0gICAgc2l6ZS5zY2FsZShk
ZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fZ2VuZXJhdGVkSW1h
Z2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKLSAgICBpZiAoIWJ1ZikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWSwgInRleEltYWdl
MkQiLCAib3V0IG9mIG1lbW9yeSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0K
LSAgICBGbG9hdFJlY3Qgc3JjUmVjdChGbG9hdFBvaW50KCksIGltYWdlLT5zaXplKCkpOwotICAg
IEZsb2F0UmVjdCBkZXN0UmVjdChGbG9hdFBvaW50KCksIHNpemUpOwotICAgIGJ1Zi0+Y29udGV4
dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENvbG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNS
ZWN0KTsKLSAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1h
Z2VNb2RlKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlSFRNTEltYWdlRWxlbWVudCgidGV4SW1hZ2UyRCIsIGltYWdlLCBlYykpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2Fj
aGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYg
KGltYWdlRm9yUmVuZGVyLT5pc1NWR0ltYWdlKCkpCi0gICAgICAgIGltYWdlRm9yUmVuZGVyID0g
ZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFnZUZvclJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCks
IGltYWdlLT5oZWlnaHQoKSwgMSk7Ci0KLSAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxp
ZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1h
Z2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXIt
PndpZHRoKCksIGltYWdlRm9yUmVuZGVyLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAw
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBo
aWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVs
dGlwbHlBbHBoYSwgZWMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4SW1hZ2UyRCIsIGNhbnZhcywgZWMp
IHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3Vy
Y2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZh
cy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0
dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgLy8gSWYgcG9zc2li
bGUsIGNvcHkgZnJvbSB0aGUgY2FudmFzIGVsZW1lbnQgZGlyZWN0bHkgdG8gdGhlIHRleHR1cmUK
LSAgICAvLyB2aWEgdGhlIEdQVSwgd2l0aG91dCBhIHJlYWQtYmFjayB0byBzeXN0ZW0gbWVtb3J5
LgotICAgIC8vCi0gICAgLy8gRklYTUU6IHJlc3RyaWN0aW9uIG9mIChSR0IgfHwgUkdCQSkvVU5T
SUdORURfQllURSBzaG91bGQgYmUgbGlmdGVkIHdoZW4KLSAgICAvLyBJbWFnZUJ1ZmZlcjo6Y29w
eVRvUGxhdGZvcm1UZXh0dXJlIGltcGxlbWVudGF0aW9ucyBhcmUgZnVsbHkgZnVuY3Rpb25hbC4K
LSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0gdGFyZ2V0ICYmIHRleHR1
cmUgJiYgdHlwZSA9PSB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpCi0gICAgICAgICYm
IChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEpICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpIHsKLSAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Ci0g
ICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29u
dGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgo
KSwgY2FudmFzLT5oZWlnaHQoKSwgdHlwZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdl
dEltYWdlRGF0YSgpOwotICAgIGlmIChpbWFnZURhdGEpCi0gICAgICAgIHRleEltYWdlMkQodGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdldCgp
LCBlYyk7Ci0gICAgZWxzZQotICAgICAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBo
aWNzQ29udGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLVBhc3NSZWZQdHI8SW1h
Z2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxl
bWVudCogdmlkZW8sIEJhY2tpbmdTdG9yZUNvcHkgYmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9u
Q29kZSYpCi17Ci0gICAgSW50U2l6ZSBzaXplKHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52
aWRlb0hlaWdodCgpKTsKLSAgICBJbWFnZUJ1ZmZlciogYnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNh
Y2hlLmltYWdlQnVmZmVyKHNpemUpOwotICAgIGlmICghYnVmKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIs
ICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBJ
bnRSZWN0IGRlc3RSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAg
Ly8gRklYTUU6IFR1cm4gdGhpcyBpbnRvIGEgR1BVLUdQVSB0ZXh0dXJlIGNvcHkgaW5zdGVhZCBv
ZiBDUFUgcmVhZGJhY2suCi0gICAgdmlkZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1
Zi0+Y29udGV4dCgpLCBkZXN0UmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKGJhY2tp
bmdTdG9yZUNvcHkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudCgidGV4SW1hZ2UyRCIsIHZpZGVvLCBlYykKLSAgICAg
ICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNv
dXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB2aWRl
by0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAw
LCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gR28gdGhyb3VnaCB0aGUgZmFzdCBwYXRo
IGRvaW5nIGEgR1BVLUdQVSB0ZXh0dXJlcyBjb3B5IHdpdGhvdXQgYSByZWFkYmFjayB0byBzeXN0
ZW0gbWVtb3J5IGlmIHBvc3NpYmxlLgotICAgIC8vIE90aGVyd2lzZSwgaXQgd2lsbCBmYWxsIGJh
Y2sgdG8gdGhlIG5vcm1hbCBTVyBwYXRoLgotICAgIC8vIEZJWE1FOiBUaGUgY3VycmVudCByZXN0
cmljdGlvbnMgcmVxdWlyZSB0aGF0IGZvcm1hdCBzaG91ZCBiZSBSR0Igb3IgUkdCQSwKLSAgICAv
LyB0eXBlIHNob3VsZCBiZSBVTlNJR05FRF9CWVRFIGFuZCBsZXZlbCBzaG91bGQgYmUgMC4gSXQg
bWF5IGJlIGxpZnRlZCBpbiB0aGUgZnV0dXJlLgotICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9
IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAg
IGlmIChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCA9PSB0YXJnZXQgJiYgdGV4dHVyZQot
ICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKQotICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAgICAgICYmICh0ZXh0dXJlLT5nZXRUeXBlKHRhcmdl
dCwgbGV2ZWwpID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFIHx8ICF0ZXh0dXJl
LT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKQotICAgICAgICAmJiAhbGV2ZWwpIHsKLSAgICAgICAg
aWYgKHZpZGVvLT5jb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUobV9jb250ZXh0Lmdl
dCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwgbGV2ZWwsIHR5cGUsIGludGVybmFsZm9ybWF0LCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7Ci0gICAgICAgICAgICB0ZXh0
dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHZpZGVvLT52
aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCB0eXBlKTsKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCi0g
ICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1
ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSwgZWMpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAg
IHJldHVybjsKLSAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21W
aWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0j
ZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1mLCBHQzNEaW50IHBhcmFt
aSwgYm9vbCBpc0Zsb2F0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoInRleFBhcmFtZXRlciIsIHRhcmdldCwgZmFsc2UpOwotICAgIGlmICghdGV4KQotICAg
ICAgICByZXR1cm47Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01BR19GSUxURVI6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfV1JBUF9UOgotICAgICAgICBpZiAoKGlzRmxvYXQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6TUlS
Uk9SRURfUkVQRUFUICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFUKQotICAg
ICAgICAgICAgfHwgKCFpc0Zsb2F0ICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xB
TVBfVE9fRURHRSAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVB
VCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9N
QVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAg
ICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9w
aWMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaXNGbG9hdCkgewot
ICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmYocG5hbWUsIHBhcmFtZik7Ci0gICAgICAgIG1fY29u
dGV4dC0+dGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCBwYXJhbWYpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIHRleC0+c2V0UGFyYW1ldGVyaShwbmFtZSwgcGFyYW1pKTsKLSAgICAgICAgbV9j
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHBhcmFtaSk7Ci0gICAgfQotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pCi17Ci0gICAgdGV4UGFyYW1ldGVy
KHRhcmdldCwgcG5hbWUsIHBhcmFtLCAwLCB0cnVlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwg
R0MzRGludCBwYXJhbSkKLXsKLSAgICB0ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgMCwgcGFy
YW0sIGZhbHNlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdl
MkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJl
dHVybmVkCi0gICAgZWMgPSAwOwotICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICBB
U1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4U3ViSW1hZ2UyRCIsIFRleFN1Yklt
YWdlMkQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0
eXBlKSk7Ci0gICAgQVNTRVJUKHZhbGlkYXRlU2l6ZSgidGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQs
IHlvZmZzZXQpKTsKLSAgICBBU1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3Vi
SW1hZ2UyRCIsIGZvcm1hdCkpOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0
dXJlQmluZGluZygidGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgp
IHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgQVNTRVJUKCh4b2Zmc2V0ICsgd2lkdGgpID49IDApOwotICAgIEFTU0VSVCgoeW9mZnNl
dCArIGhlaWdodCkgPj0gMCk7Ci0gICAgQVNTRVJUKHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZl
bCkgPj0gKHhvZmZzZXQgKyB3aWR0aCkpOwotICAgIEFTU0VSVCh0ZXgtPmdldEhlaWdodCh0YXJn
ZXQsIGxldmVsKSA+PSAoeW9mZnNldCArIGhlaWdodCkpOwotICAgIEFTU0VSVCh0ZXgtPmdldElu
dGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpID09IGZvcm1hdCk7Ci0gICAgQVNTRVJUKHRleC0+
Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9PSB0eXBlKTsKLSAgICBtX2NvbnRleHQtPnRleFN1Yklt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBwaXhlbHMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4
U3ViSW1hZ2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJ
bWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291
cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIGVjID0gMDsKLSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBHcmFwaGlj
c0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJj
ZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFw
aGljc0NvbnRleHQzRDo6Tk9ORSk7ICAKLSAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RT
dWNjZWVkZWQoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNl
RGF0YUZvcm1hdCA9IGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7Ci0gICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxw
aGFPcCgpOwotICAgIGNvbnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3Iu
aW1hZ2VQaXhlbERhdGEoKTsKLQotICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAg
IGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURh
dGFGb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6QWxwaGFEb05vdGhpbmcgJiYgIWZsaXBZKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZh
bHNlOwotICAgIGVsc2UgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShp
bWFnZSwgaW1hZ2VQaXhlbERhdGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJj
ZURhdGFGb3JtYXQsIGltYWdlRXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3Iu
aW1hZ2VIZWlnaHQoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQo
KSwgZGF0YSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fdW5wYWNrQWxp
Z25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0
KCksIGZvcm1hdCwgdHlwZSwgIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBp
eGVsRGF0YSwgZWMpOwotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCBtX3VucGFja0FsaWdubWVudCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zm
c2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhT
dWJJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBO
dWxsTm90QWxsb3dlZCkKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2Uy
RCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwg
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQp
KQotICAgICAgICByZXR1cm47Ci0gICAgdm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3Mo
KTsKLSAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7Ci0gICAgYm9vbCBjaGFuZ2VVbnBhY2tB
bGlnbm1lbnQgPSBmYWxzZTsKLSAgICBpZiAoZGF0YSAmJiAobV91bnBhY2tGbGlwWSB8fCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEpKSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0
VGV4dHVyZURhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRl
bXBEYXRhKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZGF0YSA9IHRlbXBEYXRhLmRh
dGEoKTsKLSAgICAgICAgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gdHJ1ZTsKLSAgICB9Ci0gICAg
aWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3Jl
aShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4U3ViSW1h
Z2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBkYXRhLCBlYyk7Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkK
LSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURh
dGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0
ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxl
dmVsLCBmb3JtYXQsICBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1h
dCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3Rv
cjx1aW50OF90PiBkYXRhOwotICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIC8v
IFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBvZiBmb3JtYXQgUkdCQTguCi0gICAg
Ly8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVzdGluYXRpb24gZm9ybWF0IGlzIFJHQkEg
YW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBGbGlwIG9yIFByZW11bHRpcGx5IG9wZXJh
dGlvbiBpcyByZXF1aXJlZC4KLSAgICBpZiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgIW1fdW5w
YWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkKLSAgICAgICAgbmVlZENvbnZl
cnNpb24gPSBmYWxzZTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJh
Y3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQg
aW1hZ2UgZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAg
IGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3Rv
cmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJ
bWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBwaXhlbHMtPndpZHRo
KCksIHBpeGVscy0+aGVpZ2h0KCksIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRh
LmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCksIGVjKTsKLSAgICBpZiAobV91bnBhY2tB
bGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0Nv
bnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
SFRNTEltYWdlRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGltYWdlLCBlYykpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVk
SW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKGlt
YWdlRm9yUmVuZGVyLT5pc1NWR0ltYWdlKCkpCi0gICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJh
d0ltYWdlSW50b0J1ZmZlcihpbWFnZUZvclJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGlt
YWdlLT5oZWlnaHQoKSwgMSk7Ci0KLSAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0
ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VF
bGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBp
bWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNl
dCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2
ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCks
IEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVu
dCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4
U3ViSW1hZ2UyRCIsIGNhbnZhcywgZWMpCi0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRl
eFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFy
Z2V0LCBsZXZlbCwgZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGNhbnZhcy0+Z2V0SW1hZ2VEYXRhKCk7Ci0g
ICAgaWYgKGltYWdlRGF0YSkKLSAgICAgICAgdGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOwotICAg
IGVsc2UKLSAgICAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgZm9ybWF0LCB0eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5
QWxwaGEsIGVjKTsKLX0KLQotI2lmIEVOQUJMRShWSURFTykKLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRl
b0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50
KCJ0ZXhTdWJJbWFnZTJEIiwgdmlkZW8sIGVjKQotICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5j
KCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwg
dGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9I
ZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVv
LCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSwgZWMpOwotICAgIGlmICghaW1hZ2Up
Ci0gICAgICAgIHJldHVybjsKLSAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4
b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRl
eHQzRDo6SHRtbERvbVZpZGVvLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxw
aGEsIGVjKTsKLX0KLSNlbmRpZgotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAg
IGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
dW5pZm9ybTFmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbi0+bG9j
YXRpb24oKSwgeCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZv
cm0xZnYiLCBsb2NhdGlvbiwgdiwgMSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4
dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCksIHYtPmRhdGEo
KSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1
bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDEpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dy
YW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0xaSIsICJsb2NhdGlv
biBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgaWYgKChsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJE
IHx8IGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkg
JiYgeCA+PSAoaW50KW1fdGV4dHVyZVVuaXRzLnNpemUoKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaSIsICJp
bnZhbGlkIHRleHR1cmUgdW5pdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9j
b250ZXh0LT51bmlmb3JtMWkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2LCAxKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6U0FNUExFUl9DVUJFKQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdi0+bGVu
Z3RoKCk7ICsraSkgewotICAgICAgICAgICAgaWYgKHYtPmRhdGEoKVtpXSA+PSBzdGF0aWNfY2Fz
dDxpbnQ+KG1fdGV4dHVyZVVuaXRzLnNpemUoKSkpIHsKLSAgICAgICAgICAgICAgICBMT0coV2Vi
R0wsICJUZXh0dXJlIHVuaXQgc2l6ZT0lenUsIHZbJWRdPSVkLiBMb2NhdGlvbiB0eXBlID0gJTA0
WC4iLCBtX3RleHR1cmVVbml0cy5zaXplKCksIGksIHYtPmRhdGEoKVtpXSwgbG9jYXRpb24tPnR5
cGUoKSk7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgp
LCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFp
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0Rz
aXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMoInVuaWZvcm0xaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMSkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlmIChsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1Q
TEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJf
Q1VCRSkKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzaXplKTsgKytpKSB7Ci0gICAgICAgICAgICBpZiAoKChHQzNEaW50Kil2KVtpXSA+PSBz
dGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZVVuaXRzLnNpemUoKSkpIHsKLSAgICAgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVu
aWZvcm0xaXYiLCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFp
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtMmYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9j
YXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9
IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJmIiwgImxvY2F0aW9uIG5vdCBm
b3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm0yZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgMikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAyLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9u
LCB2LCBzaXplLCAyKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3Jt
MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMiwgdik7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFs
b2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkg
IT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMmkiLCAibG9jYXRpb24gbm90
IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1f
Y29udGV4dC0+dW5pZm9ybTJpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgMikp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAyLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwg
diwgc2l6ZSwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJp
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0
aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtM2Yi
LCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTNmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4
LCB5LCB6KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNm
diIsIGxvY2F0aW9uLCB2LCAzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51
bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEo
KSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1
bmlmb3JtM2Z2IiwgbG9jYXRpb24sIHYsIHNpemUsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaShjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50
IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTNpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaShsb2NhdGlv
bi0+bG9jYXRpb24oKSwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJB
cnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0
ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRpb24sIHYsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgp
IC8gMywgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRpb24sIHYsIHNpemUsIDMpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHNpemUgLyAzLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00
Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3LCBFeGNlcHRpb25Db2RlJiBlYykKLXsK
LSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dy
YW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm00ZiIsICJsb2NhdGlv
biBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgbV9jb250ZXh0LT51bmlmb3JtNGYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHosIHcp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9j
YXRpb24sIHYsIDQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm00
ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00
ZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgNCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29u
dGV4dC0+dW5pZm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0Mz
RGludCB3LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgInVuaWZvcm00aSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGkobG9j
YXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHosIHcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycygidW5pZm9ybTRpdiIsIGxvY2F0aW9uLCB2LCA0KSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5s
ZW5ndGgoKSAvIDQsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGlu
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplIC8gNCwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIs
IGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAv
IDQsIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygi
dW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDQpKQotICAg
ICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5s
b2NhdGlvbigpLCBzaXplIC8gNCwgdHJhbnNwb3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlm
b3JtTWF0cml4M2Z2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgOSkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmxlbmd0aCgpIC8gOSwgdHJhbnNwb3NlLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNE
c2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwg
c2l6ZSwgOSkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgz
ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyA5LCB0cmFuc3Bvc2UsIHYpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMoInVuaWZvcm1NYXRyaXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCAxNikp
Ci0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMTYsIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4
dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDE2LCB0cmFu
c3Bvc2UsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShX
ZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91
bmQoInVzZVByb2dyYW0iLCBwcm9ncmFtLCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChkZWxldGVkKQotICAgICAgICBwcm9ncmFtID0gMDsKLSAgICBpZiAocHJvZ3JhbSAmJiAh
cHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVzZVByb2dyYW0iLCAicHJvZ3Jh
bSBub3QgdmFsaWQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAobV9jdXJyZW50
UHJvZ3JhbSAhPSBwcm9ncmFtKSB7Ci0gICAgICAgIGlmIChtX2N1cnJlbnRQcm9ncmFtKQotICAg
ICAgICAgICAgbV9jdXJyZW50UHJvZ3JhbS0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQzRCgp
KTsKLSAgICAgICAgbV9jdXJyZW50UHJvZ3JhbSA9IHByb2dyYW07Ci0gICAgICAgIG1fY29udGV4
dC0+dXNlUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3JhbSkpOwotICAgICAgICBpZiAocHJvZ3Jh
bSkKLSAgICAgICAgICAgIHByb2dyYW0tPm9uQXR0YWNoZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInZhbGlk
YXRlUHJvZ3JhbSIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT52
YWxpZGF0ZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQg
djApCi17Ci0gICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjFmIiwgaW5kZXgsIDEs
IHYwLCAwLjBmLCAwLjBmLCAxLjBmKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQotewotICAg
IHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMWZ2IiwgaW5kZXgsIHYsIDEpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIHZlcnRleEF0dHJpYmZ2
SW1wbCgidmVydGV4QXR0cmliMWZ2IiwgaW5kZXgsIHYsIHNpemUsIDEpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0Rm
bG9hdCB2MCwgR0MzRGZsb2F0IHYxKQotewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhB
dHRyaWIyZiIsIGluZGV4LCAyLCB2MCwgdjEsIDAuMGYsIDEuMGYpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMy
QXJyYXkqIHYpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZnYiLCBp
bmRleCwgdiwgMik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0g
ICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgc2l6ZSwg
Mik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsK
LSAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4QXR0cmliM2YiLCBpbmRleCwgMywgdjAsIHYx
LCB2MiwgMS4wZik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWIzZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKLXsKLSAgICB2ZXJ0ZXhBdHRy
aWJmdkltcGwoInZlcnRleEF0dHJpYjNmdiIsIGluZGV4LCB2LCAzKTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRl
eEF0dHJpYjNmdiIsIGluZGV4LCB2LCBzaXplLCAzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdD
M0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCi17Ci0gICAgdmVydGV4QXR0
cmliZkltcGwoInZlcnRleEF0dHJpYjRmIiwgaW5kZXgsIDQsIHYwLCB2MSwgdjIsIHYzKTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBp
bmRleCwgRmxvYXQzMkFycmF5KiB2KQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4
QXR0cmliNGZ2IiwgaW5kZXgsIHYsIDQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXpl
aSBzaXplKQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5k
ZXgsIHYsIHNpemUsIDQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBl
LCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zm
c2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2gg
KHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U0hPUlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImludmFsaWQgdHlwZSIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gNCB8fCBzdHJpZGUg
PCAwIHx8IHN0cmlkZSA+IDI1NSB8fCBvZmZzZXQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9p
bnRlciIsICJiYWQgc2l6ZSwgc3RyaWRlIG9yIG9mZnNldCIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmICghbV9ib3VuZEFycmF5QnVmZmVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJp
YlBvaW50ZXIiLCAibm8gYm91bmQgQVJSQVlfQlVGRkVSIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgLy8gRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIGJvdW5kIGJ1
ZmZlciBjYW4gaG9sZCwgZ2l2ZW4gdGhlIG9mZnNldCwgc2l6ZSwgdHlwZSBhbmQgc3RyaWRlCi0g
ICAgdW5zaWduZWQgaW50IHR5cGVTaXplID0gc2l6ZUluQnl0ZXModHlwZSk7Ci0gICAgaWYgKCF0
eXBlU2l6ZSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoKHN0cmlkZSAlIHR5cGVTaXplKSB8fCAoc3Rh
dGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSAlIHR5cGVTaXplKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0
ZXhBdHRyaWJQb2ludGVyIiwgInN0cmlkZSBvciBvZmZzZXQgbm90IHZhbGlkIGZvciB0eXBlIik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVudCA9
IHNpemUgKiB0eXBlU2l6ZTsKLQotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVy
dGV4QXR0cmliU3RhdGUoaW5kZXgsIGJ5dGVzUGVyRWxlbWVudCwgc2l6ZSwgdHlwZSwgbm9ybWFs
aXplZCwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBtX2JvdW5kQXJy
YXlCdWZmZXIpOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6
ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZz
ZXQpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZXdwb3J0KEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
dmFsaWRhdGVTaXplKCJ2aWV3cG9ydCIsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9jb250ZXh0LT52aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpMb3N0Q29udGV4dE1vZGUgbW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImxvc2VDb250ZXh0IiwgImNvbnRleHQgYWxyZWFkeSBsb3N0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHRHcm91cC0+bG9zZUNv
bnRleHRHcm91cChtb2RlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxvc2VD
b250ZXh0SW1wbChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29u
dGV4dExvc3QgPSB0cnVlOwotICAgIG1fY29udGV4dExvc3RNb2RlID0gbW9kZTsKLQotICAgIGlm
IChtb2RlID09IFJlYWxMb3N0Q29udGV4dCkgewotICAgICAgICAvLyBJbmZvcm0gdGhlIGVtYmVk
ZGVyIHRoYXQgYSBsb3N0IGNvbnRleHQgd2FzIHJlY2VpdmVkLiBJbiByZXNwb25zZSwgdGhlIGVt
YmVkZGVyIG1pZ2h0Ci0gICAgICAgIC8vIGRlY2lkZSB0byB0YWtlIGFjdGlvbiBzdWNoIGFzIGFz
a2luZyB0aGUgdXNlciBmb3IgcGVybWlzc2lvbiB0byB1c2UgV2ViR0wgYWdhaW4uCi0gICAgICAg
IGlmIChGcmFtZSogZnJhbWUgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAg
ICAgICAgZnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLmRpZExvc2VXZWJHTENvbnRleHQobV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSk7Ci0gICAg
fQotCi0gICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwotCi0gICAgaWYgKG1fZHJhd2lu
Z0J1ZmZlcikgewotICAgICAgICAvLyBNYWtlIGFic29sdXRlbHkgc3VyZSB3ZSBkbyBub3QgcmVm
ZXIgdG8gYW4gYWxyZWFkeS1kZWxldGVkIHRleHR1cmUgb3IgZnJhbWVidWZmZXIuCi0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZygwKTsKLSAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcoMCk7Ci0gICAgfQotCi0gICAgLy8gVGhl
cmUgaXMgbm8gZGlyZWN0IHdheSB0byBjbGVhciBlcnJvcnMgZnJvbSBhIEdMIGltcGxlbWVudGF0
aW9uIGFuZAotICAgIC8vIGxvb3BpbmcgdW50aWwgZ2V0RXJyb3IoKSBiZWNvbWVzIE5PX0VSUk9S
IG1pZ2h0IGNhdXNlIGFuIGluZmluaXRlIGxvb3AgaWYKLSAgICAvLyB0aGUgZHJpdmVyIG9yIGNv
bnRleHQgaW1wbGVtZW50YXRpb24gaGFkIGEgYnVnLiBTbywgbG9vcCBhIHJlYXNvbmFibHkKLSAg
ICAvLyBsYXJnZSBudW1iZXIgb2YgdGltZXMgdG8gY2xlYXIgYW55IGV4aXN0aW5nIGVycm9ycy4K
LSAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRl
eHQtPmdldEVycm9yKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgfQotICAgIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5ID0g
KG1vZGUgPT0gUmVhbExvc3RDb250ZXh0KSA/IERpc3BsYXlJbkNvbnNvbGU6IERvbnREaXNwbGF5
SW5Db25zb2xlOwotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05U
RVhUX0xPU1RfV0VCR0wsICJsb3NlQ29udGV4dCIsICJjb250ZXh0IGxvc3QiLCBkaXNwbGF5KTsK
LQotICAgIC8vIERvbid0IGFsbG93IHJlc3RvcmF0aW9uIHVubGVzcyB0aGUgY29udGV4dCBsb3N0
IGV2ZW50IGhhcyBib3RoIGJlZW4KLSAgICAvLyBkaXNwYXRjaGVkIGFuZCBpdHMgZGVmYXVsdCBi
ZWhhdmlvciBwcmV2ZW50ZWQuCi0gICAgbV9yZXN0b3JlQWxsb3dlZCA9IGZhbHNlOwotCi0gICAg
Ly8gQWx3YXlzIGRlZmVyIHRoZSBkaXNwYXRjaCBvZiB0aGUgY29udGV4dCBsb3N0IGV2ZW50LCB0
byBpbXBsZW1lbnQKLSAgICAvLyB0aGUgc3BlYyBiZWhhdmlvciBvZiBxdWV1ZWluZyBhIHRhc2su
Ci0gICAgbV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZVJlc3RvcmVDb250ZXh0KCkKLXsK
LSAgICBpZiAoIWlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29u
dGV4dCIsICJjb250ZXh0IG5vdCBsb3N0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAg
ICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQpIHsKLSAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2Rl
ID09IFN5bnRoZXRpY0xvc3RDb250ZXh0KQotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAi
Y29udGV4dCByZXN0b3JhdGlvbiBub3QgYWxsb3dlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKCFtX3Jlc3RvcmVUaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3Jlc3Rv
cmVUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLVBsYXRmb3JtTGF5ZXIqIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cGxhdGZvcm1MYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICghaXNDb250
ZXh0TG9zdCgpICYmICFtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pID8gbV9jb250ZXh0LT5w
bGF0Zm9ybUxheWVyKCkgOiAwOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVt
b3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1f
aXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250
ZXh0R3JvdXAtPnJlbW92ZU9iamVjdChvYmplY3QpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YWRkU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCi17Ci0g
ICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOwotICAgIG1fY29udGV4dEdyb3VwLT5hZGRPYmpl
Y3Qob2JqZWN0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZUNvbnRl
eHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5k
aW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0T2Jq
ZWN0cy5yZW1vdmUob2JqZWN0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFk
ZENvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1f
aXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJU
KCFpc0NvbnRleHRMb3N0KCkpOwotICAgIG1fY29udGV4dE9iamVjdHMuYWRkKG9iamVjdCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3Rz
KCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1
cm47Ci0KLSAgICB3aGlsZSAobV9jb250ZXh0T2JqZWN0cy5zaXplKCkgPiAwKSB7Ci0gICAgICAg
IEhhc2hTZXQ8V2ViR0xDb250ZXh0T2JqZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0T2Jq
ZWN0cy5iZWdpbigpOwotICAgICAgICAoKml0KS0+ZGV0YWNoQ29udGV4dCgpOwotICAgIH0KLX0K
LQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
c3RvcCgpCi17Ci0gICAgaWYgKCFpc0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5
UmVzb2x1dGlvbikgewotICAgICAgICBmb3JjZUxvc3RDb250ZXh0KFN5bnRoZXRpY0xvc3RDb250
ZXh0KTsKLSAgICAgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCk7Ci0gICAgfQotfQotCi1X
ZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb29sZWFuUGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQotewotICAgIEdDM0Rib29sZWFuIHZhbHVlID0gMDsKLSAgICBtX2NvbnRl
eHQtPmdldEJvb2xlYW52KHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8o
c3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQotewot
ICAgIGlmIChwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLKSB7Ci0g
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oMCwg
MCk7Ci0gICAgfQotICAgIEdDM0Rib29sZWFuIHZhbHVlWzRdID0gezB9OwotICAgIG1fY29udGV4
dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHZhbHVlKTsKLSAgICBib29sIGJvb2xWYWx1ZVs0XTsKLSAg
ICBmb3IgKGludCBpaSA9IDA7IGlpIDwgNDsgKytpaSkKLSAgICAgICAgYm9vbFZhbHVlW2lpXSA9
IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlW2lpXSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhi
b29sVmFsdWUsIDQpOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEZmxvYXQgdmFsdWUg
PSAwOwotICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVy
biBXZWJHTEdldEluZm8odmFsdWUpOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGludCB2
YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKLSAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCi17
Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFt
ZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVk
IGludD4odmFsdWUpKTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Z2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIEdDM0Rm
bG9hdCB2YWx1ZVs0XSA9IHswfTsKLSAgICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgdmFs
dWUpOwotICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0NPTE9SOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFOgotICAgICAgICBs
ZW5ndGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBs
ZW1lbnRlZCgpOwotICAgIH0KLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6
Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAg
ICBHQzNEaW50IHZhbHVlWzRdID0gezB9OwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5h
bWUsIHZhbHVlKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwotICAgIHN3aXRjaCAocG5hbWUp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoKLSAgICAg
ICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9CT1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6Ci0g
ICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IG5vdEltcGxlbWVudGVkKCk7Ci0gICAgfQotICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJB
cnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGJvb2wgcHJlcGFyZVRvRHJhdykKLXsKLSAgICBib29sIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNl
OwotICAgIFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsYWcgZXh0ZW5zaW9ucyA9IHN0
YXRpY19jYXN0PFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsYWc+KChtX29lc1RleHR1
cmVGbG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsb2F0TGluZWFy
RW5hYmxlZCA6IDApIHwgKG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhciA/IFdlYkdMVGV4dHVy
ZTo6VGV4dHVyZUV4dGVuc2lvbkhhbGZGbG9hdExpbmVhckVuYWJsZWQgOiAwKSk7Ci0KLSAgICBm
b3IgKHVuc2lnbmVkIGlpID0gMDsgaWkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraWkpIHsK
LSAgICAgICAgaWYgKChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3Rl
eHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4
dGVuc2lvbnMpKQotICAgICAgICAgICAgfHwgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3Vi
ZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+
bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lvbnMpKSkgewotICAgICAgICAgICAgaWYgKGlp
ICE9IG1fYWN0aXZlVGV4dHVyZVVuaXQpIHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFj
dGl2ZVRleHR1cmUoaWkpOwotICAgICAgICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IHRydWU7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc2V0QWN0aXZlVW5pdCkgewotICAgICAgICAgICAg
ICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShpaSk7Ci0gICAgICAgICAgICAgICAgcmVzZXRB
Y3RpdmVVbml0ID0gZmFsc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBXZWJHTFRleHR1
cmUqIHRleDJEOwotICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXhDdWJlTWFwOwotICAgICAg
ICAgICAgaWYgKHByZXBhcmVUb0RyYXcpIHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbXNnKFN0
cmluZygidGV4dHVyZSBib3VuZCB0byB0ZXh0dXJlIHVuaXQgIikgKyBTdHJpbmc6Om51bWJlcihp
aSkKLSAgICAgICAgICAgICAgICAgICAgKyAiIGlzIG5vdCByZW5kZXJhYmxlLiBJdCBtYXliZSBu
b24tcG93ZXItb2YtMiBhbmQgaGF2ZSBpbmNvbXBhdGlibGUgdGV4dHVyZSBmaWx0ZXJpbmcgb3Ig
aXMgbm90ICd0ZXh0dXJlIGNvbXBsZXRlJywiCi0gICAgICAgICAgICAgICAgICAgICsgIiBvciBp
dCBpcyBhIGZsb2F0L2hhbGYtZmxvYXQgdHlwZSB3aXRoIGxpbmVhciBmaWx0ZXJpbmcgYW5kIHdp
dGhvdXQgdGhlIHJlbGV2YW50IGZsb2F0L2hhbGYtZmxvYXQgbGluZWFyIGV4dGVuc2lvbiBlbmFi
bGVkLiIpOwotICAgICAgICAgICAgICAgIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGZ1bmN0aW9u
TmFtZSwgbXNnLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICAgICAgICAgIHRleDJEID0gbV9ibGFj
a1RleHR1cmUyRC5nZXQoKTsKLSAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV9ibGFja1Rl
eHR1cmVDdWJlTWFwLmdldCgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICB0ZXgyRCA9IG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpOwotICAg
ICAgICAgICAgICAgIHRleEN1YmVNYXAgPSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVN
YXBCaW5kaW5nLmdldCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG1fdGV4dHVy
ZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJl
MkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCi0gICAgICAgICAg
ICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgb2JqZWN0T3JaZXJvKHRleDJEKSk7Ci0gICAgICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNb
aWldLnRleHR1cmVDdWJlTWFwQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1
YmVNYXBCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCi0gICAgICAg
ICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUCwgb2JqZWN0T3JaZXJvKHRleEN1YmVNYXApKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBpZiAocmVzZXRBY3RpdmVVbml0KQotICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1
cmUobV9hY3RpdmVUZXh0dXJlVW5pdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKQotewotICAgIHVuc2lnbmVkIGNoYXIg
YmxhY2tbXSA9IHswLCAwLCAwLCAyNTV9OwotICAgIG1fYmxhY2tUZXh0dXJlMkQgPSBjcmVhdGVU
ZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV9ibGFja1RleHR1cmUyRC0+b2JqZWN0KCkpOwotICAgIG1fY29udGV4dC0+
dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2sp
OwotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDApOwotICAgIG1fYmxhY2tUZXh0dXJlQ3ViZU1hcCA9IGNyZWF0ZVRleHR1cmUoKTsKLSAg
ICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQLCBtX2JsYWNrVGV4dHVyZUN1YmVNYXAtPm9iamVjdCgpKTsKLSAgICBtX2NvbnRleHQtPnRl
eEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwg
MCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAg
bV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1ksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSwgMCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwg
YmxhY2spOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwg
MSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEs
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0
LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1osIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCAwKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQo
R0MzRGVudW0gdGV4SW50ZXJuYWxGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBj
b2xvckJ1ZmZlckZvcm1hdCkKLXsKLSAgICB1bnNpZ25lZCBuZWVkID0gR3JhcGhpY3NDb250ZXh0
M0Q6OmdldENoYW5uZWxCaXRzQnlGb3JtYXQodGV4SW50ZXJuYWxGb3JtYXQpOwotICAgIHVuc2ln
bmVkIGhhdmUgPSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChjb2xv
ckJ1ZmZlckZvcm1hdCk7Ci0gICAgcmV0dXJuIChuZWVkICYgaGF2ZSkgPT0gbmVlZDsKLX0KLQot
R0MzRGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JG
b3JtYXQoKQotewotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVy
QmluZGluZy0+b2JqZWN0KCkpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+
Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsKLSAgICBpZiAobV9hdHRyaWJ1dGVzLmFscGhhKQotICAg
ICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7Ci0gICAgcmV0dXJuIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0I7Ci19Ci0KLWludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5k
RnJhbWVidWZmZXJXaWR0aCgpCi17Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZlcldpZHRoKCk7Ci0gICAgcmV0dXJuIG1fZHJhd2luZ0J1
ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCkgOiBtX2NvbnRleHQtPmdldElu
dGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsKLX0KLQotaW50IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpCi17Ci0gICAgaWYgKG1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAg
cmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZlckhlaWdodCgpOwotICAg
IHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQo
KSA6IG1fY29udGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKLX0K
LQotV2ViR0xUZXh0dXJlKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNl
U2l4RW51bXNGb3JDdWJlTWFwKQotewotICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IG51bGxw
dHI7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJEOgotICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0
dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0g
ICAgICAgIGlmICghdXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAgICAgfQotICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0
dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQOgotICAgICAgICBpZiAo
dXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRl
eHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQot
ICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4
dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLSAgICBpZiAoIXRleHR1cmUpCi0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAibm8gdGV4dHVyZSIpOwotICAgIHJldHVybiB0ZXh0dXJlOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVMb2NhdGlvbkxlbmd0aChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQotewotICAgIGNvbnN0IHVuc2lnbmVkIG1heFdl
YkdMTG9jYXRpb25MZW5ndGggPSAyNTY7Ci0gICAgaWYgKHN0cmluZy5sZW5ndGgoKSA+IG1heFdl
YkdMTG9jYXRpb25MZW5ndGgpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9uIGxlbmd0aCA+
IDI1NiIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTaXplKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNEaW50IHkpCi17Ci0gICAgaWYgKHggPCAwIHx8
IHkgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzaXplIDwgMCIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBT
dHJpbmcmIHN0cmluZykKLXsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5n
dGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInN0cmluZyBub3QgQVNDSUkiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpBTFBIQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFO
Q0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9T
VEVOQ0lMOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKLSAg
ICAgICAgaWYgKG1fd2ViZ2xEZXB0aFRleHR1cmUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAiZGVwdGggdGV4dHVyZSBmb3JtYXRzIG5vdCBlbmFibGVkIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRl
eHR1cmUgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6Ci0gICAgICAgIGlmIChtX29lc1Rl
eHR1cmVGbG9hdCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHRleHR1cmUgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVM6Ci0gICAgICAgIGlmIChtX29lc1RleHR1cmVIYWxm
RmxvYXQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0
dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9JTlRfMjRfODoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoK
LSAgICAgICAgaWYgKG1fd2ViZ2xEZXB0aFRleHR1cmUpCi0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBl
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBWZXJpZnkgdGhhdCB0
aGUgY29tYmluYXRpb24gb2YgZm9ybWF0IGFuZCB0eXBlIGlzIHN1cHBvcnRlZC4KLSAgICBzd2l0
Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpMVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpGTE9BVAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFM
Rl9GTE9BVF9PRVMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZv
ciBmb3JtYXQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgICAgIGlmICh0
eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0
eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNQotICAgICAgICAg
ICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYmIHR5
cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgUkdCIGZvcm1hdCIpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF80XzRfNF80Ci0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xCi0gICAgICAgICAgICAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCB0eXBlIGZvciBSR0JBIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdC4gREVQVEhfQ09NUE9ORU5UIG5vdCBl
bmFibGVkIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUCi0gICAgICAgICAg
ICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxl
dmVsID4gMCkgewotICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgbXVzdCBiZSAwIGZvciBE
RVBUSF9DT01QT05FTlQgZm9ybWF0Iik7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NU
RU5DSUw6Ci0gICAgICAgIGlmICghbV93ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCBmb3JtYXQuIERFUFRIX1NURU5DSUwgbm90IGVuYWJsZWQiKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UXzI0XzgpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBERVBUSF9TVEVOQ0lMIGZvcm1hdCIpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZXZlbCA+IDApIHsK
LSAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhfU1RFTkNJ
TCBmb3JtYXQiKTsKLSAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVRleEZ1bmNMZXZlbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCkKLXsKLSAgICBpZiAobGV2ZWwgPCAwKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJsZXZlbCA8IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBz
d2l0Y2ggKHRhcmdldCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6
Ci0gICAgICAgIGlmIChsZXZlbCA+PSBtX21heFRleHR1cmVMZXZlbCkgewotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBpZiAobGV2ZWwgPj0g
bV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwg
b3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIC8vIFRoaXMgZnVuY3Rpb24gb25seSBjaGVja3MgaWYg
bGV2ZWwgaXMgbGVnYWwsIHNvIHdlIHJldHVybiB0cnVlIGFuZCBkb24ndAotICAgIC8vIGdlbmVy
YXRlIElOVkFMSURfRU5VTSBpZiB0YXJnZXQgaXMgaWxsZWdhbC4KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRl
cnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUg
ZnVuY3Rpb25UeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlKQotewotICAgIC8vIFdlIGFic29sdXRlbHkg
aGF2ZSB0byB2YWxpZGF0ZSB0aGUgZm9ybWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9uLgotICAgIC8v
IFRoZSB0ZXhJbWFnZTJEIGVudHJ5IHBvaW50cyB0YWtpbmcgSFRNTEltYWdlLCBldGMuIHdpbGwg
cHJvZHVjZQotICAgIC8vIHRlbXBvcmFyeSBkYXRhIGJhc2VkIG9uIHRoaXMgY29tYmluYXRpb24s
IHNvIGl0IG11c3QgYmUgbGVnYWwuCi0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRU
eXBlKGZ1bmN0aW9uTmFtZSwgZm9ybWF0LCB0eXBlLCBsZXZlbCkgfHwgIXZhbGlkYXRlVGV4RnVu
Y0xldmVsKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAid2lkdGggb3IgaGVpZ2h0IDwgMCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgR0MzRGludCBtYXhUZXh0dXJlU2l6ZUZvckxldmVsID0gcG93KDIuMCwgbV9tYXhUZXh0
dXJlTGV2ZWwgLSAxIC0gbGV2ZWwpOwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKLSAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4
dHVyZVNpemVGb3JMZXZlbCB8fCBoZWlnaHQgPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSIpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgot
ICAgICAgICBpZiAoZnVuY3Rpb25UeXBlICE9IFRleFN1YkltYWdlMkQgJiYgd2lkdGggIT0gaGVp
Z2h0KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1h
cCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIC8vIE5v
IG5lZWQgdG8gY2hlY2sgaGVpZ2h0IGhlcmUuIEZvciB0ZXhJbWFnZSB3aWR0aCA9PSBoZWlnaHQu
Ci0gICAgICAgIC8vIEZvciB0ZXhTdWJJbWFnZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB3aGVuIGNo
ZWNraW5nIHlvZmZzZXQgKyBoZWlnaHQgaXMgaW4gcmFuZ2UuCi0gICAgICAgIGlmICh3aWR0aCA+
IG1heFRleHR1cmVTaXplRm9yTGV2ZWwpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBv
ciBoZWlnaHQgb3V0IG9mIHJhbmdlIGZvciBjdWJlIG1hcCIpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0KLSAgICBpZiAoZm9ybWF0ICE9IGludGVybmFsZm9ybWF0KSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAiZm9ybWF0ICE9IGludGVybmFsZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0KLSAgICBpZiAoYm9yZGVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJib3JkZXIgIT0g
MCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVsbERpc3Bvc2l0aW9uIGRp
c3Bvc2l0aW9uKQotewotICAgIGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIGlmIChkaXNwb3NpdGlv
biA9PSBOdWxsQWxsb3dlZCkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAibm8gcGl4ZWxzIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBp
ZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5
cGUsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghdmFsaWRhdGVTZXR0
YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEU6Ci0gICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVV
aW50OCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX0JZVEUgYnV0
IEFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6
VHlwZVVpbnQxNikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX1NI
T1JUIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQxNkFycmF5Iik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQ6IC8vIE9FU190ZXh0dXJlX2Zsb2F0Ci0gICAgICAgIGlmIChwaXhl
bHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVGbG9hdDMyKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgInR5cGUgRkxPQVQgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgRmxvYXQzMkFycmF5Iik7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJl
X2hhbGZfZmxvYXQKLSAgICAgICAgLy8gQXMgcGVyIHRoZSBzcGVjaWZpY2F0aW9uLCBBcnJheUJ1
ZmZlclZpZXcgc2hvdWxkIGJlIG51bGwgd2hlbgotICAgICAgICAvLyBPRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0IGlzIGVuYWJsZWQuCi0gICAgICAgIGlmIChwaXhlbHMpIHsKLSAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAidHlwZSBIQUxGX0ZMT0FUX09FUyBidXQgQXJyYXlCdWZmZXJWaWV3IGlzIG5v
dCBOVUxMIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
fQotCi0gICAgdW5zaWduZWQgaW50IHRvdGFsQnl0ZXNSZXF1aXJlZDsKLSAgICBHQzNEZW51bSBl
cnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3
aWR0aCwgaGVpZ2h0LCBtX3VucGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7
Ci0gICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJl
IGRpbWVuc2lvbnMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAocGl4
ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKLSAgICAgICAgaWYgKG1f
dW5wYWNrQWxpZ25tZW50ICE9IDEpIHsKLSAgICAgICAgICBlcnJvciA9IG1fY29udGV4dC0+Y29t
cHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAmdG90
YWxCeXRlc1JlcXVpcmVkLCAwKTsKLSAgICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkg
PT0gdG90YWxCeXRlc1JlcXVpcmVkKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5
QnVmZmVyVmlldyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVzdCB3aXRoIFVOUEFDS19BTElHTk1F
TlQgPiAxIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdo
IGZvciByZXF1ZXN0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNz
ZWRUZXhGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQotewotICAgIHJldHVybiBtX2NvbXByZXNzZWRU
ZXh0dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBm
b3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKQotewotICAgIGlmICghcGl4ZWxzKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJubyBwaXhlbHMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
IndpZHRoIG9yIGhlaWdodCA8IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHVuc2lnbmVkIGludCBieXRlc1JlcXVpcmVkID0gMDsKLQotICAgIHN3aXRjaCAoZm9ybWF0
KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JfQU1EOgotICAgICAgICB7
Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7Ci0gICAgICAgICAgICBjb25z
dCBpbnQga0Jsb2NrV2lkdGggPSA0OwotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdo
dCA9IDQ7Ci0gICAgICAgICAgICBpbnQgbnVtQmxvY2tzQWNyb3NzID0gKHdpZHRoICsga0Jsb2Nr
V2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOwotICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Rvd24g
PSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxvY2tIZWlnaHQ7Ci0gICAgICAgICAg
ICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICogbnVtQmxvY2tzRG93biAqIGtCbG9j
a1NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9BVENfUkdCQV9FWFBMSUNJVF9BTFBIQV9BTUQ6Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfSU5URVJQT0xBVEVEX0FMUEhBX0FNRDoKLSAgICAgICAg
ewotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSAxNjsKLSAgICAgICAgICAgIGNv
bnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVp
Z2h0ID0gNDsKLSAgICAgICAgICAgIGludCBudW1CbG9ja3NBY3Jvc3MgPSAod2lkdGggKyBrQmxv
Y2tXaWR0aCAtIDEpIC8ga0Jsb2NrV2lkdGg7Ci0gICAgICAgICAgICBpbnQgbnVtQmxvY2tzRG93
biA9IChoZWlnaHQgKyBrQmxvY2tIZWlnaHQgLSAxKSAvIGtCbG9ja0hlaWdodDsKLSAgICAgICAg
ICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1CbG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3duICoga0Js
b2NrU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gODsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxv
Y2tXaWR0aCA9IDg7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gODsKLSAg
ICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtCbG9ja1dpZHRoKSAq
IHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDQgKyA3KSAvIGtCbG9ja1NpemU7Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNT
RURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBp
bnQga0Jsb2NrU2l6ZSA9IDg7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSAx
NjsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA4OwotICAgICAgICAgICAg
Ynl0ZXNSZXF1aXJlZCA9IChzdGQ6Om1heCh3aWR0aCwga0Jsb2NrV2lkdGgpICogc3RkOjptYXgo
aGVpZ2h0LCBrQmxvY2tIZWlnaHQpICogMiArIDcpIC8ga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZv
cm1hdCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHBpeGVscy0+
Ynl0ZUxlbmd0aCgpICE9IGJ5dGVzUmVxdWlyZWQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxlbmd0
aCBvZiBBcnJheUJ1ZmZlclZpZXcgaXMgbm90IGNvcnJlY3QgZm9yIGRpbWVuc2lvbnMiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpCi17Ci0g
ICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9S
R0JfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQ1X0VYVDogewotICAgICAgICBjb25zdCBHQzNEc2l6ZWkga0Jsb2NrV2lkdGggPSA0Owot
ICAgICAgICBjb25zdCBHQzNEc2l6ZWkga0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgY29uc3Qg
R0MzRGludCBtYXhUZXh0dXJlU2l6ZSA9IHRhcmdldCA/IG1fbWF4VGV4dHVyZVNpemUgOiBtX21h
eEN1YmVNYXBUZXh0dXJlU2l6ZTsKLSAgICAgICAgY29uc3QgR0MzRHNpemVpIG1heENvbXByZXNz
ZWREaW1lbnNpb24gPSBtYXhUZXh0dXJlU2l6ZSA+PiBsZXZlbDsKLSAgICAgICAgYm9vbCB3aWR0
aFZhbGlkID0gKGxldmVsICYmIHdpZHRoID09IDEpIHx8IChsZXZlbCAmJiB3aWR0aCA9PSAyKSB8
fCAoISh3aWR0aCAlIGtCbG9ja1dpZHRoKSAmJiB3aWR0aCA8PSBtYXhDb21wcmVzc2VkRGltZW5z
aW9uKTsKLSAgICAgICAgYm9vbCBoZWlnaHRWYWxpZCA9IChsZXZlbCAmJiBoZWlnaHQgPT0gMSkg
fHwgKGxldmVsICYmIGhlaWdodCA9PSAyKSB8fCAoIShoZWlnaHQgJSBrQmxvY2tIZWlnaHQpICYm
IGhlaWdodCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9uKTsKLSAgICAgICAgaWYgKCF3aWR0aFZh
bGlkIHx8ICFoZWlnaHRWYWxpZCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBv
ciBoZWlnaHQgaW52YWxpZCBmb3IgbGV2ZWwiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKLSAgICAgICAgLy8gSGVp
Z2h0IGFuZCB3aWR0aCBtdXN0IGJlIHBvd2VycyBvZiAyLgotICAgICAgICBpZiAoKHdpZHRoICYg
KHdpZHRoIC0gMSkpIHx8IChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOwotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqIHRleCkKLXsKLSAg
ICBpZiAoeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDApIHsKLSAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ4b2Zm
c2V0IG9yIHlvZmZzZXQgPCAwIik7Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAg
c3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0Jf
UzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQ1X0VYVDogewotICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OwotICAgICAgICBj
b25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgaWYgKCh4b2Zmc2V0ICUga0Jsb2Nr
V2lkdGgpIHx8ICh5b2Zmc2V0ICUga0Jsb2NrSGVpZ2h0KSkgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlv
bk5hbWUsICJ4b2Zmc2V0IG9yIHlvZmZzZXQgbm90IG11bHRpcGxlIG9mIDQiKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAod2lkdGggLSB4b2Zmc2V0
ID4gdGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKQotICAgICAgICAgICAgfHwgaGVpZ2h0IC0g
eW9mZnNldCA+IHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHZhbGlkYXRlQ29tcHJlc3NlZFRl
eERpbWVuc2lvbnMoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQpOwotICAgIH0KLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZS
VENfNEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZS
VENfMkJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BW
UlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9Q
VlJUQ18yQlBQVjFfSU1HOiB7Ci0gICAgICAgIGlmICh4b2Zmc2V0IHx8IHlvZmZzZXQpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBhbmQgeW9mZnNldCBtdXN0IGJlIHplcm8i
KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAod2lk
dGggIT0gdGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKQotICAgICAgICAgICAgfHwgaGVpZ2h0
ICE9IHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImRpbWVuc2lvbnMgbXVzdCBtYXRjaCBleGlzdGluZyBsZXZlbCIpOwotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWxpZGF0ZUNvbXBy
ZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0KTsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd01v
ZGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKQotewotICAgIHN3aXRj
aCAobW9kZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPSU5UUzoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX1NUUklQOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkxJTkVfTE9PUDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FUzoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9TVFJJUDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpUUklBTkdMRV9GQU46Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJ
QU5HTEVTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIGRyYXcgbW9kZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3Mo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQotewotICAgIGlmIChtX3N0ZW5jaWxNYXNrICE9IG1f
c3RlbmNpbE1hc2tCYWNrIHx8IG1fc3RlbmNpbEZ1bmNSZWYgIT0gbV9zdGVuY2lsRnVuY1JlZkJh
Y2sgfHwgbV9zdGVuY2lsRnVuY01hc2sgIT0gbV9zdGVuY2lsRnVuY01hc2tCYWNrKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiZnJvbnQgYW5kIGJhY2sgc3RlbmNpbHMgc2V0dGluZ3MgZG8gbm90
IG1hdGNoIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVN0ZW5jaWxGdW5jKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZnVuYykKLXsKLSAgICBzd2l0Y2ggKGZ1
bmMpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpORVZFUjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpMRVNTOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxFUVVBTDoK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHUkVBVEVSOgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkdFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFUVVBTDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOT1RFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBTFdBWVM6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgZnVuY3Rpb24iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnByaW50R0xFcnJvclRvQ29u
c29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFtX251bUdMRXJyb3JzVG9D
b25zb2xlQWxsb3dlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLS1tX251bUdMRXJyb3JzVG9D
b25zb2xlQWxsb3dlZDsKLSAgICBwcmludFdhcm5pbmdUb0NvbnNvbGUobWVzc2FnZSk7Ci0KLSAg
ICBpZiAoIW1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkKQotICAgICAgICBwcmludFdhcm5p
bmdUb0NvbnNvbGUoIldlYkdMOiB0b28gbWFueSBlcnJvcnMsIG5vIG1vcmUgZXJyb3JzIHdpbGwg
YmUgcmVwb3J0ZWQgdG8gdGhlIGNvbnNvbGUgZm9yIHRoaXMgY29udGV4dC4iKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnByaW50V2FybmluZ1RvQ29uc29sZShjb25zdCBTdHJp
bmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYgKCFjYW52YXMoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGNhbnZhcygpLT5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlJl
bmRlcmluZywgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCBtZXNzYWdlKTsKLX0KLQotYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVu
dCkKLXsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0FUVEFDSE1FTlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9B
VFRBQ0hNRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRU
QUNITUVOVDoKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKG1fd2Vi
Z2xEcmF3QnVmZmVycwotICAgICAgICAgICAgJiYgYXR0YWNobWVudCA+IEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMAotICAgICAgICAgICAgJiYgYXR0YWNobWVudCA8IHN0YXRp
Y19jYXN0PEdDM0RlbnVtPihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgKyBn
ZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgYXR0YWNobWVudCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9k
ZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
VU5DX0FERDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1NVQlRSQUNUOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2Rl
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCkKLXsKLSAgICBpZiAoKChzcmMgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQz
RDo6T05FX01JTlVTX0NPTlNUQU5UX0NPTE9SKQotICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpP
TkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpKQotICAgICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfQ09OU1RBTlRfQ09MT1IpCi0gICAgICAgICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9N
SU5VU19DT05TVEFOVF9BTFBIQSkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW5jb21wYXRp
YmxlIHNyYyBhbmQgZHN0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFi
aWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApCi17Ci0gICAgc3dp
dGNoIChjYXApIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfVEVTVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RF
U1Q6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgY2FwYWJpbGl0eSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQotewotICAg
IGlmICghdikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVy
cyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwg
cmVxdWlyZWRNaW5TaXplKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1
aXJlZE1pblNpemUpCi17Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJh
eSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0ZVVu
aWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5k
YXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwg
R0MzRHNpemVpIHNpemUsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgcmV0dXJu
IHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwg
ZmFsc2UsIHYsIHNpemUsIHJlcXVpcmVkTWluU2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6
ZSkKLXsKLSAgICBpZiAoIXYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJp
eFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCks
IHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVk
TWluU2l6ZSkKLXsKLSAgICBpZiAoIWxvY2F0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9uIGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghdikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAo
dHJhbnNwb3NlKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHNpemUgPCByZXF1aXJlZE1pblNp
emUgfHwgKHNpemUgJSByZXF1aXJlZE1pblNpemUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHNpemUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotV2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZm
ZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7Ci0gICAg
c3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FS
UkFZX0JVRkZFUjoKLSAgICAgICAgYnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5n
ZXRFbGVtZW50QXJyYXlCdWZmZXIoKS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSOgotICAgICAgICBidWZmZXIgPSBtX2JvdW5k
QXJyYXlCdWZmZXIuZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0
aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IH0KLSAgICBpZiAoIWJ1ZmZlcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgc3dpdGNoICh1c2FnZSkgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZ
TkFNSUNfRFJBVzoKLSAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKLSAgICB9Ci0gICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCB1c2FnZSIpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJubyBpbWFnZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNvbnN0
IFVSTCYgdXJsID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3BvbnNlKCkudXJsKCk7Ci0gICAg
aWYgKHVybC5pc051bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxpZCgpKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICB9Ci0gICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7Ci0gICAgICAgIGVjID0g
U0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MQ2FudmFz
RWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52
YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1
ZmZlcigpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBjYW52YXMiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICBpZiAod291bGRUYWludE9yaWdpbihjYW52YXMpKSB7Ci0gICAg
ICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAg
IHJldHVybiB0cnVlOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBp
ZiAoIXZpZGVvIHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQo
KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpIHsKLSAgICAgICAgZWMg
PSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYmZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0Rz
aXplaSBleHBlY3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQg
djIsIEdDM0RmbG9hdCB2MykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVl
cy4KLSAgICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIHN3aXRj
aCAoZXhwZWN0ZWRTaXplKSB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIDI6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB2
MCwgdjEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotICAgIFZlcnRleEF0dHJpYlZhbHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVy
dGV4QXR0cmliVmFsdWVbaW5kZXhdOwotICAgIGF0dHJpYlZhbHVlLnZhbHVlWzBdID0gdjA7Ci0g
ICAgYXR0cmliVmFsdWUudmFsdWVbMV0gPSB2MTsKLSAgICBhdHRyaWJWYWx1ZS52YWx1ZVsyXSA9
IHYyOwotICAgIGF0dHJpYlZhbHVlLnZhbHVlWzNdID0gdjM7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXpl
KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoIXYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKGZ1bmN0aW9uTmFtZSwgaW5kZXgs
IHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIGV4cGVjdGVkU2l6ZSk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNp
emVpIGV4cGVjdGVkU2l6ZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJh
eSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXpl
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgotICAgIGlm
IChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgc3dpdGNoIChleHBlY3Rl
ZFNpemUpIHsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhB
dHRyaWIxZnYoaW5kZXgsIHYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoK
LSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2KTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYjNmdihpbmRleCwgdik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSA0OgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHYpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgVmVydGV4QXR0cmliVmFs
dWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07Ci0gICAgYXR0cmli
VmFsdWUuaW5pdFZhbHVlKCk7Ci0gICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGV4cGVjdGVkU2l6
ZTsgKytpaSkKLSAgICAgICAgYXR0cmliVmFsdWUudmFsdWVbaWldID0gdltpaV07Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppbml0VmVydGV4QXR0cmliMCgpCi17Ci0gICAgV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKLSAgICAKLSAgICBt
X3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBjcmVhdGVCdWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmJp
bmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyLT5vYmplY3QoKSk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29u
dGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcp
OwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKLSAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92
ZXJ0ZXhBdHRyaWIwQnVmZmVyOwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwKTsKLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0
dHJpYkFycmF5KDApOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOwotICAgIG1f
dmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdID0gMC4wZjsKLSAgICBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJWYWx1ZVsxXSA9IDAuMGY7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0g
PSAwLjBmOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKLSAgICBt
X2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOwotICAgIG1fdmVydGV4QXR0cmliMFVz
ZWRCZWZvcmUgPSBmYWxzZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVs
YXRlVmVydGV4QXR0cmliMChHQzNEc2l6ZWkgbnVtVmVydGV4KQotewotICAgIGNvbnN0IFdlYkdM
VmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7Ci0gICAgY29uc3QgVmVy
dGV4QXR0cmliVmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVswXTsKLSAg
ICBpZiAoIW1fY3VycmVudFByb2dyYW0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29s
IHVzaW5nVmVydGV4QXR0cmliMCA9IG1fY3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRy
aWIwKCk7Ci0gICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMCkKLSAgICAgICAgbV92ZXJ0ZXhBdHRy
aWIwVXNlZEJlZm9yZSA9IHRydWU7Ci0gICAgaWYgKHN0YXRlLmVuYWJsZWQgJiYgdXNpbmdWZXJ0
ZXhBdHRyaWIwKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF1c2luZ1ZlcnRleEF0
dHJpYjAgJiYgIW1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKLSAgICBtX2NvbnRleHQt
PmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyLT5vYmplY3QoKSk7Ci0gICAgR0MzRHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0g
KG51bVZlcnRleCArIDEpICogNCAqIHNpemVvZihHQzNEZmxvYXQpOwotICAgIGlmIChidWZmZXJE
YXRhU2l6ZSA+IG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUpIHsKLSAgICAgICAgbV9jb250ZXh0
LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFT
aXplLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKLSAgICAgICAgbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IGJ1ZmZlckRhdGFTaXplOwotICAgICAgICBtX2ZvcmNlQXR0
cmliMEJ1ZmZlclJlZmlsbCA9IHRydWU7Ci0gICAgfQotICAgIGlmICh1c2luZ1ZlcnRleEF0dHJp
YjAKLSAgICAgICAgJiYgKG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsCi0gICAgICAgICAgICB8
fCBhdHRyaWJWYWx1ZS52YWx1ZVswXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXQot
ICAgICAgICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyVmFsdWVbMV0KLSAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzJdICE9IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdCi0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1
ZVszXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSkpIHsKLSAgICAgICAgYXV0byBi
dWZmZXJEYXRhID0gc3RkOjptYWtlX3VuaXF1ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEp
ICogNCk7Ci0gICAgICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAx
OyArK2lpKSB7Ci0gICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNF0gPSBhdHRyaWJWYWx1ZS52
YWx1ZVswXTsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1
ZS52YWx1ZVsxXTsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBhdHRyaWJW
YWx1ZS52YWx1ZVsyXTsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgM10gPSBhdHRy
aWJWYWx1ZS52YWx1ZVszXTsKLSAgICAgICAgfQotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXJWYWx1ZVswXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOwotICAgICAgICBtX3ZlcnRleEF0dHJp
YjBCdWZmZXJWYWx1ZVsxXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzFdOwotICAgICAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwotICAgICAgICBt
X3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOwotICAg
ICAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOwotICAgICAgICBtX2NvbnRl
eHQtPmJ1ZmZlclN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnVm
ZmVyRGF0YVNpemUsIGJ1ZmZlckRhdGEuZ2V0KCkpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYlBvaW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAw
KTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJl
c3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCkKLXsKLSAgICBjb25zdCBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2Jv
dW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOwotICAgIGlmIChz
dGF0ZS5idWZmZXJCaW5kaW5nICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikgewotICAgICAgICBt
X2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2Jq
ZWN0T3JaZXJvKHN0YXRlLmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgbV9jb250ZXh0
LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5v
cm1hbGl6ZWQsIHN0YXRlLm9yaWdpbmFsU3RyaWRlLCBzdGF0ZS5vZmZzZXQpOwotICAgIH0KLSAg
ICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwg
b2JqZWN0T3JaZXJvKG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKSkpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCkKLXsKLSAgICBSZWZQ
dHI8V2ViR0xDb250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOwotICAg
IGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKLSAgICBtX3Jlc3RvcmVBbGxvd2VkID0g
ZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQoKTsKLSAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0g
UmVhbExvc3RDb250ZXh0ICYmIG1fcmVzdG9yZUFsbG93ZWQpCi0gICAgICAgIG1fcmVzdG9yZVRp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1h
eWJlUmVzdG9yZUNvbnRleHQoKQotewotICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKLSAgICBp
ZiAoIW1fY29udGV4dExvc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSByZW5kZXJp
bmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9m
IHRoZQotICAgIC8vIHdlYmdsY29udGV4dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVy
LgotICAgIC8vCi0gICAgLy8gQmVjYXVzZSBvZiB0aGUgd2F5IG1fcmVzdG9yZVRpbWVyIGlzIHNl
dCB1cCBmb3IgcmVhbCB2cy4gc3ludGhldGljIGxvc3QKLSAgICAvLyBjb250ZXh0IGV2ZW50cywg
d2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHRlc3Qgc2hvcnQtY2lyY3VpdGluZwot
ICAgIC8vIHRoZSByZXRyeSBsb29wIGZvciByZWFsIGNvbnRleHQgbG9zdCBldmVudHMuCi0gICAg
aWYgKCFtX3Jlc3RvcmVBbGxvd2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgY29udGV4
dExvc3RSZWFzb24gPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNl
dFN0YXR1c0FSQigpOwotCi0gICAgc3dpdGNoIChjb250ZXh0TG9zdFJlYXNvbikgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOgotICAgICAgICAvLyBUaGUgR3JhcGhpY3ND
b250ZXh0M0QgaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IGZ1bGx5Ci0gICAgICAgIC8vIHN1cHBv
cnQgR0xfQVJCX3JvYnVzdG5lc3Mgc2VtYW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhlCi0g
ICAgICAgIC8vIFdFQkdMX2xvc2VfY29udGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVuIHVz
ZWQgdG8gZm9yY2UKLSAgICAgICAgLy8gYSBsb3N0IGNvbnRleHQuCi0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpHVUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6Ci0gICAgICAg
IC8vIFRoZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250ZXh0
IHdhcwotICAgICAgICAvLyBndWlsdHkgb2YgY2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQuCi0g
ICAgICAgIHByaW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBvbiB0
aGUgcGFnZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3Jpbmcg
dGhlIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpJ
Tk5PQ0VOVF9DT05URVhUX1JFU0VUX0FSQjoKLSAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRoZSBj
b250ZXh0IHRvIGJlIHJlc3RvcmVkLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6VU5LTk9XTl9DT05URVhUX1JFU0VUX0FSQjoKLSAgICAgICAgLy8gV2Fybi4gSWRlYWxs
eSwgcHJvbXB0IHRoZSB1c2VyIHRlbGxpbmcgdGhlbSB0aGF0IFdlYkdMCi0gICAgICAgIC8vIGNv
bnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8K
LSAgICAgICAgLy8gcmVzZXQgYW5kIGFzayB0aGVtIHdoZXRoZXIgdGhleSB3YW50IHRvIGNvbnRp
bnVlIHJ1bm5pbmcKLSAgICAgICAgLy8gdGhlIGNvbnRlbnQuIE9ubHkgaWYgdGhleSBzYXkgInll
cyIgc2hvdWxkIHdlIHN0YXJ0Ci0gICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUg
Y29udGV4dC4KLSAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBj
b250ZW50IG9uIHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRv
IHJlc2V0Iik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEZyYW1lKiBmcmFtZSA9IGNh
bnZhcygpLT5kb2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFt
ZS0+c2V0dGluZ3MoKS53ZWJHTEVuYWJsZWQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZy
YW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICBy
ZXR1cm47Ci0gICAgU2Nyb2xsVmlldyogcm9vdCA9IHZpZXctPnJvb3QoKTsKLSAgICBpZiAoIXJv
b3QpCi0gICAgICAgIHJldHVybjsKLSAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gcm9vdC0+
aG9zdFdpbmRvdygpOwotICAgIGlmICghaG9zdFdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGUobV9hdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0g
ICAgICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQpCi0gICAgICAg
ICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3Qoc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0
ZW1wdHMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAvLyBUaGlzIGxpa2VseSBzaG91bGRu
J3QgaGFwcGVuIGJ1dCBpcyB0aGUgYmVzdCB3YXkgdG8gcmVwb3J0IGl0IHRvIHRoZSBXZWJHTCBh
cHAuCi0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICIiLCAiZXJyb3IgcmVzdG9yaW5nIGNvbnRleHQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3
aXRoIHRoZSBuZXcgR3JhcGhpY3NDb250ZXh0M0QuCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikg
ewotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKLSAgICAgICAg
RHJhd2luZ0J1ZmZlcjo6UHJlc2VydmVEcmF3aW5nQnVmZmVyIHByZXNlcnZlID0gbV9hdHRyaWJ1
dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA/IERyYXdpbmdCdWZmZXI6OlByZXNlcnZlIDogRHJh
d2luZ0J1ZmZlcjo6RGlzY2FyZDsKLSAgICAgICAgRHJhd2luZ0J1ZmZlcjo6QWxwaGFSZXF1aXJl
bWVudCBhbHBoYSA9IG1fYXR0cmlidXRlcy5hbHBoYSA/IERyYXdpbmdCdWZmZXI6OkFscGhhIDog
RHJhd2luZ0J1ZmZlcjo6T3BhcXVlOwotICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5n
QnVmZmVyOjpjcmVhdGUoY29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksIHBy
ZXNlcnZlLCBhbHBoYSk7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgIH0K
LQotICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOwot
ICAgIHNldHVwRmxhZ3MoKTsKLSAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwotICAgIGNhbnZh
cygpLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LndlYmdsY29udGV4dHJlc3RvcmVkRXZlbnQsIGZhbHNlLCB0cnVlLCAiIikpOwotfQotCi1TdHJp
bmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbnN1cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYgdGV4
dCkgY29uc3QKLXsKLSAgICBpZiAodGV4dC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6
ZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1cm4gdGV4dDsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0
eSkKLSAgICA6IG1fYnVmZmVycyhzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFn
ZUJ1ZmZlcj5bXT4oY2FwYWNpdHkpKQotICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKLXsKLX0K
LQotSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNo
ZTo6aW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpbnQgaTsKLSAgICBm
b3IgKGkgPSAwOyBpIDwgbV9jYXBhY2l0eTsgKytpKSB7Ci0gICAgICAgIEltYWdlQnVmZmVyKiBi
dWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghYnVmKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGlmIChidWYtPmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICBidWJibGVUb0Zyb250KGkpOwotICAgICAgICByZXR1cm4g
YnVmOwotICAgIH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IElt
YWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwgMSk7Ci0gICAgaWYgKCF0ZW1wKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpID0gc3RkOjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOwotICAgIG1f
YnVmZmVyc1tpXSA9IFdURjo6bW92ZSh0ZW1wKTsKLQotICAgIEltYWdlQnVmZmVyKiBidWYgPSBt
X2J1ZmZlcnNbaV0uZ2V0KCk7Ci0gICAgYnViYmxlVG9Gcm9udChpKTsKLSAgICByZXR1cm4gYnVm
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6
YnViYmxlVG9Gcm9udChpbnQgaWR4KQotewotICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAwOyAt
LWkpCi0gICAgICAgIG1fYnVmZmVyc1tpXS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKLX0KLQotbmFt
ZXNwYWNlIHsKLQotICAgIFN0cmluZyBHZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJvcikKLSAg
ICB7Ci0gICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNOgotICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX0VOVU0iOwot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOgotICAgICAgICAg
ICAgcmV0dXJuICJJTlZBTElEX1ZBTFVFIjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT046Ci0gICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFU
SU9OIjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKLSAg
ICAgICAgICAgIHJldHVybiAiT1VUX09GX01FTU9SWSI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgotICAgICAgICAgICAgcmV0
dXJuICJJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiI7Ci0gICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTDoKLSAgICAgICAgICAgIHJldHVybiAiQ09O
VEVYVF9MT1NUX1dFQkdMIjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBT
dHJpbmc6OmZvcm1hdCgiV2ViR0wgRVJST1IoJTA0eCkiLCBlcnJvcik7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLX0gLy8gbmFtZXNwYWNlIGFub255bW91cwotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IsIGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5j
ZSBkaXNwbGF5KQotewotICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlICYmIGRp
c3BsYXkgPT0gRGlzcGxheUluQ29uc29sZSkgewotICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygi
V2ViR0w6ICIpICsgR2V0RXJyb3JTdHJpbmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rp
b25OYW1lKSArICI6ICIgKyBTdHJpbmcoZGVzY3JpcHRpb24pOwotICAgICAgcHJpbnRHTEVycm9y
VG9Db25zb2xlKHN0cik7Ci0gICAgfQotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3Io
ZXJyb3IpOwotfQotCi0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludEdMV2Fybmlu
Z1RvQ29uc29sZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0
aW9uKQotewotICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7Ci0gICAgICAg
IFN0cmluZyBzdHIgPSBTdHJpbmcoIldlYkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsg
IjogIiArIFN0cmluZyhkZXNjcmlwdGlvbik7Ci0gICAgICAgIHByaW50R0xFcnJvclRvQ29uc29s
ZShzdHIpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U3Rl
bmNpbFRlc3QoKQotewotICAgIGJvb2wgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKLQotICAg
IGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBt
X2ZyYW1lYnVmZmVyQmluZGluZy0+aGFzU3RlbmNpbEJ1ZmZlcigpOwotICAgIGVsc2UgewotICAg
ICAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGdldENvbnRl
eHRBdHRyaWJ1dGVzKCk7Ci0gICAgICAgIGhhdmVTdGVuY2lsQnVmZmVyID0gYXR0cmlidXRlcy0+
c3RlbmNpbCgpOwotICAgIH0KLSAgICBlbmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfVEVTVCwKLSAgICAgICAgICAgICAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCAmJiBo
YXZlU3RlbmNpbEJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFi
bGVPckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpCi17Ci0gICAgaWYg
KGVuYWJsZSkKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwYWJpbGl0eSk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwYWJpbGl0eSk7Ci19Ci0KLUludFNpemUg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQ2FudmFzU2l6ZSgpCi17Ci0gICAgcmV0dXJu
IEludFNpemUoY2xhbXAoY2FudmFzKCktPndpZHRoKCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzBd
KSwKLSAgICAgICAgICAgICAgICAgICBjbGFtcChjYW52YXMoKS0+aGVpZ2h0KCksIDEsIG1fbWF4
Vmlld3BvcnREaW1zWzFdKSk7Ci19Ci0KLUdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRNYXhEcmF3QnVmZmVycygpCi17Ci0gICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIGlmICghbV9tYXhEcmF3QnVmZmVycykKLSAgICAgICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAm
bV9tYXhEcmF3QnVmZmVycyk7Ci0gICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAg
ICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNI
TUVOVFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKLSAgICAvLyBXRUJHTF9kcmF3X2J1
ZmZlcnMgcmVxdWlyZXMgTUFYX0NPTE9SX0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMu
Ci0gICAgcmV0dXJuIHN0ZDo6bWluKG1fbWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2ht
ZW50cyk7Ci19Ci0KLUdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0
dGFjaG1lbnRzKCkKLXsKLSAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29u
dGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhU
LCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKLSAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1l
bnRzOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2V0QmFja0RyYXdCdWZmZXIo
R0MzRGVudW0gYnVmKQotewotICAgIG1fYmFja0RyYXdCdWZmZXIgPSBidWY7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCkKLXsKLSAg
ICBFeGNlcHRpb25Db2RlIGVjOwotICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpLCBlYyk7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCi17Ci0g
ICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAgICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJE
QmluZGluZy5nZXQoKSwgZWMpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3Vw
cG9ydHNEcmF3QnVmZmVycygpCi17Ci0gICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJl
bWVudHNDaGVja2VkKSB7Ci0gICAgICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0No
ZWNrZWQgPSB0cnVlOwotICAgICAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gV2ViR0xEcmF3
QnVmZmVyczo6c3VwcG9ydGVkKHRoaXMpOwotICAgIH0KLSAgICByZXR1cm4gbV9kcmF3QnVmZmVy
c1N1cHBvcnRlZDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXNJ
bnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBH
QzNEc2l6ZWkgcHJpbWNvdW50KQotewotICAgIGlmICghdmFsaWRhdGVEcmF3QXJyYXlzKCJkcmF3
QXJyYXlzSW5zdGFuY2VkIiwgbW9kZSwgZmlyc3QsIGNvdW50LCBwcmltY291bnQpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAocHJpbWNvdW50IDwgMCkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRyYXdBcnJheXNJbnN0
YW5jZWQiLCAicHJpbWNvdW50IDwgMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAg
aWYgKCFwcmltY291bnQpIHsKLSAgICAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwotCi0gICAgYm9vbCB2
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50
KCkpCi0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJp
YjAoZmlyc3QgKyBjb3VudCAtIDEpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAg
ICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgdHJ1
ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHByaW1jb3VudCk7Ci0gICAgbV9jb250ZXh0LT5kcmF3QXJy
YXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKLSAgICBpZiAoIWlz
R0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0
b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVT
Mk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJy
YXlzSW5zdGFuY2VkIiwgZmFsc2UpOwotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVt
IG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwg
R0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7Ci0g
ICAgaWYgKCF2YWxpZGF0ZURyYXdFbGVtZW50cygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgbW9k
ZSwgY291bnQsIHR5cGUsIG9mZnNldCwgbnVtRWxlbWVudHMpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAocHJpbWNvdW50IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRyYXdFbGVtZW50c0luc3RhbmNlZCIsICJw
cmltY291bnQgPCAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXByaW1j
b3VudCkgewotICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0KLSAgICBib29sIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAg
ICAgICBpZiAoIW51bUVsZW1lbnRzKQotICAgICAgICAgICAgdmFsaWRhdGVJbmRleEFycmF5UHJl
Y2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxl
bWVudHMpOwotICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhB
dHRyaWIwKG51bUVsZW1lbnRzKTsKLSAgICB9Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgp
KQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNl
ZCIsIHRydWUpOwotICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNv
dW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBwcmltY291bnQpOwot
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCi0g
ICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7Ci0gICAg
aWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5l
c3MoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIGZhbHNlKTsKLSAgICBtYXJrQ29udGV4dENoYW5n
ZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYkRpdmlz
b3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGluZGV4ID49IG1f
bWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYkRpdmlzb3IiLCAiaW5kZXggb3V0
IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwotICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNvcik7Ci19Ci0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmgJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgwOSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYg
V2ViR0xSZW5kZXJpbmdDb250ZXh0X2gKLSNkZWZpbmUgV2ViR0xSZW5kZXJpbmdDb250ZXh0X2gK
LQotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaCIKLSNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIlRpbWVy
LmgiCi0jaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1
ZGUgPHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGltZS9JbnQzMkFycmF5
Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgQU5HTEVJbnN0YW5jZWRBcnJheXM7Ci1jbGFzcyBFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWM7Ci1jbGFzcyBFWFRTaGFkZXJUZXh0dXJlTE9EOwotY2xhc3MgSFRNTEltYWdl
RWxlbWVudDsKLWNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7Ci1jbGFzcyBJbWFnZUJ1ZmZlcjsKLWNs
YXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBPRVNTdGFuZGFyZERlcml2YXRp
dmVzOwotY2xhc3MgT0VTVGV4dHVyZUZsb2F0OwotY2xhc3MgT0VTVGV4dHVyZUZsb2F0TGluZWFy
OwotY2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdDsKLWNsYXNzIE9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXI7Ci1jbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdDsKLWNsYXNzIE9FU0VsZW1lbnRJbmRl
eFVpbnQ7Ci1jbGFzcyBXZWJHTEFjdGl2ZUluZm87Ci1jbGFzcyBXZWJHTEJ1ZmZlcjsKLWNsYXNz
IFdlYkdMQ29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xDb250ZXh0T2JqZWN0OwotY2xhc3MgV2Vi
R0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLWNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJU
QzsKLWNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOwotY2xhc3MgV2ViR0xDb250ZXh0
QXR0cmlidXRlczsKLWNsYXNzIFdlYkdMRGVidWdSZW5kZXJlckluZm87Ci1jbGFzcyBXZWJHTERl
YnVnU2hhZGVyczsKLWNsYXNzIFdlYkdMRGVwdGhUZXh0dXJlOwotY2xhc3MgV2ViR0xEcmF3QnVm
ZmVyczsKLWNsYXNzIFdlYkdMRXh0ZW5zaW9uOwotY2xhc3MgV2ViR0xGcmFtZWJ1ZmZlcjsKLWNs
YXNzIFdlYkdMTG9zZUNvbnRleHQ7Ci1jbGFzcyBXZWJHTE9iamVjdDsKLWNsYXNzIFdlYkdMUHJv
Z3JhbTsKLWNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyOwotY2xhc3MgV2ViR0xTaGFkZXI7Ci1jbGFz
cyBXZWJHTFNoYXJlZE9iamVjdDsKLWNsYXNzIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0Owot
Y2xhc3MgV2ViR0xUZXh0dXJlOwotY2xhc3MgV2ViR0xVbmlmb3JtTG9jYXRpb247Ci1jbGFzcyBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwotCi10eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwot
Ci1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQgZmluYWwgOiBwdWJsaWMgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IGNyZWF0ZShIVE1MQ2FudmFz
RWxlbWVudCosIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqKTsKLSAgICB2aXJ0dWFsIH5XZWJHTFJl
bmRlcmluZ0NvbnRleHQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpczNkKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50IGFjY2VsZXJhdGVkIDNkIGNhbnZhcyBvbiBXaW5kb3dzLgotICAgIHZpcnR1YWwgYm9v
bCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KLSNlbHNl
Ci0gICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9Ci0jZW5kaWYKLQotICAgIGludCBkcmF3aW5nQnVmZmVyV2lkdGgoKSBjb25zdDsK
LSAgICBpbnQgZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNvbnN0OwotCi0gICAgdm9pZCBhY3RpdmVU
ZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGF0dGFj
aFNoYWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBiaW5kQnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCBiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyKiwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQs
IFdlYkdMUmVuZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZFRleHR1
cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCBibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwgR0MzRGZsb2F0
IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSk7Ci0gICAgdm9pZCBibGVuZEVxdWF0aW9uKEdDM0RlbnVt
IG1vZGUpOwotICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0Is
IEdDM0RlbnVtIG1vZGVBbHBoYSk7Ci0gICAgdm9pZCBibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3Rv
ciwgR0MzRGVudW0gZGZhY3Rvcik7Ci0gICAgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51
bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRz
dEFscGhhKTsKLQotICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9u
ZyBzaXplLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYnVmZmVy
RGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBHQzNEZW51bSB1c2FnZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFy
cmF5QnVmZmVyVmlldyogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBB
cnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYnVmZmVyU3ViRGF0
YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0
YSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgR0MzRGVudW0gY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyhHQzNEZW51bSB0YXJnZXQpOwotICAgIHZvaWQgY2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spOwot
ICAgIHZvaWQgY2xlYXJDb2xvcihHQzNEZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0Rm
bG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpOwotICAgIHZvaWQgY2xlYXJEZXB0aChHQzNEZmxv
YXQpOwotICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQpOwotICAgIHZvaWQgY29sb3JNYXNr
KEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdD
M0Rib29sZWFuIGFscGhhKTsKLSAgICB2b2lkIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqLCBF
eGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXpl
aSB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpOwotICAgIHZvaWQgY29tcHJl
c3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBB
cnJheUJ1ZmZlclZpZXcqIGRhdGEpOwotCi0gICAgdm9pZCBjb3B5VGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50
IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50
IGJvcmRlcik7Ci0gICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLQotICAgIFBh
c3NSZWZQdHI8V2ViR0xCdWZmZXI+IGNyZWF0ZUJ1ZmZlcigpOwotICAgIFBhc3NSZWZQdHI8V2Vi
R0xGcmFtZWJ1ZmZlcj4gY3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdM
UHJvZ3JhbT4gY3JlYXRlUHJvZ3JhbSgpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZm
ZXI+IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IGNy
ZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0
cjxXZWJHTFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKLQotICAgIHZvaWQgY3VsbEZhY2UoR0Mz
RGVudW0gbW9kZSk7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciopOwotICAg
IHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciopOwotICAgIHZvaWQgZGVs
ZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKLSAgICB2b2lkIGRlbGV0ZVJlbmRlcmJ1ZmZlcihX
ZWJHTFJlbmRlcmJ1ZmZlciopOwotICAgIHZvaWQgZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyKik7
Ci0gICAgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSopOwotCi0gICAgdm9pZCBkZXB0
aEZ1bmMoR0MzRGVudW0pOwotICAgIHZvaWQgZGVwdGhNYXNrKEdDM0Rib29sZWFuKTsKLSAgICB2
b2lkIGRlcHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxvYXQgekZhcik7Ci0gICAgdm9p
ZCBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCBkaXNhYmxlKEdDM0RlbnVtIGNhcCk7Ci0gICAgdm9pZCBkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IGRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwg
R0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRp
b25Db2RlJik7Ci0KLSAgICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApOwotICAgIHZvaWQgZW5h
YmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIGZpbmlzaCgpOwotICAgIHZvaWQgZmx1c2goKTsKLSAgICB2b2lkIGZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVu
dW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBHQzNEaW50
IGxldmVsLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmcm9udEZhY2UoR0MzRGVudW0gbW9k
ZSk7Ci0gICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpOwotCi0gICAgUGFz
c1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qLCBH
QzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xBY3Rp
dmVJbmZvPiBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIEdDM0R1aW50IGluZGV4LCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgYm9vbCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFt
KiwgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIEdD
M0RpbnQgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29uc3QgU3RyaW5nJiBuYW1l
KTsKLSAgICBXZWJHTEdldEluZm8gZ2V0QnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMQ29u
dGV4dEF0dHJpYnV0ZXM+IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0gICAgR0MzRGVudW0gZ2V0
RXJyb3IoKTsKLSAgICBXZWJHTEV4dGVuc2lvbiogZ2V0RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
bmFtZSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
cihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFBhcmFtZXRlcihHQzNEZW51bSBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRQcm9ncmFtUGFyYW1l
dGVyKFdlYkdMUHJvZ3JhbSosIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
U3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICBXZWJHTEdldEluZm8gZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0
U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRlciosIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0PiBnZXRT
aGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVudW0gcHJlY2lz
aW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoV2Vi
R0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgVmVjdG9yPFN0cmluZz4gZ2V0U3VwcG9y
dGVkRXh0ZW5zaW9ucygpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRUZXhQYXJhbWV0ZXIoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdMR2V0
SW5mbyBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+
IGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFZlcnRleEF0dHJpYihHQzNEdWludCBpbmRl
eCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBsb25nIGxvbmcgZ2V0VmVy
dGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSk7Ci0KLSAgICB2
b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKTsKLSAgICBHQzNEYm9vbGVh
biBpc0J1ZmZlcihXZWJHTEJ1ZmZlciopOwotICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpIGNvbnN0
OwotICAgIEdDM0Rib29sZWFuIGlzRW5hYmxlZChHQzNEZW51bSBjYXApOwotICAgIEdDM0Rib29s
ZWFuIGlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciopOwotICAgIEdDM0Rib29sZWFuIGlz
UHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKLSAgICBHQzNEYm9vbGVhbiBpc1JlbmRlcmJ1ZmZlcihX
ZWJHTFJlbmRlcmJ1ZmZlciopOwotICAgIEdDM0Rib29sZWFuIGlzU2hhZGVyKFdlYkdMU2hhZGVy
Kik7Ci0gICAgR0MzRGJvb2xlYW4gaXNUZXh0dXJlKFdlYkdMVGV4dHVyZSopOwotCi0gICAgdm9p
ZCBsaW5lV2lkdGgoR0MzRGZsb2F0KTsKLSAgICB2b2lkIGxpbmtQcm9ncmFtKFdlYkdMUHJvZ3Jh
bSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1l
LCBHQzNEaW50IHBhcmFtKTsKLSAgICB2b2lkIHBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3Rv
ciwgR0MzRGZsb2F0IHVuaXRzKTsKLSAgICB2b2lkIHJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZvaWQgcmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7Ci0gICAgdm9pZCByZW5kZXJidWZm
ZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCBzYW1wbGVDb3ZlcmFnZShH
QzNEZmxvYXQgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCk7Ci0gICAgdm9pZCBzY2lzc29yKEdD
M0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwot
ICAgIHZvaWQgc2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCBy
ZWYsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51
bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzayk7Ci0gICAg
dm9pZCBzdGVuY2lsTWFzayhHQzNEdWludCk7Ci0gICAgdm9pZCBzdGVuY2lsTWFza1NlcGFyYXRl
KEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbE9wKEdDM0Rl
bnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7Ci0gICAgdm9pZCBzdGVu
Y2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFp
bCwgR0MzRGVudW0genBhc3MpOwotCi0gICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
Ci0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJy
YXlCdWZmZXJWaWV3KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0
YSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50Kiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhj
ZXB0aW9uQ29kZSYpOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lkIHRleEltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlk
ZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotI2VuZGlmCi0KLSAgICB2b2lkIHRleFBhcmFt
ZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKTsK
LSAgICB2b2lkIHRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwg
R0MzRGludCBwYXJhbSk7Ci0KLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5
QnVmZmVyVmlldyosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsK
LSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZp
ZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSNlbmRpZgotCi0gICAgdm9pZCB1bmlmb3Jt
MWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgdW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rm
bG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZv
cm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50
KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTJm
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0Rm
bG9hdCB5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGludCB4LCBHQzNEaW50IHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0yaXYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0z
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2koY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RGludCB6LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2l2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCB1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxv
YXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdywgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9y
bTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwg
R0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00aShjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEaW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTRp
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0
KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZv
cm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBz
aXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9h
dDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4
NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYp
OwotCi0gICAgdm9pZCB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7
Ci0KLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCk7
Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSog
dmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpOwotICAgIHZvaWQgdmVydGV4
QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNE
c2l6ZWkgc2l6ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeik7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRy
aWIzZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKLSAgICB2b2lkIHZl
cnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXpl
aSBzaXplKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdyk7Ci0gICAgdm9pZCB2
ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKLSAg
ICB2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMs
IEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQg
aW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXpl
ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHN0cmlkZSwgbG9uZyBs
b25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB2aWV3cG9ydChHQzNEaW50
IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLQotICAg
IC8vIFdFQktJVF9sb3NlX2NvbnRleHQgc3VwcG9ydAotICAgIGVudW0gTG9zdENvbnRleHRNb2Rl
IHsKLSAgICAgICAgLy8gTG9zdCBjb250ZXh0IG9jY3VycmVkIGF0IHRoZSBncmFwaGljcyBzeXN0
ZW0gbGV2ZWwuCi0gICAgICAgIFJlYWxMb3N0Q29udGV4dCwKLQotICAgICAgICAvLyBMb3N0IGNv
bnRleHQgcHJvdm9rZWQgYnkgV0VCS0lUX2xvc2VfY29udGV4dC4KLSAgICAgICAgU3ludGhldGlj
TG9zdENvbnRleHQKLSAgICB9OwotICAgIHZvaWQgZm9yY2VMb3N0Q29udGV4dChMb3N0Q29udGV4
dE1vZGUpOwotICAgIHZvaWQgZm9yY2VSZXN0b3JlQ29udGV4dCgpOwotICAgIHZvaWQgbG9zZUNv
bnRleHRJbXBsKExvc3RDb250ZXh0TW9kZSk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRCogZ3Jh
cGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KLSAgICBX
ZWJHTENvbnRleHRHcm91cCogY29udGV4dEdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0
R3JvdXAuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIo
KSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpOwotCi0gICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7Ci0gICAgdmlydHVhbCB2b2lk
IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkgb3ZlcnJpZGU7Ci0gICAgUGFzc1JlZlB0
cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCk7Ci0KLSAgICB2
b2lkIHJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCopOwotICAgIHZvaWQgcmVt
b3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqKTsKLSAgICAKLSAgICB1bnNpZ25l
ZCBnZXRNYXhWZXJ0ZXhBdHRyaWJzKCkgY29uc3QgeyByZXR1cm4gbV9tYXhWZXJ0ZXhBdHRyaWJz
OyB9Ci0KLSAgICAvLyBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIGV4dGVuc2lvbiBmdW5jdGlvbnMu
Ci0gICAgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmly
c3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCk7Ci0gICAgdm9pZCBkcmF3
RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51
bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKLSAgICB2b2lk
IHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpOwot
Ci1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJHTERyYXdCdWZmZXJzOwotICAgIGZyaWVu
ZCBjbGFzcyBXZWJHTEZyYW1lYnVmZmVyOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTE9iamVjdDsK
LSAgICBmcmllbmQgY2xhc3MgT0VTVmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgZnJpZW5kIGNsYXNz
IFdlYkdMRGVidWdTaGFkZXJzOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0
dXJlQVRDOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM7Ci0g
ICAgZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOwotICAgIGZyaWVuZCBj
bGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxsYmFjazsKLSAgICBmcmll
bmQgY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKLQotICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dChIVE1MQ2FudmFzRWxlbWVudCosIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
KTsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqLCBQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOwot
ICAgIHZvaWQgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKLSAgICB2b2lkIHNldHVwRmxhZ3MoKTsK
LQotICAgIC8vIEFjdGl2ZURPTU9iamVjdAotICAgIHZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0
aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcCgpIG92ZXJyaWRl
OwotCi0gICAgdm9pZCBhZGRTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKLSAgICB2
b2lkIGFkZENvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0Kik7Ci0gICAgdm9pZCBkZXRh
Y2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7Ci0KLSAgICB2b2lkIGRlc3Ryb3lHcmFwaGljc0NvbnRl
eHQzRCgpOwotICAgIHZvaWQgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLSAgICAvLyBRdWVyeSB3
aGV0aGVyIGl0IGlzIGJ1aWx0IG9uIHRvcCBvZiBjb21wbGlhbnQgR0xFUzIgaW1wbGVtZW50YXRp
b24uCi0gICAgYm9vbCBpc0dMRVMyQ29tcGxpYW50KCkgeyByZXR1cm4gbV9pc0dMRVMyQ29tcGxp
YW50OyB9Ci0gICAgLy8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGlzIE5QT1Qgc3Ry
aWN0LgotICAgIGJvb2wgaXNHTEVTMk5QT1RTdHJpY3QoKSB7IHJldHVybiBtX2lzR0xFUzJOUE9U
U3RyaWN0OyB9Ci0gICAgLy8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGdlbmVyYXRl
cyBlcnJvcnMgb24gb3V0LW9mLWJvdW5kcyBidWZmZXIgYWNjZXNzZXMuCi0gICAgYm9vbCBpc0Vy
cm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkgeyByZXR1cm4gbV9pc0Vycm9yR2Vu
ZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzOyB9Ci0gICAgLy8gUXVlcnkgaWYgdGhlIEdMIGlt
cGxlbWVudGF0aW9uIGluaXRpYWxpemVzIHRleHR1cmVzL3JlbmRlcmJ1ZmZlcnMgdG8gMC4KLSAg
ICBib29sIGlzUmVzb3VyY2VTYWZlKCkgeyByZXR1cm4gbV9pc1Jlc291cmNlU2FmZTsgfQotICAg
IC8vIFF1ZXJ5IGlmIGRlcHRoX3N0ZW5jaWwgYnVmZmVyIGlzIHN1cHBvcnRlZC4KLSAgICBib29s
IGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkgeyByZXR1cm4gbV9pc0RlcHRoU3RlbmNpbFN1cHBv
cnRlZDsgfQotCi0gICAgLy8gSGVscGVyIHRvIHJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBP
cGVuR0wgZGF0YSB0eXBlcwotICAgIC8vIGxpa2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgotICAg
IHVuc2lnbmVkIGludCBzaXplSW5CeXRlcyhHQzNEZW51bSB0eXBlKTsKLQotICAgIC8vIEJhc2lj
IHZhbGlkYXRpb24gb2YgY291bnQgYW5kIG9mZnNldCBhZ2FpbnN0IG51bWJlciBvZiBlbGVtZW50
cyBpbiBlbGVtZW50IGFycmF5IGJ1ZmZlcgotICAgIGJvb2wgdmFsaWRhdGVFbGVtZW50QXJyYXlT
aXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpOwot
Ci0gICAgLy8gQ29uc2VydmF0aXZlIGJ1dCBxdWljayBpbmRleCB2YWxpZGF0aW9uCi0gICAgYm9v
bCB2YWxpZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWduZWQm
IG51bUVsZW1lbnRzUmVxdWlyZWQpOwotCi0gICAgLy8gUHJlY2lzZSBidXQgc2xvdyBpbmRleCB2
YWxpZGF0aW9uIC0tIG9ubHkgZG9uZSBpZiBjb25zZXJ2YXRpdmUgY2hlY2tzIGZhaWwKLSAgICBi
b29sIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0
eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQpOwot
ICAgIGJvb2wgdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKHVuc2lnbmVkIGVsZW1lbnRDb3VudCwg
dW5zaWduZWQgcHJpbWl0aXZlQ291bnQgPSAwKTsKLQotICAgIGJvb2wgdmFsaWRhdGVXZWJHTE9i
amVjdChjb25zdCBjaGFyKiwgV2ViR0xPYmplY3QqKTsKLQotICAgIGJvb2wgdmFsaWRhdGVEcmF3
QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRGludCBm
aXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKLSAgICBib29sIHZh
bGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9k
ZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNp
Z25lZCYgbnVtRWxlbWVudHMpOwotCi0gICAgLy8gQWRkcyBhIGNvbXByZXNzZWQgdGV4dHVyZSBm
b3JtYXQuCi0gICAgdm9pZCBhZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChHQzNEZW51bSk7Ci0K
LSAgICBQYXNzUmVmUHRyPEltYWdlPiBkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlKiwgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGV2aWNlU2NhbGVGYWN0b3IpOwotCi0jaWYgRU5BQkxFKFZJ
REVPKQotICAgIFBhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVUb0ltYWdlKEhUTUxWaWRlb0Vs
ZW1lbnQqLCBCYWNraW5nU3RvcmVDb3B5LCBFeGNlcHRpb25Db2RlJik7Ci0jZW5kaWYKLQotICAg
IFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwotICAgIFJlZlB0cjxXZWJHTENv
bnRleHRHcm91cD4gbV9jb250ZXh0R3JvdXA7Ci0KLSAgICAvLyBPcHRpb25hbCBzdHJ1Y3R1cmUg
Zm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIsIGluc3RlYWQgb2YgZGlyZWN0bHkKLSAg
ICAvLyB0byB0aGUgYmFjay1idWZmZXIgb2YgbV9jb250ZXh0LgotICAgIFJlZlB0cjxEcmF3aW5n
QnVmZmVyPiBtX2RyYXdpbmdCdWZmZXI7Ci0KLSAgICAvLyBEaXNwYXRjaGVzIGEgY29udGV4dCBs
b3N0IGV2ZW50IG9uY2UgaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IG9uZSBpcyBuZWVkZWQuCi0gICAg
Ly8gVGhpcyBpcyB1c2VkIGJvdGggZm9yIHN5bnRoZXRpYyBhbmQgcmVhbCBjb250ZXh0IGxvc3Nl
cy4gRm9yIHJlYWwgb25lcywgaXQncwotICAgIC8vIGxpa2VseSB0aGF0IHRoZXJlJ3Mgbm8gSmF2
YVNjcmlwdCBvbiB0aGUgc3RhY2ssIGJ1dCB0aGF0IG1pZ2h0IGJlIGRlcGVuZGVudAotICAgIC8v
IG9uIGhvdyBleGFjdGx5IHRoZSBwbGF0Zm9ybSBkaXNjb3ZlcnMgdGhhdCB0aGUgY29udGV4dCB3
YXMgbG9zdC4gRm9yIGJldHRlcgotICAgIC8vIHBvcnRhYmlsaXR5IHdlIGFsd2F5cyBkZWZlciB0
aGUgZGlzcGF0Y2ggb2YgdGhlIGV2ZW50LgotICAgIFRpbWVyIG1fZGlzcGF0Y2hDb250ZXh0TG9z
dEV2ZW50VGltZXI7Ci0gICAgYm9vbCBtX3Jlc3RvcmVBbGxvd2VkOwotICAgIFRpbWVyIG1fcmVz
dG9yZVRpbWVyOwotCi0gICAgYm9vbCBtX25lZWRzVXBkYXRlOwotICAgIGJvb2wgbV9tYXJrZWRD
YW52YXNEaXJ0eTsKLSAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVjdCo+IG1fY29udGV4dE9i
amVjdHM7Ci0KLSAgICAvLyBMaXN0IG9mIGJvdW5kIFZCTydzLiBVc2VkIHRvIG1haW50YWluIGlu
Zm8gYWJvdXQgc2l6ZXMgZm9yIEFSUkFZX0JVRkZFUiBhbmQgc3RvcmVkIHZhbHVlcyBmb3IgRUxF
TUVOVF9BUlJBWV9CVUZGRVIKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG1fYm91bmRBcnJheUJ1
ZmZlcjsKLSAgICAKLSAgICBSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gbV9kZWZh
dWx0VmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RP
RVM+IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdDsKLSAgICB2b2lkIHNldEJvdW5kVmVydGV4QXJy
YXlPYmplY3QoUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBhcnJheU9iamVj
dCkKLSAgICB7Ci0gICAgICAgIGlmIChhcnJheU9iamVjdCkKLSAgICAgICAgICAgIG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdCA9IGFycmF5T2JqZWN0OwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdDsK
LSAgICB9Ci0gICAgCi0gICAgY2xhc3MgVmVydGV4QXR0cmliVmFsdWUgewotICAgIHB1YmxpYzoK
LSAgICAgICAgVmVydGV4QXR0cmliVmFsdWUoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbml0
VmFsdWUoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgdm9pZCBpbml0VmFsdWUoKQot
ICAgICAgICB7Ci0gICAgICAgICAgICB2YWx1ZVswXSA9IDAuMGY7Ci0gICAgICAgICAgICB2YWx1
ZVsxXSA9IDAuMGY7Ci0gICAgICAgICAgICB2YWx1ZVsyXSA9IDAuMGY7Ci0gICAgICAgICAgICB2
YWx1ZVszXSA9IDEuMGY7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIEdDM0RmbG9hdCB2
YWx1ZVs0XTsKLSAgICB9OwotICAgIFZlY3RvcjxWZXJ0ZXhBdHRyaWJWYWx1ZT4gbV92ZXJ0ZXhB
dHRyaWJWYWx1ZTsKLSAgICB1bnNpZ25lZCBtX21heFZlcnRleEF0dHJpYnM7Ci0gICAgUmVmUHRy
PFdlYkdMQnVmZmVyPiBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7Ci0gICAgbG9uZyBtX3ZlcnRleEF0
dHJpYjBCdWZmZXJTaXplOwotICAgIEdDM0RmbG9hdCBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVs0XTsKLSAgICBib29sIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsOwotICAgIGJvb2wgbV92
ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZTsKLQotICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG1fY3Vy
cmVudFByb2dyYW07Ci0gICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG1fZnJhbWVidWZmZXJC
aW5kaW5nOwotICAgIFJlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbV9yZW5kZXJidWZmZXJCaW5k
aW5nOwotICAgIHN0cnVjdCBUZXh0dXJlVW5pdFN0YXRlIHsKLSAgICAgICAgUmVmUHRyPFdlYkdM
VGV4dHVyZT4gdGV4dHVyZTJEQmluZGluZzsKLSAgICAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4g
dGV4dHVyZUN1YmVNYXBCaW5kaW5nOwotICAgIH07Ci0gICAgVmVjdG9yPFRleHR1cmVVbml0U3Rh
dGU+IG1fdGV4dHVyZVVuaXRzOwotICAgIHVuc2lnbmVkIGxvbmcgbV9hY3RpdmVUZXh0dXJlVW5p
dDsKLQotICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG1fYmxhY2tUZXh0dXJlMkQ7Ci0gICAgUmVm
UHRyPFdlYkdMVGV4dHVyZT4gbV9ibGFja1RleHR1cmVDdWJlTWFwOwotCi0gICAgVmVjdG9yPEdD
M0RlbnVtPiBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0czsKLQotICAgIC8vIEZpeGVkLXNpemUg
Y2FjaGUgb2YgcmV1c2FibGUgaW1hZ2UgYnVmZmVycyBmb3IgdmlkZW8gdGV4SW1hZ2UyRCBjYWxs
cy4KLSAgICBjbGFzcyBMUlVJbWFnZUJ1ZmZlckNhY2hlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IExSVUltYWdlQnVmZmVyQ2FjaGUoaW50IGNhcGFjaXR5KTsKLSAgICAgICAgLy8gVGhlIHBvaW50
ZXIgcmV0dXJuZWQgaXMgb3duZWQgYnkgdGhlIGltYWdlIGJ1ZmZlciBtYXAuCi0gICAgICAgIElt
YWdlQnVmZmVyKiBpbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiBzaXplKTsKLSAgICBwcml2YXRl
OgotICAgICAgICB2b2lkIGJ1YmJsZVRvRnJvbnQoaW50IGlkeCk7Ci0gICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+W10+IG1fYnVmZmVyczsKLSAgICAg
ICAgaW50IG1fY2FwYWNpdHk7Ci0gICAgfTsKLSAgICBMUlVJbWFnZUJ1ZmZlckNhY2hlIG1fZ2Vu
ZXJhdGVkSW1hZ2VDYWNoZTsKLQotICAgIEdDM0RpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKLSAgICBH
QzNEaW50IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOwotICAgIEdDM0RpbnQgbV9tYXhSZW5kZXJi
dWZmZXJTaXplOwotICAgIEdDM0RpbnQgbV9tYXhWaWV3cG9ydERpbXNbMl07Ci0gICAgR0MzRGlu
dCBtX21heFRleHR1cmVMZXZlbDsKLSAgICBHQzNEaW50IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZl
bDsKLQotICAgIEdDM0RpbnQgbV9tYXhEcmF3QnVmZmVyczsKLSAgICBHQzNEaW50IG1fbWF4Q29s
b3JBdHRhY2htZW50czsKLSAgICBHQzNEZW51bSBtX2JhY2tEcmF3QnVmZmVyOwotICAgIGJvb2wg
bV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZDsKLSAgICBib29sIG1fZHJhd0J1
ZmZlcnNTdXBwb3J0ZWQ7Ci0KLSAgICBHQzNEaW50IG1fcGFja0FsaWdubWVudDsKLSAgICBHQzNE
aW50IG1fdW5wYWNrQWxpZ25tZW50OwotICAgIGJvb2wgbV91bnBhY2tGbGlwWTsKLSAgICBib29s
IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYTsKLSAgICBHQzNEZW51bSBtX3VucGFja0NvbG9yc3Bh
Y2VDb252ZXJzaW9uOwotICAgIGJvb2wgbV9jb250ZXh0TG9zdDsKLSAgICBMb3N0Q29udGV4dE1v
ZGUgbV9jb250ZXh0TG9zdE1vZGU7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMg
bV9hdHRyaWJ1dGVzOwotCi0gICAgYm9vbCBtX2xheWVyQ2xlYXJlZDsKLSAgICBHQzNEZmxvYXQg
bV9jbGVhckNvbG9yWzRdOwotICAgIGJvb2wgbV9zY2lzc29yRW5hYmxlZDsKLSAgICBHQzNEZmxv
YXQgbV9jbGVhckRlcHRoOwotICAgIEdDM0RpbnQgbV9jbGVhclN0ZW5jaWw7Ci0gICAgR0MzRGJv
b2xlYW4gbV9jb2xvck1hc2tbNF07Ci0gICAgR0MzRGJvb2xlYW4gbV9kZXB0aE1hc2s7Ci0KLSAg
ICBib29sIG1fc3RlbmNpbEVuYWJsZWQ7Ci0gICAgR0MzRHVpbnQgbV9zdGVuY2lsTWFzaywgbV9z
dGVuY2lsTWFza0JhY2s7Ci0gICAgR0MzRGludCBtX3N0ZW5jaWxGdW5jUmVmLCBtX3N0ZW5jaWxG
dW5jUmVmQmFjazsgLy8gTm90ZSB0aGF0IHRoZXNlIGFyZSB0aGUgdXNlciBzcGVjaWZpZWQgdmFs
dWVzLCBub3QgdGhlIGludGVybmFsIGNsYW1wZWQgdmFsdWUuCi0gICAgR0MzRHVpbnQgbV9zdGVu
Y2lsRnVuY01hc2ssIG1fc3RlbmNpbEZ1bmNNYXNrQmFjazsKLQotICAgIGJvb2wgbV9pc0dMRVMy
Q29tcGxpYW50OwotICAgIGJvb2wgbV9pc0dMRVMyTlBPVFN0cmljdDsKLSAgICBib29sIG1faXNF
cnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlczsKLSAgICBib29sIG1faXNSZXNvdXJj
ZVNhZmU7Ci0gICAgYm9vbCBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkOwotICAgIGJvb2wgbV9p
c1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQ7Ci0KLSAgICBib29sIG1fc3ludGhlc2l6ZWRFcnJvcnNU
b0NvbnNvbGU7Ci0gICAgaW50IG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkOwotCi0gICAg
Ly8gQSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgY2FuIGJlIGNyZWF0ZWQgaW4gYSBzdGF0ZSB3aGVy
ZSBpdCBhcHBlYXJzIGFzCi0gICAgLy8gYSB2YWxpZCBhbmQgYWN0aXZlIGNvbnRleHQsIGJ1dCB3
aWxsIG5vdCBleGVjdXRlIGFueSBpbXBvcnRhbnQgb3BlcmF0aW9ucwotICAgIC8vIHVudGlsIGl0
cyBsb2FkIHBvbGljeSBpcyBjb21wbGV0ZWx5IHJlc29sdmVkLgotICAgIGJvb2wgbV9pc1BlbmRp
bmdQb2xpY3lSZXNvbHV0aW9uOwotICAgIGJvb2wgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0
aW9uOwotICAgIGJvb2wgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpOwotCi0gICAgLy8gRW5hYmxl
ZCBleHRlbnNpb24gb2JqZWN0cy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljPiBtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8RVhUU2hhZGVyVGV4dHVyZUxPRD4gbV9leHRTaGFkZXJUZXh0dXJlTE9EOwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlRmxvYXQ+IG1fb2VzVGV4dHVyZUZsb2F0OwotICAg
IHN0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlRmxvYXRMaW5lYXI+IG1fb2VzVGV4dHVyZUZsb2F0
TGluZWFyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0PiBtX29lc1Rl
eHR1cmVIYWxmRmxvYXQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXI+IG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcjsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
T0VTU3RhbmRhcmREZXJpdmF0aXZlcz4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzOwotICAgIHN0
ZDo6dW5pcXVlX3B0cjxPRVNWZXJ0ZXhBcnJheU9iamVjdD4gbV9vZXNWZXJ0ZXhBcnJheU9iamVj
dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTRWxlbWVudEluZGV4VWludD4gbV9vZXNFbGVtZW50
SW5kZXhVaW50OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTExvc2VDb250ZXh0PiBtX3dlYmds
TG9zZUNvbnRleHQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMRGVidWdSZW5kZXJlckluZm8+
IG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEZWJ1
Z1NoYWRlcnM+IG1fd2ViZ2xEZWJ1Z1NoYWRlcnM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVBVEM+IG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPiBtX3dlYmdsQ29tcHJl
c3NlZFRleHR1cmVQVlJUQzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xDb21wcmVzc2VkVGV4
dHVyZVMzVEM+IG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEM7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkdMRGVwdGhUZXh0dXJlPiBtX3dlYmdsRGVwdGhUZXh0dXJlOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJHTERyYXdCdWZmZXJzPiBtX3dlYmdsRHJhd0J1ZmZlcnM7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPEFOR0xFSW5zdGFuY2VkQXJyYXlzPiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzOwot
Ci0gICAgLy8gSGVscGVycyBmb3IgZ2V0UGFyYW1ldGVyIGFuZCBvdGhlcnMKLSAgICBXZWJHTEdl
dEluZm8gZ2V0Qm9vbGVhblBhcmFtZXRlcihHQzNEZW51bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdl
dEJvb2xlYW5BcnJheVBhcmFtZXRlcihHQzNEZW51bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEZs
b2F0UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0SW50UGFyYW1ldGVy
KEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIoR0Mz
RGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIoR0Mz
RGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKEdDM0Rl
bnVtKTsKLQotICAgIC8vIENsZWFyIHRoZSBiYWNrYnVmZmVyIGlmIGl0IHdhcyBjb21wb3NpdGVk
IHNpbmNlIHRoZSBsYXN0IG9wZXJhdGlvbi4KLSAgICAvLyBjbGVhck1hc2sgaXMgc2V0IHRvIHRo
ZSBiaXRmaWVsZCBvZiBhbnkgY2xlYXIgdGhhdCB3b3VsZCBoYXBwZW4gYW55d2F5IGF0IHRoaXMg
dGltZQotICAgIC8vIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGlmIHRoYXQgY2xlYXIg
aXMgbm93IHVubmVjZXNzYXJ5LgotICAgIGJvb2wgY2xlYXJJZkNvbXBvc2l0ZWQoR0MzRGJpdGZp
ZWxkIGNsZWFyTWFzayA9IDApOwotCi0gICAgLy8gSGVscGVyIHRvIHJlc3RvcmUgc3RhdGUgdGhh
dCBjbGVhcmluZyB0aGUgZnJhbWVidWZmZXIgbWF5IGRlc3Ryb3kuCi0gICAgdm9pZCByZXN0b3Jl
U3RhdGVBZnRlckNsZWFyKCk7Ci0KLSAgICB2b2lkIHRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCB0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdl
KiwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9v
bCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFn
ZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERv
bVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBFeGNlcHRpb25Db2Rl
Jik7Ci0KLSAgICB2b2lkIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiwgYm9v
bCk7Ci0KLSAgICB2b2lkIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwotCi0gICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIGZvciBjb3B5VGV4e1N1Yn1JbWFnZSwgY2hlY2sgd2hldGhlciB0
aGUgaW50ZXJuYWxmb3JtYXQKLSAgICAvLyBhbmQgdGhlIGNvbG9yIGJ1ZmZlciBmb3JtYXQgb2Yg
dGhlIGN1cnJlbnQgYm91bmQgZnJhbWVidWZmZXIgY29tYmluYXRpb24KLSAgICAvLyBpcyB2YWxp
ZC4KLSAgICBib29sIGlzVGV4SW50ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFs
aWQoR0MzRGVudW0gdGV4SW50ZXJuYWxGb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGNvbG9yQnVmZmVyRm9ybWF0
KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVy
J3MgY29sb3IgYnVmZmVyIGZvcm1hdC4KLSAgICBHQzNEZW51bSBnZXRCb3VuZEZyYW1lYnVmZmVy
Q29sb3JGb3JtYXQoKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5k
IGZyYW1lYnVmZmVyJ3Mgd2lkdGguCi0gICAgaW50IGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgp
OwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZmZXIn
cyBoZWlnaHQuCi0gICAgaW50IGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKTsKLQotICAgIC8v
IEhlbHBlciBmdW5jdGlvbiB0byB2ZXJpZnkgbGltaXRzIG9uIHRoZSBsZW5ndGggb2YgdW5pZm9y
bSBhbmQgYXR0cmlidXRlIGxvY2F0aW9ucy4KLSAgICBib29sIHZhbGlkYXRlTG9jYXRpb25MZW5n
dGgoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmKTsKLQotICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBzaXplIGlzIG5vbi1uZWdhdGl2ZS4KLSAgICAvLyBH
ZW5lcmF0ZSBHTCBlcnJvciBhbmQgcmV0dXJuIGZhbHNlIGZvciBuZWdhdGl2ZSBpbnB1dHM7IG90
aGVyd2lzZSwgcmV0dXJuIHRydWUuCi0gICAgYm9vbCB2YWxpZGF0ZVNpemUoY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lLCBHQzNEaW50IHgsIEdDM0RpbnQgeSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gdG8gY2hlY2sgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBiZWxvbmcgdG8g
dGhlCi0gICAgLy8gQVNDSUkgc3Vic2V0IGFzIGRlZmluZWQgaW4gR0xTTCBFUyAxLjAgc3BlYyBz
ZWN0aW9uIDMuMS4KLSAgICBib29sIHZhbGlkYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgU3RyaW5nJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sg
dGFyZ2V0IGFuZCB0ZXh0dXJlIGJvdW5kIHRvIHRoZSB0YXJnZXQuCi0gICAgLy8gR2VuZXJhdGUg
R0wgZXJyb3JzIGFuZCByZXR1cm4gMCBpZiB0YXJnZXQgaXMgaW52YWxpZCBvciB0ZXh0dXJlIGJv
dW5kIGlzCi0gICAgLy8gbnVsbC4gIE90aGVyd2lzZSwgcmV0dXJuIHRoZSB0ZXh0dXJlIGJvdW5k
IHRvIHRoZSB0YXJnZXQuCi0gICAgV2ViR0xUZXh0dXJlKiB2YWxpZGF0ZVRleHR1cmVCaW5kaW5n
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVu
dW1zRm9yQ3ViZU1hcCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQg
Zm9ybWF0L3R5cGUgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgotICAgIC8vIEdl
bmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZh
bGlkLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBsZXZl
bCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgbGV2ZWwgZm9yIGZ1
bmN0aW9ucyB7Y29weX1UZXh7U3VifUltYWdlLgotICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBh
bmQgcmV0dXJucyBmYWxzZSBpZiBsZXZlbCBpcyBpbnZhbGlkLgotICAgIGJvb2wgdmFsaWRhdGVU
ZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwpOwotCi0gICAgZW51bSBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSB7
Ci0gICAgICAgIE5vdFRleFN1YkltYWdlMkQsCi0gICAgICAgIFRleFN1YkltYWdlMkQsCi0gICAg
fTsKLQotICAgIGVudW0gVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHsKLSAgICAgICAgU291
cmNlQXJyYXlCdWZmZXJWaWV3LAotICAgICAgICBTb3VyY2VJbWFnZURhdGEsCi0gICAgICAgIFNv
dXJjZUhUTUxJbWFnZUVsZW1lbnQsCi0gICAgICAgIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LAot
ICAgICAgICBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LAotICAgIH07Ci0KLSAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBjaGVjayBpZiB0aGUgaW5wdXQgZm9ybWF0
L3R5cGUvbGV2ZWwvdGFyZ2V0L3dpZHRoL2hlaWdodC9ib3JkZXIveG9mZnNldC95b2Zmc2V0IGFy
ZSB2YWxpZC4KLSAgICAvLyBPdGhlcndpc2UsIGl0IHdvdWxkIHJldHVybiBxdWlja2x5IHdpdGhv
dXQgZG9pbmcgb3RoZXIgd29yay4KLSAgICBib29sIHZhbGlkYXRlVGV4RnVuYyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlLCBUZXhGdW5jVmFs
aWRhdGlvblNvdXJjZVR5cGUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKLSAgICAgICAgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIGNoZWNrIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZ1bmN0aW9ucyB7Y29weX1UZXh7U3VifUlt
YWdlLgotICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJh
bWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpOwotCi0gICAgZW51bSBOdWxsRGlzcG9z
aXRpb24gewotICAgICAgICBOdWxsQWxsb3dlZCwKLSAgICAgICAgTnVsbE5vdEFsbG93ZWQKLSAg
ICB9OwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGdpdmVu
IEFycmF5QnVmZmVyVmlldwotICAgIC8vIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUgYW5kIGNvbnRh
aW5zIGVub3VnaCBkYXRhIGZvciB0aGUgdGV4SW1hZ2UgY2FsbC4KLSAgICAvLyBHZW5lcmF0ZXMg
R0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAg
ICBib29sIHZhbGlkYXRlVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
aW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJy
YXlCdWZmZXJWaWV3KiBwaXhlbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bGxE
aXNwb3NpdGlvbik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBnaXZl
biB0ZXh0dXJlIGZvcm1hdCBpcyBzZXR0YWJsZSBhcyBpbgotICAgIC8vIHlvdSBjYW4gc3VwcGx5
IGRhdGEgdG8gdGV4SW1hZ2UyRCwgb3IgY2FsbCB0ZXhJbWFnZTJELCBjb3B5VGV4SW1hZ2UyRCBh
bmQKLSAgICAvLyBjb3B5VGV4U3ViSW1hZ2UyRC4KLSAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3Ig
YW5kIHJldHVybnMgZmFsc2UgaWYgdGhlIGZvcm1hdCBpcyBub3Qgc2V0dGFibGUuCi0gICAgYm9v
bCB2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gZm9ybWF0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21w
cmVzc2VkIHRleHR1cmUgZGF0YSBpcyBjb3JyZWN0IHNpemUKLSAgICAvLyBmb3IgdGhlIGdpdmVu
IGZvcm1hdCBhbmQgZGltZW5zaW9ucy4KLSAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1
bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlC
dWZmZXJWaWV3KiBwaXhlbHMpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB2YWxpZGF0
aW5nIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXRzLgotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVz
c2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRpbWVuc2lvbnMgYXJlIHZhbGlkIGZvcgot
ICAgIC8vIHRoZSBnaXZlbiBmb3JtYXQuCi0gICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhE
aW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0
ZXh0dXJlIGRpbWVuc2lvbnMgYXJlIHZhbGlkIGZvcgotICAgIC8vIHRoZSBnaXZlbiBmb3JtYXQu
Ci0gICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBm
b3JtYXQsIFdlYkdMVGV4dHVyZSopOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlk
YXRlIG1vZGUgZm9yIGRyYXd7QXJyYXlzL0VsZW1lbnRzfS4KLSAgICBib29sIHZhbGlkYXRlRHJh
d01vZGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7Ci0KLSAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaWYgZnJvbnQvYmFjayBzdGVuY2lsTWFzayBhbmQgc3Rl
bmNpbEZ1bmMgc2V0dGluZ3MgYXJlIHRoZSBzYW1lLgotICAgIGJvb2wgdmFsaWRhdGVTdGVuY2ls
U2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKLQotICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB0byB2YWxpZGF0ZSBzdGVuY2lsIGZ1bmMuCi0gICAgYm9vbCB2YWxpZGF0ZVN0ZW5jaWxG
dW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOwotCi0gICAgLy8gSGVscGVy
IGZ1bmN0aW9uIGZvciB0ZXhQYXJhbWV0ZXJmIGFuZCB0ZXhQYXJhbWV0ZXJpLgotICAgIHZvaWQg
dGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBw
YXJhbWksIEdDM0RpbnQgcGFyYW1mLCBib29sIGlzRmxvYXQpOwotCi0gICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHByaW50IEdMIGVycm9ycyB0byBjb25zb2xlLgotICAgIHZvaWQgcHJpbnRHTEVy
cm9yVG9Db25zb2xlKGNvbnN0IFN0cmluZyYpOwotICAgIHZvaWQgcHJpbnRHTFdhcm5pbmdUb0Nv
bnNvbGUoY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0KLSAgICAv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gcHJpbnQgd2FybmluZ3MgdG8gY29uc29sZS4gQ3VycmVudGx5
Ci0gICAgLy8gdXNlZCBvbmx5IHRvIHdhcm4gYWJvdXQgdXNlIG9mIG9ic29sZXRlIGZ1bmN0aW9u
cy4KLSAgICB2b2lkIHByaW50V2FybmluZ1RvQ29uc29sZShjb25zdCBTdHJpbmcmKTsKLQotICAg
IC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciBmcmFt
ZWJ1ZmZlciBmdW5jdGlvbnMuCi0gICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgaWYgcGFyYW1ldGVy
cyBhcmUgaWxsZWdhbC4KLSAgICBib29sIHZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVy
cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0
YWNobWVudCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZXF1
YXRpb24gbW9kZS4KLSAgICBib29sIHZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxp
ZGF0ZSBibGVuZCBmdW5jIGZhY3RvcnMuCi0gICAgYm9vbCB2YWxpZGF0ZUJsZW5kRnVuY0ZhY3Rv
cnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCk7
Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYSBHTCBjYXBhYmlsaXR5Lgot
ICAgIGJvb2wgdmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFt
ZXRlcnMgZm9yIHVuaWZvcm0gZnVuY3Rpb25zLgotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qLCBJbnQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qLCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKLSAg
ICBib29sIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEdDM0Rib29sZWFuIHRyYW5zcG9z
ZSwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVuaWZv
cm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqLCBHQzNEc2l6ZWks
IEdDM0RzaXplaSBtb2QpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIHBh
cmFtZXRlcnMgZm9yIGJ1ZmZlckRhdGEuCi0gICAgLy8gUmV0dXJuIHRoZSBjdXJyZW50IGJvdW5k
IGJ1ZmZlciB0byB0YXJnZXQsIG9yIDAgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBX
ZWJHTEJ1ZmZlciogdmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpOwotCi0gICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBzdXJlIGltYWdlIGlzIHJl
YWR5IGFuZCB3b3VsZG4ndCB0YWludCBPcmlnaW4uCi0gICAgYm9vbCB2YWxpZGF0ZUhUTUxJbWFn
ZUVsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MSW1hZ2VFbGVtZW50KiwgRXhj
ZXB0aW9uQ29kZSYpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdl
MkQgdG8gbWFrZSBzdXJlIGNhbnZhcyBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQgT3JpZ2lu
LgotICAgIGJvb2wgdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotCi0jaWYgRU5BQkxF
KFZJREVPKQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1h
a2Ugc3VyZSB2aWRlbyBpcyByZWFkeSB3b3VsZG4ndCB0YWludCBPcmlnaW4uCi0gICAgYm9vbCB2
YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MVmlk
ZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotI2VuZGlmCi0KLSAgICAvLyBIZWxwZXIgZnVu
Y3Rpb25zIGZvciB2ZXJ0ZXhBdHRyaWJOZnt2fS4KLSAgICB2b2lkIHZlcnRleEF0dHJpYmZJbXBs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBl
Y3RlZFNpemUsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCk7Ci0g
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7Ci0gICAg
dm9pZCB2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0KiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsK
LQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgZGVsZXRlKiAoZGVsZXRlQnVmZmVyLCBkZWxl
dGVQcm9ncmFtLCBldGMpIGZ1bmN0aW9ucy4KLSAgICAvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVy
IHNob3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuCi0gICAgYm9vbCBkZWxl
dGVPYmplY3QoV2ViR0xPYmplY3QqKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgYmlu
ZCogKGJpbmRCdWZmZXIsIGJpbmRUZXh0dXJlLCBldGMpIGFuZCB1c2VQcm9ncmFtLgotICAgIC8v
IElmIHRoZSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkLCBzZXQgZGVsZXRlZCB0byB0
cnVlIHVwb24gcmV0dXJuLgotICAgIC8vIFJldHVybiBmYWxzZSBpZiBjYWxsZXIgc2hvdWxkIHJl
dHVybiB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4KLSAgICBib29sIGNoZWNrT2JqZWN0VG9C
ZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqLCBib29sJiBkZWxl
dGVkKTsKLQotICAgIC8vIEhlbHBlcnMgZm9yIHNpbXVsYXRpbmcgdmVydGV4QXR0cmliMAotICAg
IHZvaWQgaW5pdFZlcnRleEF0dHJpYjAoKTsKLSAgICBib29sIHNpbXVsYXRlVmVydGV4QXR0cmli
MChHQzNEc2l6ZWkgbnVtVmVydGV4KTsKLSAgICB2b2lkIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRl
eEF0dHJpYjBTaW11bGF0aW9uKCk7Ci0KLSAgICB2b2lkIGRpc3BhdGNoQ29udGV4dExvc3RFdmVu
dCgpOwotICAgIC8vIEhlbHBlciBmb3IgcmVzdG9yYXRpb24gYWZ0ZXIgY29udGV4dCBsb3N0Lgot
ICAgIHZvaWQgbWF5YmVSZXN0b3JlQ29udGV4dCgpOwotCi0gICAgLy8gRGV0ZXJtaW5lIGlmIHdl
IGFyZSBydW5uaW5nIHByaXZpbGVnZWQgY29kZSBpbiB0aGUgYnJvd3NlciwgZm9yIGV4YW1wbGUs
Ci0gICAgLy8gYSBTYWZhcmkgb3IgQ2hyb21lIGV4dGVuc2lvbi4KLSAgICBib29sIGFsbG93UHJp
dmlsZWdlZEV4dGVuc2lvbnMoKSBjb25zdDsKLQotICAgIGVudW0gQ29uc29sZURpc3BsYXlQcmVm
ZXJlbmNlIHsKLSAgICAgICAgRGlzcGxheUluQ29uc29sZSwKLSAgICAgICAgRG9udERpc3BsYXlJ
bkNvbnNvbGUKLSAgICB9OwotCi0gICAgLy8gV3JhcHBlciBmb3IgR3JhcGhpY3NDb250ZXh0M0Q6
OnN5bnRoZXNpemVHTEVycm9yIHRoYXQgc2VuZHMgYSBtZXNzYWdlCi0gICAgLy8gdG8gdGhlIEph
dmFTY3JpcHQgY29uc29sZS4KLSAgICB2b2lkIHN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtLCBj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uLCBDb25zb2xl
RGlzcGxheVByZWZlcmVuY2UgPSBEaXNwbGF5SW5Db25zb2xlKTsKLQotICAgIFN0cmluZyBlbnN1
cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYpIGNvbnN0OwotCi0gICAgLy8gRW5hYmxlIG9yIGRpc2Fi
bGUgc3RlbmNpbCB0ZXN0IGJhc2VkIG9uIHVzZXIgc2V0dGluZyBhbmQKLSAgICAvLyB3aGV0aGVy
IHRoZSBjdXJyZW50IEZCTyBoYXMgYSBzdGVuY2lsIGJ1ZmZlci4KLSAgICB2b2lkIGFwcGx5U3Rl
bmNpbFRlc3QoKTsKLQotICAgIC8vIEhlbHBlciBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGEg
Y2FwYWJpbGl0eS4KLSAgICB2b2lkIGVuYWJsZU9yRGlzYWJsZShHQzNEZW51bSBjYXBhYmlsaXR5
LCBib29sIGVuYWJsZSk7Ci0KLSAgICAvLyBDbGFtcCB0aGUgd2lkdGggYW5kIGhlaWdodCB0byBH
TF9NQVhfVklFV1BPUlRfRElNUy4KLSAgICBJbnRTaXplIGNsYW1wZWRDYW52YXNTaXplKCk7Ci0K
LSAgICAvLyBGaXJzdCB0aW1lIGNhbGxlZCwgaWYgRVhUX2RyYXdfYnVmZmVycyBpcyBzdXBwb3J0
ZWQsIHF1ZXJ5IHRoZSB2YWx1ZTsgb3RoZXJ3aXNlIHJldHVybiAwLgotICAgIC8vIExhdGVyLCBy
ZXR1cm4gdGhlIGNhY2hlZCB2YWx1ZS4KLSAgICBHQzNEaW50IGdldE1heERyYXdCdWZmZXJzKCk7
Ci0gICAgR0MzRGludCBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCk7Ci0KLSAgICB2b2lkIHNldEJh
Y2tEcmF3QnVmZmVyKEdDM0RlbnVtKTsKLQotICAgIHZvaWQgcmVzdG9yZUN1cnJlbnRGcmFtZWJ1
ZmZlcigpOwotICAgIHZvaWQgcmVzdG9yZUN1cnJlbnRUZXh0dXJlMkQoKTsKLQotICAgIC8vIENo
ZWNrIGlmIEVYVF9kcmF3X2J1ZmZlcnMgZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZCBhbmQgaWYgaXQg
c2F0aXNmaWVzIHRoZSBXZWJHTCByZXF1aXJlbWVudHMuCi0gICAgYm9vbCBzdXBwb3J0c0RyYXdC
dWZmZXJzKCk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaWRsCShyZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0xLDY2OSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQot
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLXR5cGVkZWYg
dW5zaWduZWQgbG9uZyAgR0xlbnVtOwotdHlwZWRlZiBib29sZWFuICAgICAgICBHTGJvb2xlYW47
Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMYml0ZmllbGQ7Ci10eXBlZGVmIGJ5dGUgICAgICAg
ICAgIEdMYnl0ZTsgICAgICAgICAvKiAnYnl0ZScgc2hvdWxkIGJlIGEgc2lnbmVkIDggYml0IHR5
cGUuICovCi10eXBlZGVmIHNob3J0ICAgICAgICAgIEdMc2hvcnQ7Ci10eXBlZGVmIGxvbmcgICAg
ICAgICAgIEdMaW50OwotdHlwZWRlZiBsb25nICAgICAgICAgICBHTHNpemVpOwotdHlwZWRlZiBs
b25nIGxvbmcgICAgICBHTGludHB0cjsKLXR5cGVkZWYgbG9uZyBsb25nICAgICAgR0xzaXplaXB0
cjsKLXR5cGVkZWYgb2N0ZXQgICAgICAgICAgR0x1Ynl0ZTsgICAgICAgIC8qICdvY3RldCcgc2hv
dWxkIGJlIGFuIHVuc2lnbmVkIDggYml0IHR5cGUuICovCi10eXBlZGVmIHVuc2lnbmVkIHNob3J0
IEdMdXNob3J0OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTHVpbnQ7Ci10eXBlZGVmIHVucmVz
dHJpY3RlZCBmbG9hdCBHTGZsb2F0OwotdHlwZWRlZiB1bnJlc3RyaWN0ZWQgZmxvYXQgR0xjbGFt
cGY7Ci0KLVsKLSAgICBDb25kaXRpb25hbD1XRUJHTCwKLSAgICBKU0N1c3RvbU1hcmtGdW5jdGlv
biwKLSAgICBEb05vdENoZWNrQ29uc3RhbnRzLAotXSBpbnRlcmZhY2UgV2ViR0xSZW5kZXJpbmdD
b250ZXh0IDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7Ci0KLSAgICAvKiBDbGVhckJ1ZmZlck1h
c2sgKi8KLSAgICBjb25zdCBHTGVudW0gREVQVEhfQlVGRkVSX0JJVCAgICAgICAgICAgICAgID0g
MHgwMDAwMDEwMDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAg
ICAgID0gMHgwMDAwMDQwMDsKLSAgICBjb25zdCBHTGVudW0gQ09MT1JfQlVGRkVSX0JJVCAgICAg
ICAgICAgICAgID0gMHgwMDAwNDAwMDsKLQotICAgIC8qIEJlZ2luTW9kZSAqLwotICAgIGNvbnN0
IEdMZW51bSBQT0lOVFMgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA7Ci0gICAgY29u
c3QgR0xlbnVtIExJTkVTICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTsKLSAgICBj
b25zdCBHTGVudW0gTElORV9MT09QICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAyOwotICAg
IGNvbnN0IEdMZW51bSBMSU5FX1NUUklQICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDM7Ci0g
ICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFUyAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwNDsK
LSAgICBjb25zdCBHTGVudW0gVFJJQU5HTEVfU1RSSVAgICAgICAgICAgICAgICAgID0gMHgwMDA1
OwotICAgIGNvbnN0IEdMZW51bSBUUklBTkdMRV9GQU4gICAgICAgICAgICAgICAgICAgPSAweDAw
MDY7Ci0KLSAgICAvKiBBbHBoYUZ1bmN0aW9uIChub3Qgc3VwcG9ydGVkIGluIEVTMjApICovCi0g
ICAgLyogICAgICBORVZFUiAqLwotICAgIC8qICAgICAgTEVTUyAqLwotICAgIC8qICAgICAgRVFV
QUwgKi8KLSAgICAvKiAgICAgIExFUVVBTCAqLwotICAgIC8qICAgICAgR1JFQVRFUiAqLwotICAg
IC8qICAgICAgTk9URVFVQUwgKi8KLSAgICAvKiAgICAgIEdFUVVBTCAqLwotICAgIC8qICAgICAg
QUxXQVlTICovCi0KLSAgICAvKiBCbGVuZGluZ0ZhY3RvckRlc3QgKi8KLSAgICBjb25zdCBHTGVu
dW0gWkVSTyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMDsKLSAgICBjb25zdCBHTGVudW0g
T05FICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTsKLSAgICBjb25zdCBHTGVudW0gU1JD
X0NPTE9SICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzAwOwotICAgIGNvbnN0IEdMZW51bSBP
TkVfTUlOVVNfU1JDX0NPTE9SICAgICAgICAgICAgPSAweDAzMDE7Ci0gICAgY29uc3QgR0xlbnVt
IFNSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMjsKLSAgICBjb25zdCBHTGVu
dW0gT05FX01JTlVTX1NSQ19BTFBIQSAgICAgICAgICAgID0gMHgwMzAzOwotICAgIGNvbnN0IEdM
ZW51bSBEU1RfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDQ7Ci0gICAgY29uc3Qg
R0xlbnVtIE9ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAgICA9IDB4MDMwNTsKLQotICAgIC8q
IEJsZW5kaW5nRmFjdG9yU3JjICovCi0gICAgLyogICAgICBaRVJPICovCi0gICAgLyogICAgICBP
TkUgKi8KLSAgICBjb25zdCBHTGVudW0gRFNUX0NPTE9SICAgICAgICAgICAgICAgICAgICAgID0g
MHgwMzA2OwotICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfRFNUX0NPTE9SICAgICAgICAgICAg
PSAweDAzMDc7Ci0gICAgY29uc3QgR0xlbnVtIFNSQ19BTFBIQV9TQVRVUkFURSAgICAgICAgICAg
ICA9IDB4MDMwODsKLSAgICAvKiAgICAgIFNSQ19BTFBIQSAqLwotICAgIC8qICAgICAgT05FX01J
TlVTX1NSQ19BTFBIQSAqLwotICAgIC8qICAgICAgRFNUX0FMUEhBICovCi0gICAgLyogICAgICBP
TkVfTUlOVVNfRFNUX0FMUEhBICovCi0KLSAgICAvKiBCbGVuZEVxdWF0aW9uU2VwYXJhdGUgKi8K
LSAgICBjb25zdCBHTGVudW0gRlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDA2
OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTiAgICAgICAgICAgICAgICAgPSAweDgw
MDk7Ci0gICAgY29uc3QgR0xlbnVtIEJMRU5EX0VRVUFUSU9OX1JHQiAgICAgICAgICAgICA9IDB4
ODAwOTsgICAvKiBzYW1lIGFzIEJMRU5EX0VRVUFUSU9OICovCi0gICAgY29uc3QgR0xlbnVtIEJM
RU5EX0VRVUFUSU9OX0FMUEhBICAgICAgICAgICA9IDB4ODgzRDsKLQotICAgIC8qIEJsZW5kU3Vi
dHJhY3QgKi8KLSAgICBjb25zdCBHTGVudW0gRlVOQ19TVUJUUkFDVCAgICAgICAgICAgICAgICAg
ID0gMHg4MDBBOwotICAgIGNvbnN0IEdMZW51bSBGVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAg
ICAgPSAweDgwMEI7Ci0KLSAgICAvKiBTZXBhcmF0ZSBCbGVuZCBGdW5jdGlvbnMgKi8KLSAgICBj
b25zdCBHTGVudW0gQkxFTkRfRFNUX1JHQiAgICAgICAgICAgICAgICAgID0gMHg4MEM4OwotICAg
IGNvbnN0IEdMZW51bSBCTEVORF9TUkNfUkdCICAgICAgICAgICAgICAgICAgPSAweDgwQzk7Ci0g
ICAgY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9BTFBIQSAgICAgICAgICAgICAgICA9IDB4ODBDQTsK
LSAgICBjb25zdCBHTGVudW0gQkxFTkRfU1JDX0FMUEhBICAgICAgICAgICAgICAgID0gMHg4MENC
OwotICAgIGNvbnN0IEdMZW51bSBDT05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgPSAweDgw
MDE7Ci0gICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19DT05TVEFOVF9DT0xPUiAgICAgICA9IDB4
ODAwMjsKLSAgICBjb25zdCBHTGVudW0gQ09OU1RBTlRfQUxQSEEgICAgICAgICAgICAgICAgID0g
MHg4MDAzOwotICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAg
PSAweDgwMDQ7Ci0gICAgY29uc3QgR0xlbnVtIEJMRU5EX0NPTE9SICAgICAgICAgICAgICAgICAg
ICA9IDB4ODAwNTsKLQotICAgIC8qIEJ1ZmZlciBPYmplY3RzICovCi0gICAgY29uc3QgR0xlbnVt
IEFSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAgICA9IDB4ODg5MjsKLSAgICBjb25zdCBHTGVu
dW0gRUxFTUVOVF9BUlJBWV9CVUZGRVIgICAgICAgICAgID0gMHg4ODkzOwotICAgIGNvbnN0IEdM
ZW51bSBBUlJBWV9CVUZGRVJfQklORElORyAgICAgICAgICAgPSAweDg4OTQ7Ci0gICAgY29uc3Qg
R0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICA9IDB4ODg5NTsKLQotICAgIGNv
bnN0IEdMZW51bSBTVFJFQU1fRFJBVyAgICAgICAgICAgICAgICAgICAgPSAweDg4RTA7Ci0gICAg
Y29uc3QgR0xlbnVtIFNUQVRJQ19EUkFXICAgICAgICAgICAgICAgICAgICA9IDB4ODhFNDsKLSAg
ICBjb25zdCBHTGVudW0gRFlOQU1JQ19EUkFXICAgICAgICAgICAgICAgICAgID0gMHg4OEU4Owot
Ci0gICAgY29uc3QgR0xlbnVtIEJVRkZFUl9TSVpFICAgICAgICAgICAgICAgICAgICA9IDB4ODc2
NDsKLSAgICBjb25zdCBHTGVudW0gQlVGRkVSX1VTQUdFICAgICAgICAgICAgICAgICAgID0gMHg4
NzY1OwotCi0gICAgY29uc3QgR0xlbnVtIENVUlJFTlRfVkVSVEVYX0FUVFJJQiAgICAgICAgICA9
IDB4ODYyNjsKLQotICAgIC8qIEN1bGxGYWNlTW9kZSAqLwotICAgIGNvbnN0IEdMZW51bSBGUk9O
VCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA0MDQ7Ci0gICAgY29uc3QgR0xlbnVtIEJB
Q0sgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQwNTsKLSAgICBjb25zdCBHTGVudW0g
RlJPTlRfQU5EX0JBQ0sgICAgICAgICAgICAgICAgID0gMHgwNDA4OwotCi0gICAgLyogRGVwdGhG
dW5jdGlvbiAqLwotICAgIC8qICAgICAgTkVWRVIgKi8KLSAgICAvKiAgICAgIExFU1MgKi8KLSAg
ICAvKiAgICAgIEVRVUFMICovCi0gICAgLyogICAgICBMRVFVQUwgKi8KLSAgICAvKiAgICAgIEdS
RUFURVIgKi8KLSAgICAvKiAgICAgIE5PVEVRVUFMICovCi0gICAgLyogICAgICBHRVFVQUwgKi8K
LSAgICAvKiAgICAgIEFMV0FZUyAqLwotCi0gICAgLyogRW5hYmxlQ2FwICovCi0gICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkVfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4MERFMTsKLSAgICBjb25z
dCBHTGVudW0gQ1VMTF9GQUNFICAgICAgICAgICAgICAgICAgICAgID0gMHgwQjQ0OwotICAgIGNv
bnN0IEdMZW51bSBCTEVORCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDBCRTI7Ci0gICAg
Y29uc3QgR0xlbnVtIERJVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEJEMDsKLSAg
ICBjb25zdCBHTGVudW0gU1RFTkNJTF9URVNUICAgICAgICAgICAgICAgICAgID0gMHgwQjkwOwot
ICAgIGNvbnN0IEdMZW51bSBERVBUSF9URVNUICAgICAgICAgICAgICAgICAgICAgPSAweDBCNzE7
Ci0gICAgY29uc3QgR0xlbnVtIFNDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICA9IDB4MEMx
MTsKLSAgICBjb25zdCBHTGVudW0gUE9MWUdPTl9PRkZTRVRfRklMTCAgICAgICAgICAgID0gMHg4
MDM3OwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UgICAgICAgPSAw
eDgwOUU7Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAgICA9
IDB4ODBBMDsKLQotICAgIC8qIEVycm9yQ29kZSAqLwotICAgIGNvbnN0IEdMZW51bSBOT19FUlJP
UiAgICAgICAgICAgICAgICAgICAgICAgPSAwOwotICAgIGNvbnN0IEdMZW51bSBJTlZBTElEX0VO
VU0gICAgICAgICAgICAgICAgICAgPSAweDA1MDA7Ci0gICAgY29uc3QgR0xlbnVtIElOVkFMSURf
VkFMVUUgICAgICAgICAgICAgICAgICA9IDB4MDUwMTsKLSAgICBjb25zdCBHTGVudW0gSU5WQUxJ
RF9PUEVSQVRJT04gICAgICAgICAgICAgID0gMHgwNTAyOwotICAgIGNvbnN0IEdMZW51bSBPVVRf
T0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgPSAweDA1MDU7Ci0KLSAgICAvKiBGcm9udEZhY2VE
aXJlY3Rpb24gKi8KLSAgICBjb25zdCBHTGVudW0gQ1cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwOTAwOwotICAgIGNvbnN0IEdMZW51bSBDQ1cgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDA5MDE7Ci0KLSAgICAvKiBHZXRQTmFtZSAqLwotICAgIGNvbnN0IEdMZW51bSBM
SU5FX1dJRFRIICAgICAgICAgICAgICAgICAgICAgPSAweDBCMjE7Ci0gICAgY29uc3QgR0xlbnVt
IEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSAgICAgICA9IDB4ODQ2RDsKLSAgICBjb25zdCBHTGVu
dW0gQUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFICAgICAgID0gMHg4NDZFOwotICAgIGNvbnN0IEdM
ZW51bSBDVUxMX0ZBQ0VfTU9ERSAgICAgICAgICAgICAgICAgPSAweDBCNDU7Ci0gICAgY29uc3Qg
R0xlbnVtIEZST05UX0ZBQ0UgICAgICAgICAgICAgICAgICAgICA9IDB4MEI0NjsKLSAgICBjb25z
dCBHTGVudW0gREVQVEhfUkFOR0UgICAgICAgICAgICAgICAgICAgID0gMHgwQjcwOwotICAgIGNv
bnN0IEdMZW51bSBERVBUSF9XUklURU1BU0sgICAgICAgICAgICAgICAgPSAweDBCNzI7Ci0gICAg
Y29uc3QgR0xlbnVtIERFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA9IDB4MEI3MzsKLSAg
ICBjb25zdCBHTGVudW0gREVQVEhfRlVOQyAgICAgICAgICAgICAgICAgICAgID0gMHgwQjc0Owot
ICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0NMRUFSX1ZBTFVFICAgICAgICAgICAgPSAweDBCOTE7
Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICA9IDB4MEI5
MjsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9GQUlMICAgICAgICAgICAgICAgICAgID0gMHgw
Qjk0OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTCAgICAgICAgPSAw
eDBCOTU7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAgICA9
IDB4MEI5NjsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9SRUYgICAgICAgICAgICAgICAgICAg
ID0gMHgwQjk3OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1ZBTFVFX01BU0sgICAgICAgICAg
ICAgPSAweDBCOTM7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfV1JJVEVNQVNLICAgICAgICAg
ICAgICA9IDB4MEI5ODsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX0ZVTkMgICAgICAg
ICAgICAgID0gMHg4ODAwOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfRkFJTCAgICAg
ICAgICAgICAgPSAweDg4MDE7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19QQVNTX0RF
UFRIX0ZBSUwgICA9IDB4ODgwMjsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX1BBU1Nf
REVQVEhfUEFTUyAgID0gMHg4ODAzOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfUkVG
ICAgICAgICAgICAgICAgPSAweDhDQTM7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19W
QUxVRV9NQVNLICAgICAgICA9IDB4OENBNDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNL
X1dSSVRFTUFTSyAgICAgICAgID0gMHg4Q0E1OwotICAgIGNvbnN0IEdMZW51bSBWSUVXUE9SVCAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDBCQTI7Ci0gICAgY29uc3QgR0xlbnVtIFNDSVNTT1Jf
Qk9YICAgICAgICAgICAgICAgICAgICA9IDB4MEMxMDsKLSAgICAvKiAgICAgIFNDSVNTT1JfVEVT
VCAqLwotICAgIGNvbnN0IEdMZW51bSBDT0xPUl9DTEVBUl9WQUxVRSAgICAgICAgICAgICAgPSAw
eDBDMjI7Ci0gICAgY29uc3QgR0xlbnVtIENPTE9SX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA9
IDB4MEMyMzsKLSAgICBjb25zdCBHTGVudW0gVU5QQUNLX0FMSUdOTUVOVCAgICAgICAgICAgICAg
ID0gMHgwQ0Y1OwotICAgIGNvbnN0IEdMZW51bSBQQUNLX0FMSUdOTUVOVCAgICAgICAgICAgICAg
ICAgPSAweDBEMDU7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9URVhUVVJFX1NJWkUgICAgICAgICAg
ICAgICA9IDB4MEQzMzsKLSAgICBjb25zdCBHTGVudW0gTUFYX1ZJRVdQT1JUX0RJTVMgICAgICAg
ICAgICAgID0gMHgwRDNBOwotICAgIGNvbnN0IEdMZW51bSBTVUJQSVhFTF9CSVRTICAgICAgICAg
ICAgICAgICAgPSAweDBENTA7Ci0gICAgY29uc3QgR0xlbnVtIFJFRF9CSVRTICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MEQ1MjsKLSAgICBjb25zdCBHTGVudW0gR1JFRU5fQklUUyAgICAgICAg
ICAgICAgICAgICAgID0gMHgwRDUzOwotICAgIGNvbnN0IEdMZW51bSBCTFVFX0JJVFMgICAgICAg
ICAgICAgICAgICAgICAgPSAweDBENTQ7Ci0gICAgY29uc3QgR0xlbnVtIEFMUEhBX0JJVFMgICAg
ICAgICAgICAgICAgICAgICA9IDB4MEQ1NTsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfQklUUyAg
ICAgICAgICAgICAgICAgICAgID0gMHgwRDU2OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JJ
VFMgICAgICAgICAgICAgICAgICAgPSAweDBENTc7Ci0gICAgY29uc3QgR0xlbnVtIFBPTFlHT05f
T0ZGU0VUX1VOSVRTICAgICAgICAgICA9IDB4MkEwMDsKLSAgICAvKiAgICAgIFBPTFlHT05fT0ZG
U0VUX0ZJTEwgKi8KLSAgICBjb25zdCBHTGVudW0gUE9MWUdPTl9PRkZTRVRfRkFDVE9SICAgICAg
ICAgID0gMHg4MDM4OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0JJTkRJTkdfMkQgICAgICAg
ICAgICAgPSAweDgwNjk7Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRV9CVUZGRVJTICAgICAgICAg
ICAgICAgICA9IDB4ODBBODsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFUyAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4MEE5OwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQ09WRVJBR0VfVkFM
VUUgICAgICAgICAgPSAweDgwQUE7Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRV9DT1ZFUkFHRV9J
TlZFUlQgICAgICAgICA9IDB4ODBBQjsKLQotICAgIC8qIEdldFRleHR1cmVQYXJhbWV0ZXIgKi8K
LSAgICAvKiAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAqLwotICAgIC8qICAgICAgVEVYVFVSRV9N
SU5fRklMVEVSICovCi0gICAgLyogICAgICBURVhUVVJFX1dSQVBfUyAqLwotICAgIC8qICAgICAg
VEVYVFVSRV9XUkFQX1QgKi8KLQotICAgIGNvbnN0IEdMZW51bSBDT01QUkVTU0VEX1RFWFRVUkVf
Rk9STUFUUyAgICAgPSAweDg2QTM7Ci0KLSAgICAvKiBIaW50TW9kZSAqLwotICAgIGNvbnN0IEdM
ZW51bSBET05UX0NBUkUgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDA7Ci0gICAgY29uc3Qg
R0xlbnVtIEZBU1RFU1QgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTEwMTsKLSAgICBjb25z
dCBHTGVudW0gTklDRVNUICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAyOwotCi0gICAg
LyogSGludFRhcmdldCAqLwotICAgIGNvbnN0IEdMZW51bSBHRU5FUkFURV9NSVBNQVBfSElOVCAg
ICAgICAgICAgID0gMHg4MTkyOwotCi0gICAgLyogRGF0YVR5cGUgKi8KLSAgICBjb25zdCBHTGVu
dW0gQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDAwOwotICAgIGNvbnN0IEdM
ZW51bSBVTlNJR05FRF9CWVRFICAgICAgICAgICAgICAgICAgPSAweDE0MDE7Ci0gICAgY29uc3Qg
R0xlbnVtIFNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwMjsKLSAgICBjb25z
dCBHTGVudW0gVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgID0gMHgxNDAzOwotICAgIGNv
bnN0IEdMZW51bSBJTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDQ7Ci0gICAg
Y29uc3QgR0xlbnVtIFVOU0lHTkVEX0lOVCAgICAgICAgICAgICAgICAgICA9IDB4MTQwNTsKLSAg
ICBjb25zdCBHTGVudW0gRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDA2Owot
Ci0gICAgLyogUGl4ZWxGb3JtYXQgKi8KLSAgICBjb25zdCBHTGVudW0gREVQVEhfQ09NUE9ORU5U
ICAgICAgICAgICAgICAgID0gMHgxOTAyOwotICAgIGNvbnN0IEdMZW51bSBBTFBIQSAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDE5MDY7Ci0gICAgY29uc3QgR0xlbnVtIFJHQiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MTkwNzsKLSAgICBjb25zdCBHTGVudW0gUkdCQSAgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA4OwotICAgIGNvbnN0IEdMZW51bSBMVU1JTkFO
Q0UgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDk7Ci0gICAgY29uc3QgR0xlbnVtIExVTUlO
QU5DRV9BTFBIQSAgICAgICAgICAgICAgICA9IDB4MTkwQTsKLQotICAgIC8qIFBpeGVsVHlwZSAq
LwotICAgIC8qICAgICAgVU5TSUdORURfQllURSAqLwotICAgIGNvbnN0IEdMZW51bSBVTlNJR05F
RF9TSE9SVF80XzRfNF80ICAgICAgICAgPSAweDgwMzM7Ci0gICAgY29uc3QgR0xlbnVtIFVOU0lH
TkVEX1NIT1JUXzVfNV81XzEgICAgICAgICA9IDB4ODAzNDsKLSAgICBjb25zdCBHTGVudW0gVU5T
SUdORURfU0hPUlRfNV82XzUgICAgICAgICAgID0gMHg4MzYzOwotCi0gICAgLyogU2hhZGVycyAq
LwotICAgIGNvbnN0IEdMZW51bSBGUkFHTUVOVF9TSEFERVIgICAgICAgICAgICAgICAgICA9IDB4
OEIzMDsKLSAgICBjb25zdCBHTGVudW0gVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAgICAgICAg
PSAweDhCMzE7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WRVJURVhfQVRUUklCUyAgICAgICAgICAg
ICAgID0gMHg4ODY5OwotICAgIGNvbnN0IEdMZW51bSBNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9S
UyAgICAgICA9IDB4OERGQjsKLSAgICBjb25zdCBHTGVudW0gTUFYX1ZBUllJTkdfVkVDVE9SUyAg
ICAgICAgICAgICAgPSAweDhERkM7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTID0gMHg4QjREOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVkVSVEVYX1RF
WFRVUkVfSU1BR0VfVU5JVFMgICA9IDB4OEI0QzsKLSAgICBjb25zdCBHTGVudW0gTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFMgICAgICAgICAgPSAweDg4NzI7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9G
UkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlMgICAgID0gMHg4REZEOwotICAgIGNvbnN0IEdMZW51bSBT
SEFERVJfVFlQRSAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI0RjsKLSAgICBjb25zdCBHTGVu
dW0gREVMRVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgPSAweDhCODA7Ci0gICAgY29uc3Qg
R0xlbnVtIExJTktfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjgyOwotICAgIGNv
bnN0IEdMZW51bSBWQUxJREFURV9TVEFUVVMgICAgICAgICAgICAgICAgICA9IDB4OEI4MzsKLSAg
ICBjb25zdCBHTGVudW0gQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAgICAgICAgPSAweDhCODU7
Ci0gICAgY29uc3QgR0xlbnVtIEFDVElWRV9VTklGT1JNUyAgICAgICAgICAgICAgICAgID0gMHg4
Qjg2OwotICAgIGNvbnN0IEdMZW51bSBBQ1RJVkVfQVRUUklCVVRFUyAgICAgICAgICAgICAgICA9
IDB4OEI4OTsKLSAgICBjb25zdCBHTGVudW0gU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAg
ICAgPSAweDhCOEM7Ci0gICAgY29uc3QgR0xlbnVtIENVUlJFTlRfUFJPR1JBTSAgICAgICAgICAg
ICAgICAgID0gMHg4QjhEOwotCi0gICAgLyogU3RlbmNpbEZ1bmN0aW9uICovCi0gICAgY29uc3Qg
R0xlbnVtIE5FVkVSICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMDsKLSAgICBjb25z
dCBHTGVudW0gTEVTUyAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAxOwotICAgIGNv
bnN0IEdMZW51bSBFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDI7Ci0gICAg
Y29uc3QgR0xlbnVtIExFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMzsKLSAg
ICBjb25zdCBHTGVudW0gR1JFQVRFUiAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjA0Owot
ICAgIGNvbnN0IEdMZW51bSBOT1RFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDU7
Ci0gICAgY29uc3QgR0xlbnVtIEdFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIw
NjsKLSAgICBjb25zdCBHTGVudW0gQUxXQVlTICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgw
MjA3OwotCi0gICAgLyogU3RlbmNpbE9wICovCi0gICAgLyogICAgICBaRVJPICovCi0gICAgY29u
c3QgR0xlbnVtIEtFRVAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUUwMDsKLSAgICBj
b25zdCBHTGVudW0gUkVQTEFDRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAxOwotICAg
IGNvbnN0IEdMZW51bSBJTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDI7Ci0g
ICAgY29uc3QgR0xlbnVtIERFQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUUwMzsK
LSAgICBjb25zdCBHTGVudW0gSU5WRVJUICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNTBB
OwotICAgIGNvbnN0IEdMZW51bSBJTkNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgPSAweDg1
MDc7Ci0gICAgY29uc3QgR0xlbnVtIERFQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODUwODsKLQotICAgIC8qIFN0cmluZ05hbWUgKi8KLSAgICBjb25zdCBHTGVudW0gVkVORE9SICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAwOwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJF
UiAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDE7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlNJ
T04gICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMjsKLQotICAgIC8qIFRleHR1cmVNYWdG
aWx0ZXIgKi8KLSAgICBjb25zdCBHTGVudW0gTkVBUkVTVCAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHgyNjAwOwotICAgIGNvbnN0IEdMZW51bSBMSU5FQVIgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDI2MDE7Ci0KLSAgICAvKiBUZXh0dXJlTWluRmlsdGVyICovCi0gICAgLyogICAgICBO
RUFSRVNUICovCi0gICAgLyogICAgICBMSU5FQVIgKi8KLSAgICBjb25zdCBHTGVudW0gTkVBUkVT
VF9NSVBNQVBfTkVBUkVTVCAgICAgICAgID0gMHgyNzAwOwotICAgIGNvbnN0IEdMZW51bSBMSU5F
QVJfTUlQTUFQX05FQVJFU1QgICAgICAgICAgPSAweDI3MDE7Ci0gICAgY29uc3QgR0xlbnVtIE5F
QVJFU1RfTUlQTUFQX0xJTkVBUiAgICAgICAgICA9IDB4MjcwMjsKLSAgICBjb25zdCBHTGVudW0g
TElORUFSX01JUE1BUF9MSU5FQVIgICAgICAgICAgID0gMHgyNzAzOwotCi0gICAgLyogVGV4dHVy
ZVBhcmFtZXRlck5hbWUgKi8KLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9NQUdfRklMVEVSICAg
ICAgICAgICAgID0gMHgyODAwOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX01JTl9GSUxURVIg
ICAgICAgICAgICAgPSAweDI4MDE7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfV1JBUF9TICAg
ICAgICAgICAgICAgICA9IDB4MjgwMjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9XUkFQX1Qg
ICAgICAgICAgICAgICAgID0gMHgyODAzOwotCi0gICAgLyogVGV4dHVyZVRhcmdldCAqLwotICAg
IC8qICAgICAgVEVYVFVSRV8yRCAqLwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDE3MDI7Ci0KLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJF
X01BUCAgICAgICAgICAgICAgID0gMHg4NTEzOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0JJ
TkRJTkdfQ1VCRV9NQVAgICAgICAgPSAweDg1MTQ7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWCAgICA9IDB4ODUxNTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9YICAgID0gMHg4NTE2OwotICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1kgICAgPSAweDg1MTc7Ci0gICAgY29uc3QgR0xlbnVtIFRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSAgICA9IDB4ODUxODsKLSAgICBjb25zdCBHTGVudW0g
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aICAgID0gMHg4NTE5OwotICAgIGNvbnN0IEdMZW51
bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1ogICAgPSAweDg1MUE7Ci0gICAgY29uc3QgR0xl
bnVtIE1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgICAgICA9IDB4ODUxQzsKLQotICAgIC8qIFRl
eHR1cmVVbml0ICovCi0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUwICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODRDMDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTEgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NEMxOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMiAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0QzI7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUzICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODRDMzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTQgICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NEM0OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFNSAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0QzU7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkU2ICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODRDNjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTcgICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEM3OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFOCAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzg7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkU5
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDOTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVS
RTEwICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENBOwotICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFMTEgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0I7Ci0gICAgY29uc3QgR0xlbnVtIFRF
WFRVUkUxMiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQzsKLSAgICBjb25zdCBHTGVudW0g
VEVYVFVSRTEzICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENEOwotICAgIGNvbnN0IEdMZW51
bSBURVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0U7Ci0gICAgY29uc3QgR0xl
bnVtIFRFWFRVUkUxNSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRjsKLSAgICBjb25zdCBH
TGVudW0gVEVYVFVSRTE2ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQwOwotICAgIGNvbnN0
IEdMZW51bSBURVhUVVJFMTcgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDE7Ci0gICAgY29u
c3QgR0xlbnVtIFRFWFRVUkUxOCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREMjsKLSAgICBj
b25zdCBHTGVudW0gVEVYVFVSRTE5ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQzOwotICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFMjAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDQ7Ci0g
ICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRENTsK
LSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIyICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ2
OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjMgICAgICAgICAgICAgICAgICAgICAgPSAweDg0
RDc7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNCAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODREODsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI1ICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NEQ5OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjYgICAgICAgICAgICAgICAgICAgICAg
PSAweDg0REE7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNyAgICAgICAgICAgICAgICAgICAg
ICA9IDB4ODREQjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI4ICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NERDOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjkgICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0REQ7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUzMCAgICAgICAgICAgICAg
ICAgICAgICA9IDB4ODRERTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTMxICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NERGOwotICAgIGNvbnN0IEdMZW51bSBBQ1RJVkVfVEVYVFVSRSAgICAg
ICAgICAgICAgICAgPSAweDg0RTA7Ci0KLSAgICAvKiBUZXh0dXJlV3JhcE1vZGUgKi8KLSAgICBj
b25zdCBHTGVudW0gUkVQRUFUICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyOTAxOwotICAg
IGNvbnN0IEdMZW51bSBDTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgPSAweDgxMkY7Ci0g
ICAgY29uc3QgR0xlbnVtIE1JUlJPUkVEX1JFUEVBVCAgICAgICAgICAgICAgICA9IDB4ODM3MDsK
LQotICAgIC8qIFVuaWZvcm0gVHlwZXMgKi8KLSAgICBjb25zdCBHTGVudW0gRkxPQVRfVkVDMiAg
ICAgICAgICAgICAgICAgICAgID0gMHg4QjUwOwotICAgIGNvbnN0IEdMZW51bSBGTE9BVF9WRUMz
ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTE7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUX1ZF
QzQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MjsKLSAgICBjb25zdCBHTGVudW0gSU5UX1ZF
QzIgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUzOwotICAgIGNvbnN0IEdMZW51bSBJTlRf
VkVDMyAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTQ7Ci0gICAgY29uc3QgR0xlbnVtIElO
VF9WRUM0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NTsKLSAgICBjb25zdCBHTGVudW0g
Qk9PTCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU2OwotICAgIGNvbnN0IEdMZW51
bSBCT09MX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTc7Ci0gICAgY29uc3QgR0xl
bnVtIEJPT0xfVkVDMyAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1ODsKLSAgICBjb25zdCBH
TGVudW0gQk9PTF9WRUM0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU5OwotICAgIGNvbnN0
IEdMZW51bSBGTE9BVF9NQVQyICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUE7Ci0gICAgY29u
c3QgR0xlbnVtIEZMT0FUX01BVDMgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1QjsKLSAgICBj
b25zdCBHTGVudW0gRkxPQVRfTUFUNCAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVDOwotICAg
IGNvbnN0IEdMZW51bSBTQU1QTEVSXzJEICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUU7Ci0g
ICAgY29uc3QgR0xlbnVtIFNBTVBMRVJfQ1VCRSAgICAgICAgICAgICAgICAgICA9IDB4OEI2MDsK
LQotICAgIC8qIFZlcnRleCBBcnJheXMgKi8KLSAgICBjb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJ
Ql9BUlJBWV9FTkFCTEVEICAgICAgICA9IDB4ODYyMjsKLSAgICBjb25zdCBHTGVudW0gVkVSVEVY
X0FUVFJJQl9BUlJBWV9TSVpFICAgICAgICAgICA9IDB4ODYyMzsKLSAgICBjb25zdCBHTGVudW0g
VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgICAgICAgICA9IDB4ODYyNDsKLSAgICBjb25zdCBH
TGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFICAgICAgICAgICA9IDB4ODYyNTsKLSAgICBj
b25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEICAgICA9IDB4ODg2QTsK
LSAgICBjb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSICAgICAgICA9IDB4
ODY0NTsKLSAgICBjb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElO
RyA9IDB4ODg5RjsKLQotICAgIC8qIFNoYWRlciBTb3VyY2UgKi8KLSAgICBjb25zdCBHTGVudW0g
Q09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgID0gMHg4QjgxOwotCi0gICAgLyogU2hhZGVy
IFByZWNpc2lvbi1TcGVjaWZpZWQgVHlwZXMgKi8KLSAgICBjb25zdCBHTGVudW0gTE9XX0ZMT0FU
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4REYwOwotICAgIGNvbnN0IEdMZW51bSBNRURJVU1f
RkxPQVQgICAgICAgICAgICAgICAgICAgPSAweDhERjE7Ci0gICAgY29uc3QgR0xlbnVtIEhJR0hf
RkxPQVQgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMjsKLSAgICBjb25zdCBHTGVudW0gTE9X
X0lOVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REYzOwotICAgIGNvbnN0IEdMZW51bSBN
RURJVU1fSU5UICAgICAgICAgICAgICAgICAgICAgPSAweDhERjQ7Ci0gICAgY29uc3QgR0xlbnVt
IEhJR0hfSU5UICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGNTsKLQotICAgIC8qIEZyYW1l
YnVmZmVyIE9iamVjdC4gKi8KLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVIgICAgICAgICAg
ICAgICAgICAgID0gMHg4RDQwOwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVIgICAgICAg
ICAgICAgICAgICAgPSAweDhENDE7Ci0KLSAgICBjb25zdCBHTGVudW0gUkdCQTQgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4MDU2OwotICAgIGNvbnN0IEdMZW51bSBSR0I1X0ExICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDgwNTc7Ci0gICAgY29uc3QgR0xlbnVtIFJHQjU2NSAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4OEQ2MjsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfQ09N
UE9ORU5UMTYgICAgICAgICAgICAgID0gMHg4MUE1OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lM
X0lOREVYICAgICAgICAgICAgICAgICAgPSAweDE5MDE7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5D
SUxfSU5ERVg4ICAgICAgICAgICAgICAgICA9IDB4OEQ0ODsKLSAgICBjb25zdCBHTGVudW0gREVQ
VEhfU1RFTkNJTCAgICAgICAgICAgICAgICAgID0gMHg4NEY5OwotCi0gICAgY29uc3QgR0xlbnVt
IFJFTkRFUkJVRkZFUl9XSURUSCAgICAgICAgICAgICA9IDB4OEQ0MjsKLSAgICBjb25zdCBHTGVu
dW0gUkVOREVSQlVGRkVSX0hFSUdIVCAgICAgICAgICAgID0gMHg4RDQzOwotICAgIGNvbnN0IEdM
ZW51bSBSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUICAgPSAweDhENDQ7Ci0gICAgY29uc3Qg
R0xlbnVtIFJFTkRFUkJVRkZFUl9SRURfU0laRSAgICAgICAgICA9IDB4OEQ1MDsKLSAgICBjb25z
dCBHTGVudW0gUkVOREVSQlVGRkVSX0dSRUVOX1NJWkUgICAgICAgID0gMHg4RDUxOwotICAgIGNv
bnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfQkxVRV9TSVpFICAgICAgICAgPSAweDhENTI7Ci0gICAg
Y29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFICAgICAgICA9IDB4OEQ1MzsKLSAg
ICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0RFUFRIX1NJWkUgICAgICAgID0gMHg4RDU0Owot
ICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFICAgICAgPSAweDhENTU7
Ci0KLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAg
ICAgICAgICAgPSAweDhDRDA7Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1F
TlRfT0JKRUNUX05BTUUgICAgICAgICAgID0gMHg4Q0QxOwotICAgIGNvbnN0IEdMZW51bSBGUkFN
RUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUwgICAgICAgICA9IDB4OENEMjsKLSAgICBj
b25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0Ug
PSAweDhDRDM7Ci0KLSAgICBjb25zdCBHTGVudW0gQ09MT1JfQVRUQUNITUVOVDAgICAgICAgICAg
ICAgID0gMHg4Q0UwOwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9BVFRBQ0hNRU5UICAgICAgICAg
ICAgICAgPSAweDhEMDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQVRUQUNITUVOVCAgICAg
ICAgICAgICA9IDB4OEQyMDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfU1RFTkNJTF9BVFRBQ0hN
RU5UICAgICAgID0gMHg4MjFBOwotCi0gICAgY29uc3QgR0xlbnVtIE5PTkUgICAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDA7Ci0KLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQ09NUExF
VEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhDRDU7Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1F
QlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVCAgICAgICAgID0gMHg4Q0Q2OwotICAgIGNvbnN0
IEdMZW51bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCA9IDB4OENE
NzsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TICAg
ICAgICAgPSAweDhDRDk7Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX1VOU1VQUE9SVEVE
ICAgICAgICAgICAgICAgICAgID0gMHg4Q0REOwotCi0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVG
RkVSX0JJTkRJTkcgICAgICAgICAgICA9IDB4OENBNjsKLSAgICBjb25zdCBHTGVudW0gUkVOREVS
QlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4Q0E3OwotICAgIGNvbnN0IEdMZW51bSBNQVhf
UkVOREVSQlVGRkVSX1NJWkUgICAgICAgICAgPSAweDg0RTg7Ci0KLSAgICBjb25zdCBHTGVudW0g
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04gID0gMHgwNTA2OwotCi0gICAgLyogV2ViR0wt
c3BlY2lmaWMgZW51bXMgKi8KLSAgICBjb25zdCBHTGVudW0gVU5QQUNLX0ZMSVBfWV9XRUJHTCAg
ICAgICAgICAgICAgICA9IDB4OTI0MDsKLSAgICBjb25zdCBHTGVudW0gVU5QQUNLX1BSRU1VTFRJ
UExZX0FMUEhBX1dFQkdMICAgICA9IDB4OTI0MTsKLSAgICBjb25zdCBHTGVudW0gQ09OVEVYVF9M
T1NUX1dFQkdMICAgICAgICAgICAgICAgICA9IDB4OTI0MjsKLSAgICBjb25zdCBHTGVudW0gVU5Q
QUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCA9IDB4OTI0MzsKLSAgICBjb25zdCBHTGVu
dW0gQlJPV1NFUl9ERUZBVUxUX1dFQkdMICAgICAgICAgICAgICA9IDB4OTI0NDsKLQotICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBHTHNpemVpIGRyYXdpbmdCdWZmZXJXaWR0aDsKLSAgICByZWFkb25s
eSBhdHRyaWJ1dGUgR0xzaXplaSBkcmF3aW5nQnVmZmVySGVpZ2h0OwotCi0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYWN0aXZlVGV4dHVyZShH
TGVudW0gdGV4dHVyZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgYXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBXZWJHTFNo
YWRlciBzaGFkZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1
aW50IGluZGV4LCBET01TdHJpbmcgbmFtZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBXZWJH
TEJ1ZmZlciBidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCAgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1l
YnVmZmVyIGZyYW1lYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICBiaW5kUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIFdlYkdM
UmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZFRleHR1cmUoR0xlbnVtIHRhcmdldCwgV2Vi
R0xUZXh0dXJlIHRleHR1cmUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAg
ICBibGVuZENvbG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUs
IEdMY2xhbXBmIGFscGhhKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
YmxlbmRFcXVhdGlvbihHTGVudW0gbW9kZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHTGVudW0gbW9kZVJHQiwgR0xlbnVtIG1v
ZGVBbHBoYSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVu
YyhHTGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0b3IpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBibGVuZEZ1bmNTZXBhcmF0ZShHTGVudW0gc3JjUkdCLCBHTGVudW0g
ZHN0UkdCLCBHTGVudW0gc3JjQWxwaGEsIEdMZW51bSBkc3RBbHBoYSk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVyRGF0YShHTGVu
dW0gdGFyZ2V0LCBBcnJheUJ1ZmZlcj8gZGF0YSwgR0xlbnVtIHVzYWdlKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJEYXRhKEdM
ZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyVmlldz8gZGF0YSwgR0xlbnVtIHVzYWdlKTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJE
YXRhKEdMZW51bSB0YXJnZXQsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xlbnVtIHVzYWdlKTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJT
dWJEYXRhKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNldCwgQXJyYXlCdWZmZXI/IGRhdGEp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IGJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1ZmZl
clZpZXc/IGRhdGEpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xlbnVtICAgICAgIGNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoR0xlbnVtIHRhcmdldCk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZ10gdm9pZCAgICAgICAgIGNsZWFyKEdMYml0ZmllbGQgbWFzayk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyQ29sb3IoR0xjbGFtcGYgcmVkLCBHTGNsYW1w
ZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhckRlcHRoKEdMY2xhbXBmIGRlcHRoKTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXJTdGVuY2lsKEdMaW50IHMpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb2xvck1hc2soR0xib29sZWFu
IHJlZCwgR0xib29sZWFuIGdyZWVuLCBHTGJvb2xlYW4gYmx1ZSwgR0xib29sZWFuIGFscGhhKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBj
b21waWxlU2hhZGVyKFdlYkdMU2hhZGVyIHNoYWRlcik7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgY29tcHJlc3NlZFRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIEdMaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3IGRhdGEpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRChHTGVu
dW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEFycmF5QnVm
ZmVyVmlldyBkYXRhKTsKLSAgICAKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgY29weVRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIEdMaW50IGJvcmRlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IGNvcHlUZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTEJ1ZmZlciBjcmVh
dGVCdWZmZXIoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTEZyYW1lYnVmZmVyIGNy
ZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xQcm9ncmFt
IGNyZWF0ZVByb2dyYW0oKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTFJlbmRlcmJ1
ZmZlciBjcmVhdGVSZW5kZXJidWZmZXIoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIFdlYkdMU2hhZGVyIGNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSk7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xUZXh0dXJlIGNyZWF0ZVRleHR1cmUoKTsKLQotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjdWxsRmFjZShHTGVudW0gbW9kZSk7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlQnVmZmVyKFdl
YkdMQnVmZmVyIGJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IGRlbGV0ZUZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVQcm9ncmFtKFdlYkdMUHJvZ3Jh
bSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRl
UmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciBzaGFk
ZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVUZXh0dXJl
KFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICBkZXB0aEZ1bmMoR0xlbnVtIGZ1bmMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBkZXB0aE1hc2soR0xib29sZWFuIGZsYWcpOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBkZXB0aFJhbmdlKEdMY2xhbXBmIHpOZWFyLCBHTGNsYW1w
ZiB6RmFyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtIHByb2dyYW0sIFdlYkdMU2hhZGVyIHNo
YWRlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRpc2FibGUoR0xl
bnVtIGNhcCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdMdWludCBpbmRleCk7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJhd0FycmF5
cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRyYXdFbGVtZW50cyhH
TGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIEdMaW50cHRyIG9mZnNldCk7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZW5hYmxlKEdMZW51bSBj
YXApOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdMdWludCBpbmRleCk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGZpbmlzaCgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBmbHVzaCgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJH
TFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdMZW51bSB0
YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gdGV4dGFyZ2V0LCBXZWJHTFRleHR1cmUg
dGV4dHVyZSwgR0xpbnQgbGV2ZWwpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBmcm9udEZhY2UoR0xlbnVtIG1vZGUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICBnZW5lcmF0ZU1pcG1hcChHTGVudW0gdGFyZ2V0KTsKLSAgICAKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMQWN0aXZlSW5mbyBnZXRBY3Rp
dmVBdHRyaWIoV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMdWludCBpbmRleCk7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZl
VW5pZm9ybShXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1aW50IGluZGV4KTsKLQotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIGdldEF0dGFjaGVk
U2hhZGVycyhXZWJHTFByb2dyYW0gcHJvZ3JhbSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSBHTGludCAgICAgICAgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtIHByb2dyYW0sIERP
TVN0cmluZyBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gYW55IGdl
dEJ1ZmZlclBhcmFtZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOwotCi0gICAgW1N0
cmljdFR5cGVDaGVja2luZ10gV2ViR0xDb250ZXh0QXR0cmlidXRlcyBnZXRDb250ZXh0QXR0cmli
dXRlcygpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xlbnVtIGdldEVycm9yKCk7Ci0K
LSAgICAvLyBvYmplY3QgZ2V0RXh0ZW5zaW9uKERPTVN0cmluZyBuYW1lKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBDdXN0b21dIGFueSBnZXRFeHRlbnNpb24oRE9NU3RyaW5nIG5hbWUpOwot
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0
dGFjaG1lbnQsIEdMZW51bSBwbmFtZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9t
LCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRQYXJhbWV0ZXIoR0xlbnVtIHBuYW1lKTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFByb2dy
YW1QYXJhbWV0ZXIoV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMZW51bSBwbmFtZSk7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNF
eGNlcHRpb25dIERPTVN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0gcHJvZ3Jh
bSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFu
eSBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdl
dFNoYWRlclBhcmFtZXRlcihXZWJHTFNoYWRlciBzaGFkZXIsIEdMZW51bSBwbmFtZSk7Ci0KLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGwsIFJh
aXNlc0V4Y2VwdGlvbl0gRE9NU3RyaW5nICAgIGdldFNoYWRlckluZm9Mb2coV2ViR0xTaGFkZXIg
c2hhZGVyKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2Vi
R0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdMZW51bSBz
aGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51bGwsIFJhaXNlc0V4Y2VwdGlvbl0gRE9N
U3RyaW5nICAgIGdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlciBzaGFkZXIpOwotCi0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSBzZXF1ZW5jZTxET01TdHJpbmc+IGdldFN1cHBvcnRl
ZEV4dGVuc2lvbnMoKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2Vz
RXhjZXB0aW9uXSBhbnkgZ2V0VGV4UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFt
ZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0g
YW55IGdldFVuaWZvcm0oV2ViR0xQcm9ncmFtIHByb2dyYW0sIFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
V2ViR0xVbmlmb3JtTG9jYXRpb24gZ2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9n
cmFtLCBET01TdHJpbmcgbmFtZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20s
IFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIEdMZW51
bSBwbmFtZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTHNpemVpcHRyIGdldFZlcnRl
eEF0dHJpYk9mZnNldChHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSk7Ci0KLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgaGludChHTGVudW0gdGFyZ2V0LCBHTGVudW0gbW9k
ZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzQnVmZmVyKFdlYkdM
QnVmZmVyIGJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlz
Q29udGV4dExvc3QoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNF
bmFibGVkKEdMZW51bSBjYXApOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAg
ICBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc1Byb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dy
YW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc1JlbmRlcmJ1ZmZl
cihXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIEdMYm9vbGVhbiAgICBpc1NoYWRlcihXZWJHTFNoYWRlciBzaGFkZXIpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc1RleHR1cmUoV2ViR0xUZXh0dXJlIHRleHR1
cmUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBsaW5lV2lkdGgoR0xm
bG9hdCB3aWR0aCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBwaXhlbFN0b3JlaShHTGVudW0gcG5hbWUsIEdM
aW50IHBhcmFtKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcG9seWdv
bk9mZnNldChHTGZsb2F0IGZhY3RvciwgR0xmbG9hdCB1bml0cyk7Ci0KLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICByZWFkUGl4ZWxzKEdMaW50
IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3IHBpeGVscyk7Ci0gICAgCi0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHJlbGVhc2VTaGFkZXJDb21waWxlcigpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZW5kZXJidWZmZXJTdG9yYWdlKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzYW1wbGVD
b3ZlcmFnZShHTGNsYW1wZiB2YWx1ZSwgR0xib29sZWFuIGludmVydCk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHNjaXNzb3IoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHNoYWRlclNvdXJjZShXZWJHTFNoYWRlciBzaGFkZXIs
IERPTVN0cmluZyBzdHJpbmcpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAg
ICBzdGVuY2lsRnVuYyhHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0xl
bnVtIGZhY2UsIEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE1hc2soR0x1aW50IG1hc2spOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsTWFza1NlcGFyYXRl
KEdMZW51bSBmYWNlLCBHTHVpbnQgbWFzayk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIHN0ZW5jaWxPcChHTGVudW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBHTGVudW0genBh
c3MpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3BTZXBh
cmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNz
KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0ZXhQYXJhbWV0ZXJm
KEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xmbG9hdCBwYXJhbSk7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHRleFBhcmFtZXRlcmkoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7Ci0KLSAgICAvLyBTdXBwb3J0ZWQgZm9ybXM6Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgYm9yZGVyLCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3PyBwaXhlbHMpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgSW1hZ2VEYXRhPyBwaXhlbHMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTElt
YWdlRWxlbWVudD8gaW1hZ2UpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTENhbnZhc0Vs
ZW1lbnQ/IGNhbnZhcyk7Ci0jaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURF
TwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudD8gdmlkZW8pOwotI2Vu
ZGlmCi0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAg
ICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldz8gcGl4ZWxzKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBJbWFnZURhdGE/IHBpeGVscyk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudD8gaW1hZ2UpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1Yklt
YWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50PyBjYW52YXMp
OwotI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2aWRlbyk7Ci0jZW5k
aWYKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlm
b3JtMWYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCk7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFm
dihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5IHYpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWkoV2ViR0xV
bmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xaXYoV2ViR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEludDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBs
b2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHkpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yZnYoV2ViR0xVbmlmb3JtTG9j
YXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxv
Y2F0aW9uLCBHTGludCB4LCBHTGludCB5KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0
b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMml2KFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2YoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24s
IEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zZnYoV2ViR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNpKFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6KTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2l2KFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGYoV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
dW5pZm9ybTRmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5IHYp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3Jt
NGkoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50
IHosIEdMaW50IHcpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkIHVuaWZvcm00aXYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIElu
dDMyQXJyYXkgdik7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4MmZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0
aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRy
aXgzZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2Us
IEZsb2F0MzJBcnJheSBhcnJheSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihXZWJHTFVuaWZvcm1Mb2NhdGlv
biBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKLQot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHVz
ZVByb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dy
YW0gcHJvZ3JhbSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmVy
dGV4QXR0cmliMWYoR0x1aW50IGluZHgsIEdMZmxvYXQgeCk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tXSB2b2lkIHZlcnRleEF0dHJpYjFmdihHTHVpbnQgaW5keCwgRmxvYXQzMkFy
cmF5IHZhbHVlcyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRl
eEF0dHJpYjJmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgQ3VzdG9tXSB2b2lkIHZlcnRleEF0dHJpYjJmdihHTHVpbnQgaW5keCwg
RmxvYXQzMkFycmF5IHZhbHVlcyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIHZlcnRleEF0dHJpYjNmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xm
bG9hdCB6KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0
cmliM2Z2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliNGYoR0x1aW50IGluZHgsIEdMZmxv
YXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHosIEdMZmxvYXQgdyk7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgQ3VzdG9tXSB2b2lkIHZlcnRleEF0dHJpYjRmdihHTHVpbnQgaW5keCwgRmxvYXQz
MkFycmF5IHZhbHVlcyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5keCwgR0xpbnQgc2l6
ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHN0cmlkZSwg
R0xpbnRwdHIgb2Zmc2V0KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAg
ICB2aWV3cG9ydChHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7Ci19OwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYyODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisj
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorCisjaW5jbHVkZSAiQU5HTEVJ
bnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIkRP
TVdpbmRvdy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRVhUU2hhZGVyVGV4
dHVyZUxPRC5oIgorI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRT
aXplLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1haW5GcmFtZS5oIgorI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiT0VTRWxlbWVudEluZGV4VWludC5o
IgorI2luY2x1ZGUgIk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMuaCIKKyNpbmNsdWRlICJPRVNUZXh0
dXJlRmxvYXQuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRl
ICJPRVNUZXh0dXJlSGFsZkZsb2F0LmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdExp
bmVhci5oIgorI2luY2x1ZGUgIk9FU1ZlcnRleEFycmF5T2JqZWN0LmgiCisjaW5jbHVkZSAiUGFn
ZS5oIgorI2luY2x1ZGUgIlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5j
bHVkZSAiV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmlu
Z0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJH
TEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKKyNpbmNs
dWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIK
KyNpbmNsdWRlICJXZWJHTENvbnRleHRFdmVudC5oIgorI2luY2x1ZGUgIldlYkdMQ29udGV4dEdy
b3VwLmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgorI2luY2x1ZGUgIldl
YkdMRGVidWdTaGFkZXJzLmgiCisjaW5jbHVkZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNs
dWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgor
I2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIK
KyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgi
CisjaW5jbHVkZSAiV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCIKKyNpbmNsdWRlICJXZWJH
TFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgorCisjaW5jbHVk
ZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5s
aW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25z
dCBkb3VibGUgc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMgPSAxLjA7Citjb25zdCBpbnQg
bWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlID0gMjU2OworCituYW1lc3BhY2UgeworICAgIAor
ICAgIGNsYXNzIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcihEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVy
LCBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICA6IG1f
ZHJhd2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgLCBtX2ZyYW1lYnVmZmVy
QmluZGluZyhmcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIENv
bW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5nLiwgZm9yIG11bHRpc2FtcGxpbmcpCisg
ICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikK
KyAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICB+U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQKKyAgICAgICAg
ICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAg
ICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICB9CisgICAgICAgIAor
ICAgIHByaXZhdGU6CisgICAgICAgIERyYXdpbmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKKyAg
ICAgICAgV2ViR0xGcmFtZWJ1ZmZlciogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7CisgICAgfTsKKyAg
ICAKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9yWmVybyhXZWJHTE9iamVjdCogb2JqZWN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+b2JqZWN0KCkgOiAwOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGNsaXAxRChHQzNEaW50IHN0YXJ0LCBHQzNEc2l6ZWkgcmFu
Z2UsIEdDM0RzaXplaSBzb3VyY2VSYW5nZSwgR0MzRGludCogY2xpcHBlZFN0YXJ0LCBHQzNEc2l6
ZWkqIGNsaXBwZWRSYW5nZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChjbGlwcGVkU3RhcnQgJiYg
Y2xpcHBlZFJhbmdlKTsKKyAgICAgICAgaWYgKHN0YXJ0IDwgMCkgeworICAgICAgICAgICAgcmFu
Z2UgKz0gc3RhcnQ7CisgICAgICAgICAgICBzdGFydCA9IDA7CisgICAgICAgIH0KKyAgICAgICAg
R0MzRGludCBlbmQgPSBzdGFydCArIHJhbmdlOworICAgICAgICBpZiAoZW5kID4gc291cmNlUmFu
Z2UpCisgICAgICAgICAgICByYW5nZSAtPSBlbmQgLSBzb3VyY2VSYW5nZTsKKyAgICAgICAgKmNs
aXBwZWRTdGFydCA9IHN0YXJ0OworICAgICAgICAqY2xpcHBlZFJhbmdlID0gcmFuZ2U7CisgICAg
fQorICAgIAorICAgIC8vIFJldHVybnMgZmFsc2UgaWYgbm8gY2xpcHBpbmcgaXMgbmVjZXNzYXJ5
LCBpLmUuLCB4LCB5LCB3aWR0aCwgaGVpZ2h0IHN0YXkgdGhlIHNhbWUuCisgICAgYm9vbCBjbGlw
MkQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwKKyAgICAgICAgR0MzRHNpemVpIHNvdXJjZVdpZHRoLCBHQzNEc2l6ZWkgc291cmNlSGVpZ2h0
LAorICAgICAgICBHQzNEaW50KiBjbGlwcGVkWCwgR0MzRGludCogY2xpcHBlZFksIEdDM0RzaXpl
aSogY2xpcHBlZFdpZHRoLCBHQzNEc2l6ZWkqY2xpcHBlZEhlaWdodCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChjbGlwcGVkWCAmJiBjbGlwcGVkWSAmJiBjbGlwcGVkV2lkdGggJiYgY2xpcHBlZEhl
aWdodCk7CisgICAgICAgIGNsaXAxRCh4LCB3aWR0aCwgc291cmNlV2lkdGgsIGNsaXBwZWRYLCBj
bGlwcGVkV2lkdGgpOworICAgICAgICBjbGlwMUQoeSwgaGVpZ2h0LCBzb3VyY2VIZWlnaHQsIGNs
aXBwZWRZLCBjbGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgcmV0dXJuICgqY2xpcHBlZFggIT0geCB8
fCAqY2xpcHBlZFkgIT0geSB8fCAqY2xpcHBlZFdpZHRoICE9IHdpZHRoIHx8ICpjbGlwcGVkSGVp
Z2h0ICE9IGhlaWdodCk7CisgICAgfQorICAgIAorICAgIEdDM0RpbnQgY2xhbXAoR0MzRGludCB2
YWx1ZSwgR0MzRGludCBtaW4sIEdDM0RpbnQgbWF4KQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVl
IDwgbWluKQorICAgICAgICAgICAgdmFsdWUgPSBtaW47CisgICAgICAgIGlmICh2YWx1ZSA+IG1h
eCkKKyAgICAgICAgICAgIHZhbHVlID0gbWF4OworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAg
fQorICAgIAorICAgIC8vIFJldHVybiB0cnVlIGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhl
IEFTQ0lJIHN1YnNldCBhcyBkZWZpbmVkIGluCisgICAgLy8gR0xTTCBFUyAxLjAgc3BlYyBzZWN0
aW9uIDMuMS4KKyAgICBib29sIHZhbGlkYXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIgYykKKyAg
ICB7CisgICAgICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQg
YCBAIFwgJyBERUwuCisgICAgICAgIGlmIChjID49IDMyICYmIGMgPD0gMTI2CisgICAgICAgICAg
ICAmJiBjICE9ICciJyAmJiBjICE9ICckJyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAmJiBjICE9
ICdcXCcgJiYgYyAhPSAnXCcnKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8v
IEhvcml6b250YWwgdGFiLCBsaW5lIGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJy
aWFnZSByZXR1cm4KKyAgICAgICAgLy8gYXJlIGFsc28gdmFsaWQuCisgICAgICAgIGlmIChjID49
IDkgJiYgYyA8PSAxMykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNQcmVmaXhSZXNlcnZlZChjb25zdCBTdHJp
bmcmIG5hbWUpCisgICAgeworICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCJnbF8iKSB8fCBu
YW1lLnN0YXJ0c1dpdGgoIndlYmdsXyIpIHx8IG5hbWUuc3RhcnRzV2l0aCgiX3dlYmdsXyIpKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgCisgICAgLy8gU3RyaXBzIGNvbW1lbnRzIGZyb20gc2hhZGVyIHRleHQuIFRoaXMgYWxsb3dz
IG5vbi1BU0NJSSBjaGFyYWN0ZXJzCisgICAgLy8gdG8gYmUgdXNlZCBpbiBjb21tZW50cyB3aXRo
b3V0IHBvdGVudGlhbGx5IGJyZWFraW5nIE9wZW5HTAorICAgIC8vIGltcGxlbWVudGF0aW9ucyBu
b3QgZXhwZWN0aW5nIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGUgR0xTTCBFUyBzZXQuCisgICAgY2xh
c3MgU3RyaXBDb21tZW50cyB7CisgICAgcHVibGljOgorICAgICAgICBTdHJpcENvbW1lbnRzKGNv
bnN0IFN0cmluZyYgc3RyKQorICAgICAgICAgICAgOiBtX3BhcnNlU3RhdGUoQmVnaW5uaW5nT2ZM
aW5lKQorICAgICAgICAgICAgLCBtX3NvdXJjZVN0cmluZyhzdHIpCisgICAgICAgICAgICAsIG1f
bGVuZ3RoKHN0ci5sZW5ndGgoKSkKKyAgICAgICAgICAgICwgbV9wb3NpdGlvbigwKQorICAgICAg
ICB7CisgICAgICAgICAgICBwYXJzZSgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBT
dHJpbmcgcmVzdWx0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50
b1N0cmluZygpOworICAgICAgICB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGJv
b2wgaGFzTW9yZUNoYXJhY3RlcnMoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHZvaWQgcGFyc2UoKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaGFzTW9yZUNoYXJh
Y3RlcnMoKSkgeworICAgICAgICAgICAgICAgIHByb2Nlc3MoY3VycmVudCgpKTsKKyAgICAgICAg
ICAgICAgICAvLyBwcm9jZXNzKCkgbWlnaHQgYWR2YW5jZSB0aGUgcG9zaXRpb24uCisgICAgICAg
ICAgICAgICAgaWYgKGhhc01vcmVDaGFyYWN0ZXJzKCkpCisgICAgICAgICAgICAgICAgICAgIGFk
dmFuY2UoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9p
ZCBwcm9jZXNzKFVDaGFyKTsKKyAgICAgICAgCisgICAgICAgIGJvb2wgcGVlayhVQ2hhciYgY2hh
cmFjdGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9wb3NpdGlvbiArIDEg
Pj0gbV9sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
Y2hhcmFjdGVyID0gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbiArIDFdOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFVDaGFyIGN1cnJlbnQo
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBM
SUNBVElPTihtX3Bvc2l0aW9uIDwgbV9sZW5ndGgpOworICAgICAgICAgICAgcmV0dXJuIG1fc291
cmNlU3RyaW5nW21fcG9zaXRpb25dOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB2b2lk
IGFkdmFuY2UoKQorICAgICAgICB7CisgICAgICAgICAgICArK21fcG9zaXRpb247CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNoYXJhY3RlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBjYW5vbmljYWxp
emUgbmV3bGluZSByZWxhdGVkIGNoYXJhY3RlcnMuCisgICAgICAgICAgICByZXR1cm4gKGNoYXJh
Y3RlciA9PSAnXG4nIHx8IGNoYXJhY3RlciA9PSAnXHInKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgdm9pZCBlbWl0KFVDaGFyIGNoYXJhY3RlcikKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9idWlsZGVyLmFwcGVuZChjaGFyYWN0ZXIpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBlbnVtIFBhcnNlU3RhdGUgeworICAgICAgICAgICAgLy8gSGF2ZSBub3Qgc2VlbiBhbiBB
U0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgeWV0IG9uCisgICAgICAgICAgICAvLyB0aGlz
IGxpbmUuIFBvc3NpYmxlIHRoYXQgd2UgbWlnaHQgc2VlIGEgcHJlcHJvY2Vzc29yCisgICAgICAg
ICAgICAvLyBkaXJlY3RpdmUuCisgICAgICAgICAgICBCZWdpbm5pbmdPZkxpbmUsCisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEhhdmUgc2VlbiBhdCBsZWFzdCBvbmUgQVNDSUkgbm9uLXdo
aXRlc3BhY2UgY2hhcmFjdGVyCisgICAgICAgICAgICAvLyBvbiB0aGlzIGxpbmUuCisgICAgICAg
ICAgICBNaWRkbGVPZkxpbmUsCisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEhhbmRsaW5n
IGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gUGFzc2VzIHRocm91Z2ggYWxsCisgICAgICAgICAg
ICAvLyBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuIERpc2FibGVzIGNvbW1l
bnQKKyAgICAgICAgICAgIC8vIHByb2Nlc3NpbmcuCisgICAgICAgICAgICBJblByZXByb2Nlc3Nv
ckRpcmVjdGl2ZSwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBzaW5n
bGUtbGluZSBjb21tZW50LiBUaGUgY29tbWVudCB0ZXh0IGlzCisgICAgICAgICAgICAvLyByZXBs
YWNlZCB3aXRoIGEgc2luZ2xlIHNwYWNlLgorICAgICAgICAgICAgSW5TaW5nbGVMaW5lQ29tbWVu
dCwKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBtdWx0aS1saW5lIGNv
bW1lbnQuIE5ld2xpbmVzIGFyZSBwYXNzZWQKKyAgICAgICAgICAgIC8vIHRocm91Z2ggdG8gcHJl
c2VydmUgbGluZSBudW1iZXJzLgorICAgICAgICAgICAgSW5NdWx0aUxpbmVDb21tZW50CisgICAg
ICAgIH07CisgICAgICAgIAorICAgICAgICBQYXJzZVN0YXRlIG1fcGFyc2VTdGF0ZTsKKyAgICAg
ICAgU3RyaW5nIG1fc291cmNlU3RyaW5nOworICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAg
ICAgICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKKyAgICAgICAgU3RyaW5nQnVpbGRlciBtX2J1aWxk
ZXI7CisgICAgfTsKKyAgICAKKyAgICB2b2lkIFN0cmlwQ29tbWVudHM6OnByb2Nlc3MoVUNoYXIg
YykKKyAgICB7CisgICAgICAgIGlmIChpc05ld2xpbmUoYykpIHsKKyAgICAgICAgICAgIC8vIE5v
IG1hdHRlciB3aGF0IHN0YXRlIHdlIGFyZSBpbiwgcGFzcyB0aHJvdWdoIG5ld2xpbmVzCisgICAg
ICAgICAgICAvLyBzbyB3ZSBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCisgICAgICAgICAgICBlbWl0
KGMpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9wYXJzZVN0YXRlICE9IEluTXVs
dGlMaW5lQ29tbWVudCkKKyAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBCZWdpbm5pbmdP
ZkxpbmU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgVUNoYXIgdGVtcCA9IDA7CisgICAgICAgIHN3aXRjaCAobV9wYXJzZVN0
YXRlKSB7CisgICAgICAgIGNhc2UgQmVnaW5uaW5nT2ZMaW5lOgorICAgICAgICAgICAgaWYgKFdU
Rjo6aXNBU0NJSVNwYWNlKGMpKSB7CisgICAgICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKGMgPT0gJyMnKSB7CisgICAgICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5QcmVwcm9j
ZXNzb3JEaXJlY3RpdmU7CisgICAgICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gVHJh
bnNpdGlvbiB0byBub3JtYWwgc3RhdGUgYW5kIHJlLWhhbmRsZSBjaGFyYWN0ZXIuCisgICAgICAg
ICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7CisgICAgICAgICAgICBwcm9jZXNzKGMp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBNaWRkbGVP
ZkxpbmU6CisgICAgICAgICAgICBpZiAoYyA9PSAnLycgJiYgcGVlayh0ZW1wKSkgeworICAgICAg
ICAgICAgICAgIGlmICh0ZW1wID09ICcvJykgeworICAgICAgICAgICAgICAgICAgICBtX3BhcnNl
U3RhdGUgPSBJblNpbmdsZUxpbmVDb21tZW50OworICAgICAgICAgICAgICAgICAgICBlbWl0KCcg
Jyk7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmICh0ZW1wID09ICcqJykgeworICAgICAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUg
PSBJbk11bHRpTGluZUNvbW1lbnQ7CisgICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNv
bW1lbnQgc3RhcnQgaW4gY2FzZSB0aGUgdXNlciBoYXMKKyAgICAgICAgICAgICAgICAgICAgLy8g
YW4gdW5jbG9zZWQgY29tbWVudCBhbmQgd2Ugd2FudCB0byBsYXRlcgorICAgICAgICAgICAgICAg
ICAgICAvLyBzaWduYWwgYW4gZXJyb3IuCisgICAgICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsK
KyAgICAgICAgICAgICAgICAgICAgZW1pdCgnKicpOworICAgICAgICAgICAgICAgICAgICBhZHZh
bmNlKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgSW5QcmVwcm9jZXNzb3JEaXJl
Y3RpdmU6CisgICAgICAgICAgICAvLyBObyBtYXR0ZXIgd2hhdCB0aGUgY2hhcmFjdGVyIGlzLCBq
dXN0IHBhc3MgaXQKKyAgICAgICAgICAgIC8vIHRocm91Z2guIERvIG5vdCBwYXJzZSBjb21tZW50
cyBpbiB0aGlzIHN0YXRlLiBUaGlzCisgICAgICAgICAgICAvLyBtaWdodCBub3QgYmUgdGhlIHJp
Z2h0IHRoaW5nIHRvIGRvIGxvbmcgdGVybSwgYnV0IGl0CisgICAgICAgICAgICAvLyBzaG91bGQg
aGFuZGxlIHRoZSAjZXJyb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4KKyAgICAgICAgICAgIGVt
aXQoYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIElu
U2luZ2xlTGluZUNvbW1lbnQ6CisgICAgICAgICAgICAvLyBUaGUgbmV3bGluZSBjb2RlIGF0IHRo
ZSB0b3Agb2YgdGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlCisgICAgICAgICAgICAvLyBvZiByZXNl
dHRpbmcgb3VyIHN0YXRlIHdoZW4gd2UgZ2V0IG91dCBvZiB0aGUKKyAgICAgICAgICAgIC8vIHNp
bmdsZS1saW5lIGNvbW1lbnQuIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNlIEluTXVsdGlMaW5lQ29tbWVu
dDoKKyAgICAgICAgICAgIGlmIChjID09ICcqJyAmJiBwZWVrKHRlbXApICYmIHRlbXAgPT0gJy8n
KSB7CisgICAgICAgICAgICAgICAgZW1pdCgnKicpOworICAgICAgICAgICAgICAgIGVtaXQoJy8n
KTsKKyAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7CisgICAgICAg
ICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBTd2FsbG93IGFsbCBvdGhlciBjaGFyYWN0
ZXJzLiBVbmNsZWFyIHdoZXRoZXIgd2UgbWF5CisgICAgICAgICAgICAvLyB3YW50IG9yIG5lZWQg
dG8ganVzdCBlbWl0IGEgc3BhY2UgcGVyIGNoYXJhY3RlciB0byB0cnkKKyAgICAgICAgICAgIC8v
IHRvIHByZXNlcnZlIGNvbHVtbiBudW1iZXJzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30gLy8gbmFtZXNwYWNlIGFub255bW91
cworCitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2sgOiBwdWJsaWMgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2sgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dExv
c3RDYWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjYikKKyAgICA6IG1fY29udGV4
dChjYikgeyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgb25Db250ZXh0TG9zdCgpIG92ZXJyaWRlCisg
ICAgeworICAgICAgICBtX2NvbnRleHQtPmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6UmVhbExvc3RDb250ZXh0KTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5XZWJH
TFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2soKSB7IH0KK3ByaXZhdGU6CisgICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSogbV9jb250ZXh0OworfTsKKworY2xhc3MgV2ViR0xSZW5kZXJp
bmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3NDb250ZXh0M0Q6
OkVycm9yTWVzc2FnZUNhbGxiYWNrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxs
YmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjYikKKyAgICA6IG1fY29udGV4dChjYikg
eyB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIG9uRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYg
bWVzc2FnZSwgR0MzRGludCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2NvbnRleHQt
Pm1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUpCisgICAgICAgICAgICBtX2NvbnRleHQtPnBy
aW50R0xFcnJvclRvQ29uc29sZShtZXNzYWdlKTsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB+
V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2soKSB7IH0KK3ByaXZhdGU6
CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogbV9jb250ZXh0OworfTsKKworc3RkOjp1
bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNyZWF0ZShIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBXZWJHTENvbnRleHRBdHRy
aWJ1dGVzKiBhdHRycywgY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIERvY3VtZW50JiBkb2N1
bWVudCA9IGNhbnZhcy0+ZG9jdW1lbnQoKTsKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC5m
cmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAor
ICAgIC8vIFRoZSBGcmFtZUxvYWRlckNsaWVudCBtaWdodCBibG9jayBjcmVhdGlvbiBvZiBhIG5l
dyBXZWJHTCBjb250ZXh0IGRlc3BpdGUgdGhlIHBhZ2Ugc2V0dGluZ3M7IGluCisgICAgLy8gcGFy
dGljdWxhciwgaWYgV2ViR0wgY29udGV4dHMgd2VyZSBsb3N0IG9uZSBvciBtb3JlIHRpbWVzIHZp
YSB0aGUgR0xfQVJCX3JvYnVzdG5lc3MgZXh0ZW5zaW9uLgorICAgIGlmICghZnJhbWUtPmxvYWRl
cigpLmNsaWVudCgpLmFsbG93V2ViR0woZnJhbWUtPnNldHRpbmdzKCkud2ViR0xFbmFibGVkKCkp
KSB7CisgICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsIGZhbHNlLCB0
cnVlLCAiV2ViIHBhZ2Ugd2FzIG5vdCBhbGxvd2VkIHRvIGNyZWF0ZSBhIFdlYkdMIGNvbnRleHQu
IikpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1Bl
bmRpbmdQb2xpY3lSZXNvbHV0aW9uID0gZmFsc2U7CisgICAgRG9jdW1lbnQmIHRvcERvY3VtZW50
ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKTsKKyAgICBQYWdlKiBwYWdlID0gdG9wRG9jdW1lbnQu
cGFnZSgpOworICAgIGlmIChwYWdlICYmICF0b3BEb2N1bWVudC51cmwoKS5pc0xvY2FsRmlsZSgp
KSB7CisgICAgICAgIFdlYkdMTG9hZFBvbGljeSBwb2xpY3kgPSBwYWdlLT5tYWluRnJhbWUoKS5s
b2FkZXIoKS5jbGllbnQoKS53ZWJHTFBvbGljeUZvclVSTCh0b3BEb2N1bWVudC51cmwoKSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMQmxvY2tDcmVhdGlvbikgeworICAg
ICAgICAgICAgTE9HKFdlYkdMLCAiVGhlIHBvbGljeSBmb3IgdGhpcyBVUkwgKCVzKSBpcyB0byBi
bG9jayBXZWJHTC4iLCB0b3BEb2N1bWVudC51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKHBvbGljeSA9PSBXZWJHTFBlbmRpbmdDcmVhdGlvbikgeworICAgICAgICAgICAgTE9HKFdl
YkdMLCAiV2ViR0wgcG9saWN5IGlzIHBlbmRpbmcuIE1heSBuZWVkIHRvIGJlIHJlc29sdmVkIGxh
dGVyLiIpOworICAgICAgICAgICAgaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbiA9IHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMg
YXR0cmlidXRlcyA9IGF0dHJzID8gYXR0cnMtPmF0dHJpYnV0ZXMoKSA6IEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzKCk7CisgICAgCisgICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7
CisgICAgICAgIGlmICghZnJhbWUtPnNldHRpbmdzKCkub3BlbkdMTXVsdGlzYW1wbGluZ0VuYWJs
ZWQoKSkKKyAgICAgICAgICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gZmFsc2U7CisgICAgfQor
ICAgIAorICAgIGF0dHJpYnV0ZXMubm9FeHRlbnNpb25zID0gdHJ1ZTsKKyAgICBhdHRyaWJ1dGVz
LnNoYXJlUmVzb3VyY2VzID0gZmFsc2U7CisgICAgYXR0cmlidXRlcy5wcmVmZXJEaXNjcmV0ZUdQ
VSA9IHRydWU7CisgICAgCisgICAgaWYgKGZyYW1lLT5zZXR0aW5ncygpLmZvcmNlU29mdHdhcmVX
ZWJHTFJlbmRlcmluZygpKQorICAgICAgICBhdHRyaWJ1dGVzLmZvcmNlU29mdHdhcmVSZW5kZXJl
ciA9IHRydWU7CisgICAgCisgICAgaWYgKHBhZ2UpCisgICAgICAgIGF0dHJpYnV0ZXMuZGV2aWNl
UGl4ZWxSYXRpbyA9IHBhZ2UtPmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgCisgICAgaWYgKGlz
UGVuZGluZ1BvbGljeVJlc29sdXRpb24pIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiQ3JlYXRlIGEg
V2ViR0wgY29udGV4dCB0aGF0IGxvb2tzIHJlYWwsIGJ1dCB3aWxsIHJlcXVpcmUgYSBwb2xpY3kg
cmVzb2x1dGlvbiBpZiB1c2VkLiIpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZT4gcmVuZGVyaW5nQ29udGV4dCA9IG5pbDsKKyAgICAgICAgaWYgKHR5
cGUgPT0gImV4cGVyaW1lbnRhbC13ZWJnbDIiKQorICAgICAgICAgICAgcmVuZGVyaW5nQ29udGV4
dCA9IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihuZXcgV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dChjYW52YXMsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmVuZGVyaW5nQ29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDFSZW5kZXJpbmdD
b250ZXh0PihuZXcgV2ViR0wxUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGF0dHJpYnV0ZXMpKTsK
KyAgICB9CisgICAgCisgICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRvY3VtZW50LnZpZXco
KS0+cm9vdCgpLT5ob3N0V2luZG93KCk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdpbmRvdykp
OworICAgIAorICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCkpIHsKKyAgICAgICAgY2FudmFzLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwgZmFsc2Us
IHRydWUsICJDb3VsZCBub3QgY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKyAgICAKKyAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lvbnMg
PSBjb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7CisgICAgaWYgKGV4dGVuc2lvbnMtPnN1cHBvcnRz
KCJHTF9FWFRfZGVidWdfbWFya2VyIikpCisgICAgICAgIGV4dGVuc2lvbnMtPnB1c2hHcm91cE1h
cmtlckVYVCgiV2ViR0xSZW5kZXJpbmdDb250ZXh0Iik7CisgICAgCisgICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U+IHJlbmRlcmluZ0NvbnRleHQgPSBuaWw7Cisg
ICAgaWYgKHR5cGUgPT0gImV4cGVyaW1lbnRhbC13ZWJnbDIiKQorICAgICAgICByZW5kZXJpbmdD
b250ZXh0ID0gc3RkOjp1bmlxdWVfcHRyPFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ+KG5ldyBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgY29udGV4dCwgYXR0cmlidXRlcykpOworICAgIGVs
c2UKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDFSZW5k
ZXJpbmdDb250ZXh0PihuZXcgV2ViR0wxUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGNvbnRleHQs
IGF0dHJpYnV0ZXMpKTsKKyAgICByZW5kZXJpbmdDb250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsK
KyAgICAKKyAgICByZXR1cm4gcmVuZGVyaW5nQ29udGV4dDsKK30KKworV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShIVE1MQ2FudmFzRWxlbWVudCog
cGFzc2VkQ2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQor
ICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBBY3RpdmVE
T01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY29udGV4dCgwKQor
ICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVu
dFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0Y2hDb250ZXh0
TG9zdEV2ZW50KQorICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKKyAgICAsIG1fcmVzdG9y
ZVRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWF5YmVSZXN0b3JlQ29u
dGV4dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSgwKQorICAgICwgbV9jb250ZXh0TG9z
dChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0KQor
ICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3N5bnRoZXNpemVkRXJyb3Jz
VG9Db25zb2xlKHRydWUpCisgICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZChtYXhH
TEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRp
b24odHJ1ZSkKKyAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxzZSkKK3sK
K30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZShIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVz
KQorICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBBY3Rp
dmVET01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY29udGV4dChj
b250ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29udGV4
dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0
Y2hDb250ZXh0TG9zdEV2ZW50KQorICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKKyAgICAs
IG1fcmVzdG9yZVRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWF5YmVS
ZXN0b3JlQ29udGV4dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSg0KQorICAgICwgbV9j
b250ZXh0TG9zdChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RD
b250ZXh0KQorICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3N5bnRoZXNp
emVkRXJyb3JzVG9Db25zb2xlKHRydWUpCisgICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxs
b3dlZChtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb24oZmFsc2UpCisgICAgLCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24o
ZmFsc2UpCit7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgbV9jb250ZXh0R3JvdXAgPSBX
ZWJHTENvbnRleHRHcm91cDo6Y3JlYXRlKCk7CisgICAgbV9jb250ZXh0R3JvdXAtPmFkZENvbnRl
eHQodGhpcyk7CisgICAgCisgICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdwb3J0
RGltc1sxXSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1ZJRVdQT1JUX0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKKyAgICAKKyAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICAK
KyAgICBzZXR1cEZsYWdzKCk7CisgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4dCgpCit7Cisg
ICAgQVNTRVJUKCFtX2NvbnRleHRMb3N0KTsKKyAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsKKyAg
ICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisgICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9
IDA7CisgICAgbV9wYWNrQWxpZ25tZW50ID0gNDsKKyAgICBtX3VucGFja0FsaWdubWVudCA9IDQ7
CisgICAgbV91bnBhY2tGbGlwWSA9IGZhbHNlOworICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBo
YSA9IGZhbHNlOworICAgIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGljc0Nv
bnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dFQkdMOworICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9
IDA7CisgICAgbV9jdXJyZW50UHJvZ3JhbSA9IDA7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
PSAwOworICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7CisgICAgbV9kZXB0aE1hc2sgPSB0
cnVlOworICAgIG1fc3RlbmNpbEVuYWJsZWQgPSBmYWxzZTsKKyAgICBtX3N0ZW5jaWxNYXNrID0g
MHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IDB4RkZGRkZGRkY7CisgICAgbV9z
dGVuY2lsRnVuY1JlZiA9IDA7CisgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSAwOworICAgIG1f
c3RlbmNpbEZ1bmNNYXNrID0gMHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sg
PSAweEZGRkZGRkZGOworICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7CisgICAgbV9udW1HTEVy
cm9yc1RvQ29uc29sZUFsbG93ZWQgPSBtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7CisgICAg
CisgICAgbV9jbGVhckNvbG9yWzBdID0gbV9jbGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9yWzJd
ID0gbV9jbGVhckNvbG9yWzNdID0gMDsKKyAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7Cisg
ICAgbV9jbGVhckRlcHRoID0gMTsKKyAgICBtX2NsZWFyU3RlbmNpbCA9IDA7CisgICAgbV9jb2xv
ck1hc2tbMF0gPSBtX2NvbG9yTWFza1sxXSA9IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1hc2tb
M10gPSB0cnVlOworICAgIAorICAgIEdDM0RpbnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0
cyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFnZVVu
aXRzKTsKKyAgICBtX3RleHR1cmVVbml0cy5jbGVhcigpOworICAgIG1fdGV4dHVyZVVuaXRzLnJl
c2l6ZShudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICAKKyAgICBHQzNEaW50IG51
bVZlcnRleEF0dHJpYnMgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJm51bVZlcnRleEF0dHJpYnMpOworICAgIG1f
bWF4VmVydGV4QXR0cmlicyA9IG51bVZlcnRleEF0dHJpYnM7CisgICAgCisgICAgbV9tYXhUZXh0
dXJlU2l6ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fbWF4VGV4dHVyZVNpemUpOworICAgIG1fbWF4VGV4dHVy
ZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21wdXRlTGV2ZWxDb3VudChtX21heFRleHR1cmVTaXpl
LCBtX21heFRleHR1cmVTaXplKTsKKyAgICBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSA9IDA7Cisg
ICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVfTUFQ
X1RFWFRVUkVfU0laRSwgJm1fbWF4Q3ViZU1hcFRleHR1cmVTaXplKTsKKyAgICBtX21heEN1YmVN
YXBUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1dGVMZXZlbENvdW50KG1fbWF4Q3Vi
ZU1hcFRleHR1cmVTaXplLCBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSk7CisgICAgbV9tYXhSZW5k
ZXJidWZmZXJTaXplID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUsICZtX21heFJlbmRlcmJ1ZmZlclNpemUpOwor
ICAgIAorICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJvbSBFWFRfZHJhd19idWZmZXJzIGFyZSBs
YXppbHkgcXVlcmllZC4KKyAgICBtX21heERyYXdCdWZmZXJzID0gMDsKKyAgICBtX21heENvbG9y
QXR0YWNobWVudHMgPSAwOworICAgIAorICAgIG1fYmFja0RyYXdCdWZmZXIgPSBHcmFwaGljc0Nv
bnRleHQzRDo6QkFDSzsKKyAgICBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2Vk
ID0gZmFsc2U7CisgICAgbV9kcmF3QnVmZmVyc1N1cHBvcnRlZCA9IGZhbHNlOworICAgIAorICAg
IG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0ID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
Y3JlYXRlKHRoaXMsIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZhb1R5cGVEZWZhdWx0KTsK
KyAgICBhZGRDb250ZXh0T2JqZWN0KG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgpKTsK
KyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVj
dDsKKyAgICAKKyAgICBtX3ZlcnRleEF0dHJpYlZhbHVlLnJlc2l6ZShtX21heFZlcnRleEF0dHJp
YnMpOworICAgIAorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY3JlYXRl
RmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkp
CisgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CisgICAgCisgICAgSW50U2l6ZSBjYW52YXNT
aXplID0gY2xhbXBlZENhbnZhc1NpemUoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KGNhbnZhc1NpemUpOworICAgIAorICAgIG1fY29u
dGV4dC0+cmVzaGFwZShjYW52YXNTaXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOwor
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNT
aXplLmhlaWdodCgpKTsKKyAgICBtX2NvbnRleHQtPnNjaXNzb3IoMCwgMCwgY2FudmFzU2l6ZS53
aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKKyAgICAKKyAgICBtX2NvbnRleHQtPnNldENv
bnRleHRMb3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHRM
b3N0Q2FsbGJhY2s+KHRoaXMpKTsKKyAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxi
YWNrKHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2Fs
bGJhY2s+KHRoaXMpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzZXR1
cEZsYWdzKCkKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICAKKyAgICBpZiAoUGFnZSog
cGFnZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgbV9zeW50aGVzaXpl
ZEVycm9yc1RvQ29uc29sZSA9IHBhZ2UtPnNldHRpbmdzKCkud2ViR0xFcnJvcnNUb0NvbnNvbGVF
bmFibGVkKCk7CisgICAgCisgICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5pc0dM
RVMyQ29tcGxpYW50KCk7CisgICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vz
c2VzID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1f
c3RyaWN0X2F0dHJpYnMiKTsKKyAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOworICAg
IGlmIChtX2lzR0xFUzJDb21wbGlhbnQpIHsKKyAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9
ICFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9u
cG90Iik7CisgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90
d28iKTsKKyAgICAgICAgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwor
ICAgIH0KKyAgICBtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Cit9CisKK2Jvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpIGNvbnN0
Cit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCisg
ICAgICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLnByaXZpbGVnZWRXZWJHTEV4dGVuc2lvbnNF
bmFibGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sK
KyAgICBpZiAoIW1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmNvbnRhaW5zKGZvcm1hdCkpCisg
ICAgICAgIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmFwcGVuZChmb3JtYXQpOworfQorCitX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp+V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSgpCit7
CisgICAgLy8gUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIFdlYkdMT2JqZWN0cyBzbyBpZiB0aGV5
IGFyZSB0aGUgbGFzdCByZWZlcmVuY2UKKyAgICAvLyB0aGV5IHdpbGwgYmUgZnJlZWQgYmVmb3Jl
IHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb250ZXh0IGdyb3VwLgorICAg
IG1fYm91bmRBcnJheUJ1ZmZlciA9IG51bGxwdHI7CisgICAgbV9kZWZhdWx0VmVydGV4QXJyYXlP
YmplY3QgPSBudWxscHRyOworICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7
CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnRQcm9n
cmFtID0gbnVsbHB0cjsKKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IG51bGxwdHI7CisgICAg
bV9yZW5kZXJidWZmZXJCaW5kaW5nID0gbnVsbHB0cjsKKyAgICAKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIG1fdGV4dHVy
ZVVuaXRzW2ldLnRleHR1cmUyREJpbmRpbmcgPSBudWxscHRyOworICAgICAgICBtX3RleHR1cmVV
bml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICAKKyAg
ICBtX2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKKyAgICBtX2JsYWNrVGV4dHVyZUN1YmVNYXAg
PSBudWxscHRyOworICAgIAorICAgIGlmICghbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7
CisgICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKyAgICAgICAgZGVzdHJveUdy
YXBoaWNzQ29udGV4dDNEKCk7CisgICAgICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVDb250ZXh0
KHRoaXMpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXN0
cm95R3JhcGhpY3NDb250ZXh0M0QoKQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29s
dXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBUaGUgZHJhd2luZyBidWZmZXIg
aG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3llZAorICAg
IC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KKyAgICBpZiAobV9k
cmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKKyAgICAKKyAg
ICBpZiAobV9jb250ZXh0KSB7CisgICAgICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExvc3RDYWxs
YmFjayhudWxscHRyKTsKKyAgICAgICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VDYWxsYmFj
ayhudWxscHRyKTsKKyAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgfQorfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCit7CisgICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9j
b250ZXh0LT5tYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAKKyAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPm1hcmtDb250ZW50c0NoYW5nZWQoKTsKKyAg
ICAKKyAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOworICAgIFJlbmRlckJveCogcmVuZGVyQm94
ID0gY2FudmFzKCktPnJlbmRlckJveCgpOworICAgIGlmIChpc0FjY2VsZXJhdGVkKCkgJiYgcmVu
ZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7CisgICAg
ICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOworICAgICAgICBjYW52YXMoKS0+Y2xlYXJD
b3BpZWRJbWFnZSgpOworICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0No
YW5nZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSkg
eworICAgICAgICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IHRydWU7CisgICAgICAgICAgICBj
YW52YXMoKS0+ZGlkRHJhdyhGbG9hdFJlY3QoRmxvYXRQb2ludCgwLCAwKSwgY2xhbXBlZENhbnZh
c1NpemUoKSkpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBpZiAoIW1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkgfHwgbV9sYXllckNsZWFyZWQK
KyAgICAgICAgfHwgbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciB8fCAobWFzayAm
JiBtX2ZyYW1lYnVmZmVyQmluZGluZykpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBjb250ZXh0QXR0cmlidXRlcyA9
IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisKKyAgICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3Nz
aWJsZSB0byBjb21iaW5lIHRoZSBjbGVhciB0aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xl
YXIuCisgICAgYm9vbCBjb21iaW5lZENsZWFyID0gbWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsK
KyAgICAKKyAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1Jf
VEVTVCk7CisgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQlVGRkVSX0JJVCkpIHsKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKAor
ICAgICAgICAgICAgbV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLAorICAgICAg
ICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFyQ29sb3JbMV0gOiAwLAorICAgICAgICAgICAg
bV9jb2xvck1hc2tbMl0gPyBtX2NsZWFyQ29sb3JbMl0gOiAwLAorICAgICAgICAgICAgbV9jb2xv
ck1hc2tbM10gPyBtX2NsZWFyQ29sb3JbM10gOiAwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9j
b250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNr
KHRydWUsIHRydWUsIHRydWUsIHRydWUpOworICAgIEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSBH
cmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICBpZiAoY29udGV4dEF0dHJp
YnV0ZXMtPmRlcHRoKCkpIHsKKyAgICAgICAgaWYgKCFjb21iaW5lZENsZWFyIHx8ICFtX2RlcHRo
TWFzayB8fCAhKG1hc2sgJiBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCkpCisg
ICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoMS4wZik7CisgICAgICAgIGNsZWFyTWFz
ayB8PSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVDsKKyAgICAgICAgbV9jb250
ZXh0LT5kZXB0aE1hc2sodHJ1ZSk7CisgICAgfQorICAgIGlmIChjb250ZXh0QXR0cmlidXRlcy0+
c3RlbmNpbCgpKSB7CisgICAgICAgIGlmIChjb21iaW5lZENsZWFyICYmIChtYXNrICYgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAgICAgICBtX2NvbnRleHQt
PmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNpbCAmIG1fc3RlbmNpbE1hc2spOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbCgwKTsKKyAgICAgICAgY2xl
YXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgICAg
IG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQs
IDB4RkZGRkZGRkYpOworICAgIH0KKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPmNsZWFyRnJhbWVidWZmZXJzKGNsZWFyTWFzayk7CisgICAgZWxzZSB7
CisgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1fY29udGV4
dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7Cisg
ICAgICAgIG1fY29udGV4dC0+Y2xlYXIoY2xlYXJNYXNrKTsKKyAgICB9CisgICAgCisgICAgcmVz
dG9yZVN0YXRlQWZ0ZXJDbGVhcigpOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAg
ICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBt
X2xheWVyQ2xlYXJlZCA9IHRydWU7CisgICAgCisgICAgcmV0dXJuIGNvbWJpbmVkQ2xlYXI7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9yZVN0YXRlQWZ0ZXJDbGVh
cigpCit7CisgICAgLy8gUmVzdG9yZSB0aGUgc3RhdGUgdGhhdCB0aGUgY29udGV4dCBzZXQuCisg
ICAgaWYgKG1fc2Npc3NvckVuYWJsZWQpCisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvciht
X2NsZWFyQ29sb3JbMF0sIG1fY2xlYXJDb2xvclsxXSwKKyAgICAgICAgbV9jbGVhckNvbG9yWzJd
LCBtX2NsZWFyQ29sb3JbM10pOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKG1fY29sb3JNYXNr
WzBdLCBtX2NvbG9yTWFza1sxXSwKKyAgICAgICAgbV9jb2xvck1hc2tbMl0sIG1fY29sb3JNYXNr
WzNdKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgobV9jbGVhckRlcHRoKTsKKyAgICBtX2Nv
bnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNpbCk7CisgICAgbV9jb250ZXh0LT5zdGVu
Y2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVCwgbV9zdGVuY2lsTWFzayk7
CisgICAgbV9jb250ZXh0LT5kZXB0aE1hc2sobV9kZXB0aE1hc2spOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQt
Pm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChjYW52YXMo
KS0+ZG9jdW1lbnQoKS5wcmludGluZygpKQorICAgICAgICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50
YXRpb25Db3B5KCk7CisgICAgCisgICAgLy8gVW50aWwgdGhlIGNhbnZhcyBpcyB3cml0dGVuIHRv
IGJ5IHRoZSBhcHBsaWNhdGlvbiwgdGhlIGNsZWFyIHRoYXQKKyAgICAvLyBoYXBwZW5lZCBhZnRl
ciBpdCB3YXMgY29tcG9zaXRlZCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUgY29tcG9zaXRvci4K
KyAgICBpZiAobV9jb250ZXh0LT5sYXllckNvbXBvc2l0ZWQoKSAmJiAhbV9hdHRyaWJ1dGVzLnBy
ZXNlcnZlRHJhd2luZ0J1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPnBhaW50Q29tcG9zaXRl
ZFJlc3VsdHNUb0NhbnZhcyhjYW52YXMoKS0+YnVmZmVyKCkpOworICAgICAgICAKKyAgICAgICAg
Y2FudmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7CisgICAgfSBlbHNlCisgICAgICAgIGNh
bnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgp
OworICAgIAorICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9sYXllckNsZWFyZWQp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjYW52YXMoKS0+Y2xlYXJDb3BpZWRJbWFnZSgp
OworICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIG1fY29u
dGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoY2FudmFzKCktPmJ1ZmZlcigpLCBt
X2RyYXdpbmdCdWZmZXIuZ2V0KCkpOworICAgIAorICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsK
KyAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RP
clplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgfQorfQorCitQYXNzUmVmUHRyPElt
YWdlRGF0YT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9JbWFnZURhdGEoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKKyAgICBS
ZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvSW1hZ2VEYXRhKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7CisgICAgCisgICAgaWYgKG1f
ZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAg
ICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIGltYWdlRGF0YTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gVGhpcyBp
cyBhbiBhcHByb3hpbWF0aW9uIGJlY2F1c2UgYXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0IGxldmVs
IHdlIGRvbid0CisgICAgLy8ga25vdyBpZiB0aGUgdW5kZXJseWluZyBGQk8gdXNlcyB0ZXh0dXJl
cyBvciByZW5kZXJidWZmZXJzLgorICAgIEdDM0RpbnQgbWF4U2l6ZSA9IHN0ZDo6bWluKG1fbWF4
VGV4dHVyZVNpemUsIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7CisgICAgLy8gTGltaXQgZHJhd2lu
ZyBidWZmZXIgc2l6ZSB0byA0ayB0byBhdm9pZCBtZW1vcnkgZXhoYXVzdGlvbi4KKyAgICBjb25z
dCBpbnQgc2l6ZVVwcGVyTGltaXQgPSA0MDk2OworICAgIG1heFNpemUgPSBzdGQ6Om1pbihtYXhT
aXplLCBzaXplVXBwZXJMaW1pdCk7CisgICAgR0MzRGludCBtYXhXaWR0aCA9IHN0ZDo6bWluKG1h
eFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzBdKTsKKyAgICBHQzNEaW50IG1heEhlaWdodCA9IHN0
ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzFdKTsKKyAgICB3aWR0aCA9IGNsYW1w
KHdpZHRoLCAxLCBtYXhXaWR0aCk7CisgICAgaGVpZ2h0ID0gY2xhbXAoaGVpZ2h0LCAxLCBtYXhI
ZWlnaHQpOworICAgIAorICAgIGlmIChtX25lZWRzVXBkYXRlKSB7CisgICAgICAgIFJlbmRlckJv
eCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOworICAgICAgICBpZiAocmVuZGVy
Qm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKQorICAgICAgICAg
ICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKKyAgICAgICAgbV9u
ZWVkc1VwZGF0ZSA9IGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvLyBXZSBkb24ndCBoYXZlIHRv
IG1hcmsgdGhlIGNhbnZhcyBhcyBkaXJ0eSwgc2luY2UgdGhlIG5ld2x5IGNyZWF0ZWQgaW1hZ2Ug
YnVmZmVyIHdpbGwgYWxzbyBzdGFydCBvZmYKKyAgICAvLyBjbGVhciAoYW5kIHRoaXMgbWF0Y2hl
cyB3aGF0IHJlc2hhcGUgd2lsbCBkbykuCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KEludFNpemUod2lkdGgsIGhlaWdodCkpOworICAg
ICAgICByZXN0b3JlU3RhdGVBZnRlckNsZWFyKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29u
dGV4dC0+cmVzaGFwZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAKKyAgICBtX2NvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8obV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKSkpOwor
ICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBvYmplY3RPclplcm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1l
YnVmZmVyQmluZGluZy5nZXQoKSkpOworfQorCitpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKK3sKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVy
KQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsKKyAgICAK
KyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRo
KCk7Cit9CisKK2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3aW5nQnVmZmVySGVp
Z2h0KCkgY29uc3QKK3sKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICByZXR1cm4g
bV9kcmF3aW5nQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCk7CisgICAgCisgICAgcmV0dXJuIG1fY29u
dGV4dC0+Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKK30KKwordW5zaWdu
ZWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRF
OgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1Ynl0ZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6CisgICAgICAgIHJldHVybiBzaXpl
b2YoR0MzRHNob3J0KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VDoKKyAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEdXNob3J0KTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpJTlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGludCk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICByZXR1cm4gc2l6ZW9m
KEdDM0R1aW50KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAg
cmV0dXJuIHNpemVvZihHQzNEZmxvYXQpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjph
Y3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICh0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwID49IG1fdGV4dHVyZVVuaXRzLnNpemUoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYWN0aXZlVGV4dHVyZSIsICJ0ZXh0
dXJlIHVuaXQgb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9h
Y3RpdmVUZXh0dXJlVW5pdCA9IHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTA7
CisgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOworICAgIAorICAgIGlmICht
X2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0QWN0aXZlVGV4dHVy
ZVVuaXQodGV4dHVyZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YXR0
YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIi
LCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgc2hhZGVy
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNoYWRl
cikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAiYXR0YWNoU2hhZGVyIiwgInNoYWRlciBhdHRhY2htZW50IGFscmVhZHkg
aGFzIHNoYWRlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YXR0
YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOwor
ICAgIHNoYWRlci0+b25BdHRhY2hlZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50
IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVXZWJHTE9iamVjdCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImJpbmRBdHRyaWJMb2Nh
dGlvbiIsIG5hbWUpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZygi
YmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNQ
cmVmaXhSZXNlcnZlZChuYW1lKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kQXR0cmliTG9jYXRpb24iLCAicmVz
ZXJ2ZWQgcHJlZml4Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGluZGV4ID49
IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJpbmRleCBv
dXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPmJp
bmRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBuYW1lKTsKK30K
KworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjaGVja09iamVjdFRvQmVCb3VuZChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiBvYmplY3QsIGJvb2wmIGRlbGV0
ZWQpCit7CisgICAgZGVsZXRlZCA9IGZhbHNlOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAob2JqZWN0KSB7CisgICAgICAg
IGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGRlbGV0ZWQgPSAhb2JqZWN0
LT5vYmplY3QoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVy
KiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7Cisg
ICAgYm9vbCBkZWxldGVkOworICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRCdWZm
ZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRlbGV0ZWQp
CisgICAgICAgIGJ1ZmZlciA9IDA7CisgICAgaWYgKGJ1ZmZlciAmJiBidWZmZXItPmdldFRhcmdl
dCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRCdWZm
ZXIiLCAiYnVmZmVycyBjYW4gbm90IGJlIHVzZWQgd2l0aCBtdWx0aXBsZSB0YXJnZXRzIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6QVJSQVlfQlVGRkVSKQorICAgICAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBidWZmZXI7Cisg
ICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUikKKyAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5zZXRFbGVtZW50QXJyYXlC
dWZmZXIoYnVmZmVyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRCdWZmZXIiLCAiaW52YWxpZCB0YXJn
ZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPmJpbmRC
dWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8oYnVmZmVyKSk7CisgICAgaWYgKGJ1ZmZlcikKKyAg
ICAgICAgYnVmZmVyLT5zZXRUYXJnZXQodGFyZ2V0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1l
YnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgYm9vbCBkZWxldGVkOworICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJp
bmRGcmFtZWJ1ZmZlciIsIGJ1ZmZlciwgZGVsZXRlZCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoZGVsZXRlZCkKKyAgICAgICAgYnVmZmVyID0gMDsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEZyYW1lYnVmZmVyIiwgImludmFs
aWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgPSBidWZmZXI7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcob2JqZWN0T3JaZXJvKG1fZnJhbWVidWZm
ZXJCaW5kaW5nLmdldCgpKSk7CisgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2Ry
YXdpbmdCdWZmZXIpIHsKKyAgICAgICAgLy8gSW5zdGVhZCBvZiBiaW5kaW5nIGZiIDAsIGJpbmQg
dGhlIGRyYXdpbmcgYnVmZmVyLgorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIodGFyZ2V0LCBvYmpl
Y3RPclplcm8oYnVmZmVyKSk7CisgICAgaWYgKGJ1ZmZlcikKKyAgICAgICAgYnVmZmVyLT5zZXRI
YXNFdmVyQmVlbkJvdW5kKCk7CisgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0
LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAoIWNoZWNr
T2JqZWN0VG9CZUJvdW5kKCJiaW5kUmVuZGVyYnVmZmVyIiwgcmVuZGVyQnVmZmVyLCBkZWxldGVk
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVkKQorICAgICAgICByZW5kZXJCdWZm
ZXIgPSAwOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IHJlbmRlckJ1ZmZlcjsK
KyAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8ocmVu
ZGVyQnVmZmVyKSk7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICAgICAgcmVuZGVyQnVmZmVy
LT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqIHRleHR1cmUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgYm9vbCBk
ZWxldGVkOworICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRUZXh0dXJlIiwgdGV4
dHVyZSwgZGVsZXRlZCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAg
ICAgdGV4dHVyZSA9IDA7CisgICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkg
JiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRUZXh0dXJl
IiwgInRleHR1cmVzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRhcmdldHMiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBHQzNEaW50IG1heExldmVsID0gMDsKKyAgICBpZiAo
dGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKSB7CisgICAgICAgIG1fdGV4
dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcgPSB0ZXh0dXJl
OworICAgICAgICBtYXhMZXZlbCA9IG1fbWF4VGV4dHVyZUxldmVsOworICAgICAgICAKKyAgICAg
ICAgaWYgKG1fZHJhd2luZ0J1ZmZlciAmJiAhbV9hY3RpdmVUZXh0dXJlVW5pdCkKKyAgICAgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZyhvYmplY3RPclplcm8odGV4
dHVyZSkpOworICAgICAgICAKKyAgICB9IGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUCkgeworICAgICAgICBtX3RleHR1cmVVbml0c1ttX2FjdGl2
ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSB0ZXh0dXJlOworICAgICAgICBt
YXhMZXZlbCA9IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbDsKKyAgICB9IGVsc2UgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmlu
ZFRleHR1cmUiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHRhcmdldCwgb2JqZWN0T3JaZXJvKHRleHR1cmUpKTsK
KyAgICBpZiAodGV4dHVyZSkKKyAgICAgICAgdGV4dHVyZS0+c2V0VGFyZ2V0KHRhcmdldCwgbWF4
TGV2ZWwpOworICAgIAorICAgIC8vIE5vdGU6IHByZXZpb3VzbHkgd2UgdXNlZCB0byBhdXRvbWF0
aWNhbGx5IHNldCB0aGUgVEVYVFVSRV9XUkFQX1IKKyAgICAvLyByZXBlYXQgbW9kZSB0byBDTEFN
UF9UT19FREdFIGZvciBjdWJlIG1hcCB0ZXh0dXJlcywgYmVjYXVzZSBPcGVuR0wKKyAgICAvLyBF
UyAyLjAgZG9lc24ndCBleHBvc2UgdGhpcyBmbGFnIChhIGJ1ZyBpbiB0aGUgc3BlY2lmaWNhdGlv
bikgYW5kCisgICAgLy8gb3RoZXJ3aXNlIHRoZSBhcHBsaWNhdGlvbiBoYXMgbm8gY29udHJvbCBv
dmVyIHRoZSBzZWFtcyBpbiB0aGlzCisgICAgLy8gZGltZW5zaW9uLiBIb3dldmVyLCBpdCBhcHBl
YXJzIHRoYXQgc3VwcG9ydGluZyB0aGlzIHByb3Blcmx5IG9uIGFsbAorICAgIC8vIHBsYXRmb3Jt
cyBpcyBmYWlybHkgaW52b2x2ZWQgKHdpbGwgcmVxdWlyZSBhIEhhc2hNYXAgZnJvbSB0ZXh0dXJl
IElECisgICAgLy8gaW4gYWxsIHBvcnRzKSwgYW5kIHdlIGhhdmUgbm90IGhhZCBhbnkgY29tcGxh
aW50cywgc28gdGhlIGxvZ2ljIGhhcworICAgIC8vIGJlZW4gcmVtb3ZlZC4KK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0Rm
bG9hdCBncmVlbiwgR0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSkKK3sKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0
LT5ibGVuZENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJi
bGVuZEVxdWF0aW9uIiwgbW9kZSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmJs
ZW5kRXF1YXRpb24obW9kZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBo
YSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5k
RXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0
aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZUFscGhhKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
Y29udGV4dC0+YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisK
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEZ1bmMoR0MzRGVudW0gc2Zh
Y3RvciwgR0MzRGVudW0gZGZhY3RvcikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoImJsZW5kRnVuYyIsIHNmYWN0b3IsIGRm
YWN0b3IpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoc2ZhY3Rv
ciwgZGZhY3Rvcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmxlbmRG
dW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNy
Y0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSkKK3sKKyAgICAvLyBOb3RlOiBBbHBoYSBkb2VzIG5v
dCBoYXZlIHRoZSBzYW1lIHJlc3RyaWN0aW9ucyBhcyBSR0IuCisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKCJibGVuZEZ1bmMiLCBz
cmNSR0IsIGRzdFJHQikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmJsZW5kRnVu
Y1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBs
b25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRh
dGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7CisgICAgaWYgKCFidWZm
ZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoc2l6ZSA8IDApIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRh
IiwgInNpemUgPCAwIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFzaXplKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiYnVmZmVyRGF0YSIsICJzaXplID09IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAg
ICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShzdGF0aWNfY2FzdDxHQzNEc2l6
ZWlwdHI+KHNpemUpKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgbV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBtX2NvbnRleHQtPmJ1
ZmZlckRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpLCB1c2FnZSk7
CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsK
KyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZm
ZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgorICAgICAgICBi
dWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVm
ZmVyKiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBh
cmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKKyAgICBpZiAoIWJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuOworICAgIGlmICghZGF0YSkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAibm8g
ZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghaXNFcnJvckdlbmVyYXRl
ZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lh
dGVCdWZmZXJEYXRhKGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZm
ZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBt
X2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4
dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+ZGF0YSgpLCB1
c2FnZSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0
KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRo
ZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgorICAg
ICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKKyAgICB9Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFy
cmF5QnVmZmVyVmlldyogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1
ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7CisgICAgaWYg
KCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJE
YXRhIiwgIm5vIGRhdGEiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlzRXJy
b3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZl
ci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImlu
dmFsaWQgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAg
ICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEt
PmJhc2VBZGRyZXNzKCksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9T
eW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlv
biBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhp
bmtzIGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOwor
ICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdWJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBi
dWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFy
Z2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIGlmICghYnVmZmVyKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRh
IiwgIm9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWRhdGEp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0
YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZm
ZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRo
ZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YSh0YXJnZXQsIHN0
YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+
ZGF0YSgpKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxp
c3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyU3ViRGF0YSBmdW5jdGlvbiBmYWlsZWQuIFRl
bGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRvZXMu
CisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOworICAgIH0KK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRh
cmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0g
dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyU3ViRGF0YSIsIHRhcmdldCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChvZmZzZXQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0YSIsICJvZmZz
ZXQgPCAwIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFkYXRhKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2Vz
KCkpIHsKKyAgICAgICAgaWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlclN1YkRhdGEoc3RhdGlj
X2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyU3ViRGF0
YSIsICJvZmZzZXQgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QoKTsKKyAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2Fz
dDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRy
ZXNzKCkpOworICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlz
dCgpKSB7CisgICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVs
bCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4K
KyAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCitH
QzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQor
ICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX1VOU1VQUE9SVEVE
OworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2ZyYW1l
YnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQ09NUExFVEU7CisgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1l
YnVmZmVyIGluY29tcGxldGUiOworICAgIEdDM0RlbnVtIHJlc3VsdCA9IG1fZnJhbWVidWZmZXJC
aW5kaW5nLT5jaGVja1N0YXR1cygmcmVhc29uKTsKKyAgICBpZiAocmVzdWx0ICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgeworICAgICAgICBwcmludEdMV2Fybmlu
Z1RvQ29uc29sZSgiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyIsIHJlYXNvbik7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIHJlc3VsdCA9IG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyh0YXJnZXQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCit7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChtYXNr
ICYgfihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVS
X0JJVCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJjbGVhciIsICJpbnZhbGlkIG1hc2siKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7
CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24p
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNsZWFyIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoIWNsZWFySWZDb21wb3NpdGVkKG1hc2spKQorICAgICAgICBtX2Nv
bnRleHQtPmNsZWFyKG1hc2spOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0Rm
bG9hdCBnLCBHQzNEZmxvYXQgYiwgR0MzRGZsb2F0IGEpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChzdGQ6OmlzbmFuKHIpKQor
ICAgICAgICByID0gMDsKKyAgICBpZiAoc3RkOjppc25hbihnKSkKKyAgICAgICAgZyA9IDA7Cisg
ICAgaWYgKHN0ZDo6aXNuYW4oYikpCisgICAgICAgIGIgPSAwOworICAgIGlmIChzdGQ6OmlzbmFu
KGEpKQorICAgICAgICBhID0gMTsKKyAgICBtX2NsZWFyQ29sb3JbMF0gPSByOworICAgIG1fY2xl
YXJDb2xvclsxXSA9IGc7CisgICAgbV9jbGVhckNvbG9yWzJdID0gYjsKKyAgICBtX2NsZWFyQ29s
b3JbM10gPSBhOworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhckRlcHRoKEdDM0RmbG9hdCBkZXB0
aCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgbV9jbGVhckRlcHRoID0gZGVwdGg7CisgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKGRl
cHRoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhclN0ZW5jaWwo
R0MzRGludCBzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NsZWFyU3RlbmNpbCA9IHM7CisgICAgbV9jb250ZXh0LT5jbGVhclN0
ZW5jaWwocyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29sb3JNYXNr
KEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdD
M0Rib29sZWFuIGFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2NvbG9yTWFza1swXSA9IHJlZDsKKyAgICBtX2NvbG9yTWFz
a1sxXSA9IGdyZWVuOworICAgIG1fY29sb3JNYXNrWzJdID0gYmx1ZTsKKyAgICBtX2NvbG9yTWFz
a1szXSA9IGFscGhhOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjb21waWxlU2hh
ZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdCgiY29tcGlsZVNoYWRlciIsIHNoYWRlcikpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2NvbnRleHQtPmNvbXBpbGVTaGFkZXIob2JqZWN0T3JaZXJvKHNoYWRlcikpOworICAg
IEdDM0RpbnQgdmFsdWU7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8o
c2hhZGVyKSwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTVBJTEVfU1RBVFVTLCAmdmFsdWUpOworICAg
IHNoYWRlci0+c2V0VmFsaWQodmFsdWUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKKyAgICBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQoreworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
IXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdldCwgbGV2
ZWwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRU
ZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJp
bnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KGJvcmRlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBub3QgMCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RGlt
ZW5zaW9ucygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVp
Z2h0LCBpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRl
Q29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdpZHRoLCBoZWln
aHQsIGludGVybmFsZm9ybWF0LCBkYXRhKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFdl
YkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29tcHJlc3NlZFRleElt
YWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKSB7CisgICAgICAgIGlmIChsZXZlbCAmJiBXZWJH
TFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb21wcmVzc2VkVGV4
SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+Y29tcHJlc3NlZFRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgIGJvcmRlciwg
ZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKKyAgICBpZiAobV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUg
Y29tcHJlc3NlZFRleEltYWdlMkQgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1
cmUgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGZvciB0aGlzIGxldmVsLgorICAgICAgICB0ZXgt
Pm1hcmtJbnZhbGlkKHRhcmdldCwgbGV2ZWwpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CisgICAgdGV4
LT5zZXRDb21wcmVzc2VkKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRh
cmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNz
ZWRUZXhGb3JtYXQoZm9ybWF0KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52
YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRl
Q29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgZGF0YSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBXZWJHTFRl
eHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvbXByZXNzZWRUZXhTdWJJbWFn
ZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChmb3JtYXQgIT0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVs
KSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJmb3JtYXQgZG9lcyBub3Qg
bWF0Y2ggdGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoImNvbXByZXNzZWRUZXhT
dWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0ZXgpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgZ3JhcGhpY3NDb250
ZXh0M0QoKS0+Y29tcHJlc3NlZFRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwKKyAgICAgICAgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBkYXRhLT5ieXRlTGVuZ3Ro
KCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOworICAgIHRleC0+c2V0Q29tcHJlc3NlZCgpOworfQor
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU2V0dGFibGVUZXhGb3Jt
YXQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgaWYg
KEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUZvcm1hdChmb3JtYXQpICYgKEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfQlVGRkVSX0JJVCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgY2FuIG5vdCBi
ZSBzZXQsIG9ubHkgcmVuZGVyZWQgdG8iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpj
b3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJh
bWV0ZXJzKCJjb3B5VGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGludGVybmFsZm9ybWF0LCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoImNvcHlUZXhJbWFnZTJEIiwgaW50ZXJuYWxm
b3JtYXQpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0
ZVRleHR1cmVCaW5kaW5nKCJjb3B5VGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgaWYg
KCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzVGV4SW50ZXJuYWxGb3JtYXRDb2xv
ckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoaW50ZXJuYWxmb3JtYXQsIGdldEJvdW5kRnJhbWVidWZm
ZXJDb2xvckZvcm1hdCgpKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjb3B5VGV4SW1hZ2UyRCIsICJmcmFtZWJ1ZmZl
ciBpcyBpbmNvbXBhdGlibGUgZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpICYmIGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9U
KHdpZHRoLCBoZWlnaHQpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleEltYWdlMkQiLCAibGV2ZWwgPiAwIG5vdCBw
b3dlciBvZiAyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgY2hhciogcmVh
c29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNE
KCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJj
b3B5VGV4SW1hZ2UyRCIsIHJlYXNvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2xl
YXJJZkNvbXBvc2l0ZWQoKTsKKyAgICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkgeworICAgICAgICBT
Y29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1f
ZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVy
IGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgp
KTsKKyAgICAgICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7CisgICAgICAgIEdDM0RzaXpl
aSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CisgICAgICAgIGlmIChjbGlwMkQoeCwgeSwg
d2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVi
dWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlw
cGVkSGVpZ2h0KSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VT
YWZlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
CisgICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCBtX3VucGFja0FsaWdubWVudCk7CisgICAgICAgICAgICBpZiAoY2xpcHBlZFdp
ZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgeworICAgICAgICAgICAgICAgIG1fY29udGV4
dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgY2xpcHBlZFggLSB4LCBjbGlwcGVk
WSAtIHksCisgICAgICAgICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdp
ZHRoLCBjbGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworICAgIH0KKyAgICAvLyBGSVhN
RTogaWYgdGhlIGZyYW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cg
c2hvdWxkIGJlIGV4ZWN1dGVkLgorICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29weVRleFN1
YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29weVRleFN1
YkltYWdlMkQiLCB0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4
dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29weVRleFN1YkltYWdlMkQiLCB0
YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2
YWxpZGF0ZVNpemUoImNvcHlUZXhTdWJJbWFnZTJEIiwgeG9mZnNldCwgeW9mZnNldCkgfHwgIXZh
bGlkYXRlU2l6ZSgiY29weVRleFN1YkltYWdlMkQiLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAg
cmV0dXJuOworICAgIC8vIEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNo
ZWNrIGlmIG92ZXJmbG93IGhhcHBlbnMgZmlyc3QuCisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA8
IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJi
YWQgZGltZW5zaW9ucyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICh4b2Zmc2V0
ICsgd2lkdGggPiB0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2ZWwpIHx8IHlvZmZzZXQgKyBoZWln
aHQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFn
ZTJEIiwgInJlY3RhbmdsZSBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCA9IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFy
Z2V0LCBsZXZlbCk7CisgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4
U3ViSW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChpbnRlcm5hbGZv
cm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvcHlU
ZXhTdWJJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29tcGF0aWJsZSBmb3JtYXQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZm
ZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1l
YnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VT
YWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhTdWJJbWFnZTJE
IiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjbGVhcklmQ29tcG9zaXRl
ZCgpOworICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7CisgICAgICAgIFNjb3BlZERyYXdpbmdC
dWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJp
bmRpbmcuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOworICAgICAgICBHQzNE
c2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OworICAgICAgICBpZiAoY2xpcDJEKHgs
IHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZy
YW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAm
Y2xpcHBlZEhlaWdodCkpIHsKKyAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCA9IHRleC0+Z2V0
SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCk7CisgICAgICAgICAgICBHQzNEZW51bSB0eXBl
ID0gdGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpOworICAgICAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPHVuc2lnbmVkIGNoYXJbXT4gemVybzsKKyAgICAgICAgICAgIGlmICh3aWR0aCAmJiBoZWln
aHQpIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaXplOworICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGVycm9yID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQs
IHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgMCk7CisgICAg
ICAgICAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewor
ICAgICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgImNvcHlUZXhTdWJJ
bWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgemVybyA9IHN0ZDo6bWFrZV91bmlx
dWU8dW5zaWduZWQgY2hhcltdPihzaXplKTsKKyAgICAgICAgICAgICAgICBpZiAoIXplcm8pIHsK
KyAgICAgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgbWVtc2V0KHplcm8uZ2V0KCksIDAsIHNpemUpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgemVyby5nZXQoKSk7CisgICAgICAg
ICAgICBpZiAoY2xpcHBlZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgeworICAgICAg
ICAgICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZl
ci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICAgICAgICAgIG1f
Y29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCArIGNsaXBw
ZWRYIC0geCwgeW9mZnNldCArIGNsaXBwZWRZIC0geSwKKyAgICAgICAgICAgICAgICAgICAgY2xp
cHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOworICAgICAgICAg
ICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJp
bmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5n
ZXQoKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9
CisgICAgfQorfQorCitQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpjcmVhdGVCdWZmZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbyA9
IFdlYkdMQnVmZmVyOjpjcmVhdGUodGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkp
OworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQ
dHI8V2ViR0xGcmFtZWJ1ZmZlcj4gbyA9IFdlYkdMRnJhbWVidWZmZXI6OmNyZWF0ZSh0aGlzKTsK
KyAgICBhZGRDb250ZXh0T2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNz
UmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlVGV4
dHVyZSgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbyA9IFdlYkdMVGV4dHVyZTo6
Y3JlYXRlKHRoaXMpOworICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4g
bzsKK30KKworUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG8gPSBX
ZWJHTFByb2dyYW06OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7
CisgICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVm
UHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBvID0gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0ZSh0aGlz
KTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisKK1Bh
c3NSZWZQdHI8V2ViR0xTaGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVNo
YWRlcihHQzNEZW51bSB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFS
QU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hB
REVSICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Y3JlYXRlU2hhZGVyIiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorICAgIAorICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hh
ZGVyOjpjcmVhdGUodGhpcywgdHlwZSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwor
ICAgIHJldHVybiBvOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmN1bGxG
YWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+Y3VsbEZhY2UobW9kZSk7Cit9CisKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBv
YmplY3QpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhb2JqZWN0KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRH
cm91cCgpLCB0aGlzKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZWxldGUiLCAib2JqZWN0IGRvZXMgbm90IGJlbG9u
ZyB0byB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBp
ZiAob2JqZWN0LT5vYmplY3QoKSkgeworICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gY29u
dGV4dCBoZXJlIGJlY2F1c2Ugd2Ugd2FudAorICAgICAgICAvLyB0aGluZ3MgaW4gdGhpcyBjb250
ZXh0IHVuYm91bmQuCisgICAgICAgIG9iamVjdC0+ZGVsZXRlT2JqZWN0KGdyYXBoaWNzQ29udGV4
dDNEKCkpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpkZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBp
ZiAoIWRlbGV0ZU9iamVjdChidWZmZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fYm91
bmRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCisgICAgICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7
CisgICAgCisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT51bmJpbmRCdWZmZXIoYnVmZmVy
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVGcmFtZWJ1ZmZl
cihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVj
dChmcmFtZWJ1ZmZlcikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0g
bV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKKyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAw
OworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZygwKTsKKyAgICAgICAgICAgIC8vIEhhdmUgdG8g
Y2FsbCBiaW5kRnJhbWVidWZmZXIgaGVyZSB0byBiaW5kIGJhY2sgdG8gaW50ZXJuYWwgZmJvLgor
ICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCAwKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6ZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgZGVsZXRlT2Jq
ZWN0KHByb2dyYW0pOworICAgIC8vIFdlIGRvbid0IHJlc2V0IG1fY3VycmVudFByb2dyYW0gdG8g
MCBoZXJlIGJlY2F1c2UgdGhlIGRlbGV0aW9uIG9mIHRoZQorICAgIC8vIGN1cnJlbnQgcHJvZ3Jh
bSBpcyBkZWxheWVkLgorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0
ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIGlm
ICghZGVsZXRlT2JqZWN0KHJlbmRlcmJ1ZmZlcikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
cmVuZGVyYnVmZmVyID09IG1fcmVuZGVyYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9yZW5kZXJi
dWZmZXJCaW5kaW5nID0gMDsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAg
IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZm
ZXIocmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpk
ZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBkZWxldGVPYmplY3Qoc2hh
ZGVyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVUZXh0dXJl
KFdlYkdMVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdCh0ZXh0dXJl
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJl
VW5pdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5p
dHNbaV0udGV4dHVyZTJEQmluZGluZykKKyAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRl
eHR1cmUyREJpbmRpbmcgPSBudWxscHRyOworICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1
cmVVbml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpCisgICAgICAgICAgICBtX3RleHR1cmVV
bml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAo
bV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1v
dmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIodGV4dHVyZSk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29u
dGV4dC0+ZGVwdGhGdW5jKGZ1bmMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2RlcHRoTWFzayA9IGZsYWc7Cisg
ICAgbV9jb250ZXh0LT5kZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZGVwdGhSYW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoek5lYXIgPiB6RmFyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFy
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpO
ZWFyLCB6RmFyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXRhY2hT
aGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHBy
b2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBzaGFkZXIpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKCFwcm9ncmFtLT5kZXRhY2hTaGFkZXIoc2hhZGVyKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJkZXRhY2hTaGFkZXIiLCAic2hhZGVyIG5vdCBhdHRhY2hlZCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOworICAgIHNoYWRlci0+b25EZXRhY2hl
ZChncmFwaGljc0NvbnRleHQzRCgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkaXNhYmxlKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoImRpc2FibGUiLCBjYXApKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7
CisgICAgICAgIG1fc3RlbmNpbEVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgYXBwbHlTdGVuY2ls
VGVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChjYXAgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgeworICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFs
c2U7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOworICAgIH0KKyAgICBt
X2NvbnRleHQtPmRpc2FibGUoY2FwKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRl
eEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9m
IHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisgICAgc3RhdGUuZW5hYmxl
ZCA9IGZhbHNlOworICAgIAorICAgIGlmIChpbmRleCA+IDAgfHwgaXNHTEVTMkNvbXBsaWFudCgp
KQorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9
CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVFbGVtZW50QXJyYXlT
aXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCit7
CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIAorICAgIGlmICgh
ZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYg
KG9mZnNldCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAodHlwZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7CisgICAgICAgIC8vIEZvciBhbiB1
bnNpZ25lZCBpbnQgYXJyYXksIG9mZnNldCBtdXN0IGJlIGRpdmlzaWJsZSBieSA0IGZvciBhbGln
bm1lbnQgcmVhc29ucy4KKyAgICAgICAgaWYgKG9mZnNldCAlIDQpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBv
ZmZzZXQuCisgICAgICAgIG9mZnNldCAvPSA0OworICAgICAgICAKKyAgICAgICAgR0MzRHNpemVp
cHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDQ7CisgICAgICAgIGlm
IChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X1NIT1JUKSB7CisgICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBzaG9ydCBhcnJheSwgb2Zmc2V0
IG11c3QgYmUgZGl2aXNpYmxlIGJ5IDIgZm9yIGFsaWdubWVudCByZWFzb25zLgorICAgICAgICBp
ZiAob2Zmc2V0ICUgMikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAg
ICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KKyAgICAgICAgb2Zmc2V0IC89
IDI7CisgICAgICAgIAorICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZl
ci0+Ynl0ZUxlbmd0aCgpIC8gMjsKKyAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBu
IC0gb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgeworICAgICAgICBHQzNEc2l6
ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOworICAgICAgICBpZiAo
b2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1
bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKK3sKKyAgICAvLyBQZXJmb3JtcyBjb25zZXJ2
YXRpdmUgdmFsaWRhdGlvbiBieSBjYWNoaW5nIGEgbWF4aW11bSBpbmRleCBvZgorICAgIC8vIHRo
ZSBnaXZlbiB0eXBlIHBlciBlbGVtZW50IGFycmF5IGJ1ZmZlci4gSWYgYWxsIG9mIHRoZSBib3Vu
ZAorICAgIC8vIGFycmF5IGJ1ZmZlcnMgaGF2ZSBlbm91Z2ggZWxlbWVudHMgdG8gc2F0aXNmeSB0
aGF0IG1heGltdW0KKyAgICAvLyBpbmRleCwgc2tpcHMgdGhlIGV4cGVuc2l2ZSBwZXItZHJhdy1j
YWxsIGl0ZXJhdGlvbiBpbgorICAgIC8vIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UuCisgICAg
CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIAorICAgIGlmICgh
ZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgR0Mz
RHNpemVpcHRyIG51bUVsZW1lbnRzID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7
CisgICAgLy8gVGhlIGNhc2UgY291bnQ9PTAgaXMgYWxyZWFkeSBkZWFsdCB3aXRoIGluIGRyYXdF
bGVtZW50cyBiZWZvcmUgdmFsaWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlLgorICAgIGlmICgh
bnVtRWxlbWVudHMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjb25zdCBBcnJheUJ1ZmZl
ciogYnVmZmVyID0gZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAg
ICBBU1NFUlQoYnVmZmVyKTsKKyAgICAKKyAgICBpbnQgbWF4SW5kZXggPSBlbGVtZW50QXJyYXlC
dWZmZXItPmdldENhY2hlZE1heEluZGV4KHR5cGUpOworICAgIGlmIChtYXhJbmRleCA8IDApIHsK
KyAgICAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11bSBpbmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZl
ciBmb3IgdGhlIGdpdmVuIHR5cGUgb2YgaW5kZXguCisgICAgICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOiB7CisgICAgICAg
ICAgICBjb25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihi
dWZmZXItPmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8
IG51bUVsZW1lbnRzOyBpKyspCisgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heCht
YXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDog
eworICAgICAgICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9mKEdDM0R1c2hvcnQpOworICAgICAg
ICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQq
PihidWZmZXItPmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsg
aSA8IG51bUVsZW1lbnRzOyBpKyspCisgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1h
eChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6
IHsKKyAgICAgICAgICAgIGlmICghbV9vZXNFbGVtZW50SW5kZXhVaW50KQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNE
dWludCk7CisgICAgICAgICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0
IEdDM0R1aW50Kj4oYnVmZmVyLT5kYXRhKCkpOworICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWlw
dHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQorICAgICAgICAgICAgICAgIG1heEluZGV4
ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBlbGVtZW50QXJyYXlCdWZmZXItPnNldENhY2hl
ZE1heEluZGV4KHR5cGUsIG1heEluZGV4KTsKKyAgICB9CisgICAgCisgICAgaWYgKG1heEluZGV4
ID49IDApIHsKKyAgICAgICAgLy8gVGhlIG51bWJlciBvZiByZXF1aXJlZCBlbGVtZW50cyBpcyBv
bmUgbW9yZSB0aGFuIHRoZSBtYXhpbXVtCisgICAgICAgIC8vIGluZGV4IHRoYXQgd2lsbCBiZSBh
Y2Nlc3NlZC4KKyAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IG1heEluZGV4ICsgMTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNl
KEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIHVuc2ln
bmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKQoreworICAgIEFTU0VSVChjb3VudCA+PSAwICYmIG9m
ZnNldCA+PSAwKTsKKyAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSAwOworICAgIAorICAgIFJlZlB0
cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2Jq
ZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKKyAgICAKKyAgICBpZiAoIWVsZW1lbnRBcnJh
eUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghY291bnQpIHsK
KyAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IDA7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVm
ZmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICB1bnNpZ25lZCBsb25nIHVv
ZmZzZXQgPSBvZmZzZXQ7CisgICAgdW5zaWduZWQgbG9uZyBuID0gY291bnQ7CisgICAgCisgICAg
aWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgeworICAgICAgICAv
LyBNYWtlIHVvZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCisgICAgICAgIHVvZmZzZXQgLz0gc2l6
ZW9mKEdDM0R1aW50KTsKKyAgICAgICAgY29uc3QgR0MzRHVpbnQqIHAgPSBzdGF0aWNfY2FzdDxj
b25zdCBHQzNEdWludCo+KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCkt
PmRhdGEoKSkgKyB1b2Zmc2V0OworICAgICAgICB3aGlsZSAobi0tID4gMCkgeworICAgICAgICAg
ICAgaWYgKCpwID4gbGFzdEluZGV4KQorICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOwor
ICAgICAgICAgICAgKytwOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCkgeworICAgICAgICAvLyBNYWtlIHVvZmZzZXQg
YW4gZWxlbWVudCBvZmZzZXQuCisgICAgICAgIHVvZmZzZXQgLz0gc2l6ZW9mKEdDM0R1c2hvcnQp
OworICAgICAgICBjb25zdCBHQzNEdXNob3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVz
aG9ydCo+KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCktPmRhdGEoKSkg
KyB1b2Zmc2V0OworICAgICAgICB3aGlsZSAobi0tID4gMCkgeworICAgICAgICAgICAgaWYgKCpw
ID4gbGFzdEluZGV4KQorICAgICAgICAgICAgICAgIGxhc3RJbmRleCA9ICpwOworICAgICAgICAg
ICAgKytwOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgIGNvbnN0IEdDM0R1Ynl0ZSogcCA9IHN0YXRp
Y19jYXN0PGNvbnN0IEdDM0R1Ynl0ZSo+KGVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5
QnVmZmVyKCktPmRhdGEoKSkgKyB1b2Zmc2V0OworICAgICAgICB3aGlsZSAobi0tID4gMCkgewor
ICAgICAgICAgICAgaWYgKCpwID4gbGFzdEluZGV4KQorICAgICAgICAgICAgICAgIGxhc3RJbmRl
eCA9ICpwOworICAgICAgICAgICAgKytwOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8v
IFRoZW4gc2V0IHRoZSBsYXN0IGluZGV4IGluIHRoZSBpbmRleCBhcnJheSBhbmQgbWFrZSBzdXJl
IGl0IGlzIHZhbGlkLgorICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSBsYXN0SW5kZXggKyAxOwor
ICAgIHJldHVybiBudW1FbGVtZW50c1JlcXVpcmVkID4gMDsKK30KKworYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVu
dENvdW50LCB1bnNpZ25lZCBwcmltaXRpdmVDb3VudCkKK3sKKyAgICBpZiAoIW1fY3VycmVudFBy
b2dyYW0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICAvLyBMb29rIGluIGVhY2gg
ZW5hYmxlZCB2ZXJ0ZXggYXR0cmliIGFuZCBjaGVjayBpZiB0aGV5J3ZlIGJlZW4gYm91bmQgdG8g
YSBidWZmZXIuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbWF4VmVydGV4QXR0cmli
czsgKytpKSB7CisgICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0
ZXhBdHRyaWJTdGF0ZShpKS52YWxpZGF0ZUJpbmRpbmcoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKGVsZW1lbnRDb3VudCA8PSAwKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICAKKyAgICAvLyBMb29rIGluIGVhY2ggY29uc3VtZWQgdmVy
dGV4IGF0dHJpYiAoYnkgdGhlIGN1cnJlbnQgcHJvZ3JhbSkuCisgICAgYm9vbCBzYXdOb25JbnN0
YW5jZWRBdHRyaWIgPSBmYWxzZTsKKyAgICBib29sIHNhd0VuYWJsZWRBdHRyaWIgPSBmYWxzZTsK
KyAgICBpbnQgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zID0gbV9jdXJyZW50UHJvZ3JhbS0+bnVt
QWN0aXZlQXR0cmliTG9jYXRpb25zKCk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BY3Rp
dmVBdHRyaWJMb2NhdGlvbnM7ICsraSkgeworICAgICAgICBpbnQgbG9jID0gbV9jdXJyZW50UHJv
Z3JhbS0+Z2V0QWN0aXZlQXR0cmliTG9jYXRpb24oaSk7CisgICAgICAgIGlmIChsb2MgPj0gMCAm
JiBsb2MgPCBzdGF0aWNfY2FzdDxpbnQ+KG1fbWF4VmVydGV4QXR0cmlicykpIHsKKyAgICAgICAg
ICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBz
dGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUobG9j
KTsKKyAgICAgICAgICAgIGlmIChzdGF0ZS5lbmFibGVkKSB7CisgICAgICAgICAgICAgICAgc2F3
RW5hYmxlZEF0dHJpYiA9IHRydWU7CisgICAgICAgICAgICAgICAgLy8gQXZvaWQgb2ZmLWJ5LW9u
ZSBlcnJvcnMgaW4gbnVtRWxlbWVudHMgY29tcHV0YXRpb24uCisgICAgICAgICAgICAgICAgLy8g
Rm9yIHRoZSBsYXN0IGVsZW1lbnQsIHdlIHdpbGwgb25seSB0b3VjaCB0aGUgZGF0YSBmb3IgdGhl
CisgICAgICAgICAgICAgICAgLy8gZWxlbWVudCBhbmQgbm90aGluZyBiZXlvbmQgaXQuCisgICAg
ICAgICAgICAgICAgaW50IGJ5dGVzUmVtYWluaW5nID0gc3RhdGljX2Nhc3Q8aW50PihzdGF0ZS5i
dWZmZXJCaW5kaW5nLT5ieXRlTGVuZ3RoKCkgLSBzdGF0ZS5vZmZzZXQpOworICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMDsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3Rh
dGUuc3RyaWRlID4gMCk7CisgICAgICAgICAgICAgICAgaWYgKGJ5dGVzUmVtYWluaW5nID49IHN0
YXRlLmJ5dGVzUGVyRWxlbWVudCkKKyAgICAgICAgICAgICAgICAgICAgbnVtRWxlbWVudHMgPSAx
ICsgKGJ5dGVzUmVtYWluaW5nIC0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KSAvIHN0YXRlLnN0cmlk
ZTsKKyAgICAgICAgICAgICAgICBpZiAoIXN0YXRlLmRpdmlzb3IpCisgICAgICAgICAgICAgICAg
ICAgIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IHRydWU7CisgICAgICAgICAgICAgICAgaWYgKCgh
c3RhdGUuZGl2aXNvciAmJiBlbGVtZW50Q291bnQgPiBudW1FbGVtZW50cykgfHwgKHN0YXRlLmRp
dmlzb3IgJiYgcHJpbWl0aXZlQ291bnQgPiBudW1FbGVtZW50cykpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBpZiAoIXNhd05vbkluc3RhbmNlZEF0dHJpYiAmJiBzYXdFbmFibGVkQXR0cmliKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVXZWJHTE9iamVjdChjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKCFvYmplY3QgfHwg
IW9iamVjdC0+b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIG9iamVjdCBvciBvYmpl
Y3QgZGVsZXRlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghb2Jq
ZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJvYmplY3QgZG9lcyBub3QgYmVsb25nIHRvIHRoaXMgY29udGV4dCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0Mz
RHNpemVpIHByaW1jb3VudCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGZ1bmN0aW9uTmFt
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoZmlyc3QgPCAwIHx8IGNv
dW50IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZmlyc3Qgb3IgY291bnQgPCAwIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKCFjb3VudCkgeworICAgICAg
ICBtYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBpZiAocHJpbWNvdW50IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50
IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmICghaXNF
cnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVuc3Vy
ZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCisgICAgICAgIENoZWNrZWQ8R0MzRGlu
dCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7CisgICAgICAgIENoZWNrZWQ8
R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgICAgIENo
ZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3Qg
KyBjaGVja2VkQ291bnQ7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+
IGNoZWNrZWRQcmltQ291bnQocHJpbWNvdW50KTsKKyAgICAgICAgaWYgKGNoZWNrZWRTdW0uaGFz
T3ZlcmZsb3dlZCgpIHx8IGNoZWNrZWRQcmltQ291bnQuaGFzT3ZlcmZsb3dlZCgpIHx8ICF2YWxp
ZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwgY2hlY2tlZFByaW1D
b3VudC51bnNhZmVHZXQoKSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0
byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdmFsaWRhdGVWZXJ0ZXhB
dHRyaWJ1dGVzKDApKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dHJpYnMgbm90IHNl
dHVwIGNvcnJlY3RseSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBs
ZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5k
aW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJl
YXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsIHJlYXNvbik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBH
QzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgCisgICAgaWYgKCF2YWxpZGF0ZURyYXdBcnJheXMoImRy
YXdBcnJheXMiLCBtb2RlLCBmaXJzdCwgY291bnQsIDApKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKyAgICAKKyAgICBib29sIHZlcnRleEF0dHJpYjBT
aW11bGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICAgICAg
dmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChmaXJzdCArIGNv
dW50IC0gMSk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1Rl
eHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXMiLCB0cnVlKTsKKyAgICBtX2NvbnRleHQtPmRy
YXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkK
KyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOwor
ICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZhbGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zm
c2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSB8fCAhdmFsaWRhdGVEcmF3TW9kZShmdW5jdGlvbk5hbWUsIG1vZGUpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhm
dW5jdGlvbk5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICBpZiAobV9v
ZXNFbGVtZW50SW5kZXhVaW50KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgCisgICAgaWYgKGNvdW50IDwgMCB8fCBvZmZzZXQgPCAwKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJjb3VudCBvciBvZmZzZXQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgCisgICAgaWYgKCFjb3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJubyBFTEVNRU5UX0FSUkFZX0JVRkZFUiBib3VuZCIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZC
b3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVu
ZGVyaW5nIHN0YXRlCisgICAgICAgIGlmICghdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKGNvdW50
LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKSkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJyZXF1ZXN0IG91dCBvZiBib3VuZHMgZm9yIGN1cnJlbnQgRUxFTUVOVF9B
UlJBWV9CVUZGRVIiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoIWNvdW50KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAo
IXZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZh
bGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cykpIHsKKyAgICAgICAgICAgIGlmICgh
dmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGlu
dHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMo
bnVtRWxlbWVudHMpKSB7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRv
IGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOworICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlm
ICghdmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKDApKSB7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJm
cmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
IW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNS
ZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsIHJlYXNvbik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0VsZW1l
bnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBs
b25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsK
KyAgICAKKyAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7CisgICAgaWYgKCF2YWxpZGF0ZURy
YXdFbGVtZW50cygiZHJhd0VsZW1lbnRzIiwgbW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwgbnVt
RWxlbWVudHMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQo
KTsKKyAgICAKKyAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKKyAgICBp
ZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQorICAg
ICAgICAgICAgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nh
c3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpOworICAgICAgICB2ZXJ0ZXhBdHRy
aWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKKyAgICB9
CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21w
bGV0ZW5lc3MoImRyYXdFbGVtZW50cyIsIHRydWUpOworICAgIG1fY29udGV4dC0+ZHJhd0VsZW1l
bnRzKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsK
KyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQor
ICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAg
IGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVu
ZXNzKCJkcmF3RWxlbWVudHMiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxp
dHkoImVuYWJsZSIsIGNhcCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoY2FwID09IEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpIHsKKyAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCA9
IHRydWU7CisgICAgICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsKKyAg
ICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IHRydWU7CisgICAgICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNzb3JFbmFibGVkKG1fc2Np
c3NvckVuYWJsZWQpOworICAgIH0KKyAgICBtX2NvbnRleHQtPmVuYWJsZShjYXApOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdD
M0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZW5hYmxlVmVydGV4QXR0
cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUm
IHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShp
bmRleCk7CisgICAgc3RhdGUuZW5hYmxlZCA9IHRydWU7CisgICAgCisgICAgbV9jb250ZXh0LT5l
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZmluaXNoKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5maW5pc2goKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmbHVzaCgpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+Zmx1c2goKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRl
cmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChyZW5kZXJidWZmZXJ0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoYnVmZmVyICYmICFidWZmZXItPnZhbGlkYXRl
KGNvbnRleHRHcm91cCgpLCB0aGlzKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
ciIsICJubyBidWZmZXIgb3IgYnVmZmVyIG5vdCBmcm9tIHRoaXMgY29udGV4dCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIC8vIERvbid0IGFsbG93IHRoZSBkZWZhdWx0IGZyYW1lYnVm
ZmVyIHRvIGJlIG11dGF0ZWQ7IGFsbCBjdXJyZW50CisgICAgLy8gaW1wbGVtZW50YXRpb25zIHVz
ZSBhbiBGQk8gaW50ZXJuYWxseSBpbiBwbGFjZSBvZiB0aGUgZGVmYXVsdAorICAgIC8vIEZCTy4K
KyAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b2JqZWN0KCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gZnJhbWVi
dWZmZXIgYm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBQbGF0Zm9ybTNET2Jq
ZWN0IGJ1ZmZlck9iamVjdCA9IG9iamVjdE9yWmVybyhidWZmZXIpOworICAgIHN3aXRjaCAoYXR0
YWNobWVudCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRU
QUNITUVOVDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJn
ZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCByZW5kZXJidWZmZXJ0YXJn
ZXQsIGJ1ZmZlck9iamVjdCk7CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJi
dWZmZXIodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCByZW5k
ZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlck9iamVjdCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBh
dHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlck9iamVjdCk7CisgICAgfQorICAg
IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5zZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihh
dHRhY2htZW50LCBidWZmZXIpOworICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgV2ViR0xUZXh0
dXJlKiB0ZXh0dXJlLCBHQzNEaW50IGxldmVsLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCB0
YXJnZXQsIGF0dGFjaG1lbnQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGxldmVsKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiZnJhbWVidWZmZXJUZXh0dXJlMkQiLCAibGV2ZWwgbm90IDAiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAodGV4dHVyZSAmJiAhdGV4dHVyZS0+dmFsaWRhdGUoY29udGV4dEdy
b3VwKCksIHRoaXMpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIHRleHR1
cmUgb3IgdGV4dHVyZSBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBt
dXRhdGVkOyBhbGwgY3VycmVudAorICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGlu
dGVybmFsbHkgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQKKyAgICAvLyBGQk8uCisgICAgaWYgKCFt
X2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlT2Jq
ZWN0ID0gb2JqZWN0T3JaZXJvKHRleHR1cmUpOworICAgIHN3aXRjaCAoYXR0YWNobWVudCkgewor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAg
ICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVs
KTsKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVj
dCwgbGV2ZWwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9BVFRBQ0hNRU5UOgorICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJE
KHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNI
TUVOVDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0
dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJE
KHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7Cisg
ICAgfQorICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5zZXRBdHRhY2htZW50Rm9yQm91bmRGcmFt
ZWJ1ZmZlcihhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKKyAgICBhcHBs
eVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZnJv
bnRGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+ZnJvbnRGYWNlKG1vZGUpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdlbmVyYXRlTWlwbWFwKEdDM0RlbnVt
IHRhcmdldCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJn
ZW5lcmF0ZU1pcG1hcCIsIHRhcmdldCwgZmFsc2UpOworICAgIGlmICghdGV4KQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCF0ZXgtPmNhbkdlbmVyYXRlTWlwbWFwcygpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdl
bmVyYXRlTWlwbWFwIiwgImxldmVsIDAgbm90IHBvd2VyIG9mIDIgb3Igbm90IGFsbCB0aGUgc2Ft
ZSBzaXplIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM5MTYuIENvbXByZXNzZWQgdGV4dHVy
ZXMgc2hvdWxkIGJlIGFsbG93ZWQgaW4gV2ViR0wgMjoKKyAgICBpZiAodGV4LT5pc0NvbXByZXNz
ZWQoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIsICJ0cnlpbmcgdG8gZ2VuZXJhdGUgbWlw
bWFwcyBmcm9tIGNvbXByZXNzZWQgdGV4dHVyZSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgiZ2VuZXJhdGVNaXBtYXAiLCB0ZXgt
PmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgMCkpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgLy8gZ2VuZXJhdGVNaXBtYXAgd29uJ3Qgd29yayBwcm9wZXJseSBpZiBtaW5GaWx0ZXIgaXMg
bm90IE5FQVJFU1RfTUlQTUFQX0xJTkVBUgorICAgIC8vIG9uIE1hYy4gUmVtb3ZlIHRoZSBoYWNr
IG9uY2UgdGhpcyBkcml2ZXIgYnVnIGlzIGZpeGVkLgorI2lmIE9TKERBUldJTikKKyAgICBib29s
IG5lZWRUb1Jlc2V0TWluRmlsdGVyID0gZmFsc2U7CisgICAgaWYgKHRleC0+Z2V0TWluRmlsdGVy
KCkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUikgeworICAgICAg
ICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFS
KTsKKyAgICAgICAgbmVlZFRvUmVzZXRNaW5GaWx0ZXIgPSB0cnVlOworICAgIH0KKyNlbmRpZgor
ICAgIG1fY29udGV4dC0+Z2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKKyNpZiBPUyhEQVJXSU4pCisg
ICAgaWYgKG5lZWRUb1Jlc2V0TWluRmlsdGVyKQorICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCB0ZXgt
PmdldE1pbkZpbHRlcigpKTsKKyNlbmRpZgorICAgIHRleC0+Z2VuZXJhdGVNaXBtYXBMZXZlbElu
Zm8oKTsKK30KKworUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50
IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdl
dEFjdGl2ZUF0dHJpYiIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBB
Y3RpdmVJbmZvIGluZm87CisgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZUF0dHJpYihvYmpl
Y3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBpbmZvKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgCisgICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6ICVz
IiwgaW5kZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAKKyAgICByZXR1cm4gV2Vi
R0xBY3RpdmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGluZm8uc2l6ZSk7Cit9
CisKK1Bhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QWN0aXZl
VW5pZm9ybSIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gMDsKKyAgICBBY3RpdmVJbmZvIGlu
Zm87CisgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBpbmRleCwgaW5mbykpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICgh
aXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIGlmIChpbmZvLnNpemUgPiAxICYmICFpbmZv
Lm5hbWUuZW5kc1dpdGgoIlswXSIpKQorICAgICAgICAgICAgaW5mby5uYW1lLmFwcGVuZCgiWzBd
Iik7CisgICAgfQorICAgIAorICAgIExPRyhXZWJHTCwgIlJldHVybmluZyBhY3RpdmUgdW5pZm9y
bSAlZDogJXMiLCBpbmRleCwgaW5mby5uYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIAorICAgIHJl
dHVybiBXZWJHTEFjdGl2ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5z
aXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBdHRhY2hlZFNo
YWRlcnMoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4m
IHNoYWRlck9iamVjdHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgc2hhZGVyT2JqZWN0cy5jbGVhcigpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEF0dGFjaGVkU2hhZGVycyIsIHBy
b2dyYW0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgY29uc3QgR0MzRGVudW0g
c2hhZGVyVHlwZVtdID0geworICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURF
UiwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUgorICAgIH07Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihzaGFkZXJUeXBlKSAvIHNpemVvZihH
QzNEZW51bSk7ICsraSkgeworICAgICAgICBXZWJHTFNoYWRlciogc2hhZGVyID0gcHJvZ3JhbS0+
Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtpXSk7CisgICAgICAgIGlmIChzaGFkZXIpCisg
ICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFkZXIpOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRBdHRy
aWJMb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0
KCJnZXRBdHRyaWJMb2NhdGlvbiIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gLTE7CisgICAg
aWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQor
ICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiZ2V0QXR0cmliTG9j
YXRpb24iLCBuYW1lKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChpc1ByZWZpeFJlc2Vy
dmVkKG5hbWUpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKCFwcm9ncmFtLT5nZXRMaW5r
U3RhdHVzKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0QXR0cmliTG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlu
a2VkIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIG1fY29udGV4dC0+
Z2V0QXR0cmliTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsKK30KKworV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEJ1ZmZlclBhcmFtZXRlcihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIgJiYgdGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpF
TEVNRU5UX0FSUkFZX0JVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQg
dGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgCisg
ICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSAmJiBwbmFtZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRCdWZmZXJQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgfQorICAgIAorICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4
dC0+Z2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKKyAgICBpZiAo
cG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJVRkZFUl9TSVpFKQorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHZhbHVlKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0
PHVuc2lnbmVkPih2YWx1ZSkpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldENvbnRleHRBdHRyaWJ1dGVzKCkKK3sK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAvLyBXZSBhbHdheXMgbmVlZCB0byByZXR1cm4gYSBuZXcgV2ViR0xDb250ZXh0QXR0
cmlidXRlcyBvYmplY3QgdG8KKyAgICAvLyBwcmV2ZW50IHRoZSB1c2VyIGZyb20gbXV0YXRpbmcg
YW55IGNhY2hlZCB2ZXJzaW9uLgorICAgIAorICAgIC8vIEFsc28sIHdlIG5lZWQgdG8gZW5mb3Jj
ZSByZXF1ZXN0ZWQgdmFsdWVzIG9mICJmYWxzZSIgZm9yIGRlcHRoCisgICAgLy8gYW5kIHN0ZW5j
aWwsIHJlZ2FyZGxlc3Mgb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHVuZGVybHlpbmcKKyAgICAv
LyBHcmFwaGljc0NvbnRleHQzRCBvciBEcmF3aW5nQnVmZmVyLgorICAgIFJlZlB0cjxXZWJHTENv
bnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1dGVzID0gV2ViR0xDb250ZXh0QXR0cmlidXRlczo6Y3Jl
YXRlKG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSk7CisgICAgaWYgKCFtX2F0dHJp
YnV0ZXMuZGVwdGgpCisgICAgICAgIGF0dHJpYnV0ZXMtPnNldERlcHRoKGZhbHNlKTsKKyAgICBp
ZiAoIW1fYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICBhdHRyaWJ1dGVzLT5zZXRTdGVuY2ls
KGZhbHNlKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8vIFRoZSBEcmF3
aW5nQnVmZmVyIG9idGFpbnMgaXRzIHBhcmFtZXRlcnMgZnJvbSBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKSwKKyAgICAgICAgLy8gYnV0IGl0IG1ha2VzIGl0cyBvd24g
ZGV0ZXJtaW5hdGlvbiBvZiB3aGV0aGVyIG11bHRpc2FtcGxpbmcgaXMgc3VwcG9ydGVkLgorICAg
ICAgICBhdHRyaWJ1dGVzLT5zZXRBbnRpYWxpYXMobV9kcmF3aW5nQnVmZmVyLT5tdWx0aXNhbXBs
ZSgpKTsKKyAgICB9CisgICAgcmV0dXJuIGF0dHJpYnV0ZXMucmVsZWFzZSgpOworfQorCitHQzNE
ZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1f
aXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4
dDNEOjpOT19FUlJPUjsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOworfQorCitX
ZWJHTEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RXh0ZW5zaW9uKGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFtZSwgIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKQorICAgICAgICAmJiAobV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikgfHwg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVyX3RleHR1
cmVfbG9kIikpKSB7CisgICAgICAgIGlmICghbV9leHRTaGFkZXJUZXh0dXJlTE9EKSB7CisgICAg
ICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhU
X3NoYWRlcl90ZXh0dXJlX2xvZCIpOworICAgICAgICAgICAgbV9leHRTaGFkZXJUZXh0dXJlTE9E
ID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRTaGFkZXJUZXh0dXJlTE9EPih0aGlzKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbV9leHRTaGFkZXJUZXh0dXJlTE9ELmdldCgpOworICAgIH0KKyAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9FWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3Vw
cG9ydHMoIkdMX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKSB7CisgICAgICAgIGlm
ICghbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMiKTsKKyAgICAgICAgICAgIG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
ID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM+KHRoaXMpOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5n
ZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpKSB7CisgICAgICAgIGlmICgh
bV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7
CisgICAgICAgICAgICBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMgPSBzdGQ6Om1ha2VfdW5pcXVl
PE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfZmxvYXQiKQorICAgICAgICAmJiBtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0IikpIHsK
KyAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdCkgeworICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2Zsb2F0Iik7
CisgICAgICAgICAgICBtX29lc1RleHR1cmVGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4
dHVyZUZsb2F0Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vZXNUZXh0dXJl
RmxvYXQuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VT
X3RleHR1cmVfZmxvYXRfbGluZWFyIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSkgeworICAgICAg
ICBpZiAoIW1fb2VzVGV4dHVyZUZsb2F0TGluZWFyKSB7CisgICAgICAgICAgICBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGlu
ZWFyIik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVGbG9hdExpbmVhciA9IHN0ZDo6bWFrZV91
bmlxdWU8T0VTVGV4dHVyZUZsb2F0TGluZWFyPih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpCisgICAgICAgICYm
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFs
Zl9mbG9hdCIpKSB7CisgICAgICAgIGlmICghbV9vZXNUZXh0dXJlSGFsZkZsb2F0KSB7CisgICAg
ICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VT
X3RleHR1cmVfaGFsZl9mbG9hdCIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlSGFsZkZsb2F0
ID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNUZXh0dXJlSGFsZkZsb2F0Pih0aGlzKTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0LmdldCgpOworICAgIH0KKyAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXRfbGlu
ZWFyIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKSB7CisgICAgICAgIGlmICghbV9vZXNU
ZXh0dXJlSGFsZkZsb2F0TGluZWFyKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIi
KTsKKyAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhciA9IHN0ZDo6bWFrZV91
bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcj4odGhpcyk7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhci5nZXQoKTsKKyAgICB9CisgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpCisg
ICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3Zl
cnRleF9hcnJheV9vYmplY3QiKSkgeworICAgICAgICBpZiAoIW1fb2VzVmVydGV4QXJyYXlPYmpl
Y3QpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFi
bGVkKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpOworICAgICAgICAgICAgbV9vZXNWZXJ0
ZXhBcnJheU9iamVjdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVmVydGV4QXJyYXlPYmplY3Q+KHRo
aXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX29lc1ZlcnRleEFycmF5T2JqZWN0Lmdl
dCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU19lbGVtZW50
X2luZGV4X3VpbnQiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3Vw
cG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKSkgeworICAgICAgICBpZiAoIW1fb2Vz
RWxlbWVudEluZGV4VWludCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKTsKKyAgICAgICAg
ICAgIG1fb2VzRWxlbWVudEluZGV4VWludCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTRWxlbWVudElu
ZGV4VWludD4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2VzRWxlbWVudElu
ZGV4VWludC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJX
RUJHTF9sb3NlX2NvbnRleHQiKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xMb3NlQ29udGV4dCkK
KyAgICAgICAgICAgIG1fd2ViZ2xMb3NlQ29udGV4dCA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xM
b3NlQ29udGV4dD4odGhpcyk7CisgICAgICAgIHJldHVybiBtX3dlYmdsTG9zZUNvbnRleHQuZ2V0
KCk7CisgICAgfQorICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9XRUJH
TF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIikpCisgICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVz
c2VkVGV4dHVyZUFUQykKKyAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFUQyA9
IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQz4odGhpcyk7CisgICAg
ICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMuZ2V0KCk7CisgICAgfQorICAg
IGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQktJVF9XRUJHTF9jb21wcmVzc2VkX3Rl
eHR1cmVfcHZydGMiKSkKKyAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpz
dXBwb3J0ZWQodGhpcykpIHsKKyAgICAgICAgaWYgKCFtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQ
VlJUQykKKyAgICAgICAgICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDID0gc3RkOjpt
YWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM+KHRoaXMpOworICAgICAgICBy
ZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMuZ2V0KCk7CisgICAgfQorICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMi
KQorICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKHRoaXMp
KSB7CisgICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUzNUQykKKyAgICAgICAg
ICAgIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVTM1RDPih0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fd2ViZ2xDb21w
cmVzc2VkVGV4dHVyZVMzVEMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShuYW1lLCAiV0VCR0xfZGVwdGhfdGV4dHVyZSIpCisgICAgICAgICYmIFdlYkdMRGVwdGhUZXh0
dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkpIHsKKyAgICAgICAgaWYgKCFtX3dl
YmdsRGVwdGhUZXh0dXJlKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+ZW5zdXJlRW5hYmxlZCgiR0xfQ0hST01JVU1fZGVwdGhfdGV4dHVyZSIpOworICAgICAgICAg
ICAgbV93ZWJnbERlcHRoVGV4dHVyZSA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZXB0aFRleHR1
cmU+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3dlYmdsRGVwdGhUZXh0dXJl
LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2Ry
YXdfYnVmZmVycyIpICYmIHN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkgeworICAgICAgICBpZiAoIW1f
d2ViZ2xEcmF3QnVmZmVycykgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9kcmF3X2J1ZmZlcnMiKTsKKyAgICAgICAgICAgIG1f
d2ViZ2xEcmF3QnVmZmVycyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEcmF3QnVmZmVycz4odGhp
cyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fd2ViZ2xEcmF3QnVmZmVycy5nZXQoKTsK
KyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJBTkdMRV9pbnN0YW5jZWRf
YXJyYXlzIikgJiYgQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCh0aGlzKSkgeworICAg
ICAgICBpZiAoIW1fYW5nbGVJbnN0YW5jZWRBcnJheXMpIHsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9pbnN0YW5jZWRfYXJy
YXlzIik7CisgICAgICAgICAgICBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzID0gc3RkOjptYWtlX3Vu
aXF1ZTxBTkdMRUluc3RhbmNlZEFycmF5cz4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIG1fYW5nbGVJbnN0YW5jZWRBcnJheXMuZ2V0KCk7CisgICAgfQorICAgIGlmIChhbGxvd1By
aXZpbGVnZWRFeHRlbnNpb25zKCkpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5h
bWUsICJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIikpIHsKKyAgICAgICAgICAgIGlmICghbV93
ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQorICAgICAgICAgICAgICAgIG1fd2ViZ2xEZWJ1Z1JlbmRl
cmVySW5mbyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbz4odGhpcyk7
CisgICAgICAgICAgICByZXR1cm4gbV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvLmdldCgpOworICAg
ICAgICB9CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVidWdf
c2hhZGVycyIpCisgICAgICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3Vw
cG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIpKSB7CisgICAgICAgICAg
ICBpZiAoIW1fd2ViZ2xEZWJ1Z1NoYWRlcnMpCisgICAgICAgICAgICAgICAgbV93ZWJnbERlYnVn
U2hhZGVycyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xEZWJ1Z1NoYWRlcnM+KHRoaXMpOworICAg
ICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMuZ2V0KCk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsIHRhcmdldCwgYXR0YWNobWVudCkpCisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAKKyAgICBpZiAoIW1fZnJhbWVidWZm
ZXJCaW5kaW5nIHx8ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5k
Iik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgCisgICAgV2Vi
R0xTaGFyZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRBdHRhY2ht
ZW50T2JqZWN0KGF0dGFjaG1lbnQpOworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmIChw
bmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1Rf
VFlQRSkKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6
Ok5PTkUpOworICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJTlZBTElEX0VOVU0g
aW4gdGhpcyBjYXNlLCB3aGlsZSBkZXNrdG9wIEdMCisgICAgICAgIC8vIHNwZWNpZmllcyBJTlZB
TElEX09QRVJBVElPTi4KKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
KyAgICB9CisgICAgCisgICAgQVNTRVJUKG9iamVjdC0+aXNUZXh0dXJlKCkgfHwgb2JqZWN0LT5p
c1JlbmRlcmJ1ZmZlcigpKTsKKyAgICBpZiAob2JqZWN0LT5pc1RleHR1cmUoKSkgeworICAgICAg
ICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFKTsKKyAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+KHJlaW50ZXJw
cmV0X2Nhc3Q8V2ViR0xUZXh0dXJlKj4ob2JqZWN0KSkpOworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEVWRUw6CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9D
VUJFX01BUF9GQUNFOgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEdDM0RpbnQgdmFs
dWUgPSAwOworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgdGV4dHVyZSBhdHRhY2htZW50Iik7CisgICAg
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEU6CisgICAgICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpOworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1F
OgorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMUmVuZGVy
YnVmZmVyPihyZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyYnVmZmVyKj4ob2JqZWN0KSkpOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciByZW5kZXJidWZmZXIgYXR0YWNobWVudCIp
OworICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgICAgICB9CisgICAgfQor
fQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UGFyYW1ldGVy
KEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKKyAgICBjb25zdCBpbnQgaW50WmVybyA9IDA7CisgICAgc3dpdGNoIChw
bmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9URVhUVVJFOgorICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfTElORV9XSURUSF9SQU5HRToKKyAgICAgICAgcmV0dXJu
IGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFOgorICAgICAgICByZXR1cm4gZ2V0V2Vi
R0xGbG9hdEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpBTFBIQV9CSVRTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPihtX2JvdW5kQXJyYXlC
dWZmZXIpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKKyAgICAgICAgcmV0
dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EX0NPTE9SOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xGbG9hdEFycmF5UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9EU1RfQUxQSEE6
CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX1JHQjoKKyAgICAgICAgcmV0dXJuIGdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpC
TEVORF9FUVVBVElPTl9BTFBIQToKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9FUVVBVElPTl9S
R0I6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfU1JDX0FMUEhBOgorICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EX1NSQ19SR0I6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxVRV9CSVRTOgorICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9DTEVBUl9WQUxVRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJh
eVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfV1JJ
VEVNQVNLOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzoK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhVaW50MzJBcnJheTo6Y3JlYXRlKG1fY29tcHJl
c3NlZFRleHR1cmVGb3JtYXRzLmRhdGEoKSwgbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuc2l6
ZSgpKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VMTF9GQUNFOgorICAgICAgICBy
ZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6Q1VMTF9GQUNFX01PREU6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9QUk9HUkFN
OgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiht
X2N1cnJlbnRQcm9ncmFtKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQklU
UzoKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLmRl
cHRoKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKKyAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfQ0xFQVJfVkFMVUU6CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihw
bmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfRlVOQzoKKyAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9SQU5HRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJh
eVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVT
VDoKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldEJv
b2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhF
UjoKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPihtX2ZyYW1lYnVmZmVyQmluZGluZykp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0ZBQ0U6CisgICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JFRU5fQklU
UzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TElORV9XSURUSDoKKyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVY
VFVSRV9JTUFHRV9VTklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRToK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUzoKKyAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1JFTkRFUkJVRkZFUl9TSVpFOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzoK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfU0laRToKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZBUllJTkdfVkVD
VE9SUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTOgorICAgICAgICByZXR1cm4gZ2V0
SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVS
VEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9W
RUNUT1JTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoKKyAgICAgICAgcmV0dXJuIGdl
dFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok5VTV9TSEFERVJfQklOQVJZX0ZPUk1BVFM6CisgICAgICAgIC8vIEZJWE1FOiBzaG91bGQg
d2UgYWx3YXlzIHJldHVybiAwIGZvciB0aGlzPworICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRkFDVE9SOgorICAgICAgICByZXR1cm4gZ2V0Rmxv
YXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05f
T0ZGU0VUX0ZJTEw6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9VTklUUzoKKyAgICAg
ICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRURfQklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JJTkRJTkc6CisgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4obV9y
ZW5kZXJidWZmZXJCaW5kaW5nKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
RVI6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oU3RyaW5nKCJXZWJLaXQgV2ViR0wiKSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0JVRkZFUlM6CisgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNBTVBMRV9DT1ZFUkFHRV9JTlZFUlQ6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0Vf
VkFMVUU6CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6Cisg
ICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Q6CisgICAgICAgIHJldHVybiBnZXRCb29s
ZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5H
X0xBTkdVQUdFX1ZFUlNJT046CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oIldlYkdMIEdM
U0wgRVMgMS4wICgiICsgbV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlNI
QURJTkdfTEFOR1VBR0VfVkVSU0lPTikgKyAiKSIpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfQkFDS19GQUlMOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19G
VU5DOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUw6Cisg
ICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfUEFTUzoKKyAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUkVGOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfVkFM
VUVfTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLOgorICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQklUUzoKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiAhbV9hdHRyaWJ1dGVzLnN0ZW5jaWwpCisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKGludFplcm8pOworICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0NMRUFSX1ZBTFVFOgorICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0ZBSUw6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GVU5DOgor
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfUEFTU19ERVBUSF9GQUlMOgorICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfUEFTU19ERVBUSF9QQVNTOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfUkVGOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6CisgICAgICAgIHJldHVybiBnZXRCb29s
ZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X1ZBTFVFX01BU0s6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9XUklURU1BU0s6CisgICAg
ICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U1VCUElYRUxfQklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5H
XzJEOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJl
PihtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlMkRCaW5kaW5nKSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQOgor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihtX3Rl
eHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgorICAgICAgICBy
ZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlBBQ0tfRkxJUF9ZX1dFQkdMOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5w
YWNrRmxpcFkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBM
WV9BTFBIQV9XRUJHTDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja1ByZW11
bHRpcGx5QWxwaGEpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQ
QUNFX0NPTlZFUlNJT05fV0VCR0w6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBh
Y2tDb2xvcnNwYWNlQ29udmVyc2lvbik7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVO
RE9SOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IikpOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlNJT046CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oIldlYkdMIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJTSU9OKSArICIpIik7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BP
UlQ6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6
IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcworICAgICAgICBpZiAobV9vZXNTdGFuZGFyZERl
cml2YXRpdmVzKQorICAgICAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEV4
dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVMpOworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAg
Y2FzZSBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9SRU5ERVJFUl9XRUJHTDoKKyAg
ICAgICAgaWYgKG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKKyAgICAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8obV9jb250ZXh0LT5nZXRTdHJpbmcoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkVSKSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xf
ZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKCk7CisgICAgY2FzZSBXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpVTk1BU0tFRF9WRU5E
T1JfV0VCR0w6CisgICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCisgICAgICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29u
dGV4dDNEOjpWRU5ET1IpKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lLCBXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIG5vdCBlbmFibGVkIik7CisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VkVSVEVYX0FSUkFZ
X0JJTkRJTkdfT0VTOiAvLyBPRVNfdmVydGV4X2FycmF5X29iamVjdAorICAgICAgICBpZiAobV9v
ZXNWZXJ0ZXhBcnJheU9iamVjdCkgeworICAgICAgICAgICAgaWYgKCFtX2JvdW5kVmVydGV4QXJy
YXlPYmplY3QtPmlzRGVmYXVsdE9iamVjdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPihtX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QpKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAg
ICAgICAgfQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIE9FU192
ZXJ0ZXhfYXJyYXlfb2JqZWN0IG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJP
UFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKG1f
ZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKQorICAgICAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKEV4dGVuc2lvbnMzRDo6TUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlf
RVhUKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBFWFRfdGV4
dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVO
VFNfRVhUOiAvLyBFWFRfZHJhd19idWZmZXJzIEJFR0lOCisgICAgICAgIGlmIChtX3dlYmdsRHJh
d0J1ZmZlcnMpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGdldE1heENvbG9yQXR0
YWNobWVudHMoKSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwg
V0VCR0xfZHJhd19idWZmZXJzIG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVGRkVSU19FWFQ6Cisg
ICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKGdldE1heERyYXdCdWZmZXJzKCkpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOworICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKG1fd2Vi
Z2xEcmF3QnVmZmVycworICAgICAgICAgICAgJiYgcG5hbWUgPj0gRXh0ZW5zaW9uczNEOjpEUkFX
X0JVRkZFUjBfRVhUCisgICAgICAgICAgICAmJiBwbmFtZSA8IHN0YXRpY19jYXN0PEdDM0RlbnVt
PihFeHRlbnNpb25zM0Q6OkRSQVdfQlVGRkVSMF9FWFQgKyBnZXRNYXhEcmF3QnVmZmVycygpKSkg
eworICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FOwor
ICAgICAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICAgICAgICAgIHZh
bHVlID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldERyYXdCdWZmZXIocG5hbWUpOworICAgICAg
ICAgICAgZWxzZSAvLyBlbXVsYXRlZCBiYWNrYnVmZmVyCisgICAgICAgICAgICAgICAgdmFsdWUg
PSBtX2JhY2tEcmF3QnVmZmVyOworICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
Iik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9Cit9CisKK1dlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbVBhcmFtZXRlciIsIHByb2dyYW0pKQor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgCisgICAgR0MzRGludCB2YWx1ZSA9
IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRF
TEVURV9TVEFUVVM6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+aXNEZWxl
dGVkKCkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZBTElEQVRFX1NUQVRVUzoKKyAg
ICAgICAgbV9jb250ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFt
ZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29s
Pih2YWx1ZSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTktfU1RBVFVTOgorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHByb2dyYW0tPmdldExpbmtTdGF0dXMoKSk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVRUQUNIRURfU0hBREVSUzoKKyAgICAgICAgbV9jb250
ZXh0LT5nZXRQcm9ncmFtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QUNUSVZFX0FUVFJJQlVURVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
QUNUSVZFX1VOSUZPUk1TOgorICAgICAgICBtX2NvbnRleHQtPmdldE5vbkJ1aWx0SW5BY3RpdmVT
eW1ib2xDb3VudChvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOworICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UHJvZ3Jh
bVBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oKTsKKyAgICB9Cit9CisKK1N0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRQcm9ncmFtSW5mb0xvZyhXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGlmICghdmFsaWRhdGVX
ZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbUluZm9Mb2ciLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJu
ICIiOworICAgIHJldHVybiBlbnN1cmVOb3ROdWxsKG1fY29udGV4dC0+Z2V0UHJvZ3JhbUluZm9M
b2cob2JqZWN0T3JaZXJvKHByb2dyYW0pKSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCB0YXJn
ZXQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAgICBpZiAoIW1f
cmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVuZGVyYnVmZmVyIGJv
dW5kIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgCisgICAg
aWYgKG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SW50ZXJuYWxGb3JtYXQoKSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTAorICAgICAgICAmJiAhbV9yZW5kZXJidWZmZXJCaW5k
aW5nLT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgQVNTRVJUKCFpc0RlcHRoU3RlbmNpbFN1cHBvcnRl
ZCgpKTsKKyAgICAgICAgaW50IHZhbHVlID0gMDsKKyAgICAgICAgc3dpdGNoIChwbmFtZSkgewor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfV0lEVEg6CisgICAg
ICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0V2lkdGgoKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVJfSEVJR0hUOgorICAgICAgICAgICAgdmFsdWUgPSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdl
dEhlaWdodCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUl9SRURfU0laRToKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CTFVFX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFOgorICAgICAgICAgICAgdmFsdWUgPSAwOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUl9ERVBUSF9TSVpFOgorICAgICAgICAgICAgdmFsdWUgPSAyNDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RF
TkNJTF9TSVpFOgorICAgICAgICAgICAgdmFsdWUgPSA4OworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JN
QVQ6CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fcmVuZGVyYnVmZmVyQmluZGlu
Zy0+Z2V0SW50ZXJuYWxGb3JtYXQoKSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgR0MzRGludCB2YWx1ZSA9IDA7Cisg
ICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUl9XSURUSDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSEVJ
R0hUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9SRURfU0laRToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQkxVRV9TSVpFOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6CisgICAgICAgIG1fY29u
dGV4dC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDoKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkpOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJh
bWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQor
CitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVyUGFyYW1l
dGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlclBhcmFtZXRlciIsIHNoYWRl
cikpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBHQzNEaW50IHZhbHVlID0g
MDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVM
RVRFX1NUQVRVUzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlzRGVsZXRl
ZCgpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKKyAgICAg
ICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2
YWx1ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFs
dWUpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRToKKyAgICAgICAg
bV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZh
bHVlKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9Cit9
CisKK1N0cmluZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTaGFkZXJJbmZvTG9nKFdl
YkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xv
ZyIsIHNoYWRlcikpCisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gZW5zdXJlTm90TnVs
bChtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsKK30K
KworUGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Z2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0RlbnVtIHNoYWRlclR5cGUs
IEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgc3dpdGNoIChzaGFkZXJUeXBlKSB7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFHTUVOVF9TSEFERVI6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRT
aGFkZXJQcmVjaXNpb25Gb3JtYXQiLCAiaW52YWxpZCBzaGFkZXIgdHlwZSIpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgc3dpdGNoIChwcmVjaXNpb25UeXBlKSB7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6Ok1FRElVTV9GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpISUdIX0ZM
T0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxPV19JTlQ6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6TUVESVVNX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpI
SUdIX0lOVDoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclByZWNp
c2lvbkZvcm1hdCIsICJpbnZhbGlkIHByZWNpc2lvbiB0eXBlIik7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKyAgICAKKyAgICBHQzNEaW50IHJhbmdlWzJdID0gezAsIDB9OworICAg
IEdDM0RpbnQgcHJlY2lzaW9uID0gMDsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlclByZWNpc2lv
bkZvcm1hdChzaGFkZXJUeXBlLCBwcmVjaXNpb25UeXBlLCByYW5nZSwgJnByZWNpc2lvbik7Cisg
ICAgcmV0dXJuIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0OjpjcmVhdGUocmFuZ2VbMF0sIHJh
bmdlWzFdLCBwcmVjaXNpb24pOworfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9i
amVjdCgiZ2V0U2hhZGVyU291cmNlIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuICIiOworICAg
IHJldHVybiBlbnN1cmVOb3ROdWxsKHNoYWRlci0+Z2V0U291cmNlKCkpOworfQorCitWZWN0b3I8
U3RyaW5nPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25z
KCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiByZXN1bHQ7CisgICAgCisgICAgaWYgKG1faXNQZW5k
aW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAKKyAgICBp
ZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9m
bG9hdCIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9hdCIpOworICAg
IGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJl
X2Zsb2F0X2xpbmVhciIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9h
dF9saW5lYXIiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9F
U190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpKQorICAgICAg
ICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpOworICAgIGlm
IChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcyIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikgfHwgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVyX3RleHR1cmVfbG9kIikpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMi
KSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX0VYVF90ZXh0dXJlX2ZpbHRlcl9hbmlz
b3Ryb3BpYyIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9F
U192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5zdXBwb3J0cygiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpKQorICAgICAgICByZXN1
bHQuYXBwZW5kKCJPRVNfZWxlbWVudF9pbmRleF91aW50Iik7CisgICAgcmVzdWx0LmFwcGVuZCgi
V0VCR0xfbG9zZV9jb250ZXh0Iik7CisgICAgaWYgKFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6
OnN1cHBvcnRlZCh0aGlzKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dFQkdMX2Nv
bXByZXNzZWRfdGV4dHVyZV9hdGMiKTsKKyAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBW
UlRDOjpzdXBwb3J0ZWQodGhpcykpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9XRUJH
TF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTsKKyAgICBpZiAoV2ViR0xDb21wcmVzc2VkVGV4
dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xf
Y29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTsKKyAgICBpZiAoV2ViR0xEZXB0aFRleHR1cmU6OnN1
cHBvcnRlZChncmFwaGljc0NvbnRleHQzRCgpKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VC
R0xfZGVwdGhfdGV4dHVyZSIpOworICAgIGlmIChzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RyYXdfYnVmZmVycyIpOworICAgIGlmIChBTkdMRUlu
c3RhbmNlZEFycmF5czo6c3VwcG9ydGVkKHRoaXMpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJB
TkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7CisgICAgCisgICAgaWYgKGFsbG93UHJpdmlsZWdlZEV4
dGVuc2lvbnMoKSkgeworICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoIldFQkdMX2RlYnVnX3NoYWRlcnMiKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZCgiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpOworICAgIH0KKyAgICAKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
Z2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIFdlYkdM
VGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2V0VGV4UGFyYW1ldGVyIiwg
dGFyZ2V0LCBmYWxzZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX1dSQVBfVDoKKyAgICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQs
IHBuYW1lLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0
PHVuc2lnbmVkPih2YWx1ZSkpOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpURVhUVVJFX01BWF9B
TklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisgICAgICAg
IGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykgeworICAgICAgICAgICAgbV9jb250
ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpKTsKKyAg
ICAgICAgfQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIEVY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRleFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsK
KyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRV
bmlmb3JtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IHVuaWZvcm1Mb2NhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdM
T2JqZWN0KCJnZXRVbmlmb3JtIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICBpZiAoIXVuaWZvcm1Mb2NhdGlvbiB8fCB1bmlmb3JtTG9jYXRpb24tPnByb2dy
YW0oKSAhPSBwcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldFVuaWZvcm0iLCAibm8gdW5pZm9ybWxvY2F0
aW9uIG9yIG5vdCB2YWxpZCBmb3IgdGhpcyBwcm9ncmFtIik7CisgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKKyAgICB9CisgICAgR0MzRGludCBsb2NhdGlvbiA9IHVuaWZvcm1Mb2NhdGlv
bi0+bG9jYXRpb24oKTsKKyAgICAKKyAgICBHQzNEZW51bSBiYXNlVHlwZTsKKyAgICB1bnNpZ25l
ZCBsZW5ndGg7CisgICAgc3dpdGNoICh1bmlmb3JtTG9jYXRpb24tPnR5cGUoKSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3ND
b250ZXh0M0Q6OkJPT0w7CisgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMjoKKyAgICAgICAgYmFzZVR5cGUgPSBH
cmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICAgICAgbGVuZ3RoID0gMjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUMzOgorICAgICAgICBiYXNl
VHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAgICAgICBsZW5ndGggPSAzOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzQ6CisgICAg
ICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7CisgICAgICAgIGxlbmd0aCA9
IDQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKKyAg
ICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOworICAgICAgICBsZW5ndGgg
PSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVD
MjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOworICAgICAgICBs
ZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlRfVkVDMzoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOworICAg
ICAgICBsZW5ndGggPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpJTlRfVkVDNDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5U
OworICAgICAgICBsZW5ndGggPSA0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzI6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMzOgorICAgICAgICBiYXNlVHlwZSA9
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gMzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDNDoKKyAgICAgICAg
YmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDQ7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDI6
CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICBs
ZW5ndGggPSA0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
TE9BVF9NQVQzOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsK
KyAgICAgICAgbGVuZ3RoID0gOTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVRfTUFUNDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDE2OworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNBTVBMRVJfQ1VCRToKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
SU5UOworICAgICAgICBsZW5ndGggPSAxOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICAvLyBDYW4ndCBoYW5kbGUgdGhpcyB0eXBlCisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmhh
bmRsZWQgdHlwZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAg
IHN3aXRjaCAoYmFzZVR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDog
eworICAgICAgICBHQzNEZmxvYXQgdmFsdWVbMTZdID0gezB9OworICAgICAgICBpZiAobV9pc1Jv
YnVzdG5lc3NFWFRTdXBwb3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+Z2V0blVuaWZvcm1mdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCAx
NiAqIHNpemVvZihHQzNEZmxvYXQpLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0VW5pZm9ybWZ2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24s
IHZhbHVlKTsKKyAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyh2YWx1ZVswXSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQz
MkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworICAgIH0KKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpJTlQ6IHsKKyAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKKyAgICAg
ICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQorICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0p
LCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSks
IGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgIGlmIChsZW5ndGggPT0gMSkKKyAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8odmFsdWVbMF0pOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7CisgICAgfQorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6IHsKKyAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHsw
fTsKKyAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQorICAgICAgICAgICAg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJv
KHByb2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8o
cHJvZ3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7CisgICAgICAgIGlmIChsZW5ndGggPiAxKSB7Cisg
ICAgICAgICAgICBib29sIGJvb2xWYWx1ZVsxNl0gPSB7MH07CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspCisgICAgICAgICAgICAgICAgYm9vbFZhbHVl
W2pdID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbal0pOworICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhib29sVmFsdWUsIGxlbmd0aCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZVswXSkpOworICAgIH0KKyAgICBk
ZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKyAgICAKKyAgICAvLyBJ
ZiB3ZSBnZXQgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gb3VyIHVuZm9ydHVuYXRlbHkg
Y29tcGxleCBsb2dpYyBhYm92ZQorICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmtub3duIGVycm9yIik7CisgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOworfQorCitQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0
aW9uPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgcHJvZ3JhbSkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlmICghdmFsaWRhdGVMb2NhdGlvbkxlbmd0
aCgiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImdldFVuaWZvcm1Mb2NhdGlvbiIsIG5hbWUpKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCFwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOwor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgR0MzRGludCB1bmlmb3JtTG9jYXRp
b24gPSBtX2NvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSks
IG5hbWUpOworICAgIGlmICh1bmlmb3JtTG9jYXRpb24gPT0gLTEpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIAorICAgIEdDM0RpbnQgYWN0aXZlVW5pZm9ybXMgPSAwOworICAgIG1fY29u
dGV4dC0+Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVuaWZvcm1zKTsK
KyAgICBmb3IgKEdDM0RpbnQgaSA9IDA7IGkgPCBhY3RpdmVVbmlmb3JtczsgaSsrKSB7CisgICAg
ICAgIEFjdGl2ZUluZm8gaW5mbzsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVu
aWZvcm0ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBpLCBpbmZvKSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAvLyBTdHJpcCAiWzBdIiBmcm9tIHRoZSBuYW1lIGlmIGl0J3Mg
YW4gYXJyYXkuCisgICAgICAgIGlmIChpbmZvLm5hbWUuZW5kc1dpdGgoIlswXSIpKQorICAgICAg
ICAgICAgaW5mby5uYW1lID0gaW5mby5uYW1lLmxlZnQoaW5mby5uYW1lLmxlbmd0aCgpIC0gMyk7
CisgICAgICAgIC8vIElmIGl0J3MgYW4gYXJyYXksIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdo
IGVhY2ggZWxlbWVudCwgYXBwZW5kaW5nICJbaW5kZXhdIiB0byB0aGUgbmFtZS4KKyAgICAgICAg
Zm9yIChHQzNEaW50IGluZGV4ID0gMDsgaW5kZXggPCBpbmZvLnNpemU7ICsraW5kZXgpIHsKKyAg
ICAgICAgICAgIFN0cmluZyB1bmlmb3JtTmFtZSA9IGluZm8ubmFtZSArICJbIiArIFN0cmluZzo6
bnVtYmVyKGluZGV4KSArICJdIjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5hbWUg
PT0gdW5pZm9ybU5hbWUgfHwgbmFtZSA9PSBpbmZvLm5hbWUpCisgICAgICAgICAgICAgICAgcmV0
dXJuIFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpjcmVhdGUocHJvZ3JhbSwgdW5pZm9ybUxvY2F0aW9u
LCBpbmZvLnR5cGUpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQor
CitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VmVydGV4QXR0cmli
KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICAKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgCisgICAgaWYgKGluZGV4
ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFZlcnRleEF0dHJpYiIsICJpbmRleCBv
dXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAg
ICAKKyAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0
ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRl
KGluZGV4KTsKKyAgICAKKyAgICBpZiAobV9hbmdsZUluc3RhbmNlZEFycmF5cyAmJiBwbmFtZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9ESVZJU09SX0FOR0xFKQor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLmRpdmlzb3IpOworICAgIAorICAgIHN3
aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklC
X0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICBpZiAoKCFpc0dMRVMyQ29tcGxpYW50KCkg
JiYgIWluZGV4ICYmIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3Rh
dGUoMCkuYnVmZmVyQmluZGluZyA9PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpCisgICAgICAgICAg
ICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZworICAgICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJp
bmRpbmctPm9iamVjdCgpKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KHN0YXRlLmJ1
ZmZlckJpbmRpbmcpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklC
X0FSUkFZX0VOQUJMRUQ6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuZW5hYmxl
ZCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9OT1JN
QUxJWkVEOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLm5vcm1hbGl6ZWQpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRToKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5zaXplKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKKyAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhzdGF0ZS5vcmlnaW5hbFN0cmlkZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHN0YXRlLnR5cGUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfVkVS
VEVYX0FUVFJJQjoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNy
ZWF0ZShtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XS52YWx1ZSwgNCkpOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQorCitsb25nIGxvbmcgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBH
QzNEZW51bSBwbmFtZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICBHQzNEc2l6ZWlwdHIgcmVzdWx0ID0gbV9jb250ZXh0LT5nZXRW
ZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
bG9uZyBsb25nPihyZXN1bHQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKQoreworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBib29sIGlzVmFsaWQgPSBm
YWxzZTsKKyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkdFTkVSQVRFX01JUE1BUF9ISU5UOgorICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZF
X0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKKyAgICAgICAgaWYgKG1fb2Vz
U3RhbmRhcmREZXJpdmF0aXZlcykKKyAgICAgICAgICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgaWYgKCFpc1ZhbGlkKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJoaW50IiwgImludmFsaWQg
dGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5oaW50KHRh
cmdldCwgbW9kZSk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmlzQnVmZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCit7CisgICAgaWYgKCFidWZmZXIgfHwgaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBpZiAo
IWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICByZXR1cm4gbV9jb250ZXh0LT5pc0J1ZmZlcihidWZmZXItPm9iamVjdCgpKTsKK30KKworYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc0NvbnRleHRMb3N0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9jb250ZXh0TG9zdDsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjppc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xp
Y3lSZXNvbHV0aW9uICYmICFtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24pIHsKKyAgICAg
ICAgTE9HKFdlYkdMLCAiQ29udGV4dCBpcyBiZWluZyB1c2VkLiBBdHRlbXB0IHRvIHJlc29sdmUg
dGhlIHBvbGljeS4iKTsKKyAgICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzKCktPmRv
Y3VtZW50KCkudG9wRG9jdW1lbnQoKTsKKyAgICAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LnBh
Z2UoKTsKKyAgICAgICAgaWYgKHBhZ2UgJiYgIWRvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxlKCkp
CisgICAgICAgICAgICBwYWdlLT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5yZXNvbHZl
V2ViR0xQb2xpY3lGb3JVUkwoZG9jdW1lbnQudXJsKCkpOworICAgICAgICAvLyBGSVhNRTogV2Ug
ZG9uJ3QgY3VycmVudGx5IGRvIGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdCBmcm9tIHJlc29sdXRp
b24uIEEgbW9yZQorICAgICAgICAvLyBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBtaWdodCB0cnkg
dG8gY29uc3RydWN0IGEgcmVhbCBjb250ZXh0LCBldGMgYW5kIHByb2NlZWQKKyAgICAgICAgLy8g
d2l0aCBub3JtYWwgb3BlcmF0aW9uLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI5MTIyCisgICAgICAgIG1faGFzUmVxdWVzdGVkUG9saWN5UmVz
b2x1dGlvbiA9IHRydWU7CisgICAgfQorICAgIAorICAgIHJldHVybiBtX2NvbnRleHRMb3N0IHx8
IG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbjsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUNhcGFiaWxpdHkoImlzRW5hYmxlZCIs
IGNhcCkpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfVEVTVCkKKyAgICAgICAgcmV0dXJuIG1fc3RlbmNpbEVuYWJsZWQ7CisgICAg
cmV0dXJuIG1fY29udGV4dC0+aXNFbmFibGVkKGNhcCk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJh
bWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIGlmICghZnJhbWVidWZmZXItPmhh
c0V2ZXJCZWVuQm91bmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIG1f
Y29udGV4dC0+aXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitHQzNE
Ym9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc1Byb2dyYW0oV2ViR0xQcm9ncmFt
KiBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmlzUHJv
Z3JhbShwcm9ncmFtLT5vYmplY3QoKSk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZm
ZXIpCit7CisgICAgaWYgKCFyZW5kZXJidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBpZiAoIXJlbmRlcmJ1ZmZlci0+aGFzRXZl
ckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gbV9jb250
ZXh0LT5pc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXItPm9iamVjdCgpKTsKK30KKworR0MzRGJv
b2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNTaGFkZXIoV2ViR0xTaGFkZXIqIHNo
YWRlcikKK3sKKyAgICBpZiAoIXNoYWRlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmlzU2hhZGVyKHNo
YWRlci0+b2JqZWN0KCkpOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjppc1RleHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQoreworICAgIGlmICghdGV4dHVy
ZSB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIGlmICghdGV4dHVyZS0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICAKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc1RleHR1cmUodGV4dHVyZS0+b2JqZWN0KCkp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmxpbmVXaWR0aChHQzNEZmxv
YXQgd2lkdGgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fY29udGV4dC0+bGluZVdpZHRoKHdpZHRoKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0s
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgibGlua1Byb2dy
YW0iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFu
dCgpKSB7CisgICAgICAgIFdlYkdMU2hhZGVyKiB2ZXJ0ZXhTaGFkZXIgPSBwcm9ncmFtLT5nZXRB
dHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUik7CisgICAgICAg
IFdlYkdMU2hhZGVyKiBmcmFnbWVudFNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVy
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpOworICAgICAgICBpZiAoIXZlcnRl
eFNoYWRlciB8fCAhdmVydGV4U2hhZGVyLT5pc1ZhbGlkKCkgfHwgIWZyYWdtZW50U2hhZGVyIHx8
ICFmcmFnbWVudFNoYWRlci0+aXNWYWxpZCgpIHx8ICFtX2NvbnRleHQtPnByZWNpc2lvbnNNYXRj
aChvYmplY3RPclplcm8odmVydGV4U2hhZGVyKSwgb2JqZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVy
KSkgfHwgIW1fY29udGV4dC0+Y2hlY2tWYXJ5aW5nc1BhY2tpbmcob2JqZWN0T3JaZXJvKHZlcnRl
eFNoYWRlciksIG9iamVjdE9yWmVybyhmcmFnbWVudFNoYWRlcikpKSB7CisgICAgICAgICAgICBw
cm9ncmFtLT5zZXRMaW5rU3RhdHVzKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPmxpbmtQcm9ncmFtKG9iamVjdE9yWmVy
byhwcm9ncmFtKSk7CisgICAgcHJvZ3JhbS0+aW5jcmVhc2VMaW5rQ291bnQoKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwg
R0MzRGludCBwYXJhbSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm47CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19GTElQX1lfV0VCR0w6CisgICAgICAgIG1fdW5wYWNrRmxpcFkgPSBwYXJh
bTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX1BS
RU1VTFRJUExZX0FMUEhBX1dFQkdMOgorICAgICAgICBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEg
PSBwYXJhbTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTDoKKyAgICAgICAgaWYgKHBhcmFtID09IEdy
YXBoaWNzQ29udGV4dDNEOjpCUk9XU0VSX0RFRkFVTFRfV0VCR0wgfHwgcGFyYW0gPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PTkUpCisgICAgICAgICAgICBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJz
aW9uID0gc3RhdGljX2Nhc3Q8R0MzRGVudW0+KHBhcmFtKTsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBVTlBBQ0tfQ09MT1JTUEFD
RV9DT05WRVJTSU9OX1dFQkdMIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAg
aWYgKHBhcmFtID09IDEgfHwgcGFyYW0gPT0gMiB8fCBwYXJhbSA9PSA0IHx8IHBhcmFtID09IDgp
IHsKKyAgICAgICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElH
Tk1FTlQpCisgICAgICAgICAgICAgICAgbV9wYWNrQWxpZ25tZW50ID0gcGFyYW07CisgICAgICAg
ICAgICBlbHNlIC8vIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5UOgorICAgICAg
ICAgICAgICAgIG1fdW5wYWNrQWxpZ25tZW50ID0gcGFyYW07CisgICAgICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKHBuYW1lLCBwYXJhbSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIGZvciBhbGlnbm1lbnQiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnBvbHlnb25P
ZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnBv
bHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5
QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgLy8gRHVlIHRvIFdlYkdMJ3Mg
c2FtZS1vcmlnaW4gcmVzdHJpY3Rpb25zLCBpdCBpcyBub3QgcG9zc2libGUgdG8KKyAgICAvLyB0
YWludCB0aGUgb3JpZ2luIHVzaW5nIHRoZSBXZWJHTCBBUEkuCisgICAgQVNTRVJUKGNhbnZhcygp
LT5vcmlnaW5DbGVhbigpKTsKKyAgICAvLyBWYWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzLgorICAg
IGlmICghcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAicmVhZFBpeGVscyIsICJubyBkZXN0aW5hdGlvbiBBcnJheUJ1
ZmZlclZpZXciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzd2l0Y2ggKGZvcm1hdCkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgorICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIGZvcm1hdCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVh
ZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJmb3JtYXQg
bm90IFJHQkEgb3IgdHlwZSBub3QgVU5TSUdORURfQllURSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIC8vIFZhbGlkYXRlIGFycmF5IHR5cGUgYWdhaW5zdCBwaXhlbCB0eXBlLgorICAg
IGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFk
UGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBs
ZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5k
aW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJl
YXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsIHJlYXNvbik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gQ2FsY3VsYXRlIGFycmF5IHNpemUsIHRha2luZyBp
bnRvIGNvbnNpZGVyYXRpb24gb2YgUEFDS19BTElHTk1FTlQuCisgICAgdW5zaWduZWQgdG90YWxC
eXRlc1JlcXVpcmVkID0gMDsKKyAgICB1bnNpZ25lZCBwYWRkaW5nID0gMDsKKyAgICBpZiAoIW1f
aXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKSB7CisgICAgICAgIEdDM0RlbnVtIGVycm9yID0gbV9j
b250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBoZWln
aHQsIG1fcGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgJnBhZGRpbmcpOworICAg
ICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgInJlYWRQaXhlbHMiLCAiaW52YWxpZCBkaW1l
bnNpb25zIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBp
eGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJy
ZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgbGFyZ2UgZW5vdWdoIGZvciBkaW1lbnNp
b25zIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Y2xlYXJJZkNvbXBvc2l0ZWQoKTsKKyAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVz
cygpOworICAgIAorICAgIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5k
ZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Cisg
ICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZWFkblBpeGVsc0VYVCh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIHBpeGVscy0+Ynl0ZUxlbmd0aCgpLCBkYXRhKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgfQorICAgIAorI2lmIE9TKERBUldJTikKKyAgICBp
ZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIC8vIHdlIGhhdmVuJ3QgY29tcHV0ZWQgcGFk
ZGluZworICAgICAgICBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwg
dHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVk
LCAmcGFkZGluZyk7CisgICAgLy8gRklYTUU6IHJlbW92ZSB0aGlzIHNlY3Rpb24gd2hlbiBHTCBk
cml2ZXIgYnVnIG9uIE1hYyBBTkQgdGhlIEdMRVMgZHJpdmVyIGJ1ZworICAgIC8vIG9uIFFDIGlz
IGZpeGVkLCBpLmUuLCB3aGVuIGFscGhhIGlzIG9mZiwgcmVhZFBpeGVscyBzaG91bGQKKyAgICAv
LyBzZXQgYWxwaGEgdG8gMjU1IGluc3RlYWQgb2YgMC4KKyAgICBpZiAoIW1fZnJhbWVidWZmZXJC
aW5kaW5nICYmICFtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkuYWxwaGEpIHsKKyAg
ICAgICAgdW5zaWduZWQgY2hhciogcGl4ZWxzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBj
aGFyKj4oZGF0YSk7CisgICAgICAgIGZvciAoR0MzRHNpemVpIGl5ID0gMDsgaXkgPCBoZWlnaHQ7
ICsraXkpIHsKKyAgICAgICAgICAgIGZvciAoR0MzRHNpemVpIGl4ID0gMDsgaXggPCB3aWR0aDsg
KytpeCkgeworICAgICAgICAgICAgICAgIHBpeGVsc1szXSA9IDI1NTsKKyAgICAgICAgICAgICAg
ICBwaXhlbHMgKz0gNDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBpeGVscyArPSBwYWRk
aW5nOworICAgICAgICB9CisgICAgfQorI2VuZGlmCit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5yZWxlYXNl
U2hhZGVyQ29tcGlsZXIoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpy
ZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdl
IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFt
X3JlbmRlcmJ1ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5kZXJidWZmZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgicmVuZGVy
YnVmZmVyU3RvcmFnZSIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgc3dp
dGNoIChpbnRlcm5hbGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4Ogor
ICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0
SW50ZXJuYWxGb3JtYXQoaW50ZXJuYWxmb3JtYXQpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJp
bmRpbmctPnNldElzVmFsaWQodHJ1ZSk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+
c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKCkpCisgICAgICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFy
Z2V0LCBFeHRlbnNpb25zM0Q6OkRFUFRIMjRfU1RFTkNJTDgsIHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdodCk7CisgICAg
ICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZChpc0RlcHRoU3RlbmNpbFN1cHBv
cnRlZCgpKTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1h
dChpbnRlcm5hbGZvcm1hdCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5k
ZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6c2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9v
bGVhbiBpbnZlcnQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2Npc3NvcihHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZh
bGlkYXRlU2l6ZSgic2Npc3NvciIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9jb250ZXh0LT5zY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVy
LCBjb25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVdlYkdMT2JqZWN0KCJzaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47Cisg
ICAgU3RyaW5nIHN0cmluZ1dpdGhvdXRDb21tZW50cyA9IFN0cmlwQ29tbWVudHMoc3RyaW5nKS5y
ZXN1bHQoKTsKKyAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJzaGFkZXJTb3VyY2UiLCBzdHJpbmdX
aXRob3V0Q29tbWVudHMpKQorICAgICAgICByZXR1cm47CisgICAgc2hhZGVyLT5zZXRTb3VyY2Uo
c3RyaW5nKTsKKyAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShvYmplY3RPclplcm8oc2hhZGVy
KSwgc3RyaW5nV2l0aG91dENvbW1lbnRzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQg
bWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuYyIsIGZ1bmMpKQor
ICAgICAgICByZXR1cm47CisgICAgbV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICBtX3N0ZW5j
aWxGdW5jUmVmQmFjayA9IHJlZjsKKyAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7CisgICAg
bV9zdGVuY2lsRnVuY01hc2tCYWNrID0gbWFzazsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5j
KGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50
IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxGdW5jKCJzdGVuY2ls
RnVuY1NlcGFyYXRlIiwgZnVuYykpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKGZhY2Up
IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFDSzoKKyAgICAgICAg
bV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSBy
ZWY7CisgICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKKyAgICAgICAgbV9zdGVuY2ls
RnVuY01hc2tCYWNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RlJPTlQ6CisgICAgICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSByZWY7CisgICAgICAg
IG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6QkFDSzoKKyAgICAgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSByZWY7
CisgICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFjayA9IG1hc2s7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJzdGVuY2lsRnVuY1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmNTZXBhcmF0
ZShmYWNlLCBmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNr
OworICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxN
YXNrKG1hc2spOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxN
YXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChmYWNl
KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfQU5EX0JBQ0s6CisgICAgICAg
IG1fc3RlbmNpbE1hc2sgPSBtYXNrOworICAgICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UOgorICAg
ICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6QkFDSzoKKyAgICAgICAgbV9zdGVuY2lsTWFza0JhY2sgPSBtYXNrOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAic3RlbmNpbE1hc2tTZXBhcmF0ZSIsICJp
bnZhbGlkIGZhY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPnN0
ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNE
ZW51bSB6cGFzcykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9jb250ZXh0LT5zdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsT3BTZXBhcmF0ZShH
QzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBh
c3MpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpw
YXNzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEQmFz
ZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMg
cmV0dXJuZWQuCisgICAgZWMgPSAwOworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVU
ZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgQVNTRVJUKHZh
bGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCB0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3Jt
YXQsIHR5cGUpKTsKKyAgICBBU1NFUlQodGV4KTsKKyAgICBBU1NFUlQoIWxldmVsIHx8ICFXZWJH
TFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSk7CisgICAgaWYgKCFwaXhlbHMpIHsKKyAg
ICAgICAgLy8gTm90ZTogQ2hyb21pdW0ncyBPcGVuR0wgaW1wbGVtZW50YXRpb24gY2xlYXJzIHRl
eHR1cmVzIGFuZCBpc1Jlc291cmNlU2FmZSgpIGlzIHRoZXJlZm9yZSB0cnVlLgorICAgICAgICAv
LyBGb3Igb3RoZXIgaW1wbGVtZW50YXRpb25zLCBpZiB0aGV5IGFyZSB1c2luZyBBTkdMRV9kZXB0
aF90ZXh0dXJlLCBBTkdMRSBkZXB0aCB0ZXh0dXJlcworICAgICAgICAvLyBjYW4gbm90IGJlIGNs
ZWFyZWQgd2l0aCB0ZXhJbWFnZTJEIGFuZCBtdXN0IGJlIGNsZWFyZWQgYnkgYmluZGluZyB0byBh
biBmYm8gYW5kIGNhbGxpbmcKKyAgICAgICAgLy8gY2xlYXIuCisgICAgICAgIGlmIChpc1Jlc291
cmNlU2FmZSgpKQorICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwg
bnVsbHB0cik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYm9vbCBzdWNjZWVkID0gbV9j
b250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBl
LCBtX3VucGFja0FsaWdubWVudCk7CisgICAgICAgICAgICBpZiAoIXN1Y2NlZWQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJU
KHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkp
OworICAgICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwor
ICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4
ZWxzKTsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGZ1bmN0aW9uIGZhaWxlZC4g
VGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBmb3IgdGhpcyBs
ZXZlbC4KKyAgICAgICAgICAgIHRleC0+bWFya0ludmFsaWQodGFyZ2V0LCBsZXZlbCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgdGV4LT5zZXRMZXZlbEluZm8o
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIHR5cGUpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkRJbXBsKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6
SW1hZ2VIdG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBs
eUFscGhhLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgVmVjdG9yPHVp
bnQ4X3Q+IGRhdGE7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdl
RXh0cmFjdG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29s
b3JzcGFjZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOworICAgIGlmICgh
aW1hZ2VFeHRyYWN0b3IuZXh0cmFjdFN1Y2NlZWRlZCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4SW1hZ2UyRCIsICJi
YWQgaW1hZ2UgZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFn
ZVNvdXJjZUZvcm1hdCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3Ag
PSBpbWFnZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKKyAgICBjb25zdCB2b2lkKiBpbWFnZVBp
eGVsRGF0YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRhKCk7CisgICAgCisgICAgYm9v
bCBuZWVkQ29udmVyc2lvbiA9IHRydWU7CisgICAgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAm
JiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYURvTm90aGluZyAmJiAhZmxpcFkp
CisgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIGlm
ICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdlLCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0
LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3Iu
aW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rv
ci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBkYXRhKSkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFn
ZTJEIiwgInBhY2tJbWFnZSBlcnJvciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
aW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBuZWVkQ29u
dmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKKyAgICBpZiAobV91
bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFw
aGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworfQor
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4RnVuYyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9u
VHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHNvdXJjZVR5cGUsIEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQpCit7CisgICAg
aWYgKCF2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgZnVuY3Rpb25UeXBl
LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBm
b3JtYXQsIHR5cGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgV2ViR0xUZXh0
dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyhmdW5jdGlvbk5hbWUsIHRhcmdl
dCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
CisgICAgaWYgKGZ1bmN0aW9uVHlwZSA9PSBOb3RUZXhTdWJJbWFnZTJEKSB7CisgICAgICAgIGlm
IChsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIEZvciBTb3VyY2VBcnJheUJ1ZmZl
clZpZXcsIGZ1bmN0aW9uIHZhbGlkYXRlVGV4RnVuY0RhdGEoKSB3b3VsZCBoYW5kbGUgd2hldGhl
ciB0byB2YWxpZGF0ZSB0aGUgU2V0dGFibGVUZXhGb3JtYXQKKyAgICAgICAgLy8gYnkgY2hlY2tp
bmcgaWYgdGhlIEFycmF5QnVmZmVyVmlldyBpcyBudWxsIG9yIG5vdC4KKyAgICAgICAgaWYgKHNv
dXJjZVR5cGUgIT0gU291cmNlQXJyYXlCdWZmZXJWaWV3KSB7CisgICAgICAgICAgICBpZiAoIXZh
bGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlm
ICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghdmFsaWRhdGVTaXplKGZ1bmN0aW9u
TmFtZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIC8vIEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92
ZXJmbG93IGhhcHBlbnMgZmlyc3QuCisgICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8
IHlvZmZzZXQgKyBoZWlnaHQgPCAwKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYmFkIGRpbWVu
c2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoeG9mZnNldCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwg
eW9mZnNldCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmUtPmdldElu
dGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpICE9IGZvcm1hdCB8fCB0ZXh0dXJlLT5nZXRUeXBl
KHRhcmdldCwgbGV2ZWwpICE9IHR5cGUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlw
ZSBhbmQgZm9ybWF0IGRvIG5vdCBtYXRjaCB0ZXh0dXJlIik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCisgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVU
ZXhGdW5jRGF0YSgidGV4SW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsIHBpeGVscywgTnVsbEFsbG93ZWQpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRl
eEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwg
dHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiBkYXRhID0gcGl4ZWxzID8g
cGl4ZWxzLT5iYXNlQWRkcmVzcygpIDogMDsKKyAgICBWZWN0b3I8dWludDhfdD4gdGVtcERhdGE7
CisgICAgYm9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAgICBpZiAoZGF0YSAm
JiAobV91bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7CisgICAgICAg
IGlmICghbV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdodCwgZm9ybWF0
LCB0eXBlLAorICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQsCisgICAgICAgICAgICBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsCisgICAgICAgICAgICBkYXRhLAor
ICAgICAgICAgICAgdGVtcERhdGEpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgZGF0YSA9IHRlbXBEYXRhLmRhdGEoKTsKKyAgICAgICAgY2hhbmdlVW5wYWNrQWxp
Z25tZW50ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKKyAg
ICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FM
SUdOTUVOVCwgMSk7CisgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKKyAgICAgICAgZm9ybWF0LCB0eXBlLCBkYXRh
LCBlYyk7CisgICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKKyAgICAgICAgbV9jb250ZXh0
LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBh
Y2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKKyAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSogcGl4
ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhcGl4ZWxzIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdl
MkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VJbWFnZURhdGEsIHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1h
dCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0
YTsKKyAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKKyAgICAvLyBUaGUgZGF0YSBmcm9t
IEltYWdlRGF0YSBpcyBhbHdheXMgb2YgZm9ybWF0IFJHQkE4LgorICAgIC8vIE5vIGNvbnZlcnNp
b24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0aW9uIGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVT
SUdORURfQllURSBhbmQgbm8gRmxpcCBvciBQcmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWly
ZWQuCisgICAgaWYgKCFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEg
JiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpCisgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7
CisgICAgZWxzZSB7CisgICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBp
eGVscywgZm9ybWF0LCB0eXBlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxw
aGEsIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAobV91bnBhY2tBbGln
bm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRl
eHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgdGV4SW1hZ2UyREJhc2UodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwg
MCwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5k
YXRhKCktPmRhdGEoKSwgZWMpOworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdJbWFnZUludG9CdWZmZXIoSW1hZ2UqIGltYWdlLCBp
bnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXZpY2VTY2FsZUZhY3RvcikKK3sKKyAgICBJbnRT
aXplIHNpemUod2lkdGgsIGhlaWdodCk7CisgICAgc2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rv
cik7CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1
ZmZlcihzaXplKTsKKyAgICBpZiAoIWJ1ZikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1l
bW9yeSIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgRmxvYXRS
ZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBpbWFnZS0+c2l6ZSgpKTsKKyAgICBGbG9hdFJlY3Qg
ZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKTsKKyAgICBidWYtPmNvbnRleHQoKS0+ZHJhd0lt
YWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAg
cmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgR0Mz
RGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgidGV4SW1hZ2UyRCIsIGltYWdl
LCBlYykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9y
UmVuZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJl
bmRlcmVyKCkpOworICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQorICAgICAg
ICBpbWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0
KCksIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOworICAgIAorICAgIGlmICgh
aW1hZ2VGb3JSZW5kZXIgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1
YkltYWdlMkQsIFNvdXJjZUhUTUxJbWFnZUVsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCBpbWFnZUZvclJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgp
LCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgdGV4
SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwg
aW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1hZ2UsIG1f
dW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KCJ0ZXhJbWFnZTJEIiwgY2FudmFzLCBlYykgfHwg
IXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUhU
TUxDYW52YXNFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgY2FudmFzLT53
aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0
dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgLy8gSWYgcG9zc2li
bGUsIGNvcHkgZnJvbSB0aGUgY2FudmFzIGVsZW1lbnQgZGlyZWN0bHkgdG8gdGhlIHRleHR1cmUK
KyAgICAvLyB2aWEgdGhlIEdQVSwgd2l0aG91dCBhIHJlYWQtYmFjayB0byBzeXN0ZW0gbWVtb3J5
LgorICAgIC8vCisgICAgLy8gRklYTUU6IHJlc3RyaWN0aW9uIG9mIChSR0IgfHwgUkdCQSkvVU5T
SUdORURfQllURSBzaG91bGQgYmUgbGlmdGVkIHdoZW4KKyAgICAvLyBJbWFnZUJ1ZmZlcjo6Y29w
eVRvUGxhdGZvcm1UZXh0dXJlIGltcGxlbWVudGF0aW9ucyBhcmUgZnVsbHkgZnVuY3Rpb25hbC4K
KyAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0gdGFyZ2V0ICYmIHRleHR1
cmUgJiYgdHlwZSA9PSB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpCisgICAgICAgICYm
IChmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEpICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpIHsKKyAgICAgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Cisg
ICAgICAgIGlmIChidWZmZXIgJiYgYnVmZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29u
dGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAgICAgICAgICB0ZXh0dXJlLT5z
ZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgo
KSwgY2FudmFzLT5oZWlnaHQoKSwgdHlwZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gY2FudmFz
LT5nZXRJbWFnZURhdGEoKTsKKyAgICBpZiAoaW1hZ2VEYXRhKQorICAgICAgICB0ZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRGF0YS5n
ZXQoKSwgZWMpOworICAgIGVsc2UKKyAgICAgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLCBH
cmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCitQYXNzUmVmUHRy
PEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2aWRlb0ZyYW1lVG9JbWFnZShIVE1M
VmlkZW9FbGVtZW50KiB2aWRlbywgQmFja2luZ1N0b3JlQ29weSBiYWNraW5nU3RvcmVDb3B5LCBF
eGNlcHRpb25Db2RlJikKK3sKKyAgICBJbnRTaXplIHNpemUodmlkZW8tPnZpZGVvV2lkdGgoKSwg
dmlkZW8tPnZpZGVvSGVpZ2h0KCkpOworICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2dlbmVyYXRl
ZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7CisgICAgaWYgKCFidWYpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlksICJ0ZXhJ
bWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorICAgIEludFJlY3QgZGVzdFJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
KTsKKyAgICAvLyBGSVhNRTogVHVybiB0aGlzIGludG8gYSBHUFUtR1BVIHRleHR1cmUgY29weSBp
bnN0ZWFkIG9mIENQVSByZWFkYmFjay4KKyAgICB2aWRlby0+cGFpbnRDdXJyZW50RnJhbWVJbkNv
bnRleHQoYnVmLT5jb250ZXh0KCksIGRlc3RSZWN0KTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1h
Z2UoYmFja2luZ1N0b3JlQ29weSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZp
ZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1l
bnQoInRleEltYWdlMkQiLCB2aWRlbywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMo
InRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8t
PnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICAvLyBHbyB0aHJvdWdoIHRoZSBmYXN0IHBhdGggZG9pbmcgYSBHUFUtR1BVIHRl
eHR1cmVzIGNvcHkgd2l0aG91dCBhIHJlYWRiYWNrIHRvIHN5c3RlbSBtZW1vcnkgaWYgcG9zc2li
bGUuCisgICAgLy8gT3RoZXJ3aXNlLCBpdCB3aWxsIGZhbGwgYmFjayB0byB0aGUgbm9ybWFsIFNX
IHBhdGguCisgICAgLy8gRklYTUU6IFRoZSBjdXJyZW50IHJlc3RyaWN0aW9ucyByZXF1aXJlIHRo
YXQgZm9ybWF0IHNob3VkIGJlIFJHQiBvciBSR0JBLAorICAgIC8vIHR5cGUgc2hvdWxkIGJlIFVO
U0lHTkVEX0JZVEUgYW5kIGxldmVsIHNob3VsZCBiZSAwLiBJdCBtYXkgYmUgbGlmdGVkIGluIHRo
ZSBmdXR1cmUuCisgICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmlu
ZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgaWYgKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEID09IHRhcmdldCAmJiB0ZXh0dXJlCisgICAgICAgICYmIChmb3JtYXQg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEpCisgICAgICAgICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUKKyAgICAgICAgJiYgKHRleHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgfHwgIXRleHR1cmUtPmlzVmFsaWQodGFyZ2V0LCBs
ZXZlbCkpCisgICAgICAgICYmICFsZXZlbCkgeworICAgICAgICBpZiAodmlkZW8tPmNvcHlWaWRl
b1RleHR1cmVUb1BsYXRmb3JtVGV4dHVyZShtX2NvbnRleHQuZ2V0KCksIHRleHR1cmUtPm9iamVj
dCgpLCBsZXZlbCwgdHlwZSwgaW50ZXJuYWxmb3JtYXQsIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBo
YSwgbV91bnBhY2tGbGlwWSkpIHsKKyAgICAgICAgICAgIHRleHR1cmUtPnNldExldmVsSW5mbyh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8t
PnZpZGVvSGVpZ2h0KCksIHR5cGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCisgICAgUmVmUHRyPEltYWdl
PiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJ
bWFnZU1vZGUoKSwgZWMpOworICAgIGlmICghaW1hZ2UpCisgICAgICAgIHJldHVybjsKKyAgICB0
ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBl
LCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisjZW5kaWYKKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtZiwgR0MzRGludCBwYXJhbWksIGJvb2wgaXNG
bG9hdCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhQ
YXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJu
OworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01JTl9GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdf
RklMVEVSOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX1dSQVBfUzoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoK
KyAgICAgICAgaWYgKChpc0Zsb2F0ICYmIHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xB
TVBfVE9fRURHRSAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVB
VCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFUEVBVCkKKyAgICAgICAgICAgIHx8
ICghaXNGbG9hdCAmJiBwYXJhbWkgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0Ug
JiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1p
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBFQVQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwg
ImludmFsaWQgcGFyYW1ldGVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVfTUFYX0FOSVNPVFJP
UFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKCFt
X2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFi
bGVkIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGlzRmxvYXQpIHsKKyAgICAgICAgdGV4
LT5zZXRQYXJhbWV0ZXJmKHBuYW1lLCBwYXJhbWYpOworICAgICAgICBtX2NvbnRleHQtPnRleFBh
cmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW1mKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0
ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBhcmFtaSk7CisgICAgICAgIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJhbWkpOworICAgIH0KK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSkKK3sKKyAgICB0ZXhQYXJhbWV0ZXIodGFyZ2V0
LCBwbmFtZSwgcGFyYW0sIDAsIHRydWUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCBwYXJhbSkKK3sKKyAgICB0ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgMCwgcGFyYW0s
IGZhbHNlKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFn
ZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyBy
ZXR1cm5lZAorICAgIGVjID0gMDsKKyAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7CisgICAg
QVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJ
bWFnZTJELCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwg
dHlwZSkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVNpemUoInRleFN1YkltYWdlMkQiLCB4b2Zmc2V0
LCB5b2Zmc2V0KSk7CisgICAgQVNTRVJUKHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleFN1
YkltYWdlMkQiLCBmb3JtYXQpKTsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4
dHVyZUJpbmRpbmcoInRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4
KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIEFTU0VSVCgoeG9mZnNldCArIHdpZHRoKSA+PSAwKTsKKyAgICBBU1NFUlQoKHlvZmZz
ZXQgKyBoZWlnaHQpID49IDApOworICAgIEFTU0VSVCh0ZXgtPmdldFdpZHRoKHRhcmdldCwgbGV2
ZWwpID49ICh4b2Zmc2V0ICsgd2lkdGgpKTsKKyAgICBBU1NFUlQodGV4LT5nZXRIZWlnaHQodGFy
Z2V0LCBsZXZlbCkgPj0gKHlvZmZzZXQgKyBoZWlnaHQpKTsKKyAgICBBU1NFUlQodGV4LT5nZXRJ
bnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSA9PSBmb3JtYXQpOworICAgIEFTU0VSVCh0ZXgt
PmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgPT0gdHlwZSk7CisgICAgbV9jb250ZXh0LT50ZXhTdWJJ
bWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp0ZXhTdWJJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rp
bnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEltYWdlKiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSBk
b21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9t
U291cmNlLCBwcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09
IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKTsKKyAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJh
Y3RTdWNjZWVkZWQoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291
cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdl
QWxwaGFPcCgpOworICAgIGNvbnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0
b3IuaW1hZ2VQaXhlbERhdGEoKTsKKyAgICAKKyAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1
ZTsKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBz
b3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTggJiYg
Zm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nICYmICFmbGlwWSkKKyAgICAgICAgbmVlZENvbnZlcnNp
b24gPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPnBhY2tJbWFn
ZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9w
LCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCksIGltYWdlRXh0
cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlVW5wYWNrQWxp
Z25tZW50KCksIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEi
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAo
bV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShH
cmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgMSk7CisgICAgdGV4U3ViSW1hZ2Uy
REJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgaW1hZ2UtPndpZHRoKCksIGlt
YWdlLT5oZWlnaHQoKSwgZm9ybWF0LCB0eXBlLCAgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEo
KSA6IGltYWdlUGl4ZWxEYXRhLCBlYyk7CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEp
CisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFD
S19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
QXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleFN1Yklt
YWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxO
b3RBbGxvd2VkKQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwg
VGV4U3ViSW1hZ2UyRCwgU291cmNlQXJyYXlCdWZmZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCisg
ICAgICAgIHJldHVybjsKKyAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygpOwor
ICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKKyAgICBib29sIGNoYW5nZVVucGFja0FsaWdu
bWVudCA9IGZhbHNlOworICAgIGlmIChkYXRhICYmIChtX3VucGFja0ZsaXBZIHx8IG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0
dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsCisgICAgICAgICAgICBtX3VucGFj
a0FsaWdubWVudCwKKyAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwKKyAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICB0ZW1wRGF0YSkpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBkYXRhID0gdGVtcERhdGEuZGF0
YSgpOworICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0KKyAgICBp
ZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0ZXhTdWJJbWFn
ZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEsIGVjKTsKKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQor
ICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
QUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhlbHMg
fHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJj
ZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhl
bHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgYm9vbCBuZWVk
Q29udmVyc2lvbiA9IHRydWU7CisgICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3
YXlzIG9mIGZvcm1hdCBSR0JBOC4KKyAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBk
ZXN0aW5hdGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5v
IEZsaXAgb3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmIChmb3Jt
YXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSAmJiAhbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2UgeworICAg
ICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlw
ZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgeworICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisg
ICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19B
TElHTk1FTlQsIDEpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZz
ZXQsIHlvZmZzZXQsIHBpeGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgZm9ybWF0LCB0
eXBlLCBuZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEo
KSwgZWMpOworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0g
MDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFn
ZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFnZSwgZWMpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZvclJlbmRlciA9IGltYWdlLT5jYWNoZWRJbWFn
ZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5yZW5kZXJlcigpKTsKKyAgICBpZiAoaW1hZ2VG
b3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkKKyAgICAgICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3SW1h
Z2VJbnRvQnVmZmVyKGltYWdlRm9yUmVuZGVyLmdldCgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2Ut
PmhlaWdodCgpLCAxKTsKKyAgICAKKyAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0
ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VF
bGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBp
bWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNl
dCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQs
IGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdl
dCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGNhbnZhcywgZWMpCisgICAg
ICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBT
b3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBjYW52YXMtPndp
ZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNl
dCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURh
dGEgPSBjYW52YXMtPmdldEltYWdlRGF0YSgpOworICAgIGlmIChpbWFnZURhdGEpCisgICAgICAg
IHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0
eXBlLCBpbWFnZURhdGEuZ2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIHRleFN1YkltYWdl
MkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2Fu
dmFzLT5jb3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91
bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKKyNpZiBFTkFC
TEUoVklERU8pCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwKKyAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0Vs
ZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0
ZXhTdWJJbWFnZTJEIiwgdmlkZW8sIGVjKQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0
ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFy
Z2V0LCBsZXZlbCwgZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWln
aHQoKSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRl
bywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKKyAgICBpZiAoIWltYWdl
KQorICAgICAgICByZXR1cm47CisgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhLCBlYyk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1
bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQg
eCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAidW5pZm9ybTFmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBG
bG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShl
Yyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCAxKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
di0+bGVuZ3RoKCksIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAx
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGludCB4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJv
Z3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMWkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHBy
b2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoKGxvY2F0aW9u
LT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5
cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKSAmJiB4ID49IChpbnQpbV90
ZXh0dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpIiwgImludmFsaWQgdGV4dHVyZSB1
bml0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlm
b3JtMWkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFS
QU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2NhdGlvbiwgdiwgMSkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQz
RDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpT
QU1QTEVSX0NVQkUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHYtPmxlbmd0
aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh2LT5kYXRhKClbaV0gPj0gc3RhdGljX2Nhc3Q8
aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7CisgICAgICAgICAgICAgICAgTE9HKFdlYkdM
LCAiVGV4dHVyZSB1bml0IHNpemU9JXp1LCB2WyVkXT0lZC4gTG9jYXRpb24gdHlwZSA9ICUwNFgu
IiwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpLCBpLCB2LT5kYXRhKClbaV0sIGxvY2F0aW9uLT50eXBl
KCkpOworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVu
Z3RoKCksIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQq
IHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFS
QU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMSkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVSX0NVQkUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoKChHQzNE
aW50Kil2KVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZVVuaXRzLnNpemUoKSkpIHsK
KyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInVuaWZvcm0xaXYiLCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yZihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAidW5pZm9ybTJmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHgsIHkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9uLCB2LCAyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
bGVuZ3RoKCkgLyAyLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwg
MikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yZnYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAyLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp1bmlmb3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2Nh
dGlvbikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgp
ICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJpIiwgImxvY2F0aW9uIG5v
dCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgbV9jb250ZXh0LT51bmlmb3JtMmkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHkpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlv
biwgdiwgMikpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0y
aXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgpKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMml2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9y
bTJpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zZihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwg
R0MzRGZsb2F0IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQ
cm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0zZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQg
cHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+
dW5pZm9ybTNmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0zZnYiLCBsb2NhdGlvbiwgdiwgMykp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRp
b24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMywgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2Z2Iiwg
bG9jYXRpb24sIHYsIHNpemUsIDMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250
ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMywgdik7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTNpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2kobG9j
YXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoInVuaWZvcm0zaXYiLCBsb2NhdGlvbiwgdiwgMykpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmxlbmd0aCgpIC8gMywgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCBzaXpl
LCAzKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDMsIHYpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1bmlmb3JtNGYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00Zihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeiwgdyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIDQpKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRmdiIsIGxvY2F0aW9u
LCB2LCBzaXplLCA0KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5p
Zm9ybTRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQg
dywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAidW5pZm9ybTRpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtNGko
bG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHosIHcpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
VW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwgdiwgNCkpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00aXYobG9jYXRpb24tPmxvY2F0
aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRpdiIsIGxvY2F0aW9uLCB2
LCBzaXplLCA0KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9y
bTRpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSog
diwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0
ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgNCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxv
Y2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdHJhbnNwb3NlLCB2LT5kYXRhKCkpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0Rm
bG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHYsIHNpemUsIDQpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51
bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdHJhbnNwb3Nl
LCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4
M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIHYsIDkpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlmb3Jt
TWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDksIHRyYW5zcG9z
ZSwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlm
b3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1N
YXRyaXgzZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCA5KSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbi0+bG9jYXRpb24o
KSwgc2l6ZSAvIDksIHRyYW5zcG9zZSwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1N
YXRyaXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCAxNikpCisgICAgICAgIHJldHVybjsK
KyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYt
Pmxlbmd0aCgpIC8gMTYsIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2
LCBzaXplLCAxNikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRy
aXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAxNiwgdHJhbnNwb3NlLCB2KTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1c2VQcm9ncmFtKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsK
KyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgidXNlUHJv
Z3JhbSIsIHByb2dyYW0sIGRlbGV0ZWQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRlbGV0
ZWQpCisgICAgICAgIHByb2dyYW0gPSAwOworICAgIGlmIChwcm9ncmFtICYmICFwcm9ncmFtLT5n
ZXRMaW5rU3RhdHVzKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidXNlUHJvZ3JhbSIsICJwcm9ncmFtIG5vdCB2YWxp
ZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChtX2N1cnJlbnRQcm9ncmFtICE9
IHByb2dyYW0pIHsKKyAgICAgICAgaWYgKG1fY3VycmVudFByb2dyYW0pCisgICAgICAgICAgICBt
X2N1cnJlbnRQcm9ncmFtLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgICAg
ICBtX2N1cnJlbnRQcm9ncmFtID0gcHJvZ3JhbTsKKyAgICAgICAgbV9jb250ZXh0LT51c2VQcm9n
cmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CisgICAgICAgIGlmIChwcm9ncmFtKQorICAgICAg
ICAgICAgcHJvZ3JhbS0+b25BdHRhY2hlZCgpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInZhbGlkYXRlUHJv
Z3JhbSIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT52YWxpZGF0
ZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYw
KQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIxZiIsIGluZGV4LCAxLCB2
MCwgMC4wZiwgMC4wZiwgMS4wZik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCit7Cisg
ICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIxZnYiLCBpbmRleCwgdiwgMSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMWZ2KEdDM0R1
aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQoreworICAgIHZlcnRleEF0
dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMWZ2IiwgaW5kZXgsIHYsIHNpemUsIDEpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmSW1w
bCgidmVydGV4QXR0cmliMmYiLCBpbmRleCwgMiwgdjAsIHYxLCAwLjBmLCAxLjBmKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQg
aW5kZXgsIEZsb2F0MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRl
eEF0dHJpYjJmdiIsIGluZGV4LCB2LCAyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0Mz
RHNpemVpIHNpemUpCit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZnYi
LCBpbmRleCwgdiwgc2l6ZSwgMik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0
IHYxLCBHQzNEZmxvYXQgdjIpCit7CisgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJp
YjNmIiwgaW5kZXgsIDMsIHYwLCB2MSwgdjIsIDEuMGYpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFy
cmF5KiB2KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliM2Z2IiwgaW5k
ZXgsIHYsIDMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0
dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sK
KyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNmdiIsIGluZGV4LCB2LCBzaXpl
LCAzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWI0
ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2
MiwgR0MzRGZsb2F0IHYzKQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0
ZiIsIGluZGV4LCA0LCB2MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkq
IHYpCit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZnYiLCBpbmRleCwg
diwgNCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmli
NGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQoreworICAg
IHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgsIHYsIHNpemUsIDQp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYlBvaW50
ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xl
YW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
dmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4
QXR0cmliUG9pbnRlciIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6ZSA+IDQgfHwgc3RyaWRlIDwgMCB8fCBzdHJp
ZGUgPiAyNTUgfHwgb2Zmc2V0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiYmFk
IHNpemUsIHN0cmlkZSBvciBvZmZzZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBp
ZiAoIW1fYm91bmRBcnJheUJ1ZmZlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwg
Im5vIGJvdW5kIEFSUkFZX0JVRkZFUiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8v
IERldGVybWluZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRoZSBib3VuZCBidWZmZXIgY2FuIGhv
bGQsIGdpdmVuIHRoZSBvZmZzZXQsIHNpemUsIHR5cGUgYW5kIHN0cmlkZQorICAgIHVuc2lnbmVk
IHR5cGVTaXplID0gc2l6ZUluQnl0ZXModHlwZSk7CisgICAgaWYgKCF0eXBlU2l6ZSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
dmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoKHN0cmlkZSAlIHR5cGVTaXplKSB8fCAoc3RhdGljX2Nhc3Q8R0MzRGlu
dHB0cj4ob2Zmc2V0KSAlIHR5cGVTaXplKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVy
IiwgInN0cmlkZSBvciBvZmZzZXQgbm90IHZhbGlkIGZvciB0eXBlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVudCA9IHNpemUgKiB0eXBlU2l6
ZTsKKyAgICAKKyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYlN0
YXRlKGluZGV4LCBieXRlc1BlckVsZW1lbnQsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlk
ZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbV9ib3VuZEFycmF5QnVmZmVyKTsK
KyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5v
cm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmlld3BvcnQoR0MzRGludCB4LCBHQzNE
aW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0
ZVNpemUoInZpZXdwb3J0Iiwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgIHJldHVybjsKKyAgICBt
X2NvbnRleHQtPnZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6TG9zdENvbnRleHRNb2RlIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJsb3NlQ29udGV4dCIsICJjb250ZXh0IGFscmVhZHkgbG9z
dCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dEdyb3VwLT5s
b3NlQ29udGV4dEdyb3VwKG1vZGUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMb3N0Q29udGV4
dE1vZGUgbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgbV9jb250ZXh0TG9zdCA9IHRydWU7CisgICAgbV9jb250ZXh0TG9zdE1vZGUg
PSBtb2RlOworICAgIAorICAgIGlmIChtb2RlID09IFJlYWxMb3N0Q29udGV4dCkgeworICAgICAg
ICAvLyBJbmZvcm0gdGhlIGVtYmVkZGVyIHRoYXQgYSBsb3N0IGNvbnRleHQgd2FzIHJlY2VpdmVk
LiBJbiByZXNwb25zZSwgdGhlIGVtYmVkZGVyIG1pZ2h0CisgICAgICAgIC8vIGRlY2lkZSB0byB0
YWtlIGFjdGlvbiBzdWNoIGFzIGFza2luZyB0aGUgdXNlciBmb3IgcGVybWlzc2lvbiB0byB1c2Ug
V2ViR0wgYWdhaW4uCisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjYW52YXMoKS0+ZG9jdW1l
bnQoKS5mcmFtZSgpKQorICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLmRpZExv
c2VXZWJHTENvbnRleHQobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldEdyYXBoaWNzUmVz
ZXRTdGF0dXNBUkIoKSk7CisgICAgfQorICAgIAorICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVj
dHMoKTsKKyAgICAKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8vIE1ha2Ug
YWJzb2x1dGVseSBzdXJlIHdlIGRvIG5vdCByZWZlciB0byBhbiBhbHJlYWR5LWRlbGV0ZWQgdGV4
dHVyZSBvciBmcmFtZWJ1ZmZlci4KKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRUZXh0dXJl
MkRCaW5kaW5nKDApOworICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmlu
ZGluZygwKTsKKyAgICB9CisgICAgCisgICAgLy8gVGhlcmUgaXMgbm8gZGlyZWN0IHdheSB0byBj
bGVhciBlcnJvcnMgZnJvbSBhIEdMIGltcGxlbWVudGF0aW9uIGFuZAorICAgIC8vIGxvb3Bpbmcg
dW50aWwgZ2V0RXJyb3IoKSBiZWNvbWVzIE5PX0VSUk9SIG1pZ2h0IGNhdXNlIGFuIGluZmluaXRl
IGxvb3AgaWYKKyAgICAvLyB0aGUgZHJpdmVyIG9yIGNvbnRleHQgaW1wbGVtZW50YXRpb24gaGFk
IGEgYnVnLiBTbywgbG9vcCBhIHJlYXNvbmFibHkKKyAgICAvLyBsYXJnZSBudW1iZXIgb2YgdGlt
ZXMgdG8gY2xlYXIgYW55IGV4aXN0aW5nIGVycm9ycy4KKyAgICBmb3IgKGludCBpID0gMDsgaSA8
IDEwMDsgKytpKSB7CisgICAgICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIENv
bnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5ID0gKG1vZGUgPT0gUmVhbExvc3RDb250ZXh0
KSA/IERpc3BsYXlJbkNvbnNvbGU6IERvbnREaXNwbGF5SW5Db25zb2xlOworICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0wsICJsb3NlQ29u
dGV4dCIsICJjb250ZXh0IGxvc3QiLCBkaXNwbGF5KTsKKyAgICAKKyAgICAvLyBEb24ndCBhbGxv
dyByZXN0b3JhdGlvbiB1bmxlc3MgdGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXMgYm90aCBiZWVu
CisgICAgLy8gZGlzcGF0Y2hlZCBhbmQgaXRzIGRlZmF1bHQgYmVoYXZpb3IgcHJldmVudGVkLgor
ICAgIG1fcmVzdG9yZUFsbG93ZWQgPSBmYWxzZTsKKyAgICAKKyAgICAvLyBBbHdheXMgZGVmZXIg
dGhlIGRpc3BhdGNoIG9mIHRoZSBjb250ZXh0IGxvc3QgZXZlbnQsIHRvIGltcGxlbWVudAorICAg
IC8vIHRoZSBzcGVjIGJlaGF2aW9yIG9mIHF1ZXVlaW5nIGEgdGFzay4KKyAgICBtX2Rpc3BhdGNo
Q29udGV4dExvc3RFdmVudFRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpmb3JjZVJlc3RvcmVDb250ZXh0KCkKK3sKKyAgICBpZiAoIWlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJjb250
ZXh0IG5vdCBsb3N0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFt
X3Jlc3RvcmVBbGxvd2VkKSB7CisgICAgICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBTeW50
aGV0aWNMb3N0Q29udGV4dCkKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlc3RvcmVDb250ZXh0IiwgImNvbnRleHQg
cmVzdG9yYXRpb24gbm90IGFsbG93ZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBpZiAoIW1fcmVzdG9yZVRpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fcmVzdG9yZVRp
bWVyLnN0YXJ0T25lU2hvdCgwKTsKK30KKworUGxhdGZvcm1MYXllciogV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6cGxhdGZvcm1MYXllcigpIGNvbnN0Cit7CisgICAgcmV0dXJuICghaXNDb250
ZXh0TG9zdCgpICYmICFtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pID8gbV9jb250ZXh0LT5w
bGF0Zm9ybUxheWVyKCkgOiAwOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0KQoreworICAgIGlm
IChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBtX2NvbnRleHRHcm91cC0+cmVtb3ZlT2JqZWN0KG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6YWRkU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBv
YmplY3QpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBtX2NvbnRl
eHRHcm91cC0+YWRkT2JqZWN0KG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6cmVtb3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqIG9iamVjdCkK
K3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgbV9jb250ZXh0T2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9i
amVjdCogb2JqZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBBU1NFUlQoIWlzQ29udGV4dExvc3QoKSk7CisgICAg
bV9jb250ZXh0T2JqZWN0cy5hZGQob2JqZWN0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCkKK3sKKyAgICBpZiAobV9pc1Bl
bmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgd2hpbGUg
KG1fY29udGV4dE9iamVjdHMuc2l6ZSgpID4gMCkgeworICAgICAgICBIYXNoU2V0PFdlYkdMQ29u
dGV4dE9iamVjdCo+OjppdGVyYXRvciBpdCA9IG1fY29udGV4dE9iamVjdHMuYmVnaW4oKTsKKyAg
ICAgICAgKCppdCktPmRldGFjaENvbnRleHQoKTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6aGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c3RvcCgpCit7
CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikgeworICAgICAgICBmb3JjZUxvc3RDb250ZXh0KFN5bnRoZXRpY0xvc3RDb250ZXh0KTsKKyAg
ICAgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgfQorfQorCitXZWJHTEdldElu
Zm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0Qm9vbGVhblBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSkKK3sKKyAgICBHQzNEYm9vbGVhbiB2YWx1ZSA9IDA7CisgICAgbV9jb250ZXh0LT5n
ZXRCb29sZWFudihwbmFtZSwgJnZhbHVlKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRp
Y19jYXN0PGJvb2w+KHZhbHVlKSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7Cisg
ICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9XUklURU1BU0spIHsKKyAg
ICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygwLCAw
KTsKKyAgICB9CisgICAgR0MzRGJvb2xlYW4gdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250ZXh0
LT5nZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOworICAgIGJvb2wgYm9vbFZhbHVlWzRdOworICAg
IGZvciAoaW50IGlpID0gMDsgaWkgPCA0OyArK2lpKQorICAgICAgICBib29sVmFsdWVbaWldID0g
c3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbaWldKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGJv
b2xWYWx1ZSwgNCk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBHQzNEZmxvYXQgdmFs
dWUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2KHBuYW1lLCAmdmFsdWUpOworICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6Z2V0SW50UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdD
M0RpbnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsICZ2YWx1
ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Cit9CisKK1dlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRVbnNpZ25lZEludFBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSkKK3sKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHZhbHVlKSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7
CisgICAgR0MzRGZsb2F0IHZhbHVlWzRdID0gezB9OworICAgIG1fY29udGV4dC0+Z2V0RmxvYXR2
KHBuYW1lLCB2YWx1ZSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKKyAgICBzd2l0Y2ggKHBu
YW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9QT0lOVF9TSVpFX1JB
TkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfTElORV9XSURUSF9SQU5H
RToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9SQU5HRToKKyAgICAgICAgbGVu
Z3RoID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxF
TkRfQ09MT1I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6
CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxv
YXQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworfQorCitXZWJHTEdldEluZm8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSkKK3sKKyAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OworICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAg
IHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVklFV1BP
UlRfRElNUzoKKyAgICAgICAgbGVuZ3RoID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VklFV1BPUlQ6CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgfQorICAgIHJldHVybiBXZWJH
TEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBib29sIHByZXBhcmVUb0RyYXcpCit7CisgICAgYm9vbCByZXNl
dEFjdGl2ZVVuaXQgPSBmYWxzZTsKKyAgICBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25G
bGFnIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNp
b25GbGFnPigobV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVF
eHRlbnNpb25GbG9hdExpbmVhckVuYWJsZWQgOiAwKSB8IChtX29lc1RleHR1cmVIYWxmRmxvYXRM
aW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25IYWxmRmxvYXRMaW5lYXJFbmFi
bGVkIDogMCkpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaWkgPSAwOyBpaSA8IG1fdGV4dHVy
ZVVuaXRzLnNpemUoKTsgKytpaSkgeworICAgICAgICBpZiAoKG1fdGV4dHVyZVVuaXRzW2lpXS50
ZXh0dXJlMkRCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nLT5u
ZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCisgICAgICAgICAgICB8fCAobV90ZXh0
dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0u
dGV4dHVyZUN1YmVNYXBCaW5kaW5nLT5uZWVkVG9Vc2VCbGFja1RleHR1cmUoZXh0ZW5zaW9ucykp
KSB7CisgICAgICAgICAgICBpZiAoaWkgIT0gbV9hY3RpdmVUZXh0dXJlVW5pdCkgeworICAgICAg
ICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShpaSk7CisgICAgICAgICAgICAgICAg
cmVzZXRBY3RpdmVVbml0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzZXRBY3Rp
dmVVbml0KSB7CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlpKTsK
KyAgICAgICAgICAgICAgICByZXNldEFjdGl2ZVVuaXQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4MkQ7CisgICAgICAgICAgICBXZWJHTFRleHR1
cmUqIHRleEN1YmVNYXA7CisgICAgICAgICAgICBpZiAocHJlcGFyZVRvRHJhdykgeworICAgICAg
ICAgICAgICAgIFN0cmluZyBtc2coU3RyaW5nKCJ0ZXh0dXJlIGJvdW5kIHRvIHRleHR1cmUgdW5p
dCAiKSArIFN0cmluZzo6bnVtYmVyKGlpKQorICAgICAgICAgICAgICAgICAgICArICIgaXMgbm90
IHJlbmRlcmFibGUuIEl0IG1heWJlIG5vbi1wb3dlci1vZi0yIGFuZCBoYXZlIGluY29tcGF0aWJs
ZSB0ZXh0dXJlIGZpbHRlcmluZyBvciBpcyBub3QgJ3RleHR1cmUgY29tcGxldGUnLCIKKyAgICAg
ICAgICAgICAgICAgICAgKyAiIG9yIGl0IGlzIGEgZmxvYXQvaGFsZi1mbG9hdCB0eXBlIHdpdGgg
bGluZWFyIGZpbHRlcmluZyBhbmQgd2l0aG91dCB0aGUgcmVsZXZhbnQgZmxvYXQvaGFsZi1mbG9h
dCBsaW5lYXIgZXh0ZW5zaW9uIGVuYWJsZWQuIik7CisgICAgICAgICAgICAgICAgcHJpbnRHTFdh
cm5pbmdUb0NvbnNvbGUoZnVuY3Rpb25OYW1lLCBtc2cudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICAgICAgdGV4MkQgPSBtX2JsYWNrVGV4dHVyZTJELmdldCgpOworICAgICAgICAgICAgICAg
IHRleEN1YmVNYXAgPSBtX2JsYWNrVGV4dHVyZUN1YmVNYXAuZ2V0KCk7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIHRleDJEID0gbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1
cmUyREJpbmRpbmcuZ2V0KCk7CisgICAgICAgICAgICAgICAgdGV4Q3ViZU1hcCA9IG1fdGV4dHVy
ZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcuZ2V0KCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmcgJiYgbV90
ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShl
eHRlbnNpb25zKSkKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8odGV4MkQpKTsKKyAgICAgICAg
ICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4
dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVy
ZShleHRlbnNpb25zKSkKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBvYmplY3RPclplcm8odGV4Q3ViZU1h
cCkpOworICAgICAgICB9CisgICAgfQorICAgIGlmIChyZXNldEFjdGl2ZVVuaXQpCisgICAgICAg
IG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShtX2FjdGl2ZVRleHR1cmVVbml0KTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMx
eDEoKQoreworICAgIHVuc2lnbmVkIGNoYXIgYmxhY2tbXSA9IHswLCAwLCAwLCAyNTV9OworICAg
IG1fYmxhY2tUZXh0dXJlMkQgPSBjcmVhdGVUZXh0dXJlKCk7CisgICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9ibGFja1RleHR1cmUyRC0+
b2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgYmxhY2spOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDApOworICAgIG1fYmxhY2tUZXh0dXJlQ3ViZU1hcCA9IGNyZWF0ZVRleHR1
cmUoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX0NVQkVfTUFQLCBtX2JsYWNrVGV4dHVyZUN1YmVNYXAtPm9iamVjdCgpKTsKKyAgICBtX2Nv
bnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgIDAsIEdy
YXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwg
YmxhY2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9ORUdBVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwg
MSwKKyAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ksIDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQt
PnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2sp
OworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAg
ICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1osIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCAxLCAxLAorICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCAwKTsKK30KKworYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZm
ZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LAorICAgIEdDM0Rl
bnVtIGNvbG9yQnVmZmVyRm9ybWF0KQoreworICAgIHVuc2lnbmVkIG5lZWQgPSBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdCh0ZXhJbnRlcm5hbEZvcm1hdCk7CisgICAg
dW5zaWduZWQgaGF2ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5Rm9ybWF0
KGNvbG9yQnVmZmVyRm9ybWF0KTsKKyAgICByZXR1cm4gKG5lZWQgJiBoYXZlKSA9PSBuZWVkOwor
fQorCitHQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVm
ZmVyQ29sb3JGb3JtYXQoKQoreworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2Zy
YW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVy
QmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsKKyAgICBpZiAobV9hdHRyaWJ1dGVzLmFs
cGhhKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CisgICAgcmV0dXJu
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7Cit9CisKK2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKQoreworICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgIHJldHVy
biBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJXaWR0aCgpOworICAgIHJldHVy
biBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpIDogbV9j
b250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7Cit9CisKK2ludCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCkKK3sK
KyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9i
amVjdCgpKQorICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVm
ZmVySGVpZ2h0KCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZl
ci0+c2l6ZSgpLmhlaWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6
ZSgpLmhlaWdodCgpOworfQorCitXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
ZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQoreworICAgIFdlYkdMVGV4
dHVyZSogdGV4dHVyZSA9IG51bGxwdHI7CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGlmICghdXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQOgorICAgICAgICBpZiAodXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9h
Y3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFy
Z2V0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBpZiAoIXRleHR1cmUp
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gdGV4dHVyZSIpOworICAgIHJldHVybiB0ZXh0dXJl
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlTG9jYXRpb25M
ZW5ndGgoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sK
KyAgICBjb25zdCB1bnNpZ25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoID0gMjU2OworICAgIGlm
IChzdHJpbmcubGVuZ3RoKCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJsb2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZVNpemUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEaW50IHgsIEdD
M0RpbnQgeSkKK3sKKyAgICBpZiAoeCA8IDAgfHwgeSA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
InNpemUgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVTdHJpbmco
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIGlm
ICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
InN0cmluZyBub3QgQVNDSUkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQorewor
ICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlmIChtX3dlYmdsRGVw
dGhUZXh0dXJlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImRlcHRoIHRl
eHR1cmUgZm9ybWF0cyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGZvcm1hdCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAodHlwZSkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUZsb2F0KQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpIQUxG
X0ZMT0FUX09FUzoKKyAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUhhbGZGbG9hdCkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
SU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICBpZiAobV93
ZWJnbERlcHRoVGV4dHVyZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29tYmluYXRp
b24gb2YgZm9ybWF0IGFuZCB0eXBlIGlzIHN1cHBvcnRlZC4KKyAgICBzd2l0Y2ggKGZvcm1hdCkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkxVTUlOQU5DRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFO
Q0VfQUxQSEE6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAor
ICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMp
IHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBmb3JtYXQiKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNQorICAgICAgICAgICAgJiYgdHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdHlwZSBmb3IgUkdCIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkE6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVF80XzRfNF80CisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9TSE9SVF81XzVfNV8xCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6
SEFMRl9GTE9BVF9PRVMpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBl
IGZvciBSR0JBIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBP
TkVOVDoKKyAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIGZvcm1hdC4gREVQVEhfQ09NUE9ORU5UIG5vdCBlbmFibGVkIik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUCisgICAgICAgICAgICAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0eXBlIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxldmVsID4gMCkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJlIDAgZm9yIERFUFRIX0NPTVBP
TkVOVCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgor
ICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1cmUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgZm9ybWF0LiBERVBUSF9TVEVOQ0lMIG5vdCBlbmFibGVkIik7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdHlwZSBmb3IgREVQVEhfU1RFTkNJTCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGV2ZWwgPiAwKSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhfU1RFTkNJTCBmb3Jt
YXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVsIDwgMCkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJEOgorICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhUZXh0dXJlTGV2ZWwpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgaWYgKGxldmVs
ID49IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxl
dmVsIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIG9ubHkgY2hlY2tz
IGlmIGxldmVsIGlzIGxlZ2FsLCBzbyB3ZSByZXR1cm4gdHJ1ZSBhbmQgZG9uJ3QKKyAgICAvLyBn
ZW5lcmF0ZSBJTlZBTElEX0VOVU0gaWYgdGFyZ2V0IGlzIGlsbGVnYWwuCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5j
UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgVGV4RnVuY1ZhbGlkYXRp
b25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAorICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwKKyAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAgIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSkKK3sKKyAgICAvLyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRh
dGUgdGhlIGZvcm1hdCBhbmQgdHlwZSBjb21iaW5hdGlvbi4KKyAgICAvLyBUaGUgdGV4SW1hZ2Uy
RCBlbnRyeSBwb2ludHMgdGFraW5nIEhUTUxJbWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKKyAgICAv
LyB0ZW1wb3JhcnkgZGF0YSBiYXNlZCBvbiB0aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJl
IGxlZ2FsLgorICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5h
bWUsIGZvcm1hdCwgdHlwZSwgbGV2ZWwpIHx8ICF2YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5jdGlv
bk5hbWUsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
aWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBv
ciBoZWlnaHQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAg
R0MzRGludCBtYXhUZXh0dXJlU2l6ZUZvckxldmVsID0gcG93KDIuMCwgbV9tYXhUZXh0dXJlTGV2
ZWwgLSAxIC0gbGV2ZWwpOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKKyAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNp
emVGb3JMZXZlbCB8fCBoZWlnaHQgPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAg
ICBpZiAoZnVuY3Rpb25UeXBlICE9IFRleFN1YkltYWdlMkQgJiYgd2lkdGggIT0gaGVpZ2h0KSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1hcCIpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIE5vIG5lZWQg
dG8gY2hlY2sgaGVpZ2h0IGhlcmUuIEZvciB0ZXhJbWFnZSB3aWR0aCA9PSBoZWlnaHQuCisgICAg
ICAgIC8vIEZvciB0ZXhTdWJJbWFnZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB3aGVuIGNoZWNraW5n
IHlvZmZzZXQgKyBoZWlnaHQgaXMgaW4gcmFuZ2UuCisgICAgICAgIGlmICh3aWR0aCA+IG1heFRl
eHR1cmVTaXplRm9yTGV2ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWln
aHQgb3V0IG9mIHJhbmdlIGZvciBjdWJlIG1hcCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
CisgICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFt
ZSwgImZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIAorICAgIGlmIChib3JkZXIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJvcmRlciAh
PSAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5j
RGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2ZWwsCisgICAgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwKKyAgICBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywKKyAgICBOdWxsRGlzcG9zaXRp
b24gZGlzcG9zaXRpb24pCit7CisgICAgaWYgKCFwaXhlbHMpIHsKKyAgICAgICAgaWYgKGRpc3Bv
c2l0aW9uID09IE51bGxBbGxvd2VkKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJubyBwaXhlbHMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBm
b3JtYXQsIHR5cGUsIGxldmVsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdmFs
aWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkg
IT0gSlNDOjpUeXBlVWludDgpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJ
R05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIGlmIChwaXhlbHMtPmdldFR5
cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlw
ZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50MTZBcnJheSIpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAorICAg
ICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlRmxvYXQzMikgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IEZs
b2F0MzJBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTOiAv
LyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgICAgIC8vIEFzIHBlciB0aGUgc3BlY2lmaWNh
dGlvbiwgQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSBudWxsIHdoZW4KKyAgICAgICAgLy8gT0VT
X3RleHR1cmVfaGFsZl9mbG9hdCBpcyBlbmFibGVkLgorICAgICAgICBpZiAocGl4ZWxzKSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgSEFMRl9GTE9BVF9PRVMgYnV0IEFycmF5QnVm
ZmVyVmlldyBpcyBub3QgTlVMTCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzUmVxdWlyZWQ7Cisg
ICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZv
cm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVz
UmVxdWlyZWQsIDApOworICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJS
T1IpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0aW9uTmFtZSwgImlu
dmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7Cisg
ICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKSB7CisgICAgICAgICAgICBlcnJvciA9
IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwg
aGVpZ2h0LCAxLCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKKyAgICAgICAgICAgIGlmIChwaXhl
bHMtPmJ5dGVMZW5ndGgoKSA9PSB0b3RhbEJ5dGVzUmVxdWlyZWQpIHsKKyAgICAgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVz
dCB3aXRoIFVOUEFDS19BTElHTk1FTlQgPiAxIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiQXJy
YXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0Iik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1h
dCkKK3sKKyAgICByZXR1cm4gbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9y
bWF0KTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNvbXBy
ZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZm
ZXJWaWV3KiBwaXhlbHMpCit7CisgICAgaWYgKCFwaXhlbHMpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
Im5vIHBpeGVscyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3aWR0
aCA8IDAgfHwgaGVpZ2h0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0
IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVk
IGJ5dGVzUmVxdWlyZWQgPSAwOworICAgIAorICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JfQU1EOgorICAgICAgICB7CisgICAgICAgIGNv
bnN0IGludCBrQmxvY2tTaXplID0gODsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0g
NDsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgIGludCBudW1C
bG9ja3NBY3Jvc3MgPSAod2lkdGggKyBrQmxvY2tXaWR0aCAtIDEpIC8ga0Jsb2NrV2lkdGg7Cisg
ICAgICAgIGludCBudW1CbG9ja3NEb3duID0gKGhlaWdodCArIGtCbG9ja0hlaWdodCAtIDEpIC8g
a0Jsb2NrSGVpZ2h0OworICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICog
bnVtQmxvY2tzRG93biAqIGtCbG9ja1NpemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgorICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDoKKyAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9FWFBMSUNJVF9BTFBIQV9BTUQ6
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfSU5URVJQT0xBVEVE
X0FMUEhBX0FNRDoKKyAgICAgICAgeworICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDE2
OworICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OworICAgICAgICBjb25zdCBpbnQg
a0Jsb2NrSGVpZ2h0ID0gNDsKKyAgICAgICAgaW50IG51bUJsb2Nrc0Fjcm9zcyA9ICh3aWR0aCAr
IGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxvY2tXaWR0aDsKKyAgICAgICAgaW50IG51bUJsb2Nrc0Rv
d24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxvY2tIZWlnaHQ7CisgICAgICAg
IGJ5dGVzUmVxdWlyZWQgPSBudW1CbG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3duICoga0Jsb2Nr
U2l6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgICAgIHsKKyAgICAgICAgY29u
c3QgaW50IGtCbG9ja1NpemUgPSA4OworICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA4
OworICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gODsKKyAgICAgICAgYnl0ZXNSZXF1
aXJlZCA9IChzdGQ6Om1heCh3aWR0aCwga0Jsb2NrV2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBr
QmxvY2tIZWlnaHQpICogNCArIDcpIC8ga0Jsb2NrU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYx
X0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBW
MV9JTUc6CisgICAgICAgIHsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OworICAg
ICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSAxNjsKKyAgICAgICAgY29uc3QgaW50IGtCbG9j
a0hlaWdodCA9IDg7CisgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtC
bG9ja1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDIgKyA3KSAvIGtC
bG9ja1NpemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICAKKyAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgIT0gYnl0ZXNSZXF1aXJlZCkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibGVuZ3RoIG9mIEFycmF5QnVmZmVyVmlldyBpcyBub3QgY29y
cmVjdCBmb3IgZGltZW5zaW9ucyIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKKyAgICAgICAg
Y29uc3QgR0MzRHNpemVpIGtCbG9ja1dpZHRoID0gNDsKKyAgICAgICAgY29uc3QgR0MzRHNpemVp
IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgIGNvbnN0IEdDM0RpbnQgbWF4VGV4dHVyZVNpemUg
PSB0YXJnZXQgPyBtX21heFRleHR1cmVTaXplIDogbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7Cisg
ICAgICAgIGNvbnN0IEdDM0RzaXplaSBtYXhDb21wcmVzc2VkRGltZW5zaW9uID0gbWF4VGV4dHVy
ZVNpemUgPj4gbGV2ZWw7CisgICAgICAgIGJvb2wgd2lkdGhWYWxpZCA9IChsZXZlbCAmJiB3aWR0
aCA9PSAxKSB8fCAobGV2ZWwgJiYgd2lkdGggPT0gMikgfHwgKCEod2lkdGggJSBrQmxvY2tXaWR0
aCkgJiYgd2lkdGggPD0gbWF4Q29tcHJlc3NlZERpbWVuc2lvbik7CisgICAgICAgIGJvb2wgaGVp
Z2h0VmFsaWQgPSAobGV2ZWwgJiYgaGVpZ2h0ID09IDEpIHx8IChsZXZlbCAmJiBoZWlnaHQgPT0g
MikgfHwgKCEoaGVpZ2h0ICUga0Jsb2NrSGVpZ2h0KSAmJiBoZWlnaHQgPD0gbWF4Q29tcHJlc3Nl
ZERpbWVuc2lvbik7CisgICAgICAgIGlmICghd2lkdGhWYWxpZCB8fCAhaGVpZ2h0VmFsaWQpIHsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxl
dmVsIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9Q
VlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9Q
VlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFf
UFZSVENfNEJQUFYxX0lNRzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JB
X1BWUlRDXzJCUFBWMV9JTUc6CisgICAgICAgIC8vIEhlaWdodCBhbmQgd2lkdGggbXVzdCBiZSBw
b3dlcnMgb2YgMi4KKyAgICAgICAgaWYgKCh3aWR0aCAmICh3aWR0aCAtIDEpKSB8fCAoaGVpZ2h0
ICYgKGhlaWdodCAtIDEpKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBo
ZWlnaHQgaW52YWxpZCBmb3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LAorICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqIHRleCkKK3sKKyAgICBpZiAoeG9mZnNldCA8IDAgfHwg
eW9mZnNldCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgb3IgeW9mZnNldCA8IDAi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGZvcm1h
dCkgeworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhU
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoK
KyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQ6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDVfRVhUOiB7Cisg
ICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7CisgICAgICAgIGNvbnN0IGludCBrQmxv
Y2tIZWlnaHQgPSA0OworICAgICAgICBpZiAoKHhvZmZzZXQgJSBrQmxvY2tXaWR0aCkgfHwgKHlv
ZmZzZXQgJSBrQmxvY2tIZWlnaHQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZz
ZXQgb3IgeW9mZnNldCBub3QgbXVsdGlwbGUgb2YgNCIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGlmICh3aWR0aCAtIHhvZmZzZXQgPiB0ZXgtPmdldFdp
ZHRoKHRhcmdldCwgbGV2ZWwpCisgICAgICAgICAgICB8fCBoZWlnaHQgLSB5b2Zmc2V0ID4gdGV4
LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
ZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhm
dW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7CisgICAg
fQorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1H
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1H
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lN
RzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9J
TUc6IHsKKyAgICAgICAgaWYgKHhvZmZzZXQgfHwgeW9mZnNldCkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJ4b2Zmc2V0IGFuZCB5b2Zmc2V0IG11c3QgYmUgemVybyIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICh3aWR0aCAhPSB0ZXgtPmdl
dFdpZHRoKHRhcmdldCwgbGV2ZWwpCisgICAgICAgICAgICB8fCBoZWlnaHQgIT0gdGV4LT5nZXRI
ZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZGltZW5z
aW9ucyBtdXN0IG1hdGNoIGV4aXN0aW5nIGxldmVsIik7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVu
c2lvbnMoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQp
OworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQor
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlRHJhd01vZGUoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPSU5UUzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5FX1NUUklQOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVf
TE9PUDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FUzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpUUklBTkdMRV9TVFJJUDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpUUklBTkdMRV9GQU46CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIGRyYXcgbW9kZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBpZiAobV9zdGVuY2lsTWFzayAhPSBtX3N0ZW5j
aWxNYXNrQmFjayB8fCBtX3N0ZW5jaWxGdW5jUmVmICE9IG1fc3RlbmNpbEZ1bmNSZWZCYWNrIHx8
IG1fc3RlbmNpbEZ1bmNNYXNrICE9IG1fc3RlbmNpbEZ1bmNNYXNrQmFjaykgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgImZyb250IGFuZCBiYWNrIHN0ZW5jaWxzIHNldHRpbmdzIGRvIG5vdCBtYXRj
aCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlU3RlbmNpbEZ1bmMoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmdW5jKQoreworICAgIHN3aXRjaCAoZnVu
YykgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FVkVSOgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxFU1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVRVUFMOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUFURVI6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6R0VRVUFMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVRVUFMOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PVEVRVUFMOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkFMV0FZUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAiaW52YWxpZCBmdW5jdGlvbiIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnByaW50R0xFcnJvclRv
Q29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFtX251bUdMRXJyb3Jz
VG9Db25zb2xlQWxsb3dlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC0tbV9udW1HTEVy
cm9yc1RvQ29uc29sZUFsbG93ZWQ7CisgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKG1lc3NhZ2Up
OworICAgIAorICAgIGlmICghbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQpCisgICAgICAg
IHByaW50V2FybmluZ1RvQ29uc29sZSgiV2ViR0w6IHRvbyBtYW55IGVycm9ycywgbm8gbW9yZSBl
cnJvcnMgd2lsbCBiZSByZXBvcnRlZCB0byB0aGUgY29uc29sZSBmb3IgdGhpcyBjb250ZXh0LiIp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnByaW50V2FybmluZ1RvQ29u
c29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKCFjYW52YXMoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhbnZhcygpLT5kb2N1bWVudCgpLmFkZENvbnNvbGVNZXNzYWdlKE1l
c3NhZ2VTb3VyY2U6OlJlbmRlcmluZywgTWVzc2FnZUxldmVsOjpXYXJuaW5nLCBtZXNzYWdlKTsK
K30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUZyYW1lYnVmZmVy
RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGF0dGFjaG1lbnQpCit7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKKyAgICAgICAgICAgICYmIGF0dGFjaG1l
bnQgPiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAKKyAgICAgICAgICAgICYm
IGF0dGFjaG1lbnQgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0FUVEFDSE1FTlQwICsgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0dGFjaG1lbnQiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlKQoreworICAgIHN3aXRjaCAobW9kZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZVTkNfQUREOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZVTkNfU1VCVFJBQ1Q6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19SRVZF
UlNFX1NVQlRSQUNUOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUJsZW5kRnVuY0Zh
Y3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdDM0RlbnVtIGRz
dCkKK3sKKyAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0NPTE9S
IHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0NPTE9SKQor
ICAgICAgICAmJiAoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8fCBk
c3QgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpCisgICAg
ICAgIHx8ICgoZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9DT0xPUiB8fCBkc3Qg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xPUikKKyAgICAgICAg
JiYgKHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwgc3JjID09IEdy
YXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpKSkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJpbmNvbXBhdGlibGUgc3JjIGFuZCBkc3QiKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQ2FwYWJpbGl0eShjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtIGNhcCkKK3sKKyAgICBzd2l0Y2ggKGNhcCkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkNVTExfRkFDRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9URVNUOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRJVEhFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNB
TVBMRV9BTFBIQV9UT19DT1ZFUkFHRToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1Q
TEVfQ09WRVJBR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVDoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBjYXBhYmlsaXR5
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFy
cmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQoreworICAgIGlmICghdikgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUs
IGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXpl
KTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXpl
KQoreworICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4
UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5s
ZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCB2b2lkKiB2LCBHQzNEc2l6
ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICByZXR1cm4gdmFsaWRh
dGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwg
diwgc2l6ZSwgcmVxdWlyZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkK
K3sKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYt
Pmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29s
ZWFuIHRyYW5zcG9zZSwgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXplaSByZXF1aXJl
ZE1pblNpemUpCit7CisgICAgaWYgKCFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJsb2NhdGlvbiBpcyBub3QgZnJvbSBjdXJyZW50IHByb2dyYW0iKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYg
KHRyYW5zcG9zZSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAidHJhbnNwb3NlIG5vdCBGQUxTRSIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChzaXplIDwgcmVxdWlyZWRNaW5T
aXplIHx8IChzaXplICUgcmVxdWlyZWRNaW5TaXplKSkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW52
YWxpZCBzaXplIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK1dlYkdMQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0
ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0gMDsK
KyAgICBzd2l0Y2ggKHRhcmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1F
TlRfQVJSQVlfQlVGRkVSOgorICAgICAgICBidWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpLmdldCgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVI6CisgICAgICAgIGJ1ZmZlciA9IG1f
Ym91bmRBcnJheUJ1ZmZlci5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gYnVm
ZmVyIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBzd2l0Y2ggKHVzYWdl
KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RSRUFNX0RSQVc6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVc6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RFlOQU1JQ19EUkFXOgorICAgICAgICByZXR1cm4gYnVmZmVyOworICAgIH0KKyAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5h
bWUsICJpbnZhbGlkIHVzYWdlIik7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGlmICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJubyBpbWFnZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIGNvbnN0IFVSTCYgdXJsID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3BvbnNlKCkudXJs
KCk7CisgICAgaWYgKHVybC5pc051bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxp
ZCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7CisgICAg
ICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlSFRNTENhbnZhc0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIWNhbnZhcyB8
fCAhY2FudmFzLT5idWZmZXIoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gY2FudmFzIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oY2Fu
dmFzKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworI2lmIEVOQUJMRShWSURFTykKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIGlmICghdmlkZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRoKCkgfHwgIXZp
ZGVvLT52aWRlb0hlaWdodCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyB2aWRlbyIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKHZpZGVv
KSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZJbXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBlY3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0Mz
RGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGluZGV4ID49IG1f
bWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGlu
ZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KKyAgICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFu
dCgpKSB7CisgICAgICAgIHN3aXRjaCAoZXhwZWN0ZWRTaXplKSB7CisgICAgICAgIGNhc2UgMToK
KyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZl
cnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgMzoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHYw
LCB2MSwgdjIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAg
ICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIFZlcnRleEF0dHJpYlZhbHVl
JiBhdHRyaWJWYWx1ZSA9IG1fdmVydGV4QXR0cmliVmFsdWVbaW5kZXhdOworICAgIGF0dHJpYlZh
bHVlLnZhbHVlWzBdID0gdjA7CisgICAgYXR0cmliVmFsdWUudmFsdWVbMV0gPSB2MTsKKyAgICBh
dHRyaWJWYWx1ZS52YWx1ZVsyXSA9IHYyOworICAgIGF0dHJpYlZhbHVlLnZhbHVlWzNdID0gdjM7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliZnZJbXBs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSog
diwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJubyBhcnJheSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHZlcnRleEF0dHJpYmZ2
SW1wbChmdW5jdGlvbk5hbWUsIGluZGV4LCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCBleHBlY3Rl
ZFNpemUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJp
YmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXYp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKHNpemUgPCBleHBlY3RlZFNpemUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgc2l6ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChpbmRleCA+PSBtX21h
eFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcg
dmVydGV4QXR0cmliMCB2YWx1ZXMuCisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQo
KSkgeworICAgICAgICBzd2l0Y2ggKGV4cGVjdGVkU2l6ZSkgeworICAgICAgICBjYXNlIDE6Cisg
ICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmdihpbmRleCwgdik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWIyZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
MzoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliM2Z2KGluZGV4LCB2KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBtX2NvbnRleHQt
PnZlcnRleEF0dHJpYjRmdihpbmRleCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKyAgICBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBtX3ZlcnRleEF0
dHJpYlZhbHVlW2luZGV4XTsKKyAgICBhdHRyaWJWYWx1ZS5pbml0VmFsdWUoKTsKKyAgICBmb3Ig
KGludCBpaSA9IDA7IGlpIDwgZXhwZWN0ZWRTaXplOyArK2lpKQorICAgICAgICBhdHRyaWJWYWx1
ZS52YWx1ZVtpaV0gPSB2W2lpXTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojppbml0VmVydGV4QXR0cmliMCgpCit7CisgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKyAgICAKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBj
cmVhdGVCdWZmZXIoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5vYmplY3QoKSk7CisgICAg
bV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOworICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAw
KTsKKyAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyOworICAg
IG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAw
KTsKKyAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworICAgIG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVl
WzBdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXSA9IDAuMGY7Cisg
ICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSAwLjBmOworICAgIG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKKyAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmls
bCA9IGZhbHNlOworICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSBmYWxzZTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzaW11bGF0ZVZlcnRleEF0dHJpYjAoR0Mz
RHNpemVpIG51bVZlcnRleCkKK3sKKyAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
OjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dFZlcnRleEF0dHJpYlN0YXRlKDApOworICAgIGNvbnN0IFZlcnRleEF0dHJpYlZhbHVlJiBhdHRy
aWJWYWx1ZSA9IG1fdmVydGV4QXR0cmliVmFsdWVbMF07CisgICAgaWYgKCFtX2N1cnJlbnRQcm9n
cmFtKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgYm9vbCB1c2luZ1ZlcnRleEF0dHJpYjAg
PSBtX2N1cnJlbnRQcm9ncmFtLT5pc1VzaW5nVmVydGV4QXR0cmliMCgpOworICAgIGlmICh1c2lu
Z1ZlcnRleEF0dHJpYjApCisgICAgICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSB0cnVl
OworICAgIGlmIChzdGF0ZS5lbmFibGVkICYmIHVzaW5nVmVydGV4QXR0cmliMCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghdXNpbmdWZXJ0ZXhBdHRyaWIwICYmICFtX3ZlcnRleEF0
dHJpYjBVc2VkQmVmb3JlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV92ZXJ0ZXhBdHRy
aWIwVXNlZEJlZm9yZSA9IHRydWU7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci0+b2JqZWN0KCkp
OworICAgIEdDM0RzaXplaXB0ciBidWZmZXJEYXRhU2l6ZSA9IChudW1WZXJ0ZXggKyAxKSAqIDQg
KiBzaXplb2YoR0MzRGZsb2F0KTsKKyAgICBpZiAoYnVmZmVyRGF0YVNpemUgPiBtX3ZlcnRleEF0
dHJpYjBCdWZmZXJTaXplKSB7CisgICAgICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBidWZmZXJEYXRhU2l6ZSwgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OkRZTkFNSUNfRFJBVyk7CisgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUg
PSBidWZmZXJEYXRhU2l6ZTsKKyAgICAgICAgbV9mb3JjZUF0dHJpYjBCdWZmZXJSZWZpbGwgPSB0
cnVlOworICAgIH0KKyAgICBpZiAodXNpbmdWZXJ0ZXhBdHRyaWIwCisgICAgICAgICYmIChtX2Zv
cmNlQXR0cmliMEJ1ZmZlclJlZmlsbAorICAgICAgICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVb
MF0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMF0KKyAgICAgICAgICAgIHx8IGF0dHJp
YlZhbHVlLnZhbHVlWzFdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzFdCisgICAgICAg
ICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVsyXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVsyXQorICAgICAgICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVbM10gIT0gbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyVmFsdWVbM10pKSB7CisgICAgICAgICAgICBhdXRvIGJ1ZmZlckRhdGEgPSBzdGQ6
Om1ha2VfdW5pcXVlPEdDM0RmbG9hdFtdPigobnVtVmVydGV4ICsgMSkgKiA0KTsKKyAgICAgICAg
ICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAxOyArK2lpKSB7Cisg
ICAgICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDRdID0gYXR0cmliVmFsdWUudmFsdWVbMF07
CisgICAgICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAxXSA9IGF0dHJpYlZhbHVlLnZh
bHVlWzFdOworICAgICAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBhdHRyaWJW
YWx1ZS52YWx1ZVsyXTsKKyAgICAgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNCArIDNdID0g
YXR0cmliVmFsdWUudmFsdWVbM107CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXJWYWx1ZVswXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOworICAgICAgICAg
ICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsxXTsK
KyAgICAgICAgICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJdID0gYXR0cmliVmFsdWUu
dmFsdWVbMl07CisgICAgICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSA9IGF0
dHJpYlZhbHVlLnZhbHVlWzNdOworICAgICAgICAgICAgbV9mb3JjZUF0dHJpYjBCdWZmZXJSZWZp
bGwgPSBmYWxzZTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YShHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwLCBidWZmZXJEYXRhU2l6ZSwgYnVmZmVyRGF0YS5n
ZXQoKSk7CisgICAgICAgIH0KKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwg
NCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAwKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpCit7CisgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2Jq
ZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKyAgICBpZiAoc3RhdGUuYnVmZmVyQmluZGlu
ZyAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG9iamVjdE9yWmVybyhzdGF0ZS5i
dWZmZXJCaW5kaW5nLmdldCgpKSk7CisgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9p
bnRlcigwLCBzdGF0ZS5zaXplLCBzdGF0ZS50eXBlLCBzdGF0ZS5ub3JtYWxpemVkLCBzdGF0ZS5v
cmlnaW5hbFN0cmlkZSwgc3RhdGUub2Zmc2V0KTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5iaW5k
QnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG9iamVjdE9yWmVybyhtX2Jv
dW5kQXJyYXlCdWZmZXIuZ2V0KCkpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjpkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKQoreworICAgIFJlZlB0cjxXZWJHTENvbnRl
eHRFdmVudD4gZXZlbnQgPSBXZWJHTENvbnRleHRFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53
ZWJnbGNvbnRleHRsb3N0RXZlbnQsIGZhbHNlLCB0cnVlLCAiIik7CisgICAgY2FudmFzKCktPmRp
c3BhdGNoRXZlbnQoZXZlbnQpOworICAgIG1fcmVzdG9yZUFsbG93ZWQgPSBldmVudC0+ZGVmYXVs
dFByZXZlbnRlZCgpOworICAgIGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRl
eHQgJiYgbV9yZXN0b3JlQWxsb3dlZCkKKyAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVT
aG90KDApOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1heWJlUmVzdG9y
ZUNvbnRleHQoKQoreworICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKKyAgICBpZiAoIW1fY29u
dGV4dExvc3QpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBUaGUgcmVuZGVyaW5nIGNv
bnRleHQgaXMgbm90IHJlc3RvcmVkIHVubGVzcyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUK
KyAgICAvLyB3ZWJnbGNvbnRleHRsb3N0IGV2ZW50IHdhcyBwcmV2ZW50ZWQgZWFybGllci4KKyAg
ICAvLworICAgIC8vIEJlY2F1c2Ugb2YgdGhlIHdheSBtX3Jlc3RvcmVUaW1lciBpcyBzZXQgdXAg
Zm9yIHJlYWwgdnMuIHN5bnRoZXRpYyBsb3N0CisgICAgLy8gY29udGV4dCBldmVudHMsIHdlIGRv
bid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyB0ZXN0IHNob3J0LWNpcmN1aXRpbmcKKyAgICAv
LyB0aGUgcmV0cnkgbG9vcCBmb3IgcmVhbCBjb250ZXh0IGxvc3QgZXZlbnRzLgorICAgIGlmICgh
bV9yZXN0b3JlQWxsb3dlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGludCBjb250ZXh0
TG9zdFJlYXNvbiA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0
U3RhdHVzQVJCKCk7CisgICAgCisgICAgc3dpdGNoIChjb250ZXh0TG9zdFJlYXNvbikgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOgorICAgICAgICAvLyBUaGUgR3JhcGhp
Y3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IGZ1bGx5CisgICAgICAgIC8vIHN1
cHBvcnQgR0xfQVJCX3JvYnVzdG5lc3Mgc2VtYW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhl
CisgICAgICAgIC8vIFdFQkdMX2xvc2VfY29udGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVu
IHVzZWQgdG8gZm9yY2UKKyAgICAgICAgLy8gYSBsb3N0IGNvbnRleHQuCisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpHVUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6CisgICAg
ICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250
ZXh0IHdhcworICAgICAgICAvLyBndWlsdHkgb2YgY2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQu
CisgICAgICAgIHByaW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBv
biB0aGUgcGFnZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3Jp
bmcgdGhlIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpJTk5PQ0VOVF9DT05URVhUX1JFU0VUX0FSQjoKKyAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRo
ZSBjb250ZXh0IHRvIGJlIHJlc3RvcmVkLgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6VU5LTk9XTl9DT05URVhUX1JFU0VUX0FSQjoKKyAgICAgICAgLy8gV2Fybi4gSWRl
YWxseSwgcHJvbXB0IHRoZSB1c2VyIHRlbGxpbmcgdGhlbSB0aGF0IFdlYkdMCisgICAgICAgIC8v
IGNvbnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQg
dG8KKyAgICAgICAgLy8gcmVzZXQgYW5kIGFzayB0aGVtIHdoZXRoZXIgdGhleSB3YW50IHRvIGNv
bnRpbnVlIHJ1bm5pbmcKKyAgICAgICAgLy8gdGhlIGNvbnRlbnQuIE9ubHkgaWYgdGhleSBzYXkg
InllcyIgc2hvdWxkIHdlIHN0YXJ0CisgICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0
aGUgY29udGV4dC4KKyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJH
TCBjb250ZW50IG9uIHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJk
IHRvIHJlc2V0Iik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBGcmFtZSogZnJh
bWUgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpOworICAgIGlmICghZnJhbWUpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIWZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5hbGxv
d1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdMRW5hYmxlZCgpKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2
aWV3KQorICAgICAgICByZXR1cm47CisgICAgU2Nyb2xsVmlldyogcm9vdCA9IHZpZXctPnJvb3Qo
KTsKKyAgICBpZiAoIXJvb3QpCisgICAgICAgIHJldHVybjsKKyAgICBIb3N0V2luZG93KiBob3N0
V2luZG93ID0gcm9vdC0+aG9zdFdpbmRvdygpOworICAgIGlmICghaG9zdFdpbmRvdykKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dChH
cmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKG1fYXR0cmlidXRlcywgaG9zdFdpbmRvdykpOworICAg
IGlmICghY29udGV4dCkgeworICAgICAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExv
c3RDb250ZXh0KQorICAgICAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KHNlY29u
ZHNCZXR3ZWVuUmVzdG9yZUF0dGVtcHRzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgLy8g
VGhpcyBsaWtlbHkgc2hvdWxkbid0IGhhcHBlbiBidXQgaXMgdGhlIGJlc3Qgd2F5IHRvIHJlcG9y
dCBpdCB0byB0aGUgV2ViR0wgYXBwLgorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiIiwgImVycm9yIHJlc3RvcmluZyBj
b250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgLy8gQ29uc3RydWN0
IGEgbmV3IGRyYXdpbmcgYnVmZmVyIHdpdGggdGhlIG5ldyBHcmFwaGljc0NvbnRleHQzRC4KKyAg
ICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+ZGlzY2Fy
ZFJlc291cmNlcygpOworICAgICAgICBEcmF3aW5nQnVmZmVyOjpQcmVzZXJ2ZURyYXdpbmdCdWZm
ZXIgcHJlc2VydmUgPSBtX2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyID8gRHJhd2lu
Z0J1ZmZlcjo6UHJlc2VydmUgOiBEcmF3aW5nQnVmZmVyOjpEaXNjYXJkOworICAgICAgICBEcmF3
aW5nQnVmZmVyOjpBbHBoYVJlcXVpcmVtZW50IGFscGhhID0gbV9hdHRyaWJ1dGVzLmFscGhhID8g
RHJhd2luZ0J1ZmZlcjo6QWxwaGEgOiBEcmF3aW5nQnVmZmVyOjpPcGFxdWU7CisgICAgICAgIG1f
ZHJhd2luZ0J1ZmZlciA9IERyYXdpbmdCdWZmZXI6OmNyZWF0ZShjb250ZXh0LmdldCgpLCBtX2Ry
YXdpbmdCdWZmZXItPnNpemUoKSwgcHJlc2VydmUsIGFscGhhKTsKKyAgICAgICAgbV9kcmF3aW5n
QnVmZmVyLT5iaW5kKCk7CisgICAgfQorICAgIAorICAgIG1fY29udGV4dCA9IGNvbnRleHQ7Cisg
ICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOworICAgIHNldHVwRmxhZ3MoKTsKKyAgICBpbml0aWFs
aXplTmV3Q29udGV4dCgpOworICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4
dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dHJlc3RvcmVkRXZlbnQsIGZh
bHNlLCB0cnVlLCAiIikpOworfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
ZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmIHRleHQpIGNvbnN0Cit7CisgICAgaWYgKHRleHQu
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBXVEY6OmVtcHR5U3RyaW5nKCk7CisgICAgcmV0dXJu
IHRleHQ7Cit9CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2Fj
aGU6OkxSVUltYWdlQnVmZmVyQ2FjaGUoaW50IGNhcGFjaXR5KQorICAgIDogbV9idWZmZXJzKHN0
ZDo6bWFrZV91bmlxdWU8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPltdPihjYXBhY2l0eSkp
CisgICAgLCBtX2NhcGFjaXR5KGNhcGFjaXR5KQoreworfQorCitJbWFnZUJ1ZmZlciogV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbV9j
YXBhY2l0eTsgKytpKSB7CisgICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNbaV0u
Z2V0KCk7CisgICAgICAgIGlmICghYnVmKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlm
IChidWYtPmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICBidWJibGVUb0Zyb250KGkpOworICAgICAgICByZXR1cm4gYnVmOworICAgIH0KKyAgICAK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHRlbXAgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKHNpemUsIDEpOworICAgIGlmICghdGVtcCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgaSA9IHN0ZDo6bWluKG1fY2FwYWNpdHkgLSAxLCBpKTsKKyAgICBtX2J1ZmZlcnNbaV0gPSBX
VEY6Om1vdmUodGVtcCk7CisgICAgCisgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fYnVmZmVyc1tp
XS5nZXQoKTsKKyAgICBidWJibGVUb0Zyb250KGkpOworICAgIHJldHVybiBidWY7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxl
VG9Gcm9udChpbnQgaWR4KQoreworICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAwOyAtLWkpCisg
ICAgICAgIG1fYnVmZmVyc1tpXS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKK30KKworbmFtZXNwYWNl
IHsKKyAgICAKKyAgICBTdHJpbmcgR2V0RXJyb3JTdHJpbmcoR0MzRGVudW0gZXJyb3IpCisgICAg
eworICAgICAgICBzd2l0Y2ggKGVycm9yKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTToKKyAgICAgICAgICAgIHJldHVybiAiSU5WQUxJRF9FTlVNIjsKKyAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRToKKyAgICAgICAgICAg
IHJldHVybiAiSU5WQUxJRF9WQUxVRSI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OOgorICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX09QRVJBVElP
TiI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlk6CisgICAg
ICAgICAgICByZXR1cm4gIk9VVF9PRl9NRU1PUlkiOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKKyAgICAgICAgICAgIHJldHVy
biAiSU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iOworICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0w6CisgICAgICAgICAgICByZXR1cm4gIkNPTlRF
WFRfTE9TVF9XRUJHTCI7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gU3Ry
aW5nOjpmb3JtYXQoIldlYkdMIEVSUk9SKCUwNHgpIiwgZXJyb3IpOworICAgICAgICB9CisgICAg
fQorICAgIAorfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IsIGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJl
ZmVyZW5jZSBkaXNwbGF5KQoreworICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xl
ICYmIGRpc3BsYXkgPT0gRGlzcGxheUluQ29uc29sZSkgeworICAgICAgICBTdHJpbmcgc3RyID0g
U3RyaW5nKCJXZWJHTDogIikgKyBHZXRFcnJvclN0cmluZyhlcnJvcikgKyAgIjogIiArIFN0cmlu
ZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0cmluZyhkZXNjcmlwdGlvbik7CisgICAgICAgIHBy
aW50R0xFcnJvclRvQ29uc29sZShzdHIpOworICAgIH0KKyAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKGVycm9yKTsKK30KKworCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3Qg
Y2hhciogZGVzY3JpcHRpb24pCit7CisgICAgaWYgKG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNv
bGUpIHsKKyAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIpICsgU3RyaW5nKGZ1
bmN0aW9uTmFtZSkgKyAiOiAiICsgU3RyaW5nKGRlc2NyaXB0aW9uKTsKKyAgICAgICAgcHJpbnRH
TEVycm9yVG9Db25zb2xlKHN0cik7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmFwcGx5U3RlbmNpbFRlc3QoKQoreworICAgIGJvb2wgaGF2ZVN0ZW5jaWxCdWZm
ZXIgPSBmYWxzZTsKKyAgICAKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAg
IGhhdmVTdGVuY2lsQnVmZmVyID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmhhc1N0ZW5jaWxCdWZm
ZXIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+
IGF0dHJpYnV0ZXMgPSBnZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgICAgICBoYXZlU3RlbmNp
bEJ1ZmZlciA9IGF0dHJpYnV0ZXMtPnN0ZW5jaWwoKTsKKyAgICB9CisgICAgZW5hYmxlT3JEaXNh
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QsCisgICAgICAgIG1fc3RlbmNpbEVu
YWJsZWQgJiYgaGF2ZVN0ZW5jaWxCdWZmZXIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmVuYWJsZU9yRGlzYWJsZShHQzNEZW51bSBjYXBhYmlsaXR5LCBib29sIGVuYWJs
ZSkKK3sKKyAgICBpZiAoZW5hYmxlKQorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShjYXBhYmls
aXR5KTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXBhYmlsaXR5KTsK
K30KKworSW50U2l6ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGFtcGVkQ2FudmFzU2l6
ZSgpCit7CisgICAgcmV0dXJuIEludFNpemUoY2xhbXAoY2FudmFzKCktPndpZHRoKCksIDEsIG1f
bWF4Vmlld3BvcnREaW1zWzBdKSwKKyAgICAgICAgY2xhbXAoY2FudmFzKCktPmhlaWdodCgpLCAx
LCBtX21heFZpZXdwb3J0RGltc1sxXSkpOworfQorCitHQzNEaW50IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldE1heERyYXdCdWZmZXJzKCkKK3sKKyAgICBpZiAoIXN1cHBvcnRzRHJhd0J1
ZmZlcnMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heERyYXdCdWZmZXJzKQor
ICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX0RSQVdfQlVG
RkVSU19FWFQsICZtX21heERyYXdCdWZmZXJzKTsKKyAgICBpZiAoIW1fbWF4Q29sb3JBdHRhY2ht
ZW50cykKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9D
T0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMpOworICAgIC8vIFdF
QkdMX2RyYXdfYnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVOVFMgPj0gTUFYX0RS
QVdfQlVGRkVSUy4KKyAgICByZXR1cm4gc3RkOjptaW4obV9tYXhEcmF3QnVmZmVycywgbV9tYXhD
b2xvckF0dGFjaG1lbnRzKTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OjpnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkKK3sKKyAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZl
cnMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMp
CisgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1Jf
QVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICByZXR1cm4gbV9t
YXhDb2xvckF0dGFjaG1lbnRzOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnNldEJhY2tEcmF3QnVmZmVyKEdDM0RlbnVtIGJ1ZikKK3sKKyAgICBtX2JhY2tEcmF3QnVmZmVy
ID0gYnVmOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc3RvcmVDdXJy
ZW50RnJhbWVidWZmZXIoKQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgYmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZWJ1ZmZlckJpbmRp
bmcuZ2V0KCksIGVjKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZXN0
b3JlQ3VycmVudFRleHR1cmUyRCgpCit7CisgICAgRXhjZXB0aW9uQ29kZSBlYzsKKyAgICBiaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlVW5pdHNbbV9h
Y3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKSwgZWMpOworfQorCitib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN1cHBvcnRzRHJhd0J1ZmZlcnMoKQoreworICAg
IGlmICghbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZCkgeworICAgICAgICBt
X2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2VkID0gdHJ1ZTsKKyAgICAgICAgbV9k
cmF3QnVmZmVyc1N1cHBvcnRlZCA9IFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBvcnRlZCh0aGlzKTsK
KyAgICB9CisgICAgcmV0dXJuIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQ7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5c0luc3RhbmNlZChHQzNEZW51bSBtb2Rl
LCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpCit7
CisgICAgaWYgKCF2YWxpZGF0ZURyYXdBcnJheXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2Rl
LCBmaXJzdCwgY291bnQsIHByaW1jb3VudCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBp
ZiAocHJpbWNvdW50IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRyYXdBcnJheXNJbnN0YW5jZWQiLCAicHJpbWNvdW50
IDwgMCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghcHJpbWNvdW50
KSB7CisgICAgICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgCisgICAgYm9vbCB2ZXJ0ZXhB
dHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCisg
ICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmly
c3QgKyBjb3VudCAtIDEpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAg
Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgdHJ1ZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKHByaW1jb3VudCk7CisgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzSW5z
dGFuY2VkKG1vZGUsIGZpcnN0LCBjb3VudCwgcHJpbWNvdW50KTsKKyAgICBpZiAoIWlzR0xFUzJD
b21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3Rh
dGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RT
dHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5z
dGFuY2VkIiwgZmFsc2UpOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBt
b2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdD
M0RzaXplaSBwcmltY291bnQpCit7CisgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOworICAg
IGlmICghdmFsaWRhdGVEcmF3RWxlbWVudHMoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIG1vZGUs
IGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRzKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChwcmltY291bnQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwg
InByaW1jb3VudCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAo
IXByaW1jb3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICAKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIAorICAgIGJv
b2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBs
aWFudCgpKSB7CisgICAgICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgICAgICB2YWxpZGF0
ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpLCBudW1FbGVtZW50cyk7CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBz
aW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOworICAgIH0KKyAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0Vs
ZW1lbnRzSW5zdGFuY2VkIiwgdHJ1ZSk7CisgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHNJbnN0
YW5jZWQobW9kZSwgY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCks
IHByaW1jb3VudCk7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmli
MFNpbXVsYXRlZCkKKyAgICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVs
YXRpb24oKTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4
dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgZmFsc2UpOworICAgIG1h
cmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCit7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRy
aWJEaXZpc29yIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0cmliRGl2
aXNvcihpbmRleCwgZGl2aXNvcik7CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJEaXZpc29y
KGluZGV4LCBkaXZpc29yKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4MDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VfaAor
I2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlX2gKKworCisjaW5jbHVkZSAiQWN0aXZl
RE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1
ZGUgIkRyYXdpbmdCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXZWJH
TEdldEluZm8uaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8cnVudGltZS9GbG9hdDMy
QXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0ludDMyQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3MgQU5H
TEVJbnN0YW5jZWRBcnJheXM7CitjbGFzcyBFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM7Citj
bGFzcyBFWFRTaGFkZXJUZXh0dXJlTE9EOworY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKK2NsYXNz
IEhUTUxWaWRlb0VsZW1lbnQ7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKK2NsYXNzIEltYWdlRGF0YTsK
K2NsYXNzIEludFNpemU7CitjbGFzcyBPRVNTdGFuZGFyZERlcml2YXRpdmVzOworY2xhc3MgT0VT
VGV4dHVyZUZsb2F0OworY2xhc3MgT0VTVGV4dHVyZUZsb2F0TGluZWFyOworY2xhc3MgT0VTVGV4
dHVyZUhhbGZGbG9hdDsKK2NsYXNzIE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI7CitjbGFzcyBP
RVNWZXJ0ZXhBcnJheU9iamVjdDsKK2NsYXNzIE9FU0VsZW1lbnRJbmRleFVpbnQ7CitjbGFzcyBX
ZWJHTEFjdGl2ZUluZm87CitjbGFzcyBXZWJHTEJ1ZmZlcjsKK2NsYXNzIFdlYkdMQ29udGV4dEdy
b3VwOworY2xhc3MgV2ViR0xDb250ZXh0T2JqZWN0OworY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQzsKK2NsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzsKK2NsYXNzIFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVTM1RDOworY2xhc3MgV2ViR0xDb250ZXh0QXR0cmlidXRlczsKK2Ns
YXNzIFdlYkdMRGVidWdSZW5kZXJlckluZm87CitjbGFzcyBXZWJHTERlYnVnU2hhZGVyczsKK2Ns
YXNzIFdlYkdMRGVwdGhUZXh0dXJlOworY2xhc3MgV2ViR0xEcmF3QnVmZmVyczsKK2NsYXNzIFdl
YkdMRXh0ZW5zaW9uOworY2xhc3MgV2ViR0xGcmFtZWJ1ZmZlcjsKK2NsYXNzIFdlYkdMTG9zZUNv
bnRleHQ7CitjbGFzcyBXZWJHTE9iamVjdDsKK2NsYXNzIFdlYkdMUHJvZ3JhbTsKK2NsYXNzIFdl
YkdMUmVuZGVyYnVmZmVyOworY2xhc3MgV2ViR0xTaGFkZXI7CitjbGFzcyBXZWJHTFNoYXJlZE9i
amVjdDsKK2NsYXNzIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0OworY2xhc3MgV2ViR0xUZXh0
dXJlOworY2xhc3MgV2ViR0xVbmlmb3JtTG9jYXRpb247CitjbGFzcyBXZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTOworCit0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCitjbGFzcyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlIDogcHVibGljIENhbnZhc1JlbmRlcmluZ0NvbnRleHQsIHB1Ymxp
YyBBY3RpdmVET01PYmplY3QgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZT4gY3JlYXRlKEhUTUxDYW52YXNFbGVtZW50KiwgV2Vi
R0xDb250ZXh0QXR0cmlidXRlcyosIGNvbnN0IFN0cmluZyYpOworCisgICAgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZShIVE1MQ2FudmFzRWxlbWVudCosIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKEhUTUxDYW52YXNFbGVtZW50
KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzKTsKKyAgICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKCk7CisgICAg
CisgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9
CisjaWYgUExBVEZPUk0oV0lOKQorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYWNjZWxlcmF0ZWQg
M2QgY2FudmFzIG9uIFdpbmRvd3MuCisgICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorI2Vsc2UKKyAgICB2aXJ0dWFsIGJvb2wg
aXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyNlbmRpZgor
ICAgIAorICAgIGludCBkcmF3aW5nQnVmZmVyV2lkdGgoKSBjb25zdDsKKyAgICBpbnQgZHJhd2lu
Z0J1ZmZlckhlaWdodCgpIGNvbnN0OworICAgIAorICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNE
ZW51bSB0ZXh0dXJlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBhdHRhY2hTaGFkZXIoV2Vi
R0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBiaW5k
QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0
YXJnZXQsIFdlYkdMQnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmluZEZyYW1l
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRl
cmJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVt
IHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmxlbmRD
b2xvcihHQzNEZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNE
ZmxvYXQgYWxwaGEpOworICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKTsKKyAg
ICB2b2lkIGJsZW5kRXF1YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBt
b2RlQWxwaGEpOworICAgIHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVt
IGRmYWN0b3IpOworICAgIHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBH
QzNEZW51bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7Cisg
ICAgCisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNpemUs
IEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBidWZmZXJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZm
ZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5QnVm
ZmVyKiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNl
cHRpb25Db2RlJik7CisgICAgCisgICAgR0MzRGVudW0gY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
QzNEZW51bSB0YXJnZXQpOworICAgIHZvaWQgY2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spOworICAg
IHZvaWQgY2xlYXJDb2xvcihHQzNEZmxvYXQgcmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9h
dCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpOworICAgIHZvaWQgY2xlYXJEZXB0aChHQzNEZmxvYXQp
OworICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQpOworICAgIHZvaWQgY29sb3JNYXNrKEdD
M0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Ri
b29sZWFuIGFscGhhKTsKKyAgICB2b2lkIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqLCBFeGNl
cHRpb25Db2RlJik7CisgICAgCisgICAgdm9pZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZp
ZXcqIGRhdGEpOworICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVm
ZmVyVmlldyogZGF0YSk7CisgICAgCisgICAgdm9pZCBjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlcik7CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKyAgICAKKyAgICBQ
YXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBjcmVhdGVCdWZmZXIoKTsKKyAgICBQYXNzUmVmUHRyPFdl
YkdMRnJhbWVidWZmZXI+IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgUGFzc1JlZlB0cjxXZWJH
TFByb2dyYW0+IGNyZWF0ZVByb2dyYW0oKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVm
ZmVyPiBjcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBj
cmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQ
dHI8V2ViR0xUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CisgICAgCisgICAgdm9pZCBjdWxsRmFj
ZShHQzNEZW51bSBtb2RlKTsKKyAgICAKKyAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZl
ciopOworICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciopOworICAg
IHZvaWQgZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKKyAgICB2b2lkIGRlbGV0ZVJlbmRl
cmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciopOworICAgIHZvaWQgZGVsZXRlU2hhZGVyKFdlYkdM
U2hhZGVyKik7CisgICAgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSopOworICAgIAor
ICAgIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtKTsKKyAgICB2b2lkIGRlcHRoTWFzayhHQzNEYm9v
bGVhbik7CisgICAgdm9pZCBkZXB0aFJhbmdlKEdDM0RmbG9hdCB6TmVhciwgR0MzRGZsb2F0IHpG
YXIpOworICAgIHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKiwg
RXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXApOworICAgIHZv
aWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdD
M0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZHJhd0VsZW1lbnRzKEdD
M0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9m
ZnNldCwgRXhjZXB0aW9uQ29kZSYpOworICAgIAorICAgIHZvaWQgZW5hYmxlKEdDM0RlbnVtIGNh
cCk7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZmluaXNoKCk7CisgICAgdm9pZCBmbHVzaCgpOworICAg
IHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBh
dHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVy
KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdM
VGV4dHVyZSosIEdDM0RpbnQgbGV2ZWwsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGZyb250
RmFjZShHQzNEZW51bSBtb2RlKTsKKyAgICB2b2lkIGdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRh
cmdldCk7CisgICAgCisgICAgUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdldEFjdGl2ZUF0
dHJpYihXZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAg
IFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3Jh
bSosIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBnZXRBdHRhY2hl
ZFNoYWRlcnMoV2ViR0xQcm9ncmFtKiwgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIEdDM0RpbnQgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFt
KiwgY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0QnVmZmVyUGFyYW1l
dGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAg
ICBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IGdldENvbnRleHRBdHRyaWJ1dGVz
KCk7CisgICAgR0MzRGVudW0gZ2V0RXJyb3IoKTsKKyAgICBXZWJHTEV4dGVuc2lvbiogZ2V0RXh0
ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSk7CisgICAgV2ViR0xHZXRJbmZvIGdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1l
bnQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdl
dFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYkdMR2V0
SW5mbyBnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSosIEdDM0RlbnVtIHBuYW1lLCBF
eGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3Jh
bSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBXZWJHTEdldEluZm8gZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiwgR0MzRGVu
dW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhX
ZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVy
UHJlY2lzaW9uRm9ybWF0PiBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVy
VHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFN0cmlu
ZyBnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7CisgICAgVmVj
dG9yPFN0cmluZz4gZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOworICAgIFdlYkdMR2V0SW5mbyBn
ZXRUZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIFdlYkdMR2V0SW5mbyBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8
V2ViR0xVbmlmb3JtTG9jYXRpb24+IGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBj
b25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdldFZlcnRl
eEF0dHJpYihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBsb25nIGxvbmcgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNE
ZW51bSBwbmFtZSk7CisgICAgCisgICAgdm9pZCBoaW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gbW9kZSk7CisgICAgR0MzRGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xCdWZmZXIqKTsKKyAgICBi
b29sIGlzQ29udGV4dExvc3QoKSBjb25zdDsKKyAgICBHQzNEYm9vbGVhbiBpc0VuYWJsZWQoR0Mz
RGVudW0gY2FwKTsKKyAgICBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZm
ZXIqKTsKKyAgICBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7CisgICAgR0Mz
RGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKKyAgICBHQzNEYm9v
bGVhbiBpc1NoYWRlcihXZWJHTFNoYWRlciopOworICAgIEdDM0Rib29sZWFuIGlzVGV4dHVyZShX
ZWJHTFRleHR1cmUqKTsKKyAgICAKKyAgICB2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQpOworICAg
IHZvaWQgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOworICAgIHZvaWQg
cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxvYXQgdW5pdHMpOworICAgIHZv
aWQgcmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNE
c2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVy
VmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCByZWxlYXNlU2hhZGVyQ29t
cGlsZXIoKTsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KTsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RmbG9hdCB2YWx1ZSwgR0MzRGJvb2xlYW4g
aW52ZXJ0KTsKKyAgICB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisgICAgdm9pZCBzaGFkZXJTb3VyY2UoV2ViR0xT
aGFkZXIqLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBzdGVuY2ls
RnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzayk7CisgICAgdm9p
ZCBzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0Rp
bnQgcmVmLCBHQzNEdWludCBtYXNrKTsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrKEdDM0R1aW50KTsK
KyAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFz
ayk7CisgICAgdm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdD
M0RlbnVtIHpwYXNzKTsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7CisgICAgCisg
ICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsCisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgQXJyYXlCdWZmZXJWaWV3KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4SW1h
Z2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LAorICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSos
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2lmIEVOQUJMRShW
SURFTykKKyAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisg
ICAgCisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5h
bWUsIEdDM0RmbG9hdCBwYXJhbSk7CisgICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOworICAgIAorICAgIHZvaWQgdGV4
U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsCisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZm
ZXJWaWV3KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
LAorICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSosIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50KiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9u
Q29kZSYpOworI2lmIEVOQUJMRShWSURFTykKKyAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCwKKyAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVt
ZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisgICAgCisgICAgdm9pZCB1bmlmb3JtMWYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0x
aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVu
aWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2
LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTJmKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9h
dCB5LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgdW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGlu
dCB4LCBHQzNEaW50IHksIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0yaXYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRp
b25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2b2lkIHVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0zZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtM2koY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGlu
dCB6LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1
bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQg
eCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdywgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTRm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0Mz
RHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm00aShjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
aW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTRpdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYp
OworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhj
ZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2
YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm1N
YXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIHVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXpl
LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMy
QXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4NGZ2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNw
b3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIAorICAgIHZvaWQgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYp
OworICAgIAorICAgIHZvaWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCB4KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFy
cmF5KiB2YWx1ZXMpOworICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmli
MmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSk7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKKyAg
ICB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMs
IEdDM0RzaXplaSBzaXplKTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KTsKKyAgICB2b2lkIHZlcnRl
eEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgIHZv
aWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0Mz
RHNpemVpIHNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KTsKKyAgICB2
b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMp
OworICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZh
bHVlcywgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcihHQzNE
dWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3Jt
YWxpemVkLAorICAgICAgICBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNl
cHRpb25Db2RlJik7CisgICAgCisgICAgdm9pZCB2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQg
eSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKyAgICAKKyAgICAvLyBXRUJL
SVRfbG9zZV9jb250ZXh0IHN1cHBvcnQKKyAgICBlbnVtIExvc3RDb250ZXh0TW9kZSB7CisgICAg
ICAgIC8vIExvc3QgY29udGV4dCBvY2N1cnJlZCBhdCB0aGUgZ3JhcGhpY3Mgc3lzdGVtIGxldmVs
LgorICAgICAgICBSZWFsTG9zdENvbnRleHQsCisgICAgICAgIAorICAgICAgICAvLyBMb3N0IGNv
bnRleHQgcHJvdm9rZWQgYnkgV0VCS0lUX2xvc2VfY29udGV4dC4KKyAgICAgICAgU3ludGhldGlj
TG9zdENvbnRleHQKKyAgICB9OworICAgIHZvaWQgZm9yY2VMb3N0Q29udGV4dChMb3N0Q29udGV4
dE1vZGUpOworICAgIHZvaWQgZm9yY2VSZXN0b3JlQ29udGV4dCgpOworICAgIHZvaWQgbG9zZUNv
bnRleHRJbXBsKExvc3RDb250ZXh0TW9kZSk7CisgICAgCisgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Cisg
ICAgV2ViR0xDb250ZXh0R3JvdXAqIGNvbnRleHRHcm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dEdyb3VwLmdldCgpOyB9CisgICAgdmlydHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxh
eWVyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwg
aW50IGhlaWdodCk7CisgICAgCisgICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7CisgICAg
dmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkgb3ZlcnJpZGU7Cisg
ICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRh
KCk7CisgICAgCisgICAgdm9pZCByZW1vdmVTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3Qq
KTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0Kik7Cisg
ICAgCisgICAgdW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0cmlicygpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4VmVydGV4QXR0cmliczsgfQorICAgIAorICAgIC8vIEFOR0xFX2luc3RhbmNlZF9hcnJheXMg
ZXh0ZW5zaW9uIGZ1bmN0aW9ucy4KKyAgICB2b2lkIGRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVu
dW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNv
dW50KTsKKyAgICB2b2lkIGRyYXdFbGVtZW50c0luc3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNE
c2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBw
cmltY291bnQpOworICAgIHZvaWQgdmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwg
R0MzRHVpbnQgZGl2aXNvcik7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBXZWJH
TERyYXdCdWZmZXJzOworICAgIGZyaWVuZCBjbGFzcyBXZWJHTEZyYW1lYnVmZmVyOworICAgIGZy
aWVuZCBjbGFzcyBXZWJHTE9iamVjdDsKKyAgICBmcmllbmQgY2xhc3MgT0VTVmVydGV4QXJyYXlP
YmplY3Q7CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMRGVidWdTaGFkZXJzOworICAgIGZyaWVuZCBj
bGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOworICAgIGZyaWVuZCBjbGFzcyBXZWJHTENv
bXByZXNzZWRUZXh0dXJlUFZSVEM7CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDOworICAgIGZyaWVuZCBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1l
c3NhZ2VDYWxsYmFjazsKKyAgICBmcmllbmQgY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
UzsKKyAgICAKKyAgICB2b2lkIGluaXRpYWxpemVOZXdDb250ZXh0KCk7CisgICAgdm9pZCBzZXR1
cEZsYWdzKCk7CisgICAgCisgICAgLy8gQWN0aXZlRE9NT2JqZWN0CisgICAgdmlydHVhbCBib29s
IGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBz
dG9wKCkgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBhZGRTaGFyZWRPYmplY3QoV2ViR0xTaGFy
ZWRPYmplY3QqKTsKKyAgICB2b2lkIGFkZENvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2JqZWN0
Kik7CisgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CisgICAgCisgICAgdm9p
ZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB2b2lkIG1hcmtDb250ZXh0Q2hhbmdl
ZCgpOworICAgIAorICAgIC8vIFF1ZXJ5IHdoZXRoZXIgaXQgaXMgYnVpbHQgb24gdG9wIG9mIGNv
bXBsaWFudCBHTEVTMiBpbXBsZW1lbnRhdGlvbi4KKyAgICBib29sIGlzR0xFUzJDb21wbGlhbnQo
KSB7IHJldHVybiBtX2lzR0xFUzJDb21wbGlhbnQ7IH0KKyAgICAvLyBRdWVyeSBpZiB0aGUgR0wg
aW1wbGVtZW50YXRpb24gaXMgTlBPVCBzdHJpY3QuCisgICAgYm9vbCBpc0dMRVMyTlBPVFN0cmlj
dCgpIHsgcmV0dXJuIG1faXNHTEVTMk5QT1RTdHJpY3Q7IH0KKyAgICAvLyBRdWVyeSBpZiB0aGUg
R0wgaW1wbGVtZW50YXRpb24gZ2VuZXJhdGVzIGVycm9ycyBvbiBvdXQtb2YtYm91bmRzIGJ1ZmZl
ciBhY2Nlc3Nlcy4KKyAgICBib29sIGlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNz
ZXMoKSB7IHJldHVybiBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXM7IH0K
KyAgICAvLyBRdWVyeSBpZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gaW5pdGlhbGl6ZXMgdGV4dHVy
ZXMvcmVuZGVyYnVmZmVycyB0byAwLgorICAgIGJvb2wgaXNSZXNvdXJjZVNhZmUoKSB7IHJldHVy
biBtX2lzUmVzb3VyY2VTYWZlOyB9CisgICAgLy8gUXVlcnkgaWYgZGVwdGhfc3RlbmNpbCBidWZm
ZXIgaXMgc3VwcG9ydGVkLgorICAgIGJvb2wgaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSB7IHJl
dHVybiBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkOyB9CisgICAgCisgICAgLy8gSGVscGVyIHRv
IHJldHVybiB0aGUgc2l6ZSBpbiBieXRlcyBvZiBPcGVuR0wgZGF0YSB0eXBlcworICAgIC8vIGxp
a2UgR0xfRkxPQVQsIEdMX0lOVCwgZXRjLgorICAgIHVuc2lnbmVkIHNpemVJbkJ5dGVzKEdDM0Rl
bnVtIHR5cGUpOworICAgIAorICAgIC8vIEJhc2ljIHZhbGlkYXRpb24gb2YgY291bnQgYW5kIG9m
ZnNldCBhZ2FpbnN0IG51bWJlciBvZiBlbGVtZW50cyBpbiBlbGVtZW50IGFycmF5IGJ1ZmZlcgor
ICAgIGJvb2wgdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVu
dW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpOworICAgIAorICAgIC8vIENvbnNlcnZhdGl2ZSBi
dXQgcXVpY2sgaW5kZXggdmFsaWRhdGlvbgorICAgIGJvb2wgdmFsaWRhdGVJbmRleEFycmF5Q29u
c2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsK
KyAgICAKKyAgICAvLyBQcmVjaXNlIGJ1dCBzbG93IGluZGV4IHZhbGlkYXRpb24gLS0gb25seSBk
b25lIGlmIGNvbnNlcnZhdGl2ZSBjaGVja3MgZmFpbAorICAgIGJvb2wgdmFsaWRhdGVJbmRleEFy
cmF5UHJlY2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zm
c2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCk7CisgICAgYm9vbCB2YWxpZGF0ZVZl
cnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1bnNpZ25lZCBwcmltaXRpdmVD
b3VudCA9IDApOworICAgIAorICAgIGJvb2wgdmFsaWRhdGVXZWJHTE9iamVjdChjb25zdCBjaGFy
KiwgV2ViR0xPYmplY3QqKTsKKyAgICAKKyAgICBib29sIHZhbGlkYXRlRHJhd0FycmF5cyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0Rz
aXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCk7CisgICAgYm9vbCB2YWxpZGF0ZURyYXdF
bGVtZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgdW5zaWduZWQmIG51bUVs
ZW1lbnRzKTsKKyAgICAKKyAgICAvLyBBZGRzIGEgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdC4K
KyAgICB2b2lkIGFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtKTsKKyAgICAKKyAg
ICBQYXNzUmVmUHRyPEltYWdlPiBkcmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlKiwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBpbnQgZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIAorI2lmIEVOQUJMRShW
SURFTykKKyAgICBQYXNzUmVmUHRyPEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9F
bGVtZW50KiwgQmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisgICAg
CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CisgICAgUmVmUHRyPFdl
YkdMQ29udGV4dEdyb3VwPiBtX2NvbnRleHRHcm91cDsKKyAgICAKKyAgICAvLyBPcHRpb25hbCBz
dHJ1Y3R1cmUgZm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIsIGluc3RlYWQgb2YgZGly
ZWN0bHkKKyAgICAvLyB0byB0aGUgYmFjay1idWZmZXIgb2YgbV9jb250ZXh0LgorICAgIFJlZlB0
cjxEcmF3aW5nQnVmZmVyPiBtX2RyYXdpbmdCdWZmZXI7CisgICAgCisgICAgLy8gRGlzcGF0Y2hl
cyBhIGNvbnRleHQgbG9zdCBldmVudCBvbmNlIGl0IGlzIGRldGVybWluZWQgdGhhdCBvbmUgaXMg
bmVlZGVkLgorICAgIC8vIFRoaXMgaXMgdXNlZCBib3RoIGZvciBzeW50aGV0aWMgYW5kIHJlYWwg
Y29udGV4dCBsb3NzZXMuIEZvciByZWFsIG9uZXMsIGl0J3MKKyAgICAvLyBsaWtlbHkgdGhhdCB0
aGVyZSdzIG5vIEphdmFTY3JpcHQgb24gdGhlIHN0YWNrLCBidXQgdGhhdCBtaWdodCBiZSBkZXBl
bmRlbnQKKyAgICAvLyBvbiBob3cgZXhhY3RseSB0aGUgcGxhdGZvcm0gZGlzY292ZXJzIHRoYXQg
dGhlIGNvbnRleHQgd2FzIGxvc3QuIEZvciBiZXR0ZXIKKyAgICAvLyBwb3J0YWJpbGl0eSB3ZSBh
bHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRoZSBldmVudC4KKyAgICBUaW1lciBtX2Rpc3Bh
dGNoQ29udGV4dExvc3RFdmVudFRpbWVyOworICAgIGJvb2wgbV9yZXN0b3JlQWxsb3dlZDsKKyAg
ICBUaW1lciBtX3Jlc3RvcmVUaW1lcjsKKyAgICAKKyAgICBib29sIG1fbmVlZHNVcGRhdGU7Cisg
ICAgYm9vbCBtX21hcmtlZENhbnZhc0RpcnR5OworICAgIEhhc2hTZXQ8V2ViR0xDb250ZXh0T2Jq
ZWN0Kj4gbV9jb250ZXh0T2JqZWN0czsKKyAgICAKKyAgICAvLyBMaXN0IG9mIGJvdW5kIFZCTydz
LiBVc2VkIHRvIG1haW50YWluIGluZm8gYWJvdXQgc2l6ZXMgZm9yIEFSUkFZX0JVRkZFUiBhbmQg
c3RvcmVkIHZhbHVlcyBmb3IgRUxFTUVOVF9BUlJBWV9CVUZGRVIKKyAgICBSZWZQdHI8V2ViR0xC
dWZmZXI+IG1fYm91bmRBcnJheUJ1ZmZlcjsKKyAgICAKKyAgICBSZWZQdHI8V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUz4gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7CisgICAgUmVmUHRyPFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdDsKKyAgICB2
b2lkIHNldEJvdW5kVmVydGV4QXJyYXlPYmplY3QoUGFzc1JlZlB0cjxXZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTPiBhcnJheU9iamVjdCkKKyAgICB7CisgICAgICAgIGlmIChhcnJheU9iamVjdCkK
KyAgICAgICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IGFycmF5T2JqZWN0OworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1
bHRWZXJ0ZXhBcnJheU9iamVjdDsKKyAgICB9CisgICAgCisgICAgY2xhc3MgVmVydGV4QXR0cmli
VmFsdWUgeworICAgIHB1YmxpYzoKKyAgICAgICAgVmVydGV4QXR0cmliVmFsdWUoKQorICAgICAg
ICB7CisgICAgICAgICAgICBpbml0VmFsdWUoKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgdm9pZCBpbml0VmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAgICB2YWx1ZVswXSA9IDAu
MGY7CisgICAgICAgICAgICB2YWx1ZVsxXSA9IDAuMGY7CisgICAgICAgICAgICB2YWx1ZVsyXSA9
IDAuMGY7CisgICAgICAgICAgICB2YWx1ZVszXSA9IDEuMGY7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEdDM0RmbG9hdCB2YWx1ZVs0XTsKKyAgICB9OworICAgIFZlY3RvcjxWZXJ0ZXhB
dHRyaWJWYWx1ZT4gbV92ZXJ0ZXhBdHRyaWJWYWx1ZTsKKyAgICB1bnNpZ25lZCBtX21heFZlcnRl
eEF0dHJpYnM7CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBtX3ZlcnRleEF0dHJpYjBCdWZmZXI7
CisgICAgbG9uZyBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplOworICAgIEdDM0RmbG9hdCBtX3Zl
cnRleEF0dHJpYjBCdWZmZXJWYWx1ZVs0XTsKKyAgICBib29sIG1fZm9yY2VBdHRyaWIwQnVmZmVy
UmVmaWxsOworICAgIGJvb2wgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZTsKKyAgICAKKyAgICBS
ZWZQdHI8V2ViR0xQcm9ncmFtPiBtX2N1cnJlbnRQcm9ncmFtOworICAgIFJlZlB0cjxXZWJHTEZy
YW1lYnVmZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKKyAgICBSZWZQdHI8V2ViR0xSZW5kZXJi
dWZmZXI+IG1fcmVuZGVyYnVmZmVyQmluZGluZzsKKyAgICBzdHJ1Y3QgVGV4dHVyZVVuaXRTdGF0
ZSB7CisgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmUyREJpbmRpbmc7CisgICAg
ICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmVDdWJlTWFwQmluZGluZzsKKyAgICB9Owor
ICAgIFZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBtX3RleHR1cmVVbml0czsKKyAgICB1bnNpZ25l
ZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7CisgICAgCisgICAgUmVmUHRyPFdlYkdMVGV4dHVy
ZT4gbV9ibGFja1RleHR1cmUyRDsKKyAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBtX2JsYWNrVGV4
dHVyZUN1YmVNYXA7CisgICAgCisgICAgVmVjdG9yPEdDM0RlbnVtPiBtX2NvbXByZXNzZWRUZXh0
dXJlRm9ybWF0czsKKyAgICAKKyAgICAvLyBGaXhlZC1zaXplIGNhY2hlIG9mIHJldXNhYmxlIGlt
YWdlIGJ1ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCisgICAgY2xhc3MgTFJVSW1h
Z2VCdWZmZXJDYWNoZSB7CisgICAgcHVibGljOgorICAgICAgICBMUlVJbWFnZUJ1ZmZlckNhY2hl
KGludCBjYXBhY2l0eSk7CisgICAgICAgIC8vIFRoZSBwb2ludGVyIHJldHVybmVkIGlzIG93bmVk
IGJ5IHRoZSBpbWFnZSBidWZmZXIgbWFwLgorICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZm
ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBidWJi
bGVUb0Zyb250KGludCBpZHgpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjp1bmlxdWVf
cHRyPEltYWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7CisgICAgICAgIGludCBtX2NhcGFjaXR5Owor
ICAgIH07CisgICAgTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRlZEltYWdlQ2FjaGU7Cisg
ICAgCisgICAgR0MzRGludCBtX21heFRleHR1cmVTaXplOworICAgIEdDM0RpbnQgbV9tYXhDdWJl
TWFwVGV4dHVyZVNpemU7CisgICAgR0MzRGludCBtX21heFJlbmRlcmJ1ZmZlclNpemU7CisgICAg
R0MzRGludCBtX21heFZpZXdwb3J0RGltc1syXTsKKyAgICBHQzNEaW50IG1fbWF4VGV4dHVyZUxl
dmVsOworICAgIEdDM0RpbnQgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsOworICAgIAorICAgIEdD
M0RpbnQgbV9tYXhEcmF3QnVmZmVyczsKKyAgICBHQzNEaW50IG1fbWF4Q29sb3JBdHRhY2htZW50
czsKKyAgICBHQzNEZW51bSBtX2JhY2tEcmF3QnVmZmVyOworICAgIGJvb2wgbV9kcmF3QnVmZmVy
c1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZDsKKyAgICBib29sIG1fZHJhd0J1ZmZlcnNTdXBwb3J0
ZWQ7CisgICAgCisgICAgR0MzRGludCBtX3BhY2tBbGlnbm1lbnQ7CisgICAgR0MzRGludCBtX3Vu
cGFja0FsaWdubWVudDsKKyAgICBib29sIG1fdW5wYWNrRmxpcFk7CisgICAgYm9vbCBtX3VucGFj
a1ByZW11bHRpcGx5QWxwaGE7CisgICAgR0MzRGVudW0gbV91bnBhY2tDb2xvcnNwYWNlQ29udmVy
c2lvbjsKKyAgICBib29sIG1fY29udGV4dExvc3Q7CisgICAgTG9zdENvbnRleHRNb2RlIG1fY29u
dGV4dExvc3RNb2RlOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmli
dXRlczsKKyAgICAKKyAgICBib29sIG1fbGF5ZXJDbGVhcmVkOworICAgIEdDM0RmbG9hdCBtX2Ns
ZWFyQ29sb3JbNF07CisgICAgYm9vbCBtX3NjaXNzb3JFbmFibGVkOworICAgIEdDM0RmbG9hdCBt
X2NsZWFyRGVwdGg7CisgICAgR0MzRGludCBtX2NsZWFyU3RlbmNpbDsKKyAgICBHQzNEYm9vbGVh
biBtX2NvbG9yTWFza1s0XTsKKyAgICBHQzNEYm9vbGVhbiBtX2RlcHRoTWFzazsKKyAgICAKKyAg
ICBib29sIG1fc3RlbmNpbEVuYWJsZWQ7CisgICAgR0MzRHVpbnQgbV9zdGVuY2lsTWFzaywgbV9z
dGVuY2lsTWFza0JhY2s7CisgICAgR0MzRGludCBtX3N0ZW5jaWxGdW5jUmVmLCBtX3N0ZW5jaWxG
dW5jUmVmQmFjazsgLy8gTm90ZSB0aGF0IHRoZXNlIGFyZSB0aGUgdXNlciBzcGVjaWZpZWQgdmFs
dWVzLCBub3QgdGhlIGludGVybmFsIGNsYW1wZWQgdmFsdWUuCisgICAgR0MzRHVpbnQgbV9zdGVu
Y2lsRnVuY01hc2ssIG1fc3RlbmNpbEZ1bmNNYXNrQmFjazsKKyAgICAKKyAgICBib29sIG1faXNH
TEVTMkNvbXBsaWFudDsKKyAgICBib29sIG1faXNHTEVTMk5QT1RTdHJpY3Q7CisgICAgYm9vbCBt
X2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXM7CisgICAgYm9vbCBtX2lzUmVz
b3VyY2VTYWZlOworICAgIGJvb2wgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsKKyAgICBib29s
IG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkOworICAgIAorICAgIGJvb2wgbV9zeW50aGVzaXpl
ZEVycm9yc1RvQ29uc29sZTsKKyAgICBpbnQgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQ7
CisgICAgCisgICAgLy8gQSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgY2FuIGJlIGNyZWF0ZWQgaW4g
YSBzdGF0ZSB3aGVyZSBpdCBhcHBlYXJzIGFzCisgICAgLy8gYSB2YWxpZCBhbmQgYWN0aXZlIGNv
bnRleHQsIGJ1dCB3aWxsIG5vdCBleGVjdXRlIGFueSBpbXBvcnRhbnQgb3BlcmF0aW9ucworICAg
IC8vIHVudGlsIGl0cyBsb2FkIHBvbGljeSBpcyBjb21wbGV0ZWx5IHJlc29sdmVkLgorICAgIGJv
b2wgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uOworICAgIGJvb2wgbV9oYXNSZXF1ZXN0ZWRQ
b2xpY3lSZXNvbHV0aW9uOworICAgIGJvb2wgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpOworICAg
IAorICAgIC8vIEVuYWJsZWQgZXh0ZW5zaW9uIG9iamVjdHMuCisgICAgc3RkOjp1bmlxdWVfcHRy
PEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz4gbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9w
aWM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVFNoYWRlclRleHR1cmVMT0Q+IG1fZXh0U2hhZGVy
VGV4dHVyZUxPRDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUZsb2F0PiBtX29lc1Rl
eHR1cmVGbG9hdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUZsb2F0TGluZWFyPiBt
X29lc1RleHR1cmVGbG9hdExpbmVhcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUhh
bGZGbG9hdD4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxPRVNU
ZXh0dXJlSGFsZkZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXI7CisgICAg
c3RkOjp1bmlxdWVfcHRyPE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+IG1fb2VzU3RhbmRhcmREZXJp
dmF0aXZlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVmVydGV4QXJyYXlPYmplY3Q+IG1fb2Vz
VmVydGV4QXJyYXlPYmplY3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPE9FU0VsZW1lbnRJbmRleFVp
bnQ+IG1fb2VzRWxlbWVudEluZGV4VWludDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xMb3Nl
Q29udGV4dD4gbV93ZWJnbExvc2VDb250ZXh0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERl
YnVnUmVuZGVyZXJJbmZvPiBtX3dlYmdsRGVidWdSZW5kZXJlckluZm87CisgICAgc3RkOjp1bmlx
dWVfcHRyPFdlYkdMRGVidWdTaGFkZXJzPiBtX3dlYmdsRGVidWdTaGFkZXJzOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDPiBtX3dlYmdsQ29tcHJlc3NlZFRl
eHR1cmVBVEM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJU
Qz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlcHRoVGV4dHVyZT4gbV93ZWJnbERlcHRoVGV4dHVy
ZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEcmF3QnVmZmVycz4gbV93ZWJnbERyYXdCdWZm
ZXJzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUluc3RhbmNlZEFycmF5cz4gbV9hbmdsZUlu
c3RhbmNlZEFycmF5czsKKyAgICAKKyAgICAvLyBIZWxwZXJzIGZvciBnZXRQYXJhbWV0ZXIgYW5k
IG90aGVycworICAgIFdlYkdMR2V0SW5mbyBnZXRCb29sZWFuUGFyYW1ldGVyKEdDM0RlbnVtKTsK
KyAgICBXZWJHTEdldEluZm8gZ2V0Qm9vbGVhbkFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKKyAg
ICBXZWJHTEdldEluZm8gZ2V0RmxvYXRQYXJhbWV0ZXIoR0MzRGVudW0pOworICAgIFdlYkdMR2V0
SW5mbyBnZXRJbnRQYXJhbWV0ZXIoR0MzRGVudW0pOworICAgIFdlYkdMR2V0SW5mbyBnZXRVbnNp
Z25lZEludFBhcmFtZXRlcihHQzNEZW51bSk7CisgICAgV2ViR0xHZXRJbmZvIGdldFdlYkdMRmxv
YXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7CisgICAgV2ViR0xHZXRJbmZvIGdldFdlYkdMSW50
QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0pOworICAgIAorICAgIC8vIENsZWFyIHRoZSBiYWNrYnVm
ZmVyIGlmIGl0IHdhcyBjb21wb3NpdGVkIHNpbmNlIHRoZSBsYXN0IG9wZXJhdGlvbi4KKyAgICAv
LyBjbGVhck1hc2sgaXMgc2V0IHRvIHRoZSBiaXRmaWVsZCBvZiBhbnkgY2xlYXIgdGhhdCB3b3Vs
ZCBoYXBwZW4gYW55d2F5IGF0IHRoaXMgdGltZQorICAgIC8vIGFuZCB0aGUgZnVuY3Rpb24gcmV0
dXJucyB0cnVlIGlmIHRoYXQgY2xlYXIgaXMgbm93IHVubmVjZXNzYXJ5LgorICAgIGJvb2wgY2xl
YXJJZkNvbXBvc2l0ZWQoR0MzRGJpdGZpZWxkIGNsZWFyTWFzayA9IDApOworICAgIAorICAgIC8v
IEhlbHBlciB0byByZXN0b3JlIHN0YXRlIHRoYXQgY2xlYXJpbmcgdGhlIGZyYW1lYnVmZmVyIG1h
eSBkZXN0cm95LgorICAgIHZvaWQgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOworICAgIAorICAg
IHZvaWQgdGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBH
QzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lk
KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleEltYWdlMkRJbXBsKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VIdG1sRG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleFN1Yklt
YWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2Uq
LCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICAKKyAgICB2b2lkIGNoZWNr
VGV4dHVyZUNvbXBsZXRlbmVzcyhjb25zdCBjaGFyKiwgYm9vbCk7CisgICAgCisgICAgdm9pZCBj
cmVhdGVGYWxsYmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gZm9yIGNvcHlUZXh7U3VifUltYWdlLCBjaGVjayB3aGV0aGVyIHRoZSBpbnRlcm5hbGZv
cm1hdAorICAgIC8vIGFuZCB0aGUgY29sb3IgYnVmZmVyIGZvcm1hdCBvZiB0aGUgY3VycmVudCBi
b3VuZCBmcmFtZWJ1ZmZlciBjb21iaW5hdGlvbgorICAgIC8vIGlzIHZhbGlkLgorICAgIGJvb2wg
aXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChHQzNEZW51bSB0
ZXhJbnRlcm5hbEZvcm1hdCwKKyAgICAgICAgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpOwor
ICAgIAorICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVy
J3MgY29sb3IgYnVmZmVyIGZvcm1hdC4KKyAgICBHQzNEZW51bSBnZXRCb3VuZEZyYW1lYnVmZmVy
Q29sb3JGb3JtYXQoKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBi
b3VuZCBmcmFtZWJ1ZmZlcidzIHdpZHRoLgorICAgIGludCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lk
dGgoKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFt
ZWJ1ZmZlcidzIGhlaWdodC4KKyAgICBpbnQgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpOwor
ICAgIAorICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2ZXJpZnkgbGltaXRzIG9uIHRoZSBsZW5n
dGggb2YgdW5pZm9ybSBhbmQgYXR0cmlidXRlIGxvY2F0aW9ucy4KKyAgICBib29sIHZhbGlkYXRl
TG9jYXRpb25MZW5ndGgoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmKTsK
KyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgc2l6ZSBpcyBub24tbmVn
YXRpdmUuCisgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5kIHJldHVybiBmYWxzZSBmb3IgbmVn
YXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVlLgorICAgIGJvb2wgdmFsaWRhdGVT
aXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNEaW50IHkpOworICAg
IAorICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBhbGwgY2hhcmFjdGVycyBpbiB0
aGUgc3RyaW5nIGJlbG9uZyB0byB0aGUKKyAgICAvLyBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBp
biBHTFNMIEVTIDEuMCBzcGVjIHNlY3Rpb24gMy4xLgorICAgIGJvb2wgdmFsaWRhdGVTdHJpbmco
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmKTsKKyAgICAKKyAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgdGFyZ2V0IGFuZCB0ZXh0dXJlIGJvdW5kIHRvIHRoZSB0
YXJnZXQuCisgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3JzIGFuZCByZXR1cm4gMCBpZiB0YXJnZXQg
aXMgaW52YWxpZCBvciB0ZXh0dXJlIGJvdW5kIGlzCisgICAgLy8gbnVsbC4gT3RoZXJ3aXNlLCBy
ZXR1cm4gdGhlIHRleHR1cmUgYm91bmQgdG8gdGhlIHRhcmdldC4KKyAgICBXZWJHTFRleHR1cmUq
IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKTsKKyAgICAKKyAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gY2hlY2sgaW5wdXQgZm9ybWF0L3R5cGUgZm9yIGZ1bmN0aW9ucyB7Y29w
eX1UZXh7U3VifUltYWdlLgorICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBm
YWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgorICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5j
Rm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgR0MzRGludCBsZXZlbCk7CisgICAgCisgICAgLy8gSGVscGVyIGZ1bmN0
aW9uIHRvIGNoZWNrIGlucHV0IGxldmVsIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFn
ZS4KKyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgbGV2ZWwg
aXMgaW52YWxpZC4KKyAgICBib29sIHZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKTsKKyAgICAKKyAgICBl
bnVtIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIHsKKyAgICAgICAgTm90VGV4U3ViSW1h
Z2UyRCwKKyAgICAgICAgVGV4U3ViSW1hZ2UyRCwKKyAgICB9OworICAgIAorICAgIGVudW0gVGV4
RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlIHsKKyAgICAgICAgU291cmNlQXJyYXlCdWZmZXJWaWV3
LAorICAgICAgICBTb3VyY2VJbWFnZURhdGEsCisgICAgICAgIFNvdXJjZUhUTUxJbWFnZUVsZW1l
bnQsCisgICAgICAgIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LAorICAgICAgICBTb3VyY2VIVE1M
VmlkZW9FbGVtZW50LAorICAgIH07CisgICAgCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0
ZXh7U3VifUltYWdlMkQgdG8gY2hlY2sgaWYgdGhlIGlucHV0IGZvcm1hdC90eXBlL2xldmVsL3Rh
cmdldC93aWR0aC9oZWlnaHQvYm9yZGVyL3hvZmZzZXQveW9mZnNldCBhcmUgdmFsaWQuCisgICAg
Ly8gT3RoZXJ3aXNlLCBpdCB3b3VsZCByZXR1cm4gcXVpY2tseSB3aXRob3V0IGRvaW5nIG90aGVy
IHdvcmsuCisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VU
eXBlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEc2l6ZWkgd2lkdGgsCisgICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQg
Ym9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0KTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sg
aW5wdXQgcGFyYW1ldGVycyBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCisgICAg
Ly8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJl
IGludmFsaWQuCisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUsCisg
ICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwKKyAgICAgICAgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsCisgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBib3JkZXIsCisgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSk7CisgICAgCisgICAgZW51bSBOdWxsRGlzcG9zaXRpb24geworICAgICAgICBOdWxsQWxsb3dl
ZCwKKyAgICAgICAgTnVsbE5vdEFsbG93ZWQKKyAgICB9OworICAgIAorICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZpZXcKKyAgICAv
LyBpcyBvZiB0aGUgY29ycmVjdCB0eXBlIGFuZCBjb250YWlucyBlbm91Z2ggZGF0YSBmb3IgdGhl
IHRleEltYWdlIGNhbGwuCisgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZh
bHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNE
YXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKKyAgICAgICAgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsCisgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAorICAgICAg
ICBOdWxsRGlzcG9zaXRpb24pOworICAgIAorICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxp
ZGF0ZSBhIGdpdmVuIHRleHR1cmUgZm9ybWF0IGlzIHNldHRhYmxlIGFzIGluCisgICAgLy8geW91
IGNhbiBzdXBwbHkgZGF0YSB0byB0ZXhJbWFnZTJELCBvciBjYWxsIHRleEltYWdlMkQsIGNvcHlU
ZXhJbWFnZTJEIGFuZAorICAgIC8vIGNvcHlUZXhTdWJJbWFnZTJELgorICAgIC8vIEdlbmVyYXRl
cyBHTCBlcnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiB0aGUgZm9ybWF0IGlzIG5vdCBzZXR0YWJs
ZS4KKyAgICBib29sIHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSBmb3JtYXQpOworICAgIAorICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0
byB2YWxpZGF0ZSBjb21wcmVzc2VkIHRleHR1cmUgZGF0YSBpcyBjb3JyZWN0IHNpemUKKyAgICAv
LyBmb3IgdGhlIGdpdmVuIGZvcm1hdCBhbmQgZGltZW5zaW9ucy4KKyAgICBib29sIHZhbGlkYXRl
Q29tcHJlc3NlZFRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICBHQzNEZW51bSBmb3Jt
YXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gZm9yIHZhbGlkYXRpbmcgY29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdHMuCisgICAgYm9vbCB2
YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoR0MzRGVudW0gZm9ybWF0KTsKKyAgICAKKyAgICAv
LyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRpbWVuc2lv
bnMgYXJlIHZhbGlkIGZvcgorICAgIC8vIHRoZSBnaXZlbiBmb3JtYXQuCisgICAgYm9vbCB2YWxp
ZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCk7CisgICAgCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IKKyAg
ICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgorICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4U3Vi
RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRl
eHR1cmUqKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgbW9kZSBm
b3IgZHJhd3tBcnJheXMvRWxlbWVudHN9LgorICAgIGJvb2wgdmFsaWRhdGVEcmF3TW9kZShjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gdG8gdmFsaWRhdGUgaWYgZnJvbnQvYmFjayBzdGVuY2lsTWFzayBhbmQgc3RlbmNpbEZ1
bmMgc2V0dGluZ3MgYXJlIHRoZSBzYW1lLgorICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsU2V0dGlu
Z3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gdmFsaWRhdGUgc3RlbmNpbCBmdW5jLgorICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVu
Yyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKKyAgICAKKyAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gZm9yIHRleFBhcmFtZXRlcmYgYW5kIHRleFBhcmFtZXRlcmkuCisgICAgdm9p
ZCB0ZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0
IHBhcmFtaSwgR0MzRGludCBwYXJhbWYsIGJvb2wgaXNGbG9hdCk7CisgICAgCisgICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHByaW50IEdMIGVycm9ycyB0byBjb25zb2xlLgorICAgIHZvaWQgcHJp
bnRHTEVycm9yVG9Db25zb2xlKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgcHJpbnRHTFdhcm5p
bmdUb0NvbnNvbGUoY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIHJlYXNvbik7Cisg
ICAgCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByaW50IHdhcm5pbmdzIHRvIGNvbnNvbGUu
IEN1cnJlbnRseQorICAgIC8vIHVzZWQgb25seSB0byB3YXJuIGFib3V0IHVzZSBvZiBvYnNvbGV0
ZSBmdW5jdGlvbnMuCisgICAgdm9pZCBwcmludFdhcm5pbmdUb0NvbnNvbGUoY29uc3QgU3RyaW5n
Jik7CisgICAgCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFt
ZXRlcnMgZm9yIGZyYW1lYnVmZmVyIGZ1bmN0aW9ucy4KKyAgICAvLyBHZW5lcmF0ZSBHTCBlcnJv
ciBpZiBwYXJhbWV0ZXJzIGFyZSBpbGxlZ2FsLgorICAgIGJvb2wgdmFsaWRhdGVGcmFtZWJ1ZmZl
ckZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBhdHRhY2htZW50KTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
dmFsaWRhdGUgYmxlbmQgZXF1YXRpb24gbW9kZS4KKyAgICBib29sIHZhbGlkYXRlQmxlbmRFcXVh
dGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKKyAgICAKKyAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZnVuYyBmYWN0b3JzLgorICAgIGJvb2wg
dmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gc3JjLCBHQzNEZW51bSBkc3QpOworICAgIAorICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2
YWxpZGF0ZSBhIEdMIGNhcGFiaWxpdHkuCisgICAgYm9vbCB2YWxpZGF0ZUNhcGFiaWxpdHkoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7CisgICAgCisgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMgZm9yIHVuaWZvcm0gZnVuY3Rpb25z
LgorICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgRmxvYXQzMkFycmF5KiwgR0MzRHNp
emVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBJbnQzMkFycmF5Kiwg
R0MzRHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCB2b2lkKiwg
R0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKKyAgICBib29sIHZhbGlkYXRlVW5pZm9ybU1hdHJp
eFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiosIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVp
IG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIHZvaWQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBtb2QpOworICAgIAorICAg
IC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZmZXJEYXRh
LgorICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBvciAw
IGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCisgICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRlQnVm
ZmVyRGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHVzYWdlKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRl
eHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgaW1hZ2UgaXMgcmVhZHkgYW5kIHdvdWxkbid0IHRh
aW50IE9yaWdpbi4KKyAgICBib29sIHZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisgICAg
CisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBzdXJl
IGNhbnZhcyBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgorICAgIGJvb2wgdmFs
aWRhdGVIVE1MQ2FudmFzRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52
YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIAorI2lmIEVOQUJMRShWSURFTykKKyAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlk
ZW8gaXMgcmVhZHkgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgorICAgIGJvb2wgdmFsaWRhdGVIVE1M
VmlkZW9FbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCos
IEV4Y2VwdGlvbkNvZGUmKTsKKyNlbmRpZgorICAgIAorICAgIC8vIEhlbHBlciBmdW5jdGlvbnMg
Zm9yIHZlcnRleEF0dHJpYk5me3Z9LgorICAgIHZvaWQgdmVydGV4QXR0cmliZkltcGwoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRHNpemVpIGV4cGVjdGVkU2l6
ZSwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KTsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGlu
ZGV4LCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsKKyAgICB2b2lkIHZl
cnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBleHBlY3RlZFNpemUpOworICAgIAor
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgZGVsZXRlKiAoZGVsZXRlQnVmZmVyLCBkZWxldGVQ
cm9ncmFtLCBldGMpIGZ1bmN0aW9ucy4KKyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNo
b3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuCisgICAgYm9vbCBkZWxldGVP
YmplY3QoV2ViR0xPYmplY3QqKTsKKyAgICAKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJp
bmQqIChiaW5kQnVmZmVyLCBiaW5kVGV4dHVyZSwgZXRjKSBhbmQgdXNlUHJvZ3JhbS4KKyAgICAv
LyBJZiB0aGUgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gZGVsZXRlZCwgc2V0IGRlbGV0ZWQgdG8g
dHJ1ZSB1cG9uIHJldHVybi4KKyAgICAvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCBy
ZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuCisgICAgYm9vbCBjaGVja09iamVjdFRv
QmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVs
ZXRlZCk7CisgICAgCisgICAgLy8gSGVscGVycyBmb3Igc2ltdWxhdGluZyB2ZXJ0ZXhBdHRyaWIw
CisgICAgdm9pZCBpbml0VmVydGV4QXR0cmliMCgpOworICAgIGJvb2wgc2ltdWxhdGVWZXJ0ZXhB
dHRyaWIwKEdDM0RzaXplaSBudW1WZXJ0ZXgpOworICAgIHZvaWQgcmVzdG9yZVN0YXRlc0FmdGVy
VmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKKyAgICAKKyAgICB2b2lkIGRpc3BhdGNoQ29udGV4
dExvc3RFdmVudCgpOworICAgIC8vIEhlbHBlciBmb3IgcmVzdG9yYXRpb24gYWZ0ZXIgY29udGV4
dCBsb3N0LgorICAgIHZvaWQgbWF5YmVSZXN0b3JlQ29udGV4dCgpOworICAgIAorICAgIC8vIERl
dGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBwcml2aWxlZ2VkIGNvZGUgaW4gdGhlIGJyb3dzZXIs
IGZvciBleGFtcGxlLAorICAgIC8vIGEgU2FmYXJpIG9yIENocm9tZSBleHRlbnNpb24uCisgICAg
Ym9vbCBhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3Q7CisgICAgCisgICAgZW51bSBD
b25zb2xlRGlzcGxheVByZWZlcmVuY2UgeworICAgICAgICBEaXNwbGF5SW5Db25zb2xlLAorICAg
ICAgICBEb250RGlzcGxheUluQ29uc29sZQorICAgIH07CisgICAgCisgICAgLy8gV3JhcHBlciBm
b3IgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yIHRoYXQgc2VuZHMgYSBtZXNz
YWdlCisgICAgLy8gdG8gdGhlIEphdmFTY3JpcHQgY29uc29sZS4KKyAgICB2b2lkIHN5bnRoZXNp
emVHTEVycm9yKEdDM0RlbnVtLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIq
IGRlc2NyaXB0aW9uLCBDb25zb2xlRGlzcGxheVByZWZlcmVuY2UgPSBEaXNwbGF5SW5Db25zb2xl
KTsKKyAgICAKKyAgICBTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmKSBjb25zdDsK
KyAgICAKKyAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSBzdGVuY2lsIHRlc3QgYmFzZWQgb24gdXNl
ciBzZXR0aW5nIGFuZAorICAgIC8vIHdoZXRoZXIgdGhlIGN1cnJlbnQgRkJPIGhhcyBhIHN0ZW5j
aWwgYnVmZmVyLgorICAgIHZvaWQgYXBwbHlTdGVuY2lsVGVzdCgpOworICAgIAorICAgIC8vIEhl
bHBlciBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGEgY2FwYWJpbGl0eS4KKyAgICB2b2lkIGVu
YWJsZU9yRGlzYWJsZShHQzNEZW51bSBjYXBhYmlsaXR5LCBib29sIGVuYWJsZSk7CisgICAgCisg
ICAgLy8gQ2xhbXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQT1JUX0RJTVMu
CisgICAgSW50U2l6ZSBjbGFtcGVkQ2FudmFzU2l6ZSgpOworICAgIAorICAgIC8vIEZpcnN0IHRp
bWUgY2FsbGVkLCBpZiBFWFRfZHJhd19idWZmZXJzIGlzIHN1cHBvcnRlZCwgcXVlcnkgdGhlIHZh
bHVlOyBvdGhlcndpc2UgcmV0dXJuIDAuCisgICAgLy8gTGF0ZXIsIHJldHVybiB0aGUgY2FjaGVk
IHZhbHVlLgorICAgIEdDM0RpbnQgZ2V0TWF4RHJhd0J1ZmZlcnMoKTsKKyAgICBHQzNEaW50IGdl
dE1heENvbG9yQXR0YWNobWVudHMoKTsKKyAgICAKKyAgICB2b2lkIHNldEJhY2tEcmF3QnVmZmVy
KEdDM0RlbnVtKTsKKyAgICAKKyAgICB2b2lkIHJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsK
KyAgICB2b2lkIHJlc3RvcmVDdXJyZW50VGV4dHVyZTJEKCk7CisgICAgCisgICAgLy8gQ2hlY2sg
aWYgRVhUX2RyYXdfYnVmZmVycyBleHRlbnNpb24gaXMgc3VwcG9ydGVkIGFuZCBpZiBpdCBzYXRp
c2ZpZXMgdGhlIFdlYkdMIHJlcXVpcmVtZW50cy4KKyAgICBib29sIHN1cHBvcnRzRHJhd0J1ZmZl
cnMoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmlkbAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaWRsCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjY5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwordHlwZWRl
ZiB1bnNpZ25lZCBsb25nICBHTGVudW07Cit0eXBlZGVmIGJvb2xlYW4gICAgICAgIEdMYm9vbGVh
bjsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgR0xiaXRmaWVsZDsKK3R5cGVkZWYgYnl0ZSAgICAg
ICAgICAgR0xieXRlOyAgICAgICAgIC8qICdieXRlJyBzaG91bGQgYmUgYSBzaWduZWQgOCBiaXQg
dHlwZS4gKi8KK3R5cGVkZWYgc2hvcnQgICAgICAgICAgR0xzaG9ydDsKK3R5cGVkZWYgbG9uZyAg
ICAgICAgICAgR0xpbnQ7Cit0eXBlZGVmIGxvbmcgICAgICAgICAgIEdMc2l6ZWk7Cit0eXBlZGVm
IGxvbmcgbG9uZyAgICAgIEdMaW50cHRyOwordHlwZWRlZiBsb25nIGxvbmcgICAgICBHTHNpemVp
cHRyOwordHlwZWRlZiBvY3RldCAgICAgICAgICBHTHVieXRlOyAgICAgICAgLyogJ29jdGV0JyBz
aG91bGQgYmUgYW4gdW5zaWduZWQgOCBiaXQgdHlwZS4gKi8KK3R5cGVkZWYgdW5zaWduZWQgc2hv
cnQgR0x1c2hvcnQ7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMdWludDsKK3R5cGVkZWYgdW5y
ZXN0cmljdGVkIGZsb2F0IEdMZmxvYXQ7Cit0eXBlZGVmIHVucmVzdHJpY3RlZCBmbG9hdCBHTGNs
YW1wZjsKKworWworICAgIENvbmRpdGlvbmFsPVdFQkdMLAorICAgIEpTQ3VzdG9tTWFya0Z1bmN0
aW9uLAorICAgIERvTm90Q2hlY2tDb25zdGFudHMsCitdIGludGVyZmFjZSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dCB7CisKKy8qIENsZWFyQnVmZmVy
TWFzayAqLworY29uc3QgR0xlbnVtIERFUFRIX0JVRkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4
MDAwMDAxMDA7Citjb25zdCBHTGVudW0gU1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAgID0g
MHgwMDAwMDQwMDsKK2NvbnN0IEdMZW51bSBDT0xPUl9CVUZGRVJfQklUICAgICAgICAgICAgICAg
PSAweDAwMDA0MDAwOworCisvKiBCZWdpbk1vZGUgKi8KK2NvbnN0IEdMZW51bSBQT0lOVFMgICAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDA7Citjb25zdCBHTGVudW0gTElORVMgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgwMDAxOworY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDAwMjsKK2NvbnN0IEdMZW51bSBMSU5FX1NUUklQICAgICAg
ICAgICAgICAgICAgICAgPSAweDAwMDM7Citjb25zdCBHTGVudW0gVFJJQU5HTEVTICAgICAgICAg
ICAgICAgICAgICAgID0gMHgwMDA0OworY29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAgICAg
ICAgICAgICAgICA9IDB4MDAwNTsKK2NvbnN0IEdMZW51bSBUUklBTkdMRV9GQU4gICAgICAgICAg
ICAgICAgICAgPSAweDAwMDY7CisKKy8qIEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4g
RVMyMCkgKi8KKy8qICAgICAgTkVWRVIgKi8KKy8qICAgICAgTEVTUyAqLworLyogICAgICBFUVVB
TCAqLworLyogICAgICBMRVFVQUwgKi8KKy8qICAgICAgR1JFQVRFUiAqLworLyogICAgICBOT1RF
UVVBTCAqLworLyogICAgICBHRVFVQUwgKi8KKy8qICAgICAgQUxXQVlTICovCisKKy8qIEJsZW5k
aW5nRmFjdG9yRGVzdCAqLworY29uc3QgR0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDA7Citjb25zdCBHTGVudW0gT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MTsKK2NvbnN0IEdMZW51bSBTUkNfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDA7
Citjb25zdCBHTGVudW0gT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAxOwor
Y29uc3QgR0xlbnVtIFNSQ19BTFBIQSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMjsKK2Nv
bnN0IEdMZW51bSBPTkVfTUlOVVNfU1JDX0FMUEhBICAgICAgICAgICAgPSAweDAzMDM7Citjb25z
dCBHTGVudW0gRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzA0OworY29uc3Qg
R0xlbnVtIE9ORV9NSU5VU19EU1RfQUxQSEEgICAgICAgICAgICA9IDB4MDMwNTsKKworLyogQmxl
bmRpbmdGYWN0b3JTcmMgKi8KKy8qICAgICAgWkVSTyAqLworLyogICAgICBPTkUgKi8KK2NvbnN0
IEdMZW51bSBEU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDY7Citjb25zdCBH
TGVudW0gT05FX01JTlVTX0RTVF9DT0xPUiAgICAgICAgICAgID0gMHgwMzA3OworY29uc3QgR0xl
bnVtIFNSQ19BTFBIQV9TQVRVUkFURSAgICAgICAgICAgICA9IDB4MDMwODsKKy8qICAgICAgU1JD
X0FMUEhBICovCisvKiAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgKi8KKy8qICAgICAgRFNUX0FM
UEhBICovCisvKiAgICAgIE9ORV9NSU5VU19EU1RfQUxQSEEgKi8KKworLyogQmxlbmRFcXVhdGlv
blNlcGFyYXRlICovCitjb25zdCBHTGVudW0gRlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4MDA2OworY29uc3QgR0xlbnVtIEJMRU5EX0VRVUFUSU9OICAgICAgICAgICAgICAgICA9
IDB4ODAwOTsKK2NvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgPSAw
eDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLworY29uc3QgR0xlbnVtIEJMRU5E
X0VRVUFUSU9OX0FMUEhBICAgICAgICAgICA9IDB4ODgzRDsKKworLyogQmxlbmRTdWJ0cmFjdCAq
LworY29uc3QgR0xlbnVtIEZVTkNfU1VCVFJBQ1QgICAgICAgICAgICAgICAgICA9IDB4ODAwQTsK
K2NvbnN0IEdMZW51bSBGVU5DX1JFVkVSU0VfU1VCVFJBQ1QgICAgICAgICAgPSAweDgwMEI7CisK
Ky8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqLworY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9S
R0IgICAgICAgICAgICAgICAgICA9IDB4ODBDODsKK2NvbnN0IEdMZW51bSBCTEVORF9TUkNfUkdC
ICAgICAgICAgICAgICAgICAgPSAweDgwQzk7Citjb25zdCBHTGVudW0gQkxFTkRfRFNUX0FMUEhB
ICAgICAgICAgICAgICAgID0gMHg4MENBOworY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBIQSAg
ICAgICAgICAgICAgICA9IDB4ODBDQjsKK2NvbnN0IEdMZW51bSBDT05TVEFOVF9DT0xPUiAgICAg
ICAgICAgICAgICAgPSAweDgwMDE7Citjb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5UX0NP
TE9SICAgICAgID0gMHg4MDAyOworY29uc3QgR0xlbnVtIENPTlNUQU5UX0FMUEhBICAgICAgICAg
ICAgICAgICA9IDB4ODAwMzsKK2NvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEg
ICAgICAgPSAweDgwMDQ7Citjb25zdCBHTGVudW0gQkxFTkRfQ09MT1IgICAgICAgICAgICAgICAg
ICAgID0gMHg4MDA1OworCisvKiBCdWZmZXIgT2JqZWN0cyAqLworY29uc3QgR0xlbnVtIEFSUkFZ
X0JVRkZFUiAgICAgICAgICAgICAgICAgICA9IDB4ODg5MjsKK2NvbnN0IEdMZW51bSBFTEVNRU5U
X0FSUkFZX0JVRkZFUiAgICAgICAgICAgPSAweDg4OTM7Citjb25zdCBHTGVudW0gQVJSQVlfQlVG
RkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4ODk0OworY29uc3QgR0xlbnVtIEVMRU1FTlRfQVJS
QVlfQlVGRkVSX0JJTkRJTkcgICA9IDB4ODg5NTsKKworY29uc3QgR0xlbnVtIFNUUkVBTV9EUkFX
ICAgICAgICAgICAgICAgICAgICA9IDB4ODhFMDsKK2NvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAg
ICAgICAgICAgICAgICAgICAgPSAweDg4RTQ7Citjb25zdCBHTGVudW0gRFlOQU1JQ19EUkFXICAg
ICAgICAgICAgICAgICAgID0gMHg4OEU4OworCitjb25zdCBHTGVudW0gQlVGRkVSX1NJWkUgICAg
ICAgICAgICAgICAgICAgID0gMHg4NzY0OworY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAgICAg
ICAgICAgICAgICAgICA9IDB4ODc2NTsKKworY29uc3QgR0xlbnVtIENVUlJFTlRfVkVSVEVYX0FU
VFJJQiAgICAgICAgICA9IDB4ODYyNjsKKworLyogQ3VsbEZhY2VNb2RlICovCitjb25zdCBHTGVu
dW0gRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA0OworY29uc3QgR0xlbnVt
IEJBQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQwNTsKK2NvbnN0IEdMZW51bSBG
Uk9OVF9BTkRfQkFDSyAgICAgICAgICAgICAgICAgPSAweDA0MDg7CisKKy8qIERlcHRoRnVuY3Rp
b24gKi8KKy8qICAgICAgTkVWRVIgKi8KKy8qICAgICAgTEVTUyAqLworLyogICAgICBFUVVBTCAq
LworLyogICAgICBMRVFVQUwgKi8KKy8qICAgICAgR1JFQVRFUiAqLworLyogICAgICBOT1RFUVVB
TCAqLworLyogICAgICBHRVFVQUwgKi8KKy8qICAgICAgQUxXQVlTICovCisKKy8qIEVuYWJsZUNh
cCAqLworY29uc3QgR0xlbnVtIFRFWFRVUkVfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4MERF
MTsKK2NvbnN0IEdMZW51bSBDVUxMX0ZBQ0UgICAgICAgICAgICAgICAgICAgICAgPSAweDBCNDQ7
Citjb25zdCBHTGVudW0gQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkUyOwor
Y29uc3QgR0xlbnVtIERJVEhFUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEJEMDsKK2Nv
bnN0IEdMZW51bSBTVEVOQ0lMX1RFU1QgICAgICAgICAgICAgICAgICAgPSAweDBCOTA7Citjb25z
dCBHTGVudW0gREVQVEhfVEVTVCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjcxOworY29uc3Qg
R0xlbnVtIFNDSVNTT1JfVEVTVCAgICAgICAgICAgICAgICAgICA9IDB4MEMxMTsKK2NvbnN0IEdM
ZW51bSBQT0xZR09OX09GRlNFVF9GSUxMICAgICAgICAgICAgPSAweDgwMzc7Citjb25zdCBHTGVu
dW0gU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFICAgICAgID0gMHg4MDlFOworY29uc3QgR0xlbnVt
IFNBTVBMRV9DT1ZFUkFHRSAgICAgICAgICAgICAgICA9IDB4ODBBMDsKKworLyogRXJyb3JDb2Rl
ICovCitjb25zdCBHTGVudW0gTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsKK2Nv
bnN0IEdMZW51bSBJTlZBTElEX0VOVU0gICAgICAgICAgICAgICAgICAgPSAweDA1MDA7Citjb25z
dCBHTGVudW0gSU5WQUxJRF9WQUxVRSAgICAgICAgICAgICAgICAgID0gMHgwNTAxOworY29uc3Qg
R0xlbnVtIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4MDUwMjsKK2NvbnN0IEdM
ZW51bSBPVVRfT0ZfTUVNT1JZICAgICAgICAgICAgICAgICAgPSAweDA1MDU7CisKKy8qIEZyb250
RmFjZURpcmVjdGlvbiAqLworY29uc3QgR0xlbnVtIENXICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MDkwMDsKK2NvbnN0IEdMZW51bSBDQ1cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDA5MDE7CisKKy8qIEdldFBOYW1lICovCitjb25zdCBHTGVudW0gTElORV9XSURUSCAg
ICAgICAgICAgICAgICAgICAgID0gMHgwQjIxOworY29uc3QgR0xlbnVtIEFMSUFTRURfUE9JTlRf
U0laRV9SQU5HRSAgICAgICA9IDB4ODQ2RDsKK2NvbnN0IEdMZW51bSBBTElBU0VEX0xJTkVfV0lE
VEhfUkFOR0UgICAgICAgPSAweDg0NkU7Citjb25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAg
ICAgICAgICAgICAgID0gMHgwQjQ1OworY29uc3QgR0xlbnVtIEZST05UX0ZBQ0UgICAgICAgICAg
ICAgICAgICAgICA9IDB4MEI0NjsKK2NvbnN0IEdMZW51bSBERVBUSF9SQU5HRSAgICAgICAgICAg
ICAgICAgICAgPSAweDBCNzA7Citjb25zdCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAgICAg
ICAgICAgID0gMHgwQjcyOworY29uc3QgR0xlbnVtIERFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAg
ICAgICA9IDB4MEI3MzsKK2NvbnN0IEdMZW51bSBERVBUSF9GVU5DICAgICAgICAgICAgICAgICAg
ICAgPSAweDBCNzQ7Citjb25zdCBHTGVudW0gU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAgICAg
ID0gMHgwQjkxOworY29uc3QgR0xlbnVtIFNURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICA9
IDB4MEI5MjsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0ZBSUwgICAgICAgICAgICAgICAgICAgPSAw
eDBCOTQ7Citjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNTX0RFUFRIX0ZBSUwgICAgICAgID0gMHgw
Qjk1OworY29uc3QgR0xlbnVtIFNURU5DSUxfUEFTU19ERVBUSF9QQVNTICAgICAgICA9IDB4MEI5
NjsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX1JFRiAgICAgICAgICAgICAgICAgICAgPSAweDBCOTc7
Citjb25zdCBHTGVudW0gU1RFTkNJTF9WQUxVRV9NQVNLICAgICAgICAgICAgID0gMHgwQjkzOwor
Y29uc3QgR0xlbnVtIFNURU5DSUxfV1JJVEVNQVNLICAgICAgICAgICAgICA9IDB4MEI5ODsKK2Nv
bnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfRlVOQyAgICAgICAgICAgICAgPSAweDg4MDA7Citjb25z
dCBHTGVudW0gU1RFTkNJTF9CQUNLX0ZBSUwgICAgICAgICAgICAgID0gMHg4ODAxOworY29uc3Qg
R0xlbnVtIFNURU5DSUxfQkFDS19QQVNTX0RFUFRIX0ZBSUwgICA9IDB4ODgwMjsKK2NvbnN0IEdM
ZW51bSBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9QQVNTICAgPSAweDg4MDM7Citjb25zdCBHTGVu
dW0gU1RFTkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOworY29uc3QgR0xlbnVt
IFNURU5DSUxfQkFDS19WQUxVRV9NQVNLICAgICAgICA9IDB4OENBNDsKK2NvbnN0IEdMZW51bSBT
VEVOQ0lMX0JBQ0tfV1JJVEVNQVNLICAgICAgICAgPSAweDhDQTU7Citjb25zdCBHTGVudW0gVklF
V1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEyOworY29uc3QgR0xlbnVtIFNDSVNT
T1JfQk9YICAgICAgICAgICAgICAgICAgICA9IDB4MEMxMDsKKy8qICAgICAgU0NJU1NPUl9URVNU
ICovCitjb25zdCBHTGVudW0gQ09MT1JfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgID0gMHgwQzIy
OworY29uc3QgR0xlbnVtIENPTE9SX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA9IDB4MEMyMzsK
K2NvbnN0IEdMZW51bSBVTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgPSAweDBDRjU7Citj
b25zdCBHTGVudW0gUEFDS19BTElHTk1FTlQgICAgICAgICAgICAgICAgID0gMHgwRDA1OworY29u
c3QgR0xlbnVtIE1BWF9URVhUVVJFX1NJWkUgICAgICAgICAgICAgICA9IDB4MEQzMzsKK2NvbnN0
IEdMZW51bSBNQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAgICAgPSAweDBEM0E7Citjb25zdCBH
TGVudW0gU1VCUElYRUxfQklUUyAgICAgICAgICAgICAgICAgID0gMHgwRDUwOworY29uc3QgR0xl
bnVtIFJFRF9CSVRTICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MjsKK2NvbnN0IEdMZW51
bSBHUkVFTl9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTM7Citjb25zdCBHTGVudW0g
QkxVRV9CSVRTICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OworY29uc3QgR0xlbnVtIEFM
UEhBX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NTsKK2NvbnN0IEdMZW51bSBERVBU
SF9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTY7Citjb25zdCBHTGVudW0gU1RFTkNJ
TF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3OworY29uc3QgR0xlbnVtIFBPTFlHT05f
T0ZGU0VUX1VOSVRTICAgICAgICAgICA9IDB4MkEwMDsKKy8qICAgICAgUE9MWUdPTl9PRkZTRVRf
RklMTCAqLworY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICA9IDB4
ODAzODsKK2NvbnN0IEdMZW51bSBURVhUVVJFX0JJTkRJTkdfMkQgICAgICAgICAgICAgPSAweDgw
Njk7Citjb25zdCBHTGVudW0gU0FNUExFX0JVRkZFUlMgICAgICAgICAgICAgICAgID0gMHg4MEE4
OworY29uc3QgR0xlbnVtIFNBTVBMRVMgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODBBOTsK
K2NvbnN0IEdMZW51bSBTQU1QTEVfQ09WRVJBR0VfVkFMVUUgICAgICAgICAgPSAweDgwQUE7Citj
b25zdCBHTGVudW0gU0FNUExFX0NPVkVSQUdFX0lOVkVSVCAgICAgICAgID0gMHg4MEFCOworCisv
KiBHZXRUZXh0dXJlUGFyYW1ldGVyICovCisvKiAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAqLwor
LyogICAgICBURVhUVVJFX01JTl9GSUxURVIgKi8KKy8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi8K
Ky8qICAgICAgVEVYVFVSRV9XUkFQX1QgKi8KKworY29uc3QgR0xlbnVtIENPTVBSRVNTRURfVEVY
VFVSRV9GT1JNQVRTICAgICA9IDB4ODZBMzsKKworLyogSGludE1vZGUgKi8KK2NvbnN0IEdMZW51
bSBET05UX0NBUkUgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDA7Citjb25zdCBHTGVudW0g
RkFTVEVTVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAxOworY29uc3QgR0xlbnVtIE5J
Q0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTEwMjsKKworLyogSGludFRhcmdldCAq
LworY29uc3QgR0xlbnVtIEdFTkVSQVRFX01JUE1BUF9ISU5UICAgICAgICAgICAgPSAweDgxOTI7
CisKKy8qIERhdGFUeXBlICovCitjb25zdCBHTGVudW0gQllURSAgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgxNDAwOworY29uc3QgR0xlbnVtIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAg
ICAgICA9IDB4MTQwMTsKK2NvbnN0IEdMZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDE0MDI7Citjb25zdCBHTGVudW0gVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAg
ID0gMHgxNDAzOworY29uc3QgR0xlbnVtIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MTQwNDsKK2NvbnN0IEdMZW51bSBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgPSAw
eDE0MDU7Citjb25zdCBHTGVudW0gRkxPQVQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgx
NDA2OworCisvKiBQaXhlbEZvcm1hdCAqLworY29uc3QgR0xlbnVtIERFUFRIX0NPTVBPTkVOVCAg
ICAgICAgICAgICAgICA9IDB4MTkwMjsKK2NvbnN0IEdMZW51bSBBTFBIQSAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDE5MDY7Citjb25zdCBHTGVudW0gUkdCICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHgxOTA3OworY29uc3QgR0xlbnVtIFJHQkEgICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MTkwODsKK2NvbnN0IEdMZW51bSBMVU1JTkFOQ0UgICAgICAgICAgICAgICAg
ICAgICAgPSAweDE5MDk7Citjb25zdCBHTGVudW0gTFVNSU5BTkNFX0FMUEhBICAgICAgICAgICAg
ICAgID0gMHgxOTBBOworCisvKiBQaXhlbFR5cGUgKi8KKy8qICAgICAgVU5TSUdORURfQllURSAq
LworY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzRfNF80XzQgICAgICAgICA9IDB4ODAzMzsK
K2NvbnN0IEdMZW51bSBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7Citj
b25zdCBHTGVudW0gVU5TSUdORURfU0hPUlRfNV82XzUgICAgICAgICAgID0gMHg4MzYzOworCisv
KiBTaGFkZXJzICovCitjb25zdCBHTGVudW0gRlJBR01FTlRfU0hBREVSICAgICAgICAgICAgICAg
ICAgPSAweDhCMzA7Citjb25zdCBHTGVudW0gVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAgICAg
ICAgPSAweDhCMzE7Citjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9BVFRSSUJTICAgICAgICAgICAg
ICAgPSAweDg4Njk7Citjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAg
ICAgPSAweDhERkI7Citjb25zdCBHTGVudW0gTUFYX1ZBUllJTkdfVkVDVE9SUyAgICAgICAgICAg
ICAgPSAweDhERkM7Citjb25zdCBHTGVudW0gTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5J
VFMgPSAweDhCNEQ7Citjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRT
ICAgPSAweDhCNEM7Citjb25zdCBHTGVudW0gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAgICAg
ICAgPSAweDg4NzI7Citjb25zdCBHTGVudW0gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyAg
ICAgPSAweDhERkQ7Citjb25zdCBHTGVudW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAg
ICAgPSAweDhCNEY7Citjb25zdCBHTGVudW0gREVMRVRFX1NUQVRVUyAgICAgICAgICAgICAgICAg
ICAgPSAweDhCODA7Citjb25zdCBHTGVudW0gTElOS19TVEFUVVMgICAgICAgICAgICAgICAgICAg
ICAgPSAweDhCODI7Citjb25zdCBHTGVudW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAg
ICAgPSAweDhCODM7Citjb25zdCBHTGVudW0gQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAgICAg
ICAgPSAweDhCODU7Citjb25zdCBHTGVudW0gQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAgICAg
ICAgPSAweDhCODY7Citjb25zdCBHTGVudW0gQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAg
ICAgPSAweDhCODk7Citjb25zdCBHTGVudW0gU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAg
ICAgPSAweDhCOEM7Citjb25zdCBHTGVudW0gQ1VSUkVOVF9QUk9HUkFNICAgICAgICAgICAgICAg
ICAgPSAweDhCOEQ7CisKKy8qIFN0ZW5jaWxGdW5jdGlvbiAqLworY29uc3QgR0xlbnVtIE5FVkVS
ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMDsKK2NvbnN0IEdMZW51bSBMRVNTICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDE7Citjb25zdCBHTGVudW0gRVFVQUwgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAyOworY29uc3QgR0xlbnVtIExFUVVBTCAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMzsKK2NvbnN0IEdMZW51bSBHUkVBVEVSICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDAyMDQ7Citjb25zdCBHTGVudW0gTk9URVFVQUwgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwMjA1OworY29uc3QgR0xlbnVtIEdFUVVBTCAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MDIwNjsKK2NvbnN0IEdMZW51bSBBTFdBWVMgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDAyMDc7CisKKy8qIFN0ZW5jaWxPcCAqLworLyogICAgICBaRVJPICov
Citjb25zdCBHTGVudW0gS0VFUCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAwOwor
Y29uc3QgR0xlbnVtIFJFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUUwMTsKK2Nv
bnN0IEdMZW51bSBJTkNSICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDI7Citjb25z
dCBHTGVudW0gREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAzOworY29uc3Qg
R0xlbnVtIElOVkVSVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTUwQTsKK2NvbnN0IEdM
ZW51bSBJTkNSX1dSQVAgICAgICAgICAgICAgICAgICAgICAgPSAweDg1MDc7Citjb25zdCBHTGVu
dW0gREVDUl9XUkFQICAgICAgICAgICAgICAgICAgICAgID0gMHg4NTA4OworCisvKiBTdHJpbmdO
YW1lICovCitjb25zdCBHTGVudW0gVkVORE9SICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgx
RjAwOworY29uc3QgR0xlbnVtIFJFTkRFUkVSICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYw
MTsKK2NvbnN0IEdMZW51bSBWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDI7
CisKKy8qIFRleHR1cmVNYWdGaWx0ZXIgKi8KK2NvbnN0IEdMZW51bSBORUFSRVNUICAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDI2MDA7Citjb25zdCBHTGVudW0gTElORUFSICAgICAgICAgICAg
ICAgICAgICAgICAgID0gMHgyNjAxOworCisvKiBUZXh0dXJlTWluRmlsdGVyICovCisvKiAgICAg
IE5FQVJFU1QgKi8KKy8qICAgICAgTElORUFSICovCitjb25zdCBHTGVudW0gTkVBUkVTVF9NSVBN
QVBfTkVBUkVTVCAgICAgICAgID0gMHgyNzAwOworY29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBf
TkVBUkVTVCAgICAgICAgICA9IDB4MjcwMTsKK2NvbnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9M
SU5FQVIgICAgICAgICAgPSAweDI3MDI7Citjb25zdCBHTGVudW0gTElORUFSX01JUE1BUF9MSU5F
QVIgICAgICAgICAgID0gMHgyNzAzOworCisvKiBUZXh0dXJlUGFyYW1ldGVyTmFtZSAqLworY29u
c3QgR0xlbnVtIFRFWFRVUkVfTUFHX0ZJTFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKK2NvbnN0
IEdMZW51bSBURVhUVVJFX01JTl9GSUxURVIgICAgICAgICAgICAgPSAweDI4MDE7Citjb25zdCBH
TGVudW0gVEVYVFVSRV9XUkFQX1MgICAgICAgICAgICAgICAgID0gMHgyODAyOworY29uc3QgR0xl
bnVtIFRFWFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA9IDB4MjgwMzsKKworLyogVGV4dHVy
ZVRhcmdldCAqLworLyogICAgICBURVhUVVJFXzJEICovCitjb25zdCBHTGVudW0gVEVYVFVSRSAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxNzAyOworCitjb25zdCBHTGVudW0gVEVYVFVSRV9D
VUJFX01BUCAgICAgICAgICAgICAgID0gMHg4NTEzOworY29uc3QgR0xlbnVtIFRFWFRVUkVfQklO
RElOR19DVUJFX01BUCAgICAgICA9IDB4ODUxNDsKK2NvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1ggICAgPSAweDg1MTU7Citjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9YICAgID0gMHg4NTE2OworY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWSAgICA9IDB4ODUxNzsKK2NvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1kgICAgPSAweDg1MTg7Citjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9aICAgID0gMHg4NTE5OworY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJ
VkVfWiAgICA9IDB4ODUxQTsKK2NvbnN0IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpF
ICAgICAgPSAweDg1MUM7CisKKy8qIFRleHR1cmVVbml0ICovCitjb25zdCBHTGVudW0gVEVYVFVS
RTAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMwOworY29uc3QgR0xlbnVtIFRFWFRVUkUx
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMTsKK2NvbnN0IEdMZW51bSBURVhUVVJFMiAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzI7Citjb25zdCBHTGVudW0gVEVYVFVSRTMgICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEMzOworY29uc3QgR0xlbnVtIFRFWFRVUkU0ICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODRDNDsKK2NvbnN0IEdMZW51bSBURVhUVVJFNSAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0QzU7Citjb25zdCBHTGVudW0gVEVYVFVSRTYgICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NEM2OworY29uc3QgR0xlbnVtIFRFWFRVUkU3ICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODRDNzsKK2NvbnN0IEdMZW51bSBURVhUVVJFOCAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0Qzg7Citjb25zdCBHTGVudW0gVEVYVFVSRTkgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NEM5OworY29uc3QgR0xlbnVtIFRFWFRVUkUxMCAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODRDQTsKK2NvbnN0IEdMZW51bSBURVhUVVJFMTEgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0Q0I7Citjb25zdCBHTGVudW0gVEVYVFVSRTEyICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NENDOworY29uc3QgR0xlbnVtIFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODRDRDsKK2NvbnN0IEdMZW51bSBURVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0Q0U7Citjb25zdCBHTGVudW0gVEVYVFVSRTE1ICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NENGOworY29uc3QgR0xlbnVtIFRFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRE
MDsKK2NvbnN0IEdMZW51bSBURVhUVVJFMTcgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDE7
Citjb25zdCBHTGVudW0gVEVYVFVSRTE4ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQyOwor
Y29uc3QgR0xlbnVtIFRFWFRVUkUxOSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREMzsKK2Nv
bnN0IEdMZW51bSBURVhUVVJFMjAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDQ7Citjb25z
dCBHTGVudW0gVEVYVFVSRTIxICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ1OworY29uc3Qg
R0xlbnVtIFRFWFRVUkUyMiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRENjsKK2NvbnN0IEdM
ZW51bSBURVhUVVJFMjMgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDc7Citjb25zdCBHTGVu
dW0gVEVYVFVSRTI0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ4OworY29uc3QgR0xlbnVt
IFRFWFRVUkUyNSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREOTsKK2NvbnN0IEdMZW51bSBU
RVhUVVJFMjYgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REE7Citjb25zdCBHTGVudW0gVEVY
VFVSRTI3ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERCOworY29uc3QgR0xlbnVtIFRFWFRV
UkUyOCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREQzsKK2NvbnN0IEdMZW51bSBURVhUVVJF
MjkgICAgICAgICAgICAgICAgICAgICAgPSAweDg0REQ7Citjb25zdCBHTGVudW0gVEVYVFVSRTMw
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NERFOworY29uc3QgR0xlbnVtIFRFWFRVUkUzMSAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODRERjsKK2NvbnN0IEdMZW51bSBBQ1RJVkVfVEVYVFVS
RSAgICAgICAgICAgICAgICAgPSAweDg0RTA7CisKKy8qIFRleHR1cmVXcmFwTW9kZSAqLworY29u
c3QgR0xlbnVtIFJFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjkwMTsKK2NvbnN0
IEdMZW51bSBDTEFNUF9UT19FREdFICAgICAgICAgICAgICAgICAgPSAweDgxMkY7Citjb25zdCBH
TGVudW0gTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAgID0gMHg4MzcwOworCisvKiBVbmlm
b3JtIFR5cGVzICovCitjb25zdCBHTGVudW0gRkxPQVRfVkVDMiAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QjUwOworY29uc3QgR0xlbnVtIEZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICA9
IDB4OEI1MTsKK2NvbnN0IEdMZW51bSBGTE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAw
eDhCNTI7Citjb25zdCBHTGVudW0gSU5UX1ZFQzIgICAgICAgICAgICAgICAgICAgICAgID0gMHg4
QjUzOworY29uc3QgR0xlbnVtIElOVF9WRUMzICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1
NDsKK2NvbnN0IEdMZW51bSBJTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTU7
Citjb25zdCBHTGVudW0gQk9PTCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU2Owor
Y29uc3QgR0xlbnVtIEJPT0xfVkVDMiAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NzsKK2Nv
bnN0IEdMZW51bSBCT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTg7Citjb25z
dCBHTGVudW0gQk9PTF9WRUM0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU5OworY29uc3Qg
R0xlbnVtIEZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1QTsKK2NvbnN0IEdM
ZW51bSBGTE9BVF9NQVQzICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUI7Citjb25zdCBHTGVu
dW0gRkxPQVRfTUFUNCAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVDOworY29uc3QgR0xlbnVt
IFNBTVBMRVJfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1RTsKK2NvbnN0IEdMZW51bSBT
QU1QTEVSX0NVQkUgICAgICAgICAgICAgICAgICAgPSAweDhCNjA7CisKKy8qIFZlcnRleCBBcnJh
eXMgKi8KK2NvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAgID0g
MHg4NjIyOworY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAg
PSAweDg2MjM7Citjb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgICAgICAg
ICA9IDB4ODYyNDsKK2NvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAg
ICAgID0gMHg4NjI1OworY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpF
RCAgICAgPSAweDg4NkE7Citjb25zdCBHTGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVS
ICAgICAgICA9IDB4ODY0NTsKK2NvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZF
Ul9CSU5ESU5HID0gMHg4ODlGOworCisvKiBTaGFkZXIgU291cmNlICovCitjb25zdCBHTGVudW0g
Q09NUElMRV9TVEFUVVMgICAgICAgICAgICAgICAgID0gMHg4QjgxOworCisvKiBTaGFkZXIgUHJl
Y2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqLworY29uc3QgR0xlbnVtIExPV19GTE9BVCAgICAgICAg
ICAgICAgICAgICAgICA9IDB4OERGMDsKK2NvbnN0IEdMZW51bSBNRURJVU1fRkxPQVQgICAgICAg
ICAgICAgICAgICAgPSAweDhERjE7Citjb25zdCBHTGVudW0gSElHSF9GTE9BVCAgICAgICAgICAg
ICAgICAgICAgID0gMHg4REYyOworY29uc3QgR0xlbnVtIExPV19JTlQgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4OERGMzsKK2NvbnN0IEdMZW51bSBNRURJVU1fSU5UICAgICAgICAgICAgICAg
ICAgICAgPSAweDhERjQ7Citjb25zdCBHTGVudW0gSElHSF9JTlQgICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4REY1OworCisvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCitjb25zdCBHTGVudW0g
RlJBTUVCVUZGRVIgICAgICAgICAgICAgICAgICAgID0gMHg4RDQwOworY29uc3QgR0xlbnVtIFJF
TkRFUkJVRkZFUiAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MTsKKworY29uc3QgR0xlbnVtIFJH
QkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKK2NvbnN0IEdMZW51bSBSR0I1
X0ExICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwNTc7Citjb25zdCBHTGVudW0gUkdCNTY1
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4RDYyOworY29uc3QgR0xlbnVtIERFUFRIX0NP
TVBPTkVOVDE2ICAgICAgICAgICAgICA9IDB4ODFBNTsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0lO
REVYICAgICAgICAgICAgICAgICAgPSAweDE5MDE7Citjb25zdCBHTGVudW0gU1RFTkNJTF9JTkRF
WDggICAgICAgICAgICAgICAgID0gMHg4RDQ4OworY29uc3QgR0xlbnVtIERFUFRIX1NURU5DSUwg
ICAgICAgICAgICAgICAgICA9IDB4ODRGOTsKKworY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9X
SURUSCAgICAgICAgICAgICA9IDB4OEQ0MjsKK2NvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfSEVJ
R0hUICAgICAgICAgICAgPSAweDhENDM7Citjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0lOVEVS
TkFMX0ZPUk1BVCAgID0gMHg4RDQ0OworY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9SRURfU0la
RSAgICAgICAgICA9IDB4OEQ1MDsKK2NvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfR1JFRU5fU0la
RSAgICAgICAgPSAweDhENTE7Citjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JMVUVfU0laRSAg
ICAgICAgID0gMHg4RDUyOworY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9BTFBIQV9TSVpFICAg
ICAgICA9IDB4OEQ1MzsKK2NvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfREVQVEhfU0laRSAgICAg
ICAgPSAweDhENTQ7Citjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAgICAg
ID0gMHg4RDU1OworCitjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1Rf
VFlQRSAgICAgICAgICAgPSAweDhDRDA7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfTkFNRSAgICAgICAgICAgPSAweDhDRDE7Citjb25zdCBHTGVudW0gRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAgICAgICAgPSAweDhDRDI7Citjb25zdCBH
TGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0UgPSAweDhD
RDM7CisKK2NvbnN0IEdMZW51bSBDT0xPUl9BVFRBQ0hNRU5UMCAgICAgICAgICAgICAgPSAweDhD
RTA7Citjb25zdCBHTGVudW0gREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgID0gMHg4RDAw
OworY29uc3QgR0xlbnVtIFNURU5DSUxfQVRUQUNITUVOVCAgICAgICAgICAgICA9IDB4OEQyMDsK
K2NvbnN0IEdMZW51bSBERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgPSAweDgyMUE7CisK
K2NvbnN0IEdMZW51bSBOT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworCitjb25z
dCBHTGVudW0gRlJBTUVCVUZGRVJfQ09NUExFVEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhD
RDU7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UICAgICAg
ICAgPSAweDhDRDY7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5H
X0FUVEFDSE1FTlQgPSAweDhDRDc7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9ESU1FTlNJT05TICAgICAgICAgPSAweDhDRDk7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJf
VU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgPSAweDhDREQ7CisKK2NvbnN0IEdMZW51bSBG
UkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAweDhDQTY7Citjb25zdCBHTGVudW0gUkVO
REVSQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4Q0E3OworY29uc3QgR0xlbnVtIE1BWF9S
RU5ERVJCVUZGRVJfU0laRSAgICAgICAgICA9IDB4ODRFODsKKworY29uc3QgR0xlbnVtIElOVkFM
SURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA9IDB4MDUwNjsKKworLyogV2ViR0wtc3BlY2lmaWMg
ZW51bXMgKi8KK2NvbnN0IEdMZW51bSBVTlBBQ0tfRkxJUF9ZX1dFQkdMICAgICAgICAgICAgICAg
ID0gMHg5MjQwOworY29uc3QgR0xlbnVtIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAg
ICAgPSAweDkyNDE7Citjb25zdCBHTGVudW0gQ09OVEVYVF9MT1NUX1dFQkdMICAgICAgICAgICAg
ICAgICA9IDB4OTI0MjsKK2NvbnN0IEdMZW51bSBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9O
X1dFQkdMID0gMHg5MjQzOworY29uc3QgR0xlbnVtIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAg
ICAgICAgICAgPSAweDkyNDQ7CisKK3JlYWRvbmx5IGF0dHJpYnV0ZSBHTHNpemVpIGRyYXdpbmdC
dWZmZXJXaWR0aDsKK3JlYWRvbmx5IGF0dHJpYnV0ZSBHTHNpemVpIGRyYXdpbmdCdWZmZXJIZWln
aHQ7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IGFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSBwcm9n
cmFtLCBXZWJHTFNoYWRlciBzaGFkZXIpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9n
cmFtLCBHTHVpbnQgaW5kZXgsIERPTVN0cmluZyBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRCdWZmZXIoR0xlbnVtIHRhcmdldCwg
V2ViR0xCdWZmZXIgYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCAgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1l
YnVmZmVyIGZyYW1lYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCAgICAgICAgIGJpbmRSZW5kZXJidWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xSZW5k
ZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIGJpbmRUZXh0dXJlKEdMZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVy
ZSB0ZXh0dXJlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZENvbG9y
KEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFs
cGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uKEdM
ZW51bSBtb2RlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0
aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEpOworW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVuYyhHTGVudW0gc2ZhY3RvciwgR0xlbnVt
IGRmYWN0b3IpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVuY1Nl
cGFyYXRlKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwgR0xl
bnVtIGRzdEFscGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXI/IGRhdGEsIEdM
ZW51bSB1c2FnZSk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICBidWZmZXJEYXRhKEdMZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyVmlldz8gZGF0YSwg
R0xlbnVtIHVzYWdlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBHTGVu
dW0gdXNhZ2UpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEFycmF5
QnVmZmVyPyBkYXRhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCAgICAgICAgIGJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBB
cnJheUJ1ZmZlclZpZXc/IGRhdGEpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGVudW0gICAg
ICAgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTGVudW0gdGFyZ2V0KTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJpdGZpZWxkIG1hc2spOworW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyQ29sb3IoR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBn
cmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpOworW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGNsZWFyRGVwdGgoR0xjbGFtcGYgZGVwdGgpOworW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyU3RlbmNpbChHTGludCBzKTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBjb2xvck1hc2soR0xib29sZWFuIHJlZCwgR0xib29sZWFu
IGdyZWVuLCBHTGJvb2xlYW4gYmx1ZSwgR0xib29sZWFuIGFscGhhKTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGNvbXBpbGVTaGFkZXIoV2ViR0xT
aGFkZXIgc2hhZGVyKTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXBy
ZXNzZWRUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJu
YWxmb3JtYXQsCitHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBB
cnJheUJ1ZmZlclZpZXcgZGF0YSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCitHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3IGRhdGEpOworCitbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgY29weVRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2
ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgY29weVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xCdWZm
ZXIgY3JlYXRlQnVmZmVyKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTEZyYW1lYnVmZmVy
IGNyZWF0ZUZyYW1lYnVmZmVyKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTFByb2dyYW0g
Y3JlYXRlUHJvZ3JhbSgpOworW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xSZW5kZXJidWZmZXIg
Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIFdlYkdMU2hhZGVyIGNyZWF0ZVNoYWRlcihHTGVudW0gdHlwZSk7CitbU3RyaWN0VHlwZUNo
ZWNraW5nXSBXZWJHTFRleHR1cmUgY3JlYXRlVGV4dHVyZSgpOworCitbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgY3VsbEZhY2UoR0xlbnVtIG1vZGUpOworCitbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyIGJ1ZmZlcik7Citb
U3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xG
cmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CitbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyIHJl
bmRlcmJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlU2hh
ZGVyKFdlYkdMU2hhZGVyIHNoYWRlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7CisKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBkZXB0aEZ1bmMoR0xlbnVtIGZ1bmMpOworW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGRlcHRoTWFzayhHTGJvb2xlYW4gZmxhZyk7CitbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhSYW5nZShHTGNsYW1wZiB6TmVhciwgR0xj
bGFtcGYgekZhcik7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtIHByb2dyYW0sIFdlYkdMU2hhZGVyIHNo
YWRlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGlzYWJsZShHTGVudW0g
Y2FwKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpOworW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJhd0FycmF5cyhHTGVudW0gbW9k
ZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNp
emVpIGNvdW50LCBHTGVudW0gdHlwZSwgR0xpbnRwdHIgb2Zmc2V0KTsKKworW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGVuYWJsZShHTGVudW0gY2FwKTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KEdMdWludCBpbmRleCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmlu
aXNoKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmx1c2goKTsKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcmVu
ZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOworW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJn
ZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlLCBHTGludCBsZXZlbCk7CitbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51bSBtb2RlKTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBnZW5lcmF0ZU1pcG1hcChHTGVudW0gdGFyZ2V0KTsKKworW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0
aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgpOworW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZlVW5p
Zm9ybShXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1aW50IGluZGV4KTsKKworW1N0cmljdFR5cGVD
aGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJz
KFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gR0xpbnQgICAg
ICAgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBET01TdHJpbmcgbmFt
ZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gYW55IGdldEJ1ZmZlclBhcmFtZXRl
cihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSBX
ZWJHTENvbnRleHRBdHRyaWJ1dGVzIGdldENvbnRleHRBdHRyaWJ1dGVzKCk7CisKK1tTdHJpY3RU
eXBlQ2hlY2tpbmddIEdMZW51bSBnZXRFcnJvcigpOworCisvLyBvYmplY3QgZ2V0RXh0ZW5zaW9u
KERPTVN0cmluZyBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gYW55IGdldEV4
dGVuc2lvbihET01TdHJpbmcgbmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwg
UmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUpOworW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRQYXJhbWV0ZXIoR0xl
bnVtIHBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9u
XSBhbnkgZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0xlbnVtIHBu
YW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVs
bCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9n
cmFtIHByb2dyYW0pOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRp
b25dIGFueSBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBu
YW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkg
Z2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyIHNoYWRlciwgR0xlbnVtIHBuYW1lKTsKKwor
W1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlz
ZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyIHNo
YWRlcik7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xTaGFk
ZXJQcmVjaXNpb25Gb3JtYXQgZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdMZW51bSBzaGFkZXJ0
eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0
UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgICAg
Z2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyIHNoYWRlcik7CisKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbV0gc2VxdWVuY2U8RE9NU3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7
CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0
VGV4UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSk7CisKK1tTdHJpY3RUeXBl
Q2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0VW5pZm9ybShXZWJHTFBy
b2dyYW0gcHJvZ3JhbSwgV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24pOworCitbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGdldFVu
aWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOworCitb
U3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFZlcnRl
eEF0dHJpYihHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tp
bmddIEdMc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdMdWludCBpbmRleCwgR0xlbnVt
IHBuYW1lKTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhpbnQoR0xlbnVt
IHRhcmdldCwgR0xlbnVtIG1vZGUpOworW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAg
IGlzQnVmZmVyKFdlYkdMQnVmZmVyIGJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJv
b2xlYW4gICAgaXNDb250ZXh0TG9zdCgpOworW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFu
ICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVh
biAgICBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOworW1N0cmlj
dFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3Jh
bSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNSZW5kZXJidWZmZXIoV2Vi
R0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9v
bGVhbiAgICBpc1NoYWRlcihXZWJHTFNoYWRlciBzaGFkZXIpOworW1N0cmljdFR5cGVDaGVja2lu
Z10gR0xib29sZWFuICAgIGlzVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7CitbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgbGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOworW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgbGlua1Byb2dy
YW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIHBpeGVsU3RvcmVpKEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIHBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxv
YXQgdW5pdHMpOworCitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3IHBp
eGVscyk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZWxlYXNlU2hhZGVy
Q29tcGlsZXIoKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZW5kZXJidWZm
ZXJTdG9yYWdlKEdMZW51bSB0YXJnZXQsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3
aWR0aCwgR0xzaXplaSBoZWlnaHQpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IHNhbXBsZUNvdmVyYWdlKEdMY2xhbXBmIHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KTsKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lzc29yKEdMaW50IHgsIEdMaW50IHksIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHNoYWRlclNvdXJjZShXZWJHTFNoYWRlciBzaGFkZXIs
IERPTVN0cmluZyBzdHJpbmcpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0
ZW5jaWxGdW5jKEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBtYXNrKTsKK1tTdHJpY3RU
eXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsRnVuY1NlcGFyYXRlKEdMZW51bSBmYWNl
LCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFzayk7CitbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE1hc2soR0x1aW50IG1hc2spOworW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdM
dWludCBtYXNrKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3Ao
R0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3BTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xlbnVt
IGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKKworW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIHRleFBhcmFtZXRlcmYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1l
LCBHTGZsb2F0IHBhcmFtKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0ZXhQ
YXJhbWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOworCisv
LyBTdXBwb3J0ZWQgZm9ybXM6CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorR0xpbnQg
Ym9yZGVyLCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3PyBwaXhl
bHMpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
dGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9y
bWF0LAorR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdl
MkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKK0dM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50PyBpbWFnZSk7CitbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCitHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ/IGNhbnZhcyk7CisjaWYg
ZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTworW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAorR0xlbnVtIGZvcm1hdCwgR0xl
bnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQ/IHZpZGVvKTsKKyNlbmRpZgorCitbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdM
ZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAor
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCitHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlw
ZSwgQXJyYXlCdWZmZXJWaWV3PyBwaXhlbHMpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2Vz
RXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKK0dMZW51bSBmb3JtYXQsIEdM
ZW51bSB0eXBlLCBJbWFnZURhdGE/IHBpeGVscyk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAorR0xlbnVtIGZvcm1hdCwg
R0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCitHTGVudW0g
Zm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQ/IGNhbnZhcyk7CisjaWYgZGVm
aW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTworW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKK0dMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2aWRlbyk7CisjZW5kaWYKKworW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xZihXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcs
IEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9j
YXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWkoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRp
b24sIEdMaW50IHgpOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgdW5pZm9ybTFpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJB
cnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlm
b3JtMmYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5
KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVu
aWZvcm0yZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsK
K1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmkoV2Vi
R0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHkpOworW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJpdihXZWJH
TFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2YoV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5LCBHTGZsb2F0IHopOworW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmdihXZWJH
TFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5IHYpOworW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zaShXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeik7CitbU3RyaWN0VHlwZUNo
ZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2l2KFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOworW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBs
b2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00
ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGkoV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHosIEdMaW50IHcp
OworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5p
Zm9ybTRpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKKwor
W1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9y
bU1hdHJpeDJmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5z
cG9zZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSBhcnJheSk7Citb
U3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3Jt
TWF0cml4NGZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNw
b3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOworCitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgICAgICAgICB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsK
K1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZhbGlk
YXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIxZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4KTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGlu
ZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIHZlcnRleEF0dHJpYjJmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7Citb
U3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdMdWludCBp
bmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdM
ZmxvYXQgeik7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmli
M2Z2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWI0ZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBH
TGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1
c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1
ZXMpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
dmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5keCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUs
IEdMYm9vbGVhbiBub3JtYWxpemVkLAorR0xzaXplaSBzdHJpZGUsIEdMaW50cHRyIG9mZnNldCk7
CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2aWV3cG9ydChHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Cit9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAkocmV2aXNpb24gMTc2OTk0KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCwxNiArMzAsMTYgQEAKICNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgogCiAjaW5j
bHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gV2ViR0xTaGFkZXI6OmNyZWF0
ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgR0MzRGVudW0gdHlwZSkKK1Bhc3NSZWZQdHI8
V2ViR0xTaGFkZXI+IFdlYkdMU2hhZGVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSogY3R4LCBHQzNEZW51bSB0eXBlKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xT
aGFkZXIoY3R4LCB0eXBlKSk7CiB9CiAKLVdlYkdMU2hhZGVyOjpXZWJHTFNoYWRlcihXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGN0eCwgR0MzRGVudW0gdHlwZSkKK1dlYkdMU2hhZGVyOjpXZWJHTFNo
YWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjdHgsIEdDM0RlbnVtIHR5cGUpCiAgICAg
OiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1fc291
cmNlKCIiKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oCShy
ZXZpc2lvbiAxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYWRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIFdlYkdMU2hhZGVyIGZp
bmFsIDogcHVibGljIFdlYkdMU2gKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTFNoYWRlcigp
OwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXI+IGNyZWF0ZShXZWJHTFJlbmRl
cmluZ0NvbnRleHQqLCBHQzNEZW51bSk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xTaGFk
ZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiwgR0MzRGVudW0pOwogCiAgICAg
R0MzRGVudW0gZ2V0VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIGNvbnN0IFN0
cmluZyYgZ2V0U291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KQEAgLTQ3LDcgKzQ3
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VmFsaWQoYm9vbCB2YWxpZCkgeyBtX2lzVmFsaWQg
PSB2YWxpZDsgfQogCiBwcml2YXRlOgotICAgIFdlYkdMU2hhZGVyKFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCosIEdDM0RlbnVtKTsKKyAgICBXZWJHTFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiwgR0MzRGVudW0pOwogCiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3Jh
cGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcAkocmV2
aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMSArMzAsMTEgQEAKICNpbmNsdWRlICJX
ZWJHTFNoYXJlZE9iamVjdC5oIgogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKLSNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xTaGFyZWRPYmpl
Y3Q6OldlYkdMU2hhcmVkT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dl
YkdMU2hhcmVkT2JqZWN0OjpXZWJHTFNoYXJlZE9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xPYmplY3QoY29udGV4dCksCiAgICAgICBtX2NvbnRl
eHRHcm91cChjb250ZXh0LT5jb250ZXh0R3JvdXAoKSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaAkocmV2aXNpb24gMTc2OTk0KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOwogY2xhc3MgV2ViR0xDb250ZXh0R3JvdXA7Ci1jbGFzcyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOwogCiAvLyBX
ZWJHTFNoYXJlZE9iamVjdCB0aGUgYmFzZSBjbGFzcyBmb3Igb2JqZWN0cyB0aGF0IGNhbiBiZSBz
aGFyZWQgYnkgbXVsdGlwbGUKIC8vIFdlYkdMUmVuZGVyaW5nQ29udGV4dHMuCkBAIC00OCw3ICs0
OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNTaGFkZXIoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1RleHR1cmUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogCi0gICAgdmlydHVhbCBib29sIHZhbGlkYXRlKGNvbnN0IFdlYkdMQ29udGV4dEdy
b3VwKiBjb250ZXh0R3JvdXAsIGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dCopIGNvbnN0IG92
ZXJyaWRlCisgICAgdmlydHVhbCBib29sIHZhbGlkYXRlKGNvbnN0IFdlYkdMQ29udGV4dEdyb3Vw
KiBjb250ZXh0R3JvdXAsIGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKSBjb25zdCBv
dmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbnRleHRHcm91cCA9PSBtX2NvbnRleHRH
cm91cDsKICAgICB9CkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGFjaENv
bnRleHRHcm91cCgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViR0xTaGFyZWRPYmplY3QoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kik7CisgICAgV2ViR0xTaGFyZWRPYmplY3QoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSopOwogCiAgICAgdmlydHVhbCBib29sIGhhc0dyb3VwT3JDb250ZXh0KCkgY29u
c3Qgb3ZlcnJpZGUKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFRleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVGV4dHVyZS5jcHAJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMVGV4dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE2ICszMSwxNiBA
QAogCiAjaW5jbHVkZSAiV2ViR0xDb250ZXh0R3JvdXAuaCIKICNpbmNsdWRlICJXZWJHTEZyYW1l
YnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAi
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBh
c3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFRleHR1cmU6OmNyZWF0ZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqIGN0eCkKK1Bhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFRleHR1cmU6OmNy
ZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjdHgpCiB7CiAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBXZWJHTFRleHR1cmUoY3R4KSk7CiB9CiAKLVdlYkdMVGV4dHVyZTo6V2ViR0xUZXh0
dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4KQorV2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1
cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmpl
Y3QoY3R4KQogICAgICwgbV90YXJnZXQoMCkKICAgICAsIG1fbWluRmlsdGVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFRleHR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFRleHR1cmUuaAkocmV2aXNpb24gMTc2OTk0KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+V2ViR0xUZXh0dXJlKCk7CiAKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQq
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IGNyZWF0ZShXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2b2lkIHNldFRhcmdldChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbWF4TGV2ZWwpOwogICAgIHZvaWQgc2V0UGFyYW1ldGVyaShHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCBwYXJhbSk7CkBAIC04Miw3ICs4Miw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMg
R0MzRGludCBjb21wdXRlTGV2ZWxDb3VudChHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpOwogCiBwcml2YXRlOgotICAgIFdlYkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHQq
KTsKKyAgICBXZWJHTFRleHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAg
dmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdEltcGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9y
bTNET2JqZWN0KSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAJKHJldmlzaW9uIDE3
Njk5NCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNiArMzAsMTYgQEAKICNpbmNsdWRlICJX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCiAKICNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIK
LSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzc1JlZlB0cjxX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpjcmVh
dGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgsIFZhb1R5cGUgdHlwZSkKK1Bhc3NSZWZQdHI8
V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3Jl
YXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCwgVmFvVHlwZSB0eXBlKQogewogICAg
IHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhjdHgsIHR5cGUp
KTsKIH0KIAotV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6V2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCwgVmFvVHlwZSB0eXBlKQorV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKiBjdHgsIFZhb1R5cGUgdHlwZSkKICAgICA6IFdlYkdMQ29udGV4dE9iamVj
dChjdHgpCiAgICAgLCBtX3R5cGUodHlwZSkKICAgICAsIG1faGFzRXZlckJlZW5Cb3VuZChmYWxz
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTLmgJKHJldmlzaW9uIDE3Njk5NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaAkod29ya2luZyBjb3B5KQpA
QCAtNDIsNyArNDIsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdmlydHVhbCB+V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUygpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJh
eU9iamVjdE9FUz4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCosIFZhb1R5cGUpOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IGNyZWF0ZShXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlKiwgVmFvVHlwZSk7CiAgICAgCiAgICAgLy8gQ2FjaGVkIHZh
bHVlcyBmb3IgdmVydGV4IGF0dHJpYiByYW5nZSBjaGVja3MKICAgICBzdHJ1Y3QgVmVydGV4QXR0
cmliU3RhdGUgewpAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRWZXJ0ZXhB
dHRyaWJEaXZpc29yKEdDM0R1aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKTsKIAogcHJpdmF0
ZToKLSAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVyaW5nQ29udGV4dCos
IFZhb1R5cGUpOworICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSosIFZhb1R5cGUpOwogCiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdElt
cGwoR3JhcGhpY3NDb250ZXh0M0QqLCBQbGF0Zm9ybTNET2JqZWN0KSBvdmVycmlkZTsKICAgICAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244537</attachid>
            <date>2015-01-13 13:01:11 -0800</date>
            <delta_ts>2015-01-13 13:44:52 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.patch</filename>
            <type>text/plain</type>
            <size>1575736</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAxNS0wMS0xMyAgUm9nZXIg
Rm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkdMMjogU3VwcG9ydCB3
ZWJnbDIgY29udGV4dCBjcmVhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNjQwOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUwMDIxNzA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMg
Y292ZXJlZCBieSBleGlzdGluZyBLaHJvbm9zIHRlc3RzIGZvciBXZWJHTCAxLjAgY29uZm9ybWFu
Y2UuCisKKyAgICAgICAgQ3JlYXRlIGEgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSBjbGFzcyB0
aGF0IGV4dGVuZHMgdG8gYSBXZWJHTDFSZW5kZXJpbmdDb250ZXh0IGFuZCBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LgorICAgICAgICBSZXBsYWNlIGFsbCBwcmV2aW91cyBpbnN0YW5jZXMgb2YgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0IHVzYWdlcyB3aXRoIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Ug
dXNhZ2VzIGZvciBub3cuCisgICAgICAgIEFzIHRoZSBmaXJzdCBzdGVwLCB0aGUgV2ViR0wxIGFu
ZCBXZWJHTDIgY29udGV4dHMgd2lsbCBoYXZlIHRoZSBleGFjdCBzYW1lIGZ1bmN0aW9uYWxpdHku
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5t
YWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1
c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3Rv
bS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3Vz
dG9tLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0wy
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcDogQWRk
ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20u
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgICogaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aXMz
ZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBTkdMRUlu
c3RhbmNlZEFycmF5czo6QU5HTEVJbnN0YW5jZWRBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6
QU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
QU5HTEVJbnN0YW5jZWRBcnJheXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
Ojp0eXBlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVYVEJsZW5kTWluTWF4OjpFWFRCbGVuZE1pbk1heCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXguaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9FWFRGcmFnRGVwdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RVhURnJhZ0RlcHRo
OjpFWFRGcmFnRGVwdGgpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVEZyYWdEZXB0aC5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RVhUU2hhZGVyVGV4dHVyZUxPRDo6RVhUU2hhZGVyVGV4dHVyZUxPRCk6CisgICAg
ICAgICogaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4dHVyZUxPRC5oOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM6OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yyk6CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmg6
CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUc1JHQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
WFRzUkdCOjpFWFRzUkdCKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9FWFRzUkdCLmg6CisgICAg
ICAgICogaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpPRVNFbGVtZW50SW5kZXhVaW50OjpPRVNFbGVtZW50SW5kZXhVaW50KToKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50Lmg6CisgICAgICAgICogaHRtbC9jYW52
YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPRVNTdGFu
ZGFyZERlcml2YXRpdmVzOjpPRVNTdGFuZGFyZERlcml2YXRpdmVzKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
T0VTVGV4dHVyZUZsb2F0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9FU1RleHR1cmVGbG9hdDo6
T0VTVGV4dHVyZUZsb2F0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQu
aDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6T0VTVGV4dHVyZUZsb2F0TGluZWFyOjpPRVNUZXh0dXJlRmxvYXRMaW5l
YXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdExpbmVhci5oOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6T0VTVGV4dHVyZUhhbGZGbG9hdDo6T0VTVGV4dHVyZUhhbGZGbG9hdCk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5oOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T0VT
VGV4dHVyZUhhbGZGbG9hdExpbmVhcjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcik6CisgICAg
ICAgICogaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oOgorICAgICAgICAq
IGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok9FU1ZlcnRleEFycmF5T2JqZWN0OjpPRVNWZXJ0ZXhBcnJheU9iamVjdCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuaDoKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcC4KKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oLgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsLgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaDogQWRkZWQuCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGw6IEFkZGVkLgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OldlYkdM
QnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0
ZWQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUFZSVEMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVzc2VkVGV4
dHVyZVBWUlRDOjpzdXBwb3J0ZWQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVTM1RDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMQ29udGV4dEdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdy
b3VwOjpnZXRBR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250
ZXh0R3JvdXA6OmFkZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3Jv
dXA6OnJlbW92ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6
Omxvc2VDb250ZXh0R3JvdXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdy
b3VwLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6V2ViR0xDb250ZXh0T2JqZWN0KToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6Y29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTERl
YnVnUmVuZGVyZXJJbmZvOjpXZWJHTERlYnVnUmVuZGVyZXJJbmZvKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xEZWJ1Z1NoYWRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xEZWJ1Z1NoYWRl
cnM6OldlYkdMRGVidWdTaGFkZXJzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERlYnVn
U2hhZGVycy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMRGVwdGhUZXh0dXJlOjpXZWJHTERlcHRoVGV4dHVyZSk6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
RHJhd0J1ZmZlcnM6OldlYkdMRHJhd0J1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xE
cmF3QnVmZmVyczo6c3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRHJhd0J1ZmZl
cnM6OnNhdGlzZmllc1dlYkdMUmVxdWlyZW1lbnRzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTERyYXdCdWZmZXJzLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xFeHRlbnNpb246OldlYkdMRXh0ZW5zaW9uKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xFeHRlbnNpb246OmNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZm
ZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMTG9zZUNvbnRleHQ6OldlYkdMTG9zZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMb3NlQ29udGV4dDo6bG9zZUNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
TG9zZUNvbnRleHQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTE9iamVjdDo6V2ViR0xPYmplY3QpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMT2JqZWN0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9n
cmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6V2ViR0xQcm9ncmFtKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFByb2dyYW0uaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZl
cik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGw6IFJlbW92ZWQuCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6IEFkZGVkLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDogQWRkZWQu
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGw6IEFk
ZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMU2hhZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFk
ZXI6OldlYkdMU2hhZGVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0OjpXZWJHTFNoYXJlZE9iamVjdCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFRleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1cmUpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaDoKKwogMjAxNS0wMS0xMyAgSm9z
ZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFJlbW92ZSB1bnVzZWQgUmVzaXplSW1hZ2UgYW5kIERlY29kZUltYWdlRGF0YSB0aW1lbGlu
ZSBldmVudHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzgzNzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTQwLDYgKzU0
MCw4IEBAIHNldChXZWJDb3JlX05PTl9TVkdfSURMX0ZJTEVTCiAgICAgaHRtbC9jYW52YXMvT0VT
VGV4dHVyZUhhbGZGbG9hdC5pZGwKICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0
TGluZWFyLmlkbAogICAgIGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmlkbAorICAg
IGh0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsCisgICAgaHRtbC9jYW52YXMv
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUlu
Zm8uaWRsCiAgICAgaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaWRsCiAgICAgaHRtbC9jYW52YXMv
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5pZGwKQEAgLTU1NSw3ICs1NTcsNyBAQCBzZXQoV2Vi
Q29yZV9OT05fU1ZHX0lETF9GSUxFUwogICAgIGh0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQu
aWRsCiAgICAgaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmlkbAogICAgIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyYnVmZmVyLmlkbAotICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5pZGwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbAogICAg
IGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbAogICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVy
UHJlY2lzaW9uRm9ybWF0LmlkbAogICAgIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5pZGwKQEAg
LTExNDUsNyArMTE0Nyw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy9qcy9K
U1RyZWVXYWxrZXJDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9t
LmNwcAogICAgIGJpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCi0gICAgYmlu
ZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCisgICAgYmluZGluZ3Mv
anMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pz
L0pTV2ViS2l0UG9pbnRDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20u
Y3BwCiAgICAgYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCkBAIC0xNjY5
LDYgKzE2NzEsOCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaHRtbC9jYW52YXMvT0VTVGV4
dHVyZUhhbGZGbG9hdC5jcHAKICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGlu
ZWFyLmNwcAogICAgIGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcAorICAgIGh0
bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwCisgICAgaHRtbC9jYW52YXMvV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKICAgICBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAK
ICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcAogICAgIGh0bWwv
Y2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAKQEAgLTE2ODgsNyArMTY5Miw3
IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAK
ICAgICBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCiAgICAgaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJidWZmZXIuY3BwCi0gICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cAorICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCiAgICAgaHRt
bC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCiAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXJQcmVj
aXNpb25Gb3JtYXQuY3BwCiAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwCkBA
IC0yNzY3LDYgKzI3NzEsOCBAQCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICBodG1sL2NhbnZh
cy9PRVNUZXh0dXJlSGFsZkZsb2F0LmNwcAogICAgICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJl
SGFsZkZsb2F0TGluZWFyLmNwcAogICAgICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9i
amVjdC5jcHAKKyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAK
KyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKICAgICAgICAg
aHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVBVEMuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQy5jcHAKQEAgLTI3ODYsNyArMjc5Miw3IEBAIGlmIChFTkFCTEVfV0VCR0wp
CiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcAogICAgICAgICBodG1sL2NhbnZh
cy9XZWJHTFByb2dyYW0uY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVy
LmNwcAotICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisgICAg
ICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCiAgICAgICAgIGh0
bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYWRl
clByZWNpc2lvbkZvcm1hdC5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmpl
Y3QuY3BwCkBAIC0yODA4LDYgKzI4MTQsOCBAQCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICBo
dG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmlkbAogICAgICAgICBodG1sL2NhbnZhcy9P
RVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmlkbAogICAgICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0
ZXhBcnJheU9iamVjdC5pZGwKKyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29u
dGV4dC5pZGwKKyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwK
ICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbAogICAgICAgICBodG1sL2Nh
bnZhcy9XZWJHTEJ1ZmZlci5pZGwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUFUQy5pZGwKQEAgLTI4MjMsNyArMjgzMSw3IEBAIGlmIChFTkFCTEVfV0VCR0wpCiAg
ICAgICAgIGh0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQuaWRsCiAgICAgICAgIGh0bWwvY2Fu
dmFzL1dlYkdMUHJvZ3JhbS5pZGwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZm
ZXIuaWRsCi0gICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwKKyAg
ICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGwKICAgICAgICAg
aHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaWRsCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyUHJlY2lzaW9uRm9ybWF0LmlkbAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUu
aWRsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE3ODM3MSkK
KysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAg
LTQ0NCwxMiArNDQ0LDE0IEBAIE5PTl9TVkdfQklORElOR19JRExTID0gXAogICAgICQoV2ViQ29y
ZSkvaHRtbC9jYW52YXMvV2ViR0xMb3NlQ29udGV4dC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRt
bC9jYW52YXMvV2ViR0xQcm9ncmFtLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmJ1ZmZlci5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTFNo
YWRlci5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXJQcmVjaXNp
b25Gb3JtYXQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5p
ZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRs
IFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMu
aWRsIFwKKyAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaWRsIFwKKyAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRl
eHQuaWRsIFwKKwkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
aWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvdHJhY2svQXVkaW9UcmFjay5pZGwgXAogICAgICQo
V2ViQ29yZSkvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5pZGwgXAogICAgICQoV2ViQ29yZSkv
aHRtbC90cmFjay9EYXRhQ3VlLmlkbCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MjcsOCArMTcyNyw4IEBACiAJCTQ5QzdCOURBMTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTFJlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlDN0I5QkExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmgg
Ki87IH07CiAJCTQ5QzdCOURDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
QzdCOUJDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLzsg
fTsKIAkJNDlDN0I5REQxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUJE
MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi87IH07Ci0JCTQ5
QzdCOURGMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkYxMDQyRDMy
RjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07Ci0JCTQ5QzdCOUUw
MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUMwMTA0MkQzMkYwMDA5RDQ0
NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKKwkJNDlDN0I5REYxMDQyRDMyRjAw
MDlENDQ3IC8qIFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkYxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9OworCQk0OUM3QjlFMDEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJl
bmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlDN0I5RTIxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMU2hhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5QzdCOUMyMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5jcHAgKi87IH07CiAJ
CTQ5QzdCOUUzMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzMxMDQyRDMyRjAwMDlENDQ3
IC8qIFdlYkdMU2hhZGVyLmggKi87IH07CiAJCTQ5QzdCOUU1MTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTFRleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlDN0I5QzUxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMVGV4dHVyZS5jcHAgKi87IH07
CkBAIC0xNzY4LDEwICsxNzY4LDEwIEBACiAJCTQ5RUVEMTQzMTA1MTk2OTQwMDA5OUZBQiAvKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlFRUQxNDQxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAgKi87IH07CiAJCTQ5RUVEMTQ1MTA1MTk2OTQwMDA5OUZBQiAvKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0YxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmggKi87IH07Ci0JCTQ5RUVEMTQ2MTA1MTk2OTQwMDA5OUZBQiAvKiBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwICovOyB9OwotCQk0OUVFRDE0NzEwNTE5Njk0MDAwOTlGQUIgLyogSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5oICovOyB9OworCQk0OUVFRDE0NjEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RUVEMTQwMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0Nv
bnRleHQuY3BwICovOyB9OworCQk0OUVFRDE0NzEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250
ZXh0LmggKi87IH07CiAJCTQ5RUVEMTRFMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUVFRDE0QjEwNTE5NzE5MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwICovOyB9OwotCQk0OUVFRDE0RjEwNTE5NzFBMDAwOTlGQUIg
LyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxNEMxMDUxOTcxQTAwMDk5RkFCIC8qIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLzsgfTsKKwkJNDlFRUQxNEYxMDUxOTcx
QTAwMDk5RkFCIC8qIEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0QzEwNTE5NzFBMDAw
OTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJNDlF
RUQxNTAxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0
RDEwNTE5NzFBMDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAq
LzsgfTsKIAkJNDlGQzdBNTAxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUZD
N0E0RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLzsgfTsK
IAkJNDlGRkJGMUQxMUM4NTUwRTAwNkE3MTE4IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlGRkJGMUMxMUM4
NTUwRTAwNkE3MTE4IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLm1tICovOyB9OwpAQCAtNTg0MCw2
ICs1ODQwLDEyIEBACiAJCUQzNTlENzkzMTI5Q0EzQzAwMDA2RTVEMiAvKiBET01IVE1MRGV0YWls
c0VsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDM1OUQ3OTAxMjlDQTNDMDAwMDZFNUQyIC8qIERPTUhUTUxEZXRhaWxzRWxlbWVu
dEludGVybmFsLmggKi87IH07CiAJCUQzNTlEOEJFMTI5Q0E1NUMwMDA2RTVEMiAvKiBKU0hUTUxE
ZXRhaWxzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBEMzU5RDhCQzEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0YWlsc0VsZW1lbnQu
Y3BwICovOyB9OwogCQlEMzU5RDhCRjEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0YWlsc0Vs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQz
NTlEOEJEMTI5Q0E1NUMwMDA2RTVEMiAvKiBKU0hUTUxEZXRhaWxzRWxlbWVudC5oICovOyB9Owor
CQlEMzlDNzJENzFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJE
NTFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi87IH07
CisJCUQzOUM3MkQ4MUE1QzhCMEIwMEFFRDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJE
NjFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovOyB9Owor
CQlEMzlDNzJERDFBNUM4QzhFMDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJEQjFB
NUM4QzhFMDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CisJCUQz
OUM3MkRFMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJEQzFBNUM4QzhF
MDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovOyB9OworCQlEMzlDNzJFNDFB
NUM5M0FGMDBBRUQ4OUMgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzOUM3MkUzMUE1Qzkz
QUYwMEFFRDg5QyAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovOyB9Owor
CQlEMzlDNzJFNjFBNUM5NDBCMDBBRUQ4OUMgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQzOUM3MkU1MUE1Qzk0MEIwMEFFRDg5QyAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VD
dXN0b20uY3BwICovOyB9OwogCQlEM0E5NEEzODEyMkRBQkFDMDBBMzdCQkMgLyogTWVkaWFRdWVy
eUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDNBOTRBMzExMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmNwcCAqLzsgfTsKIAkJ
RDNBOTRBMzkxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0E5NEEzMjEyMkRBQkFDMDBBMzdC
QkMgLyogTWVkaWFRdWVyeUxpc3QuaCAqLzsgfTsKIAkJRDNBOTRBM0IxMjJEQUJBQzAwQTM3QkJD
IC8qIE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEQzQTk0QTM0MTIyREFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmggKi87IH07CkBAIC01ODQ5LDYgKzU4NTUsMTAgQEAKIAkJRDNBQTEwRjQx
MjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0FBMTBGMjEyM0E5OEFBMDA5MjE1MkIgLyog
TWVkaWFRdWVyeU1hdGNoZXIuaCAqLzsgfTsKIAkJRDNENEU5NzIxMzBDN0NGRTAwN0JBNTQwIC8q
IEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEM0Q0RTk3MDEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVt
ZW50LmNwcCAqLzsgfTsKIAkJRDNENEU5NzMxMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDNENEU5NzExMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5oICovOyB9Owor
CQlEM0UxNEJCNTFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRTE0QkIz
MUE1RENGNEIwMDk3QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9Owor
CQlEM0UxNEJCNjFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0UxNEJCNDFB
NURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggKi87IH07CisJCUQz
RTE0QkI5MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNFMTRCQjcx
QTVEQ0Y3QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi87IH07
CisJCUQzRTE0QkJBMUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRTE0
QkI4MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLzsg
fTsKIAkJRDYxOUEzMDcxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDYxOUEz
MDUxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwICovOyB9Owog
CQlENjE5QTMwODE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDYxOUEzMDYxNDRF
MDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCAqLzsgfTsKIAkJRDY0ODlE
MjUxNjZGRkNGMTAwN0MwMzFCIC8qIEpTSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENjQ4OUQyMzE2NkZGQ0YxMDA3
QzAzMUIgLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCAqLzsgfTsKQEAgLTg3OTYsOSArODgw
Niw5IEBACiAJCTQ5QzdCOUJDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlCRDEwNDJEMzJGMDAwOUQ0NDcg
LyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHBhdGggPSBjYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlCRTEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdC
OUJGMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDsg
cGF0aCA9IGNhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk0OUM3QjlDMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5n
Q29udGV4dC5oOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3QjlDMTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUJGMTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMMVJl
bmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlD
MDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTDFSZW5kZXJpbmdDb250ZXh0Lmg7IHBhdGggPSBj
YW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUM3QjlDMTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGw7IHBh
dGggPSBjYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ5QzdCOUMyMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTFNoYWRlci5jcHA7IHBh
dGggPSBjYW52YXMvV2ViR0xTaGFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0OUM3QjlDMzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xTaGFkZXIuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTFNo
YWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlDNDEwNDJEMzJGMDAw
OUQ0NDcgLyogV2ViR0xTaGFkZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMU2hh
ZGVyLmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTFNoYWRlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC04ODQwLDEwICs4ODUwLDEwIEBACiAJCTQ5RUVEMTNEMTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ5RUVEMTNGMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFRDE0MDEwNTE5Njk0MDAw
OTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUQx
NDAxMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlG
QUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OUVFRDE0QjEwNTE5NzE5MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0wx
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ5RUVEMTREMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlG
QzdBNEYxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTgg
LyogR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEzMzIwLDYgKzEzMzMwLDEyIEBACiAJCUQzNTlENzkwMTI5Q0EzQzAwMDA2RTVE
MiAvKiBET01IVE1MRGV0YWlsc0VsZW1lbnRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01IVE1MRGV0YWlsc0VsZW1lbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlEMzU5RDhCQzEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0
YWlsc0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNI
VE1MRGV0YWlsc0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMzU5
RDhCRDEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0YWlsc0VsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MRGV0YWlsc0VsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDM5QzcyRDUxQTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzOUM3
MkQ2MUE1QzhCMEIwMEFFRDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDsg
cGF0aCA9IGNhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUQzOUM3MkRCMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMzlDNzJEQzFBNUM4QzhFMDBB
RUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmg7IHBhdGggPSBjYW52YXMvV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMzlDNzJF
MzFBNUM5M0FGMDBBRUQ4OUMgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzOUM3MkU1MUE1
Qzk0MEIwMEFFRDg5QyAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNBOTRBMzEx
MjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDNBOTRBMzIxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQTk0QTMzMTIyREFCQUMwMEEzN0JCQyAvKiBNZWRp
YVF1ZXJ5TGlzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFRdWVyeUxpc3QuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMzMzEsNiArMTMzNDcsMTIgQEAKIAkJ
RDNBQTEwRjIxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlNYXRjaGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQzRDRFOTcwMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFy
eUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFN1
bW1hcnlFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNENEU5NzEx
MzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIVE1MU3VtbWFyeUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRDNFMTRCQjMxQTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2ViR0wyUmVuZGVyaW5n
Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0Ux
NEJCNDFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0UxNEJCNzFBNURDRjdCMDA5N0E2RTkgLyog
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUQzRTE0QkI4MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUQzRTE0QkJCMUE1REU4RjUwMDk3QTZFOSAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbDsgcGF0aCA9
IGNhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRDNFMTRCQkMxQTVERThGNTAwOTdBNkU5IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENjE5QTMwNTE0NEUwMEJFMDA0QkMzMDIgLyogQ2hp
bGRMaXN0TXV0YXRpb25TY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRDYxOUEzMDYxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENjQ4OUQyMzE2NkZGQ0YxMDA3QzAz
MUIgLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTSFRNTFRlbXBsYXRlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNTgzNiw5ICsxNTg1OCwxNSBAQAogCQkJCTQ5QzdCOUI5MTA0MkQzMkYw
MDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmJ1ZmZlci5jcHAgKi8sCiAJCQkJNDlDN0I5QkExMDQyRDMy
RjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmggKi8sCiAJCQkJNDlDN0I5QkIxMDQyRDMy
RjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmlkbCAqLywKLQkJCQk0OUM3QjlCRjEwNDJE
MzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKLQkJCQk0OUM3QjlD
MDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggKi8sCi0JCQkJNDlD
N0I5QzExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwgKi8sCisJ
CQkJNDlDN0I5QkYxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3Bw
ICovLAorCQkJCTQ5QzdCOUMwMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTDFSZW5kZXJpbmdDb250
ZXh0LmggKi8sCisJCQkJNDlDN0I5QzExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmlu
Z0NvbnRleHQuaWRsICovLAorCQkJCUQzOUM3MkRCMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKKwkJCQlEMzlDNzJEQzFBNUM4QzhFMDBBRUQ4OUMgLyog
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovLAorCQkJCUQzRTE0QkJCMUE1REU4RjUwMDk3QTZF
OSAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbCAqLywKKwkJCQlEMzlDNzJENTFBNUM4QjBC
MDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi8sCisJCQkJRDM5Qzcy
RDYxQTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLywKKwkJ
CQlEM0UxNEJCQzFBNURFOEY1MDA5N0E2RTkgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5p
ZGwgKi8sCiAJCQkJNDlDN0I5QzIxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmNwcCAq
LywKIAkJCQk0OUM3QjlDMzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaCAqLywKIAkJ
CQk0OUM3QjlDNDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaWRsICovLApAQCAtMTg5
MDcsOCArMTg5MzUsMTIgQEAKIAkJCQk0OUM3Qjk4OTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJH
TFByb2dyYW0uaCAqLywKIAkJCQk0OUM3Qjk4QTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFJl
bmRlcmJ1ZmZlci5jcHAgKi8sCiAJCQkJNDlDN0I5OEIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2Vi
R0xSZW5kZXJidWZmZXIuaCAqLywKLQkJCQk0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovLAotCQkJCTQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZB
QiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oICovLAorCQkJCUQzRTE0QkI3MUE1RENGN0Iw
MDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwICovLAorCQkJCUQzRTE0
QkI4MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLywK
KwkJCQk0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0
LmNwcCAqLywKKwkJCQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJp
bmdDb250ZXh0LmggKi8sCisJCQkJRDNFMTRCQjMxQTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5jcHAgKi8sCisJCQkJRDNFMTRCQjQxQTVEQ0Y0QjAwOTdBNkU5IC8q
IEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovLAogCQkJCTQ5QzdCOThGMTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU1dlYkdMU2hhZGVyLmNwcCAqLywKIAkJCQk0OUM3Qjk5MDEwNDJEMkQzMDAwOUQ0
NDcgLyogSlNXZWJHTFNoYWRlci5oICovLAogCQkJCUEwN0QzMzUzMTUyQjYzMEUwMDFCNjM5MyAv
KiBKU1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCAqLywKQEAgLTIxMDA1LDcgKzIxMDM3
LDkgQEAKIAkJCQk3QzczRkIxNzE5MUVGODA4MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhhbmRs
ZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcCAqLywKIAkJCQlCRTZERjcwODE3MUNBMkM1MDBERDUyQjgg
LyogSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcCAqLywKIAkJCQlCRTZERjcwQTE3MUNBMkM1MDBERDUy
QjggLyogSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAgKi8sCi0JCQkJNDlFRUQxNEMxMDUxOTcx
QTAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKKwkJCQlE
MzlDNzJFNTFBNUM5NDBCMDBBRUQ4OUMgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3Vz
dG9tLmNwcCAqLywKKwkJCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTDFSZW5k
ZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKKwkJCQlEMzlDNzJFMzFBNUM5M0FGMDBBRUQ4OUMg
LyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKIAkJCQlCQzI3NUI3ODEx
QzVEMUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAgKi8sCiAJCQkJRTFDQTVD
QkIwRThDRENBRjAwRThFRjkwIC8qIEpTV29ya2VyQ3VzdG9tLmNwcCAqLywKIAkJCQlFMTgyNThB
QjBFRjNDRDcwMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgKi8sCkBA
IC0yNTIxOCw3ICsyNTI1Miw3IEBACiAJCQkJOTNGMUQ1QzExMkQ1MzM1NjAwODMyQkVDIC8qIEpT
V2ViR0xMb3NlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5OUMxMDQyRDJEMzAw
MDlENDQ3IC8qIEpTV2ViR0xQcm9ncmFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3Qjk5RTEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFJlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDlFRUQxNDcxMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk0OUVFRDE0NzEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlBMzEwNDJEMkQzMDAw
OUQ0NDcgLyogSlNXZWJHTFNoYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA3RDMzNTYxNTJC
NjMwRTAwMUI2MzkzIC8qIEpTV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5QzdCOUE1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMVGV4dHVyZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNTQ1Niw2ICsyNTQ5MCw3IEBACiAJCQkJMTQxMTVCNTIwOUY4NEI3
MTAwQ0E0RkMxIC8qIE5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NEZFNzMxMEEyMjk3QkUw
MDU4RDdBRCAvKiBOb2RlRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTRGRTczMzBBMjI5
N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RDNFMTRCQjYxQTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzUwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVJdGVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMUIwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2MzE4OUFFMzBFODNBMzMzMDAwMTJFNDEgLyogTm9k
ZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTI1Njg2LDYgKzI1NzIxLDcgQEAKIAkJCQlF
NDNBMDIzQjE3RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1QjdBNTUxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzNDNDBBMTkwMEUzMDBBOEVGNUYgLyogUmVuZGVyRmll
bGRzZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUQzRTE0QkJBMUE1RENGN0IwMDk3QTZFOSAvKiBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2NkM3NzMx
MEFCNjAzRkQwMDIzOENDNCAvKiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTNDODI5OEUxM0Q4RDkyNzAwREUyREVCIC8qIFJlbmRlckZsZXhpYmxlQm94Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MDhDQ0E0RjEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxv
d1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTk1Niw2ICsyNTk5Miw3IEBACiAJCQkJQUI3
MTcwODkwQjMxMTgwODAwMTcxMjNFIC8qIFNlYXJjaFBvcHVwTWVudS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNGMUUxRUMxQTQwRkREQzAwMzQ4RDEzIC8qIE5TUG9wb3ZlclNQSS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTc2RjM2RUIxNDY4NjIyNTAwNUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRDM5QzcyRDgxQTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDBFMEZCMEU5NzJDMzUw
MDI2NURFQSAvKiBTZWN1cml0eU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMEUwRkMw
RTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTc0RDJEQTUxNDZBNTM1RDAwRDUxRjhCIC8qIFNlY3VyaXR5UG9saWN5LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2NjMxLDcgKzI2NjY4LDcgQEAKIAkJCQk0OUM3QjlENTEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0xPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUQ3MTA0MkQzMkYw
MDA5RDQ0NyAvKiBXZWJHTFByb2dyYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOURBMTA0
MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NDlDN0I5RTAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNDlDN0I5RTAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmlu
Z0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUUzMTA0MkQzMkYwMDA5RDQ0NyAv
KiBXZWJHTFNoYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA3RDMzNTgxNTJCNjMyRDAwMUI2
MzkzIC8qIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
MUQzQ0Y4NzE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xTaGFyZWRPYmplY3QuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjY3MDAsNiArMjY3MzcsNyBAQAogCQkJCUExNDgzMkMxMTg3RjY1N0EwMERBNjNB
NiAvKiBXS1R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTQ4MzJDMzE4N0Y2NURGMDBEQTYz
QTYgLyogV0tVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNDgzMkM0MTg3RjY2M0Mw
MERBNjNBNiAvKiBXS1ZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCUQzOUM3MkRFMUE1QzhDOEUw
MEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MTQ4MzJDNjE4N0Y2NjhGMDBEQTYzQTYgLyogV0tWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzc5OTE5OTcxMjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyRTQzNDY0NjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI3NjkzLDYgKzI3NzMxLDcgQEAKIAkJCQlCQzUzREE0ODExNDMxMzREMDAw
RDgxN0UgLyogRE9NV3JhcHBlcldvcmxkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMUQxMzgx
MEE1MzI1NTIwMDY0QkY1RiAvKiBET01YUGF0aC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1RTlF
MEEyMEFCM0EwQzcwMDA2OUNEMCAvKiBET01YUGF0aEV4cHJlc3Npb24ubW0gaW4gU291cmNlcyAq
LywKKwkJCQlEMzlDNzJENzFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NUU5RTBBNjBBQjNBMEM3MDAwNjlDRDAgLyog
RE9NWFBhdGhSZXN1bHQubW0gaW4gU291cmNlcyAqLywKIAkJCQlGRDE3NjJFMzE3NjY4NkVBMDBE
ODM2QTggLyogRG93blNhbXBsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDQTU5NUUwQjI3
QkQ5RTAwRkEwMjFEIC8qIERyYWdDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg3
NDMsNiArMjg3ODIsNyBAQAogCQkJCTI2NzcyNjA0MUE1REY2RjIwMDNDMjRERCAvKiBVUkxGaWx0
ZXJQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEQTdDMTYxODgzMjJFQjAwQzk1NEI1
IC8qIEpTVG91Y2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEQTdDMTgxODgzMjJFQjAwQzk1
NEI1IC8qIEpTVG91Y2hFdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlEMzlDNzJFNjFBNUM5
NDBCMDBBRUQ4OUMgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGREE3QzFBMTg4MzIyRUIwMEM5NTRCNSAvKiBKU1RvdWNoTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzAzMzRFOTE0NUExRjM2MDA4RDhENDUgLyogSlNUcmFj
a0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzg0NjM0MjE0NUIxNTFBMDBBNThERjEg
LyogSlNUcmFja0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg3ODIsOCArMjg4MjIsOCBA
QAogCQkJCTkzRjFENUMwMTJENTMzNTYwMDgzMkJFQyAvKiBKU1dlYkdMTG9zZUNvbnRleHQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5OUIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xQ
cm9ncmFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOTlEMTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU1dlYkdMUmVuZGVyYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVEMTQ2MTA1
MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk0OUVFRDE0RjEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFRUQxNDYxMDUxOTY5NDAwMDk5RkFC
IC8qIEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUVF
RDE0RjEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOUEyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdM
U2hhZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEwN0QzMzU1MTUyQjYzMEUwMDFCNjM5MyAv
KiBKU1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5
QzdCOUE0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMVGV4dHVyZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI4OTQ1LDYgKzI4OTg1LDcgQEAKIAkJCQkwNzhFMDkwMzE3RDE0Q0VFMDA0MjBBQTEg
LyogTWVkaWFTdHJlYW1UcmFja0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3RkZERTY4
MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwNzYzMDZEMjE3RTE0NzhEMDA1QTdDNEUgLyogTWVkaWFTdHJlYW1UcmFja1Nv
dXJjZXNSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQzRTE0QkI1MUE1RENGNEIwMDk3
QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Q0Q2NDFFQkYxODE5QjM2MDAwRUU0QzQxIC8qIE1lZGlhVGltZUFWRm91bmRhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDRDYwQzBDNjE5M0U4N0M3MDAzQzY1NkIgLyogTWVkaWFUaW1lUVRL
aXQubW0gaW4gU291cmNlcyAqLywKIAkJCQkwNzA1ODUzQTE3RkUwNzcwMDA1RjJCQ0IgLyogTWVk
aWFUcmFja0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTQzOSw2ICsyOTQ4MCw3
IEBACiAJCQkJNEI2RkE2RjcwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUU0QUZEMDBCMERBRjMzNTQwMEY1RjU1QyAvKiBTTUlMVGltZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEFGRDAwRDBEQUYzMzU1MDBGNUY1NUMgLyogU01JTFRp
bWVDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDM5QzcyRTQxQTVDOTNBRjAwQUVE
ODlDIC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MTBENEEzMzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEQ0QTM2MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRT
dHJlYW1IYW5kbGVCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQUJBRTFGMTAzQzE5MTMw
MDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI5NzI3LDYgKzI5NzY5LDcgQEAKIAkJCQk2NTUwQjZBNTA5OURGMDI3MDA5MEQ3ODEgLyogVGV4
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRTdCMkRCNjE1ODZBQkFEMDA5OEIzRkEgLyogVGV4
dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NERDRTUxODgx
MDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQz
RTE0QkI5MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzcyQzAwQzQxMjk2MTFGMTAwNUM5NTc1IC8qIFRleHRCb3Vu
ZGFyaWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzk3MEQwMEE1REYwMDMwMDc0RCAv
KiBUZXh0Qm91bmRhcmllcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDRDhBNUYwMTVGNTZGMkMw
MDk4RDA3MSAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5OTIw
LDcgKzI5OTYzLDcgQEAKIAkJCQk0OUM3QjlENDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5RDYxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3QjlEOTEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0xSZW5kZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlDN0I5REYx
MDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0OUM3QjlERjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3QjlFMjEwNDJEMzJGMDAwOUQ0NDcgLyogV2Vi
R0xTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTA4Q0YxNTQxNTJCNzdCMzAwOUM1Nzc1
IC8qIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTAx
RDNDRjg2MTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTFNoYXJlZE9iamVjdC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI5OTcwLDYgKzMwMDEzLDcgQEAKIAkJCQk5M0VDNDRBMTE4OEY0QkI4MDA2NjFE
RjEgLyogV2hlZWxFdmVudERlbHRhVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5Mzgw
RjQ3MzA5QTExQUI0MDAxRkRCMzQgLyogV2lkZ2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0
NTM5MDREMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gaW4gU291cmNlcyAqLywKKwkJ
CQlEMzlDNzJERDFBNUM4QzhFMDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzgwRjQ3ODA5QTExQUNDMDAxRkRCMzQgLyogV2lkZ2V0TWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5QjAyRUUwRUEyREJDNDAwQzU0NTcwIC8qIFdpZHRo
SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4MjQzRTgwRDBDRkQ3NTAwNDYwQzhG
IC8qIFdpbmRvd0ZlYXR1cmVzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw4ICsz
MiwxMCBAQAogI2luY2x1ZGUgIkpTTm9kZS5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKQotI2luY2x1
ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgiCisjaW5jbHVkZSAiSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVk
ZSAiSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0wxUmVuZGVyaW5n
Q29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKICNlbmRpZgog
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNTEsOCArNTMsMTIgQEAgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICNp
ZiBFTkFCTEUoV0VCR0wpCi0gICAgaWYgKG9iamVjdC0+aXMzZCgpKQotICAgICAgICByZXR1cm4g
d3JhcDxKU1dlYkdMUmVuZGVyaW5nQ29udGV4dD4oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqPihvYmplY3QpKTsKKyAgICBpZiAob2JqZWN0LT5pczNkKCkp
IHsKKyAgICAgICAgaWYgKG9iamVjdC0+dHlwZSgpID09ICJ3ZWJnbDEiKQorICAgICAgICAgICAg
cmV0dXJuIHdyYXA8SlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0PihnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PFdlYkdMMVJlbmRlcmluZ0NvbnRleHQqPihvYmplY3QpKTsKKyAgICAgICAgaWYgKG9i
amVjdC0+dHlwZSgpID09ICJ3ZWJnbDIiKQorICAgICAgICAgICAgcmV0dXJuIHdyYXA8SlNXZWJH
TDJSZW5kZXJpbmdDb250ZXh0PihnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQqPihvYmplY3QpKTsKKyAgICB9CiAjZW5kaWYKICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihvYmplY3QtPmlzMmQoKSk7CiAgICAgcmV0dXJuIHdyYXA8SlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKj4ob2JqZWN0KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKICNpZiBF
TkFCTEUoV0VCR0wpCi0jaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENh
bnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNzgzNzEpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQog
I2luY2x1ZGUgIkpTRGljdGlvbmFyeS5oIgotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAjaW5jbHVk
ZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wxUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTc2OTk0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6MTc2OTk0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoV0VCR0wpCisKKyNpbmNsdWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorCisjaW5j
bHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJFWFRCbGVuZE1pbk1heC5o
IgorI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5oIgorI2luY2x1ZGUgIkVYVFNoYWRlclRleHR1cmVM
T0QuaCIKKyNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKKyNpbmNsdWRl
ICJFWFRzUkdCLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUg
IkpTQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJKU0VYVEJsZW5kTWluTWF4Lmgi
CisjaW5jbHVkZSAiSlNFWFRGcmFnRGVwdGguaCIKKyNpbmNsdWRlICJKU0VYVFNoYWRlclRleHR1
cmVMT0QuaCIKKyNpbmNsdWRlICJKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgorI2lu
Y2x1ZGUgIkpTRVhUc1JHQi5oIgorI2luY2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNp
bmNsdWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgor
I2luY2x1ZGUgIkpTT0VTRWxlbWVudEluZGV4VWludC5oIgorI2luY2x1ZGUgIkpTT0VTU3RhbmRh
cmREZXJpdmF0aXZlcy5oIgorI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUZsb2F0LmgiCisjaW5jbHVk
ZSAiSlNPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxm
RmxvYXQuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKKyNpbmNs
dWRlICJKU09FU1ZlcnRleEFycmF5T2JqZWN0LmgiCisjaW5jbHVkZSAiSlNXZWJHTEJ1ZmZlci5o
IgorI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgorI2luY2x1ZGUgIkpT
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCisjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgor
I2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKKyNpbmNsdWRlICJKU1dlYkdMRGVwdGhU
ZXh0dXJlLmgiCisjaW5jbHVkZSAiSlNXZWJHTERyYXdCdWZmZXJzLmgiCisjaW5jbHVkZSAiSlNX
ZWJHTEZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiSlNXZWJHTExvc2VDb250ZXh0LmgiCisjaW5j
bHVkZSAiSlNXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJKU1dlYkdMUmVuZGVyYnVmZmVyLmgi
CisjaW5jbHVkZSAiSlNXZWJHTFNoYWRlci5oIgorI2luY2x1ZGUgIkpTV2ViR0xUZXh0dXJlLmgi
CisjaW5jbHVkZSAiSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgorI2luY2x1ZGUgIkpTV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgorI2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4LmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50
LmgiCisjaW5jbHVkZSAiT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgorI2luY2x1ZGUgIk9FU1Rl
eHR1cmVGbG9hdC5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgorI2luY2x1
ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXQuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0
TGluZWFyLmgiCisjaW5jbHVkZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRlICJX
ZWJHTEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKKyNp
bmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKKyNpbmNsdWRlICJXZWJHTENv
bXByZXNzZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8u
aCIKKyNpbmNsdWRlICJXZWJHTERlYnVnU2hhZGVycy5oIgorI2luY2x1ZGUgIldlYkdMRGVwdGhU
ZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xEcmF3QnVmZmVycy5oIgorI2luY2x1ZGUgIldlYkdM
RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldl
YkdMR2V0SW5mby5oIgorI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKKyNpbmNsdWRlICJX
ZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCisjaW5jbHVkZSA8cnVudGltZS9FcnJv
ci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworI2lmIEVOQUJMRShWSURFTykKKyNpbmNs
dWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiSlNIVE1MVmlkZW9FbGVtZW50Lmgi
CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xHZXRJbmZvJiBpbmZvKQoreworICAgIHN3aXRjaCAo
aW5mby5nZXRUeXBlKCkpIHsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVCb29sOgorICAg
ICAgICByZXR1cm4ganNCb29sZWFuKGluZm8uZ2V0Qm9vbCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0
SW5mbzo6a1R5cGVCb29sQXJyYXk6IHsKKyAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlz
dDsKKyAgICAgICAgY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZSA9IGluZm8uZ2V0Qm9vbEFycmF5
KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YWx1ZS5zaXplKCk7ICsraWkp
CisgICAgICAgICAgICBsaXN0LmFwcGVuZChqc0Jvb2xlYW4odmFsdWVbaWldKSk7CisgICAgICAg
IHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3QsIGxpc3QpOworICAg
IH0KKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVGbG9hdDoKKyAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGluZm8uZ2V0RmxvYXQoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlSW50
OgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRJbnQoKSk7CisgICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlTnVsbDoKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIGNhc2Ug
V2ViR0xHZXRJbmZvOjprVHlwZVN0cmluZzoKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENh
Y2hlKGV4ZWMsIGluZm8uZ2V0U3RyaW5nKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlw
ZVVuc2lnbmVkSW50OgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRVbnNpZ25lZElu
dCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEJ1ZmZlcjoKKyAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMQnVmZmVyKCkpOwor
ICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRmxvYXRBcnJheToKKyAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMRmxvYXRBcnJheSgpKTsK
KyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEZyYW1lYnVmZmVyOgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xGcmFtZWJ1ZmZlcigp
KTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEludEFycmF5OgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xJbnRBcnJheSgpKTsK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50IFdlYkdMT2JqZWN0QXJyYXkKKyAgICAvLyBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTE9iamVjdEFycmF5OgorICAgIGNhc2UgV2ViR0xHZXRJbmZv
OjprVHlwZVdlYkdMUHJvZ3JhbToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpbmZvLmdldFdlYkdMUHJvZ3JhbSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5
cGVXZWJHTFJlbmRlcmJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpbmZvLmdldFdlYkdMUmVuZGVyYnVmZmVyKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZv
OjprVHlwZVdlYkdMVGV4dHVyZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpbmZvLmdldFdlYkdMVGV4dHVyZSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5
cGVXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIGluZm8uZ2V0V2ViR0xVbnNpZ25lZEJ5dGVBcnJheSgpKTsKKyAgICBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkSW50QXJyYXk6CisgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkSW50QXJyYXkoKSk7
CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzoK
KyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVMoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorfQorCitlbnVtIE9i
amVjdFR5cGUgeworICAgIGtCdWZmZXIsIGtSZW5kZXJidWZmZXIsIGtUZXh0dXJlLCBrVmVydGV4
QXR0cmliCit9OworCitzdGF0aWMgSlNWYWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIG9iaiwgRXhlY1N0YXRlKiBleGVjLCBPYmplY3RUeXBlIG9iamVjdFR5
cGUpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1
cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBvYmotPmltcGwoKTsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
dW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMp
OworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm87CisgICAgc3dpdGNoIChvYmplY3RUeXBlKSB7
CisgICAgY2FzZSBrQnVmZmVyOgorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRCdWZmZXJQYXJh
bWV0ZXIodGFyZ2V0LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtSZW5k
ZXJidWZmZXI6CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cih0YXJnZXQsIHBuYW1lLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1RleHR1cmU6
CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1ZlcnRleEF0dHJpYjoKKyAgICAgICAgLy8g
dGFyZ2V0ID0+IGluZGV4CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFZlcnRleEF0dHJpYih0
YXJnZXQsIHBuYW1lLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMsIG9iai0+Z2xvYmFsT2JqZWN0
KCksIGluZm8pOworfQorCitlbnVtIFdoaWNoUHJvZ3JhbUNhbGwgeworICAgIGtQcm9ncmFtUGFy
YW1ldGVyLCBrVW5pZm9ybQorfTsKKworc3RhdGljIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdlYkdMRXh0ZW5zaW9uKiBleHRl
bnNpb24pCit7CisgICAgaWYgKCFleHRlbnNpb24pCisgICAgICAgIHJldHVybiBqc051bGwoKTsK
KyAgICBzd2l0Y2ggKGV4dGVuc2lvbi0+Z2V0TmFtZSgpKSB7CisgICAgY2FzZSBXZWJHTEV4dGVu
c2lvbjo6V2ViR0xMb3NlQ29udGV4dE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xMb3NlQ29udGV4dCo+KGV4dGVuc2lvbikpOwor
ICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVFNoYWRlclRleHR1cmVMT0ROYW1lOgorICAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFNoYWRlclRl
eHR1cmVMT0QqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRUZXh0
dXJlRmlsdGVyQW5pc290cm9waWNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyo+KGV4dGVu
c2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVHNSR0JOYW1lOgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVHNSR0IqPihleHRl
bnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRGcmFnRGVwdGhOYW1lOgorICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVEZyYWdE
ZXB0aCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEJsZW5kTWlu
TWF4TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxFWFRCbGVuZE1pbk1heCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNp
b246Ok9FU1N0YW5kYXJkRGVyaXZhdGl2ZXNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMqPihleHRl
bnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXROYW1lOgor
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1Rl
eHR1cmVGbG9hdCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1Rl
eHR1cmVGbG9hdExpbmVhck5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7Cisg
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6CisgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhh
bGZGbG9hdCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1
cmVIYWxmRmxvYXRMaW5lYXJOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIqPihleHRlbnNpb24p
KTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNWZXJ0ZXhBcnJheU9iamVjdE5hbWU6Cisg
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVmVy
dGV4QXJyYXlPYmplY3QqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpP
RVNFbGVtZW50SW5kZXhVaW50TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Kj4oZXh0ZW5zaW9uKSk7Cisg
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05hbWU6CisgICAg
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1
Z1JlbmRlcmVySW5mbyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Oldl
YkdMRGVidWdTaGFkZXJzTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlYnVnU2hhZGVycyo+KGV4dGVuc2lvbikpOworICAgIGNh
c2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVENOYW1lOgorICAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVENOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyo+
KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBz
dGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyo+KGV4dGVuc2lvbikpOworICAg
IGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVwdGhUZXh0dXJlTmFtZToKKyAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlcHRoVGV4dHVy
ZSo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRHJhd0J1ZmZl
cnNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PFdlYkdMRHJhd0J1ZmZlcnMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5z
aW9uOjpBTkdMRUluc3RhbmNlZEFycmF5c05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5jZWRBcnJheXMqPihleHRlbnNp
b24pKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGpzTnVs
bCgpOworfQorCit2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QoJmltcGwoKSk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0
dGFjaGVkU2hhZGVycyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7
CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNo
YWRlcnM7CisgICAgYm9vbCBzdWNjZWVkID0gY29udGV4dC5nZXRBdHRhY2hlZFNoYWRlcnMocHJv
Z3JhbSwgc2hhZGVycywgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgfQorICAgIGlmICgh
c3VjY2VlZCkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgbGlzdDsKKyAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgc2hhZGVycy5zaXpl
KCk7ICsraWkpCisgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IHNoYWRlcnNbaWldLmdldCgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAs
IGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0RXh0ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworCisgICAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOworICAgIGNvbnN0IFN0cmluZyBu
YW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiA9IGNvbnRleHQuZ2V0RXh0
ZW5zaW9uKG5hbWUpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBleHRl
bnNpb24pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQ
YXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0
ZXIodGhpcywgZXhlYywga0J1ZmZlcik7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQorICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHVuc2lnbmVk
IGF0dGFjaG1lbnQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0lu
dDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSAhPSAxKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBp
bXBsKCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50
b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFBh
cmFtZXRlcihwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVy
biBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dy
YW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAg
ICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhl
Yyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0UHJvZ3JhbVBhcmFt
ZXRlcihwcm9ncmFtLCBwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9
CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworfQorCitKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhl
Yywga1JlbmRlcmJ1ZmZlcik7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFNoYWRlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQg
PSBpbXBsKCk7CisgICAgaWYgKCFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pbmhlcml0cyhKU1dlYkdM
U2hhZGVyOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Cisg
ICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IEpTV2ViR0xTaGFkZXI6OnRvV3JhcHBlZChleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8g
PSBjb250ZXh0LmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIHBuYW1lLCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1
cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICBpZiAoY29udGV4dC5pc0NvbnRleHRMb3N0
KCkpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZSA9
IGNvbnRleHQuZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOworICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGxpc3Q7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytp
aSkKKyAgICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdmFsdWVbaWld
KSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCgpLCBs
aXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1l
dGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRo
aXMsIGV4ZWMsIGtUZXh0dXJlKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0VW5pZm9ybShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBs
KCk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBl
ZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYmICFleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpKTsKKyAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFVuaWZvcm0ocHJvZ3Jh
bSwgbG9jYXRpb24sIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtWZXJ0ZXhBdHRyaWIp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Citib29s
IHRvVmVjdG9yKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKK3sKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KHZhbHVlKTsKKyAgICBpbnQzMl90IGxlbmd0aCA9IG9iamVjdC0+Z2V0KGV4ZWMs
IGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b0ludDMyKGV4ZWMpOworCisgICAg
aWYgKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB2ZWN0b3IucmVzaXplKGxlbmd0aCk7CisKKyAgICBmb3IgKGludDMyX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+
Z2V0KGV4ZWMsIGkpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHZlY3RvcltpXSA9IHN0YXRpY19jYXN0PFQ+KHYu
dG9OdW1iZXIoZXhlYykpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitlbnVtIERh
dGFGdW5jdGlvblRvQ2FsbCB7CisgICAgZl91bmlmb3JtMXYsIGZfdW5pZm9ybTJ2LCBmX3VuaWZv
cm0zdiwgZl91bmlmb3JtNHYsCisgICAgZl92ZXJ0ZXhBdHRyaWIxdiwgZl92ZXJ0ZXhBdHRyaWIy
diwgZl92ZXJ0ZXhBdHRyaWIzdiwgZl92ZXJ0ZXhBdHRyaWI0dgorfTsKKworZW51bSBEYXRhRnVu
Y3Rpb25NYXRyaXhUb0NhbGwgeworICAgIGZfdW5pZm9ybU1hdHJpeDJmdiwgZl91bmlmb3JtTWF0
cml4M2Z2LCBmX3VuaWZvcm1NYXRyaXg0ZnYKK307CisKK3N0YXRpYyBib29sIGZ1bmN0aW9uRm9y
VW5pZm9ybShEYXRhRnVuY3Rpb25Ub0NhbGwgZikKK3sKKyAgICBzd2l0Y2ggKGYpIHsKKyAgICBj
YXNlIGZfdW5pZm9ybTF2OgorICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgY2FzZSBmX3VuaWZv
cm0zdjoKKyAgICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgSlND
OjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Cisg
ICAgCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gMDsKKyAgICBsb25nIGlu
ZGV4ID0gLTE7CisgICAgCisgICAgaWYgKGZ1bmN0aW9uRm9yVW5pZm9ybShmKSkgeworICAgICAg
ICBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgfSBlbHNlCisgICAgICAgIGluZGV4ID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKworICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIAorICAg
IFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zsb2F0MzJBcnJheShleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGlmICh3ZWJHTEFycmF5KSB7CisgICAgICAgIHN3aXRjaCAoZikgewor
ICAgICAgICBjYXNlIGZfdW5pZm9ybTF2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMWZ2
KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBmX3VuaWZvcm0ydjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTJmdihs
b2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0zZnYobG9j
YXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2KGxvY2F0
aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjF2OgorICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIx
ZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
MmZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6CisgICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJp
YjNmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OgorICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRy
aWI0ZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIFZlY3RvcjxmbG9hdCwgNjQ+
IGFycmF5OworICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MSksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworCisgICAg
c3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgY29udGV4dC51bmlm
b3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0y
ZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTNmdihs
b2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2KGxvY2F0
aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIGZfdmVydGV4QXR0cmliMXY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMWZ2
KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYo
aW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjN2OgorICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjNmdihp
bmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIGZfdmVydGV4QXR0cmliNHY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliNGZ2KGlu
ZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworfQorCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0YUZ1bmN0
aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQm
IGNvbnRleHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAg
ICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOworICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihl
eGVjKTsKKyAgCisgICAgUmVmUHRyPEludDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0ludDMyQXJy
YXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgaWYgKHdlYkdMQXJyYXkpIHsKKyAgICAgICAgc3dpdGNoIChmKSB7CisgICAgICAg
IGNhc2UgZl91bmlmb3JtMXY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0xaXYobG9jYXRp
b24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMml2KGxvY2F0aW9u
LCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBmX3VuaWZvcm0zdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwg
d2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Zl91bmlmb3JtNHY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYobG9jYXRpb24sIHdl
YkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IH0KKworCisgICAgVmVjdG9yPGludCwgNjQ+IGFycmF5OworICAgIGlmICghdG9WZWN0b3IoZXhl
YywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworCisgICAgc3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZv
cm0xdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCks
IGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTJ2
OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtM3Y6Cisg
ICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5z
aXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAg
ICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUo
KSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgCisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKK30KKworc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgo
RGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSAhPSAzKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihleGVjKTsKKworICAgIGJvb2wgdHJhbnNwb3NlID0gZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgICAgCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAKKyAgICBS
ZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMikpOworICAgICAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBzd2l0Y2ggKGYpIHsKKyAgICAgICAgY2Fz
ZSBmX3VuaWZvcm1NYXRyaXgyZnY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgy
ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtTWF0cml4M2Z2OgorICAgICAgICAgICAg
Y29udGV4dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXku
Z2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybU1h
dHJpeDRmdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwg
dHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgVmVjdG9yPGZsb2F0LCA2
ND4gYXJyYXk7CisgICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgyKSwgYXJyYXkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisKKyAg
ICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDJmdjoKKyAgICAgICAgY29u
dGV4dC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwg
YXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtTWF0
cml4M2Z2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5z
cG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6CisgICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJp
eDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMXYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pT
Qzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0xdiwgZXhl
YywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rp
b25mKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMnYsIGV4ZWMsIGltcGwoKSk7Cit9CisK
K0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihKU0M6OkV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0zdiwg
ZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25pKGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtNHYsIGV4ZWMsIGltcGwoKSk7Cit9
CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihKU0M6
OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm00
diwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4MmZ2LCBleGVjLCBpbXBsKCkpOwor
fQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgz
ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJp
eChmX3VuaWZvcm1NYXRyaXgzZnYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDRm
diwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIxdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlND
OjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRy
aWIydiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIzdiwgZXhlYywgaW1wbCgpKTsKK30KKwor
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhB
dHRyaWI0diwgZXhlYywgaW1wbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMVJlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3MjcgKzI2LDE3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCi0KLSNpbmNsdWRlICJKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKLSNp
bmNsdWRlICJFWFRTaGFkZXJUZXh0dXJlTE9ELmgiCi0jaW5jbHVkZSAiRVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkhU
TUxDYW52YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1
ZGUgIkpTQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKLSNpbmNsdWRlICJKU0VYVFNoYWRlclRleHR1
cmVMT0QuaCIKLSNpbmNsdWRlICJKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgotI2lu
Y2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0hUTUxJbWFnZUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTT0VTRWxlbWVudElu
ZGV4VWludC5oIgotI2luY2x1ZGUgIkpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1
ZGUgIkpTT0VTVGV4dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxvYXRMaW5l
YXIuaCIKLSNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXQuaCIKLSNpbmNsdWRlICJKU09F
U1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJKU09FU1ZlcnRleEFycmF5T2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiSlNXZWJHTEJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUFUQy5oIgotI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBW
UlRDLmgiCi0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgotI2luY2x1
ZGUgIkpTV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgotI2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1No
YWRlcnMuaCIKLSNpbmNsdWRlICJKU1dlYkdMRGVwdGhUZXh0dXJlLmgiCi0jaW5jbHVkZSAiSlNX
ZWJHTERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAiSlNXZWJHTEZyYW1lYnVmZmVyLmgiCi0jaW5j
bHVkZSAiSlNXZWJHTExvc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiSlNXZWJHTFByb2dyYW0uaCIK
LSNpbmNsdWRlICJKU1dlYkdMUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTFNoYWRl
ci5oIgotI2luY2x1ZGUgIkpTV2ViR0xUZXh0dXJlLmgiCi0jaW5jbHVkZSAiSlNXZWJHTFVuaWZv
cm1Mb2NhdGlvbi5oIgotI2luY2x1ZGUgIkpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgot
I2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50LmgiCi0jaW5jbHVkZSAiT0VTU3RhbmRh
cmREZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdC5oIgotI2luY2x1ZGUg
Ik9FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXQu
aCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAiT0VT
VmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgotI2luY2x1ZGUg
IldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgot
I2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKLSNpbmNsdWRlICJXZWJHTERlYnVn
U2hhZGVycy5oIgotI2luY2x1ZGUgIldlYkdMRGVwdGhUZXh0dXJlLmgiCi0jaW5jbHVkZSAiV2Vi
R0xEcmF3QnVmZmVycy5oIgotI2luY2x1ZGUgIldlYkdMRXh0ZW5zaW9uLmgiCi0jaW5jbHVkZSAi
V2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMR2V0SW5mby5oIgotI2luY2x1ZGUg
IldlYkdMTG9zZUNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKLSNpbmNsdWRl
ICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTLmgiCi0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNUeXBlZEFycmF5cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4K
LSNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KLQotI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSlNIVE1MVmlkZW9FbGVtZW50LmgiCi0jZW5kaWYKKyNpbmNsdWRlICJKU1dl
YkdMMVJlbmRlcmluZ0NvbnRleHQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xHZXRJbmZvJiBpbmZvKQot
ewotICAgIHN3aXRjaCAoaW5mby5nZXRUeXBlKCkpIHsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6
a1R5cGVCb29sOgotICAgICAgICByZXR1cm4ganNCb29sZWFuKGluZm8uZ2V0Qm9vbCgpKTsKLSAg
ICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVCb29sQXJyYXk6IHsKLSAgICAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZSA9IGlu
Zm8uZ2V0Qm9vbEFycmF5KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YWx1
ZS5zaXplKCk7ICsraWkpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChqc0Jvb2xlYW4odmFsdWVb
aWldKSk7Ci0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmpl
Y3QsIGxpc3QpOwotICAgIH0KLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVGbG9hdDoKLSAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZm8uZ2V0RmxvYXQoKSk7Ci0gICAgY2FzZSBXZWJHTEdl
dEluZm86OmtUeXBlSW50OgotICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRJbnQoKSk7
Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlTnVsbDoKLSAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVN0cmluZzoKLSAgICAgICAgcmV0dXJu
IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGluZm8uZ2V0U3RyaW5nKCkpOwotICAgIGNhc2UgV2Vi
R0xHZXRJbmZvOjprVHlwZVVuc2lnbmVkSW50OgotICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5m
by5nZXRVbnNpZ25lZEludCgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEJ1
ZmZlcjoKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdl
YkdMQnVmZmVyKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRmxvYXRBcnJh
eToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdM
RmxvYXRBcnJheSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEZyYW1lYnVm
ZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2Vi
R0xGcmFtZWJ1ZmZlcigpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEludEFy
cmF5OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2Vi
R0xJbnRBcnJheSgpKTsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IFdlYkdMT2JqZWN0QXJyYXkK
LSAgICAvLyBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTE9iamVjdEFycmF5OgotICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMUHJvZ3JhbToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUHJvZ3JhbSgpKTsKLSAgICBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTFJlbmRlcmJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUmVuZGVyYnVmZmVyKCkpOwotICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVGV4dHVyZToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVGV4dHVyZSgpKTsKLSAgICBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OgotICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xVbnNpZ25lZEJ5dGVBcnJheSgp
KTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkSW50QXJyYXk6Ci0g
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFVuc2ln
bmVkSW50QXJyYXkoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzoKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBp
bmZvLmdldFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
fQotfQotCi1lbnVtIE9iamVjdFR5cGUgewotICAgIGtCdWZmZXIsIGtSZW5kZXJidWZmZXIsIGtU
ZXh0dXJlLCBrVmVydGV4QXR0cmliCi19OwotCi1zdGF0aWMgSlNWYWx1ZSBnZXRPYmplY3RQYXJh
bWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG9iaiwgRXhlY1N0YXRlKiBleGVjLCBPYmpl
Y3RUeXBlIG9iamVjdFR5cGUpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAy
KQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBvYmotPmltcGwoKTsKLSAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgV2ViR0xHZXRJbmZvIGluZm87Ci0gICAgc3dpdGNo
IChvYmplY3RUeXBlKSB7Ci0gICAgY2FzZSBrQnVmZmVyOgotICAgICAgICBpbmZvID0gY29udGV4
dC5nZXRCdWZmZXJQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgZWMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIGtSZW5kZXJidWZmZXI6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0LmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2Uga1RleHR1cmU6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0LmdldFRleFBhcmFtZXRlcih0
YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Uga1ZlcnRleEF0dHJp
YjoKLSAgICAgICAgLy8gdGFyZ2V0ID0+IGluZGV4Ci0gICAgICAgIGluZm8gPSBjb250ZXh0Lmdl
dFZlcnRleEF0dHJpYih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIG9i
ai0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1lbnVtIFdoaWNoUHJvZ3JhbUNhbGwgewot
ICAgIGtQcm9ncmFtUGFyYW1ldGVyLCBrVW5pZm9ybQotfTsKLQotc3RhdGljIEpTVmFsdWUgdG9K
UyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdlYkdM
RXh0ZW5zaW9uKiBleHRlbnNpb24pCi17Ci0gICAgaWYgKCFleHRlbnNpb24pCi0gICAgICAgIHJl
dHVybiBqc051bGwoKTsKLSAgICBzd2l0Y2ggKGV4dGVuc2lvbi0+Z2V0TmFtZSgpKSB7Ci0gICAg
Y2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xMb3NlQ29udGV4dE5hbWU6Ci0gICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xMb3NlQ29udGV4dCo+
KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVFNoYWRlclRleHR1cmVM
T0ROYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PEVYVFNoYWRlclRleHR1cmVMT0QqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0
ZW5zaW9uOjpFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNOYW1lOgotICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1N0YW5k
YXJkRGVyaXZhdGl2ZXNOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMqPihleHRlbnNpb24pKTsKLSAg
ICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXROYW1lOgotICAgICAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVGbG9hdCo+
KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVGbG9hdExp
bmVhck5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8T0VTVGV4dHVyZUZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdCo+KGV4
dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXJOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIqPihleHRlbnNpb24pKTsKLSAgICBjYXNl
IFdlYkdMRXh0ZW5zaW9uOjpPRVNWZXJ0ZXhBcnJheU9iamVjdE5hbWU6Ci0gICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVmVydGV4QXJyYXlPYmpl
Y3QqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNFbGVtZW50SW5k
ZXhVaW50TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05hbWU6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1Z1JlbmRlcmVySW5m
byo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVidWdTaGFk
ZXJzTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTERlYnVnU2hhZGVycyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRl
bnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVENOYW1lOgotICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVB
VEMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUFZSVENOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyo+KGV4dGVuc2lvbikp
OwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDTmFt
ZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246OldlYkdMRGVwdGhUZXh0dXJlTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlcHRoVGV4dHVyZSo+KGV4dGVuc2lv
bikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRHJhd0J1ZmZlcnNOYW1lOgotICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRHJh
d0J1ZmZlcnMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpBTkdMRUlu
c3RhbmNlZEFycmF5c05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5jZWRBcnJheXMqPihleHRlbnNpb24pKTsKLSAgICB9
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGpzTnVsbCgpOwotfQotCi12
b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QoJmltcGwoKSk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEF0dGFjaGVkU2hhZGVycyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQg
PSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRv
V3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYm
ICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNo
YWRlcj4+IHNoYWRlcnM7Ci0gICAgYm9vbCBzdWNjZWVkID0gY29udGV4dC5nZXRBdHRhY2hlZFNo
YWRlcnMocHJvZ3JhbSwgc2hhZGVycywgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgfQot
ICAgIGlmICghc3VjY2VlZCkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHNoYWRlcnMu
c2l6ZSgpOyArK2lpKQotICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCgpLCBzaGFkZXJzW2lpXS5nZXQoKSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVj
LCAwLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEV4dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICBjb25zdCBTdHJp
bmcgbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24gPSBjb250ZXh0Lmdl
dEV4dGVuc2lvbihuYW1lKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwg
ZXh0ZW5zaW9uKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVm
ZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFy
YW1ldGVyKHRoaXMsIGV4ZWMsIGtCdWZmZXIpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKLSAgICAgICAgcmV0
dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB1bnNp
Z25lZCBhdHRhY2htZW50ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiku
dG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwg
ZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0
ID0gaW1wbCgpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5n
ZXRQYXJhbWV0ZXIocG5hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQot
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICBy
ZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJH
TFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBw
cm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7
Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFByb2dyYW1Q
YXJhbWV0ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQot
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMs
IGV4ZWMsIGtSZW5kZXJidWZmZXIpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250
ZXh0ID0gaW1wbCgpOwotICAgIGlmICghZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRl
ZmluZWRPck51bGwoKSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaW5oZXJpdHMoSlNX
ZWJHTFNoYWRlcjo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMp
OwotICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBKU1dlYkdMU2hhZGVyOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBp
bmZvID0gY29udGV4dC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBwbmFtZSwgZWMpOwotICAg
IGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRTdXBwb3J0ZWRFeHRlbnNpb25zKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgaWYgKGNvbnRleHQuaXNDb250ZXh0
TG9zdCgpKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gdmFs
dWUgPSBjb250ZXh0LmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKLSAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBsaXN0OwotICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YWx1ZS5zaXplKCk7
ICsraWkpCi0gICAgICAgIGxpc3QuYXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHZhbHVl
W2lpXSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3Qo
KSwgbGlzdCk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBh
cmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRl
cih0aGlzLCBleGVjLCBrVGV4dHVyZSk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFVuaWZvcm0oRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0g
aW1wbCgpOwotICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dy
YXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcHJvZ3JhbSAmJiAh
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKGV4ZWMpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRVbmlmb3JtKHBy
b2dyYW0sIGxvY2F0aW9uLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLUpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYihFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrVmVydGV4QXR0
cmliKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgot
Ym9vbCB0b1ZlY3RvcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi17Ci0gICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgaW50MzJfdCBsZW5ndGggPSBvYmplY3QtPmdldChl
eGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9JbnQzMihleGVjKTsKLQot
ICAgIGlmICghdmVjdG9yLnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgdmVjdG9yLnJlc2l6ZShsZW5ndGgpOwotCi0gICAgZm9yIChpbnQzMl90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBvYmpl
Y3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2ZWN0b3JbaV0gPSBzdGF0aWNfY2FzdDxU
Pih2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZW51
bSBEYXRhRnVuY3Rpb25Ub0NhbGwgewotICAgIGZfdW5pZm9ybTF2LCBmX3VuaWZvcm0ydiwgZl91
bmlmb3JtM3YsIGZfdW5pZm9ybTR2LAotICAgIGZfdmVydGV4QXR0cmliMXYsIGZfdmVydGV4QXR0
cmliMnYsIGZfdmVydGV4QXR0cmliM3YsIGZfdmVydGV4QXR0cmliNHYKLX07Ci0KLWVudW0gRGF0
YUZ1bmN0aW9uTWF0cml4VG9DYWxsIHsKLSAgICBmX3VuaWZvcm1NYXRyaXgyZnYsIGZfdW5pZm9y
bU1hdHJpeDNmdiwgZl91bmlmb3JtTWF0cml4NGZ2Ci19OwotCi1zdGF0aWMgYm9vbCBmdW5jdGlv
bkZvclVuaWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxsIGYpCi17Ci0gICAgc3dpdGNoIChmKSB7Ci0g
ICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICBjYXNlIGZfdW5pZm9ybTJ2OgotICAgIGNhc2UgZl91
bmlmb3JtM3Y6Ci0gICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGlj
IEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCku
dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OwotICAgIAotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IDA7Ci0gICAgbG9u
ZyBpbmRleCA9IC0xOwotICAgIAotICAgIGlmIChmdW5jdGlvbkZvclVuaWZvcm0oZikpIHsKLSAg
ICAgICAgbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgICAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIH0gZWxzZQotICAgICAgICBpbmRleCA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0KLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAK
LSAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
ICAgCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAKLSAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBpZiAod2ViR0xBcnJheSkgewotICAgICAgICBzd2l0Y2ggKGYp
IHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9y
bTFmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0y
ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtM2Z2
KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihs
b2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIxdjoKLSAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0
cmliMWZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIGZfdmVydGV4QXR0cmliMnY6Ci0gICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0
dHJpYjJmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OgotICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhB
dHRyaWIzZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djoKLSAgICAgICAgICAgIGNvbnRleHQudmVydGV4
QXR0cmliNGZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8ZmxvYXQs
IDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLCBhcnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLQot
ICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgICAgIGNvbnRleHQu
dW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICAgICAgY29udGV4dC51bmlm
b3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0z
ZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihs
b2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OgotICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJp
YjFmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIGZfdmVydGV4QXR0cmliMnY6Ci0gICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
MmZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjoKLSAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIz
ZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OgotICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjRm
dihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLX0KLQotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFG
dW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250
ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAg
ICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoZXhlYyk7Ci0gIAotICAgIFJlZlB0cjxJbnQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9JbnQz
MkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIGlmICh3ZWJHTEFycmF5KSB7Ci0gICAgICAgIHN3aXRjaCAoZikgewotICAg
ICAgICBjYXNlIGZfdW5pZm9ybTF2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMWl2KGxv
Y2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTJpdihsb2Nh
dGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgZl91bmlmb3JtM3Y6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0zaXYobG9jYXRp
b24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIGZfdW5pZm9ybTR2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9u
LCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9Ci0KLQotICAgIFZlY3RvcjxpbnQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9y
KGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBhcnJheSkpCi0gICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihleGVjKTsKLQotICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91
bmlmb3JtMXY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXkuZGF0
YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZv
cm0ydjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCks
IGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTN2
OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0g
ICAgICAgIGNvbnRleHQudW5pZm9ybTRpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5z
aXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIAotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0
cml4KERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgIT0gMykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhl
YywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVk
KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWxvY2F0aW9uICYmICFleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0KLSAgICBib29sIHRyYW5zcG9zZSA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpICAgIAotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgCi0g
ICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgaWYgKHdlYkdMQXJyYXkpIHsKLSAgICAgICAgc3dpdGNoIChmKSB7Ci0gICAgICAg
IGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0
cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDNmdjoKLSAgICAgICAg
ICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFy
cmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZv
cm1NYXRyaXg0ZnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIFZlY3RvcjxmbG9h
dCwgNjQ+IGFycmF5OwotICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMiksIGFycmF5KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwot
Ci0gICAgc3dpdGNoIChmKSB7Ci0gICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6Ci0gICAgICAg
IGNvbnRleHQudW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRh
KCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9y
bU1hdHJpeDNmdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgZl91bmlmb3JtTWF0cml4NGZ2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm1N
YXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCks
IGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOwotfQot
Ci1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMXYs
IGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uZihmX3VuaWZvcm0ydiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQot
ewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOwot
fQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3Jt
M3YsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTNpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uaShmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkp
OwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlm
b3JtNHYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDJmdiwgZXhlYywgaW1wbCgp
KTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0
cml4M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25N
YXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRy
aXg0ZnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJl
dHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMXYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0K
LUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4
QXR0cmliMnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliM3YsIGV4ZWMsIGltcGwoKSk7Ci19
Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2
KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVy
dGV4QXR0cmliNHYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKyNpbmNsdWRlICJKU1dlYkdMMlJlbmRlcmlu
Z0NvbnRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIAordm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCgmaW1wbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmgiCisKKyNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgorI2luY2x1ZGUg
IkVYVEJsZW5kTWluTWF4LmgiCisjaW5jbHVkZSAiRVhURnJhZ0RlcHRoLmgiCisjaW5jbHVkZSAi
RVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ry
b3BpYy5oIgorI2luY2x1ZGUgIkVYVHNSR0IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSlNBTkdMRUluc3RhbmNlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpT
RVhUQmxlbmRNaW5NYXguaCIKKyNpbmNsdWRlICJKU0VYVEZyYWdEZXB0aC5oIgorI2luY2x1ZGUg
IkpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkpTRVhUVGV4dHVyZUZpbHRlckFu
aXNvdHJvcGljLmgiCisjaW5jbHVkZSAiSlNFWFRzUkdCLmgiCisjaW5jbHVkZSAiSlNIVE1MQ2Fu
dmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUg
IkpTSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCisjaW5j
bHVkZSAiSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCisjaW5jbHVkZSAiSlNPRVNUZXh0dXJl
RmxvYXQuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdExpbmVhci5oIgorI2luY2x1ZGUg
IkpTT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgorI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9h
dExpbmVhci5oIgorI2luY2x1ZGUgIkpTT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRl
ICJKU1dlYkdMQnVmZmVyLmgiCisjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
LmgiCisjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKKyNpbmNsdWRl
ICJKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCisjaW5jbHVkZSAiSlNXZWJHTERlYnVn
UmVuZGVyZXJJbmZvLmgiCisjaW5jbHVkZSAiSlNXZWJHTERlYnVnU2hhZGVycy5oIgorI2luY2x1
ZGUgIkpTV2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJKU1dlYkdMRHJhd0J1ZmZlcnMu
aCIKKyNpbmNsdWRlICJKU1dlYkdMRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMTG9z
ZUNvbnRleHQuaCIKKyNpbmNsdWRlICJKU1dlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIkpTV2Vi
R0xSZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAi
SlNXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCisj
aW5jbHVkZSAiSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCisjaW5jbHVkZSAiSlNXZWJL
aXRDU1NNYXRyaXguaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk9F
U0VsZW1lbnRJbmRleFVpbnQuaCIKKyNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgi
CisjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0
TGluZWFyLmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgorI2luY2x1ZGUgIk9F
U1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVj
dC5oIgorI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUFUQy5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgor
I2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCisjaW5jbHVkZSAiV2ViR0xE
ZWJ1Z1JlbmRlcmVySW5mby5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5j
bHVkZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgi
CisjaW5jbHVkZSAiV2ViR0xFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVy
LmgiCisjaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCisjaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4
dC5oIgorI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaCIKKyNpbmNsdWRlICJXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCisj
aW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5
cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworI2lm
IEVOQUJMRShWSURFTykKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAi
SlNIVE1MVmlkZW9FbGVtZW50LmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorc3RhdGljIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMR2V0SW5m
byYgaW5mbykKK3sKKyAgICBzd2l0Y2ggKGluZm8uZ2V0VHlwZSgpKSB7CisgICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlQm9vbDoKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihpbmZvLmdldEJv
b2woKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlQm9vbEFycmF5OiB7CisgICAgICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGNvbnN0IFZlY3Rvcjxib29sPiYg
dmFsdWUgPSBpbmZvLmdldEJvb2xBcnJheSgpOworICAgICAgICBmb3IgKHNpemVfdCBpaSA9IDA7
IGlpIDwgdmFsdWUuc2l6ZSgpOyArK2lpKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQoanNCb29s
ZWFuKHZhbHVlW2lpXSkpOworICAgICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwg
Z2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICB9CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBl
RmxvYXQ6CisgICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEZsb2F0KCkpOworICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZUludDoKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZm8u
Z2V0SW50KCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZU51bGw6CisgICAgICAgIHJl
dHVybiBqc051bGwoKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVTdHJpbmc6CisgICAg
ICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbmZvLmdldFN0cmluZygpKTsKKyAg
ICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVVbnNpZ25lZEludDoKKyAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGluZm8uZ2V0VW5zaWduZWRJbnQoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xCdWZmZXI6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
aW5mby5nZXRXZWJHTEJ1ZmZlcigpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJH
TEZsb2F0QXJyYXk6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5m
by5nZXRXZWJHTEZsb2F0QXJyYXkoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2Vi
R0xGcmFtZWJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBp
bmZvLmdldFdlYkdMRnJhbWVidWZmZXIoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBl
V2ViR0xJbnRBcnJheToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBp
bmZvLmdldFdlYkdMSW50QXJyYXkoKSk7CisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgV2Vi
R0xPYmplY3RBcnJheQorICAgICAgICAvLyBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTE9i
amVjdEFycmF5OgorICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMUHJvZ3JhbToKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUHJvZ3Jh
bSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFJlbmRlcmJ1ZmZlcjoKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUmVuZGVy
YnVmZmVyKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVGV4dHVyZToKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVGV4dHVy
ZSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkQnl0ZUFycmF5
OgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xV
bnNpZ25lZEJ5dGVBcnJheSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVu
c2lnbmVkSW50QXJyYXk6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
aW5mby5nZXRXZWJHTFVuc2lnbmVkSW50QXJyYXkoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86
OmtUeXBlV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzoKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKSk7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgfQorfQorCitlbnVtIE9iamVjdFR5cGUgeworICAgIGtCdWZmZXIs
IGtSZW5kZXJidWZmZXIsIGtUZXh0dXJlLCBrVmVydGV4QXR0cmliCit9OworCitzdGF0aWMgSlNW
YWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBvYmos
IEV4ZWNTdGF0ZSogZXhlYywgT2JqZWN0VHlwZSBvYmplY3RUeXBlKQoreworICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAg
IAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmIGNvbnRleHQgPSBvYmotPmltcGwoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgdW5zaWduZWQgcG5h
bWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
V2ViR0xHZXRJbmZvIGluZm87CisgICAgc3dpdGNoIChvYmplY3RUeXBlKSB7CisgICAgY2FzZSBr
QnVmZmVyOgorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRCdWZmZXJQYXJhbWV0ZXIodGFyZ2V0
LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtSZW5kZXJidWZmZXI6Cisg
ICAgICAgIGluZm8gPSBjb250ZXh0LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBu
YW1lLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1RleHR1cmU6CisgICAgICAgIGlu
Zm8gPSBjb250ZXh0LmdldFRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Uga1ZlcnRleEF0dHJpYjoKKyAgICAgICAgLy8gdGFyZ2V0ID0+IGlu
ZGV4CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFZlcnRleEF0dHJpYih0YXJnZXQsIHBuYW1l
LCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMsIG9iai0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwor
fQorCitlbnVtIFdoaWNoUHJvZ3JhbUNhbGwgeworICAgIGtQcm9ncmFtUGFyYW1ldGVyLCBrVW5p
Zm9ybQorfTsKKworc3RhdGljIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24pCit7Cisg
ICAgaWYgKCFleHRlbnNpb24pCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBzd2l0Y2gg
KGV4dGVuc2lvbi0+Z2V0TmFtZSgpKSB7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xM
b3NlQ29udGV4dE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
c3RhdGljX2Nhc3Q8V2ViR0xMb3NlQ29udGV4dCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246OkVYVFNoYWRlclRleHR1cmVMT0ROYW1lOgorICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFNoYWRlclRleHR1cmVMT0QqPihl
eHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyo+KGV4dGVuc2lvbikpOworICAg
IGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVHNSR0JOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVHNSR0IqPihleHRlbnNpb24pKTsKKyAg
ICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRGcmFnRGVwdGhOYW1lOgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVEZyYWdEZXB0aCo+KGV4dGVu
c2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEJsZW5kTWluTWF4TmFtZToKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRCbGVu
ZE1pbk1heCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1N0YW5k
YXJkRGVyaXZhdGl2ZXNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMqPihleHRlbnNpb24pKTsKKyAg
ICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXROYW1lOgorICAgICAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVGbG9hdCo+
KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVGbG9hdExp
bmVhck5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8T0VTVGV4dHVyZUZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6CisgICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdCo+KGV4
dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXJOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIqPihleHRlbnNpb24pKTsKKyAgICBjYXNl
IFdlYkdMRXh0ZW5zaW9uOjpPRVNWZXJ0ZXhBcnJheU9iamVjdE5hbWU6CisgICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVmVydGV4QXJyYXlPYmpl
Y3QqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNFbGVtZW50SW5k
ZXhVaW50TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05hbWU6CisgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1Z1JlbmRlcmVySW5m
byo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVidWdTaGFk
ZXJzTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTERlYnVnU2hhZGVycyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRl
bnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVENOYW1lOgorICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVB
VEMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUFZSVENOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyo+KGV4dGVuc2lvbikp
OworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDTmFt
ZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246OldlYkdMRGVwdGhUZXh0dXJlTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlcHRoVGV4dHVyZSo+KGV4dGVuc2lv
bikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRHJhd0J1ZmZlcnNOYW1lOgorICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRHJh
d0J1ZmZlcnMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpBTkdMRUlu
c3RhbmNlZEFycmF5c05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5jZWRBcnJheXMqPihleHRlbnNpb24pKTsKKyAgICB9
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGpzTnVsbCgpOworfQorCit2
b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZpbXBs
KCkpOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNo
ZWRTaGFkZXJzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7
CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNo
YWRlcnM7CisgICAgYm9vbCBzdWNjZWVkID0gY29udGV4dC5nZXRBdHRhY2hlZFNoYWRlcnMocHJv
Z3JhbSwgc2hhZGVycywgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgfQorICAgIGlmICgh
c3VjY2VlZCkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgbGlzdDsKKyAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgc2hhZGVycy5zaXpl
KCk7ICsraWkpCisgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IHNoYWRlcnNbaWldLmdldCgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAs
IGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldEV4dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAK
KyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOworICAgIGNv
bnN0IFN0cmluZyBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiA9IGNv
bnRleHQuZ2V0RXh0ZW5zaW9uKG5hbWUpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBleHRlbnNpb24pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Z2V0QnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
Z2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtCdWZmZXIpOworfQorCitKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9
IDMpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgp
OworICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50
MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB1bnNpZ25lZCBhdHRhY2htZW50ID0gZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHVuc2lnbmVkIHBuYW1lID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMikudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFdlYkdMR2V0
SW5mbyBpbmZvID0gY29udGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodGFy
Z2V0LCBhdHRhY2htZW50LCBwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworfQorCitK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDEpCisgICAgICAg
IHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOworICAgIHVuc2ln
bmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRQYXJhbWV0ZXIocG5hbWUsIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFByb2dyYW1QYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCku
dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0g
SlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Cisg
ICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgdW5z
aWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFByb2dyYW1QYXJhbWV0ZXIo
cHJvZ3JhbSwgcG5hbWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVj
LCBrUmVuZGVyYnVmZmVyKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFNoYWRlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4
Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAg
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYgY29udGV4dCA9IGltcGwoKTsKKyAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmluaGVy
aXRzKEpTV2ViR0xTaGFkZXI6OmluZm8oKSkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihleGVjKTsKKyAgICBXZWJHTFNoYWRlciogc2hhZGVyID0gSlNXZWJHTFNoYWRlcjo6dG9XcmFw
cGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBXZWJHTEdl
dEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgcG5hbWUsIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgaWYgKGNv
bnRleHQuaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgVmVj
dG9yPFN0cmluZz4gdmFsdWUgPSBjb250ZXh0LmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKKyAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkg
PCB2YWx1ZS5zaXplKCk7ICsraWkpCisgICAgICAgIGxpc3QuYXBwZW5kKGpzU3RyaW5nV2l0aENh
Y2hlKGV4ZWMsIHZhbHVlW2lpXSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAw
LCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRUZXhQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1RleHR1cmUpOworfQorCitKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybShFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7CisgICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKKyAgICBXZWJHTFByb2dyYW0q
IHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
KTsKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxv
Y2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGlmICgh
bG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICBXZWJHTEdldElu
Zm8gaW5mbyA9IGNvbnRleHQuZ2V0VW5pZm9ybShwcm9ncmFtLCBsb2NhdGlvbiwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0VmVydGV4QXR0cmliKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0T2Jq
ZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtWZXJ0ZXhBdHRyaWIpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Citib29sIHRvVmVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eT4mIHZlY3RvcikKK3sKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1
ZSk7CisgICAgaW50MzJfdCBsZW5ndGggPSBvYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCkudG9JbnQzMihleGVjKTsKKyAgICAKKyAgICBpZiAoIXZlY3Rv
ci50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHZlY3Rvci5yZXNpemUobGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KGV4
ZWMsIGkpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHZlY3RvcltpXSA9IHN0YXRpY19jYXN0PFQ+KHYudG9OdW1i
ZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZW51bSBEYXRh
RnVuY3Rpb25Ub0NhbGwgeworICAgIGZfdW5pZm9ybTF2LCBmX3VuaWZvcm0ydiwgZl91bmlmb3Jt
M3YsIGZfdW5pZm9ybTR2LAorICAgIGZfdmVydGV4QXR0cmliMXYsIGZfdmVydGV4QXR0cmliMnYs
IGZfdmVydGV4QXR0cmliM3YsIGZfdmVydGV4QXR0cmliNHYKK307CisKK2VudW0gRGF0YUZ1bmN0
aW9uTWF0cml4VG9DYWxsIHsKKyAgICBmX3VuaWZvcm1NYXRyaXgyZnYsIGZfdW5pZm9ybU1hdHJp
eDNmdiwgZl91bmlmb3JtTWF0cml4NGZ2Cit9OworCitzdGF0aWMgYm9vbCBmdW5jdGlvbkZvclVu
aWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxsIGYpCit7CisgICAgc3dpdGNoIChmKSB7CisgICAgY2Fz
ZSBmX3VuaWZvcm0xdjoKKyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgIGNhc2UgZl91bmlmb3Jt
M3Y6CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDogYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIEpTQzo6
SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKK3sKKyAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
KyAgICAKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSAwOworICAgIGxvbmcg
aW5kZXggPSAtMTsKKyAgICAKKyAgICBpZiAoZnVuY3Rpb25Gb3JVbmlmb3JtKGYpKSB7CisgICAg
ICAgIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICAgICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICB9IGVsc2UKKyAgICAgICAgaW5kZXggPSBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIAorICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgCisg
ICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAg
IAorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBzd2l0Y2ggKGYpIHsKKyAg
ICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTFmdihs
b2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0yZnYobG9j
YXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIGZfdW5pZm9ybTN2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtM2Z2KGxvY2F0
aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihsb2NhdGlv
biwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgZl92ZXJ0ZXhBdHRyaWIxdjoKKyAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMWZ2
KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIGZfdmVydGV4QXR0cmliMnY6CisgICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjJm
dihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjN2OgorICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIz
ZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djoKKyAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
NGZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPGZsb2F0LCA2
ND4gYXJyYXk7CisgICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgxKSwgYXJyYXkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAg
CisgICAgc3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgY29udGV4
dC51bmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICBjb250ZXh0LnVu
aWZvcm0yZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgIGNvbnRleHQudW5pZm9y
bTNmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2
KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0
cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRy
aWIyZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OgorICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJp
YjNmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
NGZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworfQorCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0
YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiBjb250ZXh0KQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0g
MikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIAorICAgIFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworICAgIAorICAgIFJlZlB0cjxJbnQzMkFycmF5PiB3ZWJHTEFy
cmF5ID0gdG9JbnQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICAKKyAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBz
d2l0Y2ggKGYpIHsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgICAgIGNvbnRl
eHQudW5pZm9ybTFpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgICAgICAgICBjb250ZXh0
LnVuaWZvcm0yaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybTN2OgorICAgICAgICAgICAgY29udGV4dC51
bmlmb3JtM2l2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgICAgIGNvbnRleHQudW5p
Zm9ybTRpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIAorICAgIAorICAgIFZlY3RvcjxpbnQsIDY0PiBh
cnJheTsKKyAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LCBhcnJheSkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAKKyAg
ICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5pZm9ybTF2OgorICAgICAgICBjb250ZXh0LnVu
aWZvcm0xaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgICAgIGNvbnRleHQudW5pZm9y
bTJpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtM2l2
KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYobG9j
YXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitzdGF0aWMg
SlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJpeChEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwg
ZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRl
eHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQorICAgICAgICByZXR1
cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7CisgICAgCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
ID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhl
Yyk7CisgICAgCisgICAgYm9vbCB0cmFuc3Bvc2UgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0Jvb2xlYW4oZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgCisgICAgUmVmUHRyPEZsb2F0MzJBcnJh
eT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIp
KTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkg
eworICAgICAgICBzd2l0Y2ggKGYpIHsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6
CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9z
ZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgZl91bmlmb3JtTWF0cml4M2Z2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4
M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoKKyAgICAgICAgICAg
IGNvbnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5
LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgfQorICAgIAorICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OworICAgIGlm
ICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGFycmF5KSkKKyAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIAorICAgIHN3aXRjaCAoZikg
eworICAgIGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm1N
YXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCks
IGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6CisgICAg
ICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5k
YXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5p
Zm9ybU1hdHJpeDRmdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp1bmlmb3JtMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWl2KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTF2LCBleGVj
LCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25mKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMml2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkp
OworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3Jt
M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZf
dW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOworfQorCitK
U0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KEpTQzo6
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2
LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp1bmlmb3JtNGl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBk
YXRhRnVuY3Rpb25pKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3Jt
TWF0cml4MmZ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2LCBleGVj
LCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtTWF0cml4NGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBk
YXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4NGZ2LCBleGVjLCBpbXBsKCkpOworfQor
CitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIx
ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92
ZXJ0ZXhBdHRyaWIxdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMnYsIGV4ZWMsIGlt
cGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZl
cnRleEF0dHJpYjNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWI0
diwgZXhlYywgaW1wbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgiCi0KLSNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkVY
VEJsZW5kTWluTWF4LmgiCi0jaW5jbHVkZSAiRVhURnJhZ0RlcHRoLmgiCi0jaW5jbHVkZSAiRVhU
U2hhZGVyVGV4dHVyZUxPRC5oIgotI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yy5oIgotI2luY2x1ZGUgIkVYVHNSR0IuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0j
aW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSlNBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkpTRVhU
QmxlbmRNaW5NYXguaCIKLSNpbmNsdWRlICJKU0VYVEZyYWdEZXB0aC5oIgotI2luY2x1ZGUgIkpT
RVhUU2hhZGVyVGV4dHVyZUxPRC5oIgotI2luY2x1ZGUgIkpTRVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljLmgiCi0jaW5jbHVkZSAiSlNFWFRzUkdCLmgiCi0jaW5jbHVkZSAiSlNIVE1MQ2FudmFz
RWxlbWVudC5oIgotI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkpT
SW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCi0jaW5jbHVk
ZSAiSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0jaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxv
YXQuaCIKLSNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIkpT
T0VTVGV4dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9hdExp
bmVhci5oIgotI2luY2x1ZGUgIkpTT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJK
U1dlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgi
Ci0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJK
U1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERlYnVnUmVu
ZGVyZXJJbmZvLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERlYnVnU2hhZGVycy5oIgotI2luY2x1ZGUg
IkpTV2ViR0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJKU1dlYkdMRHJhd0J1ZmZlcnMuaCIK
LSNpbmNsdWRlICJKU1dlYkdMRnJhbWVidWZmZXIuaCIKLSNpbmNsdWRlICJKU1dlYkdMTG9zZUNv
bnRleHQuaCIKLSNpbmNsdWRlICJKU1dlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIkpTV2ViR0xS
ZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJKU1dlYkdMU2hhZGVyLmgiCi0jaW5jbHVkZSAiSlNX
ZWJHTFRleHR1cmUuaCIKLSNpbmNsdWRlICJKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCi0jaW5j
bHVkZSAiSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCi0jaW5jbHVkZSAiSlNXZWJLaXRD
U1NNYXRyaXguaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9FU0Vs
ZW1lbnRJbmRleFVpbnQuaCIKLSNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0j
aW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGlu
ZWFyLmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5o
IgotI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgotI2lu
Y2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCi0jaW5jbHVkZSAiV2ViR0xEZWJ1
Z1JlbmRlcmVySW5mby5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCi0jaW5jbHVk
ZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCi0j
aW5jbHVkZSAiV2ViR0xFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgi
Ci0jaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCi0jaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5o
IgotI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oIgotI2luY2x1ZGUgIldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCIKLSNpbmNsdWRl
IDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
VHlwZWRBcnJheXMuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotCi0jaWYgRU5BQkxF
KFZJREVPKQotI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0hUTUxW
aWRlb0VsZW1lbnQuaCIKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEdldEluZm8mIGluZm8pCi17
Ci0gICAgc3dpdGNoIChpbmZvLmdldFR5cGUoKSkgewotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjpr
VHlwZUJvb2w6Ci0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oaW5mby5nZXRCb29sKCkpOwotICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJvb2xBcnJheTogewotICAgICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlID0gaW5m
by5nZXRCb29sQXJyYXkoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVl
LnNpemUoKTsgKytpaSkKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1ZVtp
aV0pKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVj
dCwgbGlzdCk7Ci0gICAgfQotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUZsb2F0OgotICAg
ICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRGbG9hdCgpKTsKLSAgICBjYXNlIFdlYkdMR2V0
SW5mbzo6a1R5cGVJbnQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEludCgpKTsK
LSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVOdWxsOgotICAgICAgICByZXR1cm4ganNOdWxs
KCk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlU3RyaW5nOgotICAgICAgICByZXR1cm4g
anNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW5mby5nZXRTdHJpbmcoKSk7Ci0gICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlVW5zaWduZWRJbnQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihpbmZv
LmdldFVuc2lnbmVkSW50KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMQnVm
ZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2Vi
R0xCdWZmZXIoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xGbG9hdEFycmF5
OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xG
bG9hdEFycmF5KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRnJhbWVidWZm
ZXI6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJH
TEZyYW1lYnVmZmVyKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMSW50QXJy
YXk6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJH
TEludEFycmF5KCkpOwotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgV2ViR0xPYmplY3RBcnJheQot
ICAgIC8vIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMT2JqZWN0QXJyYXk6Ci0gICAgY2Fz
ZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xQcm9ncmFtOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xQcm9ncmFtKCkpOwotICAgIGNhc2UgV2Vi
R0xHZXRJbmZvOjprVHlwZVdlYkdMUmVuZGVyYnVmZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xSZW5kZXJidWZmZXIoKSk7Ci0gICAgY2Fz
ZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xUZXh0dXJlOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xUZXh0dXJlKCkpOwotICAgIGNhc2UgV2Vi
R0xHZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRCeXRlQXJyYXk6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KCkp
OwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRJbnRBcnJheToKLSAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVW5zaWdu
ZWRJbnRBcnJheSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlu
Zm8uZ2V0V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUygpKTsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9
Ci19Ci0KLWVudW0gT2JqZWN0VHlwZSB7Ci0gICAga0J1ZmZlciwga1JlbmRlcmJ1ZmZlciwga1Rl
eHR1cmUsIGtWZXJ0ZXhBdHRyaWIKLX07Ci0KLXN0YXRpYyBKU1ZhbHVlIGdldE9iamVjdFBhcmFt
ZXRlcihKU1dlYkdMUmVuZGVyaW5nQ29udGV4dCogb2JqLCBFeGVjU3RhdGUqIGV4ZWMsIE9iamVj
dFR5cGUgb2JqZWN0VHlwZSkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIp
Ci0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IG9iai0+aW1wbCgpOwotICAg
IHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbzsKLSAgICBzd2l0Y2gg
KG9iamVjdFR5cGUpIHsKLSAgICBjYXNlIGtCdWZmZXI6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0
LmdldEJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2Uga1JlbmRlcmJ1ZmZlcjoKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBrVGV4dHVyZToKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0VGV4UGFyYW1ldGVyKHRh
cmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrVmVydGV4QXR0cmli
OgotICAgICAgICAvLyB0YXJnZXQgPT4gaW5kZXgKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0
VmVydGV4QXR0cmliKHRhcmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgb2Jq
LT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLWVudW0gV2hpY2hQcm9ncmFtQ2FsbCB7Ci0g
ICAga1Byb2dyYW1QYXJhbWV0ZXIsIGtVbmlmb3JtCi19OwotCi1zdGF0aWMgSlNWYWx1ZSB0b0pT
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViR0xF
eHRlbnNpb24qIGV4dGVuc2lvbikKLXsKLSAgICBpZiAoIWV4dGVuc2lvbikKLSAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwotICAgIHN3aXRjaCAoZXh0ZW5zaW9uLT5nZXROYW1lKCkpIHsKLSAgICBj
YXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTExvc2VDb250ZXh0TmFtZToKLSAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTExvc2VDb250ZXh0Kj4o
ZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUU2hhZGVyVGV4dHVyZUxP
RE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8RVhUU2hhZGVyVGV4dHVyZUxPRCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRl
bnNpb246OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY05hbWU6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUc1JHQk5h
bWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8
RVhUc1JHQio+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEZyYWdE
ZXB0aE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8RVhURnJhZ0RlcHRoKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lv
bjo6RVhUQmxlbmRNaW5NYXhOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PEVYVEJsZW5kTWluTWF4Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2Fz
ZSBXZWJHTEV4dGVuc2lvbjo6T0VTU3RhbmRhcmREZXJpdmF0aXZlc05hbWU6Ci0gICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTU3RhbmRhcmREZXJp
dmF0aXZlcyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1
cmVGbG9hdE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4
dGVuc2lvbjo6T0VTVGV4dHVyZUZsb2F0TGluZWFyTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxvYXRMaW5lYXIqPihl
eHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlSGFsZkZsb2F0
TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDxPRVNUZXh0dXJlSGFsZkZsb2F0Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVu
c2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhck5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVh
cio+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1ZlcnRleEFycmF5
T2JqZWN0TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNWZXJ0ZXhBcnJheU9iamVjdCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246Ok9FU0VsZW1lbnRJbmRleFVpbnROYW1lOgotICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU0VsZW1lbnRJbmRleFVpbnQqPihl
eHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERlYnVnUmVuZGVyZXJJ
bmZvTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTERlYnVnUmVuZGVyZXJJbmZvKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1NoYWRlcnNOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVidWdTaGFkZXJzKj4oZXh0ZW5z
aW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Q05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQ05hbWU6Ci0gICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVMzVENOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKj4oZXh0
ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZXB0aFRleHR1cmVOYW1l
OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdl
YkdMRGVwdGhUZXh0dXJlKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6
V2ViR0xEcmF3QnVmZmVyc05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEcmF3QnVmZmVycyo+KGV4dGVuc2lvbikpOwotICAgIGNh
c2UgV2ViR0xFeHRlbnNpb246OkFOR0xFSW5zdGFuY2VkQXJyYXlzTmFtZToKLSAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxBTkdMRUluc3RhbmNlZEFy
cmF5cyo+KGV4dGVuc2lvbikpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4ganNOdWxsKCk7Ci19Ci0KLXZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgpKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhy
b3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwot
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29u
dGV4dCA9IGltcGwoKTsKLSAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3Jh
bTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXByb2dy
YW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0g
ICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICBWZWN0b3I8UmVmUHRyPFdl
YkdMU2hhZGVyPj4gc2hhZGVyczsKLSAgICBib29sIHN1Y2NlZWQgPSBjb250ZXh0LmdldEF0dGFj
aGVkU2hhZGVycyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc051bGwoKTsKLSAg
ICB9Ci0gICAgaWYgKCFzdWNjZWVkKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkg
PCBzaGFkZXJzLnNpemUoKTsgKytpaSkKLSAgICAgICAgbGlzdC5hcHBlbmQodG9KUyhleGVjLCBn
bG9iYWxPYmplY3QoKSwgc2hhZGVyc1tpaV0uZ2V0KCkpKTsKLSAgICByZXR1cm4gY29uc3RydWN0
QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOwotfQotCi1KU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oRXhlY1N0YXRlKiBleGVjKQotewotICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7Ci0KLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAg
Y29uc3QgU3RyaW5nIG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uID0g
Y29udGV4dC5nZXRFeHRlbnNpb24obmFtZSk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGV4dGVuc2lvbik7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEJ1ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdl
dE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrQnVmZmVyKTsKLX0KLQotSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDMpCi0g
ICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgdW5zaWduZWQgYXR0YWNobWVudCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRv
SW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDIpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNv
bnRleHQuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKHRhcmdldCwgYXR0YWNobWVu
dCwgcG5hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgp
LnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMp
KTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4
dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbyA9
IGNvbnRleHQuZ2V0UGFyYW1ldGVyKHBuYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19
Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIo
RXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikK
LSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKGV4ZWMpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5n
ZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIHBuYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0g
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5m
byk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFt
ZXRlcih0aGlzLCBleGVjLCBrUmVuZGVyYnVmZmVyKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlu
aGVyaXRzKEpTV2ViR0xTaGFkZXI6OmluZm8oKSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjKTsKLSAgICBXZWJHTFNoYWRlciogc2hhZGVyID0gSlNXZWJHTFNoYWRlcjo6dG9X
cmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJH
TEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgcG5hbWUs
IGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIGlmIChjb250ZXh0
LmlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIFZlY3RvcjxT
dHJpbmc+IHZhbHVlID0gY29udGV4dC5nZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7Ci0gICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgdmFs
dWUuc2l6ZSgpOyArK2lpKQotICAgICAgICBsaXN0LmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShl
eGVjLCB2YWx1ZVtpaV0pKTsKLSAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xv
YmFsT2JqZWN0KCksIGxpc3QpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRUZXhQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBnZXRPYmpl
Y3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1RleHR1cmUpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
LQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYg
Y29udGV4dCA9IGltcGwoKTsKLSAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJv
Z3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXBy
b2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0
VW5pZm9ybShwcm9ncmFtLCBsb2NhdGlvbiwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQot
Ci1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywg
a1ZlcnRleEF0dHJpYik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KLWJvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotewotICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNDOjpKU09i
amVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAgIGludDMyX3QgbGVuZ3RoID0gb2Jq
ZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvSW50MzIo
ZXhlYyk7Ci0KLSAgICBpZiAoIXZlY3Rvci50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHZlY3Rvci5yZXNpemUobGVuZ3RoKTsKLQotICAgIGZv
ciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTQzo6SlNWYWx1
ZSB2ID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmVjdG9yW2ldID0gc3Rh
dGljX2Nhc3Q8VD4odi50b051bWJlcihleGVjKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWVudW0gRGF0YUZ1bmN0aW9uVG9DYWxsIHsKLSAgICBmX3VuaWZvcm0xdiwgZl91bmlm
b3JtMnYsIGZfdW5pZm9ybTN2LCBmX3VuaWZvcm00diwKLSAgICBmX3ZlcnRleEF0dHJpYjF2LCBm
X3ZlcnRleEF0dHJpYjJ2LCBmX3ZlcnRleEF0dHJpYjN2LCBmX3ZlcnRleEF0dHJpYjR2Ci19Owot
Ci1lbnVtIERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCB7Ci0gICAgZl91bmlmb3JtTWF0cml4MmZ2
LCBmX3VuaWZvcm1NYXRyaXgzZnYsIGZfdW5pZm9ybU1hdHJpeDRmdgotfTsKLQotc3RhdGljIGJv
b2wgZnVuY3Rpb25Gb3JVbmlmb3JtKERhdGFGdW5jdGlvblRvQ2FsbCBmKQotewotICAgIHN3aXRj
aCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAg
ICBjYXNlIGZfdW5pZm9ybTN2OgotICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rpb25Ub0NhbGwg
ZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkK
LXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGV4ZWMpKTsKLSAgICAKLSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSAw
OwotICAgIGxvbmcgaW5kZXggPSAtMTsKLSAgICAKLSAgICBpZiAoZnVuY3Rpb25Gb3JVbmlmb3Jt
KGYpKSB7Ci0gICAgICAgIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFw
cGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICAgICAgaWYgKCFsb2NhdGlvbiAm
JiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
aW5kZXggPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotCi0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICAgICAgCi0gICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQz
MkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpICAgIAotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgCi0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKHdlYkdMQXJyYXkpIHsKLSAgICAgICAg
c3dpdGNoIChmKSB7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgICAgICAgICBjb250
ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OgotICAgICAgICAgICAgY29udGV4
dC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjoKLSAgICAgICAgICAgIGNvbnRleHQu
dW5pZm9ybTNmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgICAgICBjb250ZXh0LnVu
aWZvcm00ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6Ci0gICAgICAgICAgICBjb250ZXh0
LnZlcnRleEF0dHJpYjFmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjJ2OgotICAgICAgICAgICAgY29udGV4
dC52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjoKLSAgICAgICAgICAgIGNvbnRl
eHQudmVydGV4QXR0cmliM2Z2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6Ci0gICAgICAgICAgICBjb250
ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgVmVj
dG9yPGZsb2F0LCA2ND4gYXJyYXk7Ci0gICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7Ci0KLSAgICBzd2l0Y2ggKGYpIHsKLSAgICBjYXNlIGZfdW5pZm9ybTF2OgotICAgICAg
ICBjb250ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgp
LCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAgICAgIGNv
bnRleHQudW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVj
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm0zdjoKLSAgICAgICAgY29udGV4
dC51bmlmb3JtM2Z2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTR2OgotICAgICAgICBjb250ZXh0LnVu
aWZvcm00ZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIxdjoKLSAgICAgICAgY29udGV4dC52
ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBmX3ZlcnRleEF0dHJpYjJ2OgotICAgICAgICBjb250ZXh0LnZl
cnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6Ci0gICAgICAgIGNvbnRleHQudmVy
dGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djoKLSAgICAgICAgY29udGV4dC52ZXJ0
ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIAotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0
aW9uaShEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOwotICAKLSAgICBSZWZQdHI8SW50MzJBcnJheT4gd2ViR0xBcnJh
eSA9IHRvSW50MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0KLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAod2ViR0xBcnJheSkgewotICAgICAgICBzd2l0Y2gg
KGYpIHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5p
Zm9ybTFpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZv
cm0yaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3Jt
M2l2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTRp
dihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQotCi0KLSAgICBWZWN0b3I8aW50LCA2ND4gYXJyYXk7Ci0gICAgaWYg
KCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQotICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0KLSAgICBzd2l0Y2ggKGYpIHsKLSAg
ICBjYXNlIGZfdW5pZm9ybTF2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0xaXYobG9jYXRpb24s
IGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgZl91bmlmb3JtMnY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTJpdihsb2NhdGlvbiwgYXJy
YXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBm
X3VuaWZvcm0zdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheS5k
YXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5p
Zm9ybTR2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmRhdGEo
KSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwot
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1zdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFG
dW5jdGlvbk1hdHJpeChEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpICE9IDMpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAg
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246
OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFsb2NhdGlv
biAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotCi0gICAgYm9vbCB0cmFuc3Bvc2Ug
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgICAgIAotICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zsb2F0MzJB
cnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0gICAgICAgIAotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGlmICh3ZWJHTEFycmF5KSB7Ci0gICAgICAgIHN3aXRjaCAoZikg
ewotICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDJmdjoKLSAgICAgICAgICAgIGNvbnRleHQu
dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBl
Yyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6
Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9z
ZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgZl91bmlmb3JtTWF0cml4NGZ2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4
NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBW
ZWN0b3I8ZmxvYXQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDIpLCBhcnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihleGVjKTsKLQotICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2
OgotICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwg
YXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBmX3VuaWZvcm1NYXRyaXgzZnY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihs
b2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoKLSAgICAgICAgY29udGV4
dC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTQzo6SlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0xdiwgZXhlYywgaW1w
bCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MWl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZf
dW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0
dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0ydiwgZXhlYywg
aW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25m
KGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtM3YsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpT
Qzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm00diwgZXhl
YywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rp
b25pKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgyZnYsIGV4
ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybU1hdHJpeDNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDNmdiwgZXhlYywgaW1wbCgpKTsKLX0KLQot
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91
bmlmb3JtTWF0cml4NGZ2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjF2LCBleGVjLCBpbXBs
KCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9u
ZihmX3ZlcnRleEF0dHJpYjJ2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdihKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBleGVjLCBp
bXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYjRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0
aW9uZihmX3ZlcnRleEF0dHJpYjR2LCBleGVjLCBpbXBsKCkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24g
MTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI5ODMsNyArMjk4Myw3IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgICAgICAgICBpZiAoR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgkaW50
ZXJmYWNlKSBlcSAiSW1wbCIpIHsKICAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAgPSAiICAg
ICR7aW1wbFR5cGV9KiByb290ID0gJmpzJHtpbnRlcmZhY2VOYW1lfS0+aW1wbCgpO1xuIjsKICAg
ICAgICAgICAgIH0gZWxzaWYgKEdldEdlbmVyYXRlSXNSZWFjaGFibGUoJGludGVyZmFjZSkgZXEg
IkltcGxXZWJHTFJlbmRlcmluZ0NvbnRleHQiKSB7Ci0gICAgICAgICAgICAgICAgJHJvb3RTdHJp
bmcgID0gIiAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIHJvb3QgPSBXVEY6OmdldFB0cihqcyR7
aW50ZXJmYWNlTmFtZX0tPmltcGwoKS5jb250ZXh0KCkpO1xuIjsKKyAgICAgICAgICAgICAgICAk
cm9vdFN0cmluZyAgPSAiICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIHJvb3QgPSBXVEY6
OmdldFB0cihqcyR7aW50ZXJmYWNlTmFtZX0tPmltcGwoKS5jb250ZXh0KCkpO1xuIjsKICAgICAg
ICAgICAgIH0gZWxzaWYgKEdldEdlbmVyYXRlSXNSZWFjaGFibGUoJGludGVyZmFjZSkgZXEgIklt
cGxGcmFtZSIpIHsKICAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAgPSAiICAgIEZyYW1lKiBy
b290ID0gV1RGOjpnZXRQdHIoanMke2ludGVyZmFjZU5hbWV9LT5pbXBsKCkuZnJhbWUoKSk7XG4i
OwogICAgICAgICAgICAgICAgICRyb290U3RyaW5nIC49ICIgICAgaWYgKCFyb290KVxuIjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAx
NzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIsOSArNTIsMTAgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGlu
ZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCi0jaWYgRU5BQkxFKFdFQkdMKSAg
ICAKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5o
IgorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjEyLDcgKzIxMyw4IEBAIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW4KICAgICAgICAgICAgIGlmIChtX2NvbnRl
eHQgJiYgIW1fY29udGV4dC0+aXMzZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBtX2NvbnRl
eHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSh0aGlzLCBzdGF0aWNfY2FzdDxXZWJH
TENvbnRleHRBdHRyaWJ1dGVzKj4oYXR0cnMpKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQg
PSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGUodGhpcywgc3RhdGljX2Nhc3Q8V2Vi
R0xDb250ZXh0QXR0cmlidXRlcyo+KGF0dHJzKSwgdHlwZSk7CisgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKG1fY29udGV4dCkgewogICAgICAgICAgICAgICAgICAgICAvLyBO
ZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQg
Y3JlYXRlZCBmb3IgdGhlIENhbnZhcwogICAgICAgICAgICAgICAgICAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKQEAgLTI1NSw3ICsyNTcsNyBAQCBib29sIEhU
TUxDYW52YXNFbGVtZW50OjppczJkVHlwZShjb25zdCBTCiBib29sIEhUTUxDYW52YXNFbGVtZW50
OjppczNkVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgLy8gUmV0YWluIHN1cHBvcnQg
Zm9yIHRoZSBsZWdhY3kgIndlYmtpdC0zZCIgbmFtZS4KLSAgICByZXR1cm4gdHlwZSA9PSAid2Vi
Z2wiIHx8IHR5cGUgPT0gImV4cGVyaW1lbnRhbC13ZWJnbCIgfHwgdHlwZSA9PSAid2Via2l0LTNk
IjsKKyAgICByZXR1cm4gdHlwZSA9PSAid2ViZ2wiIHx8IHR5cGUgPT0gImV4cGVyaW1lbnRhbC13
ZWJnbCIgfHwgdHlwZSA9PSAid2Via2l0LTNkIiB8fCB0eXBlID09ICJleHBlcmltZW50YWwtd2Vi
Z2wyIjsKIH0KICNlbmRpZgogCkBAIC0zMjcsNyArMzI5LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6cmVzZXQoKQogCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGlmIChpczNEKCkgJiYgb2xk
U2l6ZSAhPSBzaXplKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4
dCo+KG1fY29udGV4dC5nZXQoKSktPnJlc2hhcGUod2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAg
ICBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj4obV9jb250ZXh0LmdldCgp
KS0+cmVzaGFwZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAjZW5kaWYKIAogICAgIGlmIChhdXRvIHJl
bmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkgewpAQCAtMzk0LDcgKzM5Niw3IEBAIHZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ28KIAogI2lmIEVOQUJMRShXRUJHTCkgICAg
CiAgICAgaWYgKGlzM0QoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250
ZXh0Kj4obV9jb250ZXh0LmdldCgpKS0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworICAgICAgICBz
dGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj4obV9jb250ZXh0LmdldCgpKS0+
bWFya0xheWVyQ29tcG9zaXRlZCgpOwogI2VuZGlmCiB9CiAKQEAgLTQ3NSw3ICs0NzcsNyBAQCBS
ZWZQdHI8SW1hZ2VEYXRhPiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0CiAgICAgaWYgKCFpczNEKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
dHggPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkp
OworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCA9IHN0YXRpY19jYXN0PFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UqPihtX2NvbnRleHQuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGN0
eC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKICNlbHNlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuY3Bw
CShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUlu
c3RhbmNlZEFycmF5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1BTkdMRUluc3RhbmNlZEFycmF5czo6QU5HTEVJbnN0YW5jZWRB
cnJheXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorQU5HTEVJbnN0YW5jZWRBcnJh
eXM6OkFOR0xFSW5zdGFuY2VkQXJyYXlzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRl
eHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpAQCAtNDgsNyArNDgsNyBA
QCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBBTkdMRUluc3RhCiAgICAgcmV0dXJuIEFO
R0xFSW5zdGFuY2VkQXJyYXlzTmFtZTsKIH0KIAotYm9vbCBBTkdMRUluc3RhbmNlZEFycmF5czo6
c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK2Jvb2wgQU5HTEVJbnN0
YW5jZWRBcnJheXM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0
KQogewogI2lmIFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FOR0xFSW5zdGFuY2VkQXJy
YXlzLmgJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FO
R0xFSW5zdGFuY2VkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE2ICszMCwxNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2Ns
YXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIGNsYXNzIEFOR0xFSW5zdGFuY2VkQXJy
YXlzIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNp
dCBBTkdMRUluc3RhbmNlZEFycmF5cyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBs
aWNpdCBBTkdMRUluc3RhbmNlZEFycmF5cyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAg
ICAgdmlydHVhbCB+QU5HTEVJbnN0YW5jZWRBcnJheXMoKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5z
aW9uTmFtZSBnZXROYW1lKCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgc3VwcG9ydGVkKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZEFOR0xF
KEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVp
IHByaW1jb3VudCk7CiAgICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQzNEZW51
bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQs
IEdDM0RzaXplaSBwcmltY291bnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAxNzgz
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDcgQEAgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpDYW52YXNSZW5kZXJpbgogI2lmICFFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CiAgICAgQVNTRVJUX1VOVVNFRCh1c2VzRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUsICF1c2Vz
RGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUpOwogI2VuZGlmCisgICAgbV90eXBlID0gIjJkIjsK
IH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnVud2luZFN0YXRlU3RhY2soKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXMyZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKSB7fQogICAgIHZpcnR1
YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KQEAg
LTczLDYgKzc0LDcgQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICB2b2lkIGNoZWNrT3JpZ2luKGNv
bnN0IFVSTCYpOwogCisgICAgU3RyaW5nIG1fdHlwZTsKIHByaXZhdGU6CiAgICAgSFRNTENhbnZh
c0VsZW1lbnQqIG1fY2FudmFzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0VYVEJsZW5kTWluTWF4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9FWFRCbGVuZE1pbk1heC5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVYVEJsZW5kTWluTWF4OjpFWFRC
bGVuZE1pbk1heChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitFWFRCbGVuZE1pbk1h
eDo6RVhUQmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAg
ICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9FWFRCbGVuZE1pbk1heC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmgJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFWFRCbGVuZE1pbk1h
eCBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
RVhUQmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgRVhU
QmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfkVY
VEJsZW5kTWluTWF4KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNv
bnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhURnJhZ0Rl
cHRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGcmFn
RGVwdGguY3BwCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9FWFRGcmFnRGVwdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRVhURnJhZ0RlcHRoOjpFWFRGcmFnRGVwdGgoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KQorRVhURnJhZ0RlcHRoOjpFWFRGcmFnRGVwdGgoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRl
eHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGcmFnRGVwdGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGcmFnRGVwdGgu
aAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhURnJh
Z0RlcHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBFWFRGcmFnRGVwdGggZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24g
ewogcHVibGljOgotICAgIGV4cGxpY2l0IEVYVEZyYWdEZXB0aChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBleHBsaWNpdCBFWFRGcmFnRGVwdGgoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSopOwogICAgIHZpcnR1YWwgfkVYVEZyYWdEZXB0aCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNp
b25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3BwCShyZXZpc2lvbiAxNzgz
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUVYVFNoYWRlclRleHR1cmVMT0Q6OkVYVFNoYWRlclRleHR1cmVMT0QoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KQorRVhUU2hhZGVyVGV4dHVyZUxPRDo6RVhUU2hhZGVyVGV4dHVy
ZUxPRChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRl
bnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VY
VFNoYWRlclRleHR1cmVMT0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmgJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVYVFNoYWRlclRl
eHR1cmVMT0QgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4
cGxpY2l0IEVYVFNoYWRlclRleHR1cmVMT0QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAg
ZXhwbGljaXQgRVhUU2hhZGVyVGV4dHVyZUxPRChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7
CiAgICAgdmlydHVhbCB+RVhUU2hhZGVyVGV4dHVyZUxPRCgpOwogCiAgICAgdmlydHVhbCBFeHRl
bnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
LmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhU
VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yzo6RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCkKK0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzo6RVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4
dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgJKHJldmlzaW9uIDE3
ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljIGZpbmFsIDogcHVibGlj
IFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgRVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2
aXJ0dWFsIH5FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMoKTsKIAogICAgIHZpcnR1YWwgRXh0
ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9FWFRzUkdCLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9FWFRzUkdCLmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhUc1JHQi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FWFRzUkdCOjpFWFRzUkdCKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCkKK0VYVHNSR0I6OkVYVHNSR0IoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRzUkdCLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUc1JHQi5oCShyZXZpc2lvbiAxNzgzNzEpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRzUkdCLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFWFRzUkdCIGZpbmFs
IDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFWFRzUkdC
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxpY2l0IEVYVHNSR0IoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfkVYVHNSR0IoKTsKIAogICAgIHZpcnR1
YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmNwcAkocmV2
aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudElu
ZGV4VWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1PRVNFbGVtZW50SW5kZXhVaW50OjpPRVNFbGVtZW50SW5kZXhVaW50KFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK09FU0VsZW1lbnRJbmRleFVpbnQ6Ok9FU0Vs
ZW1lbnRJbmRleFVpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6
IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5oCShyZXZpc2lvbiAxNzgzNzEpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBP
RVNFbGVtZW50SW5kZXhVaW50IGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBPRVNFbGVtZW50SW5kZXhVaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOworICAgIGV4cGxpY2l0IE9FU0VsZW1lbnRJbmRleFVpbnQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU0VsZW1lbnRJbmRleFVpbnQoKTsKIAogICAgIHZp
cnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVz
LmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNTdGFuZGFyZERlcml2YXRpdmVzOjpPRVNTdGFu
ZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK09FU1N0YW5k
YXJkRGVyaXZhdGl2ZXM6Ok9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJp
dmF0aXZlcy5oCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBPRVNTdGFuZGFyZERlcml2YXRpdmVzIGZp
bmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBPRVNT
dGFuZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxpY2l0
IE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAg
IHZpcnR1YWwgfk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5z
aW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNUZXh0
dXJlRmxvYXQ6Ok9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQp
CitPRVNUZXh0dXJlRmxvYXQ6Ok9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5oCShyZXZpc2lv
biAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIE9FU1RleHR1cmVGbG9hdCBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBw
dWJsaWM6Ci0gICAgT0VTVGV4dHVyZUZsb2F0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAg
IE9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVh
bCB+T0VTVGV4dHVyZUZsb2F0KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFt
ZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VT
VGV4dHVyZUZsb2F0TGluZWFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwCShyZXZpc2lvbiAxNzgzNzEpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotT0VT
VGV4dHVyZUZsb2F0TGluZWFyOjpPRVNUZXh0dXJlRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0KQorT0VTVGV4dHVyZUZsb2F0TGluZWFyOjpPRVNUZXh0dXJlRmxvYXRM
aW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0
ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9P
RVNUZXh0dXJlRmxvYXRMaW5lYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuaAkocmV2aXNpb24gMTc4MzcxKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBPRVNU
ZXh0dXJlRmxvYXRMaW5lYXIgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGlj
OgotICAgIGV4cGxpY2l0IE9FU1RleHR1cmVGbG9hdExpbmVhcihXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBleHBsaWNpdCBPRVNUZXh0dXJlRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU1RleHR1cmVGbG9hdExpbmVhcigpOwogCiAg
ICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQu
Y3BwCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNU
ZXh0dXJlSGFsZkZsb2F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1RleHR1cmVIYWxmRmxvYXQ6Ok9FU1RleHR1cmVIYWxm
RmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorT0VTVGV4dHVyZUhhbGZGbG9h
dDo6T0VTVGV4dHVyZUhhbGZGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0
KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmgJKHJldmlzaW9uIDE3
ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIE9FU1RleHR1cmVIYWxmRmxvYXQgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24g
ewogcHVibGljOgotICAgIE9FU1RleHR1cmVIYWxmRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0
Kik7CisgICAgT0VTVGV4dHVyZUhhbGZGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7
CiAgICAgdmlydHVhbCB+T0VTVGV4dHVyZUhhbGZGbG9hdCgpOwogCiAgICAgdmlydHVhbCBFeHRl
bnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuY3Bw
CShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0
dXJlSGFsZkZsb2F0TGluZWFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI6Ok9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorT0VT
VGV4dHVyZUhhbGZGbG9hdExpbmVhcjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcihXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4
dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxm
RmxvYXRMaW5lYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9P
RVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXIgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVi
bGljOgotICAgIE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0
Kik7CisgICAgT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcihXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKik7CiAgICAgdmlydHVhbCB+T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcigpOwogCiAgICAg
dmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5j
cHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1Zl
cnRleEFycmF5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1ZlcnRleEFycmF5T2JqZWN0OjpPRVNWZXJ0ZXhBcnJh
eU9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitPRVNWZXJ0ZXhBcnJheU9i
amVjdDo6T0VTVmVydGV4QXJyYXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29u
dGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmgJKHJldmlz
aW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwxNCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U7CiBjbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwogCiB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdCBm
aW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgT0VTVmVydGV4QXJy
YXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgT0VTVmVydGV4QXJyYXlPYmpl
Y3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU1ZlcnRleEFy
cmF5T2JqZWN0KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVy
aW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3Njk5NCkJKGZyb20gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoxNzY5OTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgi
CisKKyNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgorI2luY2x1ZGUgIkNhY2hlZElt
YWdlLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJFWFRCbGVuZE1pbk1heC5oIgorI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5oIgorI2lu
Y2x1ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKKyNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWMuaCIKKyNpbmNsdWRlICJFWFRzUkdCLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgor
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50LmgiCisjaW5jbHVkZSAiT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdC5oIgorI2lu
Y2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxm
RmxvYXQuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCisjaW5jbHVk
ZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UmVuZGVyQm94LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJHTEFjdGl2
ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMu
aCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUgIldl
YkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRFdmVudC5oIgor
I2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRl
cmVySW5mby5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5jbHVkZSAiV2Vi
R0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCisjaW5jbHVk
ZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgor
I2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xTaGFkZXJQcmVjaXNpb25G
b3JtYXQuaCIKKyNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTFVuaWZv
cm1Mb2NhdGlvbi5oIgorCisjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMy
QXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBkb3VibGUgc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0
ZW1wdHMgPSAxLjA7Citjb25zdCBpbnQgbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlID0gMjU2
OworCituYW1lc3BhY2UgeworCisgICAgY2xhc3MgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciB7
CisgICAgcHVibGljOgorICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyKERyYXdpbmdC
dWZmZXIqIGRyYXdpbmdCdWZmZXIsIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyQmluZGlu
ZykKKyAgICAgICAgICAgIDogbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCisgICAgICAg
ICAgICAsIG1fZnJhbWVidWZmZXJCaW5kaW5nKGZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBm
b3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29t
bWl0KCk7CisgICAgICAgIH0KKworICAgICAgICB+U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVk
ZWQKKyAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7
CisgICAgICAgIFdlYkdMRnJhbWVidWZmZXIqIG1fZnJhbWVidWZmZXJCaW5kaW5nOworICAgIH07
CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9yWmVybyhXZWJHTE9iamVjdCogb2JqZWN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+b2JqZWN0KCkgOiAwOwor
ICAgIH0KKworICAgIHZvaWQgY2xpcDFEKEdDM0RpbnQgc3RhcnQsIEdDM0RzaXplaSByYW5nZSwg
R0MzRHNpemVpIHNvdXJjZVJhbmdlLCBHQzNEaW50KiBjbGlwcGVkU3RhcnQsIEdDM0RzaXplaSog
Y2xpcHBlZFJhbmdlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNsaXBwZWRTdGFydCAmJiBjbGlw
cGVkUmFuZ2UpOworICAgICAgICBpZiAoc3RhcnQgPCAwKSB7CisgICAgICAgICAgICByYW5nZSAr
PSBzdGFydDsKKyAgICAgICAgICAgIHN0YXJ0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBHQzNE
aW50IGVuZCA9IHN0YXJ0ICsgcmFuZ2U7CisgICAgICAgIGlmIChlbmQgPiBzb3VyY2VSYW5nZSkK
KyAgICAgICAgICAgIHJhbmdlIC09IGVuZCAtIHNvdXJjZVJhbmdlOworICAgICAgICAqY2xpcHBl
ZFN0YXJ0ID0gc3RhcnQ7CisgICAgICAgICpjbGlwcGVkUmFuZ2UgPSByYW5nZTsKKyAgICB9CisK
KyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIG5vIGNsaXBwaW5nIGlzIG5lY2Vzc2FyeSwgaS5lLiwg
eCwgeSwgd2lkdGgsIGhlaWdodCBzdGF5IHRoZSBzYW1lLgorICAgIGJvb2wgY2xpcDJEKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHNvdXJjZVdpZHRoLCBHQzNEc2l6ZWkgc291cmNlSGVpZ2h0
LAorICAgICAgICAgICAgICAgIEdDM0RpbnQqIGNsaXBwZWRYLCBHQzNEaW50KiBjbGlwcGVkWSwg
R0MzRHNpemVpKiBjbGlwcGVkV2lkdGgsIEdDM0RzaXplaSpjbGlwcGVkSGVpZ2h0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGNsaXBwZWRYICYmIGNsaXBwZWRZICYmIGNsaXBwZWRXaWR0aCAmJiBj
bGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgY2xpcDFEKHgsIHdpZHRoLCBzb3VyY2VXaWR0aCwgY2xp
cHBlZFgsIGNsaXBwZWRXaWR0aCk7CisgICAgICAgIGNsaXAxRCh5LCBoZWlnaHQsIHNvdXJjZUhl
aWdodCwgY2xpcHBlZFksIGNsaXBwZWRIZWlnaHQpOworICAgICAgICByZXR1cm4gKCpjbGlwcGVk
WCAhPSB4IHx8ICpjbGlwcGVkWSAhPSB5IHx8ICpjbGlwcGVkV2lkdGggIT0gd2lkdGggfHwgKmNs
aXBwZWRIZWlnaHQgIT0gaGVpZ2h0KTsKKyAgICB9CisKKyAgICBHQzNEaW50IGNsYW1wKEdDM0Rp
bnQgdmFsdWUsIEdDM0RpbnQgbWluLCBHQzNEaW50IG1heCkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZSA8IG1pbikKKyAgICAgICAgICAgIHZhbHVlID0gbWluOworICAgICAgICBpZiAodmFsdWUg
PiBtYXgpCisgICAgICAgICAgICB2YWx1ZSA9IG1heDsKKyAgICAgICAgcmV0dXJuIHZhbHVlOwor
ICAgIH0KKworICAgIC8vIFJldHVybiB0cnVlIGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhl
IEFTQ0lJIHN1YnNldCBhcyBkZWZpbmVkIGluCisgICAgLy8gR0xTTCBFUyAxLjAgc3BlYyBzZWN0
aW9uIDMuMS4KKyAgICBib29sIHZhbGlkYXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIgYykKKyAg
ICB7CisgICAgICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQg
YCBAIFwgJyBERUwuCisgICAgICAgIGlmIChjID49IDMyICYmIGMgPD0gMTI2CisgICAgICAgICAg
ICAmJiBjICE9ICciJyAmJiBjICE9ICckJyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAmJiBjICE9
ICdcXCcgJiYgYyAhPSAnXCcnKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8v
IEhvcml6b250YWwgdGFiLCBsaW5lIGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJy
aWFnZSByZXR1cm4KKyAgICAgICAgLy8gYXJlIGFsc28gdmFsaWQuCisgICAgICAgIGlmIChjID49
IDkgJiYgYyA8PSAxMykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc1ByZWZpeFJlc2VydmVkKGNvbnN0IFN0cmluZyYg
bmFtZSkKKyAgICB7CisgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoImdsXyIpIHx8IG5hbWUu
c3RhcnRzV2l0aCgid2ViZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRoKCJfd2ViZ2xfIikpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIFN0cmlwcyBjb21tZW50cyBmcm9tIHNoYWRlciB0ZXh0LiBUaGlzIGFsbG93cyBub24tQVND
SUkgY2hhcmFjdGVycworICAgIC8vIHRvIGJlIHVzZWQgaW4gY29tbWVudHMgd2l0aG91dCBwb3Rl
bnRpYWxseSBicmVha2luZyBPcGVuR0wKKyAgICAvLyBpbXBsZW1lbnRhdGlvbnMgbm90IGV4cGVj
dGluZyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEdMU0wgRVMgc2V0LgorICAgIGNsYXNzIFN0cmlw
Q29tbWVudHMgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RyaXBDb21tZW50cyhjb25zdCBTdHJp
bmcmIHN0cikKKyAgICAgICAgICAgIDogbV9wYXJzZVN0YXRlKEJlZ2lubmluZ09mTGluZSkKKyAg
ICAgICAgICAgICwgbV9zb3VyY2VTdHJpbmcoc3RyKQorICAgICAgICAgICAgLCBtX2xlbmd0aChz
dHIubGVuZ3RoKCkpCisgICAgICAgICAgICAsIG1fcG9zaXRpb24oMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcGFyc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyByZXN1bHQoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgaGFzTW9yZUNoYXJhY3RlcnMoKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKG1fcG9zaXRpb24gPCBtX2xlbmd0
aCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHBhcnNlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgd2hpbGUgKGhhc01vcmVDaGFyYWN0ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICBwcm9j
ZXNzKGN1cnJlbnQoKSk7CisgICAgICAgICAgICAgICAgLy8gcHJvY2VzcygpIG1pZ2h0IGFkdmFu
Y2UgdGhlIHBvc2l0aW9uLgorICAgICAgICAgICAgICAgIGlmIChoYXNNb3JlQ2hhcmFjdGVycygp
KQorICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIHByb2Nlc3MoVUNoYXIpOworCisgICAgICAgIGJvb2wgcGVlayhV
Q2hhciYgY2hhcmFjdGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9wb3Np
dGlvbiArIDEgPj0gbV9sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgY2hhcmFjdGVyID0gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbiArIDFdOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBVQ2hhciBjdXJyZW50
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04obV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Nv
dXJjZVN0cmluZ1ttX3Bvc2l0aW9uXTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWR2YW5j
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrbV9wb3NpdGlvbjsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNoYXJhY3RlcikgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBjYW5vbmljYWxpemUgbmV3bGluZSByZWxh
dGVkIGNoYXJhY3RlcnMuCisgICAgICAgICAgICByZXR1cm4gKGNoYXJhY3RlciA9PSAnXG4nIHx8
IGNoYXJhY3RlciA9PSAnXHInKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZW1pdChVQ2hh
ciBjaGFyYWN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoY2hh
cmFjdGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGVudW0gUGFyc2VTdGF0ZSB7CisgICAgICAg
ICAgICAvLyBIYXZlIG5vdCBzZWVuIGFuIEFTQ0lJIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciB5
ZXQgb24KKyAgICAgICAgICAgIC8vIHRoaXMgbGluZS4gUG9zc2libGUgdGhhdCB3ZSBtaWdodCBz
ZWUgYSBwcmVwcm9jZXNzb3IKKyAgICAgICAgICAgIC8vIGRpcmVjdGl2ZS4KKyAgICAgICAgICAg
IEJlZ2lubmluZ09mTGluZSwKKworICAgICAgICAgICAgLy8gSGF2ZSBzZWVuIGF0IGxlYXN0IG9u
ZSBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIKKyAgICAgICAgICAgIC8vIG9uIHRoaXMg
bGluZS4KKyAgICAgICAgICAgIE1pZGRsZU9mTGluZSwKKworICAgICAgICAgICAgLy8gSGFuZGxp
bmcgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBQYXNzZXMgdGhyb3VnaCBhbGwKKyAgICAgICAg
ICAgIC8vIGNoYXJhY3RlcnMgdXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gRGlzYWJsZXMgY29t
bWVudAorICAgICAgICAgICAgLy8gcHJvY2Vzc2luZy4KKyAgICAgICAgICAgIEluUHJlcHJvY2Vz
c29yRGlyZWN0aXZlLAorCisgICAgICAgICAgICAvLyBIYW5kbGluZyBhIHNpbmdsZS1saW5lIGNv
bW1lbnQuIFRoZSBjb21tZW50IHRleHQgaXMKKyAgICAgICAgICAgIC8vIHJlcGxhY2VkIHdpdGgg
YSBzaW5nbGUgc3BhY2UuCisgICAgICAgICAgICBJblNpbmdsZUxpbmVDb21tZW50LAorCisgICAg
ICAgICAgICAvLyBIYW5kbGluZyBhIG11bHRpLWxpbmUgY29tbWVudC4gTmV3bGluZXMgYXJlIHBh
c3NlZAorICAgICAgICAgICAgLy8gdGhyb3VnaCB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCisg
ICAgICAgICAgICBJbk11bHRpTGluZUNvbW1lbnQKKyAgICAgICAgfTsKKworICAgICAgICBQYXJz
ZVN0YXRlIG1fcGFyc2VTdGF0ZTsKKyAgICAgICAgU3RyaW5nIG1fc291cmNlU3RyaW5nOworICAg
ICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICAgICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKKyAg
ICAgICAgU3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7CisgICAgfTsKKworICAgIHZvaWQgU3RyaXBD
b21tZW50czo6cHJvY2VzcyhVQ2hhciBjKQorICAgIHsKKyAgICAgICAgaWYgKGlzTmV3bGluZShj
KSkgeworICAgICAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgc3RhdGUgd2UgYXJlIGluLCBwYXNz
IHRocm91Z2ggbmV3bGluZXMKKyAgICAgICAgICAgIC8vIHNvIHdlIHByZXNlcnZlIGxpbmUgbnVt
YmVycy4KKyAgICAgICAgICAgIGVtaXQoYyk7CisKKyAgICAgICAgICAgIGlmIChtX3BhcnNlU3Rh
dGUgIT0gSW5NdWx0aUxpbmVDb21tZW50KQorICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9
IEJlZ2lubmluZ09mTGluZTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgVUNoYXIgdGVtcCA9IDA7CisgICAgICAgIHN3aXRjaCAobV9wYXJzZVN0YXRlKSB7Cisg
ICAgICAgIGNhc2UgQmVnaW5uaW5nT2ZMaW5lOgorICAgICAgICAgICAgaWYgKFdURjo6aXNBU0NJ
SVNwYWNlKGMpKSB7CisgICAgICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGMgPT0gJyMnKSB7CisgICAg
ICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU7CisgICAg
ICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiB0byBub3JtYWwgc3RhdGUgYW5kIHJlLWhh
bmRsZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7
CisgICAgICAgICAgICBwcm9jZXNzKGMpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBNaWRkbGVPZkxpbmU6CisgICAgICAgICAgICBpZiAoYyA9PSAnLycgJiYgcGVlayh0ZW1w
KSkgeworICAgICAgICAgICAgICAgIGlmICh0ZW1wID09ICcvJykgeworICAgICAgICAgICAgICAg
ICAgICBtX3BhcnNlU3RhdGUgPSBJblNpbmdsZUxpbmVDb21tZW50OworICAgICAgICAgICAgICAg
ICAgICBlbWl0KCcgJyk7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKHRlbXAgPT0gJyonKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IElu
TXVsdGlMaW5lQ29tbWVudDsKKyAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgY29tbWVu
dCBzdGFydCBpbiBjYXNlIHRoZSB1c2VyIGhhcworICAgICAgICAgICAgICAgICAgICAvLyBhbiB1
bmNsb3NlZCBjb21tZW50IGFuZCB3ZSB3YW50IHRvIGxhdGVyCisgICAgICAgICAgICAgICAgICAg
IC8vIHNpZ25hbCBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgZW1pdCgnLycpOworICAg
ICAgICAgICAgICAgICAgICBlbWl0KCcqJyk7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2Uo
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBlbWl0KGMpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBJblByZXByb2Nlc3NvckRpcmVjdGl2ZToKKyAgICAgICAgICAgIC8vIE5vIG1h
dHRlciB3aGF0IHRoZSBjaGFyYWN0ZXIgaXMsIGp1c3QgcGFzcyBpdAorICAgICAgICAgICAgLy8g
dGhyb3VnaC4gRG8gbm90IHBhcnNlIGNvbW1lbnRzIGluIHRoaXMgc3RhdGUuIFRoaXMKKyAgICAg
ICAgICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gbG9uZyB0ZXJtLCBi
dXQgaXQKKyAgICAgICAgICAgIC8vIHNob3VsZCBoYW5kbGUgdGhlICNlcnJvciBwcmVwcm9jZXNz
b3IgZGlyZWN0aXZlLgorICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgSW5TaW5nbGVMaW5lQ29tbWVudDoKKyAgICAgICAgICAgIC8vIFRoZSBu
ZXdsaW5lIGNvZGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUKKyAgICAg
ICAgICAgIC8vIG9mIHJlc2V0dGluZyBvdXIgc3RhdGUgd2hlbiB3ZSBnZXQgb3V0IG9mIHRoZQor
ICAgICAgICAgICAgLy8gc2luZ2xlLWxpbmUgY29tbWVudC4gU3dhbGxvdyBhbGwgb3RoZXIgY2hh
cmFjdGVycy4KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSW5NdWx0aUxpbmVD
b21tZW50OgorICAgICAgICAgICAgaWYgKGMgPT0gJyonICYmIHBlZWsodGVtcCkgJiYgdGVtcCA9
PSAnLycpIHsKKyAgICAgICAgICAgICAgICBlbWl0KCcqJyk7CisgICAgICAgICAgICAgICAgZW1p
dCgnLycpOworICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKKyAg
ICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuIFVu
Y2xlYXIgd2hldGhlciB3ZSBtYXkKKyAgICAgICAgICAgIC8vIHdhbnQgb3IgbmVlZCB0byBqdXN0
IGVtaXQgYSBzcGFjZSBwZXIgY2hhcmFjdGVyIHRvIHRyeQorICAgICAgICAgICAgLy8gdG8gcHJl
c2VydmUgY29sdW1uIG51bWJlcnMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK2Ns
YXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjayA6IHB1YmxpYyBHcmFwaGljc0Nv
bnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjayB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxi
YWNrKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY2IpIDogbV9jb250ZXh0KGNiKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgb25Db250ZXh0TG9zdCgpIG92ZXJyaWRlIHsgbV9jb250ZXh0LT5mb3JjZUxv
c3RDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6UmVhbExvc3RDb250ZXh0KTsgfQorICAg
IHZpcnR1YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjaygpIHt9Citwcml2YXRl
OgorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OworfTsKKworY2xhc3MgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0M0Q6OkVycm9yTWVzc2FnZUNhbGxiYWNrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1l
c3NhZ2VDYWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikg
eyB9CisgICAgdmlydHVhbCB2b2lkIG9uRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgR0MzRGludCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2NvbnRleHQtPm1fc3lu
dGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUpCisgICAgICAgICAgICBtX2NvbnRleHQtPnByaW50R0xF
cnJvclRvQ29uc29sZShtZXNzYWdlKTsKKyAgICB9CisgICAgdmlydHVhbCB+V2ViR0xSZW5kZXJp
bmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2soKSB7IH0KK3ByaXZhdGU6CisgICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7Cit9OworCitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKiBhdHRycykKK3sKKyAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMtPmRvY3VtZW50KCk7CisgICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIC8vIFRoZSBGcmFtZUxvYWRlckNsaWVudCBtaWdodCBibG9jayBjcmVhdGlv
biBvZiBhIG5ldyBXZWJHTCBjb250ZXh0IGRlc3BpdGUgdGhlIHBhZ2Ugc2V0dGluZ3M7IGluCisg
ICAgLy8gcGFydGljdWxhciwgaWYgV2ViR0wgY29udGV4dHMgd2VyZSBsb3N0IG9uZSBvciBtb3Jl
IHRpbWVzIHZpYSB0aGUgR0xfQVJCX3JvYnVzdG5lc3MgZXh0ZW5zaW9uLgorICAgIGlmICghZnJh
bWUtPmxvYWRlcigpLmNsaWVudCgpLmFsbG93V2ViR0woZnJhbWUtPnNldHRpbmdzKCkud2ViR0xF
bmFibGVkKCkpKSB7CisgICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQs
IGZhbHNlLCB0cnVlLCAiV2ViIHBhZ2Ugd2FzIG5vdCBhbGxvd2VkIHRvIGNyZWF0ZSBhIFdlYkdM
IGNvbnRleHQuIikpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBib29s
IGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSBmYWxzZTsKKyAgICBEb2N1bWVudCYgdG9wRG9j
dW1lbnQgPSBkb2N1bWVudC50b3BEb2N1bWVudCgpOworICAgIFBhZ2UqIHBhZ2UgPSB0b3BEb2N1
bWVudC5wYWdlKCk7CisgICAgaWYgKHBhZ2UgJiYgIXRvcERvY3VtZW50LnVybCgpLmlzTG9jYWxG
aWxlKCkpIHsKKyAgICAgICAgV2ViR0xMb2FkUG9saWN5IHBvbGljeSA9IHBhZ2UtPm1haW5GcmFt
ZSgpLmxvYWRlcigpLmNsaWVudCgpLndlYkdMUG9saWN5Rm9yVVJMKHRvcERvY3VtZW50LnVybCgp
KTsKKworICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMQmxvY2tDcmVhdGlvbikgeworICAgICAg
ICAgICAgTE9HKFdlYkdMLCAiVGhlIHBvbGljeSBmb3IgdGhpcyBVUkwgKCVzKSBpcyB0byBibG9j
ayBXZWJHTC4iLCB0b3BEb2N1bWVudC51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwb2xpY3kg
PT0gV2ViR0xQZW5kaW5nQ3JlYXRpb24pIHsKKyAgICAgICAgICAgIExPRyhXZWJHTCwgIldlYkdM
IHBvbGljeSBpcyBwZW5kaW5nLiBNYXkgbmVlZCB0byBiZSByZXNvbHZlZCBsYXRlci4iKTsKKyAg
ICAgICAgICAgIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGF0
dHJzID8gYXR0cnMtPmF0dHJpYnV0ZXMoKSA6IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
KCk7CisKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgaWYgKCFmcmFt
ZS0+c2V0dGluZ3MoKS5vcGVuR0xNdWx0aXNhbXBsaW5nRW5hYmxlZCgpKQorICAgICAgICAgICAg
YXR0cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICB9CisKKyAgICBhdHRyaWJ1dGVzLm5v
RXh0ZW5zaW9ucyA9IHRydWU7CisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNl
OworICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3JldGVHUFUgPSB0cnVlOworCisgICAgaWYgKGZy
YW1lLT5zZXR0aW5ncygpLmZvcmNlU29mdHdhcmVXZWJHTFJlbmRlcmluZygpKQorICAgICAgICBh
dHRyaWJ1dGVzLmZvcmNlU29mdHdhcmVSZW5kZXJlciA9IHRydWU7CisKKyAgICBpZiAocGFnZSkK
KyAgICAgICAgYXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvID0gcGFnZS0+ZGV2aWNlU2NhbGVG
YWN0b3IoKTsKKworICAgIGlmIChpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7CisgICAgICAg
IExPRyhXZWJHTCwgIkNyZWF0ZSBhIFdlYkdMIGNvbnRleHQgdGhhdCBsb29rcyByZWFsLCBidXQg
d2lsbCByZXF1aXJlIGEgcG9saWN5IHJlc29sdXRpb24gaWYgdXNlZC4iKTsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcg
V2ViR0xSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgYXR0cmlidXRlcykpOworICAgICAgICByZW5k
ZXJpbmdDb250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICAgICAgcmV0dXJuIHJlbmRlcmlu
Z0NvbnRleHQ7CisgICAgfQorCisgICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRvY3VtZW50
LnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdp
bmRvdykpOworCisgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkgeworICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxz
ZSwgdHJ1ZSwgIkNvdWxkIG5vdCBjcmVhdGUgYSBXZWJHTCBjb250ZXh0LiIpKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0g
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygi
R0xfRVhUX2RlYnVnX21hcmtlciIpKQorICAgICAgICBleHRlbnNpb25zLT5wdXNoR3JvdXBNYXJr
ZXJFWFQoIldlYkdMUmVuZGVyaW5nQ29udGV4dCIpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkdMUmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcgV2ViR0xSZW5kZXJpbmdD
b250ZXh0KGNhbnZhcywgY29udGV4dCwgYXR0cmlidXRlcykpOworICAgIHJlbmRlcmluZ0NvbnRl
eHQtPnN1c3BlbmRJZk5lZWRlZCgpOworCisgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7Cit9
CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52
YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXMpCisgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKKyAg
ICAsIEFjdGl2ZURPTU9iamVjdCgmcGFzc2VkQ2FudmFzLT5kb2N1bWVudCgpKQorICAgICwgbV9j
b250ZXh0KDApCisgICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKKyAgICAsIG1fZGlzcGF0Y2hDb250
ZXh0TG9zdEV2ZW50VGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc3BhdGNo
Q29udGV4dExvc3RFdmVudCkKKyAgICAsIG1fcmVzdG9yZUFsbG93ZWQoZmFsc2UpCisgICAgLCBt
X3Jlc3RvcmVUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3Jl
Q29udGV4dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSgwKQorICAgICwgbV9jb250ZXh0
TG9zdChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0
KQorICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3N5bnRoZXNpemVkRXJy
b3JzVG9Db25zb2xlKHRydWUpCisgICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCht
YXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2lzUGVuZGluZ1BvbGljeVJlc29s
dXRpb24odHJ1ZSkKKyAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxzZSkK
K3sKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRN
TENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCwKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVz
KQorICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBBY3Rp
dmVET01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY29udGV4dChj
b250ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29udGV4
dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENv
bnRleHRMb3N0RXZlbnQpCisgICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQorICAgICwgbV9y
ZXN0b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNv
bnRleHQpCisgICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoNCkKKyAgICAsIG1fY29udGV4dExv
c3QoZmFsc2UpCisgICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4dCkK
KyAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICwgbV9zeW50aGVzaXplZEVycm9y
c1RvQ29uc29sZSh0cnVlKQorICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQobWF4
R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlKQorICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uKGZhbHNlKQorICAgICwgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uKGZhbHNlKQor
eworICAgIEFTU0VSVChtX2NvbnRleHQpOworICAgIG1fY29udGV4dEdyb3VwID0gV2ViR0xDb250
ZXh0R3JvdXA6OmNyZWF0ZSgpOworICAgIG1fY29udGV4dEdyb3VwLT5hZGRDb250ZXh0KHRoaXMp
OworCisgICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdwb3J0RGltc1sxXSA9IDA7
CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQ
T1JUX0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworCisgICAgc2V0dXBGbGFncygpOwor
ICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCit7CisgICAgQVNTRVJUKCFtX2NvbnRleHRMb3N0
KTsKKyAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0g
ZmFsc2U7CisgICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IDA7CisgICAgbV9wYWNrQWxpZ25tZW50
ID0gNDsKKyAgICBtX3VucGFja0FsaWdubWVudCA9IDQ7CisgICAgbV91bnBhY2tGbGlwWSA9IGZh
bHNlOworICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlOworICAgIG1fdW5wYWNr
Q29sb3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxU
X1dFQkdMOworICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7CisgICAgbV9jdXJyZW50UHJvZ3Jh
bSA9IDA7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOworICAgIG1fcmVuZGVyYnVmZmVy
QmluZGluZyA9IDA7CisgICAgbV9kZXB0aE1hc2sgPSB0cnVlOworICAgIG1fc3RlbmNpbEVuYWJs
ZWQgPSBmYWxzZTsKKyAgICBtX3N0ZW5jaWxNYXNrID0gMHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5j
aWxNYXNrQmFjayA9IDB4RkZGRkZGRkY7CisgICAgbV9zdGVuY2lsRnVuY1JlZiA9IDA7CisgICAg
bV9zdGVuY2lsRnVuY1JlZkJhY2sgPSAwOworICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gMHhGRkZG
RkZGRjsKKyAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSAweEZGRkZGRkZGOworICAgIG1fbGF5
ZXJDbGVhcmVkID0gZmFsc2U7CisgICAgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQgPSBt
YXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7CisgICAgCisgICAgbV9jbGVhckNvbG9yWzBdID0g
bV9jbGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9yWzJdID0gbV9jbGVhckNvbG9yWzNdID0gMDsK
KyAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAgbV9jbGVhckRlcHRoID0gMTsKKyAg
ICBtX2NsZWFyU3RlbmNpbCA9IDA7CisgICAgbV9jb2xvck1hc2tbMF0gPSBtX2NvbG9yTWFza1sx
XSA9IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1hc2tbM10gPSB0cnVlOworCisgICAgR0MzRGlu
dCBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
UywgJm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1fdGV4dHVyZVVuaXRzLmNs
ZWFyKCk7CisgICAgbV90ZXh0dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMpOworCisgICAgR0MzRGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKKyAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZu
dW1WZXJ0ZXhBdHRyaWJzKTsKKyAgICBtX21heFZlcnRleEF0dHJpYnMgPSBudW1WZXJ0ZXhBdHRy
aWJzOworICAgIAorICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1
cmVTaXplKTsKKyAgICBtX21heFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxl
dmVsQ291bnQobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9tYXhD
dWJlTWFwVGV4dHVyZVNpemUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtX21heEN1YmVNYXBUZXh0
dXJlU2l6ZSk7CisgICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpj
b21wdXRlTGV2ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSwgbV9tYXhDdWJlTWFwVGV4
dHVyZVNpemUpOworICAgIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSA9IDA7CisgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFLCAm
bV9tYXhSZW5kZXJidWZmZXJTaXplKTsKKworICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJvbSBF
WFRfZHJhd19idWZmZXJzIGFyZSBsYXppbHkgcXVlcmllZC4KKyAgICBtX21heERyYXdCdWZmZXJz
ID0gMDsKKyAgICBtX21heENvbG9yQXR0YWNobWVudHMgPSAwOworCisgICAgbV9iYWNrRHJhd0J1
ZmZlciA9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOworICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJl
cXVpcmVtZW50c0NoZWNrZWQgPSBmYWxzZTsKKyAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0g
ZmFsc2U7CisKKyAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM6OmNyZWF0ZSh0aGlzLCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWYW9U
eXBlRGVmYXVsdCk7CisgICAgYWRkQ29udGV4dE9iamVjdChtX2RlZmF1bHRWZXJ0ZXhBcnJheU9i
amVjdC5nZXQoKSk7CisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVy
dGV4QXJyYXlPYmplY3Q7CisgICAgCisgICAgbV92ZXJ0ZXhBdHRyaWJWYWx1ZS5yZXNpemUobV9t
YXhWZXJ0ZXhBdHRyaWJzKTsKKworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAg
ICAgY3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7CisgICAgaWYgKCFpc0dMRVMyQ29t
cGxpYW50KCkpCisgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CisKKyAgICBJbnRTaXplIGNh
bnZhc1NpemUgPSBjbGFtcGVkQ2FudmFzU2l6ZSgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoY2FudmFzU2l6ZSk7CisKKyAgICBtX2Nv
bnRleHQtPnJlc2hhcGUoY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsK
KyAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFz
U2l6ZS5oZWlnaHQoKSk7CisgICAgbV9jb250ZXh0LT5zY2lzc29yKDAsIDAsIGNhbnZhc1NpemUu
d2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBtX2NvbnRleHQtPnNldENvbnRl
eHRMb3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0
Q2FsbGJhY2s+KHRoaXMpKTsKKyAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNr
KHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJh
Y2s+KHRoaXMpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldHVwRmxhZ3Mo
KQoreworICAgIEFTU0VSVChtX2NvbnRleHQpOworCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52
YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0Nv
bnNvbGUgPSBwYWdlLT5zZXR0aW5ncygpLndlYkdMRXJyb3JzVG9Db25zb2xlRW5hYmxlZCgpOwor
CisgICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5pc0dMRVMyQ29tcGxpYW50KCk7
CisgICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzID0gbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fc3RyaWN0X2F0dHJpYnMi
KTsKKyAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlz
RW5hYmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOworICAgIGlmIChtX2lzR0xFUzJD
b21wbGlhbnQpIHsKKyAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7CisgICAgICAg
IG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
aXNFbmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5pc0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28iKTsKKyAgICAgICAg
bV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5p
c0VuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOworICAgIH0KKyAgICBtX2lz
Um9idXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0Vu
YWJsZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjphbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3QKK3sKKyAgICBpZiAoUGFnZSog
cGFnZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIHBhZ2Ut
PnNldHRpbmdzKCkucHJpdmlsZWdlZFdlYkdMRXh0ZW5zaW9uc0VuYWJsZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCit7CisgICAgaWYgKCFtX2NvbXByZXNzZWRU
ZXh0dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpKQorICAgICAgICBtX2NvbXByZXNzZWRUZXh0
dXJlRm9ybWF0cy5hcHBlbmQoZm9ybWF0KTsKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp+
V2ViR0xSZW5kZXJpbmdDb250ZXh0KCkKK3sKKyAgICAvLyBSZW1vdmUgYWxsIHJlZmVyZW5jZXMg
dG8gV2ViR0xPYmplY3RzIHNvIGlmIHRoZXkgYXJlIHRoZSBsYXN0IHJlZmVyZW5jZQorICAgIC8v
IHRoZXkgd2lsbCBiZSBmcmVlZCBiZWZvcmUgdGhlIGxhc3QgY29udGV4dCBpcyByZW1vdmVkIGZy
b20gdGhlIGNvbnRleHQgZ3JvdXAuCisgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gbnVsbHB0cjsK
KyAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7CisgICAgbV9ib3VuZFZl
cnRleEFycmF5T2JqZWN0ID0gbnVsbHB0cjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBu
dWxscHRyOworICAgIG1fY3VycmVudFByb2dyYW0gPSBudWxscHRyOworICAgIG1fZnJhbWVidWZm
ZXJCaW5kaW5nID0gbnVsbHB0cjsKKyAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSBudWxscHRy
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nID0gbnVsbHB0
cjsKKyAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBtX2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKKyAgICBtX2Js
YWNrVGV4dHVyZUN1YmVNYXAgPSBudWxscHRyOworCisgICAgaWYgKCFtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb24pIHsKKyAgICAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOworICAg
ICAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICAgICAgbV9jb250ZXh0R3JvdXAt
PnJlbW92ZUNvbnRleHQodGhpcyk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQ
b2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgZHJhd2luZyBi
dWZmZXIgaG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3ll
ZAorICAgIC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KKyAgICBp
ZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKKwor
ICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0TG9zdENh
bGxiYWNrKG51bGxwdHIpOworICAgICAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxi
YWNrKG51bGxwdHIpOworICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICB9Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQoKQoreworICAgIGlm
IChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0
LT5tYXJrQ29udGV4dENoYW5nZWQoKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+bWFya0NvbnRlbnRzQ2hhbmdlZCgpOworCisgICAgbV9sYXll
ckNsZWFyZWQgPSBmYWxzZTsKKyAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygpLT5y
ZW5kZXJCb3goKTsKKyAgICBpZiAoaXNBY2NlbGVyYXRlZCgpICYmIHJlbmRlckJveCAmJiByZW5k
ZXJCb3gtPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgeworICAgICAgICBtX21hcmtlZENh
bnZhc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsK
KyAgICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkpIHsKKyAgICAgICAgICAg
IG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOworICAgICAgICAgICAgY2FudmFzKCktPmRpZERy
YXcoRmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGNsYW1wZWRDYW52YXNTaXplKCkpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFySWZD
b21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9jb250ZXh0LT5s
YXllckNvbXBvc2l0ZWQoKSB8fCBtX2xheWVyQ2xlYXJlZAorICAgICAgICB8fCBtX2F0dHJpYnV0
ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyIHx8IChtYXNrICYmIG1fZnJhbWVidWZmZXJCaW5kaW5n
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJp
YnV0ZXM+IGNvbnRleHRBdHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAg
IC8vIERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1
c2VyIGFza2VkIGZvciBhbmQgdGhpcyBjbGVhci4KKyAgICBib29sIGNvbWJpbmVkQ2xlYXIgPSBt
YXNrICYmICFtX3NjaXNzb3JFbmFibGVkOworCisgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgIGlmIChjb21iaW5lZENsZWFyICYmICht
YXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQorICAgICAgICBtX2Nv
bnRleHQtPmNsZWFyQ29sb3IobV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFyQ29s
b3JbMV0gOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMl0g
PyBtX2NsZWFyQ29sb3JbMl0gOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
b2xvck1hc2tbM10gPyBtX2NsZWFyQ29sb3JbM10gOiAwKTsKKyAgICBlbHNlCisgICAgICAgIG1f
Y29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICBtX2NvbnRleHQtPmNvbG9yTWFz
ayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKyAgICBHQzNEYml0ZmllbGQgY2xlYXJNYXNrID0g
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7CisgICAgaWYgKGNvbnRleHRBdHRy
aWJ1dGVzLT5kZXB0aCgpKSB7CisgICAgICAgIGlmICghY29tYmluZWRDbGVhciB8fCAhbV9kZXB0
aE1hc2sgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpKQor
ICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEuMGYpOworICAgICAgICBjbGVhck1h
c2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7CisgICAgICAgIG1fY29u
dGV4dC0+ZGVwdGhNYXNrKHRydWUpOworICAgIH0KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMt
PnN0ZW5jaWwoKSkgeworICAgICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKQorICAgICAgICAgICAgbV9jb250ZXh0
LT5jbGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwgJiBtX3N0ZW5jaWxNYXNrKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIGNs
ZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAgICAg
ICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05U
LCAweEZGRkZGRkZGKTsKKyAgICB9CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5jbGVhckZyYW1lYnVmZmVycyhjbGVhck1hc2spOworICAgIGVsc2Ug
eworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwor
ICAgICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7CisgICAgfQorCisgICAgcmVzdG9y
ZVN0YXRlQWZ0ZXJDbGVhcigpOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAg
ICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBtX2xh
eWVyQ2xlYXJlZCA9IHRydWU7CisKKyAgICByZXR1cm4gY29tYmluZWRDbGVhcjsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKQoreworICAg
IC8vIFJlc3RvcmUgdGhlIHN0YXRlIHRoYXQgdGhlIGNvbnRleHQgc2V0LgorICAgIGlmIChtX3Nj
aXNzb3JFbmFibGVkKQorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9URVNUKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jbGVhckNvbG9y
WzBdLCBtX2NsZWFyQ29sb3JbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xlYXJD
b2xvclsyXSwgbV9jbGVhckNvbG9yWzNdKTsKKyAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhtX2Nv
bG9yTWFza1swXSwgbV9jb2xvck1hc2tbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
b2xvck1hc2tbMl0sIG1fY29sb3JNYXNrWzNdKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgo
bV9jbGVhckRlcHRoKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNp
bCk7CisgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNE
OjpGUk9OVCwgbV9zdGVuY2lsTWFzayk7CisgICAgbV9jb250ZXh0LT5kZXB0aE1hc2sobV9kZXB0
aE1hc2spOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0xheWVyQ29tcG9z
aXRlZCgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChjYW52YXMoKS0+ZG9jdW1lbnQoKS5wcmludGluZygpKQorICAgICAgICBjYW52YXMoKS0+
Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CisKKyAgICAvLyBVbnRpbCB0aGUgY2FudmFzIGlzIHdy
aXR0ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAorICAgIC8vIGhhcHBl
bmVkIGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBjb21w
b3NpdG9yLgorICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpICYmICFtX2F0dHJp
YnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSk7CisKKyAgICAgICAg
Y2FudmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7CisgICAgfSBlbHNlCisgICAgICAgIGNh
bnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgp
OworCisgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5ICYmICFtX2xheWVyQ2xlYXJlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKKyAgICBt
X21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIG1fY29udGV4dC0+cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoY2FudmFzKCktPmJ1ZmZlcigpLCBtX2RyYXdpbmdCdWZm
ZXIuZ2V0KCkpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVm
ZmVyQmluZGluZy5nZXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPmJpbmQoKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK3sKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1h
Z2VEYXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShtX2Ry
YXdpbmdCdWZmZXIuZ2V0KCkpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyht
X2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGJlY2F1c2UgYXQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0IGxldmVsIHdlIGRvbid0CisgICAgLy8ga25vdyBpZiB0aGUgdW5kZXJs
eWluZyBGQk8gdXNlcyB0ZXh0dXJlcyBvciByZW5kZXJidWZmZXJzLgorICAgIEdDM0RpbnQgbWF4
U2l6ZSA9IHN0ZDo6bWluKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7
CisgICAgLy8gTGltaXQgZHJhd2luZyBidWZmZXIgc2l6ZSB0byA0ayB0byBhdm9pZCBtZW1vcnkg
ZXhoYXVzdGlvbi4KKyAgICBjb25zdCBpbnQgc2l6ZVVwcGVyTGltaXQgPSA0MDk2OworICAgIG1h
eFNpemUgPSBzdGQ6Om1pbihtYXhTaXplLCBzaXplVXBwZXJMaW1pdCk7CisgICAgR0MzRGludCBt
YXhXaWR0aCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzBdKTsKKyAgICBH
QzNEaW50IG1heEhlaWdodCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzFd
KTsKKyAgICB3aWR0aCA9IGNsYW1wKHdpZHRoLCAxLCBtYXhXaWR0aCk7CisgICAgaGVpZ2h0ID0g
Y2xhbXAoaGVpZ2h0LCAxLCBtYXhIZWlnaHQpOworCisgICAgaWYgKG1fbmVlZHNVcGRhdGUpIHsK
KyAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7Cisg
ICAgICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKCkpCisgICAgICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0NoYW5n
ZWQpOworICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gV2Ug
ZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHksIHNpbmNlIHRoZSBuZXdseSBj
cmVhdGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2ZmCisgICAgLy8gY2xlYXIgKGFu
ZCB0aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgorICAgIGlmIChtX2RyYXdpbmdC
dWZmZXIpIHsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdpZHRoLCBo
ZWlnaHQpKTsKKyAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOworICAgIH0gZWxzZQor
ICAgICAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CisKKyAgICBtX2NvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclpl
cm8obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5n
ZXQoKSkpOworICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBvYmplY3RPclplcm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgp
KSk7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8o
bV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKK3sKKyAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsKKwor
ICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgo
KTsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlckhlaWdodCgp
IGNvbnN0Cit7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1fZHJh
d2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOworCisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKK30KKwordW5zaWduZWQgaW50IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAgICAg
ICByZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1Ynl0ZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRHNo
b3J0KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAg
ICAgcmV0dXJuIHNpemVvZihHQzNEdXNob3J0KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpJTlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGludCk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1aW50
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgcmV0dXJuIHNp
emVvZihHQzNEZmxvYXQpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUo
R0MzRGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0
dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJhY3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQg
b2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2FjdGl2ZVRleHR1cmVV
bml0ID0gdGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMDsKKyAgICBtX2NvbnRl
eHQtPmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEFjdGl2ZVRleHR1cmVVbml0KHRleHR1cmUpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNoYWRlcikpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYXR0YWNo
U2hhZGVyIiwgInNoYWRlciBhdHRhY2htZW50IGFscmVhZHkgaGFzIHNoYWRlciIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOworICAgIHNoYWRlci0+b25BdHRhY2hl
ZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJpYkxvY2F0aW9u
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5kQXR0
cmliTG9jYXRpb24iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRh
dGVMb2NhdGlvbkxlbmd0aCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1l
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiYmluZEF0dHJpYkxvY2F0aW9uIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9y
WmVybyhwcm9ncmFtKSwgaW5kZXgsIG5hbWUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2hlY2tPYmplY3RUb0JlQm91bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJH
TE9iamVjdCogb2JqZWN0LCBib29sJiBkZWxldGVkKQoreworICAgIGRlbGV0ZWQgPSBmYWxzZTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKG9iamVjdCkgeworICAgICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4
dEdyb3VwKCksIHRoaXMpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBub3Qg
ZnJvbSB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBkZWxldGVkID0gIW9iamVjdC0+b2JqZWN0KCk7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcihHQzNE
ZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgYm9vbCBkZWxldGVkOworICAgIGlmICghY2hlY2tP
YmplY3RUb0JlQm91bmQoImJpbmRCdWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGRlbGV0ZWQpCisgICAgICAgIGJ1ZmZlciA9IDA7CisgICAgaWYgKGJ1
ZmZlciAmJiBidWZmZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFy
Z2V0KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImJpbmRCdWZmZXIiLCAiYnVmZmVycyBjYW4gbm90IGJlIHVzZWQgd2l0
aCBtdWx0aXBsZSB0YXJnZXRzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRh
cmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKQorICAgICAgICBtX2JvdW5k
QXJyYXlCdWZmZXIgPSBidWZmZXI7CisgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKKyAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0LT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJp
bmRCdWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsK
KyAgICBpZiAoYnVmZmVyKQorICAgICAgICBidWZmZXItPnNldFRhcmdldCh0YXJnZXQpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAoIWNoZWNrT2Jq
ZWN0VG9CZUJvdW5kKCJiaW5kRnJhbWVidWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKGRlbGV0ZWQpCisgICAgICAgIGJ1ZmZlciA9IDA7CisgICAgaWYg
KHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRGcmFt
ZWJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG1fZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKG9iamVjdE9y
WmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8vIEluc3RlYWQgb2YgYmlu
ZGluZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4KKyAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5iaW5kKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOworICAgIGlmIChidWZmZXIpCisgICAg
ICAgIGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOworICAgIGFwcGx5U3RlbmNpbFRlc3Qo
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIoR0Mz
RGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAg
ICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kUmVuZGVyYnVmZmVyIiwgcmVuZGVyQnVm
ZmVyLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVkKQorICAgICAg
ICByZW5kZXJCdWZmZXIgPSAwOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IHJl
bmRlckJ1ZmZlcjsKKyAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBvYmpl
Y3RPclplcm8ocmVuZGVyQnVmZmVyKSk7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICAgICAg
cmVuZGVyQnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSog
dGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFRleHR1
cmUiLCB0ZXh0dXJlLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVk
KQorICAgICAgICB0ZXh0dXJlID0gMDsKKyAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRU
YXJnZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmlu
ZFRleHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0
cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RpbnQgbWF4TGV2ZWwgPSAwOwor
ICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKKyAgICAg
ICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZyA9
IHRleHR1cmU7CisgICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0dXJlTGV2ZWw7CisKKyAgICAg
ICAgaWYgKG1fZHJhd2luZ0J1ZmZlciAmJiAhbV9hY3RpdmVUZXh0dXJlVW5pdCkKKyAgICAgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZyhvYmplY3RPclplcm8odGV4
dHVyZSkpOworCisgICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVApIHsKKyAgICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJl
VW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gdGV4dHVyZTsKKyAgICAgICAgbWF4TGV2ZWwg
PSBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRUZXh0dXJl
IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZSh0YXJnZXQsIG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7CisgICAgaWYg
KHRleHR1cmUpCisgICAgICAgIHRleHR1cmUtPnNldFRhcmdldCh0YXJnZXQsIG1heExldmVsKTsK
KworICAgIC8vIE5vdGU6IHByZXZpb3VzbHkgd2UgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNldCB0
aGUgVEVYVFVSRV9XUkFQX1IKKyAgICAvLyByZXBlYXQgbW9kZSB0byBDTEFNUF9UT19FREdFIGZv
ciBjdWJlIG1hcCB0ZXh0dXJlcywgYmVjYXVzZSBPcGVuR0wKKyAgICAvLyBFUyAyLjAgZG9lc24n
dCBleHBvc2UgdGhpcyBmbGFnIChhIGJ1ZyBpbiB0aGUgc3BlY2lmaWNhdGlvbikgYW5kCisgICAg
Ly8gb3RoZXJ3aXNlIHRoZSBhcHBsaWNhdGlvbiBoYXMgbm8gY29udHJvbCBvdmVyIHRoZSBzZWFt
cyBpbiB0aGlzCisgICAgLy8gZGltZW5zaW9uLiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQgc3Vw
cG9ydGluZyB0aGlzIHByb3Blcmx5IG9uIGFsbAorICAgIC8vIHBsYXRmb3JtcyBpcyBmYWlybHkg
aW52b2x2ZWQgKHdpbGwgcmVxdWlyZSBhIEhhc2hNYXAgZnJvbSB0ZXh0dXJlIElECisgICAgLy8g
aW4gYWxsIHBvcnRzKSwgYW5kIHdlIGhhdmUgbm90IGhhZCBhbnkgY29tcGxhaW50cywgc28gdGhl
IGxvZ2ljIGhhcworICAgIC8vIGJlZW4gcmVtb3ZlZC4KK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNE
ZmxvYXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmJsZW5kQ29sb3IocmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGUp
KQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1vZGUpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdD
M0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24i
LCBtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9k
ZUFscGhhKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvblNl
cGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFj
dG9ycygiYmxlbmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0Mz
RGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCit7Cisg
ICAgLy8gTm90ZTogQWxwaGEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMg
UkdCLgorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRG
dW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc3JjUkdCLCBkc3RSR0IpKQorICAgICAgICByZXR1cm47
CisgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxw
aGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRh
dGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZm
ZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1
c2FnZSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoc2l6ZSA8
IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKCFzaXplKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzaXplID09IDAiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91
bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0
YShzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpKSkgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRh
IiwgImludmFsaWQgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwor
ICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0
cj4oc2l6ZSksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0
aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBmYWls
ZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0
IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOworICAgIH0K
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0
ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZm
ZXJEYXRhIiwgIm5vIGRhdGEiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlz
RXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1
ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwg
ImludmFsaWQgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAg
IG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+
ZGF0YSgpLCB1c2FnZSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVk
LiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBk
b2VzLgorICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKKyAgICB9Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlk
YXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKKyAg
ICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghZGF0YSkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1
ZmZlckRhdGEiLCAibm8gZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICgh
aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICgh
YnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEi
LCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Cisg
ICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRh
LT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rp
b24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRo
aW5rcyBpdCBkb2VzLgorICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsK
KyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZm
ZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0
LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIGlmICghYnVmZmVyKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwg
Im9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWRhdGEpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNj
ZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShz
dGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJT
dWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJy
b3JMaXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgc3RhdGljX2Nh
c3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5kYXRhKCkp
OworICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7
CisgICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUg
YnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAg
ICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcg
bG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVm
ZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpTVEFUSUNfRFJBVyk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAg
ICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0Rp
bnRwdHI+KG9mZnNldCksIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0
IG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
CisgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBt
X2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOworICAgIGlm
IChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAg
IC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0
IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVmZmVy
LT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCitHQzNEZW51bSBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgaWYgKHRhcmdldCAh
PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJT
dGF0dXMiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01Q
TEVURTsKKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7
CisgICAgR0MzRGVudW0gcmVzdWx0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmNoZWNrU3RhdHVz
KCZyZWFzb24pOworICAgIGlmIChyZXN1bHQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0NPTVBMRVRFKSB7CisgICAgICAgIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKCJjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgcmVzdWx0ID0gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobWFzayAmIH4oR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXIiLCAi
aW52YWxpZCBtYXNrIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgY2hhciog
cmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4
dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04s
ICJjbGVhciIsIHJlYXNvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFjbGVh
cklmQ29tcG9zaXRlZChtYXNrKSkKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKKyAg
ICBtYXJrQ29udGV4dENoYW5nZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNEZmxvYXQgYiwgR0MzRGZs
b2F0IGEpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmIChzdGQ6OmlzbmFuKHIpKQorICAgICAgICByID0gMDsKKyAgICBpZiAoc3Rk
Ojppc25hbihnKSkKKyAgICAgICAgZyA9IDA7CisgICAgaWYgKHN0ZDo6aXNuYW4oYikpCisgICAg
ICAgIGIgPSAwOworICAgIGlmIChzdGQ6OmlzbmFuKGEpKQorICAgICAgICBhID0gMTsKKyAgICBt
X2NsZWFyQ29sb3JbMF0gPSByOworICAgIG1fY2xlYXJDb2xvclsxXSA9IGc7CisgICAgbV9jbGVh
ckNvbG9yWzJdID0gYjsKKyAgICBtX2NsZWFyQ29sb3JbM10gPSBhOworICAgIG1fY29udGV4dC0+
Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNsZWFyRGVwdGgoR0MzRGZsb2F0IGRlcHRoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NsZWFyRGVwdGggPSBkZXB0aDsKKyAg
ICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jbGVhclN0ZW5jaWwgPSBzOwor
ICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdD
M0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbG9yTWFza1swXSA9IHJl
ZDsKKyAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOworICAgIG1fY29sb3JNYXNrWzJdID0gYmx1
ZTsKKyAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNr
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVyIiwgc2hhZGVyKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihvYmplY3RPclplcm8o
c2hhZGVyKSk7CisgICAgR0MzRGludCB2YWx1ZTsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2
KG9iamVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMs
ICZ2YWx1ZSk7CisgICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyogZGF0YSkKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2
YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVs
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJpbnZhbGlk
IGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJvcmRl
cikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBub3QgMCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9u
cygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBp
bnRlcm5hbGZvcm1hdCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJl
c3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGlu
dGVybmFsZm9ybWF0LCBkYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViR0xUZXh0dXJl
KiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRh
cmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlz
R0xFUzJOUE9UU3RyaWN0KCkpIHsKKyAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6
aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwg
ImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0
KCk7CisgICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgYm9yZGVyLCBkYXRhLT5ieXRl
TGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOworICAgIGlmIChtX2NvbnRleHQtPm1vdmVF
cnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAgIC8vIFRoZSBjb21wcmVzc2Vk
VGV4SW1hZ2UyRCBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIFdlYkdMVGV4dHVyZSBpdCBkb2Vz
bid0IGhhdmUgdGhlIGRhdGEgZm9yIHRoaXMgbGV2ZWwuCisgICAgICAgIHRleC0+bWFya0ludmFs
aWQodGFyZ2V0LCBsZXZlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0ZXgtPnNl
dExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOworICAgIHRleC0+c2V0Q29tcHJlc3Nl
ZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVs
KCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoZm9ybWF0KSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmlu
ZGluZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICgh
dGV4KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZm9ybWF0ICE9IHRleC0+Z2V0SW50ZXJu
YWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29tcHJlc3NlZFRleFN1YkltYWdl
MkQiLCAiZm9ybWF0IGRvZXMgbm90IG1hdGNoIHRleHR1cmUgZm9ybWF0Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lv
bnMoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0ZXgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBncmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YS0+Ynl0ZUxlbmd0aCgp
LCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKKyAgICB0ZXgtPnNldENvbXByZXNzZWQoKTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgaWYgKEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUZvcm1hdChmb3JtYXQpICYgKEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVG
RkVSX0JJVCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgY2FuIG5vdCBiZSBzZXQs
IG9ubHkgcmVuZGVyZWQgdG8iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoImNv
cHlUZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRh
dGVTZXR0YWJsZVRleEZvcm1hdCgiY29weVRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29t
YmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9y
bWF0KCkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29t
cGF0aWJsZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhl
aWdodCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJh
bWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFt
X2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVz
b3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhJbWFn
ZTJEIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjbGVhcklmQ29tcG9z
aXRlZCgpOworICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7CisgICAgICAgIFNjb3BlZERyYXdp
bmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1f
ZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAg
ICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKKyAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRX
aWR0aCwgY2xpcHBlZEhlaWdodDsKKyAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdo
dCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQp
KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAg
ICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CisgICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBj
bGlwcGVkWCAtIHgsIGNsaXBwZWRZIC0geSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVk
SGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2Nv
bnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworICAgIH0KKyAgICAvLyBGSVhNRTogaWYgdGhlIGZy
YW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4
ZWN1dGVkLgorICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdl
dCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxp
ZGF0ZVRleHR1cmVCaW5kaW5nKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Cisg
ICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgiY29w
eVRleFN1YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSB8fCAhdmFsaWRhdGVTaXplKCJjb3B5
VGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgLy8g
QmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cg
aGFwcGVucyBmaXJzdC4KKyAgICBpZiAoeG9mZnNldCArIHdpZHRoIDwgMCB8fCB5b2Zmc2V0ICsg
aGVpZ2h0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleC0+
Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdodCA+IHRleC0+Z2V0SGVp
Z2h0KHRhcmdldCwgbGV2ZWwpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAicmVjdGFuZ2xl
IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAg
ICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoImNvcHlUZXhTdWJJbWFnZTJEIiwgaW50
ZXJuYWxmb3JtYXQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc1RleEludGVybmFsRm9y
bWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZy
YW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCAi
ZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsK
KyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
bkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCByZWFzb24pOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgaWYgKGlz
UmVzb3VyY2VTYWZlKCkpIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5k
ZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Cisg
ICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
R0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7CisgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lk
dGgsIGNsaXBwZWRIZWlnaHQ7CisgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdo
dCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQo
KSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkg
eworICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0
YXJnZXQsIGxldmVsKTsKKyAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUgPSB0ZXgtPmdldFR5cGUo
dGFyZ2V0LCBsZXZlbCk7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQgY2hh
cltdPiB6ZXJvOworICAgICAgICAgICAgaWYgKHdpZHRoICYmIGhlaWdodCkgeworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzaXplOworICAgICAgICAgICAgICAgIEdDM0RlbnVtIGVycm9y
ID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRo
LCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgMCk7CisgICAgICAgICAgICAgICAg
aWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgeworICAgICAgICAgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJh
ZCBkaW1lbnNpb25zIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgemVybyA9IHN0ZDo6bWFrZV91bmlxdWU8dW5zaWduZWQg
Y2hhcltdPihzaXplKTsKKyAgICAgICAgICAgICAgICBpZiAoIXplcm8pIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWVtc2V0
KHplcm8uZ2V0KCksIDAsIHNpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9jb250
ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgemVyby5nZXQoKSk7CisgICAgICAgICAgICBpZiAoY2xp
cHBlZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgeworICAgICAgICAgICAgICAgIFNj
b3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9m
cmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Y29w
eVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCArIGNsaXBwZWRYIC0geCwgeW9m
ZnNldCArIGNsaXBwZWRZIC0geSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFNjb3BlZERy
YXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1
ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTEJ1
ZmZlcj4gbyA9IFdlYkdMQnVmZmVyOjpjcmVhdGUodGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0
KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZm
ZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBvID0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKHRo
aXMpOworICAgIGFkZENvbnRleHRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisK
K1Bhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVRl
eHR1cmUoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG8gPSBXZWJHTFRleHR1cmU6
OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJu
IG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZVByb2dyYW0oKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG8gPSBXZWJH
TFByb2dyYW06OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Cisg
ICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8V2Vi
R0xSZW5kZXJidWZmZXI+IG8gPSBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOworICAg
IGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKworUGFzc1JlZlB0
cjxXZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0MzRGVu
dW0gdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiAmJiB0eXBl
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNyZWF0ZVNoYWRl
ciIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hhZGVyOjpjcmVhdGUodGhp
cywgdHlwZSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9jb250ZXh0LT5jdWxsRmFjZShtb2RlKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZGVsZXRlIiwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG9iamVjdC0+b2JqZWN0KCkpCisg
ICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiBjb250ZXh0IGhlcmUgYmVjYXVzZSB3ZSB3YW50
CisgICAgICAgIC8vIHRoaW5ncyBpbiB0aGlzIGNvbnRleHQgdW5ib3VuZC4KKyAgICAgICAgb2Jq
ZWN0LT5kZWxldGVPYmplY3QoZ3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIoV2ViR0xCdWZm
ZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdChidWZmZXIpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCisgICAgICAgIG1f
Ym91bmRBcnJheUJ1ZmZlciA9IDA7CisKKyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnVu
YmluZEJ1ZmZlcihidWZmZXIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVs
ZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAgaWYg
KCFkZWxldGVPYmplY3QoZnJhbWVidWZmZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGZy
YW1lYnVmZmVyID09IG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7CisgICAgICAgIG1fZnJhbWVidWZm
ZXJCaW5kaW5nID0gMDsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcoMCk7CisgICAgICAgICAg
ICAvLyBIYXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGlu
dGVybmFsIGZiby4KKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAg
ZGVsZXRlT2JqZWN0KHByb2dyYW0pOworICAgIC8vIFdlIGRvbid0IHJlc2V0IG1fY3VycmVudFBy
b2dyYW0gdG8gMCBoZXJlIGJlY2F1c2UgdGhlIGRlbGV0aW9uIG9mIHRoZQorICAgIC8vIGN1cnJl
bnQgcHJvZ3JhbSBpcyBkZWxheWVkLgorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7Cisg
ICAgaWYgKCFkZWxldGVPYmplY3QocmVuZGVyYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChyZW5kZXJidWZmZXIgPT0gbV9yZW5kZXJidWZmZXJCaW5kaW5nKQorICAgICAgICBtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmcgPSAwOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAg
ICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFt
ZWJ1ZmZlcihyZW5kZXJidWZmZXIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgZGVsZXRlT2JqZWN0KHNo
YWRlcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXJlKFdl
YkdMVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdCh0ZXh0dXJlKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5p
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5pdHNb
aV0udGV4dHVyZTJEQmluZGluZykKKyAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1
cmUyREJpbmRpbmcgPSBudWxscHRyOworICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1cmVV
bml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpCisgICAgICAgICAgICBtX3RleHR1cmVVbml0
c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVB
dHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIodGV4dHVyZSk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5k
ZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aE1h
c2soR0MzRGJvb2xlYW4gZmxhZykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgbV9kZXB0aE1hc2sgPSBmbGFnOworICAgIG1fY29udGV4
dC0+ZGVwdGhNYXNrKGZsYWcpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVw
dGhSYW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoek5lYXIgPiB6
RmFyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFyIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0q
IHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHNoYWRlcikpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXByb2dyYW0tPmRldGFjaFNoYWRlcihzaGFkZXIpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRldGFjaFNo
YWRlciIsICJzaGFkZXIgbm90IGF0dGFjaGVkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmplY3RP
clplcm8oc2hhZGVyKSk7CisgICAgc2hhZGVyLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dDNE
KCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZShHQzNEZW51bSBj
YXApCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBh
YmlsaXR5KCJkaXNhYmxlIiwgY2FwKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChjYXAgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgeworICAgICAgICBtX3N0ZW5jaWxFbmFi
bGVkID0gZmFsc2U7CisgICAgICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
IHsKKyAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOworICAgICAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxl
ZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0
ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRl
KGluZGV4KTsKKyAgICBzdGF0ZS5lbmFibGVkID0gZmFsc2U7CisKKyAgICBpZiAoaW5kZXggPiAw
IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoaW5kZXgpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0Mz
RGludHB0ciBvZmZzZXQpCit7CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlC
dWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigp
OworICAgIAorICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAob2Zmc2V0IDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgeworICAgICAgICAv
LyBGb3IgYW4gdW5zaWduZWQgaW50IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUgYnkg
NCBmb3IgYWxpZ25tZW50IHJlYXNvbnMuCisgICAgICAgIGlmIChvZmZzZXQgJSA0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50
IG9mZnNldC4KKyAgICAgICAgb2Zmc2V0IC89IDQ7CisKKyAgICAgICAgR0MzRHNpemVpcHRyIG4g
PSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDQ7CisgICAgICAgIGlmIChvZmZz
ZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
KSB7CisgICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBzaG9ydCBhcnJheSwgb2Zmc2V0IG11c3Qg
YmUgZGl2aXNpYmxlIGJ5IDIgZm9yIGFsaWdubWVudCByZWFzb25zLgorICAgICAgICBpZiAob2Zm
c2V0ICUgMikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBNYWtlIHVv
ZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCisgICAgICAgIG9mZnNldCAvPSAyOworCisgICAgICAg
IEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyAyOwor
ICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5
QnVmZmVyLT5ieXRlTGVuZ3RoKCk7CisgICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4g
biAtIG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJy
YXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWly
ZWQpCit7CisgICAgLy8gUGVyZm9ybXMgY29uc2VydmF0aXZlIHZhbGlkYXRpb24gYnkgY2FjaGlu
ZyBhIG1heGltdW0gaW5kZXggb2YKKyAgICAvLyB0aGUgZ2l2ZW4gdHlwZSBwZXIgZWxlbWVudCBh
cnJheSBidWZmZXIuIElmIGFsbCBvZiB0aGUgYm91bmQKKyAgICAvLyBhcnJheSBidWZmZXJzIGhh
dmUgZW5vdWdoIGVsZW1lbnRzIHRvIHNhdGlzZnkgdGhhdCBtYXhpbXVtCisgICAgLy8gaW5kZXgs
IHNraXBzIHRoZSBleHBlbnNpdmUgcGVyLWRyYXctY2FsbCBpdGVyYXRpb24gaW4KKyAgICAvLyB2
YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlLgorICAgIAorICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4g
ZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50
QXJyYXlCdWZmZXIoKTsKKworICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBHQzNEc2l6ZWlwdHIgbnVtRWxlbWVudHMgPSBlbGVtZW50QXJy
YXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICAvLyBUaGUgY2FzZSBjb3VudD09MCBpcyBhbHJl
YWR5IGRlYWx0IHdpdGggaW4gZHJhd0VsZW1lbnRzIGJlZm9yZSB2YWxpZGF0ZUluZGV4QXJyYXlD
b25zZXJ2YXRpdmUuCisgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGNvbnN0IEFycmF5QnVmZmVyKiBidWZmZXIgPSBlbGVtZW50QXJyYXlCdWZmZXItPmVs
ZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEFTU0VSVChidWZmZXIpOworCisgICAgaW50IG1heElu
ZGV4ID0gZWxlbWVudEFycmF5QnVmZmVyLT5nZXRDYWNoZWRNYXhJbmRleCh0eXBlKTsKKyAgICBp
ZiAobWF4SW5kZXggPCAwKSB7CisgICAgICAgIC8vIENvbXB1dGUgdGhlIG1heGltdW0gaW5kZXgg
aW4gdGhlIGVudGlyZSBidWZmZXIgZm9yIHRoZSBnaXZlbiB0eXBlIG9mIGluZGV4LgorICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURTogeworICAgICAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0MzRHVieXRlKj4oYnVmZmVyLT5kYXRhKCkpOworICAgICAgICAgICAgZm9yIChHQzNE
c2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQorICAgICAgICAgICAgICAgIG1h
eEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfU0hPUlQ6IHsKKyAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNpemVvZihH
QzNEdXNob3J0KTsKKyAgICAgICAgICAgIGNvbnN0IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2Fz
dDxjb25zdCBHQzNEdXNob3J0Kj4oYnVmZmVyLT5kYXRhKCkpOworICAgICAgICAgICAgZm9yIChH
QzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQorICAgICAgICAgICAgICAg
IG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UOiB7CisgICAgICAgICAgICBpZiAoIW1fb2VzRWxlbWVudEluZGV4
VWludCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBudW1FbGVt
ZW50cyAvPSBzaXplb2YoR0MzRHVpbnQpOworICAgICAgICAgICAgY29uc3QgR0MzRHVpbnQqIHAg
PSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWludCo+KGJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAg
ICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKKyAgICAg
ICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+
KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxlbWVudEFy
cmF5QnVmZmVyLT5zZXRDYWNoZWRNYXhJbmRleCh0eXBlLCBtYXhJbmRleCk7CisgICAgfQorCisg
ICAgaWYgKG1heEluZGV4ID49IDApIHsKKyAgICAgICAgLy8gVGhlIG51bWJlciBvZiByZXF1aXJl
ZCBlbGVtZW50cyBpcyBvbmUgbW9yZSB0aGFuIHRoZSBtYXhpbXVtCisgICAgICAgIC8vIGluZGV4
IHRoYXQgd2lsbCBiZSBhY2Nlc3NlZC4KKyAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IG1h
eEluZGV4ICsgMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5
UHJlY2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0
LCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKK3sKKyAgICBBU1NFUlQoY291bnQgPj0g
MCAmJiBvZmZzZXQgPj0gMCk7CisgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gMDsKKyAgICAKKyAg
ICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CisKKyAgICBpZiAoIWVsZW1lbnRB
cnJheUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFjb3VudCkgewor
ICAgICAgICBudW1FbGVtZW50c1JlcXVpcmVkID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBsb25nIHVvZmZzZXQgPSBv
ZmZzZXQ7CisgICAgdW5zaWduZWQgbG9uZyBuID0gY291bnQ7CisKKyAgICBpZiAodHlwZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNl
dCBhbiBlbGVtZW50IG9mZnNldC4KKyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVpbnQp
OworICAgICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50
Kj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVv
ZmZzZXQ7CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBs
YXN0SW5kZXgpCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICAr
K3A7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9m
ZnNldC4KKyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAgICAgIGNv
bnN0IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdXNob3J0Kj4oZWxlbWVu
dEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7Cisg
ICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBsYXN0SW5kZXgp
CisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICArK3A7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUpIHsKKyAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
R0MzRHVieXRlKj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0
YSgpKSArIHVvZmZzZXQ7CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBp
ZiAoKnAgPiBsYXN0SW5kZXgpCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAg
ICAgICAgICArK3A7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGVuIHNldCB0aGUgbGFz
dCBpbmRleCBpbiB0aGUgaW5kZXggYXJyYXkgYW5kIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC4KKyAg
ICBudW1FbGVtZW50c1JlcXVpcmVkID0gbGFzdEluZGV4ICsgMTsKKyAgICByZXR1cm4gbnVtRWxl
bWVudHNSZXF1aXJlZCA+IDA7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1bnNpZ25lZCBwcmlt
aXRpdmVDb3VudCkKK3sKKyAgICBpZiAoIW1fY3VycmVudFByb2dyYW0pCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIExvb2sgaW4gZWFjaCBlbmFibGVkIHZlcnRleCBhdHRyaWIgYW5k
IGNoZWNrIGlmIHRoZXkndmUgYmVlbiBib3VuZCB0byBhIGJ1ZmZlci4KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9tYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKKyAgICAgICAgaWYgKCFt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGkpLnZhbGlkYXRl
QmluZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChl
bGVtZW50Q291bnQgPD0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKworICAgIC8vIExvb2sg
aW4gZWFjaCBjb25zdW1lZCB2ZXJ0ZXggYXR0cmliIChieSB0aGUgY3VycmVudCBwcm9ncmFtKS4K
KyAgICBib29sIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IGZhbHNlOworICAgIGJvb2wgc2F3RW5h
YmxlZEF0dHJpYiA9IGZhbHNlOworICAgIGludCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMgPSBt
X2N1cnJlbnRQcm9ncmFtLT5udW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9uczsgKytpKSB7CisgICAgICAgIGlu
dCBsb2MgPSBtX2N1cnJlbnRQcm9ncmFtLT5nZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpKTsKKyAg
ICAgICAgaWYgKGxvYyA+PSAwICYmIGxvYyA8IHN0YXRpY19jYXN0PGludD4obV9tYXhWZXJ0ZXhB
dHRyaWJzKSkgeworICAgICAgICAgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZShsb2MpOworICAgICAgICAgICAgaWYgKHN0YXRlLmVuYWJsZWQpIHsK
KyAgICAgICAgICAgICAgICBzYXdFbmFibGVkQXR0cmliID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAvLyBBdm9pZCBvZmYtYnktb25lIGVycm9ycyBpbiBudW1FbGVtZW50cyBjb21wdXRhdGlvbi4K
KyAgICAgICAgICAgICAgICAvLyBGb3IgdGhlIGxhc3QgZWxlbWVudCwgd2Ugd2lsbCBvbmx5IHRv
dWNoIHRoZSBkYXRhIGZvciB0aGUKKyAgICAgICAgICAgICAgICAvLyBlbGVtZW50IGFuZCBub3Ro
aW5nIGJleW9uZCBpdC4KKyAgICAgICAgICAgICAgICBpbnQgYnl0ZXNSZW1haW5pbmcgPSBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXRlLmJ1ZmZlckJpbmRpbmctPmJ5dGVMZW5ndGgoKSAtIHN0YXRlLm9m
ZnNldCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOworICAgICAg
ICAgICAgICAgIEFTU0VSVChzdGF0ZS5zdHJpZGUgPiAwKTsKKyAgICAgICAgICAgICAgICBpZiAo
Ynl0ZXNSZW1haW5pbmcgPj0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KQorICAgICAgICAgICAgICAg
ICAgICBudW1FbGVtZW50cyA9IDEgKyAoYnl0ZXNSZW1haW5pbmcgLSBzdGF0ZS5ieXRlc1BlckVs
ZW1lbnQpIC8gc3RhdGUuc3RyaWRlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluc3RhbmNl
c1JlcXVpcmVkID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZGl2aXNvcikgeworICAg
ICAgICAgICAgICAgICAgICBpbnN0YW5jZXNSZXF1aXJlZCA9IGNlaWwoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHByaW1pdGl2ZUNvdW50KSAvIHN0YXRlLmRpdmlzb3IpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5zdGFuY2VzUmVxdWlyZWQgPiBudW1FbGVtZW50cykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBpZiAoZWxlbWVudENvdW50ID4gbnVtRWxlbWVudHMpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFzYXdOb25JbnN0YW5jZWRBdHRyaWIgJiYgc2F3RW5h
YmxlZEF0dHJpYikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAoIW9i
amVjdCB8fCAhb2JqZWN0LT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gb2JqZWN0
IG9yIG9iamVjdCBkZWxldGVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQs
IEdDM0RzaXplaSBwcmltaXRpdmVDb3VudCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rp
b25OYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZpcnN0IDwgMCB8fCBj
b3VudCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFjb3VudCkgeworICAgICAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmIChwcmltaXRpdmVDb3VudCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8
IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghaXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBo
YXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVj
b3JkT3ZlcmZsb3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7CisgICAgICAgIENoZWNrZWQ8R0MzRGlu
dCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgICAgIENoZWNrZWQ8
R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVj
a2VkQ291bnQ7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNr
ZWRQcmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7CisgICAgICAgIGlmIChjaGVja2VkU3Vt
Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgp
IHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwgY2hl
Y2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF2
YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
YXR0cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZm
ZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1l
YnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VT
YWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFz
b24pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUs
IEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKworICAgIGlmICghdmFsaWRhdGVEcmF3QXJyYXlzKCJkcmF3
QXJyYXlzIiwgbW9kZSwgZmlyc3QsIGNvdW50LCAwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9
IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICB2ZXJ0ZXhBdHRy
aWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsK
KyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBs
ZXRlbmVzcygiZHJhd0FycmF5cyIsIHRydWUpOworCisgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlz
KG1vZGUsIGZpcnN0LCBjb3VudCk7CisKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhB
dHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAg
ICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOworICAgIG1h
cmtDb250ZXh0Q2hhbmdlZCgpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2Rl
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2ln
bmVkJiBudW1FbGVtZW50cywgR0MzRHNpemVpIHByaW1pdGl2ZUNvdW50KQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1l
LCBtb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCF2YWxpZGF0ZVN0ZW5j
aWxTZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgICAg
IGlmIChtX29lc0VsZW1lbnRJbmRleFVpbnQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmIChjb3VudCA8IDAgfHwgb2Zmc2V0IDwgMCkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAiY291bnQgb3Igb2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKCFjb3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChwcmltaXRpdmVDb3Vu
dCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5n
ZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIEVMRU1F
TlRfQVJSQVlfQlVGRkVSIGJvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAg
ICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQorICAgICAgICBp
ZiAoIXZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0Mz
RGludHB0cj4ob2Zmc2V0KSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAicmVxdWVzdCBv
dXQgb2YgYm91bmRzIGZvciBjdXJyZW50IEVMRU1FTlRfQVJSQVlfQlVGRkVSIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjb3VudCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92
ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOworICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJl
Y29yZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZlQ291bnQpOworICAg
ICAgICBpZiAoY2hlY2tlZENvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZl
Q291bnQuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVt
cHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheUNvbnNl
cnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhu
dW1FbGVtZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAg
ICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNoZWNrZWRDb3VudC51bnNhZmVH
ZXQoKSwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMp
IHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVtRWxlbWVudHMsIGNoZWNrZWRQcmltaXRp
dmVDb3VudC51bnNhZmVHZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0
dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKCF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAiYXR0cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiByZWFzb24g
PSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwg
IWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCByZWFzb24pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMo
R0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworCisg
ICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOworICAgIGlmICghdmFsaWRhdGVEcmF3RWxlbWVu
dHMoImRyYXdFbGVtZW50cyIsIG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRz
LCAwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAg
IGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNv
bXBsaWFudCgpKSB7CisgICAgICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgICAgICB2YWxp
ZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRy
PihvZmZzZXQpLCBudW1FbGVtZW50cyk7CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQg
PSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOworICAgIH0KKyAgICBpZiAoIWlz
R0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJh
d0VsZW1lbnRzIiwgdHJ1ZSk7CisKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBj
b3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7CisKKyAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICBy
ZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNH
TEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3
RWxlbWVudHMiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5hYmxlIiwg
Y2FwKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfVEVTVCkgeworICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsKKyAgICAg
ICAgYXBwbHlTdGVuY2lsVGVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChj
YXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgeworICAgICAgICBtX3NjaXNz
b3JFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxlZCk7
CisgICAgfQorICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGluZGV4ID49IG1f
bWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4
IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisgICAgc3RhdGUuZW5h
YmxlZCA9IHRydWU7CisKKyAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGlu
ZGV4KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29u
dGV4dC0+ZmluaXNoKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVzaCgp
Cit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fY29udGV4dC0+Zmx1c2goKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNo
bWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVm
ZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFy
YW1ldGVycygiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJp
bnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChidWZmZXIg
JiYgIWJ1ZmZlci0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZyb20gdGhp
cyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRG9uJ3QgYWxsb3cg
dGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKKyAgICAv
LyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBk
ZWZhdWx0CisgICAgLy8gRkJPLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJvKGJ1ZmZl
cik7CisgICAgc3dpdGNoIChhdHRhY2htZW50KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1F
TlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKKyAgICAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVy
T2JqZWN0KTsKKyAgICB9CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnRG
b3JCb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQsIGJ1ZmZlcik7CisgICAgYXBwbHlTdGVuY2ls
VGVzdCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0
dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0
YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVm
ZmVyVGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChsZXZlbCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZh
bGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1
cmUyRCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJh
bWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKKyAgICAvLyBpbXBsZW1lbnRhdGlv
bnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0CisgICAgLy8g
RkJPLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5k
aW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFt
ZWJ1ZmZlciBib3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFBsYXRmb3JtM0RP
YmplY3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9yWmVybyh0ZXh0dXJlKTsKKyAgICBzd2l0Y2gg
KGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lM
X0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFy
Z2V0LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJn
ZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9i
amVjdCwgbGV2ZWwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0
dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9i
amVjdCwgbGV2ZWwpOworICAgIH0KKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNo
bWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBs
ZXZlbCk7CisgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+ZnJvbnRGYWNl
KG1vZGUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAo
R0MzRGVudW0gdGFyZ2V0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoImdlbmVyYXRlTWlwbWFwIiwgdGFyZ2V0LCBmYWxzZSk7CisgICAgaWYgKCF0ZXgpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAiZ2VuZXJhdGVNaXBtYXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBub3QgYWxs
IHRoZSBzYW1lIHNpemUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzkxNi4gQ29tcHJlc3Nl
ZCB0ZXh0dXJlcyBzaG91bGQgYmUgYWxsb3dlZCBpbiBXZWJHTCAyOgorICAgIGlmICh0ZXgtPmlz
Q29tcHJlc3NlZCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0byBnZW5l
cmF0ZSBtaXBtYXBzIGZyb20gY29tcHJlc3NlZCB0ZXh0dXJlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJnZW5lcmF0ZU1pcG1h
cCIsIHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCAwKSkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIGdlbmVyYXRlTWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWluRmlsdGVy
IGlzIG5vdCBORUFSRVNUX01JUE1BUF9MSU5FQVIKKyAgICAvLyBvbiBNYWMuICBSZW1vdmUgdGhl
IGhhY2sgb25jZSB0aGlzIGRyaXZlciBidWcgaXMgZml4ZWQuCisjaWYgT1MoREFSV0lOKQorICAg
IGJvb2wgbmVlZFRvUmVzZXRNaW5GaWx0ZXIgPSBmYWxzZTsKKyAgICBpZiAodGV4LT5nZXRNaW5G
aWx0ZXIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKSB7Cisg
ICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9M
SU5FQVIpOworICAgICAgICBuZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7CisgICAgfQorI2Vu
ZGlmCisgICAgbV9jb250ZXh0LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOworI2lmIE9TKERBUldJ
TikKKyAgICBpZiAobmVlZFRvUmVzZXRNaW5GaWx0ZXIpCisgICAgICAgIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIs
IHRleC0+Z2V0TWluRmlsdGVyKCkpOworI2VuZGlmCisgICAgdGV4LT5nZW5lcmF0ZU1pcG1hcExl
dmVsSW5mbygpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWlu
dCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJn
ZXRBY3RpdmVBdHRyaWIiLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
QWN0aXZlSW5mbyBpbmZvOworICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6ICVzIiwg
aW5kZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKKworICAgIHJldHVybiBXZWJHTEFjdGl2
ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKK30KKworUGFz
c1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZl
VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBw
cm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQWN0aXZlSW5mbyBpbmZvOworICAgIGlm
ICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5k
ZXgsIGluZm8pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIWlzR0xFUzJDb21w
bGlhbnQoKSkKKyAgICAgICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5lbmRzV2l0
aCgiWzBdIikpCisgICAgICAgICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKKworICAgIExP
RyhXZWJHTCwgIlJldHVybmluZyBhY3RpdmUgdW5pZm9ybSAlZDogJXMiLCBpbmRleCwgaW5mby5u
YW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRl
KGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgVmVj
dG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiBzaGFkZXJPYmplY3RzLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIHNoYWRlck9iamVjdHMuY2xlYXIoKTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0
KCJnZXRBdHRhY2hlZFNoYWRlcnMiLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY29uc3QgR0MzRGVudW0gc2hhZGVyVHlwZVtdID0geworICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRDo6VkVSVEVYX1NIQURFUiwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdN
RU5UX1NIQURFUgorICAgIH07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihz
aGFkZXJUeXBlKSAvIHNpemVvZihHQzNEZW51bSk7ICsraSkgeworICAgICAgICBXZWJHTFNoYWRl
ciogc2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtpXSk7Cisg
ICAgICAgIGlmIChzaGFkZXIpCisgICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFk
ZXIpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCisgICAgICAg
IHJldHVybiAtMTsKKyAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0dHJpYkxv
Y2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoIXZhbGlkYXRlU3Ry
aW5nKCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQorICAgICAgICByZXR1cm4gLTE7CisgICAg
aWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAo
IXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2NhdGlvbiIs
ICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBy
ZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSks
IG5hbWUpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZm
ZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgaWYgKHRhcmdl
dCAhPSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRl
ciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Cisg
ICAgfQorCisgICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSAm
JiBwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRCdWZm
ZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7CisgICAgfQorCisgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgbV9j
b250ZXh0LT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAg
IGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIC8vIFdlIGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzIG9iamVjdCB0bworICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBtdXRh
dGluZyBhbnkgY2FjaGVkIHZlcnNpb24uCisKKyAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9y
Y2UgcmVxdWVzdGVkIHZhbHVlcyBvZiAiZmFsc2UiIGZvciBkZXB0aAorICAgIC8vIGFuZCBzdGVu
Y2lsLCByZWdhcmRsZXNzIG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCisgICAg
Ly8gR3JhcGhpY3NDb250ZXh0M0Qgb3IgRHJhd2luZ0J1ZmZlci4KKyAgICBSZWZQdHI8V2ViR0xD
b250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNy
ZWF0ZShtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOworICAgIGlmICghbV9hdHRy
aWJ1dGVzLmRlcHRoKQorICAgICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7CisgICAg
aWYgKCFtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgYXR0cmlidXRlcy0+c2V0U3RlbmNp
bChmYWxzZSk7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBUaGUgRHJh
d2luZ0J1ZmZlciBvYnRhaW5zIGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0M0Q6
OmdldENvbnRleHRBdHRyaWJ1dGVzKCksCisgICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBpdHMgb3du
IGRldGVybWluYXRpb24gb2Ygd2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRlZC4KKyAg
ICAgICAgYXR0cmlidXRlcy0+c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVsdGlzYW1w
bGUoKSk7CisgICAgfQorICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKK30KKworR0Mz
RGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1faXNQ
ZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
OjpOT19FUlJPUjsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOworfQorCitXZWJH
TEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRf
YmxlbmRfbWlubWF4IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpIHsKKyAgICAgICAgaWYgKCFtX2V4dEJsZW5k
TWluTWF4KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJl
RW5hYmxlZCgiR0xfRVhUX2JsZW5kX21pbm1heCIpOworICAgICAgICAgICAgbV9leHRCbGVuZE1p
bk1heCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUQmxlbmRNaW5NYXg+KHRoaXMpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBtX2V4dEJsZW5kTWluTWF4LmdldCgpOworICAgIH0KKyAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9zUkdCIikKKyAgICAgICAgJiYgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKSB7CisgICAgICAgIGlm
ICghbV9leHRzUkdCKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3NSR0IiKTsKKyAgICAgICAgICAgIG1fZXh0c1JHQiA9IHN0
ZDo6bWFrZV91bmlxdWU8RVhUc1JHQj4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG1fZXh0c1JHQi5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJFWFRfZnJhZ19kZXB0aCIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfRVhUX2ZyYWdfZGVwdGgiKSkgeworICAgICAgICBpZiAoIW1fZXh0RnJh
Z0RlcHRoKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJl
RW5hYmxlZCgiR0xfRVhUX2ZyYWdfZGVwdGgiKTsKKyAgICAgICAgICAgIG1fZXh0RnJhZ0RlcHRo
ID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRGcmFnRGVwdGg+KHRoaXMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX2V4dEZyYWdEZXB0aC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKKyAgICAgICAgJiYgKG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJl
X2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3No
YWRlcl90ZXh0dXJlX2xvZCIpKSkgeworICAgICAgICBpZiAoIW1fZXh0U2hhZGVyVGV4dHVyZUxP
RCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJs
ZWQoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgICAgIG1fZXh0U2hhZGVy
VGV4dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVyVGV4dHVyZUxPRD4odGhpcyk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVyVGV4dHVyZUxPRC5nZXQoKTsK
KyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkgewor
ICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7CisgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisgICAgICAgICAgICBtX2V4dFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9leHRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkgeworICAg
ICAgICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgeworICAgICAgICAgICAgbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcyIpOworICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzID0gc3RkOjpt
YWtlX3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlzKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdldCgpOworICAgIH0KKyAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0IikKKyAgICAgICAg
JiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9m
bG9hdCIpKSB7CisgICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQpIHsKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVy
ZV9mbG9hdCIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXQgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9FU1RleHR1cmVGbG9hdD4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1f
b2VzVGV4dHVyZUZsb2F0LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikp
IHsKKyAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVhcikgeworICAgICAgICAgICAg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJl
X2Zsb2F0X2xpbmVhciIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4odGhpcyk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyLmdldCgpOworICAgIH0KKyAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQor
ICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190
ZXh0dXJlX2hhbGZfZmxvYXQiKSkgeworICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9h
dCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJs
ZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKKyAgICAgICAgICAgIG1fb2VzVGV4dHVy
ZUhhbGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdD4odGhpcyk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdC5nZXQoKTsK
KyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0X2xpbmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkgeworICAgICAgICBp
ZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcikgeworICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxv
YXRfbGluZWFyIik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+KHRoaXMpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuZ2V0KCk7Cisg
ICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3ZlcnRleF9hcnJheV9v
YmplY3QiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKKyAgICAgICAgaWYgKCFtX29lc1ZlcnRl
eEFycmF5T2JqZWN0KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAgICAgICAgICAg
IG1fb2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1ZlcnRleEFycmF5
T2JqZWN0Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vZXNWZXJ0ZXhBcnJh
eU9iamVjdC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJP
RVNfZWxlbWVudF9pbmRleF91aW50IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpIHsKKyAgICAgICAg
aWYgKCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7
CisgICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9F
U0VsZW1lbnRJbmRleFVpbnQ+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX29l
c0VsZW1lbnRJbmRleFVpbnQuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShuYW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0IikpIHsKKyAgICAgICAgaWYgKCFtX3dlYmdsTG9z
ZUNvbnRleHQpCisgICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRleHQgPSBzdGQ6Om1ha2VfdW5p
cXVlPFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOworICAgICAgICByZXR1cm4gbV93ZWJnbExvc2VD
b250ZXh0LmdldCgpOworICAgIH0KKyAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJX
RUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQorICAgICAgICAmJiBXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsKKyAgICAgICAgaWYgKCFtX3dl
YmdsQ29tcHJlc3NlZFRleHR1cmVBVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRl
eHR1cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+KHRo
aXMpOworICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDLmdldCgpOwor
ICAgIH0KKyAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29t
cHJlc3NlZF90ZXh0dXJlX3B2cnRjIikpCisgICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7CisgICAgICAgIGlmICghbV93ZWJnbENvbXByZXNz
ZWRUZXh0dXJlUFZSVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJU
QyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPih0aGlzKTsK
KyAgICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmdldCgpOworICAg
IH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2NvbXByZXNzZWRfdGV4
dHVyZV9zM3RjIikKKyAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBv
cnRlZCh0aGlzKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMp
CisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDID0gc3RkOjptYWtlX3Vu
aXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7CisgICAgICAgIHJldHVybiBt
X3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiKQorICAgICAgICAmJiBXZWJH
TERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKSB7CisgICAgICAg
IGlmICghbV93ZWJnbERlcHRoVGV4dHVyZSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2RlcHRoX3RleHR1cmUiKTsK
KyAgICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdM
RGVwdGhUZXh0dXJlPih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV93ZWJnbERl
cHRoVGV4dHVyZS5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJXRUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdCdWZmZXJzKCkpIHsKKyAgICAg
ICAgaWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CisgICAg
ICAgICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRHJhd0J1
ZmZlcnM+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3dlYmdsRHJhd0J1ZmZl
cnMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiQU5HTEVf
aW5zdGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhp
cykpIHsKKyAgICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSB7CisgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5z
dGFuY2VkX2FycmF5cyIpOworICAgICAgICAgICAgbV9hbmdsZUluc3RhbmNlZEFycmF5cyA9IHN0
ZDo6bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRoaXMpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdldCgpOworICAgIH0KKyAgICBp
ZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpKSB7CisgICAgICAgICAg
ICBpZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKKyAgICAgICAgICAgICAgICBtX3dlYmds
RGVidWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdSZW5kZXJlcklu
Zm8+KHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mby5n
ZXQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldF
QkdMX2RlYnVnX3NoYWRlcnMiKQorICAgICAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkgewor
ICAgICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQorICAgICAgICAgICAgICAgIG1f
d2ViZ2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdTaGFkZXJzPih0
aGlzKTsKKyAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdTaGFkZXJzLmdldCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1dlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygi
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIp
OworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorCisgICAgV2ViR0xTaGFy
ZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50T2Jq
ZWN0KGF0dGFjaG1lbnQpOworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmIChwbmFtZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSkK
KyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUp
OworICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJTlZBTElEX0VOVU0gaW4gdGhp
cyBjYXNlLCB3aGlsZSBkZXNrdG9wIEdMCisgICAgICAgIC8vIHNwZWNpZmllcyBJTlZBTElEX09Q
RVJBVElPTi4KKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlk
IHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9
CisKKyAgICBBU1NFUlQob2JqZWN0LT5pc1RleHR1cmUoKSB8fCBvYmplY3QtPmlzUmVuZGVyYnVm
ZmVyKCkpOworICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7CisgICAgICAgIHN3aXRjaCAo
cG5hbWUpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4ocmVpbnRlcnByZXRfY2FzdDxX
ZWJHTFRleHR1cmUqPihvYmplY3QpKSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZB
Q0U6CisgICAgICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NP
TE9SX0VOQ09ESU5HX0VYVDogeworICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAg
ICAgICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRh
cmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
IGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRjaCAocG5hbWUpIHsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9P
QkpFQ1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUik7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViR0xSZW5kZXJidWZmZXIqPihvYmplY3QpKSk7CisgICAgICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogeworICAgICAgICAg
ICAgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
R0xSZW5kZXJidWZmZXIqPihvYmplY3QpOworICAgICAgICAgICAgR0MzRGVudW0gcmVuZGVyQnVm
ZmVyRm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICAg
ICAgQVNTRVJUKHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUICYm
IHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKTsKKyAg
ICAgICAgICAgIGlmIChyZW5kZXJCdWZmZXJGb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9B
TFBIQThfRVhUKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRXh0ZW5zaW9u
czNEOjpTUkdCX0VYVCk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5FQVIpOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7CisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY29uc3QgaW50
IGludFplcm8gPSAwOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVf
V0lEVEhfUkFOR0U6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIo
cG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9S
QU5HRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFfQklUUzoKKyAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0
cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZEFycmF5QnVmZmVyKSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQ6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUjoKKyAgICAgICAgcmV0
dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RT
VF9SR0I6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6CisgICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
X1NSQ19BTFBIQToKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNfUkdCOgorICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkJMVUVfQklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6CisgICAg
ICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldEJv
b2xlYW5BcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
VWludDMyQXJyYXk6OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1f
Y29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkNVTExfRkFDRToKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgorICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4obV9jdXJyZW50UHJvZ3JhbSkpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oaW50WmVybyk7CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgorICAgICAg
ICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0ZVTkM6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6CisgICAg
ICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklU
RU1BU0s6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FS
UkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQ
dHI8V2ViR0xCdWZmZXI+KG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5
QnVmZmVyKCkpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5E
SU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4obV9mcmFtZWJ1ZmZlckJpbmRpbmcpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUk9OVF9GQUNFOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgor
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6Cisg
ICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklG
T1JNX1ZFQ1RPUlM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKKyAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkU6
CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6CisgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhf
QVRUUklCUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKKyAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQ
T1JUX0RJTVM6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRT
OgorICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGFsd2F5cyByZXR1cm4gMCBmb3IgdGhpcz8K
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZB
Q1RPUjoKKyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgorICAgICAgICByZXR1cm4g
Z2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UE9MWUdPTl9PRkZTRVRfVU5JVFM6CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihw
bmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0JJVFM6CisgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NS
ZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KG1fcmVuZGVyYnVmZmVyQmluZGluZykpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKFN0cmluZygiV2ViS2l0IFdlYkdMIikpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNBTVBMRV9CVUZGRVJTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgorICAg
ICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgorICAgICAgICByZXR1cm4gZ2V0Rmxv
YXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVM6
CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJh
eVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgorICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0
U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIiki
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKKyAgICAg
ICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFD
S19QQVNTX0RFUFRIX1BBU1M6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1JFRjoK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6CisgICAgICAgIHJldHVybiBnZXRV
bnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JJVFM6
CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5zdGVu
Y2lsKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKKyAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9DTEVBUl9WQUxVRToKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgorICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BB
U1NfREVQVEhfRkFJTDoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBu
YW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFT
UzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1JFRjoKKyAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9U
RVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9NQVNLOgorICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6
CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0
dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZykpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQklORElOR19DVUJFX01BUDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQ
YXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja0ZsaXBZKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8obV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgorICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24pOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhTdHJpbmcoIldlYktpdCIpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJT
SU9OOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCAxLjAgKCIgKyBtX2NvbnRl
eHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVSU0lPTikgKyAiKSIpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xJ
bnRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5U
X1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMK
KyAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKKyAgICAgICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9E
RVJJVkFUSVZFX0hJTlRfT0VTKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6
VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6CisgICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJl
ckluZm8pCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3Ry
aW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUikpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJs
ZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNhc2UgV2ViR0xEZWJ1
Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdMOgorICAgICAgICBpZiAobV93ZWJn
bERlYnVnUmVuZGVyZXJJbmZvKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX2Nv
bnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SKSk7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJh
bWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5m
byBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QKKyAgICAgICAgaWYgKG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKKyAgICAg
ICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUz4obV9ib3VuZFZlcnRleEFycmF5T2JqZWN0KSk7CisgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgZW5hYmxl
ZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljCisgICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykK
KyAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6
Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBl
bmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBC
RUdJTgorICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQorICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxl
ZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgorICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJz
KQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1
ZmZlcnMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKKyAgICAgICAgICAgICYm
IHBuYW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVAorICAgICAgICAgICAgJiYg
cG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBf
RVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKKyAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUg
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKKyAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZykKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5n
ZXREcmF3QnVmZmVyKHBuYW1lKTsKKyAgICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1
ZmZlcgorICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKKyAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgICAgICB9CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgfQorfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3Jh
bVBhcmFtZXRlciIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisK
KyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhwcm9ncmFtLT5pc0RlbGV0ZWQoKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VkFMSURBVEVfU1RBVFVTOgorICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RP
clplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TElOS19TVEFUVVM6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+Z2V0
TGlua1N0YXR1cygpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFE
RVJTOgorICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3Jh
bSksIHBuYW1lLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVM6CisgICAgICAgIG1fY29udGV4dC0+
Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5h
bWUsICZ2YWx1ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworU3RyaW5nIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkp
CisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQt
PmdldFByb2dyYW1JbmZvTG9nKG9iamVjdE9yWmVybyhwcm9ncmFtKSkpOworfQorCitXZWJHTEdl
dEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAi
aW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0K
KyAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVu
ZGVyYnVmZmVyIGJvdW5kIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9
CisKKyAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMCisgICAgICAgICYmICFtX3JlbmRlcmJ1
ZmZlckJpbmRpbmctPmlzVmFsaWQoKSkgeworICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2ls
U3VwcG9ydGVkKCkpOworICAgICAgICBpbnQgdmFsdWUgPSAwOworICAgICAgICBzd2l0Y2ggKHBu
YW1lKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURU
SDoKKyAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUl9IRUlHSFQ6CisgICAgICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmlu
ZGluZy0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgorICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6CisgICAgICAgICAgICB2YWx1
ZSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6CisgICAgICAgICAgICB2YWx1ZSA9IDI0OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUl9TVEVOQ0lMX1NJWkU6CisgICAgICAgICAgICB2YWx1ZSA9IDg7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVS
TkFMX0ZPUk1BVDoKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwor
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIH0KKworICAgIEdDM0RpbnQgdmFsdWUgPSAw
OworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVJfV0lEVEg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
X0hFSUdIVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJ
WkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgorICAgICAgICBt
X2NvbnRleHQtPmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgp
KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0K
K30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1l
dGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlclBhcmFtZXRlciIsIHNoYWRl
cikpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBHQzNEaW50IHZhbHVlID0g
MDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVM
RVRFX1NUQVRVUzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlzRGVsZXRl
ZCgpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKKyAgICAg
ICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2
YWx1ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFs
dWUpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRToKKyAgICAgICAg
bV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Pih2YWx1ZSkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAg
fQorfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdl
YkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xv
ZyIsIHNoYWRlcikpCisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gZW5zdXJlTm90TnVs
bChtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsKK30K
KworUGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0Mz
RGVudW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJURVhfU0hBREVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QUdNRU5UX1NIQURFUjoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRl
clByZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUVESVVNX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpNRURJVU1fSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hf
SU5UOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9u
Rm9ybWF0IiwgImludmFsaWQgcHJlY2lzaW9uIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgR0MzRGludCByYW5nZVsyXSA9IHswLCAwfTsKKyAgICBHQzNEaW50
IHByZWNpc2lvbiA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQo
c2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVjaXNpb24pOworICAgIHJldHVy
biBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwg
cHJlY2lzaW9uKTsKK30KKworU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVy
U291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hh
ZGVyU291cmNlIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuICIiOworICAgIHJldHVybiBlbnN1
cmVOb3ROdWxsKHNoYWRlci0+Z2V0U291cmNlKCkpOworfQorCitWZWN0b3I8U3RyaW5nPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQoreworICAgIFZlY3Rv
cjxTdHJpbmc+IHJlc3VsdDsKKworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24p
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoIkVYVF9ibGVuZF9taW5tYXgiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJF
WFRfc1JHQiIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX0VYVF9mcmFnX2RlcHRoIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9mcmFnX2Rl
cHRoIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xf
T0VTX3RleHR1cmVfZmxvYXQiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVf
ZmxvYXQiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VT
X3RleHR1cmVfZmxvYXRfbGluZWFyIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpKQorICAgICAgICByZXN1
bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik7CisgICAgaWYgKG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9P
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xvZCIpKQorICAg
ICAgICByZXN1bHQuYXBwZW5kKCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgaWYgKG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9FWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpKQorICAgICAgICByZXN1
bHQuYXBwZW5kKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpOworICAgIGlmIChtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKSkK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpOworICAgIHJl
c3VsdC5hcHBlbmQoIldFQkdMX2xvc2VfY29udGV4dCIpOworICAgIGlmIChXZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIldF
QktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIik7CisgICAgaWYgKFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKQorICAgICAgICByZXN1bHQuYXBwZW5k
KCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7CisgICAgaWYgKFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQodGhpcykpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7CisgICAgaWYgKFdlYkdMRGVw
dGhUZXh0dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkpCisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIldFQkdMX2RlcHRoX3RleHR1cmUiKTsKKyAgICBpZiAoc3VwcG9ydHNEcmF3QnVm
ZmVycygpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKTsKKyAg
ICBpZiAoQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOworCisgICAgaWYgKGFsbG93UHJp
dmlsZWdlZEV4dGVuc2lvbnMoKSkgeworICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RlYnVnX3NoYWRlcnMiKTsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpOworICAgIH0KKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBXZWJH
TFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImdldFRleFBhcmFtZXRlciIs
IHRhcmdldCwgZmFsc2UpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9XUkFQX1Q6CisgICAgICAgIG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0
LCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVf
TUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAg
ICAgICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7CisgICAgICAgICAgICBt
X2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFs
dWUpKTsKKyAgICAgICAgfQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRleFBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKKyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogdW5pZm9ybUxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3QoImdldFVuaWZvcm0iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOworICAgIGlmICghdW5pZm9ybUxvY2F0aW9uIHx8IHVuaWZvcm1Mb2NhdGlvbi0+
cHJvZ3JhbSgpICE9IHByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5pZm9ybSIsICJubyB1bmlmb3Jt
bG9jYXRpb24gb3Igbm90IHZhbGlkIGZvciB0aGlzIHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAgICBHQzNEaW50IGxvY2F0aW9uID0gdW5pZm9ybUxv
Y2F0aW9uLT5sb2NhdGlvbigpOworCisgICAgR0MzRGVudW0gYmFzZVR5cGU7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoOworICAgIHN3aXRjaCAodW5pZm9ybUxvY2F0aW9uLT50eXBlKCkpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNz
Q29udGV4dDNEOjpCT09MOworICAgICAgICBsZW5ndGggPSAxOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzI6CisgICAgICAgIGJhc2VUeXBlID0g
R3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMzoKKyAgICAgICAgYmFz
ZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICAgICAgbGVuZ3RoID0gMzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUM0OgorICAg
ICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAgICAgICBsZW5ndGgg
PSA0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6Cisg
ICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAgICAgICAgbGVuZ3Ro
ID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UX1ZF
QzI6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAgICAgICAg
bGVuZ3RoID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
SU5UX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAg
ICAgICAgbGVuZ3RoID0gMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UX1ZFQzQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklO
VDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUOworICAgICAgICBsZW5ndGggPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gMjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMzoKKyAgICAgICAgYmFzZVR5cGUg
PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzQ6CisgICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSA0
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQy
OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAg
bGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVRfTUFUMzoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7
CisgICAgICAgIGxlbmd0aCA9IDk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUX01BVDQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSAxNjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8yRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVSX0NVQkU6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OklOVDsKKyAgICAgICAgbGVuZ3RoID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgLy8gQ2FuJ3QgaGFuZGxlIHRoaXMgdHlwZQorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFVuaWZvcm0iLCAidW5o
YW5kbGVkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAg
ICBzd2l0Y2ggKGJhc2VUeXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6
IHsKKyAgICAgICAgR0MzRGZsb2F0IHZhbHVlWzE2XSA9IHswfTsKKyAgICAgICAgaWYgKG1faXNS
b2J1c3RuZXNzRVhUU3VwcG9ydGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmdldG5Vbmlmb3JtZnZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwg
MTYgKiBzaXplb2YoR0MzRGZsb2F0KSwgdmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldFVuaWZvcm1mdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9u
LCB2YWx1ZSk7CisgICAgICAgIGlmIChsZW5ndGggPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8odmFsdWVbMF0pOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0
MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKKyAgICB9CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6SU5UOiB7CisgICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07CisgICAg
ICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0p
LCBsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICBpZiAobGVuZ3RoID09IDEpCisgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworICAgIH0KKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOiB7CisgICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7
MH07CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJv
KHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICBpZiAobGVuZ3RoID4gMSkgewor
ICAgICAgICAgICAgYm9vbCBib29sVmFsdWVbMTZdID0gezB9OworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKQorICAgICAgICAgICAgICAgIGJvb2xWYWx1
ZVtqXSA9IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlW2pdKTsKKyAgICAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oYm9vbFZhbHVlLCBsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbMF0pKTsKKyAgICB9CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICAvLyBJZiB3
ZSBnZXQgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gb3VyIHVuZm9ydHVuYXRlbHkgY29t
cGxleCBsb2dpYyBhYm92ZQorICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmtub3duIGVycm9yIik7CisgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOworfQorCitQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9u
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0q
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlmb3JtTG9jYXRpb24iLCBwcm9ncmFtKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRV
bmlmb3JtTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KCF2YWxpZGF0ZVN0cmluZygiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJnZXRVbmlmb3JtTG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1f
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7
CisgICAgaWYgKHVuaWZvcm1Mb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBHQzNEaW50IGFjdGl2ZVVuaWZvcm1zID0gMDsKKyAgICBtX2NvbnRleHQtPmdldE5v
bkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNz
Q29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7CisgICAgZm9yIChH
QzNEaW50IGkgPSAwOyBpIDwgYWN0aXZlVW5pZm9ybXM7IGkrKykgeworICAgICAgICBBY3RpdmVJ
bmZvIGluZm87CisgICAgICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgaSwgaW5mbykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgLy8gU3RyaXAgIlswXSIgZnJvbSB0aGUgbmFtZSBpZiBpdCdzIGFuIGFycmF5Lgor
ICAgICAgICBpZiAoaW5mby5uYW1lLmVuZHNXaXRoKCJbMF0iKSkKKyAgICAgICAgICAgIGluZm8u
bmFtZSA9IGluZm8ubmFtZS5sZWZ0KGluZm8ubmFtZS5sZW5ndGgoKSAtIDMpOworICAgICAgICAv
LyBJZiBpdCdzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIGVsZW1l
bnQsIGFwcGVuZGluZyAiW2luZGV4XSIgdG8gdGhlIG5hbWUuCisgICAgICAgIGZvciAoR0MzRGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgaW5mby5zaXplOyArK2luZGV4KSB7CisgICAgICAgICAgICBT
dHJpbmcgdW5pZm9ybU5hbWUgPSBpbmZvLm5hbWUgKyAiWyIgKyBTdHJpbmc6Om51bWJlcihpbmRl
eCkgKyAiXSI7CisKKyAgICAgICAgICAgIGlmIChuYW1lID09IHVuaWZvcm1OYW1lIHx8IG5hbWUg
PT0gaW5mby5uYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTFVuaWZvcm1Mb2NhdGlv
bjo6Y3JlYXRlKHByb2dyYW0sIHVuaWZvcm1Mb2NhdGlvbiwgaW5mby50eXBlKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRW
ZXJ0ZXhBdHRyaWIiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKKyAgICB9CisKKyAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
OjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKworICAgIGlmIChtX2FuZ2xlSW5zdGFuY2VkQXJy
YXlzICYmIHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0RJ
VklTT1JfQU5HTEUpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuZGl2aXNvcik7
CisKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVS
VEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKCghaXNHTEVTMkNv
bXBsaWFudCgpICYmICFpbmRleCAmJiBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRl
eEF0dHJpYlN0YXRlKDApLmJ1ZmZlckJpbmRpbmcgPT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKQor
ICAgICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJpbmRpbmcKKyAgICAgICAgICAgIHx8ICFzdGF0
ZS5idWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVy
PihzdGF0ZS5idWZmZXJCaW5kaW5nKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVS
VEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0
YXRlLmVuYWJsZWQpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJf
QVJSQVlfTk9STUFMSVpFRDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5ub3Jt
YWxpemVkKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZ
X1NJWkU6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuc2l6ZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUub3JpZ2luYWxTdHJpZGUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhzdGF0ZS50eXBlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpD
VVJSRU5UX1ZFUlRFWF9BVFRSSUI6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQz
MkFycmF5OjpjcmVhdGUobV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF0udmFsdWUsIDQpKTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0VmVydGV4QXR0cmliIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworbG9uZyBsb25n
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICBHQzNEc2l6ZWlwdHIgcmVzdWx0ID0gbV9jb250ZXh0
LT5nZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPihyZXN1bHQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgaXNWYWxpZCA9
IGZhbHNlOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAgICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJ
VkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcworICAgICAgICBpZiAobV9v
ZXNTdGFuZGFyZERlcml2YXRpdmVzKQorICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIWlzVmFsaWQpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImhpbnQiLCAiaW52YWxp
ZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPmhpbnQo
dGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpp
c0J1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyIHx8IGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWJ1ZmZl
ci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBt
X2NvbnRleHQtPmlzQnVmZmVyKGJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29u
dGV4dExvc3Q7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uICYmICFt
X2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24pIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiQ29u
dGV4dCBpcyBiZWluZyB1c2VkLiBBdHRlbXB0IHRvIHJlc29sdmUgdGhlIHBvbGljeS4iKTsKKyAg
ICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzKCktPmRvY3VtZW50KCkudG9wRG9jdW1l
bnQoKTsKKyAgICAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKTsKKyAgICAgICAgaWYg
KHBhZ2UgJiYgIWRvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxlKCkpCisgICAgICAgICAgICBwYWdl
LT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5yZXNvbHZlV2ViR0xQb2xpY3lGb3JVUkwo
ZG9jdW1lbnQudXJsKCkpOworICAgICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgY3VycmVudGx5IGRv
IGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdCBmcm9tIHJlc29sdXRpb24uIEEgbW9yZQorICAgICAg
ICAvLyBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBtaWdodCB0cnkgdG8gY29uc3RydWN0IGEgcmVh
bCBjb250ZXh0LCBldGMgYW5kIHByb2NlZWQKKyAgICAgICAgLy8gd2l0aCBub3JtYWwgb3BlcmF0
aW9uLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI5MTIyCisgICAgICAgIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbiA9IHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIG1fY29udGV4dExvc3QgfHwgbV9pc1BlbmRpbmdQb2xpY3lSZXNv
bHV0aW9uOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxl
ZChHQzNEZW51bSBjYXApCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVDYXBhYmlsaXR5KCJpc0VuYWJsZWQiLCBjYXApKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpCisgICAgICAg
IHJldHVybiBtX3N0ZW5jaWxFbmFibGVkOworICAgIHJldHVybiBtX2NvbnRleHQtPmlzRW5hYmxl
ZChjYXApOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVi
dWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1
ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKCFmcmFtZWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBtX2NvbnRleHQtPmlzRnJhbWVidWZmZXIoZnJhbWVidWZmZXItPm9i
amVjdCgpKTsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dy
YW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSB8fCBpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fY29u
dGV4dC0+aXNQcm9ncmFtKHByb2dyYW0tPm9iamVjdCgpKTsKK30KKworR0MzRGJvb2xlYW4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVu
ZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyIHx8IGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIXJlbmRlcmJ1ZmZlci0+aGFz
RXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2NvbnRl
eHQtPmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitHQzNEYm9v
bGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIp
Cit7CisgICAgaWYgKCFzaGFkZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2NvbnRleHQtPmlzU2hhZGVyKHNoYWRlci0+b2Jq
ZWN0KCkpOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4dHVy
ZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlIHx8IGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIXRleHR1cmUt
Pmhhc0V2ZXJCZWVuQm91bmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9j
b250ZXh0LT5pc1RleHR1cmUodGV4dHVyZS0+b2JqZWN0KCkpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5s
aW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1By
b2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImxpbmtQcm9ncmFtIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBXZWJHTFNoYWRlciog
dmVydGV4U2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OlZFUlRFWF9TSEFERVIpOworICAgICAgICBXZWJHTFNoYWRlciogZnJhZ21lbnRTaGFkZXIg
PSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRf
U0hBREVSKTsKKyAgICAgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRleFNoYWRlci0+aXNW
YWxpZCgpIHx8ICFmcmFnbWVudFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzVmFsaWQoKSB8
fCAhbV9jb250ZXh0LT5wcmVjaXNpb25zTWF0Y2gob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciks
IG9iamVjdE9yWmVybyhmcmFnbWVudFNoYWRlcikpIHx8ICFtX2NvbnRleHQtPmNoZWNrVmFyeWlu
Z3NQYWNraW5nKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIpLCBvYmplY3RPclplcm8oZnJhZ21l
bnRTaGFkZXIpKSkgeworICAgICAgICAgICAgcHJvZ3JhbS0+c2V0TGlua1N0YXR1cyhmYWxzZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2NvbnRleHQt
PmxpbmtQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CisgICAgcHJvZ3JhbS0+aW5jcmVh
c2VMaW5rQ291bnQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBpeGVsU3Rv
cmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKKyAgICAgICAg
bV91bnBhY2tGbGlwWSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CisgICAgICAgIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgorICAg
ICAgICBpZiAocGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVGQVVMVF9XRUJH
TCB8fCBwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKKyAgICAgICAgICAgIG1fdW5w
YWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4ocGFyYW0pOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
Zm9yIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpQQUNLX0FMSUdOTUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
QUxJR05NRU5UOgorICAgICAgICBpZiAocGFyYW0gPT0gMSB8fCBwYXJhbSA9PSAyIHx8IHBhcmFt
ID09IDQgfHwgcGFyYW0gPT0gOCkgeworICAgICAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNz
Q29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVCkKKyAgICAgICAgICAgICAgICBtX3BhY2tBbGlnbm1l
bnQgPSBwYXJhbTsKKyAgICAgICAgICAgIGVsc2UgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFD
S19BTElHTk1FTlQ6CisgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQgPSBwYXJhbTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9y
IGFsaWdubWVudCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9jb250ZXh0LT5wb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgLy8gRHVl
IHRvIFdlYkdMJ3Mgc2FtZS1vcmlnaW4gcmVzdHJpY3Rpb25zLCBpdCBpcyBub3QgcG9zc2libGUg
dG8KKyAgICAvLyB0YWludCB0aGUgb3JpZ2luIHVzaW5nIHRoZSBXZWJHTCBBUEkuCisgICAgQVNT
RVJUKGNhbnZhcygpLT5vcmlnaW5DbGVhbigpKTsKKyAgICAvLyBWYWxpZGF0ZSBpbnB1dCBwYXJh
bWV0ZXJzLgorICAgIGlmICghcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicmVhZFBpeGVscyIsICJubyBkZXN0aW5h
dGlvbiBBcnJheUJ1ZmZlclZpZXciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzd2l0
Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZh
bGlkIGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IHR5cGUg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVs
cyIsICJmb3JtYXQgbm90IFJHQkEgb3IgdHlwZSBub3QgVU5TSUdORURfQllURSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIC8vIFZhbGlkYXRlIGFycmF5IHR5cGUgYWdhaW5zdCBwaXhl
bCB0eXBlLgorICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1
ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJj
ZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsIHJl
YXNvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gQ2FsY3VsYXRlIGFycmF5IHNp
emUsIHRha2luZyBpbnRvIGNvbnNpZGVyYXRpb24gb2YgUEFDS19BTElHTk1FTlQuCisgICAgdW5z
aWduZWQgaW50IHRvdGFsQnl0ZXNSZXF1aXJlZCA9IDA7CisgICAgdW5zaWduZWQgaW50IHBhZGRp
bmcgPSAwOworICAgIGlmICghbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIHsKKyAgICAgICAg
R0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1h
dCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVp
cmVkLCAmcGFkZGluZyk7CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9fRVJST1IpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAicmVhZFBp
eGVscyIsICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVxdWly
ZWQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBsYXJn
ZSBlbm91Z2ggZm9yIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgdm9pZCogZGF0YSA9IHBp
eGVscy0+YmFzZUFkZHJlc3MoKTsKKworICAgIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZl
ckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGlu
Zy5nZXQoKSk7CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZWFkblBpeGVsc0VYVCh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy0+Ynl0ZUxlbmd0aCgpLCBkYXRhKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgfQorCisjaWYgT1MoREFSV0lO
KQorICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgLy8gd2UgaGF2ZW4ndCBjb21w
dXRlZCBwYWRkaW5nCisgICAgICAgIG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMo
Zm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVz
UmVxdWlyZWQsICZwYWRkaW5nKTsKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3
aGVuIEdMIGRyaXZlciBidWcgb24gTWFjIEFORCB0aGUgR0xFUyBkcml2ZXIgYnVnCisgICAgLy8g
b24gUUMgaXMgZml4ZWQsIGkuZS4sIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxzIHNob3Vs
ZAorICAgIC8vIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgorICAgIGlmICghbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBo
YSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGNoYXIqPihkYXRhKTsKKyAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXkgPSAwOyBpeSA8
IGhlaWdodDsgKytpeSkgeworICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXggPSAwOyBpeCA8
IHdpZHRoOyArK2l4KSB7CisgICAgICAgICAgICAgICAgcGl4ZWxzWzNdID0gMjU1OworICAgICAg
ICAgICAgICAgIHBpeGVscyArPSA0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGl4ZWxz
ICs9IHBhZGRpbmc7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+cmVs
ZWFzZVNoYWRlckNvbXBpbGVyKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdl
IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFt
X3JlbmRlcmJ1ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5kZXJidWZmZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgicmVuZGVy
YnVmZmVyU3RvcmFnZSIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgc3dp
dGNoIChpbnRlcm5hbGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4Ogor
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUOgorICAgICAgICBpZiAoaW50
ZXJuYWxmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUICYmICFtX2V4dHNS
R0IpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3Jt
YXQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2NvbnRleHQt
PnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50
ZXJuYWxmb3JtYXQpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQo
dHJ1ZSk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
U1RFTkNJTDoKKyAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpIHsKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIEV4dGVuc2lvbnMz
RDo6REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAg
bV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBt
X3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQo
KSk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50
ZXJuYWxmb3JtYXQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVm
ZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZl
cnQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVTaXplKCJz
Y2lzc29yIiwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQt
PnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgic2hh
ZGVyU291cmNlIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIFN0cmluZyBzdHJpbmdX
aXRob3V0Q29tbWVudHMgPSBTdHJpcENvbW1lbnRzKHN0cmluZykucmVzdWx0KCk7CisgICAgaWYg
KCF2YWxpZGF0ZVN0cmluZygic2hhZGVyU291cmNlIiwgc3RyaW5nV2l0aG91dENvbW1lbnRzKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHNoYWRlci0+c2V0U291cmNlKHN0cmluZyk7CisgICAgbV9j
b250ZXh0LT5zaGFkZXJTb3VyY2Uob2JqZWN0T3JaZXJvKHNoYWRlciksIHN0cmluZ1dpdGhvdXRD
b21tZW50cyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuYyhH
QzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0
ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuYyIsIGZ1bmMpKQorICAgICAgICByZXR1cm47CisgICAg
bV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsK
KyAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7CisgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNr
ID0gbWFzazsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0Rl
bnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCBmdW5jKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoZmFjZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZST05UX0FORF9CQUNLOgorICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwor
ICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVu
Y01hc2sgPSBtYXNrOworICAgICAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVDoKKyAgICAgICAg
bV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNr
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgorICAg
ICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01h
c2tCYWNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxG
dW5jU2VwYXJhdGUiLCAiaW52YWxpZCBmYWNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFzayhHQzNEdWludCBt
YXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKKyAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1h
c2s7CisgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFzayhtYXNrKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVp
bnQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgc3dpdGNoIChmYWNlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJPTlRfQU5EX0JBQ0s6CisgICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOworICAgICAgICBt
X3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZST05UOgorICAgICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzoKKyAgICAgICAgbV9z
dGVuY2lsTWFza0JhY2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
c3RlbmNpbE1hc2tTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwg
R0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChm
YWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3Rl
bmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZh
aWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcFNlcGFyYXRlKGZhY2Us
IGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQg
Ym9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3Jl
IGFueSBlcnJvcnMgcmV0dXJuZWQuCisgICAgZWMgPSAwOworICAgIFdlYkdMVGV4dHVyZSogdGV4
ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Cisg
ICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleEltYWdlMkQiLCBOb3RUZXhT
dWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUpKTsKKyAgICBBU1NFUlQodGV4KTsKKyAgICBBU1NFUlQoIWxl
dmVsIHx8ICFXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSk7CisgICAgaWYgKCFw
aXhlbHMpIHsKKyAgICAgICAgLy8gTm90ZTogQ2hyb21pdW0ncyBPcGVuR0wgaW1wbGVtZW50YXRp
b24gY2xlYXJzIHRleHR1cmVzIGFuZCBpc1Jlc291cmNlU2FmZSgpIGlzIHRoZXJlZm9yZSB0cnVl
LgorICAgICAgICAvLyBGb3Igb3RoZXIgaW1wbGVtZW50YXRpb25zLCBpZiB0aGV5IGFyZSB1c2lu
ZyBBTkdMRV9kZXB0aF90ZXh0dXJlLCBBTkdMRSBkZXB0aCB0ZXh0dXJlcworICAgICAgICAvLyBj
YW4gbm90IGJlIGNsZWFyZWQgd2l0aCB0ZXhJbWFnZTJEIGFuZCBtdXN0IGJlIGNsZWFyZWQgYnkg
YmluZGluZyB0byBhbiBmYm8gYW5kIGNhbGxpbmcKKyAgICAgICAgLy8gY2xlYXIuCisgICAgICAg
IGlmIChpc1Jlc291cmNlU2FmZSgpKQorICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYm9vbCBz
dWNjZWVkID0gbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBl
LCBtX3VucGFja0FsaWdubWVudCk7CisgICAgICAgICAgICBpZiAoIXN1Y2NlZWQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJU
KHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkp
OworICAgICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwor
ICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9y
c1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSB0ZXhJbWFnZTJE
IGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2ZSB0
aGUgZGF0YSBmb3IgdGhpcyBsZXZlbC4KKyAgICAgICAgICAgIHRleC0+bWFya0ludmFsaWQodGFy
Z2V0LCBsZXZlbCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAg
dGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIHR5cGUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2Uy
REltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBo
aWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsK
KyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VF
eHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBo
YSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9O
RSk7CisgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0
ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdl
RXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOworICAgIGNvbnN0
IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsK
KworICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOworICAgIGlmICh0eXBlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcg
JiYgIWZsaXBZKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2Ugewor
ICAgICAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERh
dGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdl
RXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1h
Z2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidGV4SW1hZ2UyRCIsICJwYWNrSW1hZ2UgZXJyb3IiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5ULCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBu
ZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKKyAgICBp
ZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3Jl
aShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQp
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rp
b25UeXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNlVHlwZSwgR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCkKK3sKKyAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBmdW5jdGlvblR5
cGUsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGZvcm1hdCwgdHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoZnVuY3Rpb25OYW1lLCB0YXJnZXQs
IHRydWUpOworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKGZ1bmN0aW9uVHlwZSA9PSBOb3RUZXhTdWJJbWFnZTJEKSB7CisgICAgICAgIGlmIChsZXZl
bCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIEZvciBTb3VyY2VBcnJheUJ1ZmZlclZpZXcs
IGZ1bmN0aW9uIHZhbGlkYXRlVGV4RnVuY0RhdGEoKSB3b3VsZCBoYW5kbGUgd2hldGhlciB0byB2
YWxpZGF0ZSB0aGUgU2V0dGFibGVUZXhGb3JtYXQKKyAgICAgICAgLy8gYnkgY2hlY2tpbmcgaWYg
dGhlIEFycmF5QnVmZmVyVmlldyBpcyBudWxsIG9yIG5vdC4KKyAgICAgICAgaWYgKHNvdXJjZVR5
cGUgIT0gU291cmNlQXJyYXlCdWZmZXJWaWV3KSB7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRl
U2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdmFs
aWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghdmFsaWRhdGVTaXplKGZ1bmN0aW9uTmFtZSwg
eG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8v
IEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92ZXJmbG93
IGhhcHBlbnMgZmlyc3QuCisgICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlvZmZz
ZXQgKyBoZWlnaHQgPCAwKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYmFkIGRpbWVuc2lvbnMi
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeG9m
ZnNldCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNl
dCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmUtPmdldEludGVybmFs
Rm9ybWF0KHRhcmdldCwgbGV2ZWwpICE9IGZvcm1hdCB8fCB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdl
dCwgbGV2ZWwpICE9IHR5cGUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBhbmQg
Zm9ybWF0IGRvIG5vdCBtYXRjaCB0ZXh0dXJlIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3Jk
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRl
eEZ1bmNEYXRhKCJ0ZXhJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzLCBOdWxsQWxsb3dlZCkKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4
SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuOworICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMgPyBw
aXhlbHMtPmJhc2VBZGRyZXNzKCkgOiAwOworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsK
KyAgICBib29sIGNoYW5nZVVucGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIGlmIChkYXRhICYm
IChtX3VucGFja0ZsaXBZIHx8IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAg
aWYgKCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBh
Y2tBbGlnbm1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVtcERhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBkYXRhID0gdGVtcERhdGEuZGF0YSgpOworICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1l
bnQgPSB0cnVlOworICAgIH0KKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05N
RU5ULCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlw
ZSwgZGF0YSwgZWMpOworICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdl
MkQsIFNvdXJjZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVs
cy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIGJvb2wgbmVlZENv
bnZlcnNpb24gPSB0cnVlOworICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5
cyBvZiBmb3JtYXQgUkdCQTguCisgICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVz
dGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBG
bGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KKyAgICBpZiAoIW1fdW5w
YWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSAmJiBmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSkKKyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUs
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05N
RU5ULCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIG5l
ZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7
CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
cmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlKiBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBp
bnQgZGV2aWNlU2NhbGVGYWN0b3IpCit7CisgICAgSW50U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQp
OworICAgIHNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIEltYWdlQnVmZmVyKiBi
dWYgPSBtX2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7CisgICAgaWYgKCFi
dWYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9P
Rl9NRU1PUlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBp
bWFnZS0+c2l6ZSgpKTsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBzaXpl
KTsKKyAgICBidWYtPmNvbnRleHQoKS0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdl
QnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2Us
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleEltYWdlMkQiLCBp
bWFnZSwgZWMpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9y
UmVuZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJl
bmRlcmVyKCkpOworICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQorICAgICAg
ICBpbWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0
KCksIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOworCisgICAgaWYgKCFpbWFn
ZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1h
Z2UyRCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIHRleEltYWdlMkRJ
bXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9y
UmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0Zs
aXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQq
IGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoInRleElt
YWdlMkQiLCBjYW52YXMsIGVjKSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90
VGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1h
dCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkdMVGV4dHVyZSogdGV4
dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUp
OworICAgIC8vIElmIHBvc3NpYmxlLCBjb3B5IGZyb20gdGhlIGNhbnZhcyBlbGVtZW50IGRpcmVj
dGx5IHRvIHRoZSB0ZXh0dXJlCisgICAgLy8gdmlhIHRoZSBHUFUsIHdpdGhvdXQgYSByZWFkLWJh
Y2sgdG8gc3lzdGVtIG1lbW9yeS4KKyAgICAvLworICAgIC8vIEZJWE1FOiByZXN0cmljdGlvbiBv
ZiAoUkdCIHx8IFJHQkEpL1VOU0lHTkVEX0JZVEUgc2hvdWxkIGJlIGxpZnRlZCB3aGVuCisgICAg
Ly8gSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBpbXBsZW1lbnRhdGlvbnMgYXJl
IGZ1bGx5IGZ1bmN0aW9uYWwuCisgICAgaWYgKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
ID09IHRhcmdldCAmJiB0ZXh0dXJlICYmIHR5cGUgPT0gdGV4dHVyZS0+Z2V0VHlwZSh0YXJnZXQs
IGxldmVsKQorICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgfHwg
Zm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSAmJiB0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBj
YW52YXMtPmJ1ZmZlcigpOworICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxh
dGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5h
bGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIHR5cGUpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1h
Z2VEYXRhID0gY2FudmFzLT5nZXRJbWFnZURhdGEoKTsKKyAgICBpZiAoaW1hZ2VEYXRhKQorICAg
ICAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5
cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOworICAgIGVsc2UKKyAgICAgICAgdGV4SW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5j
b3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKKyNpZiBFTkFCTEUoVklE
RU8pCitQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJhbWVU
b0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBCYWNraW5nU3RvcmVDb3B5IGJhY2tpbmdT
dG9yZUNvcHksIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIEludFNpemUgc2l6ZSh2aWRlby0+dmlk
ZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSk7CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9
IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKKyAgICBpZiAoIWJ1Zikg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01F
TU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgSW50UmVjdCBkZXN0UmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOworICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMgaW50byBhIEdQVS1HUFUgdGV4
dHVyZSBjb3B5IGluc3RlYWQgb2YgQ1BVIHJlYWRiYWNrLgorICAgIHZpZGVvLT5wYWludEN1cnJl
bnRGcmFtZUluQ29udGV4dChidWYtPmNvbnRleHQoKSwgZGVzdFJlY3QpOworICAgIHJldHVybiBi
dWYtPmNvcHlJbWFnZShiYWNraW5nU3RvcmVDb3B5KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlk
ZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoInRleEltYWdlMkQi
LCB2aWRlbywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBO
b3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCks
IDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEdvIHRo
cm91Z2ggdGhlIGZhc3QgcGF0aCBkb2luZyBhIEdQVS1HUFUgdGV4dHVyZXMgY29weSB3aXRob3V0
IGEgcmVhZGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBpZiBwb3NzaWJsZS4KKyAgICAvLyBPdGhlcndp
c2UsIGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgU1cgcGF0aC4KKyAgICAvLyBGSVhN
RTogVGhlIGN1cnJlbnQgcmVzdHJpY3Rpb25zIHJlcXVpcmUgdGhhdCBmb3JtYXQgc2hvdWQgYmUg
UkdCIG9yIFJHQkEsCisgICAgLy8gdHlwZSBzaG91bGQgYmUgVU5TSUdORURfQllURSBhbmQgbGV2
ZWwgc2hvdWxkIGJlIDAuIEl0IG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBXZWJH
TFRleHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwg
dGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0g
dGFyZ2V0ICYmIHRleHR1cmUKKyAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkKKyAgICAgICAgJiYg
dHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAgICAgICAmJiAodGV4
dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgJiYg
IWxldmVsKSB7CisgICAgICAgIGlmICh2aWRlby0+Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKG1fY29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGxldmVsLCB0eXBlLCBp
bnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkg
eworICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgdHlw
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3Jt
YWwgcHVyZSBTVyBwYXRoLgorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9J
bWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKKyAgICBp
ZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNz
Q29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwgZWMpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBh
cmFtZiwgR0MzRGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXgg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsK
KyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKKyAgICAgICAgaWYgKChpc0Zsb2F0ICYmIHBh
cmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWYgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJFUEVBVCkKKyAgICAgICAgICAgIHx8ICghaXNGbG9hdCAmJiBwYXJhbWkgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBF
QVQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRl
bnNpb25zM0Q6OlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0
ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKCFtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
YykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciwgRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKGlzRmxvYXQpIHsKKyAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJmKHBuYW1lLCBwYXJh
bWYpOworICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFy
YW1mKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBh
cmFtaSk7CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBw
YXJhbWkpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFt
ZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKQor
eworICAgIHRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBwYXJhbSwgMCwgdHJ1ZSk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCit7CisgICAgdGV4UGFyYW1ldGVyKHRh
cmdldCwgcG5hbWUsIDAsIHBhcmFtLCBmYWxzZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCog
cGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBp
Z25vcmUgYW55IGVycm9ycyByZXR1cm5lZAorICAgIGVjID0gMDsKKyAgICBBU1NFUlQoIWlzQ29u
dGV4dExvc3QoKSk7CisgICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleFN1
YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVNpemUoInRleFN1
YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSk7CisgICAgQVNTRVJUKHZhbGlkYXRlU2V0dGFi
bGVUZXhGb3JtYXQoInRleFN1YkltYWdlMkQiLCBmb3JtYXQpKTsKKyAgICBXZWJHTFRleHR1cmUq
IHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRy
dWUpOworICAgIGlmICghdGV4KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCgoeG9mZnNldCArIHdpZHRoKSA+PSAwKTsK
KyAgICBBU1NFUlQoKHlvZmZzZXQgKyBoZWlnaHQpID49IDApOworICAgIEFTU0VSVCh0ZXgtPmdl
dFdpZHRoKHRhcmdldCwgbGV2ZWwpID49ICh4b2Zmc2V0ICsgd2lkdGgpKTsKKyAgICBBU1NFUlQo
dGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkgPj0gKHlvZmZzZXQgKyBoZWlnaHQpKTsKKyAg
ICBBU1NFUlQodGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSA9PSBmb3JtYXQp
OworICAgIEFTU0VSVCh0ZXgtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgPT0gdHlwZSk7CisgICAg
bV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VI
dG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IGRhdGE7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFj
dG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFj
ZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOyAgCisgICAgaWYgKCFpbWFn
ZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJh
ZCBpbWFnZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJj
ZUZvcm1hdCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFn
ZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKKyAgICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0
YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRhKCk7CisKKyAgICBib29sIG5lZWRDb252
ZXJzaW9uID0gdHJ1ZTsKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGFscGhhT3Ag
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nICYmICFmbGlwWSkKKyAgICAgICAg
bmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFtX2NvbnRl
eHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZs
aXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRo
KCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291
cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFk
IGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVs
U3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0ZXhT
dWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+d2lk
dGgoKSwgaW1hZ2UtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsICBuZWVkQ29udmVyc2lvbiA/IGRh
dGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKKyAgICBpZiAobV91bnBhY2tBbGlnbm1l
bnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQz
RDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVUZXhGdW5jRGF0YSgidGV4U3ViSW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHBpeGVscywgTnVsbE5vdEFsbG93ZWQpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRl
eEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZp
ZXcsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBl
LCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOworICAgIHZvaWQqIGRhdGEgPSBw
aXhlbHMtPmJhc2VBZGRyZXNzKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOworICAg
IGJvb2wgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gZmFsc2U7CisgICAgaWYgKGRhdGEgJiYgKG1f
dW5wYWNrRmxpcFkgfHwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKSkgeworICAgICAgICBpZiAo
IW1fY29udGV4dC0+ZXh0cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0Fs
aWdubWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZW1wRGF0YSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGRhdGEgPSB0ZW1wRGF0YS5kYXRhKCk7CisgICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVudCA9
IHRydWU7CisgICAgfQorICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IDEpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSwgZWMpOworICAgIGlmIChjaGFu
Z2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhlbHMgfHwg
IXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUlt
YWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMt
PmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBib29sIG5lZWRDb252ZXJz
aW9uID0gdHJ1ZTsKKyAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgb2Yg
Zm9ybWF0IFJHQkE4LgorICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0
aW9uIGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxpcCBv
ciBQcmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFICYmICFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEp
CisgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIGlm
ICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0LCB0eXBlLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRl
eFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgMSk7CisgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsIG5l
ZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7
CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFn
ZSwgZWMpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVu
ZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRl
cmVyKCkpOworICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQorICAgICAgICBp
bWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0KCks
IGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOworCisgICAgaWYgKCFpbWFnZUZv
clJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2Uy
RCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBpbWFnZUZv
clJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXhTdWJJbWFn
ZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGlt
YWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
ZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRN
TENhbnZhc0VsZW1lbnQoInRleFN1YkltYWdlMkQiLCBjYW52YXMsIGVjKQorICAgICAgICB8fCAh
dmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRN
TENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBj
YW52YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMt
PmdldEltYWdlRGF0YSgpOworICAgIGlmIChpbWFnZURhdGEpCisgICAgICAgIHRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZURh
dGEuZ2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJ
bWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlSFRNTFZpZGVvRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIHZpZGVvLCBlYykKKyAgICAgICAg
fHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJj
ZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lk
dGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9m
ZnNldCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRl
b0ZyYW1lVG9JbWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVj
KTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgdGV4U3ViSW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5n
ZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RmbG9hdCB4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQ
cm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0xZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQg
cHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlm
b3JtMWYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIDEpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYt
Pmxlbmd0aCgpLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
bmlmb3JtMWkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICgobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVSX0NVQkUpICYmIHggPj0gKGludCltX3RleHR1cmVVbml0cy5zaXplKCkpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ1bmlmb3JtMWkiLCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKGxvY2F0aW9uLT5sb2NhdGlvbigp
LCB4KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBs
b2NhdGlvbiwgdiwgMSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsb2NhdGlvbi0+dHlw
ZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHYtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh2LT5kYXRh
KClbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7CisgICAg
ICAgICAgICAgICAgTE9HKFdlYkdMLCAiVGV4dHVyZSB1bml0IHNpemU9JXp1LCB2WyVkXT0lZC4g
TG9jYXRpb24gdHlwZSA9ICUwNFguIiwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpLCBpLCB2LT5kYXRh
KClbaV0sIGxvY2F0aW9uLT50eXBlKCkpOworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZh
bGlkIHRleHR1cmUgdW5pdCIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYsIHNpemUs
IDEpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNz
Q29udGV4dDNEOjpTQU1QTEVSX0NVQkUpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSk7ICsraSkgeworICAgICAgICAgICAgaWYgKCgo
R0MzRGludCopdilbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkp
KSB7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9j
YXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0y
ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHgsIHkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMmZ2
IiwgbG9jYXRpb24sIHYsIDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgp
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXpl
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVu
aWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChs
b2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9y
bTJpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShsb2NhdGlvbi0+bG9jYXRpb24o
KSwgeCwgeSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMml2
IiwgbG9jYXRpb24sIHYsIDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgp
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlm
b3JtMml2IiwgbG9jYXRpb24sIHYsIHNpemUsIDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAyLCB2KTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZs
b2F0IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAidW5pZm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoInVuaWZvcm0zZnYiLCBsb2NhdGlvbiwgdiwgMykpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVu
Z3RoKCkgLyAzLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplIC8gMywgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRGludCB6LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9u
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1
cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0zaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1
cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0
LT51bmlmb3JtM2kobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCAzKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCBz
aXplLCAzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMywgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdywgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
bmlmb3JtNGYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB4LCB5LCB6LCB3KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cygidW5pZm9ybTRmdiIsIGxvY2F0aW9uLCB2LCA0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAv
IDQsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDQpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHNpemUgLyA0LCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00
aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2Nh
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0g
bV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGkiLCAibG9jYXRpb24gbm90IGZv
ciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29u
dGV4dC0+dW5pZm9ybTRpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3KTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwgdiwg
NCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlv
biwgdiwgc2l6ZSwgNCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9y
bTRpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMo
InVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYs
IEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9y
bU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3Nl
LCB2LCBzaXplLCA0KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1h
dHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHRyYW5zcG9zZSwgdik7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0
cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYs
IDkpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDksIHRyYW5zcG9zZSwgdi0+ZGF0YSgp
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0
aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gOSwgdHJh
bnNwb3NlLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRy
aXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4NGZ2IiwgbG9jYXRpb24s
IHRyYW5zcG9zZSwgdiwgMTYpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDE2LCB0cmFu
c3Bvc2UsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1N
YXRyaXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCAxNikpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHNpemUgLyAxNiwgdHJhbnNwb3NlLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAo
IWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJ1c2VQcm9ncmFtIiwgcHJvZ3JhbSwgZGVsZXRlZCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAgcHJvZ3JhbSA9IDA7Cisg
ICAgaWYgKHByb2dyYW0gJiYgIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
c2VQcm9ncmFtIiwgInByb2dyYW0gbm90IHZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKG1fY3VycmVudFByb2dyYW0gIT0gcHJvZ3JhbSkgeworICAgICAgICBpZiAobV9j
dXJyZW50UHJvZ3JhbSkKKyAgICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQo
Z3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFt
OworICAgICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsK
KyAgICAgICAgaWYgKHByb2dyYW0pCisgICAgICAgICAgICBwcm9ncmFtLT5vbkF0dGFjaGVkKCk7
CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQcm9ncmFt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVdlYkdMT2JqZWN0KCJ2YWxpZGF0ZVByb2dyYW0iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+dmFsaWRhdGVQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0IHYwKQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhB
dHRyaWIxZiIsIGluZGV4LCAxLCB2MCwgMC4wZiwgMC4wZiwgMS4wZik7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0
MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIs
IGluZGV4LCB2LCAxKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sK
KyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGluZGV4LCB2LCBzaXpl
LCAxKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmKEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKK3sKKyAgICB2ZXJ0ZXhB
dHRyaWJmSW1wbCgidmVydGV4QXR0cmliMmYiLCBpbmRleCwgMiwgdjAsIHYxLCAwLjBmLCAxLjBm
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgi
dmVydGV4QXR0cmliMmZ2IiwgaW5kZXgsIHYsIDIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdD
M0RzaXplaSBzaXplKQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMmZ2
IiwgaW5kZXgsIHYsIHNpemUsIDIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYx
LCBHQzNEZmxvYXQgdjIpCit7CisgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjNm
IiwgaW5kZXgsIDMsIHYwLCB2MSwgdjIsIDEuMGYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYp
Cit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwg
Myk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgdmVydGV4
QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwgc2l6ZSwgMyk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYz
KQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZiIsIGluZGV4LCA0LCB2
MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhB
dHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjRmdiIsIGluZGV4LCB2LCA0KTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZl
cnRleEF0dHJpYjRmdiIsIGluZGV4LCB2LCBzaXplLCA0KTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQg
c2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0
cmlkZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
QllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZh
bGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbV9t
YXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbmRleCBvdXQg
b2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc2l6ZSA8IDEgfHwg
c2l6ZSA+IDQgfHwgc3RyaWRlIDwgMCB8fCBzdHJpZGUgPiAyNTUgfHwgb2Zmc2V0IDwgMCkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiYmFkIHNpemUsIHN0cmlkZSBvciBvZmZzZXQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZlcikgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgIm5vIGJvdW5kIEFSUkFZX0JVRkZFUiIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGVs
ZW1lbnRzIHRoZSBib3VuZCBidWZmZXIgY2FuIGhvbGQsIGdpdmVuIHRoZSBvZmZzZXQsIHNpemUs
IHR5cGUgYW5kIHN0cmlkZQorICAgIHVuc2lnbmVkIGludCB0eXBlU2l6ZSA9IHNpemVJbkJ5dGVz
KHR5cGUpOworICAgIGlmICghdHlwZVNpemUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAi
aW52YWxpZCB0eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKChzdHJpZGUg
JSB0eXBlU2l6ZSkgfHwgKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkgJSB0eXBlU2l6
ZSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJzdHJpZGUgb3Igb2Zmc2V0IG5v
dCB2YWxpZCBmb3IgdHlwZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RzaXpl
aSBieXRlc1BlckVsZW1lbnQgPSBzaXplICogdHlwZVNpemU7CisKKyAgICBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBieXRlc1BlckVsZW1lbnQs
IHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4o
b2Zmc2V0KSwgbV9ib3VuZEFycmF5QnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nh
c3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgidmlld3BvcnQiLCB3aWR0aCwgaGVpZ2h0
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dmlld3BvcnQoeCwgeSwgd2lkdGgs
IGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZUxvc3RDb250
ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJsb3NlQ29udGV4dCIsICJj
b250ZXh0IGFscmVhZHkgbG9zdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9j
b250ZXh0R3JvdXAtPmxvc2VDb250ZXh0R3JvdXAobW9kZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpsb3NlQ29udGV4dEltcGwoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0
Q29udGV4dE1vZGUgbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICBtX2NvbnRleHRMb3N0TW9k
ZSA9IG1vZGU7CisKKyAgICBpZiAobW9kZSA9PSBSZWFsTG9zdENvbnRleHQpIHsKKyAgICAgICAg
Ly8gSW5mb3JtIHRoZSBlbWJlZGRlciB0aGF0IGEgbG9zdCBjb250ZXh0IHdhcyByZWNlaXZlZC4g
SW4gcmVzcG9uc2UsIHRoZSBlbWJlZGRlciBtaWdodAorICAgICAgICAvLyBkZWNpZGUgdG8gdGFr
ZSBhY3Rpb24gc3VjaCBhcyBhc2tpbmcgdGhlIHVzZXIgZm9yIHBlcm1pc3Npb24gdG8gdXNlIFdl
YkdMIGFnYWluLgorICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY2FudmFzKCktPmRvY3VtZW50
KCkuZnJhbWUoKSkKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5kaWRMb3Nl
V2ViR0xDb250ZXh0KG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0
U3RhdHVzQVJCKCkpOworICAgIH0KKworICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsK
KworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgLy8gTWFrZSBhYnNvbHV0ZWx5
IHN1cmUgd2UgZG8gbm90IHJlZmVyIHRvIGFuIGFscmVhZHktZGVsZXRlZCB0ZXh0dXJlIG9yIGZy
YW1lYnVmZmVyLgorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRleHR1cmUyREJpbmRpbmco
MCk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKDApOwor
ICAgIH0KKworICAgIC8vIFRoZXJlIGlzIG5vIGRpcmVjdCB3YXkgdG8gY2xlYXIgZXJyb3JzIGZy
b20gYSBHTCBpbXBsZW1lbnRhdGlvbiBhbmQKKyAgICAvLyBsb29waW5nIHVudGlsIGdldEVycm9y
KCkgYmVjb21lcyBOT19FUlJPUiBtaWdodCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIGlmCisgICAg
Ly8gdGhlIGRyaXZlciBvciBjb250ZXh0IGltcGxlbWVudGF0aW9uIGhhZCBhIGJ1Zy4gU28sIGxv
b3AgYSByZWFzb25hYmx5CisgICAgLy8gbGFyZ2UgbnVtYmVyIG9mIHRpbWVzIHRvIGNsZWFyIGFu
eSBleGlzdGluZyBlcnJvcnMuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewor
ICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpO
T19FUlJPUikKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBDb25zb2xlRGlzcGxheVBy
ZWZlcmVuY2UgZGlzcGxheSA9IChtb2RlID09IFJlYWxMb3N0Q29udGV4dCkgPyBEaXNwbGF5SW5D
b25zb2xlOiBEb250RGlzcGxheUluQ29uc29sZTsKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMLCAibG9zZUNvbnRleHQiLCAiY29udGV4
dCBsb3N0IiwgZGlzcGxheSk7CisKKyAgICAvLyBEb24ndCBhbGxvdyByZXN0b3JhdGlvbiB1bmxl
c3MgdGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXMgYm90aCBiZWVuCisgICAgLy8gZGlzcGF0Y2hl
ZCBhbmQgaXRzIGRlZmF1bHQgYmVoYXZpb3IgcHJldmVudGVkLgorICAgIG1fcmVzdG9yZUFsbG93
ZWQgPSBmYWxzZTsKKworICAgIC8vIEFsd2F5cyBkZWZlciB0aGUgZGlzcGF0Y2ggb2YgdGhlIGNv
bnRleHQgbG9zdCBldmVudCwgdG8gaW1wbGVtZW50CisgICAgLy8gdGhlIHNwZWMgYmVoYXZpb3Ig
b2YgcXVldWVpbmcgYSB0YXNrLgorICAgIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIu
c3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VS
ZXN0b3JlQ29udGV4dCgpCit7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCBub3QgbG9zdCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Jlc3RvcmVBbGxvd2VkKSB7CisgICAgICAgIGlm
IChtX2NvbnRleHRMb3N0TW9kZSA9PSBTeW50aGV0aWNMb3N0Q29udGV4dCkKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
InJlc3RvcmVDb250ZXh0IiwgImNvbnRleHQgcmVzdG9yYXRpb24gbm90IGFsbG93ZWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9yZXN0b3JlVGltZXIuaXNBY3RpdmUo
KSkKKyAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCitQbGF0Zm9y
bUxheWVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorewor
ICAgIHJldHVybiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uKSA/IG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpIDogMDsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2Jq
ZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3Qob2JqZWN0KTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9i
amVjdCogb2JqZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBtX2Nv
bnRleHRHcm91cC0+YWRkT2JqZWN0KG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2JqZWN0KQor
eworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY29udGV4dE9iamVjdHMucmVtb3ZlKG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjphZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2Jq
ZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBtX2NvbnRleHRPYmpl
Y3RzLmFkZChvYmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNo
QW5kUmVtb3ZlQWxsT2JqZWN0cygpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKG1fY29udGV4dE9iamVjdHMuc2l6
ZSgpID4gMCkgeworICAgICAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVjdCo+OjppdGVyYXRv
ciBpdCA9IG1fY29udGV4dE9iamVjdHMuYmVnaW4oKTsKKyAgICAgICAgKCppdCktPmRldGFjaENv
bnRleHQoKTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoYXNQZW5k
aW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnN0b3AoKQoreworICAgIGlmICghaXNDb250ZXh0TG9zdCgpICYm
ICFtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pIHsKKyAgICAgICAgZm9yY2VMb3N0Q29udGV4
dChTeW50aGV0aWNMb3N0Q29udGV4dCk7CisgICAgICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHQz
RCgpOworICAgIH0KK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
Qm9vbGVhblBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBHQzNEYm9vbGVhbiB2YWx1
ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgJnZhbHVlKTsKKyAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Cit9CisKK1dlYkdM
R2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihH
QzNEZW51bSBwbmFtZSkKK3sKKyAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX1dSSVRFTUFTSykgeworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKDAsIDApOworICAgIH0KKyAgICBHQzNEYm9vbGVhbiB2YWx1ZVs0XSA9
IHswfTsKKyAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CisgICAgYm9v
bCBib29sVmFsdWVbNF07CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IDQ7ICsraWkpCisgICAg
ICAgIGJvb2xWYWx1ZVtpaV0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1ZVtpaV0pOworICAgIHJl
dHVybiBXZWJHTEdldEluZm8oYm9vbFZhbHVlLCA0KTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0RmxvYXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7Cisg
ICAgR0MzRGZsb2F0IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwg
JnZhbHVlKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKK30KKworV2ViR0xHZXRJ
bmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0SW50UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1l
KQoreworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYo
cG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Cit9CisKK1dl
YkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4
dC0+Z2V0SW50ZWdlcnYocG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBw
bmFtZSkKK3sKKyAgICBHQzNEZmxvYXQgdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250ZXh0LT5n
ZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAgIHN3
aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX1BPSU5U
X1NJWkVfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJ
RFRIX1JBTkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdFOgorICAg
ICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCTEVORF9DT0xPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVB
Ul9WQUxVRToKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Cit9CisKK1dlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0Mz
RGVudW0gcG5hbWUpCit7CisgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKKyAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsK
KyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJ
RVdQT1JUX0RJTVM6CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlZJRVdQT1JUOgorICAgICAgICBsZW5ndGggPSA0OworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKyAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBib29sIHByZXBhcmVUb0RyYXcpCit7CisgICAgYm9vbCByZXNl
dEFjdGl2ZVVuaXQgPSBmYWxzZTsKKyAgICBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25G
bGFnIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNp
b25GbGFnPigobV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVF
eHRlbnNpb25GbG9hdExpbmVhckVuYWJsZWQgOiAwKSB8IChtX29lc1RleHR1cmVIYWxmRmxvYXRM
aW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25IYWxmRmxvYXRMaW5lYXJFbmFi
bGVkIDogMCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbV90ZXh0dXJlVW5p
dHMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGlmICgobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1
cmUyREJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmctPm5lZWRU
b1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkKKyAgICAgICAgICAgIHx8IChtX3RleHR1cmVV
bml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0
dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkpIHsK
KyAgICAgICAgICAgIGlmIChpaSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7CisgICAgICAgICAg
ICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlpKTsKKyAgICAgICAgICAgICAgICByZXNl
dEFjdGl2ZVVuaXQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNldEFjdGl2ZVVu
aXQpIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoaWkpOworICAg
ICAgICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXgyRDsKKyAgICAgICAgICAgIFdlYkdMVGV4dHVyZSog
dGV4Q3ViZU1hcDsKKyAgICAgICAgICAgIGlmIChwcmVwYXJlVG9EcmF3KSB7CisgICAgICAgICAg
ICAgICAgU3RyaW5nIG1zZyhTdHJpbmcoInRleHR1cmUgYm91bmQgdG8gdGV4dHVyZSB1bml0ICIp
ICsgU3RyaW5nOjpudW1iZXIoaWkpCisgICAgICAgICAgICAgICAgICAgICsgIiBpcyBub3QgcmVu
ZGVyYWJsZS4gSXQgbWF5YmUgbm9uLXBvd2VyLW9mLTIgYW5kIGhhdmUgaW5jb21wYXRpYmxlIHRl
eHR1cmUgZmlsdGVyaW5nIG9yIGlzIG5vdCAndGV4dHVyZSBjb21wbGV0ZScsIgorICAgICAgICAg
ICAgICAgICAgICArICIgb3IgaXQgaXMgYSBmbG9hdC9oYWxmLWZsb2F0IHR5cGUgd2l0aCBsaW5l
YXIgZmlsdGVyaW5nIGFuZCB3aXRob3V0IHRoZSByZWxldmFudCBmbG9hdC9oYWxmLWZsb2F0IGxp
bmVhciBleHRlbnNpb24gZW5hYmxlZC4iKTsKKyAgICAgICAgICAgICAgICBwcmludEdMV2Fybmlu
Z1RvQ29uc29sZShmdW5jdGlvbk5hbWUsIG1zZy51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICB0ZXgyRCA9IG1fYmxhY2tUZXh0dXJlMkQuZ2V0KCk7CisgICAgICAgICAgICAgICAgdGV4
Q3ViZU1hcCA9IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC5nZXQoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgdGV4MkQgPSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJE
QmluZGluZy5nZXQoKTsKKyAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV90ZXh0dXJlVW5p
dHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1
cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVu
c2lvbnMpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0ZXgyRCkpOworICAgICAgICAgICAg
aWYgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJl
VW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4
dGVuc2lvbnMpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG9iamVjdE9yWmVybyh0ZXhDdWJlTWFwKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHJlc2V0QWN0aXZlVW5pdCkKKyAgICAgICAgbV9j
b250ZXh0LT5hY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCkKK3sK
KyAgICB1bnNpZ25lZCBjaGFyIGJsYWNrW10gPSB7MCwgMCwgMCwgMjU1fTsKKyAgICBtX2JsYWNr
VGV4dHVyZTJEID0gY3JlYXRlVGV4dHVyZSgpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmxhY2tUZXh0dXJlMkQtPm9iamVjdCgp
KTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKyAgICBtX2JsYWNrVGV4dHVyZUN1YmVNYXAgPSBj
cmVhdGVUZXh0dXJlKCk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgbV9ibGFja1RleHR1cmVDdWJlTWFwLT5vYmplY3QoKSk7
CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleElt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCwgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1ksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxh
Y2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgMCk7Cit9CisK
K2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZm
ZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpCit7CisgICAgdW5zaWduZWQgbmVl
ZCA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5Rm9ybWF0KHRleEludGVybmFs
Rm9ybWF0KTsKKyAgICB1bnNpZ25lZCBoYXZlID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5u
ZWxCaXRzQnlGb3JtYXQoY29sb3JCdWZmZXJGb3JtYXQpOworICAgIHJldHVybiAobmVlZCAmIGhh
dmUpID09IG5lZWQ7Cit9CisKK0dDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91
bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICByZXR1cm4gbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCk7CisgICAgaWYgKG1fYXR0
cmlidXRlcy5hbHBoYSkKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwor
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOworfQorCitpbnQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKQoreworICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAg
IHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJXaWR0aCgpOworICAg
IHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgp
IDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7Cit9CisK
K2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKQor
eworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JC
dWZmZXJIZWlnaHQoKTsKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVm
ZmVyLT5zaXplKCkuaGVpZ2h0KCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkuaGVpZ2h0KCk7Cit9CisKK1dlYkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKK3sKKyAgICBXZWJHTFRleHR1
cmUqIHRleHR1cmUgPSBudWxscHRyOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVy
ZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcuZ2V0KCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aOgorICAgICAgICBpZiAoIXVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVy
ZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUDoKKyAgICAgICAgaWYgKHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVuaXRzW21fYWN0
aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdl
dCIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKCF0ZXh0dXJlKQor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIHRleHR1cmUiKTsKKyAgICByZXR1cm4gdGV4dHVyZTsK
K30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlTG9jYXRpb25MZW5ndGgo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBj
b25zdCB1bnNpZ25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoID0gMjU2OworICAgIGlmIChzdHJp
bmcubGVuZ3RoKCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJsb2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlU2l6ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgeCwgR0MzRGludCB5KQor
eworICAgIGlmICh4IDwgMCB8fCB5IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic2l6ZSA8IDAi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzdHJpbmcubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoIXZhbGlkYXRlQ2hh
cmFjdGVyKHN0cmluZ1tpXSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzdHJpbmcgbm90IEFT
Q0lJIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRl
eEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQoreworICAgIHN3aXRjaCAoZm9ybWF0
KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlO
QU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlmIChtX3dlYmdsRGVwdGhUZXh0dXJlKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0cyBub3Qg
ZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OlNSR0JfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKKyAgICBk
ZWZhdWx0OgorICAgICAgICBpZiAoKGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUIHx8
IGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKQorICAgICAgICAgICAgJiYg
bV9leHRzUkdCKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgaWYgKG1fb2Vz
VGV4dHVyZUZsb2F0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUhh
bGZGbG9hdCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRl
eHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0lOVF8yNF84OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
OgorICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5
cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFZlcmlmeSB0aGF0
IHRoZSBjb21iaW5hdGlvbiBvZiBmb3JtYXQgYW5kIHR5cGUgaXMgc3VwcG9ydGVkLgorICAgIHN3
aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpI
QUxGX0ZMT0FUX09FUykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUg
Zm9yIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6U1JHQl9FWFQ6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNQorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkhBTEZfRkxPQVRfT0VTKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dHlwZSBmb3IgUkdCIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgorICAgICAgICBpZiAodHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAgICAgICAgICAgJiYgdHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNAorICAgICAgICAgICAg
JiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMQorICAg
ICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKKyAgICAgICAgICAg
ICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgUkdCQSBmb3JtYXQiKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlmICghbV93ZWJn
bERlcHRoVGV4dHVyZSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQuIERF
UFRIX0NPTVBPTkVOVCBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9TSE9SVAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQ
VEhfQ09NUE9ORU5UIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGlmIChsZXZlbCA+IDApIHsKKyAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxl
dmVsIG11c3QgYmUgMCBmb3IgREVQVEhfQ09NUE9ORU5UIGZvcm1hdCIpOworICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1
cmUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LiBERVBUSF9TVEVOQ0lM
IG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84KSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQVEhfU1RFTkNJ
TCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAobGV2ZWwgPiAwKSB7CisgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJl
IDAgZm9yIERFUFRIX1NURU5DSUwgZm9ybWF0Iik7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVs
IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhUZXh0dXJlTGV2
ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAg
ICAgICAgaWYgKGxldmVsID49IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIG9ubHkgY2hlY2tzIGlmIGxldmVsIGlzIGxlZ2FsLCBzbyB3ZSByZXR1cm4gdHJ1ZSBhbmQg
ZG9uJ3QKKyAgICAvLyBnZW5lcmF0ZSBJTlZBTElEX0VOVU0gaWYgdGFyZ2V0IGlzIGlsbGVnYWwu
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleEZ1bmNWYWxp
ZGF0aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKK3sKKyAg
ICAvLyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGZvcm1hdCBhbmQgdHlwZSBj
b21iaW5hdGlvbi4KKyAgICAvLyBUaGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMgdGFraW5nIEhU
TUxJbWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKKyAgICAvLyB0ZW1wb3JhcnkgZGF0YSBiYXNlZCBv
biB0aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxlZ2FsLgorICAgIGlmICghdmFsaWRh
dGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwgdHlwZSwgbGV2ZWwp
IHx8ICF2YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIEdDM0RpbnQgbWF4VGV4dHVyZVNpemVGb3JMZXZlbCA9
IHBvdygyLjAsIG1fbWF4VGV4dHVyZUxldmVsIC0gMSAtIGxldmVsKTsKKyAgICBzd2l0Y2ggKHRh
cmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgICAg
IGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgfHwgaGVpZ2h0ID4gbWF4VGV4dHVy
ZVNpemVGb3JMZXZlbCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBv
dXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPSBUZXhTdWJJbWFn
ZTJEICYmIHdpZHRoICE9IGhlaWdodCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoICE9
IGhlaWdodCBmb3IgY3ViZSBtYXAiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGhlaWdodCBoZXJlLiBGb3IgdGV4SW1h
Z2Ugd2lkdGggPT0gaGVpZ2h0LgorICAgICAgICAvLyBGb3IgdGV4U3ViSW1hZ2UgdGhhdCB3aWxs
IGJlIGNoZWNrZWQgd2hlbiBjaGVja2luZyB5b2Zmc2V0ICsgaGVpZ2h0IGlzIGluIHJhbmdlLgor
ICAgICAgICBpZiAod2lkdGggPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSBmb3IgY3ViZSBtYXAiKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGJvcmRlcikgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiYm9yZGVyICE9IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2ZWwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcq
IHBpeGVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE51bGxEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbikKK3sKKyAgICBpZiAoIXBpeGVscykgeworICAg
ICAgICBpZiAoZGlzcG9zaXRpb24gPT0gTnVsbEFsbG93ZWQpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZ1bmN0
aW9uTmFtZSwgZm9ybWF0LCB0eXBlLCBsZXZlbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICBpZiAocGl4ZWxzLT5nZXRU
eXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlw
ZSBVTlNJR05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIGlmIChwaXhlbHMt
PmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAidHlwZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50MTZBcnJh
eSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9h
dAorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlRmxvYXQzMikgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJheUJ1ZmZlclZpZXcg
bm90IEZsb2F0MzJBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRf
T0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgICAgIC8vIEFzIHBlciB0aGUgc3Bl
Y2lmaWNhdGlvbiwgQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSBudWxsIHdoZW4KKyAgICAgICAg
Ly8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBpcyBlbmFibGVkLgorICAgICAgICBpZiAocGl4ZWxz
KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgSEFMRl9GTE9BVF9PRVMgYnV0IEFy
cmF5QnVmZmVyVmlldyBpcyBub3QgTlVMTCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCB0b3RhbEJ5dGVzUmVxdWly
ZWQ7CisgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5
dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZ0b3Rh
bEJ5dGVzUmVxdWlyZWQsIDApOworICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9fRVJST1IpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVk
KSB7CisgICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKSB7CisgICAgICAgICAgZXJy
b3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lk
dGgsIGhlaWdodCwgMSwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7CisgICAgICAgICAgaWYgKHBp
eGVscy0+Ynl0ZUxlbmd0aCgpID09IHRvdGFsQnl0ZXNSZXF1aXJlZCkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJlcXVlc3Qg
d2l0aCBVTlBBQ0tfQUxJR05NRU5UID4gMSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVy
VmlldyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVzdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICBy
ZXR1cm4gbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRh
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscykKK3sKKyAg
ICBpZiAoIXBpeGVscykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXNSZXF1aXJlZCA9IDA7CisK
KyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQl9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENf
UkdCX0FNRDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4
OworICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKKyAgICAgICAgICAgIGNv
bnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OworICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Fjcm9z
cyA9ICh3aWR0aCArIGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxvY2tXaWR0aDsKKyAgICAgICAgICAg
IGludCBudW1CbG9ja3NEb3duID0gKGhlaWdodCArIGtCbG9ja0hlaWdodCAtIDEpIC8ga0Jsb2Nr
SGVpZ2h0OworICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51
bUJsb2Nrc0Rvd24gKiBrQmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1EOgor
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9B
TFBIQV9BTUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0g
MTY7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OworICAgICAgICAgICAg
Y29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgICAgICBpbnQgbnVtQmxvY2tzQWNy
b3NzID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOworICAgICAgICAg
ICAgaW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxv
Y2tIZWlnaHQ7CisgICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICog
bnVtQmxvY2tzRG93biAqIGtCbG9ja1NpemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7CisgICAgICAg
ICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA4OworICAgICAgICAgICAgY29uc3QgaW50IGtC
bG9ja0hlaWdodCA9IDg7CisgICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdp
ZHRoLCBrQmxvY2tXaWR0aCkgKiBzdGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiA0ICsg
NykgLyBrQmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OworICAgICAgICAgICAgY29uc3Qg
aW50IGtCbG9ja1dpZHRoID0gMTY7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0
ID0gODsKKyAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtCbG9j
a1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDIgKyA3KSAvIGtCbG9j
a1NpemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSAhPSBieXRlc1JlcXVpcmVkKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBjb3JyZWN0IGZv
ciBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJl
c3NlZFRleERpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKKyAgICAgICAgY29uc3QgR0MzRHNpemVp
IGtCbG9ja1dpZHRoID0gNDsKKyAgICAgICAgY29uc3QgR0MzRHNpemVpIGtCbG9ja0hlaWdodCA9
IDQ7CisgICAgICAgIGNvbnN0IEdDM0RpbnQgbWF4VGV4dHVyZVNpemUgPSB0YXJnZXQgPyBtX21h
eFRleHR1cmVTaXplIDogbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7CisgICAgICAgIGNvbnN0IEdD
M0RzaXplaSBtYXhDb21wcmVzc2VkRGltZW5zaW9uID0gbWF4VGV4dHVyZVNpemUgPj4gbGV2ZWw7
CisgICAgICAgIGJvb2wgd2lkdGhWYWxpZCA9IChsZXZlbCAmJiB3aWR0aCA9PSAxKSB8fCAobGV2
ZWwgJiYgd2lkdGggPT0gMikgfHwgKCEod2lkdGggJSBrQmxvY2tXaWR0aCkgJiYgd2lkdGggPD0g
bWF4Q29tcHJlc3NlZERpbWVuc2lvbik7CisgICAgICAgIGJvb2wgaGVpZ2h0VmFsaWQgPSAobGV2
ZWwgJiYgaGVpZ2h0ID09IDEpIHx8IChsZXZlbCAmJiBoZWlnaHQgPT0gMikgfHwgKCEoaGVpZ2h0
ICUga0Jsb2NrSGVpZ2h0KSAmJiBoZWlnaHQgPD0gbWF4Q29tcHJlc3NlZERpbWVuc2lvbik7Cisg
ICAgICAgIGlmICghd2lkdGhWYWxpZCB8fCAhaGVpZ2h0VmFsaWQpIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxldmVsIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1H
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1H
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lN
RzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9J
TUc6CisgICAgICAgIC8vIEhlaWdodCBhbmQgd2lkdGggbXVzdCBiZSBwb3dlcnMgb2YgMi4KKyAg
ICAgICAgaWYgKCh3aWR0aCAmICh3aWR0aCAtIDEpKSB8fCAoaGVpZ2h0ICYgKGhlaWdodCAtIDEp
KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBm
b3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4
U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgV2ViR0xU
ZXh0dXJlKiB0ZXgpCit7CisgICAgaWYgKHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwKSB7Cisg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IDwgMCIpOworICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1dp
ZHRoID0gNDsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgIGlm
ICgoeG9mZnNldCAlIGtCbG9ja1dpZHRoKSB8fCAoeW9mZnNldCAlIGtCbG9ja0hlaWdodCkpIHsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IG5vdCBtdWx0aXBs
ZSBvZiA0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHdpZHRoIC0geG9mZnNldCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKKyAgICAg
ICAgICAgIHx8IGhlaWdodCAtIHlvZmZzZXQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVs
KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2
YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZl
bCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKKyAgICB9CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzogeworICAgICAgICBpZiAoeG9mZnNl
dCB8fCB5b2Zmc2V0KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgYW5kIHlv
ZmZzZXQgbXVzdCBiZSB6ZXJvIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHdpZHRoICE9IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKKyAg
ICAgICAgICAgIHx8IGhlaWdodCAhPSB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2ggZXhpc3Rpbmcg
bGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdl
dCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7CisgICAgfQorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
bW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpQT0lOVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9TVFJJUDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1A6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TElORVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfU1RSSVA6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBkcmF3IG1vZGUiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBpZiAo
bV9zdGVuY2lsTWFzayAhPSBtX3N0ZW5jaWxNYXNrQmFjayB8fCBtX3N0ZW5jaWxGdW5jUmVmICE9
IG1fc3RlbmNpbEZ1bmNSZWZCYWNrIHx8IG1fc3RlbmNpbEZ1bmNNYXNrICE9IG1fc3RlbmNpbEZ1
bmNNYXNrQmFjaykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZyb250IGFuZCBiYWNrIHN0ZW5j
aWxzIHNldHRpbmdzIGRvIG5vdCBtYXRjaCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZ1bmMp
Cit7CisgICAgc3dpdGNoIChmdW5jKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TkVW
RVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVTUzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMRVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JFQVRFUjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9URVFVQUw6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxXQVlTOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZ1bmN0aW9uIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwcmludEdMRXJyb3JUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlm
ICghbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IC0tbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQ7CisgICAgcHJpbnRXYXJuaW5nVG9Db25z
b2xlKG1lc3NhZ2UpOworCisgICAgaWYgKCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCkK
KyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXZWJHTDogdG9vIG1hbnkgZXJyb3JzLCBu
byBtb3JlIGVycm9ycyB3aWxsIGJlIHJlcG9ydGVkIHRvIHRoZSBjb25zb2xlIGZvciB0aGlzIGNv
bnRleHQuIik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludFdhcm5pbmdU
b0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghY2FudmFzKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBjYW52YXMoKS0+ZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywgbWVzc2Fn
ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVy
RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGF0dGFjaG1lbnQpCit7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKKyAgICAgICAgICAgICYmIGF0dGFjaG1l
bnQgPiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAKKyAgICAgICAgICAgICYm
IGF0dGFjaG1lbnQgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0FUVEFDSE1FTlQwICsgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0dGFjaG1lbnQiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlVOQ19BREQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlVOQ19TVUJUUkFDVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1JFVkVSU0Vf
U1VCVFJBQ1Q6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1JTl9FWFQ6CisgICAgY2FzZSBFeHRl
bnNpb25zM0Q6Ok1BWF9FWFQ6CisgICAgICAgIGlmICgobW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1J
Tl9FWFQgfHwgbW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQpICYmICFtX2V4dEJsZW5kTWlu
TWF4KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCkKK3sKKyAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05F
X01JTlVTX0NPTlNUQU5UX0NPTE9SKQorICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlO
VVNfQ09OU1RBTlRfQUxQSEEpKQorICAgICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6Q09OU1RBTlRfQ09MT1IgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
Q09OU1RBTlRfQ09MT1IpCisgICAgICAgICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29udGV4dDNE
OjpDT05TVEFOVF9BTFBIQSB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19D
T05TVEFOVF9BTFBIQSkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW5jb21wYXRpYmxlIHNy
YyBhbmQgZHN0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHko
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApCit7CisgICAgc3dpdGNoIChj
YXApIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFX0NPVkVSQUdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlND
SVNTT1JfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgY2FwYWJpbGl0eSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
RmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQoreworICAgIGlmICgh
dikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5j
dGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWly
ZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1p
blNpemUpCit7CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1N
YXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCks
IHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNp
emVpIHNpemUsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCit7CisgICAgcmV0dXJuIHZhbGlk
YXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2Us
IHYsIHNpemUsIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sK
KyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFt
ZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxl
bmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6
ZSkKK3sKKyAgICBpZiAoIWxvY2F0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgImxvY2F0aW9uIGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
bm8gYXJyYXkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAodHJhbnNw
b3NlKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHNpemUgPCByZXF1aXJlZE1pblNpemUgfHwg
KHNpemUgJSByZXF1aXJlZE1pblNpemUpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNp
emUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworV2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRh
UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gdXNhZ2UpCit7CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7CisgICAgc3dpdGNo
ICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUjoKKyAgICAgICAgYnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKS5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSOgorICAgICAgICBidWZmZXIgPSBtX2JvdW5kQXJyYXlC
dWZmZXIuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAg
ICBpZiAoIWJ1ZmZlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgc3dpdGNoICh1c2FnZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNUQVRJQ19EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNf
RFJBVzoKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9CisgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB1c2FnZSIpOworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlm
ICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBpbWFnZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNvbnN0IFVSTCYg
dXJsID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3BvbnNlKCkudXJsKCk7CisgICAgaWYgKHVy
bC5pc051bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxpZCgpKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7CisgICAgICAgIGVjID0gU0VDVVJJ
VFlfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVu
dChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigp
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBjYW52YXMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbihjYW52YXMpKSB7CisgICAgICAgIGVj
ID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCisjaWYgRU5BQkxFKFZJREVPKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhU
TUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIXZp
ZGVvIHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpIHsKKyAgICAgICAgZWMgPSBTRUNV
UklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJ
bXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBl
eHBlY3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdD
M0RmbG9hdCB2MykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KKyAg
ICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIHN3aXRjaCAoZXhw
ZWN0ZWRTaXplKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVy
dGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IDI6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
NGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIFZlcnRleEF0dHJpYlZhbHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVydGV4QXR0
cmliVmFsdWVbaW5kZXhdOworICAgIGF0dHJpYlZhbHVlLnZhbHVlWzBdID0gdjA7CisgICAgYXR0
cmliVmFsdWUudmFsdWVbMV0gPSB2MTsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVsyXSA9IHYyOwor
ICAgIGF0dHJpYlZhbHVlLnZhbHVlWzNdID0gdjM7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgdmVydGV4QXR0cmliZnZJbXBsKGZ1bmN0aW9uTmFtZSwgaW5kZXgsIHYtPmRh
dGEoKSwgdi0+bGVuZ3RoKCksIGV4cGVjdGVkU2l6ZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIGV4
cGVjdGVkU2l6ZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXplKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBJ
biBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgorICAgIGlmIChpbmRl
eCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUp
IHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIx
ZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0
dHJpYjNmdihpbmRleCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0Ogor
ICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHYpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgVmVydGV4QXR0cmliVmFsdWUmIGF0
dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07CisgICAgYXR0cmliVmFsdWUu
aW5pdFZhbHVlKCk7CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGV4cGVjdGVkU2l6ZTsgKytp
aSkKKyAgICAgICAgYXR0cmliVmFsdWUudmFsdWVbaWldID0gdltpaV07Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppbml0VmVydGV4QXR0cmliMCgpCit7CisgICAgV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKyAgICAKKyAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXIgPSBjcmVhdGVCdWZmZXIoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
LT5vYmplY3QoKSk7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNE
OjpBUlJBWV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOworICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6QVJSQVlfQlVGRkVSLCAwKTsKKyAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KDApOworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOworICAgIG1fdmVydGV4
QXR0cmliMEJ1ZmZlclZhbHVlWzBdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJW
YWx1ZVsxXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSAwLjBm
OworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKKyAgICBtX2ZvcmNl
QXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOworICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZv
cmUgPSBmYWxzZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVsYXRlVmVy
dGV4QXR0cmliMChHQzNEc2l6ZWkgbnVtVmVydGV4KQoreworICAgIGNvbnN0IFdlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7CisgICAgY29uc3QgVmVydGV4QXR0
cmliVmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVswXTsKKyAgICBpZiAo
IW1fY3VycmVudFByb2dyYW0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBib29sIHVzaW5n
VmVydGV4QXR0cmliMCA9IG1fY3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCk7
CisgICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMCkKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwVXNl
ZEJlZm9yZSA9IHRydWU7CisgICAgaWYgKHN0YXRlLmVuYWJsZWQgJiYgdXNpbmdWZXJ0ZXhBdHRy
aWIwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF1c2luZ1ZlcnRleEF0dHJpYjAg
JiYgIW1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKKyAgICBtX2NvbnRleHQtPmJpbmRC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyLT5vYmplY3QoKSk7CisgICAgR0MzRHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0gKG51bVZl
cnRleCArIDEpICogNCAqIHNpemVvZihHQzNEZmxvYXQpOworICAgIGlmIChidWZmZXJEYXRhU2l6
ZSA+IG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUpIHsKKyAgICAgICAgbV9jb250ZXh0LT5idWZm
ZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFTaXplLCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyU2l6ZSA9IGJ1ZmZlckRhdGFTaXplOworICAgICAgICBtX2ZvcmNlQXR0cmliMEJ1
ZmZlclJlZmlsbCA9IHRydWU7CisgICAgfQorICAgIGlmICh1c2luZ1ZlcnRleEF0dHJpYjAKKyAg
ICAgICAgJiYgKG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsCisgICAgICAgICAgICB8fCBhdHRy
aWJWYWx1ZS52YWx1ZVswXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXQorICAgICAg
ICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFs
dWVbMV0KKyAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzJdICE9IG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzJdCisgICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVszXSAh
PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSkpIHsKKyAgICAgICAgYXV0byBidWZmZXJE
YXRhID0gc3RkOjptYWtlX3VuaXF1ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEpICogNCk7
CisgICAgICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAxOyArK2lp
KSB7CisgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNF0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsw
XTsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1ZS52YWx1
ZVsxXTsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBhdHRyaWJWYWx1ZS52
YWx1ZVsyXTsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgM10gPSBhdHRyaWJWYWx1
ZS52YWx1ZVszXTsKKyAgICAgICAgfQorICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVswXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOworICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXJWYWx1ZVsxXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzFdOworICAgICAgICBtX3ZlcnRleEF0dHJp
YjBCdWZmZXJWYWx1ZVsyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOworICAgICAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXJWYWx1ZVszXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOworICAgICAgICBt
X2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOworICAgICAgICBtX2NvbnRleHQtPmJ1
ZmZlclN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVyRGF0
YVNpemUsIGJ1ZmZlckRhdGEuZ2V0KCkpOworICAgIH0KKyAgICBtX2NvbnRleHQtPnZlcnRleEF0
dHJpYlBvaW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAwKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVT
dGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCkKK3sKKyAgICBjb25zdCBXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOworICAgIGlmIChzdGF0ZS5i
dWZmZXJCaW5kaW5nICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikgeworICAgICAgICBtX2NvbnRl
eHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3Ja
ZXJvKHN0YXRlLmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICAgICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWJQb2ludGVyKDAsIHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6
ZWQsIHN0YXRlLm9yaWdpbmFsU3RyaWRlLCBzdGF0ZS5vZmZzZXQpOworICAgIH0KKyAgICBtX2Nv
bnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0
T3JaZXJvKG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKSkpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCkKK3sKKyAgICBSZWZQdHI8V2Vi
R0xDb250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOworICAgIGNhbnZh
cygpLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZXZlbnQt
PmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExv
c3RDb250ZXh0ICYmIG1fcmVzdG9yZUFsbG93ZWQpCisgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0
YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVz
dG9yZUNvbnRleHQoKQoreworICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKKyAgICBpZiAoIW1f
Y29udGV4dExvc3QpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSByZW5kZXJpbmcgY29u
dGV4dCBpcyBub3QgcmVzdG9yZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZQor
ICAgIC8vIHdlYmdsY29udGV4dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVyLgorICAg
IC8vCisgICAgLy8gQmVjYXVzZSBvZiB0aGUgd2F5IG1fcmVzdG9yZVRpbWVyIGlzIHNldCB1cCBm
b3IgcmVhbCB2cy4gc3ludGhldGljIGxvc3QKKyAgICAvLyBjb250ZXh0IGV2ZW50cywgd2UgZG9u
J3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHRlc3Qgc2hvcnQtY2lyY3VpdGluZworICAgIC8v
IHRoZSByZXRyeSBsb29wIGZvciByZWFsIGNvbnRleHQgbG9zdCBldmVudHMuCisgICAgaWYgKCFt
X3Jlc3RvcmVBbGxvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgY29udGV4dExvc3RS
ZWFzb24gPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1
c0FSQigpOworCisgICAgc3dpdGNoIChjb250ZXh0TG9zdFJlYXNvbikgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOgorICAgICAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0
M0QgaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IGZ1bGx5CisgICAgICAgIC8vIHN1cHBvcnQgR0xf
QVJCX3JvYnVzdG5lc3Mgc2VtYW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhlCisgICAgICAg
IC8vIFdFQkdMX2xvc2VfY29udGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVuIHVzZWQgdG8g
Zm9yY2UKKyAgICAgICAgLy8gYSBsb3N0IGNvbnRleHQuCisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpHVUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6CisgICAgICAgIC8vIFRo
ZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250ZXh0IHdhcwor
ICAgICAgICAvLyBndWlsdHkgb2YgY2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQuCisgICAgICAg
IHByaW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBvbiB0aGUgcGFn
ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3JpbmcgdGhlIGNv
bnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpJTk5PQ0VO
VF9DT05URVhUX1JFU0VUX0FSQjoKKyAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRoZSBjb250ZXh0
IHRvIGJlIHJlc3RvcmVkLgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
VU5LTk9XTl9DT05URVhUX1JFU0VUX0FSQjoKKyAgICAgICAgLy8gV2Fybi4gSWRlYWxseSwgcHJv
bXB0IHRoZSB1c2VyIHRlbGxpbmcgdGhlbSB0aGF0IFdlYkdMCisgICAgICAgIC8vIGNvbnRlbnQg
b24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8KKyAgICAg
ICAgLy8gcmVzZXQgYW5kIGFzayB0aGVtIHdoZXRoZXIgdGhleSB3YW50IHRvIGNvbnRpbnVlIHJ1
bm5pbmcKKyAgICAgICAgLy8gdGhlIGNvbnRlbnQuIE9ubHkgaWYgdGhleSBzYXkgInllcyIgc2hv
dWxkIHdlIHN0YXJ0CisgICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUgY29udGV4
dC4KKyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBjb250ZW50
IG9uIHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvIHJlc2V0
Iik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEZyYW1lKiBmcmFtZSA9IGNhbnZhcygp
LT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFtZS0+c2V0
dGluZ3MoKS53ZWJHTEVuYWJsZWQoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmll
dyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47
CisgICAgU2Nyb2xsVmlldyogcm9vdCA9IHZpZXctPnJvb3QoKTsKKyAgICBpZiAoIXJvb3QpCisg
ICAgICAgIHJldHVybjsKKyAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gcm9vdC0+aG9zdFdp
bmRvdygpOworICAgIGlmICghaG9zdFdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUo
bV9hdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAg
IGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQpCisgICAgICAgICAgICBt
X3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3Qoc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICAvLyBUaGlzIGxpa2VseSBzaG91bGRuJ3QgaGFw
cGVuIGJ1dCBpcyB0aGUgYmVzdCB3YXkgdG8gcmVwb3J0IGl0IHRvIHRoZSBXZWJHTCBhcHAuCisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICIiLCAiZXJyb3IgcmVzdG9yaW5nIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3aXRoIHRo
ZSBuZXcgR3JhcGhpY3NDb250ZXh0M0QuCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKKyAgICAgICAgRHJhd2lu
Z0J1ZmZlcjo6UHJlc2VydmVEcmF3aW5nQnVmZmVyIHByZXNlcnZlID0gbV9hdHRyaWJ1dGVzLnBy
ZXNlcnZlRHJhd2luZ0J1ZmZlciA/IERyYXdpbmdCdWZmZXI6OlByZXNlcnZlIDogRHJhd2luZ0J1
ZmZlcjo6RGlzY2FyZDsKKyAgICAgICAgRHJhd2luZ0J1ZmZlcjo6QWxwaGFSZXF1aXJlbWVudCBh
bHBoYSA9IG1fYXR0cmlidXRlcy5hbHBoYSA/IERyYXdpbmdCdWZmZXI6OkFscGhhIDogRHJhd2lu
Z0J1ZmZlcjo6T3BhcXVlOworICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVmZmVy
OjpjcmVhdGUoY29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksIHByZXNlcnZl
LCBhbHBoYSk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0KKworICAg
IG1fY29udGV4dCA9IGNvbnRleHQ7CisgICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOworICAgIHNl
dHVwRmxhZ3MoKTsKKyAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOworICAgIGNhbnZhcygpLT5k
aXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmds
Y29udGV4dHJlc3RvcmVkRXZlbnQsIGZhbHNlLCB0cnVlLCAiIikpOworfQorCitTdHJpbmcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjplbnN1cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYgdGV4dCkgY29u
c3QKK3sKKyAgICBpZiAodGV4dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6ZW1wdHlT
dHJpbmcoKTsKKyAgICByZXR1cm4gdGV4dDsKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpM
UlVJbWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKKyAg
ICA6IG1fYnVmZmVycyhzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj5bXT4oY2FwYWNpdHkpKQorICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKK3sKK30KKworSW1h
Z2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1h
Z2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkg
PSAwOyBpIDwgbV9jYXBhY2l0eTsgKytpKSB7CisgICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBt
X2J1ZmZlcnNbaV0uZ2V0KCk7CisgICAgICAgIGlmICghYnVmKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGlmIChidWYtPmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBidWJibGVUb0Zyb250KGkpOworICAgICAgICByZXR1cm4gYnVmOwor
ICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSwgMSk7CisgICAgaWYgKCF0ZW1wKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBpID0gc3RkOjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOworICAgIG1fYnVmZmVy
c1tpXSA9IFdURjo6bW92ZSh0ZW1wKTsKKworICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZl
cnNbaV0uZ2V0KCk7CisgICAgYnViYmxlVG9Gcm9udChpKTsKKyAgICByZXR1cm4gYnVmOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxl
VG9Gcm9udChpbnQgaWR4KQoreworICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAwOyAtLWkpCisg
ICAgICAgIG1fYnVmZmVyc1tpXS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKK30KKworbmFtZXNwYWNl
IHsKKworICAgIFN0cmluZyBHZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJvcikKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNOgorICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX0VOVU0iOworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOgorICAgICAgICAgICAgcmV0
dXJuICJJTlZBTElEX1ZBTFVFIjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT046CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFUSU9OIjsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKKyAgICAgICAg
ICAgIHJldHVybiAiT1VUX09GX01FTU9SWSI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgorICAgICAgICAgICAgcmV0dXJuICJJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTDoKKyAgICAgICAgICAgIHJldHVybiAiQ09OVEVYVF9M
T1NUX1dFQkdMIjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiV2ViR0wgRVJST1IoJTA0eCkiLCBlcnJvcik7CisgICAgICAgIH0KKyAgICB9CisK
K30gLy8gbmFtZXNwYWNlIGFub255bW91cworCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNw
bGF5KQoreworICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlICYmIGRpc3BsYXkg
PT0gRGlzcGxheUluQ29uc29sZSkgeworICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6
ICIpICsgR2V0RXJyb3JTdHJpbmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25OYW1l
KSArICI6ICIgKyBTdHJpbmcoZGVzY3JpcHRpb24pOworICAgICAgcHJpbnRHTEVycm9yVG9Db25z
b2xlKHN0cik7CisgICAgfQorICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3Ip
OworfQorCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludEdMV2FybmluZ1RvQ29u
c29sZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQor
eworICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7CisgICAgICAgIFN0cmlu
ZyBzdHIgPSBTdHJpbmcoIldlYkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiAr
IFN0cmluZyhkZXNjcmlwdGlvbik7CisgICAgICAgIHByaW50R0xFcnJvclRvQ29uc29sZShzdHIp
OworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U3RlbmNpbFRl
c3QoKQoreworICAgIGJvb2wgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKKworICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBtX2ZyYW1l
YnVmZmVyQmluZGluZy0+aGFzU3RlbmNpbEJ1ZmZlcigpOworICAgIGVsc2UgeworICAgICAgICBS
ZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRy
aWJ1dGVzKCk7CisgICAgICAgIGhhdmVTdGVuY2lsQnVmZmVyID0gYXR0cmlidXRlcy0+c3RlbmNp
bCgpOworICAgIH0KKyAgICBlbmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfVEVTVCwKKyAgICAgICAgICAgICAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCAmJiBoYXZlU3Rl
bmNpbEJ1ZmZlcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVPckRp
c2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJs
ZSkKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwYWJpbGl0eSk7CisgICAgZWxzZQorICAg
ICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwYWJpbGl0eSk7Cit9CisKK0ludFNpemUgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQ2FudmFzU2l6ZSgpCit7CisgICAgcmV0dXJuIEludFNp
emUoY2xhbXAoY2FudmFzKCktPndpZHRoKCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzBdKSwKKyAg
ICAgICAgICAgICAgICAgICBjbGFtcChjYW52YXMoKS0+aGVpZ2h0KCksIDEsIG1fbWF4Vmlld3Bv
cnREaW1zWzFdKSk7Cit9CisKK0dDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhE
cmF3QnVmZmVycygpCit7CisgICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIGlmICghbV9tYXhEcmF3QnVmZmVycykKKyAgICAgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbV9tYXhE
cmF3QnVmZmVycyk7CisgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCisgICAgICAgIG1f
Y29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNf
RVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICAvLyBXRUJHTF9kcmF3X2J1ZmZlcnMg
cmVxdWlyZXMgTUFYX0NPTE9SX0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMuCisgICAg
cmV0dXJuIHN0ZDo6bWluKG1fbWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2htZW50cyk7
Cit9CisKK0dDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFjaG1l
bnRzKCkKK3sKKyAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCisgICAgICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9t
YXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2V0QmFja0RyYXdCdWZmZXIoR0MzRGVu
dW0gYnVmKQoreworICAgIG1fYmFja0RyYXdCdWZmZXIgPSBidWY7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCkKK3sKKyAgICBFeGNl
cHRpb25Db2RlIGVjOworICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpLCBlYyk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCit7CisgICAgRXhj
ZXB0aW9uQ29kZSBlYzsKKyAgICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
Zy5nZXQoKSwgZWMpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3VwcG9ydHNE
cmF3QnVmZmVycygpCit7CisgICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHND
aGVja2VkKSB7CisgICAgICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQg
PSB0cnVlOworICAgICAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gV2ViR0xEcmF3QnVmZmVy
czo6c3VwcG9ydGVkKHRoaXMpOworICAgIH0KKyAgICByZXR1cm4gbV9kcmF3QnVmZmVyc1N1cHBv
cnRlZDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXNJbnN0YW5j
ZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6
ZWkgcHJpbWNvdW50KQoreworICAgIGlmICghcHJpbWNvdW50KSB7CisgICAgICAgIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWxpZGF0
ZURyYXdBcnJheXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2RlLCBmaXJzdCwgY291bnQsIHBy
aW1jb3VudCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisK
KyAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzR0xF
UzJDb21wbGlhbnQoKSkKKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRl
VmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0
cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXNJbnN0
YW5jZWQiLCB0cnVlKTsKKworICAgIG1fY29udGV4dC0+ZHJhd0FycmF5c0luc3RhbmNlZChtb2Rl
LCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkK
KyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwg
ZmFsc2UpOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1j
b3VudCkKK3sKKyAgICBpZiAoIXByaW1jb3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5n
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVuc2lnbmVkIG51bUVsZW1lbnRz
ID0gMDsKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHNJbnN0YW5j
ZWQiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cywgcHJpbWNvdW50KSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAgIGJvb2wg
dmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFu
dCgpKSB7CisgICAgICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgICAgICB2YWxpZGF0ZUlu
ZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZz
ZXQpLCBudW1FbGVtZW50cyk7CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11
bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOworICAgIH0KKyAgICBpZiAoIWlzR0xFUzJO
UE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1l
bnRzSW5zdGFuY2VkIiwgdHJ1ZSk7CisKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50c0luc3Rh
bmNlZChtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwg
cHJpbWNvdW50KTsKKworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQpCisgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11
bGF0aW9uKCk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1Rl
eHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIGZhbHNlKTsKKyAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYkRpdmlz
b3IiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgs
IGRpdmlzb3IpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2
aXNvcik7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5n
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0wxUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNiw2MjM3ICsyNiwyMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxF
KFdFQkdMKQotCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCi0KLSNpbmNsdWRl
ICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5j
bHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFWFRT
aGFkZXJUZXh0dXJlTE9ELmgiCi0jaW5jbHVkZSAiRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5o
IgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRl
ICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIK
LSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1
ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1l
LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJPRVNFbGVtZW50SW5k
ZXhVaW50LmgiCi0jaW5jbHVkZSAiT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUg
Ik9FU1RleHR1cmVGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgot
I2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXQuaCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlSGFs
ZkZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNs
dWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKLSNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJHTEJ1ZmZlci5o
IgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKLSNpbmNsdWRlICJXZWJH
TENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0
dXJlUzNUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRl
ICJXZWJHTENvbnRleHRFdmVudC5oIgotI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0j
aW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdT
aGFkZXJzLmgiCi0jaW5jbHVkZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJH
TERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUg
IldlYkdMTG9zZUNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKLSNpbmNsdWRl
ICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCi0jaW5jbHVk
ZSAiV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCIKLSNpbmNsdWRlICJXZWJHTFRleHR1cmUu
aCIKLSNpbmNsdWRlICJXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgotCi0jaW5jbHVkZSA8cnVudGlt
ZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlICJXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgZG91YmxlIHNlY29uZHNCZXR3ZWVuUmVzdG9y
ZUF0dGVtcHRzID0gMS4wOwotY29uc3QgaW50IG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSA9
IDI1NjsKLQotbmFtZXNwYWNlIHsKLQotICAgIGNsYXNzIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5k
ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcihEcmF3
aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlckJp
bmRpbmcpCi0gICAgICAgICAgICA6IG1fZHJhd2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyKQotICAg
ICAgICAgICAgLCBtX2ZyYW1lYnVmZmVyQmluZGluZyhmcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5n
LiwgZm9yIG11bHRpc2FtcGxpbmcpCi0gICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5k
aW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIt
PmNvbW1pdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgflNjb3BlZERyYXdpbmdCdWZmZXJCaW5k
ZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYg
bmVlZGVkCi0gICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2lu
Z0J1ZmZlcikKLSAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICAg
ICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRHJhd2luZ0J1ZmZlciogbV9kcmF3aW5nQnVm
ZmVyOwotICAgICAgICBXZWJHTEZyYW1lYnVmZmVyKiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKLSAg
ICB9OwotCi0gICAgUGxhdGZvcm0zRE9iamVjdCBvYmplY3RPclplcm8oV2ViR0xPYmplY3QqIG9i
amVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPm9iamVjdCgpIDog
MDsKLSAgICB9Ci0KLSAgICB2b2lkIGNsaXAxRChHQzNEaW50IHN0YXJ0LCBHQzNEc2l6ZWkgcmFu
Z2UsIEdDM0RzaXplaSBzb3VyY2VSYW5nZSwgR0MzRGludCogY2xpcHBlZFN0YXJ0LCBHQzNEc2l6
ZWkqIGNsaXBwZWRSYW5nZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChjbGlwcGVkU3RhcnQgJiYg
Y2xpcHBlZFJhbmdlKTsKLSAgICAgICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAgICAgICAgcmFu
Z2UgKz0gc3RhcnQ7Ci0gICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAg
R0MzRGludCBlbmQgPSBzdGFydCArIHJhbmdlOwotICAgICAgICBpZiAoZW5kID4gc291cmNlUmFu
Z2UpCi0gICAgICAgICAgICByYW5nZSAtPSBlbmQgLSBzb3VyY2VSYW5nZTsKLSAgICAgICAgKmNs
aXBwZWRTdGFydCA9IHN0YXJ0OwotICAgICAgICAqY2xpcHBlZFJhbmdlID0gcmFuZ2U7Ci0gICAg
fQotCi0gICAgLy8gUmV0dXJucyBmYWxzZSBpZiBubyBjbGlwcGluZyBpcyBuZWNlc3NhcnksIGku
ZS4sIHgsIHksIHdpZHRoLCBoZWlnaHQgc3RheSB0aGUgc2FtZS4KLSAgICBib29sIGNsaXAyRChH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSBzb3VyY2VXaWR0aCwgR0MzRHNpemVpIHNvdXJjZUhl
aWdodCwKLSAgICAgICAgICAgICAgICBHQzNEaW50KiBjbGlwcGVkWCwgR0MzRGludCogY2xpcHBl
ZFksIEdDM0RzaXplaSogY2xpcHBlZFdpZHRoLCBHQzNEc2l6ZWkqY2xpcHBlZEhlaWdodCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChjbGlwcGVkWCAmJiBjbGlwcGVkWSAmJiBjbGlwcGVkV2lkdGgg
JiYgY2xpcHBlZEhlaWdodCk7Ci0gICAgICAgIGNsaXAxRCh4LCB3aWR0aCwgc291cmNlV2lkdGgs
IGNsaXBwZWRYLCBjbGlwcGVkV2lkdGgpOwotICAgICAgICBjbGlwMUQoeSwgaGVpZ2h0LCBzb3Vy
Y2VIZWlnaHQsIGNsaXBwZWRZLCBjbGlwcGVkSGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuICgqY2xp
cHBlZFggIT0geCB8fCAqY2xpcHBlZFkgIT0geSB8fCAqY2xpcHBlZFdpZHRoICE9IHdpZHRoIHx8
ICpjbGlwcGVkSGVpZ2h0ICE9IGhlaWdodCk7Ci0gICAgfQotCi0gICAgR0MzRGludCBjbGFtcChH
QzNEaW50IHZhbHVlLCBHQzNEaW50IG1pbiwgR0MzRGludCBtYXgpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUgPCBtaW4pCi0gICAgICAgICAgICB2YWx1ZSA9IG1pbjsKLSAgICAgICAgaWYgKHZh
bHVlID4gbWF4KQotICAgICAgICAgICAgdmFsdWUgPSBtYXg7Ci0gICAgICAgIHJldHVybiB2YWx1
ZTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBhIGNoYXJhY3RlciBiZWxvbmdzIHRv
IHRoZSBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbgotICAgIC8vIEdMU0wgRVMgMS4wIHNwZWMg
c2VjdGlvbiAzLjEuCi0gICAgYm9vbCB2YWxpZGF0ZUNoYXJhY3Rlcih1bnNpZ25lZCBjaGFyIGMp
Ci0gICAgewotICAgICAgICAvLyBQcmludGluZyBjaGFyYWN0ZXJzIGFyZSB2YWxpZCBleGNlcHQg
IiAkIGAgQCBcICcgREVMLgotICAgICAgICBpZiAoYyA+PSAzMiAmJiBjIDw9IDEyNgotICAgICAg
ICAgICAgJiYgYyAhPSAnIicgJiYgYyAhPSAnJCcgJiYgYyAhPSAnYCcgJiYgYyAhPSAnQCcgJiYg
YyAhPSAnXFwnICYmIGMgIT0gJ1wnJykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAvLyBIb3Jpem9udGFsIHRhYiwgbGluZSBmZWVkLCB2ZXJ0aWNhbCB0YWIsIGZvcm0gZmVlZCwg
Y2FycmlhZ2UgcmV0dXJuCi0gICAgICAgIC8vIGFyZSBhbHNvIHZhbGlkLgotICAgICAgICBpZiAo
YyA+PSA5ICYmIGMgPD0gMTMpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgaXNQcmVmaXhSZXNlcnZlZChjb25zdCBTdHJp
bmcmIG5hbWUpCi0gICAgewotICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCJnbF8iKSB8fCBu
YW1lLnN0YXJ0c1dpdGgoIndlYmdsXyIpIHx8IG5hbWUuc3RhcnRzV2l0aCgiX3dlYmdsXyIpKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICAvLyBTdHJpcHMgY29tbWVudHMgZnJvbSBzaGFkZXIgdGV4dC4gVGhpcyBhbGxvd3Mgbm9u
LUFTQ0lJIGNoYXJhY3RlcnMKLSAgICAvLyB0byBiZSB1c2VkIGluIGNvbW1lbnRzIHdpdGhvdXQg
cG90ZW50aWFsbHkgYnJlYWtpbmcgT3BlbkdMCi0gICAgLy8gaW1wbGVtZW50YXRpb25zIG5vdCBl
eHBlY3RpbmcgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBHTFNMIEVTIHNldC4KLSAgICBjbGFzcyBT
dHJpcENvbW1lbnRzIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFN0cmlwQ29tbWVudHMoY29uc3Qg
U3RyaW5nJiBzdHIpCi0gICAgICAgICAgICA6IG1fcGFyc2VTdGF0ZShCZWdpbm5pbmdPZkxpbmUp
Ci0gICAgICAgICAgICAsIG1fc291cmNlU3RyaW5nKHN0cikKLSAgICAgICAgICAgICwgbV9sZW5n
dGgoc3RyLmxlbmd0aCgpKQotICAgICAgICAgICAgLCBtX3Bvc2l0aW9uKDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHBhcnNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgcmVzdWx0
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOwot
ICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBib29sIGhhc01vcmVDaGFyYWN0ZXJz
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChtX3Bvc2l0aW9uIDwgbV9s
ZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBwYXJzZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHdoaWxlIChoYXNNb3JlQ2hhcmFjdGVycygpKSB7Ci0gICAgICAgICAgICAgICAg
cHJvY2VzcyhjdXJyZW50KCkpOwotICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MoKSBtaWdodCBh
ZHZhbmNlIHRoZSBwb3NpdGlvbi4KLSAgICAgICAgICAgICAgICBpZiAoaGFzTW9yZUNoYXJhY3Rl
cnMoKSkKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBwcm9jZXNzKFVDaGFyKTsKLQotICAgICAgICBib29sIHBl
ZWsoVUNoYXImIGNoYXJhY3RlcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1f
cG9zaXRpb24gKyAxID49IG1fbGVuZ3RoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGNoYXJhY3RlciA9IG1fc291cmNlU3RyaW5nW21fcG9zaXRpb24gKyAxXTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgVUNoYXIgY3Vy
cmVudCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk7Ci0gICAgICAgICAgICByZXR1cm4g
bV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbl07Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFk
dmFuY2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICArK21fcG9zaXRpb247Ci0gICAgICAgIH0K
LQotICAgICAgICBib29sIGlzTmV3bGluZShVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIERvbid0IGF0dGVtcHQgdG8gY2Fub25pY2FsaXplIG5ld2xpbmUg
cmVsYXRlZCBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgcmV0dXJuIChjaGFyYWN0ZXIgPT0gJ1xu
JyB8fCBjaGFyYWN0ZXIgPT0gJ1xyJyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGVtaXQo
VUNoYXIgY2hhcmFjdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2J1aWxkZXIuYXBwZW5k
KGNoYXJhY3Rlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBlbnVtIFBhcnNlU3RhdGUgewotICAg
ICAgICAgICAgLy8gSGF2ZSBub3Qgc2VlbiBhbiBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0
ZXIgeWV0IG9uCi0gICAgICAgICAgICAvLyB0aGlzIGxpbmUuIFBvc3NpYmxlIHRoYXQgd2UgbWln
aHQgc2VlIGEgcHJlcHJvY2Vzc29yCi0gICAgICAgICAgICAvLyBkaXJlY3RpdmUuCi0gICAgICAg
ICAgICBCZWdpbm5pbmdPZkxpbmUsCi0KLSAgICAgICAgICAgIC8vIEhhdmUgc2VlbiBhdCBsZWFz
dCBvbmUgQVNDSUkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyCi0gICAgICAgICAgICAvLyBvbiB0
aGlzIGxpbmUuCi0gICAgICAgICAgICBNaWRkbGVPZkxpbmUsCi0KLSAgICAgICAgICAgIC8vIEhh
bmRsaW5nIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gUGFzc2VzIHRocm91Z2ggYWxsCi0gICAg
ICAgICAgICAvLyBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuIERpc2FibGVz
IGNvbW1lbnQKLSAgICAgICAgICAgIC8vIHByb2Nlc3NpbmcuCi0gICAgICAgICAgICBJblByZXBy
b2Nlc3NvckRpcmVjdGl2ZSwKLQotICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBzaW5nbGUtbGlu
ZSBjb21tZW50LiBUaGUgY29tbWVudCB0ZXh0IGlzCi0gICAgICAgICAgICAvLyByZXBsYWNlZCB3
aXRoIGEgc2luZ2xlIHNwYWNlLgotICAgICAgICAgICAgSW5TaW5nbGVMaW5lQ29tbWVudCwKLQot
ICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBtdWx0aS1saW5lIGNvbW1lbnQuIE5ld2xpbmVzIGFy
ZSBwYXNzZWQKLSAgICAgICAgICAgIC8vIHRocm91Z2ggdG8gcHJlc2VydmUgbGluZSBudW1iZXJz
LgotICAgICAgICAgICAgSW5NdWx0aUxpbmVDb21tZW50Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
UGFyc2VTdGF0ZSBtX3BhcnNlU3RhdGU7Ci0gICAgICAgIFN0cmluZyBtX3NvdXJjZVN0cmluZzsK
LSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7Ci0gICAgICAgIHVuc2lnbmVkIG1fcG9zaXRpb247
Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgbV9idWlsZGVyOwotICAgIH07Ci0KLSAgICB2b2lkIFN0
cmlwQ29tbWVudHM6OnByb2Nlc3MoVUNoYXIgYykKLSAgICB7Ci0gICAgICAgIGlmIChpc05ld2xp
bmUoYykpIHsKLSAgICAgICAgICAgIC8vIE5vIG1hdHRlciB3aGF0IHN0YXRlIHdlIGFyZSBpbiwg
cGFzcyB0aHJvdWdoIG5ld2xpbmVzCi0gICAgICAgICAgICAvLyBzbyB3ZSBwcmVzZXJ2ZSBsaW5l
IG51bWJlcnMuCi0gICAgICAgICAgICBlbWl0KGMpOwotCi0gICAgICAgICAgICBpZiAobV9wYXJz
ZVN0YXRlICE9IEluTXVsdGlMaW5lQ29tbWVudCkKLSAgICAgICAgICAgICAgICBtX3BhcnNlU3Rh
dGUgPSBCZWdpbm5pbmdPZkxpbmU7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIFVDaGFyIHRlbXAgPSAwOwotICAgICAgICBzd2l0Y2ggKG1fcGFyc2VTdGF0ZSkg
ewotICAgICAgICBjYXNlIEJlZ2lubmluZ09mTGluZToKLSAgICAgICAgICAgIGlmIChXVEY6Omlz
QVNDSUlTcGFjZShjKSkgewotICAgICAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjID09ICcjJykgewot
ICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluUHJlcHJvY2Vzc29yRGlyZWN0aXZlOwot
ICAgICAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFRyYW5zaXRpb24gdG8gbm9ybWFsIHN0YXRlIGFuZCBy
ZS1oYW5kbGUgY2hhcmFjdGVyLgotICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gTWlkZGxlT2ZM
aW5lOwotICAgICAgICAgICAgcHJvY2VzcyhjKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgTWlkZGxlT2ZMaW5lOgotICAgICAgICAgICAgaWYgKGMgPT0gJy8nICYmIHBlZWso
dGVtcCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSAnLycpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5TaW5nbGVMaW5lQ29tbWVudDsKLSAgICAgICAgICAg
ICAgICAgICAgZW1pdCgnICcpOwotICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICh0ZW1wID09ICcqJykgewotICAgICAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUg
PSBJbk11bHRpTGluZUNvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNv
bW1lbnQgc3RhcnQgaW4gY2FzZSB0aGUgdXNlciBoYXMKLSAgICAgICAgICAgICAgICAgICAgLy8g
YW4gdW5jbG9zZWQgY29tbWVudCBhbmQgd2Ugd2FudCB0byBsYXRlcgotICAgICAgICAgICAgICAg
ICAgICAvLyBzaWduYWwgYW4gZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsK
LSAgICAgICAgICAgICAgICAgICAgZW1pdCgnKicpOwotICAgICAgICAgICAgICAgICAgICBhZHZh
bmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU6Ci0gICAgICAgICAgICAvLyBO
byBtYXR0ZXIgd2hhdCB0aGUgY2hhcmFjdGVyIGlzLCBqdXN0IHBhc3MgaXQKLSAgICAgICAgICAg
IC8vIHRocm91Z2guIERvIG5vdCBwYXJzZSBjb21tZW50cyBpbiB0aGlzIHN0YXRlLiBUaGlzCi0g
ICAgICAgICAgICAvLyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGxvbmcgdGVy
bSwgYnV0IGl0Ci0gICAgICAgICAgICAvLyBzaG91bGQgaGFuZGxlIHRoZSAjZXJyb3IgcHJlcHJv
Y2Vzc29yIGRpcmVjdGl2ZS4KLSAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIEluU2luZ2xlTGluZUNvbW1lbnQ6Ci0gICAgICAgICAgICAvLyBU
aGUgbmV3bGluZSBjb2RlIGF0IHRoZSB0b3Agb2YgdGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlCi0g
ICAgICAgICAgICAvLyBvZiByZXNldHRpbmcgb3VyIHN0YXRlIHdoZW4gd2UgZ2V0IG91dCBvZiB0
aGUKLSAgICAgICAgICAgIC8vIHNpbmdsZS1saW5lIGNvbW1lbnQuIFN3YWxsb3cgYWxsIG90aGVy
IGNoYXJhY3RlcnMuCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEluTXVsdGlM
aW5lQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09ICcqJyAmJiBwZWVrKHRlbXApICYmIHRl
bXAgPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgZW1pdCgnKicpOwotICAgICAgICAgICAgICAg
IGVtaXQoJy8nKTsKLSAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7
Ci0gICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBTd2FsbG93IGFsbCBvdGhlciBjaGFyYWN0ZXJz
LiBVbmNsZWFyIHdoZXRoZXIgd2UgbWF5Ci0gICAgICAgICAgICAvLyB3YW50IG9yIG5lZWQgdG8g
anVzdCBlbWl0IGEgc3BhY2UgcGVyIGNoYXJhY3RlciB0byB0cnkKLSAgICAgICAgICAgIC8vIHRv
IHByZXNlcnZlIGNvbHVtbiBudW1iZXJzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0gLy8gbmFtZXNwYWNlIGFub255bW91cwot
Ci1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2sgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RD
YWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIG9uQ29udGV4dExvc3QoKSBvdmVycmlkZSB7IG1fY29udGV4dC0+Zm9y
Y2VMb3N0Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OlJlYWxMb3N0Q29udGV4dCk7IH0K
LSAgICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2soKSB7fQotcHJp
dmF0ZToKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1fY29udGV4dDsKLX07Ci0KLWNsYXNz
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrIDogcHVibGljIEdyYXBo
aWNzQ29udGV4dDNEOjpFcnJvck1lc3NhZ2VDYWxsYmFjayB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0RXJy
b3JNZXNzYWdlQ2FsbGJhY2soV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjYikgOiBtX2NvbnRleHQo
Y2IpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIEdDM0RpbnQpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAobV9jb250ZXh0LT5t
X3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKQotICAgICAgICAgICAgbV9jb250ZXh0LT5wcmlu
dEdMRXJyb3JUb0NvbnNvbGUobWVzc2FnZSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYkdMUmVu
ZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrKCkgeyB9Ci1wcml2YXRlOgotICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OwotfTsKLQotc3RkOjp1bmlxdWVfcHRyPFdl
YkdMUmVuZGVyaW5nQ29udGV4dD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhcywgV2ViR0xDb250ZXh0QXR0cmlidXRlcyogYXR0cnMpCi17Ci0g
ICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzLT5kb2N1bWVudCgpOwotICAgIEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICAvLyBUaGUgRnJhbWVMb2FkZXJDbGllbnQgbWlnaHQgYmxvY2sgY3Jl
YXRpb24gb2YgYSBuZXcgV2ViR0wgY29udGV4dCBkZXNwaXRlIHRoZSBwYWdlIHNldHRpbmdzOyBp
bgotICAgIC8vIHBhcnRpY3VsYXIsIGlmIFdlYkdMIGNvbnRleHRzIHdlcmUgbG9zdCBvbmUgb3Ig
bW9yZSB0aW1lcyB2aWEgdGhlIEdMX0FSQl9yb2J1c3RuZXNzIGV4dGVuc2lvbi4KLSAgICBpZiAo
IWZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5hbGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndl
YkdMRW5hYmxlZCgpKSkgewotICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250
ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2
ZW50LCBmYWxzZSwgdHJ1ZSwgIldlYiBwYWdlIHdhcyBub3QgYWxsb3dlZCB0byBjcmVhdGUgYSBX
ZWJHTCBjb250ZXh0LiIpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
Ym9vbCBpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uID0gZmFsc2U7Ci0gICAgRG9jdW1lbnQmIHRv
cERvY3VtZW50ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKTsKLSAgICBQYWdlKiBwYWdlID0gdG9w
RG9jdW1lbnQucGFnZSgpOwotICAgIGlmIChwYWdlICYmICF0b3BEb2N1bWVudC51cmwoKS5pc0xv
Y2FsRmlsZSgpKSB7Ci0gICAgICAgIFdlYkdMTG9hZFBvbGljeSBwb2xpY3kgPSBwYWdlLT5tYWlu
RnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS53ZWJHTFBvbGljeUZvclVSTCh0b3BEb2N1bWVudC51
cmwoKSk7Ci0KLSAgICAgICAgaWYgKHBvbGljeSA9PSBXZWJHTEJsb2NrQ3JlYXRpb24pIHsKLSAg
ICAgICAgICAgIExPRyhXZWJHTCwgIlRoZSBwb2xpY3kgZm9yIHRoaXMgVVJMICglcykgaXMgdG8g
YmxvY2sgV2ViR0wuIiwgdG9wRG9jdW1lbnQudXJsKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocG9s
aWN5ID09IFdlYkdMUGVuZGluZ0NyZWF0aW9uKSB7Ci0gICAgICAgICAgICBMT0coV2ViR0wsICJX
ZWJHTCBwb2xpY3kgaXMgcGVuZGluZy4gTWF5IG5lZWQgdG8gYmUgcmVzb2x2ZWQgbGF0ZXIuIik7
Ci0gICAgICAgICAgICBpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMg
PSBhdHRycyA/IGF0dHJzLT5hdHRyaWJ1dGVzKCkgOiBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcygpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGlmICgh
ZnJhbWUtPnNldHRpbmdzKCkub3BlbkdMTXVsdGlzYW1wbGluZ0VuYWJsZWQoKSkKLSAgICAgICAg
ICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYXR0cmlidXRl
cy5ub0V4dGVuc2lvbnMgPSB0cnVlOwotICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBm
YWxzZTsKLSAgICBhdHRyaWJ1dGVzLnByZWZlckRpc2NyZXRlR1BVID0gdHJ1ZTsKLQotICAgIGlm
IChmcmFtZS0+c2V0dGluZ3MoKS5mb3JjZVNvZnR3YXJlV2ViR0xSZW5kZXJpbmcoKSkKLSAgICAg
ICAgYXR0cmlidXRlcy5mb3JjZVNvZnR3YXJlUmVuZGVyZXIgPSB0cnVlOwotCi0gICAgaWYgKHBh
Z2UpCi0gICAgICAgIGF0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbyA9IHBhZ2UtPmRldmljZVNj
YWxlRmFjdG9yKCk7Ci0KLSAgICBpZiAoaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgewotICAg
ICAgICBMT0coV2ViR0wsICJDcmVhdGUgYSBXZWJHTCBjb250ZXh0IHRoYXQgbG9va3MgcmVhbCwg
YnV0IHdpbGwgcmVxdWlyZSBhIHBvbGljeSByZXNvbHV0aW9uIGlmIHVzZWQuIik7Ci0gICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHJlbmRlcmluZ0NvbnRleHQo
bmV3IFdlYkdMUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGF0dHJpYnV0ZXMpKTsKLSAgICAgICAg
cmVuZGVyaW5nQ29udGV4dC0+c3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgICAgIHJldHVybiByZW5k
ZXJpbmdDb250ZXh0OwotICAgIH0KLQotICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1
bWVudC52aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpOwotICAgIFJlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhv
c3RXaW5kb3cpKTsKLQotICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpIHsKLSAgICAgICAgY2FudmFzLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwg
ZmFsc2UsIHRydWUsICJDb3VsZCBub3QgY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9u
cyA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKLSAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9y
dHMoIkdMX0VYVF9kZWJ1Z19tYXJrZXIiKSkKLSAgICAgICAgZXh0ZW5zaW9ucy0+cHVzaEdyb3Vw
TWFya2VyRVhUKCJXZWJHTFJlbmRlcmluZ0NvbnRleHQiKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHJlbmRlcmluZ0NvbnRleHQobmV3IFdlYkdMUmVuZGVy
aW5nQ29udGV4dChjYW52YXMsIGNvbnRleHQsIGF0dHJpYnV0ZXMpKTsKLSAgICByZW5kZXJpbmdD
b250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLQotICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0
OwotfQotCi1XZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1M
Q2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRyaWJ1dGVzKQotICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMp
Ci0gICAgLCBBY3RpdmVET01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKLSAgICAs
IG1fY29udGV4dCgwKQotICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCi0gICAgLCBtX2Rpc3BhdGNo
Q29udGV4dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNw
YXRjaENvbnRleHRMb3N0RXZlbnQpCi0gICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQotICAg
ICwgbV9yZXN0b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVz
dG9yZUNvbnRleHQpCi0gICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoMCkKLSAgICAsIG1fY29u
dGV4dExvc3QoZmFsc2UpCi0gICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29u
dGV4dCkKLSAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICwgbV9zeW50aGVzaXpl
ZEVycm9yc1RvQ29uc29sZSh0cnVlKQotICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93
ZWQobWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlKQotICAgICwgbV9pc1BlbmRpbmdQb2xpY3lS
ZXNvbHV0aW9uKHRydWUpCi0gICAgLCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24oZmFs
c2UpCi17Ci19Ci0KLVdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQsCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmli
dXRlcykKLSAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQocGFzc2VkQ2FudmFzKQotICAgICwg
QWN0aXZlRE9NT2JqZWN0KCZwYXNzZWRDYW52YXMtPmRvY3VtZW50KCkpCi0gICAgLCBtX2NvbnRl
eHQoY29udGV4dCkKLSAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQotICAgICwgbV9kaXNwYXRjaENv
bnRleHRMb3N0RXZlbnRUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0
Y2hDb250ZXh0TG9zdEV2ZW50KQotICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKLSAgICAs
IG1fcmVzdG9yZVRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJlc3Rv
cmVDb250ZXh0KQotICAgICwgbV9nZW5lcmF0ZWRJbWFnZUNhY2hlKDQpCi0gICAgLCBtX2NvbnRl
eHRMb3N0KGZhbHNlKQotICAgICwgbV9jb250ZXh0TG9zdE1vZGUoU3ludGhldGljTG9zdENvbnRl
eHQpCi0gICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAsIG1fc3ludGhlc2l6ZWRF
cnJvcnNUb0NvbnNvbGUodHJ1ZSkKLSAgICAsIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2Vk
KG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSkKLSAgICAsIG1faXNQZW5kaW5nUG9saWN5UmVz
b2x1dGlvbihmYWxzZSkKLSAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxz
ZSkKLXsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKLSAgICBtX2NvbnRleHRHcm91cCA9IFdlYkdM
Q29udGV4dEdyb3VwOjpjcmVhdGUoKTsKLSAgICBtX2NvbnRleHRHcm91cC0+YWRkQ29udGV4dCh0
aGlzKTsKLQotICAgIG1fbWF4Vmlld3BvcnREaW1zWzBdID0gbV9tYXhWaWV3cG9ydERpbXNbMV0g
PSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9W
SUVXUE9SVF9ESU1TLCBtX21heFZpZXdwb3J0RGltcyk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLQotICAgIHNldHVwRmxhZ3Mo
KTsKLSAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQotewotICAgIEFTU0VSVCghbV9jb250ZXh0
TG9zdCk7Ci0gICAgbV9uZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgbV9tYXJrZWRDYW52YXNEaXJ0
eSA9IGZhbHNlOwotICAgIG1fYWN0aXZlVGV4dHVyZVVuaXQgPSAwOwotICAgIG1fcGFja0FsaWdu
bWVudCA9IDQ7Ci0gICAgbV91bnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1fdW5wYWNrRmxpcFkg
PSBmYWxzZTsKLSAgICBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTsKLSAgICBtX3Vu
cGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVG
QVVMVF9XRUJHTDsKLSAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSAwOwotICAgIG1fY3VycmVudFBy
b2dyYW0gPSAwOwotICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gMDsKLSAgICBtX3JlbmRlcmJ1
ZmZlckJpbmRpbmcgPSAwOwotICAgIG1fZGVwdGhNYXNrID0gdHJ1ZTsKLSAgICBtX3N0ZW5jaWxF
bmFibGVkID0gZmFsc2U7Ci0gICAgbV9zdGVuY2lsTWFzayA9IDB4RkZGRkZGRkY7Ci0gICAgbV9z
dGVuY2lsTWFza0JhY2sgPSAweEZGRkZGRkZGOwotICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSAwOwot
ICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gMDsKLSAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IDB4
RkZGRkZGRkY7Ci0gICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gMHhGRkZGRkZGRjsKLSAgICBt
X2xheWVyQ2xlYXJlZCA9IGZhbHNlOwotICAgIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2Vk
ID0gbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlOwotICAgIAotICAgIG1fY2xlYXJDb2xvclsw
XSA9IG1fY2xlYXJDb2xvclsxXSA9IG1fY2xlYXJDb2xvclsyXSA9IG1fY2xlYXJDb2xvclszXSA9
IDA7Ci0gICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOwotICAgIG1fY2xlYXJEZXB0aCA9IDE7
Ci0gICAgbV9jbGVhclN0ZW5jaWwgPSAwOwotICAgIG1fY29sb3JNYXNrWzBdID0gbV9jb2xvck1h
c2tbMV0gPSBtX2NvbG9yTWFza1syXSA9IG1fY29sb3JNYXNrWzNdID0gdHJ1ZTsKLQotICAgIEdD
M0RpbnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0gICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBtX3RleHR1cmVVbml0
cy5jbGVhcigpOwotICAgIG1fdGV4dHVyZVVuaXRzLnJlc2l6ZShudW1Db21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKTsKLQotICAgIEdDM0RpbnQgbnVtVmVydGV4QXR0cmlicyA9IDA7Ci0gICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJT
LCAmbnVtVmVydGV4QXR0cmlicyk7Ci0gICAgbV9tYXhWZXJ0ZXhBdHRyaWJzID0gbnVtVmVydGV4
QXR0cmliczsKLSAgICAKLSAgICBtX21heFRleHR1cmVTaXplID0gMDsKLSAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9tYXhU
ZXh0dXJlU2l6ZSk7Ci0gICAgbV9tYXhUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1
dGVMZXZlbENvdW50KG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4VGV4dHVyZVNpemUpOwotICAgIG1f
bWF4Q3ViZU1hcFRleHR1cmVTaXplID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFLCAmbV9tYXhDdWJlTWFw
VGV4dHVyZVNpemUpOwotICAgIG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVy
ZTo6Y29tcHV0ZUxldmVsQ291bnQobV9tYXhDdWJlTWFwVGV4dHVyZVNpemUsIG1fbWF4Q3ViZU1h
cFRleHR1cmVTaXplKTsKLSAgICBtX21heFJlbmRlcmJ1ZmZlclNpemUgPSAwOwotICAgIG1fY29u
dGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0la
RSwgJm1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7Ci0KLSAgICAvLyBUaGVzZSB0d28gdmFsdWVzIGZy
b20gRVhUX2RyYXdfYnVmZmVycyBhcmUgbGF6aWx5IHF1ZXJpZWQuCi0gICAgbV9tYXhEcmF3QnVm
ZmVycyA9IDA7Ci0gICAgbV9tYXhDb2xvckF0dGFjaG1lbnRzID0gMDsKLQotICAgIG1fYmFja0Ry
YXdCdWZmZXIgPSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzsKLSAgICBtX2RyYXdCdWZmZXJzV2Vi
R0xSZXF1aXJlbWVudHNDaGVja2VkID0gZmFsc2U7Ci0gICAgbV9kcmF3QnVmZmVyc1N1cHBvcnRl
ZCA9IGZhbHNlOwotCi0gICAgbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QgPSBXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTOjpjcmVhdGUodGhpcywgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmFvVHlwZURlZmF1bHQpOwotICAgIGFkZENvbnRleHRPYmplY3QobV9kZWZhdWx0VmVydGV4QXJy
YXlPYmplY3QuZ2V0KCkpOwotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG1fZGVmYXVs
dFZlcnRleEFycmF5T2JqZWN0OwotICAgIAotICAgIG1fdmVydGV4QXR0cmliVmFsdWUucmVzaXpl
KG1fbWF4VmVydGV4QXR0cmlicyk7Ci0KLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0g
ICAgICAgIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwotICAgIGlmICghaXNHTEVT
MkNvbXBsaWFudCgpKQotICAgICAgICBpbml0VmVydGV4QXR0cmliMCgpOwotCi0gICAgSW50U2l6
ZSBjYW52YXNTaXplID0gY2xhbXBlZENhbnZhc1NpemUoKTsKLSAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KGNhbnZhc1NpemUpOwotCi0gICAg
bV9jb250ZXh0LT5yZXNoYXBlKGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQo
KSk7Ci0gICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBjYW52YXNTaXplLndpZHRoKCksIGNh
bnZhc1NpemUuaGVpZ2h0KCkpOwotICAgIG1fY29udGV4dC0+c2Npc3NvcigwLCAwLCBjYW52YXNT
aXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOwotCi0gICAgbV9jb250ZXh0LT5zZXRD
b250ZXh0TG9zdENhbGxiYWNrKHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0
TG9zdENhbGxiYWNrPih0aGlzKSk7Ci0gICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VDYWxs
YmFjayhzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNh
bGxiYWNrPih0aGlzKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzZXR1cEZs
YWdzKCkKLXsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKLQotICAgIGlmIChQYWdlKiBwYWdlID0g
Y2FudmFzKCktPmRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICBtX3N5bnRoZXNpemVkRXJyb3Jz
VG9Db25zb2xlID0gcGFnZS0+c2V0dGluZ3MoKS53ZWJHTEVycm9yc1RvQ29uc29sZUVuYWJsZWQo
KTsKLQotICAgIG1faXNHTEVTMkNvbXBsaWFudCA9IG1fY29udGV4dC0+aXNHTEVTMkNvbXBsaWFu
dCgpOwotICAgIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcyA9IG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3N0cmljdF9hdHRy
aWJzIik7Ci0gICAgbV9pc1Jlc291cmNlU2FmZSA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3Jlc291cmNlX3NhZmUiKTsKLSAgICBpZiAobV9pc0dM
RVMyQ29tcGxpYW50KSB7Ci0gICAgICAgIG1faXNHTEVTMk5QT1RTdHJpY3QgPSAhbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfbnBvdCIpOwotICAg
ICAgICBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmlzRW5hYmxlZCgiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+aXNFbmFibGVkKCJHTF9BUkJfdGV4dHVyZV9ub25fcG93ZXJfb2ZfdHdvIik7Ci0gICAg
ICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+aXNFbmFibGVkKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICB9Ci0gICAg
bV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
aXNFbmFibGVkKCJHTF9FWFRfcm9idXN0bmVzcyIpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpIGNvbnN0Ci17Ci0gICAgaWYgKFBh
Z2UqIHBhZ2UgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybiBw
YWdlLT5zZXR0aW5ncygpLnByaXZpbGVnZWRXZWJHTEV4dGVuc2lvbnNFbmFibGVkKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQotewotICAgIGlmICghbV9jb21wcmVz
c2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KSkKLSAgICAgICAgbV9jb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdHMuYXBwZW5kKGZvcm1hdCk7Ci19Ci0KLVdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6fldlYkdMUmVuZGVyaW5nQ29udGV4dCgpCi17Ci0gICAgLy8gUmVtb3ZlIGFsbCByZWZlcmVu
Y2VzIHRvIFdlYkdMT2JqZWN0cyBzbyBpZiB0aGV5IGFyZSB0aGUgbGFzdCByZWZlcmVuY2UKLSAg
ICAvLyB0aGV5IHdpbGwgYmUgZnJlZWQgYmVmb3JlIHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3Zl
ZCBmcm9tIHRoZSBjb250ZXh0IGdyb3VwLgotICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IG51bGxw
dHI7Ci0gICAgbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QgPSBudWxscHRyOwotICAgIG1fYm91
bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
ID0gbnVsbHB0cjsKLSAgICBtX2N1cnJlbnRQcm9ncmFtID0gbnVsbHB0cjsKLSAgICBtX2ZyYW1l
YnVmZmVyQmluZGluZyA9IG51bGxwdHI7Ci0gICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gbnVs
bHB0cjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZTJEQmluZGluZyA9IG51
bGxwdHI7Ci0gICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZyA9
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgbV9ibGFja1RleHR1cmUyRCA9IG51bGxwdHI7Ci0gICAg
bV9ibGFja1RleHR1cmVDdWJlTWFwID0gbnVsbHB0cjsKLQotICAgIGlmICghbV9pc1BlbmRpbmdQ
b2xpY3lSZXNvbHV0aW9uKSB7Ci0gICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsK
LSAgICAgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCk7Ci0gICAgICAgIG1fY29udGV4dEdy
b3VwLT5yZW1vdmVDb250ZXh0KHRoaXMpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlc3Ryb3lHcmFwaGljc0NvbnRleHQzRCgpCi17Ci0gICAgaWYgKG1faXNQZW5k
aW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGRyYXdp
bmcgYnVmZmVyIGhvbGRzIGEgY29udGV4dCByZWZlcmVuY2UuIEl0IG11c3QgYWxzbyBiZSBkZXN0
cm95ZWQKLSAgICAvLyBpbiBvcmRlciBmb3IgdGhlIGNvbnRleHQgdG8gYmUgcmVsZWFzZWQuCi0g
ICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLmNsZWFyKCk7
Ci0KLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExv
c3RDYWxsYmFjayhudWxscHRyKTsKLSAgICAgICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VD
YWxsYmFjayhudWxscHRyKTsKLSAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7Ci0gICAgfQotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKLXsKLSAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29u
dGV4dC0+bWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQot
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPm1hcmtDb250ZW50c0NoYW5nZWQoKTsKLQotICAgIG1f
bGF5ZXJDbGVhcmVkID0gZmFsc2U7Ci0gICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMo
KS0+cmVuZGVyQm94KCk7Ci0gICAgaWYgKGlzQWNjZWxlcmF0ZWQoKSAmJiByZW5kZXJCb3ggJiYg
cmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKLSAgICAgICAgbV9tYXJr
ZWRDYW52YXNEaXJ0eSA9IHRydWU7Ci0gICAgICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdl
KCk7Ci0gICAgICAgIHJlbmRlckJveC0+Y29udGVudENoYW5nZWQoQ2FudmFzQ2hhbmdlZCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5KSB7Ci0gICAgICAg
ICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGNhbnZhcygpLT5k
aWREcmF3KEZsb2F0UmVjdChGbG9hdFBvaW50KDAsIDApLCBjbGFtcGVkQ2FudmFzU2l6ZSgpKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVh
cklmQ29tcG9zaXRlZChHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fY29udGV4
dC0+bGF5ZXJDb21wb3NpdGVkKCkgfHwgbV9sYXllckNsZWFyZWQKLSAgICAgICAgfHwgbV9hdHRy
aWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciB8fCAobWFzayAmJiBtX2ZyYW1lYnVmZmVyQmlu
ZGluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxXZWJHTENvbnRleHRB
dHRyaWJ1dGVzPiBjb250ZXh0QXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0K
LSAgICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVhciB0
aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xlYXIuCi0gICAgYm9vbCBjb21iaW5lZENsZWFy
ID0gbWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsKLQotICAgIG1fY29udGV4dC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBpZiAoY29tYmluZWRDbGVhciAm
JiAobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkKLSAgICAgICAg
bV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY29sb3JNYXNrWzBdID8gbV9jbGVhckNvbG9yWzBdIDog
MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzFdID8gbV9jbGVh
ckNvbG9yWzFdIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNr
WzJdID8gbV9jbGVhckNvbG9yWzJdIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY29sb3JNYXNrWzNdID8gbV9jbGVhckNvbG9yWzNdIDogMCk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgbV9jb250ZXh0LT5jb2xv
ck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgR0MzRGJpdGZpZWxkIGNsZWFyTWFz
ayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOwotICAgIGlmIChjb250ZXh0
QXR0cmlidXRlcy0+ZGVwdGgoKSkgewotICAgICAgICBpZiAoIWNvbWJpbmVkQ2xlYXIgfHwgIW1f
ZGVwdGhNYXNrIHx8ICEobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklU
KSkKLSAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxLjBmKTsKLSAgICAgICAgY2xl
YXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUOwotICAgICAgICBt
X2NvbnRleHQtPmRlcHRoTWFzayh0cnVlKTsKLSAgICB9Ci0gICAgaWYgKGNvbnRleHRBdHRyaWJ1
dGVzLT5zdGVuY2lsKCkpIHsKLSAgICAgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsICYgbV9zdGVuY2lsTWFzayk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOwotICAgICAg
ICBjbGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVDsKLSAg
ICAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVCwgMHhGRkZGRkZGRik7Ci0gICAgfQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+Y2xlYXJGcmFtZWJ1ZmZlcnMoY2xlYXJNYXNrKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAw
KTsKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1hc2spOwotICAgIH0KLQotICAgIHJl
c3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0g
ICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Ci0gICAg
bV9sYXllckNsZWFyZWQgPSB0cnVlOwotCi0gICAgcmV0dXJuIGNvbWJpbmVkQ2xlYXI7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlU3RhdGVBZnRlckNsZWFyKCkKLXsK
LSAgICAvLyBSZXN0b3JlIHRoZSBzdGF0ZSB0aGF0IHRoZSBjb250ZXh0IHNldC4KLSAgICBpZiAo
bV9zY2lzc29yRW5hYmxlZCkKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci0gICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY2xlYXJD
b2xvclswXSwgbV9jbGVhckNvbG9yWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Ns
ZWFyQ29sb3JbMl0sIG1fY2xlYXJDb2xvclszXSk7Ci0gICAgbV9jb250ZXh0LT5jb2xvck1hc2so
bV9jb2xvck1hc2tbMF0sIG1fY29sb3JNYXNrWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY29sb3JNYXNrWzJdLCBtX2NvbG9yTWFza1szXSk7Ci0gICAgbV9jb250ZXh0LT5jbGVhckRl
cHRoKG1fY2xlYXJEZXB0aCk7Ci0gICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwobV9jbGVhclN0
ZW5jaWwpOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRl
eHQzRDo6RlJPTlQsIG1fc3RlbmNpbE1hc2spOwotICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKG1f
ZGVwdGhNYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtMYXllckNv
bXBvc2l0ZWQoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2NvbnRleHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkK
LXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoY2FudmFzKCktPmRvY3VtZW50KCkucHJpbnRpbmcoKSkKLSAgICAgICAgY2FudmFz
KCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOwotCi0gICAgLy8gVW50aWwgdGhlIGNhbnZhcyBp
cyB3cml0dGVuIHRvIGJ5IHRoZSBhcHBsaWNhdGlvbiwgdGhlIGNsZWFyIHRoYXQKLSAgICAvLyBo
YXBwZW5lZCBhZnRlciBpdCB3YXMgY29tcG9zaXRlZCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUg
Y29tcG9zaXRvci4KLSAgICBpZiAobV9jb250ZXh0LT5sYXllckNvbXBvc2l0ZWQoKSAmJiAhbV9h
dHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQtPnBh
aW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhjYW52YXMoKS0+YnVmZmVyKCkpOwotCi0gICAg
ICAgIGNhbnZhcygpLT5tYWtlUHJlc2VudGF0aW9uQ29weSgpOwotICAgIH0gZWxzZQotICAgICAg
ICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7Ci0gICAgY2xlYXJJZkNvbXBvc2l0
ZWQoKTsKLQotICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9sYXllckNsZWFyZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdlKCk7Ci0g
ICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKLSAgICBtX2NvbnRleHQtPnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSwgbV9kcmF3aW5n
QnVmZmVyLmdldCgpKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAgaWYg
KG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFt
ZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQot
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+
IGltYWdlRGF0YSA9IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEo
bV9kcmF3aW5nQnVmZmVyLmdldCgpKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAg
ICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclpl
cm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdlRGF0
YTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFRoaXMgaXMgYW4gYXBwcm94aW1hdGlvbiBiZWNhdXNlIGF0IFdl
YkdMUmVuZGVyaW5nQ29udGV4dCBsZXZlbCB3ZSBkb24ndAotICAgIC8vIGtub3cgaWYgdGhlIHVu
ZGVybHlpbmcgRkJPIHVzZXMgdGV4dHVyZXMgb3IgcmVuZGVyYnVmZmVycy4KLSAgICBHQzNEaW50
IG1heFNpemUgPSBzdGQ6Om1pbihtX21heFRleHR1cmVTaXplLCBtX21heFJlbmRlcmJ1ZmZlclNp
emUpOwotICAgIC8vIExpbWl0IGRyYXdpbmcgYnVmZmVyIHNpemUgdG8gNGsgdG8gYXZvaWQgbWVt
b3J5IGV4aGF1c3Rpb24uCi0gICAgY29uc3QgaW50IHNpemVVcHBlckxpbWl0ID0gNDA5NjsKLSAg
ICBtYXhTaXplID0gc3RkOjptaW4obWF4U2l6ZSwgc2l6ZVVwcGVyTGltaXQpOwotICAgIEdDM0Rp
bnQgbWF4V2lkdGggPSBzdGQ6Om1pbihtYXhTaXplLCBtX21heFZpZXdwb3J0RGltc1swXSk7Ci0g
ICAgR0MzRGludCBtYXhIZWlnaHQgPSBzdGQ6Om1pbihtYXhTaXplLCBtX21heFZpZXdwb3J0RGlt
c1sxXSk7Ci0gICAgd2lkdGggPSBjbGFtcCh3aWR0aCwgMSwgbWF4V2lkdGgpOwotICAgIGhlaWdo
dCA9IGNsYW1wKGhlaWdodCwgMSwgbWF4SGVpZ2h0KTsKLQotICAgIGlmIChtX25lZWRzVXBkYXRl
KSB7Ci0gICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgp
OwotICAgICAgICBpZiAocmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpKQotICAgICAgICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXND
aGFuZ2VkKTsKLSAgICAgICAgbV9uZWVkc1VwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFdlIGRvbid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUgbmV3
bHkgY3JlYXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgotICAgIC8vIGNsZWFy
IChhbmQgdGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRvKS4KLSAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KSk7Ci0gICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwotCi0gICAgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0
T3JaZXJvKG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRp
bmcuZ2V0KCkpKTsKLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fcmVuZGVyYnVmZmVyQmluZGluZy5n
ZXQoKSkpOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3Ja
ZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Ci19Ci0KLWludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZHJhd2lu
Z0J1ZmZlcikKLSAgICAgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7
Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndp
ZHRoKCk7Ci19Ci0KLWludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWln
aHQoKSBjb25zdAotewotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgIHJldHVybiBt
X2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKLQotICAgIHJldHVybiBtX2NvbnRleHQt
PmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7Ci19Ci0KLXVuc2lnbmVkIGlu
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUpCi17Ci0g
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihHQzNEYnl0ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURToKLSAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEdWJ5dGUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdD
M0RzaG9ydCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoR0MzRHVzaG9ydCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RpbnQpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihHQzNE
dWludCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoR0MzRGZsb2F0KTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphY3RpdmVUZXh0
dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmICh0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwID49IG1f
dGV4dHVyZVVuaXRzLnNpemUoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYWN0aXZlVGV4dHVyZSIsICJ0ZXh0dXJlIHVuaXQg
b3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9hY3RpdmVUZXh0
dXJlVW5pdCA9IHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTA7Ci0gICAgbV9j
b250ZXh0LT5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRBY3RpdmVUZXh0dXJlVW5pdCh0ZXh0dXJl
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNoYWRlcihXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImF0dGFjaFNoYWRlciIsIHNoYWRlcikpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIXByb2dyYW0tPmF0dGFjaFNoYWRlcihzaGFkZXIpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImF0
dGFjaFNoYWRlciIsICJzaGFkZXIgYXR0YWNobWVudCBhbHJlYWR5IGhhcyBzaGFkZXIiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihvYmplY3RP
clplcm8ocHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAgICBzaGFkZXItPm9uQXR0
YWNoZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRBdHRyaWJMb2Nh
dGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYmlu
ZEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZh
bGlkYXRlTG9jYXRpb25MZW5ndGgoImJpbmRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiYmluZEF0dHJpYkxvY2F0aW9uIiwg
bmFtZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJiaW5kQXR0cmliTG9jYXRpb24iLCAicmVzZXJ2ZWQgcHJlZml4Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlvbihvYmpl
Y3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBuYW1lKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNoZWNrT2JqZWN0VG9CZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
V2ViR0xPYmplY3QqIG9iamVjdCwgYm9vbCYgZGVsZXRlZCkKLXsKLSAgICBkZWxldGVkID0gZmFs
c2U7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChvYmplY3QpIHsKLSAgICAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNv
bnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmplY3Qg
bm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgICAgZGVsZXRlZCA9ICFvYmplY3QtPm9iamVjdCgpOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAoIWNo
ZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kQnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBidWZmZXIgPSAwOwotICAgIGlm
IChidWZmZXIgJiYgYnVmZmVyLT5nZXRUYXJnZXQoKSAmJiBidWZmZXItPmdldFRhcmdldCgpICE9
IHRhcmdldCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kQnVmZmVyIiwgImJ1ZmZlcnMgY2FuIG5vdCBiZSB1c2Vk
IHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikKLSAgICAgICAgbV9i
b3VuZEFycmF5QnVmZmVyID0gYnVmZmVyOwotICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpCi0gICAgICAgIG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+c2V0RWxlbWVudEFycmF5QnVmZmVyKGJ1ZmZlcik7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJiaW5kQnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8oYnVmZmVy
KSk7Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAgICAgYnVmZmVyLT5zZXRUYXJnZXQodGFyZ2V0KTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBib29sIGRlbGV0ZWQ7Ci0gICAgaWYgKCFjaGVj
a09iamVjdFRvQmVCb3VuZCgiYmluZEZyYW1lYnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBidWZmZXIgPSAwOwotICAg
IGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5k
RnJhbWVidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKLSAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZyhvYmpl
Y3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICBpZiAoIW1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBJbnN0ZWFkIG9m
IGJpbmRpbmcgZmIgMCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIuCi0gICAgICAgIG1fZHJhd2lu
Z0J1ZmZlci0+YmluZCgpOwotICAgIH0gZWxzZQotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKLSAgICBpZiAoYnVmZmVyKQot
ICAgICAgICBidWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKLSAgICBhcHBseVN0ZW5jaWxU
ZXN0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBib29sIGRlbGV0ZWQ7
Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFJlbmRlcmJ1ZmZlciIsIHJlbmRl
ckJ1ZmZlciwgZGVsZXRlZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZGVsZXRlZCkKLSAg
ICAgICAgcmVuZGVyQnVmZmVyID0gMDsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRSZW5kZXJidWZmZXIiLCAiaW52YWxpZCB0YXJn
ZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcg
PSByZW5kZXJCdWZmZXI7Ci0gICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwg
b2JqZWN0T3JaZXJvKHJlbmRlckJ1ZmZlcikpOwotICAgIGlmIChyZW5kZXJCdWZmZXIpCi0gICAg
ICAgIHJlbmRlckJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1
cmUqIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRU
ZXh0dXJlIiwgdGV4dHVyZSwgZGVsZXRlZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZGVs
ZXRlZCkKLSAgICAgICAgdGV4dHVyZSA9IDA7Ci0gICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+
Z2V0VGFyZ2V0KCkgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImJpbmRUZXh0dXJlIiwgInRleHR1cmVzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRh
cmdldHMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBHQzNEaW50IG1heExldmVsID0g
MDsKLSAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKSB7Ci0g
ICAgICAgIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRp
bmcgPSB0ZXh0dXJlOwotICAgICAgICBtYXhMZXZlbCA9IG1fbWF4VGV4dHVyZUxldmVsOwotCi0g
ICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIgJiYgIW1fYWN0aXZlVGV4dHVyZVVuaXQpCi0gICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRleHR1cmUyREJpbmRpbmcob2JqZWN0T3JaZXJv
KHRleHR1cmUpKTsKLQotICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4
dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZyA9IHRleHR1cmU7Ci0gICAgICAgIG1heExl
dmVsID0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kVGV4
dHVyZSIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
Y29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCBvYmplY3RPclplcm8odGV4dHVyZSkpOwotICAg
IGlmICh0ZXh0dXJlKQotICAgICAgICB0ZXh0dXJlLT5zZXRUYXJnZXQodGFyZ2V0LCBtYXhMZXZl
bCk7Ci0KLSAgICAvLyBOb3RlOiBwcmV2aW91c2x5IHdlIHVzZWQgdG8gYXV0b21hdGljYWxseSBz
ZXQgdGhlIFRFWFRVUkVfV1JBUF9SCi0gICAgLy8gcmVwZWF0IG1vZGUgdG8gQ0xBTVBfVE9fRURH
RSBmb3IgY3ViZSBtYXAgdGV4dHVyZXMsIGJlY2F1c2UgT3BlbkdMCi0gICAgLy8gRVMgMi4wIGRv
ZXNuJ3QgZXhwb3NlIHRoaXMgZmxhZyAoYSBidWcgaW4gdGhlIHNwZWNpZmljYXRpb24pIGFuZAot
ICAgIC8vIG90aGVyd2lzZSB0aGUgYXBwbGljYXRpb24gaGFzIG5vIGNvbnRyb2wgb3ZlciB0aGUg
c2VhbXMgaW4gdGhpcwotICAgIC8vIGRpbWVuc2lvbi4gSG93ZXZlciwgaXQgYXBwZWFycyB0aGF0
IHN1cHBvcnRpbmcgdGhpcyBwcm9wZXJseSBvbiBhbGwKLSAgICAvLyBwbGF0Zm9ybXMgaXMgZmFp
cmx5IGludm9sdmVkICh3aWxsIHJlcXVpcmUgYSBIYXNoTWFwIGZyb20gdGV4dHVyZSBJRAotICAg
IC8vIGluIGFsbCBwb3J0cyksIGFuZCB3ZSBoYXZlIG5vdCBoYWQgYW55IGNvbXBsYWludHMsIHNv
IHRoZSBsb2dpYyBoYXMKLSAgICAvLyBiZWVuIHJlbW92ZWQuCi19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwg
R0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZENvbG9y
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKK1dlYkdMMVJlbmRlcmluZ0NvbnRleHQ6
OldlYkdMMVJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UocGFzc2VkQ2FudmFzLCBhdHRyaWJ1dGVzKQogewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRF
cXVhdGlvbiIsIG1vZGUpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEVx
dWF0aW9uKG1vZGUpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVh
dGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24o
ImJsZW5kRXF1YXRpb24iLCBtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVu
ZEVxdWF0aW9uIiwgbW9kZUFscGhhKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+
YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51
bSBkZmFjdG9yKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlQmxlbmRGdW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0Rl
bnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0g
ZHN0QWxwaGEpCi17Ci0gICAgLy8gTm90ZTogQWxwaGEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBy
ZXN0cmljdGlvbnMgYXMgUkdCLgotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc3JjUkdCLCBkc3RSR0IpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0Is
IGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVu
dW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdl
YkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJE
YXRhIiwgdGFyZ2V0LCB1c2FnZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoc2l6ZSA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJz
aXplID09IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzRXJyb3JHZW5l
cmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNz
b2NpYXRlQnVmZmVyRGF0YShzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpKSkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpOwotICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19j
YXN0PEdDM0RzaXplaXB0cj4oc2l6ZSksIHVzYWdlKTsKLSAgICBpZiAobV9jb250ZXh0LT5tb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAvLyBUaGUgYnVmZmVyRGF0
YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRh
dGEgaXQgdGhpbmtzIGl0IGRvZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVy
RGF0YSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRh
dGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBi
dWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0
LCB1c2FnZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWRh
dGEpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJidWZmZXJEYXRhIiwgIm5vIGRhdGEiKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewot
ICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vy
cm9yTGlzdCgpOwotICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVM
ZW5ndGgoKSwgZGF0YS0+ZGF0YSgpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVy
cm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEg
ZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRh
IGl0IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRh
dGEoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIq
IGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJn
ZXQsIHVzYWdlKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
ZGF0YSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7
Ci0gICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0
ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4
dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1
ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZl
IHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0
ZUJ1ZmZlckRhdGEoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
dWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZm
ZXIqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdl
YkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJT
dWJEYXRhIiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwotICAgIGlm
ICghYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG9mZnNldCA8IDApIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJi
dWZmZXJTdWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRP
bk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRl
QnVmZmVyU3ViRGF0YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9y
c1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRh
cmdldCwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0ZUxlbmd0aCgp
LCBkYXRhLT5kYXRhKCkpOwotICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZh
aWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3Mg
aXQgZG9lcy4KLSAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAg
fQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51
bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZl
ciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAob2Zmc2V0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAi
b2Zmc2V0IDwgMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghZGF0YSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nl
c3NlcygpKSB7Ci0gICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0
YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1
YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2Fz
dDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRy
ZXNzKCkpOwotICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlz
dCgpKSB7Ci0gICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVs
bCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4K
LSAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAgfQotfQotCi1H
QzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0Mz
RGVudW0gdGFyZ2V0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAg
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0g
ICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9DT01QTEVURTsKLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZm
ZXIgaW5jb21wbGV0ZSI7Ci0gICAgR0MzRGVudW0gcmVzdWx0ID0gbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPmNoZWNrU3RhdHVzKCZyZWFzb24pOwotICAgIGlmIChyZXN1bHQgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIHByaW50R0xXYXJuaW5nVG9D
b25zb2xlKCJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0gICAgcmVzdWx0ID0gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKHRhcmdldCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobWFzayAmIH4oR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiY2xlYXIiLCAiaW52YWxpZCBtYXNrIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlm
IChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNz
KGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04sICJjbGVhciIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKCFjbGVhcklmQ29tcG9zaXRlZChtYXNrKSkKLSAgICAgICAgbV9jb250ZXh0LT5j
bGVhcihtYXNrKTsKLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNE
ZmxvYXQgYiwgR0MzRGZsb2F0IGEpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChzdGQ6OmlzbmFuKHIpKQotICAgICAgICByID0g
MDsKLSAgICBpZiAoc3RkOjppc25hbihnKSkKLSAgICAgICAgZyA9IDA7Ci0gICAgaWYgKHN0ZDo6
aXNuYW4oYikpCi0gICAgICAgIGIgPSAwOwotICAgIGlmIChzdGQ6OmlzbmFuKGEpKQotICAgICAg
ICBhID0gMTsKLSAgICBtX2NsZWFyQ29sb3JbMF0gPSByOwotICAgIG1fY2xlYXJDb2xvclsxXSA9
IGc7Ci0gICAgbV9jbGVhckNvbG9yWzJdID0gYjsKLSAgICBtX2NsZWFyQ29sb3JbM10gPSBhOwot
ICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyRGVwdGgoR0MzRGZsb2F0IGRlcHRoKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NsZWFyRGVw
dGggPSBkZXB0aDsKLSAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jbGVh
clN0ZW5jaWwgPSBzOwotICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJv
b2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bG9yTWFza1swXSA9IHJlZDsKLSAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOwotICAgIG1fY29s
b3JNYXNrWzJdID0gYmx1ZTsKLSAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOwotICAgIG1fY29u
dGV4dC0+Y29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVy
Iiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRl
cihvYmplY3RPclplcm8oc2hhZGVyKSk7Ci0gICAgR0MzRGludCB2YWx1ZTsKLSAgICBtX2NvbnRl
eHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6
Q09NUElMRV9TVEFUVVMsICZ2YWx1ZSk7Ci0gICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNE
c2l6ZWkgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyog
ZGF0YSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleEltYWdlMkQi
LCB0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF2YWxpZGF0ZUNv
bXByZXNzZWRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1h
Z2UyRCIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKGJvcmRlcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBu
b3QgMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVDb21wcmVz
c2VkVGV4RGltZW5zaW9ucygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3
aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
IXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdp
ZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBkYXRhKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2Vk
VGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpIHsKLSAgICAgICAgaWYgKGxldmVsICYm
IFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNz
ZWRUZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3lu
dGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgYm9y
ZGVyLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAgIGlmICht
X2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8v
IFRoZSBjb21wcmVzc2VkVGV4SW1hZ2UyRCBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIFdlYkdM
VGV4dHVyZSBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgZm9yIHRoaXMgbGV2ZWwuCi0gICAgICAg
IHRleC0+bWFya0ludmFsaWQodGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgIHRl
eC0+c2V0Q29tcHJlc3NlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29t
cHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlk
YXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwp
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQo
Zm9ybWF0KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRl
eEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgZGF0YSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFs
aWRhdGVUZXh0dXJlQmluZGluZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRy
dWUpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZm9ybWF0ICE9
IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29tcHJl
c3NlZFRleFN1YkltYWdlMkQiLCAiZm9ybWF0IGRvZXMgbm90IG1hdGNoIHRleHR1cmUgZm9ybWF0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3Nl
ZFRleFN1YkRpbWVuc2lvbnMoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0ZXgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBncmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0
YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKLSAgICB0ZXgtPnNldENvbXBy
ZXNzZWQoKTsKKyAgICBtX3R5cGUgPSAid2ViZ2wxIjsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSBmb3JtYXQpCitXZWJHTDFSZW5kZXJpbmdDb250ZXh0OjpXZWJHTDFSZW5k
ZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cmlidXRlcykgOiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKHBhc3NlZENhbnZh
cywgY29udGV4dCwgYXR0cmlidXRlcykKIHsKLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dENsZWFyQml0c0J5Rm9ybWF0KGZvcm1hdCkgJiAoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JV
RkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCBjYW4gbm90IGJlIHNldCwgb25seSByZW5kZXJlZCB0
byIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAg
IG1fdHlwZSA9ICJ3ZWJnbDEiOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29w
eVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1l
dGVycygiY29weVRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbnRlcm5hbGZvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4SW1hZ2UyRCIsIGludGVybmFsZm9y
bWF0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVU
ZXh0dXJlQmluZGluZygiY29weVRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmICgh
dGV4KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0Q29sb3JC
dWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZyYW1lYnVmZmVy
Q29sb3JGb3JtYXQoKSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCAiZnJhbWVidWZmZXIg
aXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
ICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3
aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93
ZXIgb2YgMiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIHJlYXNv
biA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgp
LCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29w
eVRleEltYWdlMkQiLCByZWFzb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNsZWFy
SWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsKLSAgICAgICAgU2Nv
cGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2Zy
YW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJv
cmRlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBi
aW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7
Ci0gICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOwotICAgICAgICBHQzNEc2l6ZWkg
Y2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwotICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVm
ZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBl
ZEhlaWdodCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2Fm
ZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsZm9y
bWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbV91bnBhY2tBbGlnbm1lbnQp
OwotICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhlaWdodCA+IDAp
IHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGNsaXBwZWRYIC0geCwgY2xpcHBlZFkgLSB5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgs
IGNsaXBwZWRIZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBp
ZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRoZSBiZWxvdyBzaG91
bGQgYmUgZXhlY3V0ZWQuCi0gICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jTGV2ZWwoImNvcHlUZXhTdWJJbWFnZTJE
IiwgdGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRl
eCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvcHlUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0
cnVlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVT
aXplKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpIHx8ICF2YWxpZGF0ZVNp
emUoImNvcHlUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAvLyBCZWZvcmUgY2hlY2tpbmcgaWYgaXQgaXMgaW4gdGhlIHJhbmdlLCBjaGVjayBpZiBv
dmVyZmxvdyBoYXBwZW5zIGZpcnN0LgotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlv
ZmZzZXQgKyBoZWlnaHQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVu
c2lvbnMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoeG9mZnNldCArIHdpZHRo
ID4gdGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4
LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJy
ZWN0YW5nbGUgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQgPSB0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2
ZWwpOwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgiY29weVRleFN1YkltYWdl
MkQiLCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzVGV4SW50
ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoaW50ZXJuYWxmb3JtYXQsIGdl
dEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjb3B5VGV4U3ViSW1h
Z2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGlibGUgZm9ybWF0Iik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29t
cGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAm
cmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4U3ViSW1hZ2UyRCIsIHJlYXNv
bik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAg
ICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkgewotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmlu
ZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdl
dCgpKTsKLSAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKLSAgICAgICAgR0MzRHNpemVpIGNs
aXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKLSAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZl
ckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRI
ZWlnaHQpKSB7Ci0gICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXgtPmdldEludGVybmFs
Rm9ybWF0KHRhcmdldCwgbGV2ZWwpOwotICAgICAgICAgICAgR0MzRGVudW0gdHlwZSA9IHRleC0+
Z2V0VHlwZSh0YXJnZXQsIGxldmVsKTsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx1bnNp
Z25lZCBjaGFyW10+IHplcm87Ci0gICAgICAgICAgICBpZiAod2lkdGggJiYgaGVpZ2h0KSB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemU7Ci0gICAgICAgICAgICAgICAgR0MzRGVu
dW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlw
ZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZzaXplLCAwKTsKLSAgICAgICAg
ICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAiY29weVRleFN1YkltYWdl
MkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB6ZXJvID0gc3RkOjptYWtlX3VuaXF1ZTx1
bnNpZ25lZCBjaGFyW10+KHNpemUpOwotICAgICAgICAgICAgICAgIGlmICghemVybykgewotICAg
ICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsKLSAgICAgICAgICAg
IGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7Ci0gICAgICAgICAg
ICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdl
dCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgbV9jb250
ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0ICsgY2xpcHBlZFgg
LSB4LCB5b2Zmc2V0ICsgY2xpcHBlZFkgLSB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBw
ZWRIZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBt
X2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRo
LCBoZWlnaHQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFdlYkdMQnVmZmVy
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRy
PFdlYkdMQnVmZmVyPiBvID0gV2ViR0xCdWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFy
ZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xG
cmFtZWJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG8gPSBXZWJHTEZyYW1lYnVmZmVyOjpj
cmVhdGUodGhpcyk7Ci0gICAgYWRkQ29udGV4dE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4g
bzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbyA9IFdlYkdM
VGV4dHVyZTo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKLSAg
ICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdlYkdMUHJvZ3JhbT4g
byA9IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZFNoYXJlZE9iamVjdChvLmdl
dCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFJl
ZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbyA9IFdlYkdMUmVuZGVyYnVmZmVyOjpjcmVhdGUodGhp
cyk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVybiBvOwotfQotCi1Q
YXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRl
cihHQzNEZW51bSB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVS
ICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY3Jl
YXRlU2hhZGVyIiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBvID0gV2ViR0xTaGFkZXI6OmNy
ZWF0ZSh0aGlzLCB0eXBlKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0
dXJuIG87Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjdWxsRmFjZShHQzNEZW51
bSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX2NvbnRleHQtPmN1bGxGYWNlKG1vZGUpOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhb2JqZWN0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJkZWxldGUiLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRl
eHQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAob2JqZWN0LT5vYmpl
Y3QoKSkKLSAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluIGNvbnRleHQgaGVyZSBiZWNhdXNl
IHdlIHdhbnQKLSAgICAgICAgLy8gdGhpbmdzIGluIHRoaXMgY29udGV4dCB1bmJvdW5kLgotICAg
ICAgICBvYmplY3QtPmRlbGV0ZU9iamVjdChncmFwaGljc0NvbnRleHQzRCgpKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihX
ZWJHTEJ1ZmZlciogYnVmZmVyKQotewotICAgIGlmICghZGVsZXRlT2JqZWN0KGJ1ZmZlcikpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAobV9ib3VuZEFycmF5QnVmZmVyID09IGJ1ZmZlcikKLSAg
ICAgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gMDsKLQotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9i
amVjdC0+dW5iaW5kQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsK
LSAgICBpZiAoIWRlbGV0ZU9iamVjdChmcmFtZWJ1ZmZlcikpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKLSAgICAgICAgbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwotICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0g
ICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZygwKTsKLSAg
ICAgICAgICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVidWZmZXIgaGVyZSB0byBiaW5kIGJh
Y2sgdG8gaW50ZXJuYWwgZmJvLgotICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkK
LXsKLSAgICBkZWxldGVPYmplY3QocHJvZ3JhbSk7Ci0gICAgLy8gV2UgZG9uJ3QgcmVzZXQgbV9j
dXJyZW50UHJvZ3JhbSB0byAwIGhlcmUgYmVjYXVzZSB0aGUgZGVsZXRpb24gb2YgdGhlCi0gICAg
Ly8gY3VycmVudCBwcm9ncmFtIGlzIGRlbGF5ZWQuCi19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZl
cikKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdChyZW5kZXJidWZmZXIpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKHJlbmRlcmJ1ZmZlciA9PSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcpCi0gICAg
ICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNobWVudEZyb21C
b3VuZEZyYW1lYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKLXsKLSAgICBkZWxldGVP
YmplY3Qoc2hhZGVyKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRl
eHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQotewotICAgIGlmICghZGVsZXRlT2JqZWN0KHRl
eHR1cmUpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Rl
eHR1cmVVbml0cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1
cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nKQotICAgICAgICAgICAgbV90ZXh0dXJlVW5pdHNb
aV0udGV4dHVyZTJEQmluZGluZyA9IG51bGxwdHI7Ci0gICAgICAgIGlmICh0ZXh0dXJlID09IG1f
dGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZykKLSAgICAgICAgICAgIG1fdGV4
dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZyA9IG51bGxwdHI7Ci0gICAgfQotICAg
IGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmct
PnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcih0ZXh0dXJlKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bnRleHQtPmRlcHRoRnVuYyhmdW5jKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2RlcHRoTWFzayA9IGZsYWc7Ci0gICAg
bV9jb250ZXh0LT5kZXB0aE1hc2soZmxhZyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZXB0aFJhbmdlKEdDM0RmbG9hdCB6TmVhciwgR0MzRGZsb2F0IHpGYXIpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICh6
TmVhciA+IHpGYXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVwdGhSYW5nZSIsICJ6TmVhciA+IHpGYXIiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmRlcHRoUmFuZ2Uoek5lYXIsIHpG
YXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmICghcHJvZ3JhbS0+ZGV0YWNoU2hhZGVyKHNoYWRlcikpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
ZGV0YWNoU2hhZGVyIiwgInNoYWRlciBub3QgYXR0YWNoZWQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihvYmplY3RPclplcm8ocHJvZ3JhbSks
IG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAgICBzaGFkZXItPm9uRGV0YWNoZWQoZ3JhcGhpY3ND
b250ZXh0M0QoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdD
M0RlbnVtIGNhcCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUNhcGFiaWxpdHkoImRpc2FibGUiLCBjYXApKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7Ci0gICAgICAgIG1fc3Rl
bmNpbEVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkgewotICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNz
b3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmRpc2Fi
bGUoY2FwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheSIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0
dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0
cmliU3RhdGUoaW5kZXgpOwotICAgIHN0YXRlLmVuYWJsZWQgPSBmYWxzZTsKLQotICAgIGlmIChp
bmRleCA+IDAgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICBtX2NvbnRleHQtPmRpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0
eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1l
bnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5
QnVmZmVyKCk7Ci0gICAgCi0gICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChvZmZzZXQgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7Ci0g
ICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBpbnQgYXJyYXksIG9mZnNldCBtdXN0IGJlIGRpdmlz
aWJsZSBieSA0IGZvciBhbGlnbm1lbnQgcmVhc29ucy4KLSAgICAgICAgaWYgKG9mZnNldCAlIDQp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFu
IGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICBvZmZzZXQgLz0gNDsKLQotICAgICAgICBHQzNEc2l6
ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gNDsKLSAgICAgICAg
aWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlQpIHsKLSAgICAgICAgLy8gRm9yIGFuIHVuc2lnbmVkIHNob3J0IGFycmF5LCBvZmZz
ZXQgbXVzdCBiZSBkaXZpc2libGUgYnkgMiBmb3IgYWxpZ25tZW50IHJlYXNvbnMuCi0gICAgICAg
IGlmIChvZmZzZXQgJSAyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8v
IE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KLSAgICAgICAgb2Zmc2V0IC89IDI7Ci0K
LSAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgo
KSAvIDI7Ci0gICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVt
ZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKLSAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwg
Y291bnQgPiBuIC0gb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
SW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZ25lZCYgbnVtRWxlbWVu
dHNSZXF1aXJlZCkKLXsKLSAgICAvLyBQZXJmb3JtcyBjb25zZXJ2YXRpdmUgdmFsaWRhdGlvbiBi
eSBjYWNoaW5nIGEgbWF4aW11bSBpbmRleCBvZgotICAgIC8vIHRoZSBnaXZlbiB0eXBlIHBlciBl
bGVtZW50IGFycmF5IGJ1ZmZlci4gSWYgYWxsIG9mIHRoZSBib3VuZAotICAgIC8vIGFycmF5IGJ1
ZmZlcnMgaGF2ZSBlbm91Z2ggZWxlbWVudHMgdG8gc2F0aXNmeSB0aGF0IG1heGltdW0KLSAgICAv
LyBpbmRleCwgc2tpcHMgdGhlIGV4cGVuc2l2ZSBwZXItZHJhdy1jYWxsIGl0ZXJhdGlvbiBpbgot
ICAgIC8vIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UuCi0gICAgCi0gICAgUmVmUHRyPFdlYkdM
QnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotCi0gICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdDM0RzaXplaXB0ciBudW1FbGVtZW50cyA9IGVs
ZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwotICAgIC8vIFRoZSBjYXNlIGNvdW50PT0w
IGlzIGFscmVhZHkgZGVhbHQgd2l0aCBpbiBkcmF3RWxlbWVudHMgYmVmb3JlIHZhbGlkYXRlSW5k
ZXhBcnJheUNvbnNlcnZhdGl2ZS4KLSAgICBpZiAoIW51bUVsZW1lbnRzKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgY29uc3QgQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1
ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgQVNTRVJUKGJ1ZmZlcik7Ci0KLSAgICBp
bnQgbWF4SW5kZXggPSBlbGVtZW50QXJyYXlCdWZmZXItPmdldENhY2hlZE1heEluZGV4KHR5cGUp
OwotICAgIGlmIChtYXhJbmRleCA8IDApIHsKLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11
bSBpbmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIHR5cGUgb2YgaW5kZXgu
Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFOiB7Ci0gICAgICAgICAgICBjb25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0
aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAgICAgICBm
b3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCi0gICAgICAgICAg
ICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ld
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDogewotICAgICAgICAgICAgbnVtRWxlbWVudHMgLz0g
c2l6ZW9mKEdDM0R1c2hvcnQpOwotICAgICAgICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0
YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAgICAg
ICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCi0gICAgICAg
ICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50Pihw
W2ldKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6IHsKLSAgICAgICAgICAgIGlmICghbV9vZXNFbGVt
ZW50SW5kZXhVaW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNEdWludCk7Ci0gICAgICAgICAgICBjb25zdCBHQzNE
dWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50Kj4oYnVmZmVyLT5kYXRhKCkpOwot
ICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsr
KQotICAgICAgICAgICAgICAgIG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19j
YXN0PGludD4ocFtpXSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBl
bGVtZW50QXJyYXlCdWZmZXItPnNldENhY2hlZE1heEluZGV4KHR5cGUsIG1heEluZGV4KTsKLSAg
ICB9Ci0KLSAgICBpZiAobWF4SW5kZXggPj0gMCkgewotICAgICAgICAvLyBUaGUgbnVtYmVyIG9m
IHJlcXVpcmVkIGVsZW1lbnRzIGlzIG9uZSBtb3JlIHRoYW4gdGhlIG1heGltdW0KLSAgICAgICAg
Ly8gaW5kZXggdGhhdCB3aWxsIGJlIGFjY2Vzc2VkLgotICAgICAgICBudW1FbGVtZW50c1JlcXVp
cmVkID0gbWF4SW5kZXggKyAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUlu
ZGV4QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0
ciBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKQotewotICAgIEFTU0VSVChj
b3VudCA+PSAwICYmIG9mZnNldCA+PSAwKTsKLSAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSAwOwot
ICAgIAotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKLQotICAgIGlmICgh
ZWxlbWVudEFycmF5QnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNv
dW50KSB7Ci0gICAgICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSAwOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5
QnVmZmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIGxvbmcgdW9m
ZnNldCA9IG9mZnNldDsKLSAgICB1bnNpZ25lZCBsb25nIG4gPSBjb3VudDsKLQotICAgIGlmICh0
eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKLSAgICAgICAgLy8gTWFr
ZSB1b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICB1b2Zmc2V0IC89IHNpemVvZihH
QzNEdWludCk7Ci0gICAgICAgIGNvbnN0IEdDM0R1aW50KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
R0MzRHVpbnQqPihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRh
KCkpICsgdW9mZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAgICAgICAgIGlm
ICgqcCA+IGxhc3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAqcDsKLSAgICAg
ICAgICAgICsrcDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlQpIHsKLSAgICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVs
ZW1lbnQgb2Zmc2V0LgotICAgICAgICB1b2Zmc2V0IC89IHNpemVvZihHQzNEdXNob3J0KTsKLSAg
ICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQq
PihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpICsgdW9m
ZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAgICAgICAgIGlmICgqcCA+IGxh
c3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAqcDsKLSAgICAgICAgICAgICsr
cDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSkgewotICAgICAgICBjb25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0aWNfY2Fz
dDxjb25zdCBHQzNEdWJ5dGUqPihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZl
cigpLT5kYXRhKCkpICsgdW9mZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAg
ICAgICAgIGlmICgqcCA+IGxhc3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAq
cDsKLSAgICAgICAgICAgICsrcDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZW4gc2V0
IHRoZSBsYXN0IGluZGV4IGluIHRoZSBpbmRleCBhcnJheSBhbmQgbWFrZSBzdXJlIGl0IGlzIHZh
bGlkLgotICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSBsYXN0SW5kZXggKyAxOwotICAgIHJldHVy
biBudW1FbGVtZW50c1JlcXVpcmVkID4gMDsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2ln
bmVkIHByaW1pdGl2ZUNvdW50KQotewotICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTG9vayBpbiBlYWNoIGVuYWJsZWQgdmVydGV4IGF0
dHJpYiBhbmQgY2hlY2sgaWYgdGhleSd2ZSBiZWVuIGJvdW5kIHRvIGEgYnVmZmVyLgotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21heFZlcnRleEF0dHJpYnM7ICsraSkgewotICAgICAg
ICBpZiAoIW1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaSku
dmFsaWRhdGVCaW5kaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKGVsZW1lbnRDb3VudCA8PSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotCi0gICAg
Ly8gTG9vayBpbiBlYWNoIGNvbnN1bWVkIHZlcnRleCBhdHRyaWIgKGJ5IHRoZSBjdXJyZW50IHBy
b2dyYW0pLgotICAgIGJvb2wgc2F3Tm9uSW5zdGFuY2VkQXR0cmliID0gZmFsc2U7Ci0gICAgYm9v
bCBzYXdFbmFibGVkQXR0cmliID0gZmFsc2U7Ci0gICAgaW50IG51bUFjdGl2ZUF0dHJpYkxvY2F0
aW9ucyA9IG1fY3VycmVudFByb2dyYW0tPm51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zOyArK2kpIHsKLSAg
ICAgICAgaW50IGxvYyA9IG1fY3VycmVudFByb2dyYW0tPmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9u
KGkpOwotICAgICAgICBpZiAobG9jID49IDAgJiYgbG9jIDwgc3RhdGljX2Nhc3Q8aW50PihtX21h
eFZlcnRleEF0dHJpYnMpKSB7Ci0gICAgICAgICAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGxvYyk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuZW5h
YmxlZCkgewotICAgICAgICAgICAgICAgIHNhd0VuYWJsZWRBdHRyaWIgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIC8vIEF2b2lkIG9mZi1ieS1vbmUgZXJyb3JzIGluIG51bUVsZW1lbnRzIGNvbXB1
dGF0aW9uLgotICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgbGFzdCBlbGVtZW50LCB3ZSB3aWxs
IG9ubHkgdG91Y2ggdGhlIGRhdGEgZm9yIHRoZQotICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQg
YW5kIG5vdGhpbmcgYmV5b25kIGl0LgotICAgICAgICAgICAgICAgIGludCBieXRlc1JlbWFpbmlu
ZyA9IHN0YXRpY19jYXN0PGludD4oc3RhdGUuYnVmZmVyQmluZGluZy0+Ynl0ZUxlbmd0aCgpIC0g
c3RhdGUub2Zmc2V0KTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHN0YXRlLnN0cmlkZSA+IDApOwotICAgICAgICAgICAg
ICAgIGlmIChieXRlc1JlbWFpbmluZyA+PSBzdGF0ZS5ieXRlc1BlckVsZW1lbnQpCi0gICAgICAg
ICAgICAgICAgICAgIG51bUVsZW1lbnRzID0gMSArIChieXRlc1JlbWFpbmluZyAtIHN0YXRlLmJ5
dGVzUGVyRWxlbWVudCkgLyBzdGF0ZS5zdHJpZGU7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGF0
ZS5kaXZpc29yKQotICAgICAgICAgICAgICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGlmICgoIXN0YXRlLmRpdmlzb3IgJiYgZWxlbWVudENvdW50
ID4gbnVtRWxlbWVudHMpIHx8IChzdGF0ZS5kaXZpc29yICYmIHByaW1pdGl2ZUNvdW50ID4gbnVt
RWxlbWVudHMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXNhd05vbkluc3RhbmNlZEF0dHJpYiAm
JiBzYXdFbmFibGVkQXR0cmliKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlV2ViR0xPYmpl
Y3QoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9iamVjdCogb2JqZWN0KQotewotICAg
IGlmICghb2JqZWN0IHx8ICFvYmplY3QtPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBvYmplY3Qgb3Igb2JqZWN0IGRlbGV0ZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRl
eHQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVu
Y3Rpb25OYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGZpcnN0IDwgMCB8
fCBjb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFjb3VudCkgewotICAgICAg
ICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGlmIChwcmltY291bnQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJwcmltY291bnQgPCAw
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzRXJyb3JHZW5l
cmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICAvLyBFbnN1cmUgd2UgaGF2
ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29y
ZE92ZXJmbG93PiBjaGVja2VkRmlyc3QoZmlyc3QpOwotICAgICAgICBDaGVja2VkPEdDM0RpbnQs
IFJlY29yZE92ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOwotICAgICAgICBDaGVja2VkPEdD
M0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkU3VtID0gY2hlY2tlZEZpcnN0ICsgY2hlY2tl
ZENvdW50OwotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2Vk
UHJpbUNvdW50KHByaW1jb3VudCk7Ci0gICAgICAgIGlmIChjaGVja2VkU3VtLmhhc092ZXJmbG93
ZWQoKSB8fCBjaGVja2VkUHJpbUNvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCAhdmFsaWRhdGVWZXJ0
ZXhBdHRyaWJ1dGVzKGNoZWNrZWRTdW0udW5zYWZlR2V0KCksIGNoZWNrZWRQcmltQ291bnQudW5z
YWZlR2V0KCkpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNz
IG91dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXZhbGlkYXRlVmVydGV4QXR0cmlidXRl
cygwKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRyaWJzIG5vdCBzZXR1cCBjb3Jy
ZWN0bHkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNp
emVpIGNvdW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
Ci0gICAgaWYgKCF2YWxpZGF0ZURyYXdBcnJheXMoImRyYXdBcnJheXMiLCBtb2RlLCBmaXJzdCwg
Y291bnQsIDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwot
Ci0gICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7Ci0gICAgaWYgKCFpc0dM
RVMyQ29tcGxpYW50KCkpCi0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0
ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOwotICAgIGlmICghaXNHTEVTMk5QT1RT
dHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwg
dHJ1ZSk7Ci0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0g
ICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKLSAg
ICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKLSAgICBp
ZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVz
cygiZHJhd0FycmF5cyIsIGZhbHNlKTsKLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51
bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHMpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVEcmF3TW9kZShmdW5jdGlv
bk5hbWUsIG1vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXZhbGlkYXRl
U3RlbmNpbFNldHRpbmdzKGZ1bmN0aW9uTmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAg
ICAgICAgaWYgKG1fb2VzRWxlbWVudEluZGV4VWludCkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGNvdW50IDwgMCB8fCBvZmZzZXQgPCAwKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJjb3VudCBvciBvZmZzZXQgPCAwIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAgIG1hcmtDb250ZXh0Q2hh
bmdlZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFtX2JvdW5k
VmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAibm8gRUxFTUVOVF9BUlJBWV9CVUZGRVIgYm91bmQiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3Vu
ZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVy
aW5nIHN0YXRlCi0gICAgICAgIGlmICghdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKGNvdW50LCB0
eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKSkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJyZXF1ZXN0IG91dCBvZiBib3VuZHMgZm9yIGN1cnJlbnQgRUxFTUVOVF9BUlJB
WV9CVUZGRVIiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoIWNvdW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXZh
bGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlk
YXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cykpIHsKLSAgICAgICAgICAgIGlmICghdmFs
aWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0
cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVt
RWxlbWVudHMpKSB7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRvIGFj
Y2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgh
dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKDApKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVm
ZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNl
U2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVh
c29uKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1v
ZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLQotICAgIHVuc2lnbmVk
IG51bUVsZW1lbnRzID0gMDsKLSAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxl
bWVudHMiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cykpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0KLSAgICBib29sIHZlcnRleEF0
dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewot
ICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQotICAgICAgICAgICAgdmFsaWRhdGVJbmRleEFycmF5
UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVt
RWxlbWVudHMpOwotICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0
ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKLSAgICB9Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmlj
dCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50cyIsIHRy
dWUpOwotICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0
aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkK
LSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVudHMiLCBmYWxzZSk7
Ci0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5hYmxlIiwgY2FwKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgewot
ICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgYXBwbHlTdGVuY2lsVGVz
dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewotICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gdHJ1ZTsK
LSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxlZCk7Ci0gICAgfQotICAgIG1fY29u
dGV4dC0+ZW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7Ci0gICAgc3RhdGUuZW5hYmxlZCA9IHRydWU7Ci0KLSAg
ICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZmluaXNoKCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVzaCgpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+Zmx1
c2goKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVu
ZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChidWZmZXIgJiYgIWJ1ZmZlci0+dmFsaWRh
dGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVi
dWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMg
dXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0Ci0gICAgLy8gRkJP
LgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJubyBmcmFt
ZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJvKGJ1ZmZlcik7Ci0gICAgc3dpdGNoIChh
dHRhY2htZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5UOgotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRh
cmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHJl
bmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICB9Ci0g
ICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVy
KGF0dGFjaG1lbnQsIGJ1ZmZlcik7Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgdGFy
Z2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChsZXZlbCkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZhbGlkYXRlKGNvbnRleHRHcm91
cCgpLCB0aGlzKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyB0ZXh0dXJl
IG9yIHRleHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0
YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRl
cm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0Ci0gICAgLy8gRkJPLgotICAgIGlmICghbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZU9iamVj
dCA9IG9iamVjdE9yWmVybyh0ZXh0dXJlKTsKLSAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAg
ICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7
Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3Qs
IGxldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQVRUQUNITUVOVDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0
YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1F
TlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRh
Y2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0
YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOwotICAg
IH0KLSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVi
dWZmZXIoYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci0gICAgYXBwbHlT
dGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJvbnRGYWNl
KEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImdlbmVyYXRlTWlw
bWFwIiwgdGFyZ2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBt
YXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBub3QgYWxsIHRoZSBzYW1lIHNpemUiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzkxNi4gQ29tcHJlc3NlZCB0ZXh0dXJlcyBzaG91bGQg
YmUgYWxsb3dlZCBpbiBXZWJHTCAyOgotICAgIGlmICh0ZXgtPmlzQ29tcHJlc3NlZCgpKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0byBnZW5lcmF0ZSBtaXBtYXBzIGZyb20g
Y29tcHJlc3NlZCB0ZXh0dXJlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCF2
YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJnZW5lcmF0ZU1pcG1hcCIsIHRleC0+Z2V0SW50ZXJu
YWxGb3JtYXQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIGdlbmVyYXRl
TWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWluRmlsdGVyIGlzIG5vdCBORUFSRVNUX01J
UE1BUF9MSU5FQVIKLSAgICAvLyBvbiBNYWMuICBSZW1vdmUgdGhlIGhhY2sgb25jZSB0aGlzIGRy
aXZlciBidWcgaXMgZml4ZWQuCi0jaWYgT1MoREFSV0lOKQotICAgIGJvb2wgbmVlZFRvUmVzZXRN
aW5GaWx0ZXIgPSBmYWxzZTsKLSAgICBpZiAodGV4LT5nZXRNaW5GaWx0ZXIoKSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxU
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpOwotICAgICAgICBu
ZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgbV9jb250ZXh0
LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotI2lmIE9TKERBUldJTikKLSAgICBpZiAobmVlZFRv
UmVzZXRNaW5GaWx0ZXIpCi0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIHRleC0+Z2V0TWluRmlsdGVy
KCkpOwotI2VuZGlmCi0gICAgdGV4LT5nZW5lcmF0ZU1pcG1hcExldmVsSW5mbygpOwotfQotCi1Q
YXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3Rp
dmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3RpdmVBdHRyaWIiLCBw
cm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwot
ICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0T3JaZXJvKHByb2dyYW0p
LCBpbmRleCwgaW5mbykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgTE9HKFdlYkdM
LCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6ICVzIiwgaW5kZXgsIGluZm8ubmFtZS51
dGY4KCkuZGF0YSgpKTsKLQotICAgIHJldHVybiBXZWJHTEFjdGl2ZUluZm86OmNyZWF0ZShpbmZv
Lm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTEFjdGl2
ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dy
YW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBwcm9ncmFtKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwotICAgIGlmICghbV9jb250ZXh0LT5nZXRB
Y3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIGluZm8pKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAg
aWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5lbmRzV2l0aCgiWzBdIikpCi0gICAgICAg
ICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKLQotICAgIExPRyhXZWJHTCwgIlJldHVybmlu
ZyBhY3RpdmUgdW5pZm9ybSAlZDogJXMiLCBpbmRleCwgaW5mby5uYW1lLnV0ZjgoKS5kYXRhKCkp
OwotCi0gICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50
eXBlLCBpbmZvLnNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0
YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgVmVjdG9yPFJlZlB0cjxXZWJHTFNo
YWRlcj4+JiBzaGFkZXJPYmplY3RzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURf
UEFSQU0oZWMpOwotICAgIHNoYWRlck9iamVjdHMuY2xlYXIoKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBdHRhY2hlZFNoYWRl
cnMiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgR0MzRGVu
dW0gc2hhZGVyVHlwZVtdID0gewotICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NI
QURFUiwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUgotICAgIH07
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihzaGFkZXJUeXBlKSAvIHNpemVv
ZihHQzNEZW51bSk7ICsraSkgewotICAgICAgICBXZWJHTFNoYWRlciogc2hhZGVyID0gcHJvZ3Jh
bS0+Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtpXSk7Ci0gICAgICAgIGlmIChzaGFkZXIp
Ci0gICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFkZXIpOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dHJp
YkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qo
ImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBp
ZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCi0g
ICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJnZXRBdHRyaWJMb2Nh
dGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKGlzUHJlZml4UmVzZXJ2
ZWQobmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXByb2dyYW0tPmdldExpbmtT
dGF0dXMoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5r
ZWQiKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5n
ZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwotfQotCi1XZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6QVJSQVlfQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVO
VF9BUlJBWV9CVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdl
dCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgaWYgKHBu
YW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSAmJiBwbmFtZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRCdWZmZXJQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0g
ICAgfQotCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRCdWZmZXJQ
YXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgIGlmIChwbmFtZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
dmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Pih2YWx1ZSkpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIC8vIFdl
IGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIG9iamVj
dCB0bwotICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBtdXRhdGluZyBhbnkgY2FjaGVkIHZl
cnNpb24uCi0KLSAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9yY2UgcmVxdWVzdGVkIHZhbHVl
cyBvZiAiZmFsc2UiIGZvciBkZXB0aAotICAgIC8vIGFuZCBzdGVuY2lsLCByZWdhcmRsZXNzIG9m
IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCi0gICAgLy8gR3JhcGhpY3NDb250ZXh0
M0Qgb3IgRHJhd2luZ0J1ZmZlci4KLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4g
YXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZShtX2NvbnRleHQtPmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkpOwotICAgIGlmICghbV9hdHRyaWJ1dGVzLmRlcHRoKQotICAg
ICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7Ci0gICAgaWYgKCFtX2F0dHJpYnV0ZXMu
c3RlbmNpbCkKLSAgICAgICAgYXR0cmlidXRlcy0+c2V0U3RlbmNpbChmYWxzZSk7Ci0gICAgaWYg
KG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBUaGUgRHJhd2luZ0J1ZmZlciBvYnRhaW5z
IGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1
dGVzKCksCi0gICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBpdHMgb3duIGRldGVybWluYXRpb24gb2Yg
d2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRlZC4KLSAgICAgICAgYXR0cmlidXRlcy0+
c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVsdGlzYW1wbGUoKSk7Ci0gICAgfQotICAg
IHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKLX0KLQotR0MzRGVudW0gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1
dGlvbikKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLSAgICBy
ZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOwotfQotCi1XZWJHTEV4dGVuc2lvbiogV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9k
IikKLSAgICAgICAgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xf
RVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xvZCIpKSkgewotICAgICAgICBpZiAoIW1f
ZXh0U2hhZGVyVGV4dHVyZUxPRCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKLSAgICAg
ICAgICAgIG1fZXh0U2hhZGVyVGV4dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVy
VGV4dHVyZUxPRD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVy
VGV4dHVyZUxPRC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKLSAgICAgICAgJiYgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMiKSkgewotICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJv
cGljKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7Ci0gICAgICAgICAgICBt
X2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVy
ZUZpbHRlckFuaXNvdHJvcGljPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9l
eHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShuYW1lLCAiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKLSAgICAgICAgJiYg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMiKSkgewotICAgICAgICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgewot
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdM
X09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERl
cml2YXRpdmVzID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlz
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdl
dCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJl
X2Zsb2F0IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpKSB7Ci0gICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxv
YXQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFi
bGVkKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpOwotICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxv
YXQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdD4odGhpcyk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0LmdldCgpOwotICAgIH0KLSAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCi0gICAg
ICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1
cmVfZmxvYXRfbGluZWFyIikpIHsKLSAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVh
cikgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJs
ZWQoIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpOwotICAgICAgICAgICAgbV9vZXNUZXh0
dXJlRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4o
dGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFy
LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0
dXJlX2hhbGZfZmxvYXQiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSkgewotICAgICAgICBpZiAoIW1f
b2VzVGV4dHVyZUhhbGZGbG9hdCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKLSAgICAg
ICAgICAgIG1fb2VzVGV4dHVyZUhhbGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVy
ZUhhbGZGbG9hdD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVy
ZUhhbGZGbG9hdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpCi0gICAgICAgICYmIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcikgewotICAg
ICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7Ci0gICAgICAgICAgICBtX29lc1RleHR1cmVI
YWxmRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5l
YXI+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxv
YXRMaW5lYXIuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
T0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKLSAgICAg
ICAgaWYgKCFtX29lc1ZlcnRleEFycmF5T2JqZWN0KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmpl
Y3QiKTsKLSAgICAgICAgICAgIG1fb2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9FU1ZlcnRleEFycmF5T2JqZWN0Pih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gbV9vZXNWZXJ0ZXhBcnJheU9iamVjdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJPRVNfZWxlbWVudF9pbmRleF91aW50IikKLSAgICAgICAgJiYgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91
aW50IikpIHsKLSAgICAgICAgaWYgKCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxl
bWVudF9pbmRleF91aW50Iik7Ci0gICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9FU0VsZW1lbnRJbmRleFVpbnQ+KHRoaXMpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBtX29lc0VsZW1lbnRJbmRleFVpbnQuZ2V0KCk7Ci0gICAgfQotICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0IikpIHsKLSAgICAg
ICAgaWYgKCFtX3dlYmdsTG9zZUNvbnRleHQpCi0gICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRl
eHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOwotICAgICAgICBy
ZXR1cm4gbV93ZWJnbExvc2VDb250ZXh0LmdldCgpOwotICAgIH0KLSAgICBpZiAoKGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQot
ICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsK
LSAgICAgICAgaWYgKCFtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMpCi0gICAgICAgICAgICBt
X3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEM+KHRoaXMpOwotICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRU
ZXh0dXJlQVRDLmdldCgpOwotICAgIH0KLSAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIikpCi0gICAgICAgICYmIFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7Ci0gICAgICAgIGlm
ICghbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29t
cHJlc3NlZFRleHR1cmVQVlJUQyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4
dHVyZVBWUlRDPih0aGlzKTsKLSAgICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVy
ZVBWUlRDLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldF
QkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIikKLSAgICAgICAgJiYgV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlzKSkgewotICAgICAgICBpZiAoIW1fd2ViZ2xDb21w
cmVzc2VkVGV4dHVyZVMzVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVT
M1RDID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7
Ci0gICAgICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOwotICAg
IH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUi
KQotICAgICAgICAmJiBXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4
dDNEKCkpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVN
X2RlcHRoX3RleHR1cmUiKTsKLSAgICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6
Om1ha2VfdW5pcXVlPFdlYkdMRGVwdGhUZXh0dXJlPih0aGlzKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbV93ZWJnbERlcHRoVGV4dHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdC
dWZmZXJzKCkpIHsKLSAgICAgICAgaWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJh
d19idWZmZXJzIik7Ci0gICAgICAgICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFdlYkdMRHJhd0J1ZmZlcnM+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBtX3dlYmdsRHJhd0J1ZmZlcnMuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJy
YXlzOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJy
YXlzKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOwotICAgICAgICAgICAgbV9hbmdsZUlu
c3RhbmNlZEFycmF5cyA9IHN0ZDo6bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRo
aXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdl
dCgpOwotICAgIH0KLSAgICBpZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5m
byIpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKLSAgICAg
ICAgICAgICAgICBtX3dlYmdsRGVidWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdl
YkdMRGVidWdSZW5kZXJlckluZm8+KHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xE
ZWJ1Z1JlbmRlcmVySW5mby5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlYnVnX3NoYWRlcnMiKQotICAgICAgICAgICAgJiYgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3No
YWRlcl9zb3VyY2UiKSkgewotICAgICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQot
ICAgICAgICAgICAgICAgIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdl
YkdMRGVidWdTaGFkZXJzPih0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdT
aGFkZXJzLmdldCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZm
ZXJGdW5jUGFyYW1ldGVycygiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFy
Z2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotCi0gICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVj
dCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBm
cmFtZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAg
fQotCi0gICAgV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5n
LT5nZXRBdHRhY2htZW50T2JqZWN0KGF0dGFjaG1lbnQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0g
ICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfVFlQRSkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PTkUpOwotICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJ
TlZBTElEX0VOVU0gaW4gdGhpcyBjYXNlLCB3aGlsZSBkZXNrdG9wIEdMCi0gICAgICAgIC8vIHNw
ZWNpZmllcyBJTlZBTElEX09QRVJBVElPTi4KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQob2JqZWN0LT5pc1RleHR1cmUoKSB8fCBv
YmplY3QtPmlzUmVuZGVyYnVmZmVyKCkpOwotICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7
Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUpOwotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgot
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4o
cmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUqPihvYmplY3QpKSk7Ci0gICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9U
RVhUVVJFX0NVQkVfTUFQX0ZBQ0U6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR0Mz
RGludCB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUp
OwotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgICAgICAg
ICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQi
KTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUik7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JK
RUNUX05BTUU6Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2Vi
R0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihvYmpl
Y3QpKSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRh
Y2htZW50Iik7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFt
ZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY29uc3QgaW50IGludFplcm8gPSAwOwotICAgIHN3aXRj
aCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToK
LSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgICAgIHJl
dHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICAgICAgcmV0dXJuIGdl
dFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUxQSEFfQklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZEFy
cmF5QnVmZmVyKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQ6Ci0gICAgICAg
IHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORF9DT0xPUjoKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX0FM
UEhBOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9SR0I6Ci0gICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJ
T05fUkdCOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19BTFBIQToKLSAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORF9TUkNfUkdCOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMVUVfQklUUzoKLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0
QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1B
VFM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oVWludDMyQXJyYXk6OmNyZWF0ZShtX2Nv
bXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRz
LnNpemUoKSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToKLSAgICAg
ICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJP
R1JBTToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMUHJvZ3Jh
bT4obV9jdXJyZW50UHJvZ3JhbSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0JJVFM6Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRl
cy5kZXB0aCkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oaW50WmVybyk7Ci0gICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgotICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0ZVTkM6Ci0gICAg
ICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0
QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1RFU1Q6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklURU1BU0s6Ci0gICAgICAgIHJldHVybiBn
ZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
SVRIRVI6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4obV9mcmFtZWJ1ZmZlckJpbmRp
bmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9GQUNFOgotICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVO
X0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVE
X1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJ
WkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6Ci0gICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5H
X1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUzoKLSAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZP
Uk1fVkVDVE9SUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVM6Ci0gICAgICAgIHJldHVy
biBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOgotICAgICAgICAvLyBGSVhNRTogc2hv
dWxkIHdlIGFsd2F5cyByZXR1cm4gMCBmb3IgdGhpcz8KLSAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1F
TlQ6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoKLSAgICAgICAgcmV0dXJuIGdl
dEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZ
R09OX09GRlNFVF9GSUxMOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfVU5JVFM6Ci0g
ICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVEX0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+
KG1fcmVuZGVyYnVmZmVyQmluZGluZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkVSOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IFdlYkdM
IikpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9CVUZGRVJTOgotICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVS
QUdFX1ZBTFVFOgotICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9Y
OgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUOgotICAgICAgICByZXR1cm4gZ2V0
Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hB
RElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJH
TCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNE
OjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIikiKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JB
Q0tfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlM
OgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6Ci0gICAg
ICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1JFRjoKLSAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNL
X1ZBTFVFX01BU0s6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoK
LSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JJVFM6Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5zdGVuY2lsKQotICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9DTEVBUl9WQUxVRToK
LSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfRlVO
QzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKLSAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKLSAgICAgICAgcmV0dXJuIGdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX1JFRjoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUOgotICAgICAgICByZXR1cm4gZ2V0
Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9WQUxVRV9NQVNLOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgot
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklO
RElOR18yRDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4
dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
ZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR19DVUJFX01B
UDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4o
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5n
KSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKLSAgICAg
ICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyht
X3VucGFja0ZsaXBZKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVM
VElQTFlfQUxQSEFfV0VCR0w6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09M
T1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1f
dW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24pOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlZFTkRPUjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhTdHJpbmcoIldlYktpdCIpKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJTSU9OOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCJXZWJHTCAxLjAgKCIgKyBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0Nv
bnRleHQzRDo6VkVSU0lPTikgKyAiKSIpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJ
RVdQT1JUOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRf
T0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKLSAgICAgICAgaWYgKG1fb2VzU3RhbmRh
cmREZXJpdmF0aXZlcykKLSAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTKTsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwot
ICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6
Ci0gICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCi0gICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJFUikpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdF
QkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURf
VkVORE9SX1dFQkdMOgotICAgICAgICBpZiAobV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQotICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGlj
c0NvbnRleHQzRDo6VkVORE9SKSk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0
ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOwotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlZFUlRFWF9B
UlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICAgICAgaWYg
KG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKLSAgICAgICAgICAgIGlmICghbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4obV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0KSk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBP
RVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklT
T1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCi0gICAgICAgIGlm
IChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykKLSAgICAgICAgICAgIHJldHVybiBnZXRV
bnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RS
T1BZX0VYVCk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhU
X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFD
SE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBCRUdJTgotICAgICAgICBpZiAobV93ZWJn
bERyYXdCdWZmZXJzKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhDb2xv
ckF0dGFjaG1lbnRzKCkpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhU
OgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQotICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1ZmZlcnMgbm90IGVuYWJsZWQiKTsKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICht
X3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYmIHBuYW1lID49IEV4dGVuc2lvbnMzRDo6
RFJBV19CVUZGRVIwX0VYVAotICAgICAgICAgICAgJiYgcG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNE
ZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMo
KSkpIHsKLSAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9O
RTsKLSAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgICAgICAg
ICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXREcmF3QnVmZmVyKHBuYW1lKTsKLSAg
ICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1ZmZlcgotICAgICAgICAgICAgICAgIHZh
bHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
dmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
bmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1XZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbVBhcmFtZXRlciIsIHByb2dyYW0pKQot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0KLSAgICBHQzNEaW50IHZhbHVlID0gMDsK
LSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVMRVRF
X1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhwcm9ncmFtLT5pc0RlbGV0ZWQo
KSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkFMSURBVEVfU1RBVFVTOgotICAgICAg
ICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAm
dmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZh
bHVlKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVM6Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJTOgotICAgICAgICBtX2NvbnRleHQt
PmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJ
VkVfVU5JRk9STVM6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJv
bENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQcm9ncmFtUGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwotICAgIH0KLX0KLQotU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiAiIjsKLSAg
ICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG9iamVj
dE9yWmVybyhwcm9ncmFtKSkpOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLSAgICBpZiAoIW1fcmVuZGVyYnVmZmVy
QmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJn
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVuZGVyYnVmZmVyIGJvdW5kIik7Ci0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0KLSAgICBpZiAobV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9TVEVOQ0lMCi0gICAgICAgICYmICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmlzVmFsaWQoKSkg
ewotICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpOwotICAgICAgICBp
bnQgdmFsdWUgPSAwOwotICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoKLSAgICAgICAgICAgIHZhbHVlID0g
bV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9IRUlHSFQ6Ci0gICAg
ICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SGVpZ2h0KCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX1JFRF9TSVpFOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVJfR1JFRU5fU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX0JMVUVfU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX0FMUEhBX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJ
WkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDI0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6Ci0gICAg
ICAgICAgICB2YWx1ZSA9IDg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDoKLSAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZv
cm1hdCgpKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUp
OwotICAgIH0KLQotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfV0lEVEg6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVJfREVQVEhfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVJfU1RFTkNJTF9TSVpFOgotICAgICAgICBtX2NvbnRleHQtPmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8odmFsdWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9JTlRFUk5BTF9GT1JNQVQ6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJi
dWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIs
IEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xP
YmplY3QoImdldFNoYWRlclBhcmFtZXRlciIsIHNoYWRlcikpCi0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlzRGVsZXRlZCgpKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKLSAgICAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJp
dihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTSEFERVJfVFlQRToKLSAgICAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihv
YmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1TdHJpbmcgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmICghdmFs
aWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xvZyIsIHNoYWRlcikpCi0gICAgICAgIHJl
dHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdldFNoYWRlcklu
Zm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFNoYWRl
clByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQcmVjaXNp
b25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBzd2l0Y2gg
KHNoYWRlclR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVS
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclByZWNpc2lvbkZvcm1hdCIsICJpbnZh
bGlkIHNoYWRlciB0eXBlIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBz
d2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1df
RkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUVESVVNX0ZMT0FUOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TE9XX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNRURJVU1fSU5UOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfSU5UOgotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQgcHJlY2lz
aW9uIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgR0MzRGlu
dCByYW5nZVsyXSA9IHswLCAwfTsKLSAgICBHQzNEaW50IHByZWNpc2lvbiA9IDA7Ci0gICAgbV9j
b250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlw
ZSwgcmFuZ2UsICZwcmVjaXNpb24pOwotICAgIHJldHVybiBXZWJHTFNoYWRlclByZWNpc2lvbkZv
cm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwgcHJlY2lzaW9uKTsKLX0KLQotU3RyaW5n
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFk
ZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVyU291cmNlIiwgc2hhZGVyKSkKLSAg
ICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiBlbnN1cmVOb3ROdWxsKHNoYWRlci0+Z2V0U291
cmNlKCkpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1
cHBvcnRlZEV4dGVuc2lvbnMoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLQotICAg
IGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0KLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNf
dGV4dHVyZV9mbG9hdCIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9h
dCIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09F
U190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4
dHVyZV9mbG9hdF9saW5lYXIiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIp
KQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIp
OwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikgfHwgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVyX3RleHR1cmVfbG9kIikpCi0gICAgICAg
IHJlc3VsdC5hcHBlbmQoIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKLSAgICBpZiAobV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5p
c290cm9waWMiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX0VYVF90ZXh0dXJlX2Zp
bHRlcl9hbmlzb3Ryb3BpYyIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpKQotICAg
ICAgICByZXN1bHQuYXBwZW5kKCJPRVNfZWxlbWVudF9pbmRleF91aW50Iik7Ci0gICAgcmVzdWx0
LmFwcGVuZCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7Ci0gICAgaWYgKFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lU
X1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMiKTsKLSAgICBpZiAoV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldF
QktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTsKLSAgICBpZiAoV2ViR0xDb21w
cmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTsKLSAgICBpZiAoV2ViR0xEZXB0aFRl
eHR1cmU6OnN1cHBvcnRlZChncmFwaGljc0NvbnRleHQzRCgpKSkKLSAgICAgICAgcmVzdWx0LmFw
cGVuZCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpOwotICAgIGlmIChzdXBwb3J0c0RyYXdCdWZmZXJz
KCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RyYXdfYnVmZmVycyIpOwotICAgIGlm
IChBTkdMRUluc3RhbmNlZEFycmF5czo6c3VwcG9ydGVkKHRoaXMpKQotICAgICAgICByZXN1bHQu
YXBwZW5kKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7Ci0KLSAgICBpZiAoYWxsb3dQcml2aWxl
Z2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIpKQotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdfc2hhZGVycyIpOwotICAgICAgICByZXN1
bHQuYXBwZW5kKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIik7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIFdlYkdMVGV4
dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2V0VGV4UGFyYW1ldGVyIiwgdGFy
Z2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX1dSQVBfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X1dSQVBfVDoKLSAgICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBu
YW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4odmFsdWUpKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhf
QU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAgICAg
ICBpZiAobV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHsKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkp
OwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFt
ZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOwotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiB1bmlmb3JtTG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJH
TE9iamVjdCgiZ2V0VW5pZm9ybSIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7Ci0gICAgaWYgKCF1bmlmb3JtTG9jYXRpb24gfHwgdW5pZm9ybUxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRVbmlmb3JtIiwgIm5vIHVuaWZvcm1sb2Nh
dGlvbiBvciBub3QgdmFsaWQgZm9yIHRoaXMgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgfQotICAgIEdDM0RpbnQgbG9jYXRpb24gPSB1bmlmb3JtTG9jYXRp
b24tPmxvY2F0aW9uKCk7Ci0KLSAgICBHQzNEZW51bSBiYXNlVHlwZTsKLSAgICB1bnNpZ25lZCBs
ZW5ndGg7Ci0gICAgc3dpdGNoICh1bmlmb3JtTG9jYXRpb24tPnR5cGUoKSkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMjoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFw
aGljc0NvbnRleHQzRDo6Qk9PTDsKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUMzOgotICAgICAgICBiYXNlVHlw
ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOwotICAgICAgICBsZW5ndGggPSAzOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzQ6Ci0gICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKLSAgICAg
ICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5ndGggPSAx
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDMjoK
LSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5n
dGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRf
VkVDMzoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAg
ICBsZW5ndGggPSAzOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpJTlRfVkVDNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwot
ICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQ7Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzI6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMzOgotICAgICAgICBiYXNlVHlwZSA9IEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVuZ3RoID0gMzsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDNDoKLSAgICAgICAgYmFz
ZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDI6Ci0g
ICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5n
dGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VF9NQVQzOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAg
ICAgICAgbGVuZ3RoID0gOTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVRfTUFUNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDE2OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNBTVBMRVJfQ1VCRToKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5U
OwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICAvLyBDYW4ndCBoYW5kbGUgdGhpcyB0eXBlCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmhhbmRs
ZWQgdHlwZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotICAgIHN3
aXRjaCAoYmFzZVR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogewot
ICAgICAgICBHQzNEZmxvYXQgdmFsdWVbMTZdID0gezB9OwotICAgICAgICBpZiAobV9pc1JvYnVz
dG5lc3NFWFRTdXBwb3J0ZWQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+Z2V0blVuaWZvcm1mdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCAxNiAq
IHNpemVvZihHQzNEZmxvYXQpLCB2YWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0VW5pZm9ybWZ2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZh
bHVlKTsKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyh2YWx1ZVswXSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQzMkFy
cmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlQ6IHsKLSAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKLSAgICAgICAg
aWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBs
b2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxv
Y2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMSkKLSAgICAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWVbMF0pOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci0gICAgfQotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJPT0w6IHsKLSAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsK
LSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJv
Z3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPiAxKSB7Ci0gICAg
ICAgICAgICBib29sIGJvb2xWYWx1ZVsxNl0gPSB7MH07Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspCi0gICAgICAgICAgICAgICAgYm9vbFZhbHVlW2pd
ID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbal0pOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhib29sVmFsdWUsIGxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZVswXSkpOwotICAgIH0KLSAgICBkZWZh
dWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLQotICAgIC8vIElmIHdlIGdl
dCBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiBvdXIgdW5mb3J0dW5hdGVseSBjb21wbGV4
IGxvZ2ljIGFib3ZlCi0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVua25vd24gZXJyb3IiKTsKLSAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm1Mb2NhdGlvbiIsIHByb2dyYW0pKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldFVuaWZv
cm1Mb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIXZh
bGlkYXRlU3RyaW5nKCJnZXRVbmlmb3JtTG9jYXRpb24iLCBuYW1lKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgaWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImdldFVuaWZvcm1Mb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIEdDM0RpbnQgdW5pZm9ybUxvY2F0aW9uID0gbV9jb250
ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsKLSAg
ICBpZiAodW5pZm9ybUxvY2F0aW9uID09IC0xKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIEdDM0RpbnQgYWN0aXZlVW5pZm9ybXMgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVp
bHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVuaWZvcm1zKTsKLSAgICBmb3IgKEdDM0Rp
bnQgaSA9IDA7IGkgPCBhY3RpdmVVbmlmb3JtczsgaSsrKSB7Ci0gICAgICAgIEFjdGl2ZUluZm8g
aW5mbzsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBpLCBpbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAvLyBTdHJpcCAiWzBdIiBmcm9tIHRoZSBuYW1lIGlmIGl0J3MgYW4gYXJyYXkuCi0gICAg
ICAgIGlmIChpbmZvLm5hbWUuZW5kc1dpdGgoIlswXSIpKQotICAgICAgICAgICAgaW5mby5uYW1l
ID0gaW5mby5uYW1lLmxlZnQoaW5mby5uYW1lLmxlbmd0aCgpIC0gMyk7Ci0gICAgICAgIC8vIElm
IGl0J3MgYW4gYXJyYXksIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGVhY2ggZWxlbWVudCwg
YXBwZW5kaW5nICJbaW5kZXhdIiB0byB0aGUgbmFtZS4KLSAgICAgICAgZm9yIChHQzNEaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBpbmZvLnNpemU7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFN0cmlu
ZyB1bmlmb3JtTmFtZSA9IGluZm8ubmFtZSArICJbIiArIFN0cmluZzo6bnVtYmVyKGluZGV4KSAr
ICJdIjsKLQotICAgICAgICAgICAgaWYgKG5hbWUgPT0gdW5pZm9ybU5hbWUgfHwgbmFtZSA9PSBp
bmZvLm5hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpj
cmVhdGUocHJvZ3JhbSwgdW5pZm9ybUxvY2F0aW9uLCBpbmZvLnR5cGUpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1l
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotCi0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OwotCi0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFZlcnRl
eEF0dHJpYiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwotICAgIH0KLQotICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZl
cnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVy
dGV4QXR0cmliU3RhdGUoaW5kZXgpOwotCi0gICAgaWYgKG1fYW5nbGVJbnN0YW5jZWRBcnJheXMg
JiYgcG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNP
Ul9BTkdMRSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5kaXZpc29yKTsKLQot
ICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
QVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAgICBpZiAoKCFpc0dMRVMyQ29tcGxp
YW50KCkgJiYgIWluZGV4ICYmIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0
cmliU3RhdGUoMCkuYnVmZmVyQmluZGluZyA9PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpCi0gICAg
ICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZwotICAgICAgICAgICAgfHwgIXN0YXRlLmJ1
ZmZlckJpbmRpbmctPm9iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KHN0
YXRlLmJ1ZmZlckJpbmRpbmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
QVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUu
ZW5hYmxlZCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJB
WV9OT1JNQUxJWkVEOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLm5vcm1hbGl6
ZWQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU0la
RToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5zaXplKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5vcmlnaW5hbFN0cmlkZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHN0YXRlLnR5cGUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJF
TlRfVkVSVEVYX0FUVFJJQjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJy
YXk6OmNyZWF0ZShtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XS52YWx1ZSwgNCkpOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1sb25nIGxvbmcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgs
IEdDM0RlbnVtIHBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIEdDM0RzaXplaXB0ciByZXN1bHQgPSBtX2NvbnRleHQtPmdl
dFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5hbWUpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KHJlc3VsdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpo
aW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBpc1ZhbGlkID0gZmFs
c2U7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpH
RU5FUkFURV9NSVBNQVBfSElOVDoKLSAgICAgICAgaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9I
SU5UX09FUzogLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzCi0gICAgICAgIGlmIChtX29lc1N0
YW5kYXJkRGVyaXZhdGl2ZXMpCi0gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGlmICghaXNWYWxpZCkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiaGludCIsICJpbnZhbGlkIHRh
cmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+aGludCh0YXJn
ZXQsIG1vZGUpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVm
ZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIgfHwgaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYnVmZmVyLT5o
YXNFdmVyQmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29u
dGV4dC0+aXNCdWZmZXIoYnVmZmVyLT5vYmplY3QoKSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojppc0NvbnRleHRMb3N0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0
TG9zdDsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQ29udGV4dExvc3RPclBl
bmRpbmcoKQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gJiYgIW1faGFz
UmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbikgewotICAgICAgICBMT0coV2ViR0wsICJDb250ZXh0
IGlzIGJlaW5nIHVzZWQuIEF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgcG9saWN5LiIpOwotICAgICAg
ICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS50b3BEb2N1bWVudCgp
OwotICAgICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpOwotICAgICAgICBpZiAocGFn
ZSAmJiAhZG9jdW1lbnQudXJsKCkuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgICAgIHBhZ2UtPm1h
aW5GcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLnJlc29sdmVXZWJHTFBvbGljeUZvclVSTChkb2N1
bWVudC51cmwoKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjdXJyZW50bHkgZG8gYW55
dGhpbmcgd2l0aCB0aGUgcmVzdWx0IGZyb20gcmVzb2x1dGlvbi4gQSBtb3JlCi0gICAgICAgIC8v
IGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG1pZ2h0IHRyeSB0byBjb25zdHJ1Y3QgYSByZWFsIGNv
bnRleHQsIGV0YyBhbmQgcHJvY2VlZAotICAgICAgICAvLyB3aXRoIG5vcm1hbCBvcGVyYXRpb24u
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkx
MjIKLSAgICAgICAgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0TG9zdCB8fCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRp
b247Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNFbmFibGVkKEdD
M0RlbnVtIGNhcCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUNhcGFiaWxpdHkoImlzRW5hYmxlZCIsIGNhcCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkKLSAgICAgICAgcmV0
dXJuIG1fc3RlbmNpbEVuYWJsZWQ7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNFbmFibGVkKGNh
cCk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNGcmFtZWJ1ZmZl
cihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWZyYW1lYnVmZmVy
IHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBp
ZiAoIWZyYW1lYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlci0+b2JqZWN0
KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUHJvZ3JhbShX
ZWJHTFByb2dyYW0qIHByb2dyYW0pCi17Ci0gICAgaWYgKCFwcm9ncmFtIHx8IGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0
LT5pc1Byb2dyYW0ocHJvZ3JhbS0+b2JqZWN0KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJi
dWZmZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghcmVuZGVyYnVmZmVyLT5oYXNFdmVy
QmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+
aXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyLT5vYmplY3QoKSk7Ci19Ci0KLUdDM0Rib29sZWFu
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKLXsK
LSAgICBpZiAoIXNoYWRlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNTaGFkZXIoc2hhZGVyLT5vYmplY3Qo
KSk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKFdl
YkdMVGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUgfHwgaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghdGV4dHVyZS0+aGFz
RXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRl
eHQtPmlzVGV4dHVyZSh0ZXh0dXJlLT5vYmplY3QoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmxpbmVX
aWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3Jh
bShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdCgibGlua1Byb2dyYW0iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIFdlYkdMU2hhZGVyKiB2ZXJ0
ZXhTaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6
VkVSVEVYX1NIQURFUik7Ci0gICAgICAgIFdlYkdMU2hhZGVyKiBmcmFnbWVudFNoYWRlciA9IHBy
b2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFE
RVIpOwotICAgICAgICBpZiAoIXZlcnRleFNoYWRlciB8fCAhdmVydGV4U2hhZGVyLT5pc1ZhbGlk
KCkgfHwgIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlci0+aXNWYWxpZCgpIHx8ICFt
X2NvbnRleHQtPnByZWNpc2lvbnNNYXRjaChvYmplY3RPclplcm8odmVydGV4U2hhZGVyKSwgb2Jq
ZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVyKSkgfHwgIW1fY29udGV4dC0+Y2hlY2tWYXJ5aW5nc1Bh
Y2tpbmcob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciksIG9iamVjdE9yWmVybyhmcmFnbWVudFNo
YWRlcikpKSB7Ci0gICAgICAgICAgICBwcm9ncmFtLT5zZXRMaW5rU3RhdHVzKGZhbHNlKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bGlu
a1Byb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKLSAgICBwcm9ncmFtLT5pbmNyZWFzZUxp
bmtDb3VudCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWko
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfRkxJUF9ZX1dFQkdMOgotICAgICAgICBtX3Vu
cGFja0ZsaXBZID0gcGFyYW07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKLSAgICAgICAgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhID0gcGFyYW07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6Ci0gICAgICAg
IGlmIChwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dFQkdMIHx8
IHBhcmFtID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKQotICAgICAgICAgICAgbV91bnBhY2tD
b2xvcnNwYWNlQ29udmVyc2lvbiA9IHN0YXRpY19jYXN0PEdDM0RlbnVtPihwYXJhbSk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBmb3Ig
VU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlBBQ0tfQUxJR05NRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElH
Tk1FTlQ6Ci0gICAgICAgIGlmIChwYXJhbSA9PSAxIHx8IHBhcmFtID09IDIgfHwgcGFyYW0gPT0g
NCB8fCBwYXJhbSA9PSA4KSB7Ci0gICAgICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlBBQ0tfQUxJR05NRU5UKQotICAgICAgICAgICAgICAgIG1fcGFja0FsaWdubWVudCA9
IHBhcmFtOwotICAgICAgICAgICAgZWxzZSAvLyBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FM
SUdOTUVOVDoKLSAgICAgICAgICAgICAgICBtX3VucGFja0FsaWdubWVudCA9IHBhcmFtOwotICAg
ICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgYWxp
Z25tZW50Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NvbnRleHQtPnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBEdWUgdG8g
V2ViR0wncyBzYW1lLW9yaWdpbiByZXN0cmljdGlvbnMsIGl0IGlzIG5vdCBwb3NzaWJsZSB0bwot
ICAgIC8vIHRhaW50IHRoZSBvcmlnaW4gdXNpbmcgdGhlIFdlYkdMIEFQSS4KLSAgICBBU1NFUlQo
Y2FudmFzKCktPm9yaWdpbkNsZWFuKCkpOwotICAgIC8vIFZhbGlkYXRlIGlucHV0IHBhcmFtZXRl
cnMuCi0gICAgaWYgKCFwaXhlbHMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJyZWFkUGl4ZWxzIiwgIm5vIGRlc3RpbmF0aW9u
IEFycmF5QnVmZmVyVmlldyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHN3aXRjaCAo
Zm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQg
Zm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgfHwgdHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwg
ImZvcm1hdCBub3QgUkdCQSBvciB0eXBlIG5vdCBVTlNJR05FRF9CWVRFIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgLy8gVmFsaWRhdGUgYXJyYXkgdHlwZSBhZ2FpbnN0IHBpeGVsIHR5
cGUuCi0gICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQ4KSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVy
IGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1
ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2Fm
ZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgcmVhc29u
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBDYWxjdWxhdGUgYXJyYXkgc2l6ZSwg
dGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNLX0FMSUdOTUVOVC4KLSAgICB1bnNpZ25l
ZCBpbnQgdG90YWxCeXRlc1JlcXVpcmVkID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgcGFkZGluZyA9
IDA7Ci0gICAgaWYgKCFtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgewotICAgICAgICBHQzNE
ZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0
eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQs
ICZwYWRkaW5nKTsKLSAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19F
UlJPUikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsICJyZWFkUGl4ZWxz
IiwgImludmFsaWQgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJheUJ1ZmZlclZpZXcgbm90IGxhcmdlIGVu
b3VnaCBmb3IgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICB2b2lkKiBkYXRhID0gcGl4ZWxz
LT5iYXNlQWRkcmVzcygpOwotCi0gICAgewotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmlu
ZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdl
dCgpKTsKLSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlYWRuUGl4ZWxzRVhUKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLT5ieXRlTGVuZ3RoKCksIGRhdGEpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLSAgICB9Ci0KLSNpZiBPUyhEQVJXSU4pCi0g
ICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKSAvLyB3ZSBoYXZlbid0IGNvbXB1dGVk
IHBhZGRpbmcKLSAgICAgICAgbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3Jt
YXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fcGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1
aXJlZCwgJnBhZGRpbmcpOwotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBzZWN0aW9uIHdoZW4g
R0wgZHJpdmVyIGJ1ZyBvbiBNYWMgQU5EIHRoZSBHTEVTIGRyaXZlciBidWcKLSAgICAvLyBvbiBR
QyBpcyBmaXhlZCwgaS5lLiwgd2hlbiBhbHBoYSBpcyBvZmYsIHJlYWRQaXhlbHMgc2hvdWxkCi0g
ICAgLy8gc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9mIDAuCi0gICAgaWYgKCFtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiAhbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFscGhhKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KGRhdGEpOwotICAgICAgICBmb3IgKEdDM0RzaXplaSBpeSA9IDA7IGl5IDwgaGVp
Z2h0OyArK2l5KSB7Ci0gICAgICAgICAgICBmb3IgKEdDM0RzaXplaSBpeCA9IDA7IGl4IDwgd2lk
dGg7ICsraXgpIHsKLSAgICAgICAgICAgICAgICBwaXhlbHNbM10gPSAyNTU7Ci0gICAgICAgICAg
ICAgICAgcGl4ZWxzICs9IDQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwaXhlbHMgKz0g
cGFkZGluZzsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5yZWxlYXNl
U2hhZGVyQ29tcGlsZXIoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAi
aW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fcmVu
ZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgIm5vIGJvdW5kIHJlbmRlcmJ1ZmZlciIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVTaXplKCJyZW5kZXJidWZm
ZXJTdG9yYWdlIiwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2gg
KGludGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09N
UE9ORU5UMTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDg6Ci0gICAg
ICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRl
cm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGlu
Zy0+c2V0SXNWYWxpZCh0cnVlKTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRT
aXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgICAgICBpZiAoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0
ZWQoKSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdl
dCwgRXh0ZW5zaW9uczNEOjpERVBUSDI0X1NURU5DSUw4LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAg
ICAgfQotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdo
dCk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZChpc0RlcHRoU3Rl
bmNpbFN1cHBvcnRlZCgpKTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRl
cm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzYW1wbGVDb3ZlcmFnZShHQzNEZmxvYXQgdmFsdWUsIEdD
M0Rib29sZWFuIGludmVydCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5zYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52
ZXJ0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNjaXNzb3IoR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2
YWxpZGF0ZVNpemUoInNjaXNzb3IiLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29udGV4dC0+c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBj
b25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJzaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQotICAgICAgICByZXR1cm47Ci0gICAg
U3RyaW5nIHN0cmluZ1dpdGhvdXRDb21tZW50cyA9IFN0cmlwQ29tbWVudHMoc3RyaW5nKS5yZXN1
bHQoKTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJzaGFkZXJTb3VyY2UiLCBzdHJpbmdXaXRo
b3V0Q29tbWVudHMpKQotICAgICAgICByZXR1cm47Ci0gICAgc2hhZGVyLT5zZXRTb3VyY2Uoc3Ry
aW5nKTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShvYmplY3RPclplcm8oc2hhZGVyKSwg
c3RyaW5nV2l0aG91dENvbW1lbnRzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jIiwgZnVuYykpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwotICAgIG1fc3RlbmNpbEZ1bmNS
ZWZCYWNrID0gcmVmOwotICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKLSAgICBtX3N0ZW5j
aWxGdW5jTWFza0JhY2sgPSBtYXNrOwotICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmMoZnVuYywg
cmVmLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5j
U2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1
aW50IG1hc2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsRnVuYygic3RlbmNpbEZ1bmNTZXBhcmF0
ZSIsIGZ1bmMpKQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNoIChmYWNlKSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfQU5EX0JBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbEZ1
bmNSZWYgPSByZWY7Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOwotICAgICAg
ICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFj
ayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
T05UOgotICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwotICAgICAgICBtX3N0ZW5jaWxG
dW5jTWFzayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOwotICAgICAgICBt
X3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAic3RlbmNpbEZ1bmNTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVu
YywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxN
YXNrKEdDM0R1aW50IG1hc2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwotICAgIG1fc3RlbmNp
bE1hc2tCYWNrID0gbWFzazsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrKG1hc2spOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51
bSBmYWNlLCBHQzNEdWludCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKGZhY2UpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgbV9zdGVuY2lsTWFzayA9IG1h
c2s7Ci0gICAgICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQ6Ci0gICAgICAgIG1fc3RlbmNpbE1hc2sg
PSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNL
OgotICAgICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJzdGVuY2lsTWFza1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShm
YWNlLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcChH
QzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4
dC0+c3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWls
LCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE9w
U2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29u
c3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBGSVhNRTogRm9y
IG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZC4KLSAgICBlYyA9IDA7Ci0gICAgV2Vi
R0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFy
Z2V0LCB0cnVlKTsKLSAgICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4SW1h
Z2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpOwotICAgIEFTU0VSVCh0ZXgpOwot
ICAgIEFTU0VSVCghbGV2ZWwgfHwgIVdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQp
KTsKLSAgICBpZiAoIXBpeGVscykgewotICAgICAgICAvLyBOb3RlOiBDaHJvbWl1bSdzIE9wZW5H
TCBpbXBsZW1lbnRhdGlvbiBjbGVhcnMgdGV4dHVyZXMgYW5kIGlzUmVzb3VyY2VTYWZlKCkgaXMg
dGhlcmVmb3JlIHRydWUuCi0gICAgICAgIC8vIEZvciBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIGlm
IHRoZXkgYXJlIHVzaW5nIEFOR0xFX2RlcHRoX3RleHR1cmUsIEFOR0xFIGRlcHRoIHRleHR1cmVz
Ci0gICAgICAgIC8vIGNhbiBub3QgYmUgY2xlYXJlZCB3aXRoIHRleEltYWdlMkQgYW5kIG11c3Qg
YmUgY2xlYXJlZCBieSBiaW5kaW5nIHRvIGFuIGZibyBhbmQgY2FsbGluZwotICAgICAgICAvLyBj
bGVhci4KLSAgICAgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpCi0gICAgICAgICAgICBtX2NvbnRl
eHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBib29sIHN1Y2NlZWQgPSBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVy
LCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgICAgIGlmICghc3Vj
Y2VlZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICBBU1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGlu
dGVybmFsZm9ybWF0KSk7Ci0gICAgICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCk7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgICAgICBpZiAobV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAgICAgLy8g
VGhlIHRleEltYWdlMkQgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1cmUgaXQg
ZG9lc24ndCBoYXZlIHRoZSBkYXRhIGZvciB0aGlzIGxldmVsLgotICAgICAgICAgICAgdGV4LT5t
YXJrSW52YWxpZCh0YXJnZXQsIGxldmVsKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLSAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdl
KiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSBkb21Tb3VyY2Us
IGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgZWMgPSAwOwotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBw
cmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNz
Q29udGV4dDNEOjpOT05FKTsKLSAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVk
ZWQoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRh
Rm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKLSAgICBHcmFwaGlj
c0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9w
KCk7Ci0gICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4dHJhY3Rvci5pbWFn
ZVBpeGVsRGF0YSgpOwotCi0gICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgaWYg
KHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpB
bHBoYURvTm90aGluZyAmJiAhZmxpcFkpCi0gICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdl
LCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0
YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFn
ZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBk
YXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgInBhY2tJbWFnZSBlcnJvciIpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fdW5wYWNrQWxpZ25t
ZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0
M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLCBm
b3JtYXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0
YSwgZWMpOwotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0
aW9uVHlwZSBmdW5jdGlvblR5cGUsIFRleEZ1bmNWYWxpZGF0aW9uU291cmNlVHlwZSBzb3VyY2VU
eXBlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0KQotewotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhmdW5jdGlvbk5h
bWUsIGZ1bmN0aW9uVHlwZSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyhmdW5jdGlv
bk5hbWUsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoZnVuY3Rpb25UeXBlID09IE5vdFRleFN1YkltYWdlMkQpIHsKLSAg
ICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRm9yIFNvdXJjZUFy
cmF5QnVmZmVyVmlldywgZnVuY3Rpb24gdmFsaWRhdGVUZXhGdW5jRGF0YSgpIHdvdWxkIGhhbmRs
ZSB3aGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBTZXR0YWJsZVRleEZvcm1hdAotICAgICAgICAvLyBi
eSBjaGVja2luZyBpZiB0aGUgQXJyYXlCdWZmZXJWaWV3IGlzIG51bGwgb3Igbm90LgotICAgICAg
ICBpZiAoc291cmNlVHlwZSAhPSBTb3VyY2VBcnJheUJ1ZmZlclZpZXcpIHsKLSAgICAgICAgICAg
IGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVNpemUo
ZnVuY3Rpb25OYW1lLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwgY2hl
Y2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KLSAgICAgICAgaWYgKHhvZmZzZXQgKyB3aWR0
aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJi
YWQgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxl
dmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2
ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodGV4dHVy
ZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgIT0gZm9ybWF0IHx8IHRleHR1cmUt
PmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgIT0gdHlwZSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJ0eXBlIGFuZCBmb3JtYXQgZG8gbm90IG1hdGNoIHRleHR1cmUiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleEltYWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxBbGxvd2VkKQotICAgICAgICB8fCAhdmFsaWRh
dGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlQXJyYXlCdWZm
ZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0gICAgdm9pZCogZGF0
YSA9IHBpeGVscyA/IHBpeGVscy0+YmFzZUFkZHJlc3MoKSA6IDA7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IHRlbXBEYXRhOwotICAgIGJvb2wgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gZmFsc2U7Ci0g
ICAgaWYgKGRhdGEgJiYgKG1fdW5wYWNrRmxpcFkgfHwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhh
KSkgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3VucGFja0FsaWdubWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRGF0YSkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGRhdGEgPSB0ZW1wRGF0YS5kYXRhKCk7Ci0gICAgICAgIGNoYW5n
ZVVucGFja0FsaWdubWVudCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChjaGFuZ2VVbnBhY2tBbGln
bm1lbnQpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsCi0gICAgICAgICAgICAgICAg
ICAgZm9ybWF0LCB0eXBlLCBkYXRhLCBlYyk7Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVu
dCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwg
Tm90VGV4U3ViSW1hZ2UyRCwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0g
ICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFn
ZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBSR0JBOC4KLSAgICAvLyBObyBjb252ZXJzaW9uIGlz
IG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVE
X0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgot
ICAgIGlmICghbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhICYmIGZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAg
IGVsc2UgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMs
IGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBk
YXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50
ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZv
cm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgp
LT5kYXRhKCksIGVjKTsKLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi1QYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRyYXdJbWFnZUludG9CdWZmZXIoSW1hZ2UqIGltYWdlLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIGludCBkZXZpY2VTY2FsZUZhY3RvcikKLXsKLSAgICBJbnRTaXplIHNpemUo
d2lkdGgsIGhlaWdodCk7Ci0gICAgc2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAg
SW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXpl
KTsKLSAgICBpZiAoIWJ1ZikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6T1VUX09GX01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChG
bG9hdFBvaW50KCksIGltYWdlLT5zaXplKCkpOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9h
dFBvaW50KCksIHNpemUpOwotICAgIGJ1Zi0+Y29udGV4dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0KTsKLSAgICByZXR1cm4gYnVmLT5j
b3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VF
bGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgi
dGV4SW1hZ2UyRCIsIGltYWdlLCBlYykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5k
ZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NWR0lt
YWdlKCkpCi0gICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFn
ZUZvclJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7Ci0K
LSAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQi
LCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVuZGVy
LT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwg
dHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1h
Z2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1M
Q2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFz
RWxlbWVudCgidGV4SW1hZ2UyRCIsIGNhbnZhcywgZWMpIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRl
eEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWln
aHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2Vi
R0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIs
IHRhcmdldCwgdHJ1ZSk7Ci0gICAgLy8gSWYgcG9zc2libGUsIGNvcHkgZnJvbSB0aGUgY2FudmFz
IGVsZW1lbnQgZGlyZWN0bHkgdG8gdGhlIHRleHR1cmUKLSAgICAvLyB2aWEgdGhlIEdQVSwgd2l0
aG91dCBhIHJlYWQtYmFjayB0byBzeXN0ZW0gbWVtb3J5LgotICAgIC8vCi0gICAgLy8gRklYTUU6
IHJlc3RyaWN0aW9uIG9mIChSR0IgfHwgUkdCQSkvVU5TSUdORURfQllURSBzaG91bGQgYmUgbGlm
dGVkIHdoZW4KLSAgICAvLyBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlIGltcGxl
bWVudGF0aW9ucyBhcmUgZnVsbHkgZnVuY3Rpb25hbC4KLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQgPT0gdGFyZ2V0ICYmIHRleHR1cmUgJiYgdHlwZSA9PSB0ZXh0dXJlLT5n
ZXRUeXBlKHRhcmdldCwgbGV2ZWwpCi0gICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpICYmIHR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAgICAgSW1hZ2VCdWZm
ZXIqIGJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Ci0gICAgICAgIGlmIChidWZmZXIgJiYgYnVm
ZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2Jq
ZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNr
RmxpcFkpKSB7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgdHlw
ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZWZQdHI8
SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdldEltYWdlRGF0YSgpOwotICAgIGlmIChp
bWFnZURhdGEpCi0gICAgICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdldCgpLCBlYyk7Ci0gICAgZWxzZQotICAgICAg
ICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0
eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tQ2Fu
dmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQot
I2lmIEVOQUJMRShWSURFTykKLVBhc3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEJhY2tpbmdTdG9y
ZUNvcHkgYmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgSW50U2l6ZSBz
aXplKHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpKTsKLSAgICBJbWFn
ZUJ1ZmZlciogYnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNhY2hlLmltYWdlQnVmZmVyKHNpemUpOwot
ICAgIGlmICghYnVmKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBJbnRSZWN0IGRlc3RSZWN0KDAsIDAsIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgLy8gRklYTUU6IFR1cm4gdGhpcyBpbnRv
IGEgR1BVLUdQVSB0ZXh0dXJlIGNvcHkgaW5zdGVhZCBvZiBDUFUgcmVhZGJhY2suCi0gICAgdmlk
ZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1Zi0+Y29udGV4dCgpLCBkZXN0UmVjdCk7
Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKGJhY2tpbmdTdG9yZUNvcHkpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlk
ZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVu
dCgidGV4SW1hZ2UyRCIsIHZpZGVvLCBlYykKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygi
dGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+
dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gR28gdGhyb3VnaCB0aGUgZmFzdCBwYXRoIGRvaW5nIGEgR1BVLUdQVSB0ZXh0dXJl
cyBjb3B5IHdpdGhvdXQgYSByZWFkYmFjayB0byBzeXN0ZW0gbWVtb3J5IGlmIHBvc3NpYmxlLgot
ICAgIC8vIE90aGVyd2lzZSwgaXQgd2lsbCBmYWxsIGJhY2sgdG8gdGhlIG5vcm1hbCBTVyBwYXRo
LgotICAgIC8vIEZJWE1FOiBUaGUgY3VycmVudCByZXN0cmljdGlvbnMgcmVxdWlyZSB0aGF0IGZv
cm1hdCBzaG91ZCBiZSBSR0Igb3IgUkdCQSwKLSAgICAvLyB0eXBlIHNob3VsZCBiZSBVTlNJR05F
RF9CWVRFIGFuZCBsZXZlbCBzaG91bGQgYmUgMC4gSXQgbWF5IGJlIGxpZnRlZCBpbiB0aGUgZnV0
dXJlLgotICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmco
InRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCA9PSB0YXJnZXQgJiYgdGV4dHVyZQotICAgICAgICAmJiAoZm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
KQotICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0g
ICAgICAgICYmICh0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwp
KQotICAgICAgICAmJiAhbGV2ZWwpIHsKLSAgICAgICAgaWYgKHZpZGVvLT5jb3B5VmlkZW9UZXh0
dXJlVG9QbGF0Zm9ybVRleHR1cmUobV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwg
bGV2ZWwsIHR5cGUsIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1f
dW5wYWNrRmxpcFkpKSB7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRl
b0hlaWdodCgpLCB0eXBlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCi0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUo
KSwgZWMpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICB0ZXhJbWFnZTJE
SW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5n
ZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEZmxvYXQgcGFyYW1mLCBHQzNEaW50IHBhcmFtaSwgYm9vbCBpc0Zsb2F0KQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJH
TFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFBhcmFtZXRlciIsIHRh
cmdldCwgZmFsc2UpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNo
IChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVI6Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgotICAgICAgICBpZiAo
KGlzRmxvYXQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYm
IHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtZiAh
PSBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFUKQotICAgICAgICAgICAgfHwgKCFpc0Zsb2F0ICYm
IHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWkgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWkgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJFUEVBVCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJh
bWV0ZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZp
bHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoaXNGbG9hdCkgewotICAgICAgICB0ZXgtPnNldFBhcmFtZXRl
cmYocG5hbWUsIHBhcmFtZik7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyZih0YXJn
ZXQsIHBuYW1lLCBwYXJhbWYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRleC0+c2V0UGFyYW1l
dGVyaShwbmFtZSwgcGFyYW1pKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRh
cmdldCwgcG5hbWUsIHBhcmFtaSk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
ZmxvYXQgcGFyYW0pCi17Ci0gICAgdGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIHBhcmFtLCAw
LCB0cnVlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcmko
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICB0
ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgMCwgcGFyYW0sIGZhbHNlKTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8vIEZJWE1F
OiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCi0gICAgZWMgPSAwOwotICAg
IEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFy
YW1ldGVycygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlKSk7Ci0gICAgQVNTRVJUKHZhbGlk
YXRlU2l6ZSgidGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpKTsKLSAgICBBU1NFUlQo
dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3ViSW1hZ2UyRCIsIGZvcm1hdCkpOwotICAg
IFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2Uy
RCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpIHsKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKCh4b2Zmc2V0ICsg
d2lkdGgpID49IDApOwotICAgIEFTU0VSVCgoeW9mZnNldCArIGhlaWdodCkgPj0gMCk7Ci0gICAg
QVNTRVJUKHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgPj0gKHhvZmZzZXQgKyB3aWR0aCkp
OwotICAgIEFTU0VSVCh0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSA+PSAoeW9mZnNldCAr
IGhlaWdodCkpOwotICAgIEFTU0VSVCh0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2
ZWwpID09IGZvcm1hdCk7Ci0gICAgQVNTRVJUKHRleC0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9
PSB0eXBlKTsKLSAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBW
ZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0
b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91
bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7ICAK
LSAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQoKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1
YkltYWdlMkQiLCAiYmFkIGltYWdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0cmFj
dG9yLmltYWdlU291cmNlRm9ybWF0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3Ag
YWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOwotICAgIGNvbnN0IHZvaWQq
IGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsKLQotICAg
IGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcgJiYgIWZs
aXBZKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAgIGVsc2UgewotICAgICAg
ICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERhdGEsIGZv
cm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdlRXh0cmFj
dG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1hZ2VFeHRy
YWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4
SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IDEpOwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIGZvcm1hdCwgdHlwZSwgIG5lZWRD
b252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSwgZWMpOwotICAgIGlmICht
X3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4
ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhTdWJJbWFnZTJEIiwgbGV2ZWwsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsTm90QWxsb3dlZCkKLSAgICAgICAg
fHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJj
ZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAw
LCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0gICAg
dm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKLSAgICBWZWN0b3I8dWludDhfdD4g
dGVtcERhdGE7Ci0gICAgYm9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKLSAgICBp
ZiAoZGF0YSAmJiAobV91bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7
Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdW5wYWNrQWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZGF0YSA9IHRlbXBEYXRhLmRhdGEoKTsKLSAgICAgICAgY2hhbmdlVW5w
YWNrQWxpZ25tZW50ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVu
dCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLCBlYyk7
Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhl
bFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGln
bm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXBpeGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1h
Z2UyRCwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsICBwaXhlbHMtPndp
ZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNl
dCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGJv
b2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRh
IGlzIGFsd2F5cyBvZiBmb3JtYXQgUkdCQTguCi0gICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVk
ZWQgaWYgZGVzdGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRF
IGFuZCBubyBGbGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBp
ZiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgIW1fdW5wYWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSkKLSAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNl
IHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3Jt
YXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAh
PSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpV
TlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIGZv
cm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgp
LT5kYXRhKCksIGVjKTsKLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50
KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgidGV4U3Vi
SW1hZ2UyRCIsIGltYWdlLCBlYykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJl
cihpbWFnZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NWR0ltYWdl
KCkpCi0gICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFnZUZv
clJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7Ci0KLSAg
ICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQi
LCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBm
b3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCks
IDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZv
cm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1s
RG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGNhbnZhcywgZWMp
Ci0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFn
ZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBjYW52
YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwg
eW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdl
RGF0YSA9IGNhbnZhcy0+Z2V0SW1hZ2VEYXRhKCk7Ci0gICAgaWYgKGltYWdlRGF0YSkKLSAgICAg
ICAgdGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQs
IHR5cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOwotICAgIGVsc2UKLSAgICAgICAgdGV4U3ViSW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBj
YW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBt
X3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotI2lmIEVO
QUJMRShWSURFTykKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgdmlkZW8s
IGVjKQotICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3Vi
SW1hZ2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB2
aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBl
LCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEltYWdl
PiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJ
bWFnZU1vZGUoKSwgZWMpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICB0
ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQs
IHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbVZpZGVvLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLSNlbmRpZgotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
bG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgp
ICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTFmIiwgImxvY2F0aW9uIG5v
dCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xZnYiLCBsb2NhdGlvbiwgdiwgMSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCksIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYs
IHNpemUsIDEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGludCB4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVuaWZvcm0xaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3Jh
bSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKChsb2NhdGlvbi0+dHlwZSgp
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkgJiYgeCA+PSAoaW50KW1fdGV4dHVyZVVu
aXRzLnNpemUoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaSIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWkobG9jYXRp
b24tPmxvY2F0aW9uKCksIHgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkq
IHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygi
dW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2LCAxKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9j
YXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdi0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKHYtPmRhdGEoKVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZVVuaXRzLnNp
emUoKSkpIHsKLSAgICAgICAgICAgICAgICBMT0coV2ViR0wsICJUZXh0dXJlIHVuaXQgc2l6ZT0l
enUsIHZbJWRdPSVkLiBMb2NhdGlvbiB0eXBlID0gJTA0WC4iLCBtX3RleHR1cmVVbml0cy5zaXpl
KCksIGksIHYtPmRhdGEoKVtpXSwgbG9jYXRpb24tPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ1bmlm
b3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpLCB2LT5kYXRhKCkpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2Nh
dGlvbiwgdiwgc2l6ZSwgMSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+
dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBl
KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoKChHQzNEaW50Kil2KVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVy
ZVVuaXRzLnNpemUoKSkpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaXYiLCAiaW52YWxpZCB0ZXh0
dXJlIHVuaXQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
c2l6ZSwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTJmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgeCwgeSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoInVuaWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkg
LyAyLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwg
R0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigp
LCBzaXplIC8gMiwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1bmlmb3JtMmkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJpKGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB4LCB5KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkg
LyAyLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
c2l6ZSAvIDIsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNm
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0Rm
bG9hdCB5LCBHQzNEZmxvYXQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJy
ZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtM2YiLCAibG9jYXRpb24gbm90IGZvciBjdXJy
ZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+
dW5pZm9ybTNmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCAzKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2Z2IiwgbG9jYXRpb24sIHYs
IHNpemUsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJv
Z3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNpIiwgImxvY2F0
aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeik7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRp
b24sIHYsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMywgdi0+ZGF0YSgpKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2Iiwg
bG9jYXRpb24sIHYsIHNpemUsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQt
PnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdD
M0RmbG9hdCB3LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVuaWZvcm00ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3Jh
bSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHosIHcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIDQpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwg
NCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24t
PnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm00aSIsICJs
b2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHks
IHosIHcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRpdiIs
IGxvY2F0aW9uLCB2LCA0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlm
b3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHYtPmRhdGEoKSk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9y
bTRpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9j
b250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdik7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0
cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYs
IDQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHRyYW5zcG9zZSwgdi0+ZGF0YSgp
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0
aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdHJh
bnNwb3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRy
aXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9jYXRpb24s
IHRyYW5zcG9zZSwgdiwgOSkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVuaWZv
cm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gOSwgdHJhbnNw
b3NlLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29s
ZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0
cml4M2Z2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgOSkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHNpemUgLyA5LCB0cmFuc3Bvc2UsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXg0
ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCAxNikpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0
aCgpIC8gMTYsIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNp
emUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1l
dGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIHYpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgYm9vbCBkZWxl
dGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoInVzZVByb2dyYW0iLCBwcm9ncmFt
LCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBw
cm9ncmFtID0gMDsKLSAgICBpZiAocHJvZ3JhbSAmJiAhcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVzZVByb2dyYW0iLCAicHJvZ3JhbSBub3QgdmFsaWQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFtKSB7Ci0g
ICAgICAgIGlmIChtX2N1cnJlbnRQcm9ncmFtKQotICAgICAgICAgICAgbV9jdXJyZW50UHJvZ3Jh
bS0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQzRCgpKTsKLSAgICAgICAgbV9jdXJyZW50UHJv
Z3JhbSA9IHByb2dyYW07Ci0gICAgICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShvYmplY3RPclpl
cm8ocHJvZ3JhbSkpOwotICAgICAgICBpZiAocHJvZ3JhbSkKLSAgICAgICAgICAgIHByb2dyYW0t
Pm9uQXR0YWNoZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInZhbGlkYXRlUHJvZ3JhbSIsIHByb2dyYW0pKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT52YWxpZGF0ZVByb2dyYW0ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCi17Ci0gICAgdmVydGV4QXR0cmli
ZkltcGwoInZlcnRleEF0dHJpYjFmIiwgaW5kZXgsIDEsIHYwLCAwLjBmLCAwLjBmLCAxLjBmKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdihHQzNEdWlu
dCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVy
dGV4QXR0cmliMWZ2IiwgaW5kZXgsIHYsIDEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplKQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMWZ2Iiwg
aW5kZXgsIHYsIHNpemUsIDEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQot
ewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZiIsIGluZGV4LCAyLCB2MCwg
djEsIDAuMGYsIDEuMGYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCi17Ci0gICAgdmVydGV4
QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgMik7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2
ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgc2l6ZSwgMik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYw
LCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgi
dmVydGV4QXR0cmliM2YiLCBpbmRleCwgMywgdjAsIHYxLCB2MiwgMS4wZik7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEZs
b2F0MzJBcnJheSogdikKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNm
diIsIGluZGV4LCB2LCAzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkK
LXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNmdiIsIGluZGV4LCB2LCBz
aXplLCAzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRm
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYy
LCBHQzNEZmxvYXQgdjMpCi17Ci0gICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjRm
IiwgaW5kZXgsIDQsIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQot
ewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgsIHYsIDQp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1
aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIHZlcnRleEF0
dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgsIHYsIHNpemUsIDQpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBp
bmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVk
LCBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpCWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQ
b2ludGVyIiwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVy
IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChzaXplIDwgMSB8fCBzaXplID4gNCB8fCBzdHJpZGUgPCAwIHx8IHN0cmlkZSA+IDI1NSB8fCBv
ZmZzZXQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJiYWQgc2l6ZSwgc3RyaWRl
IG9yIG9mZnNldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV9ib3VuZEFy
cmF5QnVmZmVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAibm8gYm91bmQgQVJS
QVlfQlVGRkVSIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRGV0ZXJtaW5lIHRo
ZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIGJvdW5kIGJ1ZmZlciBjYW4gaG9sZCwgZ2l2ZW4gdGhl
IG9mZnNldCwgc2l6ZSwgdHlwZSBhbmQgc3RyaWRlCi0gICAgdW5zaWduZWQgaW50IHR5cGVTaXpl
ID0gc2l6ZUluQnl0ZXModHlwZSk7Ci0gICAgaWYgKCF0eXBlU2l6ZSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0
cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoKHN0cmlkZSAlIHR5cGVTaXplKSB8fCAoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zm
c2V0KSAlIHR5cGVTaXplKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgInN0cmlk
ZSBvciBvZmZzZXQgbm90IHZhbGlkIGZvciB0eXBlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVudCA9IHNpemUgKiB0eXBlU2l6ZTsKLQotICAg
IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGJ5
dGVzUGVyRWxlbWVudCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0aWNfY2Fz
dDxHQzNEaW50cHRyPihvZmZzZXQpLCBtX2JvdW5kQXJyYXlCdWZmZXIpOwotICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3Ry
aWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTaXplKCJ2aWV3cG9ydCIs
IHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT52aWV3cG9y
dCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29udGV4dE1vZGUg
bW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImxv
c2VDb250ZXh0IiwgImNvbnRleHQgYWxyZWFkeSBsb3N0Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBtX2NvbnRleHRHcm91cC0+bG9zZUNvbnRleHRHcm91cChtb2RlKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dExvc3QgPSB0cnVlOwotICAgIG1f
Y29udGV4dExvc3RNb2RlID0gbW9kZTsKLQotICAgIGlmIChtb2RlID09IFJlYWxMb3N0Q29udGV4
dCkgewotICAgICAgICAvLyBJbmZvcm0gdGhlIGVtYmVkZGVyIHRoYXQgYSBsb3N0IGNvbnRleHQg
d2FzIHJlY2VpdmVkLiBJbiByZXNwb25zZSwgdGhlIGVtYmVkZGVyIG1pZ2h0Ci0gICAgICAgIC8v
IGRlY2lkZSB0byB0YWtlIGFjdGlvbiBzdWNoIGFzIGFza2luZyB0aGUgdXNlciBmb3IgcGVybWlz
c2lvbiB0byB1c2UgV2ViR0wgYWdhaW4uCi0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjYW52
YXMoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLmNs
aWVudCgpLmRpZExvc2VXZWJHTENvbnRleHQobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSk7Ci0gICAgfQotCi0gICAgZGV0YWNoQW5kUmVtb3Zl
QWxsT2JqZWN0cygpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBN
YWtlIGFic29sdXRlbHkgc3VyZSB3ZSBkbyBub3QgcmVmZXIgdG8gYW4gYWxyZWFkeS1kZWxldGVk
IHRleHR1cmUgb3IgZnJhbWVidWZmZXIuCi0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4
dHVyZTJEQmluZGluZygwKTsKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZl
ckJpbmRpbmcoMCk7Ci0gICAgfQotCi0gICAgLy8gVGhlcmUgaXMgbm8gZGlyZWN0IHdheSB0byBj
bGVhciBlcnJvcnMgZnJvbSBhIEdMIGltcGxlbWVudGF0aW9uIGFuZAotICAgIC8vIGxvb3Bpbmcg
dW50aWwgZ2V0RXJyb3IoKSBiZWNvbWVzIE5PX0VSUk9SIG1pZ2h0IGNhdXNlIGFuIGluZmluaXRl
IGxvb3AgaWYKLSAgICAvLyB0aGUgZHJpdmVyIG9yIGNvbnRleHQgaW1wbGVtZW50YXRpb24gaGFk
IGEgYnVnLiBTbywgbG9vcCBhIHJlYXNvbmFibHkKLSAgICAvLyBsYXJnZSBudW1iZXIgb2YgdGlt
ZXMgdG8gY2xlYXIgYW55IGV4aXN0aW5nIGVycm9ycy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IDEwMDsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIENv
bnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5ID0gKG1vZGUgPT0gUmVhbExvc3RDb250ZXh0
KSA/IERpc3BsYXlJbkNvbnNvbGU6IERvbnREaXNwbGF5SW5Db25zb2xlOwotICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0wsICJsb3NlQ29u
dGV4dCIsICJjb250ZXh0IGxvc3QiLCBkaXNwbGF5KTsKLQotICAgIC8vIERvbid0IGFsbG93IHJl
c3RvcmF0aW9uIHVubGVzcyB0aGUgY29udGV4dCBsb3N0IGV2ZW50IGhhcyBib3RoIGJlZW4KLSAg
ICAvLyBkaXNwYXRjaGVkIGFuZCBpdHMgZGVmYXVsdCBiZWhhdmlvciBwcmV2ZW50ZWQuCi0gICAg
bV9yZXN0b3JlQWxsb3dlZCA9IGZhbHNlOwotCi0gICAgLy8gQWx3YXlzIGRlZmVyIHRoZSBkaXNw
YXRjaCBvZiB0aGUgY29udGV4dCBsb3N0IGV2ZW50LCB0byBpbXBsZW1lbnQKLSAgICAvLyB0aGUg
c3BlYyBiZWhhdmlvciBvZiBxdWV1ZWluZyBhIHRhc2suCi0gICAgbV9kaXNwYXRjaENvbnRleHRM
b3N0RXZlbnRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpmb3JjZVJlc3RvcmVDb250ZXh0KCkKLXsKLSAgICBpZiAoIWlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJjb250ZXh0IG5vdCBsb3N0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQp
IHsKLSAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFN5bnRoZXRpY0xvc3RDb250ZXh0
KQotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCByZXN0b3JhdGlvbiBub3Qg
YWxsb3dlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Jlc3RvcmVU
aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3QoMCk7
Ci19Ci0KLVBsYXRmb3JtTGF5ZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGxhdGZvcm1MYXll
cigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICghaXNDb250ZXh0TG9zdCgpICYmICFtX2lzUGVuZGlu
Z1BvbGljeVJlc29sdXRpb24pID8gbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVyKCkgOiAwOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVtb3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hh
cmVkT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0R3JvdXAtPnJlbW92ZU9iamVjdChv
YmplY3QpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkU2hhcmVkT2JqZWN0
KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5
UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0
KCkpOwotICAgIG1fY29udGV4dEdyb3VwLT5hZGRPYmplY3Qob2JqZWN0KTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0T2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZENvbnRleHRPYmplY3QoV2ViR0xDb250
ZXh0T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOwotICAg
IG1fY29udGV4dE9iamVjdHMuYWRkKG9iamVjdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCkKLXsKLSAgICBpZiAobV9pc1BlbmRp
bmdQb2xpY3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAobV9jb250
ZXh0T2JqZWN0cy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIEhhc2hTZXQ8V2ViR0xDb250ZXh0T2Jq
ZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0T2JqZWN0cy5iZWdpbigpOwotICAgICAgICAo
Kml0KS0+ZGV0YWNoQ29udGV4dCgpOwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RvcCgpCi17Ci0gICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgewotICAgICAgICBm
b3JjZUxvc3RDb250ZXh0KFN5bnRoZXRpY0xvc3RDb250ZXh0KTsKLSAgICAgICAgZGVzdHJveUdy
YXBoaWNzQ29udGV4dDNEKCk7Ci0gICAgfQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRCb29sZWFuUGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIEdD
M0Rib29sZWFuIHZhbHVlID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCAm
dmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUp
KTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm9vbGVhbkFy
cmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIGlmIChwbmFtZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLKSB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oMCwgMCk7Ci0gICAgfQotICAgIEdDM0Rib29s
ZWFuIHZhbHVlWzRdID0gezB9OwotICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHZh
bHVlKTsKLSAgICBib29sIGJvb2xWYWx1ZVs0XTsKLSAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwg
NDsgKytpaSkKLSAgICAgICAgYm9vbFZhbHVlW2lpXSA9IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVl
W2lpXSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhib29sVmFsdWUsIDQpOwotfQotCi1XZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSkKLXsKLSAgICBHQzNEZmxvYXQgdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0
RmxvYXR2KHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwot
fQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRJbnRQYXJhbWV0ZXIo
R0MzRGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZh
bHVlKTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7
Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUpKTsKLX0KLQotV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xGbG9hdEFycmF5UGFyYW1l
dGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIEdDM0RmbG9hdCB2YWx1ZVs0XSA9IHswfTsKLSAg
ICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgdmFsdWUpOwotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IDA7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpB
TElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfUkFOR0U6Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0NPTE9SOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFOgotICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLSAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsK
LX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xJbnRBcnJh
eVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9
OwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
fQotICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5n
dGgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrVGV4dHVyZUNvbXBs
ZXRlbmVzcyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGJvb2wgcHJlcGFyZVRvRHJhdykKLXsK
LSAgICBib29sIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOwotICAgIFdlYkdMVGV4dHVyZTo6VGV4
dHVyZUV4dGVuc2lvbkZsYWcgZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PFdlYkdMVGV4dHVyZTo6
VGV4dHVyZUV4dGVuc2lvbkZsYWc+KChtX29lc1RleHR1cmVGbG9hdExpbmVhciA/IFdlYkdMVGV4
dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsb2F0TGluZWFyRW5hYmxlZCA6IDApIHwgKG1fb2VzVGV4
dHVyZUhhbGZGbG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkhhbGZG
bG9hdExpbmVhckVuYWJsZWQgOiAwKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGlpID0gMDsgaWkg
PCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraWkpIHsKLSAgICAgICAgaWYgKChtX3RleHR1cmVV
bml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJE
QmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lvbnMpKQotICAgICAgICAgICAg
fHwgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJl
VW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4
dGVuc2lvbnMpKSkgewotICAgICAgICAgICAgaWYgKGlpICE9IG1fYWN0aXZlVGV4dHVyZVVuaXQp
IHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoaWkpOwotICAgICAg
ICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KHJlc2V0QWN0aXZlVW5pdCkgewotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4
dHVyZShpaSk7Ci0gICAgICAgICAgICAgICAgcmVzZXRBY3RpdmVVbml0ID0gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBXZWJHTFRleHR1cmUqIHRleDJEOwotICAgICAgICAgICAg
V2ViR0xUZXh0dXJlKiB0ZXhDdWJlTWFwOwotICAgICAgICAgICAgaWYgKHByZXBhcmVUb0RyYXcp
IHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbXNnKFN0cmluZygidGV4dHVyZSBib3VuZCB0byB0
ZXh0dXJlIHVuaXQgIikgKyBTdHJpbmc6Om51bWJlcihpaSkKLSAgICAgICAgICAgICAgICAgICAg
KyAiIGlzIG5vdCByZW5kZXJhYmxlLiBJdCBtYXliZSBub24tcG93ZXItb2YtMiBhbmQgaGF2ZSBp
bmNvbXBhdGlibGUgdGV4dHVyZSBmaWx0ZXJpbmcgb3IgaXMgbm90ICd0ZXh0dXJlIGNvbXBsZXRl
JywiCi0gICAgICAgICAgICAgICAgICAgICsgIiBvciBpdCBpcyBhIGZsb2F0L2hhbGYtZmxvYXQg
dHlwZSB3aXRoIGxpbmVhciBmaWx0ZXJpbmcgYW5kIHdpdGhvdXQgdGhlIHJlbGV2YW50IGZsb2F0
L2hhbGYtZmxvYXQgbGluZWFyIGV4dGVuc2lvbiBlbmFibGVkLiIpOwotICAgICAgICAgICAgICAg
IHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGZ1bmN0aW9uTmFtZSwgbXNnLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICAgICAgICAgIHRleDJEID0gbV9ibGFja1RleHR1cmUyRC5nZXQoKTsKLSAgICAg
ICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV9ibGFja1RleHR1cmVDdWJlTWFwLmdldCgpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0ZXgyRCA9IG1fdGV4dHVyZVVuaXRz
W2lpXS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpOwotICAgICAgICAgICAgICAgIHRleEN1YmVNYXAg
PSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5k
aW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFj
a1RleHR1cmUoZXh0ZW5zaW9ucykpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0T3JaZXJvKHRleDJEKSk7
Ci0gICAgICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGlu
ZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLT5uZWVkVG9Vc2VC
bGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgb2JqZWN0T3JaZXJv
KHRleEN1YmVNYXApKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocmVzZXRBY3RpdmVVbml0
KQotICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUobV9hY3RpdmVUZXh0dXJlVW5pdCk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGYWxsYmFja0JsYWNrVGV4
dHVyZXMxeDEoKQotewotICAgIHVuc2lnbmVkIGNoYXIgYmxhY2tbXSA9IHswLCAwLCAwLCAyNTV9
OwotICAgIG1fYmxhY2tUZXh0dXJlMkQgPSBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9ibGFja1RleHR1
cmUyRC0+b2JqZWN0KCkpOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwotICAgIG1fYmxhY2tUZXh0
dXJlQ3ViZU1hcCA9IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBtX2JsYWNrVGV4dHVyZUN1YmVN
YXAtPm9iamVjdCgpKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1f
Y29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ksIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJs
YWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+
dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1osIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAg
ICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQLCAwKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4SW50ZXJuYWxG
b3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoR0MzRGVudW0gdGV4SW50ZXJuYWxGb3Jt
YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCkKLXsKLSAg
ICB1bnNpZ25lZCBuZWVkID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5uZWxCaXRzQnlGb3Jt
YXQodGV4SW50ZXJuYWxGb3JtYXQpOwotICAgIHVuc2lnbmVkIGhhdmUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChjb2xvckJ1ZmZlckZvcm1hdCk7Ci0gICAgcmV0
dXJuIChuZWVkICYgaGF2ZSkgPT0gbmVlZDsKLX0KLQotR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKQotewotICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCi0gICAg
ICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsK
LSAgICBpZiAobV9hdHRyaWJ1dGVzLmFscGhhKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkE7Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7Ci19Ci0KLWlu
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpCi17Ci0g
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmpl
Y3QoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZl
cldpZHRoKCk7Ci0gICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+
c2l6ZSgpLndpZHRoKCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCku
d2lkdGgoKTsKLX0KLQotaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1
ZmZlckhlaWdodCgpCi17Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5nZXRDb2xvckJ1ZmZlckhlaWdodCgpOwotICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIg
PyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJu
YWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKLX0KLQotV2ViR0xUZXh0dXJlKiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQotewot
ICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IG51bGxwdHI7Ci0gICAgc3dpdGNoICh0YXJnZXQp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgotICAgICAgICB0ZXh0
dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
Zy5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGlmICghdXNlU2l4RW51bXNG
b3JDdWJlTWFwKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0
Iik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICB0ZXh0
dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBC
aW5kaW5nLmdldCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQOgotICAgICAgICBpZiAodXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICB0ZXh0dXJlID0gbV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgp
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHRleHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBp
ZiAoIXRleHR1cmUpCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gdGV4dHVyZSIpOwotICAgIHJl
dHVybiB0ZXh0dXJlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVM
b2NhdGlvbkxlbmd0aChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQotewotICAgIGNvbnN0IHVuc2lnbmVkIG1heFdlYkdMTG9jYXRpb25MZW5ndGggPSAyNTY7
Ci0gICAgaWYgKHN0cmluZy5sZW5ndGgoKSA+IG1heFdlYkdMTG9jYXRpb25MZW5ndGgpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9uIGxlbmd0aCA+IDI1NiIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4
LCBHQzNEaW50IHkpCi17Ci0gICAgaWYgKHggPCAwIHx8IHkgPCAwKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJzaXplIDwgMCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTdHJpbmco
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlm
ICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
InN0cmluZyBub3QgQVNDSUkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAg
c3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEZXB0aFRl
eHR1cmUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiZGVwdGggdGV4dHVy
ZSBmb3JtYXRzIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZh
dWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZm9ybWF0Iik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQ6Ci0gICAgICAgIGlmIChtX29lc1RleHR1cmVGbG9hdCkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9P
RVM6Ci0gICAgICAgIGlmIChtX29lc1RleHR1cmVIYWxmRmxvYXQpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfODoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEZXB0
aFRleHR1cmUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0
ZXh0dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29tYmluYXRpb24gb2YgZm9ybWF0
IGFuZCB0eXBlIGlzIHN1cHBvcnRlZC4KLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxV
TUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6Ci0g
ICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAg
ICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAotICAgICAgICAgICAg
JiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBmb3JtYXQiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF81XzZfNQotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkhBTEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlw
ZSBmb3IgUkdCIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAg
ICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAgICAg
ICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80
Ci0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VF81XzVfNV8xCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9P
RVMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0JBIGZv
cm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAg
ICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIGZvcm1hdC4gREVQVEhfQ09NUE9ORU5UIG5vdCBlbmFibGVkIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB0eXBlIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxldmVsID4gMCkgewotICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAibGV2ZWwgbXVzdCBiZSAwIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7
Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6Ci0gICAgICAgIGlmICghbV93
ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQu
IERFUFRIX1NURU5DSUwgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UXzI0XzgpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZv
ciBERVBUSF9TVEVOQ0lMIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChsZXZlbCA+IDApIHsKLSAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhfU1RFTkNJTCBmb3JtYXQiKTsKLSAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNMZXZlbChjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkKLXsK
LSAgICBpZiAobGV2ZWwgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCA8IDAiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIGlmIChsZXZlbCA+PSBt
X21heFRleHR1cmVMZXZlbCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIG91dCBvZiBy
YW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9aOgotICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVs
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IC8vIFRoaXMgZnVuY3Rpb24gb25seSBjaGVja3MgaWYgbGV2ZWwgaXMgbGVnYWwsIHNvIHdlIHJl
dHVybiB0cnVlIGFuZCBkb24ndAotICAgIC8vIGdlbmVyYXRlIElOVkFMSURfRU5VTSBpZiB0YXJn
ZXQgaXMgaWxsZWdhbC4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlKQotewotICAgIC8vIFdlIGFic29sdXRlbHkgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgZm9y
bWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9uLgotICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGVudHJ5IHBv
aW50cyB0YWtpbmcgSFRNTEltYWdlLCBldGMuIHdpbGwgcHJvZHVjZQotICAgIC8vIHRlbXBvcmFy
eSBkYXRhIGJhc2VkIG9uIHRoaXMgY29tYmluYXRpb24sIHNvIGl0IG11c3QgYmUgbGVnYWwuCi0g
ICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZ1bmN0aW9uTmFtZSwgZm9ybWF0
LCB0eXBlLCBsZXZlbCkgfHwgIXZhbGlkYXRlVGV4RnVuY0xldmVsKGZ1bmN0aW9uTmFtZSwgdGFy
Z2V0LCBsZXZlbCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh3aWR0aCA8IDAg
fHwgaGVpZ2h0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR0MzRGludCBtYXhUZXh0dXJl
U2l6ZUZvckxldmVsID0gcG93KDIuMCwgbV9tYXhUZXh0dXJlTGV2ZWwgLSAxIC0gbGV2ZWwpOwot
ICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRDoKLSAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCB8fCBoZWln
aHQgPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lk
dGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBpZiAoZnVuY3Rpb25UeXBl
ICE9IFRleFN1YkltYWdlMkQgJiYgd2lkdGggIT0gaGVpZ2h0KSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAid2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1hcCIpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgaGVpZ2h0IGhl
cmUuIEZvciB0ZXhJbWFnZSB3aWR0aCA9PSBoZWlnaHQuCi0gICAgICAgIC8vIEZvciB0ZXhTdWJJ
bWFnZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB3aGVuIGNoZWNraW5nIHlvZmZzZXQgKyBoZWlnaHQg
aXMgaW4gcmFuZ2UuCi0gICAgICAgIGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdlIGZv
ciBjdWJlIG1hcCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9IGlu
dGVybmFsZm9ybWF0KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZm9ybWF0ICE9IGludGVybmFs
Zm9ybWF0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoYm9yZGVy
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJib3JkZXIgIT0gMCIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFy
cmF5QnVmZmVyVmlldyogcGl4ZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTnVsbERpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uKQotewotICAgIGlmICgh
cGl4ZWxzKSB7Ci0gICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBOdWxsQWxsb3dlZCkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1h
dEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5cGUsIGxldmVsKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5h
bWUsIGZvcm1hdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgIGlm
IChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX0JZVEUgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWlu
dDhBcnJheSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAg
ICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQxNikgewotICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX1NIT1JUIGJ1dCBBcnJheUJ1ZmZlclZpZXcg
bm90IFVpbnQxNkFycmF5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6IC8vIE9F
U190ZXh0dXJlX2Zsb2F0Ci0gICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5
cGVGbG9hdDMyKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgRkxPQVQgYnV0IEFy
cmF5QnVmZmVyVmlldyBub3QgRmxvYXQzMkFycmF5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQKLSAgICAgICAgLy8g
QXMgcGVyIHRoZSBzcGVjaWZpY2F0aW9uLCBBcnJheUJ1ZmZlclZpZXcgc2hvdWxkIGJlIG51bGwg
d2hlbgotICAgICAgICAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGlzIGVuYWJsZWQuCi0gICAg
ICAgIGlmIChwaXhlbHMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBIQUxGX0ZM
T0FUX09FUyBidXQgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBOVUxMIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IHRv
dGFsQnl0ZXNSZXF1aXJlZDsKLSAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0
ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3VucGFja0Fs
aWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7Ci0gICAgaWYgKGVycm9yICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJv
ciwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGRpbWVuc2lvbnMiKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3Rh
bEJ5dGVzUmVxdWlyZWQpIHsKLSAgICAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpIHsK
LSAgICAgICAgICBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9y
bWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKLSAg
ICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPT0gdG90YWxCeXRlc1JlcXVpcmVkKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmlnIGVub3Vn
aCBmb3IgcmVxdWVzdCB3aXRoIFVOUEFDS19BTElHTk1FTlQgPiAxIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0Iik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoR0MzRGVudW0gZm9y
bWF0KQotewotICAgIHJldHVybiBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5jb250YWlucyhm
b3JtYXQpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVz
c2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyog
cGl4ZWxzKQotewotICAgIGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBwaXhl
bHMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAod2lkdGggPCAwIHx8
IGhlaWdodCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCBieXRlc1Jl
cXVpcmVkID0gMDsKLQotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX0FUQ19SR0JfQU1EOgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQg
a0Jsb2NrU2l6ZSA9IDg7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0Owot
ICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7Ci0gICAgICAgICAgICBpbnQg
bnVtQmxvY2tzQWNyb3NzID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRo
OwotICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0
IC0gMSkgLyBrQmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxv
Y2tzQWNyb3NzICogbnVtQmxvY2tzRG93biAqIGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1
X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9FWFBMSUNJ
VF9BTFBIQV9BTUQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFf
SU5URVJQT0xBVEVEX0FMUEhBX0FNRDoKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgaW50
IGtCbG9ja1NpemUgPSAxNjsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7
Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgICAgIGlu
dCBudW1CbG9ja3NBY3Jvc3MgPSAod2lkdGggKyBrQmxvY2tXaWR0aCAtIDEpIC8ga0Jsb2NrV2lk
dGg7Ci0gICAgICAgICAgICBpbnQgbnVtQmxvY2tzRG93biA9IChoZWlnaHQgKyBrQmxvY2tIZWln
aHQgLSAxKSAvIGtCbG9ja0hlaWdodDsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1C
bG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3duICoga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENf
NEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRD
XzRCUFBWMV9JTUc6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXpl
ID0gODsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDg7Ci0gICAgICAgICAg
ICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gODsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQg
PSAoc3RkOjptYXgod2lkdGgsIGtCbG9ja1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2Nr
SGVpZ2h0KSAqIDQgKyA3KSAvIGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1H
OgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7Ci0gICAg
ICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSAxNjsKLSAgICAgICAgICAgIGNvbnN0IGlu
dCBrQmxvY2tIZWlnaHQgPSA4OwotICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IChzdGQ6Om1h
eCh3aWR0aCwga0Jsb2NrV2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tIZWlnaHQpICog
MiArIDcpIC8ga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdCIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpICE9IGJ5dGVzUmVx
dWlyZWQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxlbmd0aCBvZiBBcnJheUJ1ZmZlclZpZXcgaXMg
bm90IGNvcnJlY3QgZm9yIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDogewotICAgICAgICBj
b25zdCBHQzNEc2l6ZWkga0Jsb2NrV2lkdGggPSA0OwotICAgICAgICBjb25zdCBHQzNEc2l6ZWkg
a0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgY29uc3QgR0MzRGludCBtYXhUZXh0dXJlU2l6ZSA9
IHRhcmdldCA/IG1fbWF4VGV4dHVyZVNpemUgOiBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZTsKLSAg
ICAgICAgY29uc3QgR0MzRHNpemVpIG1heENvbXByZXNzZWREaW1lbnNpb24gPSBtYXhUZXh0dXJl
U2l6ZSA+PiBsZXZlbDsKLSAgICAgICAgYm9vbCB3aWR0aFZhbGlkID0gKGxldmVsICYmIHdpZHRo
ID09IDEpIHx8IChsZXZlbCAmJiB3aWR0aCA9PSAyKSB8fCAoISh3aWR0aCAlIGtCbG9ja1dpZHRo
KSAmJiB3aWR0aCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9uKTsKLSAgICAgICAgYm9vbCBoZWln
aHRWYWxpZCA9IChsZXZlbCAmJiBoZWlnaHQgPT0gMSkgfHwgKGxldmVsICYmIGhlaWdodCA9PSAy
KSB8fCAoIShoZWlnaHQgJSBrQmxvY2tIZWlnaHQpICYmIGhlaWdodCA8PSBtYXhDb21wcmVzc2Vk
RGltZW5zaW9uKTsKLSAgICAgICAgaWYgKCF3aWR0aFZhbGlkIHx8ICFoZWlnaHRWYWxpZCkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBmb3IgbGV2
ZWwiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BW
UlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BW
UlRDXzJCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9Q
VlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFf
UFZSVENfMkJQUFYxX0lNRzoKLSAgICAgICAgLy8gSGVpZ2h0IGFuZCB3aWR0aCBtdXN0IGJlIHBv
d2VycyBvZiAyLgotICAgICAgICBpZiAoKHdpZHRoICYgKHdpZHRoIC0gMSkpIHx8IChoZWlnaHQg
JiAoaGVpZ2h0IC0gMSkpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhl
aWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0g
Zm9ybWF0LCBXZWJHTFRleHR1cmUqIHRleCkKLXsKLSAgICBpZiAoeG9mZnNldCA8IDAgfHwgeW9m
ZnNldCA8IDApIHsKLSAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IG9yIHlvZmZzZXQgPCAwIik7Ci0g
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgotICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDogewotICAgICAgICBjb25z
dCBpbnQga0Jsb2NrV2lkdGggPSA0OwotICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0g
NDsKLSAgICAgICAgaWYgKCh4b2Zmc2V0ICUga0Jsb2NrV2lkdGgpIHx8ICh5b2Zmc2V0ICUga0Js
b2NrSGVpZ2h0KSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ4b2Zmc2V0IG9yIHlvZmZz
ZXQgbm90IG11bHRpcGxlIG9mIDQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICBpZiAod2lkdGggLSB4b2Zmc2V0ID4gdGV4LT5nZXRXaWR0aCh0YXJnZXQs
IGxldmVsKQotICAgICAgICAgICAgfHwgaGVpZ2h0IC0geW9mZnNldCA+IHRleC0+Z2V0SGVpZ2h0
KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMg
b3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIHZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVuc2lvbnMoZnVuY3Rpb25OYW1l
LCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQpOwotICAgIH0KLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRzoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfMkJQUFYxX0lNRzoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1HOiB7Ci0gICAg
ICAgIGlmICh4b2Zmc2V0IHx8IHlvZmZzZXQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
eG9mZnNldCBhbmQgeW9mZnNldCBtdXN0IGJlIHplcm8iKTsKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAod2lkdGggIT0gdGV4LT5nZXRXaWR0aCh0YXJn
ZXQsIGxldmVsKQotICAgICAgICAgICAgfHwgaGVpZ2h0ICE9IHRleC0+Z2V0SGVpZ2h0KHRhcmdl
dCwgbGV2ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgbXVzdCBt
YXRjaCBleGlzdGluZyBsZXZlbCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICB9Ci0gICAgICAgIHJldHVybiB2YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0
aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKLSAgICB9Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd01vZGUoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSBtb2RlKQotewotICAgIHN3aXRjaCAobW9kZSkgewotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlBPSU5UUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5F
X1NUUklQOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfTE9PUDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
UklBTkdMRV9TVFJJUDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU46
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTOgotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGRyYXcgbW9kZSIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
KQotewotICAgIGlmIChtX3N0ZW5jaWxNYXNrICE9IG1fc3RlbmNpbE1hc2tCYWNrIHx8IG1fc3Rl
bmNpbEZ1bmNSZWYgIT0gbV9zdGVuY2lsRnVuY1JlZkJhY2sgfHwgbV9zdGVuY2lsRnVuY01hc2sg
IT0gbV9zdGVuY2lsRnVuY01hc2tCYWNrKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZnJvbnQg
YW5kIGJhY2sgc3RlbmNpbHMgc2V0dGluZ3MgZG8gbm90IG1hdGNoIik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2YWxpZGF0ZVN0ZW5jaWxGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRGVudW0gZnVuYykKLXsKLSAgICBzd2l0Y2ggKGZ1bmMpIHsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpORVZFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMRVNTOgotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpHUkVBVEVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFUVVBTDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpOT1RFUVVBTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFdBWVM6Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZnVu
Y3Rpb24iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3Nh
Z2UpCi17Ci0gICAgaWYgKCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLS1tX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKLSAgICBwcmlu
dFdhcm5pbmdUb0NvbnNvbGUobWVzc2FnZSk7Ci0KLSAgICBpZiAoIW1fbnVtR0xFcnJvcnNUb0Nv
bnNvbGVBbGxvd2VkKQotICAgICAgICBwcmludFdhcm5pbmdUb0NvbnNvbGUoIldlYkdMOiB0b28g
bWFueSBlcnJvcnMsIG5vIG1vcmUgZXJyb3JzIHdpbGwgYmUgcmVwb3J0ZWQgdG8gdGhlIGNvbnNv
bGUgZm9yIHRoaXMgY29udGV4dC4iKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnByaW50V2FybmluZ1RvQ29uc29sZShjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCi17Ci0gICAgaWYg
KCFjYW52YXMoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGNhbnZhcygpLT5kb2N1bWVudCgpLmFk
ZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OlJlbmRlcmluZywgTWVzc2FnZUxldmVsOjpX
YXJuaW5nLCBtZXNzYWdlKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCkKLXsKLSAgICBpZiAodGFyZ2V0ICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHN3aXRjaCAo
YXR0YWNobWVudCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1F
TlQwOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQ6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVycwotICAgICAgICAg
ICAgJiYgYXR0YWNobWVudCA+IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMAot
ICAgICAgICAgICAgJiYgYXR0YWNobWVudCA8IHN0YXRpY19jYXN0PEdDM0RlbnVtPihHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgKyBnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkp
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgYXR0YWNobWVu
dCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX0FERDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGVU5DX1NVQlRSQUNUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZVTkNfUkVWRVJTRV9TVUJUUkFDVDoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUJsZW5k
RnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBzcmMsIEdDM0Rl
bnVtIGRzdCkKLXsKLSAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5U
X0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0NP
TE9SKQotICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQ
SEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEp
KQotICAgICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1Ig
fHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCi0g
ICAgICAgICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9BTFBIQSB8
fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSkpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW5jb21wYXRpYmxlIHNyYyBhbmQgZHN0Iik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSBjYXApCi17Ci0gICAgc3dpdGNoIChjYXApIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVUxM
X0ZBQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UE9MWUdPTl9PRkZTRVRfRklMTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVf
QUxQSEFfVE9fQ09WRVJBR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NP
VkVSQUdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVDoKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6Ci0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgY2FwYWJpbGl0eSIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBH
QzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQotewotICAgIGlmICghdikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlvbk5hbWUsIGxvY2F0aW9u
LCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRNaW5TaXplKTsKLX0KLQot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgaWYg
KCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1
bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1
aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdDM0RzaXpl
aSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYsIHNpemUsIHJlcXVpcmVk
TWluU2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVVuaWZv
cm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJB
cnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKLXsKLSAgICBpZiAoIXYpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1l
LCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0aCgpLCByZXF1aXJlZE1p
blNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3Jt
TWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCB2b2lkKiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKLXsKLSAgICBpZiAoIWxv
Y2F0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFt
KCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9u
IGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIGlmICghdikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAodHJhbnNwb3NlKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgaWYgKHNpemUgPCByZXF1aXJlZE1pblNpemUgfHwgKHNpemUgJSByZXF1aXJlZE1p
blNpemUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotV2ViR0xCdWZmZXIqIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpCi17Ci0g
ICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUjoKLSAgICAgICAgYnVm
ZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKS5n
ZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlf
QlVGRkVSOgotICAgICAgICBidWZmZXIgPSBtX2JvdW5kQXJyYXlCdWZmZXIuZ2V0KCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0
Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBpZiAoIWJ1ZmZlcikgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0gICAgc3dpdGNoICh1c2FnZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNUUkVBTV9EUkFXOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFX
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJBVzoKLSAgICAgICAgcmV0
dXJuIGJ1ZmZlcjsKLSAgICB9Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB1c2FnZSIpOwotICAgIHJl
dHVybiBudWxscHRyOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVI
VE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVu
dCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICghaW1hZ2UgfHwgIWltYWdl
LT5jYWNoZWRJbWFnZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBpbWFnZSIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNvbnN0IFVSTCYgdXJsID0gaW1hZ2UtPmNhY2hl
ZEltYWdlKCktPnJlc3BvbnNlKCkudXJsKCk7Ci0gICAgaWYgKHVybC5pc051bGwoKSB8fCB1cmwu
aXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IGltYWdlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHdvdWxkVGFp
bnRPcmlnaW4oaW1hZ2UpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigpKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJubyBjYW52YXMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAo
d291bGRUYWludE9yaWdpbihjYW52YXMpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi0jaWYg
RU5BQkxFKFZJREVPKQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlSFRNTFZp
ZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxWaWRlb0VsZW1lbnQqIHZp
ZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIXZpZGVvIHx8ICF2aWRlby0+dmlk
ZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
bm8gdmlkZW8iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAod291bGRU
YWludE9yaWdpbih2aWRlbykpIHsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJbXBsKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBlY3RlZFNpemUsIEdDM0Rm
bG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0RmbG9hdCB2MykKLXsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiaW5kZXgg
b3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gSW4gR0wsIHdl
IHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KLSAgICBpZiAoaW5kZXggfHwgaXNH
TEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoZXhwZWN0ZWRTaXplKSB7Ci0gICAg
ICAgIGNhc2UgMToKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMWYoaW5kZXgs
IHYwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
M2YoaW5kZXgsIHYwLCB2MSwgdjIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
NDoKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGYoaW5kZXgsIHYwLCB2MSwg
djIsIHYzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIFZlcnRl
eEF0dHJpYlZhbHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVydGV4QXR0cmliVmFsdWVbaW5kZXhdOwot
ICAgIGF0dHJpYlZhbHVlLnZhbHVlWzBdID0gdjA7Ci0gICAgYXR0cmliVmFsdWUudmFsdWVbMV0g
PSB2MTsKLSAgICBhdHRyaWJWYWx1ZS52YWx1ZVsyXSA9IHYyOwotICAgIGF0dHJpYlZhbHVlLnZh
bHVlWzNdID0gdjM7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgRmxvYXQz
MkFycmF5KiB2LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQotewotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXYpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgdmVydGV4
QXR0cmliZnZJbXBsKGZ1bmN0aW9uTmFtZSwgaW5kZXgsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCks
IGV4cGVjdGVkU2l6ZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSkKLXsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJp
bnZhbGlkIHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaW5kZXggPj0g
bV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBvdXQgb2YgcmFu
Z2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0
aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgotICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxp
YW50KCkpIHsKLSAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsKLSAgICAgICAgY2FzZSAx
OgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHYpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAgICAgIG1fY29udGV4dC0+
dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIDM6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmdihpbmRleCwgdik7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAgICAgICAgICAgbV9jb250
ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICB9Ci0gICAgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0
ZXhBdHRyaWJWYWx1ZVtpbmRleF07Ci0gICAgYXR0cmliVmFsdWUuaW5pdFZhbHVlKCk7Ci0gICAg
Zm9yIChpbnQgaWkgPSAwOyBpaSA8IGV4cGVjdGVkU2l6ZTsgKytpaSkKLSAgICAgICAgYXR0cmli
VmFsdWUudmFsdWVbaWldID0gdltpaV07Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojppbml0VmVydGV4QXR0cmliMCgpCi17Ci0gICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKLSAgICAKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBj
cmVhdGVCdWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5vYmplY3QoKSk7Ci0gICAg
bV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOwotICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAw
KTsKLSAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyOwotICAg
IG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAw
KTsKLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOwotICAgIG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVl
WzBdID0gMC4wZjsKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXSA9IDAuMGY7Ci0g
ICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSAwLjBmOwotICAgIG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKLSAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmls
bCA9IGZhbHNlOwotICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUgPSBmYWxzZTsKLX0KLQot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVsYXRlVmVydGV4QXR0cmliMChHQzNEc2l6
ZWkgbnVtVmVydGV4KQotewotICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZl
cnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVy
dGV4QXR0cmliU3RhdGUoMCk7Ci0gICAgY29uc3QgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJpYlZh
bHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVswXTsKLSAgICBpZiAoIW1fY3VycmVudFByb2dyYW0p
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29sIHVzaW5nVmVydGV4QXR0cmliMCA9IG1f
Y3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCk7Ci0gICAgaWYgKHVzaW5nVmVy
dGV4QXR0cmliMCkKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJlZm9yZSA9IHRydWU7Ci0g
ICAgaWYgKHN0YXRlLmVuYWJsZWQgJiYgdXNpbmdWZXJ0ZXhBdHRyaWIwKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgaWYgKCF1c2luZ1ZlcnRleEF0dHJpYjAgJiYgIW1fdmVydGV4QXR0cmli
MFVzZWRCZWZvcmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBtX3ZlcnRleEF0dHJpYjBV
c2VkQmVmb3JlID0gdHJ1ZTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5vYmplY3QoKSk7Ci0g
ICAgR0MzRHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0gKG51bVZlcnRleCArIDEpICogNCAqIHNp
emVvZihHQzNEZmxvYXQpOwotICAgIGlmIChidWZmZXJEYXRhU2l6ZSA+IG1fdmVydGV4QXR0cmli
MEJ1ZmZlclNpemUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29u
dGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFTaXplLCAwLCBHcmFwaGljc0NvbnRleHQz
RDo6RFlOQU1JQ19EUkFXKTsKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZSA9IGJ1
ZmZlckRhdGFTaXplOwotICAgICAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IHRydWU7
Ci0gICAgfQotICAgIGlmICh1c2luZ1ZlcnRleEF0dHJpYjAKLSAgICAgICAgJiYgKG1fZm9yY2VB
dHRyaWIwQnVmZmVyUmVmaWxsCi0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVswXSAh
PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXQotICAgICAgICAgICAgfHwgYXR0cmliVmFs
dWUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0KLSAgICAgICAgICAg
IHx8IGF0dHJpYlZhbHVlLnZhbHVlWzJdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzJd
Ci0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVszXSAhPSBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJWYWx1ZVszXSkpIHsKLSAgICAgICAgYXV0byBidWZmZXJEYXRhID0gc3RkOjptYWtlX3Vu
aXF1ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEpICogNCk7Ci0gICAgICAgIGZvciAoR0Mz
RHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAxOyArK2lpKSB7Ci0gICAgICAgICAgICBi
dWZmZXJEYXRhW2lpICogNF0gPSBhdHRyaWJWYWx1ZS52YWx1ZVswXTsKLSAgICAgICAgICAgIGJ1
ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsxXTsKLSAgICAgICAgICAg
IGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsyXTsKLSAgICAgICAg
ICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgM10gPSBhdHRyaWJWYWx1ZS52YWx1ZVszXTsKLSAgICAg
ICAgfQotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXSA9IGF0dHJpYlZhbHVl
LnZhbHVlWzBdOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXSA9IGF0dHJp
YlZhbHVlLnZhbHVlWzFdOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9
IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVszXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOwotICAgICAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZl
clJlZmlsbCA9IGZhbHNlOwotICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEoR3JhcGhp
Y3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVyRGF0YVNpemUsIGJ1ZmZlckRhdGEu
Z2V0KCkpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgNCwg
R3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAwKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0
dHJpYjBTaW11bGF0aW9uKCkKLXsKLSAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
OjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dFZlcnRleEF0dHJpYlN0YXRlKDApOwotICAgIGlmIChzdGF0ZS5idWZmZXJCaW5kaW5nICE9IG1f
dmVydGV4QXR0cmliMEJ1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3Jh
cGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJvKHN0YXRlLmJ1ZmZlckJp
bmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAs
IHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6ZWQsIHN0YXRlLm9yaWdpbmFs
U3RyaWRlLCBzdGF0ZS5vZmZzZXQpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJvKG1fYm91bmRBcnJh
eUJ1ZmZlci5nZXQoKSkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0
Y2hDb250ZXh0TG9zdEV2ZW50KCkKLXsKLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0RXZlbnQ+IGV2
ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0
bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOwotICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50
KGV2ZW50KTsKLSAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQo
KTsKLSAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExvc3RDb250ZXh0ICYmIG1fcmVz
dG9yZUFsbG93ZWQpCi0gICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRleHQoKQotewot
ICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKLSAgICBpZiAoIW1fY29udGV4dExvc3QpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9y
ZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZQotICAgIC8vIHdlYmdsY29udGV4
dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVyLgotICAgIC8vCi0gICAgLy8gQmVjYXVz
ZSBvZiB0aGUgd2F5IG1fcmVzdG9yZVRpbWVyIGlzIHNldCB1cCBmb3IgcmVhbCB2cy4gc3ludGhl
dGljIGxvc3QKLSAgICAvLyBjb250ZXh0IGV2ZW50cywgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBh
Ym91dCB0aGlzIHRlc3Qgc2hvcnQtY2lyY3VpdGluZwotICAgIC8vIHRoZSByZXRyeSBsb29wIGZv
ciByZWFsIGNvbnRleHQgbG9zdCBldmVudHMuCi0gICAgaWYgKCFtX3Jlc3RvcmVBbGxvd2VkKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgY29udGV4dExvc3RSZWFzb24gPSBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpOwotCi0gICAgc3dp
dGNoIChjb250ZXh0TG9zdFJlYXNvbikgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok5P
X0VSUk9SOgotICAgICAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb24g
bWlnaHQgbm90IGZ1bGx5Ci0gICAgICAgIC8vIHN1cHBvcnQgR0xfQVJCX3JvYnVzdG5lc3Mgc2Vt
YW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhlCi0gICAgICAgIC8vIFdFQkdMX2xvc2VfY29u
dGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVuIHVzZWQgdG8gZm9yY2UKLSAgICAgICAgLy8g
YSBsb3N0IGNvbnRleHQuCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpH
VUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6Ci0gICAgICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4
dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250ZXh0IHdhcwotICAgICAgICAvLyBndWlsdHkg
b2YgY2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQuCi0gICAgICAgIHByaW50V2FybmluZ1RvQ29u
c29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBvbiB0aGUgcGFnZSBjYXVzZWQgdGhlIGdyYXBo
aWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3JpbmcgdGhlIGNvbnRleHQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpJTk5PQ0VOVF9DT05URVhUX1JFU0VUX0FS
QjoKLSAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRoZSBjb250ZXh0IHRvIGJlIHJlc3RvcmVkLgot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VU5LTk9XTl9DT05URVhUX1JF
U0VUX0FSQjoKLSAgICAgICAgLy8gV2Fybi4gSWRlYWxseSwgcHJvbXB0IHRoZSB1c2VyIHRlbGxp
bmcgdGhlbSB0aGF0IFdlYkdMCi0gICAgICAgIC8vIGNvbnRlbnQgb24gdGhlIHBhZ2UgbWlnaHQg
aGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8KLSAgICAgICAgLy8gcmVzZXQgYW5kIGFz
ayB0aGVtIHdoZXRoZXIgdGhleSB3YW50IHRvIGNvbnRpbnVlIHJ1bm5pbmcKLSAgICAgICAgLy8g
dGhlIGNvbnRlbnQuIE9ubHkgaWYgdGhleSBzYXkgInllcyIgc2hvdWxkIHdlIHN0YXJ0Ci0gICAg
ICAgIC8vIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUgY29udGV4dC4KLSAgICAgICAgcHJpbnRX
YXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBjb250ZW50IG9uIHRoZSBwYWdlIG1pZ2h0
IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvIHJlc2V0Iik7Ci0gICAgICAgIGJyZWFr
OwotICAgIH0KLQotICAgIEZyYW1lKiBmcmFtZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLmZyYW1l
KCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFmcmFtZS0+
bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFtZS0+c2V0dGluZ3MoKS53ZWJHTEVuYWJs
ZWQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyogdmlldyA9IGZyYW1lLT52
aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0gICAgU2Nyb2xsVmlldyog
cm9vdCA9IHZpZXctPnJvb3QoKTsKLSAgICBpZiAoIXJvb3QpCi0gICAgICAgIHJldHVybjsKLSAg
ICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gcm9vdC0+aG9zdFdpbmRvdygpOwotICAgIGlmICgh
aG9zdFdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUobV9hdHRyaWJ1dGVzLCBob3N0
V2luZG93KSk7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHRMb3N0
TW9kZSA9PSBSZWFsTG9zdENvbnRleHQpCi0gICAgICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFy
dE9uZVNob3Qoc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAvLyBUaGlzIGxpa2VseSBzaG91bGRuJ3QgaGFwcGVuIGJ1dCBpcyB0aGUgYmVz
dCB3YXkgdG8gcmVwb3J0IGl0IHRvIHRoZSBXZWJHTCBhcHAuCi0gICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICIiLCAiZXJy
b3IgcmVzdG9yaW5nIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8v
IENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3aXRoIHRoZSBuZXcgR3JhcGhpY3NDb250
ZXh0M0QuCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKLSAgICAgICAgRHJhd2luZ0J1ZmZlcjo6UHJlc2VydmVE
cmF3aW5nQnVmZmVyIHByZXNlcnZlID0gbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZl
ciA/IERyYXdpbmdCdWZmZXI6OlByZXNlcnZlIDogRHJhd2luZ0J1ZmZlcjo6RGlzY2FyZDsKLSAg
ICAgICAgRHJhd2luZ0J1ZmZlcjo6QWxwaGFSZXF1aXJlbWVudCBhbHBoYSA9IG1fYXR0cmlidXRl
cy5hbHBoYSA/IERyYXdpbmdCdWZmZXI6OkFscGhhIDogRHJhd2luZ0J1ZmZlcjo6T3BhcXVlOwot
ICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoY29udGV4dC5n
ZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksIHByZXNlcnZlLCBhbHBoYSk7Ci0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgIH0KLQotICAgIG1fY29udGV4dCA9IGNvbnRl
eHQ7Ci0gICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOwotICAgIHNldHVwRmxhZ3MoKTsKLSAgICBp
bml0aWFsaXplTmV3Q29udGV4dCgpOwotICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50KFdlYkdM
Q29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dHJlc3RvcmVkRXZl
bnQsIGZhbHNlLCB0cnVlLCAiIikpOwotfQotCi1TdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjplbnN1cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYgdGV4dCkgY29uc3QKLXsKLSAgICBpZiAodGV4
dC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6ZW1wdHlTdHJpbmcoKTsKLSAgICByZXR1
cm4gdGV4dDsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hl
OjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKLSAgICA6IG1fYnVmZmVycyhzdGQ6
Om1ha2VfdW5pcXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj5bXT4oY2FwYWNpdHkpKQot
ICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKLXsKLX0KLQotSW1hZ2VCdWZmZXIqIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIoY29uc3QgSW50
U2l6ZSYgc2l6ZSkKLXsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbV9jYXBhY2l0
eTsgKytpKSB7Ci0gICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7
Ci0gICAgICAgIGlmICghYnVmKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChidWYt
PmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBi
dWJibGVUb0Zyb250KGkpOwotICAgICAgICByZXR1cm4gYnVmOwotICAgIH0KLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSwg
MSk7Ci0gICAgaWYgKCF0ZW1wKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpID0gc3Rk
OjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOwotICAgIG1fYnVmZmVyc1tpXSA9IFdURjo6bW92ZSh0
ZW1wKTsKLQotICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7Ci0gICAg
YnViYmxlVG9Gcm9udChpKTsKLSAgICByZXR1cm4gYnVmOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxlVG9Gcm9udChpbnQgaWR4KQot
ewotICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAwOyAtLWkpCi0gICAgICAgIG1fYnVmZmVyc1tp
XS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKLX0KLQotbmFtZXNwYWNlIHsKLQotICAgIFN0cmluZyBH
ZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJvcikKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoZXJy
b3IpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNOgotICAg
ICAgICAgICAgcmV0dXJuICJJTlZBTElEX0VOVU0iOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFOgotICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX1ZBTFVF
IjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT046Ci0g
ICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFUSU9OIjsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKLSAgICAgICAgICAgIHJldHVybiAiT1VUX09G
X01FTU9SWSI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OOgotICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTiI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlRFWFRfTE9T
VF9XRUJHTDoKLSAgICAgICAgICAgIHJldHVybiAiQ09OVEVYVF9MT1NUX1dFQkdMIjsKLSAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmZvcm1hdCgiV2ViR0wgRVJS
T1IoJTA0eCkiLCBlcnJvcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0gLy8gbmFtZXNwYWNlIGFu
b255bW91cwotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3ludGhlc2l6ZUdMRXJyb3Io
R0MzRGVudW0gZXJyb3IsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVz
Y3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5KQotewotICAgIGlmICht
X3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlICYmIGRpc3BsYXkgPT0gRGlzcGxheUluQ29uc29s
ZSkgewotICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIpICsgR2V0RXJyb3JTdHJp
bmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25OYW1lKSArICI6ICIgKyBTdHJpbmco
ZGVzY3JpcHRpb24pOwotICAgICAgcHJpbnRHTEVycm9yVG9Db25zb2xlKHN0cik7Ci0gICAgfQot
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOwotfQotCi0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwcmludEdMV2FybmluZ1RvQ29uc29sZShjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQotewotICAgIGlmIChtX3N5bnRo
ZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7Ci0gICAgICAgIFN0cmluZyBzdHIgPSBTdHJpbmcoIldl
YkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0cmluZyhkZXNjcmlwdGlv
bik7Ci0gICAgICAgIHByaW50R0xFcnJvclRvQ29uc29sZShzdHIpOwotICAgIH0KLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U3RlbmNpbFRlc3QoKQotewotICAgIGJvb2wg
aGF2ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKLQotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGlu
ZykKLSAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+aGFz
U3RlbmNpbEJ1ZmZlcigpOwotICAgIGVsc2UgewotICAgICAgICBSZWZQdHI8V2ViR0xDb250ZXh0
QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0gICAgICAg
IGhhdmVTdGVuY2lsQnVmZmVyID0gYXR0cmlidXRlcy0+c3RlbmNpbCgpOwotICAgIH0KLSAgICBl
bmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCwKLSAgICAgICAg
ICAgICAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCAmJiBoYXZlU3RlbmNpbEJ1ZmZlcik7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVPckRpc2FibGUoR0MzRGVudW0gY2Fw
YWJpbGl0eSwgYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKGVuYWJsZSkKLSAgICAgICAgbV9jb250
ZXh0LT5lbmFibGUoY2FwYWJpbGl0eSk7Ci0gICAgZWxzZQotICAgICAgICBtX2NvbnRleHQtPmRp
c2FibGUoY2FwYWJpbGl0eSk7Ci19Ci0KLUludFNpemUgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpj
bGFtcGVkQ2FudmFzU2l6ZSgpCi17Ci0gICAgcmV0dXJuIEludFNpemUoY2xhbXAoY2FudmFzKCkt
PndpZHRoKCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzBdKSwKLSAgICAgICAgICAgICAgICAgICBj
bGFtcChjYW52YXMoKS0+aGVpZ2h0KCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzFdKSk7Ci19Ci0K
LUdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhEcmF3QnVmZmVycygpCi17Ci0g
ICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGlm
ICghbV9tYXhEcmF3QnVmZmVycykKLSAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRl
bnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbV9tYXhEcmF3QnVmZmVycyk7Ci0gICAg
aWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdl
cnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0
dGFjaG1lbnRzKTsKLSAgICAvLyBXRUJHTF9kcmF3X2J1ZmZlcnMgcmVxdWlyZXMgTUFYX0NPTE9S
X0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMuCi0gICAgcmV0dXJuIHN0ZDo6bWluKG1f
bWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2htZW50cyk7Ci19Ci0KLUdDM0RpbnQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkKLXsKLSAgICBpZiAo
IXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtX21h
eENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5z
aW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRz
KTsKLSAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6c2V0QmFja0RyYXdCdWZmZXIoR0MzRGVudW0gYnVmKQotewotICAgIG1f
YmFja0RyYXdCdWZmZXIgPSBidWY7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCkKLXsKLSAgICBFeGNlcHRpb25Db2RlIGVjOwotICAg
IGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLmdldCgpLCBlYyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCi17Ci0gICAgRXhjZXB0aW9uQ29kZSBlYzsKLSAg
ICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlVW5p
dHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKSwgZWMpOwotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3VwcG9ydHNEcmF3QnVmZmVycygpCi17Ci0g
ICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2VkKSB7Ci0gICAgICAg
IG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQgPSB0cnVlOwotICAgICAgICBt
X2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKHRoaXMp
OwotICAgIH0KLSAgICByZXR1cm4gbV9kcmF3QnVmZmVyc1N1cHBvcnRlZDsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwg
R0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQotewot
ICAgIGlmICghdmFsaWRhdGVEcmF3QXJyYXlzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgbW9kZSwg
Zmlyc3QsIGNvdW50LCBwcmltY291bnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJp
bWNvdW50IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImRyYXdBcnJheXNJbnN0YW5jZWQiLCAicHJpbWNvdW50IDwgMCIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFwcmltY291bnQpIHsKLSAgICAg
ICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBj
bGVhcklmQ29tcG9zaXRlZCgpOwotCi0gICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0g
ZmFsc2U7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpCi0gICAgICAgIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQgPSBzaW11bGF0ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOwot
ICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxl
dGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgdHJ1ZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHBy
aW1jb3VudCk7Ci0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzSW5zdGFuY2VkKG1vZGUsIGZpcnN0
LCBjb3VudCwgcHJpbWNvdW50KTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0
ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRy
aWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAg
Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgZmFsc2UpOwot
ICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwg
R0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsK
LSAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7Ci0gICAgaWYgKCF2YWxpZGF0ZURyYXdFbGVt
ZW50cygiZHJhd0VsZW1lbnRzSW5zdGFuY2VkIiwgbW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCwg
bnVtRWxlbWVudHMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAocHJpbWNvdW50IDwgMCkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImRyYXdFbGVtZW50c0luc3RhbmNlZCIsICJwcmltY291bnQgPCAwIik7Ci0gICAgICAg
IHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXByaW1jb3VudCkgewotICAgICAgICBtYXJrQ29u
dGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNsZWFySWZDb21w
b3NpdGVkKCk7Ci0KLSAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAg
ICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQot
ICAgICAgICAgICAgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGlj
X2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpOwotICAgICAgICB2ZXJ0ZXhB
dHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKLSAg
ICB9Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1cmVD
b21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIHRydWUpOwotICAgIG1fY29udGV4
dC0+ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxH
QzNEaW50cHRyPihvZmZzZXQpLCBwcmltY291bnQpOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFu
dCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCi0gICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRl
clZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgp
KQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNl
ZCIsIGZhbHNlKTsKLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1
aW50IGRpdmlzb3IpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InZlcnRleEF0dHJpYkRpdmlzb3IiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0
dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3IpOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
RGl2aXNvcihpbmRleCwgZGl2aXNvcik7Ci19Ci0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMTc2OTk0KQko
ZnJvbSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDox
NzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250
ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDksIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRfaAorI2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAorCisjaW5jbHVkZSAi
QWN0aXZlRE9NT2JqZWN0LmgiCisjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgor
I2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRl
ICJXZWJHTEdldEluZm8uaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8cnVudGltZS9G
bG9hdDMyQXJyYXkuaD4KKyNpbmNsdWRlIDxydW50aW1lL0ludDMyQXJyYXkuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBB
TkdMRUluc3RhbmNlZEFycmF5czsKK2NsYXNzIEVYVEJsZW5kTWluTWF4OworY2xhc3MgRVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljOworY2xhc3MgRVhUU2hhZGVyVGV4dHVyZUxPRDsKK2NsYXNz
IEVYVHNSR0I7CitjbGFzcyBFWFRGcmFnRGVwdGg7CitjbGFzcyBIVE1MSW1hZ2VFbGVtZW50Owor
Y2xhc3MgSFRNTFZpZGVvRWxlbWVudDsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VE
YXRhOworY2xhc3MgSW50U2l6ZTsKK2NsYXNzIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM7CitjbGFz
cyBPRVNUZXh0dXJlRmxvYXQ7CitjbGFzcyBPRVNUZXh0dXJlRmxvYXRMaW5lYXI7CitjbGFzcyBP
RVNUZXh0dXJlSGFsZkZsb2F0OworY2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcjsKK2Ns
YXNzIE9FU1ZlcnRleEFycmF5T2JqZWN0OworY2xhc3MgT0VTRWxlbWVudEluZGV4VWludDsKK2Ns
YXNzIFdlYkdMQWN0aXZlSW5mbzsKK2NsYXNzIFdlYkdMQnVmZmVyOworY2xhc3MgV2ViR0xDb250
ZXh0R3JvdXA7CitjbGFzcyBXZWJHTENvbnRleHRPYmplY3Q7CitjbGFzcyBXZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDOworY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOworY2xhc3Mg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM7CitjbGFzcyBXZWJHTENvbnRleHRBdHRyaWJ1dGVz
OworY2xhc3MgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzsKK2NsYXNzIFdlYkdMRGVidWdTaGFkZXJz
OworY2xhc3MgV2ViR0xEZXB0aFRleHR1cmU7CitjbGFzcyBXZWJHTERyYXdCdWZmZXJzOworY2xh
c3MgV2ViR0xFeHRlbnNpb247CitjbGFzcyBXZWJHTEZyYW1lYnVmZmVyOworY2xhc3MgV2ViR0xM
b3NlQ29udGV4dDsKK2NsYXNzIFdlYkdMT2JqZWN0OworY2xhc3MgV2ViR0xQcm9ncmFtOworY2xh
c3MgV2ViR0xSZW5kZXJidWZmZXI7CitjbGFzcyBXZWJHTFNoYWRlcjsKK2NsYXNzIFdlYkdMU2hh
cmVkT2JqZWN0OworY2xhc3MgV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ7CitjbGFzcyBXZWJH
TFRleHR1cmU7CitjbGFzcyBXZWJHTFVuaWZvcm1Mb2NhdGlvbjsKK2NsYXNzIFdlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM7CisKK3R5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCBmaW5hbCA6IHB1YmxpYyBDYW52YXNSZW5kZXJpbmdDb250ZXh0
LCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gY3JlYXRlKEhUTUxDYW52YXNFbGVtZW50Kiwg
V2ViR0xDb250ZXh0QXR0cmlidXRlcyopOworICAgIHZpcnR1YWwgfldlYkdMUmVuZGVyaW5nQ29u
dGV4dCgpOworCisgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CisjaWYgUExBVEZPUk0oV0lOKQorICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgYWNj
ZWxlcmF0ZWQgM2QgY2FudmFzIG9uIFdpbmRvd3MuCisgICAgdmlydHVhbCBib29sIGlzQWNjZWxl
cmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQorI2Vsc2UKKyAgICB2aXJ0
dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0K
KyNlbmRpZgorCisgICAgaW50IGRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0OworICAgIGludCBk
cmF3aW5nQnVmZmVySGVpZ2h0KCkgY29uc3Q7CisKKyAgICB2b2lkIGFjdGl2ZVRleHR1cmUoR0Mz
RGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYXR0YWNoU2hhZGVyKFdl
YkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYmlu
ZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJp
bmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJpbmRCdWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBXZWJHTEJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJpbmRGcmFt
ZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqLCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCBiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xSZW5k
ZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBiaW5kVGV4dHVyZShHQzNEZW51
bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGJsZW5k
Q29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0Mz
RGZsb2F0IGFscGhhKTsKKyAgICB2b2lkIGJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSk7Cisg
ICAgdm9pZCBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0g
bW9kZUFscGhhKTsKKyAgICB2b2lkIGJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51
bSBkZmFjdG9yKTsKKyAgICB2b2lkIGJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwg
R0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpOwor
CisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIHNpemUsIEdD
M0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJW
aWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgYnVm
ZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVy
KiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVt
IHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRp
b25Db2RlJik7CisKKyAgICBHQzNEZW51bSBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVt
IHRhcmdldCk7CisgICAgdm9pZCBjbGVhcihHQzNEYml0ZmllbGQgbWFzayk7CisgICAgdm9pZCBj
bGVhckNvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwgR0MzRGZsb2F0IGJsdWUs
IEdDM0RmbG9hdCBhbHBoYSk7CisgICAgdm9pZCBjbGVhckRlcHRoKEdDM0RmbG9hdCk7CisgICAg
dm9pZCBjbGVhclN0ZW5jaWwoR0MzRGludCk7CisgICAgdm9pZCBjb2xvck1hc2soR0MzRGJvb2xl
YW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4g
YWxwaGEpOworICAgIHZvaWQgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNv
ZGUmKTsKKworICAgIHZvaWQgY29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIsIEFycmF5QnVmZmVyVmlldyogZGF0YSk7CisgICAgdm9pZCBjb21wcmVzc2VkVGV4U3Vi
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwg
R0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVy
VmlldyogZGF0YSk7CisKKyAgICB2b2lkIGNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKTsK
KyAgICB2b2lkIGNvcHlUZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOworCisgICAgUGFzc1JlZlB0cjxX
ZWJHTEJ1ZmZlcj4gY3JlYXRlQnVmZmVyKCk7CisgICAgUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVm
ZmVyPiBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIFBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBj
cmVhdGVQcm9ncmFtKCk7CisgICAgUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gY3JlYXRl
UmVuZGVyYnVmZmVyKCk7CisgICAgUGFzc1JlZlB0cjxXZWJHTFNoYWRlcj4gY3JlYXRlU2hhZGVy
KEdDM0RlbnVtIHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBQYXNzUmVmUHRyPFdlYkdMVGV4
dHVyZT4gY3JlYXRlVGV4dHVyZSgpOworCisgICAgdm9pZCBjdWxsRmFjZShHQzNEZW51bSBtb2Rl
KTsKKworICAgIHZvaWQgZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKik7CisgICAgdm9pZCBkZWxl
dGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKik7CisgICAgdm9pZCBkZWxldGVQcm9ncmFt
KFdlYkdMUHJvZ3JhbSopOworICAgIHZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVy
YnVmZmVyKik7CisgICAgdm9pZCBkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqKTsKKyAgICB2b2lk
IGRlbGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlKik7CisKKyAgICB2b2lkIGRlcHRoRnVuYyhHQzNE
ZW51bSk7CisgICAgdm9pZCBkZXB0aE1hc2soR0MzRGJvb2xlYW4pOworICAgIHZvaWQgZGVwdGhS
YW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKTsKKyAgICB2b2lkIGRldGFjaFNo
YWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIGRpc2FibGUoR0MzRGVudW0gY2FwKTsKKyAgICB2b2lkIGRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZHJhd0FycmF5
cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEV4Y2VwdGlv
bkNvZGUmKTsKKyAgICB2b2lkIGRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkg
Y291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsK
KworICAgIHZvaWQgZW5hYmxlKEdDM0RlbnVtIGNhcCk7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgZmlu
aXNoKCk7CisgICAgdm9pZCBmbHVzaCgpOworICAgIHZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJi
dWZmZXJ0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSosIEdDM0RpbnQgbGV2ZWwsIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIGZyb250RmFjZShHQzNEZW51bSBtb2RlKTsKKyAgICB2
b2lkIGdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCk7CisKKyAgICBQYXNzUmVmUHRyPFdl
YkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSosIEdDM0R1aW50IGlu
ZGV4LCBFeGNlcHRpb25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdl
dEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBib29sIGdldEF0dGFjaGVkU2hhZGVycyhXZWJHTFByb2dyYW0qLCBWZWN0b3I8
UmVmUHRyPFdlYkdMU2hhZGVyPj4mLCBFeGNlcHRpb25Db2RlJik7CisgICAgR0MzRGludCBnZXRB
dHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBTdHJpbmcmIG5hbWUpOworICAgIFdl
YkdMR2V0SW5mbyBnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFBhc3NSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmli
dXRlcz4gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICBHQzNEZW51bSBnZXRFcnJvcigpOwor
ICAgIFdlYkdMRXh0ZW5zaW9uKiBnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKTsKKyAg
ICBXZWJHTEdldEluZm8gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdldFByb2dyYW1QYXJhbWV0ZXIoV2ViR0xQ
cm9ncmFtKiwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBTdHJpbmcgZ2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYkdM
R2V0SW5mbyBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIFdlYkdMR2V0SW5mbyBnZXRTaGFkZXJQYXJh
bWV0ZXIoV2ViR0xTaGFkZXIqLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAg
IFN0cmluZyBnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgIFBhc3NSZWZQdHI8V2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ+IGdldFNoYWRlclByZWNp
c2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51bSBwcmVjaXNpb25UeXBlLCBF
eGNlcHRpb25Db2RlJik7CisgICAgU3RyaW5nIGdldFNoYWRlclNvdXJjZShXZWJHTFNoYWRlcios
IEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBWZWN0b3I8U3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNp
b25zKCk7CisgICAgV2ViR0xHZXRJbmZvIGdldFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CisgICAgV2ViR0xHZXRJbmZvIGdldFVu
aWZvcm0oV2ViR0xQcm9ncmFtKiwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBFeGNlcHRp
b25Db2RlJik7CisgICAgUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gZ2V0VW5pZm9y
bUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICBXZWJHTEdldEluZm8gZ2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIGxvbmcgbG9uZyBnZXRWZXJ0ZXhBdHRyaWJP
ZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKTsKKworICAgIHZvaWQgaGludChH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpOworICAgIEdDM0Rib29sZWFuIGlzQnVmZmVy
KFdlYkdMQnVmZmVyKik7CisgICAgYm9vbCBpc0NvbnRleHRMb3N0KCkgY29uc3Q7CisgICAgR0Mz
RGJvb2xlYW4gaXNFbmFibGVkKEdDM0RlbnVtIGNhcCk7CisgICAgR0MzRGJvb2xlYW4gaXNGcmFt
ZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKik7CisgICAgR0MzRGJvb2xlYW4gaXNQcm9ncmFtKFdl
YkdMUHJvZ3JhbSopOworICAgIEdDM0Rib29sZWFuIGlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVy
YnVmZmVyKik7CisgICAgR0MzRGJvb2xlYW4gaXNTaGFkZXIoV2ViR0xTaGFkZXIqKTsKKyAgICBH
QzNEYm9vbGVhbiBpc1RleHR1cmUoV2ViR0xUZXh0dXJlKik7CisKKyAgICB2b2lkIGxpbmVXaWR0
aChHQzNEZmxvYXQpOworICAgIHZvaWQgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgcGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQg
cGFyYW0pOworICAgIHZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNEZmxv
YXQgdW5pdHMpOworICAgIHZvaWQgcmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9p
ZCByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKKyAgICB2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2Uo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIHNhbXBsZUNvdmVyYWdlKEdDM0RmbG9hdCB2
YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KTsKKyAgICB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7CisgICAgdm9pZCBz
aGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7
CisgICAgdm9pZCBzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVp
bnQgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdD
M0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsKKyAgICB2b2lkIHN0ZW5j
aWxNYXNrKEdDM0R1aW50KTsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0g
ZmFjZSwgR0MzRHVpbnQgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwg
R0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFy
YXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51
bSB6cGFzcyk7CisKKyAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAg
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZp
ZXcqLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwgRXhjZXB0
aW9uQ29kZSYpOworICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2Rl
Jik7CisjaWYgRU5BQkxFKFZJREVPKQorICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQq
LCBFeGNlcHRpb25Db2RlJik7CisjZW5kaWYKKworICAgIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pOworICAgIHZvaWQg
dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBh
cmFtKTsKKworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3
KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdl
RGF0YSosIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwK
KyAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBI
VE1MSW1hZ2VFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGlu
dCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2lmIEVOQUJM
RShWSURFTykKKyAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50
KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKKyAgICB2b2lkIHVuaWZvcm0xZihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCB1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3Jt
MWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTFpKGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdm9pZCB1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTFp
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0Rz
aXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtMmYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2
b2lkIHVuaWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNE
ZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlm
b3JtMmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTJpdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICB2b2lkIHVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgdW5pZm9ybTNmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZs
b2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZv
aWQgdW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0
MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTNmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNp
emUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9p
ZCB1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGlu
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm00
Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3LCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCB1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtNGZ2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkg
c2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwg
R0MzRGludCB3LCBFeGNlcHRpb25Db2RlJik7CisgICAgdm9pZCB1bmlmb3JtNGl2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29k
ZSYpOworICAgIHZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisgICAg
dm9pZCB1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25D
b2RlJik7CisgICAgdm9pZCB1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDNm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5z
cG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdW5p
Zm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Ri
b29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2Vw
dGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSog
dmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
M0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2
b2lkIHVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQg
dmFsaWRhdGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIHZv
aWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KTsKKyAgICB2b2lk
IHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwor
ICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVl
cywgR0MzRHNpemVpIHNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYo
R0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRleEF0
dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXpl
KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwg
R0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgIHZvaWQgdmVydGV4QXR0cmli
M2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOwor
ICAgIHZvaWQgdmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNE
ZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KTsKKyAgICB2b2lkIHZlcnRleEF0dHJp
YjRmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOworICAgIHZvaWQgdmVy
dGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVp
IHNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBpbmRleCwgR0Mz
RGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVkLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0
LCBFeGNlcHRpb25Db2RlJik7CisKKyAgICB2b2lkIHZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOworCisgICAgLy8gV0VCS0lU
X2xvc2VfY29udGV4dCBzdXBwb3J0CisgICAgZW51bSBMb3N0Q29udGV4dE1vZGUgeworICAgICAg
ICAvLyBMb3N0IGNvbnRleHQgb2NjdXJyZWQgYXQgdGhlIGdyYXBoaWNzIHN5c3RlbSBsZXZlbC4K
KyAgICAgICAgUmVhbExvc3RDb250ZXh0LAorCisgICAgICAgIC8vIExvc3QgY29udGV4dCBwcm92
b2tlZCBieSBXRUJLSVRfbG9zZV9jb250ZXh0LgorICAgICAgICBTeW50aGV0aWNMb3N0Q29udGV4
dAorICAgIH07CisgICAgdm9pZCBmb3JjZUxvc3RDb250ZXh0KExvc3RDb250ZXh0TW9kZSk7Cisg
ICAgdm9pZCBmb3JjZVJlc3RvcmVDb250ZXh0KCk7CisgICAgdm9pZCBsb3NlQ29udGV4dEltcGwo
TG9zdENvbnRleHRNb2RlKTsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRl
eHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQorICAgIFdlYkdMQ29udGV4
dEdyb3VwKiBjb250ZXh0R3JvdXAoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHRHcm91cC5nZXQo
KTsgfQorICAgIHZpcnR1YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IG92
ZXJyaWRlOworCisgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAg
ICB2b2lkIG1hcmtMYXllckNvbXBvc2l0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoKSBvdmVycmlkZTsKKyAgICBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKworICAgIHZvaWQgcmVtb3Zl
U2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7CisgICAgdm9pZCByZW1vdmVDb250ZXh0
T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCopOworICAgIAorICAgIHVuc2lnbmVkIGdldE1heFZl
cnRleEF0dHJpYnMoKSBjb25zdCB7IHJldHVybiBtX21heFZlcnRleEF0dHJpYnM7IH0KKworICAg
IC8vIEFOR0xFX2luc3RhbmNlZF9hcnJheXMgZXh0ZW5zaW9uIGZ1bmN0aW9ucy4KKyAgICB2b2lk
IGRyYXdBcnJheXNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNp
emVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKKyAgICB2b2lkIGRyYXdFbGVtZW50c0lu
c3RhbmNlZChHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxv
bmcgbG9uZyBvZmZzZXQsIEdDM0RzaXplaSBwcmltY291bnQpOworICAgIHZvaWQgdmVydGV4QXR0
cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcik7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMRHJhd0J1ZmZlcnM7CisgICAgZnJpZW5kIGNsYXNzIFdl
YkdMRnJhbWVidWZmZXI7CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMT2JqZWN0OworICAgIGZyaWVu
ZCBjbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdDsKKyAgICBmcmllbmQgY2xhc3MgV2ViR0xEZWJ1
Z1NoYWRlcnM7CisgICAgZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM7Cisg
ICAgZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzsKKyAgICBmcmllbmQg
Y2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM7CisgICAgZnJpZW5kIGNsYXNzIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrOworICAgIGZyaWVuZCBjbGFzcyBX
ZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOworCisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KEhU
TUxDYW52YXNFbGVtZW50KiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOworICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCosIFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7CisgICAgdm9pZCBp
bml0aWFsaXplTmV3Q29udGV4dCgpOworICAgIHZvaWQgc2V0dXBGbGFncygpOworCisgICAgLy8g
QWN0aXZlRE9NT2JqZWN0CisgICAgdmlydHVhbCBib29sIGhhc1BlbmRpbmdBY3Rpdml0eSgpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBjb25zdCBjaGFyKiBhY3RpdmVET01PYmplY3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gIldlYkdMUmVuZGVyaW5nQ29udGV4dCI7IH0KKworICAgIHZvaWQgYWRkU2hhcmVkT2Jq
ZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7CisgICAgdm9pZCBhZGRDb250ZXh0T2JqZWN0KFdlYkdM
Q29udGV4dE9iamVjdCopOworICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwor
CisgICAgdm9pZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB2b2lkIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOworCisgICAgLy8gUXVlcnkgd2hldGhlciBpdCBpcyBidWlsdCBvbiB0b3Ag
b2YgY29tcGxpYW50IEdMRVMyIGltcGxlbWVudGF0aW9uLgorICAgIGJvb2wgaXNHTEVTMkNvbXBs
aWFudCgpIHsgcmV0dXJuIG1faXNHTEVTMkNvbXBsaWFudDsgfQorICAgIC8vIFF1ZXJ5IGlmIHRo
ZSBHTCBpbXBsZW1lbnRhdGlvbiBpcyBOUE9UIHN0cmljdC4KKyAgICBib29sIGlzR0xFUzJOUE9U
U3RyaWN0KCkgeyByZXR1cm4gbV9pc0dMRVMyTlBPVFN0cmljdDsgfQorICAgIC8vIFF1ZXJ5IGlm
IHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZXMgZXJyb3JzIG9uIG91dC1vZi1ib3VuZHMg
YnVmZmVyIGFjY2Vzc2VzLgorICAgIGJvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNB
Y2Nlc3NlcygpIHsgcmV0dXJuIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nl
czsgfQorICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpbml0aWFsaXplcyB0
ZXh0dXJlcy9yZW5kZXJidWZmZXJzIHRvIDAuCisgICAgYm9vbCBpc1Jlc291cmNlU2FmZSgpIHsg
cmV0dXJuIG1faXNSZXNvdXJjZVNhZmU7IH0KKyAgICAvLyBRdWVyeSBpZiBkZXB0aF9zdGVuY2ls
IGJ1ZmZlciBpcyBzdXBwb3J0ZWQuCisgICAgYm9vbCBpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgp
IHsgcmV0dXJuIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQ7IH0KKworICAgIC8vIEhlbHBlciB0
byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKKyAgICAvLyBs
aWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KKyAgICB1bnNpZ25lZCBpbnQgc2l6ZUluQnl0ZXMo
R0MzRGVudW0gdHlwZSk7CisKKyAgICAvLyBCYXNpYyB2YWxpZGF0aW9uIG9mIGNvdW50IGFuZCBv
ZmZzZXQgYWdhaW5zdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gZWxlbWVudCBhcnJheSBidWZmZXIK
KyAgICBib29sIHZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKKworICAgIC8vIENvbnNlcnZhdGl2ZSBidXQg
cXVpY2sgaW5kZXggdmFsaWRhdGlvbgorICAgIGJvb2wgdmFsaWRhdGVJbmRleEFycmF5Q29uc2Vy
dmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKKwor
ICAgIC8vIFByZWNpc2UgYnV0IHNsb3cgaW5kZXggdmFsaWRhdGlvbiAtLSBvbmx5IGRvbmUgaWYg
Y29uc2VydmF0aXZlIGNoZWNrcyBmYWlsCisgICAgYm9vbCB2YWxpZGF0ZUluZGV4QXJyYXlQcmVj
aXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIHVu
c2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKKyAgICBib29sIHZhbGlkYXRlVmVydGV4QXR0
cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2ZUNvdW50ID0g
MCk7CisKKyAgICBib29sIHZhbGlkYXRlV2ViR0xPYmplY3QoY29uc3QgY2hhciosIFdlYkdMT2Jq
ZWN0Kik7CisKKyAgICBib29sIHZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0Mz
RHNpemVpIHByaW1jb3VudCk7CisgICAgYm9vbCB2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVu
dW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzLCBHQzNEc2l6
ZWkgcHJpbWNvdW50KTsKKworICAgIC8vIEFkZHMgYSBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0
LgorICAgIHZvaWQgYWRkQ29tcHJlc3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOworCisgICAg
UGFzc1JlZlB0cjxJbWFnZT4gZHJhd0ltYWdlSW50b0J1ZmZlcihJbWFnZSosIGludCB3aWR0aCwg
aW50IGhlaWdodCwgaW50IGRldmljZVNjYWxlRmFjdG9yKTsKKworI2lmIEVOQUJMRShWSURFTykK
KyAgICBQYXNzUmVmUHRyPEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50
KiwgQmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKKyAgICBSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBSZWZQdHI8V2ViR0xDb250ZXh0
R3JvdXA+IG1fY29udGV4dEdyb3VwOworCisgICAgLy8gT3B0aW9uYWwgc3RydWN0dXJlIGZvciBy
ZW5kZXJpbmcgdG8gYSBEcmF3aW5nQnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVjdGx5CisgICAgLy8g
dG8gdGhlIGJhY2stYnVmZmVyIG9mIG1fY29udGV4dC4KKyAgICBSZWZQdHI8RHJhd2luZ0J1ZmZl
cj4gbV9kcmF3aW5nQnVmZmVyOworCisgICAgLy8gRGlzcGF0Y2hlcyBhIGNvbnRleHQgbG9zdCBl
dmVudCBvbmNlIGl0IGlzIGRldGVybWluZWQgdGhhdCBvbmUgaXMgbmVlZGVkLgorICAgIC8vIFRo
aXMgaXMgdXNlZCBib3RoIGZvciBzeW50aGV0aWMgYW5kIHJlYWwgY29udGV4dCBsb3NzZXMuIEZv
ciByZWFsIG9uZXMsIGl0J3MKKyAgICAvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3Jp
cHQgb24gdGhlIHN0YWNrLCBidXQgdGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKKyAgICAvLyBvbiBo
b3cgZXhhY3RseSB0aGUgcGxhdGZvcm0gZGlzY292ZXJzIHRoYXQgdGhlIGNvbnRleHQgd2FzIGxv
c3QuIEZvciBiZXR0ZXIKKyAgICAvLyBwb3J0YWJpbGl0eSB3ZSBhbHdheXMgZGVmZXIgdGhlIGRp
c3BhdGNoIG9mIHRoZSBldmVudC4KKyAgICBUaW1lciBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVu
dFRpbWVyOworICAgIGJvb2wgbV9yZXN0b3JlQWxsb3dlZDsKKyAgICBUaW1lciBtX3Jlc3RvcmVU
aW1lcjsKKworICAgIGJvb2wgbV9uZWVkc1VwZGF0ZTsKKyAgICBib29sIG1fbWFya2VkQ2FudmFz
RGlydHk7CisgICAgSGFzaFNldDxXZWJHTENvbnRleHRPYmplY3QqPiBtX2NvbnRleHRPYmplY3Rz
OworCisgICAgLy8gTGlzdCBvZiBib3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFpbiBpbmZvIGFi
b3V0IHNpemVzIGZvciBBUlJBWV9CVUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9yIEVMRU1FTlRf
QVJSQVlfQlVGRkVSCisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBtX2JvdW5kQXJyYXlCdWZmZXI7
CisgICAgCisgICAgUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fZGVmYXVsdFZl
cnRleEFycmF5T2JqZWN0OworICAgIFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3Q7CisgICAgdm9pZCBzZXRCb3VuZFZlcnRleEFycmF5T2Jq
ZWN0KFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gYXJyYXlPYmplY3QpCisg
ICAgeworICAgICAgICBpZiAoYXJyYXlPYmplY3QpCisgICAgICAgICAgICBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QgPSBhcnJheU9iamVjdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9i
b3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7CisgICAg
fQorICAgIAorICAgIGNsYXNzIFZlcnRleEF0dHJpYlZhbHVlIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFZlcnRleEF0dHJpYlZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgaW5pdFZhbHVl
KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgaW5pdFZhbHVlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdmFsdWVbMF0gPSAwLjBmOworICAgICAgICAgICAgdmFsdWVbMV0g
PSAwLjBmOworICAgICAgICAgICAgdmFsdWVbMl0gPSAwLjBmOworICAgICAgICAgICAgdmFsdWVb
M10gPSAxLjBmOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBHQzNEZmxvYXQgdmFsdWVb
NF07CisgICAgfTsKKyAgICBWZWN0b3I8VmVydGV4QXR0cmliVmFsdWU+IG1fdmVydGV4QXR0cmli
VmFsdWU7CisgICAgdW5zaWduZWQgbV9tYXhWZXJ0ZXhBdHRyaWJzOworICAgIFJlZlB0cjxXZWJH
TEJ1ZmZlcj4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyOworICAgIGxvbmcgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyU2l6ZTsKKyAgICBHQzNEZmxvYXQgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbNF07
CisgICAgYm9vbCBtX2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbDsKKyAgICBib29sIG1fdmVydGV4
QXR0cmliMFVzZWRCZWZvcmU7CisKKyAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBtX2N1cnJlbnRQ
cm9ncmFtOworICAgIFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGlu
ZzsKKyAgICBSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IG1fcmVuZGVyYnVmZmVyQmluZGluZzsK
KyAgICBzdHJ1Y3QgVGV4dHVyZVVuaXRTdGF0ZSB7CisgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1
cmU+IHRleHR1cmUyREJpbmRpbmc7CisgICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1
cmVDdWJlTWFwQmluZGluZzsKKyAgICB9OworICAgIFZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBt
X3RleHR1cmVVbml0czsKKyAgICB1bnNpZ25lZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7CisK
KyAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBtX2JsYWNrVGV4dHVyZTJEOworICAgIFJlZlB0cjxX
ZWJHTFRleHR1cmU+IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcDsKKworICAgIFZlY3RvcjxHQzNEZW51
bT4gbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHM7CisKKyAgICAvLyBGaXhlZC1zaXplIGNhY2hl
IG9mIHJldXNhYmxlIGltYWdlIGJ1ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCisg
ICAgY2xhc3MgTFJVSW1hZ2VCdWZmZXJDYWNoZSB7CisgICAgcHVibGljOgorICAgICAgICBMUlVJ
bWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSk7CisgICAgICAgIC8vIFRoZSBwb2ludGVyIHJl
dHVybmVkIGlzIG93bmVkIGJ5IHRoZSBpbWFnZSBidWZmZXIgbWFwLgorICAgICAgICBJbWFnZUJ1
ZmZlciogaW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSk7CisgICAgcHJpdmF0ZToKKyAg
ICAgICAgdm9pZCBidWJibGVUb0Zyb250KGludCBpZHgpOworICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7CisgICAgICAgIGlu
dCBtX2NhcGFjaXR5OworICAgIH07CisgICAgTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRl
ZEltYWdlQ2FjaGU7CisKKyAgICBHQzNEaW50IG1fbWF4VGV4dHVyZVNpemU7CisgICAgR0MzRGlu
dCBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZTsKKyAgICBHQzNEaW50IG1fbWF4UmVuZGVyYnVmZmVy
U2l6ZTsKKyAgICBHQzNEaW50IG1fbWF4Vmlld3BvcnREaW1zWzJdOworICAgIEdDM0RpbnQgbV9t
YXhUZXh0dXJlTGV2ZWw7CisgICAgR0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CisK
KyAgICBHQzNEaW50IG1fbWF4RHJhd0J1ZmZlcnM7CisgICAgR0MzRGludCBtX21heENvbG9yQXR0
YWNobWVudHM7CisgICAgR0MzRGVudW0gbV9iYWNrRHJhd0J1ZmZlcjsKKyAgICBib29sIG1fZHJh
d0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQ7CisgICAgYm9vbCBtX2RyYXdCdWZmZXJz
U3VwcG9ydGVkOworCisgICAgR0MzRGludCBtX3BhY2tBbGlnbm1lbnQ7CisgICAgR0MzRGludCBt
X3VucGFja0FsaWdubWVudDsKKyAgICBib29sIG1fdW5wYWNrRmxpcFk7CisgICAgYm9vbCBtX3Vu
cGFja1ByZW11bHRpcGx5QWxwaGE7CisgICAgR0MzRGVudW0gbV91bnBhY2tDb2xvcnNwYWNlQ29u
dmVyc2lvbjsKKyAgICBib29sIG1fY29udGV4dExvc3Q7CisgICAgTG9zdENvbnRleHRNb2RlIG1f
Y29udGV4dExvc3RNb2RlOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0
cmlidXRlczsKKworICAgIGJvb2wgbV9sYXllckNsZWFyZWQ7CisgICAgR0MzRGZsb2F0IG1fY2xl
YXJDb2xvcls0XTsKKyAgICBib29sIG1fc2Npc3NvckVuYWJsZWQ7CisgICAgR0MzRGZsb2F0IG1f
Y2xlYXJEZXB0aDsKKyAgICBHQzNEaW50IG1fY2xlYXJTdGVuY2lsOworICAgIEdDM0Rib29sZWFu
IG1fY29sb3JNYXNrWzRdOworICAgIEdDM0Rib29sZWFuIG1fZGVwdGhNYXNrOworCisgICAgYm9v
bCBtX3N0ZW5jaWxFbmFibGVkOworICAgIEdDM0R1aW50IG1fc3RlbmNpbE1hc2ssIG1fc3RlbmNp
bE1hc2tCYWNrOworICAgIEdDM0RpbnQgbV9zdGVuY2lsRnVuY1JlZiwgbV9zdGVuY2lsRnVuY1Jl
ZkJhY2s7IC8vIE5vdGUgdGhhdCB0aGVzZSBhcmUgdGhlIHVzZXIgc3BlY2lmaWVkIHZhbHVlcywg
bm90IHRoZSBpbnRlcm5hbCBjbGFtcGVkIHZhbHVlLgorICAgIEdDM0R1aW50IG1fc3RlbmNpbEZ1
bmNNYXNrLCBtX3N0ZW5jaWxGdW5jTWFza0JhY2s7CisKKyAgICBib29sIG1faXNHTEVTMkNvbXBs
aWFudDsKKyAgICBib29sIG1faXNHTEVTMk5QT1RTdHJpY3Q7CisgICAgYm9vbCBtX2lzRXJyb3JH
ZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXM7CisgICAgYm9vbCBtX2lzUmVzb3VyY2VTYWZl
OworICAgIGJvb2wgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZDsKKyAgICBib29sIG1faXNSb2J1
c3RuZXNzRVhUU3VwcG9ydGVkOworCisgICAgYm9vbCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25z
b2xlOworICAgIGludCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKKworICAgIC8vIEEg
V2ViR0xSZW5kZXJpbmdDb250ZXh0IGNhbiBiZSBjcmVhdGVkIGluIGEgc3RhdGUgd2hlcmUgaXQg
YXBwZWFycyBhcworICAgIC8vIGEgdmFsaWQgYW5kIGFjdGl2ZSBjb250ZXh0LCBidXQgd2lsbCBu
b3QgZXhlY3V0ZSBhbnkgaW1wb3J0YW50IG9wZXJhdGlvbnMKKyAgICAvLyB1bnRpbCBpdHMgbG9h
ZCBwb2xpY3kgaXMgY29tcGxldGVseSByZXNvbHZlZC4KKyAgICBib29sIG1faXNQZW5kaW5nUG9s
aWN5UmVzb2x1dGlvbjsKKyAgICBib29sIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbjsK
KyAgICBib29sIGlzQ29udGV4dExvc3RPclBlbmRpbmcoKTsKKworICAgIC8vIEVuYWJsZWQgZXh0
ZW5zaW9uIG9iamVjdHMuCisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVEZyYWdEZXB0aD4gbV9leHRG
cmFnRGVwdGg7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVEJsZW5kTWluTWF4PiBtX2V4dEJsZW5k
TWluTWF4OworICAgIHN0ZDo6dW5pcXVlX3B0cjxFWFRzUkdCPiBtX2V4dHNSR0I7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz4gbV9leHRUZXh0dXJlRmls
dGVyQW5pc290cm9waWM7CisgICAgc3RkOjp1bmlxdWVfcHRyPEVYVFNoYWRlclRleHR1cmVMT0Q+
IG1fZXh0U2hhZGVyVGV4dHVyZUxPRDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUZs
b2F0PiBtX29lc1RleHR1cmVGbG9hdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUZs
b2F0TGluZWFyPiBtX29lc1RleHR1cmVGbG9hdExpbmVhcjsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
T0VTVGV4dHVyZUhhbGZGbG9hdD4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0OworICAgIHN0ZDo6dW5p
cXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVIYWxmRmxvYXRM
aW5lYXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+IG1fb2Vz
U3RhbmRhcmREZXJpdmF0aXZlczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVmVydGV4QXJyYXlP
YmplY3Q+IG1fb2VzVmVydGV4QXJyYXlPYmplY3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPE9FU0Vs
ZW1lbnRJbmRleFVpbnQ+IG1fb2VzRWxlbWVudEluZGV4VWludDsKKyAgICBzdGQ6OnVuaXF1ZV9w
dHI8V2ViR0xMb3NlQ29udGV4dD4gbV93ZWJnbExvc2VDb250ZXh0OworICAgIHN0ZDo6dW5pcXVl
X3B0cjxXZWJHTERlYnVnUmVuZGVyZXJJbmZvPiBtX3dlYmdsRGVidWdSZW5kZXJlckluZm87Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMRGVidWdTaGFkZXJzPiBtX3dlYmdsRGVidWdTaGFkZXJz
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDPiBtX3dlYmds
Q29tcHJlc3NlZFRleHR1cmVBVEM7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEM7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPiBtX3dlYmdsQ29tcHJlc3NlZFRl
eHR1cmVTM1RDOworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlcHRoVGV4dHVyZT4gbV93ZWJn
bERlcHRoVGV4dHVyZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEcmF3QnVmZmVycz4gbV93
ZWJnbERyYXdCdWZmZXJzOworICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUluc3RhbmNlZEFycmF5
cz4gbV9hbmdsZUluc3RhbmNlZEFycmF5czsKKworICAgIC8vIEhlbHBlcnMgZm9yIGdldFBhcmFt
ZXRlciBhbmQgb3RoZXJzCisgICAgV2ViR0xHZXRJbmZvIGdldEJvb2xlYW5QYXJhbWV0ZXIoR0Mz
RGVudW0pOworICAgIFdlYkdMR2V0SW5mbyBnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0MzRGVu
dW0pOworICAgIFdlYkdMR2V0SW5mbyBnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSk7CisgICAg
V2ViR0xHZXRJbmZvIGdldEludFBhcmFtZXRlcihHQzNEZW51bSk7CisgICAgV2ViR0xHZXRJbmZv
IGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdDM0RlbnVtKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0
V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKKyAgICBXZWJHTEdldEluZm8gZ2V0
V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7CisKKyAgICAvLyBDbGVhciB0aGUgYmFj
a2J1ZmZlciBpZiBpdCB3YXMgY29tcG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBvcGVyYXRpb24uCisg
ICAgLy8gY2xlYXJNYXNrIGlzIHNldCB0byB0aGUgYml0ZmllbGQgb2YgYW55IGNsZWFyIHRoYXQg
d291bGQgaGFwcGVuIGFueXdheSBhdCB0aGlzIHRpbWUKKyAgICAvLyBhbmQgdGhlIGZ1bmN0aW9u
IHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNsZWFyIGlzIG5vdyB1bm5lY2Vzc2FyeS4KKyAgICBib29s
IGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSAwKTsKKworICAgIC8v
IEhlbHBlciB0byByZXN0b3JlIHN0YXRlIHRoYXQgY2xlYXJpbmcgdGhlIGZyYW1lYnVmZmVyIG1h
eSBkZXN0cm95LgorICAgIHZvaWQgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOworCisgICAgdm9p
ZCB0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0Rp
bnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4SW1hZ2UyREltcGwoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0
bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNv
bnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOworICAgIHZvaWQgdGV4U3ViSW1hZ2Uy
REltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJl
bXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOworCisgICAgdm9pZCBjaGVja1RleHR1cmVD
b21wbGV0ZW5lc3MoY29uc3QgY2hhciosIGJvb2wpOworCisgICAgdm9pZCBjcmVhdGVGYWxsYmFj
a0JsYWNrVGV4dHVyZXMxeDEoKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgY29weVRl
eHtTdWJ9SW1hZ2UsIGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0CisgICAgLy8gYW5k
IHRoZSBjb2xvciBidWZmZXIgZm9ybWF0IG9mIHRoZSBjdXJyZW50IGJvdW5kIGZyYW1lYnVmZmVy
IGNvbWJpbmF0aW9uCisgICAgLy8gaXMgdmFsaWQuCisgICAgYm9vbCBpc1RleEludGVybmFsRm9y
bWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
dG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGNvbG9yIGJ1ZmZlciBmb3JtYXQuCisgICAg
R0MzRGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCk7CisKKyAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIHdpZHRoLgorICAgIGlu
dCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0
byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgorICAgIGludCBnZXRCb3VuZEZy
YW1lYnVmZmVySGVpZ2h0KCk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmVyaWZ5IGxp
bWl0cyBvbiB0aGUgbGVuZ3RoIG9mIHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBsb2NhdGlvbnMuCisg
ICAgYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgc2l6
ZSBpcyBub24tbmVnYXRpdmUuCisgICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5kIHJldHVybiBm
YWxzZSBmb3IgbmVnYXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVlLgorICAgIGJv
b2wgdmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNE
aW50IHkpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFsbCBjaGFyYWN0
ZXJzIGluIHRoZSBzdHJpbmcgYmVsb25nIHRvIHRoZQorICAgIC8vIEFTQ0lJIHN1YnNldCBhcyBk
ZWZpbmVkIGluIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCisgICAgYm9vbCB2YWxpZGF0
ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYpOworCisgICAg
Ly8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRhcmdldCBhbmQgdGV4dHVyZSBib3VuZCB0byB0
aGUgdGFyZ2V0LgorICAgIC8vIEdlbmVyYXRlIEdMIGVycm9ycyBhbmQgcmV0dXJuIDAgaWYgdGFy
Z2V0IGlzIGludmFsaWQgb3IgdGV4dHVyZSBib3VuZCBpcworICAgIC8vIG51bGwuICBPdGhlcndp
c2UsIHJldHVybiB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0LgorICAgIFdlYkdMVGV4
dHVyZSogdmFsaWRhdGVUZXh0dXJlQmluZGluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApOworCisgICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGZvcm1hdC90eXBlIGZvciBmdW5jdGlvbnMge2Nv
cHl9VGV4e1N1Yn1JbWFnZS4KKyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMg
ZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KKyAgICBib29sIHZhbGlkYXRlVGV4RnVu
Y0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIGNoZWNrIGlucHV0IGxldmVsIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4K
KyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgbGV2ZWwgaXMg
aW52YWxpZC4KKyAgICBib29sIHZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKTsKKworICAgIGVudW0gVGV4
RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgeworICAgICAgICBOb3RUZXhTdWJJbWFnZTJELAor
ICAgICAgICBUZXhTdWJJbWFnZTJELAorICAgIH07CisKKyAgICBlbnVtIFRleEZ1bmNWYWxpZGF0
aW9uU291cmNlVHlwZSB7CisgICAgICAgIFNvdXJjZUFycmF5QnVmZmVyVmlldywKKyAgICAgICAg
U291cmNlSW1hZ2VEYXRhLAorICAgICAgICBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LAorICAgICAg
ICBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwKKyAgICAgICAgU291cmNlSFRNTFZpZGVvRWxlbWVu
dCwKKyAgICB9OworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQg
dG8gY2hlY2sgaWYgdGhlIGlucHV0IGZvcm1hdC90eXBlL2xldmVsL3RhcmdldC93aWR0aC9oZWln
aHQvYm9yZGVyL3hvZmZzZXQveW9mZnNldCBhcmUgdmFsaWQuCisgICAgLy8gT3RoZXJ3aXNlLCBp
dCB3b3VsZCByZXR1cm4gcXVpY2tseSB3aXRob3V0IGRvaW5nIG90aGVyIHdvcmsuCisgICAgYm9v
bCB2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRh
dGlvbkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlLCBHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkg
d2lkdGgsCisgICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzIGZv
ciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KKyAgICAvLyBHZW5lcmF0ZXMgR0wgZXJy
b3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KKyAgICBib29s
IHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9u
VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlKTsKKworICAgIGVudW0gTnVsbERpc3Bvc2l0aW9uIHsKKyAgICAgICAgTnVsbEFsbG93ZWQs
CisgICAgICAgIE51bGxOb3RBbGxvd2VkCisgICAgfTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlv
biB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZpZXcKKyAgICAvLyBpcyBv
ZiB0aGUgY29ycmVjdCB0eXBlIGFuZCBjb250YWlucyBlbm91Z2ggZGF0YSBmb3IgdGhlIHRleElt
YWdlIGNhbGwuCisgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlm
IHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCisgICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNEYXRhKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOdWxsRGlzcG9zaXRpb24pOworCisgICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgZ2l2ZW4gdGV4dHVyZSBmb3JtYXQgaXMgc2V0dGFibGUg
YXMgaW4KKyAgICAvLyB5b3UgY2FuIHN1cHBseSBkYXRhIHRvIHRleEltYWdlMkQsIG9yIGNhbGwg
dGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQgYW5kCisgICAgLy8gY29weVRleFN1YkltYWdlMkQu
CisgICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBmb3Jt
YXQgaXMgbm90IHNldHRhYmxlLgorICAgIGJvb2wgdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCk7CisKKyAgICAvLyBIZWxw
ZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEgaXMgY29ycmVj
dCBzaXplCisgICAgLy8gZm9yIHRoZSBnaXZlbiBmb3JtYXQgYW5kIGRpbWVuc2lvbnMuCisgICAg
Ym9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsKKworICAgIC8v
IEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0
cy4KKyAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51bSBmb3JtYXQp
OworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVy
ZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IKKyAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgorICAg
IGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpOworCisgICAgLy8gSGVscGVyIGZ1bmN0
aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBm
b3IKKyAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgorICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2Vk
VGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqKTsKKworICAg
IC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2RlIGZvciBkcmF3e0FycmF5cy9FbGVt
ZW50c30uCisgICAgYm9vbCB2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGVudW0pOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlmIGZy
b250L2JhY2sgc3RlbmNpbE1hc2sgYW5kIHN0ZW5jaWxGdW5jIHNldHRpbmdzIGFyZSB0aGUgc2Ft
ZS4KKyAgICBib29sIHZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgc3RlbmNpbCBmdW5j
LgorICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4UGFyYW1ldGVyZiBh
bmQgdGV4UGFyYW1ldGVyaS4KKyAgICB2b2lkIHRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1pLCBHQzNEaW50IHBhcmFtZiwgYm9vbCBp
c0Zsb2F0KTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmludCBHTCBlcnJvcnMgdG8g
Y29uc29sZS4KKyAgICB2b2lkIHByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJpbmcmKTsK
KyAgICB2b2lkIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBj
b25zdCBjaGFyKiByZWFzb24pOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByaW50IHdh
cm5pbmdzIHRvIGNvbnNvbGUuIEN1cnJlbnRseQorICAgIC8vIHVzZWQgb25seSB0byB3YXJuIGFi
b3V0IHVzZSBvZiBvYnNvbGV0ZSBmdW5jdGlvbnMuCisgICAgdm9pZCBwcmludFdhcm5pbmdUb0Nv
bnNvbGUoY29uc3QgU3RyaW5nJik7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRh
dGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnJhbWVidWZmZXIgZnVuY3Rpb25zLgorICAgIC8vIEdl
bmVyYXRlIEdMIGVycm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVnYWwuCisgICAgYm9vbCB2YWxp
ZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpOworCisgICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHZhbGlkYXRlIGJsZW5kIGVxdWF0aW9uIG1vZGUuCisgICAgYm9vbCB2YWxpZGF0
ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7CisKKyAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZnVuYyBmYWN0b3JzLgorICAg
IGJvb2wgdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
R0MzRGVudW0gc3JjLCBHQzNEZW51bSBkc3QpOworCisgICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRv
IHZhbGlkYXRlIGEgR0wgY2FwYWJpbGl0eS4KKyAgICBib29sIHZhbGlkYXRlQ2FwYWJpbGl0eShj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKKworICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB1bmlmb3JtIGZ1bmN0aW9ucy4K
KyAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJheSosIEdDM0RzaXpl
aSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgSW50MzJBcnJheSosIEdD
M0RzaXplaSBtb2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgdm9pZCosIEdD
M0RzaXplaSwgR0MzRHNpemVpIG1vZCk7CisgICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQ
YXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBt
b2QpOworICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xlYW4g
dHJhbnNwb3NlLCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKKworICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZmZXJEYXRhLgorICAg
IC8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBvciAwIGlmIHBh
cmFtZXRlcnMgYXJlIGludmFsaWQuCisgICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRlQnVmZmVyRGF0
YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIHVzYWdlKTsKKworICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFn
ZTJEIHRvIG1ha2Ugc3VyZSBpbWFnZSBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQgT3JpZ2lu
LgorICAgIGJvb2wgdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKworICAgIC8vIEhlbHBl
ciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBjYW52YXMgaXMgcmVh
ZHkgYW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KKyAgICBib29sIHZhbGlkYXRlSFRNTENhbnZh
c0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4
Y2VwdGlvbkNvZGUmKTsKKworI2lmIEVOQUJMRShWSURFTykKKyAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlkZW8gaXMgcmVhZHkgd291bGRu
J3QgdGFpbnQgT3JpZ2luLgorICAgIGJvb2wgdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsK
KyNlbmRpZgorCisgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdmVydGV4QXR0cmliTmZ7dn0u
CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQsIEdDM0RmbG9h
dCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpOworICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBsKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSosIEdD
M0RzaXplaSBleHBlY3RlZFNpemUpOworICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBsKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCosIEdDM0RzaXpl
aSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7CisKKyAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9y
IGRlbGV0ZSogKGRlbGV0ZUJ1ZmZlciwgZGVsZXRlUHJvZ3JhbSwgZXRjKSBmdW5jdGlvbnMuCisg
ICAgLy8gUmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJuIHdpdGhvdXQgZnVydGhl
ciBwcm9jZXNzaW5nLgorICAgIGJvb2wgZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0Kik7CisKKyAg
ICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJpbmQqIChiaW5kQnVmZmVyLCBiaW5kVGV4dHVyZSwg
ZXRjKSBhbmQgdXNlUHJvZ3JhbS4KKyAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhbHJlYWR5IGJl
ZW4gZGVsZXRlZCwgc2V0IGRlbGV0ZWQgdG8gdHJ1ZSB1cG9uIHJldHVybi4KKyAgICAvLyBSZXR1
cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3Np
bmcuCisgICAgYm9vbCBjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVsZXRlZCk7CisKKyAgICAvLyBIZWxwZXJzIGZvciBz
aW11bGF0aW5nIHZlcnRleEF0dHJpYjAKKyAgICB2b2lkIGluaXRWZXJ0ZXhBdHRyaWIwKCk7Cisg
ICAgYm9vbCBzaW11bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51bVZlcnRleCk7CisgICAg
dm9pZCByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworCisgICAg
dm9pZCBkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKTsKKyAgICAvLyBIZWxwZXIgZm9yIHJlc3Rv
cmF0aW9uIGFmdGVyIGNvbnRleHQgbG9zdC4KKyAgICB2b2lkIG1heWJlUmVzdG9yZUNvbnRleHQo
KTsKKworICAgIC8vIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBwcml2aWxlZ2VkIGNvZGUg
aW4gdGhlIGJyb3dzZXIsIGZvciBleGFtcGxlLAorICAgIC8vIGEgU2FmYXJpIG9yIENocm9tZSBl
eHRlbnNpb24uCisgICAgYm9vbCBhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3Q7CisK
KyAgICBlbnVtIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSB7CisgICAgICAgIERpc3BsYXlJbkNv
bnNvbGUsCisgICAgICAgIERvbnREaXNwbGF5SW5Db25zb2xlCisgICAgfTsKKworICAgIC8vIFdy
YXBwZXIgZm9yIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvciB0aGF0IHNlbmRz
IGEgbWVzc2FnZQorICAgIC8vIHRvIHRoZSBKYXZhU2NyaXB0IGNvbnNvbGUuCisgICAgdm9pZCBz
eW50aGVzaXplR0xFcnJvcihHQzNEZW51bSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25z
dCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlID0gRGlzcGxheUlu
Q29uc29sZSk7CisKKyAgICBTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmKSBjb25z
dDsKKworICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHN0ZW5jaWwgdGVzdCBiYXNlZCBvbiB1c2Vy
IHNldHRpbmcgYW5kCisgICAgLy8gd2hldGhlciB0aGUgY3VycmVudCBGQk8gaGFzIGEgc3RlbmNp
bCBidWZmZXIuCisgICAgdm9pZCBhcHBseVN0ZW5jaWxUZXN0KCk7CisKKyAgICAvLyBIZWxwZXIg
Zm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhIGNhcGFiaWxpdHkuCisgICAgdm9pZCBlbmFibGVP
ckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpOworCisgICAgLy8gQ2xh
bXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQT1JUX0RJTVMuCisgICAgSW50
U2l6ZSBjbGFtcGVkQ2FudmFzU2l6ZSgpOworCisgICAgLy8gRmlyc3QgdGltZSBjYWxsZWQsIGlm
IEVYVF9kcmF3X2J1ZmZlcnMgaXMgc3VwcG9ydGVkLCBxdWVyeSB0aGUgdmFsdWU7IG90aGVyd2lz
ZSByZXR1cm4gMC4KKyAgICAvLyBMYXRlciwgcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUuCisgICAg
R0MzRGludCBnZXRNYXhEcmF3QnVmZmVycygpOworICAgIEdDM0RpbnQgZ2V0TWF4Q29sb3JBdHRh
Y2htZW50cygpOworCisgICAgdm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSk7CisKKyAg
ICB2b2lkIHJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsKKyAgICB2b2lkIHJlc3RvcmVDdXJy
ZW50VGV4dHVyZTJEKCk7CisKKyAgICAvLyBDaGVjayBpZiBFWFRfZHJhd19idWZmZXJzIGV4dGVu
c2lvbiBpcyBzdXBwb3J0ZWQgYW5kIGlmIGl0IHNhdGlzZmllcyB0aGUgV2ViR0wgcmVxdWlyZW1l
bnRzLgorICAgIGJvb2wgc3VwcG9ydHNEcmF3QnVmZmVycygpOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMMVJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjYsNzg0ICsyNiwxNiBAQAogI2lmbmRlZiBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAog
I2RlZmluZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRfaAogCi0jaW5jbHVkZSAiQWN0aXZlRE9NT2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgotI2luY2x1ZGUgIkRy
YXdpbmdCdWZmZXIuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlICJXZWJHTEdldElu
Zm8uaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8cnVudGltZS9GbG9hdDMyQXJyYXku
aD4KLSNpbmNsdWRlIDxydW50aW1lL0ludDMyQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQU5HTEVJbnN0YW5jZWRBcnJheXM7Ci1jbGFzcyBF
WFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM7Ci1jbGFzcyBFWFRTaGFkZXJUZXh0dXJlTE9EOwot
Y2xhc3MgSFRNTEltYWdlRWxlbWVudDsKLWNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7Ci1jbGFzcyBJ
bWFnZUJ1ZmZlcjsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBPRVNT
dGFuZGFyZERlcml2YXRpdmVzOwotY2xhc3MgT0VTVGV4dHVyZUZsb2F0OwotY2xhc3MgT0VTVGV4
dHVyZUZsb2F0TGluZWFyOwotY2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdDsKLWNsYXNzIE9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXI7Ci1jbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdDsKLWNsYXNz
IE9FU0VsZW1lbnRJbmRleFVpbnQ7Ci1jbGFzcyBXZWJHTEFjdGl2ZUluZm87Ci1jbGFzcyBXZWJH
TEJ1ZmZlcjsKLWNsYXNzIFdlYkdMQ29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xDb250ZXh0T2Jq
ZWN0OwotY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLWNsYXNzIFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQzsKLWNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOwotY2xh
c3MgV2ViR0xDb250ZXh0QXR0cmlidXRlczsKLWNsYXNzIFdlYkdMRGVidWdSZW5kZXJlckluZm87
Ci1jbGFzcyBXZWJHTERlYnVnU2hhZGVyczsKLWNsYXNzIFdlYkdMRGVwdGhUZXh0dXJlOwotY2xh
c3MgV2ViR0xEcmF3QnVmZmVyczsKLWNsYXNzIFdlYkdMRXh0ZW5zaW9uOwotY2xhc3MgV2ViR0xG
cmFtZWJ1ZmZlcjsKLWNsYXNzIFdlYkdMTG9zZUNvbnRleHQ7Ci1jbGFzcyBXZWJHTE9iamVjdDsK
LWNsYXNzIFdlYkdMUHJvZ3JhbTsKLWNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyOwotY2xhc3MgV2Vi
R0xTaGFkZXI7Ci1jbGFzcyBXZWJHTFNoYXJlZE9iamVjdDsKLWNsYXNzIFdlYkdMU2hhZGVyUHJl
Y2lzaW9uRm9ybWF0OwotY2xhc3MgV2ViR0xUZXh0dXJlOwotY2xhc3MgV2ViR0xVbmlmb3JtTG9j
YXRpb247Ci1jbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwotCi10eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwotCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQgZmluYWwgOiBwdWJs
aWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7CitjbGFz
cyBXZWJHTDFSZW5kZXJpbmdDb250ZXh0IGZpbmFsIDogcHVibGljIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UgewogcHVibGljOgotICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0PiBjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqLCBXZWJHTENvbnRleHRBdHRy
aWJ1dGVzKik7Ci0gICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0KCk7Ci0KLSAgICB2
aXJ0dWFsIGJvb2wgaXMzZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSNpZiBQ
TEFURk9STShXSU4pCi0gICAgLy8gRklYTUU6IEltcGxlbWVudCBhY2NlbGVyYXRlZCAzZCBjYW52
YXMgb24gV2luZG93cy4KLSAgICB2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9Ci0jZWxzZQotICAgIHZpcnR1YWwgYm9vbCBpc0FjY2Vs
ZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2VuZGlmCi0KLSAgICBp
bnQgZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3Q7Ci0gICAgaW50IGRyYXdpbmdCdWZmZXJIZWln
aHQoKSBjb25zdDsKLQotICAgIHZvaWQgYWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiwgV2Vi
R0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBiaW5kQXR0cmliTG9jYXRpb24o
V2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMQnVm
ZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKEdDM0RlbnVt
IHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJp
bmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciosIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xU
ZXh0dXJlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmxlbmRDb2xvcihHQzNEZmxvYXQg
cmVkLCBHQzNEZmxvYXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpOwot
ICAgIHZvaWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKTsKLSAgICB2b2lkIGJsZW5kRXF1
YXRpb25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpOwotICAg
IHZvaWQgYmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpOwotICAg
IHZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51bSBkc3RSR0Is
IEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7Ci0KLSAgICB2b2lkIGJ1ZmZl
ckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJh
eUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEdDM0Rl
bnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxv
bmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAg
IEdDM0RlbnVtIGNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KTsKLSAgICB2
b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKTsKLSAgICB2b2lkIGNsZWFyQ29sb3IoR0MzRGZs
b2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhh
KTsKLSAgICB2b2lkIGNsZWFyRGVwdGgoR0MzRGZsb2F0KTsKLSAgICB2b2lkIGNsZWFyU3RlbmNp
bChHQzNEaW50KTsKLSAgICB2b2lkIGNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29s
ZWFuIGdyZWVuLCBHQzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSk7Ci0gICAgdm9p
ZCBjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9p
ZCBjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZm
ZXJWaWV3KiBkYXRhKTsKLSAgICB2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKTsKLQot
ICAgIHZvaWQgY29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpOwotICAgIHZvaWQgY29weVRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0KLSAgICBQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBjcmVh
dGVCdWZmZXIoKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0ZUZyYW1l
YnVmZmVyKCk7Ci0gICAgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZVByb2dyYW0oKTsK
LSAgICBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBjcmVhdGVSZW5kZXJidWZmZXIoKTsK
LSAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBjcmVhdGVUZXh0
dXJlKCk7Ci0KLSAgICB2b2lkIGN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpOwotCi0gICAgdm9pZCBk
ZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIqKTsKLSAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFdl
YkdMRnJhbWVidWZmZXIqKTsKLSAgICB2b2lkIGRlbGV0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKik7
Ci0gICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKLSAgICB2
b2lkIGRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciopOwotICAgIHZvaWQgZGVsZXRlVGV4dHVyZShX
ZWJHTFRleHR1cmUqKTsKLQotICAgIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtKTsKLSAgICB2b2lk
IGRlcHRoTWFzayhHQzNEYm9vbGVhbik7Ci0gICAgdm9pZCBkZXB0aFJhbmdlKEdDM0RmbG9hdCB6
TmVhciwgR0MzRGZsb2F0IHpGYXIpOwotICAgIHZvaWQgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3Jh
bSosIFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgZGlzYWJsZShHQzNE
ZW51bSBjYXApOwotICAgIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGlu
ZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUs
IEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0g
dHlwZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBlbmFi
bGUoR0MzRGVudW0gY2FwKTsKLSAgICB2b2lkIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1
aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmaW5pc2goKTsKLSAgICB2b2lk
IGZsdXNoKCk7Ci0gICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2Vi
R0xSZW5kZXJidWZmZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRl
eHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQgZ2VuZXJhdGVNaXBt
YXAoR0MzRGVudW0gdGFyZ2V0KTsKLQotICAgIFBhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBn
ZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gZ2V0QWN0aXZlVW5pZm9ybShX
ZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIGJvb2wg
Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSosIFZlY3RvcjxSZWZQdHI8V2ViR0xTaGFk
ZXI+PiYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFdl
YkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEJ1
ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgUGFzc1JlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBnZXRDb250ZXh0
QXR0cmlidXRlcygpOwotICAgIEdDM0RlbnVtIGdldEVycm9yKCk7Ci0gICAgV2ViR0xFeHRlbnNp
b24qIGdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpOwotICAgIFdlYkdMR2V0SW5mbyBn
ZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdM
R2V0SW5mbyBnZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICBXZWJHTEdldEluZm8gZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0qLCBHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBnZXRQcm9ncmFtSW5mb0xvZyhX
ZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFNoYWRlclBhcmFtZXRlcihXZWJHTFNoYWRl
ciosIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIGdldFNoYWRl
ckluZm9Mb2coV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxX
ZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0Rl
bnVtIHNoYWRlclR5cGUsIEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICBTdHJpbmcgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIFZlY3RvcjxTdHJpbmc+IGdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKLSAgICBXZWJH
TEdldEluZm8gZ2V0VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0VW5pZm9ybShXZWJHTFByb2dy
YW0qLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQ
YXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQ
cm9ncmFtKiwgY29uc3QgU3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdMR2V0SW5m
byBnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgbG9uZyBsb25nIGdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBp
bmRleCwgR0MzRGVudW0gcG5hbWUpOwotCi0gICAgdm9pZCBoaW50KEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gbW9kZSk7Ci0gICAgR0MzRGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xCdWZmZXIqKTsK
LSAgICBib29sIGlzQ29udGV4dExvc3QoKSBjb25zdDsKLSAgICBHQzNEYm9vbGVhbiBpc0VuYWJs
ZWQoR0MzRGVudW0gY2FwKTsKLSAgICBHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJh
bWVidWZmZXIqKTsKLSAgICBHQzNEYm9vbGVhbiBpc1Byb2dyYW0oV2ViR0xQcm9ncmFtKik7Ci0g
ICAgR0MzRGJvb2xlYW4gaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqKTsKLSAgICBH
QzNEYm9vbGVhbiBpc1NoYWRlcihXZWJHTFNoYWRlciopOwotICAgIEdDM0Rib29sZWFuIGlzVGV4
dHVyZShXZWJHTFRleHR1cmUqKTsKLQotICAgIHZvaWQgbGluZVdpZHRoKEdDM0RmbG9hdCk7Ci0g
ICAgdm9pZCBsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCBwaXhlbFN0b3JlaShHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7Ci0gICAgdm9p
ZCBwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cyk7Ci0gICAg
dm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZm
ZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHJlbGVhc2VTaGFkZXJD
b21waWxlcigpOwotICAgIHZvaWQgcmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpOwotICAgIHZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVh
biBpbnZlcnQpOwotICAgIHZvaWQgc2Npc3NvcihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKLSAgICB2b2lkIHNoYWRlclNvdXJjZShXZWJH
TFNoYWRlciosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHN0ZW5j
aWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsKLSAgICB2
b2lkIHN0ZW5jaWxGdW5jU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0Mz
RGludCByZWYsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbE1hc2soR0MzRHVpbnQp
OwotICAgIHZvaWQgc3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBt
YXNrKTsKLSAgICB2b2lkIHN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwg
R0MzRGVudW0genBhc3MpOwotICAgIHZvaWQgc3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFj
ZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKLQotICAg
IHZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVt
IGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSNpZiBFTkFCTEUo
VklERU8pCi0gICAgdm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUm
KTsKLSNlbmRpZgotCi0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJmKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSk7Ci0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwotCi0gICAgdm9p
ZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqLCBFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQq
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENh
bnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0jaWYgRU5BQkxFKFZJREVPKQotICAgIHZv
aWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQg
eG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqLCBFeGNlcHRpb25Db2Rl
Jik7Ci0jZW5kaWYKLQotICAgIHZvaWQgdW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVu
aWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0xZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVu
aWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5
KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMWl2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0yZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgdW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTJmdihj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNp
emVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0yaShjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5p
Zm9ybTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYs
IEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2YoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHksIEdDM0RmbG9hdCB6LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2Z2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNl
cHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZvaWQgdW5pZm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0zaXYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkg
c2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxv
YXQgeiwgR0MzRGZsb2F0IHcsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00ZnYo
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBHQzNEaW50IHcsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1
bmlmb3JtNGl2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm1NYXRy
aXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHVuaWZvcm1NYXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJy
YXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwg
R0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIHZvaWQgdXNlUHJvZ3JhbShX
ZWJHTFByb2dyYW0qLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB2YWxpZGF0ZVByb2dyYW0o
V2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIx
ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpOwotICAgIHZvaWQgdmVydGV4QXR0cmliMWZ2
KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhB
dHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6
ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgs
IEdDM0RmbG9hdCB5KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwg
RmxvYXQzMkFycmF5KiB2YWx1ZXMpOwotICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcywgR0MzRHNpemVpIHNpemUpOwotICAgIHZvaWQgdmVy
dGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0Mz
RGZsb2F0IHopOwotICAgIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9h
dDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhB
dHRyaWI0ZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxv
YXQgeiwgR0MzRGZsb2F0IHcpOwotICAgIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGlu
ZGV4LCBGbG9hdDMyQXJyYXkqIHZhbHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9p
ZCB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0Rl
bnVtIHR5cGUsIEdDM0Rib29sZWFuIG5vcm1hbGl6ZWQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RzaXplaSBzdHJpZGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUm
KTsKLQotICAgIHZvaWQgdmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0KLSAgICAvLyBXRUJLSVRfbG9zZV9jb250ZXh0IHN1
cHBvcnQKLSAgICBlbnVtIExvc3RDb250ZXh0TW9kZSB7Ci0gICAgICAgIC8vIExvc3QgY29udGV4
dCBvY2N1cnJlZCBhdCB0aGUgZ3JhcGhpY3Mgc3lzdGVtIGxldmVsLgotICAgICAgICBSZWFsTG9z
dENvbnRleHQsCi0KLSAgICAgICAgLy8gTG9zdCBjb250ZXh0IHByb3Zva2VkIGJ5IFdFQktJVF9s
b3NlX2NvbnRleHQuCi0gICAgICAgIFN5bnRoZXRpY0xvc3RDb250ZXh0Ci0gICAgfTsKLSAgICB2
b2lkIGZvcmNlTG9zdENvbnRleHQoTG9zdENvbnRleHRNb2RlKTsKLSAgICB2b2lkIGZvcmNlUmVz
dG9yZUNvbnRleHQoKTsKLSAgICB2b2lkIGxvc2VDb250ZXh0SW1wbChMb3N0Q29udGV4dE1vZGUp
OwotCi0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0gICAgV2ViR0xDb250ZXh0R3JvdXAqIGNvbnRleHRH
cm91cCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dEdyb3VwLmdldCgpOyB9Ci0gICAgdmlydHVh
bCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICB2
b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLQotICAgIHZvaWQgbWFya0xheWVy
Q29tcG9zaXRlZCgpOwotICAgIHZpcnR1YWwgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcygpIG92ZXJyaWRlOwotICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpOwotCi0gICAgdm9pZCByZW1vdmVTaGFyZWRPYmplY3QoV2Vi
R0xTaGFyZWRPYmplY3QqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xDb250
ZXh0T2JqZWN0Kik7Ci0gICAgCi0gICAgdW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0cmlicygpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4VmVydGV4QXR0cmliczsgfQotCi0gICAgLy8gQU5HTEVfaW5zdGFu
Y2VkX2FycmF5cyBleHRlbnNpb24gZnVuY3Rpb25zLgotICAgIHZvaWQgZHJhd0FycmF5c0luc3Rh
bmNlZChHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0Rz
aXplaSBwcmltY291bnQpOwotICAgIHZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVt
IG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwg
R0MzRHNpemVpIHByaW1jb3VudCk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJEaXZpc29yKEdDM0R1
aW50IGluZGV4LCBHQzNEdWludCBkaXZpc29yKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xh
c3MgV2ViR0xEcmF3QnVmZmVyczsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xGcmFtZWJ1ZmZlcjsK
LSAgICBmcmllbmQgY2xhc3MgV2ViR0xPYmplY3Q7Ci0gICAgZnJpZW5kIGNsYXNzIE9FU1ZlcnRl
eEFycmF5T2JqZWN0OwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTERlYnVnU2hhZGVyczsKLSAgICBm
cmllbmQgY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLSAgICBmcmllbmQgY2xhc3Mg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQzsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0
RXJyb3JNZXNzYWdlQ2FsbGJhY2s7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM7Ci0KLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQq
LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKTsKLSAgICB2b2lkIGluaXRpYWxpemVOZXdDb250
ZXh0KCk7Ci0gICAgdm9pZCBzZXR1cEZsYWdzKCk7Ci0KLSAgICAvLyBBY3RpdmVET01PYmplY3QK
LSAgICB2aXJ0dWFsIGJvb2wgaGFzUGVuZGluZ0FjdGl2aXR5KCkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgdmlydHVhbCB2b2lkIHN0b3AoKSBvdmVycmlkZTsKLQotICAgIHZvaWQgYWRkU2hhcmVkT2Jq
ZWN0KFdlYkdMU2hhcmVkT2JqZWN0Kik7Ci0gICAgdm9pZCBhZGRDb250ZXh0T2JqZWN0KFdlYkdM
Q29udGV4dE9iamVjdCopOwotICAgIHZvaWQgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwot
Ci0gICAgdm9pZCBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKLSAgICB2b2lkIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOwotCi0gICAgLy8gUXVlcnkgd2hldGhlciBpdCBpcyBidWlsdCBvbiB0b3Ag
b2YgY29tcGxpYW50IEdMRVMyIGltcGxlbWVudGF0aW9uLgotICAgIGJvb2wgaXNHTEVTMkNvbXBs
aWFudCgpIHsgcmV0dXJuIG1faXNHTEVTMkNvbXBsaWFudDsgfQotICAgIC8vIFF1ZXJ5IGlmIHRo
ZSBHTCBpbXBsZW1lbnRhdGlvbiBpcyBOUE9UIHN0cmljdC4KLSAgICBib29sIGlzR0xFUzJOUE9U
U3RyaWN0KCkgeyByZXR1cm4gbV9pc0dMRVMyTlBPVFN0cmljdDsgfQotICAgIC8vIFF1ZXJ5IGlm
IHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBnZW5lcmF0ZXMgZXJyb3JzIG9uIG91dC1vZi1ib3VuZHMg
YnVmZmVyIGFjY2Vzc2VzLgotICAgIGJvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNB
Y2Nlc3NlcygpIHsgcmV0dXJuIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nl
czsgfQotICAgIC8vIFF1ZXJ5IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpbml0aWFsaXplcyB0
ZXh0dXJlcy9yZW5kZXJidWZmZXJzIHRvIDAuCi0gICAgYm9vbCBpc1Jlc291cmNlU2FmZSgpIHsg
cmV0dXJuIG1faXNSZXNvdXJjZVNhZmU7IH0KLSAgICAvLyBRdWVyeSBpZiBkZXB0aF9zdGVuY2ls
IGJ1ZmZlciBpcyBzdXBwb3J0ZWQuCi0gICAgYm9vbCBpc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCgp
IHsgcmV0dXJuIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQ7IH0KLQotICAgIC8vIEhlbHBlciB0
byByZXR1cm4gdGhlIHNpemUgaW4gYnl0ZXMgb2YgT3BlbkdMIGRhdGEgdHlwZXMKLSAgICAvLyBs
aWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KLSAgICB1bnNpZ25lZCBpbnQgc2l6ZUluQnl0ZXMo
R0MzRGVudW0gdHlwZSk7Ci0KLSAgICAvLyBCYXNpYyB2YWxpZGF0aW9uIG9mIGNvdW50IGFuZCBv
ZmZzZXQgYWdhaW5zdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gZWxlbWVudCBhcnJheSBidWZmZXIK
LSAgICBib29sIHZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKLQotICAgIC8vIENvbnNlcnZhdGl2ZSBidXQg
cXVpY2sgaW5kZXggdmFsaWRhdGlvbgotICAgIGJvb2wgdmFsaWRhdGVJbmRleEFycmF5Q29uc2Vy
dmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKLQot
ICAgIC8vIFByZWNpc2UgYnV0IHNsb3cgaW5kZXggdmFsaWRhdGlvbiAtLSBvbmx5IGRvbmUgaWYg
Y29uc2VydmF0aXZlIGNoZWNrcyBmYWlsCi0gICAgYm9vbCB2YWxpZGF0ZUluZGV4QXJyYXlQcmVj
aXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQsIHVu
c2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsKLSAgICBib29sIHZhbGlkYXRlVmVydGV4QXR0
cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2ZUNvdW50ID0g
MCk7Ci0KLSAgICBib29sIHZhbGlkYXRlV2ViR0xPYmplY3QoY29uc3QgY2hhciosIFdlYkdMT2Jq
ZWN0Kik7Ci0KLSAgICBib29sIHZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0Mz
RHNpemVpIHByaW1jb3VudCk7Ci0gICAgYm9vbCB2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVu
dW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzKTsKLQotICAg
IC8vIEFkZHMgYSBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0LgotICAgIHZvaWQgYWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0pOwotCi0gICAgUGFzc1JlZlB0cjxJbWFnZT4gZHJh
d0ltYWdlSW50b0J1ZmZlcihJbWFnZSosIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRldmlj
ZVNjYWxlRmFjdG9yKTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICBQYXNzUmVmUHRyPEltYWdl
PiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiwgQmFja2luZ1N0b3JlQ29weSwg
RXhjZXB0aW9uQ29kZSYpOwotI2VuZGlmCi0KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IG1fY29udGV4dDsKLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0R3JvdXA+IG1fY29udGV4dEdyb3Vw
OwotCi0gICAgLy8gT3B0aW9uYWwgc3RydWN0dXJlIGZvciByZW5kZXJpbmcgdG8gYSBEcmF3aW5n
QnVmZmVyLCBpbnN0ZWFkIG9mIGRpcmVjdGx5Ci0gICAgLy8gdG8gdGhlIGJhY2stYnVmZmVyIG9m
IG1fY29udGV4dC4KLSAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVmZmVyOwot
Ci0gICAgLy8gRGlzcGF0Y2hlcyBhIGNvbnRleHQgbG9zdCBldmVudCBvbmNlIGl0IGlzIGRldGVy
bWluZWQgdGhhdCBvbmUgaXMgbmVlZGVkLgotICAgIC8vIFRoaXMgaXMgdXNlZCBib3RoIGZvciBz
eW50aGV0aWMgYW5kIHJlYWwgY29udGV4dCBsb3NzZXMuIEZvciByZWFsIG9uZXMsIGl0J3MKLSAg
ICAvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3JpcHQgb24gdGhlIHN0YWNrLCBidXQg
dGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKLSAgICAvLyBvbiBob3cgZXhhY3RseSB0aGUgcGxhdGZv
cm0gZGlzY292ZXJzIHRoYXQgdGhlIGNvbnRleHQgd2FzIGxvc3QuIEZvciBiZXR0ZXIKLSAgICAv
LyBwb3J0YWJpbGl0eSB3ZSBhbHdheXMgZGVmZXIgdGhlIGRpc3BhdGNoIG9mIHRoZSBldmVudC4K
LSAgICBUaW1lciBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyOwotICAgIGJvb2wgbV9y
ZXN0b3JlQWxsb3dlZDsKLSAgICBUaW1lciBtX3Jlc3RvcmVUaW1lcjsKLQotICAgIGJvb2wgbV9u
ZWVkc1VwZGF0ZTsKLSAgICBib29sIG1fbWFya2VkQ2FudmFzRGlydHk7Ci0gICAgSGFzaFNldDxX
ZWJHTENvbnRleHRPYmplY3QqPiBtX2NvbnRleHRPYmplY3RzOwotCi0gICAgLy8gTGlzdCBvZiBi
b3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFpbiBpbmZvIGFib3V0IHNpemVzIGZvciBBUlJBWV9C
VUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9yIEVMRU1FTlRfQVJSQVlfQlVGRkVSCi0gICAgUmVm
UHRyPFdlYkdMQnVmZmVyPiBtX2JvdW5kQXJyYXlCdWZmZXI7Ci0gICAgCi0gICAgUmVmUHRyPFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0OwotICAg
IFJlZlB0cjxXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTPiBtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3Q7Ci0gICAgdm9pZCBzZXRCb3VuZFZlcnRleEFycmF5T2JqZWN0KFBhc3NSZWZQdHI8V2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUz4gYXJyYXlPYmplY3QpCi0gICAgewotICAgICAgICBpZiAoYXJy
YXlPYmplY3QpCi0gICAgICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBhcnJheU9i
amVjdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
ID0gbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgfQotICAgIAotICAgIGNsYXNzIFZl
cnRleEF0dHJpYlZhbHVlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFZlcnRleEF0dHJpYlZhbHVl
KCkKLSAgICAgICAgewotICAgICAgICAgICAgaW5pdFZhbHVlKCk7Ci0gICAgICAgIH0KLSAgICAg
ICAgCi0gICAgICAgIHZvaWQgaW5pdFZhbHVlKCkKLSAgICAgICAgewotICAgICAgICAgICAgdmFs
dWVbMF0gPSAwLjBmOwotICAgICAgICAgICAgdmFsdWVbMV0gPSAwLjBmOwotICAgICAgICAgICAg
dmFsdWVbMl0gPSAwLjBmOwotICAgICAgICAgICAgdmFsdWVbM10gPSAxLjBmOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICBHQzNEZmxvYXQgdmFsdWVbNF07Ci0gICAgfTsKLSAgICBWZWN0
b3I8VmVydGV4QXR0cmliVmFsdWU+IG1fdmVydGV4QXR0cmliVmFsdWU7Ci0gICAgdW5zaWduZWQg
bV9tYXhWZXJ0ZXhBdHRyaWJzOwotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyOwotICAgIGxvbmcgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6ZTsKLSAgICBHQzNE
ZmxvYXQgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbNF07Ci0gICAgYm9vbCBtX2ZvcmNlQXR0
cmliMEJ1ZmZlclJlZmlsbDsKLSAgICBib29sIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmU7Ci0K
LSAgICBSZWZQdHI8V2ViR0xQcm9ncmFtPiBtX2N1cnJlbnRQcm9ncmFtOwotICAgIFJlZlB0cjxX
ZWJHTEZyYW1lYnVmZmVyPiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKLSAgICBSZWZQdHI8V2ViR0xS
ZW5kZXJidWZmZXI+IG1fcmVuZGVyYnVmZmVyQmluZGluZzsKLSAgICBzdHJ1Y3QgVGV4dHVyZVVu
aXRTdGF0ZSB7Ci0gICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmUyREJpbmRpbmc7
Ci0gICAgICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IHRleHR1cmVDdWJlTWFwQmluZGluZzsKLSAg
ICB9OwotICAgIFZlY3RvcjxUZXh0dXJlVW5pdFN0YXRlPiBtX3RleHR1cmVVbml0czsKLSAgICB1
bnNpZ25lZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7Ci0KLSAgICBSZWZQdHI8V2ViR0xUZXh0
dXJlPiBtX2JsYWNrVGV4dHVyZTJEOwotICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG1fYmxhY2tU
ZXh0dXJlQ3ViZU1hcDsKLQotICAgIFZlY3RvcjxHQzNEZW51bT4gbV9jb21wcmVzc2VkVGV4dHVy
ZUZvcm1hdHM7Ci0KLSAgICAvLyBGaXhlZC1zaXplIGNhY2hlIG9mIHJldXNhYmxlIGltYWdlIGJ1
ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCi0gICAgY2xhc3MgTFJVSW1hZ2VCdWZm
ZXJDYWNoZSB7Ci0gICAgcHVibGljOgotICAgICAgICBMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBj
YXBhY2l0eSk7Ci0gICAgICAgIC8vIFRoZSBwb2ludGVyIHJldHVybmVkIGlzIG93bmVkIGJ5IHRo
ZSBpbWFnZSBidWZmZXIgbWFwLgotICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoY29u
c3QgSW50U2l6ZSYgc2l6ZSk7Ci0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBidWJibGVUb0Zy
b250KGludCBpZHgpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8c3RkOjp1bmlxdWVfcHRyPElt
YWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7Ci0gICAgICAgIGludCBtX2NhcGFjaXR5OwotICAgIH07
Ci0gICAgTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRlZEltYWdlQ2FjaGU7Ci0KLSAgICBH
QzNEaW50IG1fbWF4VGV4dHVyZVNpemU7Ci0gICAgR0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJl
U2l6ZTsKLSAgICBHQzNEaW50IG1fbWF4UmVuZGVyYnVmZmVyU2l6ZTsKLSAgICBHQzNEaW50IG1f
bWF4Vmlld3BvcnREaW1zWzJdOwotICAgIEdDM0RpbnQgbV9tYXhUZXh0dXJlTGV2ZWw7Ci0gICAg
R0MzRGludCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7Ci0KLSAgICBHQzNEaW50IG1fbWF4RHJh
d0J1ZmZlcnM7Ci0gICAgR0MzRGludCBtX21heENvbG9yQXR0YWNobWVudHM7Ci0gICAgR0MzRGVu
dW0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAgICBib29sIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVt
ZW50c0NoZWNrZWQ7Ci0gICAgYm9vbCBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkOwotCi0gICAgR0Mz
RGludCBtX3BhY2tBbGlnbm1lbnQ7Ci0gICAgR0MzRGludCBtX3VucGFja0FsaWdubWVudDsKLSAg
ICBib29sIG1fdW5wYWNrRmxpcFk7Ci0gICAgYm9vbCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGE7
Ci0gICAgR0MzRGVudW0gbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbjsKLSAgICBib29sIG1f
Y29udGV4dExvc3Q7Ci0gICAgTG9zdENvbnRleHRNb2RlIG1fY29udGV4dExvc3RNb2RlOwotICAg
IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKLQotICAgIGJvb2wg
bV9sYXllckNsZWFyZWQ7Ci0gICAgR0MzRGZsb2F0IG1fY2xlYXJDb2xvcls0XTsKLSAgICBib29s
IG1fc2Npc3NvckVuYWJsZWQ7Ci0gICAgR0MzRGZsb2F0IG1fY2xlYXJEZXB0aDsKLSAgICBHQzNE
aW50IG1fY2xlYXJTdGVuY2lsOwotICAgIEdDM0Rib29sZWFuIG1fY29sb3JNYXNrWzRdOwotICAg
IEdDM0Rib29sZWFuIG1fZGVwdGhNYXNrOwotCi0gICAgYm9vbCBtX3N0ZW5jaWxFbmFibGVkOwot
ICAgIEdDM0R1aW50IG1fc3RlbmNpbE1hc2ssIG1fc3RlbmNpbE1hc2tCYWNrOwotICAgIEdDM0Rp
bnQgbV9zdGVuY2lsRnVuY1JlZiwgbV9zdGVuY2lsRnVuY1JlZkJhY2s7IC8vIE5vdGUgdGhhdCB0
aGVzZSBhcmUgdGhlIHVzZXIgc3BlY2lmaWVkIHZhbHVlcywgbm90IHRoZSBpbnRlcm5hbCBjbGFt
cGVkIHZhbHVlLgotICAgIEdDM0R1aW50IG1fc3RlbmNpbEZ1bmNNYXNrLCBtX3N0ZW5jaWxGdW5j
TWFza0JhY2s7Ci0KLSAgICBib29sIG1faXNHTEVTMkNvbXBsaWFudDsKLSAgICBib29sIG1faXNH
TEVTMk5QT1RTdHJpY3Q7Ci0gICAgYm9vbCBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXM7Ci0gICAgYm9vbCBtX2lzUmVzb3VyY2VTYWZlOwotICAgIGJvb2wgbV9pc0RlcHRo
U3RlbmNpbFN1cHBvcnRlZDsKLSAgICBib29sIG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkOwot
Ci0gICAgYm9vbCBtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlOwotICAgIGludCBtX251bUdM
RXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKLQotICAgIC8vIEEgV2ViR0xSZW5kZXJpbmdDb250ZXh0
IGNhbiBiZSBjcmVhdGVkIGluIGEgc3RhdGUgd2hlcmUgaXQgYXBwZWFycyBhcwotICAgIC8vIGEg
dmFsaWQgYW5kIGFjdGl2ZSBjb250ZXh0LCBidXQgd2lsbCBub3QgZXhlY3V0ZSBhbnkgaW1wb3J0
YW50IG9wZXJhdGlvbnMKLSAgICAvLyB1bnRpbCBpdHMgbG9hZCBwb2xpY3kgaXMgY29tcGxldGVs
eSByZXNvbHZlZC4KLSAgICBib29sIG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbjsKLSAgICBi
b29sIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbjsKLSAgICBib29sIGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKTsKLQotICAgIC8vIEVuYWJsZWQgZXh0ZW5zaW9uIG9iamVjdHMuCi0gICAg
c3RkOjp1bmlxdWVfcHRyPEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYz4gbV9leHRUZXh0dXJl
RmlsdGVyQW5pc290cm9waWM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEVYVFNoYWRlclRleHR1cmVM
T0Q+IG1fZXh0U2hhZGVyVGV4dHVyZUxPRDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVy
ZUZsb2F0PiBtX29lc1RleHR1cmVGbG9hdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVy
ZUZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVGbG9hdExpbmVhcjsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8T0VTVGV4dHVyZUhhbGZGbG9hdD4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0OwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVIYWxmRmxv
YXRMaW5lYXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM+IG1f
b2VzU3RhbmRhcmREZXJpdmF0aXZlczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVmVydGV4QXJy
YXlPYmplY3Q+IG1fb2VzVmVydGV4QXJyYXlPYmplY3Q7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9F
U0VsZW1lbnRJbmRleFVpbnQ+IG1fb2VzRWxlbWVudEluZGV4VWludDsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8V2ViR0xMb3NlQ29udGV4dD4gbV93ZWJnbExvc2VDb250ZXh0OwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJHTERlYnVnUmVuZGVyZXJJbmZvPiBtX3dlYmdsRGVidWdSZW5kZXJlckluZm87
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMRGVidWdTaGFkZXJzPiBtX3dlYmdsRGVidWdTaGFk
ZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDPiBtX3dl
YmdsQ29tcHJlc3NlZFRleHR1cmVBVEM7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEM7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDPiBtX3dlYmdsQ29tcHJlc3Nl
ZFRleHR1cmVTM1RDOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlcHRoVGV4dHVyZT4gbV93
ZWJnbERlcHRoVGV4dHVyZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEcmF3QnVmZmVycz4g
bV93ZWJnbERyYXdCdWZmZXJzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBTkdMRUluc3RhbmNlZEFy
cmF5cz4gbV9hbmdsZUluc3RhbmNlZEFycmF5czsKLQotICAgIC8vIEhlbHBlcnMgZm9yIGdldFBh
cmFtZXRlciBhbmQgb3RoZXJzCi0gICAgV2ViR0xHZXRJbmZvIGdldEJvb2xlYW5QYXJhbWV0ZXIo
R0MzRGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIoR0Mz
RGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51bSk7Ci0g
ICAgV2ViR0xHZXRJbmZvIGdldEludFBhcmFtZXRlcihHQzNEZW51bSk7Ci0gICAgV2ViR0xHZXRJ
bmZvIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8g
Z2V0V2ViR0xGbG9hdEFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8g
Z2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihHQzNEZW51bSk7Ci0KLSAgICAvLyBDbGVhciB0aGUg
YmFja2J1ZmZlciBpZiBpdCB3YXMgY29tcG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBvcGVyYXRpb24u
Ci0gICAgLy8gY2xlYXJNYXNrIGlzIHNldCB0byB0aGUgYml0ZmllbGQgb2YgYW55IGNsZWFyIHRo
YXQgd291bGQgaGFwcGVuIGFueXdheSBhdCB0aGlzIHRpbWUKLSAgICAvLyBhbmQgdGhlIGZ1bmN0
aW9uIHJldHVybnMgdHJ1ZSBpZiB0aGF0IGNsZWFyIGlzIG5vdyB1bm5lY2Vzc2FyeS4KLSAgICBi
b29sIGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSAwKTsKLQotICAg
IC8vIEhlbHBlciB0byByZXN0b3JlIHN0YXRlIHRoYXQgY2xlYXJpbmcgdGhlIGZyYW1lYnVmZmVy
IG1heSBkZXN0cm95LgotICAgIHZvaWQgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwotCi0gICAg
dm9pZCB0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdD
M0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQq
IHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyREltcGwoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSosIEdyYXBoaWNzQ29udGV4dDNEOjpJbWFn
ZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4U3ViSW1h
Z2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSos
IEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCBjaGVja1RleHR1
cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hhciosIGJvb2wpOwotCi0gICAgdm9pZCBjcmVhdGVGYWxs
YmFja0JsYWNrVGV4dHVyZXMxeDEoKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgY29w
eVRleHtTdWJ9SW1hZ2UsIGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0Ci0gICAgLy8g
YW5kIHRoZSBjb2xvciBidWZmZXIgZm9ybWF0IG9mIHRoZSBjdXJyZW50IGJvdW5kIGZyYW1lYnVm
ZmVyIGNvbWJpbmF0aW9uCi0gICAgLy8gaXMgdmFsaWQuCi0gICAgYm9vbCBpc1RleEludGVybmFs
Rm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9y
bWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGNvbG9yIGJ1ZmZlciBmb3JtYXQuCi0g
ICAgR0MzRGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCk7Ci0KLSAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIHdpZHRoLgotICAg
IGludCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlv
biB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgotICAgIGludCBnZXRCb3Vu
ZEZyYW1lYnVmZmVySGVpZ2h0KCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmVyaWZ5
IGxpbWl0cyBvbiB0aGUgbGVuZ3RoIG9mIHVuaWZvcm0gYW5kIGF0dHJpYnV0ZSBsb2NhdGlvbnMu
Ci0gICAgYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgU3RyaW5nJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYg
c2l6ZSBpcyBub24tbmVnYXRpdmUuCi0gICAgLy8gR2VuZXJhdGUgR0wgZXJyb3IgYW5kIHJldHVy
biBmYWxzZSBmb3IgbmVnYXRpdmUgaW5wdXRzOyBvdGhlcndpc2UsIHJldHVybiB0cnVlLgotICAg
IGJvb2wgdmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBH
QzNEaW50IHkpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGFsbCBjaGFy
YWN0ZXJzIGluIHRoZSBzdHJpbmcgYmVsb25nIHRvIHRoZQotICAgIC8vIEFTQ0lJIHN1YnNldCBh
cyBkZWZpbmVkIGluIEdMU0wgRVMgMS4wIHNwZWMgc2VjdGlvbiAzLjEuCi0gICAgYm9vbCB2YWxp
ZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYpOwotCi0g
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIHRhcmdldCBhbmQgdGV4dHVyZSBib3VuZCB0
byB0aGUgdGFyZ2V0LgotICAgIC8vIEdlbmVyYXRlIEdMIGVycm9ycyBhbmQgcmV0dXJuIDAgaWYg
dGFyZ2V0IGlzIGludmFsaWQgb3IgdGV4dHVyZSBib3VuZCBpcwotICAgIC8vIG51bGwuICBPdGhl
cndpc2UsIHJldHVybiB0aGUgdGV4dHVyZSBib3VuZCB0byB0aGUgdGFyZ2V0LgotICAgIFdlYkdM
VGV4dHVyZSogdmFsaWRhdGVUZXh0dXJlQmluZGluZyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIHRhcmdldCwgYm9vbCB1c2VTaXhFbnVtc0ZvckN1YmVNYXApOwotCi0gICAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlucHV0IGZvcm1hdC90eXBlIGZvciBmdW5jdGlvbnMg
e2NvcHl9VGV4e1N1Yn1JbWFnZS4KLSAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVy
bnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBib29sIHZhbGlkYXRlVGV4
RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0
aW9uIHRvIGNoZWNrIGlucHV0IGxldmVsIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFn
ZS4KLSAgICAvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgbGV2ZWwg
aXMgaW52YWxpZC4KLSAgICBib29sIHZhbGlkYXRlVGV4RnVuY0xldmVsKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsKTsKLQotICAgIGVudW0g
VGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgewotICAgICAgICBOb3RUZXhTdWJJbWFnZTJE
LAotICAgICAgICBUZXhTdWJJbWFnZTJELAotICAgIH07Ci0KLSAgICBlbnVtIFRleEZ1bmNWYWxp
ZGF0aW9uU291cmNlVHlwZSB7Ci0gICAgICAgIFNvdXJjZUFycmF5QnVmZmVyVmlldywKLSAgICAg
ICAgU291cmNlSW1hZ2VEYXRhLAotICAgICAgICBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LAotICAg
ICAgICBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwKLSAgICAgICAgU291cmNlSFRNTFZpZGVvRWxl
bWVudCwKLSAgICB9OwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdl
MkQgdG8gY2hlY2sgaWYgdGhlIGlucHV0IGZvcm1hdC90eXBlL2xldmVsL3RhcmdldC93aWR0aC9o
ZWlnaHQvYm9yZGVyL3hvZmZzZXQveW9mZnNldCBhcmUgdmFsaWQuCi0gICAgLy8gT3RoZXJ3aXNl
LCBpdCB3b3VsZCByZXR1cm4gcXVpY2tseSB3aXRob3V0IGRvaW5nIG90aGVyIHdvcmsuCi0gICAg
Ym9vbCB2YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFs
aWRhdGlvbkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlLCBHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6
ZWkgd2lkdGgsCi0gICAgICAgIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0ZXJz
IGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KLSAgICAvLyBHZW5lcmF0ZXMgR0wg
ZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KLSAgICBi
b29sIHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0
aW9uVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlKTsKLQotICAgIGVudW0gTnVsbERpc3Bvc2l0aW9uIHsKLSAgICAgICAgTnVsbEFsbG93
ZWQsCi0gICAgICAgIE51bGxOb3RBbGxvd2VkCi0gICAgfTsKLQotICAgIC8vIEhlbHBlciBmdW5j
dGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZpZXcKLSAgICAvLyBp
cyBvZiB0aGUgY29ycmVjdCB0eXBlIGFuZCBjb250YWlucyBlbm91Z2ggZGF0YSBmb3IgdGhlIHRl
eEltYWdlIGNhbGwuCi0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNl
IGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNEYXRh
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOdWxsRGlzcG9zaXRpb24pOwotCi0gICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGEgZ2l2ZW4gdGV4dHVyZSBmb3JtYXQgaXMgc2V0dGFi
bGUgYXMgaW4KLSAgICAvLyB5b3UgY2FuIHN1cHBseSBkYXRhIHRvIHRleEltYWdlMkQsIG9yIGNh
bGwgdGV4SW1hZ2UyRCwgY29weVRleEltYWdlMkQgYW5kCi0gICAgLy8gY29weVRleFN1YkltYWdl
MkQuCi0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHRoZSBm
b3JtYXQgaXMgbm90IHNldHRhYmxlLgotICAgIGJvb2wgdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1h
dChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZvcm1hdCk7Ci0KLSAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgY29tcHJlc3NlZCB0ZXh0dXJlIGRhdGEgaXMgY29y
cmVjdCBzaXplCi0gICAgLy8gZm9yIHRoZSBnaXZlbiBmb3JtYXQgYW5kIGRpbWVuc2lvbnMuCi0g
ICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzKTsKLQotICAg
IC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBjb21wcmVzc2VkIHRleHR1cmUgZm9y
bWF0cy4KLSAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChHQzNEZW51bSBmb3Jt
YXQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4
dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxpZCBmb3IKLSAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0Lgot
ICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpOwotCi0gICAgLy8gSGVscGVyIGZ1
bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNzZWQgdGV4dHVyZSBkaW1lbnNpb25zIGFyZSB2YWxp
ZCBmb3IKLSAgICAvLyB0aGUgZ2l2ZW4gZm9ybWF0LgotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVz
c2VkVGV4U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBXZWJHTFRleHR1cmUqKTsKLQot
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2RlIGZvciBkcmF3e0FycmF5cy9F
bGVtZW50c30uCi0gICAgYm9vbCB2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlm
IGZyb250L2JhY2sgc3RlbmNpbE1hc2sgYW5kIHN0ZW5jaWxGdW5jIHNldHRpbmdzIGFyZSB0aGUg
c2FtZS4KLSAgICBib29sIHZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgc3RlbmNpbCBm
dW5jLgotICAgIGJvb2wgdmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4UGFyYW1ldGVy
ZiBhbmQgdGV4UGFyYW1ldGVyaS4KLSAgICB2b2lkIHRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW1pLCBHQzNEaW50IHBhcmFtZiwgYm9v
bCBpc0Zsb2F0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmludCBHTCBlcnJvcnMg
dG8gY29uc29sZS4KLSAgICB2b2lkIHByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJpbmcm
KTsKLSAgICB2b2lkIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
LCBjb25zdCBjaGFyKiByZWFzb24pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByaW50
IHdhcm5pbmdzIHRvIGNvbnNvbGUuIEN1cnJlbnRseQotICAgIC8vIHVzZWQgb25seSB0byB3YXJu
IGFib3V0IHVzZSBvZiBvYnNvbGV0ZSBmdW5jdGlvbnMuCi0gICAgdm9pZCBwcmludFdhcm5pbmdU
b0NvbnNvbGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFs
aWRhdGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnJhbWVidWZmZXIgZnVuY3Rpb25zLgotICAgIC8v
IEdlbmVyYXRlIEdMIGVycm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVnYWwuCi0gICAgYm9vbCB2
YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQpOwotCi0gICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGJsZW5kIGVxdWF0aW9uIG1vZGUuCi0gICAgYm9vbCB2YWxp
ZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7Ci0K
LSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYmxlbmQgZnVuYyBmYWN0b3JzLgot
ICAgIGJvb2wgdmFsaWRhdGVCbGVuZEZ1bmNGYWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgR0MzRGVudW0gc3JjLCBHQzNEZW51bSBkc3QpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHZhbGlkYXRlIGEgR0wgY2FwYWJpbGl0eS4KLSAgICBib29sIHZhbGlkYXRlQ2FwYWJpbGl0
eShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB0byB2YWxpZGF0ZSBpbnB1dCBwYXJhbWV0ZXJzIGZvciB1bmlmb3JtIGZ1bmN0aW9u
cy4KLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJheSosIEdDM0Rz
aXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgSW50MzJBcnJheSos
IEdDM0RzaXplaSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgdm9pZCos
IEdDM0RzaXplaSwgR0MzRHNpemVpIG1vZCk7Ci0gICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSosIEdDM0RzaXpl
aSBtb2QpOwotICAgIGJvb2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCB2b2lkKiwgR0MzRHNpemVpLCBHQzNEc2l6ZWkgbW9kKTsKLQotICAgIC8v
IEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBwYXJhbWV0ZXJzIGZvciBidWZmZXJEYXRhLgot
ICAgIC8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFyZ2V0LCBvciAwIGlm
IHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCi0gICAgV2ViR0xCdWZmZXIqIHZhbGlkYXRlQnVmZmVy
RGF0YVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIHVzYWdlKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1J
bWFnZTJEIHRvIG1ha2Ugc3VyZSBpbWFnZSBpcyByZWFkeSBhbmQgd291bGRuJ3QgdGFpbnQgT3Jp
Z2luLgotICAgIGJvb2wgdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLQotICAgIC8vIEhl
bHBlciBmdW5jdGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIG1ha2Ugc3VyZSBjYW52YXMgaXMg
cmVhZHkgYW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KLSAgICBib29sIHZhbGlkYXRlSFRNTENh
bnZhc0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBIVE1MQ2FudmFzRWxlbWVudCos
IEV4Y2VwdGlvbkNvZGUmKTsKLQotI2lmIEVOQUJMRShWSURFTykKLSAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlkZW8gaXMgcmVhZHkgd291
bGRuJ3QgdGFpbnQgT3JpZ2luLgotICAgIGJvb2wgdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUm
KTsKLSNlbmRpZgotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgdmVydGV4QXR0cmliTmZ7
dn0uCi0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0R1aW50IGluZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQsIEdDM0Rm
bG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxvYXQpOwotICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSos
IEdDM0RzaXplaSBleHBlY3RlZFNpemUpOwotICAgIHZvaWQgdmVydGV4QXR0cmliZnZJbXBsKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCosIEdDM0Rz
aXplaSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24g
Zm9yIGRlbGV0ZSogKGRlbGV0ZUJ1ZmZlciwgZGVsZXRlUHJvZ3JhbSwgZXRjKSBmdW5jdGlvbnMu
Ci0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJuIHdpdGhvdXQgZnVy
dGhlciBwcm9jZXNzaW5nLgotICAgIGJvb2wgZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0Kik7Ci0K
LSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJpbmQqIChiaW5kQnVmZmVyLCBiaW5kVGV4dHVy
ZSwgZXRjKSBhbmQgdXNlUHJvZ3JhbS4KLSAgICAvLyBJZiB0aGUgb2JqZWN0IGhhcyBhbHJlYWR5
IGJlZW4gZGVsZXRlZCwgc2V0IGRlbGV0ZWQgdG8gdHJ1ZSB1cG9uIHJldHVybi4KLSAgICAvLyBS
ZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCByZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nl
c3NpbmcuCi0gICAgYm9vbCBjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVsZXRlZCk7Ci0KLSAgICAvLyBIZWxwZXJzIGZv
ciBzaW11bGF0aW5nIHZlcnRleEF0dHJpYjAKLSAgICB2b2lkIGluaXRWZXJ0ZXhBdHRyaWIwKCk7
Ci0gICAgYm9vbCBzaW11bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51bVZlcnRleCk7Ci0g
ICAgdm9pZCByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotCi0g
ICAgdm9pZCBkaXNwYXRjaENvbnRleHRMb3N0RXZlbnQoKTsKLSAgICAvLyBIZWxwZXIgZm9yIHJl
c3RvcmF0aW9uIGFmdGVyIGNvbnRleHQgbG9zdC4KLSAgICB2b2lkIG1heWJlUmVzdG9yZUNvbnRl
eHQoKTsKLQotICAgIC8vIERldGVybWluZSBpZiB3ZSBhcmUgcnVubmluZyBwcml2aWxlZ2VkIGNv
ZGUgaW4gdGhlIGJyb3dzZXIsIGZvciBleGFtcGxlLAotICAgIC8vIGEgU2FmYXJpIG9yIENocm9t
ZSBleHRlbnNpb24uCi0gICAgYm9vbCBhbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3Q7
Ci0KLSAgICBlbnVtIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSB7Ci0gICAgICAgIERpc3BsYXlJ
bkNvbnNvbGUsCi0gICAgICAgIERvbnREaXNwbGF5SW5Db25zb2xlCi0gICAgfTsKLQotICAgIC8v
IFdyYXBwZXIgZm9yIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvciB0aGF0IHNl
bmRzIGEgbWVzc2FnZQotICAgIC8vIHRvIHRoZSBKYXZhU2NyaXB0IGNvbnNvbGUuCi0gICAgdm9p
ZCBzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSwgY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBjaGFyKiBkZXNjcmlwdGlvbiwgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlID0gRGlzcGxh
eUluQ29uc29sZSk7Ci0KLSAgICBTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmKSBj
b25zdDsKLQotICAgIC8vIEVuYWJsZSBvciBkaXNhYmxlIHN0ZW5jaWwgdGVzdCBiYXNlZCBvbiB1
c2VyIHNldHRpbmcgYW5kCi0gICAgLy8gd2hldGhlciB0aGUgY3VycmVudCBGQk8gaGFzIGEgc3Rl
bmNpbCBidWZmZXIuCi0gICAgdm9pZCBhcHBseVN0ZW5jaWxUZXN0KCk7Ci0KLSAgICAvLyBIZWxw
ZXIgZm9yIGVuYWJsaW5nIG9yIGRpc2FibGluZyBhIGNhcGFiaWxpdHkuCi0gICAgdm9pZCBlbmFi
bGVPckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpOwotCi0gICAgLy8g
Q2xhbXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQT1JUX0RJTVMuCi0gICAg
SW50U2l6ZSBjbGFtcGVkQ2FudmFzU2l6ZSgpOwotCi0gICAgLy8gRmlyc3QgdGltZSBjYWxsZWQs
IGlmIEVYVF9kcmF3X2J1ZmZlcnMgaXMgc3VwcG9ydGVkLCBxdWVyeSB0aGUgdmFsdWU7IG90aGVy
d2lzZSByZXR1cm4gMC4KLSAgICAvLyBMYXRlciwgcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUuCi0g
ICAgR0MzRGludCBnZXRNYXhEcmF3QnVmZmVycygpOwotICAgIEdDM0RpbnQgZ2V0TWF4Q29sb3JB
dHRhY2htZW50cygpOwotCi0gICAgdm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSk7Ci0K
LSAgICB2b2lkIHJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKTsKLSAgICB2b2lkIHJlc3RvcmVD
dXJyZW50VGV4dHVyZTJEKCk7Ci0KLSAgICAvLyBDaGVjayBpZiBFWFRfZHJhd19idWZmZXJzIGV4
dGVuc2lvbiBpcyBzdXBwb3J0ZWQgYW5kIGlmIGl0IHNhdGlzZmllcyB0aGUgV2ViR0wgcmVxdWly
ZW1lbnRzLgotICAgIGJvb2wgc3VwcG9ydHNEcmF3QnVmZmVycygpOworICAgIFdlYkdMMVJlbmRl
cmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyk7CisgICAgV2ViR0wxUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCosIFBh
c3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyk7CiB9OwotCisgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29u
dGV4dC5pZGwJKHJldmlzaW9uIDE3Njk5NCkJKGZyb20gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmlkbDoxNzY5OTQpCisrKyBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMZW51bTsKK3R5cGVkZWYgYm9vbGVhbiAgICAg
ICAgR0xib29sZWFuOwordHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTGJpdGZpZWxkOwordHlwZWRl
ZiBieXRlICAgICAgICAgICBHTGJ5dGU7ICAgICAgICAgLyogJ2J5dGUnIHNob3VsZCBiZSBhIHNp
Z25lZCA4IGJpdCB0eXBlLiAqLwordHlwZWRlZiBzaG9ydCAgICAgICAgICBHTHNob3J0OwordHlw
ZWRlZiBsb25nICAgICAgICAgICBHTGludDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgR0xzaXpl
aTsKK3R5cGVkZWYgbG9uZyBsb25nICAgICAgR0xpbnRwdHI7Cit0eXBlZGVmIGxvbmcgbG9uZyAg
ICAgIEdMc2l6ZWlwdHI7Cit0eXBlZGVmIG9jdGV0ICAgICAgICAgIEdMdWJ5dGU7ICAgICAgICAv
KiAnb2N0ZXQnIHNob3VsZCBiZSBhbiB1bnNpZ25lZCA4IGJpdCB0eXBlLiAqLwordHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBHTHVzaG9ydDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgR0x1aW50Owor
dHlwZWRlZiB1bnJlc3RyaWN0ZWQgZmxvYXQgR0xmbG9hdDsKK3R5cGVkZWYgdW5yZXN0cmljdGVk
IGZsb2F0IEdMY2xhbXBmOworCitbCisgICAgQ29uZGl0aW9uYWw9V0VCR0wsCisgICAgSlNDdXN0
b21NYXJrRnVuY3Rpb24sCisgICAgRG9Ob3RDaGVja0NvbnN0YW50cywKK10gaW50ZXJmYWNlIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgeworCisgICAgLyog
Q2xlYXJCdWZmZXJNYXNrICovCisgICAgY29uc3QgR0xlbnVtIERFUFRIX0JVRkZFUl9CSVQgICAg
ICAgICAgICAgICA9IDB4MDAwMDAxMDA7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQlVGRkVS
X0JJVCAgICAgICAgICAgICA9IDB4MDAwMDA0MDA7CisgICAgY29uc3QgR0xlbnVtIENPTE9SX0JV
RkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDA7CisKKyAgICAvKiBCZWdpbk1vZGUg
Ki8KKyAgICBjb25zdCBHTGVudW0gUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgw
MDAwOworICAgIGNvbnN0IEdMZW51bSBMSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDAwMDE7CisgICAgY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICA9
IDB4MDAwMjsKKyAgICBjb25zdCBHTGVudW0gTElORV9TVFJJUCAgICAgICAgICAgICAgICAgICAg
ID0gMHgwMDAzOworICAgIGNvbnN0IEdMZW51bSBUUklBTkdMRVMgICAgICAgICAgICAgICAgICAg
ICAgPSAweDAwMDQ7CisgICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAgICAgICAgICAg
ICAgICA9IDB4MDAwNTsKKyAgICBjb25zdCBHTGVudW0gVFJJQU5HTEVfRkFOICAgICAgICAgICAg
ICAgICAgID0gMHgwMDA2OworCisgICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1cHBvcnRlZCBp
biBFUzIwKSAqLworICAgIC8qICAgICAgTkVWRVIgKi8KKyAgICAvKiAgICAgIExFU1MgKi8KKyAg
ICAvKiAgICAgIEVRVUFMICovCisgICAgLyogICAgICBMRVFVQUwgKi8KKyAgICAvKiAgICAgIEdS
RUFURVIgKi8KKyAgICAvKiAgICAgIE5PVEVRVUFMICovCisgICAgLyogICAgICBHRVFVQUwgKi8K
KyAgICAvKiAgICAgIEFMV0FZUyAqLworCisgICAgLyogQmxlbmRpbmdGYWN0b3JEZXN0ICovCisg
ICAgY29uc3QgR0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA9IDA7CisgICAg
Y29uc3QgR0xlbnVtIE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDE7CisgICAgY29u
c3QgR0xlbnVtIFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMDsKKyAgICBj
b25zdCBHTGVudW0gT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAxOworICAg
IGNvbnN0IEdMZW51bSBTUkNfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDI7Cisg
ICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAgICA9IDB4MDMwMzsK
KyAgICBjb25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzA0
OworICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfRFNUX0FMUEhBICAgICAgICAgICAgPSAweDAz
MDU7CisKKyAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLworICAgIC8qICAgICAgWkVSTyAqLwor
ICAgIC8qICAgICAgT05FICovCisgICAgY29uc3QgR0xlbnVtIERTVF9DT0xPUiAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MDMwNjsKKyAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0RTVF9DT0xP
UiAgICAgICAgICAgID0gMHgwMzA3OworICAgIGNvbnN0IEdMZW51bSBTUkNfQUxQSEFfU0FUVVJB
VEUgICAgICAgICAgICAgPSAweDAzMDg7CisgICAgLyogICAgICBTUkNfQUxQSEEgKi8KKyAgICAv
KiAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgKi8KKyAgICAvKiAgICAgIERTVF9BTFBIQSAqLwor
ICAgIC8qICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqLworCisgICAgLyogQmxlbmRFcXVhdGlv
blNlcGFyYXRlICovCisgICAgY29uc3QgR0xlbnVtIEZVTkNfQUREICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODAwNjsKKyAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT04gICAgICAgICAg
ICAgICAgID0gMHg4MDA5OworICAgIGNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9SR0IgICAg
ICAgICAgICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLworICAgIGNv
bnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgPSAweDg4M0Q7CisKKyAg
ICAvKiBCbGVuZFN1YnRyYWN0ICovCisgICAgY29uc3QgR0xlbnVtIEZVTkNfU1VCVFJBQ1QgICAg
ICAgICAgICAgICAgICA9IDB4ODAwQTsKKyAgICBjb25zdCBHTGVudW0gRlVOQ19SRVZFUlNFX1NV
QlRSQUNUICAgICAgICAgID0gMHg4MDBCOworCisgICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rp
b25zICovCisgICAgY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9SR0IgICAgICAgICAgICAgICAgICA9
IDB4ODBDODsKKyAgICBjb25zdCBHTGVudW0gQkxFTkRfU1JDX1JHQiAgICAgICAgICAgICAgICAg
ID0gMHg4MEM5OworICAgIGNvbnN0IEdMZW51bSBCTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAg
ICAgPSAweDgwQ0E7CisgICAgY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBIQSAgICAgICAgICAg
ICAgICA9IDB4ODBDQjsKKyAgICBjb25zdCBHTGVudW0gQ09OU1RBTlRfQ09MT1IgICAgICAgICAg
ICAgICAgID0gMHg4MDAxOworICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQ09M
T1IgICAgICAgPSAweDgwMDI7CisgICAgY29uc3QgR0xlbnVtIENPTlNUQU5UX0FMUEhBICAgICAg
ICAgICAgICAgICA9IDB4ODAwMzsKKyAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5U
X0FMUEhBICAgICAgID0gMHg4MDA0OworICAgIGNvbnN0IEdMZW51bSBCTEVORF9DT0xPUiAgICAg
ICAgICAgICAgICAgICAgPSAweDgwMDU7CisKKyAgICAvKiBCdWZmZXIgT2JqZWN0cyAqLworICAg
IGNvbnN0IEdMZW51bSBBUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgPSAweDg4OTI7Cisg
ICAgY29uc3QgR0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICA9IDB4ODg5MzsK
KyAgICBjb25zdCBHTGVudW0gQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4ODk0
OworICAgIGNvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgPSAweDg4
OTU7CisKKyAgICBjb25zdCBHTGVudW0gU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAgID0g
MHg4OEUwOworICAgIGNvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAg
PSAweDg4RTQ7CisgICAgY29uc3QgR0xlbnVtIERZTkFNSUNfRFJBVyAgICAgICAgICAgICAgICAg
ICA9IDB4ODhFODsKKworICAgIGNvbnN0IEdMZW51bSBCVUZGRVJfU0laRSAgICAgICAgICAgICAg
ICAgICAgPSAweDg3NjQ7CisgICAgY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAgICAgICAgICAg
ICAgICAgICA9IDB4ODc2NTsKKworICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1ZFUlRFWF9BVFRS
SUIgICAgICAgICAgPSAweDg2MjY7CisKKyAgICAvKiBDdWxsRmFjZU1vZGUgKi8KKyAgICBjb25z
dCBHTGVudW0gRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA0OworICAgIGNv
bnN0IEdMZW51bSBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA0MDU7CisgICAg
Y29uc3QgR0xlbnVtIEZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICA9IDB4MDQwODsKKwor
ICAgIC8qIERlcHRoRnVuY3Rpb24gKi8KKyAgICAvKiAgICAgIE5FVkVSICovCisgICAgLyogICAg
ICBMRVNTICovCisgICAgLyogICAgICBFUVVBTCAqLworICAgIC8qICAgICAgTEVRVUFMICovCisg
ICAgLyogICAgICBHUkVBVEVSICovCisgICAgLyogICAgICBOT1RFUVVBTCAqLworICAgIC8qICAg
ICAgR0VRVUFMICovCisgICAgLyogICAgICBBTFdBWVMgKi8KKworICAgIC8qIEVuYWJsZUNhcCAq
LworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFXzJEICAgICAgICAgICAgICAgICAgICAgPSAweDBE
RTE7CisgICAgY29uc3QgR0xlbnVtIENVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICA9IDB4
MEI0NDsKKyAgICBjb25zdCBHTGVudW0gQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwQkUyOworICAgIGNvbnN0IEdMZW51bSBESVRIRVIgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDBCRDA7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfVEVTVCAgICAgICAgICAgICAgICAg
ICA9IDB4MEI5MDsKKyAgICBjb25zdCBHTGVudW0gREVQVEhfVEVTVCAgICAgICAgICAgICAgICAg
ICAgID0gMHgwQjcxOworICAgIGNvbnN0IEdMZW51bSBTQ0lTU09SX1RFU1QgICAgICAgICAgICAg
ICAgICAgPSAweDBDMTE7CisgICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX0ZJTEwgICAg
ICAgICAgICA9IDB4ODAzNzsKKyAgICBjb25zdCBHTGVudW0gU0FNUExFX0FMUEhBX1RPX0NPVkVS
QUdFICAgICAgID0gMHg4MDlFOworICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQ09WRVJBR0UgICAg
ICAgICAgICAgICAgPSAweDgwQTA7CisKKyAgICAvKiBFcnJvckNvZGUgKi8KKyAgICBjb25zdCBH
TGVudW0gTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsKKyAgICBjb25zdCBHTGVu
dW0gSU5WQUxJRF9FTlVNICAgICAgICAgICAgICAgICAgID0gMHgwNTAwOworICAgIGNvbnN0IEdM
ZW51bSBJTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgPSAweDA1MDE7CisgICAgY29uc3Qg
R0xlbnVtIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4MDUwMjsKKyAgICBjb25z
dCBHTGVudW0gT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgID0gMHgwNTA1OworCisgICAg
LyogRnJvbnRGYWNlRGlyZWN0aW9uICovCisgICAgY29uc3QgR0xlbnVtIENXICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDkwMDsKKyAgICBjb25zdCBHTGVudW0gQ0NXICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgwOTAxOworCisgICAgLyogR2V0UE5hbWUgKi8KKyAgICBj
b25zdCBHTGVudW0gTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjIxOworICAg
IGNvbnN0IEdMZW51bSBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UgICAgICAgPSAweDg0NkQ7Cisg
ICAgY29uc3QgR0xlbnVtIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA9IDB4ODQ2RTsK
KyAgICBjb25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgID0gMHgwQjQ1
OworICAgIGNvbnN0IEdMZW51bSBGUk9OVF9GQUNFICAgICAgICAgICAgICAgICAgICAgPSAweDBC
NDY7CisgICAgY29uc3QgR0xlbnVtIERFUFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICA9IDB4
MEI3MDsKKyAgICBjb25zdCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0g
MHgwQjcyOworICAgIGNvbnN0IEdMZW51bSBERVBUSF9DTEVBUl9WQUxVRSAgICAgICAgICAgICAg
PSAweDBCNzM7CisgICAgY29uc3QgR0xlbnVtIERFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAg
ICA9IDB4MEI3NDsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAg
ICAgID0gMHgwQjkxOworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZVTkMgICAgICAgICAgICAg
ICAgICAgPSAweDBCOTI7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfRkFJTCAgICAgICAgICAg
ICAgICAgICA9IDB4MEI5NDsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNTX0RFUFRIX0ZB
SUwgICAgICAgID0gMHgwQjk1OworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1BBU1NfREVQVEhf
UEFTUyAgICAgICAgPSAweDBCOTY7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfUkVGICAgICAg
ICAgICAgICAgICAgICA9IDB4MEI5NzsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9WQUxVRV9N
QVNLICAgICAgICAgICAgID0gMHgwQjkzOworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1dSSVRF
TUFTSyAgICAgICAgICAgICAgPSAweDBCOTg7CisgICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFD
S19GVU5DICAgICAgICAgICAgICA9IDB4ODgwMDsKKyAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9C
QUNLX0ZBSUwgICAgICAgICAgICAgID0gMHg4ODAxOworICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lM
X0JBQ0tfUEFTU19ERVBUSF9GQUlMICAgPSAweDg4MDI7CisgICAgY29uc3QgR0xlbnVtIFNURU5D
SUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA9IDB4ODgwMzsKKyAgICBjb25zdCBHTGVudW0gU1RF
TkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOworICAgIGNvbnN0IEdMZW51bSBT
VEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyAgICAgICAgPSAweDhDQTQ7CisgICAgY29uc3QgR0xlbnVt
IFNURU5DSUxfQkFDS19XUklURU1BU0sgICAgICAgICA9IDB4OENBNTsKKyAgICBjb25zdCBHTGVu
dW0gVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEyOworICAgIGNvbnN0IEdM
ZW51bSBTQ0lTU09SX0JPWCAgICAgICAgICAgICAgICAgICAgPSAweDBDMTA7CisgICAgLyogICAg
ICBTQ0lTU09SX1RFU1QgKi8KKyAgICBjb25zdCBHTGVudW0gQ09MT1JfQ0xFQVJfVkFMVUUgICAg
ICAgICAgICAgID0gMHgwQzIyOworICAgIGNvbnN0IEdMZW51bSBDT0xPUl9XUklURU1BU0sgICAg
ICAgICAgICAgICAgPSAweDBDMjM7CisgICAgY29uc3QgR0xlbnVtIFVOUEFDS19BTElHTk1FTlQg
ICAgICAgICAgICAgICA9IDB4MENGNTsKKyAgICBjb25zdCBHTGVudW0gUEFDS19BTElHTk1FTlQg
ICAgICAgICAgICAgICAgID0gMHgwRDA1OworICAgIGNvbnN0IEdMZW51bSBNQVhfVEVYVFVSRV9T
SVpFICAgICAgICAgICAgICAgPSAweDBEMzM7CisgICAgY29uc3QgR0xlbnVtIE1BWF9WSUVXUE9S
VF9ESU1TICAgICAgICAgICAgICA9IDB4MEQzQTsKKyAgICBjb25zdCBHTGVudW0gU1VCUElYRUxf
QklUUyAgICAgICAgICAgICAgICAgID0gMHgwRDUwOworICAgIGNvbnN0IEdMZW51bSBSRURfQklU
UyAgICAgICAgICAgICAgICAgICAgICAgPSAweDBENTI7CisgICAgY29uc3QgR0xlbnVtIEdSRUVO
X0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MzsKKyAgICBjb25zdCBHTGVudW0gQkxV
RV9CSVRTICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OworICAgIGNvbnN0IEdMZW51bSBB
TFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTU7CisgICAgY29uc3QgR0xlbnVt
IERFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NjsKKyAgICBjb25zdCBHTGVu
dW0gU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3OworICAgIGNvbnN0IEdM
ZW51bSBQT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgPSAweDJBMDA7CisgICAgLyogICAg
ICBQT0xZR09OX09GRlNFVF9GSUxMICovCisgICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VU
X0ZBQ1RPUiAgICAgICAgICA9IDB4ODAzODsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9CSU5E
SU5HXzJEICAgICAgICAgICAgID0gMHg4MDY5OworICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQlVG
RkVSUyAgICAgICAgICAgICAgICAgPSAweDgwQTg7CisgICAgY29uc3QgR0xlbnVtIFNBTVBMRVMg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODBBOTsKKyAgICBjb25zdCBHTGVudW0gU0FNUExF
X0NPVkVSQUdFX1ZBTFVFICAgICAgICAgID0gMHg4MEFBOworICAgIGNvbnN0IEdMZW51bSBTQU1Q
TEVfQ09WRVJBR0VfSU5WRVJUICAgICAgICAgPSAweDgwQUI7CisKKyAgICAvKiBHZXRUZXh0dXJl
UGFyYW1ldGVyICovCisgICAgLyogICAgICBURVhUVVJFX01BR19GSUxURVIgKi8KKyAgICAvKiAg
ICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAqLworICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi8K
KyAgICAvKiAgICAgIFRFWFRVUkVfV1JBUF9UICovCisKKyAgICBjb25zdCBHTGVudW0gQ09NUFJF
U1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgID0gMHg4NkEzOworCisgICAgLyogSGludE1vZGUgKi8K
KyAgICBjb25zdCBHTGVudW0gRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAw
OworICAgIGNvbnN0IEdMZW51bSBGQVNURVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEx
MDE7CisgICAgY29uc3QgR0xlbnVtIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MTEwMjsKKworICAgIC8qIEhpbnRUYXJnZXQgKi8KKyAgICBjb25zdCBHTGVudW0gR0VORVJBVEVf
TUlQTUFQX0hJTlQgICAgICAgICAgICA9IDB4ODE5MjsKKworICAgIC8qIERhdGFUeXBlICovCisg
ICAgY29uc3QgR0xlbnVtIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwMDsK
KyAgICBjb25zdCBHTGVudW0gVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgID0gMHgxNDAx
OworICAgIGNvbnN0IEdMZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0
MDI7CisgICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICA9IDB4
MTQwMzsKKyAgICBjb25zdCBHTGVudW0gSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgxNDA0OworICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAg
PSAweDE0MDU7CisgICAgY29uc3QgR0xlbnVtIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MTQwNjsKKworICAgIC8qIFBpeGVsRm9ybWF0ICovCisgICAgY29uc3QgR0xlbnVtIERF
UFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsKKyAgICBjb25zdCBHTGVudW0g
QUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA2OworICAgIGNvbnN0IEdMZW51
bSBSR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDc7CisgICAgY29uc3QgR0xl
bnVtIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKKyAgICBjb25zdCBH
TGVudW0gTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA5OworICAgIGNvbnN0
IEdMZW51bSBMVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgPSAweDE5MEE7CisKKyAgICAv
KiBQaXhlbFR5cGUgKi8KKyAgICAvKiAgICAgIFVOU0lHTkVEX0JZVEUgKi8KKyAgICBjb25zdCBH
TGVudW0gVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgID0gMHg4MDMzOworICAgIGNvbnN0
IEdMZW51bSBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7CisgICAgY29u
c3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICA9IDB4ODM2MzsKKworICAg
IC8qIFNoYWRlcnMgKi8KKyAgICBjb25zdCBHTGVudW0gRlJBR01FTlRfU0hBREVSICAgICAgICAg
ICAgICAgICAgPSAweDhCMzA7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9TSEFERVIgICAgICAg
ICAgICAgICAgICAgID0gMHg4QjMxOworICAgIGNvbnN0IEdMZW51bSBNQVhfVkVSVEVYX0FUVFJJ
QlMgICAgICAgICAgICAgICA9IDB4ODg2OTsKKyAgICBjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9V
TklGT1JNX1ZFQ1RPUlMgICAgICAgPSAweDhERkI7CisgICAgY29uc3QgR0xlbnVtIE1BWF9WQVJZ
SU5HX1ZFQ1RPUlMgICAgICAgICAgICAgID0gMHg4REZDOworICAgIGNvbnN0IEdMZW51bSBNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0RDsKKyAgICBjb25zdCBHTGVudW0g
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7CisgICAgY29uc3QgR0xl
bnVtIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgID0gMHg4ODcyOworICAgIGNvbnN0
IEdMZW51bSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA9IDB4OERGRDsKKyAgICBj
b25zdCBHTGVudW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNEY7Cisg
ICAgY29uc3QgR0xlbnVtIERFTEVURV9TVEFUVVMgICAgICAgICAgICAgICAgICAgID0gMHg4Qjgw
OworICAgIGNvbnN0IEdMZW51bSBMSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICA9IDB4
OEI4MjsKKyAgICBjb25zdCBHTGVudW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAg
PSAweDhCODM7CisgICAgY29uc3QgR0xlbnVtIEFUVEFDSEVEX1NIQURFUlMgICAgICAgICAgICAg
ICAgID0gMHg4Qjg1OworICAgIGNvbnN0IEdMZW51bSBBQ1RJVkVfVU5JRk9STVMgICAgICAgICAg
ICAgICAgICA9IDB4OEI4NjsKKyAgICBjb25zdCBHTGVudW0gQUNUSVZFX0FUVFJJQlVURVMgICAg
ICAgICAgICAgICAgPSAweDhCODk7CisgICAgY29uc3QgR0xlbnVtIFNIQURJTkdfTEFOR1VBR0Vf
VkVSU0lPTiAgICAgICAgID0gMHg4QjhDOworICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1BST0dS
QU0gICAgICAgICAgICAgICAgICA9IDB4OEI4RDsKKworICAgIC8qIFN0ZW5jaWxGdW5jdGlvbiAq
LworICAgIGNvbnN0IEdMZW51bSBORVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAy
MDA7CisgICAgY29uc3QgR0xlbnVtIExFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MDIwMTsKKyAgICBjb25zdCBHTGVudW0gRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwMjAyOworICAgIGNvbnN0IEdMZW51bSBMRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDAyMDM7CisgICAgY29uc3QgR0xlbnVtIEdSRUFURVIgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDIwNDsKKyAgICBjb25zdCBHTGVudW0gTk9URVFVQUwgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwMjA1OworICAgIGNvbnN0IEdMZW51bSBHRVFVQUwgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDAyMDY7CisgICAgY29uc3QgR0xlbnVtIEFMV0FZUyAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDIwNzsKKworICAgIC8qIFN0ZW5jaWxPcCAqLworICAgIC8qICAgICAgWkVS
TyAqLworICAgIGNvbnN0IEdMZW51bSBLRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDFFMDA7CisgICAgY29uc3QgR0xlbnVtIFJFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MUUwMTsKKyAgICBjb25zdCBHTGVudW0gSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHgxRTAyOworICAgIGNvbnN0IEdMZW51bSBERUNSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDFFMDM7CisgICAgY29uc3QgR0xlbnVtIElOVkVSVCAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MTUwQTsKKyAgICBjb25zdCBHTGVudW0gSU5DUl9XUkFQICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NTA3OworICAgIGNvbnN0IEdMZW51bSBERUNSX1dSQVAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg1MDg7CisKKyAgICAvKiBTdHJpbmdOYW1lICovCisgICAgY29uc3QgR0xl
bnVtIFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMDsKKyAgICBjb25zdCBH
TGVudW0gUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAxOworICAgIGNvbnN0
IEdMZW51bSBWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDI7CisKKyAgICAv
KiBUZXh0dXJlTWFnRmlsdGVyICovCisgICAgY29uc3QgR0xlbnVtIE5FQVJFU1QgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MjYwMDsKKyAgICBjb25zdCBHTGVudW0gTElORUFSICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgyNjAxOworCisgICAgLyogVGV4dHVyZU1pbkZpbHRlciAqLwor
ICAgIC8qICAgICAgTkVBUkVTVCAqLworICAgIC8qICAgICAgTElORUFSICovCisgICAgY29uc3Qg
R0xlbnVtIE5FQVJFU1RfTUlQTUFQX05FQVJFU1QgICAgICAgICA9IDB4MjcwMDsKKyAgICBjb25z
dCBHTGVudW0gTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgID0gMHgyNzAxOworICAgIGNv
bnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgPSAweDI3MDI7CisgICAg
Y29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAgICA9IDB4MjcwMzsKKwor
ICAgIC8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkVf
TUFHX0ZJTFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVS
RV9NSU5fRklMVEVSICAgICAgICAgICAgID0gMHgyODAxOworICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgPSAweDI4MDI7CisgICAgY29uc3QgR0xlbnVtIFRF
WFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA9IDB4MjgwMzsKKworICAgIC8qIFRleHR1cmVU
YXJnZXQgKi8KKyAgICAvKiAgICAgIFRFWFRVUkVfMkQgKi8KKyAgICBjb25zdCBHTGVudW0gVEVY
VFVSRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNzAyOworCisgICAgY29uc3QgR0xlbnVt
IFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA9IDB4ODUxMzsKKyAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgID0gMHg4NTE0OworICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1MTU7CisgICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA9IDB4ODUxNjsKKyAgICBjb25z
dCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgID0gMHg4NTE3OworICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAgPSAweDg1MTg7CisgICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA9IDB4ODUxOTsKKyAg
ICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgID0gMHg4NTFBOwor
ICAgIGNvbnN0IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAgPSAweDg1MUM7
CisKKyAgICAvKiBUZXh0dXJlVW5pdCAqLworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMCAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0QzA7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMTsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIg
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMyOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJF
MyAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzM7CisgICAgY29uc3QgR0xlbnVtIFRFWFRV
UkU0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNDsKKyAgICBjb25zdCBHTGVudW0gVEVY
VFVSRTUgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM1OworICAgIGNvbnN0IEdMZW51bSBU
RVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzY7CisgICAgY29uc3QgR0xlbnVt
IFRFWFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNzsKKyAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM4OworICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzk7CisgICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQTsKKyAgICBjb25z
dCBHTGVudW0gVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENCOworICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0M7CisgICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRDsKKyAg
ICBjb25zdCBHTGVudW0gVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENFOwor
ICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0Y7
CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRE
MDsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEQxOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0RDI7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODREMzsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEQ0OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjEgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0RDU7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMiAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODRENjsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIzICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NEQ3OworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjQgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0RDg7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNSAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODREOTsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI2ICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NERBOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjcgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0REI7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyOCAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODREQzsKKyAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI5ICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEREOworICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMzAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0REU7CisgICAgY29uc3QgR0xlbnVtIFRFWFRVUkUz
MSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRERjsKKyAgICBjb25zdCBHTGVudW0gQUNUSVZF
X1RFWFRVUkUgICAgICAgICAgICAgICAgID0gMHg4NEUwOworCisgICAgLyogVGV4dHVyZVdyYXBN
b2RlICovCisgICAgY29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MjkwMTsKKyAgICBjb25zdCBHTGVudW0gQ0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAg
ID0gMHg4MTJGOworICAgIGNvbnN0IEdMZW51bSBNSVJST1JFRF9SRVBFQVQgICAgICAgICAgICAg
ICAgPSAweDgzNzA7CisKKyAgICAvKiBVbmlmb3JtIFR5cGVzICovCisgICAgY29uc3QgR0xlbnVt
IEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MDsKKyAgICBjb25zdCBHTGVu
dW0gRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUxOworICAgIGNvbnN0IEdM
ZW51bSBGTE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTI7CisgICAgY29uc3Qg
R0xlbnVtIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MzsKKyAgICBjb25z
dCBHTGVudW0gSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU0OworICAgIGNv
bnN0IEdMZW51bSBJTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTU7CisgICAg
Y29uc3QgR0xlbnVtIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NjsKKyAg
ICBjb25zdCBHTGVudW0gQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU3Owor
ICAgIGNvbnN0IEdMZW51bSBCT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTg7
CisgICAgY29uc3QgR0xlbnVtIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1
OTsKKyAgICBjb25zdCBHTGVudW0gRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgID0gMHg4
QjVBOworICAgIGNvbnN0IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAgICAgICAgICAgICAgPSAw
eDhCNUI7CisgICAgY29uc3QgR0xlbnVtIEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA9
IDB4OEI1QzsKKyAgICBjb25zdCBHTGVudW0gU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QjVFOworICAgIGNvbnN0IEdMZW51bSBTQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAg
ICAgPSAweDhCNjA7CisKKyAgICAvKiBWZXJ0ZXggQXJyYXlzICovCisgICAgY29uc3QgR0xlbnVt
IFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgPSAweDg2MjI7CisgICAgY29uc3Qg
R0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAgPSAweDg2MjM7CisgICAg
Y29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAgICAgPSAweDg2MjQ7
CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAgICAgPSAw
eDg2MjU7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCAg
ICAgPSAweDg4NkE7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRF
UiAgICAgICAgPSAweDg2NDU7CisgICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlf
QlVGRkVSX0JJTkRJTkcgPSAweDg4OUY7CisKKyAgICAvKiBTaGFkZXIgU291cmNlICovCisgICAg
Y29uc3QgR0xlbnVtIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA9IDB4OEI4MTsKKwor
ICAgIC8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovCisgICAgY29uc3QgR0xl
bnVtIExPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMDsKKyAgICBjb25zdCBH
TGVudW0gTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgID0gMHg4REYxOworICAgIGNvbnN0
IEdMZW51bSBISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgPSAweDhERjI7CisgICAgY29u
c3QgR0xlbnVtIExPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMzsKKyAgICBj
b25zdCBHTGVudW0gTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgID0gMHg4REY0OworICAg
IGNvbnN0IEdMZW51bSBISUdIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhERjU7CisK
KyAgICAvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVG
RkVSICAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MDsKKyAgICBjb25zdCBHTGVudW0gUkVOREVS
QlVGRkVSICAgICAgICAgICAgICAgICAgID0gMHg4RDQxOworCisgICAgY29uc3QgR0xlbnVtIFJH
QkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKKyAgICBjb25zdCBHTGVudW0g
UkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDU3OworICAgIGNvbnN0IEdMZW51
bSBSR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhENjI7CisgICAgY29uc3QgR0xl
bnVtIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9IDB4ODFBNTsKKyAgICBjb25zdCBH
TGVudW0gU1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAgID0gMHgxOTAxOworICAgIGNvbnN0
IEdMZW51bSBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgPSAweDhENDg7CisgICAgY29u
c3QgR0xlbnVtIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA9IDB4ODRGOTsKKworICAg
IGNvbnN0IEdMZW51bSBTUkdCX0VYVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4OEM0MDsKKyAgICBjb25zdCBHTGVudW0gU1JHQl9BTFBIQV9FWFQgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDhDNDI7CisgICAgY29uc3QgR0xlbnVtIFNSR0I4X0FMUEhB
OF9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzQzOworICAgIGNvbnN0IEdM
ZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVCAgICA9IDB4ODIx
MDsKKworICAgIGNvbnN0IEdMZW51bSBNSU5fRVhUICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDgwMDc7CisgICAgY29uc3QgR0xlbnVtIE1BWF9FWFQgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODAwODsKKworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAg
ICAgPSAweDhENDI7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9IRUlHSFQgICAgICAg
ICAgICA9IDB4OEQ0MzsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZP
Uk1BVCAgID0gMHg4RDQ0OworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfUkVEX1NJWkUg
ICAgICAgICAgPSAweDhENTA7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9HUkVFTl9T
SVpFICAgICAgICA9IDB4OEQ1MTsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JMVUVf
U0laRSAgICAgICAgID0gMHg4RDUyOworICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfQUxQ
SEFfU0laRSAgICAgICAgPSAweDhENTM7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9E
RVBUSF9TSVpFICAgICAgICA9IDB4OEQ1NDsKKyAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVS
X1NURU5DSUxfU0laRSAgICAgID0gMHg4RDU1OworCisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfT0JKRUNUX1RZUEUgICAgICAgICAgID0gMHg4Q0QwOworICAgIGNvbnN0
IEdMZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA9IDB4
OENEMTsKKyAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xF
VkVMICAgICAgICAgPSAweDhDRDI7CisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfVEVYVFVSRV9DVUJFX01BUF9GQUNFID0gMHg4Q0QzOworCisgICAgY29uc3QgR0xlbnVt
IENPTE9SX0FUVEFDSE1FTlQwICAgICAgICAgICAgICA9IDB4OENFMDsKKyAgICBjb25zdCBHTGVu
dW0gREVQVEhfQVRUQUNITUVOVCAgICAgICAgICAgICAgID0gMHg4RDAwOworICAgIGNvbnN0IEdM
ZW51bSBTVEVOQ0lMX0FUVEFDSE1FTlQgICAgICAgICAgICAgPSAweDhEMjA7CisgICAgY29uc3Qg
R0xlbnVtIERFUFRIX1NURU5DSUxfQVRUQUNITUVOVCAgICAgICA9IDB4ODIxQTsKKworICAgIGNv
bnN0IEdMZW51bSBOT05FICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOworCisgICAgY29u
c3QgR0xlbnVtIEZSQU1FQlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgID0gMHg4
Q0Q1OworICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQg
ICAgICAgICA9IDB4OENENjsKKyAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9NSVNTSU5HX0FUVEFDSE1FTlQgPSAweDhDRDc7CisgICAgY29uc3QgR0xlbnVtIEZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfRElNRU5TSU9OUyAgICAgICAgID0gMHg4Q0Q5OworICAgIGNvbnN0IEdM
ZW51bSBGUkFNRUJVRkZFUl9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICA9IDB4OENERDsK
KworICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAweDhD
QTY7CisgICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4
OENBNzsKKyAgICBjb25zdCBHTGVudW0gTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgID0g
MHg4NEU4OworCisgICAgY29uc3QgR0xlbnVtIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
ICA9IDB4MDUwNjsKKworICAgIC8qIFdlYkdMLXNwZWNpZmljIGVudW1zICovCisgICAgY29uc3Qg
R0xlbnVtIFVOUEFDS19GTElQX1lfV0VCR0wgICAgICAgICAgICAgICAgPSAweDkyNDA7CisgICAg
Y29uc3QgR0xlbnVtIFVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAgICAgPSAweDkyNDE7
CisgICAgY29uc3QgR0xlbnVtIENPTlRFWFRfTE9TVF9XRUJHTCAgICAgICAgICAgICAgICAgPSAw
eDkyNDI7CisgICAgY29uc3QgR0xlbnVtIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VC
R0wgPSAweDkyNDM7CisgICAgY29uc3QgR0xlbnVtIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAg
ICAgICAgICAgPSAweDkyNDQ7CisKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgR0xzaXplaSBkcmF3
aW5nQnVmZmVyV2lkdGg7CisgICAgcmVhZG9ubHkgYXR0cmlidXRlIEdMc2l6ZWkgZHJhd2luZ0J1
ZmZlckhlaWdodDsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpOworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGF0dGFjaFNoYWRlcihX
ZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2ViR0xTaGFkZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kQXR0cmliTG9jYXRp
b24oV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMdWludCBpbmRleCwgRE9NU3RyaW5nIG5hbWUpOwor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJp
bmRCdWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIgYnVmZmVyKTsKKyAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kRnJhbWVidWZm
ZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CisgICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZFJlbmRl
cmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJp
bmRUZXh0dXJlKEdMZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRDb2xvcihHTGNsYW1wZiByZWQsIEdM
Y2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7CisgICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRXF1YXRpb24oR0xlbnVtIG1vZGUpOwor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uU2VwYXJh
dGUoR0xlbnVtIG1vZGVSR0IsIEdMZW51bSBtb2RlQWxwaGEpOworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICBibGVuZEZ1bmMoR0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFj
dG9yKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRGdW5jU2Vw
YXJhdGUoR0xlbnVtIHNyY1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVu
dW0gZHN0QWxwaGEpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXI/IGRhdGEs
IEdMZW51bSB1c2FnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXc/
IGRhdGEsIEdMZW51bSB1c2FnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRy
IHNpemUsIEdMZW51bSB1c2FnZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0
ciBvZmZzZXQsIEFycmF5QnVmZmVyPyBkYXRhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJTdWJEYXRhKEdMZW51bSB0YXJnZXQs
IEdMaW50cHRyIG9mZnNldCwgQXJyYXlCdWZmZXJWaWV3PyBkYXRhKTsKKworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmddIEdMZW51bSAgICAgICBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMZW51bSB0
YXJnZXQpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJp
dGZpZWxkIG1hc2spOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVh
ckNvbG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xh
bXBmIGFscGhhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXJE
ZXB0aChHTGNsYW1wZiBkZXB0aCk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIGNsZWFyU3RlbmNpbChHTGludCBzKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgY29sb3JNYXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29s
ZWFuIGJsdWUsIEdMYm9vbGVhbiBhbHBoYSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciBzaGFk
ZXIpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRU
ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3Jt
YXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEFycmF5
QnVmZmVyVmlldyBkYXRhKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7CisgICAgCisgICAgW1N0
cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJn
ZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIpOworICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb3B5VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwg
R0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworCisgICAgW1N0cmljdFR5
cGVDaGVja2luZ10gV2ViR0xCdWZmZXIgY3JlYXRlQnVmZmVyKCk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gV2ViR0xGcmFtZWJ1ZmZlciBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIFdlYkdMUHJvZ3JhbSBjcmVhdGVQcm9ncmFtKCk7CisgICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gV2ViR0xSZW5kZXJidWZmZXIgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Cisg
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTFNoYWRlciBjcmVh
dGVTaGFkZXIoR0xlbnVtIHR5cGUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMVGV4
dHVyZSBjcmVhdGVUZXh0dXJlKCk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgY3VsbEZhY2UoR0xlbnVtIG1vZGUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGRlbGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOworICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1l
YnVmZmVyIGZyYW1lYnVmZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZl
ciByZW5kZXJidWZmZXIpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBk
ZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7CisKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhGdW5jKEdMZW51bSBmdW5j
KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhNYXNrKEdMYm9v
bGVhbiBmbGFnKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhS
YW5nZShHTGNsYW1wZiB6TmVhciwgR0xjbGFtcGYgekZhcik7CisgICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZGV0YWNoU2hhZGVyKFdlYkdMUHJv
Z3JhbSBwcm9ncmFtLCBXZWJHTFNoYWRlciBzaGFkZXIpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICBkaXNhYmxlKEdMZW51bSBjYXApOworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJB
cnJheShHTHVpbnQgaW5kZXgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBH
THNpemVpIGNvdW50KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgICAgICAgICBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdM
ZW51bSB0eXBlLCBHTGludHB0ciBvZmZzZXQpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGVuYWJsZShHTGVudW0gY2FwKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShH
THVpbnQgaW5kZXgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBmaW5p
c2goKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmx1c2goKTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xl
bnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBm
cmFtZWJ1ZmZlclRleHR1cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xl
bnVtIHRleHRhcmdldCwgV2ViR0xUZXh0dXJlIHRleHR1cmUsIEdMaW50IGxldmVsKTsKKyAgICBb
U3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51bSBtb2RlKTsK
KyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZ2VuZXJhdGVNaXBtYXAoR0xl
bnVtIHRhcmdldCk7CisgICAgCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFt
LCBHTHVpbnQgaW5kZXgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gV2ViR0xBY3RpdmVJbmZvIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtIHByb2dyYW0s
IEdMdWludCBpbmRleCk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtIHByb2dyYW0p
OworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xpbnQgICAgICAgIGdldEF0dHJpYkxvY2F0
aW9uKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBET01TdHJpbmcgbmFtZSk7CisKKyAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBDdXN0b21dIGFueSBnZXRCdWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIHBuYW1lKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXMgZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmddIEdMZW51bSBnZXRFcnJvcigpOworCisgICAgLy8gb2JqZWN0IGdldEV4dGVuc2lvbihE
T01TdHJpbmcgbmFtZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSBhbnkgZ2V0
RXh0ZW5zaW9uKERPTVN0cmluZyBuYW1lKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1
c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUpOworICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UGFy
YW1ldGVyKEdMZW51bSBwbmFtZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBS
YWlzZXNFeGNlcHRpb25dIGFueSBnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSBwcm9n
cmFtLCBHTGVudW0gcG5hbWUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJu
ZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0UHJvZ3Jh
bUluZm9Mb2coV2ViR0xQcm9ncmFtIHByb2dyYW0pOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIg
c2hhZGVyLCBHTGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRS
ZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBn
ZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyIHNoYWRlcik7CisKKyAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0IGdldFNo
YWRlclByZWNpc2lvbkZvcm1hdChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5
cGUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdB
cz1OdWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJTb3VyY2UoV2Vi
R0xTaGFkZXIgc2hhZGVyKTsKKworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gc2Vx
dWVuY2U8RE9NU3RyaW5nPiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CisKKyAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFRleFBhcmFtZXRl
cihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSBw
cm9ncmFtLCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbik7CisKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGdldFVuaWZv
cm1Mb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOworCisgICAg
W1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRWZXJ0
ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gR0xzaXplaXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0x1aW50IGluZGV4LCBH
TGVudW0gcG5hbWUpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhp
bnQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IEdMYm9vbGVhbiAgICBpc0J1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc0NvbnRleHRMb3N0KCk7CisgICAgW1N0cmljdFR5
cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVm
ZmVyIGZyYW1lYnVmZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAg
aXNQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSBHTGJvb2xlYW4gICAgaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVm
ZmVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNTaGFkZXIoV2Vi
R0xTaGFkZXIgc2hhZGVyKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAg
aXNUZXh0dXJlKFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgbGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOworICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGxpbmtQcm9ncmFtKFdlYkdM
UHJvZ3JhbSBwcm9ncmFtKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
cGl4ZWxTdG9yZWkoR0xlbnVtIHBuYW1lLCBHTGludCBwYXJhbSk7CisgICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIHBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxv
YXQgdW5pdHMpOworCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgcmVhZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmll
dyBwaXhlbHMpOworICAgIAorICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBy
ZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgcmVuZGVyYnVmZmVyU3RvcmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgc2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdMYm9v
bGVhbiBpbnZlcnQpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lz
c29yKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBzaGFk
ZXJTb3VyY2UoV2ViR0xTaGFkZXIgc2hhZGVyLCBET01TdHJpbmcgc3RyaW5nKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmMoR0xlbnVtIGZ1bmMsIEdM
aW50IHJlZiwgR0x1aW50IG1hc2spOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBzdGVuY2lsRnVuY1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQg
cmVmLCBHTHVpbnQgbWFzayk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAg
IHN0ZW5jaWxNYXNrKEdMdWludCBtYXNrKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgc3RlbmNpbE1hc2tTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOwor
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3AoR0xlbnVtIGZh
aWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNzKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgc3RlbmNpbE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWls
LCBHTGVudW0gemZhaWwsIEdMZW51bSB6cGFzcyk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgdGV4UGFyYW1ldGVyZihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUs
IEdMZmxvYXQgcGFyYW0pOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0
ZXhQYXJhbWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwor
CisgICAgLy8gU3VwcG9ydGVkIGZvcm1zOgorICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldz8g
cGl4ZWxzKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVt
IGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJE
KEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1h
dCwgR0xlbnVtIHR5cGUsIEhUTUxDYW52YXNFbGVtZW50PyBjYW52YXMpOworI2lmIGRlZmluZWQo
RU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVfVklERU8KKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhU
TUxWaWRlb0VsZW1lbnQ/IHZpZGVvKTsKKyNlbmRpZgorCisgICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZp
ZXc/IHBpeGVscyk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSW1hZ2VE
YXRhPyBwaXhlbHMpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJ
bWFnZUVsZW1lbnQ/IGltYWdlKTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBIVE1MQ2FudmFzRWxlbWVudD8gY2FudmFzKTsKKyNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykg
JiYgRU5BQkxFX1ZJREVPCisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRN
TFZpZGVvRWxlbWVudD8gdmlkZW8pOworI2VuZGlmCisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxv
Y2F0aW9uLCBHTGZsb2F0IHgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRp
b24sIEZsb2F0MzJBcnJheSB2KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgdW5pZm9ybTFpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGlu
dCB4KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCB1bmlmb3JtMWl2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5
IHYpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlm
b3JtMmYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5
KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCB1bmlmb3JtMmZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkg
dik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZv
cm0yaShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSk7Cisg
ICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5p
Zm9ybTJpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKKyAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmKFdl
YkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9h
dCB6KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCB1bmlmb3JtM2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkgdik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVu
aWZvcm0zaShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwg
R0xpbnQgeik7CisgICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgdW5pZm9ybTNpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJB
cnJheSB2KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
dW5pZm9ybTRmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxv
YXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1
c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZnYoV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0
aW9uLCBHTGludCB4LCBHTGludCB5LCBHTGludCB6LCBHTGludCB3KTsKKyAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGl2KFdlYkdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOworCisgICAgW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDJm
dihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxv
YXQzMkFycmF5IGFycmF5KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4M2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxv
Y2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1N
YXRyaXg0ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIEZsb2F0MzJBcnJheSBhcnJheSk7CisKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFt
KTsKKyAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAg
ICB2YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOworCisgICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjFmKEdMdWludCBpbmR4LCBHTGZs
b2F0IHgpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRy
aWIxZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5keCwgR0xmbG9h
dCB4LCBHTGZsb2F0IHkpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2
ZXJ0ZXhBdHRyaWIyZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5k
eCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CisgICAgW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tXSB2b2lkIHZlcnRleEF0dHJpYjNmdihHTHVpbnQgaW5keCwgRmxvYXQzMkFy
cmF5IHZhbHVlcyk7CisgICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRl
eEF0dHJpYjRmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBH
TGZsb2F0IHcpOworICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhB
dHRyaWI0ZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYlBv
aW50ZXIoR0x1aW50IGluZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9y
bWFsaXplZCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xzaXplaSBzdHJpZGUsIEdMaW50cHRyIG9mZnNldCk7CisKKyAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsCSh3b3Jr
aW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdD
b250ZXh0LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtMjMsNjQ3ICsyMyw5IEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAq
LwogCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMZW51bTsKLXR5cGVkZWYgYm9vbGVhbiAgICAg
ICAgR0xib29sZWFuOwotdHlwZWRlZiB1bnNpZ25lZCBsb25nICBHTGJpdGZpZWxkOwotdHlwZWRl
ZiBieXRlICAgICAgICAgICBHTGJ5dGU7ICAgICAgICAgLyogJ2J5dGUnIHNob3VsZCBiZSBhIHNp
Z25lZCA4IGJpdCB0eXBlLiAqLwotdHlwZWRlZiBzaG9ydCAgICAgICAgICBHTHNob3J0OwotdHlw
ZWRlZiBsb25nICAgICAgICAgICBHTGludDsKLXR5cGVkZWYgbG9uZyAgICAgICAgICAgR0xzaXpl
aTsKLXR5cGVkZWYgbG9uZyBsb25nICAgICAgR0xpbnRwdHI7Ci10eXBlZGVmIGxvbmcgbG9uZyAg
ICAgIEdMc2l6ZWlwdHI7Ci10eXBlZGVmIG9jdGV0ICAgICAgICAgIEdMdWJ5dGU7ICAgICAgICAv
KiAnb2N0ZXQnIHNob3VsZCBiZSBhbiB1bnNpZ25lZCA4IGJpdCB0eXBlLiAqLwotdHlwZWRlZiB1
bnNpZ25lZCBzaG9ydCBHTHVzaG9ydDsKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgR0x1aW50Owot
dHlwZWRlZiB1bnJlc3RyaWN0ZWQgZmxvYXQgR0xmbG9hdDsKLXR5cGVkZWYgdW5yZXN0cmljdGVk
IGZsb2F0IEdMY2xhbXBmOwotCiBbCiAgICAgQ29uZGl0aW9uYWw9V0VCR0wsCiAgICAgSlNDdXN0
b21NYXJrRnVuY3Rpb24sCiAgICAgRG9Ob3RDaGVja0NvbnN0YW50cywKLV0gaW50ZXJmYWNlIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQgewotCi0gICAgLyog
Q2xlYXJCdWZmZXJNYXNrICovCi0gICAgY29uc3QgR0xlbnVtIERFUFRIX0JVRkZFUl9CSVQgICAg
ICAgICAgICAgICA9IDB4MDAwMDAxMDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQlVGRkVS
X0JJVCAgICAgICAgICAgICA9IDB4MDAwMDA0MDA7Ci0gICAgY29uc3QgR0xlbnVtIENPTE9SX0JV
RkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDQwMDA7Ci0KLSAgICAvKiBCZWdpbk1vZGUg
Ki8KLSAgICBjb25zdCBHTGVudW0gUE9JTlRTICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgw
MDAwOwotICAgIGNvbnN0IEdMZW51bSBMSU5FUyAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDAwMDE7Ci0gICAgY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICA9
IDB4MDAwMjsKLSAgICBjb25zdCBHTGVudW0gTElORV9TVFJJUCAgICAgICAgICAgICAgICAgICAg
ID0gMHgwMDAzOwotICAgIGNvbnN0IEdMZW51bSBUUklBTkdMRVMgICAgICAgICAgICAgICAgICAg
ICAgPSAweDAwMDQ7Ci0gICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAgICAgICAgICAg
ICAgICA9IDB4MDAwNTsKLSAgICBjb25zdCBHTGVudW0gVFJJQU5HTEVfRkFOICAgICAgICAgICAg
ICAgICAgID0gMHgwMDA2OwotCi0gICAgLyogQWxwaGFGdW5jdGlvbiAobm90IHN1cHBvcnRlZCBp
biBFUzIwKSAqLwotICAgIC8qICAgICAgTkVWRVIgKi8KLSAgICAvKiAgICAgIExFU1MgKi8KLSAg
ICAvKiAgICAgIEVRVUFMICovCi0gICAgLyogICAgICBMRVFVQUwgKi8KLSAgICAvKiAgICAgIEdS
RUFURVIgKi8KLSAgICAvKiAgICAgIE5PVEVRVUFMICovCi0gICAgLyogICAgICBHRVFVQUwgKi8K
LSAgICAvKiAgICAgIEFMV0FZUyAqLwotCi0gICAgLyogQmxlbmRpbmdGYWN0b3JEZXN0ICovCi0g
ICAgY29uc3QgR0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA9IDA7Ci0gICAg
Y29uc3QgR0xlbnVtIE9ORSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDE7Ci0gICAgY29u
c3QgR0xlbnVtIFNSQ19DT0xPUiAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMDsKLSAgICBj
b25zdCBHTGVudW0gT05FX01JTlVTX1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAxOwotICAg
IGNvbnN0IEdMZW51bSBTUkNfQUxQSEEgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDI7Ci0g
ICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19TUkNfQUxQSEEgICAgICAgICAgICA9IDB4MDMwMzsK
LSAgICBjb25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzA0
OwotICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfRFNUX0FMUEhBICAgICAgICAgICAgPSAweDAz
MDU7Ci0KLSAgICAvKiBCbGVuZGluZ0ZhY3RvclNyYyAqLwotICAgIC8qICAgICAgWkVSTyAqLwot
ICAgIC8qICAgICAgT05FICovCi0gICAgY29uc3QgR0xlbnVtIERTVF9DT0xPUiAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MDMwNjsKLSAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0RTVF9DT0xP
UiAgICAgICAgICAgID0gMHgwMzA3OwotICAgIGNvbnN0IEdMZW51bSBTUkNfQUxQSEFfU0FUVVJB
VEUgICAgICAgICAgICAgPSAweDAzMDg7Ci0gICAgLyogICAgICBTUkNfQUxQSEEgKi8KLSAgICAv
KiAgICAgIE9ORV9NSU5VU19TUkNfQUxQSEEgKi8KLSAgICAvKiAgICAgIERTVF9BTFBIQSAqLwot
ICAgIC8qICAgICAgT05FX01JTlVTX0RTVF9BTFBIQSAqLwotCi0gICAgLyogQmxlbmRFcXVhdGlv
blNlcGFyYXRlICovCi0gICAgY29uc3QgR0xlbnVtIEZVTkNfQUREICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODAwNjsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT04gICAgICAgICAg
ICAgICAgID0gMHg4MDA5OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9SR0IgICAg
ICAgICAgICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVORF9FUVVBVElPTiAqLwotICAgIGNv
bnN0IEdMZW51bSBCTEVORF9FUVVBVElPTl9BTFBIQSAgICAgICAgICAgPSAweDg4M0Q7Ci0KLSAg
ICAvKiBCbGVuZFN1YnRyYWN0ICovCi0gICAgY29uc3QgR0xlbnVtIEZVTkNfU1VCVFJBQ1QgICAg
ICAgICAgICAgICAgICA9IDB4ODAwQTsKLSAgICBjb25zdCBHTGVudW0gRlVOQ19SRVZFUlNFX1NV
QlRSQUNUICAgICAgICAgID0gMHg4MDBCOwotCi0gICAgLyogU2VwYXJhdGUgQmxlbmQgRnVuY3Rp
b25zICovCi0gICAgY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9SR0IgICAgICAgICAgICAgICAgICA9
IDB4ODBDODsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRfU1JDX1JHQiAgICAgICAgICAgICAgICAg
ID0gMHg4MEM5OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9EU1RfQUxQSEEgICAgICAgICAgICAg
ICAgPSAweDgwQ0E7Ci0gICAgY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBIQSAgICAgICAgICAg
ICAgICA9IDB4ODBDQjsKLSAgICBjb25zdCBHTGVudW0gQ09OU1RBTlRfQ09MT1IgICAgICAgICAg
ICAgICAgID0gMHg4MDAxOwotICAgIGNvbnN0IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQ09M
T1IgICAgICAgPSAweDgwMDI7Ci0gICAgY29uc3QgR0xlbnVtIENPTlNUQU5UX0FMUEhBICAgICAg
ICAgICAgICAgICA9IDB4ODAwMzsKLSAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5U
X0FMUEhBICAgICAgID0gMHg4MDA0OwotICAgIGNvbnN0IEdMZW51bSBCTEVORF9DT0xPUiAgICAg
ICAgICAgICAgICAgICAgPSAweDgwMDU7Ci0KLSAgICAvKiBCdWZmZXIgT2JqZWN0cyAqLwotICAg
IGNvbnN0IEdMZW51bSBBUlJBWV9CVUZGRVIgICAgICAgICAgICAgICAgICAgPSAweDg4OTI7Ci0g
ICAgY29uc3QgR0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSICAgICAgICAgICA9IDB4ODg5MzsK
LSAgICBjb25zdCBHTGVudW0gQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4ODk0
OwotICAgIGNvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HICAgPSAweDg4
OTU7Ci0KLSAgICBjb25zdCBHTGVudW0gU1RSRUFNX0RSQVcgICAgICAgICAgICAgICAgICAgID0g
MHg4OEUwOwotICAgIGNvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAg
PSAweDg4RTQ7Ci0gICAgY29uc3QgR0xlbnVtIERZTkFNSUNfRFJBVyAgICAgICAgICAgICAgICAg
ICA9IDB4ODhFODsKLQotICAgIGNvbnN0IEdMZW51bSBCVUZGRVJfU0laRSAgICAgICAgICAgICAg
ICAgICAgPSAweDg3NjQ7Ci0gICAgY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAgICAgICAgICAg
ICAgICAgICA9IDB4ODc2NTsKLQotICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1ZFUlRFWF9BVFRS
SUIgICAgICAgICAgPSAweDg2MjY7Ci0KLSAgICAvKiBDdWxsRmFjZU1vZGUgKi8KLSAgICBjb25z
dCBHTGVudW0gRlJPTlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA0OwotICAgIGNv
bnN0IEdMZW51bSBCQUNLICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA0MDU7Ci0gICAg
Y29uc3QgR0xlbnVtIEZST05UX0FORF9CQUNLICAgICAgICAgICAgICAgICA9IDB4MDQwODsKLQot
ICAgIC8qIERlcHRoRnVuY3Rpb24gKi8KLSAgICAvKiAgICAgIE5FVkVSICovCi0gICAgLyogICAg
ICBMRVNTICovCi0gICAgLyogICAgICBFUVVBTCAqLwotICAgIC8qICAgICAgTEVRVUFMICovCi0g
ICAgLyogICAgICBHUkVBVEVSICovCi0gICAgLyogICAgICBOT1RFUVVBTCAqLwotICAgIC8qICAg
ICAgR0VRVUFMICovCi0gICAgLyogICAgICBBTFdBWVMgKi8KLQotICAgIC8qIEVuYWJsZUNhcCAq
LwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFXzJEICAgICAgICAgICAgICAgICAgICAgPSAweDBE
RTE7Ci0gICAgY29uc3QgR0xlbnVtIENVTExfRkFDRSAgICAgICAgICAgICAgICAgICAgICA9IDB4
MEI0NDsKLSAgICBjb25zdCBHTGVudW0gQkxFTkQgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwQkUyOwotICAgIGNvbnN0IEdMZW51bSBESVRIRVIgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDBCRDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfVEVTVCAgICAgICAgICAgICAgICAg
ICA9IDB4MEI5MDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfVEVTVCAgICAgICAgICAgICAgICAg
ICAgID0gMHgwQjcxOwotICAgIGNvbnN0IEdMZW51bSBTQ0lTU09SX1RFU1QgICAgICAgICAgICAg
ICAgICAgPSAweDBDMTE7Ci0gICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX0ZJTEwgICAg
ICAgICAgICA9IDB4ODAzNzsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0FMUEhBX1RPX0NPVkVS
QUdFICAgICAgID0gMHg4MDlFOwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQ09WRVJBR0UgICAg
ICAgICAgICAgICAgPSAweDgwQTA7Ci0KLSAgICAvKiBFcnJvckNvZGUgKi8KLSAgICBjb25zdCBH
TGVudW0gTk9fRVJST1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsKLSAgICBjb25zdCBHTGVu
dW0gSU5WQUxJRF9FTlVNICAgICAgICAgICAgICAgICAgID0gMHgwNTAwOwotICAgIGNvbnN0IEdM
ZW51bSBJTlZBTElEX1ZBTFVFICAgICAgICAgICAgICAgICAgPSAweDA1MDE7Ci0gICAgY29uc3Qg
R0xlbnVtIElOVkFMSURfT1BFUkFUSU9OICAgICAgICAgICAgICA9IDB4MDUwMjsKLSAgICBjb25z
dCBHTGVudW0gT1VUX09GX01FTU9SWSAgICAgICAgICAgICAgICAgID0gMHgwNTA1OwotCi0gICAg
LyogRnJvbnRGYWNlRGlyZWN0aW9uICovCi0gICAgY29uc3QgR0xlbnVtIENXICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MDkwMDsKLSAgICBjb25zdCBHTGVudW0gQ0NXICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHgwOTAxOwotCi0gICAgLyogR2V0UE5hbWUgKi8KLSAgICBj
b25zdCBHTGVudW0gTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgID0gMHgwQjIxOwotICAg
IGNvbnN0IEdMZW51bSBBTElBU0VEX1BPSU5UX1NJWkVfUkFOR0UgICAgICAgPSAweDg0NkQ7Ci0g
ICAgY29uc3QgR0xlbnVtIEFMSUFTRURfTElORV9XSURUSF9SQU5HRSAgICAgICA9IDB4ODQ2RTsK
LSAgICBjb25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgID0gMHgwQjQ1
OwotICAgIGNvbnN0IEdMZW51bSBGUk9OVF9GQUNFICAgICAgICAgICAgICAgICAgICAgPSAweDBC
NDY7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX1JBTkdFICAgICAgICAgICAgICAgICAgICA9IDB4
MEI3MDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0g
MHgwQjcyOwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9DTEVBUl9WQUxVRSAgICAgICAgICAgICAg
PSAweDBCNzM7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX0ZVTkMgICAgICAgICAgICAgICAgICAg
ICA9IDB4MEI3NDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAg
ICAgID0gMHgwQjkxOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZVTkMgICAgICAgICAgICAg
ICAgICAgPSAweDBCOTI7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfRkFJTCAgICAgICAgICAg
ICAgICAgICA9IDB4MEI5NDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNTX0RFUFRIX0ZB
SUwgICAgICAgID0gMHgwQjk1OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1BBU1NfREVQVEhf
UEFTUyAgICAgICAgPSAweDBCOTY7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfUkVGICAgICAg
ICAgICAgICAgICAgICA9IDB4MEI5NzsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9WQUxVRV9N
QVNLICAgICAgICAgICAgID0gMHgwQjkzOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1dSSVRF
TUFTSyAgICAgICAgICAgICAgPSAweDBCOTg7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFD
S19GVU5DICAgICAgICAgICAgICA9IDB4ODgwMDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9C
QUNLX0ZBSUwgICAgICAgICAgICAgID0gMHg4ODAxOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lM
X0JBQ0tfUEFTU19ERVBUSF9GQUlMICAgPSAweDg4MDI7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5D
SUxfQkFDS19QQVNTX0RFUFRIX1BBU1MgICA9IDB4ODgwMzsKLSAgICBjb25zdCBHTGVudW0gU1RF
TkNJTF9CQUNLX1JFRiAgICAgICAgICAgICAgID0gMHg4Q0EzOwotICAgIGNvbnN0IEdMZW51bSBT
VEVOQ0lMX0JBQ0tfVkFMVUVfTUFTSyAgICAgICAgPSAweDhDQTQ7Ci0gICAgY29uc3QgR0xlbnVt
IFNURU5DSUxfQkFDS19XUklURU1BU0sgICAgICAgICA9IDB4OENBNTsKLSAgICBjb25zdCBHTGVu
dW0gVklFV1BPUlQgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkEyOwotICAgIGNvbnN0IEdM
ZW51bSBTQ0lTU09SX0JPWCAgICAgICAgICAgICAgICAgICAgPSAweDBDMTA7Ci0gICAgLyogICAg
ICBTQ0lTU09SX1RFU1QgKi8KLSAgICBjb25zdCBHTGVudW0gQ09MT1JfQ0xFQVJfVkFMVUUgICAg
ICAgICAgICAgID0gMHgwQzIyOwotICAgIGNvbnN0IEdMZW51bSBDT0xPUl9XUklURU1BU0sgICAg
ICAgICAgICAgICAgPSAweDBDMjM7Ci0gICAgY29uc3QgR0xlbnVtIFVOUEFDS19BTElHTk1FTlQg
ICAgICAgICAgICAgICA9IDB4MENGNTsKLSAgICBjb25zdCBHTGVudW0gUEFDS19BTElHTk1FTlQg
ICAgICAgICAgICAgICAgID0gMHgwRDA1OwotICAgIGNvbnN0IEdMZW51bSBNQVhfVEVYVFVSRV9T
SVpFICAgICAgICAgICAgICAgPSAweDBEMzM7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WSUVXUE9S
VF9ESU1TICAgICAgICAgICAgICA9IDB4MEQzQTsKLSAgICBjb25zdCBHTGVudW0gU1VCUElYRUxf
QklUUyAgICAgICAgICAgICAgICAgID0gMHgwRDUwOwotICAgIGNvbnN0IEdMZW51bSBSRURfQklU
UyAgICAgICAgICAgICAgICAgICAgICAgPSAweDBENTI7Ci0gICAgY29uc3QgR0xlbnVtIEdSRUVO
X0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1MzsKLSAgICBjb25zdCBHTGVudW0gQkxV
RV9CSVRTICAgICAgICAgICAgICAgICAgICAgID0gMHgwRDU0OwotICAgIGNvbnN0IEdMZW51bSBB
TFBIQV9CSVRTICAgICAgICAgICAgICAgICAgICAgPSAweDBENTU7Ci0gICAgY29uc3QgR0xlbnVt
IERFUFRIX0JJVFMgICAgICAgICAgICAgICAgICAgICA9IDB4MEQ1NjsKLSAgICBjb25zdCBHTGVu
dW0gU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAgID0gMHgwRDU3OwotICAgIGNvbnN0IEdM
ZW51bSBQT0xZR09OX09GRlNFVF9VTklUUyAgICAgICAgICAgPSAweDJBMDA7Ci0gICAgLyogICAg
ICBQT0xZR09OX09GRlNFVF9GSUxMICovCi0gICAgY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VU
X0ZBQ1RPUiAgICAgICAgICA9IDB4ODAzODsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9CSU5E
SU5HXzJEICAgICAgICAgICAgID0gMHg4MDY5OwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVfQlVG
RkVSUyAgICAgICAgICAgICAgICAgPSAweDgwQTg7Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRVMg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODBBOTsKLSAgICBjb25zdCBHTGVudW0gU0FNUExF
X0NPVkVSQUdFX1ZBTFVFICAgICAgICAgID0gMHg4MEFBOwotICAgIGNvbnN0IEdMZW51bSBTQU1Q
TEVfQ09WRVJBR0VfSU5WRVJUICAgICAgICAgPSAweDgwQUI7Ci0KLSAgICAvKiBHZXRUZXh0dXJl
UGFyYW1ldGVyICovCi0gICAgLyogICAgICBURVhUVVJFX01BR19GSUxURVIgKi8KLSAgICAvKiAg
ICAgIFRFWFRVUkVfTUlOX0ZJTFRFUiAqLwotICAgIC8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi8K
LSAgICAvKiAgICAgIFRFWFRVUkVfV1JBUF9UICovCi0KLSAgICBjb25zdCBHTGVudW0gQ09NUFJF
U1NFRF9URVhUVVJFX0ZPUk1BVFMgICAgID0gMHg4NkEzOwotCi0gICAgLyogSGludE1vZGUgKi8K
LSAgICBjb25zdCBHTGVudW0gRE9OVF9DQVJFICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAw
OwotICAgIGNvbnN0IEdMZW51bSBGQVNURVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDEx
MDE7Ci0gICAgY29uc3QgR0xlbnVtIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MTEwMjsKLQotICAgIC8qIEhpbnRUYXJnZXQgKi8KLSAgICBjb25zdCBHTGVudW0gR0VORVJBVEVf
TUlQTUFQX0hJTlQgICAgICAgICAgICA9IDB4ODE5MjsKLQotICAgIC8qIERhdGFUeXBlICovCi0g
ICAgY29uc3QgR0xlbnVtIEJZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwMDsK
LSAgICBjb25zdCBHTGVudW0gVU5TSUdORURfQllURSAgICAgICAgICAgICAgICAgID0gMHgxNDAx
OwotICAgIGNvbnN0IEdMZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0
MDI7Ci0gICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUICAgICAgICAgICAgICAgICA9IDB4
MTQwMzsKLSAgICBjb25zdCBHTGVudW0gSU5UICAgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgxNDA0OwotICAgIGNvbnN0IEdMZW51bSBVTlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAg
PSAweDE0MDU7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MTQwNjsKLQotICAgIC8qIFBpeGVsRm9ybWF0ICovCi0gICAgY29uc3QgR0xlbnVtIERF
UFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsKLSAgICBjb25zdCBHTGVudW0g
QUxQSEEgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA2OwotICAgIGNvbnN0IEdMZW51
bSBSR0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDc7Ci0gICAgY29uc3QgR0xl
bnVtIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKLSAgICBjb25zdCBH
TGVudW0gTFVNSU5BTkNFICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA5OwotICAgIGNvbnN0
IEdMZW51bSBMVU1JTkFOQ0VfQUxQSEEgICAgICAgICAgICAgICAgPSAweDE5MEE7Ci0KLSAgICAv
KiBQaXhlbFR5cGUgKi8KLSAgICAvKiAgICAgIFVOU0lHTkVEX0JZVEUgKi8KLSAgICBjb25zdCBH
TGVudW0gVU5TSUdORURfU0hPUlRfNF80XzRfNCAgICAgICAgID0gMHg4MDMzOwotICAgIGNvbnN0
IEdMZW51bSBVTlNJR05FRF9TSE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7Ci0gICAgY29u
c3QgR0xlbnVtIFVOU0lHTkVEX1NIT1JUXzVfNl81ICAgICAgICAgICA9IDB4ODM2MzsKLQotICAg
IC8qIFNoYWRlcnMgKi8KLSAgICBjb25zdCBHTGVudW0gRlJBR01FTlRfU0hBREVSICAgICAgICAg
ICAgICAgICAgPSAweDhCMzA7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9TSEFERVIgICAgICAg
ICAgICAgICAgICAgID0gMHg4QjMxOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVkVSVEVYX0FUVFJJ
QlMgICAgICAgICAgICAgICA9IDB4ODg2OTsKLSAgICBjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9V
TklGT1JNX1ZFQ1RPUlMgICAgICAgPSAweDhERkI7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WQVJZ
SU5HX1ZFQ1RPUlMgICAgICAgICAgICAgID0gMHg4REZDOwotICAgIGNvbnN0IEdMZW51bSBNQVhf
Q09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDB4OEI0RDsKLSAgICBjb25zdCBHTGVudW0g
TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7Ci0gICAgY29uc3QgR0xl
bnVtIE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgICAgICAgID0gMHg4ODcyOwotICAgIGNvbnN0
IEdMZW51bSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTICAgICA9IDB4OERGRDsKLSAgICBj
b25zdCBHTGVudW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNEY7Ci0g
ICAgY29uc3QgR0xlbnVtIERFTEVURV9TVEFUVVMgICAgICAgICAgICAgICAgICAgID0gMHg4Qjgw
OwotICAgIGNvbnN0IEdMZW51bSBMSU5LX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICA9IDB4
OEI4MjsKLSAgICBjb25zdCBHTGVudW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAg
PSAweDhCODM7Ci0gICAgY29uc3QgR0xlbnVtIEFUVEFDSEVEX1NIQURFUlMgICAgICAgICAgICAg
ICAgID0gMHg4Qjg1OwotICAgIGNvbnN0IEdMZW51bSBBQ1RJVkVfVU5JRk9STVMgICAgICAgICAg
ICAgICAgICA9IDB4OEI4NjsKLSAgICBjb25zdCBHTGVudW0gQUNUSVZFX0FUVFJJQlVURVMgICAg
ICAgICAgICAgICAgPSAweDhCODk7Ci0gICAgY29uc3QgR0xlbnVtIFNIQURJTkdfTEFOR1VBR0Vf
VkVSU0lPTiAgICAgICAgID0gMHg4QjhDOwotICAgIGNvbnN0IEdMZW51bSBDVVJSRU5UX1BST0dS
QU0gICAgICAgICAgICAgICAgICA9IDB4OEI4RDsKLQotICAgIC8qIFN0ZW5jaWxGdW5jdGlvbiAq
LwotICAgIGNvbnN0IEdMZW51bSBORVZFUiAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAy
MDA7Ci0gICAgY29uc3QgR0xlbnVtIExFU1MgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MDIwMTsKLSAgICBjb25zdCBHTGVudW0gRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwMjAyOwotICAgIGNvbnN0IEdMZW51bSBMRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDAyMDM7Ci0gICAgY29uc3QgR0xlbnVtIEdSRUFURVIgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDIwNDsKLSAgICBjb25zdCBHTGVudW0gTk9URVFVQUwgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwMjA1OwotICAgIGNvbnN0IEdMZW51bSBHRVFVQUwgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDAyMDY7Ci0gICAgY29uc3QgR0xlbnVtIEFMV0FZUyAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDIwNzsKLQotICAgIC8qIFN0ZW5jaWxPcCAqLwotICAgIC8qICAgICAgWkVS
TyAqLwotICAgIGNvbnN0IEdMZW51bSBLRUVQICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDFFMDA7Ci0gICAgY29uc3QgR0xlbnVtIFJFUExBQ0UgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MUUwMTsKLSAgICBjb25zdCBHTGVudW0gSU5DUiAgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHgxRTAyOwotICAgIGNvbnN0IEdMZW51bSBERUNSICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDFFMDM7Ci0gICAgY29uc3QgR0xlbnVtIElOVkVSVCAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MTUwQTsKLSAgICBjb25zdCBHTGVudW0gSU5DUl9XUkFQICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NTA3OwotICAgIGNvbnN0IEdMZW51bSBERUNSX1dSQVAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg1MDg7Ci0KLSAgICAvKiBTdHJpbmdOYW1lICovCi0gICAgY29uc3QgR0xl
bnVtIFZFTkRPUiAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMDsKLSAgICBjb25zdCBH
TGVudW0gUkVOREVSRVIgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAxOwotICAgIGNvbnN0
IEdMZW51bSBWRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDI7Ci0KLSAgICAv
KiBUZXh0dXJlTWFnRmlsdGVyICovCi0gICAgY29uc3QgR0xlbnVtIE5FQVJFU1QgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MjYwMDsKLSAgICBjb25zdCBHTGVudW0gTElORUFSICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgyNjAxOwotCi0gICAgLyogVGV4dHVyZU1pbkZpbHRlciAqLwot
ICAgIC8qICAgICAgTkVBUkVTVCAqLwotICAgIC8qICAgICAgTElORUFSICovCi0gICAgY29uc3Qg
R0xlbnVtIE5FQVJFU1RfTUlQTUFQX05FQVJFU1QgICAgICAgICA9IDB4MjcwMDsKLSAgICBjb25z
dCBHTGVudW0gTElORUFSX01JUE1BUF9ORUFSRVNUICAgICAgICAgID0gMHgyNzAxOwotICAgIGNv
bnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgPSAweDI3MDI7Ci0gICAg
Y29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBfTElORUFSICAgICAgICAgICA9IDB4MjcwMzsKLQot
ICAgIC8qIFRleHR1cmVQYXJhbWV0ZXJOYW1lICovCi0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVf
TUFHX0ZJTFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVS
RV9NSU5fRklMVEVSICAgICAgICAgICAgID0gMHgyODAxOwotICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFX1dSQVBfUyAgICAgICAgICAgICAgICAgPSAweDI4MDI7Ci0gICAgY29uc3QgR0xlbnVtIFRF
WFRVUkVfV1JBUF9UICAgICAgICAgICAgICAgICA9IDB4MjgwMzsKLQotICAgIC8qIFRleHR1cmVU
YXJnZXQgKi8KLSAgICAvKiAgICAgIFRFWFRVUkVfMkQgKi8KLSAgICBjb25zdCBHTGVudW0gVEVY
VFVSRSAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNzAyOwotCi0gICAgY29uc3QgR0xlbnVt
IFRFWFRVUkVfQ1VCRV9NQVAgICAgICAgICAgICAgICA9IDB4ODUxMzsKLSAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQICAgICAgID0gMHg4NTE0OwotICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1MTU7Ci0gICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCAgICA9IDB4ODUxNjsKLSAgICBjb25z
dCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZICAgID0gMHg4NTE3OwotICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAgPSAweDg1MTg7Ci0gICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiAgICA9IDB4ODUxOTsKLSAg
ICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aICAgID0gMHg4NTFBOwot
ICAgIGNvbnN0IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAgPSAweDg1MUM7
Ci0KLSAgICAvKiBUZXh0dXJlVW5pdCAqLwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMCAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0QzA7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODRDMTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIg
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEMyOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJF
MyAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzM7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRV
UkU0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNDsKLSAgICBjb25zdCBHTGVudW0gVEVY
VFVSRTUgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM1OwotICAgIGNvbnN0IEdMZW51bSBU
RVhUVVJFNiAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzY7Ci0gICAgY29uc3QgR0xlbnVt
IFRFWFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNzsKLSAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRTggICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM4OwotICAgIGNvbnN0IEdM
ZW51bSBURVhUVVJFOSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzk7Ci0gICAgY29uc3Qg
R0xlbnVtIFRFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQTsKLSAgICBjb25z
dCBHTGVudW0gVEVYVFVSRTExICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENCOwotICAgIGNv
bnN0IEdMZW51bSBURVhUVVJFMTIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0M7Ci0gICAg
Y29uc3QgR0xlbnVtIFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRDsKLSAg
ICBjb25zdCBHTGVudW0gVEVYVFVSRTE0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENFOwot
ICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTUgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0Y7
Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxNiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRE
MDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTE3ICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEQxOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTggICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0RDI7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODREMzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIwICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEQ0OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjEgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0RDU7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMiAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODRENjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTIzICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NEQ3OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjQgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0RDg7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNSAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODREOTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI2ICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NERBOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjcgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0REI7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyOCAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODREQzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI5ICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEREOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMzAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0REU7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUz
MSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRERjsKLSAgICBjb25zdCBHTGVudW0gQUNUSVZF
X1RFWFRVUkUgICAgICAgICAgICAgICAgID0gMHg4NEUwOwotCi0gICAgLyogVGV4dHVyZVdyYXBN
b2RlICovCi0gICAgY29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MjkwMTsKLSAgICBjb25zdCBHTGVudW0gQ0xBTVBfVE9fRURHRSAgICAgICAgICAgICAgICAg
ID0gMHg4MTJGOwotICAgIGNvbnN0IEdMZW51bSBNSVJST1JFRF9SRVBFQVQgICAgICAgICAgICAg
ICAgPSAweDgzNzA7Ci0KLSAgICAvKiBVbmlmb3JtIFR5cGVzICovCi0gICAgY29uc3QgR0xlbnVt
IEZMT0FUX1ZFQzIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MDsKLSAgICBjb25zdCBHTGVu
dW0gRkxPQVRfVkVDMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUxOwotICAgIGNvbnN0IEdM
ZW51bSBGTE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTI7Ci0gICAgY29uc3Qg
R0xlbnVtIElOVF9WRUMyICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MzsKLSAgICBjb25z
dCBHTGVudW0gSU5UX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU0OwotICAgIGNv
bnN0IEdMZW51bSBJTlRfVkVDNCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTU7Ci0gICAg
Y29uc3QgR0xlbnVtIEJPT0wgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NjsKLSAg
ICBjb25zdCBHTGVudW0gQk9PTF9WRUMyICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU3Owot
ICAgIGNvbnN0IEdMZW51bSBCT09MX1ZFQzMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTg7
Ci0gICAgY29uc3QgR0xlbnVtIEJPT0xfVkVDNCAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1
OTsKLSAgICBjb25zdCBHTGVudW0gRkxPQVRfTUFUMiAgICAgICAgICAgICAgICAgICAgID0gMHg4
QjVBOwotICAgIGNvbnN0IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAgICAgICAgICAgICAgPSAw
eDhCNUI7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUX01BVDQgICAgICAgICAgICAgICAgICAgICA9
IDB4OEI1QzsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFUl8yRCAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QjVFOwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVSX0NVQkUgICAgICAgICAgICAgICAg
ICAgPSAweDhCNjA7Ci0KLSAgICAvKiBWZXJ0ZXggQXJyYXlzICovCi0gICAgY29uc3QgR0xlbnVt
IFZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRCAgICAgICAgPSAweDg2MjI7Ci0gICAgY29uc3Qg
R0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAgPSAweDg2MjM7Ci0gICAg
Y29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfU1RSSURFICAgICAgICAgPSAweDg2MjQ7
Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRSAgICAgICAgICAgPSAw
eDg2MjU7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCAg
ICAgPSAweDg4NkE7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfUE9JTlRF
UiAgICAgICAgPSAweDg2NDU7Ci0gICAgY29uc3QgR0xlbnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlf
QlVGRkVSX0JJTkRJTkcgPSAweDg4OUY7Ci0KLSAgICAvKiBTaGFkZXIgU291cmNlICovCi0gICAg
Y29uc3QgR0xlbnVtIENPTVBJTEVfU1RBVFVTICAgICAgICAgICAgICAgICA9IDB4OEI4MTsKLQot
ICAgIC8qIFNoYWRlciBQcmVjaXNpb24tU3BlY2lmaWVkIFR5cGVzICovCi0gICAgY29uc3QgR0xl
bnVtIExPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMDsKLSAgICBjb25zdCBH
TGVudW0gTUVESVVNX0ZMT0FUICAgICAgICAgICAgICAgICAgID0gMHg4REYxOwotICAgIGNvbnN0
IEdMZW51bSBISUdIX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgPSAweDhERjI7Ci0gICAgY29u
c3QgR0xlbnVtIExPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMzsKLSAgICBj
b25zdCBHTGVudW0gTUVESVVNX0lOVCAgICAgICAgICAgICAgICAgICAgID0gMHg4REY0OwotICAg
IGNvbnN0IEdMZW51bSBISUdIX0lOVCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhERjU7Ci0K
LSAgICAvKiBGcmFtZWJ1ZmZlciBPYmplY3QuICovCi0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVG
RkVSICAgICAgICAgICAgICAgICAgICA9IDB4OEQ0MDsKLSAgICBjb25zdCBHTGVudW0gUkVOREVS
QlVGRkVSICAgICAgICAgICAgICAgICAgID0gMHg4RDQxOwotCi0gICAgY29uc3QgR0xlbnVtIFJH
QkE0ICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODA1NjsKLSAgICBjb25zdCBHTGVudW0g
UkdCNV9BMSAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDU3OwotICAgIGNvbnN0IEdMZW51
bSBSR0I1NjUgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhENjI7Ci0gICAgY29uc3QgR0xl
bnVtIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9IDB4ODFBNTsKLSAgICBjb25zdCBH
TGVudW0gU1RFTkNJTF9JTkRFWCAgICAgICAgICAgICAgICAgID0gMHgxOTAxOwotICAgIGNvbnN0
IEdMZW51bSBTVEVOQ0lMX0lOREVYOCAgICAgICAgICAgICAgICAgPSAweDhENDg7Ci0gICAgY29u
c3QgR0xlbnVtIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA9IDB4ODRGOTsKLQotICAg
IGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfV0lEVEggICAgICAgICAgICAgPSAweDhENDI7Ci0g
ICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9IRUlHSFQgICAgICAgICAgICA9IDB4OEQ0MzsK
LSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAgID0gMHg4RDQ0
OwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfUkVEX1NJWkUgICAgICAgICAgPSAweDhE
NTA7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9HUkVFTl9TSVpFICAgICAgICA9IDB4
OEQ1MTsKLSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JMVUVfU0laRSAgICAgICAgID0g
MHg4RDUyOwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfQUxQSEFfU0laRSAgICAgICAg
PSAweDhENTM7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9ERVBUSF9TSVpFICAgICAg
ICA9IDB4OEQ1NDsKLSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1NURU5DSUxfU0laRSAg
ICAgID0gMHg4RDU1OwotCi0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
T0JKRUNUX1RZUEUgICAgICAgICAgID0gMHg4Q0QwOwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FICAgICAgICAgICA9IDB4OENEMTsKLSAgICBjb25z
dCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAgICAgICAgPSAw
eDhDRDI7Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9D
VUJFX01BUF9GQUNFID0gMHg4Q0QzOwotCi0gICAgY29uc3QgR0xlbnVtIENPTE9SX0FUVEFDSE1F
TlQwICAgICAgICAgICAgICA9IDB4OENFMDsKLSAgICBjb25zdCBHTGVudW0gREVQVEhfQVRUQUNI
TUVOVCAgICAgICAgICAgICAgID0gMHg4RDAwOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0FU
VEFDSE1FTlQgICAgICAgICAgICAgPSAweDhEMjA7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX1NU
RU5DSUxfQVRUQUNITUVOVCAgICAgICA9IDB4ODIxQTsKLQotICAgIGNvbnN0IEdMZW51bSBOT05F
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOwotCi0gICAgY29uc3QgR0xlbnVtIEZSQU1F
QlVGRkVSX0NPTVBMRVRFICAgICAgICAgICAgICAgICAgICAgID0gMHg4Q0Q1OwotICAgIGNvbnN0
IEdMZW51bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQgICAgICAgICA9IDB4OENE
NjsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFD
SE1FTlQgPSAweDhDRDc7Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
RElNRU5TSU9OUyAgICAgICAgID0gMHg4Q0Q5OwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRCAgICAgICAgICAgICAgICAgICA9IDB4OENERDsKLQotICAgIGNvbnN0IEdM
ZW51bSBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAweDhDQTY7Ci0gICAgY29uc3Qg
R0xlbnVtIFJFTkRFUkJVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4OENBNzsKLSAgICBjb25z
dCBHTGVudW0gTUFYX1JFTkRFUkJVRkZFUl9TSVpFICAgICAgICAgID0gMHg4NEU4OwotCi0gICAg
Y29uc3QgR0xlbnVtIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA9IDB4MDUwNjsKLQot
ICAgIC8qIFdlYkdMLXNwZWNpZmljIGVudW1zICovCi0gICAgY29uc3QgR0xlbnVtIFVOUEFDS19G
TElQX1lfV0VCR0wgICAgICAgICAgICAgICAgPSAweDkyNDA7Ci0gICAgY29uc3QgR0xlbnVtIFVO
UEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAgICAgPSAweDkyNDE7Ci0gICAgY29uc3QgR0xl
bnVtIENPTlRFWFRfTE9TVF9XRUJHTCAgICAgICAgICAgICAgICAgPSAweDkyNDI7Ci0gICAgY29u
c3QgR0xlbnVtIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wgPSAweDkyNDM7Ci0g
ICAgY29uc3QgR0xlbnVtIEJST1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICAgICAgPSAweDky
NDQ7Ci0KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgR0xzaXplaSBkcmF3aW5nQnVmZmVyV2lkdGg7
Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIEdMc2l6ZWkgZHJhd2luZ0J1ZmZlckhlaWdodDsKLQot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGFj
dGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0gcHJv
Z3JhbSwgV2ViR0xTaGFkZXIgc2hhZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFt
IHByb2dyYW0sIEdMdWludCBpbmRleCwgRE9NU3RyaW5nIG5hbWUpOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRCdWZmZXIoR0xlbnVt
IHRhcmdldCwgV2ViR0xCdWZmZXIgYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kRnJhbWVidWZmZXIoR0xlbnVtIHRhcmdl
dCwgV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
ZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZFJlbmRlcmJ1ZmZlcihHTGVudW0g
dGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIpOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRUZXh0dXJlKEdMZW51
bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgYmxlbmRDb2xvcihHTGNsYW1wZiByZWQsIEdMY2xhbXBmIGdyZWVuLCBH
TGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGJsZW5kRXF1YXRpb24oR0xlbnVtIG1vZGUpOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVS
R0IsIEdMZW51bSBtb2RlQWxwaGEpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBibGVuZEZ1bmMoR0xlbnVtIHNmYWN0b3IsIEdMZW51bSBkZmFjdG9yKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRGdW5jU2VwYXJhdGUoR0xlbnVtIHNy
Y1JHQiwgR0xlbnVtIGRzdFJHQiwgR0xlbnVtIHNyY0FscGhhLCBHTGVudW0gZHN0QWxwaGEpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1
ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXI/IGRhdGEsIEdMZW51bSB1c2FnZSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
YnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXc/IGRhdGEsIEdMZW51bSB1
c2FnZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgYnVmZmVyRGF0YShHTGVudW0gdGFyZ2V0LCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1
c2FnZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAg
ICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQsIEFycmF5
QnVmZmVyPyBkYXRhKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgICAgICAgICBidWZmZXJTdWJEYXRhKEdMZW51bSB0YXJnZXQsIEdMaW50cHRyIG9mZnNl
dCwgQXJyYXlCdWZmZXJWaWV3PyBkYXRhKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdM
ZW51bSAgICAgICBjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdMZW51bSB0YXJnZXQpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJpdGZpZWxkIG1hc2spOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhckNvbG9yKEdMY2xhbXBm
IHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdMY2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXJEZXB0aChHTGNsYW1wZiBk
ZXB0aCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyU3RlbmNp
bChHTGludCBzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29sb3JN
YXNrKEdMYm9vbGVhbiByZWQsIEdMYm9vbGVhbiBncmVlbiwgR0xib29sZWFuIGJsdWUsIEdMYm9v
bGVhbiBhbHBoYSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgY29tcGlsZVNoYWRlcihXZWJHTFNoYWRlciBzaGFkZXIpOwotCi0gICAgW1N0
cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyBkYXRh
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29tcHJlc3NlZFRleFN1
YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9y
bWF0LCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7Ci0gICAgCi0gICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGNvcHlUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGludCBib3JkZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBjb3B5VGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2Vi
R0xCdWZmZXIgY3JlYXRlQnVmZmVyKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gV2ViR0xG
cmFtZWJ1ZmZlciBjcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IFdlYkdMUHJvZ3JhbSBjcmVhdGVQcm9ncmFtKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
V2ViR0xSZW5kZXJidWZmZXIgY3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTFNoYWRlciBjcmVhdGVTaGFkZXIoR0xlbnVt
IHR5cGUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMVGV4dHVyZSBjcmVhdGVUZXh0
dXJlKCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY3VsbEZhY2Uo
R0xlbnVtIG1vZGUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRl
bGV0ZUJ1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVm
ZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlUHJvZ3Jh
bShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIGRlbGV0ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciByZW5kZXJidWZmZXIp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxldGVTaGFkZXIoV2Vi
R0xTaGFkZXIgc2hhZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
ZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4dHVyZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhGdW5jKEdMZW51bSBmdW5jKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhNYXNrKEdMYm9vbGVhbiBmbGFnKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhSYW5nZShHTGNsYW1wZiB6
TmVhciwgR0xjbGFtcGYgekZhcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkICAgICAgICAgZGV0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBX
ZWJHTFNoYWRlciBzaGFkZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAg
ICBkaXNhYmxlKEdMZW51bSBjYXApOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5k
ZXgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGRyYXdBcnJheXMoR0xlbnVtIG1vZGUsIEdMaW50IGZpcnN0LCBHTHNpemVpIGNvdW50KTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBk
cmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBHTGlu
dHB0ciBvZmZzZXQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGVu
YWJsZShHTGVudW0gY2FwKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgICAgICAgICBlbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQgaW5kZXgpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBmaW5pc2goKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmx1c2goKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHJlbmRlcmJ1ZmZl
cnRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBmcmFtZWJ1ZmZlclRleHR1
cmUyRChHTGVudW0gdGFyZ2V0LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHRleHRhcmdldCwg
V2ViR0xUZXh0dXJlIHRleHR1cmUsIEdMaW50IGxldmVsKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nXSB2b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51bSBtb2RlKTsKLSAgICBbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgZ2VuZXJhdGVNaXBtYXAoR0xlbnVtIHRhcmdldCk7Ci0g
ICAgCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJHTEFjdGl2
ZUluZm8gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xBY3RpdmVJ
bmZvIGdldEFjdGl2ZVVuaWZvcm0oV2ViR0xQcm9ncmFtIHByb2dyYW0sIEdMdWludCBpbmRleCk7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCBnZXRBdHRhY2hlZFNoYWRlcnMoV2ViR0xQcm9ncmFtIHByb2dyYW0pOwotCi0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gR0xpbnQgICAgICAgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3Jh
bSBwcm9ncmFtLCBET01TdHJpbmcgbmFtZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBD
dXN0b21dIGFueSBnZXRCdWZmZXJQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1l
KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgZ2V0
Q29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMZW51bSBn
ZXRFcnJvcigpOwotCi0gICAgLy8gb2JqZWN0IGdldEV4dGVuc2lvbihET01TdHJpbmcgbmFtZSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSBhbnkgZ2V0RXh0ZW5zaW9uKERPTVN0
cmluZyBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhj
ZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdMZW51bSB0YXJn
ZXQsIEdMZW51bSBhdHRhY2htZW50LCBHTGVudW0gcG5hbWUpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UGFyYW1ldGVyKEdMZW51bSBw
bmFtZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25d
IGFueSBnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTGVudW0gcG5h
bWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9
TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQ
cm9ncmFtIHByb2dyYW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2Vz
RXhjZXB0aW9uXSBhbnkgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdM
ZW51bSBwbmFtZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNl
cHRpb25dIGFueSBnZXRTaGFkZXJQYXJhbWV0ZXIoV2ViR0xTaGFkZXIgc2hhZGVyLCBHTGVudW0g
cG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJp
bmdBcz1OdWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJJbmZvTG9n
KFdlYkdMU2hhZGVyIHNoYWRlcik7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0IGdldFNoYWRlclByZWNpc2lvbkZv
cm1hdChHTGVudW0gc2hhZGVydHlwZSwgR0xlbnVtIHByZWNpc2lvbnR5cGUpOwotCi0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5lZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNF
eGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIgc2hhZGVy
KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gc2VxdWVuY2U8RE9NU3RyaW5n
PiBnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBD
dXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFRleFBhcmFtZXRlcihHTGVudW0gdGFyZ2V0
LCBHTGVudW0gcG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlz
ZXNFeGNlcHRpb25dIGFueSBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbik7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIFdlYkdMVW5pZm9ybUxvY2F0aW9uIGdldFVuaWZvcm1Mb2NhdGlvbihXZWJH
TFByb2dyYW0gcHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRWZXJ0ZXhBdHRyaWIoR0x1aW50
IGluZGV4LCBHTGVudW0gcG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xzaXpl
aXB0ciBnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0x1aW50IGluZGV4LCBHTGVudW0gcG5hbWUpOwot
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGhpbnQoR0xlbnVtIHRhcmdl
dCwgR0xlbnVtIG1vZGUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBp
c0J1ZmZlcihXZWJHTEJ1ZmZlciBidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdM
Ym9vbGVhbiAgICBpc0NvbnRleHRMb3N0KCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xi
b29sZWFuICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSBHTGJvb2xlYW4gICAgaXNGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVmZmVy
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNQcm9ncmFtKFdlYkdM
UHJvZ3JhbSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAg
aXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVy
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNUZXh0dXJlKFdlYkdM
VGV4dHVyZSB0ZXh0dXJlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
bGluZVdpZHRoKEdMZmxvYXQgd2lkdGgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGxpbmtQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFt
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcGl4ZWxTdG9yZWkoR0xl
bnVtIHBuYW1lLCBHTGludCBwYXJhbSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAg
ICAgICAgIHBvbHlnb25PZmZzZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpOwotCi0g
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgcmVh
ZFBpeGVscyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyBwaXhlbHMpOwotICAg
IAotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICByZWxlYXNlU2hhZGVyQ29t
cGlsZXIoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcmVuZGVyYnVm
ZmVyU3RvcmFnZShHTGVudW0gdGFyZ2V0LCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgc2FtcGxlQ292ZXJhZ2UoR0xjbGFtcGYgdmFsdWUsIEdMYm9vbGVhbiBpbnZlcnQpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lzc29yKEdMaW50IHgsIEdM
aW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBzaGFkZXJTb3VyY2UoV2ViR0xT
aGFkZXIgc2hhZGVyLCBET01TdHJpbmcgc3RyaW5nKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmMoR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50
IG1hc2spOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsRnVu
Y1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQgbWFz
ayk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNrKEdM
dWludCBtYXNrKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNp
bE1hc2tTZXBhcmF0ZShHTGVudW0gZmFjZSwgR0x1aW50IG1hc2spOwotICAgIFtTdHJpY3RUeXBl
Q2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3AoR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFp
bCwgR0xlbnVtIHpwYXNzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
c3RlbmNpbE9wU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWws
IEdMZW51bSB6cGFzcyk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
dGV4UGFyYW1ldGVyZihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMZmxvYXQgcGFyYW0p
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB0ZXhQYXJhbWV0ZXJpKEdM
ZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwotCi0gICAgLy8gU3VwcG9y
dGVkIGZvcm1zOgotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldz8gcGl4ZWxzKTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFn
ZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZv
cm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGltYWdlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQs
IEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEhUTUxDYW52YXNFbGVtZW50PyBjYW52YXMpOwotI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAm
JiBFTkFCTEVfVklERU8KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVu
dW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQ/
IHZpZGVvKTsKLSNlbmRpZgotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSB2b2lkICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXc/IHBpeGVscyk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4
U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSW1hZ2VEYXRhPyBwaXhlbHMpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRl
eFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/IGlt
YWdlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAg
ICAgICB0ZXhTdWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zm
c2V0LCBHTGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxl
bWVudD8gY2FudmFzKTsKLSNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYgRU5BQkxFX1ZJREVP
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
dGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudD8g
dmlkZW8pOwotI2VuZGlmCi0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgdW5pZm9ybTFmKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0
IHgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkIHVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJh
eSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5p
Zm9ybTFpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGludCB4KTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWl2
KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmYoV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmZ2KFdl
YkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yaShXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSk7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJpdihXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmKFdlYkdMVW5pZm9ybUxvY2F0
aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6KTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2Z2
KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkgdik7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zaShXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQgeSwgR0xpbnQgeik7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9y
bTNpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRmKFdlYkdM
VW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6
LCBHTGZsb2F0IHcpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhj
ZXB0aW9uXSB2b2lkIHVuaWZvcm00ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZs
b2F0MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgdW5pZm9ybTRpKFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGludCB4LCBH
TGludCB5LCBHTGludCB6LCBHTGludCB3KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0
b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtNGl2KFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBJbnQzMkFycmF5IHYpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihXZWJHTFVuaWZvcm1M
b2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCB1bmlmb3JtTWF0cml4M2Z2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGJvb2xl
YW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRyaXg0ZnYoV2ViR0xV
bmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJh
eSBhcnJheSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZv
aWQgICAgICAgICB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB2YWxpZGF0ZVByb2dy
YW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9p
ZCAgICAgICAgIHZlcnRleEF0dHJpYjFmKEdMdWludCBpbmR4LCBHTGZsb2F0IHgpOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGlu
ZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICB2ZXJ0ZXhBdHRyaWIyZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHkp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYo
R0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBH
TGZsb2F0IHksIEdMZmxvYXQgeik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tXSB2
b2lkIHZlcnRleEF0dHJpYjNmdihHTHVpbnQgaW5keCwgRmxvYXQzMkFycmF5IHZhbHVlcyk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjRmKEdMdWlu
dCBpbmR4LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSwgR0xmbG9hdCB6LCBHTGZsb2F0IHcpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0x1aW50
IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYlBvaW50ZXIoR0x1aW50IGlu
ZHgsIEdMaW50IHNpemUsIEdMZW51bSB0eXBlLCBHTGJvb2xlYW4gbm9ybWFsaXplZCwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xz
aXplaSBzdHJpZGUsIEdMaW50cHRyIG9mZnNldCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgdmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwg
R0xzaXplaSBoZWlnaHQpOworXSBpbnRlcmZhY2UgV2ViR0wxUmVuZGVyaW5nQ29udGV4dCA6IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgewogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShXRUJHTCkKKyNpbmNsdWRlICJXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6V2ViR0wyUmVuZGVyaW5nQ29u
dGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQorICAgIDogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShw
YXNzZWRDYW52YXMsIGF0dHJpYnV0ZXMpCit7CisgICAgbV90eXBlID0gIndlYmdsMiI7Cit9CisK
K1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZh
c0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29u
dGV4dCwKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKSA6IFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UocGFzc2VkQ2FudmFzLCBjb250ZXh0LCBhdHRyaWJ1dGVz
KQoreworICAgIG1fdHlwZSA9ICJ3ZWJnbDIiOworfQorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0X2gKKyNkZWZpbmUg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dF9oCisKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV2ViR0wyUmVuZGVyaW5n
Q29udGV4dCBmaW5hbCA6IHB1YmxpYyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIHsKK3B1Ymxp
YzoKKyAgICBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOworICAgIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQoSFRN
TENhbnZhc0VsZW1lbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuaWRsCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
K1sKKyAgICBDb25kaXRpb25hbD1XRUJHTCwKKyAgICBKU0N1c3RvbU1hcmtGdW5jdGlvbiwKKyAg
ICBEb05vdENoZWNrQ29uc3RhbnRzLAorXSBpbnRlcmZhY2UgV2ViR0wyUmVuZGVyaW5nQ29udGV4
dCA6IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UgeworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTYgKzMwLDE2IEBACiAjaW5jbHVkZSAiV2ViR0xCdWZmZXIuaCIKIAogI2luY2x1ZGUgIldl
YkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisj
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IFdlYkdMQnVmZmVyOjpjcmVhdGUoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjdHgpCitQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTEJ1ZmZl
cjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFdlYkdMQnVmZmVyKGN0eCkpOwogfQogCi1XZWJHTEJ1ZmZlcjo6V2ViR0xC
dWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitXZWJHTEJ1ZmZlcjo6V2ViR0xCdWZm
ZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmpl
Y3QoY3R4KQogICAgICwgbV90YXJnZXQoMCkKICAgICAsIG1fYnl0ZUxlbmd0aCgwKQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCShyZXZpc2lvbiAxNzgzNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00MSw3ICs0MSw3IEBAIGNsYXNzIFdlYkdMQnVmZmVyIGZpbmFsIDogcHVibGljIFdl
YkdMU2gKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTEJ1ZmZlcigpOwogCi0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqKTsKIAogICAgIGJvb2wgYXNzb2NpYXRlQnVmZmVyRGF0YShHQzNEc2l6ZWlw
dHIgc2l6ZSk7CiAgICAgYm9vbCBhc3NvY2lhdGVCdWZmZXJEYXRhKEpTQzo6QXJyYXlCdWZmZXIq
KTsKQEAgLTY2LDcgKzY2LDcgQEAgcHVibGljOgogICAgIGJvb2wgaGFzRXZlckJlZW5Cb3VuZCgp
IGNvbnN0IHsgcmV0dXJuIG9iamVjdCgpICYmIG1fdGFyZ2V0OyB9CiAKIHByb3RlY3RlZDoKLSAg
ICBXZWJHTEJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBXZWJHTEJ1ZmZlcihX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3QpIG92ZXJyaWRlOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
QVRDLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDLmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDcgKzMzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM6OldlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6
IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiAgICAgY29udGV4dC0+YWRkQ29tcHJlc3NlZFRl
eHR1cmVGb3JtYXQoRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JfQU1EKTsKQEAgLTUw
LDcgKzUwLDcgQEAgV2ViR0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgV2ViR0xDb21wcgogICAg
IHJldHVybiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDTmFtZTsKIH0KIAotYm9vbCBXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQorYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKIHsKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lv
bnMgPSBjb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5nZXRFeHRlbnNpb25zKCk7CiAgICAg
cmV0dXJuIGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTURfY29tcHJlc3NlZF9BVENfdGV4dHVy
ZSIpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Q29tcHJlc3NlZFRleHR1cmVBVEMuaAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxMCArMzQsMTAgQEAgY2xhc3MgV2ViR0xUZXh0dXJlOwogCiBjbGFzcyBXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCopOworICAgIGV4cGxpY2l0IFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfldlYkdMQ29tcHJlc3NlZFRleHR1
cmVBVEMoKTsKIAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSopOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlk
ZTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAogI2luY2x1ZGUgIldlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQy5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMQ29tcHJlc3NlZFRleHR1
cmVQVlJUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6V2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBX
ZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogICAgIGNvbnRleHQtPmFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENfNEJQUFYxX0lNRyk7
CkBAIC01Miw3ICs1Miw3IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIFdlYkdMQ29t
cHIKICAgICByZXR1cm4gV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDTmFtZTsKIH0KIAotYm9v
bCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpCitib29sIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9y
dGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7CiAgICAgRXh0ZW5zaW9u
czNEKiBleHRlbnNpb25zID0gY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5z
aW9ucygpOwogICAgIHJldHVybiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfSU1HX3RleHR1cmVf
Y29tcHJlc3Npb25fcHZydGMiKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oCShyZXZpc2lvbiAxNzgz
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJl
UFZSVEMuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMyLDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDIGZpbmFsIDogcHVibGlj
IFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVBWUlRDKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2
aXJ0dWFsIH5XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMoKTsKIAotICAgIHN0YXRpYyBib29s
IHN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBzdGF0aWMgYm9vbCBzdXBw
b3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgRXh0ZW5zaW9u
TmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMu
Y3BwCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TENvbXByZXNzZWRUZXh0dXJlUzNUQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwx
MSBAQAogI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCiAKICNpbmNsdWRl
ICJFeHRlbnNpb25zM0QuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OldlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyhXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKICAgICBjb250
ZXh0LT5hZGRDb21wcmVzc2VkVGV4dHVyZUZvcm1hdChFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURf
UkdCX1MzVENfRFhUMV9FWFQpOwpAQCAtNTIsNyArNTIsNyBAQCBXZWJHTEV4dGVuc2lvbjo6RXh0
ZW5zaW9uTmFtZSBXZWJHTENvbXByCiAgICAgcmV0dXJuIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDTmFtZTsKIH0KIAotYm9vbCBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVk
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK2Jvb2wgV2ViR0xDb21wcmVzc2VkVGV4
dHVyZVMzVEM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQog
ewogICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IGNvbnRleHQtPmdyYXBoaWNzQ29udGV4
dDNEKCktPmdldEV4dGVuc2lvbnMoKTsKICAgICByZXR1cm4gZXh0ZW5zaW9ucy0+c3VwcG9ydHMo
IkdMX0VYVF90ZXh0dXJlX2NvbXByZXNzaW9uX3MzdGMiKQpJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oCShy
ZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUzNUQy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTAgQEAgY2xh
c3MgV2ViR0xUZXh0dXJlOwogCiBjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyBmaW5h
bCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVMzVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGlj
aXQgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSop
OwogICAgIHZpcnR1YWwgfldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKCk7CiAKLSAgICBzdGF0
aWMgYm9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJv
b2wgc3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwg
RXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3JvdXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdyb3VwLmNwcAkocmV2aXNp
b24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0R3Jv
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiV2ViR0xD
b250ZXh0R3JvdXAuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVk
ZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZS5oIgogI2luY2x1ZGUgIldlYkdMU2hhcmVkT2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTUzLDE2ICs1MywxNiBAQCBXZWJHTENvbnRleHRHcm91cDo6fldlYkdMQ29u
dGV4dEdyb3VwKCkKIEdyYXBoaWNzQ29udGV4dDNEKiBXZWJHTENvbnRleHRHcm91cDo6Z2V0QUdy
YXBoaWNzQ29udGV4dDNEKCkKIHsKICAgICBBU1NFUlQoIW1fY29udGV4dHMuaXNFbXB0eSgpKTsK
LSAgICBIYXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+OjppdGVyYXRvciBpdCA9IG1fY29u
dGV4dHMuYmVnaW4oKTsKKyAgICBIYXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqPjo6
aXRlcmF0b3IgaXQgPSBtX2NvbnRleHRzLmJlZ2luKCk7CiAgICAgcmV0dXJuICgqaXQpLT5ncmFw
aGljc0NvbnRleHQzRCgpOwogfQogCi12b2lkIFdlYkdMQ29udGV4dEdyb3VwOjphZGRDb250ZXh0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgV2ViR0xDb250ZXh0R3JvdXA6
OmFkZENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKIHsKICAgICBt
X2NvbnRleHRzLmFkZChjb250ZXh0KTsKIH0KIAotdm9pZCBXZWJHTENvbnRleHRHcm91cDo6cmVt
b3ZlQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit2b2lkIFdlYkdMQ29u
dGV4dEdyb3VwOjpyZW1vdmVDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRl
eHQpCiB7CiAgICAgLy8gV2UgbXVzdCBjYWxsIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMgYmVm
b3JlIHJlbW92aW5nIHRoZSBsYXN0IGNvbnRleHQuCiAgICAgaWYgKG1fY29udGV4dHMuc2l6ZSgp
ID09IDEgJiYgbV9jb250ZXh0cy5jb250YWlucyhjb250ZXh0KSkKQEAgLTg5LDkgKzg5LDkgQEAg
dm9pZCBXZWJHTENvbnRleHRHcm91cDo6ZGV0YWNoQW5kUmVtb3ZlQQogICAgIH0KIH0KIAotdm9p
ZCBXZWJHTENvbnRleHRHcm91cDo6bG9zZUNvbnRleHRHcm91cChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQordm9pZCBXZWJHTENvbnRleHRHcm91cDo6bG9zZUNv
bnRleHRHcm91cChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMb3N0Q29udGV4dE1vZGUgbW9k
ZSkKIHsKLSAgICBmb3IgKEhhc2hTZXQ8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj46Oml0ZXJhdG9y
IGl0ID0gbV9jb250ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVuZCgpOyArK2l0KQor
ICAgIGZvciAoSGFzaFNldDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj46Oml0ZXJhdG9yIGl0
ID0gbV9jb250ZXh0cy5iZWdpbigpOyBpdCAhPSBtX2NvbnRleHRzLmVuZCgpOyArK2l0KQogICAg
ICAgICAoKml0KS0+bG9zZUNvbnRleHRJbXBsKG1vZGUpOwogCiAgICAgZGV0YWNoQW5kUmVtb3Zl
QWxsT2JqZWN0cygpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xDb250
ZXh0R3JvdXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TENvbnRleHRHcm91cC5oCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTENvbnRleHRHcm91cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3
IEBACiAjaWZuZGVmIFdlYkdMQ29udGV4dEdyb3VwX2gKICNkZWZpbmUgV2ViR0xDb250ZXh0R3Jv
dXBfaAogCi0jaW5jbHVkZSA8V2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAt
MzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQz
RDsKIGNsYXNzIFdlYkdMRXh0ZW5zaW9uOwogY2xhc3MgV2ViR0xTaGFyZWRPYmplY3Q7Ci1jbGFz
cyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ7CitjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
OwogCiB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCkBAIC00NSwxNSArNDUsMTUgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBjcmVhdGUoKTsK
ICAgICB+V2ViR0xDb250ZXh0R3JvdXAoKTsKIAotICAgIHZvaWQgYWRkQ29udGV4dChXZWJHTFJl
bmRlcmluZ0NvbnRleHQqKTsKLSAgICB2b2lkIHJlbW92ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgdm9pZCBhZGRDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
KTsKKyAgICB2b2lkIHJlbW92ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwog
CiAgICAgdm9pZCBhZGRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKICAgICB2b2lkIHJlbW92
ZU9iamVjdChXZWJHTFNoYXJlZE9iamVjdCopOwogCiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGdl
dEFHcmFwaGljc0NvbnRleHQzRCgpOwogCi0gICAgdm9pZCBsb3NlQ29udGV4dEdyb3VwKFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlKTsKKyAgICB2b2lkIGxvc2VDb250ZXh0
R3JvdXAoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6TG9zdENvbnRleHRNb2RlKTsKIAogICBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBXZWJHTE9iamVjdDsKQEAgLTYyLDcgKzYyLDcgQEAg
cHVibGljOgogCiAgICAgdm9pZCBkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CiAKLSAgICBI
YXNoU2V0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+IG1fY29udGV4dHM7CisgICAgSGFzaFNldDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj4gbV9jb250ZXh0czsKICAgICBIYXNoU2V0PFdlYkdM
U2hhcmVkT2JqZWN0Kj4gbV9ncm91cE9iamVjdHM7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5jcHAJKHJldmlzaW9uIDE3
ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsyOSwxMSBAQAogCiAjaW5jbHVkZSAiV2ViR0xD
b250ZXh0T2JqZWN0LmgiCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotV2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmplY3QoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KQorV2ViR0xDb250ZXh0T2JqZWN0OjpXZWJHTENvbnRleHRPYmpl
Y3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMT2JqZWN0
KGNvbnRleHQpCiAgICAgLCBtX2NvbnRleHQoY29udGV4dCkKIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQ29udGV4dE9iamVjdC5oCShyZXZpc2lvbiAxNzgz
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2Ns
YXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIC8vIFdlYkdMQ29udGV4dE9iamVjdCB0
aGUgYmFzZSBjbGFzcyBmb3Igb2JqZWN0cyB0aGF0IGFyZSBvd25lZCBieSBhIHNwZWNpZmljCiAv
LyBXZWJHTFJlbmRlcmluZ0NvbnRleHQuCkBAIC0zOSw5ICszOSw5IEBAIGNsYXNzIFdlYkdMQ29u
dGV4dE9iamVjdCA6IHB1YmxpYyBXZWJHTE8KIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5XZWJHTENv
bnRleHRPYmplY3QoKTsKIAotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
IGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KIAotICAgIHZpcnR1YWwgYm9v
bCB2YWxpZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCosIGNvbnN0IFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB2aXJ0dWFsIGJvb2wgdmFsaWRh
dGUoY29uc3QgV2ViR0xDb250ZXh0R3JvdXAqLCBjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjb250ZXh0KSBjb25zdCBvdmVycmlkZQogICAgIHsKICAgICAgICAgcmV0dXJuIGNvbnRl
eHQgPT0gbV9jb250ZXh0OwogICAgIH0KQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZv
aWQgZGV0YWNoQ29udGV4dCgpOwogCiBwcm90ZWN0ZWQ6Ci0gICAgV2ViR0xDb250ZXh0T2JqZWN0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIFdlYkdMQ29udGV4dE9iamVjdChXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzR3JvdXBPckNvbnRl
eHQoKSBjb25zdCBvdmVycmlkZQogICAgIHsKQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgR3JhcGhpY3NDb250ZXh0M0QqIGdldEFHcmFwaGljc0NvbnRleHQzRCgpIGNv
bnN0IG92ZXJyaWRlOwogCiBwcml2YXRlOgotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9j
b250ZXh0OworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIG1fY29udGV4dDsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uY3BwCShyZXZpc2lvbiAxNzgzNzEp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksMTEgKzI5LDExIEBACiAKICNpbmNsdWRlICJXZWJHTERl
YnVnUmVuZGVyZXJJbmZvLmgiCiAKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIK
KyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyhX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitXZWJHTERlYnVnUmVuZGVyZXJJbmZvOjpX
ZWJHTERlYnVnUmVuZGVyZXJJbmZvKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQp
CiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdSZW5kZXJlckluZm8uaAkocmV2aXNp
b24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1JlbmRl
cmVySW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgVU5NQVNLRURfUkVOREVSRVJfV0VCR0wgPSAweDkyNDYKICAgICB9OwogCi0gICAgZXhwbGlj
aXQgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBl
eHBsaWNpdCBXZWJHTERlYnVnUmVuZGVyZXJJbmZvKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
KTsKICAgICB2aXJ0dWFsIH5XZWJHTERlYnVnUmVuZGVyZXJJbmZvKCk7CiAKICAgICB2aXJ0dWFs
IEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFkZXJzLmNwcAkocmV2aXNpb24g
MTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1Z1NoYWRlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxMiArMzAsMTIgQEAKICNpbmNsdWRlICJXZWJHTERl
YnVnU2hhZGVycy5oIgogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oIgogI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
V2ViR0xEZWJ1Z1NoYWRlcnM6OldlYkdMRGVidWdTaGFkZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK1dlYkdMRGVidWdTaGFkZXJzOjpXZWJHTERlYnVnU2hhZGVycyhXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4
dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVidWdTaGFk
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZWJ1
Z1NoYWRlcnMuaAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xEZWJ1Z1NoYWRlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBXZWJHTERlYnVnU2hhZGVycyBmaW5h
bCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xE
ZWJ1Z1NoYWRlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xE
ZWJ1Z1NoYWRlcnMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfldl
YkdMRGVidWdTaGFkZXJzKCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgp
IGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xE
ZXB0aFRleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMRGVwdGhUZXh0dXJlLmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw3ICszMyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotV2ViR0xEZXB0aFRleHR1cmU6
OldlYkdMRGVwdGhUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK1dlYkdM
RGVwdGhUZXh0dXJlOjpXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
KiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaAkocmV2aXNp
b24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIFdlYkdMRGVwdGhUZXh0dXJlIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9u
IHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqKTsKKyAgICBleHBsaWNpdCBXZWJHTERlcHRoVGV4dHVyZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVhbCB+V2ViR0xEZXB0aFRleHR1cmUoKTsKIAogICAg
IHN0YXRpYyBib29sIHN1cHBvcnRlZChHcmFwaGljc0NvbnRleHQzRCopOwpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xEcmF3QnVmZmVycy5jcHAJKHJldmlzaW9u
IDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotV2ViR0xEcmF3QnVmZmVyczo6V2ViR0xEcmF3QnVmZmVycyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpCitXZWJHTERyYXdCdWZmZXJzOjpXZWJHTERyYXdCdWZmZXJzKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250
ZXh0KQogewogfQpAQCAtNDgsMTQgKzQ4LDE0IEBAIFdlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25O
YW1lIFdlYkdMRHJhd0IKIAogI2lmIChQTEFURk9STShNQUMpICYmIF9fTUFDX09TX1hfVkVSU0lP
Tl9NSU5fUkVRVUlSRUQgPCAxMDEwMDApCiAKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9y
dGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopCitib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBv
cnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKikKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKICNlbHNlCiAKLWJvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCkKK2Jvb2wgV2ViR0xEcmF3QnVmZmVyczo6c3VwcG9ydGVkKFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiB7CiAgICAgRXh0ZW5zaW9uczNEKiBl
eHRlbnNpb25zID0gY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Z2V0RXh0ZW5zaW9ucygp
OwogICAgIHJldHVybiBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX2RyYXdfYnVmZmVycyIp
CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQgV2ViR0xEcmF3QnVmZmVyczo6ZHJhd0J1ZmZlcnNXRUJH
TCgKIH0KIAogLy8gc3RhdGljCi1ib29sIFdlYkdMRHJhd0J1ZmZlcnM6OnNhdGlzZmllc1dlYkdM
UmVxdWlyZW1lbnRzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogd2ViZ2xDb250ZXh0KQorYm9vbCBX
ZWJHTERyYXdCdWZmZXJzOjpzYXRpc2ZpZXNXZWJHTFJlcXVpcmVtZW50cyhXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKiB3ZWJnbENvbnRleHQpCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQgPSB3ZWJnbENvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCk7CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmgJKHJldmlzaW9uIDE3
ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRHJhd0J1ZmZlcnMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsMTcgKzMyLDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgV2ViR0xEcmF3QnVmZmVycyBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBw
dWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xEcmF3QnVmZmVycyhXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBleHBsaWNpdCBXZWJHTERyYXdCdWZmZXJzKFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UqKTsKICAgICB2aXJ0dWFsIH5XZWJHTERyYXdCdWZmZXJzKCk7CiAKLSAgICBzdGF0aWMg
Ym9vbCBzdXBwb3J0ZWQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wg
c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwgRXh0
ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGRyYXdCdWZm
ZXJzV0VCR0woY29uc3QgVmVjdG9yPEdDM0RlbnVtPiYgYnVmZmVycyk7CiAKIHByaXZhdGU6Ci0g
ICAgc3RhdGljIGJvb2wgc2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoV2ViR0xSZW5kZXJpbmdD
b250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgc2F0aXNmaWVzV2ViR0xSZXF1aXJlbWVudHMoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmNwcAko
cmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRl
bnNpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotV2ViR0xFeHRlbnNpb246OldlYkdMRXh0ZW5zaW9uKFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCkKK1dlYkdMRXh0ZW5zaW9uOjpXZWJHTEV4dGVuc2lvbihXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCiB7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmgJ
KHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0
ZW5zaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKICNpZm5kZWYgV2ViR0xF
eHRlbnNpb25faAogI2RlZmluZSBXZWJHTEV4dGVuc2lvbl9oCiAKLSNpbmNsdWRlICJXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjAsMTQgKzYwLDE0IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgcmVmKCkgeyBtX2NvbnRleHQtPnJlZigpOyB9CiAgICAgdm9pZCBkZXJlZigpIHsg
bV9jb250ZXh0LT5kZXJlZigpOyB9Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KCkgeyByZXR1cm4gbV9jb250ZXh0OyB9CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSog
Y29udGV4dCgpIHsgcmV0dXJuIG1fY29udGV4dDsgfQogCiAgICAgdmlydHVhbCB+V2ViR0xFeHRl
bnNpb24oKTsKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0ID0gMDsK
IAogcHJvdGVjdGVkOgotICAgIFdlYkdMRXh0ZW5zaW9uKFdlYkdMUmVuZGVyaW5nQ29udGV4dCop
OwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OworICAgIFdlYkdMRXh0ZW5z
aW9uKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlKiBtX2NvbnRleHQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmNwcAkocmV2
aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJFeHRl
bnNpb25zM0QuaCIKICNpbmNsdWRlICJXZWJHTENvbnRleHRHcm91cC5oIgogI2luY2x1ZGUgIldl
YkdMRHJhd0J1ZmZlcnMuaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtMjY5LDEyICsyNjksMTIgQEAgV2ViR0xGcmFtZWJ1ZmZlcjo6V2ViR0xBdHRhY2ht
ZW50Ojp+V2ViRwogewogfQogCi1QYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMRnJh
bWVidWZmZXI6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0eCkKK1Bhc3NSZWZQdHI8
V2ViR0xGcmFtZWJ1ZmZlcj4gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMRnJhbWVi
dWZmZXIoY3R4KSk7CiB9CiAKLVdlYkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZmZXIoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitXZWJHTEZyYW1lYnVmZmVyOjpXZWJHTEZyYW1lYnVm
ZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKICAgICA6IFdlYkdMQ29udGV4dE9i
amVjdChjdHgpCiAgICAgLCBtX2hhc0V2ZXJCZWVuQm91bmQoZmFsc2UpCiB7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGcmFtZWJ1ZmZlci5oCShyZXZpc2lvbiAx
NzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZyYW1lYnVmZmVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+
V2ViR0xGcmFtZWJ1ZmZlcigpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFdlYkdMRnJhbWVidWZmZXI+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7
CiAKICAgICB2b2lkIHNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVyKEdDM0RlbnVtIGF0
dGFjaG1lbnQsIEdDM0RlbnVtIHRleFRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0MzRGludCBsZXZl
bCk7CiAgICAgdm9pZCBzZXRBdHRhY2htZW50Rm9yQm91bmRGcmFtZWJ1ZmZlcihHQzNEZW51bSBh
dHRhY2htZW50LCBXZWJHTFJlbmRlcmJ1ZmZlciopOwpAQCAtMTAxLDcgKzEwMSw3IEBAIHB1Ymxp
YzoKICAgICBHQzNEZW51bSBnZXREcmF3QnVmZmVyKEdDM0RlbnVtKTsKIAogcHJvdGVjdGVkOgot
ICAgIFdlYkdMRnJhbWVidWZmZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgV2ViR0xG
cmFtZWJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGVsZXRlT2JqZWN0SW1wbChHcmFwaGljc0NvbnRleHQzRCosIFBsYXRmb3JtM0RPYmplY3Qp
IG92ZXJyaWRlOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTExvc2VD
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TExvc2VDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xMb3NlQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDExICsy
OSwxMSBAQAogCiAjaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5oIgogCi0jaW5jbHVkZSAiV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVdlYkdMTG9zZUNvbnRleHQ6OldlYkdMTG9z
ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorV2ViR0xMb3NlQ29udGV4
dDo6V2ViR0xMb3NlQ29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQog
ICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KQEAgLTQ5LDcgKzQ5LDcgQEAgV2Vi
R0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgV2ViR0xMb3NlQwogCiB2b2lkIFdlYkdMTG9zZUNv
bnRleHQ6Omxvc2VDb250ZXh0KCkKIHsKLSAgICBtX2NvbnRleHQtPmZvcmNlTG9zdENvbnRleHQo
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpTeW50aGV0aWNMb3N0Q29udGV4dCk7CisgICAgbV9jb250
ZXh0LT5mb3JjZUxvc3RDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OlN5bnRoZXRp
Y0xvc3RDb250ZXh0KTsKIH0KIAogdm9pZCBXZWJHTExvc2VDb250ZXh0OjpyZXN0b3JlQ29udGV4
dCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xMb3NlQ29udGV4
dC5oCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TExvc2VDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDExICszMCwxMSBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIGNsYXNzIFdlYkdMTG9zZUNvbnRleHQgZmluYWwg
OiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkdMTG9z
ZUNvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgV2ViR0xMb3Nl
Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVhbCB+V2ViR0xM
b3NlQ29udGV4dCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25z
dCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMT2JqZWN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTE9iamVj
dC5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTEgKzM0LDExIEBACiAjaW5jbHVk
ZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgogI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJz
LmgiCiAjaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1XZWJHTE9iamVjdDo6V2ViR0xPYmplY3QoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KikKK1dlYkdMT2JqZWN0OjpXZWJHTE9iamVjdChXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlKikKICAgICA6IG1fb2JqZWN0KDApCiAgICAgLCBtX2F0dGFjaG1lbnRDb3VudCgw
KQogICAgICwgbV9kZWxldGVkKGZhbHNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTE9iamVjdC5oCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBXZWJH
TENvbnRleHRHcm91cDsKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIGNsYXNzIFdlYkdMT2JqZWN0IDogcHVibGljIFJlZkNv
dW50ZWQ8V2ViR0xPYmplY3Q+IHsKIHB1YmxpYzoKQEAgLTU2LDEwICs1NiwxMCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0RlbGV0ZWQoKSB7IHJldHVybiBtX2RlbGV0ZWQ7IH0KIAogICAgIC8vIFRy
dWUgaWYgdGhpcyBvYmplY3QgYmVsb25ncyB0byB0aGUgZ3JvdXAgb3IgY29udGV4dC4KLSAgICB2
aXJ0dWFsIGJvb2wgdmFsaWRhdGUoY29uc3QgV2ViR0xDb250ZXh0R3JvdXAqLCBjb25zdCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIHZhbGlkYXRl
KGNvbnN0IFdlYkdMQ29udGV4dEdyb3VwKiwgY29uc3QgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSopIGNvbnN0ID0gMDsKIAogcHJvdGVjdGVkOgotICAgIFdlYkdMT2JqZWN0KFdlYkdMUmVuZGVy
aW5nQ29udGV4dCopOworICAgIFdlYkdMT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
KTsKIAogICAgIC8vIHNldE9iamVjdCBzaG91bGQgYmUgb25seSBjYWxsZWQgb25jZSByaWdodCBh
ZnRlciBjcmVhdGluZyBhIFdlYkdMT2JqZWN0LgogICAgIHZvaWQgc2V0T2JqZWN0KFBsYXRmb3Jt
M0RPYmplY3QpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dy
YW0uY3BwCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFByb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNiArMzAsMTYgQEAKICNpbmNs
dWRlICJXZWJHTFByb2dyYW0uaCIKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0j
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2Vi
R0xQcm9ncmFtPiBXZWJHTFByb2dyYW06OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKK1Bhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBXZWJHTFByb2dyYW06OmNyZWF0ZShXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjdHgpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBXZWJH
TFByb2dyYW0oY3R4KSk7CiB9CiAKLVdlYkdMUHJvZ3JhbTo6V2ViR0xQcm9ncmFtKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY3R4KQorV2ViR0xQcm9ncmFtOjpXZWJHTFByb2dyYW0oV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSogY3R4KQogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAg
ICwgbV9saW5rU3RhdHVzKGZhbHNlKQogICAgICwgbV9saW5rQ291bnQoMCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUHJvZ3JhbS5oCShyZXZpc2lvbiAxNzgzNzEpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uaAkod29ya2luZyBjb3B5
KQpAQCAtMzksNyArMzksNyBAQCBjbGFzcyBXZWJHTFByb2dyYW0gZmluYWwgOiBwdWJsaWMgV2Vi
R0xTCiBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViR0xQcm9ncmFtKCk7CiAKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZShXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlKik7CiAKICAgICB1bnNpZ25lZCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMo
KTsKICAgICBHQzNEaW50IGdldEFjdGl2ZUF0dHJpYkxvY2F0aW9uKEdDM0R1aW50IGluZGV4KTsK
QEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogICAgIGJvb2wgZGV0YWNoU2hhZGVyKFdlYkdMU2hh
ZGVyKik7CiAKIHByb3RlY3RlZDoKLSAgICBXZWJHTFByb2dyYW0oV2ViR0xSZW5kZXJpbmdDb250
ZXh0Kik7CisgICAgV2ViR0xQcm9ncmFtKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxh
dGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1ZmZlci5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsMTEgKzMwLDExIEBACiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIK
IAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdM
UmVuZGVyYnVmZmVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitQYXNzUmVm
UHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqIGN0eCkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdM
UmVuZGVyYnVmZmVyKGN0eCkpOwogfQpAQCAtNDQsNyArNDQsNyBAQCBXZWJHTFJlbmRlcmJ1ZmZl
cjo6fldlYkdMUmVuZGVyYnVmZmVyKCkKICAgICBkZWxldGVPYmplY3QoMCk7CiB9CiAKLVdlYkdM
UmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKK1dlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlKiBjdHgpCiAgICAgOiBXZWJHTFNoYXJlZE9iamVjdChjdHgpCiAgICAgLCBtX2lu
dGVybmFsRm9ybWF0KEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBNCkKICAgICAsIG1faW5pdGlhbGl6
ZWQoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmJ1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyYnVmZmVyLmgJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyYnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAg
Y2xhc3MgV2ViR0xSZW5kZXJidWZmZXIgZmluYWwgOiBwdWJsaWMgVwogcHVibGljOgogICAgIHZp
cnR1YWwgfldlYkdMUmVuZGVyYnVmZmVyKCk7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJH
TFJlbmRlcmJ1ZmZlcj4gY3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSopOwogCiAgICAgdm9pZCBzZXRJbnRlcm5hbEZvcm1hdChHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCkKICAgICB7CkBAIC02NSw3ICs2NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEhh
c0V2ZXJCZWVuQm91bmQoKSB7IG1faGFzRXZlckJlZW5Cb3VuZCA9IHRydWU7IH0KIAogcHJvdGVj
dGVkOgotICAgIFdlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAg
IFdlYkdMUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0z
RE9iamVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gMTc4MzcxKQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2MzM4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDks
IDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0j
aWYgRU5BQkxFKFdFQkdMKQotCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCi0K
LSNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdl
LmgiCi0jaW5jbHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNs
dWRlICJFWFRCbGVuZE1pbk1heC5oIgotI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5oIgotI2luY2x1
ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKLSNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMuaCIKLSNpbmNsdWRlICJFWFRzUkdCLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29k
ZS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2lu
Y2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgot
I2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgot
I2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKLSNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50LmgiCi0jaW5jbHVkZSAiT0VTU3Rh
bmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdC5oIgotI2luY2x1
ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxv
YXQuaCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAi
T0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJXZWJHTEFjdGl2ZUlu
Zm8uaCIKLSNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVBVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIK
LSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgotI2luY2x1ZGUgIldlYkdM
Q29udGV4dEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRlICJXZWJHTENvbnRleHRFdmVudC5oIgotI2lu
Y2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVy
SW5mby5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCi0jaW5jbHVkZSAiV2ViR0xE
ZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAi
V2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKLSNpbmNs
dWRlICJXZWJHTFByb2dyYW0uaCIKLSNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIldlYkdMU2hhZGVyLmgiCi0jaW5jbHVkZSAiV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQuaCIKLSNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJHTFVuaWZvcm1M
b2NhdGlvbi5oIgotCi0jaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8
cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJy
YXkuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jb25zdCBkb3VibGUgc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1w
dHMgPSAxLjA7Ci1jb25zdCBpbnQgbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlID0gMjU2Owot
Ci1uYW1lc3BhY2UgewotCi0gICAgY2xhc3MgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciB7Ci0g
ICAgcHVibGljOgotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyKERyYXdpbmdCdWZm
ZXIqIGRyYXdpbmdCdWZmZXIsIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyQmluZGluZykK
LSAgICAgICAgICAgIDogbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCi0gICAgICAgICAg
ICAsIG1fZnJhbWVidWZmZXJCaW5kaW5nKGZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgewot
ICAgICAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3Ig
bXVsdGlzYW1wbGluZykKLSAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYg
bV9kcmF3aW5nQnVmZmVyKQotICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0
KCk7Ci0gICAgICAgIH0KLQotICAgICAgICB+U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVkZWQK
LSAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVy
KQotICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgICAgICB9Ci0K
LSAgICBwcml2YXRlOgotICAgICAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7Ci0g
ICAgICAgIFdlYkdMRnJhbWVidWZmZXIqIG1fZnJhbWVidWZmZXJCaW5kaW5nOwotICAgIH07Ci0K
LSAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9yWmVybyhXZWJHTE9iamVjdCogb2JqZWN0KQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+b2JqZWN0KCkgOiAwOwotICAg
IH0KLQotICAgIHZvaWQgY2xpcDFEKEdDM0RpbnQgc3RhcnQsIEdDM0RzaXplaSByYW5nZSwgR0Mz
RHNpemVpIHNvdXJjZVJhbmdlLCBHQzNEaW50KiBjbGlwcGVkU3RhcnQsIEdDM0RzaXplaSogY2xp
cHBlZFJhbmdlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGNsaXBwZWRTdGFydCAmJiBjbGlwcGVk
UmFuZ2UpOwotICAgICAgICBpZiAoc3RhcnQgPCAwKSB7Ci0gICAgICAgICAgICByYW5nZSArPSBz
dGFydDsKLSAgICAgICAgICAgIHN0YXJ0ID0gMDsKLSAgICAgICAgfQotICAgICAgICBHQzNEaW50
IGVuZCA9IHN0YXJ0ICsgcmFuZ2U7Ci0gICAgICAgIGlmIChlbmQgPiBzb3VyY2VSYW5nZSkKLSAg
ICAgICAgICAgIHJhbmdlIC09IGVuZCAtIHNvdXJjZVJhbmdlOwotICAgICAgICAqY2xpcHBlZFN0
YXJ0ID0gc3RhcnQ7Ci0gICAgICAgICpjbGlwcGVkUmFuZ2UgPSByYW5nZTsKLSAgICB9Ci0KLSAg
ICAvLyBSZXR1cm5zIGZhbHNlIGlmIG5vIGNsaXBwaW5nIGlzIG5lY2Vzc2FyeSwgaS5lLiwgeCwg
eSwgd2lkdGgsIGhlaWdodCBzdGF5IHRoZSBzYW1lLgotICAgIGJvb2wgY2xpcDJEKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAg
ICAgICAgICAgR0MzRHNpemVpIHNvdXJjZVdpZHRoLCBHQzNEc2l6ZWkgc291cmNlSGVpZ2h0LAot
ICAgICAgICAgICAgICAgIEdDM0RpbnQqIGNsaXBwZWRYLCBHQzNEaW50KiBjbGlwcGVkWSwgR0Mz
RHNpemVpKiBjbGlwcGVkV2lkdGgsIEdDM0RzaXplaSpjbGlwcGVkSGVpZ2h0KQotICAgIHsKLSAg
ICAgICAgQVNTRVJUKGNsaXBwZWRYICYmIGNsaXBwZWRZICYmIGNsaXBwZWRXaWR0aCAmJiBjbGlw
cGVkSGVpZ2h0KTsKLSAgICAgICAgY2xpcDFEKHgsIHdpZHRoLCBzb3VyY2VXaWR0aCwgY2xpcHBl
ZFgsIGNsaXBwZWRXaWR0aCk7Ci0gICAgICAgIGNsaXAxRCh5LCBoZWlnaHQsIHNvdXJjZUhlaWdo
dCwgY2xpcHBlZFksIGNsaXBwZWRIZWlnaHQpOwotICAgICAgICByZXR1cm4gKCpjbGlwcGVkWCAh
PSB4IHx8ICpjbGlwcGVkWSAhPSB5IHx8ICpjbGlwcGVkV2lkdGggIT0gd2lkdGggfHwgKmNsaXBw
ZWRIZWlnaHQgIT0gaGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBHQzNEaW50IGNsYW1wKEdDM0RpbnQg
dmFsdWUsIEdDM0RpbnQgbWluLCBHQzNEaW50IG1heCkKLSAgICB7Ci0gICAgICAgIGlmICh2YWx1
ZSA8IG1pbikKLSAgICAgICAgICAgIHZhbHVlID0gbWluOwotICAgICAgICBpZiAodmFsdWUgPiBt
YXgpCi0gICAgICAgICAgICB2YWx1ZSA9IG1heDsKLSAgICAgICAgcmV0dXJuIHZhbHVlOwotICAg
IH0KLQotICAgIC8vIFJldHVybiB0cnVlIGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhlIEFT
Q0lJIHN1YnNldCBhcyBkZWZpbmVkIGluCi0gICAgLy8gR0xTTCBFUyAxLjAgc3BlYyBzZWN0aW9u
IDMuMS4KLSAgICBib29sIHZhbGlkYXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIgYykKLSAgICB7
Ci0gICAgICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQgYCBA
IFwgJyBERUwuCi0gICAgICAgIGlmIChjID49IDMyICYmIGMgPD0gMTI2Ci0gICAgICAgICAgICAm
JiBjICE9ICciJyAmJiBjICE9ICckJyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAmJiBjICE9ICdc
XCcgJiYgYyAhPSAnXCcnKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIC8vIEhv
cml6b250YWwgdGFiLCBsaW5lIGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJyaWFn
ZSByZXR1cm4KLSAgICAgICAgLy8gYXJlIGFsc28gdmFsaWQuCi0gICAgICAgIGlmIChjID49IDkg
JiYgYyA8PSAxMykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgYm9vbCBpc1ByZWZpeFJlc2VydmVkKGNvbnN0IFN0cmluZyYgbmFt
ZSkKLSAgICB7Ci0gICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoImdsXyIpIHx8IG5hbWUuc3Rh
cnRzV2l0aCgid2ViZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRoKCJfd2ViZ2xfIikpCi0gICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFN0cmlwcyBjb21tZW50cyBmcm9tIHNoYWRlciB0ZXh0LiBUaGlzIGFsbG93cyBub24tQVNDSUkg
Y2hhcmFjdGVycwotICAgIC8vIHRvIGJlIHVzZWQgaW4gY29tbWVudHMgd2l0aG91dCBwb3RlbnRp
YWxseSBicmVha2luZyBPcGVuR0wKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMgbm90IGV4cGVjdGlu
ZyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEdMU0wgRVMgc2V0LgotICAgIGNsYXNzIFN0cmlwQ29t
bWVudHMgewotICAgIHB1YmxpYzoKLSAgICAgICAgU3RyaXBDb21tZW50cyhjb25zdCBTdHJpbmcm
IHN0cikKLSAgICAgICAgICAgIDogbV9wYXJzZVN0YXRlKEJlZ2lubmluZ09mTGluZSkKLSAgICAg
ICAgICAgICwgbV9zb3VyY2VTdHJpbmcoc3RyKQotICAgICAgICAgICAgLCBtX2xlbmd0aChzdHIu
bGVuZ3RoKCkpCi0gICAgICAgICAgICAsIG1fcG9zaXRpb24oMCkKLSAgICAgICAgewotICAgICAg
ICAgICAgcGFyc2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFN0cmluZyByZXN1bHQoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7Ci0gICAgICAg
IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGJvb2wgaGFzTW9yZUNoYXJhY3RlcnMoKSBjb25z
dAotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk7
Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHBhcnNlKCkKLSAgICAgICAgewotICAgICAgICAg
ICAgd2hpbGUgKGhhc01vcmVDaGFyYWN0ZXJzKCkpIHsKLSAgICAgICAgICAgICAgICBwcm9jZXNz
KGN1cnJlbnQoKSk7Ci0gICAgICAgICAgICAgICAgLy8gcHJvY2VzcygpIG1pZ2h0IGFkdmFuY2Ug
dGhlIHBvc2l0aW9uLgotICAgICAgICAgICAgICAgIGlmIChoYXNNb3JlQ2hhcmFjdGVycygpKQot
ICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICB2b2lkIHByb2Nlc3MoVUNoYXIpOwotCi0gICAgICAgIGJvb2wgcGVlayhVQ2hh
ciYgY2hhcmFjdGVyKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAobV9wb3NpdGlv
biArIDEgPj0gbV9sZW5ndGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgY2hhcmFjdGVyID0gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbiArIDFdOwotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBVQ2hhciBjdXJyZW50KCkg
Y29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElD
QVRJT04obV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiBtX3NvdXJj
ZVN0cmluZ1ttX3Bvc2l0aW9uXTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgYWR2YW5jZSgp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICsrbV9wb3NpdGlvbjsKLSAgICAgICAgfQotCi0gICAg
ICAgIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNoYXJhY3RlcikgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBjYW5vbmljYWxpemUgbmV3bGluZSByZWxhdGVk
IGNoYXJhY3RlcnMuCi0gICAgICAgICAgICByZXR1cm4gKGNoYXJhY3RlciA9PSAnXG4nIHx8IGNo
YXJhY3RlciA9PSAnXHInKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZW1pdChVQ2hhciBj
aGFyYWN0ZXIpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoY2hhcmFj
dGVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGVudW0gUGFyc2VTdGF0ZSB7Ci0gICAgICAgICAg
ICAvLyBIYXZlIG5vdCBzZWVuIGFuIEFTQ0lJIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciB5ZXQg
b24KLSAgICAgICAgICAgIC8vIHRoaXMgbGluZS4gUG9zc2libGUgdGhhdCB3ZSBtaWdodCBzZWUg
YSBwcmVwcm9jZXNzb3IKLSAgICAgICAgICAgIC8vIGRpcmVjdGl2ZS4KLSAgICAgICAgICAgIEJl
Z2lubmluZ09mTGluZSwKLQotICAgICAgICAgICAgLy8gSGF2ZSBzZWVuIGF0IGxlYXN0IG9uZSBB
U0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIKLSAgICAgICAgICAgIC8vIG9uIHRoaXMgbGlu
ZS4KLSAgICAgICAgICAgIE1pZGRsZU9mTGluZSwKLQotICAgICAgICAgICAgLy8gSGFuZGxpbmcg
YSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBQYXNzZXMgdGhyb3VnaCBhbGwKLSAgICAgICAgICAg
IC8vIGNoYXJhY3RlcnMgdXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gRGlzYWJsZXMgY29tbWVu
dAotICAgICAgICAgICAgLy8gcHJvY2Vzc2luZy4KLSAgICAgICAgICAgIEluUHJlcHJvY2Vzc29y
RGlyZWN0aXZlLAotCi0gICAgICAgICAgICAvLyBIYW5kbGluZyBhIHNpbmdsZS1saW5lIGNvbW1l
bnQuIFRoZSBjb21tZW50IHRleHQgaXMKLSAgICAgICAgICAgIC8vIHJlcGxhY2VkIHdpdGggYSBz
aW5nbGUgc3BhY2UuCi0gICAgICAgICAgICBJblNpbmdsZUxpbmVDb21tZW50LAotCi0gICAgICAg
ICAgICAvLyBIYW5kbGluZyBhIG11bHRpLWxpbmUgY29tbWVudC4gTmV3bGluZXMgYXJlIHBhc3Nl
ZAotICAgICAgICAgICAgLy8gdGhyb3VnaCB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCi0gICAg
ICAgICAgICBJbk11bHRpTGluZUNvbW1lbnQKLSAgICAgICAgfTsKLQotICAgICAgICBQYXJzZVN0
YXRlIG1fcGFyc2VTdGF0ZTsKLSAgICAgICAgU3RyaW5nIG1fc291cmNlU3RyaW5nOwotICAgICAg
ICB1bnNpZ25lZCBtX2xlbmd0aDsKLSAgICAgICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKLSAgICAg
ICAgU3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7Ci0gICAgfTsKLQotICAgIHZvaWQgU3RyaXBDb21t
ZW50czo6cHJvY2VzcyhVQ2hhciBjKQotICAgIHsKLSAgICAgICAgaWYgKGlzTmV3bGluZShjKSkg
ewotICAgICAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgc3RhdGUgd2UgYXJlIGluLCBwYXNzIHRo
cm91Z2ggbmV3bGluZXMKLSAgICAgICAgICAgIC8vIHNvIHdlIHByZXNlcnZlIGxpbmUgbnVtYmVy
cy4KLSAgICAgICAgICAgIGVtaXQoYyk7Ci0KLSAgICAgICAgICAgIGlmIChtX3BhcnNlU3RhdGUg
IT0gSW5NdWx0aUxpbmVDb21tZW50KQotICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEJl
Z2lubmluZ09mTGluZTsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAg
ICAgVUNoYXIgdGVtcCA9IDA7Ci0gICAgICAgIHN3aXRjaCAobV9wYXJzZVN0YXRlKSB7Ci0gICAg
ICAgIGNhc2UgQmVnaW5uaW5nT2ZMaW5lOgotICAgICAgICAgICAgaWYgKFdURjo6aXNBU0NJSVNw
YWNlKGMpKSB7Ci0gICAgICAgICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGMgPT0gJyMnKSB7Ci0gICAgICAg
ICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU7Ci0gICAgICAg
ICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiB0byBub3JtYWwgc3RhdGUgYW5kIHJlLWhhbmRs
ZSBjaGFyYWN0ZXIuCi0gICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7Ci0g
ICAgICAgICAgICBwcm9jZXNzKGMpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz
ZSBNaWRkbGVPZkxpbmU6Ci0gICAgICAgICAgICBpZiAoYyA9PSAnLycgJiYgcGVlayh0ZW1wKSkg
ewotICAgICAgICAgICAgICAgIGlmICh0ZW1wID09ICcvJykgewotICAgICAgICAgICAgICAgICAg
ICBtX3BhcnNlU3RhdGUgPSBJblNpbmdsZUxpbmVDb21tZW50OwotICAgICAgICAgICAgICAgICAg
ICBlbWl0KCcgJyk7Ci0gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KHRlbXAgPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluTXVs
dGlMaW5lQ29tbWVudDsKLSAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgY29tbWVudCBz
dGFydCBpbiBjYXNlIHRoZSB1c2VyIGhhcwotICAgICAgICAgICAgICAgICAgICAvLyBhbiB1bmNs
b3NlZCBjb21tZW50IGFuZCB3ZSB3YW50IHRvIGxhdGVyCi0gICAgICAgICAgICAgICAgICAgIC8v
IHNpZ25hbCBhbiBlcnJvci4KLSAgICAgICAgICAgICAgICAgICAgZW1pdCgnLycpOwotICAgICAg
ICAgICAgICAgICAgICBlbWl0KCcqJyk7Ci0gICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsK
LSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBlbWl0KGMpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgY2FzZSBJblByZXByb2Nlc3NvckRpcmVjdGl2ZToKLSAgICAgICAgICAgIC8vIE5vIG1hdHRl
ciB3aGF0IHRoZSBjaGFyYWN0ZXIgaXMsIGp1c3QgcGFzcyBpdAotICAgICAgICAgICAgLy8gdGhy
b3VnaC4gRG8gbm90IHBhcnNlIGNvbW1lbnRzIGluIHRoaXMgc3RhdGUuIFRoaXMKLSAgICAgICAg
ICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gbG9uZyB0ZXJtLCBidXQg
aXQKLSAgICAgICAgICAgIC8vIHNob3VsZCBoYW5kbGUgdGhlICNlcnJvciBwcmVwcm9jZXNzb3Ig
ZGlyZWN0aXZlLgotICAgICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgSW5TaW5nbGVMaW5lQ29tbWVudDoKLSAgICAgICAgICAgIC8vIFRoZSBuZXds
aW5lIGNvZGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUKLSAgICAgICAg
ICAgIC8vIG9mIHJlc2V0dGluZyBvdXIgc3RhdGUgd2hlbiB3ZSBnZXQgb3V0IG9mIHRoZQotICAg
ICAgICAgICAgLy8gc2luZ2xlLWxpbmUgY29tbWVudC4gU3dhbGxvdyBhbGwgb3RoZXIgY2hhcmFj
dGVycy4KLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgSW5NdWx0aUxpbmVDb21t
ZW50OgotICAgICAgICAgICAgaWYgKGMgPT0gJyonICYmIHBlZWsodGVtcCkgJiYgdGVtcCA9PSAn
LycpIHsKLSAgICAgICAgICAgICAgICBlbWl0KCcqJyk7Ci0gICAgICAgICAgICAgICAgZW1pdCgn
LycpOwotICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKLSAgICAg
ICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIC8vIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuIFVuY2xl
YXIgd2hldGhlciB3ZSBtYXkKLSAgICAgICAgICAgIC8vIHdhbnQgb3IgbmVlZCB0byBqdXN0IGVt
aXQgYSBzcGFjZSBwZXIgY2hhcmFjdGVyIHRvIHRyeQotICAgICAgICAgICAgLy8gdG8gcHJlc2Vy
dmUgY29sdW1uIG51bWJlcnMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCi0KLWNsYXNz
IFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjayA6IHB1YmxpYyBHcmFwaGljc0NvbnRl
eHQzRDo6Q29udGV4dExvc3RDYWxsYmFjayB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNr
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY2IpIDogbV9jb250ZXh0KGNiKSB7IH0KLSAgICB2aXJ0
dWFsIHZvaWQgb25Db250ZXh0TG9zdCgpIG92ZXJyaWRlIHsgbV9jb250ZXh0LT5mb3JjZUxvc3RD
b250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6UmVhbExvc3RDb250ZXh0KTsgfQotICAgIHZp
cnR1YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjaygpIHt9Ci1wcml2YXRlOgot
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OwotfTsKLQotY2xhc3MgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3NDb250
ZXh0M0Q6OkVycm9yTWVzc2FnZUNhbGxiYWNrIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3Nh
Z2VDYWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikgeyB9
Ci0gICAgdmlydHVhbCB2b2lkIG9uRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwg
R0MzRGludCkgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPm1fc3ludGhl
c2l6ZWRFcnJvcnNUb0NvbnNvbGUpCi0gICAgICAgICAgICBtX2NvbnRleHQtPnByaW50R0xFcnJv
clRvQ29uc29sZShtZXNzYWdlKTsKLSAgICB9Ci0gICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdD
b250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2soKSB7IH0KLXByaXZhdGU6Ci0gICAgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7Ci19OwotCi1zdGQ6OnVuaXF1ZV9wdHI8V2ViR0xSZW5k
ZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShIVE1MQ2FudmFzRWxl
bWVudCogY2FudmFzLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKiBhdHRycykKLXsKLSAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBjYW52YXMtPmRvY3VtZW50KCk7Ci0gICAgRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQuZnJhbWUoKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIC8vIFRoZSBGcmFtZUxvYWRlckNsaWVudCBtaWdodCBibG9jayBjcmVhdGlvbiBv
ZiBhIG5ldyBXZWJHTCBjb250ZXh0IGRlc3BpdGUgdGhlIHBhZ2Ugc2V0dGluZ3M7IGluCi0gICAg
Ly8gcGFydGljdWxhciwgaWYgV2ViR0wgY29udGV4dHMgd2VyZSBsb3N0IG9uZSBvciBtb3JlIHRp
bWVzIHZpYSB0aGUgR0xfQVJCX3JvYnVzdG5lc3MgZXh0ZW5zaW9uLgotICAgIGlmICghZnJhbWUt
PmxvYWRlcigpLmNsaWVudCgpLmFsbG93V2ViR0woZnJhbWUtPnNldHRpbmdzKCkud2ViR0xFbmFi
bGVkKCkpKSB7Ci0gICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsIGZh
bHNlLCB0cnVlLCAiV2ViIHBhZ2Ugd2FzIG5vdCBhbGxvd2VkIHRvIGNyZWF0ZSBhIFdlYkdMIGNv
bnRleHQuIikpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBib29sIGlz
UGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSBmYWxzZTsKLSAgICBEb2N1bWVudCYgdG9wRG9jdW1l
bnQgPSBkb2N1bWVudC50b3BEb2N1bWVudCgpOwotICAgIFBhZ2UqIHBhZ2UgPSB0b3BEb2N1bWVu
dC5wYWdlKCk7Ci0gICAgaWYgKHBhZ2UgJiYgIXRvcERvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxl
KCkpIHsKLSAgICAgICAgV2ViR0xMb2FkUG9saWN5IHBvbGljeSA9IHBhZ2UtPm1haW5GcmFtZSgp
LmxvYWRlcigpLmNsaWVudCgpLndlYkdMUG9saWN5Rm9yVVJMKHRvcERvY3VtZW50LnVybCgpKTsK
LQotICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMQmxvY2tDcmVhdGlvbikgewotICAgICAgICAg
ICAgTE9HKFdlYkdMLCAiVGhlIHBvbGljeSBmb3IgdGhpcyBVUkwgKCVzKSBpcyB0byBibG9jayBX
ZWJHTC4iLCB0b3BEb2N1bWVudC51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChwb2xpY3kgPT0g
V2ViR0xQZW5kaW5nQ3JlYXRpb24pIHsKLSAgICAgICAgICAgIExPRyhXZWJHTCwgIldlYkdMIHBv
bGljeSBpcyBwZW5kaW5nLiBNYXkgbmVlZCB0byBiZSByZXNvbHZlZCBsYXRlci4iKTsKLSAgICAg
ICAgICAgIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSB0cnVlOwotICAgICAgICB9Ci0gICAg
fQotCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGF0dHJz
ID8gYXR0cnMtPmF0dHJpYnV0ZXMoKSA6IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzKCk7
Ci0KLSAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKLSAgICAgICAgaWYgKCFmcmFtZS0+
c2V0dGluZ3MoKS5vcGVuR0xNdWx0aXNhbXBsaW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgYXR0
cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICBhdHRyaWJ1dGVzLm5vRXh0
ZW5zaW9ucyA9IHRydWU7Ci0gICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNlOwot
ICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3JldGVHUFUgPSB0cnVlOwotCi0gICAgaWYgKGZyYW1l
LT5zZXR0aW5ncygpLmZvcmNlU29mdHdhcmVXZWJHTFJlbmRlcmluZygpKQotICAgICAgICBhdHRy
aWJ1dGVzLmZvcmNlU29mdHdhcmVSZW5kZXJlciA9IHRydWU7Ci0KLSAgICBpZiAocGFnZSkKLSAg
ICAgICAgYXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvID0gcGFnZS0+ZGV2aWNlU2NhbGVGYWN0
b3IoKTsKLQotICAgIGlmIChpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7Ci0gICAgICAgIExP
RyhXZWJHTCwgIkNyZWF0ZSBhIFdlYkdMIGNvbnRleHQgdGhhdCBsb29rcyByZWFsLCBidXQgd2ls
bCByZXF1aXJlIGEgcG9saWN5IHJlc29sdXRpb24gaWYgdXNlZC4iKTsKLSAgICAgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgYXR0cmlidXRlcykpOwotICAgICAgICByZW5kZXJp
bmdDb250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLSAgICAgICAgcmV0dXJuIHJlbmRlcmluZ0Nv
bnRleHQ7Ci0gICAgfQotCi0gICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRvY3VtZW50LnZp
ZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCk7Ci0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdpbmRv
dykpOwotCi0gICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KSkgewotICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxzZSwg
dHJ1ZSwgIkNvdWxkIG5vdCBjcmVhdGUgYSBXZWJHTCBjb250ZXh0LiIpKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwotICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygiR0xf
RVhUX2RlYnVnX21hcmtlciIpKQotICAgICAgICBleHRlbnNpb25zLT5wdXNoR3JvdXBNYXJrZXJF
WFQoIldlYkdMUmVuZGVyaW5nQ29udGV4dCIpOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdM
UmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcgV2ViR0xSZW5kZXJpbmdDb250
ZXh0KGNhbnZhcywgY29udGV4dCwgYXR0cmlidXRlcykpOwotICAgIHJlbmRlcmluZ0NvbnRleHQt
PnN1c3BlbmRJZk5lZWRlZCgpOwotCi0gICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7Ci19Ci0K
LVdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNF
bGVtZW50KiBwYXNzZWRDYW52YXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJp
YnV0ZXMpCi0gICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKLSAgICAs
IEFjdGl2ZURPTU9iamVjdCgmcGFzc2VkQ2FudmFzLT5kb2N1bWVudCgpKQotICAgICwgbV9jb250
ZXh0KDApCi0gICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKLSAgICAsIG1fZGlzcGF0Y2hDb250ZXh0
TG9zdEV2ZW50VGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc3BhdGNoQ29u
dGV4dExvc3RFdmVudCkKLSAgICAsIG1fcmVzdG9yZUFsbG93ZWQoZmFsc2UpCi0gICAgLCBtX3Jl
c3RvcmVUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3JlQ29u
dGV4dCkKLSAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSgwKQotICAgICwgbV9jb250ZXh0TG9z
dChmYWxzZSkKLSAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0KQot
ICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCi0gICAgLCBtX3N5bnRoZXNpemVkRXJyb3Jz
VG9Db25zb2xlKHRydWUpCi0gICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZChtYXhH
TEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCi0gICAgLCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRp
b24odHJ1ZSkKLSAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxzZSkKLXsK
LX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENh
bnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCwKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzKQot
ICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCi0gICAgLCBBY3RpdmVE
T01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKLSAgICAsIG1fY29udGV4dChjb250
ZXh0KQotICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCi0gICAgLCBtX2Rpc3BhdGNoQ29udGV4dExv
c3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENvbnRl
eHRMb3N0RXZlbnQpCi0gICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQotICAgICwgbV9yZXN0
b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNvbnRl
eHQpCi0gICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoNCkKLSAgICAsIG1fY29udGV4dExvc3Qo
ZmFsc2UpCi0gICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4dCkKLSAg
ICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICwgbV9zeW50aGVzaXplZEVycm9yc1Rv
Q29uc29sZSh0cnVlKQotICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQobWF4R0xF
cnJvcnNBbGxvd2VkVG9Db25zb2xlKQotICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
KGZhbHNlKQotICAgICwgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uKGZhbHNlKQotewot
ICAgIEFTU0VSVChtX2NvbnRleHQpOwotICAgIG1fY29udGV4dEdyb3VwID0gV2ViR0xDb250ZXh0
R3JvdXA6OmNyZWF0ZSgpOwotICAgIG1fY29udGV4dEdyb3VwLT5hZGRDb250ZXh0KHRoaXMpOwot
Ci0gICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdwb3J0RGltc1sxXSA9IDA7Ci0g
ICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JU
X0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotCi0gICAgc2V0dXBGbGFncygpOwotICAg
IGluaXRpYWxpemVOZXdDb250ZXh0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCi17Ci0gICAgQVNTRVJUKCFtX2NvbnRleHRMb3N0KTsK
LSAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsKLSAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFs
c2U7Ci0gICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IDA7Ci0gICAgbV9wYWNrQWxpZ25tZW50ID0g
NDsKLSAgICBtX3VucGFja0FsaWdubWVudCA9IDQ7Ci0gICAgbV91bnBhY2tGbGlwWSA9IGZhbHNl
OwotICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlOwotICAgIG1fdW5wYWNrQ29s
b3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dF
QkdMOwotICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7Ci0gICAgbV9jdXJyZW50UHJvZ3JhbSA9
IDA7Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwotICAgIG1fcmVuZGVyYnVmZmVyQmlu
ZGluZyA9IDA7Ci0gICAgbV9kZXB0aE1hc2sgPSB0cnVlOwotICAgIG1fc3RlbmNpbEVuYWJsZWQg
PSBmYWxzZTsKLSAgICBtX3N0ZW5jaWxNYXNrID0gMHhGRkZGRkZGRjsKLSAgICBtX3N0ZW5jaWxN
YXNrQmFjayA9IDB4RkZGRkZGRkY7Ci0gICAgbV9zdGVuY2lsRnVuY1JlZiA9IDA7Ci0gICAgbV9z
dGVuY2lsRnVuY1JlZkJhY2sgPSAwOwotICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gMHhGRkZGRkZG
RjsKLSAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSAweEZGRkZGRkZGOwotICAgIG1fbGF5ZXJD
bGVhcmVkID0gZmFsc2U7Ci0gICAgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQgPSBtYXhH
TEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7Ci0gICAgCi0gICAgbV9jbGVhckNvbG9yWzBdID0gbV9j
bGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9yWzJdID0gbV9jbGVhckNvbG9yWzNdID0gMDsKLSAg
ICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgbV9jbGVhckRlcHRoID0gMTsKLSAgICBt
X2NsZWFyU3RlbmNpbCA9IDA7Ci0gICAgbV9jb2xvck1hc2tbMF0gPSBtX2NvbG9yTWFza1sxXSA9
IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1hc2tbM10gPSB0cnVlOwotCi0gICAgR0MzRGludCBu
dW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywg
Jm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgIG1fdGV4dHVyZVVuaXRzLmNsZWFy
KCk7Ci0gICAgbV90ZXh0dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5p
dHMpOwotCi0gICAgR0MzRGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKLSAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZudW1W
ZXJ0ZXhBdHRyaWJzKTsKLSAgICBtX21heFZlcnRleEF0dHJpYnMgPSBudW1WZXJ0ZXhBdHRyaWJz
OwotICAgIAotICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50
ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1cmVT
aXplKTsKLSAgICBtX21heFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxldmVs
Q291bnQobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSk7Ci0gICAgbV9tYXhDdWJl
TWFwVGV4dHVyZVNpemUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtX21heEN1YmVNYXBUZXh0dXJl
U2l6ZSk7Ci0gICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21w
dXRlTGV2ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSwgbV9tYXhDdWJlTWFwVGV4dHVy
ZVNpemUpOwotICAgIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFLCAmbV9t
YXhSZW5kZXJidWZmZXJTaXplKTsKLQotICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJvbSBFWFRf
ZHJhd19idWZmZXJzIGFyZSBsYXppbHkgcXVlcmllZC4KLSAgICBtX21heERyYXdCdWZmZXJzID0g
MDsKLSAgICBtX21heENvbG9yQXR0YWNobWVudHMgPSAwOwotCi0gICAgbV9iYWNrRHJhd0J1ZmZl
ciA9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOwotICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVp
cmVtZW50c0NoZWNrZWQgPSBmYWxzZTsKLSAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gZmFs
c2U7Ci0KLSAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM6OmNyZWF0ZSh0aGlzLCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWYW9UeXBl
RGVmYXVsdCk7Ci0gICAgYWRkQ29udGV4dE9iamVjdChtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVj
dC5nZXQoKSk7Ci0gICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVydGV4
QXJyYXlPYmplY3Q7Ci0gICAgCi0gICAgbV92ZXJ0ZXhBdHRyaWJWYWx1ZS5yZXNpemUobV9tYXhW
ZXJ0ZXhBdHRyaWJzKTsKLQotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAg
Y3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7Ci0gICAgaWYgKCFpc0dMRVMyQ29tcGxp
YW50KCkpCi0gICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7Ci0KLSAgICBJbnRTaXplIGNhbnZh
c1NpemUgPSBjbGFtcGVkQ2FudmFzU2l6ZSgpOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoY2FudmFzU2l6ZSk7Ci0KLSAgICBtX2NvbnRl
eHQtPnJlc2hhcGUoY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKLSAg
ICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6
ZS5oZWlnaHQoKSk7Ci0gICAgbV9jb250ZXh0LT5zY2lzc29yKDAsIDAsIGNhbnZhc1NpemUud2lk
dGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBtX2NvbnRleHQtPnNldENvbnRleHRM
b3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2Fs
bGJhY2s+KHRoaXMpKTsKLSAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNrKHN0
ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2s+
KHRoaXMpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldHVwRmxhZ3MoKQot
ewotICAgIEFTU0VSVChtX2NvbnRleHQpOwotCi0gICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMo
KS0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0NvbnNv
bGUgPSBwYWdlLT5zZXR0aW5ncygpLndlYkdMRXJyb3JzVG9Db25zb2xlRW5hYmxlZCgpOwotCi0g
ICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5pc0dMRVMyQ29tcGxpYW50KCk7Ci0g
ICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzID0gbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fc3RyaWN0X2F0dHJpYnMiKTsK
LSAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5h
YmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOwotICAgIGlmIChtX2lzR0xFUzJDb21w
bGlhbnQpIHsKLSAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7Ci0gICAgICAgIG1f
aXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNF
bmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICB9IGVsc2UgewotICAg
ICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5p
c0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28iKTsKLSAgICAgICAgbV9p
c0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0Vu
YWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOwotICAgIH0KLSAgICBtX2lzUm9i
dXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJs
ZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjphbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3QKLXsKLSAgICBpZiAoUGFnZSogcGFn
ZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKLSAgICAgICAgcmV0dXJuIHBhZ2UtPnNl
dHRpbmdzKCkucHJpdmlsZWdlZFdlYkdMRXh0ZW5zaW9uc0VuYWJsZWQoKTsKLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb21wcmVzc2VkVGV4
dHVyZUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCi17Ci0gICAgaWYgKCFtX2NvbXByZXNzZWRUZXh0
dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpKQotICAgICAgICBtX2NvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0cy5hcHBlbmQoZm9ybWF0KTsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp+V2Vi
R0xSZW5kZXJpbmdDb250ZXh0KCkKLXsKLSAgICAvLyBSZW1vdmUgYWxsIHJlZmVyZW5jZXMgdG8g
V2ViR0xPYmplY3RzIHNvIGlmIHRoZXkgYXJlIHRoZSBsYXN0IHJlZmVyZW5jZQotICAgIC8vIHRo
ZXkgd2lsbCBiZSBmcmVlZCBiZWZvcmUgdGhlIGxhc3QgY29udGV4dCBpcyByZW1vdmVkIGZyb20g
dGhlIGNvbnRleHQgZ3JvdXAuCi0gICAgbV9ib3VuZEFycmF5QnVmZmVyID0gbnVsbHB0cjsKLSAg
ICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7Ci0gICAgbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0ID0gbnVsbHB0cjsKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBudWxs
cHRyOwotICAgIG1fY3VycmVudFByb2dyYW0gPSBudWxscHRyOwotICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nID0gbnVsbHB0cjsKLSAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSBudWxscHRyOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraSkg
ewotICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nID0gbnVsbHB0cjsK
LSAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBtX2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKLSAgICBtX2JsYWNr
VGV4dHVyZUN1YmVNYXAgPSBudWxscHRyOwotCi0gICAgaWYgKCFtX2lzUGVuZGluZ1BvbGljeVJl
c29sdXRpb24pIHsKLSAgICAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOwotICAgICAg
ICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKLSAgICAgICAgbV9jb250ZXh0R3JvdXAtPnJl
bW92ZUNvbnRleHQodGhpcyk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xp
Y3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGUgZHJhd2luZyBidWZm
ZXIgaG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3llZAot
ICAgIC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KLSAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKLQotICAg
IGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0TG9zdENhbGxi
YWNrKG51bGxwdHIpOwotICAgICAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNr
KG51bGxwdHIpOwotICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKLSAgICB9Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQoKQotewotICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT5t
YXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+bWFya0NvbnRlbnRzQ2hhbmdlZCgpOwotCi0gICAgbV9sYXllckNs
ZWFyZWQgPSBmYWxzZTsKLSAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygpLT5yZW5k
ZXJCb3goKTsKLSAgICBpZiAoaXNBY2NlbGVyYXRlZCgpICYmIHJlbmRlckJveCAmJiByZW5kZXJC
b3gtPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgewotICAgICAgICBtX21hcmtlZENhbnZh
c0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKLSAg
ICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKLSAgICB9IGVs
c2UgewotICAgICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkpIHsKLSAgICAgICAgICAgIG1f
bWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOwotICAgICAgICAgICAgY2FudmFzKCktPmRpZERyYXco
RmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGNsYW1wZWRDYW52YXNTaXplKCkpKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFySWZDb21w
b3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghbV9jb250ZXh0LT5sYXll
ckNvbXBvc2l0ZWQoKSB8fCBtX2xheWVyQ2xlYXJlZAotICAgICAgICB8fCBtX2F0dHJpYnV0ZXMu
cHJlc2VydmVEcmF3aW5nQnVmZmVyIHx8IChtYXNrICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0
ZXM+IGNvbnRleHRBdHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIC8v
IERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1c2Vy
IGFza2VkIGZvciBhbmQgdGhpcyBjbGVhci4KLSAgICBib29sIGNvbWJpbmVkQ2xlYXIgPSBtYXNr
ICYmICFtX3NjaXNzb3JFbmFibGVkOwotCi0gICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotICAgIGlmIChjb21iaW5lZENsZWFyICYmIChtYXNr
ICYgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQotICAgICAgICBtX2NvbnRl
eHQtPmNsZWFyQ29sb3IobV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFyQ29sb3Jb
MV0gOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMl0gPyBt
X2NsZWFyQ29sb3JbMl0gOiAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xv
ck1hc2tbM10gPyBtX2NsZWFyQ29sb3JbM10gOiAwKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY29u
dGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKLSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayh0
cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKLSAgICBHQzNEYml0ZmllbGQgY2xlYXJNYXNrID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7Ci0gICAgaWYgKGNvbnRleHRBdHRyaWJ1
dGVzLT5kZXB0aCgpKSB7Ci0gICAgICAgIGlmICghY29tYmluZWRDbGVhciB8fCAhbV9kZXB0aE1h
c2sgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpKQotICAg
ICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEuMGYpOwotICAgICAgICBjbGVhck1hc2sg
fD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7Ci0gICAgICAgIG1fY29udGV4
dC0+ZGVwdGhNYXNrKHRydWUpOwotICAgIH0KLSAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPnN0
ZW5jaWwoKSkgewotICAgICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKQotICAgICAgICAgICAgbV9jb250ZXh0LT5j
bGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwgJiBtX3N0ZW5jaWxNYXNrKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7Ci0gICAgICAgIGNsZWFy
TWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOwotICAgICAgICBt
X2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05ULCAw
eEZGRkZGRkZGKTsKLSAgICB9Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5jbGVhckZyYW1lYnVmZmVycyhjbGVhck1hc2spOwotICAgIGVsc2Ugewot
ICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQt
PmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwotICAg
ICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7Ci0gICAgfQotCi0gICAgcmVzdG9yZVN0
YXRlQWZ0ZXJDbGVhcigpOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAg
bV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICBtX2xheWVy
Q2xlYXJlZCA9IHRydWU7Ci0KLSAgICByZXR1cm4gY29tYmluZWRDbGVhcjsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKQotewotICAgIC8v
IFJlc3RvcmUgdGhlIHN0YXRlIHRoYXQgdGhlIGNvbnRleHQgc2V0LgotICAgIGlmIChtX3NjaXNz
b3JFbmFibGVkKQotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6
U0NJU1NPUl9URVNUKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jbGVhckNvbG9yWzBd
LCBtX2NsZWFyQ29sb3JbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xlYXJDb2xv
clsyXSwgbV9jbGVhckNvbG9yWzNdKTsKLSAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhtX2NvbG9y
TWFza1swXSwgbV9jb2xvck1hc2tbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xv
ck1hc2tbMl0sIG1fY29sb3JNYXNrWzNdKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgobV9j
bGVhckRlcHRoKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNpbCk7
Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVCwgbV9zdGVuY2lsTWFzayk7Ci0gICAgbV9jb250ZXh0LT5kZXB0aE1hc2sobV9kZXB0aE1h
c2spOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0xheWVyQ29tcG9zaXRl
ZCgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChjYW52YXMoKS0+ZG9jdW1lbnQoKS5wcmludGluZygpKQotICAgICAgICBjYW52YXMoKS0+Y2xl
YXJQcmVzZW50YXRpb25Db3B5KCk7Ci0KLSAgICAvLyBVbnRpbCB0aGUgY2FudmFzIGlzIHdyaXR0
ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAotICAgIC8vIGhhcHBlbmVk
IGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBjb21wb3Np
dG9yLgotICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpICYmICFtX2F0dHJpYnV0
ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fY29udGV4dC0+cGFpbnRDb21w
b3NpdGVkUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSk7Ci0KLSAgICAgICAgY2Fu
dmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGNhbnZh
cygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwot
Ci0gICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5ICYmICFtX2xheWVyQ2xlYXJlZCkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKLSAgICBtX21h
cmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwotICAgIG1fY29udGV4dC0+cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9DYW52YXMoY2FudmFzKCktPmJ1ZmZlcigpLCBtX2RyYXdpbmdCdWZmZXIu
Z2V0KCkpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVy
QmluZGluZy5nZXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmJpbmQoKTsKLSAgICB9Ci19Ci0KLVBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBjbGVhcklmQ29tcG9zaXRlZCgpOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VE
YXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShtX2RyYXdp
bmdCdWZmZXIuZ2V0KCkpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2Zy
YW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX2Ry
YXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gaW1hZ2VEYXRhOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWln
aHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGJlY2F1c2UgYXQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IGxldmVsIHdlIGRvbid0Ci0gICAgLy8ga25vdyBpZiB0aGUgdW5kZXJseWlu
ZyBGQk8gdXNlcyB0ZXh0dXJlcyBvciByZW5kZXJidWZmZXJzLgotICAgIEdDM0RpbnQgbWF4U2l6
ZSA9IHN0ZDo6bWluKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7Ci0g
ICAgLy8gTGltaXQgZHJhd2luZyBidWZmZXIgc2l6ZSB0byA0ayB0byBhdm9pZCBtZW1vcnkgZXho
YXVzdGlvbi4KLSAgICBjb25zdCBpbnQgc2l6ZVVwcGVyTGltaXQgPSA0MDk2OwotICAgIG1heFNp
emUgPSBzdGQ6Om1pbihtYXhTaXplLCBzaXplVXBwZXJMaW1pdCk7Ci0gICAgR0MzRGludCBtYXhX
aWR0aCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzBdKTsKLSAgICBHQzNE
aW50IG1heEhlaWdodCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzFdKTsK
LSAgICB3aWR0aCA9IGNsYW1wKHdpZHRoLCAxLCBtYXhXaWR0aCk7Ci0gICAgaGVpZ2h0ID0gY2xh
bXAoaGVpZ2h0LCAxLCBtYXhIZWlnaHQpOwotCi0gICAgaWYgKG1fbmVlZHNVcGRhdGUpIHsKLSAg
ICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7Ci0gICAg
ICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
KCkpCi0gICAgICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0NoYW5nZWQp
OwotICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gV2UgZG9u
J3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHksIHNpbmNlIHRoZSBuZXdseSBjcmVh
dGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2ZmCi0gICAgLy8gY2xlYXIgKGFuZCB0
aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgotICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpIHsKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdpZHRoLCBoZWln
aHQpKTsKLSAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOwotICAgIH0gZWxzZQotICAg
ICAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7Ci0KLSAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclplcm8o
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQo
KSkpOwotICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBvYmplY3RPclplcm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgpKSk7
Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgbV9jb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9m
cmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLX0KLQotaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKLXsKLSAgICBpZiAobV9kcmF3aW5nQnVmZmVy
KQotICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsKLQotICAg
IHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgoKTsK
LX0KLQotaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNv
bnN0Ci17Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgcmV0dXJuIG1fZHJhd2lu
Z0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKLX0KLQotdW5zaWduZWQgaW50IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkKLXsKLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgotICAgICAgICBy
ZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1Ynl0ZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRHNob3J0
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAg
cmV0dXJuIHNpemVvZihHQzNEdXNob3J0KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlQ6Ci0gICAgICAgIHJldHVybiBzaXplb2YoR0MzRGludCk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1aW50KTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKLSAgICAgICAgcmV0dXJuIHNpemVv
ZihHQzNEZmxvYXQpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gMDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUoR0Mz
RGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0dXJl
VW5pdHMuc2l6ZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJhY3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQgb2Yg
cmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2FjdGl2ZVRleHR1cmVVbml0
ID0gdGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMDsKLSAgICBtX2NvbnRleHQt
PmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQotICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEFjdGl2ZVRleHR1cmVVbml0KHRleHR1cmUpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSog
cHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRhdGVX
ZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNoYWRlcikpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYXR0YWNoU2hh
ZGVyIiwgInNoYWRlciBhdHRhY2htZW50IGFscmVhZHkgaGFzIHNoYWRlciIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhw
cm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOwotICAgIHNoYWRlci0+b25BdHRhY2hlZCgp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJpYkxvY2F0aW9uKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5kQXR0cmli
TG9jYXRpb24iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVM
b2NhdGlvbkxlbmd0aCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1lKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
YmluZEF0dHJpYkxvY2F0aW9uIiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgaW5kZXgsIG5hbWUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Y2hlY2tPYmplY3RUb0JlQm91bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9i
amVjdCogb2JqZWN0LCBib29sJiBkZWxldGVkKQotewotICAgIGRlbGV0ZWQgPSBmYWxzZTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKG9iamVjdCkgewotICAgICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdy
b3VwKCksIHRoaXMpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBub3QgZnJv
bSB0aGlzIGNvbnRleHQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgICAgICBkZWxldGVkID0gIW9iamVjdC0+b2JqZWN0KCk7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmpl
Y3RUb0JlQm91bmQoImJpbmRCdWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIGJ1ZmZlciA9IDA7Ci0gICAgaWYgKGJ1ZmZl
ciAmJiBidWZmZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImJpbmRCdWZmZXIiLCAiYnVmZmVycyBjYW4gbm90IGJlIHVzZWQgd2l0aCBt
dWx0aXBsZSB0YXJnZXRzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRhcmdl
dCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKQotICAgICAgICBtX2JvdW5kQXJy
YXlCdWZmZXIgPSBidWZmZXI7Ci0gICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKLSAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2Jq
ZWN0LT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKLSAgICBlbHNlIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRC
dWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKLSAg
ICBpZiAoYnVmZmVyKQotICAgICAgICBidWZmZXItPnNldFRhcmdldCh0YXJnZXQpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAoIWNoZWNrT2JqZWN0
VG9CZUJvdW5kKCJiaW5kRnJhbWVidWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKGRlbGV0ZWQpCi0gICAgICAgIGJ1ZmZlciA9IDA7Ci0gICAgaWYgKHRh
cmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRGcmFtZWJ1
ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
ZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOwotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0g
ICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKG9iamVjdE9yWmVy
byhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAgIC8vIEluc3RlYWQgb2YgYmluZGlu
ZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4KLSAgICAgICAgbV9kcmF3aW5nQnVmZmVy
LT5iaW5kKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVy
KHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOwotICAgIGlmIChidWZmZXIpCi0gICAgICAg
IGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwotICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBp
ZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kUmVuZGVyYnVmZmVyIiwgcmVuZGVyQnVmZmVy
LCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBy
ZW5kZXJCdWZmZXIgPSAwOwotICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IHJlbmRl
ckJ1ZmZlcjsKLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBvYmplY3RP
clplcm8ocmVuZGVyQnVmZmVyKSk7Ci0gICAgaWYgKHJlbmRlckJ1ZmZlcikKLSAgICAgICAgcmVu
ZGVyQnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4
dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBi
b29sIGRlbGV0ZWQ7Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFRleHR1cmUi
LCB0ZXh0dXJlLCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQot
ICAgICAgICB0ZXh0dXJlID0gMDsKLSAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRUYXJn
ZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmluZFRl
eHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdDM0RpbnQgbWF4TGV2ZWwgPSAwOwotICAg
IGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKLSAgICAgICAg
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZyA9IHRl
eHR1cmU7Ci0gICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0dXJlTGV2ZWw7Ci0KLSAgICAgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlciAmJiAhbV9hY3RpdmVUZXh0dXJlVW5pdCkKLSAgICAgICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZyhvYmplY3RPclplcm8odGV4dHVy
ZSkpOwotCi0gICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVApIHsKLSAgICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gdGV4dHVyZTsKLSAgICAgICAgbWF4TGV2ZWwgPSBt
X21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRUZXh0dXJlIiwg
ImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZSh0YXJnZXQsIG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7Ci0gICAgaWYgKHRl
eHR1cmUpCi0gICAgICAgIHRleHR1cmUtPnNldFRhcmdldCh0YXJnZXQsIG1heExldmVsKTsKLQot
ICAgIC8vIE5vdGU6IHByZXZpb3VzbHkgd2UgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNldCB0aGUg
VEVYVFVSRV9XUkFQX1IKLSAgICAvLyByZXBlYXQgbW9kZSB0byBDTEFNUF9UT19FREdFIGZvciBj
dWJlIG1hcCB0ZXh0dXJlcywgYmVjYXVzZSBPcGVuR0wKLSAgICAvLyBFUyAyLjAgZG9lc24ndCBl
eHBvc2UgdGhpcyBmbGFnIChhIGJ1ZyBpbiB0aGUgc3BlY2lmaWNhdGlvbikgYW5kCi0gICAgLy8g
b3RoZXJ3aXNlIHRoZSBhcHBsaWNhdGlvbiBoYXMgbm8gY29udHJvbCBvdmVyIHRoZSBzZWFtcyBp
biB0aGlzCi0gICAgLy8gZGltZW5zaW9uLiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQgc3VwcG9y
dGluZyB0aGlzIHByb3Blcmx5IG9uIGFsbAotICAgIC8vIHBsYXRmb3JtcyBpcyBmYWlybHkgaW52
b2x2ZWQgKHdpbGwgcmVxdWlyZSBhIEhhc2hNYXAgZnJvbSB0ZXh0dXJlIElECi0gICAgLy8gaW4g
YWxsIHBvcnRzKSwgYW5kIHdlIGhhdmUgbm90IGhhZCBhbnkgY29tcGxhaW50cywgc28gdGhlIGxv
Z2ljIGhhcwotICAgIC8vIGJlZW4gcmVtb3ZlZC4KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxv
YXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kQ29sb3IocmVkLCBn
cmVlbiwgYmx1ZSwgYWxwaGEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Ymxl
bmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGUpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1vZGUpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0Rl
bnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBt
b2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9kZUFs
cGhhKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvblNlcGFy
YXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9y
cygiYmxlbmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVu
dW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCi17Ci0gICAg
Ly8gTm90ZTogQWxwaGEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMgUkdC
LgotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5j
RmFjdG9ycygiYmxlbmRGdW5jIiwgc3JjUkdCLCBkc3RSR0IpKQotICAgICAgICByZXR1cm47Ci0g
ICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxwaGEs
IGRzdEFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEo
R0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIg
PSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2Fn
ZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoc2l6ZSA8IDAp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzaXplID09IDAiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShz
dGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpKSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwg
ImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAg
IG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4o
c2l6ZSksIHVzYWdlKTsKLSAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNF
cnJvckxpc3QoKSkgewotICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBmYWlsZWQu
IFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0IGRv
ZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOwotICAgIH0KLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1
ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7Ci0gICAgaWYg
KCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJE
YXRhIiwgIm5vIGRhdGEiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzRXJy
b3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZl
ci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgImlu
dmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAgIG1f
Y29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+ZGF0
YSgpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJy
b3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBU
ZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2Vz
LgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKLSAgICB9Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwg
QXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRl
QnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKLSAgICBp
ZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghZGF0YSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZl
ckRhdGEiLCAibm8gZGF0YSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghaXNF
cnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIGlmICghYnVm
ZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAi
aW52YWxpZCBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAg
bV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5i
YXNlQWRkcmVzcygpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3lu
dGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24g
ZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5r
cyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKLSAg
ICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBidWZmZXIg
PSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0LCBH
cmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwotICAgIGlmICghYnVmZmVyKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKG9mZnNldCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9m
ZnNldCA8IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWRhdGEpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNz
ZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShzdGF0
aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgewotICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJE
YXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8
R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5kYXRhKCkpOwot
ICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0g
ICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVm
ZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KLSAgICAgICAg
YnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9u
ZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVy
RGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEFUSUNfRFJBVyk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAob2Zmc2V0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAg
IGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0RpbnRw
dHI+KG9mZnNldCksIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91
dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKLSAgICBtX2Nv
bnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZz
ZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAgIGlmICht
X2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8v
IFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRv
ZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KLSAgICAgICAgYnVmZmVyLT5k
aXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAgfQotfQotCi1HQzNEZW51bSBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgaWYgKHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJTdGF0
dXMiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlm
ICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3Qo
KSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVU
RTsKLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0g
ICAgR0MzRGVudW0gcmVzdWx0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmNoZWNrU3RhdHVzKCZy
ZWFzb24pOwotICAgIGlmIChyZXN1bHQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFKSB7Ci0gICAgICAgIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKCJjaGVja0ZyYW1l
YnVmZmVyU3RhdHVzIiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0g
ICAgcmVzdWx0ID0gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFy
KEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBpZiAobWFzayAmIH4oR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXIiLCAiaW52
YWxpZCBtYXNrIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVh
c29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNE
KCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJj
bGVhciIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFjbGVhcklm
Q29tcG9zaXRlZChtYXNrKSkKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKLSAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNEZmxvYXQgYiwgR0MzRGZsb2F0
IGEpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGlmIChzdGQ6OmlzbmFuKHIpKQotICAgICAgICByID0gMDsKLSAgICBpZiAoc3RkOjpp
c25hbihnKSkKLSAgICAgICAgZyA9IDA7Ci0gICAgaWYgKHN0ZDo6aXNuYW4oYikpCi0gICAgICAg
IGIgPSAwOwotICAgIGlmIChzdGQ6OmlzbmFuKGEpKQotICAgICAgICBhID0gMTsKLSAgICBtX2Ns
ZWFyQ29sb3JbMF0gPSByOwotICAgIG1fY2xlYXJDb2xvclsxXSA9IGc7Ci0gICAgbV9jbGVhckNv
bG9yWzJdID0gYjsKLSAgICBtX2NsZWFyQ29sb3JbM10gPSBhOwotICAgIG1fY29udGV4dC0+Y2xl
YXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyRGVwdGgoR0MzRGZsb2F0IGRlcHRoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NsZWFyRGVwdGggPSBkZXB0aDsKLSAgICBt
X2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jbGVhclN0ZW5jaWwgPSBzOwotICAg
IG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Ri
b29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbG9yTWFza1swXSA9IHJlZDsK
LSAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOwotICAgIG1fY29sb3JNYXNrWzJdID0gYmx1ZTsK
LSAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOwotICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHJl
ZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVyIiwgc2hhZGVyKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihvYmplY3RPclplcm8oc2hh
ZGVyKSk7Ci0gICAgR0MzRGludCB2YWx1ZTsKLSAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2KG9i
amVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMsICZ2
YWx1ZSk7Ci0gICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyogZGF0YSkKLXsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxp
ZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQo
aW50ZXJuYWxmb3JtYXQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJpbnZhbGlkIGlu
dGVybmFsZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGJvcmRlcikg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBub3QgMCIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucygi
Y29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBpbnRl
cm5hbGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3Nl
ZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGludGVy
bmFsZm9ybWF0LCBkYXRhKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2ViR0xUZXh0dXJlKiB0
ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRhcmdl
dCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpIHsKLSAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNO
UE9UKHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImxl
dmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgfQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7
Ci0gICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgYm9yZGVyLCBkYXRhLT5ieXRlTGVu
Z3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8vIFRoZSBjb21wcmVzc2VkVGV4
SW1hZ2UyRCBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIFdlYkdMVGV4dHVyZSBpdCBkb2Vzbid0
IGhhdmUgdGhlIGRhdGEgZm9yIHRoaXMgbGV2ZWwuCi0gICAgICAgIHRleC0+bWFya0ludmFsaWQo
dGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICB0ZXgtPnNldExl
dmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgIHRleC0+c2V0Q29tcHJlc3NlZCgp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleFN1YkltYWdl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJj
b21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQotICAgICAgICByZXR1cm47
Ci0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoZm9ybWF0KSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY29t
cHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVz
c2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YSkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGlu
ZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmICghdGV4
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZm9ybWF0ICE9IHRleC0+Z2V0SW50ZXJuYWxG
b3JtYXQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQi
LCAiZm9ybWF0IGRvZXMgbm90IG1hdGNoIHRleHR1cmUgZm9ybWF0Iik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMo
ImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0ZXgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBn
cmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBk
YXRhLT5iYXNlQWRkcmVzcygpKTsKLSAgICB0ZXgtPnNldENvbXByZXNzZWQoKTsKLX0KLQotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQpCi17Ci0gICAgaWYgKEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUZvcm1hdChmb3JtYXQpICYgKEdyYXBoaWNzQ29udGV4
dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVS
X0JJVCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgY2FuIG5vdCBiZSBzZXQsIG9u
bHkgcmVuZGVyZWQgdG8iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RpbnQgYm9yZGVyKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoImNvcHlU
ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVT
ZXR0YWJsZVRleEZvcm1hdCgiY29weVRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRp
bmcoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKLSAgICBpZiAoIXRleCkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmlu
YXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0
KCkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29tcGF0
aWJsZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzR0xFUzJO
UE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhlaWdo
dCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVi
dWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2Zy
YW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3Vy
Y2VTYWZlKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJE
IiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjbGVhcklmQ29tcG9zaXRl
ZCgpOwotICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7Ci0gICAgICAgIFNjb3BlZERyYXdpbmdC
dWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJp
bmRpbmcuZ2V0KCkpOwotICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJh
d2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICBH
QzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKLSAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRXaWR0
aCwgY2xpcHBlZEhlaWdodDsKLSAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgp
LCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQpKSB7
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAg
ICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7Ci0gICAgICAg
ICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBjbGlw
cGVkWCAtIHgsIGNsaXBwZWRZIC0geSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVp
Z2h0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2NvbnRl
eHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwotICAgIH0KLSAgICAvLyBGSVhNRTogaWYgdGhlIGZyYW1l
YnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4ZWN1
dGVkLgotICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwg
bGV2ZWwpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0
ZVRleHR1cmVCaW5kaW5nKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAg
aWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSgiY29weVRl
eFN1YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSB8fCAhdmFsaWRhdGVTaXplKCJjb3B5VGV4
U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gQmVm
b3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cgaGFw
cGVucyBmaXJzdC4KLSAgICBpZiAoeG9mZnNldCArIHdpZHRoIDwgMCB8fCB5b2Zmc2V0ICsgaGVp
Z2h0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleC0+Z2V0
V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdodCA+IHRleC0+Z2V0SGVpZ2h0
KHRhcmdldCwgbGV2ZWwpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAicmVjdGFuZ2xlIG91
dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKLSAgICBp
ZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoImNvcHlUZXhTdWJJbWFnZTJEIiwgaW50ZXJu
YWxmb3JtYXQpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0
Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZyYW1l
YnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCAiZnJh
bWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFj
Y2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCByZWFzb24pOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVz
b3VyY2VTYWZlKCkpIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIo
bV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAg
ICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwg
eW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR0Mz
RGludCBjbGlwcGVkWCwgY2xpcHBlZFk7Ci0gICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgs
IGNsaXBwZWRIZWlnaHQ7Ci0gICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwg
Z2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwg
JmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgewot
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJn
ZXQsIGxldmVsKTsKLSAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUgPSB0ZXgtPmdldFR5cGUodGFy
Z2V0LCBsZXZlbCk7Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQgY2hhcltd
PiB6ZXJvOwotICAgICAgICAgICAgaWYgKHdpZHRoICYmIGhlaWdodCkgewotICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBzaXplOwotICAgICAgICAgICAgICAgIEdDM0RlbnVtIGVycm9yID0g
bV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRoLCBo
ZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgMCk7Ci0gICAgICAgICAgICAgICAgaWYg
KGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAgICAgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJhZCBk
aW1lbnNpb25zIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgemVybyA9IHN0ZDo6bWFrZV91bmlxdWU8dW5zaWduZWQgY2hh
cltdPihzaXplKTsKLSAgICAgICAgICAgICAgICBpZiAoIXplcm8pIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtc2V0KHpl
cm8uZ2V0KCksIDAsIHNpemUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9jb250ZXh0
LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwgemVyby5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAoY2xpcHBl
ZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgewotICAgICAgICAgICAgICAgIFNjb3Bl
ZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRl
eFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCArIGNsaXBwZWRYIC0geCwgeW9mZnNl
dCArIGNsaXBwZWRZIC0geSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0KTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFNjb3BlZERyYXdp
bmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcuZ2V0KCkpOwotICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFJlZlB0cjxXZWJHTEJ1ZmZl
cj4gbyA9IFdlYkdMQnVmZmVyOjpjcmVhdGUodGhpcyk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8u
Z2V0KCkpOwotICAgIHJldHVybiBvOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFJl
ZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBvID0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKHRoaXMp
OwotICAgIGFkZENvbnRleHRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBh
c3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVRleHR1
cmUoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG8gPSBXZWJHTFRleHR1cmU6OmNy
ZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87
Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNy
ZWF0ZVByb2dyYW0oKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG8gPSBXZWJHTFBy
b2dyYW06OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAg
cmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBSZWZQdHI8V2ViR0xS
ZW5kZXJidWZmZXI+IG8gPSBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOwotICAgIGFk
ZFNoYXJlZE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxX
ZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0MzRGVudW0g
dHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNyZWF0ZVNoYWRlciIs
ICJpbnZhbGlkIHNoYWRlciB0eXBlIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0K
LQotICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hhZGVyOjpjcmVhdGUodGhpcywg
dHlwZSk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVybiBvOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKLXsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9jb250ZXh0LT5jdWxsRmFjZShtb2RlKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIW9iamVjdCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
ZGVsZXRlIiwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKG9iamVjdC0+b2JqZWN0KCkpCi0gICAg
ICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiBjb250ZXh0IGhlcmUgYmVjYXVzZSB3ZSB3YW50Ci0g
ICAgICAgIC8vIHRoaW5ncyBpbiB0aGlzIGNvbnRleHQgdW5ib3VuZC4KLSAgICAgICAgb2JqZWN0
LT5kZWxldGVPYmplY3QoZ3JhcGhpY3NDb250ZXh0M0QoKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIq
IGJ1ZmZlcikKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdChidWZmZXIpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCi0gICAgICAgIG1fYm91
bmRBcnJheUJ1ZmZlciA9IDA7Ci0KLSAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnVuYmlu
ZEJ1ZmZlcihidWZmZXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVsZXRl
RnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFk
ZWxldGVPYmplY3QoZnJhbWVidWZmZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGZyYW1l
YnVmZmVyID09IG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7Ci0gICAgICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nID0gMDsKLSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcoMCk7Ci0gICAgICAgICAgICAv
LyBIYXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGludGVy
bmFsIGZiby4KLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCi17Ci0gICAgZGVs
ZXRlT2JqZWN0KHByb2dyYW0pOwotICAgIC8vIFdlIGRvbid0IHJlc2V0IG1fY3VycmVudFByb2dy
YW0gdG8gMCBoZXJlIGJlY2F1c2UgdGhlIGRlbGV0aW9uIG9mIHRoZQotICAgIC8vIGN1cnJlbnQg
cHJvZ3JhbSBpcyBkZWxheWVkLgotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVs
ZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCi17Ci0gICAg
aWYgKCFkZWxldGVPYmplY3QocmVuZGVyYnVmZmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
IChyZW5kZXJidWZmZXIgPT0gbV9yZW5kZXJidWZmZXJCaW5kaW5nKQotICAgICAgICBtX3JlbmRl
cmJ1ZmZlckJpbmRpbmcgPSAwOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAg
ICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1
ZmZlcihyZW5kZXJidWZmZXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVs
ZXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCi17Ci0gICAgZGVsZXRlT2JqZWN0KHNoYWRl
cik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXJlKFdlYkdM
VGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdCh0ZXh0dXJlKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5pdHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5pdHNbaV0u
dGV4dHVyZTJEQmluZGluZykKLSAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmUy
REJpbmRpbmcgPSBudWxscHRyOwotICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1cmVVbml0
c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpCi0gICAgICAgICAgICBtX3RleHR1cmVVbml0c1tp
XS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOwotICAgIH0KLSAgICBpZiAobV9mcmFt
ZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVBdHRh
Y2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIodGV4dHVyZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5kZXB0
aEZ1bmMoZnVuYyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aE1hc2so
R0MzRGJvb2xlYW4gZmxhZykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9kZXB0aE1hc2sgPSBmbGFnOwotICAgIG1fY29udGV4dC0+
ZGVwdGhNYXNrKGZsYWcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVwdGhS
YW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoek5lYXIgPiB6RmFy
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFyIik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZhbGlkYXRlV2Vi
R0xPYmplY3QoImRldGFjaFNoYWRlciIsIHNoYWRlcikpCi0gICAgICAgIHJldHVybjsKLSAgICBp
ZiAoIXByb2dyYW0tPmRldGFjaFNoYWRlcihzaGFkZXIpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRldGFjaFNoYWRl
ciIsICJzaGFkZXIgbm90IGF0dGFjaGVkIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
bV9jb250ZXh0LT5kZXRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmplY3RPclpl
cm8oc2hhZGVyKSk7Ci0gICAgc2hhZGVyLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dDNEKCkp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZShHQzNEZW51bSBjYXAp
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmls
aXR5KCJkaXNhYmxlIiwgY2FwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgewotICAgICAgICBtX3N0ZW5jaWxFbmFibGVk
ID0gZmFsc2U7Ci0gICAgICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpIHsK
LSAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOwotICAgICAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKQotICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZCht
X3NjaXNzb3JFbmFibGVkKTsKLSAgICB9Ci0gICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
R0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYg
c3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGlu
ZGV4KTsKLSAgICBzdGF0ZS5lbmFibGVkID0gZmFsc2U7Ci0KLSAgICBpZiAoaW5kZXggPiAwIHx8
IGlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkoaW5kZXgpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGlu
dHB0ciBvZmZzZXQpCi17Ci0gICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZm
ZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOwot
ICAgIAotICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAob2Zmc2V0IDwgMCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgewotICAgICAgICAvLyBG
b3IgYW4gdW5zaWduZWQgaW50IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUgYnkgNCBm
b3IgYWxpZ25tZW50IHJlYXNvbnMuCi0gICAgICAgIGlmIChvZmZzZXQgJSA0KQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9m
ZnNldC4KLSAgICAgICAgb2Zmc2V0IC89IDQ7Ci0KLSAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBl
bGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDQ7Ci0gICAgICAgIGlmIChvZmZzZXQg
PiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUKSB7
Ci0gICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBzaG9ydCBhcnJheSwgb2Zmc2V0IG11c3QgYmUg
ZGl2aXNpYmxlIGJ5IDIgZm9yIGFsaWdubWVudCByZWFzb25zLgotICAgICAgICBpZiAob2Zmc2V0
ICUgMikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBNYWtlIHVvZmZz
ZXQgYW4gZWxlbWVudCBvZmZzZXQuCi0gICAgICAgIG9mZnNldCAvPSAyOwotCi0gICAgICAgIEdD
M0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyAyOwotICAg
ICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFKSB7Ci0gICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVm
ZmVyLT5ieXRlTGVuZ3RoKCk7Ci0gICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAt
IG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJyYXlD
b25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWlyZWQp
Ci17Ci0gICAgLy8gUGVyZm9ybXMgY29uc2VydmF0aXZlIHZhbGlkYXRpb24gYnkgY2FjaGluZyBh
IG1heGltdW0gaW5kZXggb2YKLSAgICAvLyB0aGUgZ2l2ZW4gdHlwZSBwZXIgZWxlbWVudCBhcnJh
eSBidWZmZXIuIElmIGFsbCBvZiB0aGUgYm91bmQKLSAgICAvLyBhcnJheSBidWZmZXJzIGhhdmUg
ZW5vdWdoIGVsZW1lbnRzIHRvIHNhdGlzZnkgdGhhdCBtYXhpbXVtCi0gICAgLy8gaW5kZXgsIHNr
aXBzIHRoZSBleHBlbnNpdmUgcGVyLWRyYXctY2FsbCBpdGVyYXRpb24gaW4KLSAgICAvLyB2YWxp
ZGF0ZUluZGV4QXJyYXlQcmVjaXNlLgotICAgIAotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxl
bWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJy
YXlCdWZmZXIoKTsKLQotICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBHQzNEc2l6ZWlwdHIgbnVtRWxlbWVudHMgPSBlbGVtZW50QXJyYXlC
dWZmZXItPmJ5dGVMZW5ndGgoKTsKLSAgICAvLyBUaGUgY2FzZSBjb3VudD09MCBpcyBhbHJlYWR5
IGRlYWx0IHdpdGggaW4gZHJhd0VsZW1lbnRzIGJlZm9yZSB2YWxpZGF0ZUluZGV4QXJyYXlDb25z
ZXJ2YXRpdmUuCi0gICAgaWYgKCFudW1FbGVtZW50cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGNvbnN0IEFycmF5QnVmZmVyKiBidWZmZXIgPSBlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1l
bnRBcnJheUJ1ZmZlcigpOwotICAgIEFTU0VSVChidWZmZXIpOwotCi0gICAgaW50IG1heEluZGV4
ID0gZWxlbWVudEFycmF5QnVmZmVyLT5nZXRDYWNoZWRNYXhJbmRleCh0eXBlKTsKLSAgICBpZiAo
bWF4SW5kZXggPCAwKSB7Ci0gICAgICAgIC8vIENvbXB1dGUgdGhlIG1heGltdW0gaW5kZXggaW4g
dGhlIGVudGlyZSBidWZmZXIgZm9yIHRoZSBnaXZlbiB0eXBlIG9mIGluZGV4LgotICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURTogewotICAgICAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29u
c3QgR0MzRHVieXRlKj4oYnVmZmVyLT5kYXRhKCkpOwotICAgICAgICAgICAgZm9yIChHQzNEc2l6
ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQotICAgICAgICAgICAgICAgIG1heElu
ZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfU0hPUlQ6IHsKLSAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNE
dXNob3J0KTsKLSAgICAgICAgICAgIGNvbnN0IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxj
b25zdCBHQzNEdXNob3J0Kj4oYnVmZmVyLT5kYXRhKCkpOwotICAgICAgICAgICAgZm9yIChHQzNE
c2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQotICAgICAgICAgICAgICAgIG1h
eEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfSU5UOiB7Ci0gICAgICAgICAgICBpZiAoIW1fb2VzRWxlbWVudEluZGV4VWlu
dCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBudW1FbGVtZW50
cyAvPSBzaXplb2YoR0MzRHVpbnQpOwotICAgICAgICAgICAgY29uc3QgR0MzRHVpbnQqIHAgPSBz
dGF0aWNfY2FzdDxjb25zdCBHQzNEdWludCo+KGJ1ZmZlci0+ZGF0YSgpKTsKLSAgICAgICAgICAg
IGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKLSAgICAgICAg
ICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+KHBb
aV0pKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxlbWVudEFycmF5
QnVmZmVyLT5zZXRDYWNoZWRNYXhJbmRleCh0eXBlLCBtYXhJbmRleCk7Ci0gICAgfQotCi0gICAg
aWYgKG1heEluZGV4ID49IDApIHsKLSAgICAgICAgLy8gVGhlIG51bWJlciBvZiByZXF1aXJlZCBl
bGVtZW50cyBpcyBvbmUgbW9yZSB0aGFuIHRoZSBtYXhpbXVtCi0gICAgICAgIC8vIGluZGV4IHRo
YXQgd2lsbCBiZSBhY2Nlc3NlZC4KLSAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IG1heElu
ZGV4ICsgMTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5UHJl
Y2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCB1
bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKLXsKLSAgICBBU1NFUlQoY291bnQgPj0gMCAm
JiBvZmZzZXQgPj0gMCk7Ci0gICAgdW5zaWduZWQgbGFzdEluZGV4ID0gMDsKLSAgICAKLSAgICBS
ZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7Ci0KLSAgICBpZiAoIWVsZW1lbnRBcnJh
eUJ1ZmZlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFjb3VudCkgewotICAg
ICAgICBudW1FbGVtZW50c1JlcXVpcmVkID0gMDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBsb25nIHVvZmZzZXQgPSBvZmZz
ZXQ7Ci0gICAgdW5zaWduZWQgbG9uZyBuID0gY291bnQ7Ci0KLSAgICBpZiAodHlwZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7Ci0gICAgICAgIC8vIE1ha2UgdW9mZnNldCBh
biBlbGVtZW50IG9mZnNldC4KLSAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVpbnQpOwot
ICAgICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50Kj4o
ZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZz
ZXQ7Ci0gICAgICAgIHdoaWxlIChuLS0gPiAwKSB7Ci0gICAgICAgICAgICBpZiAoKnAgPiBsYXN0
SW5kZXgpCi0gICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7Ci0gICAgICAgICAgICArK3A7
Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUKSB7Ci0gICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNl
dC4KLSAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVzaG9ydCk7Ci0gICAgICAgIGNvbnN0
IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdXNob3J0Kj4oZWxlbWVudEFy
cmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7Ci0gICAg
ICAgIHdoaWxlIChuLS0gPiAwKSB7Ci0gICAgICAgICAgICBpZiAoKnAgPiBsYXN0SW5kZXgpCi0g
ICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7Ci0gICAgICAgICAgICArK3A7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZ
VEUpIHsKLSAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0Mz
RHVieXRlKj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgp
KSArIHVvZmZzZXQ7Ci0gICAgICAgIHdoaWxlIChuLS0gPiAwKSB7Ci0gICAgICAgICAgICBpZiAo
KnAgPiBsYXN0SW5kZXgpCi0gICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7Ci0gICAgICAg
ICAgICArK3A7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBUaGVuIHNldCB0aGUgbGFzdCBp
bmRleCBpbiB0aGUgaW5kZXggYXJyYXkgYW5kIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC4KLSAgICBu
dW1FbGVtZW50c1JlcXVpcmVkID0gbGFzdEluZGV4ICsgMTsKLSAgICByZXR1cm4gbnVtRWxlbWVu
dHNSZXF1aXJlZCA+IDA7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1bnNpZ25lZCBwcmltaXRp
dmVDb3VudCkKLXsKLSAgICBpZiAoIW1fY3VycmVudFByb2dyYW0pCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIExvb2sgaW4gZWFjaCBlbmFibGVkIHZlcnRleCBhdHRyaWIgYW5kIGNo
ZWNrIGlmIHRoZXkndmUgYmVlbiBib3VuZCB0byBhIGJ1ZmZlci4KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9tYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKLSAgICAgICAgaWYgKCFtX2Jv
dW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGkpLnZhbGlkYXRlQmlu
ZGluZygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChlbGVt
ZW50Q291bnQgPD0gMCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLQotICAgIC8vIExvb2sgaW4g
ZWFjaCBjb25zdW1lZCB2ZXJ0ZXggYXR0cmliIChieSB0aGUgY3VycmVudCBwcm9ncmFtKS4KLSAg
ICBib29sIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IGZhbHNlOwotICAgIGJvb2wgc2F3RW5hYmxl
ZEF0dHJpYiA9IGZhbHNlOwotICAgIGludCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMgPSBtX2N1
cnJlbnRQcm9ncmFtLT5udW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsKLSAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9uczsgKytpKSB7Ci0gICAgICAgIGludCBs
b2MgPSBtX2N1cnJlbnRQcm9ncmFtLT5nZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpKTsKLSAgICAg
ICAgaWYgKGxvYyA+PSAwICYmIGxvYyA8IHN0YXRpY19jYXN0PGludD4obV9tYXhWZXJ0ZXhBdHRy
aWJzKSkgewotICAgICAgICAgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVy
dGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0
ZXhBdHRyaWJTdGF0ZShsb2MpOwotICAgICAgICAgICAgaWYgKHN0YXRlLmVuYWJsZWQpIHsKLSAg
ICAgICAgICAgICAgICBzYXdFbmFibGVkQXR0cmliID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAv
LyBBdm9pZCBvZmYtYnktb25lIGVycm9ycyBpbiBudW1FbGVtZW50cyBjb21wdXRhdGlvbi4KLSAg
ICAgICAgICAgICAgICAvLyBGb3IgdGhlIGxhc3QgZWxlbWVudCwgd2Ugd2lsbCBvbmx5IHRvdWNo
IHRoZSBkYXRhIGZvciB0aGUKLSAgICAgICAgICAgICAgICAvLyBlbGVtZW50IGFuZCBub3RoaW5n
IGJleW9uZCBpdC4KLSAgICAgICAgICAgICAgICBpbnQgYnl0ZXNSZW1haW5pbmcgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHN0YXRlLmJ1ZmZlckJpbmRpbmctPmJ5dGVMZW5ndGgoKSAtIHN0YXRlLm9mZnNl
dCk7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOwotICAgICAgICAg
ICAgICAgIEFTU0VSVChzdGF0ZS5zdHJpZGUgPiAwKTsKLSAgICAgICAgICAgICAgICBpZiAoYnl0
ZXNSZW1haW5pbmcgPj0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KQotICAgICAgICAgICAgICAgICAg
ICBudW1FbGVtZW50cyA9IDEgKyAoYnl0ZXNSZW1haW5pbmcgLSBzdGF0ZS5ieXRlc1BlckVsZW1l
bnQpIC8gc3RhdGUuc3RyaWRlOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluc3RhbmNlc1Jl
cXVpcmVkID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZGl2aXNvcikgewotICAgICAg
ICAgICAgICAgICAgICBpbnN0YW5jZXNSZXF1aXJlZCA9IGNlaWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHByaW1pdGl2ZUNvdW50KSAvIHN0YXRlLmRpdmlzb3IpOwotICAgICAgICAgICAgICAgICAgICBp
ZiAoaW5zdGFuY2VzUmVxdWlyZWQgPiBudW1FbGVtZW50cykKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBpZiAoZWxlbWVudENvdW50ID4gbnVtRWxlbWVudHMpCi0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKCFzYXdOb25JbnN0YW5jZWRBdHRyaWIgJiYgc2F3RW5hYmxl
ZEF0dHJpYikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqIG9iamVjdCkKLXsKLSAgICBpZiAoIW9iamVj
dCB8fCAhb2JqZWN0LT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gb2JqZWN0IG9y
IG9iamVjdCBkZWxldGVkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYg
KCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdD
M0RzaXplaSBwcmltaXRpdmVDb3VudCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rpb25O
YW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGZpcnN0IDwgMCB8fCBjb3Vu
dCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFjb3VudCkgewotICAgICAgICBtYXJr
Q29udGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlm
IChwcmltaXRpdmVDb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNFcnJvckdlbmVy
YXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZl
IGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCi0gICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3Jk
T3ZlcmZsb3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7Ci0gICAgICAgIENoZWNrZWQ8R0MzRGludCwg
UmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7Ci0gICAgICAgIENoZWNrZWQ8R0Mz
RGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVja2Vk
Q291bnQ7Ci0gICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQ
cmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7Ci0gICAgICAgIGlmIChjaGVja2VkU3VtLmhh
c092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgpIHx8
ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwgY2hlY2tl
ZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCF2YWxp
ZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0
cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIg
aW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZl
KCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFzb24p
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdD
M0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
VU5VU0VEX1BBUkFNKGVjKTsKLQotICAgIGlmICghdmFsaWRhdGVEcmF3QXJyYXlzKCJkcmF3QXJy
YXlzIiwgbW9kZSwgZmlyc3QsIGNvdW50LCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xl
YXJJZkNvbXBvc2l0ZWQoKTsKLQotICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZh
bHNlOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICB2ZXJ0ZXhBdHRyaWIw
U2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKLSAg
ICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRl
bmVzcygiZHJhd0FycmF5cyIsIHRydWUpOwotCi0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKG1v
ZGUsIGZpcnN0LCBjb3VudCk7Ci0KLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0
ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRy
aWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAgICAgICAg
Y2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOwotICAgIG1hcmtD
b250ZXh0Q2hhbmdlZCgpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBH
QzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2lnbmVk
JiBudW1FbGVtZW50cywgR0MzRHNpemVpIHByaW1pdGl2ZUNvdW50KQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1lLCBt
b2RlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxT
ZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0
Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgotICAgICAgICBicmVh
azsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6Ci0gICAgICAgIGlm
IChtX29lc0VsZW1lbnRJbmRleFVpbnQpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIGlmIChjb3VudCA8IDAgfHwgb2Zmc2V0IDwgMCkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiY291bnQgb3Igb2Zmc2V0IDwgMCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotCi0gICAgaWYgKCFjb3VudCkgewotICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmIChwcmltaXRpdmVDb3VudCA8
IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRF
bGVtZW50QXJyYXlCdWZmZXIoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIEVMRU1FTlRf
QVJSQVlfQlVGRkVSIGJvdW5kIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAg
ICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQotICAgICAgICBpZiAo
IXZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGlu
dHB0cj4ob2Zmc2V0KSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAicmVxdWVzdCBvdXQg
b2YgYm91bmRzIGZvciBjdXJyZW50IEVMRU1FTlRfQVJSQVlfQlVGRkVSIik7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFjb3VudCkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJm
bG93PiBjaGVja2VkQ291bnQoY291bnQpOwotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29y
ZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZlQ291bnQpOwotICAgICAg
ICBpZiAoY2hlY2tlZENvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291
bnQuaGFzT3ZlcmZsb3dlZCgpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQg
dG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZh
dGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1F
bGVtZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgewotICAgICAgICAg
ICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNoZWNrZWRDb3VudC51bnNhZmVHZXQo
KSwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpIHx8
ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVtRWxlbWVudHMsIGNoZWNrZWRQcmltaXRpdmVD
b3VudC51bnNhZmVHZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVt
cHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKCF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAiYXR0cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAi
ZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYm
ICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlz
UmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCByZWFzb24pOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMoR0Mz
RGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zm
c2V0LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotCi0gICAg
dW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOwotICAgIGlmICghdmFsaWRhdGVEcmF3RWxlbWVudHMo
ImRyYXdFbGVtZW50cyIsIG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRzLCAw
KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLQotICAgIGJv
b2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNHTEVTMkNvbXBs
aWFudCgpKSB7Ci0gICAgICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgICAgICB2YWxpZGF0
ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpLCBudW1FbGVtZW50cyk7Ci0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBz
aW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOwotICAgIH0KLSAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0Vs
ZW1lbnRzIiwgdHJ1ZSk7Ci0KLSAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3Vu
dCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7Ci0KLSAgICBpZiAoIWlz
R0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0
b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVT
Mk5QT1RTdHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxl
bWVudHMiLCBmYWxzZSk7Ci0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5hYmxlIiwgY2Fw
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfVEVTVCkgewotICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAg
YXBwbHlTdGVuY2lsVGVzdCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjYXAg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewotICAgICAgICBtX3NjaXNzb3JF
bmFibGVkID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAg
IG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxlZCk7Ci0g
ICAgfQotICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4
VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91
dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7Ci0gICAgc3RhdGUuZW5hYmxl
ZCA9IHRydWU7Ci0KLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4
dC0+ZmluaXNoKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVzaCgpCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IG1fY29udGV4dC0+Zmx1c2goKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVu
dCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVy
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1l
dGVycygiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQotICAg
ICAgICByZXR1cm47Ci0gICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJpbnZh
bGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChidWZmZXIgJiYg
IWJ1ZmZlci0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZyb20gdGhpcyBj
b250ZXh0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhl
IGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBp
bXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZh
dWx0Ci0gICAgLy8gRkJPLgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
ICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJvKGJ1ZmZlcik7
Ci0gICAgc3dpdGNoIChhdHRhY2htZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQs
IHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgbV9jb250ZXh0LT5m
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2Jq
ZWN0KTsKLSAgICB9Ci0gICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnRGb3JC
b3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQsIGJ1ZmZlcik7Ci0gICAgYXBwbHlTdGVuY2lsVGVz
dCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJn
ZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVmZmVy
VGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlm
IChsZXZlbCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZhbGlk
YXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUy
RCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVi
dWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMg
dXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0Ci0gICAgLy8gRkJP
LgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFtZWJ1
ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBsYXRmb3JtM0RPYmpl
Y3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9yWmVybyh0ZXh0dXJlKTsKLSAgICBzd2l0Y2ggKGF0
dGFjaG1lbnQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FU
VEFDSE1FTlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0
LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJl
T2JqZWN0LCBsZXZlbCk7Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQo
dGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQs
IHRleHR1cmVPYmplY3QsIGxldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1
ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVj
dCwgbGV2ZWwpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1
ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVj
dCwgbGV2ZWwpOwotICAgIH0KLSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVu
dEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZl
bCk7Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZnJvbnRGYWNlKG1v
ZGUpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAoR0Mz
RGVudW0gdGFyZ2V0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRp
bmcoImdlbmVyYXRlTWlwbWFwIiwgdGFyZ2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZ2VuZXJhdGVNaXBtYXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBub3QgYWxsIHRo
ZSBzYW1lIHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzkxNi4gQ29tcHJlc3NlZCB0
ZXh0dXJlcyBzaG91bGQgYmUgYWxsb3dlZCBpbiBXZWJHTCAyOgotICAgIGlmICh0ZXgtPmlzQ29t
cHJlc3NlZCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0byBnZW5lcmF0
ZSBtaXBtYXBzIGZyb20gY29tcHJlc3NlZCB0ZXh0dXJlIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJnZW5lcmF0ZU1pcG1hcCIs
IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIGdlbmVyYXRlTWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWluRmlsdGVyIGlz
IG5vdCBORUFSRVNUX01JUE1BUF9MSU5FQVIKLSAgICAvLyBvbiBNYWMuICBSZW1vdmUgdGhlIGhh
Y2sgb25jZSB0aGlzIGRyaXZlciBidWcgaXMgZml4ZWQuCi0jaWYgT1MoREFSV0lOKQotICAgIGJv
b2wgbmVlZFRvUmVzZXRNaW5GaWx0ZXIgPSBmYWxzZTsKLSAgICBpZiAodGV4LT5nZXRNaW5GaWx0
ZXIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKSB7Ci0gICAg
ICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5F
QVIpOwotICAgICAgICBuZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7Ci0gICAgfQotI2VuZGlm
Ci0gICAgbV9jb250ZXh0LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotI2lmIE9TKERBUldJTikK
LSAgICBpZiAobmVlZFRvUmVzZXRNaW5GaWx0ZXIpCi0gICAgICAgIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIHRl
eC0+Z2V0TWluRmlsdGVyKCkpOwotI2VuZGlmCi0gICAgdGV4LT5nZW5lcmF0ZU1pcG1hcExldmVs
SW5mbygpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBp
bmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRB
Y3RpdmVBdHRyaWIiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQWN0
aXZlSW5mbyBpbmZvOwotICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0
T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6ICVzIiwgaW5k
ZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKLQotICAgIHJldHVybiBXZWJHTEFjdGl2ZUlu
Zm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKLX0KLQotUGFzc1Jl
ZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5p
Zm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBwcm9n
cmFtKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwotICAgIGlmICgh
bV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgs
IGluZm8pKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlh
bnQoKSkKLSAgICAgICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5lbmRzV2l0aCgi
WzBdIikpCi0gICAgICAgICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKLQotICAgIExPRyhX
ZWJHTCwgIlJldHVybmluZyBhY3RpdmUgdW5pZm9ybSAlZDogJXMiLCBpbmRleCwgaW5mby5uYW1l
LnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGlu
Zm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgVmVjdG9y
PFJlZlB0cjxXZWJHTFNoYWRlcj4+JiBzaGFkZXJPYmplY3RzLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIHNoYWRlck9iamVjdHMuY2xlYXIoKTsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJn
ZXRBdHRhY2hlZFNoYWRlcnMiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgY29uc3QgR0MzRGVudW0gc2hhZGVyVHlwZVtdID0gewotICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRDo6VkVSVEVYX1NIQURFUiwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5U
X1NIQURFUgotICAgIH07Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihzaGFk
ZXJUeXBlKSAvIHNpemVvZihHQzNEZW51bSk7ICsraSkgewotICAgICAgICBXZWJHTFNoYWRlciog
c2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtpXSk7Ci0gICAg
ICAgIGlmIChzaGFkZXIpCi0gICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFkZXIp
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotR0MzRGludCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3Ry
aW5nJiBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJl
dHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0dHJpYkxvY2F0
aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5n
KCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYg
KGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXBy
b2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2NhdGlvbiIsICJw
cm9ncmFtIG5vdCBsaW5rZWQiKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1
cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5h
bWUpOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQ
YXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYgKHRhcmdldCAh
PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIs
ICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAg
fQotCi0gICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSAmJiBw
bmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRCdWZmZXJQ
YXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250
ZXh0LT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgIGlm
IChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCi0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nh
c3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQ29udGV4dEF0
dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgIC8vIFdlIGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJHTENvbnRleHRB
dHRyaWJ1dGVzIG9iamVjdCB0bwotICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBtdXRhdGlu
ZyBhbnkgY2FjaGVkIHZlcnNpb24uCi0KLSAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9yY2Ug
cmVxdWVzdGVkIHZhbHVlcyBvZiAiZmFsc2UiIGZvciBkZXB0aAotICAgIC8vIGFuZCBzdGVuY2ls
LCByZWdhcmRsZXNzIG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCi0gICAgLy8g
R3JhcGhpY3NDb250ZXh0M0Qgb3IgRHJhd2luZ0J1ZmZlci4KLSAgICBSZWZQdHI8V2ViR0xDb250
ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0
ZShtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOwotICAgIGlmICghbV9hdHRyaWJ1
dGVzLmRlcHRoKQotICAgICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7Ci0gICAgaWYg
KCFtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgYXR0cmlidXRlcy0+c2V0U3RlbmNpbChm
YWxzZSk7Ci0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBUaGUgRHJhd2lu
Z0J1ZmZlciBvYnRhaW5zIGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dENvbnRleHRBdHRyaWJ1dGVzKCksCi0gICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBpdHMgb3duIGRl
dGVybWluYXRpb24gb2Ygd2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRlZC4KLSAgICAg
ICAgYXR0cmlidXRlcy0+c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVsdGlzYW1wbGUo
KSk7Ci0gICAgfQotICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKLX0KLQotR0MzRGVu
dW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKG1faXNQZW5k
aW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpO
T19FUlJPUjsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOwotfQotCi1XZWJHTEV4
dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5n
JiBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfYmxl
bmRfbWlubWF4IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBv
cnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpIHsKLSAgICAgICAgaWYgKCFtX2V4dEJsZW5kTWlu
TWF4KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX2JsZW5kX21pbm1heCIpOwotICAgICAgICAgICAgbV9leHRCbGVuZE1pbk1h
eCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUQmxlbmRNaW5NYXg+KHRoaXMpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBtX2V4dEJsZW5kTWluTWF4LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9zUkdCIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKSB7Ci0gICAgICAgIGlmICgh
bV9leHRzUkdCKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5z
dXJlRW5hYmxlZCgiR0xfRVhUX3NSR0IiKTsKLSAgICAgICAgICAgIG1fZXh0c1JHQiA9IHN0ZDo6
bWFrZV91bmlxdWU8RVhUc1JHQj4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1f
ZXh0c1JHQi5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJF
WFRfZnJhZ19kZXB0aCIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfRVhUX2ZyYWdfZGVwdGgiKSkgewotICAgICAgICBpZiAoIW1fZXh0RnJhZ0Rl
cHRoKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX2ZyYWdfZGVwdGgiKTsKLSAgICAgICAgICAgIG1fZXh0RnJhZ0RlcHRoID0g
c3RkOjptYWtlX3VuaXF1ZTxFWFRGcmFnRGVwdGg+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBtX2V4dEZyYWdEZXB0aC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKLSAgICAgICAgJiYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRl
cl90ZXh0dXJlX2xvZCIpKSkgewotICAgICAgICBpZiAoIW1fZXh0U2hhZGVyVGV4dHVyZUxPRCkg
ewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQo
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKLSAgICAgICAgICAgIG1fZXh0U2hhZGVyVGV4
dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVyVGV4dHVyZUxPRD4odGhpcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVyVGV4dHVyZUxPRC5nZXQoKTsKLSAg
ICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkgewotICAg
ICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIik7Ci0gICAgICAgICAgICBtX2V4dFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljPih0
aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9leHRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkgewotICAgICAg
ICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgewotICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyIpOwotICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzID0gc3RkOjptYWtl
X3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlzKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdldCgpOwotICAgIH0KLSAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0IikKLSAgICAgICAgJiYg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9h
dCIpKSB7Ci0gICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQpIHsKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9m
bG9hdCIpOwotICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXQgPSBzdGQ6Om1ha2VfdW5pcXVl
PE9FU1RleHR1cmVGbG9hdD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2Vz
VGV4dHVyZUZsb2F0LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpIHsK
LSAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVhcikgewotICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2Zs
b2F0X2xpbmVhciIpOwotICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4odGhpcyk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyLmdldCgpOwotICAgIH0KLSAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQotICAg
ICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0
dXJlX2hhbGZfZmxvYXQiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdCkg
ewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQo
IkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKLSAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhh
bGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdD4odGhpcyk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdC5nZXQoKTsKLSAg
ICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxmX2Zs
b2F0X2xpbmVhciIpCi0gICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBw
b3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkgewotICAgICAgICBpZiAo
IW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcikgewotICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRf
bGluZWFyIik7Ci0gICAgICAgICAgICBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+KHRoaXMpOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuZ2V0KCk7Ci0gICAg
fQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3ZlcnRleF9hcnJheV9vYmpl
Y3QiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKLSAgICAgICAgaWYgKCFtX29lc1ZlcnRleEFy
cmF5T2JqZWN0KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5z
dXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKLSAgICAgICAgICAgIG1f
b2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1ZlcnRleEFycmF5T2Jq
ZWN0Pih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNWZXJ0ZXhBcnJheU9i
amVjdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNf
ZWxlbWVudF9pbmRleF91aW50IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpIHsKLSAgICAgICAgaWYg
KCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7Ci0g
ICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU0Vs
ZW1lbnRJbmRleFVpbnQ+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc0Vs
ZW1lbnRJbmRleFVpbnQuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShu
YW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0IikpIHsKLSAgICAgICAgaWYgKCFtX3dlYmdsTG9zZUNv
bnRleHQpCi0gICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRleHQgPSBzdGQ6Om1ha2VfdW5pcXVl
PFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOwotICAgICAgICByZXR1cm4gbV93ZWJnbExvc2VDb250
ZXh0LmdldCgpOwotICAgIH0KLSAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJL
SVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQotICAgICAgICAmJiBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAgaWYgKCFtX3dlYmds
Q29tcHJlc3NlZFRleHR1cmVBVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1
cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+KHRoaXMp
OwotICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDLmdldCgpOwotICAg
IH0KLSAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29tcHJl
c3NlZF90ZXh0dXJlX3B2cnRjIikpCi0gICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQ
VlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQyA9
IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPih0aGlzKTsKLSAg
ICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmdldCgpOwotICAgIH0K
LSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVy
ZV9zM3RjIikKLSAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRl
ZCh0aGlzKSkgewotICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMpCi0g
ICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDID0gc3RkOjptYWtlX3VuaXF1
ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7Ci0gICAgICAgIHJldHVybiBtX3dl
YmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiKQotICAgICAgICAmJiBXZWJHTERl
cHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKSB7Ci0gICAgICAgIGlm
ICghbV93ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2RlcHRoX3RleHR1cmUiKTsKLSAg
ICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVw
dGhUZXh0dXJlPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV93ZWJnbERlcHRo
VGV4dHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJX
RUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdCdWZmZXJzKCkpIHsKLSAgICAgICAg
aWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7Ci0gICAgICAg
ICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRHJhd0J1ZmZl
cnM+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX3dlYmdsRHJhd0J1ZmZlcnMu
Z2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiQU5HTEVfaW5z
dGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhpcykp
IHsKLSAgICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSB7Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5zdGFu
Y2VkX2FycmF5cyIpOwotICAgICAgICAgICAgbV9hbmdsZUluc3RhbmNlZEFycmF5cyA9IHN0ZDo6
bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRoaXMpOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdldCgpOwotICAgIH0KLSAgICBpZiAo
YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpKSB7Ci0gICAgICAgICAgICBp
ZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKLSAgICAgICAgICAgICAgICBtX3dlYmdsRGVi
dWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdSZW5kZXJlckluZm8+
KHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mby5nZXQo
KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdM
X2RlYnVnX3NoYWRlcnMiKQotICAgICAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkgewotICAg
ICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQotICAgICAgICAgICAgICAgIG1fd2Vi
Z2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdTaGFkZXJzPih0aGlz
KTsKLSAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdTaGFkZXJzLmdldCgpOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHQzNE
ZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotCi0gICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmlu
ZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgV2ViR0xTaGFyZWRP
YmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50T2JqZWN0
KGF0dGFjaG1lbnQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0gICAgICAgIGlmIChwbmFtZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSkKLSAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOwot
ICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJTlZBTElEX0VOVU0gaW4gdGhpcyBj
YXNlLCB3aGlsZSBkZXNrdG9wIEdMCi0gICAgICAgIC8vIHNwZWNpZmllcyBJTlZBTElEX09QRVJB
VElPTi4KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQob2JqZWN0LT5pc1RleHR1cmUoKSB8fCBvYmplY3QtPmlzUmVuZGVyYnVmZmVy
KCkpOwotICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7Ci0gICAgICAgIHN3aXRjaCAocG5h
bWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUpOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgotICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4ocmVpbnRlcnByZXRfY2FzdDxXZWJH
TFRleHR1cmUqPihvYmplY3QpKSk7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZBQ0U6
Ci0gICAgICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9S
X0VOQ09ESU5HX0VYVDogewotICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgICAg
ICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdl
dCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKHZhbHVlKTsKLSAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZy
YW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZv
ciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpF
Q1RfVFlQRToKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUik7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
R0xSZW5kZXJidWZmZXIqPihvYmplY3QpKSk7Ci0gICAgICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpG
UkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogewotICAgICAgICAgICAg
V2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xS
ZW5kZXJidWZmZXIqPihvYmplY3QpOwotICAgICAgICAgICAgR0MzRGVudW0gcmVuZGVyQnVmZmVy
Rm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOwotICAgICAgICAgICAg
QVNTRVJUKHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUICYmIHJl
bmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKTsKLSAgICAg
ICAgICAgIGlmIChyZW5kZXJCdWZmZXJGb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBI
QThfRVhUKQotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRXh0ZW5zaW9uczNE
OjpTUkdCX0VYVCk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29u
dGV4dDNEOjpMSU5FQVIpOwotICAgICAgICB9Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUg
Zm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xH
ZXRJbmZvKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY29uc3QgaW50IGlu
dFplcm8gPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpBQ1RJVkVfVEVYVFVSRToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVfV0lE
VEhfUkFOR0U6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5H
RToKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFfQklUUzoKLSAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlf
QlVGRkVSX0JJTkRJTkc6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxX
ZWJHTEJ1ZmZlcj4obV9ib3VuZEFycmF5QnVmZmVyKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QkxFTkQ6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUjoKLSAgICAgICAgcmV0dXJu
IGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9S
R0I6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6Ci0gICAgICAgIHJl
dHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NS
Q19BTFBIQToKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNfUkdCOgotICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkJMVUVfQklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAgICAg
IHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xl
YW5BcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09N
UFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oVWlu
dDMyQXJyYXk6OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1fY29t
cHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNVTExfRkFDRToKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgotICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQ
YXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4obV9jdXJyZW50UHJvZ3JhbSkpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgIW1fYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oaW50WmVybyk7Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgotICAgICAgICBy
ZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX0ZVTkM6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6Ci0gICAgICAg
IHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklURU1B
U0s6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZ
X0JVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8
V2ViR0xCdWZmZXI+KG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVm
ZmVyKCkpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5H
OgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZl
cj4obV9mcmFtZWJ1ZmZlckJpbmRpbmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVF9GQUNFOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUp
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgotICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6Ci0gICAg
ICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1B
WF9DVUJFX01BUF9URVhUVVJFX1NJWkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JN
X1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkU6Ci0g
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRU
UklCUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JU
X0RJTVM6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOgot
ICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGFsd2F5cyByZXR1cm4gMCBmb3IgdGhpcz8KLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UEFDS19BTElHTk1FTlQ6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZBQ1RP
UjoKLSAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgotICAgICAgICByZXR1cm4gZ2V0
Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9M
WUdPTl9PRkZTRVRfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0JJVFM6Ci0gICAgICAgIHJldHVy
biBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQ
dHI8V2ViR0xSZW5kZXJidWZmZXI+KG1fcmVuZGVyYnVmZmVyQmluZGluZykpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KFN0cmluZygiV2ViS2l0IFdlYkdMIikpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNB
TVBMRV9CVUZGRVJTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgotICAgICAg
ICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgotICAgICAgICByZXR1cm4gZ2V0RmxvYXRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVM6Ci0g
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNDSVNTT1JfQk9YOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
OgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3Ry
aW5nKEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIikiKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKLSAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVk
SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X0JBQ0tfUEFTU19ERVBUSF9GQUlMOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19Q
QVNTX0RFUFRIX1BBU1M6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1JFRjoKLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6Ci0gICAgICAgIHJldHVybiBnZXRVbnNp
Z25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9CQUNLX1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JJVFM6Ci0g
ICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5zdGVuY2ls
KQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKLSAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9DTEVBUl9WQUxVRToKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgotICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1Nf
REVQVEhfRkFJTDoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1l
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoK
LSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1JFRjoKLSAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNU
OgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9NQVNLOgotICAgICAgICByZXR1cm4gZ2V0
VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfV1JJVEVNQVNLOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6Ci0g
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJl
VW5pdF0udGV4dHVyZTJEQmluZGluZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQklORElOR19DVUJFX01BUDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNz
UmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0u
dGV4dHVyZUN1YmVNYXBCaW5kaW5nKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0FMSUdOTUVOVDoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKLSAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja0ZsaXBZKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8obV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgotICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24pOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhTdHJpbmcoIldlYktpdCIpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJTSU9O
OgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCAxLjAgKCIgKyBtX2NvbnRleHQt
PmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVSU0lPTikgKyAiKSIpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRB
cnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NI
QURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKLSAg
ICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKLSAgICAgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJ
VkFUSVZFX0hJTlRfT0VTKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5N
QVNLRURfUkVOREVSRVJfV0VCR0w6Ci0gICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJlcklu
Zm8pCi0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3RyaW5n
KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUikpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFs
aWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQi
KTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2ViR0xEZWJ1Z1Jl
bmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdMOgotICAgICAgICBpZiAobV93ZWJnbERl
YnVnUmVuZGVyZXJJbmZvKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX2NvbnRl
eHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SKSk7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBu
b3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9hcnJh
eV9vYmplY3QKLSAgICAgICAgaWYgKG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKLSAgICAgICAg
ICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUz4obV9ib3VuZFZlcnRleEFycmF5T2JqZWN0KSk7Ci0gICAgICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgZW5hYmxlZCIp
OwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2Fu
aXNvdHJvcGljCi0gICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykKLSAg
ICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6Ok1B
WF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFi
bGVkIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVuc2lv
bnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBCRUdJ
TgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQotICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpOwotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwg
ImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIp
OwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQot
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1ZmZl
cnMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYmIHBu
YW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVAotICAgICAgICAgICAgJiYgcG5h
bWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhU
ICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKLSAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKLSAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZykKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRE
cmF3QnVmZmVyKHBuYW1lKTsKLSAgICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1ZmZl
cgotICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgfQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQ
cm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbVBh
cmFtZXRlciIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0KLSAg
ICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhwcm9ncmFtLT5pc0RlbGV0ZWQoKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkFM
SURBVEVfU1RBVFVTOgotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclpl
cm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TElOS19TVEFUVVM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+Z2V0TGlu
a1N0YXR1cygpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJT
OgotICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSks
IHBuYW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVM6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0
Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUs
ICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sICJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsK
LSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotU3RyaW5nIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBp
ZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkpCi0g
ICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdl
dFByb2dyYW1JbmZvTG9nKG9iamVjdE9yWmVybyhwcm9ncmFtKSkpOwotfQotCi1XZWJHTEdldElu
Zm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52
YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLSAg
ICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5v
YmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVuZGVy
YnVmZmVyIGJvdW5kIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0K
LSAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMCi0gICAgICAgICYmICFtX3JlbmRlcmJ1ZmZl
ckJpbmRpbmctPmlzVmFsaWQoKSkgewotICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2lsU3Vw
cG9ydGVkKCkpOwotICAgICAgICBpbnQgdmFsdWUgPSAwOwotICAgICAgICBzd2l0Y2ggKHBuYW1l
KSB7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoK
LSAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUl9IRUlHSFQ6Ci0gICAgICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmluZGlu
Zy0+Z2V0SGVpZ2h0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9
IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDI0OwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9TVEVOQ0lMX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDg7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFM
X0ZPUk1BVDoKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJC
aW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJn
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIH0KLQotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwot
ICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVJfV0lEVEg6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hF
SUdIVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgotICAgICAgICBtX2Nv
bnRleHQtPmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsK
LSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFy
YW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0K
LQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVy
KFdlYkdMU2hhZGVyKiBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlclBhcmFtZXRlciIsIHNoYWRlcikp
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsK
LSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVMRVRF
X1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlzRGVsZXRlZCgp
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKLSAgICAgICAg
bV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1
ZSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUp
KTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRToKLSAgICAgICAgbV9j
b250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2
YWx1ZSkpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBw
YXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQot
fQotCi1TdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdM
U2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFN0
cmluZygpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xvZyIs
IHNoYWRlcikpCi0gICAgICAgIHJldHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJlTm90TnVsbCht
X2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsKLX0KLQot
UGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVu
dW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFN
KGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpWRVJURVhfU0hBREVSOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdN
RU5UX1NIQURFUjoKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclBy
ZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7Ci0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIH0KLSAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
TUVESVVNX0ZMT0FUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNRURJVU1fSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfSU5U
OgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9y
bWF0IiwgImludmFsaWQgcHJlY2lzaW9uIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgR0MzRGludCByYW5nZVsyXSA9IHswLCAwfTsKLSAgICBHQzNEaW50IHBy
ZWNpc2lvbiA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hh
ZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVjaXNpb24pOwotICAgIHJldHVybiBX
ZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwgcHJl
Y2lzaW9uKTsKLX0KLQotU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyU291
cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuIFN0cmluZygpOwotICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVy
U291cmNlIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiBlbnN1cmVO
b3ROdWxsKHNoYWRlci0+Z2V0U291cmNlKCkpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQotewotICAgIFZlY3RvcjxT
dHJpbmc+IHJlc3VsdDsKLQotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0KLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpCi0gICAgICAgIHJlc3VsdC5hcHBl
bmQoIkVYVF9ibGVuZF9taW5tYXgiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJFWFRf
c1JHQiIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X0VYVF9mcmFnX2RlcHRoIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9mcmFnX2RlcHRo
Iik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VT
X3RleHR1cmVfZmxvYXQiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfZmxv
YXQiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9P
RVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3Rl
eHR1cmVfZmxvYXRfbGluZWFyIik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpKQotICAgICAgICByZXN1bHQu
YXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIi
KSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIi
KTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3N0YW5k
YXJkX2Rlcml2YXRpdmVzIik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xvZCIpKQotICAgICAg
ICByZXN1bHQuYXBwZW5kKCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7Ci0gICAgaWYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2Fu
aXNvdHJvcGljIikpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9FWFRfdGV4dHVyZV9m
aWx0ZXJfYW5pc290cm9waWMiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpKQotICAgICAgICByZXN1bHQu
YXBwZW5kKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpOwotICAgIGlmIChtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKSkKLSAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpOwotICAgIHJlc3Vs
dC5hcHBlbmQoIldFQkdMX2xvc2VfY29udGV4dCIpOwotICAgIGlmIChXZWJHTENvbXByZXNzZWRU
ZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJ
VF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIik7Ci0gICAgaWYgKFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJX
RUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7Ci0gICAgaWYgKFdlYkdMQ29t
cHJlc3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIHJlc3VsdC5hcHBl
bmQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7Ci0gICAgaWYgKFdlYkdMRGVwdGhU
ZXh0dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIldFQkdMX2RlcHRoX3RleHR1cmUiKTsKLSAgICBpZiAoc3VwcG9ydHNEcmF3QnVmZmVy
cygpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKTsKLSAgICBp
ZiAoQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0
LmFwcGVuZCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOwotCi0gICAgaWYgKGFsbG93UHJpdmls
ZWdlZEV4dGVuc2lvbnMoKSkgewotICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkKLSAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RlYnVnX3NoYWRlcnMiKTsKLSAgICAgICAgcmVz
dWx0LmFwcGVuZCgiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpOwotICAgIH0KLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25D
b2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBXZWJHTFRl
eHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImdldFRleFBhcmFtZXRlciIsIHRh
cmdldCwgZmFsc2UpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9XUkFQX1M6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1Q6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgJnZhbHVlKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVfTUFY
X0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKLSAgICAg
ICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBtX2Nv
bnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUp
KTsKLSAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOwotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRleFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKLSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omdl
dFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogdW5pZm9ybUxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2Vi
R0xPYmplY3QoImdldFVuaWZvcm0iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwotICAgIGlmICghdW5pZm9ybUxvY2F0aW9uIHx8IHVuaWZvcm1Mb2NhdGlvbi0+cHJv
Z3JhbSgpICE9IHByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5pZm9ybSIsICJubyB1bmlmb3JtbG9j
YXRpb24gb3Igbm90IHZhbGlkIGZvciB0aGlzIHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOwotICAgIH0KLSAgICBHQzNEaW50IGxvY2F0aW9uID0gdW5pZm9ybUxvY2F0
aW9uLT5sb2NhdGlvbigpOwotCi0gICAgR0MzRGVudW0gYmFzZVR5cGU7Ci0gICAgdW5zaWduZWQg
bGVuZ3RoOwotICAgIHN3aXRjaCAodW5pZm9ybUxvY2F0aW9uLT50eXBlKCkpIHsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpCT09MOwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzI6Ci0gICAgICAgIGJhc2VUeXBlID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMzoKLSAgICAgICAgYmFzZVR5
cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKLSAgICAgICAgbGVuZ3RoID0gMzsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUM0OgotICAgICAg
ICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOwotICAgICAgICBsZW5ndGggPSA0
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6Ci0gICAg
ICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKLSAgICAgICAgbGVuZ3RoID0g
MTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UX1ZFQzI6
Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKLSAgICAgICAgbGVu
Z3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5U
X1ZFQzM6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKLSAgICAg
ICAgbGVuZ3RoID0gMzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SU5UX1ZFQzQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsK
LSAgICAgICAgbGVuZ3RoID0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUOwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGTE9BVF9WRUMyOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMzoKLSAgICAgICAgYmFzZVR5cGUgPSBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDM7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzQ6Ci0gICAgICAgIGJh
c2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSA0Owot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQyOgot
ICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVu
Z3RoID0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVRfTUFUMzoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0g
ICAgICAgIGxlbmd0aCA9IDk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUX01BVDQ6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUOwotICAgICAgICBsZW5ndGggPSAxNjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8yRDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTQU1QTEVSX0NVQkU6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklO
VDsKLSAgICAgICAgbGVuZ3RoID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgLy8gQ2FuJ3QgaGFuZGxlIHRoaXMgdHlwZQotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFVuaWZvcm0iLCAidW5oYW5k
bGVkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLSAgICBz
d2l0Y2ggKGJhc2VUeXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6IHsK
LSAgICAgICAgR0MzRGZsb2F0IHZhbHVlWzE2XSA9IHswfTsKLSAgICAgICAgaWYgKG1faXNSb2J1
c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmdldG5Vbmlmb3JtZnZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgMTYg
KiBzaXplb2YoR0MzRGZsb2F0KSwgdmFsdWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBt
X2NvbnRleHQtPmdldFVuaWZvcm1mdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCB2
YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8odmFsdWVbMF0pOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJB
cnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKLSAgICB9Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6SU5UOiB7Ci0gICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07Ci0gICAgICAg
IGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVybyhwcm9ncmFtKSwg
bG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBs
b2NhdGlvbiwgdmFsdWUpOwotICAgICAgICBpZiAobGVuZ3RoID09IDEpCi0gICAgICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwotICAgIH0KLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpCT09MOiB7Ci0gICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07
Ci0gICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVybyhw
cm9ncmFtKSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOwotICAgICAgICBpZiAobGVuZ3RoID4gMSkgewotICAg
ICAgICAgICAgYm9vbCBib29sVmFsdWVbMTZdID0gezB9OwotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKQotICAgICAgICAgICAgICAgIGJvb2xWYWx1ZVtq
XSA9IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlW2pdKTsKLSAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oYm9vbFZhbHVlLCBsZW5ndGgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbMF0pKTsKLSAgICB9Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBn
ZXQgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gb3VyIHVuZm9ydHVuYXRlbHkgY29tcGxl
eCBsb2dpYyBhYm92ZQotICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmtub3duIGVycm9yIik7Ci0gICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9uPiBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHBy
b2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlmb3JtTG9jYXRpb24iLCBwcm9ncmFtKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRVbmlm
b3JtTG9jYXRpb24iLCBuYW1lKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgaWYgKCF2
YWxpZGF0ZVN0cmluZygiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
ICJnZXRVbmlmb3JtTG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7Ci0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIH0KLSAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29u
dGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7Ci0g
ICAgaWYgKHVuaWZvcm1Mb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBHQzNEaW50IGFjdGl2ZVVuaWZvcm1zID0gMDsKLSAgICBtX2NvbnRleHQtPmdldE5vbkJ1
aWx0SW5BY3RpdmVTeW1ib2xDb3VudChvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNzQ29u
dGV4dDNEOjpBQ1RJVkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7Ci0gICAgZm9yIChHQzNE
aW50IGkgPSAwOyBpIDwgYWN0aXZlVW5pZm9ybXM7IGkrKykgewotICAgICAgICBBY3RpdmVJbmZv
IGluZm87Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9y
WmVybyhwcm9ncmFtKSwgaSwgaW5mbykpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgLy8gU3RyaXAgIlswXSIgZnJvbSB0aGUgbmFtZSBpZiBpdCdzIGFuIGFycmF5LgotICAg
ICAgICBpZiAoaW5mby5uYW1lLmVuZHNXaXRoKCJbMF0iKSkKLSAgICAgICAgICAgIGluZm8ubmFt
ZSA9IGluZm8ubmFtZS5sZWZ0KGluZm8ubmFtZS5sZW5ndGgoKSAtIDMpOwotICAgICAgICAvLyBJ
ZiBpdCdzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIGVsZW1lbnQs
IGFwcGVuZGluZyAiW2luZGV4XSIgdG8gdGhlIG5hbWUuCi0gICAgICAgIGZvciAoR0MzRGludCBp
bmRleCA9IDA7IGluZGV4IDwgaW5mby5zaXplOyArK2luZGV4KSB7Ci0gICAgICAgICAgICBTdHJp
bmcgdW5pZm9ybU5hbWUgPSBpbmZvLm5hbWUgKyAiWyIgKyBTdHJpbmc6Om51bWJlcihpbmRleCkg
KyAiXSI7Ci0KLSAgICAgICAgICAgIGlmIChuYW1lID09IHVuaWZvcm1OYW1lIHx8IG5hbWUgPT0g
aW5mby5uYW1lKQotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6
Y3JlYXRlKHByb2dyYW0sIHVuaWZvcm1Mb2NhdGlvbiwgaW5mby50eXBlKTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLQotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKLQotICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRWZXJ0
ZXhBdHRyaWIiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKLSAgICB9Ci0KLSAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpW
ZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZl
cnRleEF0dHJpYlN0YXRlKGluZGV4KTsKLQotICAgIGlmIChtX2FuZ2xlSW5zdGFuY2VkQXJyYXlz
ICYmIHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0RJVklT
T1JfQU5HTEUpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuZGl2aXNvcik7Ci0K
LSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVY
X0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKLSAgICAgICAgaWYgKCghaXNHTEVTMkNvbXBs
aWFudCgpICYmICFpbmRleCAmJiBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0
dHJpYlN0YXRlKDApLmJ1ZmZlckJpbmRpbmcgPT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKQotICAg
ICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJpbmRpbmcKLSAgICAgICAgICAgIHx8ICFzdGF0ZS5i
dWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVyPihz
dGF0ZS5idWZmZXJCaW5kaW5nKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVY
X0FUVFJJQl9BUlJBWV9FTkFCTEVEOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRl
LmVuYWJsZWQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJS
QVlfTk9STUFMSVpFRDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5ub3JtYWxp
emVkKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NJ
WkU6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuc2l6ZSk7Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGUub3JpZ2luYWxTdHJpZGUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhzdGF0ZS50eXBlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVVJS
RU5UX1ZFUlRFWF9BVFRSSUI6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQzMkFy
cmF5OjpjcmVhdGUobV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF0udmFsdWUsIDQpKTsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAiZ2V0VmVydGV4QXR0cmliIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsK
LSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotbG9uZyBsb25nIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4
LCBHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBHQzNEc2l6ZWlwdHIgcmVzdWx0ID0gbV9jb250ZXh0LT5n
ZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8bG9uZyBsb25nPihyZXN1bHQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJvb2wgaXNWYWxpZCA9IGZh
bHNlOwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
R0VORVJBVEVfTUlQTUFQX0hJTlQ6Ci0gICAgICAgIGlzVmFsaWQgPSB0cnVlOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVf
SElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcwotICAgICAgICBpZiAobV9vZXNT
dGFuZGFyZERlcml2YXRpdmVzKQotICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7Ci0gICAgICAg
IGJyZWFrOwotICAgIH0KLSAgICBpZiAoIWlzVmFsaWQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImhpbnQiLCAiaW52YWxpZCB0
YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmhpbnQodGFy
Z2V0LCBtb2RlKTsKLX0KLQotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0J1
ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQotewotICAgIGlmICghYnVmZmVyIHx8IGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIWJ1ZmZlci0+
aGFzRXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2Nv
bnRleHQtPmlzQnVmZmVyKGJ1ZmZlci0+b2JqZWN0KCkpOwotfQotCi1ib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGV4
dExvc3Q7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkKLXsKLSAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uICYmICFtX2hh
c1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24pIHsKLSAgICAgICAgTE9HKFdlYkdMLCAiQ29udGV4
dCBpcyBiZWluZyB1c2VkLiBBdHRlbXB0IHRvIHJlc29sdmUgdGhlIHBvbGljeS4iKTsKLSAgICAg
ICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzKCktPmRvY3VtZW50KCkudG9wRG9jdW1lbnQo
KTsKLSAgICAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKTsKLSAgICAgICAgaWYgKHBh
Z2UgJiYgIWRvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxlKCkpCi0gICAgICAgICAgICBwYWdlLT5t
YWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5yZXNvbHZlV2ViR0xQb2xpY3lGb3JVUkwoZG9j
dW1lbnQudXJsKCkpOwotICAgICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgY3VycmVudGx5IGRvIGFu
eXRoaW5nIHdpdGggdGhlIHJlc3VsdCBmcm9tIHJlc29sdXRpb24uIEEgbW9yZQotICAgICAgICAv
LyBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBtaWdodCB0cnkgdG8gY29uc3RydWN0IGEgcmVhbCBj
b250ZXh0LCBldGMgYW5kIHByb2NlZWQKLSAgICAgICAgLy8gd2l0aCBub3JtYWwgb3BlcmF0aW9u
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI5
MTIyCi0gICAgICAgIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbiA9IHRydWU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1fY29udGV4dExvc3QgfHwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxlZChH
QzNEZW51bSBjYXApCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVDYXBhYmlsaXR5KCJpc0VuYWJsZWQiLCBjYXApKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpCi0gICAgICAgIHJl
dHVybiBtX3N0ZW5jaWxFbmFibGVkOwotICAgIHJldHVybiBtX2NvbnRleHQtPmlzRW5hYmxlZChj
YXApOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVidWZm
ZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCi17Ci0gICAgaWYgKCFmcmFtZWJ1ZmZl
ciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
aWYgKCFmcmFtZWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIHJldHVybiBtX2NvbnRleHQtPmlzRnJhbWVidWZmZXIoZnJhbWVidWZmZXItPm9iamVj
dCgpKTsKLX0KLQotR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dyYW0o
V2ViR0xQcm9ncmFtKiBwcm9ncmFtKQotewotICAgIGlmICghcHJvZ3JhbSB8fCBpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4
dC0+aXNQcm9ncmFtKHByb2dyYW0tPm9iamVjdCgpKTsKLX0KLQotR0MzRGJvb2xlYW4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVy
YnVmZmVyKQotewotICAgIGlmICghcmVuZGVyYnVmZmVyIHx8IGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIXJlbmRlcmJ1ZmZlci0+aGFzRXZl
ckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRleHQt
PmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkpOwotfQotCi1HQzNEYm9vbGVh
biBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCi17
Ci0gICAgaWYgKCFzaGFkZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRleHQtPmlzU2hhZGVyKHNoYWRlci0+b2JqZWN0
KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4dHVyZShX
ZWJHTFRleHR1cmUqIHRleHR1cmUpCi17Ci0gICAgaWYgKCF0ZXh0dXJlIHx8IGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAoIXRleHR1cmUtPmhh
c0V2ZXJCZWVuQm91bmQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb250
ZXh0LT5pc1RleHR1cmUodGV4dHVyZS0+b2JqZWN0KCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5saW5l
V2lkdGgod2lkdGgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1Byb2dy
YW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImxpbmtQcm9ncmFtIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewotICAgICAgICBXZWJHTFNoYWRlciogdmVy
dGV4U2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlZFUlRFWF9TSEFERVIpOwotICAgICAgICBXZWJHTFNoYWRlciogZnJhZ21lbnRTaGFkZXIgPSBw
cm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRfU0hB
REVSKTsKLSAgICAgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRleFNoYWRlci0+aXNWYWxp
ZCgpIHx8ICFmcmFnbWVudFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzVmFsaWQoKSB8fCAh
bV9jb250ZXh0LT5wcmVjaXNpb25zTWF0Y2gob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciksIG9i
amVjdE9yWmVybyhmcmFnbWVudFNoYWRlcikpIHx8ICFtX2NvbnRleHQtPmNoZWNrVmFyeWluZ3NQ
YWNraW5nKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIpLCBvYmplY3RPclplcm8oZnJhZ21lbnRT
aGFkZXIpKSkgewotICAgICAgICAgICAgcHJvZ3JhbS0+c2V0TGlua1N0YXR1cyhmYWxzZSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPmxp
bmtQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7Ci0gICAgcHJvZ3JhbS0+aW5jcmVhc2VM
aW5rQ291bnQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBpeGVsU3RvcmVp
KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKLSAgICAgICAgbV91
bnBhY2tGbGlwWSA9IHBhcmFtOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6Ci0gICAgICAgIG1fdW5wYWNr
UHJlbXVsdGlwbHlBbHBoYSA9IHBhcmFtOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgotICAgICAg
ICBpZiAocGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVGQVVMVF9XRUJHTCB8
fCBwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKLSAgICAgICAgICAgIG1fdW5wYWNr
Q29sb3JzcGFjZUNvbnZlcnNpb24gPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4ocGFyYW0pOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9y
IFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiKTsKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpQQUNLX0FMSUdOTUVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5UOgotICAgICAgICBpZiAocGFyYW0gPT0gMSB8fCBwYXJhbSA9PSAyIHx8IHBhcmFtID09
IDQgfHwgcGFyYW0gPT0gOCkgewotICAgICAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpQQUNLX0FMSUdOTUVOVCkKLSAgICAgICAgICAgICAgICBtX3BhY2tBbGlnbm1lbnQg
PSBwYXJhbTsKLSAgICAgICAgICAgIGVsc2UgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19B
TElHTk1FTlQ6Ci0gICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQgPSBwYXJhbTsKLSAg
ICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9yIGFs
aWdubWVudCIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFr
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykKLXsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAg
bV9jb250ZXh0LT5wb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNp
emVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5
cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gRHVlIHRv
IFdlYkdMJ3Mgc2FtZS1vcmlnaW4gcmVzdHJpY3Rpb25zLCBpdCBpcyBub3QgcG9zc2libGUgdG8K
LSAgICAvLyB0YWludCB0aGUgb3JpZ2luIHVzaW5nIHRoZSBXZWJHTCBBUEkuCi0gICAgQVNTRVJU
KGNhbnZhcygpLT5vcmlnaW5DbGVhbigpKTsKLSAgICAvLyBWYWxpZGF0ZSBpbnB1dCBwYXJhbWV0
ZXJzLgotICAgIGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicmVhZFBpeGVscyIsICJubyBkZXN0aW5hdGlv
biBBcnJheUJ1ZmZlclZpZXciKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBzd2l0Y2gg
KGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
OgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlk
IGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIs
ICJmb3JtYXQgbm90IFJHQkEgb3IgdHlwZSBub3QgVU5TSUdORURfQllURSIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotICAgIC8vIFZhbGlkYXRlIGFycmF5IHR5cGUgYWdhaW5zdCBwaXhlbCB0
eXBlLgotICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZl
ciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNh
ZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsIHJlYXNv
bik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gQ2FsY3VsYXRlIGFycmF5IHNpemUs
IHRha2luZyBpbnRvIGNvbnNpZGVyYXRpb24gb2YgUEFDS19BTElHTk1FTlQuCi0gICAgdW5zaWdu
ZWQgaW50IHRvdGFsQnl0ZXNSZXF1aXJlZCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IHBhZGRpbmcg
PSAwOwotICAgIGlmICghbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIHsKLSAgICAgICAgR0Mz
RGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwg
dHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVpcmVk
LCAmcGFkZGluZyk7Ci0gICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9f
RVJST1IpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAicmVhZFBpeGVs
cyIsICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVxdWlyZWQp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBsYXJnZSBl
bm91Z2ggZm9yIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0gICAgdm9pZCogZGF0YSA9IHBpeGVs
cy0+YmFzZUFkZHJlc3MoKTsKLQotICAgIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJp
bmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5n
ZXQoKSk7Ci0gICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZWFkblBpeGVsc0VYVCh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy0+Ynl0ZUxlbmd0aCgpLCBkYXRhKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci0gICAgfQotCi0jaWYgT1MoREFSV0lOKQot
ICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgLy8gd2UgaGF2ZW4ndCBjb21wdXRl
ZCBwYWRkaW5nCi0gICAgICAgIG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9y
bWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVzUmVx
dWlyZWQsICZwYWRkaW5nKTsKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVu
IEdMIGRyaXZlciBidWcgb24gTWFjIEFORCB0aGUgR0xFUyBkcml2ZXIgYnVnCi0gICAgLy8gb24g
UUMgaXMgZml4ZWQsIGkuZS4sIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxzIHNob3VsZAot
ICAgIC8vIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgotICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkg
ewotICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSByZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIGNoYXIqPihkYXRhKTsKLSAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXkgPSAwOyBpeSA8IGhl
aWdodDsgKytpeSkgewotICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXggPSAwOyBpeCA8IHdp
ZHRoOyArK2l4KSB7Ci0gICAgICAgICAgICAgICAgcGl4ZWxzWzNdID0gMjU1OwotICAgICAgICAg
ICAgICAgIHBpeGVscyArPSA0OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcGl4ZWxzICs9
IHBhZGRpbmc7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCi17Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+cmVsZWFz
ZVNoYWRlckNvbXBpbGVyKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZW5k
ZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwg
ImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5kZXJidWZmZXIiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSgicmVuZGVyYnVm
ZmVyU3RvcmFnZSIsIHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNo
IChpbnRlcm5hbGZvcm1hdCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NP
TVBPTkVOVDE2OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCNTY1OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4OgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUOgotICAgICAgICBpZiAoaW50ZXJu
YWxmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUICYmICFtX2V4dHNSR0Ip
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQi
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBtX2NvbnRleHQtPnJl
bmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7
Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJu
YWxmb3JtYXQpOwotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQodHJ1
ZSk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVpZ2h0
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RF
TkNJTDoKLSAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIEV4dGVuc2lvbnMzRDo6
REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9y
ZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7
Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50ZXJu
YWxmb3JtYXQpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVmZmVy
U3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQp
Ci17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTaXplKCJzY2lz
c29yIiwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnNj
aXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBzdHJp
bmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgic2hhZGVy
U291cmNlIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFN0cmluZyBzdHJpbmdXaXRo
b3V0Q29tbWVudHMgPSBTdHJpcENvbW1lbnRzKHN0cmluZykucmVzdWx0KCk7Ci0gICAgaWYgKCF2
YWxpZGF0ZVN0cmluZygic2hhZGVyU291cmNlIiwgc3RyaW5nV2l0aG91dENvbW1lbnRzKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIHNoYWRlci0+c2V0U291cmNlKHN0cmluZyk7Ci0gICAgbV9jb250
ZXh0LT5zaGFkZXJTb3VyY2Uob2JqZWN0T3JaZXJvKHNoYWRlciksIHN0cmluZ1dpdGhvdXRDb21t
ZW50cyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuYyhHQzNE
ZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKLXsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVN0
ZW5jaWxGdW5jKCJzdGVuY2lsRnVuYyIsIGZ1bmMpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9z
dGVuY2lsRnVuY1JlZiA9IHJlZjsKLSAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKLSAg
ICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7Ci0gICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0g
bWFzazsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVt
IGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
IXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCBmdW5jKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIHN3aXRjaCAoZmFjZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZST05UX0FORF9CQUNLOgotICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwotICAg
ICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKLSAgICAgICAgbV9zdGVuY2lsRnVuY01h
c2sgPSBtYXNrOwotICAgICAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVDoKLSAgICAgICAgbV9z
dGVuY2lsRnVuY1JlZiA9IHJlZjsKLSAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgotICAgICAg
ICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKLSAgICAgICAgbV9zdGVuY2lsRnVuY01hc2tC
YWNrID0gbWFzazsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxGdW5j
U2VwYXJhdGUiLCAiaW52YWxpZCBmYWNlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
bV9jb250ZXh0LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFzayhHQzNEdWludCBtYXNr
KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKLSAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7
Ci0gICAgbV9jb250ZXh0LT5zdGVuY2lsTWFzayhtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQg
bWFzaykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0gICAgc3dpdGNoIChmYWNlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJP
TlRfQU5EX0JBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwotICAgICAgICBtX3N0
ZW5jaWxNYXNrQmFjayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZST05UOgotICAgICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzoKLSAgICAgICAgbV9zdGVu
Y2lsTWFza0JhY2sgPSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAic3Rl
bmNpbE1hc2tTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0Mz
RGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChmYWls
LCB6ZmFpbCwgenBhc3MpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNp
bE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWws
IEdDM0RlbnVtIHpwYXNzKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcFNlcGFyYXRlKGZhY2UsIGZh
aWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscywg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3JlIGFu
eSBlcnJvcnMgcmV0dXJuZWQuCi0gICAgZWMgPSAwOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0g
dmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAg
QVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJ
bWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUpKTsKLSAgICBBU1NFUlQodGV4KTsKLSAgICBBU1NFUlQoIWxldmVs
IHx8ICFXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSk7Ci0gICAgaWYgKCFwaXhl
bHMpIHsKLSAgICAgICAgLy8gTm90ZTogQ2hyb21pdW0ncyBPcGVuR0wgaW1wbGVtZW50YXRpb24g
Y2xlYXJzIHRleHR1cmVzIGFuZCBpc1Jlc291cmNlU2FmZSgpIGlzIHRoZXJlZm9yZSB0cnVlLgot
ICAgICAgICAvLyBGb3Igb3RoZXIgaW1wbGVtZW50YXRpb25zLCBpZiB0aGV5IGFyZSB1c2luZyBB
TkdMRV9kZXB0aF90ZXh0dXJlLCBBTkdMRSBkZXB0aCB0ZXh0dXJlcwotICAgICAgICAvLyBjYW4g
bm90IGJlIGNsZWFyZWQgd2l0aCB0ZXhJbWFnZTJEIGFuZCBtdXN0IGJlIGNsZWFyZWQgYnkgYmlu
ZGluZyB0byBhbiBmYm8gYW5kIGNhbGxpbmcKLSAgICAgICAgLy8gY2xlYXIuCi0gICAgICAgIGlm
IChpc1Jlc291cmNlU2FmZSgpKQotICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1h
dCwgdHlwZSwgbnVsbHB0cik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYm9vbCBzdWNj
ZWVkID0gbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBt
X3VucGFja0FsaWdubWVudCk7Ci0gICAgICAgICAgICBpZiAoIXN1Y2NlZWQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKHZh
bGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpOwot
ICAgICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwotICAg
ICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgcGl4ZWxzKTsKLSAgICAgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGZ1
bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2ZSB0aGUg
ZGF0YSBmb3IgdGhpcyBsZXZlbC4KLSAgICAgICAgICAgIHRleC0+bWFya0ludmFsaWQodGFyZ2V0
LCBsZXZlbCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgdGV4
LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIHR5cGUpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRElt
cGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1h
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAg
ICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRy
YWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwg
bV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7
Ci0gICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJ
bWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0
cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhh
T3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOwotICAgIGNvbnN0IHZv
aWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsKLQot
ICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIGlmICh0eXBlID09IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcgJiYg
IWZsaXBZKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAgIGVsc2UgewotICAg
ICAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERhdGEs
IGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdlRXh0
cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1hZ2VF
eHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
dGV4SW1hZ2UyRCIsICJwYWNrSW1hZ2UgZXJyb3IiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05N
RU5ULCAxKTsKLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBuZWVk
Q29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKLSAgICBpZiAo
bV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShH
cmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwot
fQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25U
eXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNlVHlwZSwgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCkKLXsKLSAgICBp
ZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBmdW5jdGlvblR5cGUs
IHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZv
cm1hdCwgdHlwZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFdlYkdMVGV4dHVyZSog
dGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoZnVuY3Rpb25OYW1lLCB0YXJnZXQsIHRy
dWUpOwotICAgIGlmICghdGV4dHVyZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KGZ1bmN0aW9uVHlwZSA9PSBOb3RUZXhTdWJJbWFnZTJEKSB7Ci0gICAgICAgIGlmIChsZXZlbCAm
JiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9u
TmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZvciBTb3VyY2VBcnJheUJ1ZmZlclZpZXcsIGZ1
bmN0aW9uIHZhbGlkYXRlVGV4RnVuY0RhdGEoKSB3b3VsZCBoYW5kbGUgd2hldGhlciB0byB2YWxp
ZGF0ZSB0aGUgU2V0dGFibGVUZXhGb3JtYXQKLSAgICAgICAgLy8gYnkgY2hlY2tpbmcgaWYgdGhl
IEFycmF5QnVmZmVyVmlldyBpcyBudWxsIG9yIG5vdC4KLSAgICAgICAgaWYgKHNvdXJjZVR5cGUg
IT0gU291cmNlQXJyYXlCdWZmZXJWaWV3KSB7Ci0gICAgICAgICAgICBpZiAoIXZhbGlkYXRlU2V0
dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghdmFsaWRh
dGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICghdmFsaWRhdGVTaXplKGZ1bmN0aW9uTmFtZSwgeG9m
ZnNldCwgeW9mZnNldCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIC8vIEJl
Zm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92ZXJmbG93IGhh
cHBlbnMgZmlyc3QuCi0gICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlvZmZzZXQg
KyBoZWlnaHQgPCAwKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYmFkIGRpbWVuc2lvbnMiKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoeG9mZnNl
dCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCAr
IGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewotICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHRleHR1cmUtPmdldEludGVybmFsRm9y
bWF0KHRhcmdldCwgbGV2ZWwpICE9IGZvcm1hdCB8fCB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwg
bGV2ZWwpICE9IHR5cGUpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBhbmQgZm9y
bWF0IGRvIG5vdCBtYXRjaCB0ZXh0dXJlIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQs
IEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRleEZ1
bmNEYXRhKCJ0ZXhJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
cGl4ZWxzLCBOdWxsQWxsb3dlZCkKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1h
Z2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBl
LCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMgPyBwaXhl
bHMtPmJhc2VBZGRyZXNzKCkgOiAwOwotICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKLSAg
ICBib29sIGNoYW5nZVVucGFja0FsaWdubWVudCA9IGZhbHNlOwotICAgIGlmIChkYXRhICYmICht
X3VucGFja0ZsaXBZIHx8IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKLSAgICAgICAgaWYg
KCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5
cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tB
bGlnbm1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91
bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGVtcERhdGEpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBkYXRhID0gdGVtcERhdGEuZGF0YSgpOwotICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQg
PSB0cnVlOwotICAgIH0KLSAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQotICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCAxKTsKLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwg
ZGF0YSwgZWMpOwotICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCi0gICAgICAgIG1fY29u
dGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1f
dW5wYWNrQWxpZ25tZW50KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVj
KQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFw
aXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQs
IFNvdXJjZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVscy0+
d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGJvb2wgbmVlZENvbnZl
cnNpb24gPSB0cnVlOwotICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5cyBv
ZiBmb3JtYXQgUkdCQTguCi0gICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVzdGlu
YXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBGbGlw
IG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBpZiAoIW1fdW5wYWNr
RmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSAmJiBmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSkKLSAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNlIHsKLSAgICAgICAg
aWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUsIG1f
dW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAi
dGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBt
X2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5U
LCAxKTsKLSAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
cGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIG5lZWRD
b252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7Ci0g
ICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25t
ZW50KTsKLX0KLQotUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3
SW1hZ2VJbnRvQnVmZmVyKEltYWdlKiBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQg
ZGV2aWNlU2NhbGVGYWN0b3IpCi17Ci0gICAgSW50U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQpOwot
ICAgIHNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwotICAgIEltYWdlQnVmZmVyKiBidWYg
PSBtX2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7Ci0gICAgaWYgKCFidWYp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9N
RU1PUlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgfQotCi0gICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBpbWFn
ZS0+c2l6ZSgpKTsKLSAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBzaXplKTsK
LSAgICBidWYtPmNvbnRleHQoKS0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCBkZXN0UmVjdCwgc3JjUmVjdCk7Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdlQnVm
ZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleEltYWdlMkQiLCBpbWFn
ZSwgZWMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVu
ZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRl
cmVyKCkpOwotICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQotICAgICAgICBp
bWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0KCks
IGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOwotCi0gICAgaWYgKCFpbWFnZUZv
clJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2Uy
RCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQs
IGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZv
cm1hdCwgdHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHRleEltYWdlMkRJbXBs
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9yUmVu
ZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0ZsaXBZ
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoInRleEltYWdl
MkQiLCBjYW52YXMsIGVjKSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4
U3ViSW1hZ2UyRCwgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwg
dHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkdMVGV4dHVyZSogdGV4dHVy
ZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwot
ICAgIC8vIElmIHBvc3NpYmxlLCBjb3B5IGZyb20gdGhlIGNhbnZhcyBlbGVtZW50IGRpcmVjdGx5
IHRvIHRoZSB0ZXh0dXJlCi0gICAgLy8gdmlhIHRoZSBHUFUsIHdpdGhvdXQgYSByZWFkLWJhY2sg
dG8gc3lzdGVtIG1lbW9yeS4KLSAgICAvLwotICAgIC8vIEZJWE1FOiByZXN0cmljdGlvbiBvZiAo
UkdCIHx8IFJHQkEpL1VOU0lHTkVEX0JZVEUgc2hvdWxkIGJlIGxpZnRlZCB3aGVuCi0gICAgLy8g
SW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGZ1
bGx5IGZ1bmN0aW9uYWwuCi0gICAgaWYgKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEID09
IHRhcmdldCAmJiB0ZXh0dXJlICYmIHR5cGUgPT0gdGV4dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxl
dmVsKQotICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9y
bWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKSB7Ci0gICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52
YXMtPmJ1ZmZlcigpOwotICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZv
cm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZv
cm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgewotICAgICAg
ICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0
LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIHR5cGUpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VE
YXRhID0gY2FudmFzLT5nZXRJbWFnZURhdGEoKTsKLSAgICBpZiAoaW1hZ2VEYXRhKQotICAgICAg
ICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUs
IGltYWdlRGF0YS5nZXQoKSwgZWMpOwotICAgIGVsc2UKLSAgICAgICAgdGV4SW1hZ2UyREltcGwo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3Bp
ZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8p
Ci1QYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJhbWVUb0lt
YWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBCYWNraW5nU3RvcmVDb3B5IGJhY2tpbmdTdG9y
ZUNvcHksIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIEludFNpemUgc2l6ZSh2aWRlby0+dmlkZW9X
aWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSk7Ci0gICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1f
Z2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKLSAgICBpZiAoIWJ1Zikgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9S
WSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0gICAgSW50UmVjdCBkZXN0UmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpOwotICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMgaW50byBhIEdQVS1HUFUgdGV4dHVy
ZSBjb3B5IGluc3RlYWQgb2YgQ1BVIHJlYWRiYWNrLgotICAgIHZpZGVvLT5wYWludEN1cnJlbnRG
cmFtZUluQ29udGV4dChidWYtPmNvbnRleHQoKSwgZGVzdFJlY3QpOwotICAgIHJldHVybiBidWYt
PmNvcHlJbWFnZShiYWNraW5nU3RvcmVDb3B5KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8s
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoInRleEltYWdlMkQiLCB2
aWRlbywgZWMpCi0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RU
ZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgMCwgMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEdvIHRocm91
Z2ggdGhlIGZhc3QgcGF0aCBkb2luZyBhIEdQVS1HUFUgdGV4dHVyZXMgY29weSB3aXRob3V0IGEg
cmVhZGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBpZiBwb3NzaWJsZS4KLSAgICAvLyBPdGhlcndpc2Us
IGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgU1cgcGF0aC4KLSAgICAvLyBGSVhNRTog
VGhlIGN1cnJlbnQgcmVzdHJpY3Rpb25zIHJlcXVpcmUgdGhhdCBmb3JtYXQgc2hvdWQgYmUgUkdC
IG9yIFJHQkEsCi0gICAgLy8gdHlwZSBzaG91bGQgYmUgVU5TSUdORURfQllURSBhbmQgbGV2ZWwg
c2hvdWxkIGJlIDAuIEl0IG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZS4KLSAgICBXZWJHTFRl
eHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFy
Z2V0LCB0cnVlKTsKLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0gdGFy
Z2V0ICYmIHRleHR1cmUKLSAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkKLSAgICAgICAgJiYgdHlw
ZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQotICAgICAgICAmJiAodGV4dHVy
ZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgJiYgIWxl
dmVsKSB7Ci0gICAgICAgIGlmICh2aWRlby0+Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1UZXh0
dXJlKG1fY29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGxldmVsLCB0eXBlLCBpbnRl
cm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgewot
ICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFs
Zm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgdHlwZSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOb3JtYWwg
cHVyZSBTVyBwYXRoLgotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFn
ZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKLSAgICBpZiAo
IWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSwgZWMpOwotfQotI2VuZGlmCi0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQ
YXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFt
ZiwgR0MzRGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2
YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsKLSAg
ICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKLSAgICAgICAgaWYgKChpc0Zsb2F0ICYmIHBhcmFt
ZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWYgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJFUEVBVCkKLSAgICAgICAgICAgIHx8ICghaXNGbG9hdCAmJiBwYXJhbWkgIT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBFQVQp
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6OlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMKLSAgICAgICAgaWYgKCFtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciwgRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIs
ICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAg
aWYgKGlzRmxvYXQpIHsKLSAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJmKHBuYW1lLCBwYXJhbWYp
OwotICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFyYW1m
KTsKLSAgICB9IGVsc2UgewotICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBhcmFt
aSk7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJh
bWkpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRl
cmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKQotewot
ICAgIHRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBwYXJhbSwgMCwgdHJ1ZSk7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgdGV4UGFyYW1ldGVyKHRhcmdl
dCwgcG5hbWUsIDAsIHBhcmFtLCBmYWxzZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4
ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25v
cmUgYW55IGVycm9ycyByZXR1cm5lZAotICAgIGVjID0gMDsKLSAgICBBU1NFUlQoIWlzQ29udGV4
dExvc3QoKSk7Ci0gICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleFN1Yklt
YWdlMkQiLCBUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIDAsIGZvcm1hdCwgdHlwZSkpOwotICAgIEFTU0VSVCh2YWxpZGF0ZVNpemUoInRleFN1Yklt
YWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSk7Ci0gICAgQVNTRVJUKHZhbGlkYXRlU2V0dGFibGVU
ZXhGb3JtYXQoInRleFN1YkltYWdlMkQiLCBmb3JtYXQpKTsKLSAgICBXZWJHTFRleHR1cmUqIHRl
eCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUp
OwotICAgIGlmICghdGV4KSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIEFTU0VSVCgoeG9mZnNldCArIHdpZHRoKSA+PSAwKTsKLSAg
ICBBU1NFUlQoKHlvZmZzZXQgKyBoZWlnaHQpID49IDApOwotICAgIEFTU0VSVCh0ZXgtPmdldFdp
ZHRoKHRhcmdldCwgbGV2ZWwpID49ICh4b2Zmc2V0ICsgd2lkdGgpKTsKLSAgICBBU1NFUlQodGV4
LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkgPj0gKHlvZmZzZXQgKyBoZWlnaHQpKTsKLSAgICBB
U1NFUlQodGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSA9PSBmb3JtYXQpOwot
ICAgIEFTU0VSVCh0ZXgtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgPT0gdHlwZSk7Ci0gICAgbV9j
b250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1s
RG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRh
dGE7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFjdG9y
KGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFjZUNv
bnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOyAgCi0gICAgaWYgKCFpbWFnZUV4
dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJhZCBp
bWFnZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpE
YXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZUZv
cm1hdCgpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFnZUV4
dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKLSAgICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0YSA9
IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRhKCk7Ci0KLSAgICBib29sIG5lZWRDb252ZXJz
aW9uID0gdHJ1ZTsKLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0
UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nICYmICFmbGlwWSkKLSAgICAgICAgbmVl
ZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQt
PnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZ
LCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCks
IGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNl
VW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGlt
YWdlIGRhdGEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3Rv
cmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJ
bWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+d2lkdGgo
KSwgaW1hZ2UtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsICBuZWVkQ29udmVyc2lvbiA/IGRhdGEu
ZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQg
IT0gMSkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6
VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVU
ZXhGdW5jRGF0YSgidGV4U3ViSW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHBpeGVscywgTnVsbE5vdEFsbG93ZWQpCi0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1
bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZpZXcs
IHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlLCB4
b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIHZvaWQqIGRhdGEgPSBwaXhl
bHMtPmJhc2VBZGRyZXNzKCk7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOwotICAgIGJv
b2wgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gZmFsc2U7Ci0gICAgaWYgKGRhdGEgJiYgKG1fdW5w
YWNrRmxpcFkgfHwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKSkgewotICAgICAgICBpZiAoIW1f
Y29udGV4dC0+ZXh0cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0FsaWdu
bWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZW1wRGF0YSkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGRh
dGEgPSB0ZW1wRGF0YS5kYXRhKCk7Ci0gICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVudCA9IHRy
dWU7Ci0gICAgfQotICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCi0gICAgICAgIG1fY29u
dGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEp
OwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSwgZWMpOwotICAgIGlmIChjaGFuZ2VV
bnBhY2tBbGlnbm1lbnQpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3ND
b250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVj
ID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhlbHMgfHwgIXZh
bGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUltYWdl
RGF0YSwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhl
aWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBib29sIG5lZWRDb252ZXJzaW9u
ID0gdHJ1ZTsKLSAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgb2YgZm9y
bWF0IFJHQkE4LgotICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0aW9u
IGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxpcCBvciBQ
cmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCi0gICAgaWYgKGZvcm1hdCA9PSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFICYmICFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpCi0g
ICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICgh
bV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0LCB0eXBlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1
YkltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgIH0KLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAgbV9j
b250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwg
MSk7Ci0gICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsIG5lZWRD
b252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7Ci0g
ICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxT
dG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25t
ZW50KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9m
ZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFnZSwg
ZWMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVuZGVy
ID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRlcmVy
KCkpOwotICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQotICAgICAgICBpbWFn
ZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIGlt
YWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOwotCi0gICAgaWYgKCFpbWFnZUZvclJl
bmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwg
U291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBpbWFnZUZvclJl
bmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUs
IHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB0ZXhTdWJJbWFnZTJE
SW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGltYWdl
Rm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFj
a0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMg
PSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENh
bnZhc0VsZW1lbnQoInRleFN1YkltYWdlMkQiLCBjYW52YXMsIGVjKQotICAgICAgICB8fCAhdmFs
aWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTENh
bnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBjYW52
YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdl
dEltYWdlRGF0YSgpOwotICAgIGlmIChpbWFnZURhdGEpCi0gICAgICAgIHRleFN1YkltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZURhdGEu
Z2V0KCksIGVjKTsKLSAgICBlbHNlCi0gICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwg
bGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFn
ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0KLSNpZiBFTkFCTEUoVklERU8pCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
SFRNTFZpZGVvRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIHZpZGVvLCBlYykKLSAgICAgICAgfHwg
IXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUhU
TUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgo
KSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNl
dCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0Zy
YW1lVG9JbWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsK
LSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm47Ci0gICAgdGV4U3ViSW1hZ2UyREltcGwo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQo
KSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBh
Y2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RmbG9hdCB4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9n
cmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgInVuaWZvcm0xZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJv
Z3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3Jt
MWYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZs
b2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVj
KTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIDEpKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxl
bmd0aCgpLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCBzaXplLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0x
aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlm
b3JtMWkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIGlmICgobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNE
OjpTQU1QTEVSX0NVQkUpICYmIHggPj0gKGludCltX3RleHR1cmVVbml0cy5zaXplKCkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJ1bmlmb3JtMWkiLCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2Nh
dGlvbiwgdiwgMSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+dHlwZSgp
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHYtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgICAgIGlmICh2LT5kYXRhKClb
aV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7Ci0gICAgICAg
ICAgICAgICAgTE9HKFdlYkdMLCAiVGV4dHVyZSB1bml0IHNpemU9JXp1LCB2WyVkXT0lZC4gTG9j
YXRpb24gdHlwZSA9ICUwNFguIiwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpLCBpLCB2LT5kYXRhKClb
aV0sIGxvY2F0aW9uLT50eXBlKCkpOwotICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZhbGlk
IHRleHR1cmUgdW5pdCIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB2LT5sZW5ndGgoKSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYsIHNpemUsIDEp
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpTQU1QTEVSX0NVQkUpCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSk7ICsraSkgewotICAgICAgICAgICAgaWYgKCgoR0Mz
RGludCopdilbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7
Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRp
b24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0yZiIs
ICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMmYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgs
IHkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMmZ2Iiwg
bG9jYXRpb24sIHYsIDIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZv
cm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgpKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZv
cm0yZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
Y29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2Nh
dGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTJp
IiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShsb2NhdGlvbi0+bG9jYXRpb24oKSwg
eCwgeSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMml2Iiwg
bG9jYXRpb24sIHYsIDIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZv
cm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgpKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3Jt
Mml2IiwgbG9jYXRpb24sIHYsIHNpemUsIDIpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2Nv
bnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAyLCB2KTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0
IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zZihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgeCwgeSwgeik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQz
MkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFt
ZXRlcnMoInVuaWZvcm0zZnYiLCBsb2NhdGlvbiwgdiwgMykpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3Ro
KCkgLyAzLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCBzaXplIC8gMywgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdD
M0RpbnQgeSwgR0MzRGludCB6LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFS
QU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJl
bnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0zaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJl
bnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51
bmlmb3JtM2kobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCAzKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCBzaXpl
LCAzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0
aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMywgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdywgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlm
b3JtNGYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9uLT5sb2NhdGlv
bigpLCB4LCB5LCB6LCB3KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkq
IHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygi
dW5pZm9ybTRmdiIsIGxvY2F0aW9uLCB2LCA0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9j
b250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQs
IHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNE
c2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsK
LSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJh
bWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDQpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNp
emUgLyA0LCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aShj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEaW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9j
dXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGkiLCAibG9jYXRpb24gbm90IGZvciBj
dXJyZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4
dC0+dW5pZm9ybTRpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9j
YXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwgdiwgNCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwg
diwgc2l6ZSwgNCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRp
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOwotfQotCi12b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVu
aWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKLSAgICAgICAgcmV0
dXJuOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24o
KSwgdi0+bGVuZ3RoKCkgLyA0LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2
LCBzaXplLCA0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJp
eDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHRyYW5zcG9zZSwgdik7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMy
QXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4
UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDkp
KQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDksIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0
LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gOSwgdHJhbnNw
b3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0
ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VE
X1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4NGZ2IiwgbG9jYXRpb24sIHRy
YW5zcG9zZSwgdiwgMTYpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3Jt
TWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDE2LCB0cmFuc3Bv
c2UsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
TWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRy
aXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCAxNikpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHNpemUgLyAxNiwgdHJhbnNwb3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAoIWNo
ZWNrT2JqZWN0VG9CZUJvdW5kKCJ1c2VQcm9ncmFtIiwgcHJvZ3JhbSwgZGVsZXRlZCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAoZGVsZXRlZCkKLSAgICAgICAgcHJvZ3JhbSA9IDA7Ci0gICAg
aWYgKHByb2dyYW0gJiYgIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1c2VQ
cm9ncmFtIiwgInByb2dyYW0gbm90IHZhbGlkIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgaWYgKG1fY3VycmVudFByb2dyYW0gIT0gcHJvZ3JhbSkgewotICAgICAgICBpZiAobV9jdXJy
ZW50UHJvZ3JhbSkKLSAgICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQoZ3Jh
cGhpY3NDb250ZXh0M0QoKSk7Ci0gICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOwot
ICAgICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKLSAg
ICAgICAgaWYgKHByb2dyYW0pCi0gICAgICAgICAgICBwcm9ncmFtLT5vbkF0dGFjaGVkKCk7Ci0g
ICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQcm9ncmFtKFdl
YkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJ2YWxpZGF0ZVByb2dyYW0iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29udGV4dC0+dmFsaWRhdGVQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHYwKQotewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRy
aWIxZiIsIGluZGV4LCAxLCB2MCwgMC4wZiwgMC4wZiwgMS4wZik7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJB
cnJheSogdikKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGlu
ZGV4LCB2LCAxKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJp
YjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAg
ICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGluZGV4LCB2LCBzaXplLCAx
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmKEdDM0R1
aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKLXsKLSAgICB2ZXJ0ZXhBdHRy
aWJmSW1wbCgidmVydGV4QXR0cmliMmYiLCBpbmRleCwgMiwgdjAsIHYxLCAwLjBmLCAxLjBmKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdihHQzNEdWlu
dCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVy
dGV4QXR0cmliMmZ2IiwgaW5kZXgsIHYsIDIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplKQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMmZ2Iiwg
aW5kZXgsIHYsIHNpemUsIDIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBH
QzNEZmxvYXQgdjIpCi17Ci0gICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjNmIiwg
aW5kZXgsIDMsIHYwLCB2MSwgdjIsIDEuMGYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCi17
Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwgMyk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgdmVydGV4QXR0
cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwgc2l6ZSwgMyk7Ci19Ci0KLXZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYzKQot
ewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZiIsIGluZGV4LCA0LCB2MCwg
djEsIHYyLCB2Myk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRy
aWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKLXsKLSAgICB2ZXJ0ZXhBdHRy
aWJmdkltcGwoInZlcnRleEF0dHJpYjRmdiIsIGluZGV4LCB2LCA0KTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZs
b2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRl
eEF0dHJpYjRmdiIsIGluZGV4LCB2LCBzaXplLCA0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6
ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlk
ZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllU
RToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgotICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZhbGlk
IHR5cGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoaW5kZXggPj0gbV9tYXhW
ZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbmRleCBvdXQgb2Yg
cmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoc2l6ZSA8IDEgfHwgc2l6
ZSA+IDQgfHwgc3RyaWRlIDwgMCB8fCBzdHJpZGUgPiAyNTUgfHwgb2Zmc2V0IDwgMCkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
InZlcnRleEF0dHJpYlBvaW50ZXIiLCAiYmFkIHNpemUsIHN0cmlkZSBvciBvZmZzZXQiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZlcikgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgIm5vIGJvdW5kIEFSUkFZX0JVRkZFUiIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGVsZW1l
bnRzIHRoZSBib3VuZCBidWZmZXIgY2FuIGhvbGQsIGdpdmVuIHRoZSBvZmZzZXQsIHNpemUsIHR5
cGUgYW5kIHN0cmlkZQotICAgIHVuc2lnbmVkIGludCB0eXBlU2l6ZSA9IHNpemVJbkJ5dGVzKHR5
cGUpOwotICAgIGlmICghdHlwZVNpemUpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiaW52
YWxpZCB0eXBlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKChzdHJpZGUgJSB0
eXBlU2l6ZSkgfHwgKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkgJSB0eXBlU2l6ZSkp
IHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJzdHJpZGUgb3Igb2Zmc2V0IG5vdCB2
YWxpZCBmb3IgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIEdDM0RzaXplaSBi
eXRlc1BlckVsZW1lbnQgPSBzaXplICogdHlwZVNpemU7Ci0KLSAgICBtX2JvdW5kVmVydGV4QXJy
YXlPYmplY3QtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBieXRlc1BlckVsZW1lbnQsIHNp
emUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zm
c2V0KSwgbV9ib3VuZEFycmF5QnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBv
aW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8
R0MzRGludHB0cj4ob2Zmc2V0KSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBpZiAoIXZhbGlkYXRlU2l6ZSgidmlld3BvcnQiLCB3aWR0aCwgaGVpZ2h0KSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dmlld3BvcnQoeCwgeSwgd2lkdGgsIGhl
aWdodCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZUxvc3RDb250ZXh0
KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJsb3NlQ29udGV4dCIsICJjb250
ZXh0IGFscmVhZHkgbG9zdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250
ZXh0R3JvdXAtPmxvc2VDb250ZXh0R3JvdXAobW9kZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojpsb3NlQ29udGV4dEltcGwoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29u
dGV4dE1vZGUgbW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKLSAgICBtX2NvbnRleHRMb3N0TW9kZSA9
IG1vZGU7Ci0KLSAgICBpZiAobW9kZSA9PSBSZWFsTG9zdENvbnRleHQpIHsKLSAgICAgICAgLy8g
SW5mb3JtIHRoZSBlbWJlZGRlciB0aGF0IGEgbG9zdCBjb250ZXh0IHdhcyByZWNlaXZlZC4gSW4g
cmVzcG9uc2UsIHRoZSBlbWJlZGRlciBtaWdodAotICAgICAgICAvLyBkZWNpZGUgdG8gdGFrZSBh
Y3Rpb24gc3VjaCBhcyBhc2tpbmcgdGhlIHVzZXIgZm9yIHBlcm1pc3Npb24gdG8gdXNlIFdlYkdM
IGFnYWluLgotICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY2FudmFzKCktPmRvY3VtZW50KCku
ZnJhbWUoKSkKLSAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5kaWRMb3NlV2Vi
R0xDb250ZXh0KG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0U3Rh
dHVzQVJCKCkpOwotICAgIH0KLQotICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKLQot
ICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAgLy8gTWFrZSBhYnNvbHV0ZWx5IHN1
cmUgd2UgZG8gbm90IHJlZmVyIHRvIGFuIGFscmVhZHktZGVsZXRlZCB0ZXh0dXJlIG9yIGZyYW1l
YnVmZmVyLgotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRleHR1cmUyREJpbmRpbmcoMCk7
Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKDApOwotICAg
IH0KLQotICAgIC8vIFRoZXJlIGlzIG5vIGRpcmVjdCB3YXkgdG8gY2xlYXIgZXJyb3JzIGZyb20g
YSBHTCBpbXBsZW1lbnRhdGlvbiBhbmQKLSAgICAvLyBsb29waW5nIHVudGlsIGdldEVycm9yKCkg
YmVjb21lcyBOT19FUlJPUiBtaWdodCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIGlmCi0gICAgLy8g
dGhlIGRyaXZlciBvciBjb250ZXh0IGltcGxlbWVudGF0aW9uIGhhZCBhIGJ1Zy4gU28sIGxvb3Ag
YSByZWFzb25hYmx5Ci0gICAgLy8gbGFyZ2UgbnVtYmVyIG9mIHRpbWVzIHRvIGNsZWFyIGFueSBl
eGlzdGluZyBlcnJvcnMuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewotICAg
ICAgICBpZiAobV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT19F
UlJPUikKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBDb25zb2xlRGlzcGxheVByZWZl
cmVuY2UgZGlzcGxheSA9IChtb2RlID09IFJlYWxMb3N0Q29udGV4dCkgPyBEaXNwbGF5SW5Db25z
b2xlOiBEb250RGlzcGxheUluQ29uc29sZTsKLSAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMLCAibG9zZUNvbnRleHQiLCAiY29udGV4dCBs
b3N0IiwgZGlzcGxheSk7Ci0KLSAgICAvLyBEb24ndCBhbGxvdyByZXN0b3JhdGlvbiB1bmxlc3Mg
dGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXMgYm90aCBiZWVuCi0gICAgLy8gZGlzcGF0Y2hlZCBh
bmQgaXRzIGRlZmF1bHQgYmVoYXZpb3IgcHJldmVudGVkLgotICAgIG1fcmVzdG9yZUFsbG93ZWQg
PSBmYWxzZTsKLQotICAgIC8vIEFsd2F5cyBkZWZlciB0aGUgZGlzcGF0Y2ggb2YgdGhlIGNvbnRl
eHQgbG9zdCBldmVudCwgdG8gaW1wbGVtZW50Ci0gICAgLy8gdGhlIHNwZWMgYmVoYXZpb3Igb2Yg
cXVldWVpbmcgYSB0YXNrLgotICAgIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIuc3Rh
cnRPbmVTaG90KDApOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VSZXN0
b3JlQ29udGV4dCgpCi17Ci0gICAgaWYgKCFpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCBub3QgbG9zdCIpOwotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Jlc3RvcmVBbGxvd2VkKSB7Ci0gICAgICAgIGlmICht
X2NvbnRleHRMb3N0TW9kZSA9PSBTeW50aGV0aWNMb3N0Q29udGV4dCkKLSAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJl
c3RvcmVDb250ZXh0IiwgImNvbnRleHQgcmVzdG9yYXRpb24gbm90IGFsbG93ZWQiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICghbV9yZXN0b3JlVGltZXIuaXNBY3RpdmUoKSkK
LSAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi1QbGF0Zm9ybUxh
eWVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAotewotICAg
IHJldHVybiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
KSA/IG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpIDogMDsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2JqZWN0
KQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3Qob2JqZWN0KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVj
dCogb2JqZWN0KQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICBtX2NvbnRl
eHRHcm91cC0+YWRkT2JqZWN0KG9iamVjdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpyZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2JqZWN0KQotewot
ICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fY29udGV4dE9iamVjdHMucmVtb3ZlKG9iamVjdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjphZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2JqZWN0
KQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICBtX2NvbnRleHRPYmplY3Rz
LmFkZChvYmplY3QpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoQW5k
UmVtb3ZlQWxsT2JqZWN0cygpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgd2hpbGUgKG1fY29udGV4dE9iamVjdHMuc2l6ZSgp
ID4gMCkgewotICAgICAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVjdCo+OjppdGVyYXRvciBp
dCA9IG1fY29udGV4dE9iamVjdHMuYmVnaW4oKTsKLSAgICAgICAgKCppdCktPmRldGFjaENvbnRl
eHQoKTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoYXNQZW5kaW5n
QWN0aXZpdHkoKSBjb25zdAotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnN0b3AoKQotewotICAgIGlmICghaXNDb250ZXh0TG9zdCgpICYmICFt
X2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pIHsKLSAgICAgICAgZm9yY2VMb3N0Q29udGV4dChT
eW50aGV0aWNMb3N0Q29udGV4dCk7Ci0gICAgICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHQzRCgp
OwotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm9v
bGVhblBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEYm9vbGVhbiB2YWx1ZSA9
IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Ci19Ci0KLVdlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihHQzNE
ZW51bSBwbmFtZSkKLXsKLSAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X1dSSVRFTUFTSykgewotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKDAsIDApOwotICAgIH0KLSAgICBHQzNEYm9vbGVhbiB2YWx1ZVs0XSA9IHsw
fTsKLSAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Ci0gICAgYm9vbCBi
b29sVmFsdWVbNF07Ci0gICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IDQ7ICsraWkpCi0gICAgICAg
IGJvb2xWYWx1ZVtpaV0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1ZVtpaV0pOwotICAgIHJldHVy
biBXZWJHTEdldEluZm8oYm9vbFZhbHVlLCA0KTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0RmxvYXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCi17Ci0gICAg
R0MzRGZsb2F0IHZhbHVlID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgJnZh
bHVlKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLX0KLQotV2ViR0xHZXRJbmZv
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0SW50UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQot
ewotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5h
bWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Ci19Ci0KLVdlYkdM
R2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQotewotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYocG5hbWUsICZ2YWx1ZSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0
aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFt
ZSkKLXsKLSAgICBHQzNEZmxvYXQgdmFsdWVbNF0gPSB7MH07Ci0gICAgbV9jb250ZXh0LT5nZXRG
bG9hdHYocG5hbWUsIHZhbHVlKTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSAwOwotICAgIHN3aXRj
aCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX1BPSU5UX1NJ
WkVfUkFOR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJRFRI
X1JBTkdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdFOgotICAgICAg
ICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORF9DT0xPUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9W
QUxVRToKLSAgICAgICAgbGVuZ3RoID0gNDsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci19Ci0KLVdlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0MzRGVu
dW0gcG5hbWUpCi17Ci0gICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKLSAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gMDsKLSAg
ICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQ
T1JUX0RJTVM6Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlZJRVdQT1JUOgotICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLSAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3QgY2hh
ciogZnVuY3Rpb25OYW1lLCBib29sIHByZXBhcmVUb0RyYXcpCi17Ci0gICAgYm9vbCByZXNldEFj
dGl2ZVVuaXQgPSBmYWxzZTsKLSAgICBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25GbGFn
IGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25G
bGFnPigobV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRl
bnNpb25GbG9hdExpbmVhckVuYWJsZWQgOiAwKSB8IChtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5l
YXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25IYWxmRmxvYXRMaW5lYXJFbmFibGVk
IDogMCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbV90ZXh0dXJlVW5pdHMu
c2l6ZSgpOyArK2lpKSB7Ci0gICAgICAgIGlmICgobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUy
REJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmctPm5lZWRUb1Vz
ZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkKLSAgICAgICAgICAgIHx8IChtX3RleHR1cmVVbml0
c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJl
Q3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkpIHsKLSAg
ICAgICAgICAgIGlmIChpaSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7Ci0gICAgICAgICAgICAg
ICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlpKTsKLSAgICAgICAgICAgICAgICByZXNldEFj
dGl2ZVVuaXQgPSB0cnVlOwotICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNldEFjdGl2ZVVuaXQp
IHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoaWkpOwotICAgICAg
ICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgV2ViR0xUZXh0dXJlKiB0ZXgyRDsKLSAgICAgICAgICAgIFdlYkdMVGV4dHVyZSogdGV4
Q3ViZU1hcDsKLSAgICAgICAgICAgIGlmIChwcmVwYXJlVG9EcmF3KSB7Ci0gICAgICAgICAgICAg
ICAgU3RyaW5nIG1zZyhTdHJpbmcoInRleHR1cmUgYm91bmQgdG8gdGV4dHVyZSB1bml0ICIpICsg
U3RyaW5nOjpudW1iZXIoaWkpCi0gICAgICAgICAgICAgICAgICAgICsgIiBpcyBub3QgcmVuZGVy
YWJsZS4gSXQgbWF5YmUgbm9uLXBvd2VyLW9mLTIgYW5kIGhhdmUgaW5jb21wYXRpYmxlIHRleHR1
cmUgZmlsdGVyaW5nIG9yIGlzIG5vdCAndGV4dHVyZSBjb21wbGV0ZScsIgotICAgICAgICAgICAg
ICAgICAgICArICIgb3IgaXQgaXMgYSBmbG9hdC9oYWxmLWZsb2F0IHR5cGUgd2l0aCBsaW5lYXIg
ZmlsdGVyaW5nIGFuZCB3aXRob3V0IHRoZSByZWxldmFudCBmbG9hdC9oYWxmLWZsb2F0IGxpbmVh
ciBleHRlbnNpb24gZW5hYmxlZC4iKTsKLSAgICAgICAgICAgICAgICBwcmludEdMV2FybmluZ1Rv
Q29uc29sZShmdW5jdGlvbk5hbWUsIG1zZy51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgICAgICAg
ICB0ZXgyRCA9IG1fYmxhY2tUZXh0dXJlMkQuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgdGV4Q3Vi
ZU1hcCA9IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC5nZXQoKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgdGV4MkQgPSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmlu
ZGluZy5nZXQoKTsKLSAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV90ZXh0dXJlVW5pdHNb
aWldLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1cmVV
bml0c1tpaV0udGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lv
bnMpKQotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0ZXgyRCkpOwotICAgICAgICAgICAgaWYg
KG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJlVW5p
dHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVu
c2lvbnMpKQotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG9iamVjdE9yWmVybyh0ZXhDdWJlTWFwKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJlc2V0QWN0aXZlVW5pdCkKLSAgICAgICAgbV9jb250
ZXh0LT5hY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCkKLXsKLSAg
ICB1bnNpZ25lZCBjaGFyIGJsYWNrW10gPSB7MCwgMCwgMCwgMjU1fTsKLSAgICBtX2JsYWNrVGV4
dHVyZTJEID0gY3JlYXRlVGV4dHVyZSgpOwotICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmxhY2tUZXh0dXJlMkQtPm9iamVjdCgpKTsK
LSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwKTsKLSAgICBtX2JsYWNrVGV4dHVyZUN1YmVNYXAgPSBjcmVh
dGVUZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUCwgbV9ibGFja1RleHR1cmVDdWJlTWFwLT5vYmplY3QoKSk7Ci0g
ICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCwgMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwg
MSwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250
ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1ksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiwgMCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2sp
OwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgMCk7Ci19Ci0KLWJv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJD
b21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpCi17Ci0gICAgdW5zaWduZWQgbmVlZCA9
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5Rm9ybWF0KHRleEludGVybmFsRm9y
bWF0KTsKLSAgICB1bnNpZ25lZCBoYXZlID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5uZWxC
aXRzQnlGb3JtYXQoY29sb3JCdWZmZXJGb3JtYXQpOwotICAgIHJldHVybiAobmVlZCAmIGhhdmUp
ID09IG5lZWQ7Ci19Ci0KLUdDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRG
cmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkKLXsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQotICAgICAgICByZXR1cm4gbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCk7Ci0gICAgaWYgKG1fYXR0cmli
dXRlcy5hbHBoYSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwotICAg
IHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOwotfQotCi1pbnQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKQotewotICAgIGlmIChtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCi0gICAgICAgIHJl
dHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJXaWR0aCgpOwotICAgIHJl
dHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgpIDog
bV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7Ci19Ci0KLWlu
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKQotewot
ICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2Jq
ZWN0KCkpCi0gICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZm
ZXJIZWlnaHQoKTsKLSAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVmZmVy
LT5zaXplKCkuaGVpZ2h0KCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCkuaGVpZ2h0KCk7Ci19Ci0KLVdlYkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
dGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKLXsKLSAgICBXZWJHTFRleHR1cmUq
IHRleHR1cmUgPSBudWxscHRyOwotICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKLSAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVu
aXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcuZ2V0KCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9T
SVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9aOgotICAgICAgICBpZiAoIXVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOwotICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVu
aXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UDoKLSAgICAgICAgaWYgKHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOwotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIH0KLSAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVuaXRzW21fYWN0aXZl
VGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgIm5vIHRleHR1cmUiKTsKLSAgICByZXR1cm4gdGV4dHVyZTsKLX0K
LQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlTG9jYXRpb25MZW5ndGgoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBjb25z
dCB1bnNpZ25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoID0gMjU2OwotICAgIGlmIChzdHJpbmcu
bGVuZ3RoKCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJs
b2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
U2l6ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgeCwgR0MzRGludCB5KQotewot
ICAgIGlmICh4IDwgMCB8fCB5IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic2l6ZSA8IDAiKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCi17Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBzdHJpbmcubGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAoIXZhbGlkYXRlQ2hhcmFj
dGVyKHN0cmluZ1tpXSkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzdHJpbmcgbm90IEFTQ0lJ
Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1
bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TFVNSU5BTkNFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5D
RV9BTFBIQToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfU1RFTkNJTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9DT01QT05FTlQ6Ci0gICAgICAgIGlmIChtX3dlYmdsRGVwdGhUZXh0dXJlKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0cyBub3QgZW5h
YmxlZCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNS
R0JfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKLSAgICBkZWZh
dWx0OgotICAgICAgICBpZiAoKGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUIHx8IGZv
cm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKQotICAgICAgICAgICAgJiYgbV9l
eHRzUkdCKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4
dHVyZSBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHN3aXRj
aCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKLSAgICAgICAgaWYgKG1fb2VzVGV4
dHVyZUZsb2F0KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dGV4dHVyZSB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKLSAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUhhbGZG
bG9hdCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1
cmUgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0lOVF8yNF84OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgot
ICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIC8vIFZlcmlmeSB0aGF0IHRo
ZSBjb21iaW5hdGlvbiBvZiBmb3JtYXQgYW5kIHR5cGUgaXMgc3VwcG9ydGVkLgotICAgIHN3aXRj
aCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkxVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpIQUxG
X0ZMT0FUX09FUykgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUgZm9y
IGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKLSAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6U1JHQl9FWFQ6Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF81XzZfNQotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkhBTEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlw
ZSBmb3IgUkdCIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgotICAgICAgICBpZiAodHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQotICAgICAgICAgICAgJiYgdHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNAotICAgICAgICAgICAgJiYg
dHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMQotICAgICAg
ICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYm
IHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgUkdCQSBmb3JtYXQiKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6Ci0gICAgICAgIGlmICghbV93ZWJnbERl
cHRoVGV4dHVyZSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQuIERFUFRI
X0NPTVBPTkVOVCBub3QgZW5hYmxlZCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9T
SE9SVAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
SU5UKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQVEhf
Q09NUE9ORU5UIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChsZXZlbCA+IDApIHsKLSAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxldmVs
IG11c3QgYmUgMCBmb3IgREVQVEhfQ09NUE9ORU5UIGZvcm1hdCIpOwotICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1cmUp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LiBERVBUSF9TVEVOQ0lMIG5v
dCBlbmFibGVkIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAg
ICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84KSB7Ci0g
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQVEhfU1RFTkNJTCBm
b3JtYXQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAobGV2ZWwgPiAwKSB7Ci0gICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJlIDAg
Zm9yIERFUFRIX1NURU5DSUwgZm9ybWF0Iik7Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAgaWYgKGxldmVsIDwg
MCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEOgotICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhUZXh0dXJlTGV2ZWwp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAg
ICAgaWYgKGxldmVsID49IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgewotICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAvLyBUaGlzIGZ1bmN0aW9u
IG9ubHkgY2hlY2tzIGlmIGxldmVsIGlzIGxlZ2FsLCBzbyB3ZSByZXR1cm4gdHJ1ZSBhbmQgZG9u
J3QKLSAgICAvLyBnZW5lcmF0ZSBJTlZBTElEX0VOVU0gaWYgdGFyZ2V0IGlzIGlsbGVnYWwuCi0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleEZ1bmNWYWxpZGF0
aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKLXsKLSAgICAv
LyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGZvcm1hdCBhbmQgdHlwZSBjb21i
aW5hdGlvbi4KLSAgICAvLyBUaGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMgdGFraW5nIEhUTUxJ
bWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKLSAgICAvLyB0ZW1wb3JhcnkgZGF0YSBiYXNlZCBvbiB0
aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxlZ2FsLgotICAgIGlmICghdmFsaWRhdGVU
ZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwgdHlwZSwgbGV2ZWwpIHx8
ICF2YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDApIHsK
LSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQotICAgIEdDM0RpbnQgbWF4VGV4dHVyZVNpemVGb3JMZXZlbCA9IHBv
dygyLjAsIG1fbWF4VGV4dHVyZUxldmVsIC0gMSAtIGxldmVsKTsKLSAgICBzd2l0Y2ggKHRhcmdl
dCkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIGlm
ICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgfHwgaGVpZ2h0ID4gbWF4VGV4dHVyZVNp
emVGb3JMZXZlbCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBvdXQg
b2YgcmFuZ2UiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9aOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWjoKLSAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPSBUZXhTdWJJbWFnZTJE
ICYmIHdpZHRoICE9IGhlaWdodCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoICE9IGhl
aWdodCBmb3IgY3ViZSBtYXAiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGhlaWdodCBoZXJlLiBGb3IgdGV4SW1hZ2Ug
d2lkdGggPT0gaGVpZ2h0LgotICAgICAgICAvLyBGb3IgdGV4U3ViSW1hZ2UgdGhhdCB3aWxsIGJl
IGNoZWNrZWQgd2hlbiBjaGVja2luZyB5b2Zmc2V0ICsgaGVpZ2h0IGlzIGluIHJhbmdlLgotICAg
ICAgICBpZiAod2lkdGggPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7Ci0gICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSBmb3IgY3ViZSBtYXAiKTsKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBk
ZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGJvcmRlcikgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAiYm9yZGVyICE9IDAiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVU
ZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2ZWwsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcqIHBp
eGVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51
bGxEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbikKLXsKLSAgICBpZiAoIXBpeGVscykgewotICAgICAg
ICBpZiAoZGlzcG9zaXRpb24gPT0gTnVsbEFsbG93ZWQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOwotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZ1bmN0aW9u
TmFtZSwgZm9ybWF0LCB0eXBlLCBsZXZlbCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBp
ZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBl
KCkgIT0gSlNDOjpUeXBlVWludDgpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBV
TlNJR05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGlmIChwaXhlbHMtPmdl
dFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
dHlwZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50MTZBcnJheSIp
OwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9hdAot
ICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlRmxvYXQzMikgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90
IEZsb2F0MzJBcnJheSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VT
OiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Ci0gICAgICAgIC8vIEFzIHBlciB0aGUgc3BlY2lm
aWNhdGlvbiwgQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSBudWxsIHdoZW4KLSAgICAgICAgLy8g
T0VTX3RleHR1cmVfaGFsZl9mbG9hdCBpcyBlbmFibGVkLgotICAgICAgICBpZiAocGl4ZWxzKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgSEFMRl9GTE9BVF9PRVMgYnV0IEFycmF5
QnVmZmVyVmlldyBpcyBub3QgTlVMTCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCB0b3RhbEJ5dGVzUmVxdWlyZWQ7
Ci0gICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVz
KGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5
dGVzUmVxdWlyZWQsIDApOwotICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9f
RVJST1IpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0gICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVkKSB7
Ci0gICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKSB7Ci0gICAgICAgICAgZXJyb3Ig
PSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgs
IGhlaWdodCwgMSwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7Ci0gICAgICAgICAgaWYgKHBpeGVs
cy0+Ynl0ZUxlbmd0aCgpID09IHRvdGFsQnl0ZXNSZXF1aXJlZCkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJlcXVlc3Qgd2l0
aCBVTlBBQ0tfQUxJR05NRU5UID4gMSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmll
dyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVzdCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKLXsKLSAgICByZXR1
cm4gbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KTsKLX0KLQotYm9v
bCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscykKLXsKLSAgICBp
ZiAoIXBpeGVscykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgYnl0ZXNSZXF1aXJlZCA9IDA7Ci0KLSAg
ICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JH
Ql9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFf
UzNUQ19EWFQxX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdC
X0FNRDoKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4Owot
ICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKLSAgICAgICAgICAgIGNvbnN0
IGludCBrQmxvY2tIZWlnaHQgPSA0OwotICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Fjcm9zcyA9
ICh3aWR0aCArIGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxvY2tXaWR0aDsKLSAgICAgICAgICAgIGlu
dCBudW1CbG9ja3NEb3duID0gKGhlaWdodCArIGtCbG9ja0hlaWdodCAtIDEpIC8ga0Jsb2NrSGVp
Z2h0OwotICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51bUJs
b2Nrc0Rvd24gKiBrQmxvY2tTaXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKLSAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6Ci0gICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1EOgotICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9BTFBI
QV9BTUQ6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0gMTY7
Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OwotICAgICAgICAgICAgY29u
c3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7Ci0gICAgICAgICAgICBpbnQgbnVtQmxvY2tzQWNyb3Nz
ID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOwotICAgICAgICAgICAg
aW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxvY2tI
ZWlnaHQ7Ci0gICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICogbnVt
QmxvY2tzRG93biAqIGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgotICAg
ICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7Ci0gICAgICAgICAg
ICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA4OwotICAgICAgICAgICAgY29uc3QgaW50IGtCbG9j
a0hlaWdodCA9IDg7Ci0gICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdpZHRo
LCBrQmxvY2tXaWR0aCkgKiBzdGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiA0ICsgNykg
LyBrQmxvY2tTaXplOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKLSAgICAgICAgewotICAg
ICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OwotICAgICAgICAgICAgY29uc3QgaW50
IGtCbG9ja1dpZHRoID0gMTY7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0g
ODsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtCbG9ja1dp
ZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDIgKyA3KSAvIGtCbG9ja1Np
emU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25O
YW1lLCAiaW52YWxpZCBmb3JtYXQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSAhPSBieXRlc1JlcXVpcmVkKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBjb3JyZWN0IGZvciBk
aW1lbnNpb25zIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3Nl
ZFRleERpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0KQotewotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKLSAgICAgICAgY29uc3QgR0MzRHNpemVpIGtC
bG9ja1dpZHRoID0gNDsKLSAgICAgICAgY29uc3QgR0MzRHNpemVpIGtCbG9ja0hlaWdodCA9IDQ7
Ci0gICAgICAgIGNvbnN0IEdDM0RpbnQgbWF4VGV4dHVyZVNpemUgPSB0YXJnZXQgPyBtX21heFRl
eHR1cmVTaXplIDogbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7Ci0gICAgICAgIGNvbnN0IEdDM0Rz
aXplaSBtYXhDb21wcmVzc2VkRGltZW5zaW9uID0gbWF4VGV4dHVyZVNpemUgPj4gbGV2ZWw7Ci0g
ICAgICAgIGJvb2wgd2lkdGhWYWxpZCA9IChsZXZlbCAmJiB3aWR0aCA9PSAxKSB8fCAobGV2ZWwg
JiYgd2lkdGggPT0gMikgfHwgKCEod2lkdGggJSBrQmxvY2tXaWR0aCkgJiYgd2lkdGggPD0gbWF4
Q29tcHJlc3NlZERpbWVuc2lvbik7Ci0gICAgICAgIGJvb2wgaGVpZ2h0VmFsaWQgPSAobGV2ZWwg
JiYgaGVpZ2h0ID09IDEpIHx8IChsZXZlbCAmJiBoZWlnaHQgPT0gMikgfHwgKCEoaGVpZ2h0ICUg
a0Jsb2NrSGVpZ2h0KSAmJiBoZWlnaHQgPD0gbWF4Q29tcHJlc3NlZERpbWVuc2lvbik7Ci0gICAg
ICAgIGlmICghd2lkdGhWYWxpZCB8fCAhaGVpZ2h0VmFsaWQpIHsKLSAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxldmVsIik7Ci0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgot
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9JTUc6
Ci0gICAgICAgIC8vIEhlaWdodCBhbmQgd2lkdGggbXVzdCBiZSBwb3dlcnMgb2YgMi4KLSAgICAg
ICAgaWYgKCh3aWR0aCAmICh3aWR0aCAtIDEpKSB8fCAoaGVpZ2h0ICYgKGhlaWdodCAtIDEpKSkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBmb3Ig
bGV2ZWwiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
fQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4U3Vi
RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgV2ViR0xUZXh0
dXJlKiB0ZXgpCi17Ci0gICAgaWYgKHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwKSB7Ci0gICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IDwgMCIpOwotICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLQotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKLSAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRo
ID0gNDsKLSAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7Ci0gICAgICAgIGlmICgo
eG9mZnNldCAlIGtCbG9ja1dpZHRoKSB8fCAoeW9mZnNldCAlIGtCbG9ja0hlaWdodCkpIHsKLSAg
ICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IG5vdCBtdWx0aXBsZSBv
ZiA0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KHdpZHRoIC0geG9mZnNldCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKLSAgICAgICAg
ICAgIHx8IGhlaWdodCAtIHlvZmZzZXQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOwot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB2YWxp
ZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCwg
d2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKLSAgICB9Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzogewotICAgICAgICBpZiAoeG9mZnNldCB8
fCB5b2Zmc2V0KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgYW5kIHlvZmZz
ZXQgbXVzdCBiZSB6ZXJvIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKHdpZHRoICE9IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKLSAgICAg
ICAgICAgIHx8IGhlaWdodCAhPSB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2ggZXhpc3RpbmcgbGV2
ZWwiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdldCwg
bGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9k
ZSkKLXsKLSAgICBzd2l0Y2ggKG1vZGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQ
T0lOVFM6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9TVFJJUDoKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1A6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TElORVM6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfU1RSSVA6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRSSUFOR0xFUzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBkcmF3IG1vZGUiKTsKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
U3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKLXsKLSAgICBpZiAobV9z
dGVuY2lsTWFzayAhPSBtX3N0ZW5jaWxNYXNrQmFjayB8fCBtX3N0ZW5jaWxGdW5jUmVmICE9IG1f
c3RlbmNpbEZ1bmNSZWZCYWNrIHx8IG1fc3RlbmNpbEZ1bmNNYXNrICE9IG1fc3RlbmNpbEZ1bmNN
YXNrQmFjaykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZyb250IGFuZCBiYWNrIHN0ZW5jaWxz
IHNldHRpbmdzIGRvIG5vdCBtYXRjaCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZ1bmMpCi17
Ci0gICAgc3dpdGNoIChmdW5jKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TkVWRVI6
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVTUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpMRVFVQUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JFQVRFUjoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRVFVQUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RVFVQUw6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9URVFVQUw6Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxXQVlTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZ1bmN0aW9uIik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpw
cmludEdMRXJyb3JUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICgh
bV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIC0t
bV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQ7Ci0gICAgcHJpbnRXYXJuaW5nVG9Db25zb2xl
KG1lc3NhZ2UpOwotCi0gICAgaWYgKCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCkKLSAg
ICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXZWJHTDogdG9vIG1hbnkgZXJyb3JzLCBubyBt
b3JlIGVycm9ycyB3aWxsIGJlIHJlcG9ydGVkIHRvIHRoZSBjb25zb2xlIGZvciB0aGlzIGNvbnRl
eHQuIik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludFdhcm5pbmdUb0Nv
bnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQotewotICAgIGlmICghY2FudmFzKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICBjYW52YXMoKS0+ZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2FnZShN
ZXNzYWdlU291cmNlOjpSZW5kZXJpbmcsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywgbWVzc2FnZSk7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVyRnVu
Y1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGF0dGFjaG1lbnQpCi17Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYmIGF0dGFjaG1lbnQg
PiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAKLSAgICAgICAgICAgICYmIGF0
dGFjaG1lbnQgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X0FUVEFDSE1FTlQwICsgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpKSkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0dGFjaG1lbnQiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgc3dpdGNoIChtb2RlKSB7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlVOQ19BREQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVO
Q19TVUJUUkFDVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1JFVkVSU0VfU1VC
VFJBQ1Q6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1JTl9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNp
b25zM0Q6Ok1BWF9FWFQ6Ci0gICAgICAgIGlmICgobW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1JTl9F
WFQgfHwgbW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQpICYmICFtX2V4dEJsZW5kTWluTWF4
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
ZW51bSBzcmMsIEdDM0RlbnVtIGRzdCkKLXsKLSAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05FX01J
TlVTX0NPTlNUQU5UX0NPTE9SKQotICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6Q09OU1RBTlRfQUxQSEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
Q09OU1RBTlRfQUxQSEEpKQotICAgICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
Q09OU1RBTlRfQ09MT1IgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09O
U1RBTlRfQ09MT1IpCi0gICAgICAgICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpD
T05TVEFOVF9BTFBIQSB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05T
VEFOVF9BTFBIQSkpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW5jb21wYXRpYmxlIHNyYyBh
bmQgZHN0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHkoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApCi17Ci0gICAgc3dpdGNoIChjYXAp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDVUxMX0ZBQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
VEVTVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6U0FNUExFX0NPVkVSQUdFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
Y2FwYWJpbGl0eSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotfQotCi1ib29sIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQotewotICAgIGlmICghdikg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5jdGlv
bk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWlyZWRN
aW5TaXplKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNp
emUpCi17Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCksIHYt
Pmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNpemVp
IHNpemUsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCi17Ci0gICAgcmV0dXJuIHZhbGlkYXRl
VW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYs
IHNpemUsIHJlcXVpcmVkTWluU2l6ZSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKLXsKLSAg
ICBpZiAoIXYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRl
cnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxlbmd0
aCgpLCByZXF1aXJlZE1pblNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNw
b3NlLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkK
LXsKLSAgICBpZiAoIWxvY2F0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKGxv
Y2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImxvY2F0aW9uIGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGlmICghdikgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8g
YXJyYXkiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAodHJhbnNwb3Nl
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgaWYgKHNpemUgPCByZXF1aXJlZE1pblNpemUgfHwgKHNp
emUgJSByZXF1aXJlZE1pblNpemUpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUi
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
V2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRhUGFy
YW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gdXNhZ2UpCi17Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7Ci0gICAgc3dpdGNoICh0
YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZF
UjoKLSAgICAgICAgYnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50
QXJyYXlCdWZmZXIoKS5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSOgotICAgICAgICBidWZmZXIgPSBtX2JvdW5kQXJyYXlCdWZm
ZXIuZ2V0KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBp
ZiAoIWJ1ZmZlcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgc3dpdGNoICh1c2FnZSkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNUQVRJQ19EUkFXOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNfRFJB
VzoKLSAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKLSAgICB9Ci0gICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB1
c2FnZSIpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
SFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmICgh
aW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBp
bWFnZSIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIGNvbnN0IFVSTCYgdXJs
ID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3BvbnNlKCkudXJsKCk7Ci0gICAgaWYgKHVybC5p
c051bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxpZCgpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIGltYWdlIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7Ci0gICAgICAgIGVjID0gU0VDVVJJVFlf
RVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQot
Ci1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJubyBjYW52YXMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLSAgICBpZiAod291bGRUYWludE9yaWdpbihjYW52YXMpKSB7Ci0gICAgICAgIGVjID0g
U0VDVVJJVFlfRVJSOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0
cnVlOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxW
aWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoIXZpZGVv
IHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpIHsKLSAgICAgICAgZWMgPSBTRUNVUklU
WV9FUlI7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0jZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJbXBs
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBleHBl
Y3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdDM0Rm
bG9hdCB2MykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KLSAgICBp
ZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIHN3aXRjaCAoZXhwZWN0
ZWRTaXplKSB7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4
QXR0cmliMWYoaW5kZXgsIHYwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIDI6
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgNDoKLSAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliNGYo
aW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgfQotICAgIFZlcnRleEF0dHJpYlZhbHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVydGV4QXR0cmli
VmFsdWVbaW5kZXhdOwotICAgIGF0dHJpYlZhbHVlLnZhbHVlWzBdID0gdjA7Ci0gICAgYXR0cmli
VmFsdWUudmFsdWVbMV0gPSB2MTsKLSAgICBhdHRyaWJWYWx1ZS52YWx1ZVsyXSA9IHYyOwotICAg
IGF0dHJpYlZhbHVlLnZhbHVlWzNdID0gdjM7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWlu
dCBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
IXYpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKGZ1bmN0aW9uTmFtZSwgaW5kZXgsIHYtPmRhdGEo
KSwgdi0+bGVuZ3RoKCksIGV4cGVjdGVkU2l6ZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIGV4cGVj
dGVkU2l6ZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgaWYgKCF2KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXplKSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJp
bmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBJbiBH
TCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgotICAgIGlmIChpbmRleCB8
fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKLSAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsK
LSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYo
aW5kZXgsIHYpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMjoKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2KTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YjNmdihpbmRleCwgdik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSA0OgotICAg
ICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHYpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJp
YlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07Ci0gICAgYXR0cmliVmFsdWUuaW5p
dFZhbHVlKCk7Ci0gICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGV4cGVjdGVkU2l6ZTsgKytpaSkK
LSAgICAgICAgYXR0cmliVmFsdWUudmFsdWVbaWldID0gdltpaV07Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojppbml0VmVydGV4QXR0cmliMCgpCi17Ci0gICAgV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKLSAgICAKLSAgICBtX3ZlcnRleEF0
dHJpYjBCdWZmZXIgPSBjcmVhdGVCdWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyLT5v
YmplY3QoKSk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOwotICAgIG1f
Y29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQsIGZhbHNlLCAwLCAwKTsKLSAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyOwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSLCAwKTsKLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KDApOwotICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOwotICAgIG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzBdID0gMC4wZjsKLSAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVsxXSA9IDAuMGY7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSAwLjBmOwot
ICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKLSAgICBtX2ZvcmNlQXR0
cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOwotICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUg
PSBmYWxzZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVsYXRlVmVydGV4
QXR0cmliMChHQzNEc2l6ZWkgbnVtVmVydGV4KQotewotICAgIGNvbnN0IFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7Ci0gICAgY29uc3QgVmVydGV4QXR0cmli
VmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVswXTsKLSAgICBpZiAoIW1f
Y3VycmVudFByb2dyYW0pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBib29sIHVzaW5nVmVy
dGV4QXR0cmliMCA9IG1fY3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCk7Ci0g
ICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMCkKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwVXNlZEJl
Zm9yZSA9IHRydWU7Ci0gICAgaWYgKHN0YXRlLmVuYWJsZWQgJiYgdXNpbmdWZXJ0ZXhBdHRyaWIw
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKCF1c2luZ1ZlcnRleEF0dHJpYjAgJiYg
IW1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBt
X3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
LT5vYmplY3QoKSk7Ci0gICAgR0MzRHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0gKG51bVZlcnRl
eCArIDEpICogNCAqIHNpemVvZihHQzNEZmxvYXQpOwotICAgIGlmIChidWZmZXJEYXRhU2l6ZSA+
IG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5idWZmZXJE
YXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFTaXplLCAwLCBH
cmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKLSAgICAgICAgbV92ZXJ0ZXhBdHRyaWIw
QnVmZmVyU2l6ZSA9IGJ1ZmZlckRhdGFTaXplOwotICAgICAgICBtX2ZvcmNlQXR0cmliMEJ1ZmZl
clJlZmlsbCA9IHRydWU7Ci0gICAgfQotICAgIGlmICh1c2luZ1ZlcnRleEF0dHJpYjAKLSAgICAg
ICAgJiYgKG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsCi0gICAgICAgICAgICB8fCBhdHRyaWJW
YWx1ZS52YWx1ZVswXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXQotICAgICAgICAg
ICAgfHwgYXR0cmliVmFsdWUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVb
MV0KLSAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzJdICE9IG1fdmVydGV4QXR0cmli
MEJ1ZmZlclZhbHVlWzJdCi0gICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVszXSAhPSBt
X3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSkpIHsKLSAgICAgICAgYXV0byBidWZmZXJEYXRh
ID0gc3RkOjptYWtlX3VuaXF1ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEpICogNCk7Ci0g
ICAgICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAxOyArK2lpKSB7
Ci0gICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNF0gPSBhdHRyaWJWYWx1ZS52YWx1ZVswXTsK
LSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsx
XTsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBhdHRyaWJWYWx1ZS52YWx1
ZVsyXTsKLSAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgM10gPSBhdHRyaWJWYWx1ZS52
YWx1ZVszXTsKLSAgICAgICAgfQotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsw
XSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJW
YWx1ZVsxXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzFdOwotICAgICAgICBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJWYWx1ZVsyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwotICAgICAgICBtX3ZlcnRleEF0
dHJpYjBCdWZmZXJWYWx1ZVszXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOwotICAgICAgICBtX2Zv
cmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOwotICAgICAgICBtX2NvbnRleHQtPmJ1ZmZl
clN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVyRGF0YVNp
emUsIGJ1ZmZlckRhdGEuZ2V0KCkpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YlBvaW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAwKTsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0
ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCkKLXsKLSAgICBjb25zdCBXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOwotICAgIGlmIChzdGF0ZS5idWZm
ZXJCaW5kaW5nICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQt
PmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJv
KHN0YXRlLmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhB
dHRyaWJQb2ludGVyKDAsIHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6ZWQs
IHN0YXRlLm9yaWdpbmFsU3RyaWRlLCBzdGF0ZS5vZmZzZXQpOwotICAgIH0KLSAgICBtX2NvbnRl
eHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3Ja
ZXJvKG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKSkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCkKLXsKLSAgICBSZWZQdHI8V2ViR0xD
b250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVz
KCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOwotICAgIGNhbnZhcygp
LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKLSAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZXZlbnQtPmRl
ZmF1bHRQcmV2ZW50ZWQoKTsKLSAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExvc3RD
b250ZXh0ICYmIG1fcmVzdG9yZUFsbG93ZWQpCi0gICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0
T25lU2hvdCgwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9y
ZUNvbnRleHQoKQotewotICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKLSAgICBpZiAoIW1fY29u
dGV4dExvc3QpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRoZSByZW5kZXJpbmcgY29udGV4
dCBpcyBub3QgcmVzdG9yZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZQotICAg
IC8vIHdlYmdsY29udGV4dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVyLgotICAgIC8v
Ci0gICAgLy8gQmVjYXVzZSBvZiB0aGUgd2F5IG1fcmVzdG9yZVRpbWVyIGlzIHNldCB1cCBmb3Ig
cmVhbCB2cy4gc3ludGhldGljIGxvc3QKLSAgICAvLyBjb250ZXh0IGV2ZW50cywgd2UgZG9uJ3Qg
aGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHRlc3Qgc2hvcnQtY2lyY3VpdGluZwotICAgIC8vIHRo
ZSByZXRyeSBsb29wIGZvciByZWFsIGNvbnRleHQgbG9zdCBldmVudHMuCi0gICAgaWYgKCFtX3Jl
c3RvcmVBbGxvd2VkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgY29udGV4dExvc3RSZWFz
b24gPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FS
QigpOwotCi0gICAgc3dpdGNoIChjb250ZXh0TG9zdFJlYXNvbikgewotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SOgotICAgICAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0M0Qg
aW1wbGVtZW50YXRpb24gbWlnaHQgbm90IGZ1bGx5Ci0gICAgICAgIC8vIHN1cHBvcnQgR0xfQVJC
X3JvYnVzdG5lc3Mgc2VtYW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhlCi0gICAgICAgIC8v
IFdFQkdMX2xvc2VfY29udGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVuIHVzZWQgdG8gZm9y
Y2UKLSAgICAgICAgLy8gYSBsb3N0IGNvbnRleHQuCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpHVUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6Ci0gICAgICAgIC8vIFRoZSBy
ZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250ZXh0IHdhcwotICAg
ICAgICAvLyBndWlsdHkgb2YgY2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQuCi0gICAgICAgIHBy
aW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBvbiB0aGUgcGFnZSBj
YXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3JpbmcgdGhlIGNvbnRl
eHQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpJTk5PQ0VOVF9D
T05URVhUX1JFU0VUX0FSQjoKLSAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRoZSBjb250ZXh0IHRv
IGJlIHJlc3RvcmVkLgotICAgICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VU5L
Tk9XTl9DT05URVhUX1JFU0VUX0FSQjoKLSAgICAgICAgLy8gV2Fybi4gSWRlYWxseSwgcHJvbXB0
IHRoZSB1c2VyIHRlbGxpbmcgdGhlbSB0aGF0IFdlYkdMCi0gICAgICAgIC8vIGNvbnRlbnQgb24g
dGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8KLSAgICAgICAg
Ly8gcmVzZXQgYW5kIGFzayB0aGVtIHdoZXRoZXIgdGhleSB3YW50IHRvIGNvbnRpbnVlIHJ1bm5p
bmcKLSAgICAgICAgLy8gdGhlIGNvbnRlbnQuIE9ubHkgaWYgdGhleSBzYXkgInllcyIgc2hvdWxk
IHdlIHN0YXJ0Ci0gICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUgY29udGV4dC4K
LSAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBjb250ZW50IG9u
IHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvIHJlc2V0Iik7
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIEZyYW1lKiBmcmFtZSA9IGNhbnZhcygpLT5k
b2N1bWVudCgpLmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFtZS0+c2V0dGlu
Z3MoKS53ZWJHTEVuYWJsZWQoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEZyYW1lVmlldyog
dmlldyA9IGZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2aWV3KQotICAgICAgICByZXR1cm47Ci0g
ICAgU2Nyb2xsVmlldyogcm9vdCA9IHZpZXctPnJvb3QoKTsKLSAgICBpZiAoIXJvb3QpCi0gICAg
ICAgIHJldHVybjsKLSAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gcm9vdC0+aG9zdFdpbmRv
dygpOwotICAgIGlmICghaG9zdFdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUobV9h
dHRyaWJ1dGVzLCBob3N0V2luZG93KSk7Ci0gICAgaWYgKCFjb250ZXh0KSB7Ci0gICAgICAgIGlm
IChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQpCi0gICAgICAgICAgICBtX3Jl
c3RvcmVUaW1lci5zdGFydE9uZVNob3Qoc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMpOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAvLyBUaGlzIGxpa2VseSBzaG91bGRuJ3QgaGFwcGVu
IGJ1dCBpcyB0aGUgYmVzdCB3YXkgdG8gcmVwb3J0IGl0IHRvIHRoZSBXZWJHTCBhcHAuCi0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICIiLCAiZXJyb3IgcmVzdG9yaW5nIGNvbnRleHQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3aXRoIHRoZSBu
ZXcgR3JhcGhpY3NDb250ZXh0M0QuCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAg
ICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKLSAgICAgICAgRHJhd2luZ0J1
ZmZlcjo6UHJlc2VydmVEcmF3aW5nQnVmZmVyIHByZXNlcnZlID0gbV9hdHRyaWJ1dGVzLnByZXNl
cnZlRHJhd2luZ0J1ZmZlciA/IERyYXdpbmdCdWZmZXI6OlByZXNlcnZlIDogRHJhd2luZ0J1ZmZl
cjo6RGlzY2FyZDsKLSAgICAgICAgRHJhd2luZ0J1ZmZlcjo6QWxwaGFSZXF1aXJlbWVudCBhbHBo
YSA9IG1fYXR0cmlidXRlcy5hbHBoYSA/IERyYXdpbmdCdWZmZXI6OkFscGhhIDogRHJhd2luZ0J1
ZmZlcjo6T3BhcXVlOwotICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVmZmVyOjpj
cmVhdGUoY29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksIHByZXNlcnZlLCBh
bHBoYSk7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotICAgIH0KLQotICAgIG1f
Y29udGV4dCA9IGNvbnRleHQ7Ci0gICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOwotICAgIHNldHVw
RmxhZ3MoKTsKLSAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwotICAgIGNhbnZhcygpLT5kaXNw
YXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29u
dGV4dHJlc3RvcmVkRXZlbnQsIGZhbHNlLCB0cnVlLCAiIikpOwotfQotCi1TdHJpbmcgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjplbnN1cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYgdGV4dCkgY29uc3QK
LXsKLSAgICBpZiAodGV4dC5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6ZW1wdHlTdHJp
bmcoKTsKLSAgICByZXR1cm4gdGV4dDsKLX0KLQotV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJ
bWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKLSAgICA6
IG1fYnVmZmVycyhzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj5b
XT4oY2FwYWNpdHkpKQotICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKLXsKLX0KLQotSW1hZ2VC
dWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VC
dWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpbnQgaTsKLSAgICBmb3IgKGkgPSAw
OyBpIDwgbV9jYXBhY2l0eTsgKytpKSB7Ci0gICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1
ZmZlcnNbaV0uZ2V0KCk7Ci0gICAgICAgIGlmICghYnVmKQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGlmIChidWYtPmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKLSAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBidWJibGVUb0Zyb250KGkpOwotICAgICAgICByZXR1cm4gYnVmOwotICAg
IH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVmZmVy
OjpjcmVhdGUoc2l6ZSwgMSk7Ci0gICAgaWYgKCF0ZW1wKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICBpID0gc3RkOjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOwotICAgIG1fYnVmZmVyc1tp
XSA9IFdURjo6bW92ZSh0ZW1wKTsKLQotICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNb
aV0uZ2V0KCk7Ci0gICAgYnViYmxlVG9Gcm9udChpKTsKLSAgICByZXR1cm4gYnVmOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxlVG9G
cm9udChpbnQgaWR4KQotewotICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAwOyAtLWkpCi0gICAg
ICAgIG1fYnVmZmVyc1tpXS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKLX0KLQotbmFtZXNwYWNlIHsK
LQotICAgIFN0cmluZyBHZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJvcikKLSAgICB7Ci0gICAg
ICAgIHN3aXRjaCAoZXJyb3IpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNOgotICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX0VOVU0iOwotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOgotICAgICAgICAgICAgcmV0dXJu
ICJJTlZBTElEX1ZBTFVFIjsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT046Ci0gICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFUSU9OIjsKLSAg
ICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKLSAgICAgICAgICAg
IHJldHVybiAiT1VUX09GX01FTU9SWSI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgotICAgICAgICAgICAgcmV0dXJuICJJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiI7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTDoKLSAgICAgICAgICAgIHJldHVybiAiQ09OVEVYVF9MT1NU
X1dFQkdMIjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBTdHJpbmc6OmZv
cm1hdCgiV2ViR0wgRVJST1IoJTA0eCkiLCBlcnJvcik7Ci0gICAgICAgIH0KLSAgICB9Ci0KLX0g
Ly8gbmFtZXNwYWNlIGFub255bW91cwotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3lu
dGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5
KQotewotICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlICYmIGRpc3BsYXkgPT0g
RGlzcGxheUluQ29uc29sZSkgewotICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6ICIp
ICsgR2V0RXJyb3JTdHJpbmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25OYW1lKSAr
ICI6ICIgKyBTdHJpbmcoZGVzY3JpcHRpb24pOwotICAgICAgcHJpbnRHTEVycm9yVG9Db25zb2xl
KHN0cik7Ci0gICAgfQotICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IpOwot
fQotCi0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludEdMV2FybmluZ1RvQ29uc29s
ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQotewot
ICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7Ci0gICAgICAgIFN0cmluZyBz
dHIgPSBTdHJpbmcoIldlYkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiArIFN0
cmluZyhkZXNjcmlwdGlvbik7Ci0gICAgICAgIHByaW50R0xFcnJvclRvQ29uc29sZShzdHIpOwot
ICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U3RlbmNpbFRlc3Qo
KQotewotICAgIGJvb2wgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKLQotICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBtX2ZyYW1lYnVm
ZmVyQmluZGluZy0+aGFzU3RlbmNpbEJ1ZmZlcigpOwotICAgIGVsc2UgewotICAgICAgICBSZWZQ
dHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1
dGVzKCk7Ci0gICAgICAgIGhhdmVTdGVuY2lsQnVmZmVyID0gYXR0cmlidXRlcy0+c3RlbmNpbCgp
OwotICAgIH0KLSAgICBlbmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
VEVTVCwKLSAgICAgICAgICAgICAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCAmJiBoYXZlU3RlbmNp
bEJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVPckRpc2Fi
bGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKGVuYWJsZSkK
LSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwYWJpbGl0eSk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2NvbnRleHQtPmRpc2FibGUoY2FwYWJpbGl0eSk7Ci19Ci0KLUludFNpemUgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpjbGFtcGVkQ2FudmFzU2l6ZSgpCi17Ci0gICAgcmV0dXJuIEludFNpemUo
Y2xhbXAoY2FudmFzKCktPndpZHRoKCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzBdKSwKLSAgICAg
ICAgICAgICAgICAgICBjbGFtcChjYW52YXMoKS0+aGVpZ2h0KCksIDEsIG1fbWF4Vmlld3BvcnRE
aW1zWzFdKSk7Ci19Ci0KLUdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhEcmF3
QnVmZmVycygpCi17Ci0gICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIGlmICghbV9tYXhEcmF3QnVmZmVycykKLSAgICAgICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbV9tYXhEcmF3
QnVmZmVycyk7Ci0gICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29u
dGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhU
LCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKLSAgICAvLyBXRUJHTF9kcmF3X2J1ZmZlcnMgcmVx
dWlyZXMgTUFYX0NPTE9SX0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMuCi0gICAgcmV0
dXJuIHN0ZDo6bWluKG1fbWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2htZW50cyk7Ci19
Ci0KLUdDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFjaG1lbnRz
KCkKLXsKLSAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCi0gICAgICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhD
b2xvckF0dGFjaG1lbnRzKTsKLSAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2V0QmFja0RyYXdCdWZmZXIoR0MzRGVudW0g
YnVmKQotewotICAgIG1fYmFja0RyYXdCdWZmZXIgPSBidWY7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCkKLXsKLSAgICBFeGNlcHRp
b25Db2RlIGVjOwotICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpLCBlYyk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCi17Ci0gICAgRXhjZXB0
aW9uQ29kZSBlYzsKLSAgICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5n
ZXQoKSwgZWMpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3VwcG9ydHNEcmF3
QnVmZmVycygpCi17Ci0gICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVj
a2VkKSB7Ci0gICAgICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQgPSB0
cnVlOwotICAgICAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gV2ViR0xEcmF3QnVmZmVyczo6
c3VwcG9ydGVkKHRoaXMpOwotICAgIH0KLSAgICByZXR1cm4gbV9kcmF3QnVmZmVyc1N1cHBvcnRl
ZDsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXNJbnN0YW5jZWQo
R0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkg
cHJpbWNvdW50KQotewotICAgIGlmICghcHJpbWNvdW50KSB7Ci0gICAgICAgIG1hcmtDb250ZXh0
Q2hhbmdlZCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCF2YWxpZGF0ZURy
YXdBcnJheXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2RlLCBmaXJzdCwgY291bnQsIHByaW1j
b3VudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0KLSAg
ICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWlzR0xFUzJD
b21wbGlhbnQoKSkKLSAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVy
dGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmlj
dCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXNJbnN0YW5j
ZWQiLCB0cnVlKTsKLQotICAgIG1fY29udGV4dC0+ZHJhd0FycmF5c0luc3RhbmNlZChtb2RlLCBm
aXJzdCwgY291bnQsIHByaW1jb3VudCk7Ci0KLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAm
JiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0
ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKLSAg
ICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwgZmFs
c2UpOwotICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBj
b3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1jb3Vu
dCkKLXsKLSAgICBpZiAoIXByaW1jb3VudCkgewotICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQo
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0g
MDsKLSAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHNJbnN0YW5jZWQi
LCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cywgcHJpbWNvdW50KSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLQotICAgIGJvb2wgdmVy
dGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOwotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgp
KSB7Ci0gICAgICAgIGlmICghbnVtRWxlbWVudHMpCi0gICAgICAgICAgICB2YWxpZGF0ZUluZGV4
QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQp
LCBudW1FbGVtZW50cyk7Ci0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0
ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOwotICAgIH0KLSAgICBpZiAoIWlzR0xFUzJOUE9U
U3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1lbnRz
SW5zdGFuY2VkIiwgdHJ1ZSk7Ci0KLSAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50c0luc3RhbmNl
ZChtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgcHJp
bWNvdW50KTsKLQotICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBT
aW11bGF0ZWQpCi0gICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0
aW9uKCk7Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQotICAgICAgICBjaGVja1RleHR1
cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIGZhbHNlKTsKLSAgICBtYXJr
Q29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYkRpdmlzb3Ii
LCAiaW5kZXggb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRp
dmlzb3IpOwotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2aXNv
cik7Ci19Ci0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFKFdF
QkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDgxNiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgV2ViR0xSZW5kZXJpbmdDb250ZXh0X2gKLSNkZWZpbmUgV2ViR0xSZW5kZXJp
bmdDb250ZXh0X2gKLQotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgIkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCi0jaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2lu
Y2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCi0jaW5jbHVkZSA8bWVt
b3J5PgotI2luY2x1ZGUgPHJ1bnRpbWUvRmxvYXQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8cnVudGlt
ZS9JbnQzMkFycmF5Lmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+Ci0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQU5HTEVJbnN0YW5jZWRBcnJheXM7Ci1jbGFzcyBFWFRC
bGVuZE1pbk1heDsKLWNsYXNzIEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzsKLWNsYXNzIEVY
VFNoYWRlclRleHR1cmVMT0Q7Ci1jbGFzcyBFWFRzUkdCOwotY2xhc3MgRVhURnJhZ0RlcHRoOwot
Y2xhc3MgSFRNTEltYWdlRWxlbWVudDsKLWNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7Ci1jbGFzcyBJ
bWFnZUJ1ZmZlcjsKLWNsYXNzIEltYWdlRGF0YTsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBPRVNT
dGFuZGFyZERlcml2YXRpdmVzOwotY2xhc3MgT0VTVGV4dHVyZUZsb2F0OwotY2xhc3MgT0VTVGV4
dHVyZUZsb2F0TGluZWFyOwotY2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdDsKLWNsYXNzIE9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXI7Ci1jbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdDsKLWNsYXNz
IE9FU0VsZW1lbnRJbmRleFVpbnQ7Ci1jbGFzcyBXZWJHTEFjdGl2ZUluZm87Ci1jbGFzcyBXZWJH
TEJ1ZmZlcjsKLWNsYXNzIFdlYkdMQ29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xDb250ZXh0T2Jq
ZWN0OwotY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzsKLWNsYXNzIFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQzsKLWNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDOwotY2xh
c3MgV2ViR0xDb250ZXh0QXR0cmlidXRlczsKLWNsYXNzIFdlYkdMRGVidWdSZW5kZXJlckluZm87
Ci1jbGFzcyBXZWJHTERlYnVnU2hhZGVyczsKLWNsYXNzIFdlYkdMRGVwdGhUZXh0dXJlOwotY2xh
c3MgV2ViR0xEcmF3QnVmZmVyczsKLWNsYXNzIFdlYkdMRXh0ZW5zaW9uOwotY2xhc3MgV2ViR0xG
cmFtZWJ1ZmZlcjsKLWNsYXNzIFdlYkdMTG9zZUNvbnRleHQ7Ci1jbGFzcyBXZWJHTE9iamVjdDsK
LWNsYXNzIFdlYkdMUHJvZ3JhbTsKLWNsYXNzIFdlYkdMUmVuZGVyYnVmZmVyOwotY2xhc3MgV2Vi
R0xTaGFkZXI7Ci1jbGFzcyBXZWJHTFNoYXJlZE9iamVjdDsKLWNsYXNzIFdlYkdMU2hhZGVyUHJl
Y2lzaW9uRm9ybWF0OwotY2xhc3MgV2ViR0xUZXh0dXJlOwotY2xhc3MgV2ViR0xVbmlmb3JtTG9j
YXRpb247Ci1jbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwotCi10eXBlZGVmIGludCBF
eGNlcHRpb25Db2RlOwotCi1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHQgZmluYWwgOiBwdWJs
aWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHVibGljIEFjdGl2ZURPTU9iamVjdCB7Ci1wdWJs
aWM6Ci0gICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IGNy
ZWF0ZShIVE1MQ2FudmFzRWxlbWVudCosIFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMqKTsKLSAgICB2
aXJ0dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBpczNk
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotI2lmIFBMQVRGT1JNKFdJTikKLSAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGFjY2VsZXJhdGVkIDNkIGNhbnZhcyBvbiBXaW5kb3dzLgot
ICAgIHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
ZmFsc2U7IH0KLSNlbHNlCi0gICAgdmlydHVhbCBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0jZW5kaWYKLQotICAgIGludCBkcmF3aW5nQnVmZmVy
V2lkdGgoKSBjb25zdDsKLSAgICBpbnQgZHJhd2luZ0J1ZmZlckhlaWdodCgpIGNvbnN0OwotCi0g
ICAgdm9pZCBhY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIGF0dGFjaFNoYWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlciosIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGJpbmRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0qLCBH
QzNEdWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dm9pZCBiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTEZy
YW1lYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYmluZFJlbmRlcmJ1ZmZlcihH
QzNEZW51bSB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgYmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBn
cmVlbiwgR0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSk7Ci0gICAgdm9pZCBibGVuZEVx
dWF0aW9uKEdDM0RlbnVtIG1vZGUpOwotICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdD
M0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSk7Ci0gICAgdm9pZCBibGVuZEZ1bmMo
R0MzRGVudW0gc2ZhY3RvciwgR0MzRGVudW0gZGZhY3Rvcik7Ci0gICAgdm9pZCBibGVuZEZ1bmNT
ZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxw
aGEsIEdDM0RlbnVtIGRzdEFscGhhKTsKLQotICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0
YXJnZXQsIGxvbmcgbG9uZyBzaXplLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyKiBkYXRhLCBH
QzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgYnVmZmVyRGF0YShHQzNE
ZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25n
IGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgYnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5
QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgR0MzRGVudW0gY2hlY2tG
cmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpOwotICAgIHZvaWQgY2xlYXIoR0MzRGJp
dGZpZWxkIG1hc2spOwotICAgIHZvaWQgY2xlYXJDb2xvcihHQzNEZmxvYXQgcmVkLCBHQzNEZmxv
YXQgZ3JlZW4sIEdDM0RmbG9hdCBibHVlLCBHQzNEZmxvYXQgYWxwaGEpOwotICAgIHZvaWQgY2xl
YXJEZXB0aChHQzNEZmxvYXQpOwotICAgIHZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQpOwotICAg
IHZvaWQgY29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Ri
b29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKTsKLSAgICB2b2lkIGNvbXBpbGVTaGFkZXIo
V2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIGNvbXByZXNzZWRUZXhJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpOwot
ICAgIHZvaWQgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpOwotCi0gICAgdm9pZCBjb3B5VGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEaW50IGJvcmRlcik7Ci0gICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0KTsKLQotICAgIFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGNyZWF0ZUJ1ZmZlcigpOwotICAg
IFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4gY3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBQ
YXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4gY3JlYXRlUHJvZ3JhbSgpOwotICAgIFBhc3NSZWZQdHI8
V2ViR0xSZW5kZXJidWZmZXI+IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgIFBhc3NSZWZQdHI8
V2ViR0xTaGFkZXI+IGNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlLCBFeGNlcHRpb25Db2RlJik7
Ci0gICAgUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IGNyZWF0ZVRleHR1cmUoKTsKLQotICAgIHZv
aWQgY3VsbEZhY2UoR0MzRGVudW0gbW9kZSk7Ci0KLSAgICB2b2lkIGRlbGV0ZUJ1ZmZlcihXZWJH
TEJ1ZmZlciopOwotICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciop
OwotICAgIHZvaWQgZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKLSAgICB2b2lkIGRlbGV0
ZVJlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciopOwotICAgIHZvaWQgZGVsZXRlU2hhZGVy
KFdlYkdMU2hhZGVyKik7Ci0gICAgdm9pZCBkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSopOwot
Ci0gICAgdm9pZCBkZXB0aEZ1bmMoR0MzRGVudW0pOwotICAgIHZvaWQgZGVwdGhNYXNrKEdDM0Ri
b29sZWFuKTsKLSAgICB2b2lkIGRlcHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxvYXQg
ekZhcik7Ci0gICAgdm9pZCBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiwgV2ViR0xTaGFkZXIq
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkaXNhYmxlKEdDM0RlbnVtIGNhcCk7Ci0gICAg
dm9pZCBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIGRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwg
R0MzRHNpemVpIGNvdW50LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBkcmF3RWxlbWVudHMo
R0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXAp
OwotICAgIHZvaWQgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIGZpbmlzaCgpOwotICAgIHZvaWQgZmx1c2goKTsKLSAgICB2
b2lkIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0
YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlcios
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIGZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBXZWJHTFRl
eHR1cmUqLCBHQzNEaW50IGxldmVsLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBmcm9udEZh
Y2UoR0MzRGVudW0gbW9kZSk7Ci0gICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJn
ZXQpOwotCi0gICAgUGFzc1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IGdldEFjdGl2ZUF0dHJpYihX
ZWJHTFByb2dyYW0qLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NS
ZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIEdD
M0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgYm9vbCBnZXRBdHRhY2hlZFNoYWRl
cnMoV2ViR0xQcm9ncmFtKiwgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIEdDM0RpbnQgZ2V0QXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFtKiwgY29u
c3QgU3RyaW5nJiBuYW1lKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0QnVmZmVyUGFyYW1ldGVyKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNz
UmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0g
ICAgR0MzRGVudW0gZ2V0RXJyb3IoKTsKLSAgICBXZWJHTEV4dGVuc2lvbiogZ2V0RXh0ZW5zaW9u
KGNvbnN0IFN0cmluZyYgbmFtZSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFBhcmFt
ZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYkdMR2V0SW5mbyBn
ZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSosIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJik7Ci0gICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJvZ3JhbSosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBX
ZWJHTEdldEluZm8gZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiwgR0MzRGVudW0gcG5h
bWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhXZWJHTFNo
YWRlciosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyUHJlY2lz
aW9uRm9ybWF0PiBnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwg
R0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFN0cmluZyBnZXRT
aGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgVmVjdG9yPFN0
cmluZz4gZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOwotICAgIFdlYkdMR2V0SW5mbyBnZXRUZXhQ
YXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIFdlYkdMR2V0SW5mbyBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIFBhc3NSZWZQdHI8V2ViR0xV
bmlmb3JtTG9jYXRpb24+IGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qLCBjb25zdCBT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFZlcnRleEF0dHJp
YihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBs
b25nIGxvbmcgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
bmFtZSk7Ci0KLSAgICB2b2lkIGhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBtb2RlKTsK
LSAgICBHQzNEYm9vbGVhbiBpc0J1ZmZlcihXZWJHTEJ1ZmZlciopOwotICAgIGJvb2wgaXNDb250
ZXh0TG9zdCgpIGNvbnN0OwotICAgIEdDM0Rib29sZWFuIGlzRW5hYmxlZChHQzNEZW51bSBjYXAp
OwotICAgIEdDM0Rib29sZWFuIGlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciopOwotICAg
IEdDM0Rib29sZWFuIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKLSAgICBHQzNEYm9vbGVhbiBp
c1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciopOwotICAgIEdDM0Rib29sZWFuIGlzU2hh
ZGVyKFdlYkdMU2hhZGVyKik7Ci0gICAgR0MzRGJvb2xlYW4gaXNUZXh0dXJlKFdlYkdMVGV4dHVy
ZSopOwotCi0gICAgdm9pZCBsaW5lV2lkdGgoR0MzRGZsb2F0KTsKLSAgICB2b2lkIGxpbmtQcm9n
cmFtKFdlYkdMUHJvZ3JhbSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHBpeGVsU3RvcmVp
KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKTsKLSAgICB2b2lkIHBvbHlnb25PZmZzZXQo
R0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKTsKLSAgICB2b2lkIHJlYWRQaXhlbHMo
R0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgcmVsZWFzZVNoYWRlckNvbXBpbGVyKCk7Ci0gICAg
dm9pZCByZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJu
YWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCBz
YW1wbGVDb3ZlcmFnZShHQzNEZmxvYXQgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCk7Ci0gICAg
dm9pZCBzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQpOwotICAgIHZvaWQgc2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiwgY29uc3Qg
U3RyaW5nJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc3RlbmNpbEZ1bmMoR0MzRGVudW0g
ZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQgc3RlbmNpbEZ1bmNT
ZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVp
bnQgbWFzayk7Ci0gICAgdm9pZCBzdGVuY2lsTWFzayhHQzNEdWludCk7Ci0gICAgdm9pZCBzdGVu
Y2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spOwotICAgIHZvaWQg
c3RlbmNpbE9wKEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7
Ci0gICAgdm9pZCBzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWls
LCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpOwotCi0gICAgdm9pZCB0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
Ci0gICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwg
R0MzRGludCBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQg
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEltYWdlRGF0YSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleEltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwK
LSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1M
SW1hZ2VFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxDYW52
YXNFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotI2lmIEVOQUJMRShWSURFTykKLSAgICB2b2lk
IHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwotI2VuZGlmCi0KLSAg
ICB2b2lkIHRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGZsb2F0IHBhcmFtKTsKLSAgICB2b2lkIHRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSk7Ci0KLSAgICB2b2lkIHRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LAotICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCosIEV4
Y2VwdGlvbkNvZGUmKTsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCB0ZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKLSNlbmRpZgotCi0g
ICAgdm9pZCB1bmlmb3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQgeCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTFmdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9u
Q29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHVuaWZvcm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RpbnQgeCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTFpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNv
ZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3Jt
MmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2
LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0
aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTJpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2
b2lkIHVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQz
MkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtMml2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUs
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0zZihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHos
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1
bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRGludCB6LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3Jt
M2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQg
dywgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwot
ICAgIHZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHVuaWZvcm00aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIElu
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm00aXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQz
MkFycmF5KiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgdW5pZm9ybU1hdHJpeDJm
dihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5z
cG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFs
dWUsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCB1bmlmb3JtTWF0
cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4g
dHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9p
ZCB1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwg
RXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB1c2VQcm9ncmFtKFdlYkdMUHJvZ3JhbSosIEV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBF
eGNlcHRpb25Db2RlJik7Ci0KLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQgeCk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgs
IEZsb2F0MzJBcnJheSogdmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHZl
cnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpOwot
ICAgIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZh
bHVlcyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9h
dCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZihHQzNE
dWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeik7Ci0gICAg
dm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdmFsdWVz
KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2
YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmKEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQg
dyk7Ci0gICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJh
eSogdmFsdWVzKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYlBv
aW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJv
b2xlYW4gbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVp
IHN0cmlkZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYpOwotCi0gICAgdm9pZCB2
aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0KTsKLQotICAgIC8vIFdFQktJVF9sb3NlX2NvbnRleHQgc3VwcG9ydAotICAgIGVudW0g
TG9zdENvbnRleHRNb2RlIHsKLSAgICAgICAgLy8gTG9zdCBjb250ZXh0IG9jY3VycmVkIGF0IHRo
ZSBncmFwaGljcyBzeXN0ZW0gbGV2ZWwuCi0gICAgICAgIFJlYWxMb3N0Q29udGV4dCwKLQotICAg
ICAgICAvLyBMb3N0IGNvbnRleHQgcHJvdm9rZWQgYnkgV0VCS0lUX2xvc2VfY29udGV4dC4KLSAg
ICAgICAgU3ludGhldGljTG9zdENvbnRleHQKLSAgICB9OwotICAgIHZvaWQgZm9yY2VMb3N0Q29u
dGV4dChMb3N0Q29udGV4dE1vZGUpOwotICAgIHZvaWQgZm9yY2VSZXN0b3JlQ29udGV4dCgpOwot
ICAgIHZvaWQgbG9zZUNvbnRleHRJbXBsKExvc3RDb250ZXh0TW9kZSk7Ci0KLSAgICBHcmFwaGlj
c0NvbnRleHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQu
Z2V0KCk7IH0KLSAgICBXZWJHTENvbnRleHRHcm91cCogY29udGV4dEdyb3VwKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZXh0R3JvdXAuZ2V0KCk7IH0KLSAgICB2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIq
IHBsYXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKLQotICAgIHZvaWQgcmVzaGFwZShpbnQg
d2lkdGgsIGludCBoZWlnaHQpOwotCi0gICAgdm9pZCBtYXJrTGF5ZXJDb21wb3NpdGVkKCk7Ci0g
ICAgdmlydHVhbCB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkgb3ZlcnJpZGU7
Ci0gICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VE
YXRhKCk7Ci0KLSAgICB2b2lkIHJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCop
OwotICAgIHZvaWQgcmVtb3ZlQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqKTsKLSAg
ICAKLSAgICB1bnNpZ25lZCBnZXRNYXhWZXJ0ZXhBdHRyaWJzKCkgY29uc3QgeyByZXR1cm4gbV9t
YXhWZXJ0ZXhBdHRyaWJzOyB9Ci0KLSAgICAvLyBBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIGV4dGVu
c2lvbiBmdW5jdGlvbnMuCi0gICAgdm9pZCBkcmF3QXJyYXlzSW5zdGFuY2VkKEdDM0RlbnVtIG1v
ZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCk7
Ci0gICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVp
IGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCBHQzNEc2l6ZWkgcHJpbWNv
dW50KTsKLSAgICB2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1
aW50IGRpdmlzb3IpOwotCi1wcml2YXRlOgotICAgIGZyaWVuZCBjbGFzcyBXZWJHTERyYXdCdWZm
ZXJzOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTEZyYW1lYnVmZmVyOwotICAgIGZyaWVuZCBjbGFz
cyBXZWJHTE9iamVjdDsKLSAgICBmcmllbmQgY2xhc3MgT0VTVmVydGV4QXJyYXlPYmplY3Q7Ci0g
ICAgZnJpZW5kIGNsYXNzIFdlYkdMRGVidWdTaGFkZXJzOwotICAgIGZyaWVuZCBjbGFzcyBXZWJH
TENvbXByZXNzZWRUZXh0dXJlQVRDOwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEM7Ci0gICAgZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RD
OwotICAgIGZyaWVuZCBjbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1lc3NhZ2VDYWxs
YmFjazsKLSAgICBmcmllbmQgY2xhc3MgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzsKLQotICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCosIEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzKTsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0Vs
ZW1lbnQqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkF0dHJpYnV0ZXMpOwotICAgIHZvaWQgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKLSAgICB2b2lk
IHNldHVwRmxhZ3MoKTsKLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdAotICAgIHZpcnR1YWwgYm9v
bCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZvaWQg
c3RvcCgpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0
TmFtZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICJXZWJHTFJlbmRlcmluZ0NvbnRleHQiOyB9
Ci0KLSAgICB2b2lkIGFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCopOwotICAgIHZv
aWQgYWRkQ29udGV4dE9iamVjdChXZWJHTENvbnRleHRPYmplY3QqKTsKLSAgICB2b2lkIGRldGFj
aEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKLQotICAgIHZvaWQgZGVzdHJveUdyYXBoaWNzQ29udGV4
dDNEKCk7Ci0gICAgdm9pZCBtYXJrQ29udGV4dENoYW5nZWQoKTsKLQotICAgIC8vIFF1ZXJ5IHdo
ZXRoZXIgaXQgaXMgYnVpbHQgb24gdG9wIG9mIGNvbXBsaWFudCBHTEVTMiBpbXBsZW1lbnRhdGlv
bi4KLSAgICBib29sIGlzR0xFUzJDb21wbGlhbnQoKSB7IHJldHVybiBtX2lzR0xFUzJDb21wbGlh
bnQ7IH0KLSAgICAvLyBRdWVyeSBpZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gaXMgTlBPVCBzdHJp
Y3QuCi0gICAgYm9vbCBpc0dMRVMyTlBPVFN0cmljdCgpIHsgcmV0dXJuIG1faXNHTEVTMk5QT1RT
dHJpY3Q7IH0KLSAgICAvLyBRdWVyeSBpZiB0aGUgR0wgaW1wbGVtZW50YXRpb24gZ2VuZXJhdGVz
IGVycm9ycyBvbiBvdXQtb2YtYm91bmRzIGJ1ZmZlciBhY2Nlc3Nlcy4KLSAgICBib29sIGlzRXJy
b3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSB7IHJldHVybiBtX2lzRXJyb3JHZW5l
cmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXM7IH0KLSAgICAvLyBRdWVyeSBpZiB0aGUgR0wgaW1w
bGVtZW50YXRpb24gaW5pdGlhbGl6ZXMgdGV4dHVyZXMvcmVuZGVyYnVmZmVycyB0byAwLgotICAg
IGJvb2wgaXNSZXNvdXJjZVNhZmUoKSB7IHJldHVybiBtX2lzUmVzb3VyY2VTYWZlOyB9Ci0gICAg
Ly8gUXVlcnkgaWYgZGVwdGhfc3RlbmNpbCBidWZmZXIgaXMgc3VwcG9ydGVkLgotICAgIGJvb2wg
aXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSB7IHJldHVybiBtX2lzRGVwdGhTdGVuY2lsU3VwcG9y
dGVkOyB9Ci0KLSAgICAvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIE9w
ZW5HTCBkYXRhIHR5cGVzCi0gICAgLy8gbGlrZSBHTF9GTE9BVCwgR0xfSU5ULCBldGMuCi0gICAg
dW5zaWduZWQgaW50IHNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUpOwotCi0gICAgLy8gQmFzaWMg
dmFsaWRhdGlvbiBvZiBjb3VudCBhbmQgb2Zmc2V0IGFnYWluc3QgbnVtYmVyIG9mIGVsZW1lbnRz
IGluIGVsZW1lbnQgYXJyYXkgYnVmZmVyCi0gICAgYm9vbCB2YWxpZGF0ZUVsZW1lbnRBcnJheVNp
emUoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCk7Ci0K
LSAgICAvLyBDb25zZXJ2YXRpdmUgYnV0IHF1aWNrIGluZGV4IHZhbGlkYXRpb24KLSAgICBib29s
IHZhbGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZ25lZCYg
bnVtRWxlbWVudHNSZXF1aXJlZCk7Ci0KLSAgICAvLyBQcmVjaXNlIGJ1dCBzbG93IGluZGV4IHZh
bGlkYXRpb24gLS0gb25seSBkb25lIGlmIGNvbnNlcnZhdGl2ZSBjaGVja3MgZmFpbAotICAgIGJv
b2wgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5
cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCk7Ci0g
ICAgYm9vbCB2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1
bnNpZ25lZCBwcmltaXRpdmVDb3VudCA9IDApOwotCi0gICAgYm9vbCB2YWxpZGF0ZVdlYkdMT2Jq
ZWN0KGNvbnN0IGNoYXIqLCBXZWJHTE9iamVjdCopOwotCi0gICAgYm9vbCB2YWxpZGF0ZURyYXdB
cnJheXMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZp
cnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQpOwotICAgIGJvb2wgdmFs
aWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2Rl
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2ln
bmVkJiBudW1FbGVtZW50cywgR0MzRHNpemVpIHByaW1jb3VudCk7Ci0KLSAgICAvLyBBZGRzIGEg
Y29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdC4KLSAgICB2b2lkIGFkZENvbXByZXNzZWRUZXh0dXJl
Rm9ybWF0KEdDM0RlbnVtKTsKLQotICAgIFBhc3NSZWZQdHI8SW1hZ2U+IGRyYXdJbWFnZUludG9C
dWZmZXIoSW1hZ2UqLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBkZXZpY2VTY2FsZUZhY3Rv
cik7Ci0KLSNpZiBFTkFCTEUoVklERU8pCi0gICAgUGFzc1JlZlB0cjxJbWFnZT4gdmlkZW9GcmFt
ZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCosIEJhY2tpbmdTdG9yZUNvcHksIEV4Y2VwdGlvbkNv
ZGUmKTsKLSNlbmRpZgotCi0gICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7
Ci0gICAgUmVmUHRyPFdlYkdMQ29udGV4dEdyb3VwPiBtX2NvbnRleHRHcm91cDsKLQotICAgIC8v
IE9wdGlvbmFsIHN0cnVjdHVyZSBmb3IgcmVuZGVyaW5nIHRvIGEgRHJhd2luZ0J1ZmZlciwgaW5z
dGVhZCBvZiBkaXJlY3RseQotICAgIC8vIHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBtX2NvbnRleHQu
Ci0gICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IG1fZHJhd2luZ0J1ZmZlcjsKLQotICAgIC8vIERp
c3BhdGNoZXMgYSBjb250ZXh0IGxvc3QgZXZlbnQgb25jZSBpdCBpcyBkZXRlcm1pbmVkIHRoYXQg
b25lIGlzIG5lZWRlZC4KLSAgICAvLyBUaGlzIGlzIHVzZWQgYm90aCBmb3Igc3ludGhldGljIGFu
ZCByZWFsIGNvbnRleHQgbG9zc2VzLiBGb3IgcmVhbCBvbmVzLCBpdCdzCi0gICAgLy8gbGlrZWx5
IHRoYXQgdGhlcmUncyBubyBKYXZhU2NyaXB0IG9uIHRoZSBzdGFjaywgYnV0IHRoYXQgbWlnaHQg
YmUgZGVwZW5kZW50Ci0gICAgLy8gb24gaG93IGV4YWN0bHkgdGhlIHBsYXRmb3JtIGRpc2NvdmVy
cyB0aGF0IHRoZSBjb250ZXh0IHdhcyBsb3N0LiBGb3IgYmV0dGVyCi0gICAgLy8gcG9ydGFiaWxp
dHkgd2UgYWx3YXlzIGRlZmVyIHRoZSBkaXNwYXRjaCBvZiB0aGUgZXZlbnQuCi0gICAgVGltZXIg
bV9kaXNwYXRjaENvbnRleHRMb3N0RXZlbnRUaW1lcjsKLSAgICBib29sIG1fcmVzdG9yZUFsbG93
ZWQ7Ci0gICAgVGltZXIgbV9yZXN0b3JlVGltZXI7Ci0KLSAgICBib29sIG1fbmVlZHNVcGRhdGU7
Ci0gICAgYm9vbCBtX21hcmtlZENhbnZhc0RpcnR5OwotICAgIEhhc2hTZXQ8V2ViR0xDb250ZXh0
T2JqZWN0Kj4gbV9jb250ZXh0T2JqZWN0czsKLQotICAgIC8vIExpc3Qgb2YgYm91bmQgVkJPJ3Mu
IFVzZWQgdG8gbWFpbnRhaW4gaW5mbyBhYm91dCBzaXplcyBmb3IgQVJSQVlfQlVGRkVSIGFuZCBz
dG9yZWQgdmFsdWVzIGZvciBFTEVNRU5UX0FSUkFZX0JVRkZFUgotICAgIFJlZlB0cjxXZWJHTEJ1
ZmZlcj4gbV9ib3VuZEFycmF5QnVmZmVyOwotICAgIAotICAgIFJlZlB0cjxXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTPiBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdDsKLSAgICBSZWZQdHI8V2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0OwotICAgIHZv
aWQgc2V0Qm91bmRWZXJ0ZXhBcnJheU9iamVjdChQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVM+IGFycmF5T2JqZWN0KQotICAgIHsKLSAgICAgICAgaWYgKGFycmF5T2JqZWN0KQot
ICAgICAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gYXJyYXlPYmplY3Q7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG1fZGVmYXVs
dFZlcnRleEFycmF5T2JqZWN0OwotICAgIH0KLSAgICAKLSAgICBjbGFzcyBWZXJ0ZXhBdHRyaWJW
YWx1ZSB7Ci0gICAgcHVibGljOgotICAgICAgICBWZXJ0ZXhBdHRyaWJWYWx1ZSgpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGluaXRWYWx1ZSgpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICB2b2lkIGluaXRWYWx1ZSgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHZhbHVlWzBdID0gMC4w
ZjsKLSAgICAgICAgICAgIHZhbHVlWzFdID0gMC4wZjsKLSAgICAgICAgICAgIHZhbHVlWzJdID0g
MC4wZjsKLSAgICAgICAgICAgIHZhbHVlWzNdID0gMS4wZjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgR0MzRGZsb2F0IHZhbHVlWzRdOwotICAgIH07Ci0gICAgVmVjdG9yPFZlcnRleEF0
dHJpYlZhbHVlPiBtX3ZlcnRleEF0dHJpYlZhbHVlOwotICAgIHVuc2lnbmVkIG1fbWF4VmVydGV4
QXR0cmliczsKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IG1fdmVydGV4QXR0cmliMEJ1ZmZlcjsK
LSAgICBsb25nIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemU7Ci0gICAgR0MzRGZsb2F0IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzRdOwotICAgIGJvb2wgbV9mb3JjZUF0dHJpYjBCdWZmZXJS
ZWZpbGw7Ci0gICAgYm9vbCBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlOwotCi0gICAgUmVmUHRy
PFdlYkdMUHJvZ3JhbT4gbV9jdXJyZW50UHJvZ3JhbTsKLSAgICBSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4gbV9mcmFtZWJ1ZmZlckJpbmRpbmc7Ci0gICAgUmVmUHRyPFdlYkdMUmVuZGVyYnVmZmVy
PiBtX3JlbmRlcmJ1ZmZlckJpbmRpbmc7Ci0gICAgc3RydWN0IFRleHR1cmVVbml0U3RhdGUgewot
ICAgICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiB0ZXh0dXJlMkRCaW5kaW5nOwotICAgICAgICBS
ZWZQdHI8V2ViR0xUZXh0dXJlPiB0ZXh0dXJlQ3ViZU1hcEJpbmRpbmc7Ci0gICAgfTsKLSAgICBW
ZWN0b3I8VGV4dHVyZVVuaXRTdGF0ZT4gbV90ZXh0dXJlVW5pdHM7Ci0gICAgdW5zaWduZWQgbG9u
ZyBtX2FjdGl2ZVRleHR1cmVVbml0OwotCi0gICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbV9ibGFj
a1RleHR1cmUyRDsKLSAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBtX2JsYWNrVGV4dHVyZUN1YmVN
YXA7Ci0KLSAgICBWZWN0b3I8R0MzRGVudW0+IG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzOwot
Ci0gICAgLy8gRml4ZWQtc2l6ZSBjYWNoZSBvZiByZXVzYWJsZSBpbWFnZSBidWZmZXJzIGZvciB2
aWRlbyB0ZXhJbWFnZTJEIGNhbGxzLgotICAgIGNsYXNzIExSVUltYWdlQnVmZmVyQ2FjaGUgewot
ICAgIHB1YmxpYzoKLSAgICAgICAgTFJVSW1hZ2VCdWZmZXJDYWNoZShpbnQgY2FwYWNpdHkpOwot
ICAgICAgICAvLyBUaGUgcG9pbnRlciByZXR1cm5lZCBpcyBvd25lZCBieSB0aGUgaW1hZ2UgYnVm
ZmVyIG1hcC4KLSAgICAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyKGNvbnN0IEludFNpemUm
IHNpemUpOwotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgYnViYmxlVG9Gcm9udChpbnQgaWR4
KTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj5b
XT4gbV9idWZmZXJzOwotICAgICAgICBpbnQgbV9jYXBhY2l0eTsKLSAgICB9OwotICAgIExSVUlt
YWdlQnVmZmVyQ2FjaGUgbV9nZW5lcmF0ZWRJbWFnZUNhY2hlOwotCi0gICAgR0MzRGludCBtX21h
eFRleHR1cmVTaXplOwotICAgIEdDM0RpbnQgbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7Ci0gICAg
R0MzRGludCBtX21heFJlbmRlcmJ1ZmZlclNpemU7Ci0gICAgR0MzRGludCBtX21heFZpZXdwb3J0
RGltc1syXTsKLSAgICBHQzNEaW50IG1fbWF4VGV4dHVyZUxldmVsOwotICAgIEdDM0RpbnQgbV9t
YXhDdWJlTWFwVGV4dHVyZUxldmVsOwotCi0gICAgR0MzRGludCBtX21heERyYXdCdWZmZXJzOwot
ICAgIEdDM0RpbnQgbV9tYXhDb2xvckF0dGFjaG1lbnRzOwotICAgIEdDM0RlbnVtIG1fYmFja0Ry
YXdCdWZmZXI7Ci0gICAgYm9vbCBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2Vk
OwotICAgIGJvb2wgbV9kcmF3QnVmZmVyc1N1cHBvcnRlZDsKLQotICAgIEdDM0RpbnQgbV9wYWNr
QWxpZ25tZW50OwotICAgIEdDM0RpbnQgbV91bnBhY2tBbGlnbm1lbnQ7Ci0gICAgYm9vbCBtX3Vu
cGFja0ZsaXBZOwotICAgIGJvb2wgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhOwotICAgIEdDM0Rl
bnVtIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb247Ci0gICAgYm9vbCBtX2NvbnRleHRMb3N0
OwotICAgIExvc3RDb250ZXh0TW9kZSBtX2NvbnRleHRMb3N0TW9kZTsKLSAgICBHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7Ci0KLSAgICBib29sIG1fbGF5ZXJDbGVh
cmVkOwotICAgIEdDM0RmbG9hdCBtX2NsZWFyQ29sb3JbNF07Ci0gICAgYm9vbCBtX3NjaXNzb3JF
bmFibGVkOwotICAgIEdDM0RmbG9hdCBtX2NsZWFyRGVwdGg7Ci0gICAgR0MzRGludCBtX2NsZWFy
U3RlbmNpbDsKLSAgICBHQzNEYm9vbGVhbiBtX2NvbG9yTWFza1s0XTsKLSAgICBHQzNEYm9vbGVh
biBtX2RlcHRoTWFzazsKLQotICAgIGJvb2wgbV9zdGVuY2lsRW5hYmxlZDsKLSAgICBHQzNEdWlu
dCBtX3N0ZW5jaWxNYXNrLCBtX3N0ZW5jaWxNYXNrQmFjazsKLSAgICBHQzNEaW50IG1fc3RlbmNp
bEZ1bmNSZWYsIG1fc3RlbmNpbEZ1bmNSZWZCYWNrOyAvLyBOb3RlIHRoYXQgdGhlc2UgYXJlIHRo
ZSB1c2VyIHNwZWNpZmllZCB2YWx1ZXMsIG5vdCB0aGUgaW50ZXJuYWwgY2xhbXBlZCB2YWx1ZS4K
LSAgICBHQzNEdWludCBtX3N0ZW5jaWxGdW5jTWFzaywgbV9zdGVuY2lsRnVuY01hc2tCYWNrOwot
Ci0gICAgYm9vbCBtX2lzR0xFUzJDb21wbGlhbnQ7Ci0gICAgYm9vbCBtX2lzR0xFUzJOUE9UU3Ry
aWN0OwotICAgIGJvb2wgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzOwot
ICAgIGJvb2wgbV9pc1Jlc291cmNlU2FmZTsKLSAgICBib29sIG1faXNEZXB0aFN0ZW5jaWxTdXBw
b3J0ZWQ7Ci0gICAgYm9vbCBtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZDsKLQotICAgIGJvb2wg
bV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZTsKLSAgICBpbnQgbV9udW1HTEVycm9yc1RvQ29u
c29sZUFsbG93ZWQ7Ci0KLSAgICAvLyBBIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBjYW4gYmUgY3Jl
YXRlZCBpbiBhIHN0YXRlIHdoZXJlIGl0IGFwcGVhcnMgYXMKLSAgICAvLyBhIHZhbGlkIGFuZCBh
Y3RpdmUgY29udGV4dCwgYnV0IHdpbGwgbm90IGV4ZWN1dGUgYW55IGltcG9ydGFudCBvcGVyYXRp
b25zCi0gICAgLy8gdW50aWwgaXRzIGxvYWQgcG9saWN5IGlzIGNvbXBsZXRlbHkgcmVzb2x2ZWQu
Ci0gICAgYm9vbCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb247Ci0gICAgYm9vbCBtX2hhc1Jl
cXVlc3RlZFBvbGljeVJlc29sdXRpb247Ci0gICAgYm9vbCBpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCk7Ci0KLSAgICAvLyBFbmFibGVkIGV4dGVuc2lvbiBvYmplY3RzLgotICAgIHN0ZDo6dW5pcXVl
X3B0cjxFWFRGcmFnRGVwdGg+IG1fZXh0RnJhZ0RlcHRoOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxF
WFRCbGVuZE1pbk1heD4gbV9leHRCbGVuZE1pbk1heDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RVhU
c1JHQj4gbV9leHRzUkdCOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWM+IG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOwotICAgIHN0ZDo6dW5pcXVl
X3B0cjxFWFRTaGFkZXJUZXh0dXJlTE9EPiBtX2V4dFNoYWRlclRleHR1cmVMT0Q7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPE9FU1RleHR1cmVGbG9hdD4gbV9vZXNUZXh0dXJlRmxvYXQ7Ci0gICAgc3Rk
Ojp1bmlxdWVfcHRyPE9FU1RleHR1cmVGbG9hdExpbmVhcj4gbV9vZXNUZXh0dXJlRmxvYXRMaW5l
YXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPE9FU1RleHR1cmVIYWxmRmxvYXQ+IG1fb2VzVGV4dHVy
ZUhhbGZGbG9hdDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVh
cj4gbV9vZXNUZXh0dXJlSGFsZkZsb2F0TGluZWFyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxPRVNT
dGFuZGFyZERlcml2YXRpdmVzPiBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXM7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPE9FU1ZlcnRleEFycmF5T2JqZWN0PiBtX29lc1ZlcnRleEFycmF5T2JqZWN0Owot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxPRVNFbGVtZW50SW5kZXhVaW50PiBtX29lc0VsZW1lbnRJbmRl
eFVpbnQ7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdMTG9zZUNvbnRleHQ+IG1fd2ViZ2xMb3Nl
Q29udGV4dDsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xEZWJ1Z1JlbmRlcmVySW5mbz4gbV93
ZWJnbERlYnVnUmVuZGVyZXJJbmZvOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTERlYnVnU2hh
ZGVycz4gbV93ZWJnbERlYnVnU2hhZGVyczsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xDb21w
cmVzc2VkVGV4dHVyZUFUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDOwotICAgIHN0ZDo6
dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM+IG1fd2ViZ2xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJl
UzNUQz4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUzNUQzsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
V2ViR0xEZXB0aFRleHR1cmU+IG1fd2ViZ2xEZXB0aFRleHR1cmU7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFdlYkdMRHJhd0J1ZmZlcnM+IG1fd2ViZ2xEcmF3QnVmZmVyczsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8QU5HTEVJbnN0YW5jZWRBcnJheXM+IG1fYW5nbGVJbnN0YW5jZWRBcnJheXM7Ci0KLSAg
ICAvLyBIZWxwZXJzIGZvciBnZXRQYXJhbWV0ZXIgYW5kIG90aGVycwotICAgIFdlYkdMR2V0SW5m
byBnZXRCb29sZWFuUGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0Qm9v
bGVhbkFycmF5UGFyYW1ldGVyKEdDM0RlbnVtKTsKLSAgICBXZWJHTEdldEluZm8gZ2V0RmxvYXRQ
YXJhbWV0ZXIoR0MzRGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRJbnRQYXJhbWV0ZXIoR0Mz
RGVudW0pOwotICAgIFdlYkdMR2V0SW5mbyBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihHQzNEZW51
bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51
bSk7Ci0gICAgV2ViR0xHZXRJbmZvIGdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0p
OwotCi0gICAgLy8gQ2xlYXIgdGhlIGJhY2tidWZmZXIgaWYgaXQgd2FzIGNvbXBvc2l0ZWQgc2lu
Y2UgdGhlIGxhc3Qgb3BlcmF0aW9uLgotICAgIC8vIGNsZWFyTWFzayBpcyBzZXQgdG8gdGhlIGJp
dGZpZWxkIG9mIGFueSBjbGVhciB0aGF0IHdvdWxkIGhhcHBlbiBhbnl3YXkgYXQgdGhpcyB0aW1l
Ci0gICAgLy8gYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhhdCBjbGVhciBpcyBu
b3cgdW5uZWNlc3NhcnkuCi0gICAgYm9vbCBjbGVhcklmQ29tcG9zaXRlZChHQzNEYml0ZmllbGQg
Y2xlYXJNYXNrID0gMCk7Ci0KLSAgICAvLyBIZWxwZXIgdG8gcmVzdG9yZSBzdGF0ZSB0aGF0IGNs
ZWFyaW5nIHRoZSBmcmFtZWJ1ZmZlciBtYXkgZGVzdHJveS4KLSAgICB2b2lkIHJlc3RvcmVTdGF0
ZUFmdGVyQ2xlYXIoKTsKLQotICAgIHZvaWQgdGV4SW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lk
IHRleEltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBH
cmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkRC
YXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUm
KTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSwgSW1hZ2UqLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VIdG1sRG9tU291
cmNlLCBib29sIGZsaXBZLCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmKTsK
LQotICAgIHZvaWQgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKGNvbnN0IGNoYXIqLCBib29sKTsK
LQotICAgIHZvaWQgY3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7Ci0KLSAgICAvLyBI
ZWxwZXIgZnVuY3Rpb24gZm9yIGNvcHlUZXh7U3VifUltYWdlLCBjaGVjayB3aGV0aGVyIHRoZSBp
bnRlcm5hbGZvcm1hdAotICAgIC8vIGFuZCB0aGUgY29sb3IgYnVmZmVyIGZvcm1hdCBvZiB0aGUg
Y3VycmVudCBib3VuZCBmcmFtZWJ1ZmZlciBjb21iaW5hdGlvbgotICAgIC8vIGlzIHZhbGlkLgot
ICAgIGJvb2wgaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29tYmluYXRpb25WYWxpZChH
QzNEZW51bSB0ZXhJbnRlcm5hbEZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpOwot
Ci0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZmZXIncyBj
b2xvciBidWZmZXIgZm9ybWF0LgotICAgIEdDM0RlbnVtIGdldEJvdW5kRnJhbWVidWZmZXJDb2xv
ckZvcm1hdCgpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJh
bWVidWZmZXIncyB3aWR0aC4KLSAgICBpbnQgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCk7Ci0K
LSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHRoZSBib3VuZCBmcmFtZWJ1ZmZlcidzIGhl
aWdodC4KLSAgICBpbnQgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdodCgpOwotCi0gICAgLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHZlcmlmeSBsaW1pdHMgb24gdGhlIGxlbmd0aCBvZiB1bmlmb3JtIGFu
ZCBhdHRyaWJ1dGUgbG9jYXRpb25zLgotICAgIGJvb2wgdmFsaWRhdGVMb2NhdGlvbkxlbmd0aChj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYpOwotCi0gICAgLy8gSGVscGVy
IGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHNpemUgaXMgbm9uLW5lZ2F0aXZlLgotICAgIC8vIEdlbmVy
YXRlIEdMIGVycm9yIGFuZCByZXR1cm4gZmFsc2UgZm9yIG5lZ2F0aXZlIGlucHV0czsgb3RoZXJ3
aXNlLCByZXR1cm4gdHJ1ZS4KLSAgICBib29sIHZhbGlkYXRlU2l6ZShjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RpbnQgeCwgR0MzRGludCB5KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlv
biB0byBjaGVjayBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGJlbG9uZyB0byB0aGUK
LSAgICAvLyBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbiBHTFNMIEVTIDEuMCBzcGVjIHNlY3Rp
b24gMy4xLgotICAgIGJvb2wgdmFsaWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBjb25zdCBTdHJpbmcmKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayB0YXJn
ZXQgYW5kIHRleHR1cmUgYm91bmQgdG8gdGhlIHRhcmdldC4KLSAgICAvLyBHZW5lcmF0ZSBHTCBl
cnJvcnMgYW5kIHJldHVybiAwIGlmIHRhcmdldCBpcyBpbnZhbGlkIG9yIHRleHR1cmUgYm91bmQg
aXMKLSAgICAvLyBudWxsLiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIHRleHR1cmUgYm91bmQgdG8g
dGhlIHRhcmdldC4KLSAgICBXZWJHTFRleHR1cmUqIHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNG
b3JDdWJlTWFwKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBmb3Jt
YXQvdHlwZSBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCi0gICAgLy8gR2VuZXJh
dGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQu
Ci0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKTsK
LQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBsZXZlbCBmb3IgZnVuY3Rp
b25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCi0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCBy
ZXR1cm5zIGZhbHNlIGlmIGxldmVsIGlzIGludmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1
bmNMZXZlbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCk7Ci0KLSAgICBlbnVtIFRleEZ1bmNWYWxpZGF0aW9uRnVuY3Rpb25UeXBlIHsKLSAg
ICAgICAgTm90VGV4U3ViSW1hZ2UyRCwKLSAgICAgICAgVGV4U3ViSW1hZ2UyRCwKLSAgICB9Owot
Ci0gICAgZW51bSBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgewotICAgICAgICBTb3VyY2VB
cnJheUJ1ZmZlclZpZXcsCi0gICAgICAgIFNvdXJjZUltYWdlRGF0YSwKLSAgICAgICAgU291cmNl
SFRNTEltYWdlRWxlbWVudCwKLSAgICAgICAgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsCi0gICAg
ICAgIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsCi0gICAgfTsKLQotICAgIC8vIEhlbHBlciBmdW5j
dGlvbiBmb3IgdGV4e1N1Yn1JbWFnZTJEIHRvIGNoZWNrIGlmIHRoZSBpbnB1dCBmb3JtYXQvdHlw
ZS9sZXZlbC90YXJnZXQvd2lkdGgvaGVpZ2h0L2JvcmRlci94b2Zmc2V0L3lvZmZzZXQgYXJlIHZh
bGlkLgotICAgIC8vIE90aGVyd2lzZSwgaXQgd291bGQgcmV0dXJuIHF1aWNrbHkgd2l0aG91dCBk
b2luZyBvdGhlciB3b3JrLgotICAgIGJvb2wgdmFsaWRhdGVUZXhGdW5jKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUsIFRleEZ1bmNWYWxpZGF0
aW9uU291cmNlVHlwZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLAotICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50
IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8g
Y2hlY2sgaW5wdXQgcGFyYW1ldGVycyBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2Uu
Ci0gICAgLy8gR2VuZXJhdGVzIEdMIGVycm9yIGFuZCByZXR1cm5zIGZhbHNlIGlmIHBhcmFtZXRl
cnMgYXJlIGludmFsaWQuCi0gICAgYm9vbCB2YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGludCBib3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdD
M0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSk7Ci0KLSAgICBlbnVtIE51bGxEaXNwb3NpdGlv
biB7Ci0gICAgICAgIE51bGxBbGxvd2VkLAotICAgICAgICBOdWxsTm90QWxsb3dlZAotICAgIH07
Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZ2l2ZW4gQXJy
YXlCdWZmZXJWaWV3Ci0gICAgLy8gaXMgb2YgdGhlIGNvcnJlY3QgdHlwZSBhbmQgY29udGFpbnMg
ZW5vdWdoIGRhdGEgZm9yIHRoZSB0ZXhJbWFnZSBjYWxsLgotICAgIC8vIEdlbmVyYXRlcyBHTCBl
cnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIGJv
b2wgdmFsaWRhdGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQg
bGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1
ZmZlclZpZXcqIHBpeGVscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVsbERpc3Bv
c2l0aW9uKTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhIGdpdmVuIHRl
eHR1cmUgZm9ybWF0IGlzIHNldHRhYmxlIGFzIGluCi0gICAgLy8geW91IGNhbiBzdXBwbHkgZGF0
YSB0byB0ZXhJbWFnZTJELCBvciBjYWxsIHRleEltYWdlMkQsIGNvcHlUZXhJbWFnZTJEIGFuZAot
ICAgIC8vIGNvcHlUZXhTdWJJbWFnZTJELgotICAgIC8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQg
cmV0dXJucyBmYWxzZSBpZiB0aGUgZm9ybWF0IGlzIG5vdCBzZXR0YWJsZS4KLSAgICBib29sIHZh
bGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSBmb3JtYXQpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGNvbXByZXNz
ZWQgdGV4dHVyZSBkYXRhIGlzIGNvcnJlY3Qgc2l6ZQotICAgIC8vIGZvciB0aGUgZ2l2ZW4gZm9y
bWF0IGFuZCBkaW1lbnNpb25zLgotICAgIGJvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0Rh
dGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZl
clZpZXcqIHBpeGVscyk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHZhbGlkYXRpbmcg
Y29tcHJlc3NlZCB0ZXh0dXJlIGZvcm1hdHMuCi0gICAgYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRU
ZXhGb3JtYXQoR0MzRGVudW0gZm9ybWF0KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2
YWxpZGF0ZSBjb21wcmVzc2VkIHRleHR1cmUgZGltZW5zaW9ucyBhcmUgdmFsaWQgZm9yCi0gICAg
Ly8gdGhlIGdpdmVuIGZvcm1hdC4KLSAgICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleERpbWVu
c2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0
KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21wcmVzc2VkIHRleHR1
cmUgZGltZW5zaW9ucyBhcmUgdmFsaWQgZm9yCi0gICAgLy8gdGhlIGdpdmVuIGZvcm1hdC4KLSAg
ICBib29sIHZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lvbnMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNl
dCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgV2ViR0xUZXh0dXJlKik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUg
bW9kZSBmb3IgZHJhd3tBcnJheXMvRWxlbWVudHN9LgotICAgIGJvb2wgdmFsaWRhdGVEcmF3TW9k
ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtKTsKLQotICAgIC8vIEhlbHBlciBm
dW5jdGlvbiB0byB2YWxpZGF0ZSBpZiBmcm9udC9iYWNrIHN0ZW5jaWxNYXNrIGFuZCBzdGVuY2ls
RnVuYyBzZXR0aW5ncyBhcmUgdGhlIHNhbWUuCi0gICAgYm9vbCB2YWxpZGF0ZVN0ZW5jaWxTZXR0
aW5ncyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUpOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9u
IHRvIHZhbGlkYXRlIHN0ZW5jaWwgZnVuYy4KLSAgICBib29sIHZhbGlkYXRlU3RlbmNpbEZ1bmMo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVu
Y3Rpb24gZm9yIHRleFBhcmFtZXRlcmYgYW5kIHRleFBhcmFtZXRlcmkuCi0gICAgdm9pZCB0ZXhQ
YXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFt
aSwgR0MzRGludCBwYXJhbWYsIGJvb2wgaXNGbG9hdCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rp
b24gdG8gcHJpbnQgR0wgZXJyb3JzIHRvIGNvbnNvbGUuCi0gICAgdm9pZCBwcmludEdMRXJyb3JU
b0NvbnNvbGUoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwcmludEdMV2FybmluZ1RvQ29uc29s
ZShjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogcmVhc29uKTsKLQotICAgIC8vIEhl
bHBlciBmdW5jdGlvbiB0byBwcmludCB3YXJuaW5ncyB0byBjb25zb2xlLiBDdXJyZW50bHkKLSAg
ICAvLyB1c2VkIG9ubHkgdG8gd2FybiBhYm91dCB1c2Ugb2Ygb2Jzb2xldGUgZnVuY3Rpb25zLgot
ICAgIHZvaWQgcHJpbnRXYXJuaW5nVG9Db25zb2xlKGNvbnN0IFN0cmluZyYpOwotCi0gICAgLy8g
SGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZyYW1lYnVm
ZmVyIGZ1bmN0aW9ucy4KLSAgICAvLyBHZW5lcmF0ZSBHTCBlcnJvciBpZiBwYXJhbWV0ZXJzIGFy
ZSBpbGxlZ2FsLgotICAgIGJvb2wgdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKGNv
bnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2ht
ZW50KTsKLQotICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBibGVuZCBlcXVhdGlv
biBtb2RlLgotICAgIGJvb2wgdmFsaWRhdGVCbGVuZEVxdWF0aW9uKGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgR0MzRGVudW0pOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRl
IGJsZW5kIGZ1bmMgZmFjdG9ycy4KLSAgICBib29sIHZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHNyYywgR0MzRGVudW0gZHN0KTsKLQot
ICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhIEdMIGNhcGFiaWxpdHkuCi0gICAg
Ym9vbCB2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51
bSk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgaW5wdXQgcGFyYW1ldGVy
cyBmb3IgdW5pZm9ybSBmdW5jdGlvbnMuCi0gICAgYm9vbCB2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0
ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
LCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsKLSAgICBib29sIHZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiosIEludDMyQXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsKLSAgICBib29sIHZhbGlkYXRl
VW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiosIHZvaWQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBtb2QpOwotICAgIGJv
b2wgdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBG
bG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgbW9kKTsKLSAgICBib29sIHZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiosIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgdm9pZCosIEdDM0RzaXplaSwgR0Mz
RHNpemVpIG1vZCk7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgcGFyYW1l
dGVycyBmb3IgYnVmZmVyRGF0YS4KLSAgICAvLyBSZXR1cm4gdGhlIGN1cnJlbnQgYm91bmQgYnVm
ZmVyIHRvIHRhcmdldCwgb3IgMCBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgotICAgIFdlYkdM
QnVmZmVyKiB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSB1c2FnZSk7Ci0KLSAgICAvLyBIZWxwZXIg
ZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgaW1hZ2UgaXMgcmVhZHkg
YW5kIHdvdWxkbid0IHRhaW50IE9yaWdpbi4KLSAgICBib29sIHZhbGlkYXRlSFRNTEltYWdlRWxl
bWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxJbWFnZUVsZW1lbnQqLCBFeGNlcHRp
b25Db2RlJik7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1hZ2UyRCB0
byBtYWtlIHN1cmUgY2FudmFzIGlzIHJlYWR5IGFuZCB3b3VsZG4ndCB0YWludCBPcmlnaW4uCi0g
ICAgYm9vbCB2YWxpZGF0ZUhUTUxDYW52YXNFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgSFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0KLSNpZiBFTkFCTEUoVklE
RU8pCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBz
dXJlIHZpZGVvIGlzIHJlYWR5IHdvdWxkbid0IHRhaW50IE9yaWdpbi4KLSAgICBib29sIHZhbGlk
YXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxWaWRlb0Vs
ZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7Ci0jZW5kaWYKLQotICAgIC8vIEhlbHBlciBmdW5jdGlv
bnMgZm9yIHZlcnRleEF0dHJpYk5me3Z9LgotICAgIHZvaWQgdmVydGV4QXR0cmliZkltcGwoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRHNpemVpIGV4cGVjdGVk
U2l6ZSwgR0MzRGZsb2F0LCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0KTsKLSAgICB2
b2lkIHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50
IGluZGV4LCBGbG9hdDMyQXJyYXkqLCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKTsKLSAgICB2b2lk
IHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBleHBlY3RlZFNpemUpOwotCi0g
ICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBkZWxldGUqIChkZWxldGVCdWZmZXIsIGRlbGV0ZVBy
b2dyYW0sIGV0YykgZnVuY3Rpb25zLgotICAgIC8vIFJldHVybiBmYWxzZSBpZiBjYWxsZXIgc2hv
dWxkIHJldHVybiB3aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4KLSAgICBib29sIGRlbGV0ZU9i
amVjdChXZWJHTE9iamVjdCopOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9uIGZvciBiaW5kKiAo
YmluZEJ1ZmZlciwgYmluZFRleHR1cmUsIGV0YykgYW5kIHVzZVByb2dyYW0uCi0gICAgLy8gSWYg
dGhlIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGRlbGV0ZWQsIHNldCBkZWxldGVkIHRvIHRydWUg
dXBvbiByZXR1cm4uCi0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJu
IHdpdGhvdXQgZnVydGhlciBwcm9jZXNzaW5nLgotICAgIGJvb2wgY2hlY2tPYmplY3RUb0JlQm91
bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9iamVjdCosIGJvb2wmIGRlbGV0ZWQp
OwotCi0gICAgLy8gSGVscGVycyBmb3Igc2ltdWxhdGluZyB2ZXJ0ZXhBdHRyaWIwCi0gICAgdm9p
ZCBpbml0VmVydGV4QXR0cmliMCgpOwotICAgIGJvb2wgc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdD
M0RzaXplaSBudW1WZXJ0ZXgpOwotICAgIHZvaWQgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0
cmliMFNpbXVsYXRpb24oKTsKLQotICAgIHZvaWQgZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCk7
Ci0gICAgLy8gSGVscGVyIGZvciByZXN0b3JhdGlvbiBhZnRlciBjb250ZXh0IGxvc3QuCi0gICAg
dm9pZCBtYXliZVJlc3RvcmVDb250ZXh0KCk7Ci0KLSAgICAvLyBEZXRlcm1pbmUgaWYgd2UgYXJl
IHJ1bm5pbmcgcHJpdmlsZWdlZCBjb2RlIGluIHRoZSBicm93c2VyLCBmb3IgZXhhbXBsZSwKLSAg
ICAvLyBhIFNhZmFyaSBvciBDaHJvbWUgZXh0ZW5zaW9uLgotICAgIGJvb2wgYWxsb3dQcml2aWxl
Z2VkRXh0ZW5zaW9ucygpIGNvbnN0OwotCi0gICAgZW51bSBDb25zb2xlRGlzcGxheVByZWZlcmVu
Y2UgewotICAgICAgICBEaXNwbGF5SW5Db25zb2xlLAotICAgICAgICBEb250RGlzcGxheUluQ29u
c29sZQotICAgIH07Ci0KLSAgICAvLyBXcmFwcGVyIGZvciBHcmFwaGljc0NvbnRleHQzRDo6c3lu
dGhlc2l6ZUdMRXJyb3IgdGhhdCBzZW5kcyBhIG1lc3NhZ2UKLSAgICAvLyB0byB0aGUgSmF2YVNj
cmlwdCBjb25zb2xlLgotICAgIHZvaWQgc3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0sIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNw
bGF5UHJlZmVyZW5jZSA9IERpc3BsYXlJbkNvbnNvbGUpOwotCi0gICAgU3RyaW5nIGVuc3VyZU5v
dE51bGwoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0KLSAgICAvLyBFbmFibGUgb3IgZGlzYWJsZSBz
dGVuY2lsIHRlc3QgYmFzZWQgb24gdXNlciBzZXR0aW5nIGFuZAotICAgIC8vIHdoZXRoZXIgdGhl
IGN1cnJlbnQgRkJPIGhhcyBhIHN0ZW5jaWwgYnVmZmVyLgotICAgIHZvaWQgYXBwbHlTdGVuY2ls
VGVzdCgpOwotCi0gICAgLy8gSGVscGVyIGZvciBlbmFibGluZyBvciBkaXNhYmxpbmcgYSBjYXBh
YmlsaXR5LgotICAgIHZvaWQgZW5hYmxlT3JEaXNhYmxlKEdDM0RlbnVtIGNhcGFiaWxpdHksIGJv
b2wgZW5hYmxlKTsKLQotICAgIC8vIENsYW1wIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IHRvIEdMX01B
WF9WSUVXUE9SVF9ESU1TLgotICAgIEludFNpemUgY2xhbXBlZENhbnZhc1NpemUoKTsKLQotICAg
IC8vIEZpcnN0IHRpbWUgY2FsbGVkLCBpZiBFWFRfZHJhd19idWZmZXJzIGlzIHN1cHBvcnRlZCwg
cXVlcnkgdGhlIHZhbHVlOyBvdGhlcndpc2UgcmV0dXJuIDAuCi0gICAgLy8gTGF0ZXIsIHJldHVy
biB0aGUgY2FjaGVkIHZhbHVlLgotICAgIEdDM0RpbnQgZ2V0TWF4RHJhd0J1ZmZlcnMoKTsKLSAg
ICBHQzNEaW50IGdldE1heENvbG9yQXR0YWNobWVudHMoKTsKLQotICAgIHZvaWQgc2V0QmFja0Ry
YXdCdWZmZXIoR0MzRGVudW0pOwotCi0gICAgdm9pZCByZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVy
KCk7Ci0gICAgdm9pZCByZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpOwotCi0gICAgLy8gQ2hlY2sg
aWYgRVhUX2RyYXdfYnVmZmVycyBleHRlbnNpb24gaXMgc3VwcG9ydGVkIGFuZCBpZiBpdCBzYXRp
c2ZpZXMgdGhlIFdlYkdMIHJlcXVpcmVtZW50cy4KLSAgICBib29sIHN1cHBvcnRzRHJhd0J1ZmZl
cnMoKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5p
ZGwJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTEsNjc3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotdHlwZWRlZiB1bnNp
Z25lZCBsb25nICBHTGVudW07Ci10eXBlZGVmIGJvb2xlYW4gICAgICAgIEdMYm9vbGVhbjsKLXR5
cGVkZWYgdW5zaWduZWQgbG9uZyAgR0xiaXRmaWVsZDsKLXR5cGVkZWYgYnl0ZSAgICAgICAgICAg
R0xieXRlOyAgICAgICAgIC8qICdieXRlJyBzaG91bGQgYmUgYSBzaWduZWQgOCBiaXQgdHlwZS4g
Ki8KLXR5cGVkZWYgc2hvcnQgICAgICAgICAgR0xzaG9ydDsKLXR5cGVkZWYgbG9uZyAgICAgICAg
ICAgR0xpbnQ7Ci10eXBlZGVmIGxvbmcgICAgICAgICAgIEdMc2l6ZWk7Ci10eXBlZGVmIGxvbmcg
bG9uZyAgICAgIEdMaW50cHRyOwotdHlwZWRlZiBsb25nIGxvbmcgICAgICBHTHNpemVpcHRyOwot
dHlwZWRlZiBvY3RldCAgICAgICAgICBHTHVieXRlOyAgICAgICAgLyogJ29jdGV0JyBzaG91bGQg
YmUgYW4gdW5zaWduZWQgOCBiaXQgdHlwZS4gKi8KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgR0x1
c2hvcnQ7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMdWludDsKLXR5cGVkZWYgdW5yZXN0cmlj
dGVkIGZsb2F0IEdMZmxvYXQ7Ci10eXBlZGVmIHVucmVzdHJpY3RlZCBmbG9hdCBHTGNsYW1wZjsK
LQotWwotICAgIENvbmRpdGlvbmFsPVdFQkdMLAotICAgIEpTQ3VzdG9tTWFya0Z1bmN0aW9uLAot
ICAgIERvTm90Q2hlY2tDb25zdGFudHMsCi1dIGludGVyZmFjZSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0IHsKLQotICAgIC8qIENsZWFyQnVmZmVyTWFzayAq
LwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9CVUZGRVJfQklUICAgICAgICAgICAgICAgPSAweDAw
MDAwMTAwOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JVRkZFUl9CSVQgICAgICAgICAgICAg
PSAweDAwMDAwNDAwOwotICAgIGNvbnN0IEdMZW51bSBDT0xPUl9CVUZGRVJfQklUICAgICAgICAg
ICAgICAgPSAweDAwMDA0MDAwOwotCi0gICAgLyogQmVnaW5Nb2RlICovCi0gICAgY29uc3QgR0xl
bnVtIFBPSU5UUyAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMDsKLSAgICBjb25zdCBH
TGVudW0gTElORVMgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDAxOwotICAgIGNvbnN0
IEdMZW51bSBMSU5FX0xPT1AgICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDI7Ci0gICAgY29u
c3QgR0xlbnVtIExJTkVfU1RSSVAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMzsKLSAgICBj
b25zdCBHTGVudW0gVFJJQU5HTEVTICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDA0OwotICAg
IGNvbnN0IEdMZW51bSBUUklBTkdMRV9TVFJJUCAgICAgICAgICAgICAgICAgPSAweDAwMDU7Ci0g
ICAgY29uc3QgR0xlbnVtIFRSSUFOR0xFX0ZBTiAgICAgICAgICAgICAgICAgICA9IDB4MDAwNjsK
LQotICAgIC8qIEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi8KLSAgICAv
KiAgICAgIE5FVkVSICovCi0gICAgLyogICAgICBMRVNTICovCi0gICAgLyogICAgICBFUVVBTCAq
LwotICAgIC8qICAgICAgTEVRVUFMICovCi0gICAgLyogICAgICBHUkVBVEVSICovCi0gICAgLyog
ICAgICBOT1RFUVVBTCAqLwotICAgIC8qICAgICAgR0VRVUFMICovCi0gICAgLyogICAgICBBTFdB
WVMgKi8KLQotICAgIC8qIEJsZW5kaW5nRmFjdG9yRGVzdCAqLwotICAgIGNvbnN0IEdMZW51bSBa
RVJPICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAwOwotICAgIGNvbnN0IEdMZW51bSBPTkUg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxOwotICAgIGNvbnN0IEdMZW51bSBTUkNfQ09M
T1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDA7Ci0gICAgY29uc3QgR0xlbnVtIE9ORV9N
SU5VU19TUkNfQ09MT1IgICAgICAgICAgICA9IDB4MDMwMTsKLSAgICBjb25zdCBHTGVudW0gU1JD
X0FMUEhBICAgICAgICAgICAgICAgICAgICAgID0gMHgwMzAyOwotICAgIGNvbnN0IEdMZW51bSBP
TkVfTUlOVVNfU1JDX0FMUEhBICAgICAgICAgICAgPSAweDAzMDM7Ci0gICAgY29uc3QgR0xlbnVt
IERTVF9BTFBIQSAgICAgICAgICAgICAgICAgICAgICA9IDB4MDMwNDsKLSAgICBjb25zdCBHTGVu
dW0gT05FX01JTlVTX0RTVF9BTFBIQSAgICAgICAgICAgID0gMHgwMzA1OwotCi0gICAgLyogQmxl
bmRpbmdGYWN0b3JTcmMgKi8KLSAgICAvKiAgICAgIFpFUk8gKi8KLSAgICAvKiAgICAgIE9ORSAq
LwotICAgIGNvbnN0IEdMZW51bSBEU1RfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAz
MDY7Ci0gICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19EU1RfQ09MT1IgICAgICAgICAgICA9IDB4
MDMwNzsKLSAgICBjb25zdCBHTGVudW0gU1JDX0FMUEhBX1NBVFVSQVRFICAgICAgICAgICAgID0g
MHgwMzA4OwotICAgIC8qICAgICAgU1JDX0FMUEhBICovCi0gICAgLyogICAgICBPTkVfTUlOVVNf
U1JDX0FMUEhBICovCi0gICAgLyogICAgICBEU1RfQUxQSEEgKi8KLSAgICAvKiAgICAgIE9ORV9N
SU5VU19EU1RfQUxQSEEgKi8KLQotICAgIC8qIEJsZW5kRXF1YXRpb25TZXBhcmF0ZSAqLwotICAg
IGNvbnN0IEdMZW51bSBGVU5DX0FERCAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwMDY7Ci0g
ICAgY29uc3QgR0xlbnVtIEJMRU5EX0VRVUFUSU9OICAgICAgICAgICAgICAgICA9IDB4ODAwOTsK
LSAgICBjb25zdCBHTGVudW0gQkxFTkRfRVFVQVRJT05fUkdCICAgICAgICAgICAgID0gMHg4MDA5
OyAgIC8qIHNhbWUgYXMgQkxFTkRfRVFVQVRJT04gKi8KLSAgICBjb25zdCBHTGVudW0gQkxFTkRf
RVFVQVRJT05fQUxQSEEgICAgICAgICAgID0gMHg4ODNEOwotCi0gICAgLyogQmxlbmRTdWJ0cmFj
dCAqLwotICAgIGNvbnN0IEdMZW51bSBGVU5DX1NVQlRSQUNUICAgICAgICAgICAgICAgICAgPSAw
eDgwMEE7Ci0gICAgY29uc3QgR0xlbnVtIEZVTkNfUkVWRVJTRV9TVUJUUkFDVCAgICAgICAgICA9
IDB4ODAwQjsKLQotICAgIC8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0aW9ucyAqLwotICAgIGNvbnN0
IEdMZW51bSBCTEVORF9EU1RfUkdCICAgICAgICAgICAgICAgICAgPSAweDgwQzg7Ci0gICAgY29u
c3QgR0xlbnVtIEJMRU5EX1NSQ19SR0IgICAgICAgICAgICAgICAgICA9IDB4ODBDOTsKLSAgICBj
b25zdCBHTGVudW0gQkxFTkRfRFNUX0FMUEhBICAgICAgICAgICAgICAgID0gMHg4MENBOwotICAg
IGNvbnN0IEdMZW51bSBCTEVORF9TUkNfQUxQSEEgICAgICAgICAgICAgICAgPSAweDgwQ0I7Ci0g
ICAgY29uc3QgR0xlbnVtIENPTlNUQU5UX0NPTE9SICAgICAgICAgICAgICAgICA9IDB4ODAwMTsK
LSAgICBjb25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SICAgICAgID0gMHg4MDAy
OwotICAgIGNvbnN0IEdMZW51bSBDT05TVEFOVF9BTFBIQSAgICAgICAgICAgICAgICAgPSAweDgw
MDM7Ci0gICAgY29uc3QgR0xlbnVtIE9ORV9NSU5VU19DT05TVEFOVF9BTFBIQSAgICAgICA9IDB4
ODAwNDsKLSAgICBjb25zdCBHTGVudW0gQkxFTkRfQ09MT1IgICAgICAgICAgICAgICAgICAgID0g
MHg4MDA1OwotCi0gICAgLyogQnVmZmVyIE9iamVjdHMgKi8KLSAgICBjb25zdCBHTGVudW0gQVJS
QVlfQlVGRkVSICAgICAgICAgICAgICAgICAgID0gMHg4ODkyOwotICAgIGNvbnN0IEdMZW51bSBF
TEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAgPSAweDg4OTM7Ci0gICAgY29uc3QgR0xlbnVt
IEFSUkFZX0JVRkZFUl9CSU5ESU5HICAgICAgICAgICA9IDB4ODg5NDsKLSAgICBjb25zdCBHTGVu
dW0gRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyAgID0gMHg4ODk1OwotCi0gICAgY29uc3Qg
R0xlbnVtIFNUUkVBTV9EUkFXICAgICAgICAgICAgICAgICAgICA9IDB4ODhFMDsKLSAgICBjb25z
dCBHTGVudW0gU1RBVElDX0RSQVcgICAgICAgICAgICAgICAgICAgID0gMHg4OEU0OwotICAgIGNv
bnN0IEdMZW51bSBEWU5BTUlDX0RSQVcgICAgICAgICAgICAgICAgICAgPSAweDg4RTg7Ci0KLSAg
ICBjb25zdCBHTGVudW0gQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgID0gMHg4NzY0Owot
ICAgIGNvbnN0IEdMZW51bSBCVUZGRVJfVVNBR0UgICAgICAgICAgICAgICAgICAgPSAweDg3NjU7
Ci0KLSAgICBjb25zdCBHTGVudW0gQ1VSUkVOVF9WRVJURVhfQVRUUklCICAgICAgICAgID0gMHg4
NjI2OwotCi0gICAgLyogQ3VsbEZhY2VNb2RlICovCi0gICAgY29uc3QgR0xlbnVtIEZST05UICAg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDQwNDsKLSAgICBjb25zdCBHTGVudW0gQkFDSyAg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwNDA1OwotICAgIGNvbnN0IEdMZW51bSBGUk9O
VF9BTkRfQkFDSyAgICAgICAgICAgICAgICAgPSAweDA0MDg7Ci0KLSAgICAvKiBEZXB0aEZ1bmN0
aW9uICovCi0gICAgLyogICAgICBORVZFUiAqLwotICAgIC8qICAgICAgTEVTUyAqLwotICAgIC8q
ICAgICAgRVFVQUwgKi8KLSAgICAvKiAgICAgIExFUVVBTCAqLwotICAgIC8qICAgICAgR1JFQVRF
UiAqLwotICAgIC8qICAgICAgTk9URVFVQUwgKi8KLSAgICAvKiAgICAgIEdFUVVBTCAqLwotICAg
IC8qICAgICAgQUxXQVlTICovCi0KLSAgICAvKiBFbmFibGVDYXAgKi8KLSAgICBjb25zdCBHTGVu
dW0gVEVYVFVSRV8yRCAgICAgICAgICAgICAgICAgICAgID0gMHgwREUxOwotICAgIGNvbnN0IEdM
ZW51bSBDVUxMX0ZBQ0UgICAgICAgICAgICAgICAgICAgICAgPSAweDBCNDQ7Ci0gICAgY29uc3Qg
R0xlbnVtIEJMRU5EICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MEJFMjsKLSAgICBjb25z
dCBHTGVudW0gRElUSEVSICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkQwOwotICAgIGNv
bnN0IEdMZW51bSBTVEVOQ0lMX1RFU1QgICAgICAgICAgICAgICAgICAgPSAweDBCOTA7Ci0gICAg
Y29uc3QgR0xlbnVtIERFUFRIX1RFU1QgICAgICAgICAgICAgICAgICAgICA9IDB4MEI3MTsKLSAg
ICBjb25zdCBHTGVudW0gU0NJU1NPUl9URVNUICAgICAgICAgICAgICAgICAgID0gMHgwQzExOwot
ICAgIGNvbnN0IEdMZW51bSBQT0xZR09OX09GRlNFVF9GSUxMICAgICAgICAgICAgPSAweDgwMzc7
Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRV9BTFBIQV9UT19DT1ZFUkFHRSAgICAgICA9IDB4ODA5
RTsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0NPVkVSQUdFICAgICAgICAgICAgICAgID0gMHg4
MEEwOwotCi0gICAgLyogRXJyb3JDb2RlICovCi0gICAgY29uc3QgR0xlbnVtIE5PX0VSUk9SICAg
ICAgICAgICAgICAgICAgICAgICA9IDA7Ci0gICAgY29uc3QgR0xlbnVtIElOVkFMSURfRU5VTSAg
ICAgICAgICAgICAgICAgICA9IDB4MDUwMDsKLSAgICBjb25zdCBHTGVudW0gSU5WQUxJRF9WQUxV
RSAgICAgICAgICAgICAgICAgID0gMHgwNTAxOwotICAgIGNvbnN0IEdMZW51bSBJTlZBTElEX09Q
RVJBVElPTiAgICAgICAgICAgICAgPSAweDA1MDI7Ci0gICAgY29uc3QgR0xlbnVtIE9VVF9PRl9N
RU1PUlkgICAgICAgICAgICAgICAgICA9IDB4MDUwNTsKLQotICAgIC8qIEZyb250RmFjZURpcmVj
dGlvbiAqLwotICAgIGNvbnN0IEdMZW51bSBDVyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDA5MDA7Ci0gICAgY29uc3QgR0xlbnVtIENDVyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDkwMTsKLQotICAgIC8qIEdldFBOYW1lICovCi0gICAgY29uc3QgR0xlbnVtIExJTkVf
V0lEVEggICAgICAgICAgICAgICAgICAgICA9IDB4MEIyMTsKLSAgICBjb25zdCBHTGVudW0gQUxJ
QVNFRF9QT0lOVF9TSVpFX1JBTkdFICAgICAgID0gMHg4NDZEOwotICAgIGNvbnN0IEdMZW51bSBB
TElBU0VEX0xJTkVfV0lEVEhfUkFOR0UgICAgICAgPSAweDg0NkU7Ci0gICAgY29uc3QgR0xlbnVt
IENVTExfRkFDRV9NT0RFICAgICAgICAgICAgICAgICA9IDB4MEI0NTsKLSAgICBjb25zdCBHTGVu
dW0gRlJPTlRfRkFDRSAgICAgICAgICAgICAgICAgICAgID0gMHgwQjQ2OwotICAgIGNvbnN0IEdM
ZW51bSBERVBUSF9SQU5HRSAgICAgICAgICAgICAgICAgICAgPSAweDBCNzA7Ci0gICAgY29uc3Qg
R0xlbnVtIERFUFRIX1dSSVRFTUFTSyAgICAgICAgICAgICAgICA9IDB4MEI3MjsKLSAgICBjb25z
dCBHTGVudW0gREVQVEhfQ0xFQVJfVkFMVUUgICAgICAgICAgICAgID0gMHgwQjczOwotICAgIGNv
bnN0IEdMZW51bSBERVBUSF9GVU5DICAgICAgICAgICAgICAgICAgICAgPSAweDBCNzQ7Ci0gICAg
Y29uc3QgR0xlbnVtIFNURU5DSUxfQ0xFQVJfVkFMVUUgICAgICAgICAgICA9IDB4MEI5MTsKLSAg
ICBjb25zdCBHTGVudW0gU1RFTkNJTF9GVU5DICAgICAgICAgICAgICAgICAgID0gMHgwQjkyOwot
ICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0ZBSUwgICAgICAgICAgICAgICAgICAgPSAweDBCOTQ7
Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfUEFTU19ERVBUSF9GQUlMICAgICAgICA9IDB4MEI5
NTsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9QQVNTX0RFUFRIX1BBU1MgICAgICAgID0gMHgw
Qjk2OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX1JFRiAgICAgICAgICAgICAgICAgICAgPSAw
eDBCOTc7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfVkFMVUVfTUFTSyAgICAgICAgICAgICA9
IDB4MEI5MzsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9XUklURU1BU0sgICAgICAgICAgICAg
ID0gMHgwQjk4OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfRlVOQyAgICAgICAgICAg
ICAgPSAweDg4MDA7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19GQUlMICAgICAgICAg
ICAgICA9IDB4ODgwMTsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX1BBU1NfREVQVEhf
RkFJTCAgID0gMHg4ODAyOwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfUEFTU19ERVBU
SF9QQVNTICAgPSAweDg4MDM7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19SRUYgICAg
ICAgICAgICAgICA9IDB4OENBMzsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX1ZBTFVF
X01BU0sgICAgICAgID0gMHg4Q0E0OwotICAgIGNvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfV1JJ
VEVNQVNLICAgICAgICAgPSAweDhDQTU7Ci0gICAgY29uc3QgR0xlbnVtIFZJRVdQT1JUICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MEJBMjsKLSAgICBjb25zdCBHTGVudW0gU0NJU1NPUl9CT1gg
ICAgICAgICAgICAgICAgICAgID0gMHgwQzEwOwotICAgIC8qICAgICAgU0NJU1NPUl9URVNUICov
Ci0gICAgY29uc3QgR0xlbnVtIENPTE9SX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA9IDB4MEMy
MjsKLSAgICBjb25zdCBHTGVudW0gQ09MT1JfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0gMHgw
QzIzOwotICAgIGNvbnN0IEdMZW51bSBVTlBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgPSAw
eDBDRjU7Ci0gICAgY29uc3QgR0xlbnVtIFBBQ0tfQUxJR05NRU5UICAgICAgICAgICAgICAgICA9
IDB4MEQwNTsKLSAgICBjb25zdCBHTGVudW0gTUFYX1RFWFRVUkVfU0laRSAgICAgICAgICAgICAg
ID0gMHgwRDMzOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVklFV1BPUlRfRElNUyAgICAgICAgICAg
ICAgPSAweDBEM0E7Ci0gICAgY29uc3QgR0xlbnVtIFNVQlBJWEVMX0JJVFMgICAgICAgICAgICAg
ICAgICA9IDB4MEQ1MDsKLSAgICBjb25zdCBHTGVudW0gUkVEX0JJVFMgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgwRDUyOwotICAgIGNvbnN0IEdMZW51bSBHUkVFTl9CSVRTICAgICAgICAgICAg
ICAgICAgICAgPSAweDBENTM7Ci0gICAgY29uc3QgR0xlbnVtIEJMVUVfQklUUyAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MEQ1NDsKLSAgICBjb25zdCBHTGVudW0gQUxQSEFfQklUUyAgICAgICAg
ICAgICAgICAgICAgID0gMHgwRDU1OwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9CSVRTICAgICAg
ICAgICAgICAgICAgICAgPSAweDBENTY7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfQklUUyAg
ICAgICAgICAgICAgICAgICA9IDB4MEQ1NzsKLSAgICBjb25zdCBHTGVudW0gUE9MWUdPTl9PRkZT
RVRfVU5JVFMgICAgICAgICAgID0gMHgyQTAwOwotICAgIC8qICAgICAgUE9MWUdPTl9PRkZTRVRf
RklMTCAqLwotICAgIGNvbnN0IEdMZW51bSBQT0xZR09OX09GRlNFVF9GQUNUT1IgICAgICAgICAg
PSAweDgwMzg7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQklORElOR18yRCAgICAgICAgICAg
ICA9IDB4ODA2OTsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0JVRkZFUlMgICAgICAgICAgICAg
ICAgID0gMHg4MEE4OwotICAgIGNvbnN0IEdMZW51bSBTQU1QTEVTICAgICAgICAgICAgICAgICAg
ICAgICAgPSAweDgwQTk7Ci0gICAgY29uc3QgR0xlbnVtIFNBTVBMRV9DT1ZFUkFHRV9WQUxVRSAg
ICAgICAgICA9IDB4ODBBQTsKLSAgICBjb25zdCBHTGVudW0gU0FNUExFX0NPVkVSQUdFX0lOVkVS
VCAgICAgICAgID0gMHg4MEFCOwotCi0gICAgLyogR2V0VGV4dHVyZVBhcmFtZXRlciAqLwotICAg
IC8qICAgICAgVEVYVFVSRV9NQUdfRklMVEVSICovCi0gICAgLyogICAgICBURVhUVVJFX01JTl9G
SUxURVIgKi8KLSAgICAvKiAgICAgIFRFWFRVUkVfV1JBUF9TICovCi0gICAgLyogICAgICBURVhU
VVJFX1dSQVBfVCAqLwotCi0gICAgY29uc3QgR0xlbnVtIENPTVBSRVNTRURfVEVYVFVSRV9GT1JN
QVRTICAgICA9IDB4ODZBMzsKLQotICAgIC8qIEhpbnRNb2RlICovCi0gICAgY29uc3QgR0xlbnVt
IERPTlRfQ0FSRSAgICAgICAgICAgICAgICAgICAgICA9IDB4MTEwMDsKLSAgICBjb25zdCBHTGVu
dW0gRkFTVEVTVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxMTAxOwotICAgIGNvbnN0IEdM
ZW51bSBOSUNFU1QgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDExMDI7Ci0KLSAgICAvKiBI
aW50VGFyZ2V0ICovCi0gICAgY29uc3QgR0xlbnVtIEdFTkVSQVRFX01JUE1BUF9ISU5UICAgICAg
ICAgICAgPSAweDgxOTI7Ci0KLSAgICAvKiBEYXRhVHlwZSAqLwotICAgIGNvbnN0IEdMZW51bSBC
WVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDA7Ci0gICAgY29uc3QgR0xlbnVt
IFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICA9IDB4MTQwMTsKLSAgICBjb25zdCBHTGVu
dW0gU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDAyOwotICAgIGNvbnN0IEdM
ZW51bSBVTlNJR05FRF9TSE9SVCAgICAgICAgICAgICAgICAgPSAweDE0MDM7Ci0gICAgY29uc3Qg
R0xlbnVtIElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwNDsKLSAgICBjb25z
dCBHTGVudW0gVU5TSUdORURfSU5UICAgICAgICAgICAgICAgICAgID0gMHgxNDA1OwotICAgIGNv
bnN0IEdMZW51bSBGTE9BVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDY7Ci0KLSAg
ICAvKiBQaXhlbEZvcm1hdCAqLwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9DT01QT05FTlQgICAg
ICAgICAgICAgICAgPSAweDE5MDI7Ci0gICAgY29uc3QgR0xlbnVtIEFMUEhBICAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MTkwNjsKLSAgICBjb25zdCBHTGVudW0gUkdCICAgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgxOTA3OwotICAgIGNvbnN0IEdMZW51bSBSR0JBICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDE5MDg7Ci0gICAgY29uc3QgR0xlbnVtIExVTUlOQU5DRSAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MTkwOTsKLSAgICBjb25zdCBHTGVudW0gTFVNSU5BTkNF
X0FMUEhBICAgICAgICAgICAgICAgID0gMHgxOTBBOwotCi0gICAgLyogUGl4ZWxUeXBlICovCi0g
ICAgLyogICAgICBVTlNJR05FRF9CWVRFICovCi0gICAgY29uc3QgR0xlbnVtIFVOU0lHTkVEX1NI
T1JUXzRfNF80XzQgICAgICAgICA9IDB4ODAzMzsKLSAgICBjb25zdCBHTGVudW0gVU5TSUdORURf
U0hPUlRfNV81XzVfMSAgICAgICAgID0gMHg4MDM0OwotICAgIGNvbnN0IEdMZW51bSBVTlNJR05F
RF9TSE9SVF81XzZfNSAgICAgICAgICAgPSAweDgzNjM7Ci0KLSAgICAvKiBTaGFkZXJzICovCi0g
ICAgY29uc3QgR0xlbnVtIEZSQUdNRU5UX1NIQURFUiAgICAgICAgICAgICAgICAgID0gMHg4QjMw
OwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfU0hBREVSICAgICAgICAgICAgICAgICAgICA9IDB4
OEIzMTsKLSAgICBjb25zdCBHTGVudW0gTUFYX1ZFUlRFWF9BVFRSSUJTICAgICAgICAgICAgICAg
PSAweDg4Njk7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTICAg
ICAgID0gMHg4REZCOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVkFSWUlOR19WRUNUT1JTICAgICAg
ICAgICAgICA9IDB4OERGQzsKLSAgICBjb25zdCBHTGVudW0gTUFYX0NPTUJJTkVEX1RFWFRVUkVf
SU1BR0VfVU5JVFMgPSAweDhCNEQ7Ci0gICAgY29uc3QgR0xlbnVtIE1BWF9WRVJURVhfVEVYVFVS
RV9JTUFHRV9VTklUUyAgID0gMHg4QjRDOwotICAgIGNvbnN0IEdMZW51bSBNQVhfVEVYVFVSRV9J
TUFHRV9VTklUUyAgICAgICAgICA9IDB4ODg3MjsKLSAgICBjb25zdCBHTGVudW0gTUFYX0ZSQUdN
RU5UX1VOSUZPUk1fVkVDVE9SUyAgICAgPSAweDhERkQ7Ci0gICAgY29uc3QgR0xlbnVtIFNIQURF
Ul9UWVBFICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjRGOwotICAgIGNvbnN0IEdMZW51bSBE
RUxFVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgICA9IDB4OEI4MDsKLSAgICBjb25zdCBHTGVu
dW0gTElOS19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCODI7Ci0gICAgY29uc3Qg
R0xlbnVtIFZBTElEQVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgID0gMHg4QjgzOwotICAgIGNv
bnN0IEdMZW51bSBBVFRBQ0hFRF9TSEFERVJTICAgICAgICAgICAgICAgICA9IDB4OEI4NTsKLSAg
ICBjb25zdCBHTGVudW0gQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAgICAgICAgPSAweDhCODY7
Ci0gICAgY29uc3QgR0xlbnVtIEFDVElWRV9BVFRSSUJVVEVTICAgICAgICAgICAgICAgID0gMHg4
Qjg5OwotICAgIGNvbnN0IEdMZW51bSBTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04gICAgICAgICA9
IDB4OEI4QzsKLSAgICBjb25zdCBHTGVudW0gQ1VSUkVOVF9QUk9HUkFNICAgICAgICAgICAgICAg
ICAgPSAweDhCOEQ7Ci0KLSAgICAvKiBTdGVuY2lsRnVuY3Rpb24gKi8KLSAgICBjb25zdCBHTGVu
dW0gTkVWRVIgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAwOwotICAgIGNvbnN0IEdM
ZW51bSBMRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDE7Ci0gICAgY29uc3Qg
R0xlbnVtIEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwMjsKLSAgICBjb25z
dCBHTGVudW0gTEVRVUFMICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjAzOwotICAgIGNv
bnN0IEdMZW51bSBHUkVBVEVSICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDQ7Ci0gICAg
Y29uc3QgR0xlbnVtIE5PVEVRVUFMICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwNTsKLSAg
ICBjb25zdCBHTGVudW0gR0VRVUFMICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjA2Owot
ICAgIGNvbnN0IEdMZW51bSBBTFdBWVMgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDc7
Ci0KLSAgICAvKiBTdGVuY2lsT3AgKi8KLSAgICAvKiAgICAgIFpFUk8gKi8KLSAgICBjb25zdCBH
TGVudW0gS0VFUCAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAwOwotICAgIGNvbnN0
IEdMZW51bSBSRVBMQUNFICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFFMDE7Ci0gICAgY29u
c3QgR0xlbnVtIElOQ1IgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUUwMjsKLSAgICBj
b25zdCBHTGVudW0gREVDUiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAzOwotICAg
IGNvbnN0IEdMZW51bSBJTlZFUlQgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE1MEE7Ci0g
ICAgY29uc3QgR0xlbnVtIElOQ1JfV1JBUCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODUwNzsK
LSAgICBjb25zdCBHTGVudW0gREVDUl9XUkFQICAgICAgICAgICAgICAgICAgICAgID0gMHg4NTA4
OwotCi0gICAgLyogU3RyaW5nTmFtZSAqLwotICAgIGNvbnN0IEdMZW51bSBWRU5ET1IgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDFGMDA7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkVSICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMTsKLSAgICBjb25zdCBHTGVudW0gVkVSU0lPTiAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAyOwotCi0gICAgLyogVGV4dHVyZU1hZ0ZpbHRl
ciAqLwotICAgIGNvbnN0IEdMZW51bSBORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDI2MDA7Ci0gICAgY29uc3QgR0xlbnVtIExJTkVBUiAgICAgICAgICAgICAgICAgICAgICAgICA9
IDB4MjYwMTsKLQotICAgIC8qIFRleHR1cmVNaW5GaWx0ZXIgKi8KLSAgICAvKiAgICAgIE5FQVJF
U1QgKi8KLSAgICAvKiAgICAgIExJTkVBUiAqLwotICAgIGNvbnN0IEdMZW51bSBORUFSRVNUX01J
UE1BUF9ORUFSRVNUICAgICAgICAgPSAweDI3MDA7Ci0gICAgY29uc3QgR0xlbnVtIExJTkVBUl9N
SVBNQVBfTkVBUkVTVCAgICAgICAgICA9IDB4MjcwMTsKLSAgICBjb25zdCBHTGVudW0gTkVBUkVT
VF9NSVBNQVBfTElORUFSICAgICAgICAgID0gMHgyNzAyOwotICAgIGNvbnN0IEdMZW51bSBMSU5F
QVJfTUlQTUFQX0xJTkVBUiAgICAgICAgICAgPSAweDI3MDM7Ci0KLSAgICAvKiBUZXh0dXJlUGFy
YW1ldGVyTmFtZSAqLwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX01BR19GSUxURVIgICAgICAg
ICAgICAgPSAweDI4MDA7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfTUlOX0ZJTFRFUiAgICAg
ICAgICAgICA9IDB4MjgwMTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9XUkFQX1MgICAgICAg
ICAgICAgICAgID0gMHgyODAyOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX1dSQVBfVCAgICAg
ICAgICAgICAgICAgPSAweDI4MDM7Ci0KLSAgICAvKiBUZXh0dXJlVGFyZ2V0ICovCi0gICAgLyog
ICAgICBURVhUVVJFXzJEICovCi0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUgICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MTcwMjsKLQotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQ
ICAgICAgICAgICAgICAgPSAweDg1MTM7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVfQklORElO
R19DVUJFX01BUCAgICAgICA9IDB4ODUxNDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YICAgID0gMHg4NTE1OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFX0NV
QkVfTUFQX05FR0FUSVZFX1ggICAgPSAweDg1MTY7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWSAgICA9IDB4ODUxNzsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9ZICAgID0gMHg4NTE4OwotICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ogICAgPSAweDg1MTk7Ci0gICAgY29uc3QgR0xlbnVtIFRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICA9IDB4ODUxQTsKLSAgICBjb25zdCBHTGVudW0g
TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSAgICAgID0gMHg4NTFDOwotCi0gICAgLyogVGV4dHVy
ZVVuaXQgKi8KLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEMwOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMSAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDg0QzE7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODRDMjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTMgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4NEMzOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFNCAgICAgICAgICAgICAg
ICAgICAgICAgPSAweDg0QzQ7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkU1ICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4ODRDNTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTYgICAgICAgICAg
ICAgICAgICAgICAgID0gMHg4NEM2OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFNyAgICAgICAg
ICAgICAgICAgICAgICAgPSAweDg0Qzc7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkU4ICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4ODRDODsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTkgICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4NEM5OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMTAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0E7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUx
MSAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQjsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVS
RTEyICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENDOwotICAgIGNvbnN0IEdMZW51bSBURVhU
VVJFMTMgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0Q7Ci0gICAgY29uc3QgR0xlbnVtIFRF
WFRVUkUxNCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRTsKLSAgICBjb25zdCBHTGVudW0g
VEVYVFVSRTE1ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENGOwotICAgIGNvbnN0IEdMZW51
bSBURVhUVVJFMTYgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDA7Ci0gICAgY29uc3QgR0xl
bnVtIFRFWFRVUkUxNyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREMTsKLSAgICBjb25zdCBH
TGVudW0gVEVYVFVSRTE4ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQyOwotICAgIGNvbnN0
IEdMZW51bSBURVhUVVJFMTkgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDM7Ci0gICAgY29u
c3QgR0xlbnVtIFRFWFRVUkUyMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRENDsKLSAgICBj
b25zdCBHTGVudW0gVEVYVFVSRTIxICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ1OwotICAg
IGNvbnN0IEdMZW51bSBURVhUVVJFMjIgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDY7Ci0g
ICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyMyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRENzsK
LSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI0ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQ4
OwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjUgICAgICAgICAgICAgICAgICAgICAgPSAweDg0
RDk7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyNiAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODREQTsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTI3ICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NERCOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMjggICAgICAgICAgICAgICAgICAgICAg
PSAweDg0REM7Ci0gICAgY29uc3QgR0xlbnVtIFRFWFRVUkUyOSAgICAgICAgICAgICAgICAgICAg
ICA9IDB4ODRERDsKLSAgICBjb25zdCBHTGVudW0gVEVYVFVSRTMwICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NERFOwotICAgIGNvbnN0IEdMZW51bSBURVhUVVJFMzEgICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0REY7Ci0gICAgY29uc3QgR0xlbnVtIEFDVElWRV9URVhUVVJFICAgICAgICAg
ICAgICAgICA9IDB4ODRFMDsKLQotICAgIC8qIFRleHR1cmVXcmFwTW9kZSAqLwotICAgIGNvbnN0
IEdMZW51bSBSRVBFQVQgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI5MDE7Ci0gICAgY29u
c3QgR0xlbnVtIENMQU1QX1RPX0VER0UgICAgICAgICAgICAgICAgICA9IDB4ODEyRjsKLSAgICBj
b25zdCBHTGVudW0gTUlSUk9SRURfUkVQRUFUICAgICAgICAgICAgICAgID0gMHg4MzcwOwotCi0g
ICAgLyogVW5pZm9ybSBUeXBlcyAqLwotICAgIGNvbnN0IEdMZW51bSBGTE9BVF9WRUMyICAgICAg
ICAgICAgICAgICAgICAgPSAweDhCNTA7Ci0gICAgY29uc3QgR0xlbnVtIEZMT0FUX1ZFQzMgICAg
ICAgICAgICAgICAgICAgICA9IDB4OEI1MTsKLSAgICBjb25zdCBHTGVudW0gRkxPQVRfVkVDNCAg
ICAgICAgICAgICAgICAgICAgID0gMHg4QjUyOwotICAgIGNvbnN0IEdMZW51bSBJTlRfVkVDMiAg
ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTM7Ci0gICAgY29uc3QgR0xlbnVtIElOVF9WRUMz
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NDsKLSAgICBjb25zdCBHTGVudW0gSU5UX1ZF
QzQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU1OwotICAgIGNvbnN0IEdMZW51bSBCT09M
ICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTY7Ci0gICAgY29uc3QgR0xlbnVtIEJP
T0xfVkVDMiAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NzsKLSAgICBjb25zdCBHTGVudW0g
Qk9PTF9WRUMzICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU4OwotICAgIGNvbnN0IEdMZW51
bSBCT09MX1ZFQzQgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTk7Ci0gICAgY29uc3QgR0xl
bnVtIEZMT0FUX01BVDIgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1QTsKLSAgICBjb25zdCBH
TGVudW0gRkxPQVRfTUFUMyAgICAgICAgICAgICAgICAgICAgID0gMHg4QjVCOwotICAgIGNvbnN0
IEdMZW51bSBGTE9BVF9NQVQ0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNUM7Ci0gICAgY29u
c3QgR0xlbnVtIFNBTVBMRVJfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1RTsKLSAgICBj
b25zdCBHTGVudW0gU0FNUExFUl9DVUJFICAgICAgICAgICAgICAgICAgID0gMHg4QjYwOwotCi0g
ICAgLyogVmVydGV4IEFycmF5cyAqLwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FS
UkFZX0VOQUJMRUQgICAgICAgID0gMHg4NjIyOwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRU
UklCX0FSUkFZX1NJWkUgICAgICAgICAgID0gMHg4NjIzOwotICAgIGNvbnN0IEdMZW51bSBWRVJU
RVhfQVRUUklCX0FSUkFZX1NUUklERSAgICAgICAgID0gMHg4NjI0OwotICAgIGNvbnN0IEdMZW51
bSBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAgICAgID0gMHg4NjI1OwotICAgIGNvbnN0
IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQgICAgID0gMHg4ODZBOwotICAg
IGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVIgICAgICAgID0gMHg4NjQ1
OwotICAgIGNvbnN0IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HID0g
MHg4ODlGOwotCi0gICAgLyogU2hhZGVyIFNvdXJjZSAqLwotICAgIGNvbnN0IEdMZW51bSBDT01Q
SUxFX1NUQVRVUyAgICAgICAgICAgICAgICAgPSAweDhCODE7Ci0KLSAgICAvKiBTaGFkZXIgUHJl
Y2lzaW9uLVNwZWNpZmllZCBUeXBlcyAqLwotICAgIGNvbnN0IEdMZW51bSBMT1dfRkxPQVQgICAg
ICAgICAgICAgICAgICAgICAgPSAweDhERjA7Ci0gICAgY29uc3QgR0xlbnVtIE1FRElVTV9GTE9B
VCAgICAgICAgICAgICAgICAgICA9IDB4OERGMTsKLSAgICBjb25zdCBHTGVudW0gSElHSF9GTE9B
VCAgICAgICAgICAgICAgICAgICAgID0gMHg4REYyOwotICAgIGNvbnN0IEdMZW51bSBMT1dfSU5U
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhERjM7Ci0gICAgY29uc3QgR0xlbnVtIE1FRElV
TV9JTlQgICAgICAgICAgICAgICAgICAgICA9IDB4OERGNDsKLSAgICBjb25zdCBHTGVudW0gSElH
SF9JTlQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REY1OwotCi0gICAgLyogRnJhbWVidWZm
ZXIgT2JqZWN0LiAqLwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUiAgICAgICAgICAgICAg
ICAgICAgPSAweDhENDA7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUiAgICAgICAgICAg
ICAgICAgICA9IDB4OEQ0MTsKLQotICAgIGNvbnN0IEdMZW51bSBSR0JBNCAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDgwNTY7Ci0gICAgY29uc3QgR0xlbnVtIFJHQjVfQTEgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODA1NzsKLSAgICBjb25zdCBHTGVudW0gUkdCNTY1ICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4RDYyOwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9DT01QT05F
TlQxNiAgICAgICAgICAgICAgPSAweDgxQTU7Ci0gICAgY29uc3QgR0xlbnVtIFNURU5DSUxfSU5E
RVggICAgICAgICAgICAgICAgICA9IDB4MTkwMTsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9J
TkRFWDggICAgICAgICAgICAgICAgID0gMHg4RDQ4OwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9T
VEVOQ0lMICAgICAgICAgICAgICAgICAgPSAweDg0Rjk7Ci0KLSAgICBjb25zdCBHTGVudW0gU1JH
Ql9FWFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDhDNDA7Ci0gICAg
Y29uc3QgR0xlbnVtIFNSR0JfQUxQSEFfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4QzQyOwotICAgIGNvbnN0IEdMZW51bSBTUkdCOF9BTFBIQThfRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4OEM0MzsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJf
QVRUQUNITUVOVF9DT0xPUl9FTkNPRElOR19FWFQgICAgPSAweDgyMTA7Ci0KLSAgICBjb25zdCBH
TGVudW0gTUlOX0VYVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDA3OwotICAgIGNvbnN0
IEdMZW51bSBNQVhfRVhUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDgwMDg7Ci0KLSAgICBj
b25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1dJRFRIICAgICAgICAgICAgID0gMHg4RDQyOwotICAg
IGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfSEVJR0hUICAgICAgICAgICAgPSAweDhENDM7Ci0g
ICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQgICA9IDB4OEQ0NDsK
LSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX1JFRF9TSVpFICAgICAgICAgID0gMHg4RDUw
OwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAgICAgPSAweDhE
NTE7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9CTFVFX1NJWkUgICAgICAgICA9IDB4
OEQ1MjsKLSAgICBjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0FMUEhBX1NJWkUgICAgICAgID0g
MHg4RDUzOwotICAgIGNvbnN0IEdMZW51bSBSRU5ERVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAg
PSAweDhENTQ7Ci0gICAgY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUgICAg
ICA9IDB4OEQ1NTsKLQotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09C
SkVDVF9UWVBFICAgICAgICAgICA9IDB4OENEMDsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSAgICAgICAgICAgPSAweDhDRDE7Ci0gICAgY29uc3Qg
R0xlbnVtIEZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTCAgICAgICAgID0gMHg4
Q0QyOwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfQ1VC
RV9NQVBfRkFDRSA9IDB4OENEMzsKLQotICAgIGNvbnN0IEdMZW51bSBDT0xPUl9BVFRBQ0hNRU5U
MCAgICAgICAgICAgICAgPSAweDhDRTA7Ci0gICAgY29uc3QgR0xlbnVtIERFUFRIX0FUVEFDSE1F
TlQgICAgICAgICAgICAgICA9IDB4OEQwMDsKLSAgICBjb25zdCBHTGVudW0gU1RFTkNJTF9BVFRB
Q0hNRU5UICAgICAgICAgICAgID0gMHg4RDIwOwotICAgIGNvbnN0IEdMZW51bSBERVBUSF9TVEVO
Q0lMX0FUVEFDSE1FTlQgICAgICAgPSAweDgyMUE7Ci0KLSAgICBjb25zdCBHTGVudW0gTk9ORSAg
ICAgICAgICAgICAgICAgICAgICAgICAgID0gMDsKLQotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJV
RkZFUl9DT01QTEVURSAgICAgICAgICAgICAgICAgICAgICA9IDB4OENENTsKLSAgICBjb25zdCBH
TGVudW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgPSAweDhDRDY7
Ci0gICAgY29uc3QgR0xlbnVtIEZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTUlTU0lOR19BVFRBQ0hN
RU5UID0gMHg4Q0Q3OwotICAgIGNvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJ
TUVOU0lPTlMgICAgICAgICA9IDB4OENEOTsKLSAgICBjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJf
VU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgPSAweDhDREQ7Ci0KLSAgICBjb25zdCBHTGVu
dW0gRlJBTUVCVUZGRVJfQklORElORyAgICAgICAgICAgID0gMHg4Q0E2OwotICAgIGNvbnN0IEdM
ZW51bSBSRU5ERVJCVUZGRVJfQklORElORyAgICAgICAgICAgPSAweDhDQTc7Ci0gICAgY29uc3Qg
R0xlbnVtIE1BWF9SRU5ERVJCVUZGRVJfU0laRSAgICAgICAgICA9IDB4ODRFODsKLQotICAgIGNv
bnN0IEdMZW51bSBJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiAgPSAweDA1MDY7Ci0KLSAg
ICAvKiBXZWJHTC1zcGVjaWZpYyBlbnVtcyAqLwotICAgIGNvbnN0IEdMZW51bSBVTlBBQ0tfRkxJ
UF9ZX1dFQkdMICAgICAgICAgICAgICAgID0gMHg5MjQwOwotICAgIGNvbnN0IEdMZW51bSBVTlBB
Q0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0wgICAgID0gMHg5MjQxOwotICAgIGNvbnN0IEdMZW51
bSBDT05URVhUX0xPU1RfV0VCR0wgICAgICAgICAgICAgICAgID0gMHg5MjQyOwotICAgIGNvbnN0
IEdMZW51bSBVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMID0gMHg5MjQzOwotICAg
IGNvbnN0IEdMZW51bSBCUk9XU0VSX0RFRkFVTFRfV0VCR0wgICAgICAgICAgICAgID0gMHg5MjQ0
OwotCi0gICAgcmVhZG9ubHkgYXR0cmlidXRlIEdMc2l6ZWkgZHJhd2luZ0J1ZmZlcldpZHRoOwot
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBHTHNpemVpIGRyYXdpbmdCdWZmZXJIZWlnaHQ7Ci0KLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBhY3Rp
dmVUZXh0dXJlKEdMZW51bSB0ZXh0dXJlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBhdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtIHByb2dy
YW0sIFdlYkdMU2hhZGVyIHNoYWRlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2Vz
RXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSBw
cm9ncmFtLCBHTHVpbnQgaW5kZXgsIERPTVN0cmluZyBuYW1lKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kQnVmZmVyKEdMZW51bSB0
YXJnZXQsIFdlYkdMQnVmZmVyIGJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEZyYW1lYnVmZmVyKEdMZW51bSB0YXJnZXQs
IFdlYkdMRnJhbWVidWZmZXIgZnJhbWVidWZmZXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRSZW5kZXJidWZmZXIoR0xlbnVtIHRh
cmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBiaW5kVGV4dHVyZShHTGVudW0g
dGFyZ2V0LCBXZWJHTFRleHR1cmUgdGV4dHVyZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGJsZW5kQ29sb3IoR0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwgR0xj
bGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxwaGEpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICBibGVuZEVxdWF0aW9uKEdMZW51bSBtb2RlKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdMZW51bSBtb2RlUkdC
LCBHTGVudW0gbW9kZUFscGhhKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAg
ICAgYmxlbmRGdW5jKEdMZW51bSBzZmFjdG9yLCBHTGVudW0gZGZhY3Rvcik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVuY1NlcGFyYXRlKEdMZW51bSBzcmNS
R0IsIEdMZW51bSBkc3RSR0IsIEdMZW51bSBzcmNBbHBoYSwgR0xlbnVtIGRzdEFscGhhKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZm
ZXJEYXRhKEdMZW51bSB0YXJnZXQsIEFycmF5QnVmZmVyPyBkYXRhLCBHTGVudW0gdXNhZ2UpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1
ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3PyBkYXRhLCBHTGVudW0gdXNh
Z2UpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdldCwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0gdXNh
Z2UpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRhcmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1
ZmZlcj8gZGF0YSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0LCBHTGludHB0ciBvZmZzZXQs
IEFycmF5QnVmZmVyVmlldz8gZGF0YSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGVu
dW0gICAgICAgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTGVudW0gdGFyZ2V0KTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXIoR0xiaXRmaWVsZCBtYXNrKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY2xlYXJDb2xvcihHTGNsYW1wZiBy
ZWQsIEdMY2xhbXBmIGdyZWVuLCBHTGNsYW1wZiBibHVlLCBHTGNsYW1wZiBhbHBoYSk7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyRGVwdGgoR0xjbGFtcGYgZGVw
dGgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhclN0ZW5jaWwo
R0xpbnQgcyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbG9yTWFz
ayhHTGJvb2xlYW4gcmVkLCBHTGJvb2xlYW4gZ3JlZW4sIEdMYm9vbGVhbiBibHVlLCBHTGJvb2xl
YW4gYWxwaGEpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCAgICAgICAgIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKLQotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb21wcmVzc2VkVGV4SW1hZ2UyRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRUZXhTdWJJ
bWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1h
dCwgQXJyYXlCdWZmZXJWaWV3IGRhdGEpOwotICAgIAotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBjb3B5VGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwg
R0xlbnVtIGludGVybmFsZm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xpbnQgYm9yZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgY29weVRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdM
QnVmZmVyIGNyZWF0ZUJ1ZmZlcigpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdlYkdMRnJh
bWVidWZmZXIgY3JlYXRlRnJhbWVidWZmZXIoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBX
ZWJHTFByb2dyYW0gY3JlYXRlUHJvZ3JhbSgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIFdl
YkdMUmVuZGVyYnVmZmVyIGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xTaGFkZXIgY3JlYXRlU2hhZGVyKEdMZW51bSB0
eXBlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTFRleHR1cmUgY3JlYXRlVGV4dHVy
ZSgpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGN1bGxGYWNlKEdM
ZW51bSBtb2RlKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZWxl
dGVCdWZmZXIoV2ViR0xCdWZmZXIgYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2
b2lkICAgICAgICAgZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZl
cik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlbGV0ZVByb2dyYW0o
V2ViR0xQcm9ncmFtIHByb2dyYW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlU2hhZGVyKFdlYkdM
U2hhZGVyIHNoYWRlcik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRl
bGV0ZVRleHR1cmUoV2ViR0xUZXh0dXJlIHRleHR1cmUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVj
a2luZ10gdm9pZCAgICAgICAgIGRlcHRoRnVuYyhHTGVudW0gZnVuYyk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlcHRoTWFzayhHTGJvb2xlYW4gZmxhZyk7Ci0gICAg
W1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlcHRoUmFuZ2UoR0xjbGFtcGYgek5l
YXIsIEdMY2xhbXBmIHpGYXIpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCAgICAgICAgIGRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2Vi
R0xTaGFkZXIgc2hhZGVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
ZGlzYWJsZShHTGVudW0gY2FwKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgICAgICAgICBkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50IGluZGV4
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAg
ICBkcmF3QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCk7Ci0g
ICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJh
d0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgR0xpbnRw
dHIgb2Zmc2V0KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBlbmFi
bGUoR0xlbnVtIGNhcCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoR0x1aW50IGluZGV4KTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZmluaXNoKCk7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGZsdXNoKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZnJhbWVidWZmZXJSZW5kZXJidWZm
ZXIoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSByZW5kZXJidWZmZXJ0
YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZnJhbWVidWZmZXJUZXh0dXJl
MkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIFdl
YkdMVGV4dHVyZSB0ZXh0dXJlLCBHTGludCBsZXZlbCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2lu
Z10gdm9pZCAgICAgICAgIGZyb250RmFjZShHTGVudW0gbW9kZSk7Ci0gICAgW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIGdlbmVyYXRlTWlwbWFwKEdMZW51bSB0YXJnZXQpOwotICAg
IAotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gV2ViR0xBY3RpdmVJ
bmZvIGdldEFjdGl2ZUF0dHJpYihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1aW50IGluZGV4KTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMQWN0aXZlSW5m
byBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgpOwot
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLQotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmddIEdMaW50ICAgICAgICBnZXRBdHRyaWJMb2NhdGlvbihXZWJHTFByb2dyYW0g
cHJvZ3JhbSwgRE9NU3RyaW5nIG5hbWUpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tXSBhbnkgZ2V0QnVmZmVyUGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBwbmFtZSk7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIGdldENv
bnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGVudW0gZ2V0
RXJyb3IoKTsKLQotICAgIC8vIG9iamVjdCBnZXRFeHRlbnNpb24oRE9NU3RyaW5nIG5hbWUpOwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gYW55IGdldEV4dGVuc2lvbihET01TdHJp
bmcgbmFtZSk7Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2Vw
dGlvbl0gYW55IGdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihHTGVudW0gdGFyZ2V0
LCBHTGVudW0gYXR0YWNobWVudCwgR0xlbnVtIHBuYW1lKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNr
aW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gYW55IGdldFBhcmFtZXRlcihHTGVudW0gcG5h
bWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBh
bnkgZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0xlbnVtIHBuYW1l
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBUcmVhdFJldHVybmVkTnVsbFN0cmluZ0FzPU51
bGwsIFJhaXNlc0V4Y2VwdGlvbl0gRE9NU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFdlYkdMUHJv
Z3JhbSBwcm9ncmFtKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4
Y2VwdGlvbl0gYW55IGdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVu
dW0gcG5hbWUpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0
aW9uXSBhbnkgZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyIHNoYWRlciwgR0xlbnVtIHBu
YW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5n
QXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgICAgZ2V0U2hhZGVySW5mb0xvZyhX
ZWJHTFNoYWRlciBzaGFkZXIpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhj
ZXB0aW9uXSBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdCBnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQoR0xlbnVtIHNoYWRlcnR5cGUsIEdMZW51bSBwcmVjaXNpb250eXBlKTsKLQotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhj
ZXB0aW9uXSBET01TdHJpbmcgICAgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyIHNoYWRlcik7
Ci0KLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHNlcXVlbmNlPERPTVN0cmluZz4g
Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3Vz
dG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRUZXhQYXJhbWV0ZXIoR0xlbnVtIHRhcmdldCwg
R0xlbnVtIHBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2Vz
RXhjZXB0aW9uXSBhbnkgZ2V0VW5pZm9ybShXZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24pOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2Vz
RXhjZXB0aW9uXSBXZWJHTFVuaWZvcm1Mb2NhdGlvbiBnZXRVbmlmb3JtTG9jYXRpb24oV2ViR0xQ
cm9ncmFtIHByb2dyYW0sIERPTVN0cmluZyBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tp
bmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0VmVydGV4QXR0cmliKEdMdWludCBp
bmRleCwgR0xlbnVtIHBuYW1lKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMc2l6ZWlw
dHIgZ2V0VmVydGV4QXR0cmliT2Zmc2V0KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lKTsKLQot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBoaW50KEdMZW51bSB0YXJnZXQs
IEdMZW51bSBtb2RlKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNC
dWZmZXIoV2ViR0xCdWZmZXIgYnVmZmVyKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJv
b2xlYW4gICAgaXNDb250ZXh0TG9zdCgpOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9v
bGVhbiAgICBpc0VuYWJsZWQoR0xlbnVtIGNhcCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
R0xib29sZWFuICAgIGlzRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzUHJvZ3JhbShXZWJHTFBy
b2dyYW0gcHJvZ3JhbSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlz
UmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzU2hhZGVyKFdlYkdMU2hhZGVyIHNoYWRlcik7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzVGV4dHVyZShXZWJHTFRl
eHR1cmUgdGV4dHVyZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGxp
bmVXaWR0aChHTGZsb2F0IHdpZHRoKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNF
eGNlcHRpb25dIHZvaWQgICAgICAgICBsaW5rUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHBpeGVsU3RvcmVpKEdMZW51
bSBwbmFtZSwgR0xpbnQgcGFyYW0pOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAg
ICAgICBwb2x5Z29uT2Zmc2V0KEdMZmxvYXQgZmFjdG9yLCBHTGZsb2F0IHVuaXRzKTsKLQotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHJlYWRQ
aXhlbHMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdM
ZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcgcGl4ZWxzKTsKLSAgICAK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgcmVsZWFzZVNoYWRlckNvbXBp
bGVyKCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHJlbmRlcmJ1ZmZl
clN0b3JhZ2UoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGludGVybmFsZm9ybWF0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAg
ICAgIHNhbXBsZUNvdmVyYWdlKEdMY2xhbXBmIHZhbHVlLCBHTGJvb2xlYW4gaW52ZXJ0KTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc2Npc3NvcihHTGludCB4LCBHTGlu
dCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgc2hhZGVyU291cmNlKFdlYkdMU2hh
ZGVyIHNoYWRlciwgRE9NU3RyaW5nIHN0cmluZyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIHN0ZW5jaWxGdW5jKEdMZW51bSBmdW5jLCBHTGludCByZWYsIEdMdWludCBt
YXNrKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbEZ1bmNT
ZXBhcmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZ1bmMsIEdMaW50IHJlZiwgR0x1aW50IG1hc2sp
OwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsTWFzayhHTHVp
bnQgbWFzayk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxN
YXNrU2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKTsKLSAgICBbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE9wKEdMZW51bSBmYWlsLCBHTGVudW0gemZhaWws
IEdMZW51bSB6cGFzcyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0
ZW5jaWxPcFNlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZmFpbCwgR0xlbnVtIHpmYWlsLCBH
TGVudW0genBhc3MpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHRl
eFBhcmFtZXRlcmYoR0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgdGV4UGFyYW1ldGVyaShHTGVu
dW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUsIEdMaW50IHBhcmFtKTsKLQotICAgIC8vIFN1cHBvcnRl
ZCBmb3JtczoKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
ICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTGludCBib3JkZXIsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXc/IHBpeGVscyk7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2Uy
RChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBJbWFnZURhdGE/IHBpeGVscyk7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFy
Z2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0
eXBlLCBIVE1MSW1hZ2VFbGVtZW50PyBpbWFnZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBH
TGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBI
VE1MQ2FudmFzRWxlbWVudD8gY2FudmFzKTsKLSNpZiBkZWZpbmVkKEVOQUJMRV9WSURFTykgJiYg
RU5BQkxFX1ZJREVPCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVt
IGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2
aWRlbyk7Ci0jZW5kaWYKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCAgICAgICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWws
IEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3PyBwaXhlbHMpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleFN1
YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlRGF0YT8gcGl4ZWxzKTsKLSAg
ICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhT
dWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50PyBpbWFn
ZSk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAg
ICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1l
bnQ/IGNhbnZhcyk7Ci0jaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9WSURFTwot
ICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRl
eFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQ/IHZp
ZGVvKTsKLSNlbmRpZgotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkIHVuaWZvcm0xZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4
KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9p
ZCB1bmlmb3JtMWZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkg
dik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZv
cm0xaShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCk7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFpdihX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLSAgICBbU3RyaWN0
VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJmKFdlYkdMVW5pZm9y
bUxvY2F0aW9uIGxvY2F0aW9uLCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTJmdihXZWJH
TFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5IHYpOwotICAgIFtTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmkoV2ViR0xVbmlmb3Jt
TG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHkpOwotICAgIFtTdHJpY3RUeXBlQ2hl
Y2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yaXYoV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIEludDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5cGVDaGVj
a2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0zZihXZWJHTFVuaWZvcm1Mb2NhdGlv
biBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7Ci0gICAgW1N0cmlj
dFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTNmdihX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5IHYpOwotICAgIFtTdHJp
Y3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtM2koV2ViR0xVbmlm
b3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgsIEdMaW50IHksIEdMaW50IHopOwotICAgIFtT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0z
aXYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEludDMyQXJyYXkgdik7Ci0gICAgW1N0
cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZihXZWJHTFVu
aWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwg
R0xmbG9hdCB3KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2Vw
dGlvbl0gdm9pZCB1bmlmb3JtNGZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBGbG9h
dDMyQXJyYXkgdik7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkIHVuaWZvcm00aShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xpbnQgeiwgR0xpbnQgdyk7Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9t
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBs
b2NhdGlvbiwgSW50MzJBcnJheSB2KTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1NYXRyaXgyZnYoV2ViR0xVbmlmb3JtTG9j
YXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSBhcnJheSk7
Ci0gICAgW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQg
dW5pZm9ybU1hdHJpeDNmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xib29sZWFu
IHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
LCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4NGZ2KFdlYkdMVW5p
Zm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkg
YXJyYXkpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7Ci0gICAgW1N0cmljdFR5
cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdmFsaWRhdGVQcm9ncmFt
KFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKLQotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICB2ZXJ0ZXhBdHRyaWIxZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4KTsKLSAgICBbU3Ry
aWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliMWZ2KEdMdWludCBpbmR4
LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAg
ICAgICAgdmVydGV4QXR0cmliMmYoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsK
LSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliMmZ2KEdM
dWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliM2YoR0x1aW50IGluZHgsIEdMZmxvYXQgeCwgR0xm
bG9hdCB5LCBHTGZsb2F0IHopOwotICAgIFtTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9p
ZCB2ZXJ0ZXhBdHRyaWIzZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOwotICAg
IFtTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWI0ZihHTHVpbnQg
aW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKLSAgICBb
U3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliNGZ2KEdMdWludCBp
bmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKLSAgICBbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlz
ZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWJQb2ludGVyKEdMdWludCBpbmR4
LCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwgR0xib29sZWFuIG5vcm1hbGl6ZWQsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMc2l6
ZWkgc3RyaWRlLCBHTGludHB0ciBvZmZzZXQpOwotCi0gICAgW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIHZpZXdwb3J0KEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0KTsKLX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjM1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoV0VCR0wpCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgorCisjaW5j
bHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgor
I2luY2x1ZGUgIkRPTVdpbmRvdy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RVhUQmxlbmRNaW5NYXguaCIKKyNpbmNsdWRlICJFWFRGcmFnRGVwdGguaCIKKyNpbmNsdWRlICJF
WFRTaGFkZXJUZXh0dXJlTE9ELmgiCisjaW5jbHVkZSAiRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJv
cGljLmgiCisjaW5jbHVkZSAiRVhUc1JHQi5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIK
KyNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJI
VE1MQ2FudmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIk1haW5GcmFtZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiT0VTRWxlbWVudEluZGV4VWludC5oIgorI2luY2x1ZGUgIk9FU1N0YW5kYXJk
RGVyaXZhdGl2ZXMuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlRmxvYXQuaCIKKyNpbmNsdWRlICJP
RVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0Lmgi
CisjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oIgorI2luY2x1ZGUgIk9FU1Zl
cnRleEFycmF5T2JqZWN0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlbmRlckJv
eC5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV2ViR0wxUmVuZGVyaW5nQ29u
dGV4dC5oIgorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNsdWRlICJX
ZWJHTEFjdGl2ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgorI2luY2x1ZGUgIldl
YkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0
dXJlUFZSVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgorI2lu
Y2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRF
dmVudC5oIgorI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCisjaW5jbHVkZSAiV2ViR0xE
ZWJ1Z1JlbmRlcmVySW5mby5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5j
bHVkZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgi
CisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRl
eHQuaCIKKyNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1
ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xTaGFkZXJQ
cmVjaXNpb25Gb3JtYXQuaCIKKyNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJX
ZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgorCisjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+
CisjaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvVWludDMyQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBkb3VibGUgc2Vjb25kc0JldHdlZW5S
ZXN0b3JlQXR0ZW1wdHMgPSAxLjA7Citjb25zdCBpbnQgbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25z
b2xlID0gMjU2OworCituYW1lc3BhY2UgeworICAgIAorY2xhc3MgU2NvcGVkRHJhd2luZ0J1ZmZl
ckJpbmRlciB7CitwdWJsaWM6CisgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcihEcmF3aW5n
QnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlckJpbmRp
bmcpCisgICAgICAgIDogbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCisgICAgICAgICwg
bV9mcmFtZWJ1ZmZlckJpbmRpbmcoZnJhbWVidWZmZXJCaW5kaW5nKQorICAgIHsKKyAgICAgICAg
Ly8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBmb3IgbXVsdGlzYW1wbGlu
ZykKKyAgICAgICAgaWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIH0KKyAgICAKKyAg
ICB+U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcigpCisgICAgeworICAgICAgICAvLyBSZXN0b3Jl
IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkCisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5k
KCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdC
dWZmZXI7CisgICAgV2ViR0xGcmFtZWJ1ZmZlciogbV9mcmFtZWJ1ZmZlckJpbmRpbmc7Cit9Owor
CitQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9yWmVybyhXZWJHTE9iamVjdCogb2JqZWN0KQorewor
ICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPm9iamVjdCgpIDogMDsKK30KKwordm9pZCBjbGlw
MUQoR0MzRGludCBzdGFydCwgR0MzRHNpemVpIHJhbmdlLCBHQzNEc2l6ZWkgc291cmNlUmFuZ2Us
IEdDM0RpbnQqIGNsaXBwZWRTdGFydCwgR0MzRHNpemVpKiBjbGlwcGVkUmFuZ2UpCit7CisgICAg
QVNTRVJUKGNsaXBwZWRTdGFydCAmJiBjbGlwcGVkUmFuZ2UpOworICAgIGlmIChzdGFydCA8IDAp
IHsKKyAgICAgICAgcmFuZ2UgKz0gc3RhcnQ7CisgICAgICAgIHN0YXJ0ID0gMDsKKyAgICB9Cisg
ICAgR0MzRGludCBlbmQgPSBzdGFydCArIHJhbmdlOworICAgIGlmIChlbmQgPiBzb3VyY2VSYW5n
ZSkKKyAgICAgICAgcmFuZ2UgLT0gZW5kIC0gc291cmNlUmFuZ2U7CisgICAgKmNsaXBwZWRTdGFy
dCA9IHN0YXJ0OworICAgICpjbGlwcGVkUmFuZ2UgPSByYW5nZTsKK30KKworLy8gUmV0dXJucyBm
YWxzZSBpZiBubyBjbGlwcGluZyBpcyBuZWNlc3NhcnksIGkuZS4sIHgsIHksIHdpZHRoLCBoZWln
aHQgc3RheSB0aGUgc2FtZS4KK2Jvb2wgY2xpcDJEKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICBHQzNEc2l6ZWkgc291
cmNlV2lkdGgsIEdDM0RzaXplaSBzb3VyY2VIZWlnaHQsCisgICAgICAgICAgICBHQzNEaW50KiBj
bGlwcGVkWCwgR0MzRGludCogY2xpcHBlZFksIEdDM0RzaXplaSogY2xpcHBlZFdpZHRoLCBHQzNE
c2l6ZWkqY2xpcHBlZEhlaWdodCkKK3sKKyAgICBBU1NFUlQoY2xpcHBlZFggJiYgY2xpcHBlZFkg
JiYgY2xpcHBlZFdpZHRoICYmIGNsaXBwZWRIZWlnaHQpOworICAgIGNsaXAxRCh4LCB3aWR0aCwg
c291cmNlV2lkdGgsIGNsaXBwZWRYLCBjbGlwcGVkV2lkdGgpOworICAgIGNsaXAxRCh5LCBoZWln
aHQsIHNvdXJjZUhlaWdodCwgY2xpcHBlZFksIGNsaXBwZWRIZWlnaHQpOworICAgIHJldHVybiAo
KmNsaXBwZWRYICE9IHggfHwgKmNsaXBwZWRZICE9IHkgfHwgKmNsaXBwZWRXaWR0aCAhPSB3aWR0
aCB8fCAqY2xpcHBlZEhlaWdodCAhPSBoZWlnaHQpOworfQorCitHQzNEaW50IGNsYW1wKEdDM0Rp
bnQgdmFsdWUsIEdDM0RpbnQgbWluLCBHQzNEaW50IG1heCkKK3sKKyAgICBpZiAodmFsdWUgPCBt
aW4pCisgICAgICAgIHZhbHVlID0gbWluOworICAgIGlmICh2YWx1ZSA+IG1heCkKKyAgICAgICAg
dmFsdWUgPSBtYXg7CisgICAgcmV0dXJuIHZhbHVlOworfQorCisvLyBSZXR1cm4gdHJ1ZSBpZiBh
IGNoYXJhY3RlciBiZWxvbmdzIHRvIHRoZSBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbgorLy8g
R0xTTCBFUyAxLjAgc3BlYyBzZWN0aW9uIDMuMS4KK2Jvb2wgdmFsaWRhdGVDaGFyYWN0ZXIodW5z
aWduZWQgY2hhciBjKQoreworICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4
Y2VwdCAiICQgYCBAIFwgJyBERUwuCisgICAgaWYgKGMgPj0gMzIgJiYgYyA8PSAxMjYKKyAgICAg
ICAgJiYgYyAhPSAnIicgJiYgYyAhPSAnJCcgJiYgYyAhPSAnYCcgJiYgYyAhPSAnQCcgJiYgYyAh
PSAnXFwnICYmIGMgIT0gJ1wnJykKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgLy8gSG9yaXpv
bnRhbCB0YWIsIGxpbmUgZmVlZCwgdmVydGljYWwgdGFiLCBmb3JtIGZlZWQsIGNhcnJpYWdlIHJl
dHVybgorICAgIC8vIGFyZSBhbHNvIHZhbGlkLgorICAgIGlmIChjID49IDkgJiYgYyA8PSAxMykK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIGlzUHJl
Zml4UmVzZXJ2ZWQoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lLnN0YXJ0c1dp
dGgoImdsXyIpIHx8IG5hbWUuc3RhcnRzV2l0aCgid2ViZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRo
KCJfd2ViZ2xfIikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8gU3RyaXBzIGNvbW1lbnRzIGZyb20gc2hhZGVyIHRleHQuIFRoaXMgYWxsb3dzIG5vbi1B
U0NJSSBjaGFyYWN0ZXJzCisvLyB0byBiZSB1c2VkIGluIGNvbW1lbnRzIHdpdGhvdXQgcG90ZW50
aWFsbHkgYnJlYWtpbmcgT3BlbkdMCisvLyBpbXBsZW1lbnRhdGlvbnMgbm90IGV4cGVjdGluZyBj
aGFyYWN0ZXJzIG91dHNpZGUgdGhlIEdMU0wgRVMgc2V0LgorY2xhc3MgU3RyaXBDb21tZW50cyB7
CitwdWJsaWM6CisgICAgU3RyaXBDb21tZW50cyhjb25zdCBTdHJpbmcmIHN0cikKKyAgICAgICAg
OiBtX3BhcnNlU3RhdGUoQmVnaW5uaW5nT2ZMaW5lKQorICAgICAgICAsIG1fc291cmNlU3RyaW5n
KHN0cikKKyAgICAgICAgLCBtX2xlbmd0aChzdHIubGVuZ3RoKCkpCisgICAgICAgICwgbV9wb3Np
dGlvbigwKQorICAgIHsKKyAgICAgICAgcGFyc2UoKTsKKyAgICB9CisgICAgCisgICAgU3RyaW5n
IHJlc3VsdCgpCisgICAgeworICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBib29sIGhhc01vcmVDaGFyYWN0ZXJzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAobV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBwYXJzZSgpCisgICAgeworICAgICAgICB3aGlsZSAoaGFzTW9yZUNoYXJh
Y3RlcnMoKSkgeworICAgICAgICAgICAgcHJvY2VzcyhjdXJyZW50KCkpOworICAgICAgICAgICAg
Ly8gcHJvY2VzcygpIG1pZ2h0IGFkdmFuY2UgdGhlIHBvc2l0aW9uLgorICAgICAgICAgICAgaWYg
KGhhc01vcmVDaGFyYWN0ZXJzKCkpCisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHZvaWQgcHJvY2VzcyhVQ2hhcik7CisgICAgCisgICAgYm9v
bCBwZWVrKFVDaGFyJiBjaGFyYWN0ZXIpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9wb3Np
dGlvbiArIDEgPj0gbV9sZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGNoYXJhY3RlciA9IG1fc291cmNlU3RyaW5nW21fcG9zaXRpb24gKyAxXTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIFVDaGFyIGN1cnJlbnQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9wb3NpdGlvbiA8IG1f
bGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIG1fc291cmNlU3RyaW5nW21fcG9zaXRpb25dOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGFkdmFuY2UoKQorICAgIHsKKyAgICAgICAgKyttX3Bvc2l0aW9u
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzTmV3bGluZShVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0
CisgICAgeworICAgICAgICAvLyBEb24ndCBhdHRlbXB0IHRvIGNhbm9uaWNhbGl6ZSBuZXdsaW5l
IHJlbGF0ZWQgY2hhcmFjdGVycy4KKyAgICAgICAgcmV0dXJuIChjaGFyYWN0ZXIgPT0gJ1xuJyB8
fCBjaGFyYWN0ZXIgPT0gJ1xyJyk7CisgICAgfQorICAgIAorICAgIHZvaWQgZW1pdChVQ2hhciBj
aGFyYWN0ZXIpCisgICAgeworICAgICAgICBtX2J1aWxkZXIuYXBwZW5kKGNoYXJhY3Rlcik7Cisg
ICAgfQorICAgIAorICAgIGVudW0gUGFyc2VTdGF0ZSB7CisgICAgICAgIC8vIEhhdmUgbm90IHNl
ZW4gYW4gQVNDSUkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIHlldCBvbgorICAgICAgICAvLyB0
aGlzIGxpbmUuIFBvc3NpYmxlIHRoYXQgd2UgbWlnaHQgc2VlIGEgcHJlcHJvY2Vzc29yCisgICAg
ICAgIC8vIGRpcmVjdGl2ZS4KKyAgICAgICAgQmVnaW5uaW5nT2ZMaW5lLAorICAgICAgICAKKyAg
ICAgICAgLy8gSGF2ZSBzZWVuIGF0IGxlYXN0IG9uZSBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFy
YWN0ZXIKKyAgICAgICAgLy8gb24gdGhpcyBsaW5lLgorICAgICAgICBNaWRkbGVPZkxpbmUsCisg
ICAgICAgIAorICAgICAgICAvLyBIYW5kbGluZyBhIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuIFBh
c3NlcyB0aHJvdWdoIGFsbAorICAgICAgICAvLyBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBlbmQgb2Yg
dGhlIGxpbmUuIERpc2FibGVzIGNvbW1lbnQKKyAgICAgICAgLy8gcHJvY2Vzc2luZy4KKyAgICAg
ICAgSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmUsCisgICAgICAgIAorICAgICAgICAvLyBIYW5kbGlu
ZyBhIHNpbmdsZS1saW5lIGNvbW1lbnQuIFRoZSBjb21tZW50IHRleHQgaXMKKyAgICAgICAgLy8g
cmVwbGFjZWQgd2l0aCBhIHNpbmdsZSBzcGFjZS4KKyAgICAgICAgSW5TaW5nbGVMaW5lQ29tbWVu
dCwKKyAgICAgICAgCisgICAgICAgIC8vIEhhbmRsaW5nIGEgbXVsdGktbGluZSBjb21tZW50LiBO
ZXdsaW5lcyBhcmUgcGFzc2VkCisgICAgICAgIC8vIHRocm91Z2ggdG8gcHJlc2VydmUgbGluZSBu
dW1iZXJzLgorICAgICAgICBJbk11bHRpTGluZUNvbW1lbnQKKyAgICB9OworICAgIAorICAgIFBh
cnNlU3RhdGUgbV9wYXJzZVN0YXRlOworICAgIFN0cmluZyBtX3NvdXJjZVN0cmluZzsKKyAgICB1
bnNpZ25lZCBtX2xlbmd0aDsKKyAgICB1bnNpZ25lZCBtX3Bvc2l0aW9uOworICAgIFN0cmluZ0J1
aWxkZXIgbV9idWlsZGVyOworfTsKKwordm9pZCBTdHJpcENvbW1lbnRzOjpwcm9jZXNzKFVDaGFy
IGMpCit7CisgICAgaWYgKGlzTmV3bGluZShjKSkgeworICAgICAgICAvLyBObyBtYXR0ZXIgd2hh
dCBzdGF0ZSB3ZSBhcmUgaW4sIHBhc3MgdGhyb3VnaCBuZXdsaW5lcworICAgICAgICAvLyBzbyB3
ZSBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCisgICAgICAgIGVtaXQoYyk7CisgICAgICAgIAorICAg
ICAgICBpZiAobV9wYXJzZVN0YXRlICE9IEluTXVsdGlMaW5lQ29tbWVudCkKKyAgICAgICAgICAg
IG1fcGFyc2VTdGF0ZSA9IEJlZ2lubmluZ09mTGluZTsKKyAgICAgICAgCisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgVUNoYXIgdGVtcCA9IDA7CisgICAgc3dpdGNoIChtX3BhcnNl
U3RhdGUpIHsKKyAgICBjYXNlIEJlZ2lubmluZ09mTGluZToKKyAgICAgICAgaWYgKFdURjo6aXNB
U0NJSVNwYWNlKGMpKSB7CisgICAgICAgICAgICBlbWl0KGMpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChjID09ICcjJykgeworICAgICAgICAg
ICAgbV9wYXJzZVN0YXRlID0gSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU7CisgICAgICAgICAgICBl
bWl0KGMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IC8vIFRyYW5zaXRpb24gdG8gbm9ybWFsIHN0YXRlIGFuZCByZS1oYW5kbGUgY2hhcmFjdGVyLgor
ICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7CisgICAgICAgIHByb2Nlc3MoYyk7
CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIE1pZGRsZU9mTGluZToKKyAgICAg
ICAgaWYgKGMgPT0gJy8nICYmIHBlZWsodGVtcCkpIHsKKyAgICAgICAgICAgIGlmICh0ZW1wID09
ICcvJykgeworICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluU2luZ2xlTGluZUNvbW1l
bnQ7CisgICAgICAgICAgICAgICAgZW1pdCgnICcpOworICAgICAgICAgICAgICAgIGFkdmFuY2Uo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHRlbXAgPT0gJyonKSB7CisgICAgICAgICAgICAgICAgbV9wYXJzZVN0
YXRlID0gSW5NdWx0aUxpbmVDb21tZW50OworICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNv
bW1lbnQgc3RhcnQgaW4gY2FzZSB0aGUgdXNlciBoYXMKKyAgICAgICAgICAgICAgICAvLyBhbiB1
bmNsb3NlZCBjb21tZW50IGFuZCB3ZSB3YW50IHRvIGxhdGVyCisgICAgICAgICAgICAgICAgLy8g
c2lnbmFsIGFuIGVycm9yLgorICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsKKyAgICAgICAgICAg
ICAgICBlbWl0KCcqJyk7CisgICAgICAgICAgICAgICAgYWR2YW5jZSgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBl
bWl0KGMpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBJblByZXByb2Nlc3Nv
ckRpcmVjdGl2ZToKKyAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgdGhlIGNoYXJhY3RlciBpcywg
anVzdCBwYXNzIGl0CisgICAgICAgIC8vIHRocm91Z2guIERvIG5vdCBwYXJzZSBjb21tZW50cyBp
biB0aGlzIHN0YXRlLiBUaGlzCisgICAgICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgdGhp
bmcgdG8gZG8gbG9uZyB0ZXJtLCBidXQgaXQKKyAgICAgICAgLy8gc2hvdWxkIGhhbmRsZSB0aGUg
I2Vycm9yIHByZXByb2Nlc3NvciBkaXJlY3RpdmUuCisgICAgICAgIGVtaXQoYyk7CisgICAgICAg
IGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEluU2luZ2xlTGluZUNvbW1lbnQ6CisgICAgICAg
IC8vIFRoZSBuZXdsaW5lIGNvZGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZ1bmN0aW9uIHRha2VzIGNh
cmUKKyAgICAgICAgLy8gb2YgcmVzZXR0aW5nIG91ciBzdGF0ZSB3aGVuIHdlIGdldCBvdXQgb2Yg
dGhlCisgICAgICAgIC8vIHNpbmdsZS1saW5lIGNvbW1lbnQuIFN3YWxsb3cgYWxsIG90aGVyIGNo
YXJhY3RlcnMuCisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEluTXVsdGlMaW5l
Q29tbWVudDoKKyAgICAgICAgaWYgKGMgPT0gJyonICYmIHBlZWsodGVtcCkgJiYgdGVtcCA9PSAn
LycpIHsKKyAgICAgICAgICAgIGVtaXQoJyonKTsKKyAgICAgICAgICAgIGVtaXQoJy8nKTsKKyAg
ICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKKyAgICAgICAgICAgIGFkdmFu
Y2UoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBTd2FsbG93IGFsbCBvdGhlciBjaGFyYWN0ZXJzLiBVbmNsZWFyIHdoZXRoZXIgd2UgbWF5Cisg
ICAgICAgIC8vIHdhbnQgb3IgbmVlZCB0byBqdXN0IGVtaXQgYSBzcGFjZSBwZXIgY2hhcmFjdGVy
IHRvIHRyeQorICAgICAgICAvLyB0byBwcmVzZXJ2ZSBjb2x1bW4gbnVtYmVycyBmb3IgZGVidWdn
aW5nIHB1cnBvc2VzLgorICAgICAgICBicmVhazsKKyAgICB9Cit9Cit9IC8vIG5hbWVzcGFjZSBh
bm9ueW1vdXMKKworY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxiYWNrIDogcHVi
bGljIEdyYXBoaWNzQ29udGV4dDNEOjpDb250ZXh0TG9zdENhbGxiYWNrIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRMb3N0Q2FsbGJhY2soV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY2IpIAorICAgIDog
bV9jb250ZXh0KGNiKSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBvbkNvbnRleHRMb3N0KCkgb3Zl
cnJpZGUgCisgICAgeyAKKyAgICAgICAgbV9jb250ZXh0LT5mb3JjZUxvc3RDb250ZXh0KFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OlJlYWxMb3N0Q29udGV4dCk7IAorICAgIH0KKyAgICB2aXJ0
dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2soKSB7IH0KK3ByaXZhdGU6Cisg
ICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogbV9jb250ZXh0OworfTsKKworY2xhc3MgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0M0Q6OkVycm9yTWVzc2FnZUNhbGxiYWNrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1l
c3NhZ2VDYWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjYikgCisgICAgOiBtX2Nv
bnRleHQoY2IpIHsgfQorICAgIAorICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yTWVzc2FnZShjb25z
dCBTdHJpbmcmIG1lc3NhZ2UsIEdDM0RpbnQpIG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
bV9jb250ZXh0LT5tX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKQorICAgICAgICAgICAgbV9j
b250ZXh0LT5wcmludEdMRXJyb3JUb0NvbnNvbGUobWVzc2FnZSk7CisgICAgfQorICAgIHZpcnR1
YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrKCkgeyB9Citwcml2
YXRlOgorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIG1fY29udGV4dDsKK307CisKK3N0
ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgV2ViR0xDb250ZXh0
QXR0cmlidXRlcyogYXR0cnMsIGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBEb2N1bWVudCYg
ZG9jdW1lbnQgPSBjYW52YXMtPmRvY3VtZW50KCk7CisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAKKyAgICAvLyBUaGUgRnJhbWVMb2FkZXJDbGllbnQgbWlnaHQgYmxvY2sgY3JlYXRpb24gb2Yg
YSBuZXcgV2ViR0wgY29udGV4dCBkZXNwaXRlIHRoZSBwYWdlIHNldHRpbmdzOyBpbgorICAgIC8v
IHBhcnRpY3VsYXIsIGlmIFdlYkdMIGNvbnRleHRzIHdlcmUgbG9zdCBvbmUgb3IgbW9yZSB0aW1l
cyB2aWEgdGhlIEdMX0FSQl9yb2J1c3RuZXNzIGV4dGVuc2lvbi4KKyAgICBpZiAoIWZyYW1lLT5s
b2FkZXIoKS5jbGllbnQoKS5hbGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndlYkdMRW5hYmxl
ZCgpKSkgeworICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxz
ZSwgdHJ1ZSwgIldlYiBwYWdlIHdhcyBub3QgYWxsb3dlZCB0byBjcmVhdGUgYSBXZWJHTCBjb250
ZXh0LiIpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbiA9IGZhbHNlOworICAgIERvY3VtZW50JiB0b3BEb2N1
bWVudCA9IGRvY3VtZW50LnRvcERvY3VtZW50KCk7CisgICAgUGFnZSogcGFnZSA9IHRvcERvY3Vt
ZW50LnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiAhdG9wRG9jdW1lbnQudXJsKCkuaXNMb2NhbEZp
bGUoKSkgeworICAgICAgICBXZWJHTExvYWRQb2xpY3kgcG9saWN5ID0gcGFnZS0+bWFpbkZyYW1l
KCkubG9hZGVyKCkuY2xpZW50KCkud2ViR0xQb2xpY3lGb3JVUkwodG9wRG9jdW1lbnQudXJsKCkp
OworICAgICAgICAKKyAgICAgICAgaWYgKHBvbGljeSA9PSBXZWJHTEJsb2NrQ3JlYXRpb24pIHsK
KyAgICAgICAgICAgIExPRyhXZWJHTCwgIlRoZSBwb2xpY3kgZm9yIHRoaXMgVVJMICglcykgaXMg
dG8gYmxvY2sgV2ViR0wuIiwgdG9wRG9jdW1lbnQudXJsKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCkp
OworICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGlmIChwb2xpY3kgPT0gV2ViR0xQZW5kaW5nQ3JlYXRpb24pIHsKKyAgICAgICAgICAgIExP
RyhXZWJHTCwgIldlYkdMIHBvbGljeSBpcyBwZW5kaW5nLiBNYXkgbmVlZCB0byBiZSByZXNvbHZl
ZCBsYXRlci4iKTsKKyAgICAgICAgICAgIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSB0cnVl
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMgPSBhdHRycyA/IGF0dHJzLT5hdHRyaWJ1dGVzKCkgOiBHcmFwaGljc0Nv
bnRleHQzRDo6QXR0cmlidXRlcygpOworICAgIAorICAgIGlmIChhdHRyaWJ1dGVzLmFudGlhbGlh
cykgeworICAgICAgICBpZiAoIWZyYW1lLT5zZXR0aW5ncygpLm9wZW5HTE11bHRpc2FtcGxpbmdF
bmFibGVkKCkpCisgICAgICAgICAgICBhdHRyaWJ1dGVzLmFudGlhbGlhcyA9IGZhbHNlOworICAg
IH0KKyAgICAKKyAgICBhdHRyaWJ1dGVzLm5vRXh0ZW5zaW9ucyA9IHRydWU7CisgICAgYXR0cmli
dXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNlOworICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3Jl
dGVHUFUgPSB0cnVlOworICAgIAorICAgIGlmIChmcmFtZS0+c2V0dGluZ3MoKS5mb3JjZVNvZnR3
YXJlV2ViR0xSZW5kZXJpbmcoKSkKKyAgICAgICAgYXR0cmlidXRlcy5mb3JjZVNvZnR3YXJlUmVu
ZGVyZXIgPSB0cnVlOworICAgIAorICAgIGlmIChwYWdlKQorICAgICAgICBhdHRyaWJ1dGVzLmRl
dmljZVBpeGVsUmF0aW8gPSBwYWdlLT5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgIAorICAgIGlm
IChpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7CisgICAgICAgIExPRyhXZWJHTCwgIkNyZWF0
ZSBhIFdlYkdMIGNvbnRleHQgdGhhdCBsb29rcyByZWFsLCBidXQgd2lsbCByZXF1aXJlIGEgcG9s
aWN5IHJlc29sdXRpb24gaWYgdXNlZC4iKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U+IHJlbmRlcmluZ0NvbnRleHQgPSBuaWw7CisgICAgICAgIGlm
ICh0eXBlID09ICJleHBlcmltZW50YWwtd2ViZ2wyIikKKyAgICAgICAgICAgIHJlbmRlcmluZ0Nv
bnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wyUmVuZGVyaW5nQ29udGV4dD4obmV3IFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBhdHRyaWJ1dGVzKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJlbmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wxUmVuZGVy
aW5nQ29udGV4dD4obmV3IFdlYkdMMVJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBhdHRyaWJ1dGVz
KSk7CisgICAgfQorICAgIAorICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1bWVudC52
aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpOworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhvc3RXaW5k
b3cpKTsKKyAgICAKKyAgICBpZiAoIWNvbnRleHQgfHwgIWNvbnRleHQtPm1ha2VDb250ZXh0Q3Vy
cmVudCgpKSB7CisgICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQsIGZh
bHNlLCB0cnVlLCAiQ291bGQgbm90IGNyZWF0ZSBhIFdlYkdMIGNvbnRleHQuIikpOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgCisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNp
b25zID0gY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChleHRlbnNpb25zLT5zdXBw
b3J0cygiR0xfRVhUX2RlYnVnX21hcmtlciIpKQorICAgICAgICBleHRlbnNpb25zLT5wdXNoR3Jv
dXBNYXJrZXJFWFQoIldlYkdMUmVuZGVyaW5nQ29udGV4dCIpOworICAgIAorICAgIHN0ZDo6dW5p
cXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlPiByZW5kZXJpbmdDb250ZXh0ID0gbmls
OworICAgIGlmICh0eXBlID09ICJleHBlcmltZW50YWwtd2ViZ2wyIikKKyAgICAgICAgcmVuZGVy
aW5nQ29udGV4dCA9IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTDJSZW5kZXJpbmdDb250ZXh0PihuZXcg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGNvbnRleHQsIGF0dHJpYnV0ZXMpKTsKKyAg
ICBlbHNlCisgICAgICAgIHJlbmRlcmluZ0NvbnRleHQgPSBzdGQ6OnVuaXF1ZV9wdHI8V2ViR0wx
UmVuZGVyaW5nQ29udGV4dD4obmV3IFdlYkdMMVJlbmRlcmluZ0NvbnRleHQoY2FudmFzLCBjb250
ZXh0LCBhdHRyaWJ1dGVzKSk7CisgICAgcmVuZGVyaW5nQ29udGV4dC0+c3VzcGVuZElmTmVlZGVk
KCk7CisgICAgCisgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7Cit9CisKK1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UoSFRNTENhbnZhc0VsZW1l
bnQqIHBhc3NlZENhbnZhcywgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRl
cykKKyAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQocGFzc2VkQ2FudmFzKQorICAgICwgQWN0
aXZlRE9NT2JqZWN0KCZwYXNzZWRDYW52YXMtPmRvY3VtZW50KCkpCisgICAgLCBtX2NvbnRleHQo
MCkKKyAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQorICAgICwgbV9kaXNwYXRjaENvbnRleHRMb3N0
RXZlbnRUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRpc3BhdGNoQ29u
dGV4dExvc3RFdmVudCkKKyAgICAsIG1fcmVzdG9yZUFsbG93ZWQoZmFsc2UpCisgICAgLCBtX3Jl
c3RvcmVUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1heWJlUmVzdG9y
ZUNvbnRleHQpCisgICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoMCkKKyAgICAsIG1fY29udGV4
dExvc3QoZmFsc2UpCisgICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4
dCkKKyAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICwgbV9zeW50aGVzaXplZEVy
cm9yc1RvQ29uc29sZSh0cnVlKQorICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQo
bWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlKQorICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNv
bHV0aW9uKHRydWUpCisgICAgLCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24oZmFsc2Up
Cit7Cit9CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OldlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCxHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1
dGVzKQorICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBB
Y3RpdmVET01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY29udGV4
dChjb250ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29u
dGV4dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlz
cGF0Y2hDb250ZXh0TG9zdEV2ZW50KQorICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKKyAg
ICAsIG1fcmVzdG9yZVRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWF5
YmVSZXN0b3JlQ29udGV4dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSg0KQorICAgICwg
bV9jb250ZXh0TG9zdChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xv
c3RDb250ZXh0KQorICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3N5bnRo
ZXNpemVkRXJyb3JzVG9Db25zb2xlKHRydWUpCisgICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xl
QWxsb3dlZChtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2lzUGVuZGluZ1Bv
bGljeVJlc29sdXRpb24oZmFsc2UpCisgICAgLCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRp
b24oZmFsc2UpCit7CisgICAgQVNTRVJUKG1fY29udGV4dCk7CisgICAgbV9jb250ZXh0R3JvdXAg
PSBXZWJHTENvbnRleHRHcm91cDo6Y3JlYXRlKCk7CisgICAgbV9jb250ZXh0R3JvdXAtPmFkZENv
bnRleHQodGhpcyk7CisgICAgCisgICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdw
b3J0RGltc1sxXSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKKyAgICAKKyAgICBp
ZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAg
ICAKKyAgICBzZXR1cEZsYWdzKCk7CisgICAgaW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppbml0aWFsaXplTmV3Q29udGV4dCgpCit7
CisgICAgQVNTRVJUKCFtX2NvbnRleHRMb3N0KTsKKyAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsK
KyAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisgICAgbV9hY3RpdmVUZXh0dXJlVW5p
dCA9IDA7CisgICAgbV9wYWNrQWxpZ25tZW50ID0gNDsKKyAgICBtX3VucGFja0FsaWdubWVudCA9
IDQ7CisgICAgbV91bnBhY2tGbGlwWSA9IGZhbHNlOworICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSA9IGZhbHNlOworICAgIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGlj
c0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dFQkdMOworICAgIG1fYm91bmRBcnJheUJ1ZmZl
ciA9IDA7CisgICAgbV9jdXJyZW50UHJvZ3JhbSA9IDA7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRp
bmcgPSAwOworICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7CisgICAgbV9kZXB0aE1hc2sg
PSB0cnVlOworICAgIG1fc3RlbmNpbEVuYWJsZWQgPSBmYWxzZTsKKyAgICBtX3N0ZW5jaWxNYXNr
ID0gMHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IDB4RkZGRkZGRkY7CisgICAg
bV9zdGVuY2lsRnVuY1JlZiA9IDA7CisgICAgbV9zdGVuY2lsRnVuY1JlZkJhY2sgPSAwOworICAg
IG1fc3RlbmNpbEZ1bmNNYXNrID0gMHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5jaWxGdW5jTWFza0Jh
Y2sgPSAweEZGRkZGRkZGOworICAgIG1fbGF5ZXJDbGVhcmVkID0gZmFsc2U7CisgICAgbV9udW1H
TEVycm9yc1RvQ29uc29sZUFsbG93ZWQgPSBtYXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7Cisg
ICAgCisgICAgbV9jbGVhckNvbG9yWzBdID0gbV9jbGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9y
WzJdID0gbV9jbGVhckNvbG9yWzNdID0gMDsKKyAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7
CisgICAgbV9jbGVhckRlcHRoID0gMTsKKyAgICBtX2NsZWFyU3RlbmNpbCA9IDA7CisgICAgbV9j
b2xvck1hc2tbMF0gPSBtX2NvbG9yTWFza1sxXSA9IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1h
c2tbM10gPSB0cnVlOworICAgIAorICAgIEdDM0RpbnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VV
bml0cyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFn
ZVVuaXRzKTsKKyAgICBtX3RleHR1cmVVbml0cy5jbGVhcigpOworICAgIG1fdGV4dHVyZVVuaXRz
LnJlc2l6ZShudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKKyAgICAKKyAgICBHQzNEaW50
IG51bVZlcnRleEF0dHJpYnMgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUywgJm51bVZlcnRleEF0dHJpYnMpOworICAg
IG1fbWF4VmVydGV4QXR0cmlicyA9IG51bVZlcnRleEF0dHJpYnM7CisgICAgCisgICAgbV9tYXhU
ZXh0dXJlU2l6ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1RFWFRVUkVfU0laRSwgJm1fbWF4VGV4dHVyZVNpemUpOworICAgIG1fbWF4VGV4
dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpjb21wdXRlTGV2ZWxDb3VudChtX21heFRleHR1cmVT
aXplLCBtX21heFRleHR1cmVTaXplKTsKKyAgICBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSA9IDA7
CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NVQkVf
TUFQX1RFWFRVUkVfU0laRSwgJm1fbWF4Q3ViZU1hcFRleHR1cmVTaXplKTsKKyAgICBtX21heEN1
YmVNYXBUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1dGVMZXZlbENvdW50KG1fbWF4
Q3ViZU1hcFRleHR1cmVTaXplLCBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSk7CisgICAgbV9tYXhS
ZW5kZXJidWZmZXJTaXplID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdyYXBoaWNz
Q29udGV4dDNEOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUsICZtX21heFJlbmRlcmJ1ZmZlclNpemUp
OworICAgIAorICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJvbSBFWFRfZHJhd19idWZmZXJzIGFy
ZSBsYXppbHkgcXVlcmllZC4KKyAgICBtX21heERyYXdCdWZmZXJzID0gMDsKKyAgICBtX21heENv
bG9yQXR0YWNobWVudHMgPSAwOworICAgIAorICAgIG1fYmFja0RyYXdCdWZmZXIgPSBHcmFwaGlj
c0NvbnRleHQzRDo6QkFDSzsKKyAgICBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVj
a2VkID0gZmFsc2U7CisgICAgbV9kcmF3QnVmZmVyc1N1cHBvcnRlZCA9IGZhbHNlOworICAgIAor
ICAgIG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0ID0gV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uzo6Y3JlYXRlKHRoaXMsIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZhb1R5cGVEZWZhdWx0
KTsKKyAgICBhZGRDb250ZXh0T2JqZWN0KG1fZGVmYXVsdFZlcnRleEFycmF5T2JqZWN0LmdldCgp
KTsKKyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9i
amVjdDsKKyAgICAKKyAgICBtX3ZlcnRleEF0dHJpYlZhbHVlLnJlc2l6ZShtX21heFZlcnRleEF0
dHJpYnMpOworICAgIAorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY3Jl
YXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50
KCkpCisgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CisgICAgCisgICAgSW50U2l6ZSBjYW52
YXNTaXplID0gY2xhbXBlZENhbnZhc1NpemUoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KGNhbnZhc1NpemUpOworICAgIAorICAgIG1f
Y29udGV4dC0+cmVzaGFwZShjYW52YXNTaXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkp
OworICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52
YXNTaXplLmhlaWdodCgpKTsKKyAgICBtX2NvbnRleHQtPnNjaXNzb3IoMCwgMCwgY2FudmFzU2l6
ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsKKyAgICAKKyAgICBtX2NvbnRleHQtPnNl
dENvbnRleHRMb3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRl
eHRMb3N0Q2FsbGJhY2s+KHRoaXMpKTsKKyAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNh
bGxiYWNrKHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdl
Q2FsbGJhY2s+KHRoaXMpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpz
ZXR1cEZsYWdzKCkKK3sKKyAgICBBU1NFUlQobV9jb250ZXh0KTsKKyAgICAKKyAgICBpZiAoUGFn
ZSogcGFnZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgbV9zeW50aGVz
aXplZEVycm9yc1RvQ29uc29sZSA9IHBhZ2UtPnNldHRpbmdzKCkud2ViR0xFcnJvcnNUb0NvbnNv
bGVFbmFibGVkKCk7CisgICAgCisgICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5p
c0dMRVMyQ29tcGxpYW50KCk7CisgICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0Fj
Y2Vzc2VzID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01J
VU1fc3RyaWN0X2F0dHJpYnMiKTsKKyAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOwor
ICAgIGlmIChtX2lzR0xFUzJDb21wbGlhbnQpIHsKKyAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmlj
dCA9ICFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVy
ZV9ucG90Iik7CisgICAgICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwi
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9v
Zl90d28iKTsKKyAgICAgICAgbV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIp
OworICAgIH0KKyAgICBtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpIGNv
bnN0Cit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkp
CisgICAgICAgIHJldHVybiBwYWdlLT5zZXR0aW5ncygpLnByaXZpbGVnZWRXZWJHTEV4dGVuc2lv
bnNFbmFibGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmFkZENvbXByZXNzZWRUZXh0dXJlRm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkK
K3sKKyAgICBpZiAoIW1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmNvbnRhaW5zKGZvcm1hdCkp
CisgICAgICAgIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLmFwcGVuZChmb3JtYXQpOworfQor
CitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp+V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSgp
Cit7CisgICAgLy8gUmVtb3ZlIGFsbCByZWZlcmVuY2VzIHRvIFdlYkdMT2JqZWN0cyBzbyBpZiB0
aGV5IGFyZSB0aGUgbGFzdCByZWZlcmVuY2UKKyAgICAvLyB0aGV5IHdpbGwgYmUgZnJlZWQgYmVm
b3JlIHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb250ZXh0IGdyb3VwLgor
ICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IG51bGxwdHI7CisgICAgbV9kZWZhdWx0VmVydGV4QXJy
YXlPYmplY3QgPSBudWxscHRyOworICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxw
dHI7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gbnVsbHB0cjsKKyAgICBtX2N1cnJlbnRQ
cm9ncmFtID0gbnVsbHB0cjsKKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IG51bGxwdHI7Cisg
ICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gbnVsbHB0cjsKKyAgICAKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fdGV4dHVyZVVuaXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIG1fdGV4
dHVyZVVuaXRzW2ldLnRleHR1cmUyREJpbmRpbmcgPSBudWxscHRyOworICAgICAgICBtX3RleHR1
cmVVbml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICAK
KyAgICBtX2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKKyAgICBtX2JsYWNrVGV4dHVyZUN1YmVN
YXAgPSBudWxscHRyOworICAgIAorICAgIGlmICghbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
KSB7CisgICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsKKyAgICAgICAgZGVzdHJv
eUdyYXBoaWNzQ29udGV4dDNEKCk7CisgICAgICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVDb250
ZXh0KHRoaXMpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpk
ZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJl
c29sdXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICAvLyBUaGUgZHJhd2luZyBidWZm
ZXIgaG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3llZAor
ICAgIC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KKyAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKKyAgICAK
KyAgICBpZiAobV9jb250ZXh0KSB7CisgICAgICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExvc3RD
YWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VDYWxs
YmFjayhudWxscHRyKTsKKyAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7CisgICAgfQorfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Om1hcmtDb250ZXh0Q2hhbmdlZCgpCit7Cisg
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICByZXR1cm47CisgICAgCisgICAg
bV9jb250ZXh0LT5tYXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAKKyAgICBpZiAobV9kcmF3aW5n
QnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPm1hcmtDb250ZW50c0NoYW5nZWQoKTsK
KyAgICAKKyAgICBtX2xheWVyQ2xlYXJlZCA9IGZhbHNlOworICAgIFJlbmRlckJveCogcmVuZGVy
Qm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOworICAgIGlmIChpc0FjY2VsZXJhdGVkKCkgJiYg
cmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpKSB7Cisg
ICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOworICAgICAgICBjYW52YXMoKS0+Y2xl
YXJDb3BpZWRJbWFnZSgpOworICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZh
c0NoYW5nZWQpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0
eSkgeworICAgICAgICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IHRydWU7CisgICAgICAgICAg
ICBjYW52YXMoKS0+ZGlkRHJhdyhGbG9hdFJlY3QoRmxvYXRQb2ludCgwLCAwKSwgY2xhbXBlZENh
bnZhc1NpemUoKSkpOworICAgICAgICB9CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OmNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBpZiAoIW1fY29udGV4dC0+bGF5ZXJDb21wb3NpdGVkKCkgfHwgbV9sYXllckNsZWFy
ZWQKKyAgICAgICAgfHwgbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciB8fCAobWFz
ayAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAK
KyAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gY29udGV4dEF0dHJpYnV0ZXMgPSBn
ZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIAorICAgIC8vIERldGVybWluZSBpZiBpdCdzIHBv
c3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1c2VyIGFza2VkIGZvciBhbmQgdGhpcyBj
bGVhci4KKyAgICBib29sIGNvbWJpbmVkQ2xlYXIgPSBtYXNrICYmICFtX3NjaXNzb3JFbmFibGVk
OworICAgIAorICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NP
Ul9URVNUKTsKKyAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkgeworICAgICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3Io
bV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFyQ29sb3JbMV0gOiAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMl0gPyBtX2NsZWFyQ29sb3JbMl0g
OiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbM10gPyBtX2Ns
ZWFyQ29sb3JbM10gOiAwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckNv
bG9yKDAsIDAsIDAsIDApOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKHRydWUsIHRydWUsIHRy
dWUsIHRydWUpOworICAgIEdDM0RiaXRmaWVsZCBjbGVhck1hc2sgPSBHcmFwaGljc0NvbnRleHQz
RDo6Q09MT1JfQlVGRkVSX0JJVDsKKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMtPmRlcHRoKCkp
IHsKKyAgICAgICAgaWYgKCFjb21iaW5lZENsZWFyIHx8ICFtX2RlcHRoTWFzayB8fCAhKG1hc2sg
JiBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCkpCisgICAgICAgICAgICBtX2Nv
bnRleHQtPmNsZWFyRGVwdGgoMS4wZik7CisgICAgICAgIGNsZWFyTWFzayB8PSBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVDsKKyAgICAgICAgbV9jb250ZXh0LT5kZXB0aE1hc2so
dHJ1ZSk7CisgICAgfQorICAgIGlmIChjb250ZXh0QXR0cmlidXRlcy0+c3RlbmNpbCgpKSB7Cisg
ICAgICAgIGlmIChjb21iaW5lZENsZWFyICYmIChtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
RU5DSUxfQlVGRkVSX0JJVCkpCisgICAgICAgICAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbCht
X2NsZWFyU3RlbmNpbCAmIG1fc3RlbmNpbE1hc2spOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbCgwKTsKKyAgICAgICAgY2xlYXJNYXNrIHw9IEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQ7CisgICAgICAgIG1fY29udGV4dC0+c3Rl
bmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQsIDB4RkZGRkZGRkYpOwor
ICAgIH0KKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXIt
PmNsZWFyRnJhbWVidWZmZXJzKGNsZWFyTWFzayk7CisgICAgZWxzZSB7CisgICAgICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgICAgIG1fY29udGV4
dC0+Y2xlYXIoY2xlYXJNYXNrKTsKKyAgICB9CisgICAgCisgICAgcmVzdG9yZVN0YXRlQWZ0ZXJD
bGVhcigpOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RP
clplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBtX2xheWVyQ2xlYXJlZCA9
IHRydWU7CisgICAgCisgICAgcmV0dXJuIGNvbWJpbmVkQ2xlYXI7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpCit7CisgICAgLy8g
UmVzdG9yZSB0aGUgc3RhdGUgdGhhdCB0aGUgY29udGV4dCBzZXQuCisgICAgaWYgKG1fc2Npc3Nv
ckVuYWJsZWQpCisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpT
Q0lTU09SX1RFU1QpOworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihtX2NsZWFyQ29sb3JbMF0s
IG1fY2xlYXJDb2xvclsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jbGVhckNvbG9y
WzJdLCBtX2NsZWFyQ29sb3JbM10pOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNrKG1fY29sb3JN
YXNrWzBdLCBtX2NvbG9yTWFza1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtX2NvbG9y
TWFza1syXSwgbV9jb2xvck1hc2tbM10pOworICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aChtX2Ns
ZWFyRGVwdGgpOworICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsKTsK
KyAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
T05ULCBtX3N0ZW5jaWxNYXNrKTsKKyAgICBtX2NvbnRleHQtPmRlcHRoTWFzayhtX2RlcHRoTWFz
ayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6bWFya0xheWVyQ29tcG9z
aXRlZCgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaWYgKGNhbnZhcygpLT5kb2N1bWVudCgpLnByaW50aW5nKCkpCisgICAgICAgIGNh
bnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKKyAgICAKKyAgICAvLyBVbnRpbCB0aGUg
Y2FudmFzIGlzIHdyaXR0ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAor
ICAgIC8vIGhhcHBlbmVkIGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVk
IGJ5IHRoZSBjb21wb3NpdG9yLgorICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgp
ICYmICFtX2F0dHJpYnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fY29u
dGV4dC0+cGFpbnRDb21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSk7
CisgICAgICAgIAorICAgICAgICBjYW52YXMoKS0+bWFrZVByZXNlbnRhdGlvbkNvcHkoKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgY2FudmFzKCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOworICAg
IGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgCisgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5
ICYmICFtX2xheWVyQ2xlYXJlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNhbnZhcygp
LT5jbGVhckNvcGllZEltYWdlKCk7CisgICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwor
ICAgIAorICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+
Y29tbWl0KCk7CisgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhj
YW52YXMoKS0+YnVmZmVyKCksIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSk7CisgICAgCisgICAgaWYg
KG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisg
ICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9
Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgY2xlYXJJZkNvbXBv
c2l0ZWQoKTsKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZm
ZXItPmNvbW1pdCgpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IG1fY29udGV4
dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEobV9kcmF3aW5nQnVmZmVyLmdldCgp
KTsKKyAgICAKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZykKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJC
aW5kaW5nLmdldCgpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+YmluZCgpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gaW1hZ2VEYXRhOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICAvLyBUaGlzIGlzIGFuIGFwcHJveGltYXRpb24gYmVjYXVzZSBhdCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgbGV2ZWwgd2UgZG9uJ3QKKyAgICAvLyBrbm93IGlmIHRoZSB1bmRlcmx5
aW5nIEZCTyB1c2VzIHRleHR1cmVzIG9yIHJlbmRlcmJ1ZmZlcnMuCisgICAgR0MzRGludCBtYXhT
aXplID0gc3RkOjptaW4obV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhSZW5kZXJidWZmZXJTaXplKTsK
KyAgICAvLyBMaW1pdCBkcmF3aW5nIGJ1ZmZlciBzaXplIHRvIDRrIHRvIGF2b2lkIG1lbW9yeSBl
eGhhdXN0aW9uLgorICAgIGNvbnN0IGludCBzaXplVXBwZXJMaW1pdCA9IDQwOTY7CisgICAgbWF4
U2l6ZSA9IHN0ZDo6bWluKG1heFNpemUsIHNpemVVcHBlckxpbWl0KTsKKyAgICBHQzNEaW50IG1h
eFdpZHRoID0gc3RkOjptaW4obWF4U2l6ZSwgbV9tYXhWaWV3cG9ydERpbXNbMF0pOworICAgIEdD
M0RpbnQgbWF4SGVpZ2h0ID0gc3RkOjptaW4obWF4U2l6ZSwgbV9tYXhWaWV3cG9ydERpbXNbMV0p
OworICAgIHdpZHRoID0gY2xhbXAod2lkdGgsIDEsIG1heFdpZHRoKTsKKyAgICBoZWlnaHQgPSBj
bGFtcChoZWlnaHQsIDEsIG1heEhlaWdodCk7CisgICAgCisgICAgaWYgKG1fbmVlZHNVcGRhdGUp
IHsKKyAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7
CisgICAgICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBv
c2l0aW5nKCkpCisgICAgICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0No
YW5nZWQpOworICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgfQorICAgIAorICAg
IC8vIFdlIGRvbid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUg
bmV3bHkgY3JlYXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgorICAgIC8vIGNs
ZWFyIChhbmQgdGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRvKS4KKyAgICBpZiAobV9k
cmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KSk7CisgICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKKyAgICB9
IGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOworICAgIAor
ICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IG9iamVjdE9yWmVybyhtX3RleHR1cmVVbml0c1ttX2FjdGl2ZVRleHR1cmVVbml0XS50ZXh0dXJl
MkRCaW5kaW5nLmdldCgpKSk7CisgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG9iamVjdE9yWmVybyhtX3JlbmRlcmJ1ZmZlckJp
bmRpbmcuZ2V0KCkpKTsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1f
Y29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
b2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Cit9CisKK2ludCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3aW5nQnVmZmVyV2lkdGgoKSBjb25zdAoreworICAg
IGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNp
emUoKS53aWR0aCgpOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJh
bWVidWZmZXJTaXplKCkud2lkdGgoKTsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmRyYXdpbmdCdWZmZXJIZWlnaHQoKSBjb25zdAoreworICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXIpCisgICAgICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKKyAg
ICAKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLmhl
aWdodCgpOworfQorCit1bnNpZ25lZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzaXplSW5C
eXRlcyhHQzNEZW51bSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJZVEU6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGJ5dGUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgICAgIHJldHVy
biBzaXplb2YoR0MzRHVieXRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSE9SVDoK
KyAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEc2hvcnQpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1c2hvcnQp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKKyAgICAgICAgcmV0dXJuIHNpemVv
ZihHQzNEaW50KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6Cisg
ICAgICAgIHJldHVybiBzaXplb2YoR0MzRHVpbnQpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RmbG9hdCk7CisgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRleHR1cmUgLSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJh
Y3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBtX2FjdGl2ZVRleHR1cmVVbml0ID0gdGV4dHVyZSAtIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMDsKKyAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUodGV4dHVy
ZSk7CisgICAgCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5zZXRBY3RpdmVUZXh0dXJlVW5pdCh0ZXh0dXJlKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjphdHRhY2hTaGFkZXIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBXZWJH
TFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xP
YmplY3QoImF0dGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJh
dHRhY2hTaGFkZXIiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFwcm9ncmFt
LT5hdHRhY2hTaGFkZXIoc2hhZGVyKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJhdHRhY2hTaGFkZXIiLCAic2hhZGVy
IGF0dGFjaG1lbnQgYWxyZWFkeSBoYXMgc2hhZGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgbV9jb250ZXh0LT5hdHRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmpl
Y3RPclplcm8oc2hhZGVyKSk7CisgICAgc2hhZGVyLT5vbkF0dGFjaGVkKCk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5kQXR0cmliTG9jYXRpb24i
LCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVMb2NhdGlvbkxl
bmd0aCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXZhbGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImJpbmRB
dHRyaWJMb2NhdGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYmluZEF0dHJp
YkxvY2F0aW9uIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgaW5kZXgsIG5hbWUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNo
ZWNrT2JqZWN0VG9CZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3Qq
IG9iamVjdCwgYm9vbCYgZGVsZXRlZCkKK3sKKyAgICBkZWxldGVkID0gZmFsc2U7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChvYmplY3QpIHsKKyAgICAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgp
LCB0aGlzKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmplY3Qgbm90IGZyb20gdGhp
cyBjb250ZXh0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgZGVsZXRlZCA9ICFvYmplY3QtPm9iamVjdCgpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kQnVmZmVyKEdDM0RlbnVt
IHRhcmdldCwgV2ViR0xCdWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVj
dFRvQmVCb3VuZCgiYmluZEJ1ZmZlciIsIGJ1ZmZlciwgZGVsZXRlZCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAgYnVmZmVyID0gMDsKKyAgICBpZiAoYnVmZmVy
ICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgJiYgYnVmZmVyLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiYmluZEJ1ZmZlciIsICJidWZmZXJzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11
bHRpcGxlIHRhcmdldHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodGFyZ2V0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIpCisgICAgICAgIG1fYm91bmRBcnJh
eUJ1ZmZlciA9IGJ1ZmZlcjsKKyAgICBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSKQorICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3QtPnNldEVsZW1lbnRBcnJheUJ1ZmZlcihidWZmZXIpOworICAgIGVsc2UgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZEJ1
ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsK
KyAgICBpZiAoYnVmZmVyKQorICAgICAgICBidWZmZXItPnNldFRhcmdldCh0YXJnZXQpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVj
a09iamVjdFRvQmVCb3VuZCgiYmluZEZyYW1lYnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVkKQorICAgICAgICBidWZmZXIgPSAwOworICAg
IGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5k
RnJhbWVidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKKyAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZyhvYmpl
Y3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBpZiAoIW1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBJbnN0ZWFkIG9m
IGJpbmRpbmcgZmIgMCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIuCisgICAgICAgIG1fZHJhd2lu
Z0J1ZmZlci0+YmluZCgpOworICAgIH0gZWxzZQorICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKKyAgICBpZiAoYnVmZmVyKQor
ICAgICAgICBidWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKKyAgICBhcHBseVN0ZW5jaWxU
ZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YmluZFJlbmRlcmJ1
ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJCdWZmZXIsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgYm9vbCBkZWxl
dGVkOworICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRSZW5kZXJidWZmZXIiLCBy
ZW5kZXJCdWZmZXIsIGRlbGV0ZWQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRlbGV0ZWQp
CisgICAgICAgIHJlbmRlckJ1ZmZlciA9IDA7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kUmVuZGVyYnVmZmVyIiwgImludmFsaWQg
dGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9yZW5kZXJidWZmZXJCaW5k
aW5nID0gcmVuZGVyQnVmZmVyOworICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcih0YXJn
ZXQsIG9iamVjdE9yWmVybyhyZW5kZXJCdWZmZXIpKTsKKyAgICBpZiAocmVuZGVyQnVmZmVyKQor
ICAgICAgICByZW5kZXJCdWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdl
YkdMVGV4dHVyZSogdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3Vu
ZCgiYmluZFRleHR1cmUiLCB0ZXh0dXJlLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChkZWxldGVkKQorICAgICAgICB0ZXh0dXJlID0gMDsKKyAgICBpZiAodGV4dHVyZSAmJiB0
ZXh0dXJlLT5nZXRUYXJnZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAiYmluZFRleHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVs
dGlwbGUgdGFyZ2V0cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RpbnQgbWF4
TGV2ZWwgPSAwOworICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQpIHsKKyAgICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVy
ZTJEQmluZGluZyA9IHRleHR1cmU7CisgICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0dXJlTGV2
ZWw7CisgICAgICAgIAorICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyICYmICFtX2FjdGl2ZVRl
eHR1cmVVbml0KQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRUZXh0dXJlMkRCaW5k
aW5nKG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7CisgICAgICAgIAorICAgIH0gZWxzZSBpZiAodGFy
Z2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQKSB7CisgICAgICAgIG1f
dGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZyA9
IHRleHR1cmU7CisgICAgICAgIG1heExldmVsID0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJiaW5kVGV4dHVyZSIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCBvYmpl
Y3RPclplcm8odGV4dHVyZSkpOworICAgIGlmICh0ZXh0dXJlKQorICAgICAgICB0ZXh0dXJlLT5z
ZXRUYXJnZXQodGFyZ2V0LCBtYXhMZXZlbCk7CisgICAgCisgICAgLy8gTm90ZTogcHJldmlvdXNs
eSB3ZSB1c2VkIHRvIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBURVhUVVJFX1dSQVBfUgorICAgIC8v
IHJlcGVhdCBtb2RlIHRvIENMQU1QX1RPX0VER0UgZm9yIGN1YmUgbWFwIHRleHR1cmVzLCBiZWNh
dXNlIE9wZW5HTAorICAgIC8vIEVTIDIuMCBkb2Vzbid0IGV4cG9zZSB0aGlzIGZsYWcgKGEgYnVn
IGluIHRoZSBzcGVjaWZpY2F0aW9uKSBhbmQKKyAgICAvLyBvdGhlcndpc2UgdGhlIGFwcGxpY2F0
aW9uIGhhcyBubyBjb250cm9sIG92ZXIgdGhlIHNlYW1zIGluIHRoaXMKKyAgICAvLyBkaW1lbnNp
b24uIEhvd2V2ZXIsIGl0IGFwcGVhcnMgdGhhdCBzdXBwb3J0aW5nIHRoaXMgcHJvcGVybHkgb24g
YWxsCisgICAgLy8gcGxhdGZvcm1zIGlzIGZhaXJseSBpbnZvbHZlZCAod2lsbCByZXF1aXJlIGEg
SGFzaE1hcCBmcm9tIHRleHR1cmUgSUQKKyAgICAvLyBpbiBhbGwgcG9ydHMpLCBhbmQgd2UgaGF2
ZSBub3QgaGFkIGFueSBjb21wbGFpbnRzLCBzbyB0aGUgbG9naWMgaGFzCisgICAgLy8gYmVlbiBy
ZW1vdmVkLgorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kQ29sb3Io
R0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQgYmx1ZSwgR0MzRGZsb2F0
IGFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPmJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJsZW5kRXF1YXRpb24oR0Mz
RGVudW0gbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0MzRGVudW0gbW9kZVJH
QiwgR0MzRGVudW0gbW9kZUFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGVSR0IpIHx8
ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24iLCBtb2RlQWxwaGEpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJH
QiwgbW9kZUFscGhhKTsKK30KKworCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJs
ZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycygiYmxl
bmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRl
eHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVt
IGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQoreworICAgIC8v
IE5vdGU6IEFscGhhIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgcmVzdHJpY3Rpb25zIGFzIFJHQi4K
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRnVuY0Zh
Y3RvcnMoImJsZW5kRnVuYyIsIHNyY1JHQiwgZHN0UkdCKSkKKyAgICAgICAgcmV0dXJuOworICAg
IG1fY29udGV4dC0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBk
c3RBbHBoYSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6YnVmZmVyRGF0
YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzaXplLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZl
ciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVz
YWdlKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChzaXplIDwg
MCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAic2l6ZSA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBpZiAoIXNpemUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPT0gMCIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3Vu
ZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRh
KHN0YXRpY19jYXN0PEdDM0RzaXplaXB0cj4oc2l6ZSkpKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEi
LCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgp
OworICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RzaXpl
aXB0cj4oc2l6ZSksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50
aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBm
YWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtz
IGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOworICAg
IH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRhKEdDM0Rl
bnVtIHRhcmdldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBXZWJHTEJ1ZmZlciogYnVmZmVyID0g
dmFsaWRhdGVCdWZmZXJEYXRhUGFyYW1ldGVycygiYnVmZmVyRGF0YSIsIHRhcmdldCwgdXNhZ2Up
OworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFkYXRhKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiYnVmZmVyRGF0YSIsICJubyBkYXRhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsKKyAgICAgICAg
aWYgKCFidWZmZXItPmFzc29jaWF0ZUJ1ZmZlckRhdGEoZGF0YSkpIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVy
RGF0YSIsICJpbnZhbGlkIGJ1ZmZlciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JM
aXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0
aCgpLCBkYXRhLT5kYXRhKCksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3Jz
VG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5j
dGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQg
dGhpbmtzIGl0IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgp
OworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpidWZmZXJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIq
IGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJn
ZXQsIHVzYWdlKTsKKyAgICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
ZGF0YSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7
CisgICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRo
ZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEt
PmJ5dGVMZW5ndGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSwgdXNhZ2UpOworICAgIGlmIChtX2Nv
bnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAgIC8vIFRo
ZSBidWZmZXJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3Qg
aGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVmZmVyLT5kaXNhc3Nv
Y2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBB
cnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMo
ImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7
CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAob2Zmc2V0IDwgMCkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghaXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICghYnVmZmVyLT5h
c3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRh
dGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5nZSIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIG1fY29udGV4
dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZm
ZXJTdWJEYXRhKHRhcmdldCwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+
Ynl0ZUxlbmd0aCgpLCBkYXRhLT5kYXRhKCkpOworICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRh
IGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0
YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJE
YXRhKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmJ1ZmZl
clN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlclZp
ZXcqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdl
YkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJT
dWJEYXRhIiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIGlm
ICghYnVmZmVyKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJi
dWZmZXJTdWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRP
bk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRl
QnVmZmVyU3ViRGF0YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPm1vdmVF
cnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0
YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEtPmJ5dGVMZW5n
dGgoKSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9y
c1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlclN1YkRhdGEg
ZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRh
IGl0IHRoaW5rcyBpdCBkb2VzLgorICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRh
dGEoKTsKKyAgICB9Cit9CisKK0dDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQoreworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJTdGF0dXMiLCAiaW52YWxpZCB0
YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKKyAgICAgICAgcmV0
dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURTsKKyAgICBjb25zdCBj
aGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgR0MzRGVudW0gcmVz
dWx0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmNoZWNrU3RhdHVzKCZyZWFzb24pOworICAgIGlm
IChyZXN1bHQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Cisg
ICAgICAgIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKCJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIiwg
cmVhc29uKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgcmVzdWx0ID0gbV9j
b250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjbGVhcihHQzNEYml0Zmll
bGQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG1hc2sgJiB+KEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJf
QklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRl
eHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNsZWFyIiwgImludmFsaWQgbWFzayIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFt
ZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNv
dXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY2xlYXIiLCByZWFz
b24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghY2xlYXJJZkNvbXBvc2l0ZWQo
bWFzaykpCisgICAgICAgIG1fY29udGV4dC0+Y2xlYXIobWFzayk7CisgICAgbWFya0NvbnRleHRD
aGFuZ2VkKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xlYXJDb2xv
cihHQzNEZmxvYXQgciwgR0MzRGZsb2F0IGcsIEdDM0RmbG9hdCBiLCBHQzNEZmxvYXQgYSkKK3sK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAg
aWYgKHN0ZDo6aXNuYW4ocikpCisgICAgICAgIHIgPSAwOworICAgIGlmIChzdGQ6OmlzbmFuKGcp
KQorICAgICAgICBnID0gMDsKKyAgICBpZiAoc3RkOjppc25hbihiKSkKKyAgICAgICAgYiA9IDA7
CisgICAgaWYgKHN0ZDo6aXNuYW4oYSkpCisgICAgICAgIGEgPSAxOworICAgIG1fY2xlYXJDb2xv
clswXSA9IHI7CisgICAgbV9jbGVhckNvbG9yWzFdID0gZzsKKyAgICBtX2NsZWFyQ29sb3JbMl0g
PSBiOworICAgIG1fY2xlYXJDb2xvclszXSA9IGE7CisgICAgbV9jb250ZXh0LT5jbGVhckNvbG9y
KHIsIGcsIGIsIGEpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNsZWFy
RGVwdGgoR0MzRGZsb2F0IGRlcHRoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NsZWFyRGVwdGggPSBkZXB0aDsKKyAgICBtX2Nv
bnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNsZWFyU3RlbmNpbChHQzNEaW50IHMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY2xlYXJTdGVuY2lsID0gczsKKyAg
ICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChzKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpjb2xvck1hc2soR0MzRGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwg
R0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJvb2xlYW4gYWxwaGEpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29sb3JNYXNrWzBdID0g
cmVkOworICAgIG1fY29sb3JNYXNrWzFdID0gZ3JlZW47CisgICAgbV9jb2xvck1hc2tbMl0gPSBi
bHVlOworICAgIG1fY29sb3JNYXNrWzNdID0gYWxwaGE7CisgICAgbV9jb250ZXh0LT5jb2xvck1h
c2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVyIiwgc2hhZGVy
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihvYmplY3RP
clplcm8oc2hhZGVyKSk7CisgICAgR0MzRGludCB2YWx1ZTsKKyAgICBtX2NvbnRleHQtPmdldFNo
YWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9T
VEFUVVMsICZ2YWx1ZSk7CisgICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y29tcHJlc3NlZFRleEltYWdlMkQoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgQXJyYXlCdWZmZXJWaWV3KiBk
YXRhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIs
IHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCF2YWxpZGF0
ZUNvbXByZXNzZWRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4
SW1hZ2UyRCIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKGJvcmRlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRl
ciBub3QgMCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghdmFsaWRhdGVDb21w
cmVzc2VkVGV4RGltZW5zaW9ucygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVs
LCB3aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIs
IHdpZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBkYXRhKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29t
cHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICghdGV4KQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKSB7CisgICAgICAgIGlmIChs
ZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJj
b21wcmVzc2VkVGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2NvbnRleHQtPm1vdmVFcnJv
cnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAgIG1fY29udGV4dC0+Y29tcHJlc3NlZFRleElt
YWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIsIGRhdGEtPmJ5dGVMZW5ndGgo
KSwgZGF0YS0+YmFzZUFkZHJlc3MoKSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGNvbXByZXNzZWRUZXhJbWFn
ZTJEIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2
ZSB0aGUgZGF0YSBmb3IgdGhpcyBsZXZlbC4KKyAgICAgICAgdGV4LT5tYXJrSW52YWxpZCh0YXJn
ZXQsIGxldmVsKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB0ZXgtPnNldExl
dmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOworICAgIHRleC0+c2V0Q29tcHJlc3NlZCgp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNvbXByZXNzZWRUZXhTdWJJ
bWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBH
QzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVUZXhGdW5j
TGV2ZWwoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZvcm1hdChmb3JtYXQpKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsICJpbnZhbGlkIGZvcm1hdCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RnVuY0RhdGEo
ImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCBkYXRhKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVU
ZXh0dXJlQmluZGluZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwor
ICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGZvcm1hdCAhPSB0
ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2ZWwpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImNvbXByZXNz
ZWRUZXhTdWJJbWFnZTJEIiwgImZvcm1hdCBkb2VzIG5vdCBtYXRjaCB0ZXh0dXJlIGZvcm1hdCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmICghdmFsaWRhdGVDb21wcmVz
c2VkVGV4U3ViRGltZW5zaW9ucygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHRleCkpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBncmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKKyAgICB0ZXgtPnNl
dENvbXByZXNzZWQoKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxp
ZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
Zm9ybWF0KQoreworICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2xlYXJCaXRzQnlGb3Jt
YXQoZm9ybWF0KSAmIChHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8IEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiZm9ybWF0IGNhbiBub3QgYmUgc2V0LCBvbmx5IHJlbmRlcmVkIHRvIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdD
M0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgh
dmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygiY29weVRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFn
ZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVy
LCBpbnRlcm5hbGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4
SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4
dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiY29weVRleEltYWdlMkQiLCB0YXJn
ZXQsIHRydWUpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc1Rl
eEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0
LCBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleElt
YWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAmJiBX
ZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhJbWFnZTJE
IiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCByZWFzb24pOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgaWYgKGlzUmVzb3VyY2VT
YWZlKCkpIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3
aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgIG1f
Y29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgs
IHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgU2NvcGVk
RHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1l
YnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZ
OworICAgICAgICBHQzNEc2l6ZWkgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OworICAgICAg
ICBpZiAoY2xpcDJEKHgsIHksIHdpZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0
aCgpLCBnZXRCb3VuZEZyYW1lYnVmZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAm
Y2xpcHBlZFdpZHRoLCAmY2xpcHBlZEhlaWdodCkpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+
dGV4SW1hZ2UyRFJlc291cmNlU2FmZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lk
dGgsIGhlaWdodCwgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludGVybmFsZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgbV91bnBhY2tBbGlnbm1lbnQpOworICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAg
JiYgY2xpcHBlZEhlaWdodCA+IDApIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGNsaXBwZWRYIC0geCwgY2xpcHBlZFkgLSB5LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNs
aXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Cisg
ICAgfQorICAgIC8vIEZJWE1FOiBpZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBu
b25lIG9mIHRoZSBiZWxvdyBzaG91bGQgYmUgZXhlY3V0ZWQuCisgICAgdGV4LT5zZXRMZXZlbElu
Zm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVu
Y0xldmVsKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1
cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb3B5
VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgiY29weVRleFN1YkltYWdlMkQiLCB4b2Zmc2V0
LCB5b2Zmc2V0KSB8fCAhdmFsaWRhdGVTaXplKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBo
ZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlz
IGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KKyAgICBpZiAo
eG9mZnNldCArIHdpZHRoIDwgMCB8fCB5b2Zmc2V0ICsgaGVpZ2h0IDwgMCkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlU
ZXhTdWJJbWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkg
fHwgeW9mZnNldCArIGhlaWdodCA+IHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiY29weVRleFN1YkltYWdlMkQiLCAicmVjdGFuZ2xlIG91dCBvZiByYW5nZSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0ID0gdGV4LT5nZXRJ
bnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAgICBpZiAoIXZhbGlkYXRlU2V0dGFibGVU
ZXhGb3JtYXQoImNvcHlUZXhTdWJJbWFnZTJEIiwgaW50ZXJuYWxmb3JtYXQpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5hdGlv
blZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCAiZnJhbWVidWZmZXIgaXMgaW5jb21wYXRp
YmxlIGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJl
YXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQz
RCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAi
Y29weVRleFN1YkltYWdlMkQiLCByZWFzb24pOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsKKyAgICAg
ICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgp
LCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAgIG1fY29udGV4dC0+Y29weVRl
eFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgs
IGhlaWdodCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgR0MzRGludCBjbGlwcGVkWCwgY2xpcHBl
ZFk7CisgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQ7CisgICAg
ICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdodCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldp
ZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKSwgJmNsaXBwZWRYLCAmY2xpcHBlZFks
ICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkgeworICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAgICAgICAg
ICAgIEdDM0RlbnVtIHR5cGUgPSB0ZXgtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCk7CisgICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQgY2hhcltdPiB6ZXJvOworICAgICAgICAgICAg
aWYgKHdpZHRoICYmIGhlaWdodCkgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNpemU7Cisg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNp
emVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQs
ICZzaXplLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6Ok5PX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVy
cm9yLCAiY29weVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB6ZXJv
ID0gc3RkOjptYWtlX3VuaXF1ZTx1bnNpZ25lZCBjaGFyW10+KHNpemUpOworICAgICAgICAgICAg
ICAgIGlmICghemVybykgeworICAgICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgIm91
dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6ZXJv
LmdldCgpKTsKKyAgICAgICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWln
aHQgPiAwKSB7CisgICAgICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5k
ZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Cisg
ICAgICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0ICsgY2xpcHBlZFggLSB4LCB5b2Zmc2V0ICsgY2xpcHBlZFkgLSB5LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZ
LCBjbGlwcGVkV2lkdGgsIGNsaXBwZWRIZWlnaHQpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9k
cmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7CisgICAgICAg
ICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQs
IHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICB9CisgICAgfQorfQorCitQ
YXNzUmVmUHRyPFdlYkdMQnVmZmVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGVC
dWZmZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gbyA9IFdlYkdMQnVmZmVyOjpj
cmVhdGUodGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBv
OworfQorCitQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4gbyA9IFdlYkdMRnJhbWVidWZmZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRDb250ZXh0
T2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPFdlYkdMVGV4
dHVyZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbyA9IFdlYkdMVGV4dHVyZTo6Y3JlYXRlKHRoaXMpOwor
ICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKworUGFzc1Jl
ZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVByb2dy
YW0oKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG8gPSBXZWJHTFByb2dyYW06OmNy
ZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87
Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgUmVmUHRyPFdlYkdMUmVuZGVy
YnVmZmVyPiBvID0gV2ViR0xSZW5kZXJidWZmZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFy
ZWRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xT
aGFkZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0
eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVSICYmIHR5cGUgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY3JlYXRlU2hhZGVyIiwg
ImludmFsaWQgc2hhZGVyIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
ICAgIAorICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hhZGVyOjpjcmVhdGUodGhp
cywgdHlwZSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmN1bGxGYWNlKEdDM0RlbnVtIG1v
ZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+Y3VsbEZhY2UobW9kZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhb2JqZWN0KQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJkZWxldGUiLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRl
eHQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAob2JqZWN0LT5vYmpl
Y3QoKSkgeworICAgICAgICAvLyBXZSBuZWVkIHRvIHBhc3MgaW4gY29udGV4dCBoZXJlIGJlY2F1
c2Ugd2Ugd2FudAorICAgICAgICAvLyB0aGluZ3MgaW4gdGhpcyBjb250ZXh0IHVuYm91bmQuCisg
ICAgICAgIG9iamVjdC0+ZGVsZXRlT2JqZWN0KGdyYXBoaWNzQ29udGV4dDNEKCkpOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpk
ZWxldGVCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVj
dChidWZmZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA9
PSBidWZmZXIpCisgICAgICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7CisgICAgCisgICAgbV9i
b3VuZFZlcnRleEFycmF5T2JqZWN0LT51bmJpbmRCdWZmZXIoYnVmZmVyKTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVm
ZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdChmcmFtZWJ1ZmZlcikp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJp
bmRpbmcpIHsKKyAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOworICAgICAgICBpZiAo
bV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1l
YnVmZmVyQmluZGluZygwKTsKKyAgICAgICAgICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVi
dWZmZXIgaGVyZSB0byBiaW5kIGJhY2sgdG8gaW50ZXJuYWwgZmJvLgorICAgICAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLT5iaW5kKCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsK
KyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVsZXRlUHJvZ3Jh
bShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgZGVsZXRlT2JqZWN0KHByb2dyYW0pOwor
ICAgIC8vIFdlIGRvbid0IHJlc2V0IG1fY3VycmVudFByb2dyYW0gdG8gMCBoZXJlIGJlY2F1c2Ug
dGhlIGRlbGV0aW9uIG9mIHRoZQorICAgIC8vIGN1cnJlbnQgcHJvZ3JhbSBpcyBkZWxheWVkLgor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihX
ZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyYnVmZmVyKQoreworICAgIGlmICghZGVsZXRlT2JqZWN0
KHJlbmRlcmJ1ZmZlcikpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVuZGVyYnVmZmVyID09
IG1fcmVuZGVyYnVmZmVyQmluZGluZykKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0g
MDsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJC
aW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIocmVuZGVyYnVmZmVy
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVTaGFkZXIoV2Vi
R0xTaGFkZXIqIHNoYWRlcikKK3sKKyAgICBkZWxldGVPYmplY3Qoc2hhZGVyKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZWxldGVUZXh0dXJlKFdlYkdMVGV4dHVyZSog
dGV4dHVyZSkKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdCh0ZXh0dXJlKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZTJE
QmluZGluZykKKyAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmUyREJpbmRpbmcg
PSBudWxscHRyOworICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1cmVVbml0c1tpXS50ZXh0
dXJlQ3ViZU1hcEJpbmRpbmcpCisgICAgICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJl
Q3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJp
bmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVBdHRhY2htZW50RnJv
bUJvdW5kRnJhbWVidWZmZXIodGV4dHVyZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+ZGVwdGhGdW5j
KGZ1bmMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmRlcHRoTWFzayhH
QzNEYm9vbGVhbiBmbGFnKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBtX2RlcHRoTWFzayA9IGZsYWc7CisgICAgbV9jb250ZXh0LT5k
ZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGVw
dGhSYW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoek5lYXIgPiB6
RmFyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFyIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkZXRhY2hTaGFkZXIoV2ViR0xQcm9n
cmFtKiBwcm9ncmFtLCBXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHByb2dyYW0pIHx8ICF2YWxp
ZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBzaGFkZXIpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKCFwcm9ncmFtLT5kZXRhY2hTaGFkZXIoc2hhZGVyKSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJkZXRh
Y2hTaGFkZXIiLCAic2hhZGVyIG5vdCBhdHRhY2hlZCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIG1fY29udGV4dC0+ZGV0YWNoU2hhZGVyKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgb2Jq
ZWN0T3JaZXJvKHNoYWRlcikpOworICAgIHNoYWRlci0+b25EZXRhY2hlZChncmFwaGljc0NvbnRl
eHQzRCgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNhYmxlKEdD
M0RlbnVtIGNhcCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUNhcGFiaWxpdHkoImRpc2FibGUiLCBjYXApKQorICAgICAgICByZXR1cm47CisgICAgaWYg
KGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7CisgICAgICAgIG1fc3Rl
bmNpbEVuYWJsZWQgPSBmYWxzZTsKKyAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkgeworICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAgICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNz
b3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOworICAgIH0KKyAgICBtX2NvbnRleHQtPmRpc2Fi
bGUoY2FwKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisgICAgc3RhdGUuZW5hYmxlZCA9IGZhbHNlOworICAg
IAorICAgIGlmIChpbmRleCA+IDAgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICBtX2Nv
bnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBj
b3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCit7CisgICAgUmVmUHRyPFdl
YkdMQnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3Qt
PmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIAorICAgIGlmICghZWxlbWVudEFycmF5QnVm
ZmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKG9mZnNldCA8IDApCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UKSB7CisgICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBhcnJheSwg
b2Zmc2V0IG11c3QgYmUgZGl2aXNpYmxlIGJ5IDQgZm9yIGFsaWdubWVudCByZWFzb25zLgorICAg
ICAgICBpZiAob2Zmc2V0ICUgNCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KKyAgICAgICAgb2Zm
c2V0IC89IDQ7CisgICAgICAgIAorICAgICAgICBHQzNEc2l6ZWlwdHIgbiA9IGVsZW1lbnRBcnJh
eUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gNDsKKyAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwgY291
bnQgPiBuIC0gb2Zmc2V0KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0gZWxzZSBp
ZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQpIHsKKyAgICAgICAg
Ly8gRm9yIGFuIHVuc2lnbmVkIHNob3J0IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUg
YnkgMiBmb3IgYWxpZ25tZW50IHJlYXNvbnMuCisgICAgICAgIGlmIChvZmZzZXQgJSAyKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSB1b2Zmc2V0
IGFuIGVsZW1lbnQgb2Zmc2V0LgorICAgICAgICBvZmZzZXQgLz0gMjsKKyAgICAgICAgCisgICAg
ICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyAy
OworICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFy
cmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCk7CisgICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50
ID4gbiAtIG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVJ
bmRleEFycmF5Q29uc2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50
c1JlcXVpcmVkKQoreworICAgIC8vIFBlcmZvcm1zIGNvbnNlcnZhdGl2ZSB2YWxpZGF0aW9uIGJ5
IGNhY2hpbmcgYSBtYXhpbXVtIGluZGV4IG9mCisgICAgLy8gdGhlIGdpdmVuIHR5cGUgcGVyIGVs
ZW1lbnQgYXJyYXkgYnVmZmVyLiBJZiBhbGwgb2YgdGhlIGJvdW5kCisgICAgLy8gYXJyYXkgYnVm
ZmVycyBoYXZlIGVub3VnaCBlbGVtZW50cyB0byBzYXRpc2Z5IHRoYXQgbWF4aW11bQorICAgIC8v
IGluZGV4LCBza2lwcyB0aGUgZXhwZW5zaXZlIHBlci1kcmF3LWNhbGwgaXRlcmF0aW9uIGluCisg
ICAgLy8gdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZS4KKyAgICAKKyAgICBSZWZQdHI8V2ViR0xC
dWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0
RWxlbWVudEFycmF5QnVmZmVyKCk7CisgICAgCisgICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBHQzNEc2l6ZWlwdHIgbnVtRWxlbWVu
dHMgPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICAvLyBUaGUgY2FzZSBj
b3VudD09MCBpcyBhbHJlYWR5IGRlYWx0IHdpdGggaW4gZHJhd0VsZW1lbnRzIGJlZm9yZSB2YWxp
ZGF0ZUluZGV4QXJyYXlDb25zZXJ2YXRpdmUuCisgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGNvbnN0IEFycmF5QnVmZmVyKiBidWZmZXIgPSBlbGVtZW50
QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEFTU0VSVChidWZmZXIpOwor
ICAgIAorICAgIGludCBtYXhJbmRleCA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Z2V0Q2FjaGVkTWF4
SW5kZXgodHlwZSk7CisgICAgaWYgKG1heEluZGV4IDwgMCkgeworICAgICAgICAvLyBDb21wdXRl
IHRoZSBtYXhpbXVtIGluZGV4IGluIHRoZSBlbnRpcmUgYnVmZmVyIGZvciB0aGUgZ2l2ZW4gdHlw
ZSBvZiBpbmRleC4KKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6IHsKKyAgICAgICAgICAgIGNvbnN0IEdDM0R1Ynl0
ZSogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1Ynl0ZSo+KGJ1ZmZlci0+ZGF0YSgpKTsKKyAg
ICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykK
KyAgICAgICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2Fz
dDxpbnQ+KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOiB7CisgICAgICAgICAgICBudW1F
bGVtZW50cyAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAgICAgICAgICBjb25zdCBHQzNEdXNo
b3J0KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVzaG9ydCo+KGJ1ZmZlci0+ZGF0YSgpKTsK
KyAgICAgICAgICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkr
KykKKyAgICAgICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNf
Y2FzdDxpbnQ+KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDogeworICAgICAgICAgICAgaWYg
KCFtX29lc0VsZW1lbnRJbmRleFVpbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgbnVtRWxlbWVudHMgLz0gc2l6ZW9mKEdDM0R1aW50KTsKKyAgICAgICAgICAg
IGNvbnN0IEdDM0R1aW50KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVpbnQqPihidWZmZXIt
PmRhdGEoKSk7CisgICAgICAgICAgICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVs
ZW1lbnRzOyBpKyspCisgICAgICAgICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRl
eCwgc3RhdGljX2Nhc3Q8aW50PihwW2ldKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGVsZW1lbnRBcnJheUJ1ZmZlci0+c2V0Q2FjaGVkTWF4SW5kZXgodHlwZSwgbWF4
SW5kZXgpOworICAgIH0KKyAgICAKKyAgICBpZiAobWF4SW5kZXggPj0gMCkgeworICAgICAgICAv
LyBUaGUgbnVtYmVyIG9mIHJlcXVpcmVkIGVsZW1lbnRzIGlzIG9uZSBtb3JlIHRoYW4gdGhlIG1h
eGltdW0KKyAgICAgICAgLy8gaW5kZXggdGhhdCB3aWxsIGJlIGFjY2Vzc2VkLgorICAgICAgICBu
dW1FbGVtZW50c1JlcXVpcmVkID0gbWF4SW5kZXggKyAxOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoR0MzRHNpemVpIGNvdW50LCBH
QzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVx
dWlyZWQpCit7CisgICAgQVNTRVJUKGNvdW50ID49IDAgJiYgb2Zmc2V0ID49IDApOworICAgIHVu
c2lnbmVkIGxhc3RJbmRleCA9IDA7CisgICAgCisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVt
ZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJh
eUJ1ZmZlcigpOworICAgIAorICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKCFjb3VudCkgeworICAgICAgICBudW1FbGVtZW50
c1JlcXVpcmVkID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGlm
ICghZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIHVuc2lnbmVkIGxvbmcgdW9mZnNldCA9IG9mZnNldDsKKyAg
ICB1bnNpZ25lZCBsb25nIG4gPSBjb3VudDsKKyAgICAKKyAgICBpZiAodHlwZSA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBl
bGVtZW50IG9mZnNldC4KKyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVpbnQpOworICAg
ICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50Kj4oZWxl
bWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7
CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBsYXN0SW5k
ZXgpCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICArK3A7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX1NIT1JUKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4K
KyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAgICAgIGNvbnN0IEdD
M0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdXNob3J0Kj4oZWxlbWVudEFycmF5
QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7CisgICAgICAg
IHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBsYXN0SW5kZXgpCisgICAg
ICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICArK3A7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUp
IHsKKyAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0MzRHVi
eXRlKj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSAr
IHVvZmZzZXQ7CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAg
PiBsYXN0SW5kZXgpCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAg
ICArK3A7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlbiBzZXQgdGhlIGxhc3Qg
aW5kZXggaW4gdGhlIGluZGV4IGFycmF5IGFuZCBtYWtlIHN1cmUgaXQgaXMgdmFsaWQuCisgICAg
bnVtRWxlbWVudHNSZXF1aXJlZCA9IGxhc3RJbmRleCArIDE7CisgICAgcmV0dXJuIG51bUVsZW1l
bnRzUmVxdWlyZWQgPiAwOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZh
bGlkYXRlVmVydGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHBy
aW1pdGl2ZUNvdW50KQoreworICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIAorICAgIC8vIExvb2sgaW4gZWFjaCBlbmFibGVkIHZlcnRleCBhdHRy
aWIgYW5kIGNoZWNrIGlmIHRoZXkndmUgYmVlbiBib3VuZCB0byBhIGJ1ZmZlci4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9tYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKKyAgICAgICAg
aWYgKCFtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGkpLnZh
bGlkYXRlQmluZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAK
KyAgICBpZiAoZWxlbWVudENvdW50IDw9IDApCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAor
ICAgIAorICAgIC8vIExvb2sgaW4gZWFjaCBjb25zdW1lZCB2ZXJ0ZXggYXR0cmliIChieSB0aGUg
Y3VycmVudCBwcm9ncmFtKS4KKyAgICBib29sIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IGZhbHNl
OworICAgIGJvb2wgc2F3RW5hYmxlZEF0dHJpYiA9IGZhbHNlOworICAgIGludCBudW1BY3RpdmVB
dHRyaWJMb2NhdGlvbnMgPSBtX2N1cnJlbnRQcm9ncmFtLT5udW1BY3RpdmVBdHRyaWJMb2NhdGlv
bnMoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9uczsg
KytpKSB7CisgICAgICAgIGludCBsb2MgPSBtX2N1cnJlbnRQcm9ncmFtLT5nZXRBY3RpdmVBdHRy
aWJMb2NhdGlvbihpKTsKKyAgICAgICAgaWYgKGxvYyA+PSAwICYmIGxvYyA8IHN0YXRpY19jYXN0
PGludD4obV9tYXhWZXJ0ZXhBdHRyaWJzKSkgeworICAgICAgICAgICAgY29uc3QgV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShsb2MpOworICAgICAgICAgICAgaWYg
KHN0YXRlLmVuYWJsZWQpIHsKKyAgICAgICAgICAgICAgICBzYXdFbmFibGVkQXR0cmliID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAvLyBBdm9pZCBvZmYtYnktb25lIGVycm9ycyBpbiBudW1FbGVt
ZW50cyBjb21wdXRhdGlvbi4KKyAgICAgICAgICAgICAgICAvLyBGb3IgdGhlIGxhc3QgZWxlbWVu
dCwgd2Ugd2lsbCBvbmx5IHRvdWNoIHRoZSBkYXRhIGZvciB0aGUKKyAgICAgICAgICAgICAgICAv
LyBlbGVtZW50IGFuZCBub3RoaW5nIGJleW9uZCBpdC4KKyAgICAgICAgICAgICAgICBpbnQgYnl0
ZXNSZW1haW5pbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRlLmJ1ZmZlckJpbmRpbmctPmJ5dGVM
ZW5ndGgoKSAtIHN0YXRlLm9mZnNldCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxl
bWVudHMgPSAwOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGF0ZS5zdHJpZGUgPiAwKTsKKyAg
ICAgICAgICAgICAgICBpZiAoYnl0ZXNSZW1haW5pbmcgPj0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50
KQorICAgICAgICAgICAgICAgICAgICBudW1FbGVtZW50cyA9IDEgKyAoYnl0ZXNSZW1haW5pbmcg
LSBzdGF0ZS5ieXRlc1BlckVsZW1lbnQpIC8gc3RhdGUuc3RyaWRlOworICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGluc3RhbmNlc1JlcXVpcmVkID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoc3Rh
dGUuZGl2aXNvcikgeworICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZXNSZXF1aXJlZCA9IGNl
aWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHByaW1pdGl2ZUNvdW50KSAvIHN0YXRlLmRpdmlzb3IpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VzUmVxdWlyZWQgPiBudW1FbGVtZW50cykK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0cnVl
OworICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudENvdW50ID4gbnVtRWxlbWVudHMpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIGlmICghc2F3Tm9uSW5z
dGFuY2VkQXR0cmliICYmIHNhd0VuYWJsZWRBdHRyaWIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAoIW9iamVjdCB8fCAhb2JqZWN0LT5vYmplY3QoKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gb2JqZWN0IG9yIG9iamVjdCBkZWxldGVkIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRl
eHRHcm91cCgpLCB0aGlzKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5v
dCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dmFsaWRhdGVEcmF3QXJyYXlzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9k
ZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6ZWkgcHJpbWl0aXZlQ291
bnQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVEcmF3
TW9kZShmdW5jdGlvbk5hbWUsIG1vZGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisg
ICAgaWYgKCF2YWxpZGF0ZVN0ZW5jaWxTZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYgKGZpcnN0IDwgMCB8fCBjb3VudCA8IDApIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIAorICAgIGlmICghY291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRD
aGFuZ2VkKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKHBy
aW1pdGl2ZUNvdW50IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50IDwgMCIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmICghaXNFcnJvckdlbmVy
YXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZl
IGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3Jk
T3ZlcmZsb3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwg
UmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgICAgIENoZWNrZWQ8R0Mz
RGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVja2Vk
Q291bnQ7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRQ
cmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7CisgICAgICAgIGlmIChjaGVja2VkU3VtLmhh
c092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgpIHx8
ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwgY2hlY2tl
ZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUs
ICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF2YWxp
ZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiYXR0
cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVm
ZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNl
U2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVh
c29uKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3QXJyYXlzKEdDM0Rl
bnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlRHJh
d0FycmF5cygiZHJhd0FycmF5cyIsIG1vZGUsIGZpcnN0LCBjb3VudCwgMCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIAorICAgIGJvb2wgdmVy
dGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgp
KQorICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIw
KGZpcnN0ICsgY291bnQgLSAxKTsKKyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAg
ICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0FycmF5cyIsIHRydWUpOworICAgIAor
ICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworICAgIAorICAg
IGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQpCisgICAg
ICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisgICAgaWYg
KCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3Mo
ImRyYXdBcnJheXMiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Cit9CisKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVEcmF3RWxlbWVudHMoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0Rl
bnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50cywgR0MzRHNp
emVpIHByaW1pdGl2ZUNvdW50KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1lLCBtb2RlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIAorICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rpb25O
YW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKKyAgICAgICAgaWYgKG1fb2VzRWxlbWVu
dEluZGV4VWludCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9u
TmFtZSwgImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIGlmIChjb3VudCA8IDAgfHwgb2Zmc2V0IDwgMCkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
Y291bnQgb3Igb2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IAorICAgIGlmICghY291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgaWYgKHByaW1pdGl2ZUNvdW50IDwg
MCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAicHJpbWNvdW50IDwgMCIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5n
ZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIEVMRU1F
TlRfQVJSQVlfQlVGRkVSIGJvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgCisgICAgaWYgKCFpc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzKCkpIHsK
KyAgICAgICAgLy8gRW5zdXJlIHdlIGhhdmUgYSB2YWxpZCByZW5kZXJpbmcgc3RhdGUKKyAgICAg
ICAgaWYgKCF2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0
PEdDM0RpbnRwdHI+KG9mZnNldCkpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInJlcXVl
c3Qgb3V0IG9mIGJvdW5kcyBmb3IgY3VycmVudCBFTEVNRU5UX0FSUkFZX0JVRkZFUiIpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGlmICghY291bnQpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBDaGVja2VkPEdDM0Rp
bnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOworICAgICAgICBDaGVja2Vk
PEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZl
Q291bnQpOworICAgICAgICBpZiAoY2hlY2tlZENvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVj
a2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9u
TmFtZSwgImF0dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghdmFs
aWRhdGVJbmRleEFycmF5Q29uc2VydmF0aXZlKHR5cGUsIG51bUVsZW1lbnRzKSB8fCAhdmFsaWRh
dGVWZXJ0ZXhBdHRyaWJ1dGVzKG51bUVsZW1lbnRzLCBjaGVja2VkUHJpbWl0aXZlQ291bnQudW5z
YWZlR2V0KCkpKSB7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2Uo
Y2hlY2tlZENvdW50LnVuc2FmZUdldCgpLCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVt
ZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiYXR0ZW1wdCB0byBhY2Nlc3Mgb3V0IG9mIGJvdW5kcyBhcnJheXMi
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcygw
KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRyaWJzIG5vdCBzZXR1cCBjb3JyZWN0
bHkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAg
aWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nl
c3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1F
QlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFzb24pOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorICAgIAorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2RlLCBHQzNEc2l6ZWkg
Y291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgCisgICAgdW5zaWduZWQgbnVtRWxlbWVu
dHMgPSAwOworICAgIGlmICghdmFsaWRhdGVEcmF3RWxlbWVudHMoImRyYXdFbGVtZW50cyIsIG1v
ZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRzLCAwKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgCisgICAgYm9vbCB2ZXJ0ZXhB
dHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsK
KyAgICAgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAgICAgICAgIHZhbGlkYXRlSW5kZXhBcnJh
eVByZWNpc2UoY291bnQsIHR5cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG51
bUVsZW1lbnRzKTsKKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVy
dGV4QXR0cmliMChudW1FbGVtZW50cyk7CisgICAgfQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJp
Y3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVudHMiLCB0
cnVlKTsKKyAgICAKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBjb3VudCwgdHlw
ZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7CisgICAgCisgICAgaWYgKCFpc0dM
RVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKKyAgICAgICAgcmVzdG9y
ZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKKyAgICBpZiAoIWlzR0xFUzJO
UE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1l
bnRzIiwgZmFsc2UpOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuYWJsZShHQzNEZW51bSBjYXApCit7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBhYmlsaXR5KCJlbmFibGUiLCBj
YXApKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9URVNUKSB7CisgICAgICAgIG1fc3RlbmNpbEVuYWJsZWQgPSB0cnVlOworICAgICAg
ICBhcHBseVN0ZW5jaWxUZXN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGNh
cCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKSB7CisgICAgICAgIG1fc2Npc3Nv
ckVuYWJsZWQgPSB0cnVlOworICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxlZChtX3NjaXNzb3JFbmFibGVkKTsK
KyAgICB9CisgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGluZGV4ID49
IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImlu
ZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91
bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworICAgIHN0
YXRlLmVuYWJsZWQgPSB0cnVlOworICAgIAorICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0
cmliQXJyYXkoaW5kZXgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZp
bmlzaCgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+ZmluaXNoKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6Zmx1c2goKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmZsdXNoKCk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQs
IFdlYkdMUmVuZGVyYnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0ZXJzKCJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIs
IHRhcmdldCwgYXR0YWNobWVudCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAocmVuZGVyYnVm
ZmVydGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKGJ1ZmZlciAmJiAhYnVmZmVyLT52YWxpZGF0ZShjb250ZXh0R3JvdXAo
KSwgdGhpcykpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCAiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCAibm8gYnVmZmVy
IG9yIGJ1ZmZlciBub3QgZnJvbSB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICAvLyBEb24ndCBhbGxvdyB0aGUgZGVmYXVsdCBmcmFtZWJ1ZmZlciB0byBiZSBtdXRh
dGVkOyBhbGwgY3VycmVudAorICAgIC8vIGltcGxlbWVudGF0aW9ucyB1c2UgYW4gRkJPIGludGVy
bmFsbHkgaW4gcGxhY2Ugb2YgdGhlIGRlZmF1bHQKKyAgICAvLyBGQk8uCisgICAgaWYgKCFtX2Zy
YW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGZyYW1lYnVmZmVyIGJvdW5kIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUGxhdGZvcm0zRE9iamVjdCBidWZmZXJPYmpl
Y3QgPSBvYmplY3RPclplcm8oYnVmZmVyKTsKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAg
ICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmpl
Y3QpOworICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgcmVuZGVyYnVmZmVydGFyZ2V0
LCBidWZmZXJPYmplY3QpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBt
X2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgYXR0YWNobWVudCwgcmVu
ZGVyYnVmZmVydGFyZ2V0LCBidWZmZXJPYmplY3QpOworICAgIH0KKyAgICBtX2ZyYW1lYnVmZmVy
QmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgYnVm
ZmVyKTsKKyAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwg
R0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVm
ZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2ht
ZW50KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChsZXZlbCkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVy
VGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
aWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUg
bm90IGZyb20gdGhpcyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8g
RG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1
cnJlbnQKKyAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBs
YWNlIG9mIHRoZSBkZWZhdWx0CisgICAgLy8gRkJPLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJp
bmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFt
ZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9y
WmVybyh0ZXh0dXJlKTsKKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29udGV4
dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
QVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgICAgIG1f
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVO
VDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFj
aG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAg
IG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0
YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFj
aG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOworICAgIH0KKyAgICBtX2Zy
YW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNo
bWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7CisgICAgYXBwbHlTdGVuY2lsVGVzdCgp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZyb250RmFjZShHQzNEZW51
bSBtb2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPmZyb250RmFjZShtb2RlKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdl
YkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2VuZXJhdGVNaXBtYXAi
LCB0YXJnZXQsIGZhbHNlKTsKKyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIGlm
ICghdGV4LT5jYW5HZW5lcmF0ZU1pcG1hcHMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZW5lcmF0ZU1pcG1hcCIs
ICJsZXZlbCAwIG5vdCBwb3dlciBvZiAyIG9yIG5vdCBhbGwgdGhlIHNhbWUgc2l6ZSIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTIzOTE2LiBDb21wcmVzc2VkIHRleHR1cmVzIHNob3VsZCBiZSBh
bGxvd2VkIGluIFdlYkdMIDI6CisgICAgaWYgKHRleC0+aXNDb21wcmVzc2VkKCkpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZ2VuZXJhdGVNaXBtYXAiLCAidHJ5aW5nIHRvIGdlbmVyYXRlIG1pcG1hcHMgZnJvbSBjb21w
cmVzc2VkIHRleHR1cmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlk
YXRlU2V0dGFibGVUZXhGb3JtYXQoImdlbmVyYXRlTWlwbWFwIiwgdGV4LT5nZXRJbnRlcm5hbEZv
cm1hdCh0YXJnZXQsIDApKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIC8vIGdlbmVyYXRl
TWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWluRmlsdGVyIGlzIG5vdCBORUFSRVNUX01J
UE1BUF9MSU5FQVIKKyAgICAvLyBvbiBNYWMuIFJlbW92ZSB0aGUgaGFjayBvbmNlIHRoaXMgZHJp
dmVyIGJ1ZyBpcyBmaXhlZC4KKyNpZiBPUyhEQVJXSU4pCisgICAgYm9vbCBuZWVkVG9SZXNldE1p
bkZpbHRlciA9IGZhbHNlOworICAgIGlmICh0ZXgtPmdldE1pbkZpbHRlcigpICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpIHsKKyAgICAgICAgbV9jb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1RfTUlQTUFQX0xJTkVBUik7CisgICAgICAgIG5l
ZWRUb1Jlc2V0TWluRmlsdGVyID0gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKyAgICBtX2NvbnRleHQt
PmdlbmVyYXRlTWlwbWFwKHRhcmdldCk7CisjaWYgT1MoREFSV0lOKQorICAgIGlmIChuZWVkVG9S
ZXNldE1pbkZpbHRlcikKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgdGV4LT5nZXRNaW5GaWx0ZXIo
KSk7CisjZW5kaWYKKyAgICB0ZXgtPmdlbmVyYXRlTWlwbWFwTGV2ZWxJbmZvKCk7Cit9CisKK1Bh
c3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRB
Y3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3RpdmVBdHRyaWIi
LCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgQWN0aXZlSW5mbyBpbmZv
OworICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0T3JaZXJvKHByb2dy
YW0pLCBpbmRleCwgaW5mbykpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIAorICAgIExP
RyhXZWJHTCwgIlJldHVybmluZyBhY3RpdmUgYXR0cmlidXRlICVkOiAlcyIsIGluZGV4LCBpbmZv
Lm5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgCisgICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6
Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOworfQorCitQYXNzUmVmUHRy
PFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QWN0aXZlVW5p
Zm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBwcm9n
cmFtKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQWN0aXZlSW5mbyBpbmZvOworICAgIGlmICgh
bV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgs
IGluZm8pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlh
bnQoKSkgeworICAgICAgICBpZiAoaW5mby5zaXplID4gMSAmJiAhaW5mby5uYW1lLmVuZHNXaXRo
KCJbMF0iKSkKKyAgICAgICAgICAgIGluZm8ubmFtZS5hcHBlbmQoIlswXSIpOworICAgIH0KKyAg
ICAKKyAgICBMT0coV2ViR0wsICJSZXR1cm5pbmcgYWN0aXZlIHVuaWZvcm0gJWQ6ICVzIiwgaW5k
ZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICAKKyAgICByZXR1cm4gV2ViR0xBY3Rp
dmVJbmZvOjpjcmVhdGUoaW5mby5uYW1lLCBpbmZvLnR5cGUsIGluZm8uc2l6ZSk7Cit9CisKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJv
Z3JhbSogcHJvZ3JhbSwgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiBzaGFkZXJPYmplY3Rz
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIHNoYWRl
ck9iamVjdHMuY2xlYXIoKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBdHRhY2hlZFNoYWRlcnMiLCBwcm9ncmFtKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGNvbnN0IEdDM0RlbnVtIHNoYWRlclR5cGVbXSA9
IHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9TSEFERVIsCisgICAgICAgIEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIKKyAgICB9OworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzaXplb2Yoc2hhZGVyVHlwZSkgLyBzaXplb2YoR0MzRGVudW0pOyArK2kp
IHsKKyAgICAgICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hh
ZGVyKHNoYWRlclR5cGVbaV0pOworICAgICAgICBpZiAoc2hhZGVyKQorICAgICAgICAgICAgc2hh
ZGVyT2JqZWN0cy5hcHBlbmQoc2hhZGVyKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K0dDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0cmliTG9jYXRpb24oV2Vi
R0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0QXR0cmliTG9j
YXRpb24iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmICghdmFsaWRhdGVM
b2NhdGlvbkxlbmd0aCgiZ2V0QXR0cmliTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAgcmV0dXJu
IC0xOworICAgIGlmICghdmFsaWRhdGVTdHJpbmcoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkp
CisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkKKyAg
ICAgICAgcmV0dXJuIC0xOworICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImdldEF0dHJpYkxvY2F0aW9uIiwgInByb2dyYW0gbm90IGxpbmtlZCIpOworICAgICAg
ICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiBtX2NvbnRleHQtPmdldEF0dHJpYkxvY2F0
aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9C
VUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAorICAgIGlmIChwbmFtZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUgJiYgcG5hbWUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkJVRkZFUl9VU0FHRSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0QnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0K
KyAgICAKKyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEJ1ZmZlclBh
cmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgaWYgKHBuYW1lID09IEdyYXBo
aWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2
YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2FzdDx1bnNpZ25lZD4odmFs
dWUpKTsKK30KKworUGFzc1JlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgLy8gV2Ug
YWx3YXlzIG5lZWQgdG8gcmV0dXJuIGEgbmV3IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXMgb2JqZWN0
IHRvCisgICAgLy8gcHJldmVudCB0aGUgdXNlciBmcm9tIG11dGF0aW5nIGFueSBjYWNoZWQgdmVy
c2lvbi4KKyAgICAKKyAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9yY2UgcmVxdWVzdGVkIHZh
bHVlcyBvZiAiZmFsc2UiIGZvciBkZXB0aAorICAgIC8vIGFuZCBzdGVuY2lsLCByZWdhcmRsZXNz
IG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCisgICAgLy8gR3JhcGhpY3NDb250
ZXh0M0Qgb3IgRHJhd2luZ0J1ZmZlci4KKyAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRl
cz4gYXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZShtX2NvbnRleHQt
PmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOworICAgIGlmICghbV9hdHRyaWJ1dGVzLmRlcHRoKQor
ICAgICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7CisgICAgaWYgKCFtX2F0dHJpYnV0
ZXMuc3RlbmNpbCkKKyAgICAgICAgYXR0cmlidXRlcy0+c2V0U3RlbmNpbChmYWxzZSk7CisgICAg
aWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBUaGUgRHJhd2luZ0J1ZmZlciBvYnRh
aW5zIGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRy
aWJ1dGVzKCksCisgICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBpdHMgb3duIGRldGVybWluYXRpb24g
b2Ygd2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRlZC4KKyAgICAgICAgYXR0cmlidXRl
cy0+c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVsdGlzYW1wbGUoKSk7CisgICAgfQor
ICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKK30KKworR0MzRGVudW0gV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6Z2V0RXJyb3IoKQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb24pCisgICAgICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1I7
CisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKK30KKworV2ViR0xFeHRlbnNpb24q
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5h
bWUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfYmxl
bmRfbWlubWF4IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBv
cnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpIHsKKyAgICAgICAgaWYgKCFtX2V4dEJsZW5kTWlu
TWF4KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX2JsZW5kX21pbm1heCIpOworICAgICAgICAgICAgbV9leHRCbGVuZE1pbk1h
eCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUQmxlbmRNaW5NYXg+KHRoaXMpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBtX2V4dEJsZW5kTWluTWF4LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9zUkdCIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKSB7CisgICAgICAgIGlmICgh
bV9leHRzUkdCKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5z
dXJlRW5hYmxlZCgiR0xfRVhUX3NSR0IiKTsKKyAgICAgICAgICAgIG1fZXh0c1JHQiA9IHN0ZDo6
bWFrZV91bmlxdWU8RVhUc1JHQj4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1f
ZXh0c1JHQi5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJF
WFRfZnJhZ19kZXB0aCIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfRVhUX2ZyYWdfZGVwdGgiKSkgeworICAgICAgICBpZiAoIW1fZXh0RnJhZ0Rl
cHRoKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX2ZyYWdfZGVwdGgiKTsKKyAgICAgICAgICAgIG1fZXh0RnJhZ0RlcHRoID0g
c3RkOjptYWtlX3VuaXF1ZTxFWFRGcmFnRGVwdGg+KHRoaXMpOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBtX2V4dEZyYWdEZXB0aC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3Jp
bmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKKyAgICAgICAgJiYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRl
cl90ZXh0dXJlX2xvZCIpKSkgeworICAgICAgICBpZiAoIW1fZXh0U2hhZGVyVGV4dHVyZUxPRCkg
eworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQo
IkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgICAgIG1fZXh0U2hhZGVyVGV4
dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVyVGV4dHVyZUxPRD4odGhpcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVyVGV4dHVyZUxPRC5nZXQoKTsKKyAg
ICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkgeworICAg
ICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7CisgICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVf
ZmlsdGVyX2FuaXNvdHJvcGljIik7CisgICAgICAgICAgICBtX2V4dFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljPih0
aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9leHRUZXh0dXJlRmlsdGVyQW5pc290
cm9waWMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkgeworICAgICAg
ICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgeworICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0
aXZlcyIpOworICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzID0gc3RkOjptYWtl
X3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlzKTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdldCgpOworICAgIH0KKyAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0IikKKyAgICAgICAgJiYg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9mbG9h
dCIpKSB7CisgICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQpIHsKKyAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9m
bG9hdCIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXQgPSBzdGQ6Om1ha2VfdW5pcXVl
PE9FU1RleHR1cmVGbG9hdD4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2Vz
VGV4dHVyZUZsb2F0LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFt
ZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpIHsK
KyAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVhcikgeworICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2Zs
b2F0X2xpbmVhciIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4odGhpcyk7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyLmdldCgpOworICAgIH0KKyAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQorICAg
ICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0
dXJlX2hhbGZfZmxvYXQiKSkgeworICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdCkg
eworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQo
IkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKKyAgICAgICAgICAgIG1fb2VzVGV4dHVyZUhh
bGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdD4odGhpcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdC5nZXQoKTsKKyAg
ICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxmX2Zs
b2F0X2xpbmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBw
b3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkgeworICAgICAgICBpZiAo
IW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcikgeworICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXRf
bGluZWFyIik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgPSBzdGQ6
Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+KHRoaXMpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuZ2V0KCk7CisgICAg
fQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3ZlcnRleF9hcnJheV9vYmpl
Y3QiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdM
X09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKKyAgICAgICAgaWYgKCFtX29lc1ZlcnRleEFy
cmF5T2JqZWN0KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5z
dXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAgICAgICAgICAgIG1f
b2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1ZlcnRleEFycmF5T2Jq
ZWN0Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vZXNWZXJ0ZXhBcnJheU9i
amVjdC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNf
ZWxlbWVudF9pbmRleF91aW50IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpIHsKKyAgICAgICAgaWYg
KCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7Cisg
ICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU0Vs
ZW1lbnRJbmRleFVpbnQ+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX29lc0Vs
ZW1lbnRJbmRleFVpbnQuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShu
YW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0IikpIHsKKyAgICAgICAgaWYgKCFtX3dlYmdsTG9zZUNv
bnRleHQpCisgICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRleHQgPSBzdGQ6Om1ha2VfdW5pcXVl
PFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOworICAgICAgICByZXR1cm4gbV93ZWJnbExvc2VDb250
ZXh0LmdldCgpOworICAgIH0KKyAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJL
SVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQorICAgICAgICAmJiBXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsKKyAgICAgICAgaWYgKCFtX3dlYmds
Q29tcHJlc3NlZFRleHR1cmVBVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1
cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+KHRoaXMp
OworICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDLmdldCgpOworICAg
IH0KKyAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29tcHJl
c3NlZF90ZXh0dXJlX3B2cnRjIikpCisgICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQ
VlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7CisgICAgICAgIGlmICghbV93ZWJnbENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJUQyA9
IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPih0aGlzKTsKKyAg
ICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmdldCgpOworICAgIH0K
KyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2NvbXByZXNzZWRfdGV4dHVy
ZV9zM3RjIikKKyAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRl
ZCh0aGlzKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMpCisg
ICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDID0gc3RkOjptYWtlX3VuaXF1
ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7CisgICAgICAgIHJldHVybiBtX3dl
YmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiKQorICAgICAgICAmJiBXZWJHTERl
cHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKSB7CisgICAgICAgIGlm
ICghbV93ZWJnbERlcHRoVGV4dHVyZSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2RlcHRoX3RleHR1cmUiKTsKKyAg
ICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVw
dGhUZXh0dXJlPih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV93ZWJnbERlcHRo
VGV4dHVyZS5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJX
RUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdCdWZmZXJzKCkpIHsKKyAgICAgICAg
aWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0
ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CisgICAgICAg
ICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRHJhd0J1ZmZl
cnM+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3dlYmdsRHJhd0J1ZmZlcnMu
Z2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiQU5HTEVfaW5z
dGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhpcykp
IHsKKyAgICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSB7CisgICAgICAgICAgICBt
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5zdGFu
Y2VkX2FycmF5cyIpOworICAgICAgICAgICAgbV9hbmdsZUluc3RhbmNlZEFycmF5cyA9IHN0ZDo6
bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRoaXMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdldCgpOworICAgIH0KKyAgICBpZiAo
YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpKSB7CisgICAgICAgICAgICBp
ZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKKyAgICAgICAgICAgICAgICBtX3dlYmdsRGVi
dWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdSZW5kZXJlckluZm8+
KHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mby5nZXQo
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdM
X2RlYnVnX3NoYWRlcnMiKQorICAgICAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkgeworICAg
ICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQorICAgICAgICAgICAgICAgIG1fd2Vi
Z2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdTaGFkZXJzPih0aGlz
KTsKKyAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdTaGFkZXJzLmdldCgpOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCitXZWJHTEdldEluZm8g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVGcmFtZWJ1ZmZlckZ1bmNQYXJhbWV0
ZXJzKCJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCB0YXJnZXQsIGF0dGFjaG1l
bnQpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgCisgICAgaWYgKCFtX2Zy
YW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZl
ciBib3VuZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAor
ICAgIFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QgPSBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0
QXR0YWNobWVudE9iamVjdChhdHRhY2htZW50KTsKKyAgICBpZiAoIW9iamVjdCkgeworICAgICAg
ICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
T0JKRUNUX1RZUEUpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNzQ29u
dGV4dDNEOjpOT05FKTsKKyAgICAgICAgLy8gT3BlbkdMIEVTIDIuMCBzcGVjaWZpZXMgSU5WQUxJ
RF9FTlVNIGluIHRoaXMgY2FzZSwgd2hpbGUgZGVza3RvcCBHTAorICAgICAgICAvLyBzcGVjaWZp
ZXMgSU5WQUxJRF9PUEVSQVRJT04uCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgfQorICAgIAorICAgIEFTU0VSVChvYmplY3QtPmlzVGV4dHVyZSgpIHx8IG9i
amVjdC0+aXNSZW5kZXJidWZmZXIoKSk7CisgICAgaWYgKG9iamVjdC0+aXNUZXh0dXJlKCkpIHsK
KyAgICAgICAgc3dpdGNoIChwbmFtZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRSk7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6Cisg
ICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPihy
ZWludGVycHJldF9jYXN0PFdlYkdMVGV4dHVyZSo+KG9iamVjdCkpKTsKKyAgICAgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMOgor
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX1RF
WFRVUkVfQ1VCRV9NQVBfRkFDRToKKyAgICAgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQU1FQlVG
RkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUOiB7CisgICAgICAgICAgICBHQzNEaW50
IHZhbHVlID0gMDsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RnJhbWVidWZmZXJBdHRhY2ht
ZW50UGFyYW1ldGVyaXYodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwgJnZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgICAgICB9CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFs
aWQgcGFyYW1ldGVyIG5hbWUgZm9yIHRleHR1cmUgYXR0YWNobWVudCIpOworICAgICAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
c3dpdGNoIChwbmFtZSkgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFOgorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKTsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRToKKyAgICAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4o
cmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCkpKTsKKyAgICAgICAg
Y2FzZSBFeHRlbnNpb25zM0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdf
RVhUOiB7CisgICAgICAgICAgICBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyID0gcmVp
bnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmJ1ZmZlcio+KG9iamVjdCk7CisgICAgICAgICAgICBH
QzNEZW51bSByZW5kZXJCdWZmZXJGb3JtYXQgPSByZW5kZXJCdWZmZXItPmdldEludGVybmFsRm9y
bWF0KCk7CisgICAgICAgICAgICBBU1NFUlQocmVuZGVyQnVmZmVyRm9ybWF0ICE9IEV4dGVuc2lv
bnMzRDo6U1JHQl9FWFQgJiYgcmVuZGVyQnVmZmVyRm9ybWF0ICE9IEV4dGVuc2lvbnMzRDo6U1JH
Ql9BTFBIQV9FWFQpOworICAgICAgICAgICAgaWYgKHJlbmRlckJ1ZmZlckZvcm1hdCA9PSBFeHRl
bnNpb25zM0Q6OlNSR0I4X0FMUEhBOF9FWFQpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhFeHRlbnNpb25zM0Q6OlNSR0JfRVhUKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgICAgIH0KKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSBmb3IgcmVuZGVyYnVmZmVyIGF0dGFjaG1lbnQiKTsKKyAgICAg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICAgICAgfQorICAgIH0KK30KKworV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgY29uc3QgaW50IGludFplcm8gPSAwOworICAgIHN3aXRjaCAocG5hbWUpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToKKyAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6CisgICAgICAgIHJldHVybiBnZXRXZWJH
TEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRB
cnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFf
QklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZEFycmF5QnVmZmVyKSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQ6CisgICAgICAgIHJldHVybiBnZXRC
b29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RF9DT0xPUjoKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgorICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9SR0I6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFV
QVRJT05fQUxQSEE6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgorICAg
ICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19BTFBIQToKKyAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RF9TUkNfUkdCOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMVUVfQklUUzoKKyAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQ0xFQVJfVkFMVUU6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoK
KyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oVWludDMyQXJyYXk6OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0
dXJlRm9ybWF0cy5kYXRhKCksIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSkpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToKKyAgICAgICAgcmV0dXJuIGdl
dEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNV
TExfRkFDRV9NT0RFOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4obV9jdXJyZW50
UHJvZ3JhbSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6CisgICAg
ICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5kZXB0aCkKKyAg
ICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oaW50WmVybyk7CisgICAgICAgIHJldHVybiBn
ZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0NMRUFSX1ZBTFVFOgorICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0ZVTkM6CisgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfUkFOR0U6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6CisgICAg
ICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9XUklURU1BU0s6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAg
ICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KG1fYm91bmRWZXJ0ZXhBcnJheU9i
amVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBh
c3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4obV9mcmFtZWJ1ZmZlckJpbmRpbmcpKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9GQUNFOgorICAgICAgICByZXR1cm4gZ2V0VW5z
aWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdF
TkVSQVRFX01JUE1BUF9ISU5UOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6CisgICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkxJTkVfV0lEVEg6CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1B
R0VfVU5JVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6CisgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJC
VUZGRVJfU0laRToKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9URVhUVVJFX1NJWkU6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6Cisg
ICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhU
VVJFX0lNQUdFX1VOSVRTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVM6CisgICAgICAgIHJldHVybiBnZXRXZWJHTElu
dEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOVU1f
U0hBREVSX0JJTkFSWV9GT1JNQVRTOgorICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGFsd2F5
cyByZXR1cm4gMCBmb3IgdGhpcz8KKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6CisgICAgICAg
IHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoKKyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1l
dGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9G
SUxMOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfVU5JVFM6CisgICAgICAgIHJldHVy
biBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UkVEX0JJVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KG1fcmVuZGVyYnVm
ZmVyQmluZGluZykpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSOgorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IFdlYkdMIikpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9CVUZGRVJTOgorICAgICAgICByZXR1cm4gZ2V0
SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVf
Q09WRVJBR0VfSU5WRVJUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgor
ICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNBTVBMRVM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgorICAgICAgICBy
ZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0NJU1NPUl9URVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFH
RV9WRVJTSU9OOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCBHTFNMIEVTIDEu
MCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xB
TkdVQUdFX1ZFUlNJT04pICsgIikiKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0JBQ0tfRkFJTDoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBu
YW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKKyAg
ICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgorICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6CisgICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9CQUNLX1JFRjoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6
CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JJVFM6CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgIW1fYXR0cmlidXRlcy5zdGVuY2lsKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhpbnRaZXJvKTsKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9DTEVBUl9WQUxVRToKKyAgICAgICAgcmV0
dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9GQUlMOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKKyAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKKyAgICAgICAgcmV0dXJuIGdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1JFRjoK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9URVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFt
ZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9N
QVNLOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgorICAgICAgICByZXR1
cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZykpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR19DVUJFX01BUDoKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5p
dHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nKSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgcmV0dXJuIGdl
dEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0ZMSVBfWV9XRUJHTDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja0ZsaXBZ
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFf
V0VCR0w6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tQcmVtdWx0aXBseUFs
cGhhKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05W
RVJTSU9OX1dFQkdMOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrQ29sb3Jz
cGFjZUNvbnZlcnNpb24pOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhTdHJpbmcoIldlYktpdCIpKTsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJTSU9OOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJX
ZWJHTCAxLjAgKCIgKyBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVS
U0lPTikgKyAiKSIpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgorICAg
ICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBF
eHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNf
c3RhbmRhcmRfZGVyaXZhdGl2ZXMKKyAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZl
cykKKyAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25z
M0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTKTsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90
IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNhc2UgV2Vi
R0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6CisgICAgICAgIGlm
IChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUikpOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3Jl
bmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OworICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdM
OgorICAgICAgICBpZiAobV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQorICAgICAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6
VkVORE9SKSk7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VC
R0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlZFUlRFWF9BUlJBWV9CSU5ESU5H
X09FUzogLy8gT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKKyAgICAgICAgaWYgKG1fb2VzVmVydGV4
QXJyYXlPYmplY3QpIHsKKyAgICAgICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0
LT5pc0RlZmF1bHRPYmplY3QoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4obV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0KSk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0K
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2Fy
cmF5X29iamVjdCBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDog
Ly8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCisgICAgICAgIGlmIChtX2V4dFRleHR1
cmVGaWx0ZXJBbmlzb3Ryb3BpYykKKyAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBh
cmFtZXRlcihFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmls
dGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDog
Ly8gRVhUX2RyYXdfYnVmZmVycyBCRUdJTgorICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJz
KQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhDb2xvckF0dGFjaG1lbnRz
KCkpOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2Ry
YXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgorICAgICAgICBp
ZiAobV93ZWJnbERyYXdCdWZmZXJzKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhn
ZXRNYXhEcmF3QnVmZmVycygpKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lLCBXRUJHTF9kcmF3X2J1ZmZlcnMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1
ZmZlcnMKKyAgICAgICAgICAgICYmIHBuYW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIw
X0VYVAorICAgICAgICAgICAgJiYgcG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5z
aW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKKyAgICAg
ICAgICAgIEdDM0RpbnQgdmFsdWUgPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKKyAgICAgICAg
ICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5nZXREcmF3QnVmZmVyKHBuYW1lKTsKKyAgICAgICAgICAgIGVs
c2UgLy8gZW11bGF0ZWQgYmFja2J1ZmZlcgorICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNr
RHJhd0J1ZmZlcjsKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAg
ICAgICB9CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQorCitXZWJHTEdldEluZm8gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFByb2dyYW0q
IHByb2dyYW0sIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVT
RURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1QYXJhbWV0ZXIiLCBwcm9ncmFtKSkKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIAorICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAg
IHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERUxFVEVfU1RB
VFVTOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHByb2dyYW0tPmlzRGVsZXRlZCgpKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWQUxJREFURV9TVEFUVVM6CisgICAgICAgIG1f
Y29udGV4dC0+Z2V0UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUp
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5LX1NUQVRVUzoKKyAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhwcm9ncmFtLT5nZXRMaW5rU3RhdHVzKCkpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkFUVEFDSEVEX1NIQURFUlM6CisgICAgICAgIG1fY29udGV4dC0+Z2V0
UHJvZ3JhbWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkFDVElWRV9BVFRSSUJVVEVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFDVElWRV9V
TklGT1JNUzoKKyAgICAgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3ltYm9sQ291
bnQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyh2YWx1ZSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFByb2dyYW1QYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgfQorfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykK
K3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybiAiIjsKKyAg
ICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG9iamVj
dE9yWmVybyhwcm9ncmFtKSkpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgdGFyZ2V0Iik7Cisg
ICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgaWYgKCFtX3JlbmRlcmJ1
ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgIm5vIHJlbmRlcmJ1ZmZlciBib3VuZCIpOwor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAorICAgIGlmIChtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmctPmdldEludGVybmFsRm9ybWF0KCkgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkRFUFRIX1NURU5DSUwKKyAgICAgICAgJiYgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+aXNW
YWxpZCgpKSB7CisgICAgICAgIEFTU0VSVCghaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQoKSk7Cisg
ICAgICAgIGludCB2YWx1ZSA9IDA7CisgICAgICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICAgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1dJRFRIOgorICAgICAgICAgICAg
dmFsdWUgPSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldFdpZHRoKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdI
VDoKKyAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRIZWlnaHQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVJfUkVEX1NJWkU6CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUl9HUkVFTl9TSVpFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVJfQkxVRV9TSVpFOgorICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICAgICAgICAgIHZhbHVlID0gMDsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJf
REVQVEhfU0laRToKKyAgICAgICAgICAgIHZhbHVlID0gMjQ7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1NURU5DSUxfU0la
RToKKyAgICAgICAgICAgIHZhbHVlID0gODsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUOgorICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmdldElu
dGVybmFsRm9ybWF0KCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIHN3aXRj
aCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfV0lE
VEg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgorICAgICAgICBtX2NvbnRleHQtPmdl
dFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6CisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworV2ViR0xH
ZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNoYWRlclBhcmFtZXRlcihXZWJH
TFNoYWRlciogc2hhZGVyLCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRTaGFkZXJQYXJhbWV0ZXIiLCBzaGFkZXIpKQorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAg
c3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFTEVURV9TVEFU
VVM6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc2hhZGVyLT5pc0RlbGV0ZWQoKSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVM6CisgICAgICAgIG1fY29u
dGV4dC0+Z2V0U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRlciksIHBuYW1lLCAmdmFsdWUpOwor
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBREVSX1RZUEU6CisgICAgICAgIG1fY29udGV4
dC0+Z2V0U2hhZGVyaXYob2JqZWN0T3JaZXJvKHNoYWRlciksIHBuYW1lLCAmdmFsdWUpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkPih2YWx1ZSkpOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
bmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorfQorCitTdHJp
bmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U2hhZGVySW5mb0xvZyhXZWJHTFNoYWRl
ciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOwor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBTdHJpbmco
KTsKKyAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlckluZm9Mb2ciLCBzaGFk
ZXIpKQorICAgICAgICByZXR1cm4gIiI7CisgICAgcmV0dXJuIGVuc3VyZU5vdE51bGwobV9jb250
ZXh0LT5nZXRTaGFkZXJJbmZvTG9nKG9iamVjdE9yWmVybyhzaGFkZXIpKSk7Cit9CisKK1Bhc3NS
ZWZQdHI8V2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFNoYWRlclByZWNpc2lvbkZvcm1hdChHQzNEZW51bSBzaGFkZXJUeXBlLCBHQzNEZW51
bSBwcmVjaXNpb25UeXBlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHN3aXRjaCAoc2hhZGVyVHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlZFUlRFWF9TSEFERVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBR01F
TlRfU0hBREVSOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJl
Y2lzaW9uRm9ybWF0IiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorICAgIHN3aXRjaCAocHJlY2lzaW9uVHlwZSkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkxPV19GTE9BVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpN
RURJVU1fRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9GTE9BVDoKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6Ok1FRElVTV9JTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SElHSF9JTlQ6
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQcmVjaXNpb25Gb3Jt
YXQiLCAiaW52YWxpZCBwcmVjaXNpb24gdHlwZSIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICB9CisgICAgCisgICAgR0MzRGludCByYW5nZVsyXSA9IHswLCAwfTsKKyAgICBHQzNEaW50
IHByZWNpc2lvbiA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQo
c2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVjaXNpb24pOworICAgIHJldHVy
biBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwg
cHJlY2lzaW9uKTsKK30KKworU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFNo
YWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdl
dFNoYWRlclNvdXJjZSIsIHNoYWRlcikpCisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4g
ZW5zdXJlTm90TnVsbChzaGFkZXItPmdldFNvdXJjZSgpKTsKK30KKworVmVjdG9yPFN0cmluZz4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpCit7Cisg
ICAgVmVjdG9yPFN0cmluZz4gcmVzdWx0OworICAgIAorICAgIGlmIChtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb24pCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgCisgICAgaWYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX2JsZW5kX21pbm1heCIpKQor
ICAgICAgICByZXN1bHQuYXBwZW5kKCJFWFRfYmxlbmRfbWlubWF4Iik7CisgICAgaWYgKG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NSR0IiKSkKKyAgICAgICAg
cmVzdWx0LmFwcGVuZCgiRVhUX3NSR0IiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9FWFRfZnJhZ19kZXB0aCIpKQorICAgICAgICByZXN1bHQuYXBw
ZW5kKCJFWFRfZnJhZ19kZXB0aCIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2Zsb2F0IikpCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoIk9FU190ZXh0dXJlX2Zsb2F0Iik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikpCisgICAgICAgIHJl
c3VsdC5hcHBlbmQoIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpOworICAgIGlmIChtX2NvbnRl
eHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQi
KSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpOworICAg
IGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190ZXh0dXJl
X2hhbGZfZmxvYXRfbGluZWFyIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU190ZXh0dXJl
X2hhbGZfZmxvYXRfbGluZWFyIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikpCisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOworICAgIGlmIChtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKSB8
fCBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FSQl9zaGFkZXJfdGV4
dHVyZV9sb2QiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiRVhUX3NoYWRlcl90ZXh0dXJlX2xv
ZCIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0VY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJX
RUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisgICAgaWYgKG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3Qi
KSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAg
ICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVu
dF9pbmRleF91aW50IikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIk9FU19lbGVtZW50X2luZGV4
X3VpbnQiKTsKKyAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9sb3NlX2NvbnRleHQiKTsKKyAgICBp
ZiAoV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6c3VwcG9ydGVkKHRoaXMpKQorICAgICAgICBy
ZXN1bHQuYXBwZW5kKCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpOworICAg
IGlmIChXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9wdnJ0YyIp
OworICAgIGlmIChXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKHRoaXMpKQor
ICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfczN0YyIpOwor
ICAgIGlmIChXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkp
KQorICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kZXB0aF90ZXh0dXJlIik7CisgICAgaWYg
KHN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZHJh
d19idWZmZXJzIik7CisgICAgaWYgKEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhp
cykpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIkFOR0xFX2luc3RhbmNlZF9hcnJheXMiKTsKKyAg
ICAKKyAgICBpZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGlmICht
X2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRf
c2hhZGVyX3NvdXJjZSIpKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdf
c2hhZGVycyIpOworICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9p
bmZvIik7CisgICAgfQorICAgIAorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRUZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1
cmVCaW5kaW5nKCJnZXRUZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsKKyAgICBpZiAoIXRl
eCkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIEdDM0RpbnQgdmFsdWUgPSAw
OworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01BR19GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5f
RklMVEVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgorICAgICAgICBtX2NvbnRl
eHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHZhbHVlKSk7CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdl
dCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih2YWx1ZSkpOworICAgICAgICB9CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIi
LCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGlj
IG5vdCBlbmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKKyAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworV2ViR0xHZXRJbmZvIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFt
LCBjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogdW5pZm9ybUxvY2F0aW9uLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm0iLCBwcm9ncmFt
KSkKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGlmICghdW5pZm9ybUxvY2F0
aW9uIHx8IHVuaWZvcm1Mb2NhdGlvbi0+cHJvZ3JhbSgpICE9IHByb2dyYW0pIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
Z2V0VW5pZm9ybSIsICJubyB1bmlmb3JtbG9jYXRpb24gb3Igbm90IHZhbGlkIGZvciB0aGlzIHBy
b2dyYW0iKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAgICBHQzNE
aW50IGxvY2F0aW9uID0gdW5pZm9ybUxvY2F0aW9uLT5sb2NhdGlvbigpOworICAgIAorICAgIEdD
M0RlbnVtIGJhc2VUeXBlOworICAgIHVuc2lnbmVkIGxlbmd0aDsKKyAgICBzd2l0Y2ggKHVuaWZv
cm1Mb2NhdGlvbi0+dHlwZSgpKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDoK
KyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICAgICAgbGVu
Z3RoID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9P
TF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAg
ICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCT09MX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJP
T0w7CisgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkJPT0xfVkVDNDoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Qk9PTDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBo
aWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUMzOgorICAgICAgICBiYXNlVHlwZSA9
IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVF9WRUM0OgorICAgICAgICBiYXNl
VHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAgICAgICBi
YXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gMTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMjoK
KyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxl
bmd0aCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZM
T0FUX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwor
ICAgICAgICBsZW5ndGggPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVF9WRUM0OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNE
OjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RkxPQVRfTUFUMjoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDQ7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDM6CisgICAgICAgIGJhc2VUeXBl
ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSA5OworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQ0OgorICAgICAg
ICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0g
MTY7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJf
MkQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFOgorICAgICAgICBi
YXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ7CisgICAgICAgIGxlbmd0aCA9IDE7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIC8vIENhbid0IGhhbmRsZSB0aGlz
IHR5cGUKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVuaGFuZGxlZCB0eXBlIik7CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKKyAgICB9CisgICAgc3dpdGNoIChiYXNlVHlwZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiB7CisgICAgICAgIEdDM0RmbG9hdCB2YWx1ZVsx
Nl0gPSB7MH07CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWZ2RVhUKG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIDE2ICogc2l6ZW9mKEdDM0RmbG9hdCksIHZhbHVl
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtZnYob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICBpZiAobGVuZ3Ro
ID09IDEpCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3Ro
KSk7CisgICAgfQorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDogeworICAgICAgICBH
QzNEaW50IHZhbHVlWzRdID0gezB9OworICAgICAgICBpZiAobV9pc1JvYnVzdG5lc3NFWFRTdXBw
b3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0blVuaWZv
cm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCA0ICogc2l6ZW9mKEdDM0Rp
bnQpLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0VW5p
Zm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsKKyAgICAgICAg
aWYgKGxlbmd0aCA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZVsw
XSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVl
LCBsZW5ndGgpKTsKKyAgICB9CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDogewor
ICAgICAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9OworICAgICAgICBpZiAobV9pc1JvYnVzdG5l
c3NFWFRTdXBwb3J0ZWQpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
Z2V0blVuaWZvcm1pdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCA0ICogc2l6
ZW9mKEdDM0RpbnQpLCB2YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0VW5pZm9ybWl2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZhbHVlKTsK
KyAgICAgICAgaWYgKGxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIGJvb2wgYm9vbFZhbHVlWzE2
XSA9IHswfTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCBsZW5ndGg7IGor
KykKKyAgICAgICAgICAgICAgICBib29sVmFsdWVbal0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1
ZVtqXSk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKGJvb2xWYWx1ZSwgbGVuZ3Ro
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJv
b2w+KHZhbHVlWzBdKSk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgfQorICAgIAorICAgIC8vIElmIHdlIGdldCBoZXJlLCBzb21ldGhpbmcgd2Vu
dCB3cm9uZyBpbiBvdXIgdW5mb3J0dW5hdGVseSBjb21wbGV4IGxvZ2ljIGFib3ZlCisgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRVbmlm
b3JtIiwgInVua25vd24gZXJyb3IiKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Cit9CisK
K1Bhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJn
ZXRVbmlmb3JtTG9jYXRpb24iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRVbmlmb3JtTG9jYXRpb24iLCBuYW1l
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiZ2V0
VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGlm
IChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBp
ZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRVbmlmb3JtTG9jYXRp
b24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKyAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29udGV4dC0+Z2V0VW5pZm9ybUxv
Y2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7CisgICAgaWYgKHVuaWZvcm1Mb2Nh
dGlvbiA9PSAtMSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgCisgICAgR0MzRGludCBh
Y3RpdmVVbmlmb3JtcyA9IDA7CisgICAgbV9jb250ZXh0LT5nZXROb25CdWlsdEluQWN0aXZlU3lt
Ym9sQ291bnQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBHcmFwaGljc0NvbnRleHQzRDo6QUNUSVZF
X1VOSUZPUk1TLCAmYWN0aXZlVW5pZm9ybXMpOworICAgIGZvciAoR0MzRGludCBpID0gMDsgaSA8
IGFjdGl2ZVVuaWZvcm1zOyBpKyspIHsKKyAgICAgICAgQWN0aXZlSW5mbyBpbmZvOworICAgICAg
ICBpZiAoIW1fY29udGV4dC0+Z2V0QWN0aXZlVW5pZm9ybShvYmplY3RPclplcm8ocHJvZ3JhbSks
IGksIGluZm8pKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIC8vIFN0cmlw
ICJbMF0iIGZyb20gdGhlIG5hbWUgaWYgaXQncyBhbiBhcnJheS4KKyAgICAgICAgaWYgKGluZm8u
bmFtZS5lbmRzV2l0aCgiWzBdIikpCisgICAgICAgICAgICBpbmZvLm5hbWUgPSBpbmZvLm5hbWUu
bGVmdChpbmZvLm5hbWUubGVuZ3RoKCkgLSAzKTsKKyAgICAgICAgLy8gSWYgaXQncyBhbiBhcnJh
eSwgd2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggZWFjaCBlbGVtZW50LCBhcHBlbmRpbmcgIltp
bmRleF0iIHRvIHRoZSBuYW1lLgorICAgICAgICBmb3IgKEdDM0RpbnQgaW5kZXggPSAwOyBpbmRl
eCA8IGluZm8uc2l6ZTsgKytpbmRleCkgeworICAgICAgICAgICAgU3RyaW5nIHVuaWZvcm1OYW1l
ID0gaW5mby5uYW1lICsgIlsiICsgU3RyaW5nOjpudW1iZXIoaW5kZXgpICsgIl0iOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAobmFtZSA9PSB1bmlmb3JtTmFtZSB8fCBuYW1lID09IGlu
Zm8ubmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xVbmlmb3JtTG9jYXRpb246OmNy
ZWF0ZShwcm9ncmFtLCB1bmlmb3JtTG9jYXRpb24sIGluZm8udHlwZSk7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBu
YW1lLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIAor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKKyAgICAKKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiZ2V0VmVydGV4QXR0cmliIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorICAgIAorICAgIGNvbnN0IFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJh
eU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgpOworICAgIAorICAgIGlmIChtX2Fu
Z2xlSW5zdGFuY2VkQXJyYXlzICYmIHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
QVRUUklCX0FSUkFZX0RJVklTT1JfQU5HTEUpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
c3RhdGUuZGl2aXNvcik7CisgICAgCisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfQlVGRkVSX0JJTkRJTkc6CisgICAg
ICAgIGlmICgoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiAhaW5kZXggJiYgbV9ib3VuZFZlcnRleEFy
cmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKS5idWZmZXJCaW5kaW5nID09IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlcikKKyAgICAgICAgICAgIHx8ICFzdGF0ZS5idWZmZXJCaW5kaW5nCisg
ICAgICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFz
c1JlZlB0cjxXZWJHTEJ1ZmZlcj4oc3RhdGUuYnVmZmVyQmluZGluZykpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRDoKKyAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5lbmFibGVkKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX05PUk1BTElaRUQ6CisgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oc3RhdGUubm9ybWFsaXplZCk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0
YXRlLnNpemUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJS
QVlfU1RSSURFOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLm9yaWdpbmFsU3Ry
aWRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1RZ
UEU6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUudHlwZSk7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6Q1VSUkVOVF9WRVJURVhfQVRUUklCOgorICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKG1fdmVydGV4QXR0cmliVmFsdWVbaW5k
ZXhdLnZhbHVlLCA0KSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFZlcnRleEF0dHJpYiIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAg
ICB9Cit9CisKK2xvbmcgbG9uZyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRWZXJ0ZXhB
dHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIEdDM0RzaXpl
aXB0ciByZXN1bHQgPSBtX2NvbnRleHQtPmdldFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5h
bWUpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHJlc3VsdCk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0Rl
bnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIGJvb2wgaXNWYWxpZCA9IGZhbHNlOworICAgIHN3aXRjaCAodGFyZ2V0KSB7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAg
ICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9k
ZXJpdmF0aXZlcworICAgICAgICBpZiAobV9vZXNTdGFuZGFyZERlcml2YXRpdmVzKQorICAgICAg
ICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIWlz
VmFsaWQpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImhpbnQiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX2NvbnRleHQtPmhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJvb2xl
YW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNCdWZmZXIoV2ViR0xCdWZmZXIqIGJ1ZmZl
cikKK3sKKyAgICBpZiAoIWJ1ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAg
ICAgIHJldHVybiAwOworICAgIAorICAgIGlmICghYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkp
CisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmlzQnVmZmVy
KGJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OmlzQ29udGV4dExvc3QoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbnRleHRMb3N0OworfQor
Citib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzQ29udGV4dExvc3RPclBlbmRpbmco
KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gJiYgIW1faGFzUmVxdWVz
dGVkUG9saWN5UmVzb2x1dGlvbikgeworICAgICAgICBMT0coV2ViR0wsICJDb250ZXh0IGlzIGJl
aW5nIHVzZWQuIEF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgcG9saWN5LiIpOworICAgICAgICBEb2N1
bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS50b3BEb2N1bWVudCgpOworICAg
ICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpOworICAgICAgICBpZiAocGFnZSAmJiAh
ZG9jdW1lbnQudXJsKCkuaXNMb2NhbEZpbGUoKSkKKyAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFt
ZSgpLmxvYWRlcigpLmNsaWVudCgpLnJlc29sdmVXZWJHTFBvbGljeUZvclVSTChkb2N1bWVudC51
cmwoKSk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjdXJyZW50bHkgZG8gYW55dGhpbmcg
d2l0aCB0aGUgcmVzdWx0IGZyb20gcmVzb2x1dGlvbi4gQSBtb3JlCisgICAgICAgIC8vIGNvbXBs
ZXRlIGltcGxlbWVudGF0aW9uIG1pZ2h0IHRyeSB0byBjb25zdHJ1Y3QgYSByZWFsIGNvbnRleHQs
IGV0YyBhbmQgcHJvY2VlZAorICAgICAgICAvLyB3aXRoIG5vcm1hbCBvcGVyYXRpb24uCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkxMjIKKyAg
ICAgICAgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIG1fY29udGV4dExvc3QgfHwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9u
OworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjppc0VuYWJsZWQo
R0MzRGVudW0gY2FwKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlQ2FwYWJpbGl0eSgiaXNFbmFibGVkIiwgY2FwKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgaWYgKGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKQorICAgICAgICBy
ZXR1cm4gbV9zdGVuY2lsRW5hYmxlZDsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc0VuYWJsZWQo
Y2FwKTsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNGcmFt
ZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKK3sKKyAgICBpZiAoIWZyYW1l
YnVmZmVyIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgCisgICAgaWYgKCFmcmFtZWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICAKKyAgICByZXR1cm4gbV9jb250ZXh0LT5pc0ZyYW1lYnVmZmVyKGZyYW1l
YnVmZmVyLT5vYmplY3QoKSk7Cit9CisKK0dDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmlzUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAgaWYgKCFwcm9n
cmFtIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
CisgICAgcmV0dXJuIG1fY29udGV4dC0+aXNQcm9ncmFtKHByb2dyYW0tPm9iamVjdCgpKTsKK30K
KworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aXNSZW5kZXJidWZmZXIo
V2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBpZiAoIXJlbmRlcmJ1ZmZl
ciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIGlmICghcmVuZGVyYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCisgICAgICAgIHJldHVy
biAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQtPmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1
ZmZlci0+b2JqZWN0KCkpOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjppc1NoYWRlcihXZWJHTFNoYWRlciogc2hhZGVyKQoreworICAgIGlmICghc2hhZGVyIHx8
IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAg
cmV0dXJuIG1fY29udGV4dC0+aXNTaGFkZXIoc2hhZGVyLT5vYmplY3QoKSk7Cit9CisKK0dDM0Ri
b29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzVGV4dHVyZShXZWJHTFRleHR1cmUq
IHRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlIHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgaWYgKCF0ZXh0dXJlLT5oYXNFdmVyQmVl
bkJvdW5kKCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBtX2NvbnRleHQt
PmlzVGV4dHVyZSh0ZXh0dXJlLT5vYmplY3QoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5saW5l
V2lkdGgod2lkdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmxpbmtQ
cm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJsaW5rUHJvZ3JhbSIsIHByb2dyYW0pKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgV2ViR0xTaGFkZXIq
IHZlcnRleFNoYWRlciA9IHByb2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4
dDNEOjpWRVJURVhfU0hBREVSKTsKKyAgICAgICAgV2ViR0xTaGFkZXIqIGZyYWdtZW50U2hhZGVy
ID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5U
X1NIQURFUik7CisgICAgICAgIGlmICghdmVydGV4U2hhZGVyIHx8ICF2ZXJ0ZXhTaGFkZXItPmlz
VmFsaWQoKSB8fCAhZnJhZ21lbnRTaGFkZXIgfHwgIWZyYWdtZW50U2hhZGVyLT5pc1ZhbGlkKCkg
fHwgIW1fY29udGV4dC0+cHJlY2lzaW9uc01hdGNoKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIp
LCBvYmplY3RPclplcm8oZnJhZ21lbnRTaGFkZXIpKSB8fCAhbV9jb250ZXh0LT5jaGVja1Zhcnlp
bmdzUGFja2luZyhvYmplY3RPclplcm8odmVydGV4U2hhZGVyKSwgb2JqZWN0T3JaZXJvKGZyYWdt
ZW50U2hhZGVyKSkpIHsKKyAgICAgICAgICAgIHByb2dyYW0tPnNldExpbmtTdGF0dXMoZmFsc2Up
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIG1fY29u
dGV4dC0+bGlua1Byb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKKyAgICBwcm9ncmFtLT5p
bmNyZWFzZUxpbmtDb3VudCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHBu
YW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoK
KyAgICAgICAgbV91bnBhY2tGbGlwWSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CisgICAg
ICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dF
QkdMOgorICAgICAgICBpZiAocGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVG
QVVMVF9XRUJHTCB8fCBwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKKyAgICAgICAg
ICAgIG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4o
cGFyYW0pOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBw
YXJhbWV0ZXIgZm9yIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlBBQ0tfQUxJR05NRU5UOgorICAgICAgICBpZiAocGFyYW0gPT0gMSB8fCBwYXJhbSA9PSAy
IHx8IHBhcmFtID09IDQgfHwgcGFyYW0gPT0gOCkgeworICAgICAgICAgICAgaWYgKHBuYW1lID09
IEdyYXBoaWNzQ29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVCkKKyAgICAgICAgICAgICAgICBtX3Bh
Y2tBbGlnbm1lbnQgPSBwYXJhbTsKKyAgICAgICAgICAgIGVsc2UgLy8gR3JhcGhpY3NDb250ZXh0
M0Q6OlVOUEFDS19BTElHTk1FTlQ6CisgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQg
PSBwYXJhbTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFt
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJh
bWV0ZXIgZm9yIGFsaWdubWVudCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBh
cmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6cG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNE
ZmxvYXQgdW5pdHMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+cG9seWdvbk9mZnNldChmYWN0b3IsIHVuaXRzKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWFkUGl4ZWxzKEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlv
bkNvZGUmKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAvLyBEdWUgdG8gV2ViR0wncyBzYW1lLW9yaWdpbiByZXN0cmljdGlvbnMsIGl0
IGlzIG5vdCBwb3NzaWJsZSB0bworICAgIC8vIHRhaW50IHRoZSBvcmlnaW4gdXNpbmcgdGhlIFdl
YkdMIEFQSS4KKyAgICBBU1NFUlQoY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpOworICAgIC8vIFZh
bGlkYXRlIGlucHV0IHBhcmFtZXRlcnMuCisgICAgaWYgKCFwaXhlbHMpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJyZWFkUGl4
ZWxzIiwgIm5vIGRlc3RpbmF0aW9uIEFycmF5QnVmZmVyVmlldyIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQkE6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJy
ZWFkUGl4ZWxzIiwgImludmFsaWQgZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgdHlwZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEgfHwgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZWFkUGl4ZWxzIiwgImZvcm1hdCBub3QgUkdCQSBvciB0eXBlIG5vdCBVTlNJR05F
RF9CWVRFIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gVmFsaWRhdGUgYXJyYXkg
dHlwZSBhZ2FpbnN0IHBpeGVsIHR5cGUuCisgICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpT
Qzo6VHlwZVVpbnQ4KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5v
dCBVaW50OEFycmF5Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgY2hhciog
cmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4
dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04s
ICJyZWFkUGl4ZWxzIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBD
YWxjdWxhdGUgYXJyYXkgc2l6ZSwgdGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNLX0FM
SUdOTUVOVC4KKyAgICB1bnNpZ25lZCB0b3RhbEJ5dGVzUmVxdWlyZWQgPSAwOworICAgIHVuc2ln
bmVkIHBhZGRpbmcgPSAwOworICAgIGlmICghbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIHsK
KyAgICAgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5
dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxC
eXRlc1JlcXVpcmVkLCAmcGFkZGluZyk7CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9y
LCAicmVhZFBpeGVscyIsICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5
dGVzUmVxdWlyZWQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3
IG5vdCBsYXJnZSBlbm91Z2ggZm9yIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIHZv
aWQqIGRhdGEgPSBwaXhlbHMtPmJhc2VBZGRyZXNzKCk7CisgICAgCisgICAgeworICAgICAgICBT
Y29wZWREcmF3aW5nQnVmZmVyQmluZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1f
ZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKTsKKyAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhU
U3VwcG9ydGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlYWRu
UGl4ZWxzRVhUKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLT5ieXRl
TGVuZ3RoKCksIGRhdGEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPnJl
YWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKKyAgICB9
CisgICAgCisjaWYgT1MoREFSV0lOKQorICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRl
ZCkgLy8gd2UgaGF2ZW4ndCBjb21wdXRlZCBwYWRkaW5nCisgICAgICAgIG1fY29udGV4dC0+Y29t
cHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tB
bGlnbm1lbnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsICZwYWRkaW5nKTsKKyAgICAvLyBGSVhNRTog
cmVtb3ZlIHRoaXMgc2VjdGlvbiB3aGVuIEdMIGRyaXZlciBidWcgb24gTWFjIEFORCB0aGUgR0xF
UyBkcml2ZXIgYnVnCisgICAgLy8gb24gUUMgaXMgZml4ZWQsIGkuZS4sIHdoZW4gYWxwaGEgaXMg
b2ZmLCByZWFkUGl4ZWxzIHNob3VsZAorICAgIC8vIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBv
ZiAwLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fY29udGV4dC0+Z2V0Q29u
dGV4dEF0dHJpYnV0ZXMoKS5hbHBoYSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMg
PSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkYXRhKTsKKyAgICAgICAgZm9yIChH
QzNEc2l6ZWkgaXkgPSAwOyBpeSA8IGhlaWdodDsgKytpeSkgeworICAgICAgICAgICAgZm9yIChH
QzNEc2l6ZWkgaXggPSAwOyBpeCA8IHdpZHRoOyArK2l4KSB7CisgICAgICAgICAgICAgICAgcGl4
ZWxzWzNdID0gMjU1OworICAgICAgICAgICAgICAgIHBpeGVscyArPSA0OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcGl4ZWxzICs9IHBhZGRpbmc7CisgICAgICAgIH0KKyAgICB9CisjZW5k
aWYKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpyZWxlYXNlU2hhZGVyQ29t
cGlsZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPnJlbGVhc2VTaGFkZXJDb21waWxlcigpOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9y
ZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZW5kZXJidWZmZXJTdG9y
YWdlIiwgIm5vIGJvdW5kIHJlbmRlcmJ1ZmZlciIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmICghdmFsaWRhdGVTaXplKCJyZW5kZXJidWZmZXJTdG9yYWdlIiwgd2lkdGgsIGhlaWdo
dCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KSB7CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQTQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCNV9B
MToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I1NjU6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDg6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0I4
X0FMUEhBOF9FWFQ6CisgICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6
OlNSR0I4X0FMUEhBOF9FWFQgJiYgIW1fZXh0c1JHQikgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0
b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQs
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJC
aW5kaW5nLT5zZXRJbnRlcm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7CisgICAgICAgIG1fcmVu
ZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZCh0cnVlKTsKKyAgICAgICAgbV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgICAgICBpZiAoaXNEZXB0
aFN0ZW5jaWxTdXBwb3J0ZWQoKSkKKyAgICAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVy
U3RvcmFnZSh0YXJnZXQsIEV4dGVuc2lvbnMzRDo6REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhl
aWdodCk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJc1ZhbGlkKGlzRGVwdGhT
dGVuY2lsU3VwcG9ydGVkKCkpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElu
dGVybmFsRm9ybWF0KGludGVybmFsZm9ybWF0KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAiaW52YWxpZCBpbnRlcm5hbGZvcm1hdCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzYW1wbGVDb3ZlcmFnZShHQzNEZmxvYXQgdmFs
dWUsIEdDM0Rib29sZWFuIGludmVydCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5zYW1wbGVDb3ZlcmFnZSh2YWx1
ZSwgaW52ZXJ0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzY2lzc29y
KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
Cit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghdmFsaWRhdGVTaXplKCJzY2lzc29yIiwgd2lkdGgsIGhlaWdodCkpCisgICAgICAg
IHJldHVybjsKKyAgICBtX2NvbnRleHQtPnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6c2hhZGVyU291cmNlKFdlYkdMU2hh
ZGVyKiBzaGFkZXIsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInNoYWRlclNvdXJjZSIsIHNoYWRlcikpCisgICAgICAg
IHJldHVybjsKKyAgICBTdHJpbmcgc3RyaW5nV2l0aG91dENvbW1lbnRzID0gU3RyaXBDb21tZW50
cyhzdHJpbmcpLnJlc3VsdCgpOworICAgIGlmICghdmFsaWRhdGVTdHJpbmcoInNoYWRlclNvdXJj
ZSIsIHN0cmluZ1dpdGhvdXRDb21tZW50cykpCisgICAgICAgIHJldHVybjsKKyAgICBzaGFkZXIt
PnNldFNvdXJjZShzdHJpbmcpOworICAgIG1fY29udGV4dC0+c2hhZGVyU291cmNlKG9iamVjdE9y
WmVybyhzaGFkZXIpLCBzdHJpbmdXaXRob3V0Q29tbWVudHMpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVm
LCBHQzNEdWludCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5j
IiwgZnVuYykpCisgICAgICAgIHJldHVybjsKKyAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwor
ICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOworICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0g
bWFzazsKKyAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOworICAgIG1fY29udGV4dC0+
c3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1
bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1
bmMoInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCBmdW5jKSkKKyAgICAgICAgcmV0dXJuOworICAgIHN3
aXRjaCAoZmFjZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZST05UX0FORF9CQUNL
OgorICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOworICAgICAgICBtX3N0ZW5jaWxGdW5j
UmVmQmFjayA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOworICAgICAg
ICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVDoKKyAgICAgICAgbV9zdGVuY2lsRnVuY1JlZiA9IHJl
ZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgorICAgICAgICBtX3N0ZW5jaWxGdW5jUmVm
QmFjayA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gbWFzazsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCAiaW52YWxp
ZCBmYWNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5zdGVuY2ls
RnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9zdGVuY2ls
TWFzayA9IG1hc2s7CisgICAgbV9zdGVuY2lsTWFza0JhY2sgPSBtYXNrOworICAgIG1fY29udGV4
dC0+c3RlbmNpbE1hc2sobWFzayk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBz
d2l0Y2ggKGZhY2UpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFD
SzoKKyAgICAgICAgbV9zdGVuY2lsTWFzayA9IG1hc2s7CisgICAgICAgIG1fc3RlbmNpbE1hc2tC
YWNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJPTlQ6CisgICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgorICAgICAgICBtX3N0ZW5jaWxNYXNrQmFj
ayA9IG1hc2s7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJzdGVuY2lsTWFza1Nl
cGFyYXRlIiwgImludmFsaWQgZmFjZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
Y29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNrKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0g
emZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChmYWlsLCB6ZmFp
bCwgenBhc3MpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN0ZW5jaWxP
cFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBH
QzNEZW51bSB6cGFzcykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWls
LCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50
ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBi
b3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxz
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBpZ25vcmUg
YW55IGVycm9ycyByZXR1cm5lZC4KKyAgICBlYyA9IDA7CisgICAgV2ViR0xUZXh0dXJlKiB0ZXgg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAg
ICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4SW1hZ2UyRCIsIE5vdFRleFN1
YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSkpOworICAgIEFTU0VSVCh0ZXgpOworICAgIEFTU0VSVCghbGV2
ZWwgfHwgIVdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKTsKKyAgICBpZiAoIXBp
eGVscykgeworICAgICAgICAvLyBOb3RlOiBDaHJvbWl1bSdzIE9wZW5HTCBpbXBsZW1lbnRhdGlv
biBjbGVhcnMgdGV4dHVyZXMgYW5kIGlzUmVzb3VyY2VTYWZlKCkgaXMgdGhlcmVmb3JlIHRydWUu
CisgICAgICAgIC8vIEZvciBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIGlmIHRoZXkgYXJlIHVzaW5n
IEFOR0xFX2RlcHRoX3RleHR1cmUsIEFOR0xFIGRlcHRoIHRleHR1cmVzCisgICAgICAgIC8vIGNh
biBub3QgYmUgY2xlYXJlZCB3aXRoIHRleEltYWdlMkQgYW5kIG11c3QgYmUgY2xlYXJlZCBieSBi
aW5kaW5nIHRvIGFuIGZibyBhbmQgY2FsbGluZworICAgICAgICAvLyBjbGVhci4KKyAgICAgICAg
aWYgKGlzUmVzb3VyY2VTYWZlKCkpCisgICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9y
bWF0LCB0eXBlLCBudWxscHRyKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBib29sIHN1
Y2NlZWQgPSBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyLCBmb3JtYXQsIHR5cGUs
IG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAgICAgICAgIGlmICghc3VjY2VlZCkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQo
dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGludGVybmFsZm9ybWF0KSk7
CisgICAgICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Cisg
ICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOworICAgICAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3Jz
VG9TeW50aGV0aWNFcnJvckxpc3QoKSkgeworICAgICAgICAgICAgLy8gVGhlIHRleEltYWdlMkQg
ZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1cmUgaXQgZG9lc24ndCBoYXZlIHRo
ZSBkYXRhIGZvciB0aGlzIGxldmVsLgorICAgICAgICAgICAgdGV4LT5tYXJrSW52YWxpZCh0YXJn
ZXQsIGxldmVsKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICB0
ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgdHlwZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4SW1h
Z2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdy
YXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZ
LCBib29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0g
MDsKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1h
Z2VFeHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlB
bHBoYSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9ORSk7CisgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGlt
YWdlRXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6
OkFscGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOworICAgIGNv
bnN0IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEo
KTsKKyAgICAKKyAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKKyAgICBpZiAodHlwZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09
IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9O
b3RoaW5nICYmICFmbGlwWSkKKyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBl
bHNlIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdl
UGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0
LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0
KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgInRleEltYWdlMkQiLCAicGFja0ltYWdlIGVycm9yIik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50
ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19BTElHTk1FTlQsIDEpOworICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLCBmb3Jt
YXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSwg
ZWMpOworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQt
PnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFj
a0FsaWdubWVudCk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRh
dGVUZXhGdW5jKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5j
dGlvblR5cGUgZnVuY3Rpb25UeXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNl
VHlwZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCkKK3sKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoZnVuY3Rpb25O
YW1lLCBmdW5jdGlvblR5cGUsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBXZWJHTFRleHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGZ1
bmN0aW9uTmFtZSwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleHR1cmUpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBpZiAoZnVuY3Rpb25UeXBlID09IE5vdFRleFN1YkltYWdl
MkQpIHsKKyAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBo
ZWlnaHQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAy
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgLy8gRm9y
IFNvdXJjZUFycmF5QnVmZmVyVmlldywgZnVuY3Rpb24gdmFsaWRhdGVUZXhGdW5jRGF0YSgpIHdv
dWxkIGhhbmRsZSB3aGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBTZXR0YWJsZVRleEZvcm1hdAorICAg
ICAgICAvLyBieSBjaGVja2luZyBpZiB0aGUgQXJyYXlCdWZmZXJWaWV3IGlzIG51bGwgb3Igbm90
LgorICAgICAgICBpZiAoc291cmNlVHlwZSAhPSBTb3VyY2VBcnJheUJ1ZmZlclZpZXcpIHsKKyAg
ICAgICAgICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZv
cm1hdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFt
ZSwgZm9ybWF0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKCF2YWxp
ZGF0ZVNpemUoZnVuY3Rpb25OYW1lLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSBy
YW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KKyAgICAgICAgaWYgKHhvZmZz
ZXQgKyB3aWR0aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlv
bk5hbWUsICJiYWQgZGltZW5zaW9ucyIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0
YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRh
cmdldCwgbGV2ZWwpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2Yg
cmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAodGV4dHVyZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgIT0gZm9ybWF0IHx8
IHRleHR1cmUtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgIT0gdHlwZSkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJ0eXBlIGFuZCBmb3JtYXQgZG8gbm90IG1hdGNoIHRleHR1cmUiKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdp
ZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhJbWFn
ZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsQWxs
b3dlZCkKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1
YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMgPyBwaXhlbHMtPmJhc2VBZGRyZXNz
KCkgOiAwOworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKKyAgICBib29sIGNoYW5nZVVu
cGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIGlmIChkYXRhICYmIChtX3VucGFja0ZsaXBZIHx8
IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4
dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVtcERhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkYXRhID0gdGVtcERh
dGEuZGF0YSgpOworICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0K
KyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVs
U3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0ZXhJ
bWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLAorICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgZGF0YSwgZWMpOworICAg
IGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9y
ZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8
fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNl
SW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgp
LCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIDAsIDApKQorICAgICAgICByZXR1
cm47CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9
IHRydWU7CisgICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1h
dCBSR0JBOC4KKyAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBm
b3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJl
bXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmICghbV91bnBhY2tGbGlwWSAm
JiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhICYmIGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKQorICAg
ICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1f
Y29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFn
ZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4
dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwor
ICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBwaXhlbHMt
PndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgbmVlZENvbnZlcnNp
b24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgpLT5kYXRhKCksIGVjKTsKKyAgICBpZiAo
bV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShH
cmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwor
fQorCitQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3SW1h
Z2VJbnRvQnVmZmVyKEltYWdlKiBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgZGV2
aWNlU2NhbGVGYWN0b3IpCit7CisgICAgSW50U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQpOworICAg
IHNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIEltYWdlQnVmZmVyKiBidWYgPSBt
X2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7CisgICAgaWYgKCFidWYpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1P
UlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIAorICAgIEZsb2F0UmVjdCBzcmNSZWN0KEZsb2F0UG9pbnQoKSwgaW1h
Z2UtPnNpemUoKSk7CisgICAgRmxvYXRSZWN0IGRlc3RSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSk7
CisgICAgYnVmLT5jb250ZXh0KCktPmRyYXdJbWFnZShpbWFnZSwgQ29sb3JTcGFjZURldmljZVJH
QiwgZGVzdFJlY3QsIHNyY1JlY3QpOworICAgIHJldHVybiBidWYtPmNvcHlJbWFnZShJbWFnZUJ1
ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCog
aW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleEltYWdl
MkQiLCBpbWFnZSwgZWMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRyPEltYWdl
PiBpbWFnZUZvclJlbmRlciA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVy
KGltYWdlLT5yZW5kZXJlcigpKTsKKyAgICBpZiAoaW1hZ2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2Uo
KSkKKyAgICAgICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9y
UmVuZGVyLmdldCgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxKTsKKyAgICAK
KyAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQi
LCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVuZGVy
LT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3Jt
YXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERv
bUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVIVE1MQ2FudmFzRWxlbWVudCgidGV4SW1hZ2UyRCIsIGNhbnZhcywgZWMpIHx8ICF2YWxpZGF0
ZVRleEZ1bmMoInRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFz
RWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwg
Y2FudmFzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAgICAgICAgcmV0dXJu
OworICAgIAorICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRp
bmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIC8vIElmIHBvc3NpYmxlLCBjb3B5
IGZyb20gdGhlIGNhbnZhcyBlbGVtZW50IGRpcmVjdGx5IHRvIHRoZSB0ZXh0dXJlCisgICAgLy8g
dmlhIHRoZSBHUFUsIHdpdGhvdXQgYSByZWFkLWJhY2sgdG8gc3lzdGVtIG1lbW9yeS4KKyAgICAv
LworICAgIC8vIEZJWE1FOiByZXN0cmljdGlvbiBvZiAoUkdCIHx8IFJHQkEpL1VOU0lHTkVEX0JZ
VEUgc2hvdWxkIGJlIGxpZnRlZCB3aGVuCisgICAgLy8gSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRm
b3JtVGV4dHVyZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGZ1bGx5IGZ1bmN0aW9uYWwuCisgICAgaWYg
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEID09IHRhcmdldCAmJiB0ZXh0dXJlICYmIHR5
cGUgPT0gdGV4dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKQorICAgICAgICAmJiAoZm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBKSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7Cisg
ICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOworICAgICAgICBp
ZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxhdGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0
KCksIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBs
eUFscGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJ
bmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZh
cy0+aGVpZ2h0KCksIHR5cGUpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGNhbnZhcy0+Z2V0SW1h
Z2VEYXRhKCk7CisgICAgaWYgKGltYWdlRGF0YSkKKyAgICAgICAgdGV4SW1hZ2UyRCh0YXJnZXQs
IGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZURhdGEuZ2V0KCksIGVj
KTsKKyAgICBlbHNlCisgICAgICAgIHRleEltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGNhbnZhcy0+Y29waWVkSW1hZ2UoKSwgR3JhcGhpY3ND
b250ZXh0M0Q6Okh0bWxEb21DYW52YXMsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwgZWMpOworfQorCisjaWYgRU5BQkxFKFZJREVPKQorUGFzc1JlZlB0cjxJbWFnZT4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxl
bWVudCogdmlkZW8sIEJhY2tpbmdTdG9yZUNvcHkgYmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9u
Q29kZSYpCit7CisgICAgSW50U2l6ZSBzaXplKHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52
aWRlb0hlaWdodCgpKTsKKyAgICBJbWFnZUJ1ZmZlciogYnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNh
Y2hlLmltYWdlQnVmZmVyKHNpemUpOworICAgIGlmICghYnVmKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIs
ICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBJ
bnRSZWN0IGRlc3RSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAg
Ly8gRklYTUU6IFR1cm4gdGhpcyBpbnRvIGEgR1BVLUdQVSB0ZXh0dXJlIGNvcHkgaW5zdGVhZCBv
ZiBDUFUgcmVhZGJhY2suCisgICAgdmlkZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1
Zi0+Y29udGV4dCgpLCBkZXN0UmVjdCk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKGJhY2tp
bmdTdG9yZUNvcHkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRleElt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhJbWFnZTJEIiwgdmlkZW8sIGVj
KQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1h
Z2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCAwLCBmb3JtYXQs
IHR5cGUsIDAsIDApKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gR28gdGhyb3VnaCB0
aGUgZmFzdCBwYXRoIGRvaW5nIGEgR1BVLUdQVSB0ZXh0dXJlcyBjb3B5IHdpdGhvdXQgYSByZWFk
YmFjayB0byBzeXN0ZW0gbWVtb3J5IGlmIHBvc3NpYmxlLgorICAgIC8vIE90aGVyd2lzZSwgaXQg
d2lsbCBmYWxsIGJhY2sgdG8gdGhlIG5vcm1hbCBTVyBwYXRoLgorICAgIC8vIEZJWE1FOiBUaGUg
Y3VycmVudCByZXN0cmljdGlvbnMgcmVxdWlyZSB0aGF0IGZvcm1hdCBzaG91ZCBiZSBSR0Igb3Ig
UkdCQSwKKyAgICAvLyB0eXBlIHNob3VsZCBiZSBVTlNJR05FRF9CWVRFIGFuZCBsZXZlbCBzaG91
bGQgYmUgMC4gSXQgbWF5IGJlIGxpZnRlZCBpbiB0aGUgZnV0dXJlLgorICAgIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQs
IHRydWUpOworICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCA9PSB0YXJnZXQg
JiYgdGV4dHVyZQorICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0Ig
fHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKQorICAgICAgICAmJiB0eXBlID09
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgICYmICh0ZXh0dXJlLT5n
ZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
IHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwpKQorICAgICAgICAmJiAhbGV2ZWwp
IHsKKyAgICAgICAgaWYgKHZpZGVvLT5jb3B5VmlkZW9UZXh0dXJlVG9QbGF0Zm9ybVRleHR1cmUo
bV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwgbGV2ZWwsIHR5cGUsIGludGVybmFs
Zm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrRmxpcFkpKSB7CisgICAg
ICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpLCB0eXBlKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBOb3JtYWwg
cHVyZSBTVyBwYXRoLgorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFn
ZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKKyAgICBpZiAo
IWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlB
bHBoYSwgZWMpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6
dGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBw
YXJhbWYsIEdDM0RpbnQgcGFyYW1pLCBib29sIGlzRmxvYXQpCit7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMVGV4dHVyZSogdGV4
ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4UGFyYW1ldGVyIiwgdGFyZ2V0LCBmYWxzZSk7
CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Q6CisgICAgICAgIGlmICgoaXNGbG9hdCAmJiBw
YXJhbWYgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1mICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpSRVBFQVQpCisgICAgICAgICAgICB8fCAoIWlzRmxvYXQgJiYgcGFyYW1pICE9IEdy
YXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVQ
RUFUKSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpURVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmls
dGVyX2FuaXNvdHJvcGljCisgICAgICAgIGlmICghbV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9w
aWMpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIsIEVYVF90ZXh0
dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmIChpc0Zsb2F0KSB7CisgICAgICAgIHRleC0+c2V0UGFyYW1ldGVyZihwbmFtZSwgcGFy
YW1mKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHBh
cmFtZik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJpKHBuYW1lLCBw
YXJhbWkpOworICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwg
cGFyYW1pKTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4
UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFy
YW0pCit7CisgICAgdGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIHBhcmFtLCAwLCB0cnVlKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhQYXJhbWV0ZXJpKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCit7CisgICAgdGV4UGFy
YW1ldGVyKHRhcmdldCwgcG5hbWUsIDAsIHBhcmFtLCBmYWxzZSk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyREJhc2UoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gRklYTUU6
IEZvciBub3cgd2UgaWdub3JlIGFueSBlcnJvcnMgcmV0dXJuZWQKKyAgICBlYyA9IDA7CisgICAg
QVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVRleEZ1bmNQYXJh
bWV0ZXJzKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCAwLCBmb3JtYXQsIHR5cGUpKTsKKyAgICBBU1NFUlQodmFsaWRh
dGVTaXplKCJ0ZXhTdWJJbWFnZTJEIiwgeG9mZnNldCwgeW9mZnNldCkpOworICAgIEFTU0VSVCh2
YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJ0ZXhTdWJJbWFnZTJEIiwgZm9ybWF0KSk7CisgICAg
V2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhTdWJJbWFnZTJE
IiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBBU1NFUlQoKHhvZmZzZXQgKyB3
aWR0aCkgPj0gMCk7CisgICAgQVNTRVJUKCh5b2Zmc2V0ICsgaGVpZ2h0KSA+PSAwKTsKKyAgICBB
U1NFUlQodGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSA+PSAoeG9mZnNldCArIHdpZHRoKSk7
CisgICAgQVNTRVJUKHRleC0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2ZWwpID49ICh5b2Zmc2V0ICsg
aGVpZ2h0KSk7CisgICAgQVNTRVJUKHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZl
bCkgPT0gZm9ybWF0KTsKKyAgICBBU1NFUlQodGV4LT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09
IHR5cGUpOworICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zm
c2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNl
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNz
Q29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29s
IHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAg
ICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRy
YWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwg
bV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7
ICAKKyAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQoKSkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRl
eFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0
cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhh
T3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOworICAgIGNvbnN0IHZv
aWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsKKyAg
ICAKKyAgICBib29sIG5lZWRDb252ZXJzaW9uID0gdHJ1ZTsKKyAgICBpZiAodHlwZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBo
aWNzQ29udGV4dDNEOjpEYXRhRm9ybWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBICYmIGFscGhhT3AgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5n
ICYmICFmbGlwWSkKKyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsK
KyAgICAgICAgaWYgKCFtX2NvbnRleHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxE
YXRhLCBmb3JtYXQsIHR5cGUsIGZsaXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFn
ZUV4dHJhY3Rvci5pbWFnZVdpZHRoKCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGlt
YWdlRXh0cmFjdG9yLmltYWdlU291cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7CisgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkK
KyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNL
X0FMSUdOTUVOVCwgMSk7CisgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgZm9ybWF0LCB0
eXBlLCAgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IGltYWdlUGl4ZWxEYXRhLCBlYyk7
CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleFN1
YkltYWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51
bGxOb3RBbGxvd2VkKQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJE
IiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlQXJyYXlCdWZmZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkp
CisgICAgICAgIHJldHVybjsKKyAgICB2b2lkKiBkYXRhID0gcGl4ZWxzLT5iYXNlQWRkcmVzcygp
OworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsKKyAgICBib29sIGNoYW5nZVVucGFja0Fs
aWdubWVudCA9IGZhbHNlOworICAgIGlmIChkYXRhICYmIChtX3VucGFja0ZsaXBZIHx8IG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RU
ZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVt
cERhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBkYXRhID0gdGVtcERhdGEuZGF0
YSgpOworICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0KKyAgICBp
ZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0ZXhTdWJJbWFn
ZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBm
b3JtYXQsIHR5cGUsIGRhdGEsIGVjKTsKKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQor
ICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
QUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4
RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUltYWdlRGF0YSwgdGFy
Z2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAw
LCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7CisgICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRy
dWU7CisgICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFnZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBS
R0JBOC4KKyAgICAvLyBObyBjb252ZXJzaW9uIGlzIG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3Jt
YXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVEX0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVs
dGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgorICAgIGlmIChmb3JtYXQgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSAmJiAhbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKQorICAgICAg
ICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2UgeworICAgICAgICBpZiAoIW1fY29u
dGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMsIGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlw
WSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBkYXRhKSkgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFn
ZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICB9CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4
dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwor
ICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHBp
eGVscy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgZm9ybWF0LCB0eXBlLCBuZWVkQ29udmVy
c2lvbiA/IGRhdGEuZGF0YSgpIDogcGl4ZWxzLT5kYXRhKCktPmRhdGEoKSwgZWMpOworICAgIGlm
IChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVp
KEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dGV4U3ViSW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zm
c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFn
ZSwgZWMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZUZv
clJlbmRlciA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5pbWFnZUZvclJlbmRlcmVyKGltYWdlLT5y
ZW5kZXJlcigpKTsKKyAgICBpZiAoaW1hZ2VGb3JSZW5kZXItPmlzU1ZHSW1hZ2UoKSkKKyAgICAg
ICAgaW1hZ2VGb3JSZW5kZXIgPSBkcmF3SW1hZ2VJbnRvQnVmZmVyKGltYWdlRm9yUmVuZGVyLmdl
dCgpLCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAxKTsKKyAgICAKKyAgICBpZiAo
IWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhT
dWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBmb3JtYXQs
IGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAsIGZv
cm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3Jt
YXQsIHR5cGUsIGltYWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERv
bUltYWdlLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVt
IHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGNhbnZh
cywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhT
dWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0
LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9m
ZnNldCwgeW9mZnNldCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBSZWZQdHI8SW1hZ2VE
YXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdldEltYWdlRGF0YSgpOworICAgIGlmIChpbWFnZURh
dGEpCisgICAgICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgZm9ybWF0LCB0eXBlLCBpbWFnZURhdGEuZ2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAg
IHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1h
dCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERv
bUNhbnZhcywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9
CisKKyNpZiBFTkFCTEUoVklERU8pCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnRl
eFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZz
ZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1l
bnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhT
dWJJbWFnZTJEIiwgdmlkZW8sIGVjKQorICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhT
dWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0
LCBsZXZlbCwgZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQo
KSwgMCwgZm9ybWF0LCB0eXBlLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbywg
SW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKKyAgICBpZiAoIWltYWdlKQor
ICAgICAgICByZXR1cm47CisgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgR3JhcGhpY3NDb250ZXh0
M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhh
LCBlYyk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlm
b3JtMWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTFmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWYobG9j
YXRpb24tPmxvY2F0aW9uKCksIHgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnVuaWZvcm0xZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFy
YW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCAxKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+
bGVuZ3RoKCksIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rm
bG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNF
RF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAxKSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGludCB4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3Jh
bSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJ1bmlmb3JtMWkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dy
YW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoKGxvY2F0aW9uLT50
eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUo
KSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKSAmJiB4ID49IChpbnQpbV90ZXh0
dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpIiwgImludmFsaWQgdGV4dHVyZSB1bml0
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3Jt
MWkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9y
bVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2NhdGlvbiwgdiwgMSkpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1Q
TEVSX0NVQkUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHYtPmxlbmd0aCgp
OyArK2kpIHsKKyAgICAgICAgICAgIGlmICh2LT5kYXRhKClbaV0gPj0gc3RhdGljX2Nhc3Q8aW50
PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7CisgICAgICAgICAgICAgICAgTE9HKFdlYkdMLCAi
VGV4dHVyZSB1bml0IHNpemU9JXp1LCB2WyVkXT0lZC4gTG9jYXRpb24gdHlwZSA9ICUwNFguIiwg
bV90ZXh0dXJlVW5pdHMuc2l6ZSgpLCBpLCB2LT5kYXRhKClbaV0sIGxvY2F0aW9uLT50eXBlKCkp
OworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOworICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxl
bmd0aCgpLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50
KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYsIHNpemUsIDEpKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6U0FNUExFUl9DVUJFKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSk7ICsraSkgeworICAgICAgICAgICAgaWYgKCgoR0Mz
RGludCopdilbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7
CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg
IAorICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSwg
dik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJmKGNvbnN0
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1bmlmb3JtMmYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMmZ2IiwgbG9jYXRpb24sIHYsIDIpKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigp
LCB2LT5sZW5ndGgoKSAvIDIsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6dW5pZm9ybTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9uLCB2LCBz
aXplLCAyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTJm
dihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiog
bG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtMmkiLCAibG9jYXRp
b24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTJpdihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTJpdiIsIGxv
Y2F0aW9uLCB2LCAyKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5p
Zm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAyLCB2LT5kYXRhKCkp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0yaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1
bmlmb3JtMml2IiwgbG9jYXRpb24sIHYsIHNpemUsIDIpKQorICAgICAgICByZXR1cm47CisgICAg
CisgICAgbV9jb250ZXh0LT51bmlmb3JtMml2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8g
Miwgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTNmKGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9h
dCB5LCBHQzNEZmxvYXQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3Vy
cmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3Vy
cmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250
ZXh0LT51bmlmb3JtM2YobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQor
eworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2
LCAzKSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihs
b2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyAzLCB2LT5kYXRhKCkpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0z
ZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMykpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm0zZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2koY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGlu
dCB6LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJ1bmlmb3JtM2kiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0z
aShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9j
YXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCAzKSkKKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTNpdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgdi0+bGVuZ3RoKCkgLyAzLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRpb24sIHYs
IHNpemUsIDMpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0LT51bmlmb3Jt
M2l2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMywgdik7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZs
b2F0IHcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVuaWZvcm00ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3Jh
bSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9y
bTRmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3KTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwgNCkpCisg
ICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24t
PmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9j
YXRpb24sIHYsIHNpemUsIDQpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0
LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdik7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0Mz
RGludCB3LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3Jh
bSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sICJ1bmlmb3JtNGkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dy
YW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm00aShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeiwgdyk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRpdiIsIGxvY2F0aW9uLCB2LCA0KSkKKyAg
ICAgICAgcmV0dXJuOworICAgIAorICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGl2IiwgbG9jYXRp
b24sIHYsIHNpemUsIDQpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9jb250ZXh0LT51
bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdik7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBh
cmFtZXRlcnMoInVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkK
KyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dW5pZm9ybU1hdHJpeDJmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwg
R0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4MmZ2IiwgbG9jYXRp
b24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgNCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRl
eHQtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyA0LCB0cmFu
c3Bvc2UsIHYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1N
YXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9jYXRp
b24sIHRyYW5zcG9zZSwgdiwgOSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gOSwgdHJh
bnNwb3NlLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnVuaWZvcm1NYXRyaXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5p
Zm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQorICAgICAg
ICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplIC8gOSwgdHJhbnNwb3NlLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5p
Zm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIDE2KSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24o
KSwgdi0+bGVuZ3RoKCkgLyAxNiwgdHJhbnNwb3NlLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlm
b3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bv
c2UsIHYsIHNpemUsIDE2KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9y
bU1hdHJpeDRmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIHYp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnVzZVByb2dyYW0oV2ViR0xQ
cm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJ1
c2VQcm9ncmFtIiwgcHJvZ3JhbSwgZGVsZXRlZCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAo
ZGVsZXRlZCkKKyAgICAgICAgcHJvZ3JhbSA9IDA7CisgICAgaWYgKHByb2dyYW0gJiYgIXByb2dy
YW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1c2VQcm9ncmFtIiwgInByb2dyYW0gbm90
IHZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKG1fY3VycmVudFByb2dy
YW0gIT0gcHJvZ3JhbSkgeworICAgICAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSkKKyAgICAgICAg
ICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSk7Cisg
ICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFtOworICAgICAgICBtX2NvbnRleHQtPnVz
ZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKKyAgICAgICAgaWYgKHByb2dyYW0pCisg
ICAgICAgICAgICBwcm9ncmFtLT5vbkF0dGFjaGVkKCk7CisgICAgfQorfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dy
YW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgidmFsaWRh
dGVQcm9ncmFtIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnZh
bGlkYXRlUHJvZ3JhbShvYmplY3RPclplcm8ocHJvZ3JhbSkpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxv
YXQgdjApCit7CisgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjFmIiwgaW5kZXgs
IDEsIHYwLCAwLjBmLCAwLjBmLCAxLjBmKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikK
K3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGluZGV4LCB2LCAx
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIxZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgdmVy
dGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIxZnYiLCBpbmRleCwgdiwgc2l6ZSwgMSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMmYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQoreworICAgIHZlcnRleEF0dHJp
YmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZiIsIGluZGV4LCAyLCB2MCwgdjEsIDAuMGYsIDEuMGYpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgi
dmVydGV4QXR0cmliMmZ2IiwgaW5kZXgsIHYsIDIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2
LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJp
YjJmdiIsIGluZGV4LCB2LCBzaXplLCAyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYwLCBHQzNE
ZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgidmVydGV4
QXR0cmliM2YiLCBpbmRleCwgMywgdjAsIHYxLCB2MiwgMS4wZik7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9h
dDMyQXJyYXkqIHYpCit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYi
LCBpbmRleCwgdiwgMyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVy
dGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXpl
KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliM2Z2IiwgaW5kZXgsIHYs
IHNpemUsIDMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0
dHJpYjRmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZs
b2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0
dHJpYjRmIiwgaW5kZXgsIDQsIHYwLCB2MSwgdjIsIHYzKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJB
cnJheSogdikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjRmdiIsIGlu
ZGV4LCB2LCA0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhB
dHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7
CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZnYiLCBpbmRleCwgdiwgc2l6
ZSwgNCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmli
UG9pbnRlcihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNE
Ym9vbGVhbiBub3JtYWxpemVkLCBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hP
UlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2
ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gNCB8fCBzdHJpZGUgPCAwIHx8
IHN0cmlkZSA+IDI1NSB8fCBvZmZzZXQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIs
ICJiYWQgc2l6ZSwgc3RyaWRlIG9yIG9mZnNldCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIGlmICghbV9ib3VuZEFycmF5QnVmZmVyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50
ZXIiLCAibm8gYm91bmQgQVJSQVlfQlVGRkVSIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgLy8gRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIGJvdW5kIGJ1ZmZlciBj
YW4gaG9sZCwgZ2l2ZW4gdGhlIG9mZnNldCwgc2l6ZSwgdHlwZSBhbmQgc3RyaWRlCisgICAgdW5z
aWduZWQgdHlwZVNpemUgPSBzaXplSW5CeXRlcyh0eXBlKTsKKyAgICBpZiAoIXR5cGVTaXplKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgImludmFsaWQgdHlwZSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmICgoc3RyaWRlICUgdHlwZVNpemUpIHx8IChzdGF0aWNfY2FzdDxH
QzNEaW50cHRyPihvZmZzZXQpICUgdHlwZVNpemUpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBv
aW50ZXIiLCAic3RyaWRlIG9yIG9mZnNldCBub3QgdmFsaWQgZm9yIHR5cGUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBHQzNEc2l6ZWkgYnl0ZXNQZXJFbGVtZW50ID0gc2l6ZSAqIHR5
cGVTaXplOworICAgIAorICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0
cmliU3RhdGUoaW5kZXgsIGJ5dGVzUGVyRWxlbWVudCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwg
c3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBtX2JvdW5kQXJyYXlCdWZm
ZXIpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlw
ZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2aWV3cG9ydChHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZh
bGlkYXRlU2l6ZSgidmlld3BvcnQiLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fY29udGV4dC0+dmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Zm9yY2VMb3N0Q29udGV4dChXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpMb3N0Q29udGV4dE1vZGUgbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImxvc2VDb250ZXh0IiwgImNvbnRleHQgYWxyZWFk
eSBsb3N0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9jb250ZXh0R3Jv
dXAtPmxvc2VDb250ZXh0R3JvdXAobW9kZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6bG9zZUNvbnRleHRJbXBsKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Okxvc3RD
b250ZXh0TW9kZSBtb2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0KCkpCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICBtX2NvbnRleHRMb3N0
TW9kZSA9IG1vZGU7CisgICAgCisgICAgaWYgKG1vZGUgPT0gUmVhbExvc3RDb250ZXh0KSB7Cisg
ICAgICAgIC8vIEluZm9ybSB0aGUgZW1iZWRkZXIgdGhhdCBhIGxvc3QgY29udGV4dCB3YXMgcmVj
ZWl2ZWQuIEluIHJlc3BvbnNlLCB0aGUgZW1iZWRkZXIgbWlnaHQKKyAgICAgICAgLy8gZGVjaWRl
IHRvIHRha2UgYWN0aW9uIHN1Y2ggYXMgYXNraW5nIHRoZSB1c2VyIGZvciBwZXJtaXNzaW9uIHRv
IHVzZSBXZWJHTCBhZ2Fpbi4KKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGNhbnZhcygpLT5k
b2N1bWVudCgpLmZyYW1lKCkpCisgICAgICAgICAgICBmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCku
ZGlkTG9zZVdlYkdMQ29udGV4dChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhp
Y3NSZXNldFN0YXR1c0FSQigpKTsKKyAgICB9CisgICAgCisgICAgZGV0YWNoQW5kUmVtb3ZlQWxs
T2JqZWN0cygpOworICAgIAorICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgLy8g
TWFrZSBhYnNvbHV0ZWx5IHN1cmUgd2UgZG8gbm90IHJlZmVyIHRvIGFuIGFscmVhZHktZGVsZXRl
ZCB0ZXh0dXJlIG9yIGZyYW1lYnVmZmVyLgorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRl
eHR1cmUyREJpbmRpbmcoMCk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZm
ZXJCaW5kaW5nKDApOworICAgIH0KKyAgICAKKyAgICAvLyBUaGVyZSBpcyBubyBkaXJlY3Qgd2F5
IHRvIGNsZWFyIGVycm9ycyBmcm9tIGEgR0wgaW1wbGVtZW50YXRpb24gYW5kCisgICAgLy8gbG9v
cGluZyB1bnRpbCBnZXRFcnJvcigpIGJlY29tZXMgTk9fRVJST1IgbWlnaHQgY2F1c2UgYW4gaW5m
aW5pdGUgbG9vcCBpZgorICAgIC8vIHRoZSBkcml2ZXIgb3IgY29udGV4dCBpbXBsZW1lbnRhdGlv
biBoYWQgYSBidWcuIFNvLCBsb29wIGEgcmVhc29uYWJseQorICAgIC8vIGxhcmdlIG51bWJlciBv
ZiB0aW1lcyB0byBjbGVhciBhbnkgZXhpc3RpbmcgZXJyb3JzLgorICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+Z2V0RXJyb3IoKSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgQ29uc29sZURpc3BsYXlQcmVmZXJlbmNlIGRpc3BsYXkgPSAobW9kZSA9PSBSZWFsTG9zdENv
bnRleHQpID8gRGlzcGxheUluQ29uc29sZTogRG9udERpc3BsYXlJbkNvbnNvbGU7CisgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTCwgImxv
c2VDb250ZXh0IiwgImNvbnRleHQgbG9zdCIsIGRpc3BsYXkpOworICAgIAorICAgIC8vIERvbid0
IGFsbG93IHJlc3RvcmF0aW9uIHVubGVzcyB0aGUgY29udGV4dCBsb3N0IGV2ZW50IGhhcyBib3Ro
IGJlZW4KKyAgICAvLyBkaXNwYXRjaGVkIGFuZCBpdHMgZGVmYXVsdCBiZWhhdmlvciBwcmV2ZW50
ZWQuCisgICAgbV9yZXN0b3JlQWxsb3dlZCA9IGZhbHNlOworICAgIAorICAgIC8vIEFsd2F5cyBk
ZWZlciB0aGUgZGlzcGF0Y2ggb2YgdGhlIGNvbnRleHQgbG9zdCBldmVudCwgdG8gaW1wbGVtZW50
CisgICAgLy8gdGhlIHNwZWMgYmVoYXZpb3Igb2YgcXVldWVpbmcgYSB0YXNrLgorICAgIG1fZGlz
cGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmZvcmNlUmVzdG9yZUNvbnRleHQoKQoreworICAgIGlm
ICghaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInJlc3RvcmVDb250ZXh0Iiwg
ImNvbnRleHQgbm90IGxvc3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBp
ZiAoIW1fcmVzdG9yZUFsbG93ZWQpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09
IFN5bnRoZXRpY0xvc3RDb250ZXh0KQorICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29u
dGV4dCByZXN0b3JhdGlvbiBub3QgYWxsb3dlZCIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIAorICAgIGlmICghbV9yZXN0b3JlVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9yZXN0
b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCitQbGF0Zm9ybUxheWVyKiBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKCFp
c0NvbnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgPyBtX2NvbnRl
eHQtPnBsYXRmb3JtTGF5ZXIoKSA6IDA7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6cmVtb3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCit7Cisg
ICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAgcmV0dXJuOworICAg
IAorICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3Qob2JqZWN0KTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjphZGRTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmpl
Y3QqIG9iamVjdCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOworICAgIG1f
Y29udGV4dEdyb3VwLT5hZGRPYmplY3Qob2JqZWN0KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpyZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2Jq
ZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJl
dHVybjsKKyAgICAKKyAgICBtX2NvbnRleHRPYmplY3RzLnJlbW92ZShvYmplY3QpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmFkZENvbnRleHRPYmplY3QoV2ViR0xDb250
ZXh0T2JqZWN0KiBvYmplY3QpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsK
KyAgICBtX2NvbnRleHRPYmplY3RzLmFkZChvYmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKQoreworICAgIGlmICht
X2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICB3
aGlsZSAobV9jb250ZXh0T2JqZWN0cy5zaXplKCkgPiAwKSB7CisgICAgICAgIEhhc2hTZXQ8V2Vi
R0xDb250ZXh0T2JqZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0T2JqZWN0cy5iZWdpbigp
OworICAgICAgICAoKml0KS0+ZGV0YWNoQ29udGV4dCgpOworICAgIH0KK30KKworYm9vbCBXZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlOjpoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdAoreworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpzdG9w
KCkKK3sKKyAgICBpZiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lSZXNv
bHV0aW9uKSB7CisgICAgICAgIGZvcmNlTG9zdENvbnRleHQoU3ludGhldGljTG9zdENvbnRleHQp
OworICAgICAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICB9Cit9CisKK1dlYkdM
R2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb29sZWFuUGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQoreworICAgIEdDM0Rib29sZWFuIHZhbHVlID0gMDsKKyAgICBtX2NvbnRl
eHQtPmdldEJvb2xlYW52KHBuYW1lLCAmdmFsdWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8o
c3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkK
K3sKKyAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSykg
eworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KDAsIDApOworICAgIH0KKyAgICBHQzNEYm9vbGVhbiB2YWx1ZVs0XSA9IHswfTsKKyAgICBtX2Nv
bnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CisgICAgYm9vbCBib29sVmFsdWVbNF07
CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IDQ7ICsraWkpCisgICAgICAgIGJvb2xWYWx1ZVtp
aV0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1ZVtpaV0pOworICAgIHJldHVybiBXZWJHTEdldElu
Zm8oYm9vbFZhbHVlLCA0KTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OmdldEZsb2F0UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RmbG9h
dCB2YWx1ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRGbG9hdHYocG5hbWUsICZ2YWx1ZSk7Cisg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjpnZXRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7Cisg
ICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwg
JnZhbHVlKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKK30KKworV2ViR0xHZXRJ
bmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFVuc2lnbmVkSW50UGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYocG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odmFsdWUpKTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBwbmFt
ZSkKK3sKKyAgICBHQzNEZmxvYXQgdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250ZXh0LT5nZXRG
bG9hdHYocG5hbWUsIHZhbHVlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAgIHN3aXRj
aCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX1BPSU5UX1NJ
WkVfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJRFRI
X1JBTkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdFOgorICAgICAg
ICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORF9DT0xPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVBUl9W
QUxVRToKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Cit9CisKK1dlYkdMR2V0SW5m
byBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKEdD
M0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250
ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IDA7
CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9W
SUVXUE9SVF9ESU1TOgorICAgICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX0JPWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpWSUVXUE9SVDoKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworfQorCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGJvb2wgcHJlcGFyZVRvRHJhdykKK3sKKyAgICBib29s
IHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOworICAgIFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVu
c2lvbkZsYWcgZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4
dGVuc2lvbkZsYWc+KChtX29lc1RleHR1cmVGbG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4
dHVyZUV4dGVuc2lvbkZsb2F0TGluZWFyRW5hYmxlZCA6IDApIHwgKG1fb2VzVGV4dHVyZUhhbGZG
bG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkhhbGZGbG9hdExpbmVh
ckVuYWJsZWQgOiAwKSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbV90
ZXh0dXJlVW5pdHMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGlmICgobV90ZXh0dXJlVW5pdHNb
aWldLnRleHR1cmUyREJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRp
bmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkKKyAgICAgICAgICAgIHx8ICht
X3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRz
W2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNp
b25zKSkpIHsKKyAgICAgICAgICAgIGlmIChpaSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7Cisg
ICAgICAgICAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlpKTsKKyAgICAgICAgICAg
ICAgICByZXNldEFjdGl2ZVVuaXQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNl
dEFjdGl2ZVVuaXQpIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUo
aWkpOworICAgICAgICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXgyRDsKKyAgICAgICAgICAgIFdlYkdM
VGV4dHVyZSogdGV4Q3ViZU1hcDsKKyAgICAgICAgICAgIGlmIChwcmVwYXJlVG9EcmF3KSB7Cisg
ICAgICAgICAgICAgICAgU3RyaW5nIG1zZyhTdHJpbmcoInRleHR1cmUgYm91bmQgdG8gdGV4dHVy
ZSB1bml0ICIpICsgU3RyaW5nOjpudW1iZXIoaWkpCisgICAgICAgICAgICAgICAgICAgICsgIiBp
cyBub3QgcmVuZGVyYWJsZS4gSXQgbWF5YmUgbm9uLXBvd2VyLW9mLTIgYW5kIGhhdmUgaW5jb21w
YXRpYmxlIHRleHR1cmUgZmlsdGVyaW5nIG9yIGlzIG5vdCAndGV4dHVyZSBjb21wbGV0ZScsIgor
ICAgICAgICAgICAgICAgICAgICArICIgb3IgaXQgaXMgYSBmbG9hdC9oYWxmLWZsb2F0IHR5cGUg
d2l0aCBsaW5lYXIgZmlsdGVyaW5nIGFuZCB3aXRob3V0IHRoZSByZWxldmFudCBmbG9hdC9oYWxm
LWZsb2F0IGxpbmVhciBleHRlbnNpb24gZW5hYmxlZC4iKTsKKyAgICAgICAgICAgICAgICBwcmlu
dEdMV2FybmluZ1RvQ29uc29sZShmdW5jdGlvbk5hbWUsIG1zZy51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgICAgICB0ZXgyRCA9IG1fYmxhY2tUZXh0dXJlMkQuZ2V0KCk7CisgICAgICAgICAg
ICAgICAgdGV4Q3ViZU1hcCA9IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC5nZXQoKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGV4MkQgPSBtX3RleHR1cmVVbml0c1tpaV0u
dGV4dHVyZTJEQmluZGluZy5nZXQoKTsKKyAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV90
ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAm
JiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0
dXJlKGV4dGVuc2lvbnMpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0ZXgyRCkpOworICAg
ICAgICAgICAgaWYgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYg
bV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tU
ZXh0dXJlKGV4dGVuc2lvbnMpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG9iamVjdE9yWmVybyh0ZXhD
dWJlTWFwKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHJlc2V0QWN0aXZlVW5pdCkKKyAg
ICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0
dXJlczF4MSgpCit7CisgICAgdW5zaWduZWQgY2hhciBibGFja1tdID0gezAsIDAsIDAsIDI1NX07
CisgICAgbV9ibGFja1RleHR1cmUyRCA9IGNyZWF0ZVRleHR1cmUoKTsKKyAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2JsYWNrVGV4dHVy
ZTJELT5vYmplY3QoKSk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCk7CisgICAgbV9ibGFja1RleHR1
cmVDdWJlTWFwID0gY3JlYXRlVGV4dHVyZSgpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG1fYmxhY2tUZXh0dXJlQ3ViZU1h
cC0+b2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxh
Y2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT50
ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1os
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOworICAg
IG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVAsIDApOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmlzVGV4SW50ZXJu
YWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoR0MzRGVudW0gdGV4SW50ZXJuYWxG
b3JtYXQsIEdDM0RlbnVtIGNvbG9yQnVmZmVyRm9ybWF0KQoreworICAgIHVuc2lnbmVkIG5lZWQg
PSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdCh0ZXhJbnRlcm5hbEZv
cm1hdCk7CisgICAgdW5zaWduZWQgaGF2ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVs
Qml0c0J5Rm9ybWF0KGNvbG9yQnVmZmVyRm9ybWF0KTsKKyAgICByZXR1cm4gKG5lZWQgJiBoYXZl
KSA9PSBuZWVkOworfQorCitHQzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRC
b3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKQoreworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmlu
ZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBt
X2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsKKyAgICBpZiAobV9h
dHRyaWJ1dGVzLmFscGhhKQorICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7
CisgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7Cit9CisKK2ludCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKQoreworICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisg
ICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJXaWR0aCgp
OworICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53
aWR0aCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7
Cit9CisKK2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpnZXRCb3VuZEZyYW1lYnVmZmVy
SGVpZ2h0KCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICByZXR1cm4gbV9mcmFtZWJ1ZmZlckJpbmRpbmct
PmdldENvbG9yQnVmZmVySGVpZ2h0KCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1f
ZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpIDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZy
YW1lYnVmZmVyU2l6ZSgpLmhlaWdodCgpOworfQorCitXZWJHTFRleHR1cmUqIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQorewor
ICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IG51bGxwdHI7CisgICAgc3dpdGNoICh0YXJnZXQp
IHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICB0ZXh0
dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
Zy5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgIGlmICghdXNlU2l4RW51bXNG
b3JDdWJlTWFwKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0
Iik7CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICB0ZXh0
dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBC
aW5kaW5nLmdldCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQOgorICAgICAgICBpZiAodXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICB0ZXh0dXJlID0gbV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHRleHR1cmUgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBp
ZiAoIXRleHR1cmUpCisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gdGV4dHVyZSIpOworICAgIHJl
dHVybiB0ZXh0dXJlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlk
YXRlTG9jYXRpb25MZW5ndGgoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcm
IHN0cmluZykKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoID0g
MjU2OworICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJsb2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVNpemUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEaW50IHgsIEdDM0RpbnQgeSkKK3sKKyAgICBpZiAoeCA8IDAgfHwgeSA8IDApIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgInNpemUgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVTdHJpbmcoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmlu
ZykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7
CisgICAgICAgIGlmICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgInN0cmluZyBub3QgQVNDSUkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50
IGxldmVsKQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0I6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlm
IChtX3dlYmdsRGVwdGhUZXh0dXJlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0cyBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUOgorICAgIGNhc2UgRXh0ZW5z
aW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoKGZvcm1h
dCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUIHx8IGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNS
R0JfQUxQSEFfRVhUKQorICAgICAgICAgICAgJiYgbV9leHRzUkdCKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5T
SUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQ6CisgICAgICAgIGlmIChtX29lc1RleHR1cmVGbG9hdCkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9B
VF9PRVM6CisgICAgICAgIGlmIChtX29lc1RleHR1cmVIYWxmRmxvYXQpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfODoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAgICAgaWYgKG1fd2ViZ2xE
ZXB0aFRleHR1cmUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB0ZXh0dXJlIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgCisgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvbWJpbmF0aW9uIG9m
IGZvcm1hdCBhbmQgdHlwZSBpcyBzdXBwb3J0ZWQuCisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpMVU1JTkFOQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFX0FM
UEhBOgorICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RQorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKKyAgICAg
ICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgZm9ybWF0Iik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0VY
VDoKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUK
KyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
XzVfNl81CisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAor
ICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMp
IHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0IgZm9ybWF0
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICBjYXNlIEV4dGVuc2lvbnMz
RDo6U1JHQl9BTFBIQV9FWFQ6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF80XzRfNF80CisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xCisgICAgICAgICAgICAmJiB0eXBlICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
aW52YWxpZCB0eXBlIGZvciBSR0JBIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0NPTVBPTkVOVDoKKyAgICAgICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdC4gREVQVEhfQ09NUE9ORU5UIG5vdCBl
bmFibGVkIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUCisgICAgICAgICAg
ICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGxl
dmVsID4gMCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJlIDAgZm9y
IERFUFRIX0NPTVBPTkVOVCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9TVEVOQ0lMOgorICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1cmUpIHsKKyAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LiBERVBUSF9TVEVOQ0lMIG5vdCBlbmFibGVkIik7
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84KSB7CisgICAgICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQVEhfU1RFTkNJTCBmb3JtYXQiKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGV2ZWwgPiAw
KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhf
U1RFTkNJTCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVsIDwg
MCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJEOgorICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhUZXh0dXJlTGV2ZWwp
IHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAg
ICAgaWYgKGxldmVsID49IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IG9ubHkgY2hlY2tzIGlmIGxldmVsIGlzIGxlZ2FsLCBzbyB3ZSByZXR1cm4gdHJ1ZSBhbmQgZG9u
J3QKKyAgICAvLyBnZW5lcmF0ZSBJTlZBTElEX0VOVU0gaWYgdGFyZ2V0IGlzIGlsbGVnYWwuCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVUZXhGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4RnVu
Y1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwg
R0MzRGVudW0gdHlwZSkKK3sKKyAgICAvLyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUg
dGhlIGZvcm1hdCBhbmQgdHlwZSBjb21iaW5hdGlvbi4KKyAgICAvLyBUaGUgdGV4SW1hZ2UyRCBl
bnRyeSBwb2ludHMgdGFraW5nIEhUTUxJbWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKKyAgICAvLyB0
ZW1wb3JhcnkgZGF0YSBiYXNlZCBvbiB0aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxl
Z2FsLgorICAgIGlmICghdmFsaWRhdGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUs
IGZvcm1hdCwgdHlwZSwgbGV2ZWwpIHx8ICF2YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5jdGlvbk5h
bWUsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaWYg
KHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBo
ZWlnaHQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgR0Mz
RGludCBtYXhUZXh0dXJlU2l6ZUZvckxldmVsID0gcG93KDIuMCwgbV9tYXhUZXh0dXJlTGV2ZWwg
LSAxIC0gbGV2ZWwpOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRDoKKyAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNpemVG
b3JMZXZlbCB8fCBoZWlnaHQgPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgorICAgICAgICBp
ZiAoZnVuY3Rpb25UeXBlICE9IFRleFN1YkltYWdlMkQgJiYgd2lkdGggIT0gaGVpZ2h0KSB7Cisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1hcCIpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIE5vIG5lZWQgdG8g
Y2hlY2sgaGVpZ2h0IGhlcmUuIEZvciB0ZXhJbWFnZSB3aWR0aCA9PSBoZWlnaHQuCisgICAgICAg
IC8vIEZvciB0ZXhTdWJJbWFnZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB3aGVuIGNoZWNraW5nIHlv
ZmZzZXQgKyBoZWlnaHQgaXMgaW4gcmFuZ2UuCisgICAgICAgIGlmICh3aWR0aCA+IG1heFRleHR1
cmVTaXplRm9yTGV2ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQg
b3V0IG9mIHJhbmdlIGZvciBjdWJlIG1hcCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwg
ImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisg
ICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCkgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIAorICAgIGlmIChib3JkZXIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImJvcmRlciAhPSAw
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVUZXhGdW5jRGF0
YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2ZWwsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcq
IHBpeGVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOdWxsRGlzcG9zaXRpb24gZGlzcG9zaXRpb24pCit7CisgICAgaWYgKCFwaXhlbHMpIHsK
KyAgICAgICAgaWYgKGRpc3Bvc2l0aW9uID09IE51bGxBbGxvd2VkKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBwaXhlbHMiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICAKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5
cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5cGUsIGxldmVsKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZv
cm1hdCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICBpZiAo
cGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKKyAgICAgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCAidHlwZSBVTlNJR05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4
QXJyYXkiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAg
IGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAidHlwZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5v
dCBVaW50MTZBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNf
dGV4dHVyZV9mbG9hdAorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBl
RmxvYXQzMikgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJh
eUJ1ZmZlclZpZXcgbm90IEZsb2F0MzJBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkhBTEZfRkxPQVRfT0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgICAgIC8vIEFz
IHBlciB0aGUgc3BlY2lmaWNhdGlvbiwgQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSBudWxsIHdo
ZW4KKyAgICAgICAgLy8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBpcyBlbmFibGVkLgorICAgICAg
ICBpZiAocGl4ZWxzKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgSEFMRl9GTE9B
VF9PRVMgYnV0IEFycmF5QnVmZmVyVmlldyBpcyBub3QgTlVMTCIpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCB0b3Rh
bEJ5dGVzUmVxdWlyZWQ7CisgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJ
bWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGln
bm1lbnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQsIDApOworICAgIGlmIChlcnJvciAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3Is
IGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxC
eXRlc1JlcXVpcmVkKSB7CisgICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKSB7Cisg
ICAgICAgICAgICBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9y
bWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKKyAg
ICAgICAgICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA9PSB0b3RhbEJ5dGVzUmVxdWlyZWQp
IHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmln
IGVub3VnaCBmb3IgcmVxdWVzdCB3aXRoIFVOUEFDS19BTElHTk1FTlQgPiAxIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ZnVuY3Rpb25OYW1lLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0
Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9y
bWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICByZXR1cm4gbV9jb21wcmVzc2VkVGV4dHVyZUZv
cm1hdHMuY29udGFpbnMoZm9ybWF0KTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlOjp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscykKK3sKKyAgICBpZiAoIXBpeGVscykg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgCisgICAgdW5zaWduZWQgYnl0ZXNSZXF1aXJlZCA9IDA7CisgICAgCisgICAgc3dpdGNo
IChmb3JtYXQpIHsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19E
WFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhU
MV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQl9BTUQ6Cisg
ICAgICAgIHsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OworICAgICAgICBjb25z
dCBpbnQga0Jsb2NrV2lkdGggPSA0OworICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0g
NDsKKyAgICAgICAgaW50IG51bUJsb2Nrc0Fjcm9zcyA9ICh3aWR0aCArIGtCbG9ja1dpZHRoIC0g
MSkgLyBrQmxvY2tXaWR0aDsKKyAgICAgICAgaW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsg
a0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxvY2tIZWlnaHQ7CisgICAgICAgIGJ5dGVzUmVxdWlyZWQg
PSBudW1CbG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3duICoga0Jsb2NrU2l6ZTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JB
X1MzVENfRFhUM19FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9T
M1RDX0RYVDVfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JB
X0VYUExJQ0lUX0FMUEhBX0FNRDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9B
VENfUkdCQV9JTlRFUlBPTEFURURfQUxQSEFfQU1EOgorICAgICAgICB7CisgICAgICAgIGNvbnN0
IGludCBrQmxvY2tTaXplID0gMTY7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7
CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OworICAgICAgICBpbnQgbnVtQmxv
Y2tzQWNyb3NzID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOworICAg
ICAgICBpbnQgbnVtQmxvY2tzRG93biA9IChoZWlnaHQgKyBrQmxvY2tIZWlnaHQgLSAxKSAvIGtC
bG9ja0hlaWdodDsKKyAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51
bUJsb2Nrc0Rvd24gKiBrQmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1HOgorICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lNRzoKKyAg
ICAgICAgeworICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7CisgICAgICAgIGNvbnN0
IGludCBrQmxvY2tXaWR0aCA9IDg7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tIZWlnaHQgPSA4
OworICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdpZHRoLCBrQmxvY2tXaWR0aCkg
KiBzdGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiA0ICsgNykgLyBrQmxvY2tTaXplOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKKyAgICAgICAgeworICAgICAgICBjb25zdCBpbnQg
a0Jsb2NrU2l6ZSA9IDg7CisgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDE2OworICAg
ICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gODsKKyAgICAgICAgYnl0ZXNSZXF1aXJlZCA9
IChzdGQ6Om1heCh3aWR0aCwga0Jsb2NrV2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tI
ZWlnaHQpICogMiArIDcpIC8ga0Jsb2NrU2l6ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdCIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIAorICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgo
KSAhPSBieXRlc1JlcXVpcmVkKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlC
dWZmZXJWaWV3IGlzIG5vdCBjb3JyZWN0IGZvciBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAg
c3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0Jf
UzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1Mz
VENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RD
X0RYVDNfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19E
WFQ1X0VYVDogeworICAgICAgICBjb25zdCBHQzNEc2l6ZWkga0Jsb2NrV2lkdGggPSA0OworICAg
ICAgICBjb25zdCBHQzNEc2l6ZWkga0Jsb2NrSGVpZ2h0ID0gNDsKKyAgICAgICAgY29uc3QgR0Mz
RGludCBtYXhUZXh0dXJlU2l6ZSA9IHRhcmdldCA/IG1fbWF4VGV4dHVyZVNpemUgOiBtX21heEN1
YmVNYXBUZXh0dXJlU2l6ZTsKKyAgICAgICAgY29uc3QgR0MzRHNpemVpIG1heENvbXByZXNzZWRE
aW1lbnNpb24gPSBtYXhUZXh0dXJlU2l6ZSA+PiBsZXZlbDsKKyAgICAgICAgYm9vbCB3aWR0aFZh
bGlkID0gKGxldmVsICYmIHdpZHRoID09IDEpIHx8IChsZXZlbCAmJiB3aWR0aCA9PSAyKSB8fCAo
ISh3aWR0aCAlIGtCbG9ja1dpZHRoKSAmJiB3aWR0aCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9u
KTsKKyAgICAgICAgYm9vbCBoZWlnaHRWYWxpZCA9IChsZXZlbCAmJiBoZWlnaHQgPT0gMSkgfHwg
KGxldmVsICYmIGhlaWdodCA9PSAyKSB8fCAoIShoZWlnaHQgJSBrQmxvY2tIZWlnaHQpICYmIGhl
aWdodCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9uKTsKKyAgICAgICAgaWYgKCF3aWR0aFZhbGlk
IHx8ICFoZWlnaHRWYWxpZCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBo
ZWlnaHQgaW52YWxpZCBmb3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9u
czNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKKyAgICAgICAgLy8gSGVpZ2h0
IGFuZCB3aWR0aCBtdXN0IGJlIHBvd2VycyBvZiAyLgorICAgICAgICBpZiAoKHdpZHRoICYgKHdp
ZHRoIC0gMSkpIHx8IChoZWlnaHQgJiAoaGVpZ2h0IC0gMSkpKSB7CisgICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBpbnZhbGlkIGZvciBsZXZlbCIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVDb21wcmVzc2VkVGV4U3ViRGltZW5zaW9ucyhjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIFdlYkdMVGV4dHVyZSogdGV4KQor
eworICAgIGlmICh4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAieG9mZnNldCBvciB5b2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIAorICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVT
U0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0g
NDsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgIGlmICgoeG9m
ZnNldCAlIGtCbG9ja1dpZHRoKSB8fCAoeW9mZnNldCAlIGtCbG9ja0hlaWdodCkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IG5vdCBtdWx0aXBsZSBvZiA0
Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHdp
ZHRoIC0geG9mZnNldCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKKyAgICAgICAgICAg
IHx8IGhlaWdodCAtIHlvZmZzZXQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIpOworICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2YWxpZGF0
ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZlbCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0KTsKKyAgICB9CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBS
RVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01Q
UkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzogeworICAgICAgICBpZiAoeG9mZnNldCB8fCB5
b2Zmc2V0KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgYW5kIHlvZmZzZXQg
bXVzdCBiZSB6ZXJvIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHdpZHRoICE9IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKKyAgICAgICAg
ICAgIHx8IGhlaWdodCAhPSB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2ggZXhpc3RpbmcgbGV2ZWwi
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
dmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2
ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVEcmF3TW9kZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1v
ZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UE9JTlRTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfU1RSSVA6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9MT09QOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkxJTkVTOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTjoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpUUklBTkdMRVM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZHJhdyBtb2RlIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVTdGVuY2lsU2V0dGluZ3MoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lKQoreworICAgIGlm
IChtX3N0ZW5jaWxNYXNrICE9IG1fc3RlbmNpbE1hc2tCYWNrIHx8IG1fc3RlbmNpbEZ1bmNSZWYg
IT0gbV9zdGVuY2lsRnVuY1JlZkJhY2sgfHwgbV9zdGVuY2lsRnVuY01hc2sgIT0gbV9zdGVuY2ls
RnVuY01hc2tCYWNrKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZnJvbnQgYW5kIGJhY2sgc3Rl
bmNpbHMgc2V0dGluZ3MgZG8gbm90IG1hdGNoIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6dmFsaWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IGZ1bmMpCit7CisgICAgc3dpdGNoIChmdW5jKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TkVWRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVTUzoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpMRVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JF
QVRFUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRVFVQUw6CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9URVFV
QUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxXQVlTOgorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZ1bmN0aW9uIik7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZTo6cHJpbnRHTEVycm9yVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkK
K3sKKyAgICBpZiAoIW1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2VkKQorICAgICAgICByZXR1
cm47CisgICAgCisgICAgLS1tX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZDsKKyAgICBwcmlu
dFdhcm5pbmdUb0NvbnNvbGUobWVzc2FnZSk7CisgICAgCisgICAgaWYgKCFtX251bUdMRXJyb3Jz
VG9Db25zb2xlQWxsb3dlZCkKKyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXZWJHTDog
dG9vIG1hbnkgZXJyb3JzLCBubyBtb3JlIGVycm9ycyB3aWxsIGJlIHJlcG9ydGVkIHRvIHRoZSBj
b25zb2xlIGZvciB0aGlzIGNvbnRleHQuIik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZTo6cHJpbnRXYXJuaW5nVG9Db25zb2xlKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sK
KyAgICBpZiAoIWNhbnZhcygpKQorICAgICAgICByZXR1cm47CisgICAgY2FudmFzKCktPmRvY3Vt
ZW50KCkuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6UmVuZGVyaW5nLCBNZXNzYWdl
TGV2ZWw6Oldhcm5pbmcsIG1lc3NhZ2UpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6OnZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCkKK3sKKyAgICBp
ZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlv
bk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIHN3aXRjaCAoYXR0YWNobWVudCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0FUVEFDSE1FTlQwOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFD
SE1FTlQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5UOgor
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUxfQVRUQUNITUVOVDoKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKG1fd2ViZ2xEcmF3QnVmZmVy
cworICAgICAgICAgICAgJiYgYXR0YWNobWVudCA+IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMAorICAgICAgICAgICAgJiYgYXR0YWNobWVudCA8IHN0YXRpY19jYXN0PEdDM0Rl
bnVtPihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAgKyBnZXRNYXhDb2xvckF0
dGFjaG1lbnRzKCkpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgYXR0YWNobWVudCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlQmxl
bmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUpCit7Cisg
ICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19BREQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlVOQ19TVUJUUkFDVDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGVU5DX1JFVkVSU0VfU1VCVFJBQ1Q6CisgICAgY2FzZSBFeHRlbnNp
b25zM0Q6Ok1JTl9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQ6CisgICAgICAg
IGlmICgobW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1JTl9FWFQgfHwgbW9kZSA9PSBFeHRlbnNpb25z
M0Q6Ok1BWF9FWFQpICYmICFtX2V4dEJsZW5kTWluTWF4KSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUs
ICJpbnZhbGlkIG1vZGUiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVu
Y3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVCbGVuZEZ1bmNG
YWN0b3JzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gc3JjLCBHQzNEZW51bSBk
c3QpCit7CisgICAgaWYgKCgoc3JjID09IEdyYXBoaWNzQ29udGV4dDNEOjpDT05TVEFOVF9DT0xP
UiB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19DT05TVEFOVF9DT0xPUikK
KyAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwg
ZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEpKQorICAg
ICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6Q09OU1RBTlRfQ09MT1IgfHwgZHN0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfQ09OU1RBTlRfQ09MT1IpCisgICAgICAg
ICYmIChzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNPTlNUQU5UX0FMUEhBIHx8IHNyYyA9PSBH
cmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0NPTlNUQU5UX0FMUEhBKSkpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJpbmNvbXBhdGlibGUgc3JjIGFuZCBkc3QiKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjp2YWxpZGF0ZUNhcGFiaWxpdHkoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSBjYXApCit7CisgICAgc3dpdGNoIChjYXApIHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpCTEVORDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfVEVTVDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdP
Tl9PRkZTRVRfRklMTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQUxQSEFf
VE9fQ09WRVJBR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVDoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgY2FwYWJpbGl0eSIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OnZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBj
b25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgR0Mz
RHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFt
ZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwg
ZmFsc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jv
b2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhj
b25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgSW50MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sKKyAgICBp
ZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMo
ZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYtPmRhdGEoKSwgdi0+bGVuZ3RoKCksIHJl
cXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNpemVpIHNpemUsIEdD
M0RzaXplaSByZXF1aXJlZE1pblNpemUpCit7CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1h
dHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2UsIHYsIHNpemUsIHJl
cXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFs
aWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCit7CisgICAgaWYg
KCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGZ1
bmN0aW9uTmFtZSwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwg
cmVxdWlyZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2
YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
Y29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bv
c2UsIHZvaWQqIHYsIEdDM0RzaXplaSBzaXplLCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQor
eworICAgIGlmICghbG9jYXRpb24pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobG9j
YXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25O
YW1lLCAibG9jYXRpb24gaXMgbm90IGZyb20gY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBh
cnJheSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh0cmFuc3Bvc2Up
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgInRyYW5zcG9zZSBub3QgRkFMU0UiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoc2l6ZSA8IHJlcXVpcmVkTWluU2l6ZSB8fCAoc2l6
ZSAlIHJlcXVpcmVkTWluU2l6ZSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgc2l6ZSIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitX
ZWJHTEJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmFsaWRhdGVCdWZmZXJEYXRh
UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gdXNhZ2UpCit7CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7CisgICAgc3dpdGNo
ICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUjoKKyAgICAgICAgYnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKS5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSOgorICAgICAgICBidWZmZXIgPSBtX2JvdW5kQXJyYXlC
dWZmZXIuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAg
ICBpZiAoIWJ1ZmZlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgc3dpdGNoICh1c2FnZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNUQVRJQ19EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNf
RFJBVzoKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9CisgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB1c2FnZSIpOworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnZhbGlkYXRlSFRNTEltYWdlRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBpZiAoIWltYWdlIHx8ICFpbWFnZS0+Y2FjaGVkSW1hZ2UoKSkgeworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1l
LCAibm8gaW1hZ2UiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBjb25zdCBV
UkwmIHVybCA9IGltYWdlLT5jYWNoZWRJbWFnZSgpLT5yZXNwb25zZSgpLnVybCgpOworICAgIGlm
ICh1cmwuaXNOdWxsKCkgfHwgdXJsLmlzRW1wdHkoKSB8fCAhdXJsLmlzVmFsaWQoKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBpbWFnZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGltYWdlKSkgeworICAgICAgICBlYyA9IFNF
Q1VSSVRZX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2YWxpZGF0ZUhUTUxDYW52
YXNFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFjYW52YXMgfHwgIWNhbnZhcy0+
YnVmZmVyKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGNhbnZhcyIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGNhbnZhcykpIHsKKyAg
ICAgICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCitib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2U6OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5j
dGlvbk5hbWUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBpZiAoIXZpZGVvIHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9I
ZWlnaHQoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpIHsKKyAgICAg
ICAgZWMgPSBTRUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp2ZXJ0ZXhBdHRyaWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGlu
ZGV4LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwg
R0MzRGZsb2F0IHYyLCBHQzNEZmxvYXQgdjMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0
dHJpYnMpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIC8vIEluIEdMLCB3ZSBza2lwIHNldHRpbmcgdmVydGV4QXR0
cmliMCB2YWx1ZXMuCisgICAgaWYgKGluZGV4IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkgeworICAg
ICAgICBzd2l0Y2ggKGV4cGVjdGVkU2l6ZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjFmKGluZGV4LCB2MCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIy
ZihpbmRleCwgdjAsIHYxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6Cisg
ICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmKGluZGV4LCB2MCwgdjEsIHYyKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBtX2NvbnRl
eHQtPnZlcnRleEF0dHJpYjRmKGluZGV4LCB2MCwgdjEsIHYyLCB2Myk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFs
dWUgPSBtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XTsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVsw
XSA9IHYwOworICAgIGF0dHJpYlZhbHVlLnZhbHVlWzFdID0gdjE7CisgICAgYXR0cmliVmFsdWUu
dmFsdWVbMl0gPSB2MjsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVszXSA9IHYzOworfQorCit2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYsIEdDM0RzaXpl
aSBleHBlY3RlZFNpemUpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoZnVuY3Rp
b25OYW1lLCBpbmRleCwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgZXhwZWN0ZWRTaXplKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNE
c2l6ZWkgc2l6ZSwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2KSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJubyBhcnJheSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChz
aXplIDwgZXhwZWN0ZWRTaXplKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRy
aWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAvLyBJbiBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJp
YjAgdmFsdWVzLgorICAgIGlmIChpbmRleCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAg
ICAgc3dpdGNoIChleHBlY3RlZFNpemUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAg
bV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2
KGluZGV4LCB2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAg
ICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjNmdihpbmRleCwgdik7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRy
aWI0ZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgVmVydGV4QXR0cmliVmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtp
bmRleF07CisgICAgYXR0cmliVmFsdWUuaW5pdFZhbHVlKCk7CisgICAgZm9yIChpbnQgaWkgPSAw
OyBpaSA8IGV4cGVjdGVkU2l6ZTsgKytpaSkKKyAgICAgICAgYXR0cmliVmFsdWUudmFsdWVbaWld
ID0gdltpaV07Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6aW5pdFZlcnRl
eEF0dHJpYjAoKQoreworICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJp
YlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmli
U3RhdGUoMCk7CisgICAgCisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyID0gY3JlYXRlQnVmZmVy
KCk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9C
VUZGRVIsIG1fdmVydGV4QXR0cmliMEJ1ZmZlci0+b2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+
YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50
ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgc3Rh
dGUuYnVmZmVyQmluZGluZyA9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcjsKKyAgICBtX2NvbnRleHQt
PmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCk7CisgICAgbV9j
b250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBtX3ZlcnRleEF0dHJpYjBC
dWZmZXJTaXplID0gMDsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXSA9IDAuMGY7
CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMV0gPSAwLjBmOworICAgIG1fdmVydGV4
QXR0cmliMEJ1ZmZlclZhbHVlWzJdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJW
YWx1ZVszXSA9IDEuMGY7CisgICAgbV9mb3JjZUF0dHJpYjBCdWZmZXJSZWZpbGwgPSBmYWxzZTsK
KyAgICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gZmFsc2U7Cit9CisKK2Jvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKEdDM0RzaXplaSBudW1W
ZXJ0ZXgpCit7CisgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0
cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRy
aWJTdGF0ZSgwKTsKKyAgICBjb25zdCBWZXJ0ZXhBdHRyaWJWYWx1ZSYgYXR0cmliVmFsdWUgPSBt
X3ZlcnRleEF0dHJpYlZhbHVlWzBdOworICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGJvb2wgdXNpbmdWZXJ0ZXhBdHRyaWIwID0gbV9jdXJyZW50
UHJvZ3JhbS0+aXNVc2luZ1ZlcnRleEF0dHJpYjAoKTsKKyAgICBpZiAodXNpbmdWZXJ0ZXhBdHRy
aWIwKQorICAgICAgICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKKyAgICBpZiAo
c3RhdGUuZW5hYmxlZCAmJiB1c2luZ1ZlcnRleEF0dHJpYjApCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoIXVzaW5nVmVydGV4QXR0cmliMCAmJiAhbV92ZXJ0ZXhBdHRyaWIwVXNlZEJl
Zm9yZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZv
cmUgPSB0cnVlOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
QVJSQVlfQlVGRkVSLCBtX3ZlcnRleEF0dHJpYjBCdWZmZXItPm9iamVjdCgpKTsKKyAgICBHQzNE
c2l6ZWlwdHIgYnVmZmVyRGF0YVNpemUgPSAobnVtVmVydGV4ICsgMSkgKiA0ICogc2l6ZW9mKEdD
M0RmbG9hdCk7CisgICAgaWYgKGJ1ZmZlckRhdGFTaXplID4gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
U2l6ZSkgeworICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgYnVmZmVyRGF0YVNpemUsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5B
TUlDX0RSQVcpOworICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJTaXplID0gYnVmZmVyRGF0
YVNpemU7CisgICAgICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMAorICAgICAgICAmJiAobV9mb3JjZUF0dHJpYjBC
dWZmZXJSZWZpbGwKKyAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzBdICE9IG1fdmVy
dGV4QXR0cmliMEJ1ZmZlclZhbHVlWzBdCisgICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1
ZVsxXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsxXQorICAgICAgICAgICAgfHwgYXR0
cmliVmFsdWUudmFsdWVbMl0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0KKyAgICAg
ICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzNdICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlclZh
bHVlWzNdKSkgeworICAgICAgICAgICAgYXV0byBidWZmZXJEYXRhID0gc3RkOjptYWtlX3VuaXF1
ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEpICogNCk7CisgICAgICAgICAgICBmb3IgKEdD
M0RzaXplaSBpaSA9IDA7IGlpIDwgbnVtVmVydGV4ICsgMTsgKytpaSkgeworICAgICAgICAgICAg
ICAgIGJ1ZmZlckRhdGFbaWkgKiA0XSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOworICAgICAgICAg
ICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsxXTsKKyAg
ICAgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNCArIDJdID0gYXR0cmliVmFsdWUudmFsdWVb
Ml07CisgICAgICAgICAgICAgICAgYnVmZmVyRGF0YVtpaSAqIDQgKyAzXSA9IGF0dHJpYlZhbHVl
LnZhbHVlWzNdOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyVmFsdWVbMF0gPSBhdHRyaWJWYWx1ZS52YWx1ZVswXTsKKyAgICAgICAgICAgIG1fdmVydGV4
QXR0cmliMEJ1ZmZlclZhbHVlWzFdID0gYXR0cmliVmFsdWUudmFsdWVbMV07CisgICAgICAgICAg
ICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVsyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOwor
ICAgICAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbM10gPSBhdHRyaWJWYWx1ZS52
YWx1ZVszXTsKKyAgICAgICAgICAgIG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsID0gZmFsc2U7
CisgICAgICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6
OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVyRGF0YVNpemUsIGJ1ZmZlckRhdGEuZ2V0KCkpOworICAg
ICAgICB9CisgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDQsIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVCwgMCwgMCwgMCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmli
MFNpbXVsYXRpb24oKQoreworICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZl
cnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVy
dGV4QXR0cmliU3RhdGUoMCk7CisgICAgaWYgKHN0YXRlLmJ1ZmZlckJpbmRpbmcgIT0gbV92ZXJ0
ZXhBdHRyaWIwQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBvYmplY3RPclplcm8oc3RhdGUuYnVmZmVyQmluZGlu
Zy5nZXQoKSkpOworICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgc3Rh
dGUuc2l6ZSwgc3RhdGUudHlwZSwgc3RhdGUubm9ybWFsaXplZCwgc3RhdGUub3JpZ2luYWxTdHJp
ZGUsIHN0YXRlLm9mZnNldCk7CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBvYmplY3RPclplcm8obV9ib3VuZEFycmF5QnVm
ZmVyLmdldCgpKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZGlzcGF0
Y2hDb250ZXh0TG9zdEV2ZW50KCkKK3sKKyAgICBSZWZQdHI8V2ViR0xDb250ZXh0RXZlbnQ+IGV2
ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0
bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOworICAgIGNhbnZhcygpLT5kaXNwYXRjaEV2ZW50
KGV2ZW50KTsKKyAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZXZlbnQtPmRlZmF1bHRQcmV2ZW50ZWQo
KTsKKyAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExvc3RDb250ZXh0ICYmIG1fcmVz
dG9yZUFsbG93ZWQpCisgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjptYXliZVJlc3RvcmVDb250ZXh0KCkK
K3sKKyAgICBBU1NFUlQobV9jb250ZXh0TG9zdCk7CisgICAgaWYgKCFtX2NvbnRleHRMb3N0KQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gVGhlIHJlbmRlcmluZyBjb250ZXh0IGlzIG5v
dCByZXN0b3JlZCB1bmxlc3MgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlCisgICAgLy8gd2Vi
Z2xjb250ZXh0bG9zdCBldmVudCB3YXMgcHJldmVudGVkIGVhcmxpZXIuCisgICAgLy8KKyAgICAv
LyBCZWNhdXNlIG9mIHRoZSB3YXkgbV9yZXN0b3JlVGltZXIgaXMgc2V0IHVwIGZvciByZWFsIHZz
LiBzeW50aGV0aWMgbG9zdAorICAgIC8vIGNvbnRleHQgZXZlbnRzLCB3ZSBkb24ndCBoYXZlIHRv
IHdvcnJ5IGFib3V0IHRoaXMgdGVzdCBzaG9ydC1jaXJjdWl0aW5nCisgICAgLy8gdGhlIHJldHJ5
IGxvb3AgZm9yIHJlYWwgY29udGV4dCBsb3N0IGV2ZW50cy4KKyAgICBpZiAoIW1fcmVzdG9yZUFs
bG93ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpbnQgY29udGV4dExvc3RSZWFzb24g
PSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigp
OworICAgIAorICAgIHN3aXRjaCAoY29udGV4dExvc3RSZWFzb24pIHsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpOT19FUlJPUjoKKyAgICAgICAgLy8gVGhlIEdyYXBoaWNzQ29udGV4dDNE
IGltcGxlbWVudGF0aW9uIG1pZ2h0IG5vdCBmdWxseQorICAgICAgICAvLyBzdXBwb3J0IEdMX0FS
Ql9yb2J1c3RuZXNzIHNlbWFudGljcyB5ZXQuIEFsdGVybmF0aXZlbHksIHRoZQorICAgICAgICAv
LyBXRUJHTF9sb3NlX2NvbnRleHQgZXh0ZW5zaW9uIG1pZ2h0IGhhdmUgYmVlbiB1c2VkIHRvIGZv
cmNlCisgICAgICAgIC8vIGEgbG9zdCBjb250ZXh0LgorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEV4dGVuc2lvbnMzRDo6R1VJTFRZX0NPTlRFWFRfUkVTRVRfQVJCOgorICAgICAgICAvLyBUaGUg
cmVuZGVyaW5nIGNvbnRleHQgaXMgbm90IHJlc3RvcmVkIGlmIHRoaXMgY29udGV4dCB3YXMKKyAg
ICAgICAgLy8gZ3VpbHR5IG9mIGNhdXNpbmcgdGhlIGdyYXBoaWNzIHJlc2V0LgorICAgICAgICBw
cmludFdhcm5pbmdUb0NvbnNvbGUoIldBUk5JTkc6IFdlYkdMIGNvbnRlbnQgb24gdGhlIHBhZ2Ug
Y2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvIHJlc2V0OyBub3QgcmVzdG9yaW5nIHRoZSBjb250
ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6SU5OT0NFTlRf
Q09OVEVYVF9SRVNFVF9BUkI6CisgICAgICAgIC8vIEFsd2F5cyBhbGxvdyB0aGUgY29udGV4dCB0
byBiZSByZXN0b3JlZC4KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlVO
S05PV05fQ09OVEVYVF9SRVNFVF9BUkI6CisgICAgICAgIC8vIFdhcm4uIElkZWFsbHksIHByb21w
dCB0aGUgdXNlciB0ZWxsaW5nIHRoZW0gdGhhdCBXZWJHTAorICAgICAgICAvLyBjb250ZW50IG9u
IHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvCisgICAgICAg
IC8vIHJlc2V0IGFuZCBhc2sgdGhlbSB3aGV0aGVyIHRoZXkgd2FudCB0byBjb250aW51ZSBydW5u
aW5nCisgICAgICAgIC8vIHRoZSBjb250ZW50LiBPbmx5IGlmIHRoZXkgc2F5ICJ5ZXMiIHNob3Vs
ZCB3ZSBzdGFydAorICAgICAgICAvLyBhdHRlbXB0aW5nIHRvIHJlc3RvcmUgdGhlIGNvbnRleHQu
CisgICAgICAgIHByaW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBv
biB0aGUgcGFnZSBtaWdodCBoYXZlIGNhdXNlZCB0aGUgZ3JhcGhpY3MgY2FyZCB0byByZXNldCIp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgRnJhbWUqIGZyYW1lID0gY2FudmFz
KCktPmRvY3VtZW50KCkuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm47
CisgICAgCisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFt
ZS0+c2V0dGluZ3MoKS53ZWJHTEVuYWJsZWQoKSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBGcmFtZVZpZXcqIHZpZXcgPSBmcmFtZS0+dmlldygpOworICAgIGlmICghdmlldykKKyAgICAg
ICAgcmV0dXJuOworICAgIFNjcm9sbFZpZXcqIHJvb3QgPSB2aWV3LT5yb290KCk7CisgICAgaWYg
KCFyb290KQorICAgICAgICByZXR1cm47CisgICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IHJv
b3QtPmhvc3RXaW5kb3coKTsKKyAgICBpZiAoIWhvc3RXaW5kb3cpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQoR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZShtX2F0dHJpYnV0ZXMsIGhvc3RXaW5kb3cpKTsKKyAgICBpZiAoIWNvbnRl
eHQpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFJlYWxMb3N0Q29udGV4dCkK
KyAgICAgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0YXJ0T25lU2hvdChzZWNvbmRzQmV0d2VlblJl
c3RvcmVBdHRlbXB0cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8vIFRoaXMgbGlrZWx5
IHNob3VsZG4ndCBoYXBwZW4gYnV0IGlzIHRoZSBiZXN0IHdheSB0byByZXBvcnQgaXQgdG8gdGhl
IFdlYkdMIGFwcC4KKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgIiIsICJlcnJvciByZXN0b3JpbmcgY29udGV4dCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3
aW5nIGJ1ZmZlciB3aXRoIHRoZSBuZXcgR3JhcGhpY3NDb250ZXh0M0QuCisgICAgaWYgKG1fZHJh
d2luZ0J1ZmZlcikgeworICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMo
KTsKKyAgICAgICAgRHJhd2luZ0J1ZmZlcjo6UHJlc2VydmVEcmF3aW5nQnVmZmVyIHByZXNlcnZl
ID0gbV9hdHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciA/IERyYXdpbmdCdWZmZXI6OlBy
ZXNlcnZlIDogRHJhd2luZ0J1ZmZlcjo6RGlzY2FyZDsKKyAgICAgICAgRHJhd2luZ0J1ZmZlcjo6
QWxwaGFSZXF1aXJlbWVudCBhbHBoYSA9IG1fYXR0cmlidXRlcy5hbHBoYSA/IERyYXdpbmdCdWZm
ZXI6OkFscGhhIDogRHJhd2luZ0J1ZmZlcjo6T3BhcXVlOworICAgICAgICBtX2RyYXdpbmdCdWZm
ZXIgPSBEcmF3aW5nQnVmZmVyOjpjcmVhdGUoY29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVy
LT5zaXplKCksIHByZXNlcnZlLCBhbHBoYSk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Ymlu
ZCgpOworICAgIH0KKyAgICAKKyAgICBtX2NvbnRleHQgPSBjb250ZXh0OworICAgIG1fY29udGV4
dExvc3QgPSBmYWxzZTsKKyAgICBzZXR1cEZsYWdzKCk7CisgICAgaW5pdGlhbGl6ZU5ld0NvbnRl
eHQoKTsKKyAgICBjYW52YXMoKS0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRFdmVudDo6Y3Jl
YXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRyZXN0b3JlZEV2ZW50LCBmYWxzZSwgdHJ1ZSwg
IiIpKTsKK30KKworU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmVuc3VyZU5vdE51
bGwoY29uc3QgU3RyaW5nJiB0ZXh0KSBjb25zdAoreworICAgIGlmICh0ZXh0LmlzTnVsbCgpKQor
ICAgICAgICByZXR1cm4gV1RGOjplbXB0eVN0cmluZygpOworICAgIHJldHVybiB0ZXh0OworfQor
CitXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFn
ZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKKyAgICA6IG1fYnVmZmVycyhzdGQ6Om1ha2VfdW5p
cXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj5bXT4oY2FwYWNpdHkpKQorICAgICwgbV9j
YXBhY2l0eShjYXBhY2l0eSkKK3sKK30KKworSW1hZ2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0IEludFNpemUm
IHNpemUpCit7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IG1fY2FwYWNpdHk7ICsr
aSkgeworICAgICAgICBJbWFnZUJ1ZmZlciogYnVmID0gbV9idWZmZXJzW2ldLmdldCgpOworICAg
ICAgICBpZiAoIWJ1ZikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoYnVmLT5sb2dp
Y2FsU2l6ZSgpICE9IHNpemUpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYnViYmxl
VG9Gcm9udChpKTsKKyAgICAgICAgcmV0dXJuIGJ1ZjsKKyAgICB9CisgICAgCisgICAgc3RkOjp1
bmlxdWVfcHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCAx
KTsKKyAgICBpZiAoIXRlbXApCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGkgPSBzdGQ6
Om1pbihtX2NhcGFjaXR5IC0gMSwgaSk7CisgICAgbV9idWZmZXJzW2ldID0gV1RGOjptb3ZlKHRl
bXApOworICAgIAorICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7Cisg
ICAgYnViYmxlVG9Gcm9udChpKTsKKyAgICByZXR1cm4gYnVmOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmJ1YmJsZVRvRnJvbnQoaW50
IGlkeCkKK3sKKyAgICBmb3IgKGludCBpID0gaWR4OyBpID4gMDsgLS1pKQorICAgICAgICBtX2J1
ZmZlcnNbaV0uc3dhcChtX2J1ZmZlcnNbaS0xXSk7Cit9CisKK25hbWVzcGFjZSB7CisgICAgCisg
ICAgU3RyaW5nIEdldEVycm9yU3RyaW5nKEdDM0RlbnVtIGVycm9yKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChlcnJvcikgeworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X0VOVU06CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURfRU5VTSI7CisgICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU6CisgICAgICAgICAgICByZXR1cm4gIklO
VkFMSURfVkFMVUUiOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09Q
RVJBVElPTjoKKyAgICAgICAgICAgIHJldHVybiAiSU5WQUxJRF9PUEVSQVRJT04iOworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZOgorICAgICAgICAgICAgcmV0
dXJuICJPVVRfT0ZfTUVNT1JZIjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT046CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OIjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09OVEVYVF9MT1NUX1dFQkdMOgorICAgICAgICAgICAgcmV0dXJuICJDT05URVhUX0xPU1RfV0VC
R0wiOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0
KCJXZWJHTCBFUlJPUiglMDR4KSIsIGVycm9yKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKK30g
Ly8gbmFtZXNwYWNlIGFub255bW91cworCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yLCBjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uLCBDb25zb2xlRGlzcGxheVByZWZlcmVuY2UgZGlz
cGxheSkKK3sKKyAgICBpZiAobV9zeW50aGVzaXplZEVycm9yc1RvQ29uc29sZSAmJiBkaXNwbGF5
ID09IERpc3BsYXlJbkNvbnNvbGUpIHsKKyAgICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2Vi
R0w6ICIpICsgR2V0RXJyb3JTdHJpbmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25O
YW1lKSArICI6ICIgKyBTdHJpbmcoZGVzY3JpcHRpb24pOworICAgICAgICBwcmludEdMRXJyb3JU
b0NvbnNvbGUoc3RyKTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihl
cnJvcik7Cit9CisKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpwcmludEdMV2Fy
bmluZ1RvQ29uc29sZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2Ny
aXB0aW9uKQoreworICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7CisgICAg
ICAgIFN0cmluZyBzdHIgPSBTdHJpbmcoIldlYkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUp
ICsgIjogIiArIFN0cmluZyhkZXNjcmlwdGlvbik7CisgICAgICAgIHByaW50R0xFcnJvclRvQ29u
c29sZShzdHIpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjph
cHBseVN0ZW5jaWxUZXN0KCkKK3sKKyAgICBib29sIGhhdmVTdGVuY2lsQnVmZmVyID0gZmFsc2U7
CisgICAgCisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgICBoYXZlU3RlbmNp
bEJ1ZmZlciA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5oYXNTdGVuY2lsQnVmZmVyKCk7CisgICAg
ZWxzZSB7CisgICAgICAgIFJlZlB0cjxXZWJHTENvbnRleHRBdHRyaWJ1dGVzPiBhdHRyaWJ1dGVz
ID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBh
dHRyaWJ1dGVzLT5zdGVuY2lsKCk7CisgICAgfQorICAgIGVuYWJsZU9yRGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9URVNULAorICAgICAgICAgICAgICAgICAgICBtX3N0ZW5jaWxF
bmFibGVkICYmIGhhdmVTdGVuY2lsQnVmZmVyKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjplbmFibGVPckRpc2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFi
bGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwYWJp
bGl0eSk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwYWJpbGl0eSk7
Cit9CisKK0ludFNpemUgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Y2xhbXBlZENhbnZhc1Np
emUoKQoreworICAgIHJldHVybiBJbnRTaXplKGNsYW1wKGNhbnZhcygpLT53aWR0aCgpLCAxLCBt
X21heFZpZXdwb3J0RGltc1swXSksCisgICAgICAgICAgICAgICAgICAgY2xhbXAoY2FudmFzKCkt
PmhlaWdodCgpLCAxLCBtX21heFZpZXdwb3J0RGltc1sxXSkpOworfQorCitHQzNEaW50IFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldE1heERyYXdCdWZmZXJzKCkKK3sKKyAgICBpZiAoIXN1
cHBvcnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heERy
YXdCdWZmZXJzKQorICAgICAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6
TUFYX0RSQVdfQlVGRkVSU19FWFQsICZtX21heERyYXdCdWZmZXJzKTsKKyAgICBpZiAoIW1fbWF4
Q29sb3JBdHRhY2htZW50cykKKyAgICAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNp
b25zM0Q6Ok1BWF9DT0xPUl9BVFRBQ0hNRU5UU19FWFQsICZtX21heENvbG9yQXR0YWNobWVudHMp
OworICAgIC8vIFdFQkdMX2RyYXdfYnVmZmVycyByZXF1aXJlcyBNQVhfQ09MT1JfQVRUQUNITUVO
VFMgPj0gTUFYX0RSQVdfQlVGRkVSUy4KKyAgICByZXR1cm4gc3RkOjptaW4obV9tYXhEcmF3QnVm
ZmVycywgbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHRCYXNlOjpnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkKK3sKKyAgICBpZiAoIXN1cHBv
cnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFtX21heENvbG9y
QXR0YWNobWVudHMpCisgICAgICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNE
OjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAg
ICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2U6OnNldEJhY2tEcmF3QnVmZmVyKEdDM0RlbnVtIGJ1ZikKK3sKKyAgICBtX2Jh
Y2tEcmF3QnVmZmVyID0gYnVmOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6
OnJlc3RvcmVDdXJyZW50RnJhbWVidWZmZXIoKQoreworICAgIEV4Y2VwdGlvbkNvZGUgZWM7Cisg
ICAgYmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcuZ2V0KCksIGVjKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCit7CisgICAgRXhjZXB0aW9uQ29kZSBl
YzsKKyAgICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5nZXQoKSwgZWMp
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnN1cHBvcnRzRHJhd0J1ZmZl
cnMoKQoreworICAgIGlmICghbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZCkg
eworICAgICAgICBtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHNDaGVja2VkID0gdHJ1ZTsK
KyAgICAgICAgbV9kcmF3QnVmZmVyc1N1cHBvcnRlZCA9IFdlYkdMRHJhd0J1ZmZlcnM6OnN1cHBv
cnRlZCh0aGlzKTsKKyAgICB9CisgICAgcmV0dXJuIG1fZHJhd0J1ZmZlcnNTdXBwb3J0ZWQ7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZHJhd0FycmF5c0luc3RhbmNlZChH
QzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBw
cmltY291bnQpCit7CisgICAgaWYgKCFwcmltY291bnQpIHsKKyAgICAgICAgbWFya0NvbnRleHRD
aGFuZ2VkKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCF2YWxpZGF0
ZURyYXdBcnJheXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2RlLCBmaXJzdCwgY291bnQsIHBy
aW1jb3VudCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgp
OworICAgIAorICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlm
ICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0g
c2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsKKyAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0Fy
cmF5c0luc3RhbmNlZCIsIHRydWUpOworICAgIAorICAgIG1fY29udGV4dC0+ZHJhd0FycmF5c0lu
c3RhbmNlZChtb2RlLCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisgICAgCisgICAgaWYgKCFp
c0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKKyAgICAgICAgcmVz
dG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKKyAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0Fy
cmF5c0luc3RhbmNlZCIsIGZhbHNlKTsKKyAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpkcmF3RWxlbWVudHNJbnN0YW5jZWQoR0Mz
RGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcgb2Zm
c2V0LCBHQzNEc2l6ZWkgcHJpbWNvdW50KQoreworICAgIGlmICghcHJpbWNvdW50KSB7CisgICAg
ICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzID0gMDsKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1l
bnRzKCJkcmF3RWxlbWVudHNJbnN0YW5jZWQiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBu
dW1FbGVtZW50cywgcHJpbWNvdW50KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGNsZWFy
SWZDb21wb3NpdGVkKCk7CisgICAgCisgICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0g
ZmFsc2U7CisgICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgaWYgKCFudW1F
bGVtZW50cykKKyAgICAgICAgICAgIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UoY291bnQsIHR5
cGUsIHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIG51bUVsZW1lbnRzKTsKKyAgICAg
ICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRlVmVydGV4QXR0cmliMChudW1FbGVt
ZW50cyk7CisgICAgfQorICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hl
Y2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVudHNJbnN0YW5jZWQiLCB0cnVlKTsKKyAg
ICAKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50c0luc3RhbmNlZChtb2RlLCBjb3VudCwgdHlw
ZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgcHJpbWNvdW50KTsKKyAgICAKKyAg
ICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAg
ICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlm
ICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNz
KCJkcmF3RWxlbWVudHNJbnN0YW5jZWQiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2Vk
KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliRGl2
aXNvcihHQzNEdWludCBpbmRleCwgR0MzRHVpbnQgZGl2aXNvcikKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKGluZGV4
ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYkRpdmlzb3IiLCAiaW5k
ZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgbV9i
b3VuZFZlcnRleEFycmF5T2JqZWN0LT5zZXRWZXJ0ZXhBdHRyaWJEaXZpc29yKGluZGV4LCBkaXZp
c29yKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgsIGRpdmlzb3Ip
OworfQorCisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZV9oCisjZGVmaW5lIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2VfaAorCisjaW5jbHVkZSAiQWN0aXZlRE9NT2JqZWN0LmgiCisj
aW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIkRyYXdpbmdCdWZm
ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXZWJHTEdldEluZm8uaCIKKyNp
bmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8cnVudGltZS9GbG9hdDMyQXJyYXkuaD4KKyNpbmNs
dWRlIDxydW50aW1lL0ludDMyQXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBTkdMRUluc3RhbmNlZEFycmF5czsK
K2NsYXNzIEVYVEJsZW5kTWluTWF4OworY2xhc3MgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
OworY2xhc3MgRVhUU2hhZGVyVGV4dHVyZUxPRDsKK2NsYXNzIEVYVHNSR0I7CitjbGFzcyBFWFRG
cmFnRGVwdGg7CitjbGFzcyBIVE1MSW1hZ2VFbGVtZW50OworY2xhc3MgSFRNTFZpZGVvRWxlbWVu
dDsKK2NsYXNzIEltYWdlQnVmZmVyOworY2xhc3MgSW1hZ2VEYXRhOworY2xhc3MgSW50U2l6ZTsK
K2NsYXNzIE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXM7CitjbGFzcyBPRVNUZXh0dXJlRmxvYXQ7Citj
bGFzcyBPRVNUZXh0dXJlRmxvYXRMaW5lYXI7CitjbGFzcyBPRVNUZXh0dXJlSGFsZkZsb2F0Owor
Y2xhc3MgT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcjsKK2NsYXNzIE9FU1ZlcnRleEFycmF5T2Jq
ZWN0OworY2xhc3MgT0VTRWxlbWVudEluZGV4VWludDsKK2NsYXNzIFdlYkdMQWN0aXZlSW5mbzsK
K2NsYXNzIFdlYkdMQnVmZmVyOworY2xhc3MgV2ViR0xDb250ZXh0R3JvdXA7CitjbGFzcyBXZWJH
TENvbnRleHRPYmplY3Q7CitjbGFzcyBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOworY2xhc3Mg
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOworY2xhc3MgV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVMzVEM7CitjbGFzcyBXZWJHTENvbnRleHRBdHRyaWJ1dGVzOworY2xhc3MgV2ViR0xEZWJ1Z1Jl
bmRlcmVySW5mbzsKK2NsYXNzIFdlYkdMRGVidWdTaGFkZXJzOworY2xhc3MgV2ViR0xEZXB0aFRl
eHR1cmU7CitjbGFzcyBXZWJHTERyYXdCdWZmZXJzOworY2xhc3MgV2ViR0xFeHRlbnNpb247Citj
bGFzcyBXZWJHTEZyYW1lYnVmZmVyOworY2xhc3MgV2ViR0xMb3NlQ29udGV4dDsKK2NsYXNzIFdl
YkdMT2JqZWN0OworY2xhc3MgV2ViR0xQcm9ncmFtOworY2xhc3MgV2ViR0xSZW5kZXJidWZmZXI7
CitjbGFzcyBXZWJHTFNoYWRlcjsKK2NsYXNzIFdlYkdMU2hhcmVkT2JqZWN0OworY2xhc3MgV2Vi
R0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQ7CitjbGFzcyBXZWJHTFRleHR1cmU7CitjbGFzcyBXZWJH
TFVuaWZvcm1Mb2NhdGlvbjsKK2NsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7CisKK3R5
cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKK2NsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UgOiBwdWJsaWMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dCwgcHVibGljIEFjdGl2ZURPTU9iamVj
dCB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlPiBjcmVhdGUoSFRNTENhbnZhc0VsZW1lbnQqLCBXZWJHTENvbnRleHRBdHRyaWJ1
dGVzKiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB+V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZSgpOworICAgIAorICAgIHZpcnR1YWwgYm9vbCBpczNkKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQorI2lmIFBMQVRGT1JNKFdJTikKKy8vIEZJWE1FOiBJbXBsZW1lbnQgYWNj
ZWxlcmF0ZWQgM2QgY2FudmFzIG9uIFdpbmRvd3MuCit2aXJ0dWFsIGJvb2wgaXNBY2NlbGVyYXRl
ZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGZhbHNlOyB9CisjZWxzZQordmlydHVhbCBib29s
IGlzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisjZW5kaWYK
KworaW50IGRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0OworaW50IGRyYXdpbmdCdWZmZXJIZWln
aHQoKSBjb25zdDsKKwordm9pZCBhY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2Vw
dGlvbkNvZGUmKTsKK3ZvaWQgYXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3JhbSosIFdlYkdMU2hhZGVy
KiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBiaW5kQXR0cmliTG9jYXRpb24oV2ViR0xQcm9ncmFt
KiwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpOwor
dm9pZCBiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIqLCBFeGNlcHRpb25D
b2RlJik7Cit2b2lkIGJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFdlYkdMRnJhbWVi
dWZmZXIqLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgYmluZFRl
eHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1cmUqLCBFeGNlcHRpb25Db2RlJik7Cit2
b2lkIGJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNEZmxvYXQg
Ymx1ZSwgR0MzRGZsb2F0IGFscGhhKTsKK3ZvaWQgYmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2Rl
KTsKK3ZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVt
IG1vZGVBbHBoYSk7Cit2b2lkIGJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBk
ZmFjdG9yKTsKK3ZvaWQgYmxlbmRGdW5jU2VwYXJhdGUoR0MzRGVudW0gc3JjUkdCLCBHQzNEZW51
bSBkc3RSR0IsIEdDM0RlbnVtIHNyY0FscGhhLCBHQzNEZW51bSBkc3RBbHBoYSk7CisKK3ZvaWQg
YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcgbG9uZyBzaXplLCBHQzNEZW51bSB1c2Fn
ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgQXJy
YXlCdWZmZXIqIGRhdGEsIEdDM0RlbnVtIHVzYWdlLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGJ1
ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEsIEdDM0RlbnVt
IHVzYWdlLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBsb25nIGxvbmcgb2Zmc2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgRXhjZXB0aW9uQ29kZSYp
Owordm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwg
QXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBFeGNlcHRpb25Db2RlJik7CisKK0dDM0RlbnVtIGNoZWNr
RnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KTsKK3ZvaWQgY2xlYXIoR0MzRGJpdGZp
ZWxkIG1hc2spOwordm9pZCBjbGVhckNvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVl
biwgR0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSk7Cit2b2lkIGNsZWFyRGVwdGgoR0Mz
RGZsb2F0KTsKK3ZvaWQgY2xlYXJTdGVuY2lsKEdDM0RpbnQpOwordm9pZCBjb2xvck1hc2soR0Mz
RGJvb2xlYW4gcmVkLCBHQzNEYm9vbGVhbiBncmVlbiwgR0MzRGJvb2xlYW4gYmx1ZSwgR0MzRGJv
b2xlYW4gYWxwaGEpOwordm9pZCBjb21waWxlU2hhZGVyKFdlYkdMU2hhZGVyKiwgRXhjZXB0aW9u
Q29kZSYpOworCit2b2lkIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIs
IEFycmF5QnVmZmVyVmlldyogZGF0YSk7Cit2b2lkIGNvbXByZXNzZWRUZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIGRhdGEpOwor
Cit2b2lkIGNvcHlUZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyKTsKK3ZvaWQgY29weVRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCk7CisKK1Bhc3NSZWZQdHI8V2ViR0xCdWZmZXI+IGNyZWF0ZUJ1ZmZlcigp
OworUGFzc1JlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBjcmVhdGVGcmFtZWJ1ZmZlcigpOworUGFz
c1JlZlB0cjxXZWJHTFByb2dyYW0+IGNyZWF0ZVByb2dyYW0oKTsKK1Bhc3NSZWZQdHI8V2ViR0xS
ZW5kZXJidWZmZXI+IGNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworUGFzc1JlZlB0cjxXZWJHTFNoYWRl
cj4gY3JlYXRlU2hhZGVyKEdDM0RlbnVtIHR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKK1Bhc3NSZWZQ
dHI8V2ViR0xUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKCk7CisKK3ZvaWQgY3VsbEZhY2UoR0MzRGVu
dW0gbW9kZSk7CisKK3ZvaWQgZGVsZXRlQnVmZmVyKFdlYkdMQnVmZmVyKik7Cit2b2lkIGRlbGV0
ZUZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZmZXIqKTsKK3ZvaWQgZGVsZXRlUHJvZ3JhbShXZWJH
TFByb2dyYW0qKTsKK3ZvaWQgZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKik7
Cit2b2lkIGRlbGV0ZVNoYWRlcihXZWJHTFNoYWRlciopOwordm9pZCBkZWxldGVUZXh0dXJlKFdl
YkdMVGV4dHVyZSopOworCit2b2lkIGRlcHRoRnVuYyhHQzNEZW51bSk7Cit2b2lkIGRlcHRoTWFz
ayhHQzNEYm9vbGVhbik7Cit2b2lkIGRlcHRoUmFuZ2UoR0MzRGZsb2F0IHpOZWFyLCBHQzNEZmxv
YXQgekZhcik7Cit2b2lkIGRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0qLCBXZWJHTFNoYWRlcios
IEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXApOwordm9pZCBkaXNh
YmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKK3Zv
aWQgZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291
bnQsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdD
M0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9u
Q29kZSYpOworCit2b2lkIGVuYWJsZShHQzNEZW51bSBjYXApOwordm9pZCBlbmFibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBmaW5pc2go
KTsKK3ZvaWQgZmx1c2goKTsKK3ZvaWQgZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSByZW5kZXJidWZmZXJ0YXJnZXQs
IFdlYkdMUmVuZGVyYnVmZmVyKiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCBmcmFtZWJ1ZmZlclRl
eHR1cmUyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRl
eHRhcmdldCwgV2ViR0xUZXh0dXJlKiwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYpOwor
dm9pZCBmcm9udEZhY2UoR0MzRGVudW0gbW9kZSk7Cit2b2lkIGdlbmVyYXRlTWlwbWFwKEdDM0Rl
bnVtIHRhcmdldCk7CisKK1Bhc3NSZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVBdHRy
aWIoV2ViR0xQcm9ncmFtKiwgR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmKTsKK1Bhc3NS
ZWZQdHI8V2ViR0xBY3RpdmVJbmZvPiBnZXRBY3RpdmVVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIEdD
M0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJik7Citib29sIGdldEF0dGFjaGVkU2hhZGVycyhX
ZWJHTFByb2dyYW0qLCBWZWN0b3I8UmVmUHRyPFdlYkdMU2hhZGVyPj4mLCBFeGNlcHRpb25Db2Rl
Jik7CitHQzNEaW50IGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CitXZWJHTEdldEluZm8gZ2V0QnVmZmVyUGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKK1Bhc3NSZWZQdHI8V2ViR0xDb250
ZXh0QXR0cmlidXRlcz4gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKK0dDM0RlbnVtIGdldEVycm9y
KCk7CitXZWJHTEV4dGVuc2lvbiogZ2V0RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSk7CitX
ZWJHTEdldEluZm8gZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUm
KTsKK1dlYkdMR2V0SW5mbyBnZXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmKTsKK1dlYkdMR2V0SW5mbyBnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSosIEdD
M0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7CitTdHJpbmcgZ2V0UHJvZ3JhbUluZm9Mb2co
V2ViR0xQcm9ncmFtKiwgRXhjZXB0aW9uQ29kZSYpOworV2ViR0xHZXRJbmZvIGdldFJlbmRlcmJ1
ZmZlclBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25D
b2RlJik7CitXZWJHTEdldEluZm8gZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiwgR0Mz
RGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKK1N0cmluZyBnZXRTaGFkZXJJbmZvTG9nKFdl
YkdMU2hhZGVyKiwgRXhjZXB0aW9uQ29kZSYpOworUGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNp
c2lvbkZvcm1hdD4gZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0KEdDM0RlbnVtIHNoYWRlclR5cGUs
IEdDM0RlbnVtIHByZWNpc2lvblR5cGUsIEV4Y2VwdGlvbkNvZGUmKTsKK1N0cmluZyBnZXRTaGFk
ZXJTb3VyY2UoV2ViR0xTaGFkZXIqLCBFeGNlcHRpb25Db2RlJik7CitWZWN0b3I8U3RyaW5nPiBn
ZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CitXZWJHTEdldEluZm8gZ2V0VGV4UGFyYW1ldGVyKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKK1dlYkdMR2V0
SW5mbyBnZXRVbmlmb3JtKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiwgRXhjZXB0aW9uQ29kZSYpOworUGFzc1JlZlB0cjxXZWJHTFVuaWZvcm1Mb2NhdGlvbj4gZ2V0
VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSosIGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNv
ZGUmKTsKK1dlYkdMR2V0SW5mbyBnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0Rl
bnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJik7Citsb25nIGxvbmcgZ2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSk7CisKK3ZvaWQgaGludChHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpOworR0MzRGJvb2xlYW4gaXNCdWZmZXIoV2ViR0xCdWZm
ZXIqKTsKK2Jvb2wgaXNDb250ZXh0TG9zdCgpIGNvbnN0OworR0MzRGJvb2xlYW4gaXNFbmFibGVk
KEdDM0RlbnVtIGNhcCk7CitHQzNEYm9vbGVhbiBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZm
ZXIqKTsKK0dDM0Rib29sZWFuIGlzUHJvZ3JhbShXZWJHTFByb2dyYW0qKTsKK0dDM0Rib29sZWFu
IGlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKik7CitHQzNEYm9vbGVhbiBpc1NoYWRl
cihXZWJHTFNoYWRlciopOworR0MzRGJvb2xlYW4gaXNUZXh0dXJlKFdlYkdMVGV4dHVyZSopOwor
Cit2b2lkIGxpbmVXaWR0aChHQzNEZmxvYXQpOwordm9pZCBsaW5rUHJvZ3JhbShXZWJHTFByb2dy
YW0qLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50IHBhcmFtKTsKK3ZvaWQgcG9seWdvbk9mZnNldChHQzNEZmxvYXQgZmFjdG9yLCBHQzNE
ZmxvYXQgdW5pdHMpOwordm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgcmVs
ZWFzZVNoYWRlckNvbXBpbGVyKCk7Cit2b2lkIHJlbmRlcmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KTsKK3ZvaWQgc2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9v
bGVhbiBpbnZlcnQpOwordm9pZCBzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwordm9pZCBzaGFkZXJTb3VyY2UoV2ViR0xTaGFk
ZXIqLCBjb25zdCBTdHJpbmcmLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHN0ZW5jaWxGdW5jKEdD
M0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKTsKK3ZvaWQgc3RlbmNpbEZ1
bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0Mz
RHVpbnQgbWFzayk7Cit2b2lkIHN0ZW5jaWxNYXNrKEdDM0R1aW50KTsKK3ZvaWQgc3RlbmNpbE1h
c2tTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKTsKK3ZvaWQgc3RlbmNpbE9w
KEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcyk7Cit2b2lkIHN0
ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpm
YWlsLCBHQzNEZW51bSB6cGFzcyk7CisKK3ZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAg
IEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsCisgICAg
ICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZp
ZXcqLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0YSosIEV4Y2VwdGlvbkNvZGUm
KTsKK3ZvaWQgdGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdGV4
SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFs
Zm9ybWF0LAorICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
SFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjaWYgRU5BQkxFKFZJREVPKQor
dm9pZCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0g
aW50ZXJuYWxmb3JtYXQsCisgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKK3Zv
aWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxv
YXQgcGFyYW0pOwordm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RpbnQgcGFyYW0pOworCit2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZl
clZpZXcqLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlRGF0
YSosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxl
bWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAg
ICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZh
c0VsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CisjaWYgRU5BQkxFKFZJREVPKQordm9pZCB0ZXhT
dWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlm
CisKK3ZvaWQgdW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTFmdihjb25zdCBXZWJH
TFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29k
ZSYpOwordm9pZCB1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlv
biwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1
bmlmb3JtMWkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgs
IEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5p
Zm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYs
IEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0yZihjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwg
RXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVu
aWZvcm0yZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQq
IHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0yaShjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBF
eGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRp
b24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZv
cm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtM2YoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdD
M0RmbG9hdCB6LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm0zZnYoY29uc3QgV2ViR0xV
bmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUm
KTsKK3ZvaWQgdW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5p
Zm9ybTNpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RpbnQgeiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtM2l2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0
aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmKTsKK3Zv
aWQgdW5pZm9ybTRmKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZs
b2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcsIEV4Y2VwdGlvbkNv
ZGUmKTsKK3ZvaWQgdW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtNGZ2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6
ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtNGkoY29uc3QgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6LCBH
QzNEaW50IHcsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmKTsK
K3ZvaWQgdW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHVuaWZvcm1N
YXRyaXgyZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdmFsdWUsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQg
dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdD
M0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdW5pZm9ybU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2
YWx1ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxv
YXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB1bmlmb3Jt
TWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xl
YW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkqIHZhbHVlLCBFeGNlcHRpb25Db2RlJik7Cit2b2lk
IHVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplLCBF
eGNlcHRpb25Db2RlJik7CisKK3ZvaWQgdXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRp
b25Db2RlJik7Cit2b2lkIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qLCBFeGNlcHRpb25D
b2RlJik7CisKK3ZvaWQgdmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4
KTsKK3ZvaWQgdmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHZh
bHVlcyk7Cit2b2lkIHZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2
YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKK3ZvaWQgdmVydGV4QXR0cmliMmYoR0MzRHVpbnQgaW5k
ZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSk7Cit2b2lkIHZlcnRleEF0dHJpYjJmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2YWx1ZXMpOwordm9pZCB2ZXJ0ZXhBdHRyaWIyZnYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzLCBHQzNEc2l6ZWkgc2l6ZSk7Cit2b2lk
IHZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHks
IEdDM0RmbG9hdCB6KTsKK3ZvaWQgdmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9h
dDMyQXJyYXkqIHZhbHVlcyk7Cit2b2lkIHZlcnRleEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwg
R0MzRGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKK3ZvaWQgdmVydGV4QXR0cmliNGYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdD
M0RmbG9hdCB3KTsKK3ZvaWQgdmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMy
QXJyYXkqIHZhbHVlcyk7Cit2b2lkIHZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2YWx1ZXMsIEdDM0RzaXplaSBzaXplKTsKK3ZvaWQgdmVydGV4QXR0cmliUG9pbnRl
cihHQzNEdWludCBpbmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVh
biBub3JtYWxpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSBzdHJpZGUs
IGxvbmcgbG9uZyBvZmZzZXQsIEV4Y2VwdGlvbkNvZGUmKTsKKwordm9pZCB2aWV3cG9ydChHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKwor
Ly8gV0VCS0lUX2xvc2VfY29udGV4dCBzdXBwb3J0CitlbnVtIExvc3RDb250ZXh0TW9kZSB7Cisg
ICAgLy8gTG9zdCBjb250ZXh0IG9jY3VycmVkIGF0IHRoZSBncmFwaGljcyBzeXN0ZW0gbGV2ZWwu
CisgICAgUmVhbExvc3RDb250ZXh0LAorICAgIAorICAgIC8vIExvc3QgY29udGV4dCBwcm92b2tl
ZCBieSBXRUJLSVRfbG9zZV9jb250ZXh0LgorICAgIFN5bnRoZXRpY0xvc3RDb250ZXh0Cit9Owor
dm9pZCBmb3JjZUxvc3RDb250ZXh0KExvc3RDb250ZXh0TW9kZSk7Cit2b2lkIGZvcmNlUmVzdG9y
ZUNvbnRleHQoKTsKK3ZvaWQgbG9zZUNvbnRleHRJbXBsKExvc3RDb250ZXh0TW9kZSk7CisKK0dy
YXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dC5nZXQoKTsgfQorV2ViR0xDb250ZXh0R3JvdXAqIGNvbnRleHRHcm91cCgpIGNvbnN0IHsg
cmV0dXJuIG1fY29udGV4dEdyb3VwLmdldCgpOyB9Cit2aXJ0dWFsIFBsYXRmb3JtTGF5ZXIqIHBs
YXRmb3JtTGF5ZXIoKSBjb25zdCBvdmVycmlkZTsKKwordm9pZCByZXNoYXBlKGludCB3aWR0aCwg
aW50IGhlaWdodCk7CisKK3ZvaWQgbWFya0xheWVyQ29tcG9zaXRlZCgpOwordmlydHVhbCB2b2lk
IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkgb3ZlcnJpZGU7CitQYXNzUmVmUHRyPElt
YWdlRGF0YT4gcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKKwordm9pZCByZW1v
dmVTaGFyZWRPYmplY3QoV2ViR0xTaGFyZWRPYmplY3QqKTsKK3ZvaWQgcmVtb3ZlQ29udGV4dE9i
amVjdChXZWJHTENvbnRleHRPYmplY3QqKTsKKwordW5zaWduZWQgZ2V0TWF4VmVydGV4QXR0cmli
cygpIGNvbnN0IHsgcmV0dXJuIG1fbWF4VmVydGV4QXR0cmliczsgfQorCisvLyBBTkdMRV9pbnN0
YW5jZWRfYXJyYXlzIGV4dGVuc2lvbiBmdW5jdGlvbnMuCit2b2lkIGRyYXdBcnJheXNJbnN0YW5j
ZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6
ZWkgcHJpbWNvdW50KTsKK3ZvaWQgZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUs
IEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNp
emVpIHByaW1jb3VudCk7Cit2b2lkIHZlcnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgs
IEdDM0R1aW50IGRpdmlzb3IpOworCitwcm90ZWN0ZWQ6CitXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKEhUTUxDYW52YXNFbGVtZW50KiwgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMpOwor
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZShIVE1MQ2FudmFzRWxlbWVudCosIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+LCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyk7CisKK3By
aXZhdGU6CitmcmllbmQgY2xhc3MgV2ViR0xEcmF3QnVmZmVyczsKK2ZyaWVuZCBjbGFzcyBXZWJH
TEZyYW1lYnVmZmVyOworZnJpZW5kIGNsYXNzIFdlYkdMT2JqZWN0OworZnJpZW5kIGNsYXNzIE9F
U1ZlcnRleEFycmF5T2JqZWN0OworZnJpZW5kIGNsYXNzIFdlYkdMRGVidWdTaGFkZXJzOworZnJp
ZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM7CitmcmllbmQgY2xhc3MgV2ViR0xD
b21wcmVzc2VkVGV4dHVyZVBWUlRDOworZnJpZW5kIGNsYXNzIFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDOworZnJpZW5kIGNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNh
bGxiYWNrOworZnJpZW5kIGNsYXNzIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM7CisKK3ZvaWQg
aW5pdGlhbGl6ZU5ld0NvbnRleHQoKTsKK3ZvaWQgc2V0dXBGbGFncygpOworCisvLyBBY3RpdmVE
T01PYmplY3QKK3ZpcnR1YWwgYm9vbCBoYXNQZW5kaW5nQWN0aXZpdHkoKSBjb25zdCBvdmVycmlk
ZTsKK3ZpcnR1YWwgdm9pZCBzdG9wKCkgb3ZlcnJpZGU7Cit2aXJ0dWFsIGNvbnN0IGNoYXIqIGFj
dGl2ZURPTU9iamVjdE5hbWUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0IjsgfQorCit2b2lkIGFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCop
Owordm9pZCBhZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCopOwordm9pZCBkZXRh
Y2hBbmRSZW1vdmVBbGxPYmplY3RzKCk7CisKK3ZvaWQgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNE
KCk7Cit2b2lkIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworCisvLyBRdWVyeSB3aGV0aGVyIGl0IGlz
IGJ1aWx0IG9uIHRvcCBvZiBjb21wbGlhbnQgR0xFUzIgaW1wbGVtZW50YXRpb24uCitib29sIGlz
R0xFUzJDb21wbGlhbnQoKSB7IHJldHVybiBtX2lzR0xFUzJDb21wbGlhbnQ7IH0KKy8vIFF1ZXJ5
IGlmIHRoZSBHTCBpbXBsZW1lbnRhdGlvbiBpcyBOUE9UIHN0cmljdC4KK2Jvb2wgaXNHTEVTMk5Q
T1RTdHJpY3QoKSB7IHJldHVybiBtX2lzR0xFUzJOUE9UU3RyaWN0OyB9CisvLyBRdWVyeSBpZiB0
aGUgR0wgaW1wbGVtZW50YXRpb24gZ2VuZXJhdGVzIGVycm9ycyBvbiBvdXQtb2YtYm91bmRzIGJ1
ZmZlciBhY2Nlc3Nlcy4KK2Jvb2wgaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3Nl
cygpIHsgcmV0dXJuIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlczsgfQor
Ly8gUXVlcnkgaWYgdGhlIEdMIGltcGxlbWVudGF0aW9uIGluaXRpYWxpemVzIHRleHR1cmVzL3Jl
bmRlcmJ1ZmZlcnMgdG8gMC4KK2Jvb2wgaXNSZXNvdXJjZVNhZmUoKSB7IHJldHVybiBtX2lzUmVz
b3VyY2VTYWZlOyB9CisvLyBRdWVyeSBpZiBkZXB0aF9zdGVuY2lsIGJ1ZmZlciBpcyBzdXBwb3J0
ZWQuCitib29sIGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkgeyByZXR1cm4gbV9pc0RlcHRoU3Rl
bmNpbFN1cHBvcnRlZDsgfQorCisvLyBIZWxwZXIgdG8gcmV0dXJuIHRoZSBzaXplIGluIGJ5dGVz
IG9mIE9wZW5HTCBkYXRhIHR5cGVzCisvLyBsaWtlIEdMX0ZMT0FULCBHTF9JTlQsIGV0Yy4KK3Vu
c2lnbmVkIHNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUpOworCisvLyBCYXNpYyB2YWxpZGF0aW9u
IG9mIGNvdW50IGFuZCBvZmZzZXQgYWdhaW5zdCBudW1iZXIgb2YgZWxlbWVudHMgaW4gZWxlbWVu
dCBhcnJheSBidWZmZXIKK2Jvb2wgdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBj
b3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpOworCisvLyBDb25zZXJ2YXRp
dmUgYnV0IHF1aWNrIGluZGV4IHZhbGlkYXRpb24KK2Jvb2wgdmFsaWRhdGVJbmRleEFycmF5Q29u
c2VydmF0aXZlKEdDM0RlbnVtIHR5cGUsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKTsK
KworLy8gUHJlY2lzZSBidXQgc2xvdyBpbmRleCB2YWxpZGF0aW9uIC0tIG9ubHkgZG9uZSBpZiBj
b25zZXJ2YXRpdmUgY2hlY2tzIGZhaWwKK2Jvb2wgdmFsaWRhdGVJbmRleEFycmF5UHJlY2lzZShH
QzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0LCB1bnNpZ25l
ZCYgbnVtRWxlbWVudHNSZXF1aXJlZCk7Citib29sIHZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyh1
bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2lnbmVkIHByaW1pdGl2ZUNvdW50ID0gMCk7CisKK2Jv
b2wgdmFsaWRhdGVXZWJHTE9iamVjdChjb25zdCBjaGFyKiwgV2ViR0xPYmplY3QqKTsKKworYm9v
bCB2YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBt
b2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RzaXplaSBwcmltY291bnQp
OworYm9vbCB2YWxpZGF0ZURyYXdFbGVtZW50cyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9m
ZnNldCwgdW5zaWduZWQmIG51bUVsZW1lbnRzLCBHQzNEc2l6ZWkgcHJpbWNvdW50KTsKKworLy8g
QWRkcyBhIGNvbXByZXNzZWQgdGV4dHVyZSBmb3JtYXQuCit2b2lkIGFkZENvbXByZXNzZWRUZXh0
dXJlRm9ybWF0KEdDM0RlbnVtKTsKKworUGFzc1JlZlB0cjxJbWFnZT4gZHJhd0ltYWdlSW50b0J1
ZmZlcihJbWFnZSosIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRldmljZVNjYWxlRmFjdG9y
KTsKKworI2lmIEVOQUJMRShWSURFTykKK1Bhc3NSZWZQdHI8SW1hZ2U+IHZpZGVvRnJhbWVUb0lt
YWdlKEhUTUxWaWRlb0VsZW1lbnQqLCBCYWNraW5nU3RvcmVDb3B5LCBFeGNlcHRpb25Db2RlJik7
CisjZW5kaWYKKworUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CitSZWZQdHI8
V2ViR0xDb250ZXh0R3JvdXA+IG1fY29udGV4dEdyb3VwOworCisvLyBPcHRpb25hbCBzdHJ1Y3R1
cmUgZm9yIHJlbmRlcmluZyB0byBhIERyYXdpbmdCdWZmZXIsIGluc3RlYWQgb2YgZGlyZWN0bHkK
Ky8vIHRvIHRoZSBiYWNrLWJ1ZmZlciBvZiBtX2NvbnRleHQuCitSZWZQdHI8RHJhd2luZ0J1ZmZl
cj4gbV9kcmF3aW5nQnVmZmVyOworCisvLyBEaXNwYXRjaGVzIGEgY29udGV4dCBsb3N0IGV2ZW50
IG9uY2UgaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IG9uZSBpcyBuZWVkZWQuCisvLyBUaGlzIGlzIHVz
ZWQgYm90aCBmb3Igc3ludGhldGljIGFuZCByZWFsIGNvbnRleHQgbG9zc2VzLiBGb3IgcmVhbCBv
bmVzLCBpdCdzCisvLyBsaWtlbHkgdGhhdCB0aGVyZSdzIG5vIEphdmFTY3JpcHQgb24gdGhlIHN0
YWNrLCBidXQgdGhhdCBtaWdodCBiZSBkZXBlbmRlbnQKKy8vIG9uIGhvdyBleGFjdGx5IHRoZSBw
bGF0Zm9ybSBkaXNjb3ZlcnMgdGhhdCB0aGUgY29udGV4dCB3YXMgbG9zdC4gRm9yIGJldHRlcgor
Ly8gcG9ydGFiaWxpdHkgd2UgYWx3YXlzIGRlZmVyIHRoZSBkaXNwYXRjaCBvZiB0aGUgZXZlbnQu
CitUaW1lciBtX2Rpc3BhdGNoQ29udGV4dExvc3RFdmVudFRpbWVyOworYm9vbCBtX3Jlc3RvcmVB
bGxvd2VkOworVGltZXIgbV9yZXN0b3JlVGltZXI7CisKK2Jvb2wgbV9uZWVkc1VwZGF0ZTsKK2Jv
b2wgbV9tYXJrZWRDYW52YXNEaXJ0eTsKK0hhc2hTZXQ8V2ViR0xDb250ZXh0T2JqZWN0Kj4gbV9j
b250ZXh0T2JqZWN0czsKKworLy8gTGlzdCBvZiBib3VuZCBWQk8ncy4gVXNlZCB0byBtYWludGFp
biBpbmZvIGFib3V0IHNpemVzIGZvciBBUlJBWV9CVUZGRVIgYW5kIHN0b3JlZCB2YWx1ZXMgZm9y
IEVMRU1FTlRfQVJSQVlfQlVGRkVSCitSZWZQdHI8V2ViR0xCdWZmZXI+IG1fYm91bmRBcnJheUJ1
ZmZlcjsKKworUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fZGVmYXVsdFZlcnRl
eEFycmF5T2JqZWN0OworUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdDsKK3ZvaWQgc2V0Qm91bmRWZXJ0ZXhBcnJheU9iamVjdChQYXNzUmVm
UHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IGFycmF5T2JqZWN0KQoreworICAgIGlmIChh
cnJheU9iamVjdCkKKyAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gYXJyYXlPYmpl
Y3Q7CisgICAgZWxzZQorICAgICAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QgPSBtX2RlZmF1
bHRWZXJ0ZXhBcnJheU9iamVjdDsKK30KKworY2xhc3MgVmVydGV4QXR0cmliVmFsdWUgeworcHVi
bGljOgorICAgIFZlcnRleEF0dHJpYlZhbHVlKCkKKyAgICB7CisgICAgICAgIGluaXRWYWx1ZSgp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRWYWx1ZSgpCisgICAgeworICAgICAgICB2YWx1
ZVswXSA9IDAuMGY7CisgICAgICAgIHZhbHVlWzFdID0gMC4wZjsKKyAgICAgICAgdmFsdWVbMl0g
PSAwLjBmOworICAgICAgICB2YWx1ZVszXSA9IDEuMGY7CisgICAgfQorICAgIAorICAgIEdDM0Rm
bG9hdCB2YWx1ZVs0XTsKK307CitWZWN0b3I8VmVydGV4QXR0cmliVmFsdWU+IG1fdmVydGV4QXR0
cmliVmFsdWU7Cit1bnNpZ25lZCBtX21heFZlcnRleEF0dHJpYnM7CitSZWZQdHI8V2ViR0xCdWZm
ZXI+IG1fdmVydGV4QXR0cmliMEJ1ZmZlcjsKK2xvbmcgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyU2l6
ZTsKK0dDM0RmbG9hdCBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVs0XTsKK2Jvb2wgbV9mb3Jj
ZUF0dHJpYjBCdWZmZXJSZWZpbGw7Citib29sIG1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmU7CisK
K1JlZlB0cjxXZWJHTFByb2dyYW0+IG1fY3VycmVudFByb2dyYW07CitSZWZQdHI8V2ViR0xGcmFt
ZWJ1ZmZlcj4gbV9mcmFtZWJ1ZmZlckJpbmRpbmc7CitSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+
IG1fcmVuZGVyYnVmZmVyQmluZGluZzsKK3N0cnVjdCBUZXh0dXJlVW5pdFN0YXRlIHsKKyAgICBS
ZWZQdHI8V2ViR0xUZXh0dXJlPiB0ZXh0dXJlMkRCaW5kaW5nOworICAgIFJlZlB0cjxXZWJHTFRl
eHR1cmU+IHRleHR1cmVDdWJlTWFwQmluZGluZzsKK307CitWZWN0b3I8VGV4dHVyZVVuaXRTdGF0
ZT4gbV90ZXh0dXJlVW5pdHM7Cit1bnNpZ25lZCBsb25nIG1fYWN0aXZlVGV4dHVyZVVuaXQ7CisK
K1JlZlB0cjxXZWJHTFRleHR1cmU+IG1fYmxhY2tUZXh0dXJlMkQ7CitSZWZQdHI8V2ViR0xUZXh0
dXJlPiBtX2JsYWNrVGV4dHVyZUN1YmVNYXA7CisKK1ZlY3RvcjxHQzNEZW51bT4gbV9jb21wcmVz
c2VkVGV4dHVyZUZvcm1hdHM7CisKKy8vIEZpeGVkLXNpemUgY2FjaGUgb2YgcmV1c2FibGUgaW1h
Z2UgYnVmZmVycyBmb3IgdmlkZW8gdGV4SW1hZ2UyRCBjYWxscy4KK2NsYXNzIExSVUltYWdlQnVm
ZmVyQ2FjaGUgeworcHVibGljOgorICAgIExSVUltYWdlQnVmZmVyQ2FjaGUoaW50IGNhcGFjaXR5
KTsKKyAgICAvLyBUaGUgcG9pbnRlciByZXR1cm5lZCBpcyBvd25lZCBieSB0aGUgaW1hZ2UgYnVm
ZmVyIG1hcC4KKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6
ZSk7Citwcml2YXRlOgorICAgIHZvaWQgYnViYmxlVG9Gcm9udChpbnQgaWR4KTsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8c3RkOjp1bmlxdWVfcHRyPEltYWdlQnVmZmVyPltdPiBtX2J1ZmZlcnM7Cisg
ICAgaW50IG1fY2FwYWNpdHk7Cit9OworTFJVSW1hZ2VCdWZmZXJDYWNoZSBtX2dlbmVyYXRlZElt
YWdlQ2FjaGU7CisKK0dDM0RpbnQgbV9tYXhUZXh0dXJlU2l6ZTsKK0dDM0RpbnQgbV9tYXhDdWJl
TWFwVGV4dHVyZVNpemU7CitHQzNEaW50IG1fbWF4UmVuZGVyYnVmZmVyU2l6ZTsKK0dDM0RpbnQg
bV9tYXhWaWV3cG9ydERpbXNbMl07CitHQzNEaW50IG1fbWF4VGV4dHVyZUxldmVsOworR0MzRGlu
dCBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CisKK0dDM0RpbnQgbV9tYXhEcmF3QnVmZmVyczsK
K0dDM0RpbnQgbV9tYXhDb2xvckF0dGFjaG1lbnRzOworR0MzRGVudW0gbV9iYWNrRHJhd0J1ZmZl
cjsKK2Jvb2wgbV9kcmF3QnVmZmVyc1dlYkdMUmVxdWlyZW1lbnRzQ2hlY2tlZDsKK2Jvb2wgbV9k
cmF3QnVmZmVyc1N1cHBvcnRlZDsKKworR0MzRGludCBtX3BhY2tBbGlnbm1lbnQ7CitHQzNEaW50
IG1fdW5wYWNrQWxpZ25tZW50OworYm9vbCBtX3VucGFja0ZsaXBZOworYm9vbCBtX3VucGFja1By
ZW11bHRpcGx5QWxwaGE7CitHQzNEZW51bSBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uOwor
Ym9vbCBtX2NvbnRleHRMb3N0OworTG9zdENvbnRleHRNb2RlIG1fY29udGV4dExvc3RNb2RlOwor
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgbV9hdHRyaWJ1dGVzOworCitib29sIG1fbGF5
ZXJDbGVhcmVkOworR0MzRGZsb2F0IG1fY2xlYXJDb2xvcls0XTsKK2Jvb2wgbV9zY2lzc29yRW5h
YmxlZDsKK0dDM0RmbG9hdCBtX2NsZWFyRGVwdGg7CitHQzNEaW50IG1fY2xlYXJTdGVuY2lsOwor
R0MzRGJvb2xlYW4gbV9jb2xvck1hc2tbNF07CitHQzNEYm9vbGVhbiBtX2RlcHRoTWFzazsKKwor
Ym9vbCBtX3N0ZW5jaWxFbmFibGVkOworR0MzRHVpbnQgbV9zdGVuY2lsTWFzaywgbV9zdGVuY2ls
TWFza0JhY2s7CitHQzNEaW50IG1fc3RlbmNpbEZ1bmNSZWYsIG1fc3RlbmNpbEZ1bmNSZWZCYWNr
OyAvLyBOb3RlIHRoYXQgdGhlc2UgYXJlIHRoZSB1c2VyIHNwZWNpZmllZCB2YWx1ZXMsIG5vdCB0
aGUgaW50ZXJuYWwgY2xhbXBlZCB2YWx1ZS4KK0dDM0R1aW50IG1fc3RlbmNpbEZ1bmNNYXNrLCBt
X3N0ZW5jaWxGdW5jTWFza0JhY2s7CisKK2Jvb2wgbV9pc0dMRVMyQ29tcGxpYW50OworYm9vbCBt
X2lzR0xFUzJOUE9UU3RyaWN0OworYm9vbCBtX2lzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRz
QWNjZXNzZXM7Citib29sIG1faXNSZXNvdXJjZVNhZmU7Citib29sIG1faXNEZXB0aFN0ZW5jaWxT
dXBwb3J0ZWQ7Citib29sIG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkOworCitib29sIG1fc3lu
dGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGU7CitpbnQgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93
ZWQ7CisKKy8vIEEgV2ViR0xSZW5kZXJpbmdDb250ZXh0IGNhbiBiZSBjcmVhdGVkIGluIGEgc3Rh
dGUgd2hlcmUgaXQgYXBwZWFycyBhcworLy8gYSB2YWxpZCBhbmQgYWN0aXZlIGNvbnRleHQsIGJ1
dCB3aWxsIG5vdCBleGVjdXRlIGFueSBpbXBvcnRhbnQgb3BlcmF0aW9ucworLy8gdW50aWwgaXRz
IGxvYWQgcG9saWN5IGlzIGNvbXBsZXRlbHkgcmVzb2x2ZWQuCitib29sIG1faXNQZW5kaW5nUG9s
aWN5UmVzb2x1dGlvbjsKK2Jvb2wgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uOworYm9v
bCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCk7CisKKy8vIEVuYWJsZWQgZXh0ZW5zaW9uIG9iamVj
dHMuCitzdGQ6OnVuaXF1ZV9wdHI8RVhURnJhZ0RlcHRoPiBtX2V4dEZyYWdEZXB0aDsKK3N0ZDo6
dW5pcXVlX3B0cjxFWFRCbGVuZE1pbk1heD4gbV9leHRCbGVuZE1pbk1heDsKK3N0ZDo6dW5pcXVl
X3B0cjxFWFRzUkdCPiBtX2V4dHNSR0I7CitzdGQ6OnVuaXF1ZV9wdHI8RVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljPiBtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzsKK3N0ZDo6dW5pcXVl
X3B0cjxFWFRTaGFkZXJUZXh0dXJlTE9EPiBtX2V4dFNoYWRlclRleHR1cmVMT0Q7CitzdGQ6OnVu
aXF1ZV9wdHI8T0VTVGV4dHVyZUZsb2F0PiBtX29lc1RleHR1cmVGbG9hdDsKK3N0ZDo6dW5pcXVl
X3B0cjxPRVNUZXh0dXJlRmxvYXRMaW5lYXI+IG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyOworc3Rk
Ojp1bmlxdWVfcHRyPE9FU1RleHR1cmVIYWxmRmxvYXQ+IG1fb2VzVGV4dHVyZUhhbGZGbG9hdDsK
K3N0ZDo6dW5pcXVlX3B0cjxPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyPiBtX29lc1RleHR1cmVI
YWxmRmxvYXRMaW5lYXI7CitzdGQ6OnVuaXF1ZV9wdHI8T0VTU3RhbmRhcmREZXJpdmF0aXZlcz4g
bV9vZXNTdGFuZGFyZERlcml2YXRpdmVzOworc3RkOjp1bmlxdWVfcHRyPE9FU1ZlcnRleEFycmF5
T2JqZWN0PiBtX29lc1ZlcnRleEFycmF5T2JqZWN0Oworc3RkOjp1bmlxdWVfcHRyPE9FU0VsZW1l
bnRJbmRleFVpbnQ+IG1fb2VzRWxlbWVudEluZGV4VWludDsKK3N0ZDo6dW5pcXVlX3B0cjxXZWJH
TExvc2VDb250ZXh0PiBtX3dlYmdsTG9zZUNvbnRleHQ7CitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xE
ZWJ1Z1JlbmRlcmVySW5mbz4gbV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvOworc3RkOjp1bmlxdWVf
cHRyPFdlYkdMRGVidWdTaGFkZXJzPiBtX3dlYmdsRGVidWdTaGFkZXJzOworc3RkOjp1bmlxdWVf
cHRyPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+IG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZUFU
QzsKK3N0ZDo6dW5pcXVlX3B0cjxXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEM+IG1fd2ViZ2xD
b21wcmVzc2VkVGV4dHVyZVBWUlRDOworc3RkOjp1bmlxdWVfcHRyPFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDPiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDOworc3RkOjp1bmlxdWVfcHRy
PFdlYkdMRGVwdGhUZXh0dXJlPiBtX3dlYmdsRGVwdGhUZXh0dXJlOworc3RkOjp1bmlxdWVfcHRy
PFdlYkdMRHJhd0J1ZmZlcnM+IG1fd2ViZ2xEcmF3QnVmZmVyczsKK3N0ZDo6dW5pcXVlX3B0cjxB
TkdMRUluc3RhbmNlZEFycmF5cz4gbV9hbmdsZUluc3RhbmNlZEFycmF5czsKKworLy8gSGVscGVy
cyBmb3IgZ2V0UGFyYW1ldGVyIGFuZCBvdGhlcnMKK1dlYkdMR2V0SW5mbyBnZXRCb29sZWFuUGFy
YW1ldGVyKEdDM0RlbnVtKTsKK1dlYkdMR2V0SW5mbyBnZXRCb29sZWFuQXJyYXlQYXJhbWV0ZXIo
R0MzRGVudW0pOworV2ViR0xHZXRJbmZvIGdldEZsb2F0UGFyYW1ldGVyKEdDM0RlbnVtKTsKK1dl
YkdMR2V0SW5mbyBnZXRJbnRQYXJhbWV0ZXIoR0MzRGVudW0pOworV2ViR0xHZXRJbmZvIGdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKEdDM0RlbnVtKTsKK1dlYkdMR2V0SW5mbyBnZXRXZWJHTEZsb2F0
QXJyYXlQYXJhbWV0ZXIoR0MzRGVudW0pOworV2ViR0xHZXRJbmZvIGdldFdlYkdMSW50QXJyYXlQ
YXJhbWV0ZXIoR0MzRGVudW0pOworCisvLyBDbGVhciB0aGUgYmFja2J1ZmZlciBpZiBpdCB3YXMg
Y29tcG9zaXRlZCBzaW5jZSB0aGUgbGFzdCBvcGVyYXRpb24uCisvLyBjbGVhck1hc2sgaXMgc2V0
IHRvIHRoZSBiaXRmaWVsZCBvZiBhbnkgY2xlYXIgdGhhdCB3b3VsZCBoYXBwZW4gYW55d2F5IGF0
IHRoaXMgdGltZQorLy8gYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhhdCBjbGVh
ciBpcyBub3cgdW5uZWNlc3NhcnkuCitib29sIGNsZWFySWZDb21wb3NpdGVkKEdDM0RiaXRmaWVs
ZCBjbGVhck1hc2sgPSAwKTsKKworLy8gSGVscGVyIHRvIHJlc3RvcmUgc3RhdGUgdGhhdCBjbGVh
cmluZyB0aGUgZnJhbWVidWZmZXIgbWF5IGRlc3Ryb3kuCit2b2lkIHJlc3RvcmVTdGF0ZUFmdGVy
Q2xlYXIoKTsKKwordm9pZCB0ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUs
IGNvbnN0IHZvaWQqIHBpeGVscywgRXhjZXB0aW9uQ29kZSYpOwordm9pZCB0ZXhJbWFnZTJESW1w
bChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdlKiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkltYWdlSHRtbERvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBFeGNlcHRpb25Db2RlJik7Cit2b2lkIHRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0
eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKTsKK3ZvaWQgdGV4U3ViSW1h
Z2UyREltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQs
IEdDM0RpbnQgeW9mZnNldCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSos
IEdyYXBoaWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UsIGJvb2wgZmxpcFksIGJvb2wg
cHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYpOworCit2b2lkIGNoZWNrVGV4dHVyZUNv
bXBsZXRlbmVzcyhjb25zdCBjaGFyKiwgYm9vbCk7CisKK3ZvaWQgY3JlYXRlRmFsbGJhY2tCbGFj
a1RleHR1cmVzMXgxKCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiBmb3IgY29weVRleHtTdWJ9SW1h
Z2UsIGNoZWNrIHdoZXRoZXIgdGhlIGludGVybmFsZm9ybWF0CisvLyBhbmQgdGhlIGNvbG9yIGJ1
ZmZlciBmb3JtYXQgb2YgdGhlIGN1cnJlbnQgYm91bmQgZnJhbWVidWZmZXIgY29tYmluYXRpb24K
Ky8vIGlzIHZhbGlkLgorYm9vbCBpc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZmZXJDb21iaW5h
dGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LEdDM0RlbnVtIGNvbG9yQnVmZmVy
Rm9ybWF0KTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIGdldCB0aGUgYm91bmQgZnJhbWVidWZm
ZXIncyBjb2xvciBidWZmZXIgZm9ybWF0LgorR0MzRGVudW0gZ2V0Qm91bmRGcmFtZWJ1ZmZlckNv
bG9yRm9ybWF0KCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1l
YnVmZmVyJ3Mgd2lkdGguCitpbnQgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCk7CisKKy8vIEhl
bHBlciBmdW5jdGlvbiB0byBnZXQgdGhlIGJvdW5kIGZyYW1lYnVmZmVyJ3MgaGVpZ2h0LgoraW50
IGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZl
cmlmeSBsaW1pdHMgb24gdGhlIGxlbmd0aCBvZiB1bmlmb3JtIGFuZCBhdHRyaWJ1dGUgbG9jYXRp
b25zLgorYm9vbCB2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgU3RyaW5nJik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpZiBzaXpl
IGlzIG5vbi1uZWdhdGl2ZS4KKy8vIEdlbmVyYXRlIEdMIGVycm9yIGFuZCByZXR1cm4gZmFsc2Ug
Zm9yIG5lZ2F0aXZlIGlucHV0czsgb3RoZXJ3aXNlLCByZXR1cm4gdHJ1ZS4KK2Jvb2wgdmFsaWRh
dGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4LCBHQzNEaW50IHkpOwor
CisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hlY2sgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0
cmluZyBiZWxvbmcgdG8gdGhlCisvLyBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbiBHTFNMIEVT
IDEuMCBzcGVjIHNlY3Rpb24gMy4xLgorYm9vbCB2YWxpZGF0ZVN0cmluZyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gY2hl
Y2sgdGFyZ2V0IGFuZCB0ZXh0dXJlIGJvdW5kIHRvIHRoZSB0YXJnZXQuCisvLyBHZW5lcmF0ZSBH
TCBlcnJvcnMgYW5kIHJldHVybiAwIGlmIHRhcmdldCBpcyBpbnZhbGlkIG9yIHRleHR1cmUgYm91
bmQgaXMKKy8vIG51bGwuICBPdGhlcndpc2UsIHJldHVybiB0aGUgdGV4dHVyZSBib3VuZCB0byB0
aGUgdGFyZ2V0LgorV2ViR0xUZXh0dXJlKiB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3Vi
ZU1hcCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBmb3JtYXQvdHlwZSBm
b3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1hZ2UuCisvLyBHZW5lcmF0ZXMgR0wgZXJyb3Ig
YW5kIHJldHVybnMgZmFsc2UgaWYgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4KK2Jvb2wgdmFsaWRh
dGVUZXhGdW5jRm9ybWF0QW5kVHlwZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgR0MzRGludCBsZXZlbCk7CisKKy8vIEhlbHBlciBmdW5j
dGlvbiB0byBjaGVjayBpbnB1dCBsZXZlbCBmb3IgZnVuY3Rpb25zIHtjb3B5fVRleHtTdWJ9SW1h
Z2UuCisvLyBHZW5lcmF0ZXMgR0wgZXJyb3IgYW5kIHJldHVybnMgZmFsc2UgaWYgbGV2ZWwgaXMg
aW52YWxpZC4KK2Jvb2wgdmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpOworCitlbnVtIFRleEZ1bmNWYWxp
ZGF0aW9uRnVuY3Rpb25UeXBlIHsKKyAgICBOb3RUZXhTdWJJbWFnZTJELAorICAgIFRleFN1Yklt
YWdlMkQsCit9OworCitlbnVtIFRleEZ1bmNWYWxpZGF0aW9uU291cmNlVHlwZSB7CisgICAgU291
cmNlQXJyYXlCdWZmZXJWaWV3LAorICAgIFNvdXJjZUltYWdlRGF0YSwKKyAgICBTb3VyY2VIVE1M
SW1hZ2VFbGVtZW50LAorICAgIFNvdXJjZUhUTUxDYW52YXNFbGVtZW50LAorICAgIFNvdXJjZUhU
TUxWaWRlb0VsZW1lbnQsCit9OworCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtTdWJ9SW1h
Z2UyRCB0byBjaGVjayBpZiB0aGUgaW5wdXQgZm9ybWF0L3R5cGUvbGV2ZWwvdGFyZ2V0L3dpZHRo
L2hlaWdodC9ib3JkZXIveG9mZnNldC95b2Zmc2V0IGFyZSB2YWxpZC4KKy8vIE90aGVyd2lzZSwg
aXQgd291bGQgcmV0dXJuIHF1aWNrbHkgd2l0aG91dCBkb2luZyBvdGhlciB3b3JrLgorYm9vbCB2
YWxpZGF0ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRhdGlv
bkZ1bmN0aW9uVHlwZSwgVGV4RnVuY1ZhbGlkYXRpb25Tb3VyY2VUeXBlLCBHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lk
dGgsCisgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRl
ciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0Rp
bnQgeW9mZnNldCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBjaGVjayBpbnB1dCBwYXJhbWV0
ZXJzIGZvciBmdW5jdGlvbnMge2NvcHl9VGV4e1N1Yn1JbWFnZS4KKy8vIEdlbmVyYXRlcyBHTCBl
cnJvciBhbmQgcmV0dXJucyBmYWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgorYm9vbCB2
YWxpZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0aW9uVHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxm
b3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUpOworCitlbnVtIE51bGxEaXNw
b3NpdGlvbiB7CisgICAgTnVsbEFsbG93ZWQsCisgICAgTnVsbE5vdEFsbG93ZWQKK307CisKKy8v
IEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSB0aGF0IHRoZSBnaXZlbiBBcnJheUJ1ZmZlclZp
ZXcKKy8vIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUgYW5kIGNvbnRhaW5zIGVub3VnaCBkYXRhIGZv
ciB0aGUgdGV4SW1hZ2UgY2FsbC4KKy8vIEdlbmVyYXRlcyBHTCBlcnJvciBhbmQgcmV0dXJucyBm
YWxzZSBpZiBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLgorYm9vbCB2YWxpZGF0ZVRleEZ1bmNEYXRh
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCBsZXZlbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIE51bGxEaXNwb3NpdGlvbik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxp
ZGF0ZSBhIGdpdmVuIHRleHR1cmUgZm9ybWF0IGlzIHNldHRhYmxlIGFzIGluCisvLyB5b3UgY2Fu
IHN1cHBseSBkYXRhIHRvIHRleEltYWdlMkQsIG9yIGNhbGwgdGV4SW1hZ2UyRCwgY29weVRleElt
YWdlMkQgYW5kCisvLyBjb3B5VGV4U3ViSW1hZ2UyRC4KKy8vIEdlbmVyYXRlcyBHTCBlcnJvciBh
bmQgcmV0dXJucyBmYWxzZSBpZiB0aGUgZm9ybWF0IGlzIG5vdCBzZXR0YWJsZS4KK2Jvb2wgdmFs
aWRhdGVTZXR0YWJsZVRleEZvcm1hdChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IGZvcm1hdCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21wcmVzc2VkIHRl
eHR1cmUgZGF0YSBpcyBjb3JyZWN0IHNpemUKKy8vIGZvciB0aGUgZ2l2ZW4gZm9ybWF0IGFuZCBk
aW1lbnNpb25zLgorYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhGdW5jRGF0YShjb25zdCBjaGFy
KiBmdW5jdGlvbk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscyk7CisKKy8v
IEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsaWRhdGluZyBjb21wcmVzc2VkIHRleHR1cmUgZm9ybWF0
cy4KK2Jvb2wgdmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCk7CisK
Ky8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21wcmVzc2VkIHRleHR1cmUgZGltZW5z
aW9ucyBhcmUgdmFsaWQgZm9yCisvLyB0aGUgZ2l2ZW4gZm9ybWF0LgorYm9vbCB2YWxpZGF0ZUNv
bXByZXNzZWRUZXhEaW1lbnNpb25zKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQs
IEdDM0RlbnVtIGZvcm1hdCk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBjb21w
cmVzc2VkIHRleHR1cmUgZGltZW5zaW9ucyBhcmUgdmFsaWQgZm9yCisvLyB0aGUgZ2l2ZW4gZm9y
bWF0LgorYm9vbCB2YWxpZGF0ZUNvbXByZXNzZWRUZXhTdWJEaW1lbnNpb25zKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1h
dCwgV2ViR0xUZXh0dXJlKik7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBtb2Rl
IGZvciBkcmF3e0FycmF5cy9FbGVtZW50c30uCitib29sIHZhbGlkYXRlRHJhd01vZGUoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2
YWxpZGF0ZSBpZiBmcm9udC9iYWNrIHN0ZW5jaWxNYXNrIGFuZCBzdGVuY2lsRnVuYyBzZXR0aW5n
cyBhcmUgdGhlIHNhbWUuCitib29sIHZhbGlkYXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBzdGVuY2ls
IGZ1bmMuCitib29sIHZhbGlkYXRlU3RlbmNpbEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSk7CisKKy8vIEhlbHBlciBmdW5jdGlvbiBmb3IgdGV4UGFyYW1ldGVyZiBhbmQg
dGV4UGFyYW1ldGVyaS4KK3ZvaWQgdGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbWksIEdDM0RpbnQgcGFyYW1mLCBib29sIGlzRmxvYXQp
OworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gcHJpbnQgR0wgZXJyb3JzIHRvIGNvbnNvbGUuCit2
b2lkIHByaW50R0xFcnJvclRvQ29uc29sZShjb25zdCBTdHJpbmcmKTsKK3ZvaWQgcHJpbnRHTFdh
cm5pbmdUb0NvbnNvbGUoY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIHJlYXNvbik7
CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byBwcmludCB3YXJuaW5ncyB0byBjb25zb2xlLiBDdXJy
ZW50bHkKKy8vIHVzZWQgb25seSB0byB3YXJuIGFib3V0IHVzZSBvZiBvYnNvbGV0ZSBmdW5jdGlv
bnMuCit2b2lkIHByaW50V2FybmluZ1RvQ29uc29sZShjb25zdCBTdHJpbmcmKTsKKworLy8gSGVs
cGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMgZm9yIGZyYW1lYnVmZmVy
IGZ1bmN0aW9ucy4KKy8vIEdlbmVyYXRlIEdMIGVycm9yIGlmIHBhcmFtZXRlcnMgYXJlIGlsbGVn
YWwuCitib29sIHZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycyhjb25zdCBjaGFyKiBm
dW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCk7CisKKy8v
IEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBibGVuZCBlcXVhdGlvbiBtb2RlLgorYm9vbCB2
YWxpZGF0ZUJsZW5kRXF1YXRpb24oY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSk7
CisKKy8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBibGVuZCBmdW5jIGZhY3RvcnMuCiti
b29sIHZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdD
M0RlbnVtIHNyYywgR0MzRGVudW0gZHN0KTsKKworLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlk
YXRlIGEgR0wgY2FwYWJpbGl0eS4KK2Jvb2wgdmFsaWRhdGVDYXBhYmlsaXR5KGNvbnN0IGNoYXIq
IGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0pOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRh
dGUgaW5wdXQgcGFyYW1ldGVycyBmb3IgdW5pZm9ybSBmdW5jdGlvbnMuCitib29sIHZhbGlkYXRl
VW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiosIEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBtb2QpOworYm9vbCB2YWxp
ZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qLCBJbnQzMkFycmF5KiwgR0MzRHNpemVpIG1vZCk7Citib29sIHZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBX
ZWJHTFVuaWZvcm1Mb2NhdGlvbiosIHZvaWQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBtb2QpOwor
Ym9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IEZsb2F0MzJBcnJheSosIEdDM0RzaXplaSBtb2QpOworYm9vbCB2YWxpZGF0ZVVuaWZvcm1NYXRy
aXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIHZvaWQqLCBHQzNEc2l6ZWksIEdDM0Rz
aXplaSBtb2QpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgcGFyYW1ldGVycyBm
b3IgYnVmZmVyRGF0YS4KKy8vIFJldHVybiB0aGUgY3VycmVudCBib3VuZCBidWZmZXIgdG8gdGFy
Z2V0LCBvciAwIGlmIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuCitXZWJHTEJ1ZmZlciogdmFsaWRh
dGVCdWZmZXJEYXRhUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVt
IHRhcmdldCwgR0MzRGVudW0gdXNhZ2UpOworCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHtT
dWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgaW1hZ2UgaXMgcmVhZHkgYW5kIHdvdWxkbid0IHRhaW50
IE9yaWdpbi4KK2Jvb2wgdmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0
aW9uTmFtZSwgSFRNTEltYWdlRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKKworLy8gSGVscGVy
IGZ1bmN0aW9uIGZvciB0ZXh7U3VifUltYWdlMkQgdG8gbWFrZSBzdXJlIGNhbnZhcyBpcyByZWFk
eSBhbmQgd291bGRuJ3QgdGFpbnQgT3JpZ2luLgorYm9vbCB2YWxpZGF0ZUhUTUxDYW52YXNFbGVt
ZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgSFRNTENhbnZhc0VsZW1lbnQqLCBFeGNlcHRp
b25Db2RlJik7CisKKyNpZiBFTkFCTEUoVklERU8pCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRl
eHtTdWJ9SW1hZ2UyRCB0byBtYWtlIHN1cmUgdmlkZW8gaXMgcmVhZHkgd291bGRuJ3QgdGFpbnQg
T3JpZ2luLgorYm9vbCB2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBIVE1MVmlkZW9FbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOworI2VuZGlmCisKKy8v
IEhlbHBlciBmdW5jdGlvbnMgZm9yIHZlcnRleEF0dHJpYk5me3Z9Lgordm9pZCB2ZXJ0ZXhBdHRy
aWJmSW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50IGluZGV4LCBHQzNEc2l6
ZWkgZXhwZWN0ZWRTaXplLCBHQzNEZmxvYXQsIEdDM0RmbG9hdCwgR0MzRGZsb2F0LCBHQzNEZmxv
YXQpOwordm9pZCB2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiwgR0MzRHNpemVpIGV4cGVjdGVkU2l6ZSk7Cit2
b2lkIHZlcnRleEF0dHJpYmZ2SW1wbChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQqLCBHQzNEc2l6ZWksIEdDM0RzaXplaSBleHBlY3RlZFNpemUpOwor
CisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGRlbGV0ZSogKGRlbGV0ZUJ1ZmZlciwgZGVsZXRlUHJv
Z3JhbSwgZXRjKSBmdW5jdGlvbnMuCisvLyBSZXR1cm4gZmFsc2UgaWYgY2FsbGVyIHNob3VsZCBy
ZXR1cm4gd2l0aG91dCBmdXJ0aGVyIHByb2Nlc3NpbmcuCitib29sIGRlbGV0ZU9iamVjdChXZWJH
TE9iamVjdCopOworCisvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJpbmQqIChiaW5kQnVmZmVyLCBi
aW5kVGV4dHVyZSwgZXRjKSBhbmQgdXNlUHJvZ3JhbS4KKy8vIElmIHRoZSBvYmplY3QgaGFzIGFs
cmVhZHkgYmVlbiBkZWxldGVkLCBzZXQgZGVsZXRlZCB0byB0cnVlIHVwb24gcmV0dXJuLgorLy8g
UmV0dXJuIGZhbHNlIGlmIGNhbGxlciBzaG91bGQgcmV0dXJuIHdpdGhvdXQgZnVydGhlciBwcm9j
ZXNzaW5nLgorYm9vbCBjaGVja09iamVjdFRvQmVCb3VuZChjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIFdlYkdMT2JqZWN0KiwgYm9vbCYgZGVsZXRlZCk7CisKKy8vIEhlbHBlcnMgZm9yIHNpbXVs
YXRpbmcgdmVydGV4QXR0cmliMAordm9pZCBpbml0VmVydGV4QXR0cmliMCgpOworYm9vbCBzaW11
bGF0ZVZlcnRleEF0dHJpYjAoR0MzRHNpemVpIG51bVZlcnRleCk7Cit2b2lkIHJlc3RvcmVTdGF0
ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCk7CisKK3ZvaWQgZGlzcGF0Y2hDb250ZXh0
TG9zdEV2ZW50KCk7CisvLyBIZWxwZXIgZm9yIHJlc3RvcmF0aW9uIGFmdGVyIGNvbnRleHQgbG9z
dC4KK3ZvaWQgbWF5YmVSZXN0b3JlQ29udGV4dCgpOworCisvLyBEZXRlcm1pbmUgaWYgd2UgYXJl
IHJ1bm5pbmcgcHJpdmlsZWdlZCBjb2RlIGluIHRoZSBicm93c2VyLCBmb3IgZXhhbXBsZSwKKy8v
IGEgU2FmYXJpIG9yIENocm9tZSBleHRlbnNpb24uCitib29sIGFsbG93UHJpdmlsZWdlZEV4dGVu
c2lvbnMoKSBjb25zdDsKKworZW51bSBDb25zb2xlRGlzcGxheVByZWZlcmVuY2UgeworICAgIERp
c3BsYXlJbkNvbnNvbGUsCisgICAgRG9udERpc3BsYXlJbkNvbnNvbGUKK307CisKKy8vIFdyYXBw
ZXIgZm9yIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJvciB0aGF0IHNlbmRzIGEg
bWVzc2FnZQorLy8gdG8gdGhlIEphdmFTY3JpcHQgY29uc29sZS4KK3ZvaWQgc3ludGhlc2l6ZUdM
RXJyb3IoR0MzRGVudW0sIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgY29uc3QgY2hhciogZGVz
Y3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSA9IERpc3BsYXlJbkNvbnNvbGUpOwor
CitTdHJpbmcgZW5zdXJlTm90TnVsbChjb25zdCBTdHJpbmcmKSBjb25zdDsKKworLy8gRW5hYmxl
IG9yIGRpc2FibGUgc3RlbmNpbCB0ZXN0IGJhc2VkIG9uIHVzZXIgc2V0dGluZyBhbmQKKy8vIHdo
ZXRoZXIgdGhlIGN1cnJlbnQgRkJPIGhhcyBhIHN0ZW5jaWwgYnVmZmVyLgordm9pZCBhcHBseVN0
ZW5jaWxUZXN0KCk7CisKKy8vIEhlbHBlciBmb3IgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGEgY2Fw
YWJpbGl0eS4KK3ZvaWQgZW5hYmxlT3JEaXNhYmxlKEdDM0RlbnVtIGNhcGFiaWxpdHksIGJvb2wg
ZW5hYmxlKTsKKworLy8gQ2xhbXAgdGhlIHdpZHRoIGFuZCBoZWlnaHQgdG8gR0xfTUFYX1ZJRVdQ
T1JUX0RJTVMuCitJbnRTaXplIGNsYW1wZWRDYW52YXNTaXplKCk7CisKKy8vIEZpcnN0IHRpbWUg
Y2FsbGVkLCBpZiBFWFRfZHJhd19idWZmZXJzIGlzIHN1cHBvcnRlZCwgcXVlcnkgdGhlIHZhbHVl
OyBvdGhlcndpc2UgcmV0dXJuIDAuCisvLyBMYXRlciwgcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUu
CitHQzNEaW50IGdldE1heERyYXdCdWZmZXJzKCk7CitHQzNEaW50IGdldE1heENvbG9yQXR0YWNo
bWVudHMoKTsKKwordm9pZCBzZXRCYWNrRHJhd0J1ZmZlcihHQzNEZW51bSk7CisKK3ZvaWQgcmVz
dG9yZUN1cnJlbnRGcmFtZWJ1ZmZlcigpOwordm9pZCByZXN0b3JlQ3VycmVudFRleHR1cmUyRCgp
OworCisvLyBDaGVjayBpZiBFWFRfZHJhd19idWZmZXJzIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQg
YW5kIGlmIGl0IHNhdGlzZmllcyB0aGUgV2ViR0wgcmVxdWlyZW1lbnRzLgorYm9vbCBzdXBwb3J0
c0RyYXdCdWZmZXJzKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5pZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5pZGwJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY3NyBAQAorLyoKKyogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyoKKyogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworKiBhcmUgbWV0Ogor
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorKi8KKwordHlwZWRlZiB1bnNpZ25lZCBs
b25nICBHTGVudW07Cit0eXBlZGVmIGJvb2xlYW4gICAgICAgIEdMYm9vbGVhbjsKK3R5cGVkZWYg
dW5zaWduZWQgbG9uZyAgR0xiaXRmaWVsZDsKK3R5cGVkZWYgYnl0ZSAgICAgICAgICAgR0xieXRl
OyAgICAgICAgIC8qICdieXRlJyBzaG91bGQgYmUgYSBzaWduZWQgOCBiaXQgdHlwZS4gKi8KK3R5
cGVkZWYgc2hvcnQgICAgICAgICAgR0xzaG9ydDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgR0xp
bnQ7Cit0eXBlZGVmIGxvbmcgICAgICAgICAgIEdMc2l6ZWk7Cit0eXBlZGVmIGxvbmcgbG9uZyAg
ICAgIEdMaW50cHRyOwordHlwZWRlZiBsb25nIGxvbmcgICAgICBHTHNpemVpcHRyOwordHlwZWRl
ZiBvY3RldCAgICAgICAgICBHTHVieXRlOyAgICAgICAgLyogJ29jdGV0JyBzaG91bGQgYmUgYW4g
dW5zaWduZWQgOCBiaXQgdHlwZS4gKi8KK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgR0x1c2hvcnQ7
Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIEdMdWludDsKK3R5cGVkZWYgdW5yZXN0cmljdGVkIGZs
b2F0IEdMZmxvYXQ7Cit0eXBlZGVmIHVucmVzdHJpY3RlZCBmbG9hdCBHTGNsYW1wZjsKKworWwor
Q29uZGl0aW9uYWw9V0VCR0wsCitKU0N1c3RvbU1hcmtGdW5jdGlvbiwKK0RvTm90Q2hlY2tDb25z
dGFudHMsCitdIGludGVyZmFjZSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlIDogQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dCB7CisKKy8qIENsZWFyQnVmZmVyTWFzayAqLworY29uc3QgR0xlbnVtIERF
UFRIX0JVRkZFUl9CSVQgICAgICAgICAgICAgICA9IDB4MDAwMDAxMDA7Citjb25zdCBHTGVudW0g
U1RFTkNJTF9CVUZGRVJfQklUICAgICAgICAgICAgID0gMHgwMDAwMDQwMDsKK2NvbnN0IEdMZW51
bSBDT0xPUl9CVUZGRVJfQklUICAgICAgICAgICAgICAgPSAweDAwMDA0MDAwOworCisvKiBCZWdp
bk1vZGUgKi8KK2NvbnN0IEdMZW51bSBQT0lOVFMgICAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDAwMDA7Citjb25zdCBHTGVudW0gTElORVMgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgw
MDAxOworY29uc3QgR0xlbnVtIExJTkVfTE9PUCAgICAgICAgICAgICAgICAgICAgICA9IDB4MDAw
MjsKK2NvbnN0IEdMZW51bSBMSU5FX1NUUklQICAgICAgICAgICAgICAgICAgICAgPSAweDAwMDM7
Citjb25zdCBHTGVudW0gVFJJQU5HTEVTICAgICAgICAgICAgICAgICAgICAgID0gMHgwMDA0Owor
Y29uc3QgR0xlbnVtIFRSSUFOR0xFX1NUUklQICAgICAgICAgICAgICAgICA9IDB4MDAwNTsKK2Nv
bnN0IEdMZW51bSBUUklBTkdMRV9GQU4gICAgICAgICAgICAgICAgICAgPSAweDAwMDY7CisKKy8q
IEFscGhhRnVuY3Rpb24gKG5vdCBzdXBwb3J0ZWQgaW4gRVMyMCkgKi8KKy8qICAgICAgTkVWRVIg
Ki8KKy8qICAgICAgTEVTUyAqLworLyogICAgICBFUVVBTCAqLworLyogICAgICBMRVFVQUwgKi8K
Ky8qICAgICAgR1JFQVRFUiAqLworLyogICAgICBOT1RFUVVBTCAqLworLyogICAgICBHRVFVQUwg
Ki8KKy8qICAgICAgQUxXQVlTICovCisKKy8qIEJsZW5kaW5nRmFjdG9yRGVzdCAqLworY29uc3Qg
R0xlbnVtIFpFUk8gICAgICAgICAgICAgICAgICAgICAgICAgICA9IDA7Citjb25zdCBHTGVudW0g
T05FICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMTsKK2NvbnN0IEdMZW51bSBTUkNfQ09M
T1IgICAgICAgICAgICAgICAgICAgICAgPSAweDAzMDA7Citjb25zdCBHTGVudW0gT05FX01JTlVT
X1NSQ19DT0xPUiAgICAgICAgICAgID0gMHgwMzAxOworY29uc3QgR0xlbnVtIFNSQ19BTFBIQSAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MDMwMjsKK2NvbnN0IEdMZW51bSBPTkVfTUlOVVNfU1JD
X0FMUEhBICAgICAgICAgICAgPSAweDAzMDM7Citjb25zdCBHTGVudW0gRFNUX0FMUEhBICAgICAg
ICAgICAgICAgICAgICAgID0gMHgwMzA0OworY29uc3QgR0xlbnVtIE9ORV9NSU5VU19EU1RfQUxQ
SEEgICAgICAgICAgICA9IDB4MDMwNTsKKworLyogQmxlbmRpbmdGYWN0b3JTcmMgKi8KKy8qICAg
ICAgWkVSTyAqLworLyogICAgICBPTkUgKi8KK2NvbnN0IEdMZW51bSBEU1RfQ09MT1IgICAgICAg
ICAgICAgICAgICAgICAgPSAweDAzMDY7Citjb25zdCBHTGVudW0gT05FX01JTlVTX0RTVF9DT0xP
UiAgICAgICAgICAgID0gMHgwMzA3OworY29uc3QgR0xlbnVtIFNSQ19BTFBIQV9TQVRVUkFURSAg
ICAgICAgICAgICA9IDB4MDMwODsKKy8qICAgICAgU1JDX0FMUEhBICovCisvKiAgICAgIE9ORV9N
SU5VU19TUkNfQUxQSEEgKi8KKy8qICAgICAgRFNUX0FMUEhBICovCisvKiAgICAgIE9ORV9NSU5V
U19EU1RfQUxQSEEgKi8KKworLyogQmxlbmRFcXVhdGlvblNlcGFyYXRlICovCitjb25zdCBHTGVu
dW0gRlVOQ19BREQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDA2OworY29uc3QgR0xlbnVt
IEJMRU5EX0VRVUFUSU9OICAgICAgICAgICAgICAgICA9IDB4ODAwOTsKK2NvbnN0IEdMZW51bSBC
TEVORF9FUVVBVElPTl9SR0IgICAgICAgICAgICAgPSAweDgwMDk7ICAgLyogc2FtZSBhcyBCTEVO
RF9FUVVBVElPTiAqLworY29uc3QgR0xlbnVtIEJMRU5EX0VRVUFUSU9OX0FMUEhBICAgICAgICAg
ICA9IDB4ODgzRDsKKworLyogQmxlbmRTdWJ0cmFjdCAqLworY29uc3QgR0xlbnVtIEZVTkNfU1VC
VFJBQ1QgICAgICAgICAgICAgICAgICA9IDB4ODAwQTsKK2NvbnN0IEdMZW51bSBGVU5DX1JFVkVS
U0VfU1VCVFJBQ1QgICAgICAgICAgPSAweDgwMEI7CisKKy8qIFNlcGFyYXRlIEJsZW5kIEZ1bmN0
aW9ucyAqLworY29uc3QgR0xlbnVtIEJMRU5EX0RTVF9SR0IgICAgICAgICAgICAgICAgICA9IDB4
ODBDODsKK2NvbnN0IEdMZW51bSBCTEVORF9TUkNfUkdCICAgICAgICAgICAgICAgICAgPSAweDgw
Qzk7Citjb25zdCBHTGVudW0gQkxFTkRfRFNUX0FMUEhBICAgICAgICAgICAgICAgID0gMHg4MENB
OworY29uc3QgR0xlbnVtIEJMRU5EX1NSQ19BTFBIQSAgICAgICAgICAgICAgICA9IDB4ODBDQjsK
K2NvbnN0IEdMZW51bSBDT05TVEFOVF9DT0xPUiAgICAgICAgICAgICAgICAgPSAweDgwMDE7Citj
b25zdCBHTGVudW0gT05FX01JTlVTX0NPTlNUQU5UX0NPTE9SICAgICAgID0gMHg4MDAyOworY29u
c3QgR0xlbnVtIENPTlNUQU5UX0FMUEhBICAgICAgICAgICAgICAgICA9IDB4ODAwMzsKK2NvbnN0
IEdMZW51bSBPTkVfTUlOVVNfQ09OU1RBTlRfQUxQSEEgICAgICAgPSAweDgwMDQ7Citjb25zdCBH
TGVudW0gQkxFTkRfQ09MT1IgICAgICAgICAgICAgICAgICAgID0gMHg4MDA1OworCisvKiBCdWZm
ZXIgT2JqZWN0cyAqLworY29uc3QgR0xlbnVtIEFSUkFZX0JVRkZFUiAgICAgICAgICAgICAgICAg
ICA9IDB4ODg5MjsKK2NvbnN0IEdMZW51bSBFTEVNRU5UX0FSUkFZX0JVRkZFUiAgICAgICAgICAg
PSAweDg4OTM7Citjb25zdCBHTGVudW0gQVJSQVlfQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0g
MHg4ODk0OworY29uc3QgR0xlbnVtIEVMRU1FTlRfQVJSQVlfQlVGRkVSX0JJTkRJTkcgICA9IDB4
ODg5NTsKKworY29uc3QgR0xlbnVtIFNUUkVBTV9EUkFXICAgICAgICAgICAgICAgICAgICA9IDB4
ODhFMDsKK2NvbnN0IEdMZW51bSBTVEFUSUNfRFJBVyAgICAgICAgICAgICAgICAgICAgPSAweDg4
RTQ7Citjb25zdCBHTGVudW0gRFlOQU1JQ19EUkFXICAgICAgICAgICAgICAgICAgID0gMHg4OEU4
OworCitjb25zdCBHTGVudW0gQlVGRkVSX1NJWkUgICAgICAgICAgICAgICAgICAgID0gMHg4NzY0
OworY29uc3QgR0xlbnVtIEJVRkZFUl9VU0FHRSAgICAgICAgICAgICAgICAgICA9IDB4ODc2NTsK
KworY29uc3QgR0xlbnVtIENVUlJFTlRfVkVSVEVYX0FUVFJJQiAgICAgICAgICA9IDB4ODYyNjsK
KworLyogQ3VsbEZhY2VNb2RlICovCitjb25zdCBHTGVudW0gRlJPTlQgICAgICAgICAgICAgICAg
ICAgICAgICAgID0gMHgwNDA0OworY29uc3QgR0xlbnVtIEJBQ0sgICAgICAgICAgICAgICAgICAg
ICAgICAgICA9IDB4MDQwNTsKK2NvbnN0IEdMZW51bSBGUk9OVF9BTkRfQkFDSyAgICAgICAgICAg
ICAgICAgPSAweDA0MDg7CisKKy8qIERlcHRoRnVuY3Rpb24gKi8KKy8qICAgICAgTkVWRVIgKi8K
Ky8qICAgICAgTEVTUyAqLworLyogICAgICBFUVVBTCAqLworLyogICAgICBMRVFVQUwgKi8KKy8q
ICAgICAgR1JFQVRFUiAqLworLyogICAgICBOT1RFUVVBTCAqLworLyogICAgICBHRVFVQUwgKi8K
Ky8qICAgICAgQUxXQVlTICovCisKKy8qIEVuYWJsZUNhcCAqLworY29uc3QgR0xlbnVtIFRFWFRV
UkVfMkQgICAgICAgICAgICAgICAgICAgICA9IDB4MERFMTsKK2NvbnN0IEdMZW51bSBDVUxMX0ZB
Q0UgICAgICAgICAgICAgICAgICAgICAgPSAweDBCNDQ7Citjb25zdCBHTGVudW0gQkxFTkQgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgwQkUyOworY29uc3QgR0xlbnVtIERJVEhFUiAgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MEJEMDsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX1RFU1Qg
ICAgICAgICAgICAgICAgICAgPSAweDBCOTA7Citjb25zdCBHTGVudW0gREVQVEhfVEVTVCAgICAg
ICAgICAgICAgICAgICAgID0gMHgwQjcxOworY29uc3QgR0xlbnVtIFNDSVNTT1JfVEVTVCAgICAg
ICAgICAgICAgICAgICA9IDB4MEMxMTsKK2NvbnN0IEdMZW51bSBQT0xZR09OX09GRlNFVF9GSUxM
ICAgICAgICAgICAgPSAweDgwMzc7Citjb25zdCBHTGVudW0gU0FNUExFX0FMUEhBX1RPX0NPVkVS
QUdFICAgICAgID0gMHg4MDlFOworY29uc3QgR0xlbnVtIFNBTVBMRV9DT1ZFUkFHRSAgICAgICAg
ICAgICAgICA9IDB4ODBBMDsKKworLyogRXJyb3JDb2RlICovCitjb25zdCBHTGVudW0gTk9fRVJS
T1IgICAgICAgICAgICAgICAgICAgICAgID0gMDsKK2NvbnN0IEdMZW51bSBJTlZBTElEX0VOVU0g
ICAgICAgICAgICAgICAgICAgPSAweDA1MDA7Citjb25zdCBHTGVudW0gSU5WQUxJRF9WQUxVRSAg
ICAgICAgICAgICAgICAgID0gMHgwNTAxOworY29uc3QgR0xlbnVtIElOVkFMSURfT1BFUkFUSU9O
ICAgICAgICAgICAgICA9IDB4MDUwMjsKK2NvbnN0IEdMZW51bSBPVVRfT0ZfTUVNT1JZICAgICAg
ICAgICAgICAgICAgPSAweDA1MDU7CisKKy8qIEZyb250RmFjZURpcmVjdGlvbiAqLworY29uc3Qg
R0xlbnVtIENXICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDkwMDsKK2NvbnN0IEdM
ZW51bSBDQ1cgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDA5MDE7CisKKy8qIEdldFBO
YW1lICovCitjb25zdCBHTGVudW0gTElORV9XSURUSCAgICAgICAgICAgICAgICAgICAgID0gMHgw
QjIxOworY29uc3QgR0xlbnVtIEFMSUFTRURfUE9JTlRfU0laRV9SQU5HRSAgICAgICA9IDB4ODQ2
RDsKK2NvbnN0IEdMZW51bSBBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0UgICAgICAgPSAweDg0NkU7
Citjb25zdCBHTGVudW0gQ1VMTF9GQUNFX01PREUgICAgICAgICAgICAgICAgID0gMHgwQjQ1Owor
Y29uc3QgR0xlbnVtIEZST05UX0ZBQ0UgICAgICAgICAgICAgICAgICAgICA9IDB4MEI0NjsKK2Nv
bnN0IEdMZW51bSBERVBUSF9SQU5HRSAgICAgICAgICAgICAgICAgICAgPSAweDBCNzA7Citjb25z
dCBHTGVudW0gREVQVEhfV1JJVEVNQVNLICAgICAgICAgICAgICAgID0gMHgwQjcyOworY29uc3Qg
R0xlbnVtIERFUFRIX0NMRUFSX1ZBTFVFICAgICAgICAgICAgICA9IDB4MEI3MzsKK2NvbnN0IEdM
ZW51bSBERVBUSF9GVU5DICAgICAgICAgICAgICAgICAgICAgPSAweDBCNzQ7Citjb25zdCBHTGVu
dW0gU1RFTkNJTF9DTEVBUl9WQUxVRSAgICAgICAgICAgID0gMHgwQjkxOworY29uc3QgR0xlbnVt
IFNURU5DSUxfRlVOQyAgICAgICAgICAgICAgICAgICA9IDB4MEI5MjsKK2NvbnN0IEdMZW51bSBT
VEVOQ0lMX0ZBSUwgICAgICAgICAgICAgICAgICAgPSAweDBCOTQ7Citjb25zdCBHTGVudW0gU1RF
TkNJTF9QQVNTX0RFUFRIX0ZBSUwgICAgICAgID0gMHgwQjk1OworY29uc3QgR0xlbnVtIFNURU5D
SUxfUEFTU19ERVBUSF9QQVNTICAgICAgICA9IDB4MEI5NjsKK2NvbnN0IEdMZW51bSBTVEVOQ0lM
X1JFRiAgICAgICAgICAgICAgICAgICAgPSAweDBCOTc7Citjb25zdCBHTGVudW0gU1RFTkNJTF9W
QUxVRV9NQVNLICAgICAgICAgICAgID0gMHgwQjkzOworY29uc3QgR0xlbnVtIFNURU5DSUxfV1JJ
VEVNQVNLICAgICAgICAgICAgICA9IDB4MEI5ODsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tf
RlVOQyAgICAgICAgICAgICAgPSAweDg4MDA7Citjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX0ZB
SUwgICAgICAgICAgICAgID0gMHg4ODAxOworY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19QQVNT
X0RFUFRIX0ZBSUwgICA9IDB4ODgwMjsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfUEFTU19E
RVBUSF9QQVNTICAgPSAweDg4MDM7Citjb25zdCBHTGVudW0gU1RFTkNJTF9CQUNLX1JFRiAgICAg
ICAgICAgICAgID0gMHg4Q0EzOworY29uc3QgR0xlbnVtIFNURU5DSUxfQkFDS19WQUxVRV9NQVNL
ICAgICAgICA9IDB4OENBNDsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0JBQ0tfV1JJVEVNQVNLICAg
ICAgICAgPSAweDhDQTU7Citjb25zdCBHTGVudW0gVklFV1BPUlQgICAgICAgICAgICAgICAgICAg
ICAgID0gMHgwQkEyOworY29uc3QgR0xlbnVtIFNDSVNTT1JfQk9YICAgICAgICAgICAgICAgICAg
ICA9IDB4MEMxMDsKKy8qICAgICAgU0NJU1NPUl9URVNUICovCitjb25zdCBHTGVudW0gQ09MT1Jf
Q0xFQVJfVkFMVUUgICAgICAgICAgICAgID0gMHgwQzIyOworY29uc3QgR0xlbnVtIENPTE9SX1dS
SVRFTUFTSyAgICAgICAgICAgICAgICA9IDB4MEMyMzsKK2NvbnN0IEdMZW51bSBVTlBBQ0tfQUxJ
R05NRU5UICAgICAgICAgICAgICAgPSAweDBDRjU7Citjb25zdCBHTGVudW0gUEFDS19BTElHTk1F
TlQgICAgICAgICAgICAgICAgID0gMHgwRDA1OworY29uc3QgR0xlbnVtIE1BWF9URVhUVVJFX1NJ
WkUgICAgICAgICAgICAgICA9IDB4MEQzMzsKK2NvbnN0IEdMZW51bSBNQVhfVklFV1BPUlRfRElN
UyAgICAgICAgICAgICAgPSAweDBEM0E7Citjb25zdCBHTGVudW0gU1VCUElYRUxfQklUUyAgICAg
ICAgICAgICAgICAgID0gMHgwRDUwOworY29uc3QgR0xlbnVtIFJFRF9CSVRTICAgICAgICAgICAg
ICAgICAgICAgICA9IDB4MEQ1MjsKK2NvbnN0IEdMZW51bSBHUkVFTl9CSVRTICAgICAgICAgICAg
ICAgICAgICAgPSAweDBENTM7Citjb25zdCBHTGVudW0gQkxVRV9CSVRTICAgICAgICAgICAgICAg
ICAgICAgID0gMHgwRDU0OworY29uc3QgR0xlbnVtIEFMUEhBX0JJVFMgICAgICAgICAgICAgICAg
ICAgICA9IDB4MEQ1NTsKK2NvbnN0IEdMZW51bSBERVBUSF9CSVRTICAgICAgICAgICAgICAgICAg
ICAgPSAweDBENTY7Citjb25zdCBHTGVudW0gU1RFTkNJTF9CSVRTICAgICAgICAgICAgICAgICAg
ID0gMHgwRDU3OworY29uc3QgR0xlbnVtIFBPTFlHT05fT0ZGU0VUX1VOSVRTICAgICAgICAgICA9
IDB4MkEwMDsKKy8qICAgICAgUE9MWUdPTl9PRkZTRVRfRklMTCAqLworY29uc3QgR0xlbnVtIFBP
TFlHT05fT0ZGU0VUX0ZBQ1RPUiAgICAgICAgICA9IDB4ODAzODsKK2NvbnN0IEdMZW51bSBURVhU
VVJFX0JJTkRJTkdfMkQgICAgICAgICAgICAgPSAweDgwNjk7Citjb25zdCBHTGVudW0gU0FNUExF
X0JVRkZFUlMgICAgICAgICAgICAgICAgID0gMHg4MEE4OworY29uc3QgR0xlbnVtIFNBTVBMRVMg
ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODBBOTsKK2NvbnN0IEdMZW51bSBTQU1QTEVfQ09W
RVJBR0VfVkFMVUUgICAgICAgICAgPSAweDgwQUE7Citjb25zdCBHTGVudW0gU0FNUExFX0NPVkVS
QUdFX0lOVkVSVCAgICAgICAgID0gMHg4MEFCOworCisvKiBHZXRUZXh0dXJlUGFyYW1ldGVyICov
CisvKiAgICAgIFRFWFRVUkVfTUFHX0ZJTFRFUiAqLworLyogICAgICBURVhUVVJFX01JTl9GSUxU
RVIgKi8KKy8qICAgICAgVEVYVFVSRV9XUkFQX1MgKi8KKy8qICAgICAgVEVYVFVSRV9XUkFQX1Qg
Ki8KKworY29uc3QgR0xlbnVtIENPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTICAgICA9IDB4ODZB
MzsKKworLyogSGludE1vZGUgKi8KK2NvbnN0IEdMZW51bSBET05UX0NBUkUgICAgICAgICAgICAg
ICAgICAgICAgPSAweDExMDA7Citjb25zdCBHTGVudW0gRkFTVEVTVCAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHgxMTAxOworY29uc3QgR0xlbnVtIE5JQ0VTVCAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4MTEwMjsKKworLyogSGludFRhcmdldCAqLworY29uc3QgR0xlbnVtIEdFTkVSQVRF
X01JUE1BUF9ISU5UICAgICAgICAgICAgPSAweDgxOTI7CisKKy8qIERhdGFUeXBlICovCitjb25z
dCBHTGVudW0gQllURSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDAwOworY29uc3Qg
R0xlbnVtIFVOU0lHTkVEX0JZVEUgICAgICAgICAgICAgICAgICA9IDB4MTQwMTsKK2NvbnN0IEdM
ZW51bSBTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE0MDI7Citjb25zdCBHTGVu
dW0gVU5TSUdORURfU0hPUlQgICAgICAgICAgICAgICAgID0gMHgxNDAzOworY29uc3QgR0xlbnVt
IElOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTQwNDsKK2NvbnN0IEdMZW51bSBV
TlNJR05FRF9JTlQgICAgICAgICAgICAgICAgICAgPSAweDE0MDU7Citjb25zdCBHTGVudW0gRkxP
QVQgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxNDA2OworCisvKiBQaXhlbEZvcm1hdCAq
LworY29uc3QgR0xlbnVtIERFUFRIX0NPTVBPTkVOVCAgICAgICAgICAgICAgICA9IDB4MTkwMjsK
K2NvbnN0IEdMZW51bSBBTFBIQSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDY7Citj
b25zdCBHTGVudW0gUkdCICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxOTA3OworY29u
c3QgR0xlbnVtIFJHQkEgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MTkwODsKK2NvbnN0
IEdMZW51bSBMVU1JTkFOQ0UgICAgICAgICAgICAgICAgICAgICAgPSAweDE5MDk7Citjb25zdCBH
TGVudW0gTFVNSU5BTkNFX0FMUEhBICAgICAgICAgICAgICAgID0gMHgxOTBBOworCisvKiBQaXhl
bFR5cGUgKi8KKy8qICAgICAgVU5TSUdORURfQllURSAqLworY29uc3QgR0xlbnVtIFVOU0lHTkVE
X1NIT1JUXzRfNF80XzQgICAgICAgICA9IDB4ODAzMzsKK2NvbnN0IEdMZW51bSBVTlNJR05FRF9T
SE9SVF81XzVfNV8xICAgICAgICAgPSAweDgwMzQ7Citjb25zdCBHTGVudW0gVU5TSUdORURfU0hP
UlRfNV82XzUgICAgICAgICAgID0gMHg4MzYzOworCisvKiBTaGFkZXJzICovCitjb25zdCBHTGVu
dW0gRlJBR01FTlRfU0hBREVSICAgICAgICAgICAgICAgICAgPSAweDhCMzA7Citjb25zdCBHTGVu
dW0gVkVSVEVYX1NIQURFUiAgICAgICAgICAgICAgICAgICAgPSAweDhCMzE7Citjb25zdCBHTGVu
dW0gTUFYX1ZFUlRFWF9BVFRSSUJTICAgICAgICAgICAgICAgPSAweDg4Njk7Citjb25zdCBHTGVu
dW0gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgICAgICAgPSAweDhERkI7Citjb25zdCBHTGVu
dW0gTUFYX1ZBUllJTkdfVkVDVE9SUyAgICAgICAgICAgICAgPSAweDhERkM7Citjb25zdCBHTGVu
dW0gTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAweDhCNEQ7Citjb25zdCBHTGVu
dW0gTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTICAgPSAweDhCNEM7Citjb25zdCBHTGVu
dW0gTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgICAgICAgICAgPSAweDg4NzI7Citjb25zdCBHTGVu
dW0gTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyAgICAgPSAweDhERkQ7Citjb25zdCBHTGVu
dW0gU0hBREVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNEY7Citjb25zdCBHTGVu
dW0gREVMRVRFX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgPSAweDhCODA7Citjb25zdCBHTGVu
dW0gTElOS19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgPSAweDhCODI7Citjb25zdCBHTGVu
dW0gVkFMSURBVEVfU1RBVFVTICAgICAgICAgICAgICAgICAgPSAweDhCODM7Citjb25zdCBHTGVu
dW0gQVRUQUNIRURfU0hBREVSUyAgICAgICAgICAgICAgICAgPSAweDhCODU7Citjb25zdCBHTGVu
dW0gQUNUSVZFX1VOSUZPUk1TICAgICAgICAgICAgICAgICAgPSAweDhCODY7Citjb25zdCBHTGVu
dW0gQUNUSVZFX0FUVFJJQlVURVMgICAgICAgICAgICAgICAgPSAweDhCODk7Citjb25zdCBHTGVu
dW0gU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OICAgICAgICAgPSAweDhCOEM7Citjb25zdCBHTGVu
dW0gQ1VSUkVOVF9QUk9HUkFNICAgICAgICAgICAgICAgICAgPSAweDhCOEQ7CisKKy8qIFN0ZW5j
aWxGdW5jdGlvbiAqLworY29uc3QgR0xlbnVtIE5FVkVSICAgICAgICAgICAgICAgICAgICAgICAg
ICA9IDB4MDIwMDsKK2NvbnN0IEdMZW51bSBMRVNTICAgICAgICAgICAgICAgICAgICAgICAgICAg
PSAweDAyMDE7Citjb25zdCBHTGVudW0gRVFVQUwgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgwMjAyOworY29uc3QgR0xlbnVtIExFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4
MDIwMzsKK2NvbnN0IEdMZW51bSBHUkVBVEVSICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAy
MDQ7Citjb25zdCBHTGVudW0gTk9URVFVQUwgICAgICAgICAgICAgICAgICAgICAgID0gMHgwMjA1
OworY29uc3QgR0xlbnVtIEdFUVVBTCAgICAgICAgICAgICAgICAgICAgICAgICA9IDB4MDIwNjsK
K2NvbnN0IEdMZW51bSBBTFdBWVMgICAgICAgICAgICAgICAgICAgICAgICAgPSAweDAyMDc7CisK
Ky8qIFN0ZW5jaWxPcCAqLworLyogICAgICBaRVJPICovCitjb25zdCBHTGVudW0gS0VFUCAgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHgxRTAwOworY29uc3QgR0xlbnVtIFJFUExBQ0UgICAg
ICAgICAgICAgICAgICAgICAgICA9IDB4MUUwMTsKK2NvbnN0IEdMZW51bSBJTkNSICAgICAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDFFMDI7Citjb25zdCBHTGVudW0gREVDUiAgICAgICAgICAg
ICAgICAgICAgICAgICAgID0gMHgxRTAzOworY29uc3QgR0xlbnVtIElOVkVSVCAgICAgICAgICAg
ICAgICAgICAgICAgICA9IDB4MTUwQTsKK2NvbnN0IEdMZW51bSBJTkNSX1dSQVAgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg1MDc7Citjb25zdCBHTGVudW0gREVDUl9XUkFQICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NTA4OworCisvKiBTdHJpbmdOYW1lICovCitjb25zdCBHTGVudW0gVkVO
RE9SICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgxRjAwOworY29uc3QgR0xlbnVtIFJFTkRF
UkVSICAgICAgICAgICAgICAgICAgICAgICA9IDB4MUYwMTsKK2NvbnN0IEdMZW51bSBWRVJTSU9O
ICAgICAgICAgICAgICAgICAgICAgICAgPSAweDFGMDI7CisKKy8qIFRleHR1cmVNYWdGaWx0ZXIg
Ki8KK2NvbnN0IEdMZW51bSBORUFSRVNUICAgICAgICAgICAgICAgICAgICAgICAgPSAweDI2MDA7
Citjb25zdCBHTGVudW0gTElORUFSICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyNjAxOwor
CisvKiBUZXh0dXJlTWluRmlsdGVyICovCisvKiAgICAgIE5FQVJFU1QgKi8KKy8qICAgICAgTElO
RUFSICovCitjb25zdCBHTGVudW0gTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCAgICAgICAgID0gMHgy
NzAwOworY29uc3QgR0xlbnVtIExJTkVBUl9NSVBNQVBfTkVBUkVTVCAgICAgICAgICA9IDB4Mjcw
MTsKK2NvbnN0IEdMZW51bSBORUFSRVNUX01JUE1BUF9MSU5FQVIgICAgICAgICAgPSAweDI3MDI7
Citjb25zdCBHTGVudW0gTElORUFSX01JUE1BUF9MSU5FQVIgICAgICAgICAgID0gMHgyNzAzOwor
CisvKiBUZXh0dXJlUGFyYW1ldGVyTmFtZSAqLworY29uc3QgR0xlbnVtIFRFWFRVUkVfTUFHX0ZJ
TFRFUiAgICAgICAgICAgICA9IDB4MjgwMDsKK2NvbnN0IEdMZW51bSBURVhUVVJFX01JTl9GSUxU
RVIgICAgICAgICAgICAgPSAweDI4MDE7Citjb25zdCBHTGVudW0gVEVYVFVSRV9XUkFQX1MgICAg
ICAgICAgICAgICAgID0gMHgyODAyOworY29uc3QgR0xlbnVtIFRFWFRVUkVfV1JBUF9UICAgICAg
ICAgICAgICAgICA9IDB4MjgwMzsKKworLyogVGV4dHVyZVRhcmdldCAqLworLyogICAgICBURVhU
VVJFXzJEICovCitjb25zdCBHTGVudW0gVEVYVFVSRSAgICAgICAgICAgICAgICAgICAgICAgID0g
MHgxNzAyOworCitjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUCAgICAgICAgICAgICAgID0g
MHg4NTEzOworY29uc3QgR0xlbnVtIFRFWFRVUkVfQklORElOR19DVUJFX01BUCAgICAgICA9IDB4
ODUxNDsKK2NvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ggICAgPSAweDg1
MTU7Citjb25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YICAgID0gMHg4NTE2
OworY29uc3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWSAgICA9IDB4ODUxNzsK
K2NvbnN0IEdMZW51bSBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1kgICAgPSAweDg1MTg7Citj
b25zdCBHTGVudW0gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aICAgID0gMHg4NTE5OworY29u
c3QgR0xlbnVtIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWiAgICA9IDB4ODUxQTsKK2NvbnN0
IEdMZW51bSBNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFICAgICAgPSAweDg1MUM7CisKKy8qIFRl
eHR1cmVVbml0ICovCitjb25zdCBHTGVudW0gVEVYVFVSRTAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4NEMwOworY29uc3QgR0xlbnVtIFRFWFRVUkUxICAgICAgICAgICAgICAgICAgICAgICA9
IDB4ODRDMTsKK2NvbnN0IEdMZW51bSBURVhUVVJFMiAgICAgICAgICAgICAgICAgICAgICAgPSAw
eDg0QzI7Citjb25zdCBHTGVudW0gVEVYVFVSRTMgICAgICAgICAgICAgICAgICAgICAgID0gMHg4
NEMzOworY29uc3QgR0xlbnVtIFRFWFRVUkU0ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRD
NDsKK2NvbnN0IEdMZW51bSBURVhUVVJFNSAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0QzU7
Citjb25zdCBHTGVudW0gVEVYVFVSRTYgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM2Owor
Y29uc3QgR0xlbnVtIFRFWFRVUkU3ICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDNzsKK2Nv
bnN0IEdMZW51bSBURVhUVVJFOCAgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Qzg7Citjb25z
dCBHTGVudW0gVEVYVFVSRTkgICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEM5OworY29uc3Qg
R0xlbnVtIFRFWFRVUkUxMCAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDQTsKK2NvbnN0IEdM
ZW51bSBURVhUVVJFMTEgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0I7Citjb25zdCBHTGVu
dW0gVEVYVFVSRTEyICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENDOworY29uc3QgR0xlbnVt
IFRFWFRVUkUxMyAgICAgICAgICAgICAgICAgICAgICA9IDB4ODRDRDsKK2NvbnN0IEdMZW51bSBU
RVhUVVJFMTQgICAgICAgICAgICAgICAgICAgICAgPSAweDg0Q0U7Citjb25zdCBHTGVudW0gVEVY
VFVSRTE1ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NENGOworY29uc3QgR0xlbnVtIFRFWFRV
UkUxNiAgICAgICAgICAgICAgICAgICAgICA9IDB4ODREMDsKK2NvbnN0IEdMZW51bSBURVhUVVJF
MTcgICAgICAgICAgICAgICAgICAgICAgPSAweDg0RDE7Citjb25zdCBHTGVudW0gVEVYVFVSRTE4
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4NEQyOworY29uc3QgR0xlbnVtIFRFWFRVUkUxOSAg
ICAgICAgICAgICAgICAgICAgICA9IDB4ODREMzsKK2NvbnN0IEdMZW51bSBURVhUVVJFMjAgICAg
ICAgICAgICAgICAgICAgICAgPSAweDg0RDQ7Citjb25zdCBHTGVudW0gVEVYVFVSRTIxICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4NEQ1OworY29uc3QgR0xlbnVtIFRFWFRVUkUyMiAgICAgICAg
ICAgICAgICAgICAgICA9IDB4ODRENjsKK2NvbnN0IEdMZW51bSBURVhUVVJFMjMgICAgICAgICAg
ICAgICAgICAgICAgPSAweDg0RDc7Citjb25zdCBHTGVudW0gVEVYVFVSRTI0ICAgICAgICAgICAg
ICAgICAgICAgID0gMHg4NEQ4OworY29uc3QgR0xlbnVtIFRFWFRVUkUyNSAgICAgICAgICAgICAg
ICAgICAgICA9IDB4ODREOTsKK2NvbnN0IEdMZW51bSBURVhUVVJFMjYgICAgICAgICAgICAgICAg
ICAgICAgPSAweDg0REE7Citjb25zdCBHTGVudW0gVEVYVFVSRTI3ICAgICAgICAgICAgICAgICAg
ICAgID0gMHg4NERCOworY29uc3QgR0xlbnVtIFRFWFRVUkUyOCAgICAgICAgICAgICAgICAgICAg
ICA9IDB4ODREQzsKK2NvbnN0IEdMZW51bSBURVhUVVJFMjkgICAgICAgICAgICAgICAgICAgICAg
PSAweDg0REQ7Citjb25zdCBHTGVudW0gVEVYVFVSRTMwICAgICAgICAgICAgICAgICAgICAgID0g
MHg4NERFOworY29uc3QgR0xlbnVtIFRFWFRVUkUzMSAgICAgICAgICAgICAgICAgICAgICA9IDB4
ODRERjsKK2NvbnN0IEdMZW51bSBBQ1RJVkVfVEVYVFVSRSAgICAgICAgICAgICAgICAgPSAweDg0
RTA7CisKKy8qIFRleHR1cmVXcmFwTW9kZSAqLworY29uc3QgR0xlbnVtIFJFUEVBVCAgICAgICAg
ICAgICAgICAgICAgICAgICA9IDB4MjkwMTsKK2NvbnN0IEdMZW51bSBDTEFNUF9UT19FREdFICAg
ICAgICAgICAgICAgICAgPSAweDgxMkY7Citjb25zdCBHTGVudW0gTUlSUk9SRURfUkVQRUFUICAg
ICAgICAgICAgICAgID0gMHg4MzcwOworCisvKiBVbmlmb3JtIFR5cGVzICovCitjb25zdCBHTGVu
dW0gRkxPQVRfVkVDMiAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUwOworY29uc3QgR0xlbnVt
IEZMT0FUX1ZFQzMgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1MTsKK2NvbnN0IEdMZW51bSBG
TE9BVF9WRUM0ICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTI7Citjb25zdCBHTGVudW0gSU5U
X1ZFQzIgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjUzOworY29uc3QgR0xlbnVtIElOVF9W
RUMzICAgICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NDsKK2NvbnN0IEdMZW51bSBJTlRfVkVD
NCAgICAgICAgICAgICAgICAgICAgICAgPSAweDhCNTU7Citjb25zdCBHTGVudW0gQk9PTCAgICAg
ICAgICAgICAgICAgICAgICAgICAgID0gMHg4QjU2OworY29uc3QgR0xlbnVtIEJPT0xfVkVDMiAg
ICAgICAgICAgICAgICAgICAgICA9IDB4OEI1NzsKK2NvbnN0IEdMZW51bSBCT09MX1ZFQzMgICAg
ICAgICAgICAgICAgICAgICAgPSAweDhCNTg7Citjb25zdCBHTGVudW0gQk9PTF9WRUM0ICAgICAg
ICAgICAgICAgICAgICAgID0gMHg4QjU5OworY29uc3QgR0xlbnVtIEZMT0FUX01BVDIgICAgICAg
ICAgICAgICAgICAgICA9IDB4OEI1QTsKK2NvbnN0IEdMZW51bSBGTE9BVF9NQVQzICAgICAgICAg
ICAgICAgICAgICAgPSAweDhCNUI7Citjb25zdCBHTGVudW0gRkxPQVRfTUFUNCAgICAgICAgICAg
ICAgICAgICAgID0gMHg4QjVDOworY29uc3QgR0xlbnVtIFNBTVBMRVJfMkQgICAgICAgICAgICAg
ICAgICAgICA9IDB4OEI1RTsKK2NvbnN0IEdMZW51bSBTQU1QTEVSX0NVQkUgICAgICAgICAgICAg
ICAgICAgPSAweDhCNjA7CisKKy8qIFZlcnRleCBBcnJheXMgKi8KK2NvbnN0IEdMZW51bSBWRVJU
RVhfQVRUUklCX0FSUkFZX0VOQUJMRUQgICAgICAgID0gMHg4NjIyOworY29uc3QgR0xlbnVtIFZF
UlRFWF9BVFRSSUJfQVJSQVlfU0laRSAgICAgICAgICAgPSAweDg2MjM7Citjb25zdCBHTGVudW0g
VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREUgICAgICAgICA9IDB4ODYyNDsKK2NvbnN0IEdMZW51
bSBWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUgICAgICAgICAgID0gMHg4NjI1OworY29uc3QgR0xl
bnVtIFZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRCAgICAgPSAweDg4NkE7Citjb25zdCBH
TGVudW0gVkVSVEVYX0FUVFJJQl9BUlJBWV9QT0lOVEVSICAgICAgICA9IDB4ODY0NTsKK2NvbnN0
IEdMZW51bSBWRVJURVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HID0gMHg4ODlGOworCisv
KiBTaGFkZXIgU291cmNlICovCitjb25zdCBHTGVudW0gQ09NUElMRV9TVEFUVVMgICAgICAgICAg
ICAgICAgID0gMHg4QjgxOworCisvKiBTaGFkZXIgUHJlY2lzaW9uLVNwZWNpZmllZCBUeXBlcyAq
LworY29uc3QgR0xlbnVtIExPV19GTE9BVCAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMDsK
K2NvbnN0IEdMZW51bSBNRURJVU1fRkxPQVQgICAgICAgICAgICAgICAgICAgPSAweDhERjE7Citj
b25zdCBHTGVudW0gSElHSF9GTE9BVCAgICAgICAgICAgICAgICAgICAgID0gMHg4REYyOworY29u
c3QgR0xlbnVtIExPV19JTlQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4OERGMzsKK2NvbnN0
IEdMZW51bSBNRURJVU1fSU5UICAgICAgICAgICAgICAgICAgICAgPSAweDhERjQ7Citjb25zdCBH
TGVudW0gSElHSF9JTlQgICAgICAgICAgICAgICAgICAgICAgID0gMHg4REY1OworCisvKiBGcmFt
ZWJ1ZmZlciBPYmplY3QuICovCitjb25zdCBHTGVudW0gRlJBTUVCVUZGRVIgICAgICAgICAgICAg
ICAgICAgID0gMHg4RDQwOworY29uc3QgR0xlbnVtIFJFTkRFUkJVRkZFUiAgICAgICAgICAgICAg
ICAgICA9IDB4OEQ0MTsKKworY29uc3QgR0xlbnVtIFJHQkE0ICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDB4ODA1NjsKK2NvbnN0IEdMZW51bSBSR0I1X0ExICAgICAgICAgICAgICAgICAgICAg
ICAgPSAweDgwNTc7Citjb25zdCBHTGVudW0gUkdCNTY1ICAgICAgICAgICAgICAgICAgICAgICAg
ID0gMHg4RDYyOworY29uc3QgR0xlbnVtIERFUFRIX0NPTVBPTkVOVDE2ICAgICAgICAgICAgICA9
IDB4ODFBNTsKK2NvbnN0IEdMZW51bSBTVEVOQ0lMX0lOREVYICAgICAgICAgICAgICAgICAgPSAw
eDE5MDE7Citjb25zdCBHTGVudW0gU1RFTkNJTF9JTkRFWDggICAgICAgICAgICAgICAgID0gMHg4
RDQ4OworY29uc3QgR0xlbnVtIERFUFRIX1NURU5DSUwgICAgICAgICAgICAgICAgICA9IDB4ODRG
OTsKKworY29uc3QgR0xlbnVtIFNSR0JfRVhUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgID0gMHg4QzQwOworY29uc3QgR0xlbnVtIFNSR0JfQUxQSEFfRVhUICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgID0gMHg4QzQyOworY29uc3QgR0xlbnVtIFNSR0I4X0FMUEhBOF9F
WFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4QzQzOworY29uc3QgR0xlbnVtIEZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfQ09MT1JfRU5DT0RJTkdfRVhUICAgID0gMHg4MjEwOworCitj
b25zdCBHTGVudW0gTUlOX0VYVCAgICAgICAgICAgICAgICAgICAgICAgID0gMHg4MDA3OworY29u
c3QgR0xlbnVtIE1BWF9FWFQgICAgICAgICAgICAgICAgICAgICAgICA9IDB4ODAwODsKKworY29u
c3QgR0xlbnVtIFJFTkRFUkJVRkZFUl9XSURUSCAgICAgICAgICAgICA9IDB4OEQ0MjsKK2NvbnN0
IEdMZW51bSBSRU5ERVJCVUZGRVJfSEVJR0hUICAgICAgICAgICAgPSAweDhENDM7Citjb25zdCBH
TGVudW0gUkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVCAgID0gMHg4RDQ0OworY29uc3QgR0xl
bnVtIFJFTkRFUkJVRkZFUl9SRURfU0laRSAgICAgICAgICA9IDB4OEQ1MDsKK2NvbnN0IEdMZW51
bSBSRU5ERVJCVUZGRVJfR1JFRU5fU0laRSAgICAgICAgPSAweDhENTE7Citjb25zdCBHTGVudW0g
UkVOREVSQlVGRkVSX0JMVUVfU0laRSAgICAgICAgID0gMHg4RDUyOworY29uc3QgR0xlbnVtIFJF
TkRFUkJVRkZFUl9BTFBIQV9TSVpFICAgICAgICA9IDB4OEQ1MzsKK2NvbnN0IEdMZW51bSBSRU5E
RVJCVUZGRVJfREVQVEhfU0laRSAgICAgICAgPSAweDhENTQ7Citjb25zdCBHTGVudW0gUkVOREVS
QlVGRkVSX1NURU5DSUxfU0laRSAgICAgID0gMHg4RDU1OworCitjb25zdCBHTGVudW0gRlJBTUVC
VUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSAgICAgICAgICAgPSAweDhDRDA7Citjb25zdCBH
TGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfTkFNRSAgICAgICAgICAgPSAweDhD
RDE7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xFVkVMICAg
ICAgICAgPSAweDhDRDI7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhU
VVJFX0NVQkVfTUFQX0ZBQ0UgPSAweDhDRDM7CisKK2NvbnN0IEdMZW51bSBDT0xPUl9BVFRBQ0hN
RU5UMCAgICAgICAgICAgICAgPSAweDhDRTA7Citjb25zdCBHTGVudW0gREVQVEhfQVRUQUNITUVO
VCAgICAgICAgICAgICAgID0gMHg4RDAwOworY29uc3QgR0xlbnVtIFNURU5DSUxfQVRUQUNITUVO
VCAgICAgICAgICAgICA9IDB4OEQyMDsKK2NvbnN0IEdMZW51bSBERVBUSF9TVEVOQ0lMX0FUVEFD
SE1FTlQgICAgICAgPSAweDgyMUE7CisKK2NvbnN0IEdMZW51bSBOT05FICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPSAwOworCitjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfQ09NUExFVEUgICAg
ICAgICAgICAgICAgICAgICAgPSAweDhDRDU7Citjb25zdCBHTGVudW0gRlJBTUVCVUZGRVJfSU5D
T01QTEVURV9BVFRBQ0hNRU5UICAgICAgICAgPSAweDhDRDY7Citjb25zdCBHTGVudW0gRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9NSVNTSU5HX0FUVEFDSE1FTlQgPSAweDhDRDc7Citjb25zdCBHTGVu
dW0gRlJBTUVCVUZGRVJfSU5DT01QTEVURV9ESU1FTlNJT05TICAgICAgICAgPSAweDhDRDk7Citj
b25zdCBHTGVudW0gRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQgICAgICAgICAgICAgICAgICAgPSAw
eDhDREQ7CisKK2NvbnN0IEdMZW51bSBGUkFNRUJVRkZFUl9CSU5ESU5HICAgICAgICAgICAgPSAw
eDhDQTY7Citjb25zdCBHTGVudW0gUkVOREVSQlVGRkVSX0JJTkRJTkcgICAgICAgICAgID0gMHg4
Q0E3OworY29uc3QgR0xlbnVtIE1BWF9SRU5ERVJCVUZGRVJfU0laRSAgICAgICAgICA9IDB4ODRF
ODsKKworY29uc3QgR0xlbnVtIElOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OICA9IDB4MDUw
NjsKKworLyogV2ViR0wtc3BlY2lmaWMgZW51bXMgKi8KK2NvbnN0IEdMZW51bSBVTlBBQ0tfRkxJ
UF9ZX1dFQkdMICAgICAgICAgICAgICAgID0gMHg5MjQwOworY29uc3QgR0xlbnVtIFVOUEFDS19Q
UkVNVUxUSVBMWV9BTFBIQV9XRUJHTCAgICAgPSAweDkyNDE7Citjb25zdCBHTGVudW0gQ09OVEVY
VF9MT1NUX1dFQkdMICAgICAgICAgICAgICAgICA9IDB4OTI0MjsKK2NvbnN0IEdMZW51bSBVTlBB
Q0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMID0gMHg5MjQzOworY29uc3QgR0xlbnVtIEJS
T1dTRVJfREVGQVVMVF9XRUJHTCAgICAgICAgICAgICAgPSAweDkyNDQ7CisKK3JlYWRvbmx5IGF0
dHJpYnV0ZSBHTHNpemVpIGRyYXdpbmdCdWZmZXJXaWR0aDsKK3JlYWRvbmx5IGF0dHJpYnV0ZSBH
THNpemVpIGRyYXdpbmdCdWZmZXJIZWlnaHQ7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGFjdGl2ZVRleHR1cmUoR0xlbnVtIHRleHR1cmUpOwor
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYXR0YWNo
U2hhZGVyKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBXZWJHTFNoYWRlciBzaGFkZXIpOworW1N0cmlj
dFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYmluZEF0dHJpYkxv
Y2F0aW9uKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBHTHVpbnQgaW5kZXgsIERPTVN0cmluZyBuYW1l
KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJp
bmRCdWZmZXIoR0xlbnVtIHRhcmdldCwgV2ViR0xCdWZmZXIgYnVmZmVyKTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRGcmFtZWJ1ZmZlcihH
TGVudW0gdGFyZ2V0LCBXZWJHTEZyYW1lYnVmZmVyIGZyYW1lYnVmZmVyKTsKK1tTdHJpY3RUeXBl
Q2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRSZW5kZXJidWZmZXIo
R0xlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKK1tTdHJpY3RU
eXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJpbmRUZXh0dXJlKEdM
ZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBibGVuZENvbG9yKEdMY2xhbXBmIHJlZCwgR0xjbGFtcGYgZ3JlZW4sIEdM
Y2xhbXBmIGJsdWUsIEdMY2xhbXBmIGFscGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQg
ICAgICAgICBibGVuZEVxdWF0aW9uKEdMZW51bSBtb2RlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBibGVuZEVxdWF0aW9uU2VwYXJhdGUoR0xlbnVtIG1vZGVSR0IsIEdMZW51
bSBtb2RlQWxwaGEpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGJsZW5kRnVu
YyhHTGVudW0gc2ZhY3RvciwgR0xlbnVtIGRmYWN0b3IpOworW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGJsZW5kRnVuY1NlcGFyYXRlKEdMZW51bSBzcmNSR0IsIEdMZW51bSBkc3RS
R0IsIEdMZW51bSBzcmNBbHBoYSwgR0xlbnVtIGRzdEFscGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdl
dCwgQXJyYXlCdWZmZXI/IGRhdGEsIEdMZW51bSB1c2FnZSk7CitbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBidWZmZXJEYXRhKEdMZW51bSB0YXJnZXQs
IEFycmF5QnVmZmVyVmlldz8gZGF0YSwgR0xlbnVtIHVzYWdlKTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlckRhdGEoR0xlbnVtIHRhcmdl
dCwgR0xzaXplaXB0ciBzaXplLCBHTGVudW0gdXNhZ2UpOworW1N0cmljdFR5cGVDaGVja2luZywg
UmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgYnVmZmVyU3ViRGF0YShHTGVudW0gdGFyZ2V0
LCBHTGludHB0ciBvZmZzZXQsIEFycmF5QnVmZmVyPyBkYXRhKTsKK1tTdHJpY3RUeXBlQ2hlY2tp
bmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGJ1ZmZlclN1YkRhdGEoR0xlbnVtIHRh
cmdldCwgR0xpbnRwdHIgb2Zmc2V0LCBBcnJheUJ1ZmZlclZpZXc/IGRhdGEpOworCitbU3RyaWN0
VHlwZUNoZWNraW5nXSBHTGVudW0gICAgICAgY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHTGVudW0g
dGFyZ2V0KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjbGVhcihHTGJpdGZp
ZWxkIG1hc2spOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyQ29sb3Io
R0xjbGFtcGYgcmVkLCBHTGNsYW1wZiBncmVlbiwgR0xjbGFtcGYgYmx1ZSwgR0xjbGFtcGYgYWxw
aGEpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyRGVwdGgoR0xjbGFt
cGYgZGVwdGgpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGNsZWFyU3RlbmNp
bChHTGludCBzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBjb2xvck1hc2so
R0xib29sZWFuIHJlZCwgR0xib29sZWFuIGdyZWVuLCBHTGJvb2xlYW4gYmx1ZSwgR0xib29sZWFu
IGFscGhhKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIgc2hhZGVyKTsKKworW1N0cmljdFR5cGVDaGVj
a2luZ10gdm9pZCAgICAgICAgIGNvbXByZXNzZWRUZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsCitHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xpbnQgYm9yZGVyLCBBcnJheUJ1ZmZlclZpZXcgZGF0YSk7CitbU3RyaWN0VHlw
ZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29tcHJlc3NlZFRleFN1YkltYWdlMkQoR0xlbnVtIHRh
cmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsCitHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3IGRh
dGEpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29weVRleEltYWdlMkQo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwgR0xpbnQg
eCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMaW50IGJvcmRlcik7
CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY29weVRleFN1YkltYWdlMkQoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKworW1N0cmlj
dFR5cGVDaGVja2luZ10gV2ViR0xCdWZmZXIgY3JlYXRlQnVmZmVyKCk7CitbU3RyaWN0VHlwZUNo
ZWNraW5nXSBXZWJHTEZyYW1lYnVmZmVyIGNyZWF0ZUZyYW1lYnVmZmVyKCk7CitbU3RyaWN0VHlw
ZUNoZWNraW5nXSBXZWJHTFByb2dyYW0gY3JlYXRlUHJvZ3JhbSgpOworW1N0cmljdFR5cGVDaGVj
a2luZ10gV2ViR0xSZW5kZXJidWZmZXIgY3JlYXRlUmVuZGVyYnVmZmVyKCk7CitbU3RyaWN0VHlw
ZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdlYkdMU2hhZGVyIGNyZWF0ZVNoYWRlcihHTGVu
dW0gdHlwZSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTFRleHR1cmUgY3JlYXRlVGV4dHVy
ZSgpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgY3VsbEZhY2UoR0xlbnVt
IG1vZGUpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlQnVmZmVy
KFdlYkdMQnVmZmVyIGJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAg
ZGVsZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciBmcmFtZWJ1ZmZlcik7CitbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJv
Z3JhbSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlUmVuZGVyYnVm
ZmVyKFdlYkdMUmVuZGVyYnVmZmVyIHJlbmRlcmJ1ZmZlcik7CitbU3RyaWN0VHlwZUNoZWNraW5n
XSB2b2lkICAgICAgICAgZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyIHNoYWRlcik7CitbU3RyaWN0
VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVsZXRlVGV4dHVyZShXZWJHTFRleHR1cmUgdGV4
dHVyZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBkZXB0aEZ1bmMoR0xl
bnVtIGZ1bmMpOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGRlcHRoTWFzayhH
TGJvb2xlYW4gZmxhZyk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZGVwdGhS
YW5nZShHTGNsYW1wZiB6TmVhciwgR0xjbGFtcGYgekZhcik7CitbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICBkZXRhY2hTaGFkZXIoV2ViR0xQcm9ncmFt
IHByb2dyYW0sIFdlYkdMU2hhZGVyIHNoYWRlcik7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgZGlzYWJsZShHTGVudW0gY2FwKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIGRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShHTHVpbnQg
aW5kZXgpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAg
ICAgZHJhd0FycmF5cyhHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpOwor
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgZHJhd0Vs
ZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgR0xpbnRwdHIg
b2Zmc2V0KTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIGVuYWJsZShHTGVu
dW0gY2FwKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIGVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdMdWludCBpbmRleCk7CitbU3RyaWN0VHlwZUNo
ZWNraW5nXSB2b2lkICAgICAgICAgZmluaXNoKCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgZmx1c2goKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0g
dm9pZCAgICAgICAgIGZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdMZW51bSB0YXJnZXQsIEdMZW51
bSBhdHRhY2htZW50LCBHTGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZl
ciByZW5kZXJidWZmZXIpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2
b2lkICAgICAgICAgZnJhbWVidWZmZXJUZXh0dXJlMkQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIGF0
dGFjaG1lbnQsIEdMZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVyZSB0ZXh0dXJlLCBHTGludCBs
ZXZlbCk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgZnJvbnRGYWNlKEdMZW51
bSBtb2RlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBnZW5lcmF0ZU1pcG1h
cChHTGVudW0gdGFyZ2V0KTsKKworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSBXZWJHTEFjdGl2ZUluZm8gZ2V0QWN0aXZlQXR0cmliKFdlYkdMUHJvZ3JhbSBwcm9ncmFtLCBH
THVpbnQgaW5kZXgpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSBXZWJH
TEFjdGl2ZUluZm8gZ2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dyYW0gcHJvZ3JhbSwgR0x1aW50
IGluZGV4KTsKKworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25d
IHZvaWQgZ2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKKworW1N0cmlj
dFR5cGVDaGVja2luZ10gR0xpbnQgICAgICAgIGdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3Jh
bSBwcm9ncmFtLCBET01TdHJpbmcgbmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bV0gYW55IGdldEJ1ZmZlclBhcmFtZXRlcihHTGVudW0gdGFyZ2V0LCBHTGVudW0gcG5hbWUpOwor
CitbU3RyaWN0VHlwZUNoZWNraW5nXSBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIGdldENvbnRleHRB
dHRyaWJ1dGVzKCk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIEdMZW51bSBnZXRFcnJvcigpOwor
CisvLyBvYmplY3QgZ2V0RXh0ZW5zaW9uKERPTVN0cmluZyBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmcsIEN1c3RvbV0gYW55IGdldEV4dGVuc2lvbihET01TdHJpbmcgbmFtZSk7CisKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0RnJhbWVidWZm
ZXJBdHRhY2htZW50UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51bSBhdHRhY2htZW50LCBH
TGVudW0gcG5hbWUpOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRp
b25dIGFueSBnZXRQYXJhbWV0ZXIoR0xlbnVtIHBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcs
IEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0UHJvZ3JhbVBhcmFtZXRlcihXZWJHTFBy
b2dyYW0gcHJvZ3JhbSwgR0xlbnVtIHBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0
UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2VzRXhjZXB0aW9uXSBET01TdHJpbmcgZ2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtIHByb2dyYW0pOworW1N0cmljdFR5cGVDaGVja2lu
ZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIGFueSBnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIo
R0xlbnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bSwgUmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyIHNo
YWRlciwgR0xlbnVtIHBuYW1lKTsKKworW1N0cmljdFR5cGVDaGVja2luZywgVHJlYXRSZXR1cm5l
ZE51bGxTdHJpbmdBcz1OdWxsLCBSYWlzZXNFeGNlcHRpb25dIERPTVN0cmluZyAgICBnZXRTaGFk
ZXJJbmZvTG9nKFdlYkdMU2hhZGVyIHNoYWRlcik7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJh
aXNlc0V4Y2VwdGlvbl0gV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQgZ2V0U2hhZGVyUHJlY2lz
aW9uRm9ybWF0KEdMZW51bSBzaGFkZXJ0eXBlLCBHTGVudW0gcHJlY2lzaW9udHlwZSk7CisKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIFRyZWF0UmV0dXJuZWROdWxsU3RyaW5nQXM9TnVsbCwgUmFpc2Vz
RXhjZXB0aW9uXSBET01TdHJpbmcgICAgZ2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyIHNoYWRl
cik7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gc2VxdWVuY2U8RE9NU3RyaW5nPiBn
ZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwg
UmFpc2VzRXhjZXB0aW9uXSBhbnkgZ2V0VGV4UGFyYW1ldGVyKEdMZW51bSB0YXJnZXQsIEdMZW51
bSBwbmFtZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9u
XSBhbnkgZ2V0VW5pZm9ybShXZWJHTFByb2dyYW0gcHJvZ3JhbSwgV2ViR0xVbmlmb3JtTG9jYXRp
b24gbG9jYXRpb24pOworCitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIFdl
YkdMVW5pZm9ybUxvY2F0aW9uIGdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0gcHJvZ3Jh
bSwgRE9NU3RyaW5nIG5hbWUpOworCitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNl
c0V4Y2VwdGlvbl0gYW55IGdldFZlcnRleEF0dHJpYihHTHVpbnQgaW5kZXgsIEdMZW51bSBwbmFt
ZSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIEdMc2l6ZWlwdHIgZ2V0VmVydGV4QXR0cmliT2Zm
c2V0KEdMdWludCBpbmRleCwgR0xlbnVtIHBuYW1lKTsKKworW1N0cmljdFR5cGVDaGVja2luZ10g
dm9pZCAgICAgICAgIGhpbnQoR0xlbnVtIHRhcmdldCwgR0xlbnVtIG1vZGUpOworW1N0cmljdFR5
cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzQnVmZmVyKFdlYkdMQnVmZmVyIGJ1ZmZlcik7Citb
U3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xlYW4gICAgaXNDb250ZXh0TG9zdCgpOworW1N0cmlj
dFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzRW5hYmxlZChHTGVudW0gY2FwKTsKK1tTdHJp
Y3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc0ZyYW1lYnVmZmVyKFdlYkdMRnJhbWVidWZm
ZXIgZnJhbWVidWZmZXIpOworW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzUHJv
Z3JhbShXZWJHTFByb2dyYW0gcHJvZ3JhbSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSBHTGJvb2xl
YW4gICAgaXNSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIgcmVuZGVyYnVmZmVyKTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmddIEdMYm9vbGVhbiAgICBpc1NoYWRlcihXZWJHTFNoYWRlciBzaGFk
ZXIpOworW1N0cmljdFR5cGVDaGVja2luZ10gR0xib29sZWFuICAgIGlzVGV4dHVyZShXZWJHTFRl
eHR1cmUgdGV4dHVyZSk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgbGluZVdp
ZHRoKEdMZmxvYXQgd2lkdGgpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgbGlua1Byb2dyYW0oV2ViR0xQcm9ncmFtIHByb2dyYW0pOworW1N0cmlj
dFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHBpeGVsU3RvcmVpKEdMZW51bSBwbmFtZSwgR0xp
bnQgcGFyYW0pOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHBvbHlnb25PZmZz
ZXQoR0xmbG9hdCBmYWN0b3IsIEdMZmxvYXQgdW5pdHMpOworCitbU3RyaWN0VHlwZUNoZWNraW5n
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50
IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgQXJyYXlCdWZmZXJWaWV3IHBpeGVscyk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZv
aWQgICAgICAgICByZWxlYXNlU2hhZGVyQ29tcGlsZXIoKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICByZW5kZXJidWZmZXJTdG9yYWdlKEdMZW51bSB0YXJnZXQsIEdMZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpOworW1N0cmljdFR5
cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHNhbXBsZUNvdmVyYWdlKEdMY2xhbXBmIHZhbHVlLCBH
TGJvb2xlYW4gaW52ZXJ0KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzY2lz
c29yKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHNoYWRlclNv
dXJjZShXZWJHTFNoYWRlciBzaGFkZXIsIERPTVN0cmluZyBzdHJpbmcpOworW1N0cmljdFR5cGVD
aGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxGdW5jKEdMZW51bSBmdW5jLCBHTGludCByZWYs
IEdMdWludCBtYXNrKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2ls
RnVuY1NlcGFyYXRlKEdMZW51bSBmYWNlLCBHTGVudW0gZnVuYywgR0xpbnQgcmVmLCBHTHVpbnQg
bWFzayk7CitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lkICAgICAgICAgc3RlbmNpbE1hc2soR0x1
aW50IG1hc2spOworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHN0ZW5jaWxNYXNr
U2VwYXJhdGUoR0xlbnVtIGZhY2UsIEdMdWludCBtYXNrKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmdd
IHZvaWQgICAgICAgICBzdGVuY2lsT3AoR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVt
IHpwYXNzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICBzdGVuY2lsT3BTZXBh
cmF0ZShHTGVudW0gZmFjZSwgR0xlbnVtIGZhaWwsIEdMZW51bSB6ZmFpbCwgR0xlbnVtIHpwYXNz
KTsKKworW1N0cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHRleFBhcmFtZXRlcmYoR0xl
bnVtIHRhcmdldCwgR0xlbnVtIHBuYW1lLCBHTGZsb2F0IHBhcmFtKTsKK1tTdHJpY3RUeXBlQ2hl
Y2tpbmddIHZvaWQgICAgICAgICB0ZXhQYXJhbWV0ZXJpKEdMZW51bSB0YXJnZXQsIEdMZW51bSBw
bmFtZSwgR0xpbnQgcGFyYW0pOworCisvLyBTdXBwb3J0ZWQgZm9ybXM6CitbU3RyaWN0VHlwZUNo
ZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0
YXJnZXQsIEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCAKK0dMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5
cGUsIEFycmF5QnVmZmVyVmlldz8gcGl4ZWxzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNl
c0V4Y2VwdGlvbl0gdm9pZCAgICAgICAgIHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQg
bGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZvcm1hdCwKK0dMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBl
LCBJbWFnZURhdGE/IHBpeGVscyk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRp
b25dIHZvaWQgICAgICAgICB0ZXhJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBH
TGVudW0gaW50ZXJuYWxmb3JtYXQsCitHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTElt
YWdlRWxlbWVudD8gaW1hZ2UpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9u
XSB2b2lkICAgICAgICAgdGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xl
bnVtIGludGVybmFsZm9ybWF0LAorR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxDYW52
YXNFbGVtZW50PyBjYW52YXMpOworI2lmIGRlZmluZWQoRU5BQkxFX1ZJREVPKSAmJiBFTkFCTEVf
VklERU8KK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAgICAg
IHRleEltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbGZv
cm1hdCwKK0dMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50PyB2aWRl
byk7CisjZW5kaWYKKworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
ICAgICAgICAgdGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgCitHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
CitHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3PyBwaXhlbHMpOwor
W1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdGV4U3Vi
SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwKK0dMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBJbWFnZURhdGE/IHBpeGVscyk7
CitbU3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB0ZXhT
dWJJbWFnZTJEKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGlu
dCB5b2Zmc2V0LAorR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEhUTUxJbWFnZUVsZW1lbnQ/
IGltYWdlKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCAgICAg
ICAgIHRleFN1YkltYWdlMkQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsCitHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgSFRNTENhbnZh
c0VsZW1lbnQ/IGNhbnZhcyk7CisjaWYgZGVmaW5lZChFTkFCTEVfVklERU8pICYmIEVOQUJMRV9W
SURFTworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAg
dGV4U3ViSW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwKK0dMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVt
ZW50PyB2aWRlbyk7CisjZW5kaWYKKworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0
aW9uXSB2b2lkIHVuaWZvcm0xZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9h
dCB4KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
IHVuaWZvcm0xZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEZsb2F0MzJBcnJheSB2
KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMWko
V2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgpOworW1N0cmljdFR5cGVDaGVj
a2luZywgQ3VzdG9tLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTFpdihXZWJHTFVuaWZv
cm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcs
IFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9j
YXRpb24sIEdMZmxvYXQgeCwgR0xmbG9hdCB5KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3Rv
bSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm0yZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24g
bG9jYXRpb24sIEZsb2F0MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCB1bmlmb3JtMmkoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdM
aW50IHgsIEdMaW50IHkpOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgdW5pZm9ybTJpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgSW50
MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlvbl0gdm9pZCB1
bmlmb3JtM2YoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMZmxvYXQgeCwgR0xmbG9h
dCB5LCBHTGZsb2F0IHopOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBSYWlzZXNFeGNl
cHRpb25dIHZvaWQgdW5pZm9ybTNmdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5IHYpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lk
IHVuaWZvcm0zaShXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xpbnQgeik7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCB1bmlmb3JtM2l2KFdlYkdMVW5pZm9ybUxvY2F0aW9uIGxvY2F0aW9uLCBJbnQzMkFy
cmF5IHYpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZv
cm00ZihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBsb2NhdGlvbiwgR0xmbG9hdCB4LCBHTGZsb2F0IHks
IEdMZmxvYXQgeiwgR0xmbG9hdCB3KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm00ZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRp
b24sIEZsb2F0MzJBcnJheSB2KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4Y2VwdGlv
bl0gdm9pZCB1bmlmb3JtNGkoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMaW50IHgs
IEdMaW50IHksIEdMaW50IHosIEdMaW50IHcpOworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9t
LCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybTRpdihXZWJHTFVuaWZvcm1Mb2NhdGlvbiBs
b2NhdGlvbiwgSW50MzJBcnJheSB2KTsKKworW1N0cmljdFR5cGVDaGVja2luZywgQ3VzdG9tLCBS
YWlzZXNFeGNlcHRpb25dIHZvaWQgdW5pZm9ybU1hdHJpeDJmdihXZWJHTFVuaWZvcm1Mb2NhdGlv
biBsb2NhdGlvbiwgR0xib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5IGFycmF5KTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbSwgUmFpc2VzRXhjZXB0aW9uXSB2b2lkIHVuaWZvcm1N
YXRyaXgzZnYoV2ViR0xVbmlmb3JtTG9jYXRpb24gbG9jYXRpb24sIEdMYm9vbGVhbiB0cmFuc3Bv
c2UsIEZsb2F0MzJBcnJheSBhcnJheSk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b20sIFJh
aXNlc0V4Y2VwdGlvbl0gdm9pZCB1bmlmb3JtTWF0cml4NGZ2KFdlYkdMVW5pZm9ybUxvY2F0aW9u
IGxvY2F0aW9uLCBHTGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9hdDMyQXJyYXkgYXJyYXkpOworCitb
U3RyaWN0VHlwZUNoZWNraW5nLCBSYWlzZXNFeGNlcHRpb25dIHZvaWQgICAgICAgICB1c2VQcm9n
cmFtKFdlYkdMUHJvZ3JhbSBwcm9ncmFtKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIFJhaXNlc0V4
Y2VwdGlvbl0gdm9pZCAgICAgICAgIHZhbGlkYXRlUHJvZ3JhbShXZWJHTFByb2dyYW0gcHJvZ3Jh
bSk7CisKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIxZihH
THVpbnQgaW5keCwgR0xmbG9hdCB4KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9p
ZCB2ZXJ0ZXhBdHRyaWIxZnYoR0x1aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworW1N0
cmljdFR5cGVDaGVja2luZ10gdm9pZCAgICAgICAgIHZlcnRleEF0dHJpYjJmKEdMdWludCBpbmR4
LCBHTGZsb2F0IHgsIEdMZmxvYXQgeSk7CitbU3RyaWN0VHlwZUNoZWNraW5nLCBDdXN0b21dIHZv
aWQgdmVydGV4QXR0cmliMmZ2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkgdmFsdWVzKTsKK1tT
dHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWIzZihHTHVpbnQgaW5k
eCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeik7CitbU3RyaWN0VHlwZUNoZWNraW5n
LCBDdXN0b21dIHZvaWQgdmVydGV4QXR0cmliM2Z2KEdMdWludCBpbmR4LCBGbG9hdDMyQXJyYXkg
dmFsdWVzKTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmddIHZvaWQgICAgICAgICB2ZXJ0ZXhBdHRyaWI0
ZihHTHVpbnQgaW5keCwgR0xmbG9hdCB4LCBHTGZsb2F0IHksIEdMZmxvYXQgeiwgR0xmbG9hdCB3
KTsKK1tTdHJpY3RUeXBlQ2hlY2tpbmcsIEN1c3RvbV0gdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0x1
aW50IGluZHgsIEZsb2F0MzJBcnJheSB2YWx1ZXMpOworW1N0cmljdFR5cGVDaGVja2luZywgUmFp
c2VzRXhjZXB0aW9uXSB2b2lkICAgICAgICAgdmVydGV4QXR0cmliUG9pbnRlcihHTHVpbnQgaW5k
eCwgR0xpbnQgc2l6ZSwgR0xlbnVtIHR5cGUsIEdMYm9vbGVhbiBub3JtYWxpemVkLCAKK0dMc2l6
ZWkgc3RyaWRlLCBHTGludHB0ciBvZmZzZXQpOworCitbU3RyaWN0VHlwZUNoZWNraW5nXSB2b2lk
ICAgICAgICAgdmlld3BvcnQoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpOworfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNo
YWRlci5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMU2hhZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTYgKzMwLDE2IEBACiAjaW5j
bHVkZSAiV2ViR0xTaGFkZXIuaCIKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0j
aW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2Vi
R0xTaGFkZXI+IFdlYkdMU2hhZGVyOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgs
IEdDM0RlbnVtIHR5cGUpCitQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFNoYWRlcjo6Y3Jl
YXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCwgR0MzRGVudW0gdHlwZSkKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMU2hhZGVyKGN0eCwgdHlwZSkpOwogfQogCi1XZWJH
TFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgsIEdDM0RlbnVt
IHR5cGUpCitXZWJHTFNoYWRlcjo6V2ViR0xTaGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSogY3R4LCBHQzNEZW51bSB0eXBlKQogICAgIDogV2ViR0xTaGFyZWRPYmplY3QoY3R4KQogICAg
ICwgbV90eXBlKHR5cGUpCiAgICAgLCBtX3NvdXJjZSgiIikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAkocmV2aXNpb24gMTc4MzcxKQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyAr
MzYsNyBAQCBjbGFzcyBXZWJHTFNoYWRlciBmaW5hbCA6IHB1YmxpYyBXZWJHTFNoCiBwdWJsaWM6
CiAgICAgdmlydHVhbCB+V2ViR0xTaGFkZXIoKTsKIAotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdl
YkdMU2hhZGVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiwgR0MzRGVudW0pOworICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSosIEdDM0RlbnVtKTsKIAogICAgIEdDM0RlbnVtIGdldFR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KICAgICBjb25zdCBTdHJpbmcmIGdldFNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlOyB9CkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZh
bGlkKGJvb2wgdmFsaWQpIHsgbV9pc1ZhbGlkID0gdmFsaWQ7IH0KIAogcHJpdmF0ZToKLSAgICBX
ZWJHTFNoYWRlcihXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBHQzNEZW51bSk7CisgICAgV2ViR0xT
aGFkZXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSosIEdDM0RlbnVtKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9i
amVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
U2hhcmVkT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFNoYXJlZE9iamVjdC5jcHAJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTEgKzMwLDExIEBACiAjaW5jbHVkZSAiV2ViR0xTaGFyZWRPYmplY3QuaCIKIAogI2luY2x1
ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLVdlYkdMU2hhcmVkT2JqZWN0OjpXZWJHTFNoYXJlZE9iamVjdChXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitXZWJHTFNoYXJlZE9iamVjdDo6V2ViR0xTaGFyZWRP
YmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMT2Jq
ZWN0KGNvbnRleHQpLAogICAgICAgbV9jb250ZXh0R3JvdXAoY29udGV4dC0+Y29udGV4dEdyb3Vw
KCkpCiB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNoYXJlZE9iamVj
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hhcmVk
T2JqZWN0LmgJKHJldmlzaW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMU2hhcmVkT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFdlYkdM
Q29udGV4dEdyb3VwOwotY2xhc3MgV2ViR0xSZW5kZXJpbmdDb250ZXh0OworY2xhc3MgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTsKIAogLy8gV2ViR0xTaGFyZWRPYmplY3QgdGhlIGJhc2UgY2xh
c3MgZm9yIG9iamVjdHMgdGhhdCBjYW4gYmUgc2hhcmVkIGJ5IG11bHRpcGxlCiAvLyBXZWJHTFJl
bmRlcmluZ0NvbnRleHRzLgpAQCAtNDgsNyArNDgsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGlzU2hhZGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAotICAgIHZpcnR1YWwgYm9vbCB2
YWxpZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCogY29udGV4dEdyb3VwLCBjb25zdCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKSBjb25zdCBvdmVycmlkZQorICAgIHZpcnR1YWwgYm9vbCB2YWxp
ZGF0ZShjb25zdCBXZWJHTENvbnRleHRHcm91cCogY29udGV4dEdyb3VwLCBjb25zdCBXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKikgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJldHVy
biBjb250ZXh0R3JvdXAgPT0gbV9jb250ZXh0R3JvdXA7CiAgICAgfQpAQCAtNTYsNyArNTYsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBkZXRhY2hDb250ZXh0R3JvdXAoKTsKIAogcHJvdGVjdGVkOgot
ICAgIFdlYkdMU2hhcmVkT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIFdlYkdM
U2hhcmVkT2JqZWN0KFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwg
Ym9vbCBoYXNHcm91cE9yQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlCiAgICAgewpJbmRleDogU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCShyZXZpc2lvbiAxNzgz
NzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFRleHR1cmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMSwxNiArMzEsMTYgQEAKIAogI2luY2x1ZGUgIldlYkdMQ29udGV4dEdy
b3VwLmgiCiAjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1QYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4gV2ViR0xU
ZXh0dXJlOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjdHgpCitQYXNzUmVmUHRyPFdl
YkdMVGV4dHVyZT4gV2ViR0xUZXh0dXJlOjpjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSogY3R4KQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgV2ViR0xUZXh0dXJlKGN0eCkpOwog
fQogCi1XZWJHTFRleHR1cmU6OldlYkdMVGV4dHVyZShXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGN0
eCkKK1dlYkdMVGV4dHVyZTo6V2ViR0xUZXh0dXJlKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uq
IGN0eCkKICAgICA6IFdlYkdMU2hhcmVkT2JqZWN0KGN0eCkKICAgICAsIG1fdGFyZ2V0KDApCiAg
ICAgLCBtX21pbkZpbHRlcihHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFS
KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xUZXh0dXJlLmgJKHJldmlz
aW9uIDE3ODM3MSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
fldlYkdMVGV4dHVyZSgpOwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBj
cmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
R0xUZXh0dXJlPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogCiAgICAgdm9p
ZCBzZXRUYXJnZXQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IG1heExldmVsKTsKICAgICB2b2lk
IHNldFBhcmFtZXRlcmkoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwpAQCAtODIsNyAr
ODIsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEdDM0RpbnQgY29tcHV0ZUxldmVsQ291bnQoR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKIAogcHJpdmF0ZToKLSAgICBXZWJHTFRl
eHR1cmUoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgV2ViR0xUZXh0dXJlKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBs
KEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZvcm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVMuY3BwCShyZXZpc2lvbiAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTYgKzMwLDE2IEBACiAjaW5jbHVkZSAiV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgog
CiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLVBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4gV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY3R4
LCBWYW9UeXBlIHR5cGUpCitQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IFdl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OmNyZWF0ZShXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
KiBjdHgsIFZhb1R5cGUgdHlwZSkKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVMoY3R4LCB0eXBlKSk7CiB9CiAKLVdlYkdMVmVydGV4QXJyYXlPYmpl
Y3RPRVM6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
dHgsIFZhb1R5cGUgdHlwZSkKK1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OldlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY3R4LCBWYW9UeXBlIHR5
cGUpCiAgICAgOiBXZWJHTENvbnRleHRPYmplY3QoY3R4KQogICAgICwgbV90eXBlKHR5cGUpCiAg
ICAgLCBtX2hhc0V2ZXJCZWVuQm91bmQoZmFsc2UpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oCShyZXZpc2lv
biAxNzgzNzEpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFZlcnRleEFycmF5
T2JqZWN0T0VTLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAg
IAogICAgIHZpcnR1YWwgfldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKTsKIAotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM+IGNyZWF0ZShXZWJHTFJlbmRl
cmluZ0NvbnRleHQqLCBWYW9UeXBlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTPiBjcmVhdGUoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSosIFZhb1R5
cGUpOwogICAgIAogICAgIC8vIENhY2hlZCB2YWx1ZXMgZm9yIHZlcnRleCBhdHRyaWIgcmFuZ2Ug
Y2hlY2tzCiAgICAgc3RydWN0IFZlcnRleEF0dHJpYlN0YXRlIHsKQEAgLTg5LDcgKzg5LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0VmVydGV4QXR0cmliRGl2aXNvcihHQzNEdWludCBpbmRleCwg
R0MzRHVpbnQgZGl2aXNvcik7CiAKIHByaXZhdGU6Ci0gICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqLCBWYW9UeXBlKTsKKyAgICBXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqLCBWYW9UeXBlKTsKIAogICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RJbXBsKEdyYXBoaWNzQ29udGV4dDNEKiwgUGxhdGZv
cm0zRE9iamVjdCkgb3ZlcnJpZGU7CiAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>244538</attachid>
            <date>2015-01-13 13:44:55 -0800</date>
            <delta_ts>2015-01-16 15:06:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-126408-20150113134500.patch</filename>
            <type>text/plain</type>
            <size>1575736</size>
            <attacher name="Roger Fong">roger_fong</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3MyBAQAorMjAxNS0wMS0xMyAgUm9nZXIg
Rm9uZyAgPHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkdMMjogU3VwcG9ydCB3
ZWJnbDIgY29udGV4dCBjcmVhdGlvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyNjQwOAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMTUwMDIxNzA+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGVzdHMg
Y292ZXJlZCBieSBleGlzdGluZyBLaHJvbm9zIHRlc3RzIGZvciBXZWJHTCAxLjAgY29uZm9ybWFu
Y2UuCisKKyAgICAgICAgQ3JlYXRlIGEgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSBjbGFzcyB0
aGF0IGV4dGVuZHMgdG8gYSBXZWJHTDFSZW5kZXJpbmdDb250ZXh0IGFuZCBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LgorICAgICAgICBSZXBsYWNlIGFsbCBwcmV2aW91cyBpbnN0YW5jZXMgb2YgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0IHVzYWdlcyB3aXRoIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Ug
dXNhZ2VzIGZvciBub3cuCisgICAgICAgIEFzIHRoZSBmaXJzdCBzdGVwLCB0aGUgV2ViR0wxIGFu
ZCBXZWJHTDIgY29udGV4dHMgd2lsbCBoYXZlIHRoZSBleGFjdCBzYW1lIGZ1bmN0aW9uYWxpdHku
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5t
YWtlOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6dG9KUyk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNEb2N1bWVudEN1
c3RvbS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNIVE1MQ2FudmFzRWxlbWVudEN1c3Rv
bS5jcHA6CisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3Vz
dG9tLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHRDdXN0b20uY3BwLgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTV2ViR0wy
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SlNX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbik6CisgICAgICAg
ICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcDogQWRk
ZWQuCisgICAgICAgICogYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20u
Y3BwOiBSZW1vdmVkLgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtOgorICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgICogaHRtbC9I
VE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVu
dDo6Z2V0Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6aXMz
ZFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnJlc2V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNFbGVtZW50OjpwYWludCk6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBTkdMRUlu
c3RhbmNlZEFycmF5czo6QU5HTEVJbnN0YW5jZWRBcnJheXMpOgorICAgICAgICAoV2ViQ29yZTo6
QU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCk6CisgICAgICAgICogaHRtbC9jYW52YXMv
QU5HTEVJbnN0YW5jZWRBcnJheXMuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0
Ojp0eXBlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVYVEJsZW5kTWluTWF4OjpFWFRCbGVuZE1pbk1heCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXguaDoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9FWFRGcmFnRGVwdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6RVhURnJhZ0RlcHRo
OjpFWFRGcmFnRGVwdGgpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVEZyYWdEZXB0aC5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6RVhUU2hhZGVyVGV4dHVyZUxPRDo6RVhUU2hhZGVyVGV4dHVyZUxPRCk6CisgICAg
ICAgICogaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4dHVyZUxPRC5oOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWM6OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yyk6CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmg6
CisgICAgICAgICogaHRtbC9jYW52YXMvRVhUc1JHQi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpF
WFRzUkdCOjpFWFRzUkdCKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9FWFRzUkdCLmg6CisgICAg
ICAgICogaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpPRVNFbGVtZW50SW5kZXhVaW50OjpPRVNFbGVtZW50SW5kZXhVaW50KToKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50Lmg6CisgICAgICAgICogaHRtbC9jYW52
YXMvT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpPRVNTdGFu
ZGFyZERlcml2YXRpdmVzOjpPRVNTdGFuZGFyZERlcml2YXRpdmVzKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
T0VTVGV4dHVyZUZsb2F0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9FU1RleHR1cmVGbG9hdDo6
T0VTVGV4dHVyZUZsb2F0KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQu
aDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6T0VTVGV4dHVyZUZsb2F0TGluZWFyOjpPRVNUZXh0dXJlRmxvYXRMaW5l
YXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdExpbmVhci5oOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6T0VTVGV4dHVyZUhhbGZGbG9hdDo6T0VTVGV4dHVyZUhhbGZGbG9hdCk6CisgICAgICAg
ICogaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdC5oOgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6T0VT
VGV4dHVyZUhhbGZGbG9hdExpbmVhcjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcik6CisgICAg
ICAgICogaHRtbC9jYW52YXMvT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhci5oOgorICAgICAgICAq
IGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok9FU1ZlcnRleEFycmF5T2JqZWN0OjpPRVNWZXJ0ZXhBcnJheU9iamVjdCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvT0VTVmVydGV4QXJyYXlPYmplY3QuaDoKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcC4KKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oLgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaWRsLgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQpOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuaDogQWRkZWQuCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGw6IEFkZGVkLgorICAg
ICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMQnVmZmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xCdWZmZXI6OldlYkdM
QnVmZmVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5oOgorICAgICAgICAq
IGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQzo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Qyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0
ZWQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaDoK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDOjpXZWJHTENvbXBy
ZXNzZWRUZXh0dXJlUFZSVEMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb21wcmVzc2VkVGV4
dHVyZVBWUlRDOjpzdXBwb3J0ZWQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVTM1RDLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29tcHJlc3NlZFRleHR1
cmVTM1RDOjpXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyk6CisgICAgICAgIChXZWJDb3JlOjpX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQzo6c3VwcG9ydGVkKToKKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oOgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMQ29udGV4dEdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dEdy
b3VwOjpnZXRBR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250
ZXh0R3JvdXA6OmFkZENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3Jv
dXA6OnJlbW92ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xDb250ZXh0R3JvdXA6
Omxvc2VDb250ZXh0R3JvdXApOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQ29udGV4dEdy
b3VwLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xDb250ZXh0T2JqZWN0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6V2ViR0xDb250ZXh0T2JqZWN0KToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTENvbnRleHRPYmplY3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMQ29udGV4dE9iamVjdDo6Y29udGV4dCk6CisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTERl
YnVnUmVuZGVyZXJJbmZvOjpXZWJHTERlYnVnUmVuZGVyZXJJbmZvKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTERlYnVnUmVuZGVyZXJJbmZvLmg6CisgICAgICAgICogaHRtbC9jYW52YXMv
V2ViR0xEZWJ1Z1NoYWRlcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xEZWJ1Z1NoYWRl
cnM6OldlYkdMRGVidWdTaGFkZXJzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTERlYnVn
U2hhZGVycy5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRGVwdGhUZXh0dXJlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMRGVwdGhUZXh0dXJlOjpXZWJHTERlcHRoVGV4dHVyZSk6
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xEZXB0aFRleHR1cmUuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9XZWJHTERyYXdCdWZmZXJzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
RHJhd0J1ZmZlcnM6OldlYkdMRHJhd0J1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xE
cmF3QnVmZmVyczo6c3VwcG9ydGVkKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRHJhd0J1ZmZl
cnM6OnNhdGlzZmllc1dlYkdMUmVxdWlyZW1lbnRzKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTERyYXdCdWZmZXJzLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xFeHRlbnNpb246OldlYkdMRXh0ZW5zaW9uKToK
KyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oOgorICAgICAgICAoV2ViQ29y
ZTo6V2ViR0xFeHRlbnNpb246OmNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
RnJhbWVidWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGcmFtZWJ1ZmZlcjo6Y3Jl
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMRnJhbWVidWZmZXI6OldlYkdMRnJhbWVidWZm
ZXIpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRnJhbWVidWZmZXIuaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTExvc2VDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMTG9zZUNvbnRleHQ6OldlYkdMTG9zZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xMb3NlQ29udGV4dDo6bG9zZUNvbnRleHQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
TG9zZUNvbnRleHQuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTE9iamVjdDo6V2ViR0xPYmplY3QpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMT2JqZWN0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xQcm9n
cmFtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OldlYkdMUHJvZ3JhbTo6V2ViR0xQcm9ncmFtKToKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFByb2dyYW0uaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyYnVmZmVyOjpXZWJHTFJlbmRlcmJ1ZmZl
cik6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZmZXIuaDoKKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBSZW1vdmVkLgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGw6IFJlbW92ZWQuCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA6IEFkZGVkLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDogQWRkZWQu
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGw6IEFk
ZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMU2hhZGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaGFk
ZXI6OldlYkdMU2hhZGVyKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFNoYWRlci5oOgor
ICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hhcmVkT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMU2hhcmVkT2JqZWN0OjpXZWJHTFNoYXJlZE9iamVjdCk6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFRleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpjcmVhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xUZXh0dXJlOjpXZWJHTFRleHR1cmUpOgorICAgICAg
ICAqIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5oOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dl
YkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMpOgorICAgICAgICAqIGh0
bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaDoKKwogMjAxNS0wMS0xMyAgSm9z
ZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IFJlbW92ZSB1bnVzZWQgUmVzaXplSW1hZ2UgYW5kIERlY29kZUltYWdlRGF0YSB0aW1lbGlu
ZSBldmVudHMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxNzgzNzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTQwLDYgKzU0
MCw4IEBAIHNldChXZWJDb3JlX05PTl9TVkdfSURMX0ZJTEVTCiAgICAgaHRtbC9jYW52YXMvT0VT
VGV4dHVyZUhhbGZGbG9hdC5pZGwKICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0
TGluZWFyLmlkbAogICAgIGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmlkbAorICAg
IGh0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuaWRsCisgICAgaHRtbC9jYW52YXMv
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwKICAgICBodG1sL2NhbnZhcy9XZWJHTEFjdGl2ZUlu
Zm8uaWRsCiAgICAgaHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuaWRsCiAgICAgaHRtbC9jYW52YXMv
V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5pZGwKQEAgLTU1NSw3ICs1NTcsNyBAQCBzZXQoV2Vi
Q29yZV9OT05fU1ZHX0lETF9GSUxFUwogICAgIGh0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQu
aWRsCiAgICAgaHRtbC9jYW52YXMvV2ViR0xQcm9ncmFtLmlkbAogICAgIGh0bWwvY2FudmFzL1dl
YkdMUmVuZGVyYnVmZmVyLmlkbAotICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5pZGwKKyAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmlkbAogICAg
IGh0bWwvY2FudmFzL1dlYkdMU2hhZGVyLmlkbAogICAgIGh0bWwvY2FudmFzL1dlYkdMU2hhZGVy
UHJlY2lzaW9uRm9ybWF0LmlkbAogICAgIGh0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5pZGwKQEAg
LTExNDUsNyArMTE0Nyw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBiaW5kaW5ncy9qcy9K
U1RyZWVXYWxrZXJDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNWaWRlb1RyYWNrQ3VzdG9t
LmNwcAogICAgIGJpbmRpbmdzL2pzL0pTVmlkZW9UcmFja0xpc3RDdXN0b20uY3BwCi0gICAgYmlu
ZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCisgICAgYmluZGluZ3Mv
anMvSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAogICAgIGJpbmRpbmdzL2pz
L0pTV2ViS2l0UG9pbnRDdXN0b20uY3BwCiAgICAgYmluZGluZ3MvanMvSlNXb3JrZXJDdXN0b20u
Y3BwCiAgICAgYmluZGluZ3MvanMvSlNXb3JrZXJHbG9iYWxTY29wZUJhc2UuY3BwCkBAIC0xNjY5
LDYgKzE2NzEsOCBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgaHRtbC9jYW52YXMvT0VTVGV4
dHVyZUhhbGZGbG9hdC5jcHAKICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0TGlu
ZWFyLmNwcAogICAgIGh0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcAorICAgIGh0
bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwCisgICAgaHRtbC9jYW52YXMvV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKICAgICBodG1sL2NhbnZhcy9XZWJHTEJ1ZmZlci5jcHAK
ICAgICBodG1sL2NhbnZhcy9XZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmNwcAogICAgIGh0bWwv
Y2FudmFzL1dlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5jcHAKQEAgLTE2ODgsNyArMTY5Miw3
IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBodG1sL2NhbnZhcy9XZWJHTE9iamVjdC5jcHAK
ICAgICBodG1sL2NhbnZhcy9XZWJHTFByb2dyYW0uY3BwCiAgICAgaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJidWZmZXIuY3BwCi0gICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cAorICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCiAgICAgaHRt
bC9jYW52YXMvV2ViR0xTaGFkZXIuY3BwCiAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFkZXJQcmVj
aXNpb25Gb3JtYXQuY3BwCiAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmplY3QuY3BwCkBA
IC0yNzY3LDYgKzI3NzEsOCBAQCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICBodG1sL2NhbnZh
cy9PRVNUZXh0dXJlSGFsZkZsb2F0LmNwcAogICAgICAgICBodG1sL2NhbnZhcy9PRVNUZXh0dXJl
SGFsZkZsb2F0TGluZWFyLmNwcAogICAgICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9i
amVjdC5jcHAKKyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAK
KyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKICAgICAgICAg
aHRtbC9jYW52YXMvV2ViR0xCdWZmZXIuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29t
cHJlc3NlZFRleHR1cmVBVEMuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVQVlJUQy5jcHAKQEAgLTI3ODYsNyArMjc5Miw3IEBAIGlmIChFTkFCTEVfV0VCR0wp
CiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMT2JqZWN0LmNwcAogICAgICAgICBodG1sL2NhbnZh
cy9XZWJHTFByb2dyYW0uY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyYnVmZmVy
LmNwcAotICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisgICAg
ICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwCiAgICAgICAgIGh0
bWwvY2FudmFzL1dlYkdMU2hhZGVyLmNwcAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFNoYWRl
clByZWNpc2lvbkZvcm1hdC5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xTaGFyZWRPYmpl
Y3QuY3BwCkBAIC0yODA4LDYgKzI4MTQsOCBAQCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICBo
dG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmlkbAogICAgICAgICBodG1sL2NhbnZhcy9P
RVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmlkbAogICAgICAgICBodG1sL2NhbnZhcy9PRVNWZXJ0
ZXhBcnJheU9iamVjdC5pZGwKKyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29u
dGV4dC5pZGwKKyAgICAgICAgaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5pZGwK
ICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xBY3RpdmVJbmZvLmlkbAogICAgICAgICBodG1sL2Nh
bnZhcy9XZWJHTEJ1ZmZlci5pZGwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUFUQy5pZGwKQEAgLTI4MjMsNyArMjgzMSw3IEBAIGlmIChFTkFCTEVfV0VCR0wpCiAg
ICAgICAgIGh0bWwvY2FudmFzL1dlYkdMTG9zZUNvbnRleHQuaWRsCiAgICAgICAgIGh0bWwvY2Fu
dmFzL1dlYkdMUHJvZ3JhbS5pZGwKICAgICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJidWZm
ZXIuaWRsCi0gICAgICAgIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwKKyAg
ICAgICAgaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5pZGwKICAgICAgICAg
aHRtbC9jYW52YXMvV2ViR0xTaGFkZXIuaWRsCiAgICAgICAgIGh0bWwvY2FudmFzL1dlYkdMU2hh
ZGVyUHJlY2lzaW9uRm9ybWF0LmlkbAogICAgICAgICBodG1sL2NhbnZhcy9XZWJHTFRleHR1cmUu
aWRsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE3ODM3MikK
KysrIFNvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAg
LTQ0NCwxMiArNDQ0LDE0IEBAIE5PTl9TVkdfQklORElOR19JRExTID0gXAogICAgICQoV2ViQ29y
ZSkvaHRtbC9jYW52YXMvV2ViR0xMb3NlQ29udGV4dC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRt
bC9jYW52YXMvV2ViR0xQcm9ncmFtLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmJ1ZmZlci5pZGwgXAotICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9XZWJHTFNo
YWRlci5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xTaGFkZXJQcmVjaXNp
b25Gb3JtYXQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMVGV4dHVyZS5p
ZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvV2ViR0xVbmlmb3JtTG9jYXRpb24uaWRs
IFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMu
aWRsIFwKKyAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaWRsIFwKKyAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRl
eHQuaWRsIFwKKwkkKFdlYkNvcmUpL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQu
aWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvdHJhY2svQXVkaW9UcmFjay5pZGwgXAogICAgICQo
V2ViQ29yZSkvaHRtbC90cmFjay9BdWRpb1RyYWNrTGlzdC5pZGwgXAogICAgICQoV2ViQ29yZSkv
aHRtbC90cmFjay9EYXRhQ3VlLmlkbCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MjcsOCArMTcyNyw4IEBACiAJCTQ5QzdCOURBMTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTFJlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlDN0I5QkExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmgg
Ki87IH07CiAJCTQ5QzdCOURDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
QzdCOUJDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcCAqLzsg
fTsKIAkJNDlDN0I5REQxMDQyRDMyRjAwMDlENDQ3IC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUJE
MTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0LmggKi87IH07Ci0JCTQ5
QzdCOURGMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkYxMDQyRDMy
RjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07Ci0JCTQ5QzdCOUUw
MTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOUMwMTA0MkQzMkYwMDA5RDQ0
NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKKwkJNDlDN0I5REYxMDQyRDMyRjAw
MDlENDQ3IC8qIFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QkYxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9OworCQk0OUM3QjlFMDEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJl
bmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlDN0I5RTIxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMU2hhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5QzdCOUMyMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5jcHAgKi87IH07CiAJ
CTQ5QzdCOUUzMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5QzMxMDQyRDMyRjAwMDlENDQ3
IC8qIFdlYkdMU2hhZGVyLmggKi87IH07CiAJCTQ5QzdCOUU1MTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTFRleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDlDN0I5QzUxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMVGV4dHVyZS5jcHAgKi87IH07
CkBAIC0xNzY4LDEwICsxNzY4LDEwIEBACiAJCTQ5RUVEMTQzMTA1MTk2OTQwMDA5OUZBQiAvKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNEMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJNDlFRUQxNDQxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAgKi87IH07CiAJCTQ5RUVEMTQ1MTA1MTk2OTQwMDA5OUZBQiAvKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxM0YxMDUxOTY5NDAwMDk5RkFCIC8qIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmggKi87IH07Ci0JCTQ5RUVEMTQ2MTA1MTk2OTQwMDA5OUZBQiAvKiBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwICovOyB9OwotCQk0OUVFRDE0NzEwNTE5Njk0MDAwOTlGQUIgLyogSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5oICovOyB9OworCQk0OUVFRDE0NjEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5RUVEMTQwMTA1MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMMVJlbmRlcmluZ0Nv
bnRleHQuY3BwICovOyB9OworCQk0OUVFRDE0NzEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250
ZXh0LmggKi87IH07CiAJCTQ5RUVEMTRFMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyREN1c3RvbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUVFRDE0QjEwNTE5NzE5MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkRDdXN0b20uY3BwICovOyB9OwotCQk0OUVFRDE0RjEwNTE5NzFBMDAwOTlGQUIg
LyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlFRUQxNEMxMDUxOTcxQTAwMDk5RkFCIC8qIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLzsgfTsKKwkJNDlFRUQxNEYxMDUxOTcx
QTAwMDk5RkFCIC8qIEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0QzEwNTE5NzFBMDAw
OTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLzsgfTsKIAkJNDlF
RUQxNTAxMDUxOTcxQTAwMDk5RkFCIC8qIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUVFRDE0
RDEwNTE5NzFBMDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAq
LzsgfTsKIAkJNDlGQzdBNTAxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUZD
N0E0RjE0NDRBRjVGMDBBNUQ4NjQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcCAqLzsgfTsK
IAkJNDlGRkJGMUQxMUM4NTUwRTAwNkE3MTE4IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLm1tIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlGRkJGMUMxMUM4
NTUwRTAwNkE3MTE4IC8qIEdyYXBoaWNzQ29udGV4dDNETWFjLm1tICovOyB9OwpAQCAtNTg0MCw2
ICs1ODQwLDEyIEBACiAJCUQzNTlENzkzMTI5Q0EzQzAwMDA2RTVEMiAvKiBET01IVE1MRGV0YWls
c0VsZW1lbnRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRDM1OUQ3OTAxMjlDQTNDMDAwMDZFNUQyIC8qIERPTUhUTUxEZXRhaWxzRWxlbWVu
dEludGVybmFsLmggKi87IH07CiAJCUQzNTlEOEJFMTI5Q0E1NUMwMDA2RTVEMiAvKiBKU0hUTUxE
ZXRhaWxzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBEMzU5RDhCQzEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0YWlsc0VsZW1lbnQu
Y3BwICovOyB9OwogCQlEMzU5RDhCRjEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0YWlsc0Vs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQz
NTlEOEJEMTI5Q0E1NUMwMDA2RTVEMiAvKiBKU0hUTUxEZXRhaWxzRWxlbWVudC5oICovOyB9Owor
CQlEMzlDNzJENzFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJE
NTFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi87IH07
CisJCUQzOUM3MkQ4MUE1QzhCMEIwMEFFRDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJE
NjFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oICovOyB9Owor
CQlEMzlDNzJERDFBNUM4QzhFMDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJEQjFB
NUM4QzhFMDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgKi87IH07CisJCUQz
OUM3MkRFMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMzlDNzJEQzFBNUM4QzhF
MDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovOyB9OworCQlEMzlDNzJFNDFB
NUM5M0FGMDBBRUQ4OUMgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzOUM3MkUzMUE1Qzkz
QUYwMEFFRDg5QyAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwICovOyB9Owor
CQlEMzlDNzJFNjFBNUM5NDBCMDBBRUQ4OUMgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Q3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQzOUM3MkU1MUE1Qzk0MEIwMEFFRDg5QyAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VD
dXN0b20uY3BwICovOyB9OwogCQlEM0E5NEEzODEyMkRBQkFDMDBBMzdCQkMgLyogTWVkaWFRdWVy
eUxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDNBOTRBMzExMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmNwcCAqLzsgfTsKIAkJ
RDNBOTRBMzkxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0E5NEEzMjEyMkRBQkFDMDBBMzdC
QkMgLyogTWVkaWFRdWVyeUxpc3QuaCAqLzsgfTsKIAkJRDNBOTRBM0IxMjJEQUJBQzAwQTM3QkJD
IC8qIE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEQzQTk0QTM0MTIyREFCQUMwMEEzN0JCQyAvKiBNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmggKi87IH07CkBAIC01ODQ5LDYgKzU4NTUsMTAgQEAKIAkJRDNBQTEwRjQx
MjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0FBMTBGMjEyM0E5OEFBMDA5MjE1MkIgLyog
TWVkaWFRdWVyeU1hdGNoZXIuaCAqLzsgfTsKIAkJRDNENEU5NzIxMzBDN0NGRTAwN0JBNTQwIC8q
IEhUTUxTdW1tYXJ5RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBEM0Q0RTk3MDEzMEM3Q0ZFMDA3QkE1NDAgLyogSFRNTFN1bW1hcnlFbGVt
ZW50LmNwcCAqLzsgfTsKIAkJRDNENEU5NzMxMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5
RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RDNENEU5NzExMzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5oICovOyB9Owor
CQlEM0UxNEJCNTFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRTE0QkIz
MUE1RENGNEIwMDk3QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwICovOyB9Owor
CQlEM0UxNEJCNjFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEM0UxNEJCNDFB
NURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggKi87IH07CisJCUQz
RTE0QkI5MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDNFMTRCQjcx
QTVEQ0Y3QjAwOTdBNkU5IC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi87IH07
CisJCUQzRTE0QkJBMUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEQzRTE0
QkI4MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLzsg
fTsKIAkJRDYxOUEzMDcxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDYxOUEz
MDUxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuY3BwICovOyB9Owog
CQlENjE5QTMwODE0NEUwMEJFMDA0QkMzMDIgLyogQ2hpbGRMaXN0TXV0YXRpb25TY29wZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRDYxOUEzMDYxNDRF
MDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUuaCAqLzsgfTsKIAkJRDY0ODlE
MjUxNjZGRkNGMTAwN0MwMzFCIC8qIEpTSFRNTFRlbXBsYXRlRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBENjQ4OUQyMzE2NkZGQ0YxMDA3
QzAzMUIgLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCAqLzsgfTsKQEAgLTg3OTYsOSArODgw
Niw5IEBACiAJCTQ5QzdCOUJDMTA0MkQzMkYwMDA5RDQ0NyAvKiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IENhbnZhc1JlbmRl
cmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlCRDEwNDJEMzJGMDAwOUQ0NDcg
LyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHBhdGggPSBjYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlCRTEwNDJE
MzJGMDAwOUQ0NDcgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBuYW1lID0gQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5pZGw7IHBhdGggPSBjYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QzdC
OUJGMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDsg
cGF0aCA9IGNhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk0OUM3QjlDMDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5n
Q29udGV4dC5oOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQk0OUM3QjlDMTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGw7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTQ5QzdCOUJGMTA0MkQzMkYwMDA5RDQ0NyAvKiBX
ZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMMVJl
bmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUM3QjlD
MDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJHTDFSZW5kZXJpbmdDb250ZXh0Lmg7IHBhdGggPSBj
YW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUM3QjlDMTEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBuYW1lID0gV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGw7IHBh
dGggPSBjYW52YXMvV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ5QzdCOUMyMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFNoYWRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBXZWJHTFNoYWRlci5jcHA7IHBh
dGggPSBjYW52YXMvV2ViR0xTaGFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0OUM3QjlDMzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gV2ViR0xTaGFkZXIuaDsgcGF0aCA9IGNhbnZhcy9XZWJHTFNo
YWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3QjlDNDEwNDJEMzJGMDAw
OUQ0NDcgLyogV2ViR0xTaGFkZXIuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMU2hh
ZGVyLmlkbDsgcGF0aCA9IGNhbnZhcy9XZWJHTFNoYWRlci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC04ODQwLDEwICs4ODUwLDEwIEBACiAJCTQ5RUVEMTNEMTA1MTk2OTQwMDA5
OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTQ5RUVEMTNFMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ5RUVEMTNGMTA1MTk2OTQwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUVFRDE0MDEwNTE5Njk0MDAw
OTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlFRUQx
NDAxMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdMMVJlbmRlcmluZ0NvbnRleHQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlG
QUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OUVFRDE0QjEwNTE5NzE5MDAwOTlGQUIgLyogSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0wx
UmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTQ5RUVEMTREMTA1MTk3MUEwMDA5OUZBQiAvKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0
b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlG
QzdBNEYxNDQ0QUY1RjAwQTVEODY0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBEaXNwbGF5UmVmcmVzaE1vbml0b3IuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUZGQkYxQzExQzg1NTBFMDA2QTcxMTgg
LyogR3JhcGhpY3NDb250ZXh0M0RNYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpj
cHA7IHBhdGggPSBHcmFwaGljc0NvbnRleHQzRE1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTEzMzIwLDYgKzEzMzMwLDEyIEBACiAJCUQzNTlENzkwMTI5Q0EzQzAwMDA2RTVE
MiAvKiBET01IVE1MRGV0YWlsc0VsZW1lbnRJbnRlcm5hbC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBET01IVE1MRGV0YWlsc0VsZW1lbnRJbnRlcm5hbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlEMzU5RDhCQzEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0
YWlsc0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNI
VE1MRGV0YWlsc0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMzU5
RDhCRDEyOUNBNTVDMDAwNkU1RDIgLyogSlNIVE1MRGV0YWlsc0VsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNIVE1MRGV0YWlsc0VsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRDM5QzcyRDUxQTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA7IHBhdGggPSBjYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzOUM3
MkQ2MUE1QzhCMEIwMEFFRDg5QyAvKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaDsg
cGF0aCA9IGNhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUQzOUM3MkRCMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJp
bmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYkdM
MlJlbmRlcmluZ0NvbnRleHQuY3BwOyBwYXRoID0gY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRl
eHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMzlDNzJEQzFBNUM4QzhFMDBB
RUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0Lmg7IHBhdGggPSBjYW52YXMvV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEMzlDNzJF
MzFBNUM5M0FGMDBBRUQ4OUMgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0wyUmVuZGVyaW5nQ29u
dGV4dEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUQzOUM3MkU1MUE1
Qzk0MEIwMEFFRDg5QyAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNBOTRBMzEx
MjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJRDNBOTRBMzIxMjJEQUJBQzAwQTM3QkJDIC8qIE1lZGlhUXVlcnlMaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlMaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUQzQTk0QTMzMTIyREFCQUMwMEEzN0JCQyAvKiBNZWRp
YVF1ZXJ5TGlzdC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTWVkaWFRdWVyeUxpc3QuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTMzMzEsNiArMTMzNDcsMTIgQEAKIAkJ
RDNBQTEwRjIxMjNBOThBQTAwOTIxNTJCIC8qIE1lZGlhUXVlcnlNYXRjaGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhUXVlcnlNYXRjaGVyLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUQzRDRFOTcwMTMwQzdDRkUwMDdCQTU0MCAvKiBIVE1MU3VtbWFy
eUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTFN1
bW1hcnlFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDNENEU5NzEx
MzBDN0NGRTAwN0JBNTQwIC8qIEhUTUxTdW1tYXJ5RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBIVE1MU3VtbWFyeUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJRDNFMTRCQjMxQTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2ViR0wyUmVuZGVyaW5n
Q29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdM
MlJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0Ux
NEJCNDFBNURDRjRCMDA5N0E2RTkgLyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEM0UxNEJCNzFBNURDRjdCMDA5N0E2RTkgLyog
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUQzRTE0QkI4MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUQzRTE0QkJCMUE1REU4RjUwMDk3QTZFOSAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IG5hbWUgPSBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbDsgcGF0aCA9
IGNhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRDNFMTRCQkMxQTVERThGNTAwOTdBNkU5IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2UuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgbmFtZSA9IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuaWRsOyBwYXRoID0gY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaWRsOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENjE5QTMwNTE0NEUwMEJFMDA0QkMzMDIgLyogQ2hp
bGRMaXN0TXV0YXRpb25TY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDaGlsZExpc3RNdXRhdGlvblNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJRDYxOUEzMDYxNDRFMDBCRTAwNEJDMzAyIC8qIENoaWxkTGlzdE11dGF0aW9uU2NvcGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2hpbGRMaXN0TXV0YXRpb25TY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlENjQ4OUQyMzE2NkZGQ0YxMDA3QzAz
MUIgLyogSlNIVE1MVGVtcGxhdGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTSFRNTFRlbXBsYXRlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0xNTgzNiw5ICsxNTg1OCwxNSBAQAogCQkJCTQ5QzdCOUI5MTA0MkQzMkYw
MDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmJ1ZmZlci5jcHAgKi8sCiAJCQkJNDlDN0I5QkExMDQyRDMy
RjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmggKi8sCiAJCQkJNDlDN0I5QkIxMDQyRDMy
RjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyYnVmZmVyLmlkbCAqLywKLQkJCQk0OUM3QjlCRjEwNDJE
MzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKLQkJCQk0OUM3QjlD
MDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0LmggKi8sCi0JCQkJNDlD
N0I5QzExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5pZGwgKi8sCisJ
CQkJNDlDN0I5QkYxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3Bw
ICovLAorCQkJCTQ5QzdCOUMwMTA0MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTDFSZW5kZXJpbmdDb250
ZXh0LmggKi8sCisJCQkJNDlDN0I5QzExMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmlu
Z0NvbnRleHQuaWRsICovLAorCQkJCUQzOUM3MkRCMUE1QzhDOEUwMEFFRDg5QyAvKiBXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKKwkJCQlEMzlDNzJEQzFBNUM4QzhFMDBBRUQ4OUMgLyog
V2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovLAorCQkJCUQzRTE0QkJCMUE1REU4RjUwMDk3QTZF
OSAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmlkbCAqLywKKwkJCQlEMzlDNzJENTFBNUM4QjBC
MDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgKi8sCisJCQkJRDM5Qzcy
RDYxQTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLywKKwkJ
CQlEM0UxNEJCQzFBNURFOEY1MDA5N0E2RTkgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5p
ZGwgKi8sCiAJCQkJNDlDN0I5QzIxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMU2hhZGVyLmNwcCAq
LywKIAkJCQk0OUM3QjlDMzEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaCAqLywKIAkJ
CQk0OUM3QjlDNDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xTaGFkZXIuaWRsICovLApAQCAtMTg5
MDcsOCArMTg5MzUsMTIgQEAKIAkJCQk0OUM3Qjk4OTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJH
TFByb2dyYW0uaCAqLywKIAkJCQk0OUM3Qjk4QTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFJl
bmRlcmJ1ZmZlci5jcHAgKi8sCiAJCQkJNDlDN0I5OEIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2Vi
R0xSZW5kZXJidWZmZXIuaCAqLywKLQkJCQk0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwICovLAotCQkJCTQ5RUVEMTQxMTA1MTk2OTQwMDA5OUZB
QiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oICovLAorCQkJCUQzRTE0QkI3MUE1RENGN0Iw
MDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwICovLAorCQkJCUQzRTE0
QkI4MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCAqLywK
KwkJCQk0OUVFRDE0MDEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0
LmNwcCAqLywKKwkJCQk0OUVFRDE0MTEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJp
bmdDb250ZXh0LmggKi8sCisJCQkJRDNFMTRCQjMxQTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2ViR0wy
UmVuZGVyaW5nQ29udGV4dC5jcHAgKi8sCisJCQkJRDNFMTRCQjQxQTVEQ0Y0QjAwOTdBNkU5IC8q
IEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oICovLAogCQkJCTQ5QzdCOThGMTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU1dlYkdMU2hhZGVyLmNwcCAqLywKIAkJCQk0OUM3Qjk5MDEwNDJEMkQzMDAwOUQ0
NDcgLyogSlNXZWJHTFNoYWRlci5oICovLAogCQkJCUEwN0QzMzUzMTUyQjYzMEUwMDFCNjM5MyAv
KiBKU1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCAqLywKQEAgLTIxMDA1LDcgKzIxMDM3
LDkgQEAKIAkJCQk3QzczRkIxNzE5MUVGODA4MDA3REUwNjEgLyogSlNVc2VyTWVzc2FnZUhhbmRs
ZXJzTmFtZXNwYWNlQ3VzdG9tLmNwcCAqLywKIAkJCQlCRTZERjcwODE3MUNBMkM1MDBERDUyQjgg
LyogSlNWaWRlb1RyYWNrQ3VzdG9tLmNwcCAqLywKIAkJCQlCRTZERjcwQTE3MUNBMkM1MDBERDUy
QjggLyogSlNWaWRlb1RyYWNrTGlzdEN1c3RvbS5jcHAgKi8sCi0JCQkJNDlFRUQxNEMxMDUxOTcx
QTAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKKwkJCQlE
MzlDNzJFNTFBNUM5NDBCMDBBRUQ4OUMgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3Vz
dG9tLmNwcCAqLywKKwkJCQk0OUVFRDE0QzEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTDFSZW5k
ZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKKwkJCQlEMzlDNzJFMzFBNUM5M0FGMDBBRUQ4OUMg
LyogSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcCAqLywKIAkJCQlCQzI3NUI3ODEx
QzVEMUMzMDBDOTIwNkMgLyogSlNXZWJLaXRQb2ludEN1c3RvbS5jcHAgKi8sCiAJCQkJRTFDQTVD
QkIwRThDRENBRjAwRThFRjkwIC8qIEpTV29ya2VyQ3VzdG9tLmNwcCAqLywKIAkJCQlFMTgyNThB
QjBFRjNDRDcwMDA5MzMyNDIgLyogSlNXb3JrZXJHbG9iYWxTY29wZUN1c3RvbS5jcHAgKi8sCkBA
IC0yNTIxOCw3ICsyNTI1Miw3IEBACiAJCQkJOTNGMUQ1QzExMkQ1MzM1NjAwODMyQkVDIC8qIEpT
V2ViR0xMb3NlQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlDN0I5OUMxMDQyRDJEMzAw
MDlENDQ3IC8qIEpTV2ViR0xQcm9ncmFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3Qjk5RTEw
NDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTFJlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJNDlFRUQxNDcxMDUxOTY5NDAwMDk5RkFCIC8qIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQk0OUVFRDE0NzEwNTE5Njk0MDAwOTlGQUIgLyogSlNXZWJHTDFS
ZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUM3QjlBMzEwNDJEMkQzMDAw
OUQ0NDcgLyogSlNXZWJHTFNoYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA3RDMzNTYxNTJC
NjMwRTAwMUI2MzkzIC8qIEpTV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5QzdCOUE1MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMVGV4dHVyZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0yNTQ1Niw2ICsyNTQ5MCw3IEBACiAJCQkJMTQxMTVCNTIwOUY4NEI3
MTAwQ0E0RkMxIC8qIE5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1NEZFNzMxMEEyMjk3QkUw
MDU4RDdBRCAvKiBOb2RlRmlsdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NTRGRTczMzBBMjI5
N0JFMDA1OEQ3QUQgLyogTm9kZUZpbHRlckNvbmRpdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
RDNFMTRCQjYxQTVEQ0Y0QjAwOTdBNkU5IC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODU0RkU3MzUwQTIyOTdCRTAwNThEN0FEIC8qIE5vZGVJdGVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgxODcyMUIwOTc3RDNDMDAwNTgyNkQ5IC8qIE5vZGVM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk2MzE4OUFFMzBFODNBMzMzMDAwMTJFNDEgLyogTm9k
ZVJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTI1Njg2LDYgKzI1NzIxLDcgQEAKIAkJCQlF
NDNBMDIzQjE3RUIzNzBBMDA0Q0REMjUgLyogUmVuZGVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1QjdBNTUxMEY2NUQ3QTAwMzc2MzAyIC8qIFJlbmRlckVtYmVkZGVkT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBOEVBNzNDNDBBMTkwMEUzMDBBOEVGNUYgLyogUmVuZGVyRmll
bGRzZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCUQzRTE0QkJBMUE1RENGN0IwMDk3QTZFOSAvKiBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTA2NkM3NzMx
MEFCNjAzRkQwMDIzOENDNCAvKiBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTNDODI5OEUxM0Q4RDkyNzAwREUyREVCIC8qIFJlbmRlckZsZXhpYmxlQm94Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk1MDhDQ0E0RjEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxv
d1RocmVhZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTk1Niw2ICsyNTk5Miw3IEBACiAJCQkJQUI3
MTcwODkwQjMxMTgwODAwMTcxMjNFIC8qIFNlYXJjaFBvcHVwTWVudS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTNGMUUxRUMxQTQwRkREQzAwMzQ4RDEzIC8qIE5TUG9wb3ZlclNQSS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTc2RjM2RUIxNDY4NjIyNTAwNUU5M0I0IC8qIFNlY3VyaXR5Q29udGV4dC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRDM5QzcyRDgxQTVDOEIwQjAwQUVEODlDIC8qIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDBFMEZCMEU5NzJDMzUw
MDI2NURFQSAvKiBTZWN1cml0eU9yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMEUwRkMw
RTk3MkMzNTAwMjY1REVBIC8qIFNlY3VyaXR5T3JpZ2luSGFzaC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTc0RDJEQTUxNDZBNTM1RDAwRDUxRjhCIC8qIFNlY3VyaXR5UG9saWN5LmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2NjMxLDcgKzI2NjY4LDcgQEAKIAkJCQk0OUM3QjlENTEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0xPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUQ3MTA0MkQzMkYw
MDA5RDQ0NyAvKiBXZWJHTFByb2dyYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOURBMTA0
MkQzMkYwMDA5RDQ0NyAvKiBXZWJHTFJlbmRlcmJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
NDlDN0I5RTAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNDlDN0I5RTAxMDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMMVJlbmRlcmlu
Z0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QzdCOUUzMTA0MkQzMkYwMDA5RDQ0NyAv
KiBXZWJHTFNoYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTA3RDMzNTgxNTJCNjMyRDAwMUI2
MzkzIC8qIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
MUQzQ0Y4NzE0QkQwQTMwMDBGRTk5NzAgLyogV2ViR0xTaGFyZWRPYmplY3QuaCBpbiBIZWFkZXJz
ICovLApAQCAtMjY3MDAsNiArMjY3MzcsNyBAQAogCQkJCUExNDgzMkMxMTg3RjY1N0EwMERBNjNB
NiAvKiBXS1R5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTQ4MzJDMzE4N0Y2NURGMDBEQTYz
QTYgLyogV0tVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNDgzMkM0MTg3RjY2M0Mw
MERBNjNBNiAvKiBXS1ZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCUQzOUM3MkRFMUE1QzhDOEUw
MEFFRDg5QyAvKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MTQ4MzJDNjE4N0Y2NjhGMDBEQTYzQTYgLyogV0tWaWV3UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMzc5OTE5OTcxMjAwRERGNDAwRUEwNDFDIC8qIFdPRkZGaWxlRm9ybWF0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyRTQzNDY0NjBGNTQ2QTgyMDBCMEYxQkEgLyogV29ya2VyLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI3NjkzLDYgKzI3NzMxLDcgQEAKIAkJCQlCQzUzREE0ODExNDMxMzREMDAw
RDgxN0UgLyogRE9NV3JhcHBlcldvcmxkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBMUQxMzgx
MEE1MzI1NTIwMDY0QkY1RiAvKiBET01YUGF0aC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg1RTlF
MEEyMEFCM0EwQzcwMDA2OUNEMCAvKiBET01YUGF0aEV4cHJlc3Npb24ubW0gaW4gU291cmNlcyAq
LywKKwkJCQlEMzlDNzJENzFBNUM4QjBCMDBBRUQ4OUMgLyogV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NUU5RTBBNjBBQjNBMEM3MDAwNjlDRDAgLyog
RE9NWFBhdGhSZXN1bHQubW0gaW4gU291cmNlcyAqLywKIAkJCQlGRDE3NjJFMzE3NjY4NkVBMDBE
ODM2QTggLyogRG93blNhbXBsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDQTU5NUUwQjI3
QkQ5RTAwRkEwMjFEIC8qIERyYWdDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg3
NDMsNiArMjg3ODIsNyBAQAogCQkJCTI2NzcyNjA0MUE1REY2RjIwMDNDMjRERCAvKiBVUkxGaWx0
ZXJQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEQTdDMTYxODgzMjJFQjAwQzk1NEI1
IC8qIEpTVG91Y2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEQTdDMTgxODgzMjJFQjAwQzk1
NEI1IC8qIEpTVG91Y2hFdmVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlEMzlDNzJFNjFBNUM5
NDBCMDBBRUQ4OUMgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGREE3QzFBMTg4MzIyRUIwMEM5NTRCNSAvKiBKU1RvdWNoTGlzdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzAzMzRFOTE0NUExRjM2MDA4RDhENDUgLyogSlNUcmFj
a0N1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzg0NjM0MjE0NUIxNTFBMDBBNThERjEg
LyogSlNUcmFja0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjg3ODIsOCArMjg4MjIsOCBA
QAogCQkJCTkzRjFENUMwMTJENTMzNTYwMDgzMkJFQyAvKiBKU1dlYkdMTG9zZUNvbnRleHQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5OUIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xQ
cm9ncmFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOTlEMTA0MkQyRDMwMDA5RDQ0NyAv
KiBKU1dlYkdMUmVuZGVyYnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5RUVEMTQ2MTA1
MTk2OTQwMDA5OUZBQiAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk0OUVFRDE0RjEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNDlFRUQxNDYxMDUxOTY5NDAwMDk5RkFC
IC8qIEpTV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0OUVF
RDE0RjEwNTE5NzFBMDAwOTlGQUIgLyogSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTQ5QzdCOUEyMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdM
U2hhZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUEwN0QzMzU1MTUyQjYzMEUwMDFCNjM5MyAv
KiBKU1dlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQ5
QzdCOUE0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMVGV4dHVyZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTI4OTQ1LDYgKzI4OTg1LDcgQEAKIAkJCQkwNzhFMDkwMzE3RDE0Q0VFMDA0MjBBQTEg
LyogTWVkaWFTdHJlYW1UcmFja0V2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3RkZERTY4
MTgxQUVENDIwMDcyRDQwOSAvKiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwNzYzMDZEMjE3RTE0NzhEMDA1QTdDNEUgLyogTWVkaWFTdHJlYW1UcmFja1Nv
dXJjZXNSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQzRTE0QkI1MUE1RENGNEIwMDk3
QTZFOSAvKiBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Q0Q2NDFFQkYxODE5QjM2MDAwRUU0QzQxIC8qIE1lZGlhVGltZUFWRm91bmRhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlDRDYwQzBDNjE5M0U4N0M3MDAzQzY1NkIgLyogTWVkaWFUaW1lUVRL
aXQubW0gaW4gU291cmNlcyAqLywKIAkJCQkwNzA1ODUzQTE3RkUwNzcwMDA1RjJCQ0IgLyogTWVk
aWFUcmFja0NvbnN0cmFpbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yOTQzOSw2ICsyOTQ4MCw3
IEBACiAJCQkJNEI2RkE2RjcwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUU0QUZEMDBCMERBRjMzNTQwMEY1RjU1QyAvKiBTTUlMVGltZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFNEFGRDAwRDBEQUYzMzU1MDBGNUY1NUMgLyogU01JTFRp
bWVDb250YWluZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJRDM5QzcyRTQxQTVDOTNBRjAwQUVE
ODlDIC8qIEpTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk1MTBENEEzMzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3RyZWFtRXJyb3JCYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEQ0QTM2MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRT
dHJlYW1IYW5kbGVCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxQUJBRTFGMTAzQzE5MTMw
MDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTI5NzI3LDYgKzI5NzY5LDcgQEAKIAkJCQk2NTUwQjZBNTA5OURGMDI3MDA5MEQ3ODEgLyogVGV4
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDRTdCMkRCNjE1ODZBQkFEMDA5OEIzRkEgLyogVGV4
dEFsdGVybmF0aXZlV2l0aFJhbmdlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NERDRTUxODgx
MDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUQz
RTE0QkI5MUE1RENGN0IwMDk3QTZFOSAvKiBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMzcyQzAwQzQxMjk2MTFGMTAwNUM5NTc1IC8qIFRleHRCb3Vu
ZGFyaWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzk3MEQwMEE1REYwMDMwMDc0RCAv
KiBUZXh0Qm91bmRhcmllcy5tbSBpbiBTb3VyY2VzICovLAogCQkJCUJDRDhBNUYwMTVGNTZGMkMw
MDk4RDA3MSAvKiBUZXh0QnJlYWtJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI5OTIw
LDcgKzI5OTYzLDcgQEAKIAkJCQk0OUM3QjlENDEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0xPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDlDN0I5RDYxMDQyRDMyRjAwMDlENDQ3IC8qIFdl
YkdMUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3QjlEOTEwNDJEMzJGMDAwOUQ0
NDcgLyogV2ViR0xSZW5kZXJidWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlDN0I5REYx
MDQyRDMyRjAwMDlENDQ3IC8qIFdlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0OUM3QjlERjEwNDJEMzJGMDAwOUQ0NDcgLyogV2ViR0wxUmVuZGVyaW5nQ29udGV4
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3QjlFMjEwNDJEMzJGMDAwOUQ0NDcgLyogV2Vi
R0xTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTA4Q0YxNTQxNTJCNzdCMzAwOUM1Nzc1
IC8qIFdlYkdMU2hhZGVyUHJlY2lzaW9uRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTAx
RDNDRjg2MTRCRDBBMzAwMEZFOTk3MCAvKiBXZWJHTFNoYXJlZE9iamVjdC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTI5OTcwLDYgKzMwMDEzLDcgQEAKIAkJCQk5M0VDNDRBMTE4OEY0QkI4MDA2NjFE
RjEgLyogV2hlZWxFdmVudERlbHRhVHJhY2tlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5Mzgw
RjQ3MzA5QTExQUI0MDAxRkRCMzQgLyogV2lkZ2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUU0
NTM5MDREMEVBRkQ2MzcwMDM2OTVDOCAvKiBXaWRnZXRJT1MubW0gaW4gU291cmNlcyAqLywKKwkJ
CQlEMzlDNzJERDFBNUM4QzhFMDBBRUQ4OUMgLyogV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5MzgwRjQ3ODA5QTExQUNDMDAxRkRCMzQgLyogV2lkZ2V0TWFj
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5QjAyRUUwRUEyREJDNDAwQzU0NTcwIC8qIFdpZHRo
SXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkM4MjQzRTgwRDBDRkQ3NTAwNDYwQzhG
IC8qIFdpbmRvd0ZlYXR1cmVzLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHRDdXN0b20uY3BwCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiw4ICsz
MiwxMCBAQAogI2luY2x1ZGUgIkpTTm9kZS5oIgogCiAjaWYgRU5BQkxFKFdFQkdMKQotI2luY2x1
ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdD
b250ZXh0LmgiCisjaW5jbHVkZSAiSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVk
ZSAiSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0LmgiCisjaW5jbHVkZSAiV2ViR0wxUmVuZGVyaW5n
Q29udGV4dC5oIgorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKICNlbmRpZgog
CiB1c2luZyBuYW1lc3BhY2UgSlNDOwpAQCAtNTEsOCArNTMsMTIgQEAgSlNDOjpKU1ZhbHVlIHRv
SlMoSlNDOjpFeGVjU3RhdGUqLCBKU0RPTQogICAgICAgICByZXR1cm4ganNOdWxsKCk7CiAKICNp
ZiBFTkFCTEUoV0VCR0wpCi0gICAgaWYgKG9iamVjdC0+aXMzZCgpKQotICAgICAgICByZXR1cm4g
d3JhcDxKU1dlYkdMUmVuZGVyaW5nQ29udGV4dD4oZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqPihvYmplY3QpKTsKKyAgICBpZiAob2JqZWN0LT5pczNkKCkp
IHsKKyAgICAgICAgaWYgKG9iamVjdC0+dHlwZSgpID09ICJ3ZWJnbDEiKQorICAgICAgICAgICAg
cmV0dXJuIHdyYXA8SlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0PihnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PFdlYkdMMVJlbmRlcmluZ0NvbnRleHQqPihvYmplY3QpKTsKKyAgICAgICAgaWYgKG9i
amVjdC0+dHlwZSgpID09ICJ3ZWJnbDIiKQorICAgICAgICAgICAgcmV0dXJuIHdyYXA8SlNXZWJH
TDJSZW5kZXJpbmdDb250ZXh0PihnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMMlJlbmRl
cmluZ0NvbnRleHQqPihvYmplY3QpKTsKKyAgICB9CiAjZW5kaWYKICAgICBBU1NFUlRfV0lUSF9T
RUNVUklUWV9JTVBMSUNBVElPTihvYmplY3QtPmlzMmQoKSk7CiAgICAgcmV0dXJuIHdyYXA8SlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKj4ob2JqZWN0KSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0RvY3VtZW50Q3VzdG9tLmNwcAkocmV2aXNpb24gMTc4MzcyKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNEb2N1bWVudEN1c3RvbS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDx3dGYvR2V0UHRyLmg+CiAKICNpZiBF
TkFCTEUoV0VCR0wpCi0jaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxF
KFRPVUNIX0VWRU5UUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTSFRNTENh
bnZhc0VsZW1lbnRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTSFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCShyZXZpc2lvbiAxNzgzNzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0hUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQAogCiAjaWYgRU5BQkxFKFdFQkdMKQog
I2luY2x1ZGUgIkpTRGljdGlvbmFyeS5oIgotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgiCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgiCiAjaW5jbHVk
ZSAiV2ViR0xDb250ZXh0QXR0cmlidXRlcy5oIgogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wxUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdDb250
ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24gMTc2OTk0KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHA6MTc2OTk0KQorKysgU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoV0VCR0wpCisKKyNpbmNsdWRlICJKU1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorCisjaW5j
bHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJFWFRCbGVuZE1pbk1heC5o
IgorI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5oIgorI2luY2x1ZGUgIkVYVFNoYWRlclRleHR1cmVM
T0QuaCIKKyNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKKyNpbmNsdWRl
ICJFWFRzUkdCLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkhUTUxD
YW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUg
IkpTQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKKyNpbmNsdWRlICJKU0VYVEJsZW5kTWluTWF4Lmgi
CisjaW5jbHVkZSAiSlNFWFRGcmFnRGVwdGguaCIKKyNpbmNsdWRlICJKU0VYVFNoYWRlclRleHR1
cmVMT0QuaCIKKyNpbmNsdWRlICJKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgorI2lu
Y2x1ZGUgIkpTRVhUc1JHQi5oIgorI2luY2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNp
bmNsdWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgor
I2luY2x1ZGUgIkpTT0VTRWxlbWVudEluZGV4VWludC5oIgorI2luY2x1ZGUgIkpTT0VTU3RhbmRh
cmREZXJpdmF0aXZlcy5oIgorI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUZsb2F0LmgiCisjaW5jbHVk
ZSAiSlNPRVNUZXh0dXJlRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxm
RmxvYXQuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKKyNpbmNs
dWRlICJKU09FU1ZlcnRleEFycmF5T2JqZWN0LmgiCisjaW5jbHVkZSAiSlNXZWJHTEJ1ZmZlci5o
IgorI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQy5oIgorI2luY2x1ZGUgIkpT
V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmgiCisjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgor
I2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1NoYWRlcnMuaCIKKyNpbmNsdWRlICJKU1dlYkdMRGVwdGhU
ZXh0dXJlLmgiCisjaW5jbHVkZSAiSlNXZWJHTERyYXdCdWZmZXJzLmgiCisjaW5jbHVkZSAiSlNX
ZWJHTEZyYW1lYnVmZmVyLmgiCisjaW5jbHVkZSAiSlNXZWJHTExvc2VDb250ZXh0LmgiCisjaW5j
bHVkZSAiSlNXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJKU1dlYkdMUmVuZGVyYnVmZmVyLmgi
CisjaW5jbHVkZSAiSlNXZWJHTFNoYWRlci5oIgorI2luY2x1ZGUgIkpTV2ViR0xUZXh0dXJlLmgi
CisjaW5jbHVkZSAiSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgorI2luY2x1ZGUgIkpTV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgorI2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4LmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50
LmgiCisjaW5jbHVkZSAiT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgorI2luY2x1ZGUgIk9FU1Rl
eHR1cmVGbG9hdC5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgorI2luY2x1
ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXQuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0
TGluZWFyLmgiCisjaW5jbHVkZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRlICJX
ZWJHTEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKKyNp
bmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKKyNpbmNsdWRlICJXZWJHTENv
bXByZXNzZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8u
aCIKKyNpbmNsdWRlICJXZWJHTERlYnVnU2hhZGVycy5oIgorI2luY2x1ZGUgIldlYkdMRGVwdGhU
ZXh0dXJlLmgiCisjaW5jbHVkZSAiV2ViR0xEcmF3QnVmZmVycy5oIgorI2luY2x1ZGUgIldlYkdM
RXh0ZW5zaW9uLmgiCisjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldl
YkdMR2V0SW5mby5oIgorI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKKyNpbmNsdWRlICJX
ZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNpbmNs
dWRlICJXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCisjaW5jbHVkZSA8cnVudGltZS9FcnJv
ci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5cy5oPgorI2luY2x1ZGUgPHJ1bnRp
bWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworI2lmIEVOQUJMRShWSURFTykKKyNpbmNs
dWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAiSlNIVE1MVmlkZW9FbGVtZW50Lmgi
CisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xHZXRJbmZvJiBpbmZvKQoreworICAgIHN3aXRjaCAo
aW5mby5nZXRUeXBlKCkpIHsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVCb29sOgorICAg
ICAgICByZXR1cm4ganNCb29sZWFuKGluZm8uZ2V0Qm9vbCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0
SW5mbzo6a1R5cGVCb29sQXJyYXk6IHsKKyAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbGlz
dDsKKyAgICAgICAgY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZSA9IGluZm8uZ2V0Qm9vbEFycmF5
KCk7CisgICAgICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YWx1ZS5zaXplKCk7ICsraWkp
CisgICAgICAgICAgICBsaXN0LmFwcGVuZChqc0Jvb2xlYW4odmFsdWVbaWldKSk7CisgICAgICAg
IHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3QsIGxpc3QpOworICAg
IH0KKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVGbG9hdDoKKyAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGluZm8uZ2V0RmxvYXQoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlSW50
OgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRJbnQoKSk7CisgICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlTnVsbDoKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIGNhc2Ug
V2ViR0xHZXRJbmZvOjprVHlwZVN0cmluZzoKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nV2l0aENh
Y2hlKGV4ZWMsIGluZm8uZ2V0U3RyaW5nKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlw
ZVVuc2lnbmVkSW50OgorICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRVbnNpZ25lZElu
dCgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEJ1ZmZlcjoKKyAgICAgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMQnVmZmVyKCkpOwor
ICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRmxvYXRBcnJheToKKyAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMRmxvYXRBcnJheSgpKTsK
KyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEZyYW1lYnVmZmVyOgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xGcmFtZWJ1ZmZlcigp
KTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEludEFycmF5OgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xJbnRBcnJheSgpKTsK
KyAgICAvLyBGSVhNRTogaW1wbGVtZW50IFdlYkdMT2JqZWN0QXJyYXkKKyAgICAvLyBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTE9iamVjdEFycmF5OgorICAgIGNhc2UgV2ViR0xHZXRJbmZv
OjprVHlwZVdlYkdMUHJvZ3JhbToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpbmZvLmdldFdlYkdMUHJvZ3JhbSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5
cGVXZWJHTFJlbmRlcmJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpbmZvLmdldFdlYkdMUmVuZGVyYnVmZmVyKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZv
OjprVHlwZVdlYkdMVGV4dHVyZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBpbmZvLmdldFdlYkdMVGV4dHVyZSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5
cGVXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIGluZm8uZ2V0V2ViR0xVbnNpZ25lZEJ5dGVBcnJheSgpKTsKKyAgICBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkSW50QXJyYXk6CisgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkSW50QXJyYXkoKSk7
CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzoK
KyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVMoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorfQorCitlbnVtIE9i
amVjdFR5cGUgeworICAgIGtCdWZmZXIsIGtSZW5kZXJidWZmZXIsIGtUZXh0dXJlLCBrVmVydGV4
QXR0cmliCit9OworCitzdGF0aWMgSlNWYWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIG9iaiwgRXhlY1N0YXRlKiBleGVjLCBPYmplY3RUeXBlIG9iamVjdFR5
cGUpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1
cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBvYmotPmltcGwoKTsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
dW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMp
OworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm87CisgICAgc3dpdGNoIChvYmplY3RUeXBlKSB7
CisgICAgY2FzZSBrQnVmZmVyOgorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRCdWZmZXJQYXJh
bWV0ZXIodGFyZ2V0LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtSZW5k
ZXJidWZmZXI6CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRl
cih0YXJnZXQsIHBuYW1lLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1RleHR1cmU6
CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBl
Yyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1ZlcnRleEF0dHJpYjoKKyAgICAgICAgLy8g
dGFyZ2V0ID0+IGluZGV4CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFZlcnRleEF0dHJpYih0
YXJnZXQsIHBuYW1lLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoZWMpIHsK
KyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMsIG9iai0+Z2xvYmFsT2JqZWN0
KCksIGluZm8pOworfQorCitlbnVtIFdoaWNoUHJvZ3JhbUNhbGwgeworICAgIGtQcm9ncmFtUGFy
YW1ldGVyLCBrVW5pZm9ybQorfTsKKworc3RhdGljIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdlYkdMRXh0ZW5zaW9uKiBleHRl
bnNpb24pCit7CisgICAgaWYgKCFleHRlbnNpb24pCisgICAgICAgIHJldHVybiBqc051bGwoKTsK
KyAgICBzd2l0Y2ggKGV4dGVuc2lvbi0+Z2V0TmFtZSgpKSB7CisgICAgY2FzZSBXZWJHTEV4dGVu
c2lvbjo6V2ViR0xMb3NlQ29udGV4dE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xMb3NlQ29udGV4dCo+KGV4dGVuc2lvbikpOwor
ICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVFNoYWRlclRleHR1cmVMT0ROYW1lOgorICAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFNoYWRlclRl
eHR1cmVMT0QqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRUZXh0
dXJlRmlsdGVyQW5pc290cm9waWNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9i
YWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyo+KGV4dGVu
c2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVHNSR0JOYW1lOgorICAgICAgICBy
ZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVHNSR0IqPihleHRl
bnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRGcmFnRGVwdGhOYW1lOgorICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVEZyYWdE
ZXB0aCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEJsZW5kTWlu
TWF4TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxFWFRCbGVuZE1pbk1heCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNp
b246Ok9FU1N0YW5kYXJkRGVyaXZhdGl2ZXNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMqPihleHRl
bnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXROYW1lOgor
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1Rl
eHR1cmVGbG9hdCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1Rl
eHR1cmVGbG9hdExpbmVhck5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7Cisg
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6CisgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhh
bGZGbG9hdCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1
cmVIYWxmRmxvYXRMaW5lYXJOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIqPihleHRlbnNpb24p
KTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNWZXJ0ZXhBcnJheU9iamVjdE5hbWU6Cisg
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVmVy
dGV4QXJyYXlPYmplY3QqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpP
RVNFbGVtZW50SW5kZXhVaW50TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Kj4oZXh0ZW5zaW9uKSk7Cisg
ICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05hbWU6CisgICAg
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1
Z1JlbmRlcmVySW5mbyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Oldl
YkdMRGVidWdTaGFkZXJzTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2Jq
ZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlYnVnU2hhZGVycyo+KGV4dGVuc2lvbikpOworICAgIGNh
c2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVENOYW1lOgorICAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVENOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVj
LCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyo+
KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRl
eHR1cmVTM1RDTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBz
dGF0aWNfY2FzdDxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyo+KGV4dGVuc2lvbikpOworICAg
IGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVwdGhUZXh0dXJlTmFtZToKKyAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlcHRoVGV4dHVy
ZSo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRHJhd0J1ZmZl
cnNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PFdlYkdMRHJhd0J1ZmZlcnMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5z
aW9uOjpBTkdMRUluc3RhbmNlZEFycmF5c05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5jZWRBcnJheXMqPihleHRlbnNp
b24pKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGpzTnVs
bCgpOworfQorCit2b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxD
aGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICB2aXNpdG9yLmFkZE9wYXF1ZVJv
b3QoJmltcGwoKSk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0
dGFjaGVkU2hhZGVycyhFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4
ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7
CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNo
YWRlcnM7CisgICAgYm9vbCBzdWNjZWVkID0gY29udGV4dC5nZXRBdHRhY2hlZFNoYWRlcnMocHJv
Z3JhbSwgc2hhZGVycywgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgfQorICAgIGlmICgh
c3VjY2VlZCkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgbGlzdDsKKyAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgc2hhZGVycy5zaXpl
KCk7ICsraWkpCisgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IHNoYWRlcnNbaWldLmdldCgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAs
IGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Z2V0RXh0ZW5zaW9uKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJn
dW1lbnRDb3VudCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworCisgICAgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOworICAgIGNvbnN0IFN0cmluZyBu
YW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4
ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiA9IGNvbnRleHQuZ2V0RXh0
ZW5zaW9uKG5hbWUpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBleHRl
bnNpb24pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQ
YXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0
ZXIodGhpcywgZXhlYywga0J1ZmZlcik7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQorICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHVuc2lnbmVk
IGF0dGFjaG1lbnQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKS50b0lu
dDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldEZyYW1l
YnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCBlYyk7
CisgICAgaWYgKGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldFBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3Vt
ZW50Q291bnQoKSAhPSAxKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBp
bXBsKCk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50
b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFBh
cmFtZXRlcihwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAg
cmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVy
biBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKGV4ZWMpKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICBXZWJHTFByb2dyYW0qIHByb2dy
YW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5k
ZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAg
ICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhl
Yyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKKyAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0UHJvZ3JhbVBhcmFt
ZXRlcihwcm9ncmFtLCBwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01F
eGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9
CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworfQorCitKU1Zh
bHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoRXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhl
Yywga1JlbmRlcmJ1ZmZlcik7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFNoYWRlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFy
Z3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQg
PSBpbXBsKCk7CisgICAgaWYgKCFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pbmhlcml0cyhKU1dlYkdM
U2hhZGVyOjppbmZvKCkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Cisg
ICAgV2ViR0xTaGFkZXIqIHNoYWRlciA9IEpTV2ViR0xTaGFkZXI6OnRvV3JhcHBlZChleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8g
PSBjb250ZXh0LmdldFNoYWRlclBhcmFtZXRlcihzaGFkZXIsIHBuYW1lLCBlYyk7CisgICAgaWYg
KGVjKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QoKSwgaW5mbyk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1
cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKKyAgICBpZiAoY29udGV4dC5pc0NvbnRleHRMb3N0
KCkpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWx1ZSA9
IGNvbnRleHQuZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOworICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIGxpc3Q7CisgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVlLnNpemUoKTsgKytp
aSkKKyAgICAgICAgbGlzdC5hcHBlbmQoanNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgdmFsdWVbaWld
KSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVjdCgpLCBs
aXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VGV4UGFyYW1l
dGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRo
aXMsIGV4ZWMsIGtUZXh0dXJlKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6Z2V0VW5pZm9ybShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBs
KCk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBl
ZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYmICFleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0
aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDEpKTsKKyAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgxKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFVuaWZvcm0ocHJvZ3Jh
bSwgbG9jYXRpb24sIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9u
KGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKEV4ZWNTdGF0ZSogZXhlYykKK3sK
KyAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtWZXJ0ZXhBdHRyaWIp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Citib29s
IHRvVmVjdG9yKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3Rv
cjxULCBpbmxpbmVDYXBhY2l0eT4mIHZlY3RvcikKK3sKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEpTQzo6SlNPYmplY3QqIG9iamVjdCA9
IGFzT2JqZWN0KHZhbHVlKTsKKyAgICBpbnQzMl90IGxlbmd0aCA9IG9iamVjdC0+Z2V0KGV4ZWMs
IGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+bGVuZ3RoKS50b0ludDMyKGV4ZWMpOworCisgICAg
aWYgKCF2ZWN0b3IudHJ5UmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB2ZWN0b3IucmVzaXplKGxlbmd0aCk7CisKKyAgICBmb3IgKGludDMyX3QgaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+
Z2V0KGV4ZWMsIGkpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHZlY3RvcltpXSA9IHN0YXRpY19jYXN0PFQ+KHYu
dG9OdW1iZXIoZXhlYykpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitlbnVtIERh
dGFGdW5jdGlvblRvQ2FsbCB7CisgICAgZl91bmlmb3JtMXYsIGZfdW5pZm9ybTJ2LCBmX3VuaWZv
cm0zdiwgZl91bmlmb3JtNHYsCisgICAgZl92ZXJ0ZXhBdHRyaWIxdiwgZl92ZXJ0ZXhBdHRyaWIy
diwgZl92ZXJ0ZXhBdHRyaWIzdiwgZl92ZXJ0ZXhBdHRyaWI0dgorfTsKKworZW51bSBEYXRhRnVu
Y3Rpb25NYXRyaXhUb0NhbGwgeworICAgIGZfdW5pZm9ybU1hdHJpeDJmdiwgZl91bmlmb3JtTWF0
cml4M2Z2LCBmX3VuaWZvcm1NYXRyaXg0ZnYKK307CisKK3N0YXRpYyBib29sIGZ1bmN0aW9uRm9y
VW5pZm9ybShEYXRhRnVuY3Rpb25Ub0NhbGwgZikKK3sKKyAgICBzd2l0Y2ggKGYpIHsKKyAgICBj
YXNlIGZfdW5pZm9ybTF2OgorICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgY2FzZSBmX3VuaWZv
cm0zdjoKKyAgICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgSlND
OjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmYoRGF0YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0
YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGV4
ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJv
d0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Cisg
ICAgCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uID0gMDsKKyAgICBsb25nIGlu
ZGV4ID0gLTE7CisgICAgCisgICAgaWYgKGZ1bmN0aW9uRm9yVW5pZm9ybShmKSkgeworICAgICAg
ICBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CisgICAgICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgfSBlbHNlCisgICAgICAgIGluZGV4ID0gZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKworICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIAorICAg
IFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zsb2F0MzJBcnJheShleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgxKSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAK
KyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgICAgIAorICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgIGlmICh3ZWJHTEFycmF5KSB7CisgICAgICAgIHN3aXRjaCAoZikgewor
ICAgICAgICBjYXNlIGZfdW5pZm9ybTF2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMWZ2
KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBmX3VuaWZvcm0ydjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTJmdihs
b2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0zZnYobG9j
YXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2KGxvY2F0
aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjF2OgorICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIx
ZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
MmZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6CisgICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJp
YjNmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OgorICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRy
aWI0ZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKworICAgIFZlY3RvcjxmbG9hdCwgNjQ+
IGFycmF5OworICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MSksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworCisgICAg
c3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgY29udGV4dC51bmlm
b3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0y
ZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgIGNvbnRleHQudW5pZm9ybTNmdihs
b2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2KGxvY2F0
aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIGZfdmVydGV4QXR0cmliMXY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMWZ2
KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIyZnYo
aW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjN2OgorICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjNmdihp
bmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIGZfdmVydGV4QXR0cmliNHY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliNGZ2KGlu
ZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworfQorCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0YUZ1bmN0
aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQm
IGNvbnRleHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAg
ICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hB
cmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOworICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihl
eGVjKTsKKyAgCisgICAgUmVmUHRyPEludDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0ludDMyQXJy
YXkoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgICAgaWYgKHdlYkdMQXJyYXkpIHsKKyAgICAgICAgc3dpdGNoIChmKSB7CisgICAgICAg
IGNhc2UgZl91bmlmb3JtMXY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0xaXYobG9jYXRp
b24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMml2KGxvY2F0aW9u
LCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBmX3VuaWZvcm0zdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwg
d2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
Zl91bmlmb3JtNHY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYobG9jYXRpb24sIHdl
YkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldERP
TUV4Y2VwdGlvbihleGVjLCBlYyk7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
IH0KKworCisgICAgVmVjdG9yPGludCwgNjQ+IGFycmF5OworICAgIGlmICghdG9WZWN0b3IoZXhl
YywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSksIGFycmF5KSkKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworCisgICAgc3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZv
cm0xdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtMWl2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCks
IGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTJ2
OgorICAgICAgICBjb250ZXh0LnVuaWZvcm0yaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtM3Y6Cisg
ICAgICAgIGNvbnRleHQudW5pZm9ybTNpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5z
aXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAg
ICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUo
KSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgCisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKK30KKworc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25NYXRyaXgo
RGF0YUZ1bmN0aW9uTWF0cml4VG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQmIGNvbnRleHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQo
KSAhPSAzKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisKKyAgICBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOworICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihleGVjKTsKKworICAgIGJvb2wgdHJhbnNwb3NlID0gZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMSkudG9Cb29sZWFuKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkgICAgCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgICAKKyAgICBS
ZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMikpOworICAgICAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBzd2l0Y2ggKGYpIHsKKyAgICAgICAgY2Fz
ZSBmX3VuaWZvcm1NYXRyaXgyZnY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgy
ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtTWF0cml4M2Z2OgorICAgICAgICAgICAg
Y29udGV4dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXku
Z2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybU1h
dHJpeDRmdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwg
dHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorCisgICAgVmVjdG9yPGZsb2F0LCA2
ND4gYXJyYXk7CisgICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgyKSwgYXJyYXkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisKKyAg
ICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDJmdjoKKyAgICAgICAgY29u
dGV4dC51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwg
YXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtTWF0
cml4M2Z2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5z
cG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBmX3VuaWZvcm1NYXRyaXg0ZnY6CisgICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJp
eDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMXYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pT
Qzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0xdiwgZXhl
YywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rp
b25mKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMnYsIGV4ZWMsIGltcGwoKSk7Cit9CisK
K0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNmdihKU0M6OkV4
ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0zdiwg
ZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25pKGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtNHYsIGV4ZWMsIGltcGwoKSk7Cit9
CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihKU0M6
OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm00
diwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4MmZ2LCBleGVjLCBpbXBsKCkpOwor
fQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgz
ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJp
eChmX3VuaWZvcm1NYXRyaXgzZnYsIGV4ZWMsIGltcGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDRmdihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDRm
diwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJu
IGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIxdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlND
OjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRy
aWIydiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0
dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWIzdiwgZXhlYywgaW1wbCgpKTsKK30KKwor
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZnYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhB
dHRyaWI0diwgZXhlYywgaW1wbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMVJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMMVJlbmRl
cmluZ0NvbnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiw3MjcgKzI2LDE3IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAKICNpZiBFTkFCTEUoV0VCR0wpCi0KLSNpbmNsdWRlICJKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oIgotCi0jaW5jbHVkZSAiQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKLSNp
bmNsdWRlICJFWFRTaGFkZXJUZXh0dXJlTE9ELmgiCi0jaW5jbHVkZSAiRVhUVGV4dHVyZUZpbHRl
ckFuaXNvdHJvcGljLmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkhU
TUxDYW52YXNFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1
ZGUgIkpTQU5HTEVJbnN0YW5jZWRBcnJheXMuaCIKLSNpbmNsdWRlICJKU0VYVFNoYWRlclRleHR1
cmVMT0QuaCIKLSNpbmNsdWRlICJKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgotI2lu
Y2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0hUTUxJbWFnZUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJKU0ltYWdlRGF0YS5oIgotI2luY2x1ZGUgIkpTT0VTRWxlbWVudElu
ZGV4VWludC5oIgotI2luY2x1ZGUgIkpTT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1
ZGUgIkpTT0VTVGV4dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxvYXRMaW5l
YXIuaCIKLSNpbmNsdWRlICJKU09FU1RleHR1cmVIYWxmRmxvYXQuaCIKLSNpbmNsdWRlICJKU09F
U1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJKU09FU1ZlcnRleEFycmF5T2Jq
ZWN0LmgiCi0jaW5jbHVkZSAiSlNXZWJHTEJ1ZmZlci5oIgotI2luY2x1ZGUgIkpTV2ViR0xDb21w
cmVzc2VkVGV4dHVyZUFUQy5oIgotI2luY2x1ZGUgIkpTV2ViR0xDb21wcmVzc2VkVGV4dHVyZVBW
UlRDLmgiCi0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgotI2luY2x1
ZGUgIkpTV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgotI2luY2x1ZGUgIkpTV2ViR0xEZWJ1Z1No
YWRlcnMuaCIKLSNpbmNsdWRlICJKU1dlYkdMRGVwdGhUZXh0dXJlLmgiCi0jaW5jbHVkZSAiSlNX
ZWJHTERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAiSlNXZWJHTEZyYW1lYnVmZmVyLmgiCi0jaW5j
bHVkZSAiSlNXZWJHTExvc2VDb250ZXh0LmgiCi0jaW5jbHVkZSAiSlNXZWJHTFByb2dyYW0uaCIK
LSNpbmNsdWRlICJKU1dlYkdMUmVuZGVyYnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTFNoYWRl
ci5oIgotI2luY2x1ZGUgIkpTV2ViR0xUZXh0dXJlLmgiCi0jaW5jbHVkZSAiSlNXZWJHTFVuaWZv
cm1Mb2NhdGlvbi5oIgotI2luY2x1ZGUgIkpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIgot
I2luY2x1ZGUgIkpTV2ViS2l0Q1NTTWF0cml4LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKLSNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50LmgiCi0jaW5jbHVkZSAiT0VTU3RhbmRh
cmREZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdC5oIgotI2luY2x1ZGUg
Ik9FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXQu
aCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAiT0VT
VmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgotI2luY2x1ZGUg
IldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgot
I2luY2x1ZGUgIldlYkdMRGVidWdSZW5kZXJlckluZm8uaCIKLSNpbmNsdWRlICJXZWJHTERlYnVn
U2hhZGVycy5oIgotI2luY2x1ZGUgIldlYkdMRGVwdGhUZXh0dXJlLmgiCi0jaW5jbHVkZSAiV2Vi
R0xEcmF3QnVmZmVycy5oIgotI2luY2x1ZGUgIldlYkdMRXh0ZW5zaW9uLmgiCi0jaW5jbHVkZSAi
V2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMR2V0SW5mby5oIgotI2luY2x1ZGUg
IldlYkdMTG9zZUNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKLSNpbmNsdWRl
ICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTLmgiCi0jaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
SlNUeXBlZEFycmF5cy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4K
LSNpbmNsdWRlIDxydW50aW1lL1R5cGVkQXJyYXlzLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KLQotI2lmIEVOQUJMRShWSURFTykKLSNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiSlNIVE1MVmlkZW9FbGVtZW50LmgiCi0jZW5kaWYKKyNpbmNsdWRlICJKU1dl
YkdMMVJlbmRlcmluZ0NvbnRleHQuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEpTQzsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1zdGF0aWMgSlNWYWx1ZSB0b0pTKEV4ZWNTdGF0ZSogZXhlYywgSlNE
T01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgV2ViR0xHZXRJbmZvJiBpbmZvKQot
ewotICAgIHN3aXRjaCAoaW5mby5nZXRUeXBlKCkpIHsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6
a1R5cGVCb29sOgotICAgICAgICByZXR1cm4ganNCb29sZWFuKGluZm8uZ2V0Qm9vbCgpKTsKLSAg
ICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVCb29sQXJyYXk6IHsKLSAgICAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgbGlzdDsKLSAgICAgICAgY29uc3QgVmVjdG9yPGJvb2w+JiB2YWx1ZSA9IGlu
Zm8uZ2V0Qm9vbEFycmF5KCk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YWx1
ZS5zaXplKCk7ICsraWkpCi0gICAgICAgICAgICBsaXN0LmFwcGVuZChqc0Jvb2xlYW4odmFsdWVb
aWldKSk7Ci0gICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmpl
Y3QsIGxpc3QpOwotICAgIH0KLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVGbG9hdDoKLSAg
ICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZm8uZ2V0RmxvYXQoKSk7Ci0gICAgY2FzZSBXZWJHTEdl
dEluZm86OmtUeXBlSW50OgotICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRJbnQoKSk7
Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlTnVsbDoKLSAgICAgICAgcmV0dXJuIGpzTnVs
bCgpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVN0cmluZzoKLSAgICAgICAgcmV0dXJu
IGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIGluZm8uZ2V0U3RyaW5nKCkpOwotICAgIGNhc2UgV2Vi
R0xHZXRJbmZvOjprVHlwZVVuc2lnbmVkSW50OgotICAgICAgICByZXR1cm4ganNOdW1iZXIoaW5m
by5nZXRVbnNpZ25lZEludCgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEJ1
ZmZlcjoKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdl
YkdMQnVmZmVyKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRmxvYXRBcnJh
eToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdM
RmxvYXRBcnJheSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEZyYW1lYnVm
ZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2Vi
R0xGcmFtZWJ1ZmZlcigpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTEludEFy
cmF5OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2Vi
R0xJbnRBcnJheSgpKTsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IFdlYkdMT2JqZWN0QXJyYXkK
LSAgICAvLyBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTE9iamVjdEFycmF5OgotICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMUHJvZ3JhbToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUHJvZ3JhbSgpKTsKLSAgICBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTFJlbmRlcmJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUmVuZGVyYnVmZmVyKCkpOwotICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVGV4dHVyZToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVGV4dHVyZSgpKTsKLSAgICBjYXNlIFdl
YkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OgotICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xVbnNpZ25lZEJ5dGVBcnJheSgp
KTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkSW50QXJyYXk6Ci0g
ICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFVuc2ln
bmVkSW50QXJyYXkoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xWZXJ0ZXhB
cnJheU9iamVjdE9FUzoKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBp
bmZvLmdldFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKSk7Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAg
fQotfQotCi1lbnVtIE9iamVjdFR5cGUgewotICAgIGtCdWZmZXIsIGtSZW5kZXJidWZmZXIsIGtU
ZXh0dXJlLCBrVmVydGV4QXR0cmliCi19OwotCi1zdGF0aWMgSlNWYWx1ZSBnZXRPYmplY3RQYXJh
bWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG9iaiwgRXhlY1N0YXRlKiBleGVjLCBPYmpl
Y3RUeXBlIG9iamVjdFR5cGUpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAy
KQotICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBvYmotPmltcGwoKTsKLSAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4
ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0ludDMyKGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgV2ViR0xHZXRJbmZvIGluZm87Ci0gICAgc3dpdGNo
IChvYmplY3RUeXBlKSB7Ci0gICAgY2FzZSBrQnVmZmVyOgotICAgICAgICBpbmZvID0gY29udGV4
dC5nZXRCdWZmZXJQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgZWMpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIGtSZW5kZXJidWZmZXI6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0LmdldFJlbmRl
cmJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2Uga1RleHR1cmU6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0LmdldFRleFBhcmFtZXRlcih0
YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Uga1ZlcnRleEF0dHJp
YjoKLSAgICAgICAgLy8gdGFyZ2V0ID0+IGluZGV4Ci0gICAgICAgIGluZm8gPSBjb250ZXh0Lmdl
dFZlcnRleEF0dHJpYih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIG9i
ai0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1lbnVtIFdoaWNoUHJvZ3JhbUNhbGwgewot
ICAgIGtQcm9ncmFtUGFyYW1ldGVyLCBrVW5pZm9ybQotfTsKLQotc3RhdGljIEpTVmFsdWUgdG9K
UyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdlYkdM
RXh0ZW5zaW9uKiBleHRlbnNpb24pCi17Ci0gICAgaWYgKCFleHRlbnNpb24pCi0gICAgICAgIHJl
dHVybiBqc051bGwoKTsKLSAgICBzd2l0Y2ggKGV4dGVuc2lvbi0+Z2V0TmFtZSgpKSB7Ci0gICAg
Y2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xMb3NlQ29udGV4dE5hbWU6Ci0gICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xMb3NlQ29udGV4dCo+
KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVFNoYWRlclRleHR1cmVM
T0ROYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19j
YXN0PEVYVFNoYWRlclRleHR1cmVMT0QqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0
ZW5zaW9uOjpFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWNOYW1lOgotICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1N0YW5k
YXJkRGVyaXZhdGl2ZXNOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMqPihleHRlbnNpb24pKTsKLSAg
ICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXROYW1lOgotICAgICAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVGbG9hdCo+
KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVGbG9hdExp
bmVhck5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8T0VTVGV4dHVyZUZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdCo+KGV4
dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXJOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIqPihleHRlbnNpb24pKTsKLSAgICBjYXNl
IFdlYkdMRXh0ZW5zaW9uOjpPRVNWZXJ0ZXhBcnJheU9iamVjdE5hbWU6Ci0gICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVmVydGV4QXJyYXlPYmpl
Y3QqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNFbGVtZW50SW5k
ZXhVaW50TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05hbWU6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1Z1JlbmRlcmVySW5m
byo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVidWdTaGFk
ZXJzTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTERlYnVnU2hhZGVycyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRl
bnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVENOYW1lOgotICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVB
VEMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUFZSVENOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyo+KGV4dGVuc2lvbikp
OwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDTmFt
ZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246OldlYkdMRGVwdGhUZXh0dXJlTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlcHRoVGV4dHVyZSo+KGV4dGVuc2lv
bikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRHJhd0J1ZmZlcnNOYW1lOgotICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRHJh
d0J1ZmZlcnMqPihleHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpBTkdMRUlu
c3RhbmNlZEFycmF5c05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5jZWRBcnJheXMqPihleHRlbnNpb24pKTsKLSAgICB9
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGpzTnVsbCgpOwotfQotCi12
b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFkZGl0aW9uYWxDaGlsZHJlbihTbG90
VmlzaXRvciYgdmlzaXRvcikKK3ZvaWQgSlNXZWJHTDFSZW5kZXJpbmdDb250ZXh0Ojp2aXNpdEFk
ZGl0aW9uYWxDaGlsZHJlbihTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICB2aXNpdG9yLmFk
ZE9wYXF1ZVJvb3QoJmltcGwoKSk7CiB9CiAKLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEF0dGFjaGVkU2hhZGVycyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLSAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQg
PSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRv
V3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYm
ICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAg
ICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNo
YWRlcj4+IHNoYWRlcnM7Ci0gICAgYm9vbCBzdWNjZWVkID0gY29udGV4dC5nZXRBdHRhY2hlZFNo
YWRlcnMocHJvZ3JhbSwgc2hhZGVycywgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgfQot
ICAgIGlmICghc3VjY2VlZCkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIGxpc3Q7Ci0gICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHNoYWRlcnMu
c2l6ZSgpOyArK2lpKQotICAgICAgICBsaXN0LmFwcGVuZCh0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCgpLCBzaGFkZXJzW2lpXS5nZXQoKSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVj
LCAwLCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEV4dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICBjb25zdCBTdHJp
bmcgbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpLT52YWx1
ZShleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOwotICAgIFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24gPSBjb250ZXh0Lmdl
dEV4dGVuc2lvbihuYW1lKTsKLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwg
ZXh0ZW5zaW9uKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QnVm
ZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFy
YW1ldGVyKHRoaXMsIGV4ZWMsIGtCdWZmZXIpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBl
eGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMykKLSAgICAgICAgcmV0
dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIHVuc2lnbmVkIHRhcmdldCA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB1bnNp
Z25lZCBhdHRhY2htZW50ID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVj
KTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiku
dG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodGFyZ2V0LCBhdHRhY2htZW50LCBwbmFtZSwg
ZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5h
cmd1bWVudENvdW50KCkgIT0gMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0
ID0gaW1wbCgpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MCkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5n
ZXRQYXJhbWV0ZXIocG5hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhj
ZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQot
ICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1
ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbVBhcmFtZXRlcihFeGVjU3RhdGUq
IGV4ZWMpCi17Ci0gICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQotICAgICAgICBy
ZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihleGVjKSk7Ci0KLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBXZWJH
TFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgV2ViR0xQcm9ncmFtKiBw
cm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgwKSk7Ci0gICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5p
c1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7
Ci0gICAgdW5zaWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMy
KGV4ZWMpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Ci0gICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFByb2dyYW1Q
YXJhbWV0ZXIocHJvZ3JhbSwgcG5hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgfQotICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQot
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
KEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZ2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMs
IGV4ZWMsIGtSZW5kZXJidWZmZXIpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRTaGFkZXJQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250
ZXh0ID0gaW1wbCgpOwotICAgIGlmICghZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRl
ZmluZWRPck51bGwoKSAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaW5oZXJpdHMoSlNX
ZWJHTFNoYWRlcjo6aW5mbygpKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMp
OwotICAgIFdlYkdMU2hhZGVyKiBzaGFkZXIgPSBKU1dlYkdMU2hhZGVyOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBp
bmZvID0gY29udGV4dC5nZXRTaGFkZXJQYXJhbWV0ZXIoc2hhZGVyLCBwbmFtZSwgZWMpOwotICAg
IGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRTdXBwb3J0ZWRFeHRlbnNpb25zKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBXZWJHTFJlbmRl
cmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAgaWYgKGNvbnRleHQuaXNDb250ZXh0
TG9zdCgpKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgVmVjdG9yPFN0cmluZz4gdmFs
dWUgPSBjb250ZXh0LmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKLSAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBsaXN0OwotICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkgPCB2YWx1ZS5zaXplKCk7
ICsraWkpCi0gICAgICAgIGxpc3QuYXBwZW5kKGpzU3RyaW5nV2l0aENhY2hlKGV4ZWMsIHZhbHVl
W2lpXSkpOwotICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAwLCBnbG9iYWxPYmplY3Qo
KSwgbGlzdCk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFRleFBh
cmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRl
cih0aGlzLCBleGVjLCBrVGV4dHVyZSk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldFVuaWZvcm0oRXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1
bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRp
b24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0g
aW1wbCgpOwotICAgIFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dy
YXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcHJvZ3JhbSAmJiAh
ZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAg
cmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBs
b2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVjLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMSkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKGV4ZWMpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRVbmlmb3JtKHBy
b2dyYW0sIGxvY2F0aW9uLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLSAg
ICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLUpTVmFsdWUg
SlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFZlcnRleEF0dHJpYihFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrVmVydGV4QXR0
cmliKTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5Pgot
Ym9vbCB0b1ZlY3RvcihKU0M6OkV4ZWNTdGF0ZSogZXhlYywgSlNDOjpKU1ZhbHVlIHZhbHVlLCBW
ZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+JiB2ZWN0b3IpCi17Ci0gICAgaWYgKCF2YWx1ZS5pc09i
amVjdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBKU0M6OkpTT2JqZWN0KiBvYmpl
Y3QgPSBhc09iamVjdCh2YWx1ZSk7Ci0gICAgaW50MzJfdCBsZW5ndGggPSBvYmplY3QtPmdldChl
eGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmxlbmd0aCkudG9JbnQzMihleGVjKTsKLQot
ICAgIGlmICghdmVjdG9yLnRyeVJlc2VydmVDYXBhY2l0eShsZW5ndGgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgdmVjdG9yLnJlc2l6ZShsZW5ndGgpOwotCi0gICAgZm9yIChpbnQzMl90
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgSlNDOjpKU1ZhbHVlIHYgPSBvYmpl
Y3QtPmdldChleGVjLCBpKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB2ZWN0b3JbaV0gPSBzdGF0aWNfY2FzdDxU
Pih2LnRvTnVtYmVyKGV4ZWMpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZW51
bSBEYXRhRnVuY3Rpb25Ub0NhbGwgewotICAgIGZfdW5pZm9ybTF2LCBmX3VuaWZvcm0ydiwgZl91
bmlmb3JtM3YsIGZfdW5pZm9ybTR2LAotICAgIGZfdmVydGV4QXR0cmliMXYsIGZfdmVydGV4QXR0
cmliMnYsIGZfdmVydGV4QXR0cmliM3YsIGZfdmVydGV4QXR0cmliNHYKLX07Ci0KLWVudW0gRGF0
YUZ1bmN0aW9uTWF0cml4VG9DYWxsIHsKLSAgICBmX3VuaWZvcm1NYXRyaXgyZnYsIGZfdW5pZm9y
bU1hdHJpeDNmdiwgZl91bmlmb3JtTWF0cml4NGZ2Ci19OwotCi1zdGF0aWMgYm9vbCBmdW5jdGlv
bkZvclVuaWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxsIGYpCi17Ci0gICAgc3dpdGNoIChmKSB7Ci0g
ICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICBjYXNlIGZfdW5pZm9ybTJ2OgotICAgIGNhc2UgZl91
bmlmb3JtM3Y6Ci0gICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgZGVmYXVsdDogYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGlj
IEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4
ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCku
dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OwotICAgIAotICAgIFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IDA7Ci0gICAgbG9u
ZyBpbmRleCA9IC0xOwotICAgIAotICAgIGlmIChmdW5jdGlvbkZvclVuaWZvcm0oZikpIHsKLSAg
ICAgICAgbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+
dW5jaGVja2VkQXJndW1lbnQoMCkpOwotICAgICAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICAgICAgcmV0
dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgIH0gZWxzZQotICAgICAgICBpbmRleCA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0KLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAK
LSAgICBSZWZQdHI8RmxvYXQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9GbG9hdDMyQXJyYXkoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
ICAgCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgICAgICAKLSAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKLSAgICBpZiAod2ViR0xBcnJheSkgewotICAgICAgICBzd2l0Y2ggKGYp
IHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9y
bTFmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0y
ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtM2Z2
KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihs
b2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIxdjoKLSAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0
cmliMWZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIGZfdmVydGV4QXR0cmliMnY6Ci0gICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0
dHJpYjJmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OgotICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhB
dHRyaWIzZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djoKLSAgICAgICAgICAgIGNvbnRleHQudmVydGV4
QXR0cmliNGZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8ZmxvYXQs
IDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDEpLCBhcnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLQot
ICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgICAgIGNvbnRleHQu
dW5pZm9ybTFmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICAgICAgY29udGV4dC51bmlm
b3JtMmZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0z
ZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihs
b2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBmX3ZlcnRleEF0dHJpYjF2OgotICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJp
YjFmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIGZfdmVydGV4QXR0cmliMnY6Ci0gICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
MmZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjoKLSAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIz
ZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBmX3ZlcnRleEF0dHJpYjR2OgotICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjRm
dihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0gICAgCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKLX0KLQotc3RhdGljIEpTQzo6SlNWYWx1ZSBkYXRhRnVuY3Rpb25pKERhdGFG
dW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250
ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKLSAg
ICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1
bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJy
b3IoZXhlYyk7Ci0gIAotICAgIFJlZlB0cjxJbnQzMkFycmF5PiB3ZWJHTEFycmF5ID0gdG9JbnQz
MkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwotICAgIGlmICh3ZWJHTEFycmF5KSB7Ci0gICAgICAgIHN3aXRjaCAoZikgewotICAg
ICAgICBjYXNlIGZfdW5pZm9ybTF2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtMWl2KGxv
Y2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTJpdihsb2Nh
dGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgZl91bmlmb3JtM3Y6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0zaXYobG9jYXRp
b24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIGZfdW5pZm9ybTR2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtNGl2KGxvY2F0aW9u
LCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9Ci0KLQotICAgIFZlY3RvcjxpbnQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9y
KGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBhcnJheSkpCi0gICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihleGVjKTsKLQotICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91
bmlmb3JtMXY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXkuZGF0
YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZv
cm0ydjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtMml2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCks
IGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTN2
OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0g
ICAgICAgIGNvbnRleHQudW5pZm9ybTRpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5z
aXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotICAgIAotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uTWF0
cml4KERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0ZSogZXhlYywgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0KQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgIT0gMykKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhl
YywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgV2ViR0xVbmlm
b3JtTG9jYXRpb24qIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVk
KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIWxvY2F0aW9uICYmICFleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQotICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0KLSAgICBib29sIHRyYW5zcG9zZSA9IGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLnRvQm9vbGVhbihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpICAgIAotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgCi0g
ICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDIpKTsKLSAgICAgICAgCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7Ci0gICAgaWYgKHdlYkdMQXJyYXkpIHsKLSAgICAgICAgc3dpdGNoIChmKSB7Ci0gICAgICAg
IGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0
cml4MmZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDNmdjoKLSAgICAgICAg
ICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFy
cmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZv
cm1NYXRyaXg0ZnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRp
b24sIHRyYW5zcG9zZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7
Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIH0KLQotICAgIFZlY3RvcjxmbG9h
dCwgNjQ+IGFycmF5OwotICAgIGlmICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMiksIGFycmF5KSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwot
Ci0gICAgc3dpdGNoIChmKSB7Ci0gICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6Ci0gICAgICAg
IGNvbnRleHQudW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRh
KCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9y
bU1hdHJpeDNmdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCB0
cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgZl91bmlmb3JtTWF0cml4NGZ2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm1N
YXRyaXg0ZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCks
IGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMs
IGVjKTsKLSAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewot
ICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOwotfQot
Ci1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoSlNDOjpF
eGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtMXYs
IGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybTJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uZihmX3VuaWZvcm0ydiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQot
ewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOwot
fQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoSlND
OjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3Jt
M3YsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTNpdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uaShmX3VuaWZvcm0zdiwgZXhlYywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkp
OwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYo
SlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlm
b3JtNHYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBy
ZXR1cm4gZGF0YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDJmdiwgZXhlYywgaW1wbCgp
KTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0
cml4M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25N
YXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoSlNDOjpFeGVjU3Rh
dGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRy
aXg0ZnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJl
dHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMXYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0K
LUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4
QXR0cmliMnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAg
IHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliM3YsIGV4ZWMsIGltcGwoKSk7Ci19
Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2
KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVy
dGV4QXR0cmliNHYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IAogI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTV2ViR0wyUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTDJSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0wyUmVu
ZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKyNpbmNsdWRlICJKU1dlYkdMMlJlbmRlcmlu
Z0NvbnRleHQuaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIAordm9pZCBKU1dlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OnZpc2l0QWRkaXRpb25hbENo
aWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHZpc2l0b3IuYWRkT3BhcXVlUm9v
dCgmaW1wbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2VDdXN0b20uY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmgiCisKKyNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgorI2luY2x1ZGUg
IkVYVEJsZW5kTWluTWF4LmgiCisjaW5jbHVkZSAiRVhURnJhZ0RlcHRoLmgiCisjaW5jbHVkZSAi
RVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ry
b3BpYy5oIgorI2luY2x1ZGUgIkVYVHNSR0IuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgi
CisjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW1hZ2VFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSlNBTkdMRUluc3RhbmNlZEFycmF5cy5oIgorI2luY2x1ZGUgIkpT
RVhUQmxlbmRNaW5NYXguaCIKKyNpbmNsdWRlICJKU0VYVEZyYWdEZXB0aC5oIgorI2luY2x1ZGUg
IkpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgorI2luY2x1ZGUgIkpTRVhUVGV4dHVyZUZpbHRlckFu
aXNvdHJvcGljLmgiCisjaW5jbHVkZSAiSlNFWFRzUkdCLmgiCisjaW5jbHVkZSAiSlNIVE1MQ2Fu
dmFzRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUg
IkpTSW1hZ2VEYXRhLmgiCisjaW5jbHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCisjaW5j
bHVkZSAiSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCisjaW5jbHVkZSAiSlNPRVNUZXh0dXJl
RmxvYXQuaCIKKyNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdExpbmVhci5oIgorI2luY2x1ZGUg
IkpTT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgorI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9h
dExpbmVhci5oIgorI2luY2x1ZGUgIkpTT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRl
ICJKU1dlYkdMQnVmZmVyLmgiCisjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRD
LmgiCisjaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKKyNpbmNsdWRl
ICJKU1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCisjaW5jbHVkZSAiSlNXZWJHTERlYnVn
UmVuZGVyZXJJbmZvLmgiCisjaW5jbHVkZSAiSlNXZWJHTERlYnVnU2hhZGVycy5oIgorI2luY2x1
ZGUgIkpTV2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJKU1dlYkdMRHJhd0J1ZmZlcnMu
aCIKKyNpbmNsdWRlICJKU1dlYkdMRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMTG9z
ZUNvbnRleHQuaCIKKyNpbmNsdWRlICJKU1dlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIkpTV2Vi
R0xSZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJKU1dlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAi
SlNXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCisj
aW5jbHVkZSAiSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCisjaW5jbHVkZSAiSlNXZWJL
aXRDU1NNYXRyaXguaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIk9F
U0VsZW1lbnRJbmRleFVpbnQuaCIKKyNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgi
CisjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0
TGluZWFyLmgiCisjaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgorI2luY2x1ZGUgIk9F
U1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKKyNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVj
dC5oIgorI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZUFUQy5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgor
I2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCisjaW5jbHVkZSAiV2ViR0xE
ZWJ1Z1JlbmRlcmVySW5mby5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5j
bHVkZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgi
CisjaW5jbHVkZSAiV2ViR0xFeHRlbnNpb24uaCIKKyNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVy
LmgiCisjaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCisjaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4
dC5oIgorI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaCIKKyNpbmNsdWRlICJXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCisj
aW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvSlNUeXBlZEFycmF5
cy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVHlwZWRBcnJheUlubGluZXMuaD4KKyNpbmNsdWRlIDxy
dW50aW1lL1R5cGVkQXJyYXlzLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworI2lm
IEVOQUJMRShWSURFTykKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCisjaW5jbHVkZSAi
SlNIVE1MVmlkZW9FbGVtZW50LmgiCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorc3RhdGljIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUq
IGV4ZWMsIEpTRE9NR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGNvbnN0IFdlYkdMR2V0SW5m
byYgaW5mbykKK3sKKyAgICBzd2l0Y2ggKGluZm8uZ2V0VHlwZSgpKSB7CisgICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlQm9vbDoKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihpbmZvLmdldEJv
b2woKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlQm9vbEFycmF5OiB7CisgICAgICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIGxpc3Q7CisgICAgICAgIGNvbnN0IFZlY3Rvcjxib29sPiYg
dmFsdWUgPSBpbmZvLmdldEJvb2xBcnJheSgpOworICAgICAgICBmb3IgKHNpemVfdCBpaSA9IDA7
IGlpIDwgdmFsdWUuc2l6ZSgpOyArK2lpKQorICAgICAgICAgICAgbGlzdC5hcHBlbmQoanNCb29s
ZWFuKHZhbHVlW2lpXSkpOworICAgICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwg
Z2xvYmFsT2JqZWN0LCBsaXN0KTsKKyAgICB9CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBl
RmxvYXQ6CisgICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEZsb2F0KCkpOworICAgIGNh
c2UgV2ViR0xHZXRJbmZvOjprVHlwZUludDoKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGluZm8u
Z2V0SW50KCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZU51bGw6CisgICAgICAgIHJl
dHVybiBqc051bGwoKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVTdHJpbmc6CisgICAg
ICAgIHJldHVybiBqc1N0cmluZ1dpdGhDYWNoZShleGVjLCBpbmZvLmdldFN0cmluZygpKTsKKyAg
ICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVVbnNpZ25lZEludDoKKyAgICAgICAgcmV0dXJuIGpz
TnVtYmVyKGluZm8uZ2V0VW5zaWduZWRJbnQoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtU
eXBlV2ViR0xCdWZmZXI6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
aW5mby5nZXRXZWJHTEJ1ZmZlcigpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJH
TEZsb2F0QXJyYXk6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5m
by5nZXRXZWJHTEZsb2F0QXJyYXkoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2Vi
R0xGcmFtZWJ1ZmZlcjoKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBp
bmZvLmdldFdlYkdMRnJhbWVidWZmZXIoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBl
V2ViR0xJbnRBcnJheToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBp
bmZvLmdldFdlYkdMSW50QXJyYXkoKSk7CisgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgV2Vi
R0xPYmplY3RBcnJheQorICAgICAgICAvLyBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTE9i
amVjdEFycmF5OgorICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMUHJvZ3JhbToKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUHJvZ3Jh
bSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFJlbmRlcmJ1ZmZlcjoKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMUmVuZGVy
YnVmZmVyKCkpOworICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVGV4dHVyZToKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVGV4dHVy
ZSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVuc2lnbmVkQnl0ZUFycmF5
OgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xV
bnNpZ25lZEJ5dGVBcnJheSgpKTsKKyAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFVu
c2lnbmVkSW50QXJyYXk6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
aW5mby5nZXRXZWJHTFVuc2lnbmVkSW50QXJyYXkoKSk7CisgICAgY2FzZSBXZWJHTEdldEluZm86
OmtUeXBlV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzoKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMoKSk7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgfQorfQorCitlbnVtIE9iamVjdFR5cGUgeworICAgIGtCdWZmZXIs
IGtSZW5kZXJidWZmZXIsIGtUZXh0dXJlLCBrVmVydGV4QXR0cmliCit9OworCitzdGF0aWMgSlNW
YWx1ZSBnZXRPYmplY3RQYXJhbWV0ZXIoSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBvYmos
IEV4ZWNTdGF0ZSogZXhlYywgT2JqZWN0VHlwZSBvYmplY3RUeXBlKQoreworICAgIGlmIChleGVj
LT5hcmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dF
eGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAg
IAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UmIGNvbnRleHQgPSBvYmotPmltcGwoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgdW5zaWduZWQgcG5h
bWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
V2ViR0xHZXRJbmZvIGluZm87CisgICAgc3dpdGNoIChvYmplY3RUeXBlKSB7CisgICAgY2FzZSBr
QnVmZmVyOgorICAgICAgICBpbmZvID0gY29udGV4dC5nZXRCdWZmZXJQYXJhbWV0ZXIodGFyZ2V0
LCBwbmFtZSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtSZW5kZXJidWZmZXI6Cisg
ICAgICAgIGluZm8gPSBjb250ZXh0LmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBu
YW1lLCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Uga1RleHR1cmU6CisgICAgICAgIGlu
Zm8gPSBjb250ZXh0LmdldFRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2Uga1ZlcnRleEF0dHJpYjoKKyAgICAgICAgLy8gdGFyZ2V0ID0+IGlu
ZGV4CisgICAgICAgIGluZm8gPSBjb250ZXh0LmdldFZlcnRleEF0dHJpYih0YXJnZXQsIHBuYW1l
LCBlYyk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0
RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMsIG9iai0+Z2xvYmFsT2JqZWN0KCksIGluZm8pOwor
fQorCitlbnVtIFdoaWNoUHJvZ3JhbUNhbGwgeworICAgIGtQcm9ncmFtUGFyYW1ldGVyLCBrVW5p
Zm9ybQorfTsKKworc3RhdGljIEpTVmFsdWUgdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIEpTRE9NR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFdlYkdMRXh0ZW5zaW9uKiBleHRlbnNpb24pCit7Cisg
ICAgaWYgKCFleHRlbnNpb24pCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAgICBzd2l0Y2gg
KGV4dGVuc2lvbi0+Z2V0TmFtZSgpKSB7CisgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xM
b3NlQ29udGV4dE5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwg
c3RhdGljX2Nhc3Q8V2ViR0xMb3NlQ29udGV4dCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246OkVYVFNoYWRlclRleHR1cmVMT0ROYW1lOgorICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVFNoYWRlclRleHR1cmVMT0QqPihl
eHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0
YXRpY19jYXN0PEVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyo+KGV4dGVuc2lvbikpOworICAg
IGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVHNSR0JOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVHNSR0IqPihleHRlbnNpb24pKTsKKyAg
ICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRGcmFnRGVwdGhOYW1lOgorICAgICAgICByZXR1cm4g
dG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEVYVEZyYWdEZXB0aCo+KGV4dGVu
c2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEJsZW5kTWluTWF4TmFtZToKKyAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRCbGVu
ZE1pbk1heCo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1N0YW5k
YXJkRGVyaXZhdGl2ZXNOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMqPihleHRlbnNpb24pKTsKKyAg
ICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlRmxvYXROYW1lOgorICAgICAgICByZXR1
cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU1RleHR1cmVGbG9hdCo+
KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVGbG9hdExp
bmVhck5hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8T0VTVGV4dHVyZUZsb2F0TGluZWFyKj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdE5hbWU6CisgICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdCo+KGV4
dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1cmVIYWxmRmxvYXRM
aW5lYXJOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRp
Y19jYXN0PE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIqPihleHRlbnNpb24pKTsKKyAgICBjYXNl
IFdlYkdMRXh0ZW5zaW9uOjpPRVNWZXJ0ZXhBcnJheU9iamVjdE5hbWU6CisgICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVmVydGV4QXJyYXlPYmpl
Y3QqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNFbGVtZW50SW5k
ZXhVaW50TmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNFbGVtZW50SW5kZXhVaW50Kj4oZXh0ZW5zaW9uKSk7CisgICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1JlbmRlcmVySW5mb05hbWU6CisgICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEZWJ1Z1JlbmRlcmVySW5m
byo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRGVidWdTaGFk
ZXJzTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTERlYnVnU2hhZGVycyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRl
bnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVENOYW1lOgorICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVB
VEMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUFZSVENOYW1lOgorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmpl
Y3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQyo+KGV4dGVuc2lvbikp
OworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDTmFt
ZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxX
ZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQyo+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xF
eHRlbnNpb246OldlYkdMRGVwdGhUZXh0dXJlTmFtZToKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhl
YywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTERlcHRoVGV4dHVyZSo+KGV4dGVuc2lv
bikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMRHJhd0J1ZmZlcnNOYW1lOgorICAg
ICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRHJh
d0J1ZmZlcnMqPihleHRlbnNpb24pKTsKKyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpBTkdMRUlu
c3RhbmNlZEFycmF5c05hbWU6CisgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVj
dCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5jZWRBcnJheXMqPihleHRlbnNpb24pKTsKKyAgICB9
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGpzTnVsbCgpOworfQorCit2
b2lkIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6dmlzaXRBZGRpdGlvbmFsQ2hpbGRyZW4o
U2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KCZpbXBs
KCkpOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0QXR0YWNo
ZWRTaGFkZXJzKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3Vu
dCgpIDwgMSkKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywg
Y3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7
CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0gSlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChl
eGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51
bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4g
dGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgVmVjdG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+IHNo
YWRlcnM7CisgICAgYm9vbCBzdWNjZWVkID0gY29udGV4dC5nZXRBdHRhY2hlZFNoYWRlcnMocHJv
Z3JhbSwgc2hhZGVycywgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRp
b24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgfQorICAgIGlmICgh
c3VjY2VlZCkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworICAgIEpTQzo6TWFya2VkQXJndW1l
bnRCdWZmZXIgbGlzdDsKKyAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgc2hhZGVycy5zaXpl
KCk7ICsraWkpCisgICAgICAgIGxpc3QuYXBwZW5kKHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCks
IHNoYWRlcnNbaWldLmdldCgpKSk7CisgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAs
IGdsb2JhbE9iamVjdCgpLCBsaXN0KTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldEV4dGVuc2lvbihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSA8IDEpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAK
KyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOworICAgIGNv
bnN0IFN0cmluZyBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9TdHJpbmcoZXhl
YyktPnZhbHVlKGV4ZWMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgV2ViR0xFeHRlbnNpb24qIGV4dGVuc2lvbiA9IGNv
bnRleHQuZ2V0RXh0ZW5zaW9uKG5hbWUpOworICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCgpLCBleHRlbnNpb24pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6Z2V0QnVmZmVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4g
Z2V0T2JqZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtCdWZmZXIpOworfQorCitKU1ZhbHVlIEpT
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1l
dGVyKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9
IDMpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgp
OworICAgIHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50
MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKyAgICB1bnNpZ25lZCBhdHRhY2htZW50ID0gZXhlYy0+dW5jaGVja2Vk
QXJndW1lbnQoMSkudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIHVuc2lnbmVkIHBuYW1lID0gZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMikudG9JbnQzMihleGVjKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIFdlYkdMR2V0
SW5mbyBpbmZvID0gY29udGV4dC5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXIodGFy
Z2V0LCBhdHRhY2htZW50LCBwbmFtZSwgZWMpOworICAgIGlmIChlYykgeworICAgICAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOworfQorCitK
U1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0
ZSogZXhlYykKK3sKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDEpCisgICAgICAg
IHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKGV4ZWMpKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0ID0gaW1wbCgpOworICAgIHVuc2ln
bmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkudG9JbnQzMihleGVjKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5nZXRQYXJhbWV0ZXIocG5hbWUsIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFByb2dyYW1QYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIGlm
IChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCku
dGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykp
OworICAgIAorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgV2ViR0xQcm9ncmFtKiBwcm9ncmFtID0g
SlNXZWJHTFByb2dyYW06OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Cisg
ICAgaWYgKCFwcm9ncmFtICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS5pc1VuZGVmaW5l
ZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgdW5z
aWduZWQgcG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0ludDMyKGV4ZWMpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgV2ViR0xHZXRJbmZvIGluZm8gPSBjb250ZXh0LmdldFByb2dyYW1QYXJhbWV0ZXIo
cHJvZ3JhbSwgcG5hbWUsIGVjKTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0
aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAg
IHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBK
U1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGdldE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVj
LCBrUmVuZGVyYnVmZmVyKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OmdldFNoYWRlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgaWYgKGV4ZWMt
PmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4gZXhlYy0+dm0oKS50aHJvd0V4
Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVjKSk7CisgICAg
CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSYgY29udGV4dCA9IGltcGwoKTsKKyAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmluaGVy
aXRzKEpTV2ViR0xTaGFkZXI6OmluZm8oKSkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihleGVjKTsKKyAgICBXZWJHTFNoYWRlciogc2hhZGVyID0gSlNXZWJHTFNoYWRlcjo6dG9XcmFw
cGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICB1bnNpZ25lZCBwbmFtZSA9IGV4
ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBXZWJHTEdl
dEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgcG5hbWUsIGVj
KTsKKyAgICBpZiAoZWMpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIHJldHVybiB0b0pTKGV4ZWMs
IGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKK30KKworSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29u
dGV4dEJhc2U6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoRXhlY1N0YXRlKiBleGVjKQoreworICAg
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRleHQgPSBpbXBsKCk7CisgICAgaWYgKGNv
bnRleHQuaXNDb250ZXh0TG9zdCgpKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgVmVj
dG9yPFN0cmluZz4gdmFsdWUgPSBjb250ZXh0LmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKTsKKyAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OworICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkg
PCB2YWx1ZS5zaXplKCk7ICsraWkpCisgICAgICAgIGxpc3QuYXBwZW5kKGpzU3RyaW5nV2l0aENh
Y2hlKGV4ZWMsIHZhbHVlW2lpXSkpOworICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShleGVjLCAw
LCBnbG9iYWxPYmplY3QoKSwgbGlzdCk7Cit9CisKK0pTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjpnZXRUZXhQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1RleHR1cmUpOworfQorCitKU1ZhbHVl
IEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6Z2V0VW5pZm9ybShFeGVjU3RhdGUqIGV4ZWMp
Cit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAyKQorICAgICAgICByZXR1cm4g
ZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihleGVjKSk7CisgICAgCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCA9IGltcGwoKTsKKyAgICBXZWJHTFByb2dyYW0q
IHByb2dyYW0gPSBKU1dlYkdMUHJvZ3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoIXByb2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
LmlzVW5kZWZpbmVkT3JOdWxsKCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVj
KTsKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxv
Y2F0aW9uOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOworICAgIGlmICgh
bG9jYXRpb24gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxs
KCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICBXZWJHTEdldElu
Zm8gaW5mbyA9IGNvbnRleHQuZ2V0VW5pZm9ybShwcm9ncmFtLCBsb2NhdGlvbiwgZWMpOworICAg
IGlmIChlYykgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGluZm8pOworfQorCitKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZTo6Z2V0VmVydGV4QXR0cmliKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZ2V0T2Jq
ZWN0UGFyYW1ldGVyKHRoaXMsIGV4ZWMsIGtWZXJ0ZXhBdHRyaWIpOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+Citib29sIHRvVmVjdG9yKEpTQzo6RXhl
Y1N0YXRlKiBleGVjLCBKU0M6OkpTVmFsdWUgdmFsdWUsIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0
eT4mIHZlY3RvcikKK3sKKyAgICBpZiAoIXZhbHVlLmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAKKyAgICBKU0M6OkpTT2JqZWN0KiBvYmplY3QgPSBhc09iamVjdCh2YWx1
ZSk7CisgICAgaW50MzJfdCBsZW5ndGggPSBvYmplY3QtPmdldChleGVjLCBleGVjLT52bSgpLnBy
b3BlcnR5TmFtZXMtPmxlbmd0aCkudG9JbnQzMihleGVjKTsKKyAgICAKKyAgICBpZiAoIXZlY3Rv
ci50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHZlY3Rvci5yZXNpemUobGVuZ3RoKTsKKyAgICAKKyAgICBmb3IgKGludDMyX3QgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgeworICAgICAgICBKU0M6OkpTVmFsdWUgdiA9IG9iamVjdC0+Z2V0KGV4
ZWMsIGkpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHZlY3RvcltpXSA9IHN0YXRpY19jYXN0PFQ+KHYudG9OdW1i
ZXIoZXhlYykpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZW51bSBEYXRh
RnVuY3Rpb25Ub0NhbGwgeworICAgIGZfdW5pZm9ybTF2LCBmX3VuaWZvcm0ydiwgZl91bmlmb3Jt
M3YsIGZfdW5pZm9ybTR2LAorICAgIGZfdmVydGV4QXR0cmliMXYsIGZfdmVydGV4QXR0cmliMnYs
IGZfdmVydGV4QXR0cmliM3YsIGZfdmVydGV4QXR0cmliNHYKK307CisKK2VudW0gRGF0YUZ1bmN0
aW9uTWF0cml4VG9DYWxsIHsKKyAgICBmX3VuaWZvcm1NYXRyaXgyZnYsIGZfdW5pZm9ybU1hdHJp
eDNmdiwgZl91bmlmb3JtTWF0cml4NGZ2Cit9OworCitzdGF0aWMgYm9vbCBmdW5jdGlvbkZvclVu
aWZvcm0oRGF0YUZ1bmN0aW9uVG9DYWxsIGYpCit7CisgICAgc3dpdGNoIChmKSB7CisgICAgY2Fz
ZSBmX3VuaWZvcm0xdjoKKyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgIGNhc2UgZl91bmlmb3Jt
M3Y6CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDogYnJlYWs7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIEpTQzo6
SlNWYWx1ZSBkYXRhRnVuY3Rpb25mKERhdGFGdW5jdGlvblRvQ2FsbCBmLCBKU0M6OkV4ZWNTdGF0
ZSogZXhlYywgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYgY29udGV4dCkKK3sKKyAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCisgICAgICAgIHJldHVybiBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
KyAgICAKKyAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSAwOworICAgIGxvbmcg
aW5kZXggPSAtMTsKKyAgICAKKyAgICBpZiAoZnVuY3Rpb25Gb3JVbmlmb3JtKGYpKSB7CisgICAg
ICAgIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDApKTsKKyAgICAgICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgICAgIHJldHVy
biB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICB9IGVsc2UKKyAgICAgICAgaW5kZXggPSBleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOworICAgIAorICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgCisg
ICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMt
PnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpICAg
IAorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBzd2l0Y2ggKGYpIHsKKyAg
ICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTFmdihs
b2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm0yZnYobG9j
YXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIGZfdW5pZm9ybTN2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtM2Z2KGxvY2F0
aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTRmdihsb2NhdGlv
biwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgZl92ZXJ0ZXhBdHRyaWIxdjoKKyAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmliMWZ2
KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIGZfdmVydGV4QXR0cmliMnY6CisgICAgICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJpYjJm
dihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBmX3ZlcnRleEF0dHJpYjN2OgorICAgICAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRyaWIz
ZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djoKKyAgICAgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
NGZ2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPGZsb2F0LCA2
ND4gYXJyYXk7CisgICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVu
dCgxKSwgYXJyYXkpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAg
CisgICAgc3dpdGNoIChmKSB7CisgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgY29udGV4
dC51bmlmb3JtMWZ2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5pZm9ybTJ2OgorICAgICAgICBjb250ZXh0LnVu
aWZvcm0yZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtM3Y6CisgICAgICAgIGNvbnRleHQudW5pZm9y
bTNmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgY29udGV4dC51bmlmb3JtNGZ2
KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0
cmliMWZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIydjoKKyAgICAgICAgY29udGV4dC52ZXJ0ZXhBdHRy
aWIyZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjN2OgorICAgICAgICBjb250ZXh0LnZlcnRleEF0dHJp
YjNmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6CisgICAgICAgIGNvbnRleHQudmVydGV4QXR0cmli
NGZ2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworfQorCitzdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbmkoRGF0
YUZ1bmN0aW9uVG9DYWxsIGYsIEpTQzo6RXhlY1N0YXRlKiBleGVjLCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiBjb250ZXh0KQoreworICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0g
MikKKyAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOworICAgIAorICAgIFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CisgICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworICAgIAorICAgIFJlZlB0cjxJbnQzMkFycmF5PiB3ZWJHTEFy
cmF5ID0gdG9JbnQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKKyAgICAKKyAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkgeworICAgICAgICBz
d2l0Y2ggKGYpIHsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKKyAgICAgICAgICAgIGNvbnRl
eHQudW5pZm9ybTFpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgICAgICAgICBjb250ZXh0
LnVuaWZvcm0yaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybTN2OgorICAgICAgICAgICAgY29udGV4dC51
bmlmb3JtM2l2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm00djoKKyAgICAgICAgICAgIGNvbnRleHQudW5p
Zm9ybTRpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIAorICAgIAorICAgIFZlY3RvcjxpbnQsIDY0PiBh
cnJheTsKKyAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LCBhcnJheSkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAKKyAg
ICBzd2l0Y2ggKGYpIHsKKyAgICBjYXNlIGZfdW5pZm9ybTF2OgorICAgICAgICBjb250ZXh0LnVu
aWZvcm0xaXYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgZl91bmlmb3JtMnY6CisgICAgICAgIGNvbnRleHQudW5pZm9y
bTJpdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm0zdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtM2l2
KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIGZfdW5pZm9ybTR2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYobG9j
YXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBzZXRET01FeGNl
cHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitzdGF0aWMg
SlNDOjpKU1ZhbHVlIGRhdGFGdW5jdGlvbk1hdHJpeChEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwg
ZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmIGNvbnRl
eHQpCit7CisgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSAhPSAzKQorICAgICAgICByZXR1
cm4gZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihleGVjKSk7CisgICAgCisgICAgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
ID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3Vt
ZW50KDApKTsKKyAgICBpZiAoIWxvY2F0aW9uICYmICFleGVjLT51bmNoZWNrZWRBcmd1bWVudCgw
KS5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhl
Yyk7CisgICAgCisgICAgYm9vbCB0cmFuc3Bvc2UgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgx
KS50b0Jvb2xlYW4oZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgCisgICAgUmVmUHRyPEZsb2F0MzJBcnJh
eT4gd2ViR0xBcnJheSA9IHRvRmxvYXQzMkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDIp
KTsKKyAgICAKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBpZiAod2ViR0xBcnJheSkg
eworICAgICAgICBzd2l0Y2ggKGYpIHsKKyAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgyZnY6
CisgICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9z
ZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgZl91bmlmb3JtTWF0cml4M2Z2OgorICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4
M2Z2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoKKyAgICAgICAgICAg
IGNvbnRleHQudW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5
LmdldCgpLCBlYyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZp
bmVkKCk7CisgICAgfQorICAgIAorICAgIFZlY3RvcjxmbG9hdCwgNjQ+IGFycmF5OworICAgIGlm
ICghdG9WZWN0b3IoZXhlYywgZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMiksIGFycmF5KSkKKyAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgIAorICAgIHN3aXRjaCAoZikg
eworICAgIGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2OgorICAgICAgICBjb250ZXh0LnVuaWZvcm1N
YXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCks
IGVjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6CisgICAg
ICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5k
YXRhKCksIGFycmF5LnNpemUoKSwgZWMpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGZfdW5p
Zm9ybU1hdHJpeDRmdjoKKyAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9u
LCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAKKyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlOjp1bmlmb3JtMWZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVy
biBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpT
VmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMWl2KEpTQzo6RXhlY1N0
YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTF2LCBleGVj
LCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVu
Y3Rpb25mKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtMml2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTJ2LCBleGVjLCBpbXBsKCkp
OworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3Jt
M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZf
dW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtM2l2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAg
IHJldHVybiBkYXRhRnVuY3Rpb25pKGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOworfQorCitK
U0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtNGZ2KEpTQzo6
RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdW5pZm9ybTR2
LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjp1bmlmb3JtNGl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBk
YXRhRnVuY3Rpb25pKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4MmZ2KEpTQzo6RXhl
Y1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3Jt
TWF0cml4MmZ2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlOjp1bmlmb3JtTWF0cml4M2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQor
eworICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4M2Z2LCBleGVj
LCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
Ojp1bmlmb3JtTWF0cml4NGZ2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQoreworICAgIHJldHVybiBk
YXRhRnVuY3Rpb25NYXRyaXgoZl91bmlmb3JtTWF0cml4NGZ2LCBleGVjLCBpbXBsKCkpOworfQor
CitKU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWIx
ZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92
ZXJ0ZXhBdHRyaWIxdiwgZXhlYywgaW1wbCgpKTsKK30KKworSlNDOjpKU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZTo6dmVydGV4QXR0cmliMmZ2KEpTQzo6RXhlY1N0YXRlKiBleGVj
KQoreworICAgIHJldHVybiBkYXRhRnVuY3Rpb25mKGZfdmVydGV4QXR0cmliMnYsIGV4ZWMsIGlt
cGwoKSk7Cit9CisKK0pTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OnZl
cnRleEF0dHJpYjNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gZGF0YUZ1
bmN0aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBleGVjLCBpbXBsKCkpOworfQorCitKU0M6OkpTVmFs
dWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjp2ZXJ0ZXhBdHRyaWI0ZnYoSlNDOjpFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIGRhdGFGdW5jdGlvbmYoZl92ZXJ0ZXhBdHRyaWI0
diwgZXhlYywgaW1wbCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHRDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTV2ViR0xSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAkocmV2aXNpb24g
MTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTFJlbmRlcmluZ0Nv
bnRleHRDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDc2NCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShXRUJHTCkKLQotI2luY2x1ZGUgIkpTV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgiCi0KLSNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkVY
VEJsZW5kTWluTWF4LmgiCi0jaW5jbHVkZSAiRVhURnJhZ0RlcHRoLmgiCi0jaW5jbHVkZSAiRVhU
U2hhZGVyVGV4dHVyZUxPRC5oIgotI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yy5oIgotI2luY2x1ZGUgIkVYVHNSR0IuaCIKLSNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCi0j
aW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSlNBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkpTRVhU
QmxlbmRNaW5NYXguaCIKLSNpbmNsdWRlICJKU0VYVEZyYWdEZXB0aC5oIgotI2luY2x1ZGUgIkpT
RVhUU2hhZGVyVGV4dHVyZUxPRC5oIgotI2luY2x1ZGUgIkpTRVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljLmgiCi0jaW5jbHVkZSAiSlNFWFRzUkdCLmgiCi0jaW5jbHVkZSAiSlNIVE1MQ2FudmFz
RWxlbWVudC5oIgotI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkpT
SW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiSlNPRVNFbGVtZW50SW5kZXhVaW50LmgiCi0jaW5jbHVk
ZSAiSlNPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0jaW5jbHVkZSAiSlNPRVNUZXh0dXJlRmxv
YXQuaCIKLSNpbmNsdWRlICJKU09FU1RleHR1cmVGbG9hdExpbmVhci5oIgotI2luY2x1ZGUgIkpT
T0VTVGV4dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIkpTT0VTVGV4dHVyZUhhbGZGbG9hdExp
bmVhci5oIgotI2luY2x1ZGUgIkpTT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNsdWRlICJK
U1dlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDLmgi
Ci0jaW5jbHVkZSAiSlNXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJK
U1dlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERlYnVnUmVu
ZGVyZXJJbmZvLmgiCi0jaW5jbHVkZSAiSlNXZWJHTERlYnVnU2hhZGVycy5oIgotI2luY2x1ZGUg
IkpTV2ViR0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJKU1dlYkdMRHJhd0J1ZmZlcnMuaCIK
LSNpbmNsdWRlICJKU1dlYkdMRnJhbWVidWZmZXIuaCIKLSNpbmNsdWRlICJKU1dlYkdMTG9zZUNv
bnRleHQuaCIKLSNpbmNsdWRlICJKU1dlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIkpTV2ViR0xS
ZW5kZXJidWZmZXIuaCIKLSNpbmNsdWRlICJKU1dlYkdMU2hhZGVyLmgiCi0jaW5jbHVkZSAiSlNX
ZWJHTFRleHR1cmUuaCIKLSNpbmNsdWRlICJKU1dlYkdMVW5pZm9ybUxvY2F0aW9uLmgiCi0jaW5j
bHVkZSAiSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmgiCi0jaW5jbHVkZSAiSlNXZWJLaXRD
U1NNYXRyaXguaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIk9FU0Vs
ZW1lbnRJbmRleFVpbnQuaCIKLSNpbmNsdWRlICJPRVNTdGFuZGFyZERlcml2YXRpdmVzLmgiCi0j
aW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0LmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUZsb2F0TGlu
ZWFyLmgiCi0jaW5jbHVkZSAiT0VTVGV4dHVyZUhhbGZGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXIuaCIKLSNpbmNsdWRlICJPRVNWZXJ0ZXhBcnJheU9iamVjdC5o
IgotI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCi0jaW5jbHVkZSAiV2ViR0xDb21wcmVzc2VkVGV4
dHVyZUFUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQy5oIgotI2lu
Y2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDLmgiCi0jaW5jbHVkZSAiV2ViR0xEZWJ1
Z1JlbmRlcmVySW5mby5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCi0jaW5jbHVk
ZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCi0j
aW5jbHVkZSAiV2ViR0xFeHRlbnNpb24uaCIKLSNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVyLmgi
Ci0jaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCi0jaW5jbHVkZSAiV2ViR0xMb3NlQ29udGV4dC5o
IgotI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgotI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oIgotI2luY2x1ZGUgIldlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCIKLSNpbmNsdWRl
IDxydW50aW1lL0Vycm9yLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9KU1R5cGVkQXJyYXlzLmg+Ci0j
aW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgotI2luY2x1ZGUgPHJ1bnRpbWUv
VHlwZWRBcnJheXMuaD4KLSNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgotCi0jaWYgRU5BQkxF
KFZJREVPKQotI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKLSNpbmNsdWRlICJKU0hUTUxW
aWRlb0VsZW1lbnQuaCIKLSNlbmRpZgotCi11c2luZyBuYW1lc3BhY2UgSlNDOwotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBKU1ZhbHVlIHRvSlMoRXhlY1N0YXRlKiBleGVjLCBKU0RP
TUdsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBXZWJHTEdldEluZm8mIGluZm8pCi17
Ci0gICAgc3dpdGNoIChpbmZvLmdldFR5cGUoKSkgewotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjpr
VHlwZUJvb2w6Ci0gICAgICAgIHJldHVybiBqc0Jvb2xlYW4oaW5mby5nZXRCb29sKCkpOwotICAg
IGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUJvb2xBcnJheTogewotICAgICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBsaXN0OwotICAgICAgICBjb25zdCBWZWN0b3I8Ym9vbD4mIHZhbHVlID0gaW5m
by5nZXRCb29sQXJyYXkoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaWkgPSAwOyBpaSA8IHZhbHVl
LnNpemUoKTsgKytpaSkKLSAgICAgICAgICAgIGxpc3QuYXBwZW5kKGpzQm9vbGVhbih2YWx1ZVtp
aV0pKTsKLSAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEFycmF5KGV4ZWMsIDAsIGdsb2JhbE9iamVj
dCwgbGlzdCk7Ci0gICAgfQotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZUZsb2F0OgotICAg
ICAgICByZXR1cm4ganNOdW1iZXIoaW5mby5nZXRGbG9hdCgpKTsKLSAgICBjYXNlIFdlYkdMR2V0
SW5mbzo6a1R5cGVJbnQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihpbmZvLmdldEludCgpKTsK
LSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVOdWxsOgotICAgICAgICByZXR1cm4ganNOdWxs
KCk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlU3RyaW5nOgotICAgICAgICByZXR1cm4g
anNTdHJpbmdXaXRoQ2FjaGUoZXhlYywgaW5mby5nZXRTdHJpbmcoKSk7Ci0gICAgY2FzZSBXZWJH
TEdldEluZm86OmtUeXBlVW5zaWduZWRJbnQ6Ci0gICAgICAgIHJldHVybiBqc051bWJlcihpbmZv
LmdldFVuc2lnbmVkSW50KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMQnVm
ZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2Vi
R0xCdWZmZXIoKSk7Ci0gICAgY2FzZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xGbG9hdEFycmF5
OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xG
bG9hdEFycmF5KCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMRnJhbWVidWZm
ZXI6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJH
TEZyYW1lYnVmZmVyKCkpOwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMSW50QXJy
YXk6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJH
TEludEFycmF5KCkpOwotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgV2ViR0xPYmplY3RBcnJheQot
ICAgIC8vIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMT2JqZWN0QXJyYXk6Ci0gICAgY2Fz
ZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xQcm9ncmFtOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xQcm9ncmFtKCkpOwotICAgIGNhc2UgV2Vi
R0xHZXRJbmZvOjprVHlwZVdlYkdMUmVuZGVyYnVmZmVyOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xSZW5kZXJidWZmZXIoKSk7Ci0gICAgY2Fz
ZSBXZWJHTEdldEluZm86OmtUeXBlV2ViR0xUZXh0dXJlOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIGluZm8uZ2V0V2ViR0xUZXh0dXJlKCkpOwotICAgIGNhc2UgV2Vi
R0xHZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRCeXRlQXJyYXk6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgaW5mby5nZXRXZWJHTFVuc2lnbmVkQnl0ZUFycmF5KCkp
OwotICAgIGNhc2UgV2ViR0xHZXRJbmZvOjprVHlwZVdlYkdMVW5zaWduZWRJbnRBcnJheToKLSAg
ICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBpbmZvLmdldFdlYkdMVW5zaWdu
ZWRJbnRBcnJheSgpKTsKLSAgICBjYXNlIFdlYkdMR2V0SW5mbzo6a1R5cGVXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIGlu
Zm8uZ2V0V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUygpKTsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9
Ci19Ci0KLWVudW0gT2JqZWN0VHlwZSB7Ci0gICAga0J1ZmZlciwga1JlbmRlcmJ1ZmZlciwga1Rl
eHR1cmUsIGtWZXJ0ZXhBdHRyaWIKLX07Ci0KLXN0YXRpYyBKU1ZhbHVlIGdldE9iamVjdFBhcmFt
ZXRlcihKU1dlYkdMUmVuZGVyaW5nQ29udGV4dCogb2JqLCBFeGVjU3RhdGUqIGV4ZWMsIE9iamVj
dFR5cGUgb2JqZWN0VHlwZSkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIp
Ci0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IG9iai0+aW1wbCgpOwotICAg
IHVuc2lnbmVkIHRhcmdldCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLnRvSW50MzIoZXhl
Yyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEp
LnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbzsKLSAgICBzd2l0Y2gg
KG9iamVjdFR5cGUpIHsKLSAgICBjYXNlIGtCdWZmZXI6Ci0gICAgICAgIGluZm8gPSBjb250ZXh0
LmdldEJ1ZmZlclBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBlYyk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2Uga1JlbmRlcmJ1ZmZlcjoKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0UmVuZGVy
YnVmZmVyUGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBrVGV4dHVyZToKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0VGV4UGFyYW1ldGVyKHRh
cmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrVmVydGV4QXR0cmli
OgotICAgICAgICAvLyB0YXJnZXQgPT4gaW5kZXgKLSAgICAgICAgaW5mbyA9IGNvbnRleHQuZ2V0
VmVydGV4QXR0cmliKHRhcmdldCwgcG5hbWUsIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIGlmIChlYykgewotICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgb2Jq
LT5nbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19Ci0KLWVudW0gV2hpY2hQcm9ncmFtQ2FsbCB7Ci0g
ICAga1Byb2dyYW1QYXJhbWV0ZXIsIGtVbmlmb3JtCi19OwotCi1zdGF0aWMgSlNWYWx1ZSB0b0pT
KEV4ZWNTdGF0ZSogZXhlYywgSlNET01HbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgV2ViR0xF
eHRlbnNpb24qIGV4dGVuc2lvbikKLXsKLSAgICBpZiAoIWV4dGVuc2lvbikKLSAgICAgICAgcmV0
dXJuIGpzTnVsbCgpOwotICAgIHN3aXRjaCAoZXh0ZW5zaW9uLT5nZXROYW1lKCkpIHsKLSAgICBj
YXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTExvc2VDb250ZXh0TmFtZToKLSAgICAgICAgcmV0dXJu
IHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTExvc2VDb250ZXh0Kj4o
ZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUU2hhZGVyVGV4dHVyZUxP
RE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8RVhUU2hhZGVyVGV4dHVyZUxPRCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRl
bnNpb246OkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpY05hbWU6Ci0gICAgICAgIHJldHVybiB0
b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUc1JHQk5h
bWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8
RVhUc1JHQio+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEZyYWdE
ZXB0aE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGlj
X2Nhc3Q8RVhURnJhZ0RlcHRoKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lv
bjo6RVhUQmxlbmRNaW5NYXhOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxP
YmplY3QsIHN0YXRpY19jYXN0PEVYVEJsZW5kTWluTWF4Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2Fz
ZSBXZWJHTEV4dGVuc2lvbjo6T0VTU3RhbmRhcmREZXJpdmF0aXZlc05hbWU6Ci0gICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTU3RhbmRhcmREZXJp
dmF0aXZlcyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1RleHR1
cmVGbG9hdE5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3Rh
dGljX2Nhc3Q8T0VTVGV4dHVyZUZsb2F0Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4
dGVuc2lvbjo6T0VTVGV4dHVyZUZsb2F0TGluZWFyTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMo
ZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxPRVNUZXh0dXJlRmxvYXRMaW5lYXIqPihl
eHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpPRVNUZXh0dXJlSGFsZkZsb2F0
TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2Fz
dDxPRVNUZXh0dXJlSGFsZkZsb2F0Kj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVu
c2lvbjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhck5hbWU6Ci0gICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVh
cio+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2ViR0xFeHRlbnNpb246Ok9FU1ZlcnRleEFycmF5
T2JqZWN0TmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0
aWNfY2FzdDxPRVNWZXJ0ZXhBcnJheU9iamVjdCo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246Ok9FU0VsZW1lbnRJbmRleFVpbnROYW1lOgotICAgICAgICByZXR1cm4gdG9K
UyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PE9FU0VsZW1lbnRJbmRleFVpbnQqPihl
eHRlbnNpb24pKTsKLSAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpXZWJHTERlYnVnUmVuZGVyZXJJ
bmZvTmFtZToKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTERlYnVnUmVuZGVyZXJJbmZvKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJH
TEV4dGVuc2lvbjo6V2ViR0xEZWJ1Z1NoYWRlcnNOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhl
eGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMRGVidWdTaGFkZXJzKj4oZXh0ZW5z
aW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFU
Q05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8V2ViR0xDb21wcmVzc2VkVGV4dHVyZUFUQyo+KGV4dGVuc2lvbikpOwotICAgIGNhc2UgV2Vi
R0xFeHRlbnNpb246OldlYkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQ05hbWU6Ci0gICAgICAgIHJl
dHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2Vi
R0xDb21wcmVzc2VkVGV4dHVyZVMzVENOYW1lOgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBn
bG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDKj4oZXh0
ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6V2ViR0xEZXB0aFRleHR1cmVOYW1l
OgotICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PFdl
YkdMRGVwdGhUZXh0dXJlKj4oZXh0ZW5zaW9uKSk7Ci0gICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6
V2ViR0xEcmF3QnVmZmVyc05hbWU6Ci0gICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIGdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xEcmF3QnVmZmVycyo+KGV4dGVuc2lvbikpOwotICAgIGNh
c2UgV2ViR0xFeHRlbnNpb246OkFOR0xFSW5zdGFuY2VkQXJyYXlzTmFtZToKLSAgICAgICAgcmV0
dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxBTkdMRUluc3RhbmNlZEFy
cmF5cyo+KGV4dGVuc2lvbikpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4ganNOdWxsKCk7Ci19Ci0KLXZvaWQgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZp
c2l0QWRkaXRpb25hbENoaWxkcmVuKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotewotICAgIHZpc2l0
b3IuYWRkT3BhcXVlUm9vdCgmaW1wbCgpKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpIDwgMSkKLSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhy
b3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwot
ICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29u
dGV4dCA9IGltcGwoKTsKLSAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJvZ3Jh
bTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXByb2dy
YW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0g
ICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICBWZWN0b3I8UmVmUHRyPFdl
YkdMU2hhZGVyPj4gc2hhZGVyczsKLSAgICBib29sIHN1Y2NlZWQgPSBjb250ZXh0LmdldEF0dGFj
aGVkU2hhZGVycyhwcm9ncmFtLCBzaGFkZXJzLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc051bGwoKTsKLSAg
ICB9Ci0gICAgaWYgKCFzdWNjZWVkKQotICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgSlND
OjpNYXJrZWRBcmd1bWVudEJ1ZmZlciBsaXN0OwotICAgIGZvciAoc2l6ZV90IGlpID0gMDsgaWkg
PCBzaGFkZXJzLnNpemUoKTsgKytpaSkKLSAgICAgICAgbGlzdC5hcHBlbmQodG9KUyhleGVjLCBn
bG9iYWxPYmplY3QoKSwgc2hhZGVyc1tpaV0uZ2V0KCkpKTsKLSAgICByZXR1cm4gY29uc3RydWN0
QXJyYXkoZXhlYywgMCwgZ2xvYmFsT2JqZWN0KCksIGxpc3QpOwotfQotCi1KU1ZhbHVlIEpTV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oRXhlY1N0YXRlKiBleGVjKQotewotICAg
IGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgPCAxKQotICAgICAgICByZXR1cm4gZXhlYy0+dm0o
KS50aHJvd0V4Y2VwdGlvbihleGVjLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihleGVj
KSk7Ci0KLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQmIGNvbnRleHQgPSBpbXBsKCk7Ci0gICAg
Y29uc3QgU3RyaW5nIG5hbWUgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b1N0cmluZyhl
eGVjKS0+dmFsdWUoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEV4dGVuc2lvbiogZXh0ZW5zaW9uID0g
Y29udGV4dC5nZXRFeHRlbnNpb24obmFtZSk7Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFs
T2JqZWN0KCksIGV4dGVuc2lvbik7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmdldEJ1ZmZlclBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdl
dE9iamVjdFBhcmFtZXRlcih0aGlzLCBleGVjLCBrQnVmZmVyKTsKLX0KLQotSlNWYWx1ZSBKU1dl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKEV4
ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDMpCi0g
ICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwot
ICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
Ci0gICAgdW5zaWduZWQgYXR0YWNobWVudCA9IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRv
SW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tlZEFy
Z3VtZW50KDIpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNv
bnRleHQuZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyKHRhcmdldCwgYXR0YWNobWVu
dCwgcG5hbWUsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVy
biB0b0pTKGV4ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBp
ZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDEpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgp
LnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMp
KTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4
dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9IGV4ZWMtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbyA9
IGNvbnRleHQuZ2V0UGFyYW1ldGVyKHBuYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAg
IHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwotICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5mbyk7Ci19
Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFByb2dyYW1QYXJhbWV0ZXIo
RXhlY1N0YXRlKiBleGVjKQotewotICAgIGlmIChleGVjLT5hcmd1bWVudENvdW50KCkgIT0gMikK
LSAgICAgICAgcmV0dXJuIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3IoZXhlYykpOwotCi0gICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
Ci0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSA9IEpTV2ViR0xQcm9ncmFtOjp0b1dyYXBwZWQoZXhlYy0+dW5jaGVj
a2VkQXJndW1lbnQoMCkpOwotICAgIGlmICghcHJvZ3JhbSAmJiAhZXhlYy0+dW5jaGVja2VkQXJn
dW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRocm93VHlwZUVy
cm9yKGV4ZWMpOwotICAgIHVuc2lnbmVkIHBuYW1lID0gZXhlYy0+dW5jaGVja2VkQXJndW1lbnQo
MSkudG9JbnQzMihleGVjKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIFdlYkdMR2V0SW5mbyBpbmZvID0gY29udGV4dC5n
ZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIHBuYW1lLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0g
ICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotICAgIH0KLSAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3QoKSwgaW5m
byk7Ci19Ci0KLUpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcihFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0dXJuIGdldE9iamVjdFBhcmFt
ZXRlcih0aGlzLCBleGVjLCBrUmVuZGVyYnVmZmVyKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAg
ICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52
bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4
ZWMpKTsKLQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCYgY29udGV4dCA9IGltcGwoKTsKLSAgICBpZiAoIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlu
aGVyaXRzKEpTV2ViR0xTaGFkZXI6OmluZm8oKSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVF
cnJvcihleGVjKTsKLSAgICBXZWJHTFNoYWRlciogc2hhZGVyID0gSlNXZWJHTFNoYWRlcjo6dG9X
cmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICB1bnNpZ25lZCBwbmFtZSA9
IGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLnRvSW50MzIoZXhlYyk7Ci0gICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICBXZWJH
TEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0U2hhZGVyUGFyYW1ldGVyKHNoYWRlciwgcG5hbWUs
IGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
LSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotICAgIHJldHVybiB0b0pTKGV4
ZWMsIGdsb2JhbE9iamVjdCgpLCBpbmZvKTsKLX0KLQotSlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyhFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
V2ViR0xSZW5kZXJpbmdDb250ZXh0JiBjb250ZXh0ID0gaW1wbCgpOwotICAgIGlmIChjb250ZXh0
LmlzQ29udGV4dExvc3QoKSkKLSAgICAgICAgcmV0dXJuIGpzTnVsbCgpOwotICAgIFZlY3RvcjxT
dHJpbmc+IHZhbHVlID0gY29udGV4dC5nZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7Ci0gICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgbGlzdDsKLSAgICBmb3IgKHNpemVfdCBpaSA9IDA7IGlpIDwgdmFs
dWUuc2l6ZSgpOyArK2lpKQotICAgICAgICBsaXN0LmFwcGVuZChqc1N0cmluZ1dpdGhDYWNoZShl
eGVjLCB2YWx1ZVtpaV0pKTsKLSAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoZXhlYywgMCwgZ2xv
YmFsT2JqZWN0KCksIGxpc3QpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpnZXRUZXhQYXJhbWV0ZXIoRXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBnZXRPYmpl
Y3RQYXJhbWV0ZXIodGhpcywgZXhlYywga1RleHR1cmUpOwotfQotCi1KU1ZhbHVlIEpTV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRVbmlmb3JtKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsK
LQotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYg
Y29udGV4dCA9IGltcGwoKTsKLSAgICBXZWJHTFByb2dyYW0qIHByb2dyYW0gPSBKU1dlYkdMUHJv
Z3JhbTo6dG9XcmFwcGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICBpZiAoIXBy
b2dyYW0gJiYgIWV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApLmlzVW5kZWZpbmVkT3JOdWxsKCkp
Ci0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICBXZWJHTFVuaWZvcm1M
b2NhdGlvbiogbG9jYXRpb24gPSBKU1dlYkdMVW5pZm9ybUxvY2F0aW9uOjp0b1dyYXBwZWQoZXhl
Yy0+dW5jaGVja2VkQXJndW1lbnQoMSkpOwotICAgIGlmICghbG9jYXRpb24gJiYgIWV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkT3JOdWxsKCkpCi0gICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICBXZWJHTEdldEluZm8gaW5mbyA9IGNvbnRleHQuZ2V0
VW5pZm9ybShwcm9ncmFtLCBsb2NhdGlvbiwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGluZm8pOwotfQot
Ci1KU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIoRXhlY1N0
YXRlKiBleGVjKQotewotICAgIHJldHVybiBnZXRPYmplY3RQYXJhbWV0ZXIodGhpcywgZXhlYywg
a1ZlcnRleEF0dHJpYik7Ci19Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVD
YXBhY2l0eT4KLWJvb2wgdG9WZWN0b3IoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6SlNWYWx1
ZSB2YWx1ZSwgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5PiYgdmVjdG9yKQotewotICAgIGlmICgh
dmFsdWUuaXNPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSlNDOjpKU09i
amVjdCogb2JqZWN0ID0gYXNPYmplY3QodmFsdWUpOwotICAgIGludDMyX3QgbGVuZ3RoID0gb2Jq
ZWN0LT5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5sZW5ndGgpLnRvSW50MzIo
ZXhlYyk7Ci0KLSAgICBpZiAoIXZlY3Rvci50cnlSZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHZlY3Rvci5yZXNpemUobGVuZ3RoKTsKLQotICAgIGZv
ciAoaW50MzJfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIEpTQzo6SlNWYWx1
ZSB2ID0gb2JqZWN0LT5nZXQoZXhlYywgaSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgdmVjdG9yW2ldID0gc3Rh
dGljX2Nhc3Q8VD4odi50b051bWJlcihleGVjKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWVudW0gRGF0YUZ1bmN0aW9uVG9DYWxsIHsKLSAgICBmX3VuaWZvcm0xdiwgZl91bmlm
b3JtMnYsIGZfdW5pZm9ybTN2LCBmX3VuaWZvcm00diwKLSAgICBmX3ZlcnRleEF0dHJpYjF2LCBm
X3ZlcnRleEF0dHJpYjJ2LCBmX3ZlcnRleEF0dHJpYjN2LCBmX3ZlcnRleEF0dHJpYjR2Ci19Owot
Ci1lbnVtIERhdGFGdW5jdGlvbk1hdHJpeFRvQ2FsbCB7Ci0gICAgZl91bmlmb3JtTWF0cml4MmZ2
LCBmX3VuaWZvcm1NYXRyaXgzZnYsIGZfdW5pZm9ybU1hdHJpeDRmdgotfTsKLQotc3RhdGljIGJv
b2wgZnVuY3Rpb25Gb3JVbmlmb3JtKERhdGFGdW5jdGlvblRvQ2FsbCBmKQotewotICAgIHN3aXRj
aCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgY2FzZSBmX3VuaWZvcm0ydjoKLSAg
ICBjYXNlIGZfdW5pZm9ybTN2OgotICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGRlZmF1bHQ6IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0aW9uZihEYXRhRnVuY3Rpb25Ub0NhbGwg
ZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkK
LXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICE9IDIpCi0gICAgICAgIHJldHVybiBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKGV4ZWMpKTsKLSAgICAKLSAgICBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24gPSAw
OwotICAgIGxvbmcgaW5kZXggPSAtMTsKLSAgICAKLSAgICBpZiAoZnVuY3Rpb25Gb3JVbmlmb3Jt
KGYpKSB7Ci0gICAgICAgIGxvY2F0aW9uID0gSlNXZWJHTFVuaWZvcm1Mb2NhdGlvbjo6dG9XcmFw
cGVkKGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKLSAgICAgICAgaWYgKCFsb2NhdGlvbiAm
JiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAg
ICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
aW5kZXggPSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKS50b0ludDMyKGV4ZWMpOwotCi0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
LSAgICAgICAgCi0gICAgUmVmUHRyPEZsb2F0MzJBcnJheT4gd2ViR0xBcnJheSA9IHRvRmxvYXQz
MkFycmF5KGV4ZWMtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpICAgIAotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICAgICAgCi0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgaWYgKHdlYkdMQXJyYXkpIHsKLSAgICAgICAg
c3dpdGNoIChmKSB7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMXY6Ci0gICAgICAgICAgICBjb250
ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIGZfdW5pZm9ybTJ2OgotICAgICAgICAgICAgY29udGV4
dC51bmlmb3JtMmZ2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0zdjoKLSAgICAgICAgICAgIGNvbnRleHQu
dW5pZm9ybTNmdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtNHY6Ci0gICAgICAgICAgICBjb250ZXh0LnVu
aWZvcm00ZnYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliMXY6Ci0gICAgICAgICAgICBjb250ZXh0
LnZlcnRleEF0dHJpYjFmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBmX3ZlcnRleEF0dHJpYjJ2OgotICAgICAgICAgICAgY29udGV4
dC52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHdlYkdMQXJyYXkuZ2V0KCkpOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIzdjoKLSAgICAgICAgICAgIGNvbnRl
eHQudmVydGV4QXR0cmliM2Z2KGluZGV4LCB3ZWJHTEFycmF5LmdldCgpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIGZfdmVydGV4QXR0cmliNHY6Ci0gICAgICAgICAgICBjb250
ZXh0LnZlcnRleEF0dHJpYjRmdihpbmRleCwgd2ViR0xBcnJheS5nZXQoKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0gICAgfQotCi0gICAgVmVj
dG9yPGZsb2F0LCA2ND4gYXJyYXk7Ci0gICAgaWYgKCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNo
ZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQotICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7Ci0KLSAgICBzd2l0Y2ggKGYpIHsKLSAgICBjYXNlIGZfdW5pZm9ybTF2OgotICAgICAg
ICBjb250ZXh0LnVuaWZvcm0xZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgp
LCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAgICAgIGNv
bnRleHQudW5pZm9ybTJmdihsb2NhdGlvbiwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVj
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBmX3VuaWZvcm0zdjoKLSAgICAgICAgY29udGV4
dC51bmlmb3JtM2Z2KGxvY2F0aW9uLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybTR2OgotICAgICAgICBjb250ZXh0LnVu
aWZvcm00ZnYobG9jYXRpb24sIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWIxdjoKLSAgICAgICAgY29udGV4dC52
ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBmX3ZlcnRleEF0dHJpYjJ2OgotICAgICAgICBjb250ZXh0LnZl
cnRleEF0dHJpYjJmdihpbmRleCwgYXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCkpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIGZfdmVydGV4QXR0cmliM3Y6Ci0gICAgICAgIGNvbnRleHQudmVy
dGV4QXR0cmliM2Z2KGluZGV4LCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgZl92ZXJ0ZXhBdHRyaWI0djoKLSAgICAgICAgY29udGV4dC52ZXJ0
ZXhBdHRyaWI0ZnYoaW5kZXgsIGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIAotICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7Ci0gICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLXN0YXRpYyBKU0M6OkpTVmFsdWUgZGF0YUZ1bmN0
aW9uaShEYXRhRnVuY3Rpb25Ub0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgp
ICE9IDIpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGNy
ZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAgIFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246OnRvV3JhcHBlZChleGVj
LT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFsb2NhdGlvbiAmJiAhZXhlYy0+dW5j
aGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93VHlwZUVycm9yKGV4ZWMpOwotICAKLSAgICBSZWZQdHI8SW50MzJBcnJheT4gd2ViR0xBcnJh
eSA9IHRvSW50MzJBcnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSk7Ci0KLSAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICBpZiAod2ViR0xBcnJheSkgewotICAgICAgICBzd2l0Y2gg
KGYpIHsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm0xdjoKLSAgICAgICAgICAgIGNvbnRleHQudW5p
Zm9ybTFpdihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgZl91bmlmb3JtMnY6Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZv
cm0yaXYobG9jYXRpb24sIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIGZfdW5pZm9ybTN2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3Jt
M2l2KGxvY2F0aW9uLCB3ZWJHTEFycmF5LmdldCgpLCBlYyk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBmX3VuaWZvcm00djoKLSAgICAgICAgICAgIGNvbnRleHQudW5pZm9ybTRp
dihsb2NhdGlvbiwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKLSAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7Ci0gICAgfQotCi0KLSAgICBWZWN0b3I8aW50LCA2ND4gYXJyYXk7Ci0gICAgaWYg
KCF0b1ZlY3RvcihleGVjLCBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKSwgYXJyYXkpKQotICAg
ICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0KLSAgICBzd2l0Y2ggKGYpIHsKLSAg
ICBjYXNlIGZfdW5pZm9ybTF2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm0xaXYobG9jYXRpb24s
IGFycmF5LmRhdGEoKSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgZl91bmlmb3JtMnY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybTJpdihsb2NhdGlvbiwgYXJy
YXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBm
X3VuaWZvcm0zdjoKLSAgICAgICAgY29udGV4dC51bmlmb3JtM2l2KGxvY2F0aW9uLCBhcnJheS5k
YXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5p
Zm9ybTR2OgotICAgICAgICBjb250ZXh0LnVuaWZvcm00aXYobG9jYXRpb24sIGFycmF5LmRhdGEo
KSwgYXJyYXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOwot
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotfQotCi1zdGF0aWMgSlNDOjpKU1ZhbHVlIGRhdGFG
dW5jdGlvbk1hdHJpeChEYXRhRnVuY3Rpb25NYXRyaXhUb0NhbGwgZiwgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCYgY29udGV4dCkKLXsKLSAgICBpZiAoZXhlYy0+
YXJndW1lbnRDb3VudCgpICE9IDMpCi0gICAgICAgIHJldHVybiBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKGV4ZWMpKTsKLQotICAg
IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiA9IEpTV2ViR0xVbmlmb3JtTG9jYXRpb246
OnRvV3JhcHBlZChleGVjLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7Ci0gICAgaWYgKCFsb2NhdGlv
biAmJiAhZXhlYy0+dW5jaGVja2VkQXJndW1lbnQoMCkuaXNVbmRlZmluZWRPck51bGwoKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwotCi0gICAgYm9vbCB0cmFuc3Bvc2Ug
PSBleGVjLT51bmNoZWNrZWRBcmd1bWVudCgxKS50b0Jvb2xlYW4oZXhlYyk7Ci0gICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKSAgICAKLSAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci0g
ICAgICAgIAotICAgIFJlZlB0cjxGbG9hdDMyQXJyYXk+IHdlYkdMQXJyYXkgPSB0b0Zsb2F0MzJB
cnJheShleGVjLT51bmNoZWNrZWRBcmd1bWVudCgyKSk7Ci0gICAgICAgIAotICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwotICAgIGlmICh3ZWJHTEFycmF5KSB7Ci0gICAgICAgIHN3aXRjaCAoZikg
ewotICAgICAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDJmdjoKLSAgICAgICAgICAgIGNvbnRleHQu
dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgdHJhbnNwb3NlLCB3ZWJHTEFycmF5LmdldCgpLCBl
Yyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBmX3VuaWZvcm1NYXRyaXgzZnY6
Ci0gICAgICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24sIHRyYW5zcG9z
ZSwgd2ViR0xBcnJheS5nZXQoKSwgZWMpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgZl91bmlmb3JtTWF0cml4NGZ2OgotICAgICAgICAgICAgY29udGV4dC51bmlmb3JtTWF0cml4
NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHdlYkdMQXJyYXkuZ2V0KCksIGVjKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBzZXRET01FeGNlcHRpb24o
ZXhlYywgZWMpOwotICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAgICB9Ci0KLSAgICBW
ZWN0b3I8ZmxvYXQsIDY0PiBhcnJheTsKLSAgICBpZiAoIXRvVmVjdG9yKGV4ZWMsIGV4ZWMtPnVu
Y2hlY2tlZEFyZ3VtZW50KDIpLCBhcnJheSkpCi0gICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJv
cihleGVjKTsKLQotICAgIHN3aXRjaCAoZikgewotICAgIGNhc2UgZl91bmlmb3JtTWF0cml4MmZ2
OgotICAgICAgICBjb250ZXh0LnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHRyYW5zcG9zZSwg
YXJyYXkuZGF0YSgpLCBhcnJheS5zaXplKCksIGVjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBmX3VuaWZvcm1NYXRyaXgzZnY6Ci0gICAgICAgIGNvbnRleHQudW5pZm9ybU1hdHJpeDNmdihs
b2NhdGlvbiwgdHJhbnNwb3NlLCBhcnJheS5kYXRhKCksIGFycmF5LnNpemUoKSwgZWMpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIGZfdW5pZm9ybU1hdHJpeDRmdjoKLSAgICAgICAgY29udGV4
dC51bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCB0cmFuc3Bvc2UsIGFycmF5LmRhdGEoKSwgYXJy
YXkuc2l6ZSgpLCBlYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHNldERPTUV4Y2Vw
dGlvbihleGVjLCBlYyk7Ci0gICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Ci19Ci0KLUpTQzo6SlNW
YWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmdihKU0M6OkV4ZWNTdGF0ZSog
ZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm0xdiwgZXhlYywgaW1w
bCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MWl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25pKGZf
dW5pZm9ybTF2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAgcmV0
dXJuIGRhdGFGdW5jdGlvbmYoZl91bmlmb3JtMnYsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6
SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpdihKU0M6OkV4ZWNTdGF0
ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uaShmX3VuaWZvcm0ydiwgZXhlYywg
aW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtM2Z2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25m
KGZfdW5pZm9ybTN2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMpCi17Ci0gICAg
cmV0dXJuIGRhdGFGdW5jdGlvbmkoZl91bmlmb3JtM3YsIGV4ZWMsIGltcGwoKSk7Ci19Ci0KLUpT
Qzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRmdihKU0M6OkV4ZWNT
dGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3VuaWZvcm00diwgZXhl
YywgaW1wbCgpKTsKLX0KLQotSlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtNGl2KEpTQzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rp
b25pKGZfdW5pZm9ybTR2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoSlNDOjpFeGVjU3RhdGUqIGV4ZWMp
Ci17Ci0gICAgcmV0dXJuIGRhdGFGdW5jdGlvbk1hdHJpeChmX3VuaWZvcm1NYXRyaXgyZnYsIGV4
ZWMsIGltcGwoKSk7Ci19Ci0KLUpTQzo6SlNWYWx1ZSBKU1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybU1hdHJpeDNmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0
YUZ1bmN0aW9uTWF0cml4KGZfdW5pZm9ybU1hdHJpeDNmdiwgZXhlYywgaW1wbCgpKTsKLX0KLQot
SlNDOjpKU1ZhbHVlIEpTV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4NGZ2KEpT
Qzo6RXhlY1N0YXRlKiBleGVjKQotewotICAgIHJldHVybiBkYXRhRnVuY3Rpb25NYXRyaXgoZl91
bmlmb3JtTWF0cml4NGZ2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykK
LXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjF2LCBleGVjLCBpbXBs
KCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjJmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9u
ZihmX3ZlcnRleEF0dHJpYjJ2LCBleGVjLCBpbXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjNmdihKU0M6OkV4ZWNTdGF0ZSogZXhl
YykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0aW9uZihmX3ZlcnRleEF0dHJpYjN2LCBleGVjLCBp
bXBsKCkpOwotfQotCi1KU0M6OkpTVmFsdWUgSlNXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYjRmdihKU0M6OkV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICByZXR1cm4gZGF0YUZ1bmN0
aW9uZihmX3ZlcnRleEF0dHJpYjR2LCBleGVjLCBpbXBsKCkpOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2aXNpb24g
MTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
SlMucG0JKHdvcmtpbmcgY29weSkKQEAgLTI5ODMsNyArMjk4Myw3IEBAIHN1YiBHZW5lcmF0ZUlt
cGxlbWVudGF0aW9uCiAgICAgICAgICAgICBpZiAoR2V0R2VuZXJhdGVJc1JlYWNoYWJsZSgkaW50
ZXJmYWNlKSBlcSAiSW1wbCIpIHsKICAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAgPSAiICAg
ICR7aW1wbFR5cGV9KiByb290ID0gJmpzJHtpbnRlcmZhY2VOYW1lfS0+aW1wbCgpO1xuIjsKICAg
ICAgICAgICAgIH0gZWxzaWYgKEdldEdlbmVyYXRlSXNSZWFjaGFibGUoJGludGVyZmFjZSkgZXEg
IkltcGxXZWJHTFJlbmRlcmluZ0NvbnRleHQiKSB7Ci0gICAgICAgICAgICAgICAgJHJvb3RTdHJp
bmcgID0gIiAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIHJvb3QgPSBXVEY6OmdldFB0cihqcyR7
aW50ZXJmYWNlTmFtZX0tPmltcGwoKS5jb250ZXh0KCkpO1xuIjsKKyAgICAgICAgICAgICAgICAk
cm9vdFN0cmluZyAgPSAiICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIHJvb3QgPSBXVEY6
OmdldFB0cihqcyR7aW50ZXJmYWNlTmFtZX0tPmltcGwoKS5jb250ZXh0KCkpO1xuIjsKICAgICAg
ICAgICAgIH0gZWxzaWYgKEdldEdlbmVyYXRlSXNSZWFjaGFibGUoJGludGVyZmFjZSkgZXEgIklt
cGxGcmFtZSIpIHsKICAgICAgICAgICAgICAgICAkcm9vdFN0cmluZyAgPSAiICAgIEZyYW1lKiBy
b290ID0gV1RGOjpnZXRQdHIoanMke2ludGVyZmFjZU5hbWV9LT5pbXBsKCkuZnJhbWUoKSk7XG4i
OwogICAgICAgICAgICAgICAgICRyb290U3RyaW5nIC49ICIgICAgaWYgKCFyb290KVxuIjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAx
NzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTIsOSArNTIsMTAgQEAKICNpbmNsdWRlIDxydW50aW1lL0pTQ0lubGlu
ZXMuaD4KICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogCi0jaWYgRU5BQkxFKFdFQkdMKSAg
ICAKKyNpZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiV2ViR0wxUmVuZGVyaW5nQ29udGV4dC5o
IgorI2luY2x1ZGUgIldlYkdMMlJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJHTENv
bnRleHRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAj
ZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMjEyLDcgKzIxMyw4IEBAIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQqIEhUTUxDYW52YXNFbGVtZW4KICAgICAgICAgICAgIGlmIChtX2NvbnRl
eHQgJiYgIW1fY29udGV4dC0+aXMzZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgICAgICAgICAgaWYgKCFtX2NvbnRleHQpIHsKLSAgICAgICAgICAgICAgICBtX2NvbnRl
eHQgPSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSh0aGlzLCBzdGF0aWNfY2FzdDxXZWJH
TENvbnRleHRBdHRyaWJ1dGVzKj4oYXR0cnMpKTsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQg
PSBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpjcmVhdGUodGhpcywgc3RhdGljX2Nhc3Q8V2Vi
R0xDb250ZXh0QXR0cmlidXRlcyo+KGF0dHJzKSwgdHlwZSk7CisgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgaWYgKG1fY29udGV4dCkgewogICAgICAgICAgICAgICAgICAgICAvLyBO
ZWVkIHRvIG1ha2Ugc3VyZSBhIFJlbmRlckxheWVyIGFuZCBjb21wb3NpdGluZyBsYXllciBnZXQg
Y3JlYXRlZCBmb3IgdGhlIENhbnZhcwogICAgICAgICAgICAgICAgICAgICBzZXROZWVkc1N0eWxl
UmVjYWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKQEAgLTI1NSw3ICsyNTcsNyBAQCBib29sIEhU
TUxDYW52YXNFbGVtZW50OjppczJkVHlwZShjb25zdCBTCiBib29sIEhUTUxDYW52YXNFbGVtZW50
OjppczNkVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgLy8gUmV0YWluIHN1cHBvcnQg
Zm9yIHRoZSBsZWdhY3kgIndlYmtpdC0zZCIgbmFtZS4KLSAgICByZXR1cm4gdHlwZSA9PSAid2Vi
Z2wiIHx8IHR5cGUgPT0gImV4cGVyaW1lbnRhbC13ZWJnbCIgfHwgdHlwZSA9PSAid2Via2l0LTNk
IjsKKyAgICByZXR1cm4gdHlwZSA9PSAid2ViZ2wiIHx8IHR5cGUgPT0gImV4cGVyaW1lbnRhbC13
ZWJnbCIgfHwgdHlwZSA9PSAid2Via2l0LTNkIiB8fCB0eXBlID09ICJleHBlcmltZW50YWwtd2Vi
Z2wyIjsKIH0KICNlbmRpZgogCkBAIC0zMjcsNyArMzI5LDcgQEAgdm9pZCBIVE1MQ2FudmFzRWxl
bWVudDo6cmVzZXQoKQogCiAjaWYgRU5BQkxFKFdFQkdMKQogICAgIGlmIChpczNEKCkgJiYgb2xk
U2l6ZSAhPSBzaXplKCkpCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4
dCo+KG1fY29udGV4dC5nZXQoKSktPnJlc2hhcGUod2lkdGgoKSwgaGVpZ2h0KCkpOworICAgICAg
ICBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj4obV9jb250ZXh0LmdldCgp
KS0+cmVzaGFwZSh3aWR0aCgpLCBoZWlnaHQoKSk7CiAjZW5kaWYKIAogICAgIGlmIChhdXRvIHJl
bmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkgewpAQCAtMzk0LDcgKzM5Niw3IEBAIHZvaWQgSFRN
TENhbnZhc0VsZW1lbnQ6OnBhaW50KEdyYXBoaWNzQ28KIAogI2lmIEVOQUJMRShXRUJHTCkgICAg
CiAgICAgaWYgKGlzM0QoKSkKLSAgICAgICAgc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250
ZXh0Kj4obV9jb250ZXh0LmdldCgpKS0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworICAgICAgICBz
dGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKj4obV9jb250ZXh0LmdldCgpKS0+
bWFya0xheWVyQ29tcG9zaXRlZCgpOwogI2VuZGlmCiB9CiAKQEAgLTQ3NSw3ICs0NzcsNyBAQCBS
ZWZQdHI8SW1hZ2VEYXRhPiBIVE1MQ2FudmFzRWxlbWVudDo6Z2V0CiAgICAgaWYgKCFpczNEKCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
dHggPSBzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihtX2NvbnRleHQuZ2V0KCkp
OworICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGN0eCA9IHN0YXRpY19jYXN0PFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UqPihtX2NvbnRleHQuZ2V0KCkpOwogCiAgICAgcmV0dXJuIGN0
eC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKTsKICNlbHNlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQU5HTEVJbnN0YW5jZWRBcnJheXMuY3Bw
CShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUlu
c3RhbmNlZEFycmF5cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1BTkdMRUluc3RhbmNlZEFycmF5czo6QU5HTEVJbnN0YW5jZWRB
cnJheXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorQU5HTEVJbnN0YW5jZWRBcnJh
eXM6OkFOR0xFSW5zdGFuY2VkQXJyYXlzKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRl
eHQpCiAgICAgOiBXZWJHTEV4dGVuc2lvbihjb250ZXh0KQogewogfQpAQCAtNDgsNyArNDgsNyBA
QCBXZWJHTEV4dGVuc2lvbjo6RXh0ZW5zaW9uTmFtZSBBTkdMRUluc3RhCiAgICAgcmV0dXJuIEFO
R0xFSW5zdGFuY2VkQXJyYXlzTmFtZTsKIH0KIAotYm9vbCBBTkdMRUluc3RhbmNlZEFycmF5czo6
c3VwcG9ydGVkKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK2Jvb2wgQU5HTEVJbnN0
YW5jZWRBcnJheXM6OnN1cHBvcnRlZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0
KQogewogI2lmIFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZF
UlNJT05fTUlOX1JFUVVJUkVEID49IDEwOTAKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9BTkdMRUluc3RhbmNlZEFycmF5cy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FOR0xFSW5zdGFuY2VkQXJy
YXlzLmgJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0FO
R0xFSW5zdGFuY2VkQXJyYXlzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE2ICszMCwxNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2Ns
YXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U7CiAKIGNsYXNzIEFOR0xFSW5zdGFuY2VkQXJy
YXlzIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNp
dCBBTkdMRUluc3RhbmNlZEFycmF5cyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqKTsKKyAgICBleHBs
aWNpdCBBTkdMRUluc3RhbmNlZEFycmF5cyhXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAg
ICAgdmlydHVhbCB+QU5HTEVJbnN0YW5jZWRBcnJheXMoKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5z
aW9uTmFtZSBnZXROYW1lKCkgY29uc3Q7CiAKLSAgICBzdGF0aWMgYm9vbCBzdXBwb3J0ZWQoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgc3RhdGljIGJvb2wgc3VwcG9ydGVkKFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UqKTsKIAogICAgIHZvaWQgZHJhd0FycmF5c0luc3RhbmNlZEFOR0xF
KEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgR0MzRHNpemVp
IHByaW1jb3VudCk7CiAgICAgdm9pZCBkcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShHQzNEZW51
bSBtb2RlLCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQs
IEdDM0RzaXplaSBwcmltY291bnQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAxNzgz
NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDcgQEAgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpDYW52YXNSZW5kZXJpbgogI2lmICFFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQp
CiAgICAgQVNTRVJUX1VOVVNFRCh1c2VzRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUsICF1c2Vz
RGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUpOwogI2VuZGlmCisgICAgbV90eXBlID0gIjJkIjsK
IH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnVud2luZFN0YXRlU3RhY2soKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQuaAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01NCw2ICs1NCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXMyZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCBib29sIGlzM2QoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAg
ICB2aXJ0dWFsIFN0cmluZyB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiAKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKSB7fQogICAgIHZpcnR1
YWwgUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KQEAg
LTczLDYgKzc0LDcgQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICB2b2lkIGNoZWNrT3JpZ2luKGNv
bnN0IFVSTCYpOwogCisgICAgU3RyaW5nIG1fdHlwZTsKIHByaXZhdGU6CiAgICAgSFRNTENhbnZh
c0VsZW1lbnQqIG1fY2FudmFzOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0VYVEJsZW5kTWluTWF4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9FWFRCbGVuZE1pbk1heC5jcHAJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAs
NyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVYVEJsZW5kTWluTWF4OjpFWFRC
bGVuZE1pbk1heChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitFWFRCbGVuZE1pbk1h
eDo6RVhUQmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAg
ICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9FWFRCbGVuZE1pbk1heC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmgJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFWFRCbGVuZE1pbk1h
eCBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQg
RVhUQmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgRVhU
QmxlbmRNaW5NYXgoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfkVY
VEJsZW5kTWluTWF4KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNv
bnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhURnJhZ0Rl
cHRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGcmFn
RGVwdGguY3BwCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9FWFRGcmFnRGVwdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotRVhURnJhZ0RlcHRoOjpFWFRGcmFnRGVwdGgoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KQorRVhURnJhZ0RlcHRoOjpFWFRGcmFnRGVwdGgoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRl
eHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGcmFnRGVwdGgu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGcmFnRGVwdGgu
aAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhURnJh
Z0RlcHRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBFWFRGcmFnRGVwdGggZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24g
ewogcHVibGljOgotICAgIGV4cGxpY2l0IEVYVEZyYWdEZXB0aChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBleHBsaWNpdCBFWFRGcmFnRGVwdGgoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZSopOwogICAgIHZpcnR1YWwgfkVYVEZyYWdEZXB0aCgpOwogCiAgICAgdmlydHVhbCBFeHRlbnNp
b25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3BwCShyZXZpc2lvbiAxNzgz
NzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLUVYVFNoYWRlclRleHR1cmVMT0Q6OkVYVFNoYWRlclRleHR1cmVMT0QoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KQorRVhUU2hhZGVyVGV4dHVyZUxPRDo6RVhUU2hhZGVyVGV4dHVy
ZUxPRChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRl
bnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VY
VFNoYWRlclRleHR1cmVMT0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmgJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEVYVFNoYWRlclRl
eHR1cmVMT0QgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4
cGxpY2l0IEVYVFNoYWRlclRleHR1cmVMT0QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAg
ZXhwbGljaXQgRVhUU2hhZGVyVGV4dHVyZUxPRChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7
CiAgICAgdmlydHVhbCB+RVhUU2hhZGVyVGV4dHVyZUxPRCgpOwogCiAgICAgdmlydHVhbCBFeHRl
bnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
LmNwcAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhU
VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yzo6RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCkKK0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYzo6RVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqIGNvbnRleHQpCiAgICAgOiBXZWJHTEV4
dGVuc2lvbihjb250ZXh0KQogewogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgJKHJldmlzaW9uIDE3
ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlz
b3Ryb3BpYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljIGZpbmFsIDogcHVibGlj
IFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWMoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgZXhwbGljaXQgRVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljKFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UqKTsKICAgICB2
aXJ0dWFsIH5FWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMoKTsKIAogICAgIHZpcnR1YWwgRXh0
ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9FWFRzUkdCLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9FWFRzUkdCLmNwcAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvRVhUc1JHQi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1FWFRzUkdCOjpFWFRzUkdCKFdlYkdMUmVuZGVy
aW5nQ29udGV4dCogY29udGV4dCkKK0VYVHNSR0I6OkVYVHNSR0IoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRzUkdCLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhUc1JHQi5oCShyZXZpc2lvbiAxNzgzNzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRzUkdCLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFWFRzUkdCIGZpbmFs
IDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBFWFRzUkdC
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxpY2l0IEVYVHNSR0IoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfkVYVHNSR0IoKTsKIAogICAgIHZpcnR1
YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmNwcAkocmV2
aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudElu
ZGV4VWludC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1PRVNFbGVtZW50SW5kZXhVaW50OjpPRVNFbGVtZW50SW5kZXhVaW50KFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK09FU0VsZW1lbnRJbmRleFVpbnQ6Ok9FU0Vs
ZW1lbnRJbmRleFVpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6
IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvT0VTRWxlbWVudEluZGV4VWludC5oCShyZXZpc2lvbiAxNzgzNzIpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNFbGVtZW50SW5kZXhVaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBP
RVNFbGVtZW50SW5kZXhVaW50IGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1Ymxp
YzoKLSAgICBleHBsaWNpdCBPRVNFbGVtZW50SW5kZXhVaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4
dCopOworICAgIGV4cGxpY2l0IE9FU0VsZW1lbnRJbmRleFVpbnQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU0VsZW1lbnRJbmRleFVpbnQoKTsKIAogICAgIHZp
cnR1YWwgRXh0ZW5zaW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVz
LmNwcAkocmV2aXNpb24gMTc4MzcyKQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNTdGFuZGFyZERlcml2YXRpdmVzOjpPRVNTdGFu
ZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK09FU1N0YW5k
YXJkRGVyaXZhdGl2ZXM6Ok9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTU3RhbmRhcmREZXJp
dmF0aXZlcy5oCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9PRVNTdGFuZGFyZERlcml2YXRpdmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBPRVNTdGFuZGFyZERlcml2YXRpdmVzIGZp
bmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKIHB1YmxpYzoKLSAgICBleHBsaWNpdCBPRVNT
dGFuZGFyZERlcml2YXRpdmVzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAgIGV4cGxpY2l0
IE9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAg
IHZpcnR1YWwgfk9FU1N0YW5kYXJkRGVyaXZhdGl2ZXMoKTsKIAogICAgIHZpcnR1YWwgRXh0ZW5z
aW9uTmFtZSBnZXROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5jcHAJKHJldmlzaW9uIDE3ODM3MikKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1PRVNUZXh0
dXJlRmxvYXQ6Ok9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQp
CitPRVNUZXh0dXJlRmxvYXQ6Ok9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVGbG9hdC5oCShyZXZpc2lv
biAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIE9FU1RleHR1cmVGbG9hdCBmaW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBw
dWJsaWM6Ci0gICAgT0VTVGV4dHVyZUZsb2F0KFdlYkdMUmVuZGVyaW5nQ29udGV4dCopOworICAg
IE9FU1RleHR1cmVGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7CiAgICAgdmlydHVh
bCB+T0VTVGV4dHVyZUZsb2F0KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFt
ZSgpIGNvbnN0IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VT
VGV4dHVyZUZsb2F0TGluZWFyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwCShyZXZpc2lvbiAxNzgzNzIpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotT0VT
VGV4dHVyZUZsb2F0TGluZWFyOjpPRVNUZXh0dXJlRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0KQorT0VTVGV4dHVyZUZsb2F0TGluZWFyOjpPRVNUZXh0dXJlRmxvYXRM
aW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29udGV4dCkKICAgICA6IFdlYkdMRXh0
ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9P
RVNUZXh0dXJlRmxvYXRMaW5lYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9PRVNUZXh0dXJlRmxvYXRMaW5lYXIuaAkocmV2aXNpb24gMTc4MzcyKQorKysgU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvT0VTVGV4dHVyZUZsb2F0TGluZWFyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBPRVNU
ZXh0dXJlRmxvYXRMaW5lYXIgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVibGlj
OgotICAgIGV4cGxpY2l0IE9FU1RleHR1cmVGbG9hdExpbmVhcihXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKTsKKyAgICBleHBsaWNpdCBPRVNUZXh0dXJlRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdD
b250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU1RleHR1cmVGbG9hdExpbmVhcigpOwogCiAg
ICAgdmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQu
Y3BwCShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNU
ZXh0dXJlSGFsZkZsb2F0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1RleHR1cmVIYWxmRmxvYXQ6Ok9FU1RleHR1cmVIYWxm
RmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorT0VTVGV4dHVyZUhhbGZGbG9h
dDo6T0VTVGV4dHVyZUhhbGZGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0
KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0dXJlSGFsZkZsb2F0LmgJKHJldmlzaW9uIDE3
ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIE9FU1RleHR1cmVIYWxmRmxvYXQgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24g
ewogcHVibGljOgotICAgIE9FU1RleHR1cmVIYWxmRmxvYXQoV2ViR0xSZW5kZXJpbmdDb250ZXh0
Kik7CisgICAgT0VTVGV4dHVyZUhhbGZGbG9hdChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKik7
CiAgICAgdmlydHVhbCB+T0VTVGV4dHVyZUhhbGZGbG9hdCgpOwogCiAgICAgdmlydHVhbCBFeHRl
bnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuY3Bw
CShyZXZpc2lvbiAxNzgzNzIpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNUZXh0
dXJlSGFsZkZsb2F0TGluZWFyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI6Ok9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorT0VT
VGV4dHVyZUhhbGZGbG9hdExpbmVhcjo6T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcihXZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlKiBjb250ZXh0KQogICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4
dCkKIHsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxm
RmxvYXRMaW5lYXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9P
RVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL09FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNyArMzIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIE9FU1Rl
eHR1cmVIYWxmRmxvYXRMaW5lYXIgZmluYWwgOiBwdWJsaWMgV2ViR0xFeHRlbnNpb24gewogcHVi
bGljOgotICAgIE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXIoV2ViR0xSZW5kZXJpbmdDb250ZXh0
Kik7CisgICAgT0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcihXZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlKik7CiAgICAgdmlydHVhbCB+T0VTVGV4dHVyZUhhbGZGbG9hdExpbmVhcigpOwogCiAgICAg
dmlydHVhbCBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5j
cHAJKHJldmlzaW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1Zl
cnRleEFycmF5T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLU9FU1ZlcnRleEFycmF5T2JqZWN0OjpPRVNWZXJ0ZXhBcnJh
eU9iamVjdChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCitPRVNWZXJ0ZXhBcnJheU9i
amVjdDo6T0VTVmVydGV4QXJyYXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSogY29u
dGV4dCkKICAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCiB7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9PRVNWZXJ0ZXhBcnJheU9iamVjdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmgJKHJldmlz
aW9uIDE3ODM3MikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL09FU1ZlcnRleEFycmF5
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE0ICszMSwxNCBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dDsKK2NsYXNzIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U7CiBjbGFzcyBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOwogCiB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOwogCiBjbGFzcyBPRVNWZXJ0ZXhBcnJheU9iamVjdCBm
aW5hbCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgT0VTVmVydGV4QXJy
YXlPYmplY3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0Kik7CisgICAgT0VTVmVydGV4QXJyYXlPYmpl
Y3QoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSopOwogICAgIHZpcnR1YWwgfk9FU1ZlcnRleEFy
cmF5T2JqZWN0KCk7CiAKICAgICB2aXJ0dWFsIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVy
aW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0wxUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDE3Njk5NCkJKGZyb20gU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoxNzY5OTQpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDFSZW5kZXJpbmdDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDksIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFdFQkdMKQorCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmgi
CisKKyNpbmNsdWRlICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgorI2luY2x1ZGUgIkNhY2hlZElt
YWdlLmgiCisjaW5jbHVkZSAiRE9NV2luZG93LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNp
bmNsdWRlICJFWFRCbGVuZE1pbk1heC5oIgorI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5oIgorI2lu
Y2x1ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKKyNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVy
QW5pc290cm9waWMuaCIKKyNpbmNsdWRlICJFWFRzUkdCLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9u
Q29kZS5oIgorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgor
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5o
IgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5o
IgorI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJPRVNFbGVtZW50SW5kZXhVaW50LmgiCisjaW5jbHVkZSAiT0VT
U3RhbmRhcmREZXJpdmF0aXZlcy5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdC5oIgorI2lu
Y2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgorI2luY2x1ZGUgIk9FU1RleHR1cmVIYWxm
RmxvYXQuaCIKKyNpbmNsdWRlICJPRVNUZXh0dXJlSGFsZkZsb2F0TGluZWFyLmgiCisjaW5jbHVk
ZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UmVuZGVyQm94LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXZWJHTEFjdGl2
ZUluZm8uaCIKKyNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEMuaCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUFZSVEMu
aCIKKyNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQy5oIgorI2luY2x1ZGUgIldl
YkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKKyNpbmNsdWRlICJXZWJHTENvbnRleHRFdmVudC5oIgor
I2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCisjaW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRl
cmVySW5mby5oIgorI2luY2x1ZGUgIldlYkdMRGVidWdTaGFkZXJzLmgiCisjaW5jbHVkZSAiV2Vi
R0xEZXB0aFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTERyYXdCdWZmZXJzLmgiCisjaW5jbHVk
ZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdMTG9zZUNvbnRleHQuaCIKKyNp
bmNsdWRlICJXZWJHTFByb2dyYW0uaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgor
I2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCisjaW5jbHVkZSAiV2ViR0xTaGFkZXJQcmVjaXNpb25G
b3JtYXQuaCIKKyNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKKyNpbmNsdWRlICJXZWJHTFVuaWZv
cm1Mb2NhdGlvbi5oIgorCisjaW5jbHVkZSA8cnVudGltZS9KU0NJbmxpbmVzLmg+CisjaW5jbHVk
ZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgorI2luY2x1ZGUgPHJ1bnRpbWUvVWludDMy
QXJyYXkuaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjb25zdCBkb3VibGUgc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0
ZW1wdHMgPSAxLjA7Citjb25zdCBpbnQgbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlID0gMjU2
OworCituYW1lc3BhY2UgeworCisgICAgY2xhc3MgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciB7
CisgICAgcHVibGljOgorICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmluZGVyKERyYXdpbmdC
dWZmZXIqIGRyYXdpbmdCdWZmZXIsIFdlYkdMRnJhbWVidWZmZXIqIGZyYW1lYnVmZmVyQmluZGlu
ZykKKyAgICAgICAgICAgIDogbV9kcmF3aW5nQnVmZmVyKGRyYXdpbmdCdWZmZXIpCisgICAgICAg
ICAgICAsIG1fZnJhbWVidWZmZXJCaW5kaW5nKGZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gQ29tbWl0IERyYXdpbmdCdWZmZXIgaWYgbmVlZGVkIChlLmcuLCBm
b3IgbXVsdGlzYW1wbGluZykKKyAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcg
JiYgbV9kcmF3aW5nQnVmZmVyKQorICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29t
bWl0KCk7CisgICAgICAgIH0KKworICAgICAgICB+U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFJlc3RvcmUgRHJhd2luZ0J1ZmZlciBpZiBuZWVk
ZWQKKyAgICAgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAgICB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7
CisgICAgICAgIFdlYkdMRnJhbWVidWZmZXIqIG1fZnJhbWVidWZmZXJCaW5kaW5nOworICAgIH07
CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG9iamVjdE9yWmVybyhXZWJHTE9iamVjdCogb2JqZWN0
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9iamVjdCA/IG9iamVjdC0+b2JqZWN0KCkgOiAwOwor
ICAgIH0KKworICAgIHZvaWQgY2xpcDFEKEdDM0RpbnQgc3RhcnQsIEdDM0RzaXplaSByYW5nZSwg
R0MzRHNpemVpIHNvdXJjZVJhbmdlLCBHQzNEaW50KiBjbGlwcGVkU3RhcnQsIEdDM0RzaXplaSog
Y2xpcHBlZFJhbmdlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGNsaXBwZWRTdGFydCAmJiBjbGlw
cGVkUmFuZ2UpOworICAgICAgICBpZiAoc3RhcnQgPCAwKSB7CisgICAgICAgICAgICByYW5nZSAr
PSBzdGFydDsKKyAgICAgICAgICAgIHN0YXJ0ID0gMDsKKyAgICAgICAgfQorICAgICAgICBHQzNE
aW50IGVuZCA9IHN0YXJ0ICsgcmFuZ2U7CisgICAgICAgIGlmIChlbmQgPiBzb3VyY2VSYW5nZSkK
KyAgICAgICAgICAgIHJhbmdlIC09IGVuZCAtIHNvdXJjZVJhbmdlOworICAgICAgICAqY2xpcHBl
ZFN0YXJ0ID0gc3RhcnQ7CisgICAgICAgICpjbGlwcGVkUmFuZ2UgPSByYW5nZTsKKyAgICB9CisK
KyAgICAvLyBSZXR1cm5zIGZhbHNlIGlmIG5vIGNsaXBwaW5nIGlzIG5lY2Vzc2FyeSwgaS5lLiwg
eCwgeSwgd2lkdGgsIGhlaWdodCBzdGF5IHRoZSBzYW1lLgorICAgIGJvb2wgY2xpcDJEKEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgR0MzRHNpemVpIHNvdXJjZVdpZHRoLCBHQzNEc2l6ZWkgc291cmNlSGVpZ2h0
LAorICAgICAgICAgICAgICAgIEdDM0RpbnQqIGNsaXBwZWRYLCBHQzNEaW50KiBjbGlwcGVkWSwg
R0MzRHNpemVpKiBjbGlwcGVkV2lkdGgsIEdDM0RzaXplaSpjbGlwcGVkSGVpZ2h0KQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGNsaXBwZWRYICYmIGNsaXBwZWRZICYmIGNsaXBwZWRXaWR0aCAmJiBj
bGlwcGVkSGVpZ2h0KTsKKyAgICAgICAgY2xpcDFEKHgsIHdpZHRoLCBzb3VyY2VXaWR0aCwgY2xp
cHBlZFgsIGNsaXBwZWRXaWR0aCk7CisgICAgICAgIGNsaXAxRCh5LCBoZWlnaHQsIHNvdXJjZUhl
aWdodCwgY2xpcHBlZFksIGNsaXBwZWRIZWlnaHQpOworICAgICAgICByZXR1cm4gKCpjbGlwcGVk
WCAhPSB4IHx8ICpjbGlwcGVkWSAhPSB5IHx8ICpjbGlwcGVkV2lkdGggIT0gd2lkdGggfHwgKmNs
aXBwZWRIZWlnaHQgIT0gaGVpZ2h0KTsKKyAgICB9CisKKyAgICBHQzNEaW50IGNsYW1wKEdDM0Rp
bnQgdmFsdWUsIEdDM0RpbnQgbWluLCBHQzNEaW50IG1heCkKKyAgICB7CisgICAgICAgIGlmICh2
YWx1ZSA8IG1pbikKKyAgICAgICAgICAgIHZhbHVlID0gbWluOworICAgICAgICBpZiAodmFsdWUg
PiBtYXgpCisgICAgICAgICAgICB2YWx1ZSA9IG1heDsKKyAgICAgICAgcmV0dXJuIHZhbHVlOwor
ICAgIH0KKworICAgIC8vIFJldHVybiB0cnVlIGlmIGEgY2hhcmFjdGVyIGJlbG9uZ3MgdG8gdGhl
IEFTQ0lJIHN1YnNldCBhcyBkZWZpbmVkIGluCisgICAgLy8gR0xTTCBFUyAxLjAgc3BlYyBzZWN0
aW9uIDMuMS4KKyAgICBib29sIHZhbGlkYXRlQ2hhcmFjdGVyKHVuc2lnbmVkIGNoYXIgYykKKyAg
ICB7CisgICAgICAgIC8vIFByaW50aW5nIGNoYXJhY3RlcnMgYXJlIHZhbGlkIGV4Y2VwdCAiICQg
YCBAIFwgJyBERUwuCisgICAgICAgIGlmIChjID49IDMyICYmIGMgPD0gMTI2CisgICAgICAgICAg
ICAmJiBjICE9ICciJyAmJiBjICE9ICckJyAmJiBjICE9ICdgJyAmJiBjICE9ICdAJyAmJiBjICE9
ICdcXCcgJiYgYyAhPSAnXCcnKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8v
IEhvcml6b250YWwgdGFiLCBsaW5lIGZlZWQsIHZlcnRpY2FsIHRhYiwgZm9ybSBmZWVkLCBjYXJy
aWFnZSByZXR1cm4KKyAgICAgICAgLy8gYXJlIGFsc28gdmFsaWQuCisgICAgICAgIGlmIChjID49
IDkgJiYgYyA8PSAxMykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBpc1ByZWZpeFJlc2VydmVkKGNvbnN0IFN0cmluZyYg
bmFtZSkKKyAgICB7CisgICAgICAgIGlmIChuYW1lLnN0YXJ0c1dpdGgoImdsXyIpIHx8IG5hbWUu
c3RhcnRzV2l0aCgid2ViZ2xfIikgfHwgbmFtZS5zdGFydHNXaXRoKCJfd2ViZ2xfIikpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIFN0cmlwcyBjb21tZW50cyBmcm9tIHNoYWRlciB0ZXh0LiBUaGlzIGFsbG93cyBub24tQVND
SUkgY2hhcmFjdGVycworICAgIC8vIHRvIGJlIHVzZWQgaW4gY29tbWVudHMgd2l0aG91dCBwb3Rl
bnRpYWxseSBicmVha2luZyBPcGVuR0wKKyAgICAvLyBpbXBsZW1lbnRhdGlvbnMgbm90IGV4cGVj
dGluZyBjaGFyYWN0ZXJzIG91dHNpZGUgdGhlIEdMU0wgRVMgc2V0LgorICAgIGNsYXNzIFN0cmlw
Q29tbWVudHMgeworICAgIHB1YmxpYzoKKyAgICAgICAgU3RyaXBDb21tZW50cyhjb25zdCBTdHJp
bmcmIHN0cikKKyAgICAgICAgICAgIDogbV9wYXJzZVN0YXRlKEJlZ2lubmluZ09mTGluZSkKKyAg
ICAgICAgICAgICwgbV9zb3VyY2VTdHJpbmcoc3RyKQorICAgICAgICAgICAgLCBtX2xlbmd0aChz
dHIubGVuZ3RoKCkpCisgICAgICAgICAgICAsIG1fcG9zaXRpb24oMCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcGFyc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIFN0cmluZyByZXN1bHQoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9idWlsZGVyLnRvU3RyaW5nKCk7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGJvb2wgaGFzTW9yZUNoYXJhY3RlcnMoKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKG1fcG9zaXRpb24gPCBtX2xlbmd0
aCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHBhcnNlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgd2hpbGUgKGhhc01vcmVDaGFyYWN0ZXJzKCkpIHsKKyAgICAgICAgICAgICAgICBwcm9j
ZXNzKGN1cnJlbnQoKSk7CisgICAgICAgICAgICAgICAgLy8gcHJvY2VzcygpIG1pZ2h0IGFkdmFu
Y2UgdGhlIHBvc2l0aW9uLgorICAgICAgICAgICAgICAgIGlmIChoYXNNb3JlQ2hhcmFjdGVycygp
KQorICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIHByb2Nlc3MoVUNoYXIpOworCisgICAgICAgIGJvb2wgcGVlayhV
Q2hhciYgY2hhcmFjdGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9wb3Np
dGlvbiArIDEgPj0gbV9sZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgY2hhcmFjdGVyID0gbV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbiArIDFdOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBVQ2hhciBjdXJyZW50
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04obV9wb3NpdGlvbiA8IG1fbGVuZ3RoKTsKKyAgICAgICAgICAgIHJldHVybiBtX3Nv
dXJjZVN0cmluZ1ttX3Bvc2l0aW9uXTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWR2YW5j
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgICsrbV9wb3NpdGlvbjsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgaXNOZXdsaW5lKFVDaGFyIGNoYXJhY3RlcikgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgLy8gRG9uJ3QgYXR0ZW1wdCB0byBjYW5vbmljYWxpemUgbmV3bGluZSByZWxh
dGVkIGNoYXJhY3RlcnMuCisgICAgICAgICAgICByZXR1cm4gKGNoYXJhY3RlciA9PSAnXG4nIHx8
IGNoYXJhY3RlciA9PSAnXHInKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZW1pdChVQ2hh
ciBjaGFyYWN0ZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnVpbGRlci5hcHBlbmQoY2hh
cmFjdGVyKTsKKyAgICAgICAgfQorCisgICAgICAgIGVudW0gUGFyc2VTdGF0ZSB7CisgICAgICAg
ICAgICAvLyBIYXZlIG5vdCBzZWVuIGFuIEFTQ0lJIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciB5
ZXQgb24KKyAgICAgICAgICAgIC8vIHRoaXMgbGluZS4gUG9zc2libGUgdGhhdCB3ZSBtaWdodCBz
ZWUgYSBwcmVwcm9jZXNzb3IKKyAgICAgICAgICAgIC8vIGRpcmVjdGl2ZS4KKyAgICAgICAgICAg
IEJlZ2lubmluZ09mTGluZSwKKworICAgICAgICAgICAgLy8gSGF2ZSBzZWVuIGF0IGxlYXN0IG9u
ZSBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIKKyAgICAgICAgICAgIC8vIG9uIHRoaXMg
bGluZS4KKyAgICAgICAgICAgIE1pZGRsZU9mTGluZSwKKworICAgICAgICAgICAgLy8gSGFuZGxp
bmcgYSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlLiBQYXNzZXMgdGhyb3VnaCBhbGwKKyAgICAgICAg
ICAgIC8vIGNoYXJhY3RlcnMgdXAgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gRGlzYWJsZXMgY29t
bWVudAorICAgICAgICAgICAgLy8gcHJvY2Vzc2luZy4KKyAgICAgICAgICAgIEluUHJlcHJvY2Vz
c29yRGlyZWN0aXZlLAorCisgICAgICAgICAgICAvLyBIYW5kbGluZyBhIHNpbmdsZS1saW5lIGNv
bW1lbnQuIFRoZSBjb21tZW50IHRleHQgaXMKKyAgICAgICAgICAgIC8vIHJlcGxhY2VkIHdpdGgg
YSBzaW5nbGUgc3BhY2UuCisgICAgICAgICAgICBJblNpbmdsZUxpbmVDb21tZW50LAorCisgICAg
ICAgICAgICAvLyBIYW5kbGluZyBhIG11bHRpLWxpbmUgY29tbWVudC4gTmV3bGluZXMgYXJlIHBh
c3NlZAorICAgICAgICAgICAgLy8gdGhyb3VnaCB0byBwcmVzZXJ2ZSBsaW5lIG51bWJlcnMuCisg
ICAgICAgICAgICBJbk11bHRpTGluZUNvbW1lbnQKKyAgICAgICAgfTsKKworICAgICAgICBQYXJz
ZVN0YXRlIG1fcGFyc2VTdGF0ZTsKKyAgICAgICAgU3RyaW5nIG1fc291cmNlU3RyaW5nOworICAg
ICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICAgICAgdW5zaWduZWQgbV9wb3NpdGlvbjsKKyAg
ICAgICAgU3RyaW5nQnVpbGRlciBtX2J1aWxkZXI7CisgICAgfTsKKworICAgIHZvaWQgU3RyaXBD
b21tZW50czo6cHJvY2VzcyhVQ2hhciBjKQorICAgIHsKKyAgICAgICAgaWYgKGlzTmV3bGluZShj
KSkgeworICAgICAgICAgICAgLy8gTm8gbWF0dGVyIHdoYXQgc3RhdGUgd2UgYXJlIGluLCBwYXNz
IHRocm91Z2ggbmV3bGluZXMKKyAgICAgICAgICAgIC8vIHNvIHdlIHByZXNlcnZlIGxpbmUgbnVt
YmVycy4KKyAgICAgICAgICAgIGVtaXQoYyk7CisKKyAgICAgICAgICAgIGlmIChtX3BhcnNlU3Rh
dGUgIT0gSW5NdWx0aUxpbmVDb21tZW50KQorICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9
IEJlZ2lubmluZ09mTGluZTsKKworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgVUNoYXIgdGVtcCA9IDA7CisgICAgICAgIHN3aXRjaCAobV9wYXJzZVN0YXRlKSB7Cisg
ICAgICAgIGNhc2UgQmVnaW5uaW5nT2ZMaW5lOgorICAgICAgICAgICAgaWYgKFdURjo6aXNBU0NJ
SVNwYWNlKGMpKSB7CisgICAgICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGMgPT0gJyMnKSB7CisgICAg
ICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU7CisgICAg
ICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gVHJhbnNpdGlvbiB0byBub3JtYWwgc3RhdGUgYW5kIHJlLWhh
bmRsZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7
CisgICAgICAgICAgICBwcm9jZXNzKGMpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBNaWRkbGVPZkxpbmU6CisgICAgICAgICAgICBpZiAoYyA9PSAnLycgJiYgcGVlayh0ZW1w
KSkgeworICAgICAgICAgICAgICAgIGlmICh0ZW1wID09ICcvJykgeworICAgICAgICAgICAgICAg
ICAgICBtX3BhcnNlU3RhdGUgPSBJblNpbmdsZUxpbmVDb21tZW50OworICAgICAgICAgICAgICAg
ICAgICBlbWl0KCcgJyk7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UoKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
aWYgKHRlbXAgPT0gJyonKSB7CisgICAgICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IElu
TXVsdGlMaW5lQ29tbWVudDsKKyAgICAgICAgICAgICAgICAgICAgLy8gRW1pdCB0aGUgY29tbWVu
dCBzdGFydCBpbiBjYXNlIHRoZSB1c2VyIGhhcworICAgICAgICAgICAgICAgICAgICAvLyBhbiB1
bmNsb3NlZCBjb21tZW50IGFuZCB3ZSB3YW50IHRvIGxhdGVyCisgICAgICAgICAgICAgICAgICAg
IC8vIHNpZ25hbCBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICAgICAgZW1pdCgnLycpOworICAg
ICAgICAgICAgICAgICAgICBlbWl0KCcqJyk7CisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2Uo
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBlbWl0KGMpOworICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBJblByZXByb2Nlc3NvckRpcmVjdGl2ZToKKyAgICAgICAgICAgIC8vIE5vIG1h
dHRlciB3aGF0IHRoZSBjaGFyYWN0ZXIgaXMsIGp1c3QgcGFzcyBpdAorICAgICAgICAgICAgLy8g
dGhyb3VnaC4gRG8gbm90IHBhcnNlIGNvbW1lbnRzIGluIHRoaXMgc3RhdGUuIFRoaXMKKyAgICAg
ICAgICAgIC8vIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQgdGhpbmcgdG8gZG8gbG9uZyB0ZXJtLCBi
dXQgaXQKKyAgICAgICAgICAgIC8vIHNob3VsZCBoYW5kbGUgdGhlICNlcnJvciBwcmVwcm9jZXNz
b3IgZGlyZWN0aXZlLgorICAgICAgICAgICAgZW1pdChjKTsKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgICAgIGNhc2UgSW5TaW5nbGVMaW5lQ29tbWVudDoKKyAgICAgICAgICAgIC8vIFRoZSBu
ZXdsaW5lIGNvZGUgYXQgdGhlIHRvcCBvZiB0aGlzIGZ1bmN0aW9uIHRha2VzIGNhcmUKKyAgICAg
ICAgICAgIC8vIG9mIHJlc2V0dGluZyBvdXIgc3RhdGUgd2hlbiB3ZSBnZXQgb3V0IG9mIHRoZQor
ICAgICAgICAgICAgLy8gc2luZ2xlLWxpbmUgY29tbWVudC4gU3dhbGxvdyBhbGwgb3RoZXIgY2hh
cmFjdGVycy4KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSW5NdWx0aUxpbmVD
b21tZW50OgorICAgICAgICAgICAgaWYgKGMgPT0gJyonICYmIHBlZWsodGVtcCkgJiYgdGVtcCA9
PSAnLycpIHsKKyAgICAgICAgICAgICAgICBlbWl0KCcqJyk7CisgICAgICAgICAgICAgICAgZW1p
dCgnLycpOworICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IE1pZGRsZU9mTGluZTsKKyAg
ICAgICAgICAgICAgICBhZHZhbmNlKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIC8vIFN3YWxsb3cgYWxsIG90aGVyIGNoYXJhY3RlcnMuIFVu
Y2xlYXIgd2hldGhlciB3ZSBtYXkKKyAgICAgICAgICAgIC8vIHdhbnQgb3IgbmVlZCB0byBqdXN0
IGVtaXQgYSBzcGFjZSBwZXIgY2hhcmFjdGVyIHRvIHRyeQorICAgICAgICAgICAgLy8gdG8gcHJl
c2VydmUgY29sdW1uIG51bWJlcnMgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorfSAvLyBuYW1lc3BhY2UgYW5vbnltb3VzCisKK2Ns
YXNzIFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjayA6IHB1YmxpYyBHcmFwaGljc0Nv
bnRleHQzRDo6Q29udGV4dExvc3RDYWxsYmFjayB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0TG9zdENhbGxi
YWNrKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY2IpIDogbV9jb250ZXh0KGNiKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgb25Db250ZXh0TG9zdCgpIG92ZXJyaWRlIHsgbV9jb250ZXh0LT5mb3JjZUxv
c3RDb250ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6UmVhbExvc3RDb250ZXh0KTsgfQorICAg
IHZpcnR1YWwgfldlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RDYWxsYmFjaygpIHt9Citwcml2YXRl
OgorICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OworfTsKKworY2xhc3MgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhpY3ND
b250ZXh0M0Q6OkVycm9yTWVzc2FnZUNhbGxiYWNrIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRFcnJvck1l
c3NhZ2VDYWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikg
eyB9CisgICAgdmlydHVhbCB2b2lkIG9uRXJyb3JNZXNzYWdlKGNvbnN0IFN0cmluZyYgbWVzc2Fn
ZSwgR0MzRGludCkgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChtX2NvbnRleHQtPm1fc3lu
dGhlc2l6ZWRFcnJvcnNUb0NvbnNvbGUpCisgICAgICAgICAgICBtX2NvbnRleHQtPnByaW50R0xF
cnJvclRvQ29uc29sZShtZXNzYWdlKTsKKyAgICB9CisgICAgdmlydHVhbCB+V2ViR0xSZW5kZXJp
bmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJhY2soKSB7IH0KK3ByaXZhdGU6CisgICAgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBtX2NvbnRleHQ7Cit9OworCitzdGQ6OnVuaXF1ZV9wdHI8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzLCBXZWJHTENvbnRleHRBdHRyaWJ1dGVzKiBhdHRycykKK3sKKyAgICBE
b2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMtPmRvY3VtZW50KCk7CisgICAgRnJhbWUqIGZyYW1l
ID0gZG9jdW1lbnQuZnJhbWUoKTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKworICAgIC8vIFRoZSBGcmFtZUxvYWRlckNsaWVudCBtaWdodCBibG9jayBjcmVhdGlv
biBvZiBhIG5ldyBXZWJHTCBjb250ZXh0IGRlc3BpdGUgdGhlIHBhZ2Ugc2V0dGluZ3M7IGluCisg
ICAgLy8gcGFydGljdWxhciwgaWYgV2ViR0wgY29udGV4dHMgd2VyZSBsb3N0IG9uZSBvciBtb3Jl
IHRpbWVzIHZpYSB0aGUgR0xfQVJCX3JvYnVzdG5lc3MgZXh0ZW5zaW9uLgorICAgIGlmICghZnJh
bWUtPmxvYWRlcigpLmNsaWVudCgpLmFsbG93V2ViR0woZnJhbWUtPnNldHRpbmdzKCkud2ViR0xF
bmFibGVkKCkpKSB7CisgICAgICAgIGNhbnZhcy0+ZGlzcGF0Y2hFdmVudChXZWJHTENvbnRleHRF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS53ZWJnbGNvbnRleHRjcmVhdGlvbmVycm9yRXZlbnQs
IGZhbHNlLCB0cnVlLCAiV2ViIHBhZ2Ugd2FzIG5vdCBhbGxvd2VkIHRvIGNyZWF0ZSBhIFdlYkdM
IGNvbnRleHQuIikpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBib29s
IGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSBmYWxzZTsKKyAgICBEb2N1bWVudCYgdG9wRG9j
dW1lbnQgPSBkb2N1bWVudC50b3BEb2N1bWVudCgpOworICAgIFBhZ2UqIHBhZ2UgPSB0b3BEb2N1
bWVudC5wYWdlKCk7CisgICAgaWYgKHBhZ2UgJiYgIXRvcERvY3VtZW50LnVybCgpLmlzTG9jYWxG
aWxlKCkpIHsKKyAgICAgICAgV2ViR0xMb2FkUG9saWN5IHBvbGljeSA9IHBhZ2UtPm1haW5GcmFt
ZSgpLmxvYWRlcigpLmNsaWVudCgpLndlYkdMUG9saWN5Rm9yVVJMKHRvcERvY3VtZW50LnVybCgp
KTsKKworICAgICAgICBpZiAocG9saWN5ID09IFdlYkdMQmxvY2tDcmVhdGlvbikgeworICAgICAg
ICAgICAgTE9HKFdlYkdMLCAiVGhlIHBvbGljeSBmb3IgdGhpcyBVUkwgKCVzKSBpcyB0byBibG9j
ayBXZWJHTC4iLCB0b3BEb2N1bWVudC51cmwoKS5ob3N0KCkudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwb2xpY3kg
PT0gV2ViR0xQZW5kaW5nQ3JlYXRpb24pIHsKKyAgICAgICAgICAgIExPRyhXZWJHTCwgIldlYkdM
IHBvbGljeSBpcyBwZW5kaW5nLiBNYXkgbmVlZCB0byBiZSByZXNvbHZlZCBsYXRlci4iKTsKKyAg
ICAgICAgICAgIGlzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gPSB0cnVlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IGF0
dHJzID8gYXR0cnMtPmF0dHJpYnV0ZXMoKSA6IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVz
KCk7CisKKyAgICBpZiAoYXR0cmlidXRlcy5hbnRpYWxpYXMpIHsKKyAgICAgICAgaWYgKCFmcmFt
ZS0+c2V0dGluZ3MoKS5vcGVuR0xNdWx0aXNhbXBsaW5nRW5hYmxlZCgpKQorICAgICAgICAgICAg
YXR0cmlidXRlcy5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICB9CisKKyAgICBhdHRyaWJ1dGVzLm5v
RXh0ZW5zaW9ucyA9IHRydWU7CisgICAgYXR0cmlidXRlcy5zaGFyZVJlc291cmNlcyA9IGZhbHNl
OworICAgIGF0dHJpYnV0ZXMucHJlZmVyRGlzY3JldGVHUFUgPSB0cnVlOworCisgICAgaWYgKGZy
YW1lLT5zZXR0aW5ncygpLmZvcmNlU29mdHdhcmVXZWJHTFJlbmRlcmluZygpKQorICAgICAgICBh
dHRyaWJ1dGVzLmZvcmNlU29mdHdhcmVSZW5kZXJlciA9IHRydWU7CisKKyAgICBpZiAocGFnZSkK
KyAgICAgICAgYXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvID0gcGFnZS0+ZGV2aWNlU2NhbGVG
YWN0b3IoKTsKKworICAgIGlmIChpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uKSB7CisgICAgICAg
IExPRyhXZWJHTCwgIkNyZWF0ZSBhIFdlYkdMIGNvbnRleHQgdGhhdCBsb29rcyByZWFsLCBidXQg
d2lsbCByZXF1aXJlIGEgcG9saWN5IHJlc29sdXRpb24gaWYgdXNlZC4iKTsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFdlYkdMUmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcg
V2ViR0xSZW5kZXJpbmdDb250ZXh0KGNhbnZhcywgYXR0cmlidXRlcykpOworICAgICAgICByZW5k
ZXJpbmdDb250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKKyAgICAgICAgcmV0dXJuIHJlbmRlcmlu
Z0NvbnRleHQ7CisgICAgfQorCisgICAgSG9zdFdpbmRvdyogaG9zdFdpbmRvdyA9IGRvY3VtZW50
LnZpZXcoKS0+cm9vdCgpLT5ob3N0V2luZG93KCk7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0cmlidXRlcywgaG9zdFdp
bmRvdykpOworCisgICAgaWYgKCFjb250ZXh0IHx8ICFjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKSkgeworICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250ZXh0RXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2ZW50LCBmYWxz
ZSwgdHJ1ZSwgIkNvdWxkIG5vdCBjcmVhdGUgYSBXZWJHTCBjb250ZXh0LiIpKTsKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0g
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOworICAgIGlmIChleHRlbnNpb25zLT5zdXBwb3J0cygi
R0xfRVhUX2RlYnVnX21hcmtlciIpKQorICAgICAgICBleHRlbnNpb25zLT5wdXNoR3JvdXBNYXJr
ZXJFWFQoIldlYkdMUmVuZGVyaW5nQ29udGV4dCIpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFdl
YkdMUmVuZGVyaW5nQ29udGV4dD4gcmVuZGVyaW5nQ29udGV4dChuZXcgV2ViR0xSZW5kZXJpbmdD
b250ZXh0KGNhbnZhcywgY29udGV4dCwgYXR0cmlidXRlcykpOworICAgIHJlbmRlcmluZ0NvbnRl
eHQtPnN1c3BlbmRJZk5lZWRlZCgpOworCisgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQ7Cit9
CisKK1dlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52
YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0
dHJpYnV0ZXMpCisgICAgOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0KHBhc3NlZENhbnZhcykKKyAg
ICAsIEFjdGl2ZURPTU9iamVjdCgmcGFzc2VkQ2FudmFzLT5kb2N1bWVudCgpKQorICAgICwgbV9j
b250ZXh0KDApCisgICAgLCBtX2RyYXdpbmdCdWZmZXIoMCkKKyAgICAsIG1fZGlzcGF0Y2hDb250
ZXh0TG9zdEV2ZW50VGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc3BhdGNo
Q29udGV4dExvc3RFdmVudCkKKyAgICAsIG1fcmVzdG9yZUFsbG93ZWQoZmFsc2UpCisgICAgLCBt
X3Jlc3RvcmVUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWF5YmVSZXN0b3Jl
Q29udGV4dCkKKyAgICAsIG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZSgwKQorICAgICwgbV9jb250ZXh0
TG9zdChmYWxzZSkKKyAgICAsIG1fY29udGV4dExvc3RNb2RlKFN5bnRoZXRpY0xvc3RDb250ZXh0
KQorICAgICwgbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3N5bnRoZXNpemVkRXJy
b3JzVG9Db25zb2xlKHRydWUpCisgICAgLCBtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCht
YXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGUpCisgICAgLCBtX2lzUGVuZGluZ1BvbGljeVJlc29s
dXRpb24odHJ1ZSkKKyAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxzZSkK
K3sKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQoSFRN
TENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCwKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVz
KQorICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMpCisgICAgLCBBY3Rp
dmVET01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKKyAgICAsIG1fY29udGV4dChj
b250ZXh0KQorICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCisgICAgLCBtX2Rpc3BhdGNoQ29udGV4
dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNwYXRjaENv
bnRleHRMb3N0RXZlbnQpCisgICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQorICAgICwgbV9y
ZXN0b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVzdG9yZUNv
bnRleHQpCisgICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoNCkKKyAgICAsIG1fY29udGV4dExv
c3QoZmFsc2UpCisgICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29udGV4dCkK
KyAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQorICAgICwgbV9zeW50aGVzaXplZEVycm9y
c1RvQ29uc29sZSh0cnVlKQorICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQobWF4
R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlKQorICAgICwgbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uKGZhbHNlKQorICAgICwgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uKGZhbHNlKQor
eworICAgIEFTU0VSVChtX2NvbnRleHQpOworICAgIG1fY29udGV4dEdyb3VwID0gV2ViR0xDb250
ZXh0R3JvdXA6OmNyZWF0ZSgpOworICAgIG1fY29udGV4dEdyb3VwLT5hZGRDb250ZXh0KHRoaXMp
OworCisgICAgbV9tYXhWaWV3cG9ydERpbXNbMF0gPSBtX21heFZpZXdwb3J0RGltc1sxXSA9IDA7
CisgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQ
T1JUX0RJTVMsIG1fbWF4Vmlld3BvcnREaW1zKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworCisgICAgc2V0dXBGbGFncygpOwor
ICAgIGluaXRpYWxpemVOZXdDb250ZXh0KCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojppbml0aWFsaXplTmV3Q29udGV4dCgpCit7CisgICAgQVNTRVJUKCFtX2NvbnRleHRMb3N0
KTsKKyAgICBtX25lZWRzVXBkYXRlID0gdHJ1ZTsKKyAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0g
ZmFsc2U7CisgICAgbV9hY3RpdmVUZXh0dXJlVW5pdCA9IDA7CisgICAgbV9wYWNrQWxpZ25tZW50
ID0gNDsKKyAgICBtX3VucGFja0FsaWdubWVudCA9IDQ7CisgICAgbV91bnBhY2tGbGlwWSA9IGZh
bHNlOworICAgIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSA9IGZhbHNlOworICAgIG1fdW5wYWNr
Q29sb3JzcGFjZUNvbnZlcnNpb24gPSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxU
X1dFQkdMOworICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IDA7CisgICAgbV9jdXJyZW50UHJvZ3Jh
bSA9IDA7CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmcgPSAwOworICAgIG1fcmVuZGVyYnVmZmVy
QmluZGluZyA9IDA7CisgICAgbV9kZXB0aE1hc2sgPSB0cnVlOworICAgIG1fc3RlbmNpbEVuYWJs
ZWQgPSBmYWxzZTsKKyAgICBtX3N0ZW5jaWxNYXNrID0gMHhGRkZGRkZGRjsKKyAgICBtX3N0ZW5j
aWxNYXNrQmFjayA9IDB4RkZGRkZGRkY7CisgICAgbV9zdGVuY2lsRnVuY1JlZiA9IDA7CisgICAg
bV9zdGVuY2lsRnVuY1JlZkJhY2sgPSAwOworICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gMHhGRkZG
RkZGRjsKKyAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSAweEZGRkZGRkZGOworICAgIG1fbGF5
ZXJDbGVhcmVkID0gZmFsc2U7CisgICAgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQgPSBt
YXhHTEVycm9yc0FsbG93ZWRUb0NvbnNvbGU7CisgICAgCisgICAgbV9jbGVhckNvbG9yWzBdID0g
bV9jbGVhckNvbG9yWzFdID0gbV9jbGVhckNvbG9yWzJdID0gbV9jbGVhckNvbG9yWzNdID0gMDsK
KyAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7CisgICAgbV9jbGVhckRlcHRoID0gMTsKKyAg
ICBtX2NsZWFyU3RlbmNpbCA9IDA7CisgICAgbV9jb2xvck1hc2tbMF0gPSBtX2NvbG9yTWFza1sx
XSA9IG1fY29sb3JNYXNrWzJdID0gbV9jb2xvck1hc2tbM10gPSB0cnVlOworCisgICAgR0MzRGlu
dCBudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzID0gMDsKKyAgICBtX2NvbnRleHQtPmdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
UywgJm51bUNvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOworICAgIG1fdGV4dHVyZVVuaXRzLmNs
ZWFyKCk7CisgICAgbV90ZXh0dXJlVW5pdHMucmVzaXplKG51bUNvbWJpbmVkVGV4dHVyZUltYWdl
VW5pdHMpOworCisgICAgR0MzRGludCBudW1WZXJ0ZXhBdHRyaWJzID0gMDsKKyAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX0FUVFJJQlMsICZu
dW1WZXJ0ZXhBdHRyaWJzKTsKKyAgICBtX21heFZlcnRleEF0dHJpYnMgPSBudW1WZXJ0ZXhBdHRy
aWJzOworICAgIAorICAgIG1fbWF4VGV4dHVyZVNpemUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkUsICZtX21heFRleHR1
cmVTaXplKTsKKyAgICBtX21heFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVyZTo6Y29tcHV0ZUxl
dmVsQ291bnQobV9tYXhUZXh0dXJlU2l6ZSwgbV9tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9tYXhD
dWJlTWFwVGV4dHVyZVNpemUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUsICZtX21heEN1YmVNYXBUZXh0
dXJlU2l6ZSk7CisgICAgbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsID0gV2ViR0xUZXh0dXJlOjpj
b21wdXRlTGV2ZWxDb3VudChtX21heEN1YmVNYXBUZXh0dXJlU2l6ZSwgbV9tYXhDdWJlTWFwVGV4
dHVyZVNpemUpOworICAgIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSA9IDA7CisgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFLCAm
bV9tYXhSZW5kZXJidWZmZXJTaXplKTsKKworICAgIC8vIFRoZXNlIHR3byB2YWx1ZXMgZnJvbSBF
WFRfZHJhd19idWZmZXJzIGFyZSBsYXppbHkgcXVlcmllZC4KKyAgICBtX21heERyYXdCdWZmZXJz
ID0gMDsKKyAgICBtX21heENvbG9yQXR0YWNobWVudHMgPSAwOworCisgICAgbV9iYWNrRHJhd0J1
ZmZlciA9IEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOworICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJl
cXVpcmVtZW50c0NoZWNrZWQgPSBmYWxzZTsKKyAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0g
ZmFsc2U7CisKKyAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IFdlYkdMVmVydGV4QXJy
YXlPYmplY3RPRVM6OmNyZWF0ZSh0aGlzLCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWYW9U
eXBlRGVmYXVsdCk7CisgICAgYWRkQ29udGV4dE9iamVjdChtX2RlZmF1bHRWZXJ0ZXhBcnJheU9i
amVjdC5nZXQoKSk7CisgICAgbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0ID0gbV9kZWZhdWx0VmVy
dGV4QXJyYXlPYmplY3Q7CisgICAgCisgICAgbV92ZXJ0ZXhBdHRyaWJWYWx1ZS5yZXNpemUobV9t
YXhWZXJ0ZXhBdHRyaWJzKTsKKworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAg
ICAgY3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCk7CisgICAgaWYgKCFpc0dMRVMyQ29t
cGxpYW50KCkpCisgICAgICAgIGluaXRWZXJ0ZXhBdHRyaWIwKCk7CisKKyAgICBJbnRTaXplIGNh
bnZhc1NpemUgPSBjbGFtcGVkQ2FudmFzU2l6ZSgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoY2FudmFzU2l6ZSk7CisKKyAgICBtX2Nv
bnRleHQtPnJlc2hhcGUoY2FudmFzU2l6ZS53aWR0aCgpLCBjYW52YXNTaXplLmhlaWdodCgpKTsK
KyAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFz
U2l6ZS5oZWlnaHQoKSk7CisgICAgbV9jb250ZXh0LT5zY2lzc29yKDAsIDAsIGNhbnZhc1NpemUu
d2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQoKSk7CisKKyAgICBtX2NvbnRleHQtPnNldENvbnRl
eHRMb3N0Q2FsbGJhY2soc3RkOjptYWtlX3VuaXF1ZTxXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0
Q2FsbGJhY2s+KHRoaXMpKTsKKyAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxiYWNr
KHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0RXJyb3JNZXNzYWdlQ2FsbGJh
Y2s+KHRoaXMpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNldHVwRmxhZ3Mo
KQoreworICAgIEFTU0VSVChtX2NvbnRleHQpOworCisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBjYW52
YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCisgICAgICAgIG1fc3ludGhlc2l6ZWRFcnJvcnNUb0Nv
bnNvbGUgPSBwYWdlLT5zZXR0aW5ncygpLndlYkdMRXJyb3JzVG9Db25zb2xlRW5hYmxlZCgpOwor
CisgICAgbV9pc0dMRVMyQ29tcGxpYW50ID0gbV9jb250ZXh0LT5pc0dMRVMyQ29tcGxpYW50KCk7
CisgICAgbV9pc0Vycm9yR2VuZXJhdGVkT25PdXRPZkJvdW5kc0FjY2Vzc2VzID0gbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfQ0hST01JVU1fc3RyaWN0X2F0dHJpYnMi
KTsKKyAgICBtX2lzUmVzb3VyY2VTYWZlID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmlz
RW5hYmxlZCgiR0xfQ0hST01JVU1fcmVzb3VyY2Vfc2FmZSIpOworICAgIGlmIChtX2lzR0xFUzJD
b21wbGlhbnQpIHsKKyAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfdGV4dHVyZV9ucG90Iik7CisgICAgICAg
IG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
aXNFbmFibGVkKCJHTF9PRVNfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBtX2lzR0xFUzJOUE9UU3RyaWN0ID0gIW1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5pc0VuYWJsZWQoIkdMX0FSQl90ZXh0dXJlX25vbl9wb3dlcl9vZl90d28iKTsKKyAgICAgICAg
bV9pc0RlcHRoU3RlbmNpbFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5p
c0VuYWJsZWQoIkdMX0VYVF9wYWNrZWRfZGVwdGhfc3RlbmNpbCIpOworICAgIH0KKyAgICBtX2lz
Um9idXN0bmVzc0VYVFN1cHBvcnRlZCA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0Vu
YWJsZWQoIkdMX0VYVF9yb2J1c3RuZXNzIik7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjphbGxvd1ByaXZpbGVnZWRFeHRlbnNpb25zKCkgY29uc3QKK3sKKyAgICBpZiAoUGFnZSog
cGFnZSA9IGNhbnZhcygpLT5kb2N1bWVudCgpLnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIHBhZ2Ut
PnNldHRpbmdzKCkucHJpdmlsZWdlZFdlYkdMRXh0ZW5zaW9uc0VuYWJsZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphZGRDb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdChHQzNEZW51bSBmb3JtYXQpCit7CisgICAgaWYgKCFtX2NvbXByZXNzZWRU
ZXh0dXJlRm9ybWF0cy5jb250YWlucyhmb3JtYXQpKQorICAgICAgICBtX2NvbXByZXNzZWRUZXh0
dXJlRm9ybWF0cy5hcHBlbmQoZm9ybWF0KTsKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp+
V2ViR0xSZW5kZXJpbmdDb250ZXh0KCkKK3sKKyAgICAvLyBSZW1vdmUgYWxsIHJlZmVyZW5jZXMg
dG8gV2ViR0xPYmplY3RzIHNvIGlmIHRoZXkgYXJlIHRoZSBsYXN0IHJlZmVyZW5jZQorICAgIC8v
IHRoZXkgd2lsbCBiZSBmcmVlZCBiZWZvcmUgdGhlIGxhc3QgY29udGV4dCBpcyByZW1vdmVkIGZy
b20gdGhlIGNvbnRleHQgZ3JvdXAuCisgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gbnVsbHB0cjsK
KyAgICBtX2RlZmF1bHRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7CisgICAgbV9ib3VuZFZl
cnRleEFycmF5T2JqZWN0ID0gbnVsbHB0cjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXIgPSBu
dWxscHRyOworICAgIG1fY3VycmVudFByb2dyYW0gPSBudWxscHRyOworICAgIG1fZnJhbWVidWZm
ZXJCaW5kaW5nID0gbnVsbHB0cjsKKyAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcgPSBudWxscHRy
OworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsr
aSkgeworICAgICAgICBtX3RleHR1cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nID0gbnVsbHB0
cjsKKyAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gbnVs
bHB0cjsKKyAgICB9CisKKyAgICBtX2JsYWNrVGV4dHVyZTJEID0gbnVsbHB0cjsKKyAgICBtX2Js
YWNrVGV4dHVyZUN1YmVNYXAgPSBudWxscHRyOworCisgICAgaWYgKCFtX2lzUGVuZGluZ1BvbGlj
eVJlc29sdXRpb24pIHsKKyAgICAgICAgZGV0YWNoQW5kUmVtb3ZlQWxsT2JqZWN0cygpOworICAg
ICAgICBkZXN0cm95R3JhcGhpY3NDb250ZXh0M0QoKTsKKyAgICAgICAgbV9jb250ZXh0R3JvdXAt
PnJlbW92ZUNvbnRleHQodGhpcyk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQ
b2xpY3lSZXNvbHV0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgZHJhd2luZyBi
dWZmZXIgaG9sZHMgYSBjb250ZXh0IHJlZmVyZW5jZS4gSXQgbXVzdCBhbHNvIGJlIGRlc3Ryb3ll
ZAorICAgIC8vIGluIG9yZGVyIGZvciB0aGUgY29udGV4dCB0byBiZSByZWxlYXNlZC4KKyAgICBp
ZiAobV9kcmF3aW5nQnVmZmVyKQorICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xlYXIoKTsKKwor
ICAgIGlmIChtX2NvbnRleHQpIHsKKyAgICAgICAgbV9jb250ZXh0LT5zZXRDb250ZXh0TG9zdENh
bGxiYWNrKG51bGxwdHIpOworICAgICAgICBtX2NvbnRleHQtPnNldEVycm9yTWVzc2FnZUNhbGxi
YWNrKG51bGxwdHIpOworICAgICAgICBtX2NvbnRleHQuY2xlYXIoKTsKKyAgICB9Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQoKQoreworICAgIGlm
IChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0
LT5tYXJrQ29udGV4dENoYW5nZWQoKTsKKworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+bWFya0NvbnRlbnRzQ2hhbmdlZCgpOworCisgICAgbV9sYXll
ckNsZWFyZWQgPSBmYWxzZTsKKyAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygpLT5y
ZW5kZXJCb3goKTsKKyAgICBpZiAoaXNBY2NlbGVyYXRlZCgpICYmIHJlbmRlckJveCAmJiByZW5k
ZXJCb3gtPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkgeworICAgICAgICBtX21hcmtlZENh
bnZhc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsK
KyAgICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXNDaGFuZ2VkKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkpIHsKKyAgICAgICAgICAg
IG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOworICAgICAgICAgICAgY2FudmFzKCktPmRpZERy
YXcoRmxvYXRSZWN0KEZsb2F0UG9pbnQoMCwgMCksIGNsYW1wZWRDYW52YXNTaXplKCkpKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNsZWFySWZD
b21wb3NpdGVkKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghbV9jb250ZXh0LT5s
YXllckNvbXBvc2l0ZWQoKSB8fCBtX2xheWVyQ2xlYXJlZAorICAgICAgICB8fCBtX2F0dHJpYnV0
ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyIHx8IChtYXNrICYmIG1fZnJhbWVidWZmZXJCaW5kaW5n
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJp
YnV0ZXM+IGNvbnRleHRBdHRyaWJ1dGVzID0gZ2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKworICAg
IC8vIERldGVybWluZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGNvbWJpbmUgdGhlIGNsZWFyIHRoZSB1
c2VyIGFza2VkIGZvciBhbmQgdGhpcyBjbGVhci4KKyAgICBib29sIGNvbWJpbmVkQ2xlYXIgPSBt
YXNrICYmICFtX3NjaXNzb3JFbmFibGVkOworCisgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBo
aWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOworICAgIGlmIChjb21iaW5lZENsZWFyICYmICht
YXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpKQorICAgICAgICBtX2Nv
bnRleHQtPmNsZWFyQ29sb3IobV9jb2xvck1hc2tbMF0gPyBtX2NsZWFyQ29sb3JbMF0gOiAwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMV0gPyBtX2NsZWFyQ29s
b3JbMV0gOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9jb2xvck1hc2tbMl0g
PyBtX2NsZWFyQ29sb3JbMl0gOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
b2xvck1hc2tbM10gPyBtX2NsZWFyQ29sb3JbM10gOiAwKTsKKyAgICBlbHNlCisgICAgICAgIG1f
Y29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKKyAgICBtX2NvbnRleHQtPmNvbG9yTWFz
ayh0cnVlLCB0cnVlLCB0cnVlLCB0cnVlKTsKKyAgICBHQzNEYml0ZmllbGQgY2xlYXJNYXNrID0g
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQ7CisgICAgaWYgKGNvbnRleHRBdHRy
aWJ1dGVzLT5kZXB0aCgpKSB7CisgICAgICAgIGlmICghY29tYmluZWRDbGVhciB8fCAhbV9kZXB0
aE1hc2sgfHwgIShtYXNrICYgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpKQor
ICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhckRlcHRoKDEuMGYpOworICAgICAgICBjbGVhck1h
c2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQ7CisgICAgICAgIG1fY29u
dGV4dC0+ZGVwdGhNYXNrKHRydWUpOworICAgIH0KKyAgICBpZiAoY29udGV4dEF0dHJpYnV0ZXMt
PnN0ZW5jaWwoKSkgeworICAgICAgICBpZiAoY29tYmluZWRDbGVhciAmJiAobWFzayAmIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKQorICAgICAgICAgICAgbV9jb250ZXh0
LT5jbGVhclN0ZW5jaWwobV9jbGVhclN0ZW5jaWwgJiBtX3N0ZW5jaWxNYXNrKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwoMCk7CisgICAgICAgIGNs
ZWFyTWFzayB8PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUOworICAgICAg
ICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoR3JhcGhpY3NDb250ZXh0M0Q6OkZST05U
LCAweEZGRkZGRkZGKTsKKyAgICB9CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAg
bV9kcmF3aW5nQnVmZmVyLT5jbGVhckZyYW1lYnVmZmVycyhjbGVhck1hc2spOworICAgIGVsc2Ug
eworICAgICAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwor
ICAgICAgICBtX2NvbnRleHQtPmNsZWFyKGNsZWFyTWFzayk7CisgICAgfQorCisgICAgcmVzdG9y
ZVN0YXRlQWZ0ZXJDbGVhcigpOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAg
ICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBvYmplY3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICBtX2xh
eWVyQ2xlYXJlZCA9IHRydWU7CisKKyAgICByZXR1cm4gY29tYmluZWRDbGVhcjsKK30KKwordm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKQoreworICAg
IC8vIFJlc3RvcmUgdGhlIHN0YXRlIHRoYXQgdGhlIGNvbnRleHQgc2V0LgorICAgIGlmIChtX3Nj
aXNzb3JFbmFibGVkKQorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQz
RDo6U0NJU1NPUl9URVNUKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IobV9jbGVhckNvbG9y
WzBdLCBtX2NsZWFyQ29sb3JbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xlYXJD
b2xvclsyXSwgbV9jbGVhckNvbG9yWzNdKTsKKyAgICBtX2NvbnRleHQtPmNvbG9yTWFzayhtX2Nv
bG9yTWFza1swXSwgbV9jb2xvck1hc2tbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgbV9j
b2xvck1hc2tbMl0sIG1fY29sb3JNYXNrWzNdKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgo
bV9jbGVhckRlcHRoKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyU3RlbmNpbChtX2NsZWFyU3RlbmNp
bCk7CisgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNE
OjpGUk9OVCwgbV9zdGVuY2lsTWFzayk7CisgICAgbV9jb250ZXh0LT5kZXB0aE1hc2sobV9kZXB0
aE1hc2spOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0xheWVyQ29tcG9z
aXRlZCgpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1fY29udGV4dC0+bWFya0xheWVyQ29tcG9zaXRlZCgpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGlmIChjYW52YXMoKS0+ZG9jdW1lbnQoKS5wcmludGluZygpKQorICAgICAgICBjYW52YXMoKS0+
Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7CisKKyAgICAvLyBVbnRpbCB0aGUgY2FudmFzIGlzIHdy
aXR0ZW4gdG8gYnkgdGhlIGFwcGxpY2F0aW9uLCB0aGUgY2xlYXIgdGhhdAorICAgIC8vIGhhcHBl
bmVkIGFmdGVyIGl0IHdhcyBjb21wb3NpdGVkIHNob3VsZCBiZSBpZ25vcmVkIGJ5IHRoZSBjb21w
b3NpdG9yLgorICAgIGlmIChtX2NvbnRleHQtPmxheWVyQ29tcG9zaXRlZCgpICYmICFtX2F0dHJp
YnV0ZXMucHJlc2VydmVEcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+cGFpbnRD
b21wb3NpdGVkUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSk7CisKKyAgICAgICAg
Y2FudmFzKCktPm1ha2VQcmVzZW50YXRpb25Db3B5KCk7CisgICAgfSBlbHNlCisgICAgICAgIGNh
bnZhcygpLT5jbGVhclByZXNlbnRhdGlvbkNvcHkoKTsKKyAgICBjbGVhcklmQ29tcG9zaXRlZCgp
OworCisgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5ICYmICFtX2xheWVyQ2xlYXJlZCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2FudmFzKCktPmNsZWFyQ29waWVkSW1hZ2UoKTsKKyAgICBt
X21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOworICAgIG1fY29udGV4dC0+cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoY2FudmFzKCktPmJ1ZmZlcigpLCBtX2RyYXdpbmdCdWZm
ZXIuZ2V0KCkpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyhtX2ZyYW1lYnVm
ZmVyQmluZGluZy5nZXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RyYXdpbmdC
dWZmZXItPmJpbmQoKTsKKyAgICB9Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkKK3sKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBjbGVhcklmQ29tcG9zaXRlZCgpOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCisgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+Y29tbWl0KCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1h
Z2VEYXRhID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YShtX2Ry
YXdpbmdCdWZmZXIuZ2V0KCkpOworCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG9iamVjdE9yWmVybyht
X2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gaW1hZ2VEYXRhOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gVGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIGJlY2F1c2UgYXQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0IGxldmVsIHdlIGRvbid0CisgICAgLy8ga25vdyBpZiB0aGUgdW5kZXJs
eWluZyBGQk8gdXNlcyB0ZXh0dXJlcyBvciByZW5kZXJidWZmZXJzLgorICAgIEdDM0RpbnQgbWF4
U2l6ZSA9IHN0ZDo6bWluKG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7
CisgICAgLy8gTGltaXQgZHJhd2luZyBidWZmZXIgc2l6ZSB0byA0ayB0byBhdm9pZCBtZW1vcnkg
ZXhoYXVzdGlvbi4KKyAgICBjb25zdCBpbnQgc2l6ZVVwcGVyTGltaXQgPSA0MDk2OworICAgIG1h
eFNpemUgPSBzdGQ6Om1pbihtYXhTaXplLCBzaXplVXBwZXJMaW1pdCk7CisgICAgR0MzRGludCBt
YXhXaWR0aCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzBdKTsKKyAgICBH
QzNEaW50IG1heEhlaWdodCA9IHN0ZDo6bWluKG1heFNpemUsIG1fbWF4Vmlld3BvcnREaW1zWzFd
KTsKKyAgICB3aWR0aCA9IGNsYW1wKHdpZHRoLCAxLCBtYXhXaWR0aCk7CisgICAgaGVpZ2h0ID0g
Y2xhbXAoaGVpZ2h0LCAxLCBtYXhIZWlnaHQpOworCisgICAgaWYgKG1fbmVlZHNVcGRhdGUpIHsK
KyAgICAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7Cisg
ICAgICAgIGlmIChyZW5kZXJCb3ggJiYgcmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0
aW5nKCkpCisgICAgICAgICAgICByZW5kZXJCb3gtPmNvbnRlbnRDaGFuZ2VkKENhbnZhc0NoYW5n
ZWQpOworICAgICAgICBtX25lZWRzVXBkYXRlID0gZmFsc2U7CisgICAgfQorCisgICAgLy8gV2Ug
ZG9uJ3QgaGF2ZSB0byBtYXJrIHRoZSBjYW52YXMgYXMgZGlydHksIHNpbmNlIHRoZSBuZXdseSBj
cmVhdGVkIGltYWdlIGJ1ZmZlciB3aWxsIGFsc28gc3RhcnQgb2ZmCisgICAgLy8gY2xlYXIgKGFu
ZCB0aGlzIG1hdGNoZXMgd2hhdCByZXNoYXBlIHdpbGwgZG8pLgorICAgIGlmIChtX2RyYXdpbmdC
dWZmZXIpIHsKKyAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKHdpZHRoLCBo
ZWlnaHQpKTsKKyAgICAgICAgcmVzdG9yZVN0YXRlQWZ0ZXJDbGVhcigpOworICAgIH0gZWxzZQor
ICAgICAgICBtX2NvbnRleHQtPnJlc2hhcGUod2lkdGgsIGhlaWdodCk7CisKKyAgICBtX2NvbnRl
eHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBvYmplY3RPclpl
cm8obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZy5n
ZXQoKSkpOworICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBvYmplY3RPclplcm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLmdldCgp
KSk7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQorICAgICAgbV9jb250ZXh0LT5iaW5k
RnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8o
bV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6ZHJhd2luZ0J1ZmZlcldpZHRoKCkgY29uc3QKK3sKKyAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQorICAgICAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyLT5zaXplKCkud2lkdGgoKTsKKwor
ICAgIHJldHVybiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkud2lkdGgo
KTsKK30KKworaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd2luZ0J1ZmZlckhlaWdodCgp
IGNvbnN0Cit7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAgcmV0dXJuIG1fZHJh
d2luZ0J1ZmZlci0+c2l6ZSgpLmhlaWdodCgpOworCisgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0
SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKK30KKwordW5zaWduZWQgaW50IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6c2l6ZUluQnl0ZXMoR0MzRGVudW0gdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCWVRFOgorICAgICAg
ICByZXR1cm4gc2l6ZW9mKEdDM0RieXRlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpV
TlNJR05FRF9CWVRFOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1Ynl0ZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRHNo
b3J0KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKKyAgICAg
ICAgcmV0dXJuIHNpemVvZihHQzNEdXNob3J0KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpJTlQ6CisgICAgICAgIHJldHVybiBzaXplb2YoR0MzRGludCk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0R1aW50
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgcmV0dXJuIHNp
emVvZihHQzNEZmxvYXQpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVRleHR1cmUo
R0MzRGVudW0gdGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47
CisgICAgaWYgKHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTAgPj0gbV90ZXh0
dXJlVW5pdHMuc2l6ZSgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJhY3RpdmVUZXh0dXJlIiwgInRleHR1cmUgdW5pdCBvdXQg
b2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2FjdGl2ZVRleHR1cmVV
bml0ID0gdGV4dHVyZSAtIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMDsKKyAgICBtX2NvbnRl
eHQtPmFjdGl2ZVRleHR1cmUodGV4dHVyZSk7CisKKyAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQor
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEFjdGl2ZVRleHR1cmVVbml0KHRleHR1cmUpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YXR0YWNoU2hhZGVyKFdlYkdMUHJvZ3Jh
bSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJhdHRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghcHJvZ3JhbS0+YXR0YWNoU2hhZGVyKHNoYWRlcikpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYXR0YWNo
U2hhZGVyIiwgInNoYWRlciBhdHRhY2htZW50IGFscmVhZHkgaGFzIHNoYWRlciIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YXR0YWNoU2hhZGVyKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgb2JqZWN0T3JaZXJvKHNoYWRlcikpOworICAgIHNoYWRlci0+b25BdHRhY2hl
ZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEF0dHJpYkxvY2F0aW9u
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAo
aXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJiaW5kQXR0
cmliTG9jYXRpb24iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRh
dGVMb2NhdGlvbkxlbmd0aCgiYmluZEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJl
dHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJiaW5kQXR0cmliTG9jYXRpb24iLCBuYW1l
KSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJyZXNlcnZlZCBwcmVmaXgiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAiYmluZEF0dHJpYkxvY2F0aW9uIiwgImluZGV4IG91dCBvZiByYW5nZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIG1fY29udGV4dC0+YmluZEF0dHJpYkxvY2F0aW9uKG9iamVjdE9y
WmVybyhwcm9ncmFtKSwgaW5kZXgsIG5hbWUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6Y2hlY2tPYmplY3RUb0JlQm91bmQoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJH
TE9iamVjdCogb2JqZWN0LCBib29sJiBkZWxldGVkKQoreworICAgIGRlbGV0ZWQgPSBmYWxzZTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKG9iamVjdCkgeworICAgICAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4
dEdyb3VwKCksIHRoaXMpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm9iamVjdCBub3Qg
ZnJvbSB0aGlzIGNvbnRleHQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICBkZWxldGVkID0gIW9iamVjdC0+b2JqZWN0KCk7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEJ1ZmZlcihHQzNE
ZW51bSB0YXJnZXQsIFdlYkdMQnVmZmVyKiBidWZmZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgYm9vbCBkZWxldGVkOworICAgIGlmICghY2hlY2tP
YmplY3RUb0JlQm91bmQoImJpbmRCdWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGRlbGV0ZWQpCisgICAgICAgIGJ1ZmZlciA9IDA7CisgICAgaWYgKGJ1
ZmZlciAmJiBidWZmZXItPmdldFRhcmdldCgpICYmIGJ1ZmZlci0+Z2V0VGFyZ2V0KCkgIT0gdGFy
Z2V0KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImJpbmRCdWZmZXIiLCAiYnVmZmVycyBjYW4gbm90IGJlIHVzZWQgd2l0
aCBtdWx0aXBsZSB0YXJnZXRzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRh
cmdldCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSKQorICAgICAgICBtX2JvdW5k
QXJyYXlCdWZmZXIgPSBidWZmZXI7CisgICAgZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUikKKyAgICAgICAgbV9ib3VuZFZlcnRleEFycmF5
T2JqZWN0LT5zZXRFbGVtZW50QXJyYXlCdWZmZXIoYnVmZmVyKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJp
bmRCdWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsK
KyAgICBpZiAoYnVmZmVyKQorICAgICAgICBidWZmZXItPnNldFRhcmdldCh0YXJnZXQpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgV2ViR0xGcmFtZWJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAoIWNoZWNrT2Jq
ZWN0VG9CZUJvdW5kKCJiaW5kRnJhbWVidWZmZXIiLCBidWZmZXIsIGRlbGV0ZWQpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKGRlbGV0ZWQpCisgICAgICAgIGJ1ZmZlciA9IDA7CisgICAgaWYg
KHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRGcmFt
ZWJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IG1fZnJhbWVidWZmZXJCaW5kaW5nID0gYnVmZmVyOworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIp
CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKG9iamVjdE9y
WmVybyhtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSkpOworICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgbV9kcmF3aW5nQnVmZmVyKSB7CisgICAgICAgIC8vIEluc3RlYWQgb2YgYmlu
ZGluZyBmYiAwLCBiaW5kIHRoZSBkcmF3aW5nIGJ1ZmZlci4KKyAgICAgICAgbV9kcmF3aW5nQnVm
ZmVyLT5iaW5kKCk7CisgICAgfSBlbHNlCisgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKHRhcmdldCwgb2JqZWN0T3JaZXJvKGJ1ZmZlcikpOworICAgIGlmIChidWZmZXIpCisgICAg
ICAgIGJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOworICAgIGFwcGx5U3RlbmNpbFRlc3Qo
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRSZW5kZXJidWZmZXIoR0Mz
RGVudW0gdGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogcmVuZGVyQnVmZmVyLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAg
ICBpZiAoIWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kUmVuZGVyYnVmZmVyIiwgcmVuZGVyQnVm
ZmVyLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVkKQorICAgICAg
ICByZW5kZXJCdWZmZXIgPSAwOworICAgIGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiYmluZFJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IHJl
bmRlckJ1ZmZlcjsKKyAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCBvYmpl
Y3RPclplcm8ocmVuZGVyQnVmZmVyKSk7CisgICAgaWYgKHJlbmRlckJ1ZmZlcikKKyAgICAgICAg
cmVuZGVyQnVmZmVyLT5zZXRIYXNFdmVyQmVlbkJvdW5kKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFdlYkdMVGV4dHVyZSog
dGV4dHVyZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBib29sIGRlbGV0ZWQ7CisgICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFRleHR1
cmUiLCB0ZXh0dXJlLCBkZWxldGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChkZWxldGVk
KQorICAgICAgICB0ZXh0dXJlID0gMDsKKyAgICBpZiAodGV4dHVyZSAmJiB0ZXh0dXJlLT5nZXRU
YXJnZXQoKSAmJiB0ZXh0dXJlLT5nZXRUYXJnZXQoKSAhPSB0YXJnZXQpIHsKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiYmlu
ZFRleHR1cmUiLCAidGV4dHVyZXMgY2FuIG5vdCBiZSB1c2VkIHdpdGggbXVsdGlwbGUgdGFyZ2V0
cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RpbnQgbWF4TGV2ZWwgPSAwOwor
ICAgIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQpIHsKKyAgICAg
ICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZyA9
IHRleHR1cmU7CisgICAgICAgIG1heExldmVsID0gbV9tYXhUZXh0dXJlTGV2ZWw7CisKKyAgICAg
ICAgaWYgKG1fZHJhd2luZ0J1ZmZlciAmJiAhbV9hY3RpdmVUZXh0dXJlVW5pdCkKKyAgICAgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4dHVyZTJEQmluZGluZyhvYmplY3RPclplcm8odGV4
dHVyZSkpOworCisgICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVApIHsKKyAgICAgICAgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJl
VW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nID0gdGV4dHVyZTsKKyAgICAgICAgbWF4TGV2ZWwg
PSBtX21heEN1YmVNYXBUZXh0dXJlTGV2ZWw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRUZXh0dXJl
IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb250
ZXh0LT5iaW5kVGV4dHVyZSh0YXJnZXQsIG9iamVjdE9yWmVybyh0ZXh0dXJlKSk7CisgICAgaWYg
KHRleHR1cmUpCisgICAgICAgIHRleHR1cmUtPnNldFRhcmdldCh0YXJnZXQsIG1heExldmVsKTsK
KworICAgIC8vIE5vdGU6IHByZXZpb3VzbHkgd2UgdXNlZCB0byBhdXRvbWF0aWNhbGx5IHNldCB0
aGUgVEVYVFVSRV9XUkFQX1IKKyAgICAvLyByZXBlYXQgbW9kZSB0byBDTEFNUF9UT19FREdFIGZv
ciBjdWJlIG1hcCB0ZXh0dXJlcywgYmVjYXVzZSBPcGVuR0wKKyAgICAvLyBFUyAyLjAgZG9lc24n
dCBleHBvc2UgdGhpcyBmbGFnIChhIGJ1ZyBpbiB0aGUgc3BlY2lmaWNhdGlvbikgYW5kCisgICAg
Ly8gb3RoZXJ3aXNlIHRoZSBhcHBsaWNhdGlvbiBoYXMgbm8gY29udHJvbCBvdmVyIHRoZSBzZWFt
cyBpbiB0aGlzCisgICAgLy8gZGltZW5zaW9uLiBIb3dldmVyLCBpdCBhcHBlYXJzIHRoYXQgc3Vw
cG9ydGluZyB0aGlzIHByb3Blcmx5IG9uIGFsbAorICAgIC8vIHBsYXRmb3JtcyBpcyBmYWlybHkg
aW52b2x2ZWQgKHdpbGwgcmVxdWlyZSBhIEhhc2hNYXAgZnJvbSB0ZXh0dXJlIElECisgICAgLy8g
aW4gYWxsIHBvcnRzKSwgYW5kIHdlIGhhdmUgbm90IGhhZCBhbnkgY29tcGxhaW50cywgc28gdGhl
IGxvZ2ljIGhhcworICAgIC8vIGJlZW4gcmVtb3ZlZC4KK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJsZW5kQ29sb3IoR0MzRGZsb2F0IHJlZCwgR0MzRGZsb2F0IGdyZWVuLCBHQzNE
ZmxvYXQgYmx1ZSwgR0MzRGZsb2F0IGFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPmJsZW5kQ29sb3IocmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
YmxlbmRFcXVhdGlvbihHQzNEZW51bSBtb2RlKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRFcXVhdGlvbiIsIG1vZGUp
KQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5ibGVuZEVxdWF0aW9uKG1vZGUpOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdD
M0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24oImJsZW5kRXF1YXRpb24i
LCBtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVuZEVxdWF0aW9uIiwgbW9k
ZUFscGhhKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+YmxlbmRFcXVhdGlvblNl
cGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51bSBkZmFjdG9yKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRGdW5jRmFj
dG9ycygiYmxlbmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCisgICAgICAgIHJldHVybjsKKyAg
ICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0Mz
RGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0QWxwaGEpCit7Cisg
ICAgLy8gTm90ZTogQWxwaGEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMg
UkdCLgorICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRG
dW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc3JjUkdCLCBkc3RSR0IpKQorICAgICAgICByZXR1cm47
CisgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0IsIGRzdFJHQiwgc3JjQWxw
aGEsIGRzdEFscGhhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRh
dGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZm
ZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1
c2FnZSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoc2l6ZSA8
IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKCFzaXplKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJzaXplID09IDAiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91
bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0
YShzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpKSkgeworICAgICAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRh
IiwgImludmFsaWQgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwor
ICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19jYXN0PEdDM0RzaXplaXB0
cj4oc2l6ZSksIHVzYWdlKTsKKyAgICBpZiAobV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0
aWNFcnJvckxpc3QoKSkgeworICAgICAgICAvLyBUaGUgYnVmZmVyRGF0YSBmdW5jdGlvbiBmYWls
ZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgaXQgdGhpbmtzIGl0
IGRvZXMuCisgICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVyRGF0YSgpOworICAgIH0K
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVj
KQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0
ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0LCB1c2FnZSk7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZm
ZXJEYXRhIiwgIm5vIGRhdGEiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlz
RXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1
ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwg
ImludmFsaWQgYnVmZmVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOworICAg
IG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVMZW5ndGgoKSwgZGF0YS0+
ZGF0YSgpLCB1c2FnZSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVk
LiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBk
b2VzLgorICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsKKyAgICB9Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwgRXhjZXB0aW9uQ29kZSYg
ZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlk
YXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJnZXQsIHVzYWdlKTsKKyAg
ICBpZiAoIWJ1ZmZlcikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghZGF0YSkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1
ZmZlckRhdGEiLCAibm8gZGF0YSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICgh
aXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIGlmICgh
YnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEi
LCAiaW52YWxpZCBidWZmZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCk7Cisg
ICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRh
LT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7CisgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9yc1Rv
U3ludGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEgZnVuY3Rp
b24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRhIGl0IHRo
aW5rcyBpdCBkb2VzLgorICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRhdGEoKTsK
KyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJTdWJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZmZXIqIGRhdGEsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFdlYkdMQnVmZmVyKiBidWZm
ZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJTdWJEYXRhIiwgdGFyZ2V0
LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOworICAgIGlmICghYnVmZmVyKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKG9mZnNldCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJTdWJEYXRhIiwg
Im9mZnNldCA8IDAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWRhdGEpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNj
ZXNzZXMoKSkgeworICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyU3ViRGF0YShz
dGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgeworICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJT
dWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJy
b3JMaXN0KCk7CisgICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgc3RhdGljX2Nh
c3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5kYXRhKCkp
OworICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7
CisgICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUg
YnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAg
ICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIGxvbmcg
bG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IHZhbGlkYXRlQnVm
ZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQsIEdyYXBoaWNzQ29udGV4
dDNEOjpTVEFUSUNfRFJBVyk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAob2Zmc2V0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0IDwgMCIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAg
ICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0YXRpY19jYXN0PEdDM0Rp
bnRwdHI+KG9mZnNldCksIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAib2Zmc2V0
IG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQor
CisgICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKTsKKyAgICBt
X2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihv
ZmZzZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOworICAgIGlm
IChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAg
IC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0
IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4KKyAgICAgICAgYnVmZmVy
LT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7CisgICAgfQorfQorCitHQzNEZW51bSBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQor
eworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7CisgICAgaWYgKHRhcmdldCAh
PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNoZWNrRnJhbWVidWZmZXJT
dGF0dXMiLCAiaW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01Q
TEVURTsKKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7
CisgICAgR0MzRGVudW0gcmVzdWx0ID0gbV9mcmFtZWJ1ZmZlckJpbmRpbmctPmNoZWNrU3RhdHVz
KCZyZWFzb24pOworICAgIGlmIChyZXN1bHQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSX0NPTVBMRVRFKSB7CisgICAgICAgIHByaW50R0xXYXJuaW5nVG9Db25zb2xlKCJjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgcmVzdWx0ID0gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKHRhcmdldCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNs
ZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAobWFzayAmIH4oR3JhcGhpY3NDb250ZXh0M0Q6
OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJVCB8
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY2xlYXIiLCAi
aW52YWxpZCBtYXNrIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29uc3QgY2hhciog
cmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOworICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4
dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04s
ICJjbGVhciIsIHJlYXNvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFjbGVh
cklmQ29tcG9zaXRlZChtYXNrKSkKKyAgICAgICAgbV9jb250ZXh0LT5jbGVhcihtYXNrKTsKKyAg
ICBtYXJrQ29udGV4dENoYW5nZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNEZmxvYXQgYiwgR0MzRGZs
b2F0IGEpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0
dXJuOworICAgIGlmIChzdGQ6OmlzbmFuKHIpKQorICAgICAgICByID0gMDsKKyAgICBpZiAoc3Rk
Ojppc25hbihnKSkKKyAgICAgICAgZyA9IDA7CisgICAgaWYgKHN0ZDo6aXNuYW4oYikpCisgICAg
ICAgIGIgPSAwOworICAgIGlmIChzdGQ6OmlzbmFuKGEpKQorICAgICAgICBhID0gMTsKKyAgICBt
X2NsZWFyQ29sb3JbMF0gPSByOworICAgIG1fY2xlYXJDb2xvclsxXSA9IGc7CisgICAgbV9jbGVh
ckNvbG9yWzJdID0gYjsKKyAgICBtX2NsZWFyQ29sb3JbM10gPSBhOworICAgIG1fY29udGV4dC0+
Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNsZWFyRGVwdGgoR0MzRGZsb2F0IGRlcHRoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NsZWFyRGVwdGggPSBkZXB0aDsKKyAg
ICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jbGVhclN0ZW5jaWwgPSBzOwor
ICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdD
M0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbG9yTWFza1swXSA9IHJl
ZDsKKyAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOworICAgIG1fY29sb3JNYXNrWzJdID0gYmx1
ZTsKKyAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOworICAgIG1fY29udGV4dC0+Y29sb3JNYXNr
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMp
Cit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVyIiwgc2hhZGVyKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRlcihvYmplY3RPclplcm8o
c2hhZGVyKSk7CisgICAgR0MzRGludCB2YWx1ZTsKKyAgICBtX2NvbnRleHQtPmdldFNoYWRlcml2
KG9iamVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6Q09NUElMRV9TVEFUVVMs
ICZ2YWx1ZSk7CisgICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyogZGF0YSkKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2
YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVs
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3Jt
YXQoaW50ZXJuYWxmb3JtYXQpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsICJpbnZhbGlk
IGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGJvcmRl
cikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBub3QgMCIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIGlmICghdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9u
cygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBp
bnRlcm5hbGZvcm1hdCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJl
c3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGlu
dGVybmFsZm9ybWF0LCBkYXRhKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViR0xUZXh0dXJl
KiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHRh
cmdldCwgdHJ1ZSk7CisgICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWlz
R0xFUzJOUE9UU3RyaWN0KCkpIHsKKyAgICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6
aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwg
ImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgfQorICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0
KCk7CisgICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgYm9yZGVyLCBkYXRhLT5ieXRl
TGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOworICAgIGlmIChtX2NvbnRleHQtPm1vdmVF
cnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7CisgICAgICAgIC8vIFRoZSBjb21wcmVzc2Vk
VGV4SW1hZ2UyRCBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIFdlYkdMVGV4dHVyZSBpdCBkb2Vz
bid0IGhhdmUgdGhlIGRhdGEgZm9yIHRoaXMgbGV2ZWwuCisgICAgICAgIHRleC0+bWFya0ludmFs
aWQodGFyZ2V0LCBsZXZlbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0ZXgtPnNl
dExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOworICAgIHRleC0+c2V0Q29tcHJlc3Nl
ZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29tcHJlc3NlZFRleFN1Yklt
YWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdD
M0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVs
KCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoZm9ybWF0KSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Y29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21w
cmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmlu
ZGluZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRydWUpOworICAgIGlmICgh
dGV4KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZm9ybWF0ICE9IHRleC0+Z2V0SW50ZXJu
YWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29tcHJlc3NlZFRleFN1YkltYWdl
MkQiLCAiZm9ybWF0IGRvZXMgbm90IG1hdGNoIHRleHR1cmUgZm9ybWF0Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRleFN1YkRpbWVuc2lv
bnMoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0ZXgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBncmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxl
dmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0YS0+Ynl0ZUxlbmd0aCgp
LCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKKyAgICB0ZXgtPnNldENvbXByZXNzZWQoKTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29u
c3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAgaWYgKEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRDbGVhckJpdHNCeUZvcm1hdChmb3JtYXQpICYgKEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVG
RkVSX0JJVCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJmb3JtYXQgY2FuIG5vdCBiZSBzZXQs
IG9ubHkgcmVuZGVyZWQgdG8iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RpbnQgYm9yZGVyKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoImNv
cHlUZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxm
b3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgaW50ZXJuYWxmb3JtYXQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRh
dGVTZXR0YWJsZVRleEZvcm1hdCgiY29weVRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoImNvcHlUZXhJbWFnZTJEIiwgdGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoIXRleCkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghaXNUZXhJbnRlcm5hbEZvcm1hdENvbG9yQnVmZmVyQ29t
YmluYXRpb25WYWxpZChpbnRlcm5hbGZvcm1hdCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckNvbG9yRm9y
bWF0KCkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgImNvcHlUZXhJbWFnZTJEIiwgImZyYW1lYnVmZmVyIGlzIGluY29t
cGF0aWJsZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlzR0xF
UzJOUE9UU3RyaWN0KCkgJiYgbGV2ZWwgJiYgV2ViR0xUZXh0dXJlOjppc05QT1Qod2lkdGgsIGhl
aWdodCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJjb3B5VGV4SW1hZ2UyRCIsICJsZXZlbCA+IDAgbm90IHBvd2VyIG9mIDIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJh
bWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFt
X2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVz
b3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgImNvcHlUZXhJbWFn
ZTJEIiwgcmVhc29uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjbGVhcklmQ29tcG9z
aXRlZCgpOworICAgIGlmIChpc1Jlc291cmNlU2FmZSgpKSB7CisgICAgICAgIFNjb3BlZERyYXdp
bmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcuZ2V0KCkpOworICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1f
ZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAg
ICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKKyAgICAgICAgR0MzRHNpemVpIGNsaXBwZWRX
aWR0aCwgY2xpcHBlZEhlaWdodDsKKyAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZlckhlaWdo
dCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRIZWlnaHQp
KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbGZvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIG1fdW5wYWNrQWxpZ25tZW50KTsKKyAgICAg
ICAgICAgIGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7CisgICAg
ICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBj
bGlwcGVkWCAtIHgsIGNsaXBwZWRZIC0geSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVk
SGVpZ2h0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2Nv
bnRleHQtPmNvcHlUZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIpOworICAgIH0KKyAgICAvLyBGSVhNRTogaWYgdGhlIGZy
YW1lYnVmZmVyIGlzIG5vdCBjb21wbGV0ZSwgbm9uZSBvZiB0aGUgYmVsb3cgc2hvdWxkIGJlIGV4
ZWN1dGVkLgorICAgIHRleC0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0
LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0xldmVsKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdl
dCwgbGV2ZWwpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxp
ZGF0ZVRleHR1cmVCaW5kaW5nKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Cisg
ICAgaWYgKCF0ZXgpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgiY29w
eVRleFN1YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSB8fCAhdmFsaWRhdGVTaXplKCJjb3B5
VGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgLy8g
QmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwgY2hlY2sgaWYgb3ZlcmZsb3cg
aGFwcGVucyBmaXJzdC4KKyAgICBpZiAoeG9mZnNldCArIHdpZHRoIDwgMCB8fCB5b2Zmc2V0ICsg
aGVpZ2h0IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJhZCBkaW1lbnNpb25zIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IHRleC0+
Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNldCArIGhlaWdodCA+IHRleC0+Z2V0SGVp
Z2h0KHRhcmdldCwgbGV2ZWwpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAicmVjdGFuZ2xl
IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKTsKKyAg
ICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoImNvcHlUZXhTdWJJbWFnZTJEIiwgaW50
ZXJuYWxmb3JtYXQpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpc1RleEludGVybmFsRm9y
bWF0Q29sb3JCdWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZy
YW1lYnVmZmVyQ29sb3JGb3JtYXQoKSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCAi
ZnJhbWVidWZmZXIgaXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsK
KyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5v
bkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29weVRleFN1YkltYWdlMkQiLCByZWFzb24pOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgaWYgKGlz
UmVzb3VyY2VTYWZlKCkpIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5k
ZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Cisg
ICAgICAgIG1fY29udGV4dC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNl
dCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
R0MzRGludCBjbGlwcGVkWCwgY2xpcHBlZFk7CisgICAgICAgIEdDM0RzaXplaSBjbGlwcGVkV2lk
dGgsIGNsaXBwZWRIZWlnaHQ7CisgICAgICAgIGlmIChjbGlwMkQoeCwgeSwgd2lkdGgsIGhlaWdo
dCwgZ2V0Qm91bmRGcmFtZWJ1ZmZlcldpZHRoKCksIGdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQo
KSwgJmNsaXBwZWRYLCAmY2xpcHBlZFksICZjbGlwcGVkV2lkdGgsICZjbGlwcGVkSGVpZ2h0KSkg
eworICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0ID0gdGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0
YXJnZXQsIGxldmVsKTsKKyAgICAgICAgICAgIEdDM0RlbnVtIHR5cGUgPSB0ZXgtPmdldFR5cGUo
dGFyZ2V0LCBsZXZlbCk7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8dW5zaWduZWQgY2hh
cltdPiB6ZXJvOworICAgICAgICAgICAgaWYgKHdpZHRoICYmIGhlaWdodCkgeworICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBzaXplOworICAgICAgICAgICAgICAgIEdDM0RlbnVtIGVycm9y
ID0gbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3JtYXQsIHR5cGUsIHdpZHRo
LCBoZWlnaHQsIG1fdW5wYWNrQWxpZ25tZW50LCAmc2l6ZSwgMCk7CisgICAgICAgICAgICAgICAg
aWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgeworICAgICAgICAgICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJvciwgImNvcHlUZXhTdWJJbWFnZTJEIiwgImJh
ZCBkaW1lbnNpb25zIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgemVybyA9IHN0ZDo6bWFrZV91bmlxdWU8dW5zaWduZWQg
Y2hhcltdPihzaXplKTsKKyAgICAgICAgICAgICAgICBpZiAoIXplcm8pIHsKKyAgICAgICAgICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWVtc2V0
KHplcm8uZ2V0KCksIDAsIHNpemUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbV9jb250
ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgemVyby5nZXQoKSk7CisgICAgICAgICAgICBpZiAoY2xp
cHBlZFdpZHRoID4gMCAmJiBjbGlwcGVkSGVpZ2h0ID4gMCkgeworICAgICAgICAgICAgICAgIFNj
b3BlZERyYXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9m
cmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Y29w
eVRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCArIGNsaXBwZWRYIC0geCwgeW9m
ZnNldCArIGNsaXBwZWRZIC0geSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNsaXBwZWRYLCBjbGlwcGVkWSwgY2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFNjb3BlZERy
YXdpbmdCdWZmZXJCaW5kZXIgYmluZGVyKG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgbV9mcmFtZWJ1
ZmZlckJpbmRpbmcuZ2V0KCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgfQorICAgIH0KK30KKworUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVCdWZmZXIoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTEJ1
ZmZlcj4gbyA9IFdlYkdMQnVmZmVyOjpjcmVhdGUodGhpcyk7CisgICAgYWRkU2hhcmVkT2JqZWN0
KG8uZ2V0KCkpOworICAgIHJldHVybiBvOworfQorCitQYXNzUmVmUHRyPFdlYkdMRnJhbWVidWZm
ZXI+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQoreworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IFJlZlB0cjxXZWJHTEZyYW1lYnVmZmVyPiBvID0gV2ViR0xGcmFtZWJ1ZmZlcjo6Y3JlYXRlKHRo
aXMpOworICAgIGFkZENvbnRleHRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJuIG87Cit9CisK
K1Bhc3NSZWZQdHI8V2ViR0xUZXh0dXJlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVRl
eHR1cmUoKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTFRleHR1cmU+IG8gPSBXZWJHTFRleHR1cmU6
OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7CisgICAgcmV0dXJu
IG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xQcm9ncmFtPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZVByb2dyYW0oKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIFJlZlB0cjxXZWJHTFByb2dyYW0+IG8gPSBXZWJH
TFByb2dyYW06OmNyZWF0ZSh0aGlzKTsKKyAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Cisg
ICAgcmV0dXJuIG87Cit9CisKK1Bhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBSZWZQdHI8V2Vi
R0xSZW5kZXJidWZmZXI+IG8gPSBXZWJHTFJlbmRlcmJ1ZmZlcjo6Y3JlYXRlKHRoaXMpOworICAg
IGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKKyAgICByZXR1cm4gbzsKK30KKworUGFzc1JlZlB0
cjxXZWJHTFNoYWRlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVTaGFkZXIoR0MzRGVu
dW0gdHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NIQURFUiAmJiB0eXBl
ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFERVIpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNyZWF0ZVNoYWRl
ciIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKworICAgIFJlZlB0cjxXZWJHTFNoYWRlcj4gbyA9IFdlYkdMU2hhZGVyOjpjcmVhdGUodGhp
cywgdHlwZSk7CisgICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOworICAgIHJldHVybiBvOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9jb250ZXh0LT5jdWxsRmFjZShtb2RlKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmRlbGV0ZU9iamVjdChXZWJHTE9iamVjdCogb2JqZWN0KQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIW9iamVjdCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmICghb2JqZWN0LT52YWxpZGF0ZShjb250ZXh0R3JvdXAoKSwgdGhpcykpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCAiZGVsZXRlIiwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKG9iamVjdC0+b2JqZWN0KCkpCisg
ICAgICAgIC8vIFdlIG5lZWQgdG8gcGFzcyBpbiBjb250ZXh0IGhlcmUgYmVjYXVzZSB3ZSB3YW50
CisgICAgICAgIC8vIHRoaW5ncyBpbiB0aGlzIGNvbnRleHQgdW5ib3VuZC4KKyAgICAgICAgb2Jq
ZWN0LT5kZWxldGVPYmplY3QoZ3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVCdWZmZXIoV2ViR0xCdWZm
ZXIqIGJ1ZmZlcikKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdChidWZmZXIpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG1fYm91bmRBcnJheUJ1ZmZlciA9PSBidWZmZXIpCisgICAgICAgIG1f
Ym91bmRBcnJheUJ1ZmZlciA9IDA7CisKKyAgICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnVu
YmluZEJ1ZmZlcihidWZmZXIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVs
ZXRlRnJhbWVidWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAgaWYg
KCFkZWxldGVPYmplY3QoZnJhbWVidWZmZXIpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGZy
YW1lYnVmZmVyID09IG1fZnJhbWVidWZmZXJCaW5kaW5nKSB7CisgICAgICAgIG1fZnJhbWVidWZm
ZXJCaW5kaW5nID0gMDsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZlckJpbmRpbmcoMCk7CisgICAgICAgICAg
ICAvLyBIYXZlIHRvIGNhbGwgYmluZEZyYW1lYnVmZmVyIGhlcmUgdG8gYmluZCBiYWNrIHRvIGlu
dGVybmFsIGZiby4KKyAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZGVsZXRlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0pCit7CisgICAg
ZGVsZXRlT2JqZWN0KHByb2dyYW0pOworICAgIC8vIFdlIGRvbid0IHJlc2V0IG1fY3VycmVudFBy
b2dyYW0gdG8gMCBoZXJlIGJlY2F1c2UgdGhlIGRlbGV0aW9uIG9mIHRoZQorICAgIC8vIGN1cnJl
bnQgcHJvZ3JhbSBpcyBkZWxheWVkLgorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVsZXRlUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJidWZmZXIpCit7Cisg
ICAgaWYgKCFkZWxldGVPYmplY3QocmVuZGVyYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChyZW5kZXJidWZmZXIgPT0gbV9yZW5kZXJidWZmZXJCaW5kaW5nKQorICAgICAgICBtX3Jl
bmRlcmJ1ZmZlckJpbmRpbmcgPSAwOworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKKyAg
ICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFt
ZWJ1ZmZlcihyZW5kZXJidWZmZXIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
ZGVsZXRlU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIpCit7CisgICAgZGVsZXRlT2JqZWN0KHNo
YWRlcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVUZXh0dXJlKFdl
YkdMVGV4dHVyZSogdGV4dHVyZSkKK3sKKyAgICBpZiAoIWRlbGV0ZU9iamVjdCh0ZXh0dXJlKSkK
KyAgICAgICAgcmV0dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5p
dHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHRleHR1cmUgPT0gbV90ZXh0dXJlVW5pdHNb
aV0udGV4dHVyZTJEQmluZGluZykKKyAgICAgICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1
cmUyREJpbmRpbmcgPSBudWxscHRyOworICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1cmVV
bml0c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcpCisgICAgICAgICAgICBtX3RleHR1cmVVbml0
c1tpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgPSBudWxscHRyOworICAgIH0KKyAgICBpZiAobV9m
cmFtZWJ1ZmZlckJpbmRpbmcpCisgICAgICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5yZW1vdmVB
dHRhY2htZW50RnJvbUJvdW5kRnJhbWVidWZmZXIodGV4dHVyZSk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpkZXB0aEZ1bmMoR0MzRGVudW0gZnVuYykKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5k
ZXB0aEZ1bmMoZnVuYyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkZXB0aE1h
c2soR0MzRGJvb2xlYW4gZmxhZykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm47CisgICAgbV9kZXB0aE1hc2sgPSBmbGFnOworICAgIG1fY29udGV4
dC0+ZGVwdGhNYXNrKGZsYWcpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGVw
dGhSYW5nZShHQzNEZmxvYXQgek5lYXIsIEdDM0RmbG9hdCB6RmFyKQoreworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoek5lYXIgPiB6
RmFyKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImRlcHRoUmFuZ2UiLCAiek5lYXIgPiB6RmFyIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbV9jb250ZXh0LT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKK30K
Kwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRldGFjaFNoYWRlcihXZWJHTFByb2dyYW0q
IHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3QoImRldGFjaFNoYWRlciIsIHNoYWRlcikpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIXByb2dyYW0tPmRldGFjaFNoYWRlcihzaGFkZXIpKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImRldGFjaFNo
YWRlciIsICJzaGFkZXIgbm90IGF0dGFjaGVkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9jb250ZXh0LT5kZXRhY2hTaGFkZXIob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBvYmplY3RP
clplcm8oc2hhZGVyKSk7CisgICAgc2hhZGVyLT5vbkRldGFjaGVkKGdyYXBoaWNzQ29udGV4dDNE
KCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzYWJsZShHQzNEZW51bSBj
YXApCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVDYXBh
YmlsaXR5KCJkaXNhYmxlIiwgY2FwKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChjYXAgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgeworICAgICAgICBtX3N0ZW5jaWxFbmFi
bGVkID0gZmFsc2U7CisgICAgICAgIGFwcGx5U3RlbmNpbFRlc3QoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1Qp
IHsKKyAgICAgICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOworICAgICAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKQorICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRTY2lzc29yRW5hYmxl
ZChtX3NjaXNzb3JFbmFibGVkKTsKKyAgICB9CisgICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcCk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoR0MzRHVpbnQgaW5kZXgsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJkaXNhYmxlVmVy
dGV4QXR0cmliQXJyYXkiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0
ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRl
KGluZGV4KTsKKyAgICBzdGF0ZS5lbmFibGVkID0gZmFsc2U7CisKKyAgICBpZiAoaW5kZXggPiAw
IHx8IGlzR0xFUzJDb21wbGlhbnQoKSkKKyAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoaW5kZXgpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVFbGVtZW50QXJyYXlTaXplKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0Mz
RGludHB0ciBvZmZzZXQpCit7CisgICAgUmVmUHRyPFdlYkdMQnVmZmVyPiBlbGVtZW50QXJyYXlC
dWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigp
OworICAgIAorICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAob2Zmc2V0IDwgMCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVCkgeworICAgICAgICAv
LyBGb3IgYW4gdW5zaWduZWQgaW50IGFycmF5LCBvZmZzZXQgbXVzdCBiZSBkaXZpc2libGUgYnkg
NCBmb3IgYWxpZ25tZW50IHJlYXNvbnMuCisgICAgICAgIGlmIChvZmZzZXQgJSA0KQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50
IG9mZnNldC4KKyAgICAgICAgb2Zmc2V0IC89IDQ7CisKKyAgICAgICAgR0MzRHNpemVpcHRyIG4g
PSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKSAvIDQ7CisgICAgICAgIGlmIChvZmZz
ZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
KSB7CisgICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBzaG9ydCBhcnJheSwgb2Zmc2V0IG11c3Qg
YmUgZGl2aXNpYmxlIGJ5IDIgZm9yIGFsaWdubWVudCByZWFzb25zLgorICAgICAgICBpZiAob2Zm
c2V0ICUgMikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAvLyBNYWtlIHVv
ZmZzZXQgYW4gZWxlbWVudCBvZmZzZXQuCisgICAgICAgIG9mZnNldCAvPSAyOworCisgICAgICAg
IEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5QnVmZmVyLT5ieXRlTGVuZ3RoKCkgLyAyOwor
ICAgICAgICBpZiAob2Zmc2V0ID4gbiB8fCBjb3VudCA+IG4gLSBvZmZzZXQpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfSBlbHNlIGlmICh0eXBlID09IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgIEdDM0RzaXplaXB0ciBuID0gZWxlbWVudEFycmF5
QnVmZmVyLT5ieXRlTGVuZ3RoKCk7CisgICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4g
biAtIG9mZnNldCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUluZGV4QXJy
YXlDb25zZXJ2YXRpdmUoR0MzRGVudW0gdHlwZSwgdW5zaWduZWQmIG51bUVsZW1lbnRzUmVxdWly
ZWQpCit7CisgICAgLy8gUGVyZm9ybXMgY29uc2VydmF0aXZlIHZhbGlkYXRpb24gYnkgY2FjaGlu
ZyBhIG1heGltdW0gaW5kZXggb2YKKyAgICAvLyB0aGUgZ2l2ZW4gdHlwZSBwZXIgZWxlbWVudCBh
cnJheSBidWZmZXIuIElmIGFsbCBvZiB0aGUgYm91bmQKKyAgICAvLyBhcnJheSBidWZmZXJzIGhh
dmUgZW5vdWdoIGVsZW1lbnRzIHRvIHNhdGlzZnkgdGhhdCBtYXhpbXVtCisgICAgLy8gaW5kZXgs
IHNraXBzIHRoZSBleHBlbnNpdmUgcGVyLWRyYXctY2FsbCBpdGVyYXRpb24gaW4KKyAgICAvLyB2
YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlLgorICAgIAorICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4g
ZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50
QXJyYXlCdWZmZXIoKTsKKworICAgIGlmICghZWxlbWVudEFycmF5QnVmZmVyKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBHQzNEc2l6ZWlwdHIgbnVtRWxlbWVudHMgPSBlbGVtZW50QXJy
YXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKKyAgICAvLyBUaGUgY2FzZSBjb3VudD09MCBpcyBhbHJl
YWR5IGRlYWx0IHdpdGggaW4gZHJhd0VsZW1lbnRzIGJlZm9yZSB2YWxpZGF0ZUluZGV4QXJyYXlD
b25zZXJ2YXRpdmUuCisgICAgaWYgKCFudW1FbGVtZW50cykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGNvbnN0IEFycmF5QnVmZmVyKiBidWZmZXIgPSBlbGVtZW50QXJyYXlCdWZmZXItPmVs
ZW1lbnRBcnJheUJ1ZmZlcigpOworICAgIEFTU0VSVChidWZmZXIpOworCisgICAgaW50IG1heElu
ZGV4ID0gZWxlbWVudEFycmF5QnVmZmVyLT5nZXRDYWNoZWRNYXhJbmRleCh0eXBlKTsKKyAgICBp
ZiAobWF4SW5kZXggPCAwKSB7CisgICAgICAgIC8vIENvbXB1dGUgdGhlIG1heGltdW0gaW5kZXgg
aW4gdGhlIGVudGlyZSBidWZmZXIgZm9yIHRoZSBnaXZlbiB0eXBlIG9mIGluZGV4LgorICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURTogeworICAgICAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8
Y29uc3QgR0MzRHVieXRlKj4oYnVmZmVyLT5kYXRhKCkpOworICAgICAgICAgICAgZm9yIChHQzNE
c2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQorICAgICAgICAgICAgICAgIG1h
eEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfU0hPUlQ6IHsKKyAgICAgICAgICAgIG51bUVsZW1lbnRzIC89IHNpemVvZihH
QzNEdXNob3J0KTsKKyAgICAgICAgICAgIGNvbnN0IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2Fz
dDxjb25zdCBHQzNEdXNob3J0Kj4oYnVmZmVyLT5kYXRhKCkpOworICAgICAgICAgICAgZm9yIChH
QzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsrKQorICAgICAgICAgICAgICAg
IG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19jYXN0PGludD4ocFtpXSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfSU5UOiB7CisgICAgICAgICAgICBpZiAoIW1fb2VzRWxlbWVudEluZGV4
VWludCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBudW1FbGVt
ZW50cyAvPSBzaXplb2YoR0MzRHVpbnQpOworICAgICAgICAgICAgY29uc3QgR0MzRHVpbnQqIHAg
PSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdWludCo+KGJ1ZmZlci0+ZGF0YSgpKTsKKyAgICAgICAg
ICAgIGZvciAoR0MzRHNpemVpcHRyIGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkrKykKKyAgICAg
ICAgICAgICAgICBtYXhJbmRleCA9IHN0ZDo6bWF4KG1heEluZGV4LCBzdGF0aWNfY2FzdDxpbnQ+
KHBbaV0pKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgZWxlbWVudEFy
cmF5QnVmZmVyLT5zZXRDYWNoZWRNYXhJbmRleCh0eXBlLCBtYXhJbmRleCk7CisgICAgfQorCisg
ICAgaWYgKG1heEluZGV4ID49IDApIHsKKyAgICAgICAgLy8gVGhlIG51bWJlciBvZiByZXF1aXJl
ZCBlbGVtZW50cyBpcyBvbmUgbW9yZSB0aGFuIHRoZSBtYXhpbXVtCisgICAgICAgIC8vIGluZGV4
IHRoYXQgd2lsbCBiZSBhY2Nlc3NlZC4KKyAgICAgICAgbnVtRWxlbWVudHNSZXF1aXJlZCA9IG1h
eEluZGV4ICsgMTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVJbmRleEFycmF5
UHJlY2lzZShHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0
LCB1bnNpZ25lZCYgbnVtRWxlbWVudHNSZXF1aXJlZCkKK3sKKyAgICBBU1NFUlQoY291bnQgPj0g
MCAmJiBvZmZzZXQgPj0gMCk7CisgICAgdW5zaWduZWQgbGFzdEluZGV4ID0gMDsKKyAgICAKKyAg
ICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1lbnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCk7CisKKyAgICBpZiAoIWVsZW1lbnRB
cnJheUJ1ZmZlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFjb3VudCkgewor
ICAgICAgICBudW1FbGVtZW50c1JlcXVpcmVkID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1bnNpZ25lZCBsb25nIHVvZmZzZXQgPSBv
ZmZzZXQ7CisgICAgdW5zaWduZWQgbG9uZyBuID0gY291bnQ7CisKKyAgICBpZiAodHlwZSA9PSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNl
dCBhbiBlbGVtZW50IG9mZnNldC4KKyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVpbnQp
OworICAgICAgICBjb25zdCBHQzNEdWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50
Kj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVv
ZmZzZXQ7CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBs
YXN0SW5kZXgpCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICAr
K3A7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUKSB7CisgICAgICAgIC8vIE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9m
ZnNldC4KKyAgICAgICAgdW9mZnNldCAvPSBzaXplb2YoR0MzRHVzaG9ydCk7CisgICAgICAgIGNv
bnN0IEdDM0R1c2hvcnQqIHAgPSBzdGF0aWNfY2FzdDxjb25zdCBHQzNEdXNob3J0Kj4oZWxlbWVu
dEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0YSgpKSArIHVvZmZzZXQ7Cisg
ICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBpZiAoKnAgPiBsYXN0SW5kZXgp
CisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAgICAgICAgICArK3A7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEUpIHsKKyAgICAgICAgY29uc3QgR0MzRHVieXRlKiBwID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
R0MzRHVieXRlKj4oZWxlbWVudEFycmF5QnVmZmVyLT5lbGVtZW50QXJyYXlCdWZmZXIoKS0+ZGF0
YSgpKSArIHVvZmZzZXQ7CisgICAgICAgIHdoaWxlIChuLS0gPiAwKSB7CisgICAgICAgICAgICBp
ZiAoKnAgPiBsYXN0SW5kZXgpCisgICAgICAgICAgICAgICAgbGFzdEluZGV4ID0gKnA7CisgICAg
ICAgICAgICArK3A7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGVuIHNldCB0aGUgbGFz
dCBpbmRleCBpbiB0aGUgaW5kZXggYXJyYXkgYW5kIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZC4KKyAg
ICBudW1FbGVtZW50c1JlcXVpcmVkID0gbGFzdEluZGV4ICsgMTsKKyAgICByZXR1cm4gbnVtRWxl
bWVudHNSZXF1aXJlZCA+IDA7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVZlcnRleEF0dHJpYnV0ZXModW5zaWduZWQgZWxlbWVudENvdW50LCB1bnNpZ25lZCBwcmlt
aXRpdmVDb3VudCkKK3sKKyAgICBpZiAoIW1fY3VycmVudFByb2dyYW0pCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIC8vIExvb2sgaW4gZWFjaCBlbmFibGVkIHZlcnRleCBhdHRyaWIgYW5k
IGNoZWNrIGlmIHRoZXkndmUgYmVlbiBib3VuZCB0byBhIGJ1ZmZlci4KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9tYXhWZXJ0ZXhBdHRyaWJzOyArK2kpIHsKKyAgICAgICAgaWYgKCFt
X2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGkpLnZhbGlkYXRl
QmluZGluZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChl
bGVtZW50Q291bnQgPD0gMCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKworICAgIC8vIExvb2sg
aW4gZWFjaCBjb25zdW1lZCB2ZXJ0ZXggYXR0cmliIChieSB0aGUgY3VycmVudCBwcm9ncmFtKS4K
KyAgICBib29sIHNhd05vbkluc3RhbmNlZEF0dHJpYiA9IGZhbHNlOworICAgIGJvb2wgc2F3RW5h
YmxlZEF0dHJpYiA9IGZhbHNlOworICAgIGludCBudW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMgPSBt
X2N1cnJlbnRQcm9ncmFtLT5udW1BY3RpdmVBdHRyaWJMb2NhdGlvbnMoKTsKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IG51bUFjdGl2ZUF0dHJpYkxvY2F0aW9uczsgKytpKSB7CisgICAgICAgIGlu
dCBsb2MgPSBtX2N1cnJlbnRQcm9ncmFtLT5nZXRBY3RpdmVBdHRyaWJMb2NhdGlvbihpKTsKKyAg
ICAgICAgaWYgKGxvYyA+PSAwICYmIGxvYyA8IHN0YXRpY19jYXN0PGludD4obV9tYXhWZXJ0ZXhB
dHRyaWJzKSkgeworICAgICAgICAgICAgY29uc3QgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZShsb2MpOworICAgICAgICAgICAgaWYgKHN0YXRlLmVuYWJsZWQpIHsK
KyAgICAgICAgICAgICAgICBzYXdFbmFibGVkQXR0cmliID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICAvLyBBdm9pZCBvZmYtYnktb25lIGVycm9ycyBpbiBudW1FbGVtZW50cyBjb21wdXRhdGlvbi4K
KyAgICAgICAgICAgICAgICAvLyBGb3IgdGhlIGxhc3QgZWxlbWVudCwgd2Ugd2lsbCBvbmx5IHRv
dWNoIHRoZSBkYXRhIGZvciB0aGUKKyAgICAgICAgICAgICAgICAvLyBlbGVtZW50IGFuZCBub3Ro
aW5nIGJleW9uZCBpdC4KKyAgICAgICAgICAgICAgICBpbnQgYnl0ZXNSZW1haW5pbmcgPSBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXRlLmJ1ZmZlckJpbmRpbmctPmJ5dGVMZW5ndGgoKSAtIHN0YXRlLm9m
ZnNldCk7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOworICAgICAg
ICAgICAgICAgIEFTU0VSVChzdGF0ZS5zdHJpZGUgPiAwKTsKKyAgICAgICAgICAgICAgICBpZiAo
Ynl0ZXNSZW1haW5pbmcgPj0gc3RhdGUuYnl0ZXNQZXJFbGVtZW50KQorICAgICAgICAgICAgICAg
ICAgICBudW1FbGVtZW50cyA9IDEgKyAoYnl0ZXNSZW1haW5pbmcgLSBzdGF0ZS5ieXRlc1BlckVs
ZW1lbnQpIC8gc3RhdGUuc3RyaWRlOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGluc3RhbmNl
c1JlcXVpcmVkID0gMDsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUuZGl2aXNvcikgeworICAg
ICAgICAgICAgICAgICAgICBpbnN0YW5jZXNSZXF1aXJlZCA9IGNlaWwoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHByaW1pdGl2ZUNvdW50KSAvIHN0YXRlLmRpdmlzb3IpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoaW5zdGFuY2VzUmVxdWlyZWQgPiBudW1FbGVtZW50cykKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0cnVlOworICAgICAgICAgICAgICAg
ICAgICBpZiAoZWxlbWVudENvdW50ID4gbnVtRWxlbWVudHMpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFzYXdOb25JbnN0YW5jZWRBdHRyaWIgJiYgc2F3RW5h
YmxlZEF0dHJpYikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVdlYkdMT2JqZWN0KGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgV2ViR0xPYmplY3QqIG9iamVjdCkKK3sKKyAgICBpZiAoIW9i
amVjdCB8fCAhb2JqZWN0LT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gb2JqZWN0
IG9yIG9iamVjdCBkZWxldGVkIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
aWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1
bmN0aW9uTmFtZSwgIm9iamVjdCBkb2VzIG5vdCBiZWxvbmcgdG8gdGhpcyBjb250ZXh0Iik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZURyYXdBcnJheXMoY29uc3QgY2hhciogZnVu
Y3Rpb25OYW1lLCBHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQs
IEdDM0RzaXplaSBwcmltaXRpdmVDb3VudCkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVuY3Rp
b25OYW1lKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGZpcnN0IDwgMCB8fCBj
b3VudCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFjb3VudCkgeworICAgICAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmIChwcmltaXRpdmVDb3VudCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8
IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghaXNFcnJvckdl
bmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7CisgICAgICAgIC8vIEVuc3VyZSB3ZSBo
YXZlIGEgdmFsaWQgcmVuZGVyaW5nIHN0YXRlCisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVj
b3JkT3ZlcmZsb3c+IGNoZWNrZWRGaXJzdChmaXJzdCk7CisgICAgICAgIENoZWNrZWQ8R0MzRGlu
dCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRDb3VudChjb3VudCk7CisgICAgICAgIENoZWNrZWQ8
R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNrZWRTdW0gPSBjaGVja2VkRmlyc3QgKyBjaGVj
a2VkQ291bnQ7CisgICAgICAgIENoZWNrZWQ8R0MzRGludCwgUmVjb3JkT3ZlcmZsb3c+IGNoZWNr
ZWRQcmltaXRpdmVDb3VudChwcmltaXRpdmVDb3VudCk7CisgICAgICAgIGlmIChjaGVja2VkU3Vt
Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZlQ291bnQuaGFzT3ZlcmZsb3dlZCgp
IHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoY2hlY2tlZFN1bS51bnNhZmVHZXQoKSwgY2hl
Y2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJhdHRlbXB0IHRvIGFjY2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCF2
YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAi
YXR0cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZm
ZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmICFtX2ZyYW1l
YnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwgIWlzUmVzb3VyY2VT
YWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCByZWFz
b24pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUs
IEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGVjKTsKKworICAgIGlmICghdmFsaWRhdGVEcmF3QXJyYXlzKCJkcmF3
QXJyYXlzIiwgbW9kZSwgZmlyc3QsIGNvdW50LCAwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAgIGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9
IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKQorICAgICAgICB2ZXJ0ZXhBdHRy
aWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0ZXhBdHRyaWIwKGZpcnN0ICsgY291bnQgLSAxKTsK
KyAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBs
ZXRlbmVzcygiZHJhd0FycmF5cyIsIHRydWUpOworCisgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlz
KG1vZGUsIGZpcnN0LCBjb3VudCk7CisKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhB
dHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkKKyAgICAg
ICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwgZmFsc2UpOworICAgIG1h
cmtDb250ZXh0Q2hhbmdlZCgpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVEcmF3RWxlbWVudHMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBtb2Rl
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIGxvbmcgbG9uZyBvZmZzZXQsIHVuc2ln
bmVkJiBudW1FbGVtZW50cywgR0MzRHNpemVpIHByaW1pdGl2ZUNvdW50KQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRHJhd01vZGUoZnVuY3Rpb25OYW1l
LCBtb2RlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCF2YWxpZGF0ZVN0ZW5j
aWxTZXR0aW5ncyhmdW5jdGlvbk5hbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUOgorICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6CisgICAgICAg
IGlmIChtX29lc0VsZW1lbnRJbmRleFVpbnQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmIChjb3VudCA8IDAgfHwgb2Zmc2V0IDwgMCkgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAiY291bnQgb3Igb2Zmc2V0IDwgMCIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKCFjb3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5nZWQo
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmIChwcmltaXRpdmVDb3Vu
dCA8IDApIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgInByaW1jb3VudCA8IDAiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5n
ZXRFbGVtZW50QXJyYXlCdWZmZXIoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIEVMRU1F
TlRfQVJSQVlfQlVGRkVSIGJvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgeworICAg
ICAgICAvLyBFbnN1cmUgd2UgaGF2ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQorICAgICAgICBp
ZiAoIXZhbGlkYXRlRWxlbWVudEFycmF5U2l6ZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0Mz
RGludHB0cj4ob2Zmc2V0KSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAicmVxdWVzdCBv
dXQgb2YgYm91bmRzIGZvciBjdXJyZW50IEVMRU1FTlRfQVJSQVlfQlVGRkVSIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFjb3VudCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92
ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOworICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJl
Y29yZE92ZXJmbG93PiBjaGVja2VkUHJpbWl0aXZlQ291bnQocHJpbWl0aXZlQ291bnQpOworICAg
ICAgICBpZiAoY2hlY2tlZENvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCBjaGVja2VkUHJpbWl0aXZl
Q291bnQuaGFzT3ZlcmZsb3dlZCgpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVt
cHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXZhbGlkYXRlSW5kZXhBcnJheUNvbnNl
cnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyhu
dW1FbGVtZW50cywgY2hlY2tlZFByaW1pdGl2ZUNvdW50LnVuc2FmZUdldCgpKSkgeworICAgICAg
ICAgICAgaWYgKCF2YWxpZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNoZWNrZWRDb3VudC51bnNhZmVH
ZXQoKSwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMp
IHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVtRWxlbWVudHMsIGNoZWNrZWRQcmltaXRp
dmVDb3VudC51bnNhZmVHZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0
dGVtcHQgdG8gYWNjZXNzIG91dCBvZiBib3VuZHMgYXJyYXlzIik7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgaWYgKCF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMoMCkpIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAiYXR0cmlicyBub3Qgc2V0dXAgY29ycmVjdGx5Iik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiByZWFzb24g
PSAiZnJhbWVidWZmZXIgaW5jb21wbGV0ZSI7CisgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5n
ICYmICFtX2ZyYW1lYnVmZmVyQmluZGluZy0+b25BY2Nlc3MoZ3JhcGhpY3NDb250ZXh0M0QoKSwg
IWlzUmVzb3VyY2VTYWZlKCksICZyZWFzb24pKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiwgZnVuY3Rp
b25OYW1lLCByZWFzb24pOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkcmF3RWxlbWVudHMo
R0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBsb25nIGxvbmcg
b2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworCisg
ICAgdW5zaWduZWQgbnVtRWxlbWVudHMgPSAwOworICAgIGlmICghdmFsaWRhdGVEcmF3RWxlbWVu
dHMoImRyYXdFbGVtZW50cyIsIG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQsIG51bUVsZW1lbnRz
LCAwKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAg
IGJvb2wgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNv
bXBsaWFudCgpKSB7CisgICAgICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgICAgICB2YWxp
ZGF0ZUluZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRy
PihvZmZzZXQpLCBudW1FbGVtZW50cyk7CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQg
PSBzaW11bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOworICAgIH0KKyAgICBpZiAoIWlz
R0xFUzJOUE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJh
d0VsZW1lbnRzIiwgdHJ1ZSk7CisKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhtb2RlLCBj
b3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7CisKKyAgICBpZiAo
IWlzR0xFUzJDb21wbGlhbnQoKSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICBy
ZXN0b3JlU3RhdGVzQWZ0ZXJWZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNH
TEVTMk5QT1RTdHJpY3QoKSkKKyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3
RWxlbWVudHMiLCBmYWxzZSk7CisgICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQoreworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5hYmxlIiwg
Y2FwKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfVEVTVCkgeworICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsKKyAgICAg
ICAgYXBwbHlTdGVuY2lsVGVzdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChj
YXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgeworICAgICAgICBtX3NjaXNz
b3JFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKKyAgICAgICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxlZCk7
CisgICAgfQorICAgIG1fY29udGV4dC0+ZW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGluZGV4ID49IG1f
bWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4
IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisgICAgc3RhdGUuZW5h
YmxlZCA9IHRydWU7CisKKyAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGlu
ZGV4KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29u
dGV4dC0+ZmluaXNoKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVzaCgp
Cit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIG1fY29udGV4dC0+Zmx1c2goKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNo
bWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVm
ZmVyLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFy
YW1ldGVycygiZnJhbWVidWZmZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQor
ICAgICAgICByZXR1cm47CisgICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJp
bnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChidWZmZXIg
JiYgIWJ1ZmZlci0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZyb20gdGhp
cyBjb250ZXh0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRG9uJ3QgYWxsb3cg
dGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKKyAgICAv
LyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBk
ZWZhdWx0CisgICAgLy8gRkJPLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1f
ZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJvKGJ1ZmZl
cik7CisgICAgc3dpdGNoIChhdHRhY2htZW50KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6REVQVEhfU1RFTkNJTF9BVFRBQ0hNRU5UOgorICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKHRhcmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1F
TlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKKyAgICAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJl
bmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVy
T2JqZWN0KTsKKyAgICB9CisgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnRG
b3JCb3VuZEZyYW1lYnVmZmVyKGF0dGFjaG1lbnQsIGJ1ZmZlcik7CisgICAgYXBwbHlTdGVuY2ls
VGVzdCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0
dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0
YXJnZXQsIFdlYkdMVGV4dHVyZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVm
ZmVyVGV4dHVyZTJEIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkKKyAgICAgICAgcmV0dXJuOworICAg
IGlmIChsZXZlbCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZh
bGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1
cmUyRCIsICJubyB0ZXh0dXJlIG9yIHRleHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJh
bWVidWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKKyAgICAvLyBpbXBsZW1lbnRhdGlv
bnMgdXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0CisgICAgLy8g
RkJPLgorICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5k
aW5nLT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFt
ZWJ1ZmZlciBib3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFBsYXRmb3JtM0RP
YmplY3QgdGV4dHVyZU9iamVjdCA9IG9iamVjdE9yWmVybyh0ZXh0dXJlKTsKKyAgICBzd2l0Y2gg
KGF0dGFjaG1lbnQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lM
X0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFy
Z2V0LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0
dXJlT2JqZWN0LCBsZXZlbCk7CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQodGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJn
ZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9i
amVjdCwgbGV2ZWwpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpTVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0
dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVs
KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9i
amVjdCwgbGV2ZWwpOworICAgIH0KKyAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNo
bWVudEZvckJvdW5kRnJhbWVidWZmZXIoYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBs
ZXZlbCk7CisgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+ZnJvbnRGYWNl
KG1vZGUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAo
R0MzRGVudW0gdGFyZ2V0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJp
bmRpbmcoImdlbmVyYXRlTWlwbWFwIiwgdGFyZ2V0LCBmYWxzZSk7CisgICAgaWYgKCF0ZXgpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkpIHsKKyAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAiZ2VuZXJhdGVNaXBtYXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBub3QgYWxs
IHRoZSBzYW1lIHNpemUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzkxNi4gQ29tcHJlc3Nl
ZCB0ZXh0dXJlcyBzaG91bGQgYmUgYWxsb3dlZCBpbiBXZWJHTCAyOgorICAgIGlmICh0ZXgtPmlz
Q29tcHJlc3NlZCgpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0byBnZW5l
cmF0ZSBtaXBtYXBzIGZyb20gY29tcHJlc3NlZCB0ZXh0dXJlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJnZW5lcmF0ZU1pcG1h
cCIsIHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCAwKSkpCisgICAgICAgIHJldHVybjsK
KworICAgIC8vIGdlbmVyYXRlTWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWluRmlsdGVy
IGlzIG5vdCBORUFSRVNUX01JUE1BUF9MSU5FQVIKKyAgICAvLyBvbiBNYWMuICBSZW1vdmUgdGhl
IGhhY2sgb25jZSB0aGlzIGRyaXZlciBidWcgaXMgZml4ZWQuCisjaWYgT1MoREFSV0lOKQorICAg
IGJvb2wgbmVlZFRvUmVzZXRNaW5GaWx0ZXIgPSBmYWxzZTsKKyAgICBpZiAodGV4LT5nZXRNaW5G
aWx0ZXIoKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKSB7Cisg
ICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9M
SU5FQVIpOworICAgICAgICBuZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7CisgICAgfQorI2Vu
ZGlmCisgICAgbV9jb250ZXh0LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOworI2lmIE9TKERBUldJ
TikKKyAgICBpZiAobmVlZFRvUmVzZXRNaW5GaWx0ZXIpCisgICAgICAgIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIs
IHRleC0+Z2V0TWluRmlsdGVyKCkpOworI2VuZGlmCisgICAgdGV4LT5nZW5lcmF0ZU1pcG1hcExl
dmVsSW5mbygpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRBY3RpdmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWlu
dCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJn
ZXRBY3RpdmVBdHRyaWIiLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
QWN0aXZlSW5mbyBpbmZvOworICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2Jq
ZWN0T3JaZXJvKHByb2dyYW0pLCBpbmRleCwgaW5mbykpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgTE9HKFdlYkdMLCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6ICVzIiwg
aW5kZXgsIGluZm8ubmFtZS51dGY4KCkuZGF0YSgpKTsKKworICAgIHJldHVybiBXZWJHTEFjdGl2
ZUluZm86OmNyZWF0ZShpbmZvLm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKK30KKworUGFz
c1JlZlB0cjxXZWJHTEFjdGl2ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZl
VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBw
cm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgQWN0aXZlSW5mbyBpbmZvOworICAgIGlm
ICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5k
ZXgsIGluZm8pKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIWlzR0xFUzJDb21w
bGlhbnQoKSkKKyAgICAgICAgaWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5lbmRzV2l0
aCgiWzBdIikpCisgICAgICAgICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKKworICAgIExP
RyhXZWJHTCwgIlJldHVybmluZyBhY3RpdmUgdW5pZm9ybSAlZDogJXMiLCBpbmRleCwgaW5mby5u
YW1lLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRl
KGluZm8ubmFtZSwgaW5mby50eXBlLCBpbmZvLnNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgVmVj
dG9yPFJlZlB0cjxXZWJHTFNoYWRlcj4+JiBzaGFkZXJPYmplY3RzLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIHNoYWRlck9iamVjdHMuY2xlYXIoKTsK
KyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0
KCJnZXRBdHRhY2hlZFNoYWRlcnMiLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY29uc3QgR0MzRGVudW0gc2hhZGVyVHlwZVtdID0geworICAgICAgICBHcmFwaGljc0Nv
bnRleHQzRDo6VkVSVEVYX1NIQURFUiwKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdN
RU5UX1NIQURFUgorICAgIH07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihz
aGFkZXJUeXBlKSAvIHNpemVvZihHQzNEZW51bSk7ICsraSkgeworICAgICAgICBXZWJHTFNoYWRl
ciogc2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtpXSk7Cisg
ICAgICAgIGlmIChzaGFkZXIpCisgICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFk
ZXIpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR0MzRGludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmdldEF0dHJpYkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCisgICAgICAg
IHJldHVybiAtMTsKKyAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0dHJpYkxv
Y2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoIXZhbGlkYXRlU3Ry
aW5nKCJnZXRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQorICAgICAgICByZXR1cm4gLTE7CisgICAg
aWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAo
IXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2NhdGlvbiIs
ICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBy
ZXR1cm4gbV9jb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSks
IG5hbWUpOworfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZm
ZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgaWYgKHRhcmdl
dCAhPSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRl
ciIsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Cisg
ICAgfQorCisgICAgaWYgKHBuYW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSAm
JiBwbmFtZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRCdWZm
ZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7CisgICAgfQorCisgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgbV9j
b250ZXh0LT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOworICAg
IGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOworfQorCitQYXNzUmVmUHRyPFdlYkdMQ29udGV4
dEF0dHJpYnV0ZXM+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIC8vIFdlIGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJHTENvbnRl
eHRBdHRyaWJ1dGVzIG9iamVjdCB0bworICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBtdXRh
dGluZyBhbnkgY2FjaGVkIHZlcnNpb24uCisKKyAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9y
Y2UgcmVxdWVzdGVkIHZhbHVlcyBvZiAiZmFsc2UiIGZvciBkZXB0aAorICAgIC8vIGFuZCBzdGVu
Y2lsLCByZWdhcmRsZXNzIG9mIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCisgICAg
Ly8gR3JhcGhpY3NDb250ZXh0M0Qgb3IgRHJhd2luZ0J1ZmZlci4KKyAgICBSZWZQdHI8V2ViR0xD
b250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNy
ZWF0ZShtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCkpOworICAgIGlmICghbV9hdHRy
aWJ1dGVzLmRlcHRoKQorICAgICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7CisgICAg
aWYgKCFtX2F0dHJpYnV0ZXMuc3RlbmNpbCkKKyAgICAgICAgYXR0cmlidXRlcy0+c2V0U3RlbmNp
bChmYWxzZSk7CisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAgICAgICAvLyBUaGUgRHJh
d2luZ0J1ZmZlciBvYnRhaW5zIGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0M0Q6
OmdldENvbnRleHRBdHRyaWJ1dGVzKCksCisgICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBpdHMgb3du
IGRldGVybWluYXRpb24gb2Ygd2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRlZC4KKyAg
ICAgICAgYXR0cmlidXRlcy0+c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVsdGlzYW1w
bGUoKSk7CisgICAgfQorICAgIHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKK30KKworR0Mz
RGVudW0gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFcnJvcigpCit7CisgICAgaWYgKG1faXNQ
ZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNE
OjpOT19FUlJPUjsKKyAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOworfQorCitXZWJH
TEV4dGVuc2lvbiogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRf
YmxlbmRfbWlubWF4IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpIHsKKyAgICAgICAgaWYgKCFtX2V4dEJsZW5k
TWluTWF4KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJl
RW5hYmxlZCgiR0xfRVhUX2JsZW5kX21pbm1heCIpOworICAgICAgICAgICAgbV9leHRCbGVuZE1p
bk1heCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUQmxlbmRNaW5NYXg+KHRoaXMpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBtX2V4dEJsZW5kTWluTWF4LmdldCgpOworICAgIH0KKyAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIkVYVF9zUkdCIikKKyAgICAgICAgJiYgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKSB7CisgICAgICAgIGlm
ICghbV9leHRzUkdCKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3NSR0IiKTsKKyAgICAgICAgICAgIG1fZXh0c1JHQiA9IHN0
ZDo6bWFrZV91bmlxdWU8RVhUc1JHQj4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG1fZXh0c1JHQi5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJFWFRfZnJhZ19kZXB0aCIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfRVhUX2ZyYWdfZGVwdGgiKSkgeworICAgICAgICBpZiAoIW1fZXh0RnJh
Z0RlcHRoKSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJl
RW5hYmxlZCgiR0xfRVhUX2ZyYWdfZGVwdGgiKTsKKyAgICAgICAgICAgIG1fZXh0RnJhZ0RlcHRo
ID0gc3RkOjptYWtlX3VuaXF1ZTxFWFRGcmFnRGVwdGg+KHRoaXMpOworICAgICAgICB9CisgICAg
ICAgIHJldHVybiBtX2V4dEZyYWdEZXB0aC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIikKKyAgICAgICAgJiYgKG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJl
X2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3No
YWRlcl90ZXh0dXJlX2xvZCIpKSkgeworICAgICAgICBpZiAoIW1fZXh0U2hhZGVyVGV4dHVyZUxP
RCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJs
ZWQoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKKyAgICAgICAgICAgIG1fZXh0U2hhZGVy
VGV4dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVyVGV4dHVyZUxPRD4odGhpcyk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVyVGV4dHVyZUxPRC5nZXQoKTsK
KyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMiKSkgewor
ICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7CisgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7CisgICAgICAgICAgICBtX2V4dFRleHR1cmVGaWx0ZXJB
bmlzb3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9leHRUZXh0dXJlRmlsdGVyQW5p
c290cm9waWMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
T0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkgeworICAg
ICAgICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgeworICAgICAgICAgICAgbV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcyIpOworICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzID0gc3RkOjpt
YWtlX3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlzKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdldCgpOworICAgIH0KKyAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0IikKKyAgICAgICAg
JiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9m
bG9hdCIpKSB7CisgICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxvYXQpIHsKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfdGV4dHVy
ZV9mbG9hdCIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXQgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9FU1RleHR1cmVGbG9hdD4odGhpcyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1f
b2VzVGV4dHVyZUZsb2F0LmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfZmxvYXRfbGluZWFyIikp
IHsKKyAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVhcikgeworICAgICAgICAgICAg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJl
X2Zsb2F0X2xpbmVhciIpOworICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4odGhpcyk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFyLmdldCgpOworICAgIH0KKyAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKQor
ICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU190
ZXh0dXJlX2hhbGZfZmxvYXQiKSkgeworICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9h
dCkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJs
ZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKKyAgICAgICAgICAgIG1fb2VzVGV4dHVy
ZUhhbGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVyZUhhbGZGbG9hdD4odGhpcyk7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUhhbGZGbG9hdC5nZXQoKTsK
KyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJPRVNfdGV4dHVyZV9oYWxm
X2Zsb2F0X2xpbmVhciIpCisgICAgICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5lYXIiKSkgeworICAgICAgICBp
ZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcikgeworICAgICAgICAgICAgbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxv
YXRfbGluZWFyIik7CisgICAgICAgICAgICBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5lYXI+KHRoaXMpOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxvYXRMaW5lYXIuZ2V0KCk7Cisg
ICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiT0VTX3ZlcnRleF9hcnJheV9v
YmplY3QiKQorICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKKyAgICAgICAgaWYgKCFtX29lc1ZlcnRl
eEFycmF5T2JqZWN0KSB7CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKTsKKyAgICAgICAgICAg
IG1fb2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1ZlcnRleEFycmF5
T2JqZWN0Pih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9vZXNWZXJ0ZXhBcnJh
eU9iamVjdC5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJP
RVNfZWxlbWVudF9pbmRleF91aW50IikKKyAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50IikpIHsKKyAgICAgICAg
aWYgKCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxlbWVudF9pbmRleF91aW50Iik7
CisgICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9F
U0VsZW1lbnRJbmRleFVpbnQ+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX29l
c0VsZW1lbnRJbmRleFVpbnQuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2Fz
ZShuYW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0IikpIHsKKyAgICAgICAgaWYgKCFtX3dlYmdsTG9z
ZUNvbnRleHQpCisgICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRleHQgPSBzdGQ6Om1ha2VfdW5p
cXVlPFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOworICAgICAgICByZXR1cm4gbV93ZWJnbExvc2VD
b250ZXh0LmdldCgpOworICAgIH0KKyAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJX
RUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQorICAgICAgICAmJiBXZWJHTENv
bXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsKKyAgICAgICAgaWYgKCFtX3dl
YmdsQ29tcHJlc3NlZFRleHR1cmVBVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRl
eHR1cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEM+KHRo
aXMpOworICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlQVRDLmdldCgpOwor
ICAgIH0KKyAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29t
cHJlc3NlZF90ZXh0dXJlX3B2cnRjIikpCisgICAgICAgICYmIFdlYkdMQ29tcHJlc3NlZFRleHR1
cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7CisgICAgICAgIGlmICghbV93ZWJnbENvbXByZXNz
ZWRUZXh0dXJlUFZSVEMpCisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVQVlJU
QyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4dHVyZVBWUlRDPih0aGlzKTsK
KyAgICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVBWUlRDLmdldCgpOworICAg
IH0KKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2NvbXByZXNzZWRfdGV4
dHVyZV9zM3RjIikKKyAgICAgICAgJiYgV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBv
cnRlZCh0aGlzKSkgeworICAgICAgICBpZiAoIW1fd2ViZ2xDb21wcmVzc2VkVGV4dHVyZVMzVEMp
CisgICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDID0gc3RkOjptYWtlX3Vu
aXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7CisgICAgICAgIHJldHVybiBt
X3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOworICAgIH0KKyAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUiKQorICAgICAgICAmJiBXZWJH
TERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4dDNEKCkpKSB7CisgICAgICAg
IGlmICghbV93ZWJnbERlcHRoVGV4dHVyZSkgeworICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVNX2RlcHRoX3RleHR1cmUiKTsK
KyAgICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdM
RGVwdGhUZXh0dXJlPih0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV93ZWJnbERl
cHRoVGV4dHVyZS5nZXQoKTsKKyAgICB9CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJXRUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdCdWZmZXJzKCkpIHsKKyAgICAg
ICAgaWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJhd19idWZmZXJzIik7CisgICAg
ICAgICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRHJhd0J1
ZmZlcnM+KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3dlYmdsRHJhd0J1ZmZl
cnMuZ2V0KCk7CisgICAgfQorICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiQU5HTEVf
aW5zdGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJyYXlzOjpzdXBwb3J0ZWQodGhp
cykpIHsKKyAgICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzKSB7CisgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfaW5z
dGFuY2VkX2FycmF5cyIpOworICAgICAgICAgICAgbV9hbmdsZUluc3RhbmNlZEFycmF5cyA9IHN0
ZDo6bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRoaXMpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdldCgpOworICAgIH0KKyAgICBp
ZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9y
aW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpKSB7CisgICAgICAgICAg
ICBpZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKKyAgICAgICAgICAgICAgICBtX3dlYmds
RGVidWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdSZW5kZXJlcklu
Zm8+KHRoaXMpOworICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mby5n
ZXQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldF
QkdMX2RlYnVnX3NoYWRlcnMiKQorICAgICAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkgewor
ICAgICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQorICAgICAgICAgICAgICAgIG1f
d2ViZ2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMRGVidWdTaGFkZXJzPih0
aGlzKTsKKyAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdTaGFkZXJzLmdldCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1dlYkdMR2V0SW5mbyBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcihH
QzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygi
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFyZ2V0LCBhdHRhY2htZW50KSkK
KyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworCisgICAgaWYgKCFtX2ZyYW1lYnVmZmVy
QmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKSB7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIp
OworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgfQorCisgICAgV2ViR0xTaGFy
ZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRBdHRhY2htZW50T2Jq
ZWN0KGF0dGFjaG1lbnQpOworICAgIGlmICghb2JqZWN0KSB7CisgICAgICAgIGlmIChwbmFtZSA9
PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRSkK
KyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUp
OworICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJTlZBTElEX0VOVU0gaW4gdGhp
cyBjYXNlLCB3aGlsZSBkZXNrdG9wIEdMCisgICAgICAgIC8vIHNwZWNpZmllcyBJTlZBTElEX09Q
RVJBVElPTi4KKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlk
IHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9
CisKKyAgICBBU1NFUlQob2JqZWN0LT5pc1RleHR1cmUoKSB8fCBvYmplY3QtPmlzUmVuZGVyYnVm
ZmVyKCkpOworICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7CisgICAgICAgIHN3aXRjaCAo
cG5hbWUpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUpOworICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgorICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4ocmVpbnRlcnByZXRfY2FzdDxX
ZWJHTFRleHR1cmUqPihvYmplY3QpKSk7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0NVQkVfTUFQX0ZB
Q0U6CisgICAgICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NP
TE9SX0VOQ09ESU5HX0VYVDogeworICAgICAgICAgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAg
ICAgICAgICBtX2NvbnRleHQtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRh
cmdldCwgYXR0YWNobWVudCwgcG5hbWUsICZ2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdl
dEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1l
IGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQiKTsKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRjaCAocG5hbWUpIHsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9P
QkpFQ1RfVFlQRToKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUik7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNUX05BTUU6CisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViR0xSZW5kZXJidWZmZXIqPihvYmplY3QpKSk7CisgICAgICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX0NPTE9SX0VOQ09ESU5HX0VYVDogeworICAgICAgICAg
ICAgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
R0xSZW5kZXJidWZmZXIqPihvYmplY3QpOworICAgICAgICAgICAgR0MzRGVudW0gcmVuZGVyQnVm
ZmVyRm9ybWF0ID0gcmVuZGVyQnVmZmVyLT5nZXRJbnRlcm5hbEZvcm1hdCgpOworICAgICAgICAg
ICAgQVNTRVJUKHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUICYm
IHJlbmRlckJ1ZmZlckZvcm1hdCAhPSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKTsKKyAg
ICAgICAgICAgIGlmIChyZW5kZXJCdWZmZXJGb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9B
TFBIQThfRVhUKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRXh0ZW5zaW9u
czNEOjpTUkdCX0VYVCk7CisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEdyYXBoaWNz
Q29udGV4dDNEOjpMSU5FQVIpOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRhY2htZW50Iik7CisgICAgICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmdldFBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY29uc3QgaW50
IGludFplcm8gPSAwOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVf
V0lEVEhfUkFOR0U6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIo
cG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9S
QU5HRToKKyAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEFfQklUUzoKKyAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSX0JJTkRJTkc6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0
cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZEFycmF5QnVmZmVyKSk7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6QkxFTkQ6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9DT0xPUjoKKyAgICAgICAgcmV0
dXJuIGdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfRFNUX0FMUEhBOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJ
bnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RT
VF9SR0I6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6CisgICAgICAg
IHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJT05fUkdCOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
X1NSQ19BTFBIQToKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORF9TUkNfUkdCOgorICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkJMVUVfQklUUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFt
ZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6CisgICAg
ICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldEJv
b2xlYW5BcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFM6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
VWludDMyQXJyYXk6OmNyZWF0ZShtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1f
Y29tcHJlc3NlZFRleHR1cmVGb3JtYXRzLnNpemUoKSkpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkNVTExfRkFDRToKKyAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgorICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJPR1JBTToKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
byhQYXNzUmVmUHRyPFdlYkdMUHJvZ3JhbT4obV9jdXJyZW50UHJvZ3JhbSkpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JJVFM6CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZl
ckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5kZXB0aCkKKyAgICAgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oaW50WmVybyk7CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUp
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgorICAgICAg
ICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0ZVTkM6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6CisgICAg
ICAgIHJldHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1RFU1Q6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklU
RU1BU0s6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAgICAgIHJldHVybiBnZXRCb29sZWFu
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FS
UkFZX0JVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQ
dHI8V2ViR0xCdWZmZXI+KG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5
QnVmZmVyKCkpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5E
SU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1
ZmZlcj4obV9mcmFtZWJ1ZmZlckJpbmRpbmcpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpGUk9OVF9GQUNFOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5h
bWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgor
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6Cisg
ICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklG
T1JNX1ZFQ1RPUlM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKKyAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkU6
CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlM6CisgICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhf
QVRUUklCUzoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgorICAg
ICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUzoKKyAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQ
T1JUX0RJTVM6CisgICAgICAgIHJldHVybiBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1l
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRT
OgorICAgICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIGFsd2F5cyByZXR1cm4gMCBmb3IgdGhpcz8K
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UEFDS19BTElHTk1FTlQ6CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0
ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZB
Q1RPUjoKKyAgICAgICAgcmV0dXJuIGdldEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZR09OX09GRlNFVF9GSUxMOgorICAgICAgICByZXR1cm4g
Z2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
UE9MWUdPTl9PRkZTRVRfVU5JVFM6CisgICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihw
bmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVEX0JJVFM6CisgICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NS
ZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+KG1fcmVuZGVyYnVmZmVyQmluZGluZykpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkVSOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKFN0cmluZygiV2ViS2l0IFdlYkdMIikpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNBTVBMRV9CVUZGRVJTOgorICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgorICAg
ICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U0FNUExFX0NPVkVSQUdFX1ZBTFVFOgorICAgICAgICByZXR1cm4gZ2V0Rmxv
YXRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVM6
CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJh
eVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9U
RVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0hBRElOR19MQU5HVUFHRV9WRVJTSU9OOgorICAgICAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0
U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIiki
KTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKKyAgICAg
ICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRlVOQzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2ln
bmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVO
Q0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFD
S19QQVNTX0RFUFRIX1BBU1M6CisgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1JFRjoK
KyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1ZBTFVFX01BU0s6CisgICAgICAgIHJldHVybiBnZXRV
bnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFy
YW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JJVFM6
CisgICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5zdGVu
Y2lsKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKKyAgICAgICAg
cmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6U1RFTkNJTF9DTEVBUl9WQUxVRToKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgorICAgICAg
ICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlNURU5DSUxfRlVOQzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BB
U1NfREVQVEhfRkFJTDoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBu
YW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFT
UzoKKyAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1JFRjoKKyAgICAgICAgcmV0dXJuIGdldElu
dFBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9U
RVNUOgorICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9WQUxVRV9NQVNLOgorICAgICAgICByZXR1cm4g
Z2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgorICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6
CisgICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR18yRDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0
dXJlVW5pdF0udGV4dHVyZTJEQmluZGluZykpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQklORElOR19DVUJFX01BUDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQ
YXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5p
dF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VU5QQUNLX0FMSUdOTUVOVDoKKyAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKKyAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX3VucGFja0ZsaXBZKTsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8obV91bnBhY2tQcmVtdWx0aXBseUFscGhhKTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgorICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fdW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24pOworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFTkRPUjoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhTdHJpbmcoIldlYktpdCIpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJT
SU9OOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJHTCAxLjAgKCIgKyBtX2NvbnRl
eHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVSU0lPTikgKyAiKSIpOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJRVdQT1JUOgorICAgICAgICByZXR1cm4gZ2V0V2ViR0xJ
bnRBcnJheVBhcmFtZXRlcihwbmFtZSk7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5U
X1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMK
KyAgICAgICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykKKyAgICAgICAgICAgIHJldHVy
biBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9E
RVJJVkFUSVZFX0hJTlRfT0VTKTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRl
ciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAg
cmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6
VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6CisgICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJl
ckluZm8pCisgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3Ry
aW5nKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJFUikpOworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImlu
dmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJs
ZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIGNhc2UgV2ViR0xEZWJ1
Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfVkVORE9SX1dFQkdMOgorICAgICAgICBpZiAobV93ZWJn
bERlYnVnUmVuZGVyZXJJbmZvKQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX2Nv
bnRleHQtPmdldFN0cmluZyhHcmFwaGljc0NvbnRleHQzRDo6VkVORE9SKSk7CisgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJh
bWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5m
byBub3QgZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OlZFUlRFWF9BUlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9h
cnJheV9vYmplY3QKKyAgICAgICAgaWYgKG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKKyAgICAg
ICAgICAgIGlmICghbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUz4obV9ib3VuZFZlcnRleEFycmF5T2JqZWN0KSk7CisgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgICAgIH0KKyAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJp
bnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgZW5hYmxl
ZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljCisgICAgICAgIGlmIChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykK
KyAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6
Ok1BWF9URVhUVVJFX01BWF9BTklTT1RST1BZX0VYVCk7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBl
bmFibGVkIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBjYXNlIEV4dGVu
c2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFDSE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBC
RUdJTgorICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQorICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhnZXRNYXhDb2xvckF0dGFjaG1lbnRzKCkpOworICAgICAgICBzeW50aGVz
aXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxl
ZCIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhUOgorICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJz
KQorICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1
ZmZlcnMgbm90IGVuYWJsZWQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAg
IGRlZmF1bHQ6CisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKKyAgICAgICAgICAgICYm
IHBuYW1lID49IEV4dGVuc2lvbnMzRDo6RFJBV19CVUZGRVIwX0VYVAorICAgICAgICAgICAgJiYg
cG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBf
RVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMoKSkpIHsKKyAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUg
PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORTsKKyAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVy
QmluZGluZykKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5n
ZXREcmF3QnVmZmVyKHBuYW1lKTsKKyAgICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1
ZmZlcgorICAgICAgICAgICAgICAgIHZhbHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKKyAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgICAgICB9CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgfQorfQorCitXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlz
Q29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3Jh
bVBhcmFtZXRlciIsIHByb2dyYW0pKQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisK
KyAgICBHQzNEaW50IHZhbHVlID0gMDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhwcm9ncmFtLT5pc0RlbGV0ZWQoKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VkFMSURBVEVfU1RBVFVTOgorICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RP
clplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TElOS19TVEFUVVM6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+Z2V0
TGlua1N0YXR1cygpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFE
RVJTOgorICAgICAgICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3Jh
bSksIHBuYW1lLCAmdmFsdWUpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVM6CisgICAgICAgIG1fY29udGV4dC0+
Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5h
bWUsICZ2YWx1ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRQcm9ncmFtUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworU3RyaW5nIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9n
cmFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKyAg
ICBpZiAoIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkp
CisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQt
PmdldFByb2dyYW1JbmZvTG9nKG9iamVjdE9yWmVybyhwcm9ncmFtKSkpOworfQorCitXZWJHTEdl
dEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAi
aW52YWxpZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0K
KyAgICBpZiAoIW1fcmVuZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVu
ZGVyYnVmZmVyIGJvdW5kIik7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICB9
CisKKyAgICBpZiAobV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMCisgICAgICAgICYmICFtX3JlbmRlcmJ1
ZmZlckJpbmRpbmctPmlzVmFsaWQoKSkgeworICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2ls
U3VwcG9ydGVkKCkpOworICAgICAgICBpbnQgdmFsdWUgPSAwOworICAgICAgICBzd2l0Y2ggKHBu
YW1lKSB7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURU
SDoKKyAgICAgICAgICAgIHZhbHVlID0gbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUl9IRUlHSFQ6CisgICAgICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmlu
ZGluZy0+Z2V0SGVpZ2h0KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX1JFRF9TSVpFOgorICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfR1JFRU5fU0laRToKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKKyAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0FMUEhBX1NJWkU6CisgICAgICAgICAgICB2YWx1
ZSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJWkU6CisgICAgICAgICAgICB2YWx1ZSA9IDI0OworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUl9TVEVOQ0lMX1NJWkU6CisgICAgICAgICAgICB2YWx1ZSA9IDg7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVS
TkFMX0ZPUk1BVDoKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwor
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIH0KKworICAgIEdDM0RpbnQgdmFsdWUgPSAw
OworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVJfV0lEVEg6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
X0hFSUdIVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJ
WkU6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfREVQVEhfU0laRToKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfU1RFTkNJTF9TSVpFOgorICAgICAgICBt
X2NvbnRleHQtPmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVQ6CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgp
KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQg
cGFyYW1ldGVyIG5hbWUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0K
K30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1l
dGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoImdldFNoYWRlclBhcmFtZXRlciIsIHNoYWRl
cikpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBHQzNEaW50IHZhbHVlID0g
MDsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVM
RVRFX1NUQVRVUzoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlzRGVsZXRl
ZCgpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKKyAgICAg
ICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2
YWx1ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFs
dWUpKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTSEFERVJfVFlQRToKKyAgICAgICAg
bV9jb250ZXh0LT5nZXRTaGFkZXJpdihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1
ZSk7CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Pih2YWx1ZSkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxp
ZCBwYXJhbWV0ZXIgbmFtZSIpOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAg
fQorfQorCitTdHJpbmcgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdl
YkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJB
TShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xv
ZyIsIHNoYWRlcikpCisgICAgICAgIHJldHVybiAiIjsKKyAgICByZXR1cm4gZW5zdXJlTm90TnVs
bChtX2NvbnRleHQtPmdldFNoYWRlckluZm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsKK30K
KworUGFzc1JlZlB0cjxXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0Mz
RGVudW0gcHJlY2lzaW9uVHlwZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BB
UkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICBzd2l0Y2ggKHNoYWRlclR5cGUpIHsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpWRVJURVhfU0hBREVSOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QUdNRU5UX1NIQURFUjoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRl
clByZWNpc2lvbkZvcm1hdCIsICJpbnZhbGlkIHNoYWRlciB0eXBlIik7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKyAgICBzd2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpMT1dfRkxPQVQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6TUVESVVNX0ZMT0FUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TE9XX0lOVDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpNRURJVU1fSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hf
SU5UOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9u
Rm9ybWF0IiwgImludmFsaWQgcHJlY2lzaW9uIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorCisgICAgR0MzRGludCByYW5nZVsyXSA9IHswLCAwfTsKKyAgICBHQzNEaW50
IHByZWNpc2lvbiA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQo
c2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlwZSwgcmFuZ2UsICZwcmVjaXNpb24pOworICAgIHJldHVy
biBXZWJHTFNoYWRlclByZWNpc2lvbkZvcm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwg
cHJlY2lzaW9uKTsKK30KKworU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVy
U291cmNlKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hh
ZGVyU291cmNlIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuICIiOworICAgIHJldHVybiBlbnN1
cmVOb3ROdWxsKHNoYWRlci0+Z2V0U291cmNlKCkpOworfQorCitWZWN0b3I8U3RyaW5nPiBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQoreworICAgIFZlY3Rv
cjxTdHJpbmc+IHJlc3VsdDsKKworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24p
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9FWFRfYmxlbmRfbWlubWF4IikpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoIkVYVF9ibGVuZF9taW5tYXgiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9FWFRfc1JHQiIpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJF
WFRfc1JHQiIpOworICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMo
IkdMX0VYVF9mcmFnX2RlcHRoIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9mcmFnX2Rl
cHRoIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xf
T0VTX3RleHR1cmVfZmxvYXQiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVf
ZmxvYXQiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJH
TF9PRVNfdGV4dHVyZV9mbG9hdF9saW5lYXIiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VT
X3RleHR1cmVfZmxvYXRfbGluZWFyIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdCIpKQorICAgICAgICByZXN1
bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik7CisgICAgaWYgKG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9P
RVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgaWYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5zdXBwb3J0cygiR0xfRVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xvZCIpKQorICAg
ICAgICByZXN1bHQuYXBwZW5kKCJFWFRfc2hhZGVyX3RleHR1cmVfbG9kIik7CisgICAgaWYgKG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZmlsdGVy
X2FuaXNvdHJvcGljIikpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQktJVF9FWFRfdGV4dHVy
ZV9maWx0ZXJfYW5pc290cm9waWMiKTsKKyAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPnN1cHBvcnRzKCJHTF9PRVNfdmVydGV4X2FycmF5X29iamVjdCIpKQorICAgICAgICByZXN1
bHQuYXBwZW5kKCJPRVNfdmVydGV4X2FycmF5X29iamVjdCIpOworICAgIGlmIChtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19lbGVtZW50X2luZGV4X3VpbnQiKSkK
KyAgICAgICAgcmVzdWx0LmFwcGVuZCgiT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpOworICAgIHJl
c3VsdC5hcHBlbmQoIldFQkdMX2xvc2VfY29udGV4dCIpOworICAgIGlmIChXZWJHTENvbXByZXNz
ZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIldF
QktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfYXRjIik7CisgICAgaWYgKFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKQorICAgICAgICByZXN1bHQuYXBwZW5k
KCJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIik7CisgICAgaWYgKFdlYkdM
Q29tcHJlc3NlZFRleHR1cmVTM1RDOjpzdXBwb3J0ZWQodGhpcykpCisgICAgICAgIHJlc3VsdC5h
cHBlbmQoIldFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIik7CisgICAgaWYgKFdlYkdMRGVw
dGhUZXh0dXJlOjpzdXBwb3J0ZWQoZ3JhcGhpY3NDb250ZXh0M0QoKSkpCisgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIldFQkdMX2RlcHRoX3RleHR1cmUiKTsKKyAgICBpZiAoc3VwcG9ydHNEcmF3QnVm
ZmVycygpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kcmF3X2J1ZmZlcnMiKTsKKyAg
ICBpZiAoQU5HTEVJbnN0YW5jZWRBcnJheXM6OnN1cHBvcnRlZCh0aGlzKSkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZCgiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOworCisgICAgaWYgKGFsbG93UHJp
dmlsZWdlZEV4dGVuc2lvbnMoKSkgeworICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiKSkKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RlYnVnX3NoYWRlcnMiKTsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyIpOworICAgIH0KKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKKyAgICBXZWJH
TFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImdldFRleFBhcmFtZXRlciIs
IHRhcmdldCwgZmFsc2UpOworICAgIGlmICghdGV4KQorICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7CisgICAgR0MzRGludCB2YWx1ZSA9IDA7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUjoKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9XUkFQX1M6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9XUkFQX1Q6CisgICAgICAgIG1fY29udGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0
LCBwbmFtZSwgJnZhbHVlKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6OlRFWFRVUkVf
TUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMKKyAg
ICAgICAgaWYgKG1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljKSB7CisgICAgICAgICAgICBt
X2NvbnRleHQtPmdldFRleFBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7CisgICAg
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFs
dWUpKTsKKyAgICAgICAgfQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVy
IG5hbWUsIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYyBub3QgZW5hYmxlZCIpOworICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFRleFBhcmFt
ZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybiBXZWJHTEdl
dEluZm8oKTsKKyAgICB9Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmdldFVuaWZvcm0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogdW5pZm9ybUxvY2F0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRl
V2ViR0xPYmplY3QoImdldFVuaWZvcm0iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOworICAgIGlmICghdW5pZm9ybUxvY2F0aW9uIHx8IHVuaWZvcm1Mb2NhdGlvbi0+
cHJvZ3JhbSgpICE9IHByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2V0VW5pZm9ybSIsICJubyB1bmlmb3Jt
bG9jYXRpb24gb3Igbm90IHZhbGlkIGZvciB0aGlzIHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAgICBHQzNEaW50IGxvY2F0aW9uID0gdW5pZm9ybUxv
Y2F0aW9uLT5sb2NhdGlvbigpOworCisgICAgR0MzRGVudW0gYmFzZVR5cGU7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoOworICAgIHN3aXRjaCAodW5pZm9ybUxvY2F0aW9uLT50eXBlKCkpIHsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNz
Q29udGV4dDNEOjpCT09MOworICAgICAgICBsZW5ndGggPSAxOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzI6CisgICAgICAgIGJhc2VUeXBlID0g
R3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMzoKKyAgICAgICAgYmFz
ZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTDsKKyAgICAgICAgbGVuZ3RoID0gMzsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUM0OgorICAg
ICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOworICAgICAgICBsZW5ndGgg
PSA0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlQ6Cisg
ICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAgICAgICAgbGVuZ3Ro
ID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5UX1ZF
QzI6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAgICAgICAg
bGVuZ3RoID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
SU5UX1ZFQzM6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklOVDsKKyAg
ICAgICAgbGVuZ3RoID0gMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UX1ZFQzQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OklO
VDsKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OkZMT0FUOworICAgICAgICBsZW5ndGggPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMyOgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAgbGVuZ3RoID0gMjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDMzoKKyAgICAgICAgYmFzZVR5cGUg
PSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7CisgICAgICAgIGxlbmd0aCA9IDM7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzQ6CisgICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSA0
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9NQVQy
OgorICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKKyAgICAgICAg
bGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVRfTUFUMzoKKyAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7
CisgICAgICAgIGxlbmd0aCA9IDk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkZMT0FUX01BVDQ6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FUOworICAgICAgICBsZW5ndGggPSAxNjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl8yRDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVSX0NVQkU6CisgICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6
OklOVDsKKyAgICAgICAgbGVuZ3RoID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgLy8gQ2FuJ3QgaGFuZGxlIHRoaXMgdHlwZQorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFVuaWZvcm0iLCAidW5o
YW5kbGVkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KKyAg
ICBzd2l0Y2ggKGJhc2VUeXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6
IHsKKyAgICAgICAgR0MzRGZsb2F0IHZhbHVlWzE2XSA9IHswfTsKKyAgICAgICAgaWYgKG1faXNS
b2J1c3RuZXNzRVhUU3VwcG9ydGVkKQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmdldG5Vbmlmb3JtZnZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBsb2NhdGlvbiwg
MTYgKiBzaXplb2YoR0MzRGZsb2F0KSwgdmFsdWUpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtX2NvbnRleHQtPmdldFVuaWZvcm1mdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9u
LCB2YWx1ZSk7CisgICAgICAgIGlmIChsZW5ndGggPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8odmFsdWVbMF0pOworICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0
MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsKKyAgICB9CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6SU5UOiB7CisgICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7MH07CisgICAg
ICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAgICAgICAgIG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVybyhwcm9ncmFt
KSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJvKHByb2dyYW0p
LCBsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICBpZiAobGVuZ3RoID09IDEpCisgICAgICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlWzBdKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhJbnQzMkFycmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOworICAgIH0KKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOiB7CisgICAgICAgIEdDM0RpbnQgdmFsdWVbNF0gPSB7
MH07CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAgICAgICAg
IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRuVW5pZm9ybWl2RVhUKG9iamVjdE9yWmVy
byhwcm9ncmFtKSwgbG9jYXRpb24sIDQgKiBzaXplb2YoR0MzRGludCksIHZhbHVlKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRVbmlmb3JtaXYob2JqZWN0T3JaZXJv
KHByb2dyYW0pLCBsb2NhdGlvbiwgdmFsdWUpOworICAgICAgICBpZiAobGVuZ3RoID4gMSkgewor
ICAgICAgICAgICAgYm9vbCBib29sVmFsdWVbMTZdID0gezB9OworICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKQorICAgICAgICAgICAgICAgIGJvb2xWYWx1
ZVtqXSA9IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlW2pdKTsKKyAgICAgICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oYm9vbFZhbHVlLCBsZW5ndGgpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbMF0pKTsKKyAgICB9CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisKKyAgICAvLyBJZiB3
ZSBnZXQgaGVyZSwgc29tZXRoaW5nIHdlbnQgd3JvbmcgaW4gb3VyIHVuZm9ydHVuYXRlbHkgY29t
cGxleCBsb2dpYyBhYm92ZQorICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmtub3duIGVycm9yIik7CisgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbygpOworfQorCitQYXNzUmVmUHRyPFdlYkdMVW5pZm9ybUxvY2F0aW9u
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuaWZvcm1Mb2NhdGlvbihXZWJHTFByb2dyYW0q
IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRVbmlmb3JtTG9jYXRpb24iLCBwcm9ncmFtKSkKKyAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYgKCF2YWxpZGF0ZUxvY2F0aW9uTGVuZ3RoKCJnZXRV
bmlmb3JtTG9jYXRpb24iLCBuYW1lKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgaWYg
KCF2YWxpZGF0ZVN0cmluZygiZ2V0VW5pZm9ybUxvY2F0aW9uIiwgbmFtZSkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGlmIChpc1ByZWZpeFJlc2VydmVkKG5hbWUpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICBpZiAoIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sICJnZXRVbmlmb3JtTG9jYXRpb24iLCAicHJvZ3JhbSBub3QgbGlua2VkIik7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBHQzNEaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1f
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbmFtZSk7
CisgICAgaWYgKHVuaWZvcm1Mb2NhdGlvbiA9PSAtMSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICBHQzNEaW50IGFjdGl2ZVVuaWZvcm1zID0gMDsKKyAgICBtX2NvbnRleHQtPmdldE5v
bkJ1aWx0SW5BY3RpdmVTeW1ib2xDb3VudChvYmplY3RPclplcm8ocHJvZ3JhbSksIEdyYXBoaWNz
Q29udGV4dDNEOjpBQ1RJVkVfVU5JRk9STVMsICZhY3RpdmVVbmlmb3Jtcyk7CisgICAgZm9yIChH
QzNEaW50IGkgPSAwOyBpIDwgYWN0aXZlVW5pZm9ybXM7IGkrKykgeworICAgICAgICBBY3RpdmVJ
bmZvIGluZm87CisgICAgICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVVbmlmb3JtKG9iamVj
dE9yWmVybyhwcm9ncmFtKSwgaSwgaW5mbykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgLy8gU3RyaXAgIlswXSIgZnJvbSB0aGUgbmFtZSBpZiBpdCdzIGFuIGFycmF5Lgor
ICAgICAgICBpZiAoaW5mby5uYW1lLmVuZHNXaXRoKCJbMF0iKSkKKyAgICAgICAgICAgIGluZm8u
bmFtZSA9IGluZm8ubmFtZS5sZWZ0KGluZm8ubmFtZS5sZW5ndGgoKSAtIDMpOworICAgICAgICAv
LyBJZiBpdCdzIGFuIGFycmF5LCB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBlYWNoIGVsZW1l
bnQsIGFwcGVuZGluZyAiW2luZGV4XSIgdG8gdGhlIG5hbWUuCisgICAgICAgIGZvciAoR0MzRGlu
dCBpbmRleCA9IDA7IGluZGV4IDwgaW5mby5zaXplOyArK2luZGV4KSB7CisgICAgICAgICAgICBT
dHJpbmcgdW5pZm9ybU5hbWUgPSBpbmZvLm5hbWUgKyAiWyIgKyBTdHJpbmc6Om51bWJlcihpbmRl
eCkgKyAiXSI7CisKKyAgICAgICAgICAgIGlmIChuYW1lID09IHVuaWZvcm1OYW1lIHx8IG5hbWUg
PT0gaW5mby5uYW1lKQorICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTFVuaWZvcm1Mb2NhdGlv
bjo6Y3JlYXRlKHByb2dyYW0sIHVuaWZvcm1Mb2NhdGlvbiwgaW5mby50eXBlKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliKEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKworICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKworICAgIGlmIChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJnZXRW
ZXJ0ZXhBdHRyaWIiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKKyAgICB9CisKKyAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
OjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKworICAgIGlmIChtX2FuZ2xlSW5zdGFuY2VkQXJy
YXlzICYmIHBuYW1lID09IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX0RJ
VklTT1JfQU5HTEUpCisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuZGl2aXNvcik7
CisKKyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVS
VEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElORzoKKyAgICAgICAgaWYgKCghaXNHTEVTMkNv
bXBsaWFudCgpICYmICFpbmRleCAmJiBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdldFZlcnRl
eEF0dHJpYlN0YXRlKDApLmJ1ZmZlckJpbmRpbmcgPT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyKQor
ICAgICAgICAgICAgfHwgIXN0YXRlLmJ1ZmZlckJpbmRpbmcKKyAgICAgICAgICAgIHx8ICFzdGF0
ZS5idWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKKyAgICAgICAgICAgIHJldHVybiBXZWJHTEdldElu
Zm8oKTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMQnVmZmVy
PihzdGF0ZS5idWZmZXJCaW5kaW5nKSk7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVS
VEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgorICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0
YXRlLmVuYWJsZWQpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJf
QVJSQVlfTk9STUFMSVpFRDoKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5ub3Jt
YWxpemVkKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZ
X1NJWkU6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUuc2l6ZSk7CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJREU6CisgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUub3JpZ2luYWxTdHJpZGUpOworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfVFlQRToKKyAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhzdGF0ZS50eXBlKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpD
VVJSRU5UX1ZFUlRFWF9BVFRSSUI6CisgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQz
MkFycmF5OjpjcmVhdGUobV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF0udmFsdWUsIDQpKTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0VmVydGV4QXR0cmliIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKKyAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOworICAgIH0KK30KKworbG9uZyBsb25n
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGlu
ZGV4LCBHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQorICAgICAgICByZXR1cm4gMDsKKyAgICBHQzNEc2l6ZWlwdHIgcmVzdWx0ID0gbV9jb250ZXh0
LT5nZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKKyAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8bG9uZyBsb25nPihyZXN1bHQpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGJvb2wgaXNWYWxpZCA9
IGZhbHNlOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6R0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAgICAgIGlzVmFsaWQgPSB0cnVlOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6RlJBR01FTlRfU0hBREVSX0RFUklWQVRJ
VkVfSElOVF9PRVM6IC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcworICAgICAgICBpZiAobV9v
ZXNTdGFuZGFyZERlcml2YXRpdmVzKQorICAgICAgICAgICAgaXNWYWxpZCA9IHRydWU7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIWlzVmFsaWQpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImhpbnQiLCAiaW52YWxp
ZCB0YXJnZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbnRleHQtPmhpbnQo
dGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpp
c0J1ZmZlcihXZWJHTEJ1ZmZlciogYnVmZmVyKQoreworICAgIGlmICghYnVmZmVyIHx8IGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIWJ1ZmZl
ci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBt
X2NvbnRleHQtPmlzQnVmZmVyKGJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6aXNDb250ZXh0TG9zdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29u
dGV4dExvc3Q7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkKK3sKKyAgICBpZiAobV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uICYmICFt
X2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24pIHsKKyAgICAgICAgTE9HKFdlYkdMLCAiQ29u
dGV4dCBpcyBiZWluZyB1c2VkLiBBdHRlbXB0IHRvIHJlc29sdmUgdGhlIHBvbGljeS4iKTsKKyAg
ICAgICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzKCktPmRvY3VtZW50KCkudG9wRG9jdW1l
bnQoKTsKKyAgICAgICAgUGFnZSogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKTsKKyAgICAgICAgaWYg
KHBhZ2UgJiYgIWRvY3VtZW50LnVybCgpLmlzTG9jYWxGaWxlKCkpCisgICAgICAgICAgICBwYWdl
LT5tYWluRnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS5yZXNvbHZlV2ViR0xQb2xpY3lGb3JVUkwo
ZG9jdW1lbnQudXJsKCkpOworICAgICAgICAvLyBGSVhNRTogV2UgZG9uJ3QgY3VycmVudGx5IGRv
IGFueXRoaW5nIHdpdGggdGhlIHJlc3VsdCBmcm9tIHJlc29sdXRpb24uIEEgbW9yZQorICAgICAg
ICAvLyBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvbiBtaWdodCB0cnkgdG8gY29uc3RydWN0IGEgcmVh
bCBjb250ZXh0LCBldGMgYW5kIHByb2NlZWQKKyAgICAgICAgLy8gd2l0aCBub3JtYWwgb3BlcmF0
aW9uLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTI5MTIyCisgICAgICAgIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbiA9IHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIG1fY29udGV4dExvc3QgfHwgbV9pc1BlbmRpbmdQb2xpY3lSZXNv
bHV0aW9uOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRW5hYmxl
ZChHQzNEZW51bSBjYXApCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVDYXBhYmlsaXR5KCJpc0VuYWJsZWQiLCBjYXApKQorICAgICAgICByZXR1cm4gMDsK
KyAgICBpZiAoY2FwID09IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpCisgICAgICAg
IHJldHVybiBtX3N0ZW5jaWxFbmFibGVkOworICAgIHJldHVybiBtX2NvbnRleHQtPmlzRW5hYmxl
ZChjYXApOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzRnJhbWVi
dWZmZXIoV2ViR0xGcmFtZWJ1ZmZlciogZnJhbWVidWZmZXIpCit7CisgICAgaWYgKCFmcmFtZWJ1
ZmZlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKCFmcmFtZWJ1ZmZlci0+aGFzRXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4g
MDsKKworICAgIHJldHVybiBtX2NvbnRleHQtPmlzRnJhbWVidWZmZXIoZnJhbWVidWZmZXItPm9i
amVjdCgpKTsKK30KKworR0MzRGJvb2xlYW4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1Byb2dy
YW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtKQoreworICAgIGlmICghcHJvZ3JhbSB8fCBpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIG1fY29u
dGV4dC0+aXNQcm9ncmFtKHByb2dyYW0tPm9iamVjdCgpKTsKK30KKworR0MzRGJvb2xlYW4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppc1JlbmRlcmJ1ZmZlcihXZWJHTFJlbmRlcmJ1ZmZlciogcmVu
ZGVyYnVmZmVyKQoreworICAgIGlmICghcmVuZGVyYnVmZmVyIHx8IGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIXJlbmRlcmJ1ZmZlci0+aGFz
RXZlckJlZW5Cb3VuZCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2NvbnRl
eHQtPmlzUmVuZGVyYnVmZmVyKHJlbmRlcmJ1ZmZlci0+b2JqZWN0KCkpOworfQorCitHQzNEYm9v
bGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzU2hhZGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIp
Cit7CisgICAgaWYgKCFzaGFkZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIHJldHVybiBtX2NvbnRleHQtPmlzU2hhZGVyKHNoYWRlci0+b2Jq
ZWN0KCkpOworfQorCitHQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4dHVy
ZShXZWJHTFRleHR1cmUqIHRleHR1cmUpCit7CisgICAgaWYgKCF0ZXh0dXJlIHx8IGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoIXRleHR1cmUt
Pmhhc0V2ZXJCZWVuQm91bmQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gbV9j
b250ZXh0LT5pc1RleHR1cmUodGV4dHVyZS0+b2JqZWN0KCkpOworfQorCit2b2lkIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT5s
aW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bGlua1By
b2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBV
TlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImxpbmtQcm9ncmFtIiwgcHJvZ3JhbSkpCisgICAgICAgIHJldHVy
bjsKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgeworICAgICAgICBXZWJHTFNoYWRlciog
dmVydGV4U2hhZGVyID0gcHJvZ3JhbS0+Z2V0QXR0YWNoZWRTaGFkZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OlZFUlRFWF9TSEFERVIpOworICAgICAgICBXZWJHTFNoYWRlciogZnJhZ21lbnRTaGFkZXIg
PSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBR01FTlRf
U0hBREVSKTsKKyAgICAgICAgaWYgKCF2ZXJ0ZXhTaGFkZXIgfHwgIXZlcnRleFNoYWRlci0+aXNW
YWxpZCgpIHx8ICFmcmFnbWVudFNoYWRlciB8fCAhZnJhZ21lbnRTaGFkZXItPmlzVmFsaWQoKSB8
fCAhbV9jb250ZXh0LT5wcmVjaXNpb25zTWF0Y2gob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciks
IG9iamVjdE9yWmVybyhmcmFnbWVudFNoYWRlcikpIHx8ICFtX2NvbnRleHQtPmNoZWNrVmFyeWlu
Z3NQYWNraW5nKG9iamVjdE9yWmVybyh2ZXJ0ZXhTaGFkZXIpLCBvYmplY3RPclplcm8oZnJhZ21l
bnRTaGFkZXIpKSkgeworICAgICAgICAgICAgcHJvZ3JhbS0+c2V0TGlua1N0YXR1cyhmYWxzZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBtX2NvbnRleHQt
PmxpbmtQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7CisgICAgcHJvZ3JhbS0+aW5jcmVh
c2VMaW5rQ291bnQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBpeGVsU3Rv
cmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQoreworICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKHBuYW1lKSB7Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKKyAgICAgICAg
bV91bnBhY2tGbGlwWSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0w6CisgICAgICAgIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSA9IHBhcmFtOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09MT1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgorICAg
ICAgICBpZiAocGFyYW0gPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVGQVVMVF9XRUJH
TCB8fCBwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSkKKyAgICAgICAgICAgIG1fdW5w
YWNrQ29sb3JzcGFjZUNvbnZlcnNpb24gPSBzdGF0aWNfY2FzdDxHQzNEZW51bT4ocGFyYW0pOwor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
Zm9yIFVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0wiKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpQQUNLX0FMSUdOTUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tf
QUxJR05NRU5UOgorICAgICAgICBpZiAocGFyYW0gPT0gMSB8fCBwYXJhbSA9PSAyIHx8IHBhcmFt
ID09IDQgfHwgcGFyYW0gPT0gOCkgeworICAgICAgICAgICAgaWYgKHBuYW1lID09IEdyYXBoaWNz
Q29udGV4dDNEOjpQQUNLX0FMSUdOTUVOVCkKKyAgICAgICAgICAgICAgICBtX3BhY2tBbGlnbm1l
bnQgPSBwYXJhbTsKKyAgICAgICAgICAgIGVsc2UgLy8gR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFD
S19BTElHTk1FTlQ6CisgICAgICAgICAgICAgICAgbV91bnBhY2tBbGlnbm1lbnQgPSBwYXJhbTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFLCAicGl4ZWxTdG9yZWkiLCAiaW52YWxpZCBwYXJhbWV0ZXIgZm9y
IGFsaWdubWVudCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBu
YW1lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykK
K3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47Cisg
ICAgbV9jb250ZXh0LT5wb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJikKK3sKKyAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgLy8gRHVl
IHRvIFdlYkdMJ3Mgc2FtZS1vcmlnaW4gcmVzdHJpY3Rpb25zLCBpdCBpcyBub3QgcG9zc2libGUg
dG8KKyAgICAvLyB0YWludCB0aGUgb3JpZ2luIHVzaW5nIHRoZSBXZWJHTCBBUEkuCisgICAgQVNT
RVJUKGNhbnZhcygpLT5vcmlnaW5DbGVhbigpKTsKKyAgICAvLyBWYWxpZGF0ZSBpbnB1dCBwYXJh
bWV0ZXJzLgorICAgIGlmICghcGl4ZWxzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAicmVhZFBpeGVscyIsICJubyBkZXN0aW5h
dGlvbiBBcnJheUJ1ZmZlclZpZXciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzd2l0
Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0JBOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZh
bGlkIGZvcm1hdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCAicmVhZFBpeGVscyIsICJpbnZhbGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBpZiAoZm9ybWF0ICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBIHx8IHR5cGUg
IT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKKyAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAicmVhZFBpeGVs
cyIsICJmb3JtYXQgbm90IFJHQkEgb3IgdHlwZSBub3QgVU5TSUdORURfQllURSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIC8vIFZhbGlkYXRlIGFycmF5IHR5cGUgYWdhaW5zdCBwaXhl
bCB0eXBlLgorICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZWFkUGl4ZWxzIiwgIkFycmF5QnVmZmVyVmlldyBub3QgVWludDhBcnJheSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1
ZmZlciBpbmNvbXBsZXRlIjsKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJh
bWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJj
ZVNhZmUoKSwgJnJlYXNvbikpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsIHJl
YXNvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgLy8gQ2FsY3VsYXRlIGFycmF5IHNp
emUsIHRha2luZyBpbnRvIGNvbnNpZGVyYXRpb24gb2YgUEFDS19BTElHTk1FTlQuCisgICAgdW5z
aWduZWQgaW50IHRvdGFsQnl0ZXNSZXF1aXJlZCA9IDA7CisgICAgdW5zaWduZWQgaW50IHBhZGRp
bmcgPSAwOworICAgIGlmICghbV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQpIHsKKyAgICAgICAg
R0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1h
dCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV9wYWNrQWxpZ25tZW50LCAmdG90YWxCeXRlc1JlcXVp
cmVkLCAmcGFkZGluZyk7CisgICAgICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9fRVJST1IpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAicmVhZFBp
eGVscyIsICJpbnZhbGlkIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3RhbEJ5dGVzUmVxdWly
ZWQpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBsYXJn
ZSBlbm91Z2ggZm9yIGRpbWVuc2lvbnMiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisgICAgdm9pZCogZGF0YSA9IHBp
eGVscy0+YmFzZUFkZHJlc3MoKTsKKworICAgIHsKKyAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZl
ckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGlu
Zy5nZXQoKSk7CisgICAgICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZWFkblBpeGVsc0VYVCh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscy0+Ynl0ZUxlbmd0aCgpLCBkYXRhKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7CisgICAgfQorCisjaWYgT1MoREFSV0lO
KQorICAgIGlmIChtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgLy8gd2UgaGF2ZW4ndCBjb21w
dXRlZCBwYWRkaW5nCisgICAgICAgIG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMo
Zm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVz
UmVxdWlyZWQsICZwYWRkaW5nKTsKKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgc2VjdGlvbiB3
aGVuIEdMIGRyaXZlciBidWcgb24gTWFjIEFORCB0aGUgR0xFUyBkcml2ZXIgYnVnCisgICAgLy8g
b24gUUMgaXMgZml4ZWQsIGkuZS4sIHdoZW4gYWxwaGEgaXMgb2ZmLCByZWFkUGl4ZWxzIHNob3Vs
ZAorICAgIC8vIHNldCBhbHBoYSB0byAyNTUgaW5zdGVhZCBvZiAwLgorICAgIGlmICghbV9mcmFt
ZWJ1ZmZlckJpbmRpbmcgJiYgIW1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKS5hbHBo
YSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMgPSByZWludGVycHJldF9jYXN0PHVu
c2lnbmVkIGNoYXIqPihkYXRhKTsKKyAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXkgPSAwOyBpeSA8
IGhlaWdodDsgKytpeSkgeworICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWkgaXggPSAwOyBpeCA8
IHdpZHRoOyArK2l4KSB7CisgICAgICAgICAgICAgICAgcGl4ZWxzWzNdID0gMjU1OworICAgICAg
ICAgICAgICAgIHBpeGVscyArPSA0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGl4ZWxz
ICs9IHBhZGRpbmc7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlbGVhc2VTaGFkZXJDb21waWxlcigpCit7CisgICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+cmVs
ZWFzZVNoYWRlckNvbXBpbGVyKCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpy
ZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3Jt
YXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKHRhcmdldCAhPSBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdl
IiwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFt
X3JlbmRlcmJ1ZmZlckJpbmRpbmcgfHwgIW1fcmVuZGVyYnVmZmVyQmluZGluZy0+b2JqZWN0KCkp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCAicmVuZGVyYnVmZmVyU3RvcmFnZSIsICJubyBib3VuZCByZW5kZXJidWZmZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgicmVuZGVy
YnVmZmVyU3RvcmFnZSIsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICByZXR1cm47CisgICAgc3dp
dGNoIChpbnRlcm5hbGZvcm1hdCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0NPTVBPTkVOVDE2OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE0OgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjVfQTE6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCNTY1OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4Ogor
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUOgorICAgICAgICBpZiAoaW50
ZXJuYWxmb3JtYXQgPT0gRXh0ZW5zaW9uczNEOjpTUkdCOF9BTFBIQThfRVhUICYmICFtX2V4dHNS
R0IpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3Jt
YXQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX2NvbnRleHQt
PnJlbmRlcmJ1ZmZlclN0b3JhZ2UodGFyZ2V0LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50
ZXJuYWxmb3JtYXQpOworICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQo
dHJ1ZSk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
U1RFTkNJTDoKKyAgICAgICAgaWYgKGlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpIHsKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIEV4dGVuc2lvbnMz
RDo6REVQVEgyNF9TVEVOQ0lMOCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAg
bV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRTaXplKHdpZHRoLCBoZWlnaHQpOworICAgICAgICBt
X3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldElzVmFsaWQoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQo
KSk7CisgICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SW50ZXJuYWxGb3JtYXQoaW50
ZXJuYWxmb3JtYXQpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAicmVuZGVyYnVm
ZmVyU3RvcmFnZSIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgYXBwbHlTdGVuY2lsVGVzdCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6c2FtcGxlQ292ZXJhZ2UoR0MzRGZsb2F0IHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZl
cnQpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmICghdmFsaWRhdGVTaXplKCJz
Y2lzc29yIiwgd2lkdGgsIGhlaWdodCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQt
PnNjaXNzb3IoeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpzaGFkZXJTb3VyY2UoV2ViR0xTaGFkZXIqIHNoYWRlciwgY29uc3QgU3RyaW5nJiBz
dHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgic2hh
ZGVyU291cmNlIiwgc2hhZGVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIFN0cmluZyBzdHJpbmdX
aXRob3V0Q29tbWVudHMgPSBTdHJpcENvbW1lbnRzKHN0cmluZykucmVzdWx0KCk7CisgICAgaWYg
KCF2YWxpZGF0ZVN0cmluZygic2hhZGVyU291cmNlIiwgc3RyaW5nV2l0aG91dENvbW1lbnRzKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHNoYWRlci0+c2V0U291cmNlKHN0cmluZyk7CisgICAgbV9j
b250ZXh0LT5zaGFkZXJTb3VyY2Uob2JqZWN0T3JaZXJvKHNoYWRlciksIHN0cmluZ1dpdGhvdXRD
b21tZW50cyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuYyhH
QzNEZW51bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCF2YWxpZGF0
ZVN0ZW5jaWxGdW5jKCJzdGVuY2lsRnVuYyIsIGZ1bmMpKQorICAgICAgICByZXR1cm47CisgICAg
bV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsK
KyAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7CisgICAgbV9zdGVuY2lsRnVuY01hc2tCYWNr
ID0gbWFzazsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jKGZ1bmMsIHJlZiwgbWFzayk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsRnVuY1NlcGFyYXRlKEdDM0Rl
bnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jU2VwYXJhdGUiLCBmdW5jKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAoZmFjZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkZST05UX0FORF9CQUNLOgorICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwor
ICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVu
Y01hc2sgPSBtYXNrOworICAgICAgICBtX3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVDoKKyAgICAgICAg
bV9zdGVuY2lsRnVuY1JlZiA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01hc2sgPSBtYXNr
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNLOgorICAg
ICAgICBtX3N0ZW5jaWxGdW5jUmVmQmFjayA9IHJlZjsKKyAgICAgICAgbV9zdGVuY2lsRnVuY01h
c2tCYWNrID0gbWFzazsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInN0ZW5jaWxG
dW5jU2VwYXJhdGUiLCAiaW52YWxpZCBmYWNlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgbV9jb250ZXh0LT5zdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsTWFzayhHQzNEdWludCBt
YXNrKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVy
bjsKKyAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKKyAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1h
c2s7CisgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFzayhtYXNrKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVp
bnQgbWFzaykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgc3dpdGNoIChmYWNlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlJPTlRfQU5EX0JBQ0s6CisgICAgICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOworICAgICAgICBt
X3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZST05UOgorICAgICAgICBtX3N0ZW5jaWxNYXNrID0gbWFzazsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzoKKyAgICAgICAgbV9z
dGVuY2lsTWFza0JhY2sgPSBtYXNrOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAi
c3RlbmNpbE1hc2tTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwg
R0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcChm
YWlsLCB6ZmFpbCwgenBhc3MpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3Rl
bmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZh
aWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBtX2NvbnRleHQtPnN0ZW5jaWxPcFNlcGFyYXRlKGZhY2Us
IGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGlu
dGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQg
Ym9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVs
cywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgLy8gRklYTUU6IEZvciBub3cgd2UgaWdub3Jl
IGFueSBlcnJvcnMgcmV0dXJuZWQuCisgICAgZWMgPSAwOworICAgIFdlYkdMVGV4dHVyZSogdGV4
ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Cisg
ICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleEltYWdlMkQiLCBOb3RUZXhT
dWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwg
Ym9yZGVyLCBmb3JtYXQsIHR5cGUpKTsKKyAgICBBU1NFUlQodGV4KTsKKyAgICBBU1NFUlQoIWxl
dmVsIHx8ICFXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSk7CisgICAgaWYgKCFw
aXhlbHMpIHsKKyAgICAgICAgLy8gTm90ZTogQ2hyb21pdW0ncyBPcGVuR0wgaW1wbGVtZW50YXRp
b24gY2xlYXJzIHRleHR1cmVzIGFuZCBpc1Jlc291cmNlU2FmZSgpIGlzIHRoZXJlZm9yZSB0cnVl
LgorICAgICAgICAvLyBGb3Igb3RoZXIgaW1wbGVtZW50YXRpb25zLCBpZiB0aGV5IGFyZSB1c2lu
ZyBBTkdMRV9kZXB0aF90ZXh0dXJlLCBBTkdMRSBkZXB0aCB0ZXh0dXJlcworICAgICAgICAvLyBj
YW4gbm90IGJlIGNsZWFyZWQgd2l0aCB0ZXhJbWFnZTJEIGFuZCBtdXN0IGJlIGNsZWFyZWQgYnkg
YmluZGluZyB0byBhbiBmYm8gYW5kIGNhbGxpbmcKKyAgICAgICAgLy8gY2xlYXIuCisgICAgICAg
IGlmIChpc1Jlc291cmNlU2FmZSgpKQorICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJE
KHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZv
cm1hdCwgdHlwZSwgbnVsbHB0cik7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYm9vbCBz
dWNjZWVkID0gbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBl
LCBtX3VucGFja0FsaWdubWVudCk7CisgICAgICAgICAgICBpZiAoIXN1Y2NlZWQpCisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJU
KHZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoInRleEltYWdlMkQiLCBpbnRlcm5hbGZvcm1hdCkp
OworICAgICAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpOwor
ICAgICAgICBtX2NvbnRleHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3JkZXIs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKKyAgICAgICAgaWYgKG1fY29udGV4dC0+bW92ZUVycm9y
c1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKKyAgICAgICAgICAgIC8vIFRoZSB0ZXhJbWFnZTJE
IGZ1bmN0aW9uIGZhaWxlZC4gVGVsbCB0aGUgV2ViR0xUZXh0dXJlIGl0IGRvZXNuJ3QgaGF2ZSB0
aGUgZGF0YSBmb3IgdGhpcyBsZXZlbC4KKyAgICAgICAgICAgIHRleC0+bWFya0ludmFsaWQodGFy
Z2V0LCBsZXZlbCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAg
dGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIHR5cGUpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2Uy
REltcGwoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZv
cm1hdCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBo
aWNzQ29udGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBi
b29sIHByZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsK
KyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VF
eHRyYWN0b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBo
YSwgbV91bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9O
RSk7CisgICAgaWYgKCFpbWFnZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKKyAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0
ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgR3JhcGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdl
RXh0cmFjdG9yLmltYWdlU291cmNlRm9ybWF0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFs
cGhhT3AgYWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOworICAgIGNvbnN0
IHZvaWQqIGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsK
KworICAgIGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOworICAgIGlmICh0eXBlID09IEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcg
JiYgIWZsaXBZKQorICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOworICAgIGVsc2Ugewor
ICAgICAgICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERh
dGEsIGZvcm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdl
RXh0cmFjdG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1h
Z2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidGV4SW1hZ2UyRCIsICJwYWNrSW1hZ2UgZXJyb3IiKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAg
ICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJ
R05NRU5ULCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCBu
ZWVkQ29udmVyc2lvbiA/IGRhdGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKKyAgICBp
ZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3Jl
aShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQp
OworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jKGNvbnN0
IGNoYXIqIGZ1bmN0aW9uTmFtZSwgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rp
b25UeXBlLCBUZXhGdW5jVmFsaWRhdGlvblNvdXJjZVR5cGUgc291cmNlVHlwZSwgR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVp
IHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCkKK3sKKyAg
ICBpZiAoIXZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBmdW5jdGlvblR5
cGUsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGZvcm1hdCwgdHlwZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoZnVuY3Rpb25OYW1lLCB0YXJnZXQs
IHRydWUpOworICAgIGlmICghdGV4dHVyZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aWYgKGZ1bmN0aW9uVHlwZSA9PSBOb3RUZXhTdWJJbWFnZTJEKSB7CisgICAgICAgIGlmIChsZXZl
bCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3aWR0aCwgaGVpZ2h0KSkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0
aW9uTmFtZSwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgICAgIC8vIEZvciBTb3VyY2VBcnJheUJ1ZmZlclZpZXcs
IGZ1bmN0aW9uIHZhbGlkYXRlVGV4RnVuY0RhdGEoKSB3b3VsZCBoYW5kbGUgd2hldGhlciB0byB2
YWxpZGF0ZSB0aGUgU2V0dGFibGVUZXhGb3JtYXQKKyAgICAgICAgLy8gYnkgY2hlY2tpbmcgaWYg
dGhlIEFycmF5QnVmZmVyVmlldyBpcyBudWxsIG9yIG5vdC4KKyAgICAgICAgaWYgKHNvdXJjZVR5
cGUgIT0gU291cmNlQXJyYXlCdWZmZXJWaWV3KSB7CisgICAgICAgICAgICBpZiAoIXZhbGlkYXRl
U2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghdmFs
aWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICghdmFsaWRhdGVTaXplKGZ1bmN0aW9uTmFtZSwg
eG9mZnNldCwgeW9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8v
IEJlZm9yZSBjaGVja2luZyBpZiBpdCBpcyBpbiB0aGUgcmFuZ2UsIGNoZWNrIGlmIG92ZXJmbG93
IGhhcHBlbnMgZmlyc3QuCisgICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlvZmZz
ZXQgKyBoZWlnaHQgPCAwKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiYmFkIGRpbWVuc2lvbnMi
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoeG9m
ZnNldCArIHdpZHRoID4gdGV4dHVyZS0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgfHwgeW9mZnNl
dCArIGhlaWdodCA+IHRleHR1cmUtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgeworICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImRpbWVuc2lvbnMgb3V0IG9mIHJhbmdlIik7CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRleHR1cmUtPmdldEludGVybmFs
Rm9ybWF0KHRhcmdldCwgbGV2ZWwpICE9IGZvcm1hdCB8fCB0ZXh0dXJlLT5nZXRUeXBlKHRhcmdl
dCwgbGV2ZWwpICE9IHR5cGUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBhbmQg
Zm9ybWF0IGRvIG5vdCBtYXRjaCB0ZXh0dXJlIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVs
LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3Jk
ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4ZWxzLCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVRl
eEZ1bmNEYXRhKCJ0ZXhJbWFnZTJEIiwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwgcGl4ZWxzLCBOdWxsQWxsb3dlZCkKKyAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4
SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCAwLCAwKSkKKyAgICAgICAgcmV0dXJuOworICAgIHZvaWQqIGRhdGEgPSBwaXhlbHMgPyBw
aXhlbHMtPmJhc2VBZGRyZXNzKCkgOiAwOworICAgIFZlY3Rvcjx1aW50OF90PiB0ZW1wRGF0YTsK
KyAgICBib29sIGNoYW5nZVVucGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIGlmIChkYXRhICYm
IChtX3VucGFja0ZsaXBZIHx8IG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSkpIHsKKyAgICAgICAg
aWYgKCFtX2NvbnRleHQtPmV4dHJhY3RUZXh0dXJlRGF0YSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV91bnBh
Y2tBbGlnbm1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdGVtcERhdGEpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBkYXRhID0gdGVtcERhdGEuZGF0YSgpOworICAgICAgICBjaGFuZ2VVbnBhY2tBbGlnbm1l
bnQgPSB0cnVlOworICAgIH0KKyAgICBpZiAoY2hhbmdlVW5wYWNrQWxpZ25tZW50KQorICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05N
RU5ULCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLAorICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlw
ZSwgZGF0YSwgZWMpOworICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRl
eEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5h
bGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVt
IGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUm
IGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8
ICFwaXhlbHMgfHwgIXZhbGlkYXRlVGV4RnVuYygidGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdl
MkQsIFNvdXJjZUltYWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHBpeGVs
cy0+d2lkdGgoKSwgcGl4ZWxzLT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIGJvb2wgbmVlZENv
bnZlcnNpb24gPSB0cnVlOworICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRhIGlzIGFsd2F5
cyBvZiBmb3JtYXQgUkdCQTguCisgICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVkZWQgaWYgZGVz
dGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRFIGFuZCBubyBG
bGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KKyAgICBpZiAoIW1fdW5w
YWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSAmJiBmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSkKKyAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3JtYXQsIHR5cGUs
IG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkpIHsKKyAgICAg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCAidGV4SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfQorICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAg
ICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05N
RU5ULCAxKTsKKyAgICB0ZXhJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1h
dCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIG5l
ZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7
CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKK30KKworUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpk
cmF3SW1hZ2VJbnRvQnVmZmVyKEltYWdlKiBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBp
bnQgZGV2aWNlU2NhbGVGYWN0b3IpCit7CisgICAgSW50U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQp
OworICAgIHNpemUuc2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIEltYWdlQnVmZmVyKiBi
dWYgPSBtX2dlbmVyYXRlZEltYWdlQ2FjaGUuaW1hZ2VCdWZmZXIoc2l6ZSk7CisgICAgaWYgKCFi
dWYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9P
Rl9NRU1PUlksICJ0ZXhJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgRmxvYXRSZWN0IHNyY1JlY3QoRmxvYXRQb2ludCgpLCBp
bWFnZS0+c2l6ZSgpKTsKKyAgICBGbG9hdFJlY3QgZGVzdFJlY3QoRmxvYXRQb2ludCgpLCBzaXpl
KTsKKyAgICBidWYtPmNvbnRleHQoKS0+ZHJhd0ltYWdlKGltYWdlLCBDb2xvclNwYWNlRGV2aWNl
UkdCLCBkZXN0UmVjdCwgc3JjUmVjdCk7CisgICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKEltYWdl
QnVmZmVyOjpmYXN0Q29weUltYWdlTW9kZSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2Us
IEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleEltYWdlMkQiLCBp
bWFnZSwgZWMpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9y
UmVuZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJl
bmRlcmVyKCkpOworICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQorICAgICAg
ICBpbWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0
KCksIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOworCisgICAgaWYgKCFpbWFn
ZUZvclJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1h
Z2UyRCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCksIDAs
IGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIHRleEltYWdlMkRJ
bXBsKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlRm9y
UmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3VucGFja0Zs
aXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTENhbnZhc0VsZW1lbnQq
IGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgZWMgPSAwOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTENhbnZhc0VsZW1lbnQoInRleElt
YWdlMkQiLCBjYW52YXMsIGVjKSB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90
VGV4U3ViSW1hZ2UyRCwgU291cmNlSFRNTENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGlu
dGVybmFsZm9ybWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1h
dCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkdMVGV4dHVyZSogdGV4
dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUp
OworICAgIC8vIElmIHBvc3NpYmxlLCBjb3B5IGZyb20gdGhlIGNhbnZhcyBlbGVtZW50IGRpcmVj
dGx5IHRvIHRoZSB0ZXh0dXJlCisgICAgLy8gdmlhIHRoZSBHUFUsIHdpdGhvdXQgYSByZWFkLWJh
Y2sgdG8gc3lzdGVtIG1lbW9yeS4KKyAgICAvLworICAgIC8vIEZJWE1FOiByZXN0cmljdGlvbiBv
ZiAoUkdCIHx8IFJHQkEpL1VOU0lHTkVEX0JZVEUgc2hvdWxkIGJlIGxpZnRlZCB3aGVuCisgICAg
Ly8gSW1hZ2VCdWZmZXI6OmNvcHlUb1BsYXRmb3JtVGV4dHVyZSBpbXBsZW1lbnRhdGlvbnMgYXJl
IGZ1bGx5IGZ1bmN0aW9uYWwuCisgICAgaWYgKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
ID09IHRhcmdldCAmJiB0ZXh0dXJlICYmIHR5cGUgPT0gdGV4dHVyZS0+Z2V0VHlwZSh0YXJnZXQs
IGxldmVsKQorICAgICAgICAmJiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0IgfHwg
Zm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBKSAmJiB0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFKSB7CisgICAgICAgIEltYWdlQnVmZmVyKiBidWZmZXIgPSBj
YW52YXMtPmJ1ZmZlcigpOworICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci0+Y29weVRvUGxh
dGZvcm1UZXh0dXJlKCptX2NvbnRleHQuZ2V0KCksIHRleHR1cmUtPm9iamVjdCgpLCBpbnRlcm5h
bGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkgeworICAg
ICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIHR5cGUpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1h
Z2VEYXRhID0gY2FudmFzLT5nZXRJbWFnZURhdGEoKTsKKyAgICBpZiAoaW1hZ2VEYXRhKQorICAg
ICAgICB0ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5
cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOworICAgIGVsc2UKKyAgICAgICAgdGV4SW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5j
b3BpZWRJbWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tG
bGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKKyNpZiBFTkFCTEUoVklE
RU8pCitQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZpZGVvRnJhbWVU
b0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBCYWNraW5nU3RvcmVDb3B5IGJhY2tpbmdT
dG9yZUNvcHksIEV4Y2VwdGlvbkNvZGUmKQoreworICAgIEludFNpemUgc2l6ZSh2aWRlby0+dmlk
ZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSk7CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9
IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKKyAgICBpZiAoIWJ1Zikg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01F
TU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgSW50UmVjdCBkZXN0UmVjdCgwLCAwLCBzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCkpOworICAgIC8vIEZJWE1FOiBUdXJuIHRoaXMgaW50byBhIEdQVS1HUFUgdGV4
dHVyZSBjb3B5IGluc3RlYWQgb2YgQ1BVIHJlYWRiYWNrLgorICAgIHZpZGVvLT5wYWludEN1cnJl
bnRGcmFtZUluQ29udGV4dChidWYtPmNvbnRleHQoKSwgZGVzdFJlY3QpOworICAgIHJldHVybiBi
dWYtPmNvcHlJbWFnZShiYWNraW5nU3RvcmVDb3B5KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlk
ZW8sIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxWaWRlb0VsZW1lbnQoInRleEltYWdlMkQi
LCB2aWRlbywgZWMpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQiLCBO
b3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MVmlkZW9FbGVtZW50LCB0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCks
IDAsIGZvcm1hdCwgdHlwZSwgMCwgMCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEdvIHRo
cm91Z2ggdGhlIGZhc3QgcGF0aCBkb2luZyBhIEdQVS1HUFUgdGV4dHVyZXMgY29weSB3aXRob3V0
IGEgcmVhZGJhY2sgdG8gc3lzdGVtIG1lbW9yeSBpZiBwb3NzaWJsZS4KKyAgICAvLyBPdGhlcndp
c2UsIGl0IHdpbGwgZmFsbCBiYWNrIHRvIHRoZSBub3JtYWwgU1cgcGF0aC4KKyAgICAvLyBGSVhN
RTogVGhlIGN1cnJlbnQgcmVzdHJpY3Rpb25zIHJlcXVpcmUgdGhhdCBmb3JtYXQgc2hvdWQgYmUg
UkdCIG9yIFJHQkEsCisgICAgLy8gdHlwZSBzaG91bGQgYmUgVU5TSUdORURfQllURSBhbmQgbGV2
ZWwgc2hvdWxkIGJlIDAuIEl0IG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZS4KKyAgICBXZWJH
TFRleHR1cmUqIHRleHR1cmUgPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwg
dGFyZ2V0LCB0cnVlKTsKKyAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQgPT0g
dGFyZ2V0ICYmIHRleHR1cmUKKyAgICAgICAgJiYgKGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6UkdCIHx8IGZvcm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSkKKyAgICAgICAgJiYg
dHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAgICAgICAmJiAodGV4
dHVyZS0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSB8fCAhdGV4dHVyZS0+aXNWYWxpZCh0YXJnZXQsIGxldmVsKSkKKyAgICAgICAgJiYg
IWxldmVsKSB7CisgICAgICAgIGlmICh2aWRlby0+Y29weVZpZGVvVGV4dHVyZVRvUGxhdGZvcm1U
ZXh0dXJlKG1fY29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2JqZWN0KCksIGxldmVsLCB0eXBlLCBp
bnRlcm5hbGZvcm1hdCwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBtX3VucGFja0ZsaXBZKSkg
eworICAgICAgICAgICAgdGV4dHVyZS0+c2V0TGV2ZWxJbmZvKHRhcmdldCwgbGV2ZWwsIGludGVy
bmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgdHlw
ZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3Jt
YWwgcHVyZSBTVyBwYXRoLgorICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9J
bWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVjKTsKKyAgICBp
ZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBs
ZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2UuZ2V0KCksIEdyYXBoaWNz
Q29udGV4dDNEOjpIdG1sRG9tVmlkZW8sIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlw
bHlBbHBoYSwgZWMpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0
ZXhQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBh
cmFtZiwgR0MzRGludCBwYXJhbWksIGJvb2wgaXNGbG9hdCkKK3sKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQorICAgICAgICByZXR1cm47CisgICAgV2ViR0xUZXh0dXJlKiB0ZXgg
PSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhQYXJhbWV0ZXIiLCB0YXJnZXQsIGZhbHNlKTsK
KyAgICBpZiAoIXRleCkKKyAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgorICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUzoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVDoKKyAgICAgICAgaWYgKChpc0Zsb2F0ICYmIHBh
cmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWYgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWYgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJFUEVBVCkKKyAgICAgICAgICAgIHx8ICghaXNGbG9hdCAmJiBwYXJhbWkgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpNSVJST1JFRF9SRVBFQVQgJiYgcGFyYW1pICE9IEdyYXBoaWNzQ29udGV4dDNEOjpSRVBF
QVQpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFeHRl
bnNpb25zM0Q6OlRFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUOiAvLyBFWFRfdGV4dHVyZV9maWx0
ZXJfYW5pc290cm9waWMKKyAgICAgICAgaWYgKCFtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
YykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfRU5VTSwgInRleFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciwgRVhUX3RleHR1
cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInRleFBhcmFtZXRl
ciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgaWYgKGlzRmxvYXQpIHsKKyAgICAgICAgdGV4LT5zZXRQYXJhbWV0ZXJmKHBuYW1lLCBwYXJh
bWYpOworICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmYodGFyZ2V0LCBwbmFtZSwgcGFy
YW1mKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXgtPnNldFBhcmFtZXRlcmkocG5hbWUsIHBh
cmFtaSk7CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBw
YXJhbWkpOworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFt
ZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGZsb2F0IHBhcmFtKQor
eworICAgIHRleFBhcmFtZXRlcih0YXJnZXQsIHBuYW1lLCBwYXJhbSwgMCwgdHJ1ZSk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCit7CisgICAgdGV4UGFyYW1ldGVyKHRh
cmdldCwgcG5hbWUsIDAsIHBhcmFtLCBmYWxzZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhTdWJJbWFnZTJEQmFzZShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCog
cGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICAvLyBGSVhNRTogRm9yIG5vdyB3ZSBp
Z25vcmUgYW55IGVycm9ycyByZXR1cm5lZAorICAgIGVjID0gMDsKKyAgICBBU1NFUlQoIWlzQ29u
dGV4dExvc3QoKSk7CisgICAgQVNTRVJUKHZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoInRleFN1
YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIDAsIGZvcm1hdCwgdHlwZSkpOworICAgIEFTU0VSVCh2YWxpZGF0ZVNpemUoInRleFN1
YkltYWdlMkQiLCB4b2Zmc2V0LCB5b2Zmc2V0KSk7CisgICAgQVNTRVJUKHZhbGlkYXRlU2V0dGFi
bGVUZXhGb3JtYXQoInRleFN1YkltYWdlMkQiLCBmb3JtYXQpKTsKKyAgICBXZWJHTFRleHR1cmUq
IHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRy
dWUpOworICAgIGlmICghdGV4KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVCgoeG9mZnNldCArIHdpZHRoKSA+PSAwKTsK
KyAgICBBU1NFUlQoKHlvZmZzZXQgKyBoZWlnaHQpID49IDApOworICAgIEFTU0VSVCh0ZXgtPmdl
dFdpZHRoKHRhcmdldCwgbGV2ZWwpID49ICh4b2Zmc2V0ICsgd2lkdGgpKTsKKyAgICBBU1NFUlQo
dGV4LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkgPj0gKHlvZmZzZXQgKyBoZWlnaHQpKTsKKyAg
ICBBU1NFUlQodGV4LT5nZXRJbnRlcm5hbEZvcm1hdCh0YXJnZXQsIGxldmVsKSA9PSBmb3JtYXQp
OworICAgIEFTU0VSVCh0ZXgtPmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgPT0gdHlwZSk7CisgICAg
bV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRJbXBsKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RlbnVtIGZvcm1h
dCwgR0MzRGVudW0gdHlwZSwgSW1hZ2UqIGltYWdlLCBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VI
dG1sRG9tU291cmNlIGRvbVNvdXJjZSwgYm9vbCBmbGlwWSwgYm9vbCBwcmVtdWx0aXBseUFscGhh
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBlYyA9IDA7CisgICAgVmVjdG9yPHVpbnQ4X3Q+
IGRhdGE7CisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlRXh0cmFjdG9yIGltYWdlRXh0cmFj
dG9yKGltYWdlLCBkb21Tb3VyY2UsIHByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNrQ29sb3JzcGFj
ZUNvbnZlcnNpb24gPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PTkUpOyAgCisgICAgaWYgKCFpbWFn
ZUV4dHJhY3Rvci5leHRyYWN0U3VjY2VlZGVkKCkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ0ZXhTdWJJbWFnZTJEIiwgImJh
ZCBpbWFnZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpEYXRhRm9ybWF0IHNvdXJjZURhdGFGb3JtYXQgPSBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJj
ZUZvcm1hdCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBbHBoYU9wIGFscGhhT3AgPSBpbWFn
ZUV4dHJhY3Rvci5pbWFnZUFscGhhT3AoKTsKKyAgICBjb25zdCB2b2lkKiBpbWFnZVBpeGVsRGF0
YSA9IGltYWdlRXh0cmFjdG9yLmltYWdlUGl4ZWxEYXRhKCk7CisKKyAgICBib29sIG5lZWRDb252
ZXJzaW9uID0gdHJ1ZTsKKyAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfQllURSAmJiBzb3VyY2VEYXRhRm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpEYXRhRm9y
bWF0UkdCQTggJiYgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIGFscGhhT3Ag
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhRG9Ob3RoaW5nICYmICFmbGlwWSkKKyAgICAgICAg
bmVlZENvbnZlcnNpb24gPSBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKCFtX2NvbnRl
eHQtPnBhY2tJbWFnZURhdGEoaW1hZ2UsIGltYWdlUGl4ZWxEYXRhLCBmb3JtYXQsIHR5cGUsIGZs
aXBZLCBhbHBoYU9wLCBzb3VyY2VEYXRhRm9ybWF0LCBpbWFnZUV4dHJhY3Rvci5pbWFnZVdpZHRo
KCksIGltYWdlRXh0cmFjdG9yLmltYWdlSGVpZ2h0KCksIGltYWdlRXh0cmFjdG9yLmltYWdlU291
cmNlVW5wYWNrQWxpZ25tZW50KCksIGRhdGEpKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFk
IGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQorICAgICAgICBtX2NvbnRleHQtPnBpeGVs
U3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCAxKTsKKyAgICB0ZXhT
dWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBpbWFnZS0+d2lk
dGgoKSwgaW1hZ2UtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsICBuZWVkQ29udmVyc2lvbiA/IGRh
dGEuZGF0YSgpIDogaW1hZ2VQaXhlbERhdGEsIGVjKTsKKyAgICBpZiAobV91bnBhY2tBbGlnbm1l
bnQgIT0gMSkKKyAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQz
RDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0g
Zm9ybWF0LCBHQzNEZW51bSB0eXBlLCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscywgRXhjZXB0aW9u
Q29kZSYgZWMpCit7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVUZXhGdW5jRGF0YSgidGV4U3ViSW1hZ2UyRCIsIGxldmVsLCB3aWR0aCwgaGVpZ2h0LCBmb3Jt
YXQsIHR5cGUsIHBpeGVscywgTnVsbE5vdEFsbG93ZWQpCisgICAgICAgIHx8ICF2YWxpZGF0ZVRl
eEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFnZTJELCBTb3VyY2VBcnJheUJ1ZmZlclZp
ZXcsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBl
LCB4b2Zmc2V0LCB5b2Zmc2V0KSkKKyAgICAgICAgcmV0dXJuOworICAgIHZvaWQqIGRhdGEgPSBw
aXhlbHMtPmJhc2VBZGRyZXNzKCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IHRlbXBEYXRhOworICAg
IGJvb2wgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gZmFsc2U7CisgICAgaWYgKGRhdGEgJiYgKG1f
dW5wYWNrRmxpcFkgfHwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhKSkgeworICAgICAgICBpZiAo
IW1fY29udGV4dC0+ZXh0cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlw
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0Fs
aWdubWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0ZW1wRGF0YSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGRhdGEgPSB0ZW1wRGF0YS5kYXRhKCk7CisgICAgICAgIGNoYW5nZVVucGFja0FsaWdubWVudCA9
IHRydWU7CisgICAgfQorICAgIGlmIChjaGFuZ2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IDEpOworICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSwgZWMpOworICAgIGlmIChjaGFu
Z2VVbnBhY2tBbGlnbm1lbnQpCisgICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxpZ25tZW50KTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0Mz
RGVudW0gdHlwZSwgSW1hZ2VEYXRhKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFwaXhlbHMgfHwg
IXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJjZUlt
YWdlRGF0YSwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCAgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMt
PmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBWZWN0b3I8dWludDhfdD4gZGF0YTsKKyAgICBib29sIG5lZWRDb252ZXJz
aW9uID0gdHJ1ZTsKKyAgICAvLyBUaGUgZGF0YSBmcm9tIEltYWdlRGF0YSBpcyBhbHdheXMgb2Yg
Zm9ybWF0IFJHQkE4LgorICAgIC8vIE5vIGNvbnZlcnNpb24gaXMgbmVlZGVkIGlmIGRlc3RpbmF0
aW9uIGZvcm1hdCBpcyBSR0JBIGFuZCB0eXBlIGlzIFVTSUdORURfQllURSBhbmQgbm8gRmxpcCBv
ciBQcmVtdWx0aXBseSBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCisgICAgaWYgKGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFICYmICFtX3VucGFja0ZsaXBZICYmICFtX3VucGFja1ByZW11bHRpcGx5QWxwaGEp
CisgICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIGlm
ICghbV9jb250ZXh0LT5leHRyYWN0SW1hZ2VEYXRhKHBpeGVscywgZm9ybWF0LCB0eXBlLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGRhdGEpKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRl
eFN1YkltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKKyAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgMSk7CisgICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9m
ZnNldCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCBmb3JtYXQsIHR5cGUsIG5l
ZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBwaXhlbHMtPmRhdGEoKS0+ZGF0YSgpLCBlYyk7
CisgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCisgICAgICAgIG1fY29udGV4dC0+cGl4
ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQsIG1fdW5wYWNrQWxp
Z25tZW50KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0Rl
bnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQoreworICAgIGVjID0gMDsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZUhUTUxJbWFnZUVsZW1lbnQoInRleFN1YkltYWdlMkQiLCBpbWFn
ZSwgZWMpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlRm9yUmVu
ZGVyID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPmltYWdlRm9yUmVuZGVyZXIoaW1hZ2UtPnJlbmRl
cmVyKCkpOworICAgIGlmIChpbWFnZUZvclJlbmRlci0+aXNTVkdJbWFnZSgpKQorICAgICAgICBp
bWFnZUZvclJlbmRlciA9IGRyYXdJbWFnZUludG9CdWZmZXIoaW1hZ2VGb3JSZW5kZXIuZ2V0KCks
IGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIDEpOworCisgICAgaWYgKCFpbWFnZUZv
clJlbmRlciB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2Uy
RCwgU291cmNlSFRNTEltYWdlRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBpbWFnZUZv
clJlbmRlci0+d2lkdGgoKSwgaW1hZ2VGb3JSZW5kZXItPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAgICAgICByZXR1cm47CisKKyAgICB0ZXhTdWJJbWFn
ZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5cGUsIGlt
YWdlRm9yUmVuZGVyLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUltYWdlLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
ZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRN
TENhbnZhc0VsZW1lbnQoInRleFN1YkltYWdlMkQiLCBjYW52YXMsIGVjKQorICAgICAgICB8fCAh
dmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1hZ2UyRCwgU291cmNlSFRN
TENhbnZhc0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgY2FudmFzLT53aWR0aCgpLCBj
YW52YXMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMt
PmdldEltYWdlRGF0YSgpOworICAgIGlmIChpbWFnZURhdGEpCisgICAgICAgIHRleFN1YkltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZURh
dGEuZ2V0KCksIGVjKTsKKyAgICBlbHNlCisgICAgICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdl
dCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwgY2FudmFzLT5jb3BpZWRJ
bWFnZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbUNhbnZhcywgbV91bnBhY2tGbGlwWSwg
bV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisKKyNpZiBFTkFCTEUoVklERU8pCit2
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNE
ZW51bSB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCit7
CisgICAgZWMgPSAwOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlSFRNTFZpZGVvRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIHZpZGVvLCBlYykKKyAgICAgICAg
fHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJj
ZUhUTUxWaWRlb0VsZW1lbnQsIHRhcmdldCwgbGV2ZWwsIGZvcm1hdCwgdmlkZW8tPnZpZGVvV2lk
dGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9m
ZnNldCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRl
b0ZyYW1lVG9JbWFnZSh2aWRlbywgSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCksIGVj
KTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm47CisgICAgdGV4U3ViSW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5n
ZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0xZihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RmbG9hdCB4LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQ
cm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0xZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQg
cHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlm
b3JtMWYobG9jYXRpb24tPmxvY2F0aW9uKCksIHgpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFN
KGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZv
cm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYsIDEpKQorICAgICAgICByZXR1
cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYt
Pmxlbmd0aCgpLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTFmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTFmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAxKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZv
cm0xaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
bmlmb3JtMWkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICgobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVSX0NVQkUpICYmIHggPj0gKGludCltX3RleHR1cmVVbml0cy5zaXplKCkpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJ1bmlmb3JtMWkiLCAiaW52YWxpZCB0ZXh0dXJlIHVuaXQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKGxvY2F0aW9uLT5sb2NhdGlvbigp
LCB4KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3Qg
V2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBs
b2NhdGlvbiwgdiwgMSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChsb2NhdGlvbi0+dHlw
ZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHYtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh2LT5kYXRh
KClbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkpKSB7CisgICAg
ICAgICAgICAgICAgTE9HKFdlYkdMLCAiVGV4dHVyZSB1bml0IHNpemU9JXp1LCB2WyVkXT0lZC4g
TG9jYXRpb24gdHlwZSA9ICUwNFguIiwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgpLCBpLCB2LT5kYXRh
KClbaV0sIGxvY2F0aW9uLT50eXBlKCkpOworICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidW5pZm9ybTFpdiIsICJpbnZh
bGlkIHRleHR1cmUgdW5pdCIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWl2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSwgdi0+ZGF0YSgpKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm0xaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAg
VU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2
YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWl2IiwgbG9jYXRpb24sIHYsIHNpemUs
IDEpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnR5cGUoKSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6U0FNUExFUl8yRCB8fCBsb2NhdGlvbi0+dHlwZSgpID09IEdyYXBoaWNz
Q29udGV4dDNEOjpTQU1QTEVSX0NVQkUpCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2l6ZSk7ICsraSkgeworICAgICAgICAgICAgaWYgKCgo
R0MzRGludCopdilbaV0gPj0gc3RhdGljX2Nhc3Q8aW50PihtX3RleHR1cmVVbml0cy5zaXplKCkp
KSB7CisgICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ1bmlmb3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm0xaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmKGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9j
YXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0y
ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHgsIHkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJmdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMmZ2
IiwgbG9jYXRpb24sIHYsIDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm0yZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgp
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yZnYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXpl
LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVu
aWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDIsIHYp
OworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTJpKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCB4LCBHQzNEaW50IHksIEV4Y2VwdGlv
bkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChs
b2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKKyAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9y
bTJpIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0yaShsb2NhdGlvbi0+bG9jYXRpb24o
KSwgeCwgeSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMml2KGNv
bnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0
aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMml2
IiwgbG9jYXRpb24sIHYsIDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVu
aWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMiwgdi0+ZGF0YSgp
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0yaXYoY29uc3QgV2Vi
R0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlm
b3JtMml2IiwgbG9jYXRpb24sIHYsIHNpemUsIDIpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2NvbnRleHQtPnVuaWZvcm0yaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAyLCB2KTsK
K30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZihjb25zdCBXZWJHTFVu
aWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZs
b2F0IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAidW5pZm9ybTNmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm0zZihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxv
YXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMp
OworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoInVuaWZvcm0zZnYiLCBsb2NhdGlvbiwgdiwgMykpCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY29udGV4dC0+dW5pZm9ybTNmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVu
Z3RoKCkgLyAzLCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dW5pZm9ybTNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9Q
QVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVV
bmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAzKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCBzaXplIC8gMywgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtM2koY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRGludCB6LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURf
UEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9u
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1
cnJlbnRQcm9ncmFtKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm0zaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1
cnJlbnQgcHJvZ3JhbSIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9jb250ZXh0
LT51bmlmb3JtM2kobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHopOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVO
VVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCAzKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQorewor
ICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNpdiIsIGxvY2F0aW9uLCB2LCBz
aXplLCAzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtM2l2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gMywgdik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp1bmlmb3JtNGYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9u
LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdywgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
bmlmb3JtNGYiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB4LCB5LCB6LCB3KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVu
aWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBGbG9hdDMyQXJy
YXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVy
cygidW5pZm9ybTRmdiIsIGxvY2F0aW9uLCB2LCA0KSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
bV9jb250ZXh0LT51bmlmb3JtNGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAv
IDQsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBH
QzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VEX1BBUkFNKGVj
KTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1Q
YXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIHNpemUsIDQpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHNpemUgLyA0LCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00
aShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdywgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2Nh
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0g
bV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtNGkiLCAibG9jYXRpb24gbm90IGZv
ciBjdXJyZW50IHByb2dyYW0iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fY29u
dGV4dC0+dW5pZm9ybTRpKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6LCB3KTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00aXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlvbiwgdiwg
NCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTRpdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB2LT5kYXRhKCkpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlv
biogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00aXYiLCBsb2NhdGlv
biwgdiwgc2l6ZSwgNCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29udGV4dC0+dW5pZm9y
bTRpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOworfQorCit2b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybU1hdHJpeDJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBF
eGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMo
InVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCA0KSkKKyAgICAgICAg
cmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbi0+bG9jYXRp
b24oKSwgdi0+bGVuZ3RoKCkgLyA0LCB0cmFuc3Bvc2UsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdlYkdMVW5pZm9y
bUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYs
IEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0o
ZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9y
bU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXgyZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3Nl
LCB2LCBzaXplLCA0KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1h
dHJpeDJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHRyYW5zcG9zZSwgdik7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4M2Z2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIFVOVVNFRF9QQVJBTShlYyk7
CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0
cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYs
IDkpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDksIHRyYW5zcG9zZSwgdi0+ZGF0YSgp
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgzZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAg
IFVOVVNFRF9QQVJBTShlYyk7CisgICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDNmdiIsIGxvY2F0
aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDkpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gOSwgdHJh
bnNwb3NlLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRy
aXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5V
U0VEX1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4NGZ2IiwgbG9jYXRpb24s
IHRyYW5zcG9zZSwgdiwgMTYpKQorICAgICAgICByZXR1cm47CisgICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4NGZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDE2LCB0cmFu
c3Bvc2UsIHYtPmRhdGEoKSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlm
b3JtTWF0cml4NGZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJv
b2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25D
b2RlJiBlYykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1N
YXRyaXg0ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCBzaXplLCAxNikpCisgICAgICAgIHJl
dHVybjsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9u
KCksIHNpemUgLyAxNiwgdHJhbnNwb3NlLCB2KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVzZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBl
YykKK3sKKyAgICBVTlVTRURfUEFSQU0oZWMpOworICAgIGJvb2wgZGVsZXRlZDsKKyAgICBpZiAo
IWNoZWNrT2JqZWN0VG9CZUJvdW5kKCJ1c2VQcm9ncmFtIiwgcHJvZ3JhbSwgZGVsZXRlZCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBpZiAoZGVsZXRlZCkKKyAgICAgICAgcHJvZ3JhbSA9IDA7Cisg
ICAgaWYgKHByb2dyYW0gJiYgIXByb2dyYW0tPmdldExpbmtTdGF0dXMoKSkgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1
c2VQcm9ncmFtIiwgInByb2dyYW0gbm90IHZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKG1fY3VycmVudFByb2dyYW0gIT0gcHJvZ3JhbSkgeworICAgICAgICBpZiAobV9j
dXJyZW50UHJvZ3JhbSkKKyAgICAgICAgICAgIG1fY3VycmVudFByb2dyYW0tPm9uRGV0YWNoZWQo
Z3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgICAgIG1fY3VycmVudFByb2dyYW0gPSBwcm9ncmFt
OworICAgICAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsK
KyAgICAgICAgaWYgKHByb2dyYW0pCisgICAgICAgICAgICBwcm9ncmFtLT5vbkF0dGFjaGVkKCk7
CisgICAgfQorfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVQcm9ncmFt
KFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0
ZVdlYkdMT2JqZWN0KCJ2YWxpZGF0ZVByb2dyYW0iLCBwcm9ncmFtKSkKKyAgICAgICAgcmV0dXJu
OworICAgIG1fY29udGV4dC0+dmFsaWRhdGVQcm9ncmFtKG9iamVjdE9yWmVybyhwcm9ncmFtKSk7
Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWlu
dCBpbmRleCwgR0MzRGZsb2F0IHYwKQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhB
dHRyaWIxZiIsIGluZGV4LCAxLCB2MCwgMC4wZiwgMC4wZiwgMS4wZik7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0
MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIs
IGluZGV4LCB2LCAxKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sK
KyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjFmdiIsIGluZGV4LCB2LCBzaXpl
LCAxKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmKEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSkKK3sKKyAgICB2ZXJ0ZXhB
dHRyaWJmSW1wbCgidmVydGV4QXR0cmliMmYiLCBpbmRleCwgMiwgdjAsIHYxLCAwLjBmLCAxLjBm
KTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjJmdihHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgi
dmVydGV4QXR0cmliMmZ2IiwgaW5kZXgsIHYsIDIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdD
M0RzaXplaSBzaXplKQoreworICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMmZ2
IiwgaW5kZXgsIHYsIHNpemUsIDIpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYx
LCBHQzNEZmxvYXQgdjIpCit7CisgICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjNm
IiwgaW5kZXgsIDMsIHYwLCB2MSwgdjIsIDEuMGYpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYp
Cit7CisgICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwg
Myk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgdmVydGV4
QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIzZnYiLCBpbmRleCwgdiwgc2l6ZSwgMyk7Cit9CisK
K3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0IHYwLCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MiwgR0MzRGZsb2F0IHYz
KQoreworICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWI0ZiIsIGluZGV4LCA0LCB2
MCwgdjEsIHYyLCB2Myk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhB
dHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEZsb2F0MzJBcnJheSogdikKK3sKKyAgICB2ZXJ0ZXhB
dHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjRmdiIsIGluZGV4LCB2LCA0KTsKK30KKwordm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZl
cnRleEF0dHJpYjRmdiIsIGluZGV4LCB2LCBzaXplLCA0KTsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQg
c2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0
cmlkZSwgbG9uZyBsb25nIG9mZnNldCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgVU5VU0VE
X1BBUkFNKGVjKTsKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAgICBy
ZXR1cm47CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
QllURToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX1NIT1JUOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOgorICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbnZh
bGlkIHR5cGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoaW5kZXggPj0gbV9t
YXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJpbmRleCBvdXQg
b2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc2l6ZSA8IDEgfHwg
c2l6ZSA+IDQgfHwgc3RyaWRlIDwgMCB8fCBzdHJpZGUgPiAyNTUgfHwgb2Zmc2V0IDwgMCkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAiYmFkIHNpemUsIHN0cmlkZSBvciBvZmZzZXQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fYm91bmRBcnJheUJ1ZmZlcikgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgIm5vIGJvdW5kIEFSUkFZX0JVRkZFUiIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8vIERldGVybWluZSB0aGUgbnVtYmVyIG9mIGVs
ZW1lbnRzIHRoZSBib3VuZCBidWZmZXIgY2FuIGhvbGQsIGdpdmVuIHRoZSBvZmZzZXQsIHNpemUs
IHR5cGUgYW5kIHN0cmlkZQorICAgIHVuc2lnbmVkIGludCB0eXBlU2l6ZSA9IHNpemVJbkJ5dGVz
KHR5cGUpOworICAgIGlmICghdHlwZVNpemUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAi
aW52YWxpZCB0eXBlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKChzdHJpZGUg
JSB0eXBlU2l6ZSkgfHwgKHN0YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCkgJSB0eXBlU2l6
ZSkpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJzdHJpZGUgb3Igb2Zmc2V0IG5v
dCB2YWxpZCBmb3IgdHlwZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEdDM0RzaXpl
aSBieXRlc1BlckVsZW1lbnQgPSBzaXplICogdHlwZVNpemU7CisKKyAgICBtX2JvdW5kVmVydGV4
QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4LCBieXRlc1BlckVsZW1lbnQs
IHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4o
b2Zmc2V0KSwgbV9ib3VuZEFycmF5QnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJp
YlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgc3RhdGljX2Nh
c3Q8R0MzRGludHB0cj4ob2Zmc2V0KSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0KQoreworICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIXZhbGlkYXRlU2l6ZSgidmlld3BvcnQiLCB3aWR0aCwgaGVpZ2h0
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4dC0+dmlld3BvcnQoeCwgeSwgd2lkdGgs
IGhlaWdodCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpmb3JjZUxvc3RDb250
ZXh0KFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TG9zdENvbnRleHRNb2RlIG1vZGUpCit7CisgICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJsb3NlQ29udGV4dCIsICJj
b250ZXh0IGFscmVhZHkgbG9zdCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV9j
b250ZXh0R3JvdXAtPmxvc2VDb250ZXh0R3JvdXAobW9kZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojpsb3NlQ29udGV4dEltcGwoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0
Q29udGV4dE1vZGUgbW9kZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX2NvbnRleHRMb3N0ID0gdHJ1ZTsKKyAgICBtX2NvbnRleHRMb3N0TW9k
ZSA9IG1vZGU7CisKKyAgICBpZiAobW9kZSA9PSBSZWFsTG9zdENvbnRleHQpIHsKKyAgICAgICAg
Ly8gSW5mb3JtIHRoZSBlbWJlZGRlciB0aGF0IGEgbG9zdCBjb250ZXh0IHdhcyByZWNlaXZlZC4g
SW4gcmVzcG9uc2UsIHRoZSBlbWJlZGRlciBtaWdodAorICAgICAgICAvLyBkZWNpZGUgdG8gdGFr
ZSBhY3Rpb24gc3VjaCBhcyBhc2tpbmcgdGhlIHVzZXIgZm9yIHBlcm1pc3Npb24gdG8gdXNlIFdl
YkdMIGFnYWluLgorICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gY2FudmFzKCktPmRvY3VtZW50
KCkuZnJhbWUoKSkKKyAgICAgICAgICAgIGZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5kaWRMb3Nl
V2ViR0xDb250ZXh0KG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFwaGljc1Jlc2V0
U3RhdHVzQVJCKCkpOworICAgIH0KKworICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsK
KworICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKKyAgICAgICAgLy8gTWFrZSBhYnNvbHV0ZWx5
IHN1cmUgd2UgZG8gbm90IHJlZmVyIHRvIGFuIGFscmVhZHktZGVsZXRlZCB0ZXh0dXJlIG9yIGZy
YW1lYnVmZmVyLgorICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRleHR1cmUyREJpbmRpbmco
MCk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0RnJhbWVidWZmZXJCaW5kaW5nKDApOwor
ICAgIH0KKworICAgIC8vIFRoZXJlIGlzIG5vIGRpcmVjdCB3YXkgdG8gY2xlYXIgZXJyb3JzIGZy
b20gYSBHTCBpbXBsZW1lbnRhdGlvbiBhbmQKKyAgICAvLyBsb29waW5nIHVudGlsIGdldEVycm9y
KCkgYmVjb21lcyBOT19FUlJPUiBtaWdodCBjYXVzZSBhbiBpbmZpbml0ZSBsb29wIGlmCisgICAg
Ly8gdGhlIGRyaXZlciBvciBjb250ZXh0IGltcGxlbWVudGF0aW9uIGhhZCBhIGJ1Zy4gU28sIGxv
b3AgYSByZWFzb25hYmx5CisgICAgLy8gbGFyZ2UgbnVtYmVyIG9mIHRpbWVzIHRvIGNsZWFyIGFu
eSBleGlzdGluZyBlcnJvcnMuCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDA7ICsraSkgewor
ICAgICAgICBpZiAobV9jb250ZXh0LT5nZXRFcnJvcigpID09IEdyYXBoaWNzQ29udGV4dDNEOjpO
T19FUlJPUikKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBDb25zb2xlRGlzcGxheVBy
ZWZlcmVuY2UgZGlzcGxheSA9IChtb2RlID09IFJlYWxMb3N0Q29udGV4dCkgPyBEaXNwbGF5SW5D
b25zb2xlOiBEb250RGlzcGxheUluQ29uc29sZTsKKyAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6Q09OVEVYVF9MT1NUX1dFQkdMLCAibG9zZUNvbnRleHQiLCAiY29udGV4
dCBsb3N0IiwgZGlzcGxheSk7CisKKyAgICAvLyBEb24ndCBhbGxvdyByZXN0b3JhdGlvbiB1bmxl
c3MgdGhlIGNvbnRleHQgbG9zdCBldmVudCBoYXMgYm90aCBiZWVuCisgICAgLy8gZGlzcGF0Y2hl
ZCBhbmQgaXRzIGRlZmF1bHQgYmVoYXZpb3IgcHJldmVudGVkLgorICAgIG1fcmVzdG9yZUFsbG93
ZWQgPSBmYWxzZTsKKworICAgIC8vIEFsd2F5cyBkZWZlciB0aGUgZGlzcGF0Y2ggb2YgdGhlIGNv
bnRleHQgbG9zdCBldmVudCwgdG8gaW1wbGVtZW50CisgICAgLy8gdGhlIHNwZWMgYmVoYXZpb3Ig
b2YgcXVldWVpbmcgYSB0YXNrLgorICAgIG1fZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50VGltZXIu
c3RhcnRPbmVTaG90KDApOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Zm9yY2VS
ZXN0b3JlQ29udGV4dCgpCit7CisgICAgaWYgKCFpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpIHsK
KyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BF
UkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCBub3QgbG9zdCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX3Jlc3RvcmVBbGxvd2VkKSB7CisgICAgICAgIGlm
IChtX2NvbnRleHRMb3N0TW9kZSA9PSBTeW50aGV0aWNMb3N0Q29udGV4dCkKKyAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
InJlc3RvcmVDb250ZXh0IiwgImNvbnRleHQgcmVzdG9yYXRpb24gbm90IGFsbG93ZWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9yZXN0b3JlVGltZXIuaXNBY3RpdmUo
KSkKKyAgICAgICAgbV9yZXN0b3JlVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCitQbGF0Zm9y
bUxheWVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorewor
ICAgIHJldHVybiAoIWlzQ29udGV4dExvc3QoKSAmJiAhbV9pc1BlbmRpbmdQb2xpY3lSZXNvbHV0
aW9uKSA/IG1fY29udGV4dC0+cGxhdGZvcm1MYXllcigpIDogMDsKK30KKwordm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnJlbW92ZVNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9iamVjdCogb2Jq
ZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIG1fY29udGV4dEdyb3VwLT5yZW1vdmVPYmplY3Qob2JqZWN0KTsKK30KKwor
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZFNoYXJlZE9iamVjdChXZWJHTFNoYXJlZE9i
amVjdCogb2JqZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisg
ICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBtX2Nv
bnRleHRHcm91cC0+YWRkT2JqZWN0KG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpyZW1vdmVDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2JqZWN0KQor
eworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJldHVybjsK
KworICAgIG1fY29udGV4dE9iamVjdHMucmVtb3ZlKG9iamVjdCk7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjphZGRDb250ZXh0T2JqZWN0KFdlYkdMQ29udGV4dE9iamVjdCogb2Jq
ZWN0KQoreworICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCisgICAgICAgIHJl
dHVybjsKKworICAgIEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKKyAgICBtX2NvbnRleHRPYmpl
Y3RzLmFkZChvYmplY3QpOworfQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNo
QW5kUmVtb3ZlQWxsT2JqZWN0cygpCit7CisgICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1
dGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgd2hpbGUgKG1fY29udGV4dE9iamVjdHMuc2l6
ZSgpID4gMCkgeworICAgICAgICBIYXNoU2V0PFdlYkdMQ29udGV4dE9iamVjdCo+OjppdGVyYXRv
ciBpdCA9IG1fY29udGV4dE9iamVjdHMuYmVnaW4oKTsKKyAgICAgICAgKCppdCktPmRldGFjaENv
bnRleHQoKTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpoYXNQZW5k
aW5nQWN0aXZpdHkoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnN0b3AoKQoreworICAgIGlmICghaXNDb250ZXh0TG9zdCgpICYm
ICFtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pIHsKKyAgICAgICAgZm9yY2VMb3N0Q29udGV4
dChTeW50aGV0aWNMb3N0Q29udGV4dCk7CisgICAgICAgIGRlc3Ryb3lHcmFwaGljc0NvbnRleHQz
RCgpOworICAgIH0KK30KKworV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
Qm9vbGVhblBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBHQzNEYm9vbGVhbiB2YWx1
ZSA9IDA7CisgICAgbV9jb250ZXh0LT5nZXRCb29sZWFudihwbmFtZSwgJnZhbHVlKTsKKyAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZhbHVlKSk7Cit9CisKK1dlYkdM
R2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihH
QzNEZW51bSBwbmFtZSkKK3sKKyAgICBpZiAocG5hbWUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX1dSSVRFTUFTSykgeworICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKDAsIDApOworICAgIH0KKyAgICBHQzNEYm9vbGVhbiB2YWx1ZVs0XSA9
IHswfTsKKyAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7CisgICAgYm9v
bCBib29sVmFsdWVbNF07CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IDQ7ICsraWkpCisgICAg
ICAgIGJvb2xWYWx1ZVtpaV0gPSBzdGF0aWNfY2FzdDxib29sPih2YWx1ZVtpaV0pOworICAgIHJl
dHVybiBXZWJHTEdldEluZm8oYm9vbFZhbHVlLCA0KTsKK30KKworV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0RmxvYXRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCit7Cisg
ICAgR0MzRGZsb2F0IHZhbHVlID0gMDsKKyAgICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwg
JnZhbHVlKTsKKyAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKK30KKworV2ViR0xHZXRJ
bmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0SW50UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1l
KQoreworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYo
cG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyh2YWx1ZSk7Cit9CisKK1dl
YkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFVuc2lnbmVkSW50UGFyYW1ldGVy
KEdDM0RlbnVtIHBuYW1lKQoreworICAgIEdDM0RpbnQgdmFsdWUgPSAwOworICAgIG1fY29udGV4
dC0+Z2V0SW50ZWdlcnYocG5hbWUsICZ2YWx1ZSk7CisgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhz
dGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHZhbHVlKSk7Cit9CisKK1dlYkdMR2V0SW5mbyBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihHQzNEZW51bSBw
bmFtZSkKK3sKKyAgICBHQzNEZmxvYXQgdmFsdWVbNF0gPSB7MH07CisgICAgbV9jb250ZXh0LT5n
ZXRGbG9hdHYocG5hbWUsIHZhbHVlKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSAwOworICAgIHN3
aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX1BPSU5U
X1NJWkVfUkFOR0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxJQVNFRF9MSU5FX1dJ
RFRIX1JBTkdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1JBTkdFOgorICAg
ICAgICBsZW5ndGggPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpCTEVORF9DT0xPUjoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9DTEVB
Ul9WQUxVRToKKyAgICAgICAgbGVuZ3RoID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbyhGbG9hdDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Cit9CisKK1dlYkdMR2V0
SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFdlYkdMSW50QXJyYXlQYXJhbWV0ZXIoR0Mz
RGVudW0gcG5hbWUpCit7CisgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKKyAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gMDsK
KyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJ
RVdQT1JUX0RJTVM6CisgICAgICAgIGxlbmd0aCA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlZJRVdQT1JUOgorICAgICAgICBsZW5ndGggPSA0OworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIH0KKyAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Cit9CisKK3Zv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoY29uc3Qg
Y2hhciogZnVuY3Rpb25OYW1lLCBib29sIHByZXBhcmVUb0RyYXcpCit7CisgICAgYm9vbCByZXNl
dEFjdGl2ZVVuaXQgPSBmYWxzZTsKKyAgICBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25G
bGFnIGV4dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNp
b25GbGFnPigobV9vZXNUZXh0dXJlRmxvYXRMaW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVF
eHRlbnNpb25GbG9hdExpbmVhckVuYWJsZWQgOiAwKSB8IChtX29lc1RleHR1cmVIYWxmRmxvYXRM
aW5lYXIgPyBXZWJHTFRleHR1cmU6OlRleHR1cmVFeHRlbnNpb25IYWxmRmxvYXRMaW5lYXJFbmFi
bGVkIDogMCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgbV90ZXh0dXJlVW5p
dHMuc2l6ZSgpOyArK2lpKSB7CisgICAgICAgIGlmICgobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1
cmUyREJpbmRpbmcgJiYgbV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmUyREJpbmRpbmctPm5lZWRU
b1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkKKyAgICAgICAgICAgIHx8IChtX3RleHR1cmVV
bml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0
dXJlQ3ViZU1hcEJpbmRpbmctPm5lZWRUb1VzZUJsYWNrVGV4dHVyZShleHRlbnNpb25zKSkpIHsK
KyAgICAgICAgICAgIGlmIChpaSAhPSBtX2FjdGl2ZVRleHR1cmVVbml0KSB7CisgICAgICAgICAg
ICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKGlpKTsKKyAgICAgICAgICAgICAgICByZXNl
dEFjdGl2ZVVuaXQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNldEFjdGl2ZVVu
aXQpIHsKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoaWkpOworICAg
ICAgICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgV2ViR0xUZXh0dXJlKiB0ZXgyRDsKKyAgICAgICAgICAgIFdlYkdMVGV4dHVyZSog
dGV4Q3ViZU1hcDsKKyAgICAgICAgICAgIGlmIChwcmVwYXJlVG9EcmF3KSB7CisgICAgICAgICAg
ICAgICAgU3RyaW5nIG1zZyhTdHJpbmcoInRleHR1cmUgYm91bmQgdG8gdGV4dHVyZSB1bml0ICIp
ICsgU3RyaW5nOjpudW1iZXIoaWkpCisgICAgICAgICAgICAgICAgICAgICsgIiBpcyBub3QgcmVu
ZGVyYWJsZS4gSXQgbWF5YmUgbm9uLXBvd2VyLW9mLTIgYW5kIGhhdmUgaW5jb21wYXRpYmxlIHRl
eHR1cmUgZmlsdGVyaW5nIG9yIGlzIG5vdCAndGV4dHVyZSBjb21wbGV0ZScsIgorICAgICAgICAg
ICAgICAgICAgICArICIgb3IgaXQgaXMgYSBmbG9hdC9oYWxmLWZsb2F0IHR5cGUgd2l0aCBsaW5l
YXIgZmlsdGVyaW5nIGFuZCB3aXRob3V0IHRoZSByZWxldmFudCBmbG9hdC9oYWxmLWZsb2F0IGxp
bmVhciBleHRlbnNpb24gZW5hYmxlZC4iKTsKKyAgICAgICAgICAgICAgICBwcmludEdMV2Fybmlu
Z1RvQ29uc29sZShmdW5jdGlvbk5hbWUsIG1zZy51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICB0ZXgyRCA9IG1fYmxhY2tUZXh0dXJlMkQuZ2V0KCk7CisgICAgICAgICAgICAgICAgdGV4
Q3ViZU1hcCA9IG1fYmxhY2tUZXh0dXJlQ3ViZU1hcC5nZXQoKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgdGV4MkQgPSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJE
QmluZGluZy5nZXQoKTsKKyAgICAgICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV90ZXh0dXJlVW5p
dHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIChtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1
cmVVbml0c1tpaV0udGV4dHVyZTJEQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVu
c2lvbnMpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIG9iamVjdE9yWmVybyh0ZXgyRCkpOworICAgICAgICAgICAg
aWYgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJl
VW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4
dGVuc2lvbnMpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVAsIG9iamVjdE9yWmVybyh0ZXhDdWJlTWFwKSk7
CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHJlc2V0QWN0aXZlVW5pdCkKKyAgICAgICAgbV9j
b250ZXh0LT5hY3RpdmVUZXh0dXJlKG1fYWN0aXZlVGV4dHVyZVVuaXQpOworfQorCit2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlRmFsbGJhY2tCbGFja1RleHR1cmVzMXgxKCkKK3sK
KyAgICB1bnNpZ25lZCBjaGFyIGJsYWNrW10gPSB7MCwgMCwgMCwgMjU1fTsKKyAgICBtX2JsYWNr
VGV4dHVyZTJEID0gY3JlYXRlVGV4dHVyZSgpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fYmxhY2tUZXh0dXJlMkQtPm9iamVjdCgp
KTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKyAgICBtX2JsYWNrVGV4dHVyZUN1YmVNYXAgPSBj
cmVhdGVUZXh0dXJlKCk7CisgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgbV9ibGFja1RleHR1cmVDdWJlTWFwLT5vYmplY3QoKSk7
CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1gsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleElt
YWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCwgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSwgYmxhY2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgMSwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9j
b250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1ksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCAxLCAxLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKKyAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWiwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIDEsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxh
Y2spOworICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9DVUJFX01BUF9ORUdBVElWRV9aLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7CisgICAgbV9jb250ZXh0LT5i
aW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgMCk7Cit9CisK
K2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojppc1RleEludGVybmFsRm9ybWF0Q29sb3JCdWZm
ZXJDb21iaW5hdGlvblZhbGlkKEdDM0RlbnVtIHRleEludGVybmFsRm9ybWF0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gY29sb3JCdWZmZXJGb3JtYXQpCit7CisgICAgdW5zaWduZWQgbmVl
ZCA9IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDaGFubmVsQml0c0J5Rm9ybWF0KHRleEludGVybmFs
Rm9ybWF0KTsKKyAgICB1bnNpZ25lZCBoYXZlID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5u
ZWxCaXRzQnlGb3JtYXQoY29sb3JCdWZmZXJGb3JtYXQpOworICAgIHJldHVybiAobmVlZCAmIGhh
dmUpID09IG5lZWQ7Cit9CisKK0dDM0RlbnVtIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91
bmRGcmFtZWJ1ZmZlckNvbG9yRm9ybWF0KCkKK3sKKyAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVjdCgpKQorICAgICAgICByZXR1cm4gbV9m
cmFtZWJ1ZmZlckJpbmRpbmctPmdldENvbG9yQnVmZmVyRm9ybWF0KCk7CisgICAgaWYgKG1fYXR0
cmlidXRlcy5hbHBoYSkKKyAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwor
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6UkdCOworfQorCitpbnQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKQoreworICAgIGlmIChtX2ZyYW1l
YnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCisgICAgICAg
IHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJXaWR0aCgpOworICAg
IHJldHVybiBtX2RyYXdpbmdCdWZmZXIgPyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS53aWR0aCgp
IDogbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndpZHRoKCk7Cit9CisK
K2ludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJIZWlnaHQoKQor
eworICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+
b2JqZWN0KCkpCisgICAgICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JC
dWZmZXJIZWlnaHQoKTsKKyAgICByZXR1cm4gbV9kcmF3aW5nQnVmZmVyID8gbV9kcmF3aW5nQnVm
ZmVyLT5zaXplKCkuaGVpZ2h0KCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJT
aXplKCkuaGVpZ2h0KCk7Cit9CisKK1dlYkdMVGV4dHVyZSogV2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVu
dW0gdGFyZ2V0LCBib29sIHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkKK3sKKyAgICBXZWJHTFRleHR1
cmUqIHRleHR1cmUgPSBudWxscHRyOworICAgIHN3aXRjaCAodGFyZ2V0KSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRDoKKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVy
ZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRpbmcuZ2V0KCk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X05FR0FUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9QT1NJVElWRV9ZOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX1BPU0lUSVZFX1o6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aOgorICAgICAgICBpZiAoIXVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOworICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVy
ZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUDoKKyAgICAgICAgaWYgKHVzZVNpeEVudW1zRm9yQ3ViZU1hcCkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdldCIpOworICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIH0KKyAgICAgICAgdGV4dHVyZSA9IG1fdGV4dHVyZVVuaXRzW21fYWN0
aXZlVGV4dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZy5nZXQoKTsKKyAgICAgICAgYnJl
YWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHRhcmdl
dCIpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgaWYgKCF0ZXh0dXJlKQor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIHRleHR1cmUiKTsKKyAgICByZXR1cm4gdGV4dHVyZTsK
K30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlTG9jYXRpb25MZW5ndGgo
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBj
b25zdCB1bnNpZ25lZCBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoID0gMjU2OworICAgIGlmIChzdHJp
bmcubGVuZ3RoKCkgPiBtYXhXZWJHTExvY2F0aW9uTGVuZ3RoKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJsb2NhdGlvbiBsZW5ndGggPiAyNTYiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlU2l6ZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgeCwgR0MzRGludCB5KQor
eworICAgIGlmICh4IDwgMCB8fCB5IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAic2l6ZSA8IDAi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlU3RyaW5nKGNvbnN0IGNoYXIqIGZ1
bmN0aW9uTmFtZSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBzdHJpbmcubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpZiAoIXZhbGlkYXRlQ2hh
cmFjdGVyKHN0cmluZ1tpXSkpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJzdHJpbmcgbm90IEFT
Q0lJIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRl
eEZ1bmNGb3JtYXRBbmRUeXBlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gZm9y
bWF0LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50IGxldmVsKQoreworICAgIHN3aXRjaCAoZm9ybWF0
KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxVTUlO
QU5DRV9BTFBIQToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
RVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlmIChtX3dlYmdsRGVwdGhUZXh0dXJlKQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImRlcHRoIHRleHR1cmUgZm9ybWF0cyBub3Qg
ZW5hYmxlZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OlNSR0JfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpTUkdCX0FMUEhBX0VYVDoKKyAgICBk
ZWZhdWx0OgorICAgICAgICBpZiAoKGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfRVhUIHx8
IGZvcm1hdCA9PSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUKQorICAgICAgICAgICAgJiYg
bV9leHRzUkdCKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dGV4dHVyZSBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV82XzU6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDoKKyAgICAgICAgaWYgKG1fb2Vz
VGV4dHVyZUZsb2F0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgdGV4dHVyZSB0eXBlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpIQUxGX0ZMT0FUX09FUzoKKyAgICAgICAgaWYgKG1fb2VzVGV4dHVyZUhh
bGZGbG9hdCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRl
eHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfSU5UOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lH
TkVEX0lOVF8yNF84OgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JU
OgorICAgICAgICBpZiAobV93ZWJnbERlcHRoVGV4dHVyZSkKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5
cGUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFZlcmlmeSB0aGF0
IHRoZSBjb21iaW5hdGlvbiBvZiBmb3JtYXQgYW5kIHR5cGUgaXMgc3VwcG9ydGVkLgorICAgIHN3
aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TFVNSU5BTkNFOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkxVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpI
QUxGX0ZMT0FUX09FUykgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUg
Zm9yIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjoKKyAgICBjYXNlIEV4
dGVuc2lvbnMzRDo6U1JHQl9FWFQ6CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFCisgICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNQorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQKKyAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0
M0Q6OkhBTEZfRkxPQVRfT0VTKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQg
dHlwZSBmb3IgUkdCIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OlNSR0JfQUxQSEFfRVhUOgorICAgICAgICBpZiAodHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURQorICAgICAgICAgICAgJiYgdHlwZSAh
PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNF80XzRfNAorICAgICAgICAgICAg
JiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMQorICAg
ICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQKKyAgICAgICAgICAg
ICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRfT0VTKSB7CisgICAgICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgUkdCQSBmb3JtYXQiKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQ6CisgICAgICAgIGlmICghbV93ZWJn
bERlcHRoVGV4dHVyZSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQuIERF
UFRIX0NPTVBPTkVOVCBub3QgZW5hYmxlZCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9TSE9SVAorICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UKSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQ
VEhfQ09NUE9ORU5UIGZvcm1hdCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIGlmIChsZXZlbCA+IDApIHsKKyAgICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImxl
dmVsIG11c3QgYmUgMCBmb3IgREVQVEhfQ09NUE9ORU5UIGZvcm1hdCIpOworICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgorICAgICAgICBpZiAoIW1fd2ViZ2xEZXB0aFRleHR1
cmUpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgZm9ybWF0LiBERVBUSF9TVEVOQ0lM
IG5vdCBlbmFibGVkIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVF8yNF84KSB7
CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSBmb3IgREVQVEhfU1RFTkNJ
TCBmb3JtYXQiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAobGV2ZWwgPiAwKSB7CisgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBtdXN0IGJl
IDAgZm9yIERFUFRIX1NURU5DSUwgZm9ybWF0Iik7CisgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVUZXhGdW5jTGV2ZWwoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgaWYgKGxldmVs
IDwgMCkgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPCAwIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgc3dpdGNoICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJEOgorICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhUZXh0dXJlTGV2
ZWwpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6CisgICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAg
ICAgICAgaWYgKGxldmVsID49IG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCkgeworICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1
bmN0aW9uTmFtZSwgImxldmVsIG91dCBvZiByYW5nZSIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIG9ubHkgY2hlY2tzIGlmIGxldmVsIGlzIGxlZ2FsLCBzbyB3ZSByZXR1cm4gdHJ1ZSBhbmQg
ZG9uJ3QKKyAgICAvLyBnZW5lcmF0ZSBJTlZBTElEX0VOVU0gaWYgdGFyZ2V0IGlzIGlsbGVnYWwu
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxp
ZGF0ZVRleEZ1bmNQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleEZ1bmNWYWxp
ZGF0aW9uRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVp
Z2h0LCBHQzNEaW50IGJvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSkKK3sKKyAg
ICAvLyBXZSBhYnNvbHV0ZWx5IGhhdmUgdG8gdmFsaWRhdGUgdGhlIGZvcm1hdCBhbmQgdHlwZSBj
b21iaW5hdGlvbi4KKyAgICAvLyBUaGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMgdGFraW5nIEhU
TUxJbWFnZSwgZXRjLiB3aWxsIHByb2R1Y2UKKyAgICAvLyB0ZW1wb3JhcnkgZGF0YSBiYXNlZCBv
biB0aGlzIGNvbWJpbmF0aW9uLCBzbyBpdCBtdXN0IGJlIGxlZ2FsLgorICAgIGlmICghdmFsaWRh
dGVUZXhGdW5jRm9ybWF0QW5kVHlwZShmdW5jdGlvbk5hbWUsIGZvcm1hdCwgdHlwZSwgbGV2ZWwp
IHx8ICF2YWxpZGF0ZVRleEZ1bmNMZXZlbChmdW5jdGlvbk5hbWUsIHRhcmdldCwgbGV2ZWwpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAp
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIEdDM0RpbnQgbWF4VGV4dHVyZVNpemVGb3JMZXZlbCA9
IHBvdygyLjAsIG1fbWF4VGV4dHVyZUxldmVsIC0gMSAtIGxldmVsKTsKKyAgICBzd2l0Y2ggKHRh
cmdldCkgeworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6CisgICAgICAg
IGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwgfHwgaGVpZ2h0ID4gbWF4VGV4dHVy
ZVNpemVGb3JMZXZlbCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCBv
dXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQ
X1BPU0lUSVZFX1g6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9YOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWToKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQX05FR0FUSVZFX1k6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9aOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZSAhPSBUZXhTdWJJbWFn
ZTJEICYmIHdpZHRoICE9IGhlaWdodCkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoICE9
IGhlaWdodCBmb3IgY3ViZSBtYXAiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICAvLyBObyBuZWVkIHRvIGNoZWNrIGhlaWdodCBoZXJlLiBGb3IgdGV4SW1h
Z2Ugd2lkdGggPT0gaGVpZ2h0LgorICAgICAgICAvLyBGb3IgdGV4U3ViSW1hZ2UgdGhhdCB3aWxs
IGJlIGNoZWNrZWQgd2hlbiBjaGVja2luZyB5b2Zmc2V0ICsgaGVpZ2h0IGlzIGluIHJhbmdlLgor
ICAgICAgICBpZiAod2lkdGggPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7CisgICAgICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSBmb3IgY3ViZSBtYXAiKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRhcmdldCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCkg
eworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCAhPSBpbnRlcm5hbGZvcm1hdCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGJvcmRlcikgeworICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rp
b25OYW1lLCAiYm9yZGVyICE9IDAiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRh
dGVUZXhGdW5jRGF0YShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RpbnQgbGV2ZWwsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcnJheUJ1ZmZlclZpZXcq
IHBpeGVscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE51bGxEaXNwb3NpdGlvbiBkaXNwb3NpdGlvbikKK3sKKyAgICBpZiAoIXBpeGVscykgeworICAg
ICAgICBpZiAoZGlzcG9zaXRpb24gPT0gTnVsbEFsbG93ZWQpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIHBpeGVscyIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZ1bmN0
aW9uTmFtZSwgZm9ybWF0LCB0eXBlLCBsZXZlbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoIXZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoZnVuY3Rpb25OYW1lLCBmb3JtYXQpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgorICAgICAgICBpZiAocGl4ZWxzLT5nZXRU
eXBlKCkgIT0gSlNDOjpUeXBlVWludDgpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlw
ZSBVTlNJR05FRF9CWVRFIGJ1dCBBcnJheUJ1ZmZlclZpZXcgbm90IFVpbnQ4QXJyYXkiKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIGlmIChwaXhlbHMt
PmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50MTYpIHsKKyAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAidHlwZSBVTlNJR05FRF9TSE9SVCBidXQgQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50MTZBcnJh
eSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOiAvLyBPRVNfdGV4dHVyZV9mbG9h
dAorICAgICAgICBpZiAocGl4ZWxzLT5nZXRUeXBlKCkgIT0gSlNDOjpUeXBlRmxvYXQzMikgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ0eXBlIEZMT0FUIGJ1dCBBcnJheUJ1ZmZlclZpZXcg
bm90IEZsb2F0MzJBcnJheSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhBTEZfRkxPQVRf
T0VTOiAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0CisgICAgICAgIC8vIEFzIHBlciB0aGUgc3Bl
Y2lmaWNhdGlvbiwgQXJyYXlCdWZmZXJWaWV3IHNob3VsZCBiZSBudWxsIHdoZW4KKyAgICAgICAg
Ly8gT0VTX3RleHR1cmVfaGFsZl9mbG9hdCBpcyBlbmFibGVkLgorICAgICAgICBpZiAocGl4ZWxz
KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgSEFMRl9GTE9BVF9PRVMgYnV0IEFy
cmF5QnVmZmVyVmlldyBpcyBub3QgTlVMTCIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIGludCB0b3RhbEJ5dGVzUmVxdWly
ZWQ7CisgICAgR0MzRGVudW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5
dGVzKGZvcm1hdCwgdHlwZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZ0b3Rh
bEJ5dGVzUmVxdWlyZWQsIDApOworICAgIGlmIChlcnJvciAhPSBHcmFwaGljc0NvbnRleHQzRDo6
Tk9fRVJST1IpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGV4dHVyZSBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpIDwgdG90YWxCeXRlc1JlcXVpcmVk
KSB7CisgICAgICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKSB7CisgICAgICAgICAgZXJy
b3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlwZSwgd2lk
dGgsIGhlaWdodCwgMSwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7CisgICAgICAgICAgaWYgKHBp
eGVscy0+Ynl0ZUxlbmd0aCgpID09IHRvdGFsQnl0ZXNSZXF1aXJlZCkgeworICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBm
dW5jdGlvbk5hbWUsICJBcnJheUJ1ZmZlclZpZXcgbm90IGJpZyBlbm91Z2ggZm9yIHJlcXVlc3Qg
d2l0aCBVTlBBQ0tfQUxJR05NRU5UID4gMSIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVy
VmlldyBub3QgYmlnIGVub3VnaCBmb3IgcmVxdWVzdCIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4Rm9ybWF0KEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICBy
ZXR1cm4gbV9jb21wcmVzc2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KTsKK30KKwor
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRh
KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBo
ZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBBcnJheUJ1ZmZlclZpZXcqIHBpeGVscykKK3sKKyAg
ICBpZiAoIXBpeGVscykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHdpZHRoIDwgMCB8fCBoZWlnaHQgPCAwKSB7
CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgPCAwIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXNSZXF1aXJlZCA9IDA7CisK
KyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VE
X1JHQl9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JH
QkFfUzNUQ19EWFQxX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENf
UkdCX0FNRDoKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4
OworICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1dpZHRoID0gNDsKKyAgICAgICAgICAgIGNv
bnN0IGludCBrQmxvY2tIZWlnaHQgPSA0OworICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Fjcm9z
cyA9ICh3aWR0aCArIGtCbG9ja1dpZHRoIC0gMSkgLyBrQmxvY2tXaWR0aDsKKyAgICAgICAgICAg
IGludCBudW1CbG9ja3NEb3duID0gKGhlaWdodCArIGtCbG9ja0hlaWdodCAtIDEpIC8ga0Jsb2Nr
SGVpZ2h0OworICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IG51bUJsb2Nrc0Fjcm9zcyAqIG51
bUJsb2Nrc0Rvd24gKiBrQmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6CisgICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFfRVhQTElDSVRfQUxQSEFfQU1EOgor
ICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX0FUQ19SR0JBX0lOVEVSUE9MQVRFRF9B
TFBIQV9BTUQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXplID0g
MTY7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0OworICAgICAgICAgICAg
Y29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgICAgICBpbnQgbnVtQmxvY2tzQWNy
b3NzID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRoOworICAgICAgICAg
ICAgaW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0IC0gMSkgLyBrQmxv
Y2tIZWlnaHQ7CisgICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxvY2tzQWNyb3NzICog
bnVtQmxvY2tzRG93biAqIGtCbG9ja1NpemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6Cisg
ICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgor
ICAgICAgICB7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7CisgICAgICAg
ICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA4OworICAgICAgICAgICAgY29uc3QgaW50IGtC
bG9ja0hlaWdodCA9IDg7CisgICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gKHN0ZDo6bWF4KHdp
ZHRoLCBrQmxvY2tXaWR0aCkgKiBzdGQ6Om1heChoZWlnaHQsIGtCbG9ja0hlaWdodCkgKiA0ICsg
NykgLyBrQmxvY2tTaXplOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1HOgorICAgIGNhc2UgRXh0
ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzoKKyAgICAgICAgewor
ICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja1NpemUgPSA4OworICAgICAgICAgICAgY29uc3Qg
aW50IGtCbG9ja1dpZHRoID0gMTY7CisgICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0
ID0gODsKKyAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSAoc3RkOjptYXgod2lkdGgsIGtCbG9j
a1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2NrSGVpZ2h0KSAqIDIgKyA3KSAvIGtCbG9j
a1NpemU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rp
b25OYW1lLCAiaW52YWxpZCBmb3JtYXQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSAhPSBieXRlc1JlcXVpcmVkKSB7CisgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBm
dW5jdGlvbk5hbWUsICJsZW5ndGggb2YgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBjb3JyZWN0IGZv
ciBkaW1lbnNpb25zIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQ29tcHJl
c3NlZFRleERpbWVuc2lvbnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0Mz
RGVudW0gZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBFeHRlbnNp
b25zM0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKKyAgICAgICAgY29uc3QgR0MzRHNpemVp
IGtCbG9ja1dpZHRoID0gNDsKKyAgICAgICAgY29uc3QgR0MzRHNpemVpIGtCbG9ja0hlaWdodCA9
IDQ7CisgICAgICAgIGNvbnN0IEdDM0RpbnQgbWF4VGV4dHVyZVNpemUgPSB0YXJnZXQgPyBtX21h
eFRleHR1cmVTaXplIDogbV9tYXhDdWJlTWFwVGV4dHVyZVNpemU7CisgICAgICAgIGNvbnN0IEdD
M0RzaXplaSBtYXhDb21wcmVzc2VkRGltZW5zaW9uID0gbWF4VGV4dHVyZVNpemUgPj4gbGV2ZWw7
CisgICAgICAgIGJvb2wgd2lkdGhWYWxpZCA9IChsZXZlbCAmJiB3aWR0aCA9PSAxKSB8fCAobGV2
ZWwgJiYgd2lkdGggPT0gMikgfHwgKCEod2lkdGggJSBrQmxvY2tXaWR0aCkgJiYgd2lkdGggPD0g
bWF4Q29tcHJlc3NlZERpbWVuc2lvbik7CisgICAgICAgIGJvb2wgaGVpZ2h0VmFsaWQgPSAobGV2
ZWwgJiYgaGVpZ2h0ID09IDEpIHx8IChsZXZlbCAmJiBoZWlnaHQgPT0gMikgfHwgKCEoaGVpZ2h0
ICUga0Jsb2NrSGVpZ2h0KSAmJiBoZWlnaHQgPD0gbWF4Q29tcHJlc3NlZERpbWVuc2lvbik7Cisg
ICAgICAgIGlmICghd2lkdGhWYWxpZCB8fCAhaGVpZ2h0VmFsaWQpIHsKKyAgICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IGludmFsaWQgZm9yIGxldmVsIik7CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ180QlBQVjFfSU1H
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQl9QVlJUQ18yQlBQVjFfSU1H
OgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUFZSVENfNEJQUFYxX0lN
RzoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRDXzJCUFBWMV9J
TUc6CisgICAgICAgIC8vIEhlaWdodCBhbmQgd2lkdGggbXVzdCBiZSBwb3dlcnMgb2YgMi4KKyAg
ICAgICAgaWYgKCh3aWR0aCAmICh3aWR0aCAtIDEpKSB8fCAoaGVpZ2h0ICYgKGhlaWdodCAtIDEp
KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgaW52YWxpZCBm
b3IgbGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVzc2VkVGV4
U3ViRGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
QzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgV2ViR0xU
ZXh0dXJlKiB0ZXgpCit7CisgICAgaWYgKHhvZmZzZXQgPCAwIHx8IHlvZmZzZXQgPCAwKSB7Cisg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IDwgMCIpOworICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgorICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX1JHQkFfUzNUQ19EWFQzX0VYVDoKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUNV9FWFQ6IHsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja1dp
ZHRoID0gNDsKKyAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7CisgICAgICAgIGlm
ICgoeG9mZnNldCAlIGtCbG9ja1dpZHRoKSB8fCAoeW9mZnNldCAlIGtCbG9ja0hlaWdodCkpIHsK
KyAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAieG9mZnNldCBvciB5b2Zmc2V0IG5vdCBtdWx0aXBs
ZSBvZiA0Iik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
aWYgKHdpZHRoIC0geG9mZnNldCA+IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKKyAgICAg
ICAgICAgIHx8IGhlaWdodCAtIHlvZmZzZXQgPiB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVs
KSkgeworICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG91dCBvZiByYW5nZSIp
OworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB2
YWxpZGF0ZUNvbXByZXNzZWRUZXhEaW1lbnNpb25zKGZ1bmN0aW9uTmFtZSwgdGFyZ2V0LCBsZXZl
bCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0KTsKKyAgICB9CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCX1BWUlRDXzRCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9QVlJUQ180QlBQVjFfSU1HOgorICAgIGNhc2UgRXh0ZW5zaW9uczNE
OjpDT01QUkVTU0VEX1JHQkFfUFZSVENfMkJQUFYxX0lNRzogeworICAgICAgICBpZiAoeG9mZnNl
dCB8fCB5b2Zmc2V0KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInhvZmZzZXQgYW5kIHlv
ZmZzZXQgbXVzdCBiZSB6ZXJvIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKHdpZHRoICE9IHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkKKyAg
ICAgICAgICAgIHx8IGhlaWdodCAhPSB0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSkgewor
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJkaW1lbnNpb25zIG11c3QgbWF0Y2ggZXhpc3Rpbmcg
bGV2ZWwiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhmdW5jdGlvbk5hbWUsIHRhcmdl
dCwgbGV2ZWwsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCk7CisgICAgfQorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZURyYXdNb2RlKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0g
bW9kZSkKK3sKKyAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpQT0lOVFM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElORV9TVFJJUDoKKyAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FX0xPT1A6CisgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TElORVM6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfU1RSSVA6
CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOOgorICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBkcmF3IG1vZGUiKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlk
YXRlU3RlbmNpbFNldHRpbmdzKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSkKK3sKKyAgICBpZiAo
bV9zdGVuY2lsTWFzayAhPSBtX3N0ZW5jaWxNYXNrQmFjayB8fCBtX3N0ZW5jaWxGdW5jUmVmICE9
IG1fc3RlbmNpbEZ1bmNSZWZCYWNrIHx8IG1fc3RlbmNpbEZ1bmNNYXNrICE9IG1fc3RlbmNpbEZ1
bmNNYXNrQmFjaykgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImZyb250IGFuZCBiYWNrIHN0ZW5j
aWxzIHNldHRpbmdzIGRvIG5vdCBtYXRjaCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFs
aWRhdGVTdGVuY2lsRnVuYyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIGZ1bmMp
Cit7CisgICAgc3dpdGNoIChmdW5jKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TkVW
RVI6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TEVTUzoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpMRVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6R1JFQVRFUjoK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpHRVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RVFVQUw6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Tk9URVFVQUw6Cisg
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxXQVlTOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZ1bmN0aW9uIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjpwcmludEdMRXJyb3JUb0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlm
ICghbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQpCisgICAgICAgIHJldHVybjsKKworICAg
IC0tbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93ZWQ7CisgICAgcHJpbnRXYXJuaW5nVG9Db25z
b2xlKG1lc3NhZ2UpOworCisgICAgaWYgKCFtX251bUdMRXJyb3JzVG9Db25zb2xlQWxsb3dlZCkK
KyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXZWJHTDogdG9vIG1hbnkgZXJyb3JzLCBu
byBtb3JlIGVycm9ycyB3aWxsIGJlIHJlcG9ydGVkIHRvIHRoZSBjb25zb2xlIGZvciB0aGlzIGNv
bnRleHQuIik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludFdhcm5pbmdU
b0NvbnNvbGUoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGlmICghY2FudmFzKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBjYW52YXMoKS0+ZG9jdW1lbnQoKS5hZGRDb25zb2xlTWVzc2Fn
ZShNZXNzYWdlU291cmNlOjpSZW5kZXJpbmcsIE1lc3NhZ2VMZXZlbDo6V2FybmluZywgbWVzc2Fn
ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUZyYW1lYnVmZmVy
RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGF0dGFjaG1lbnQpCit7CisgICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0YXJnZXQiKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsK
KyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMDoKKyAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5UOgorICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGlmIChtX3dlYmdsRHJhd0J1ZmZlcnMKKyAgICAgICAgICAgICYmIGF0dGFjaG1l
bnQgPiBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAKKyAgICAgICAgICAgICYm
IGF0dGFjaG1lbnQgPCBzdGF0aWNfY2FzdDxHQzNEZW51bT4oR3JhcGhpY3NDb250ZXh0M0Q6OkNP
TE9SX0FUVEFDSE1FTlQwICsgZ2V0TWF4Q29sb3JBdHRhY2htZW50cygpKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGF0dGFjaG1lbnQiKTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlQmxlbmRFcXVhdGlvbihjb25zdCBjaGFyKiBmdW5jdGlv
bk5hbWUsIEdDM0RlbnVtIG1vZGUpCit7CisgICAgc3dpdGNoIChtb2RlKSB7CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6RlVOQ19BREQ6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
RlVOQ19TVUJUUkFDVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGVU5DX1JFVkVSU0Vf
U1VCVFJBQ1Q6CisgICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1JTl9FWFQ6CisgICAgY2FzZSBFeHRl
bnNpb25zM0Q6Ok1BWF9FWFQ6CisgICAgICAgIGlmICgobW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1J
Tl9FWFQgfHwgbW9kZSA9PSBFeHRlbnNpb25zM0Q6Ok1BWF9FWFQpICYmICFtX2V4dEJsZW5kTWlu
TWF4KSB7CisgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIG1vZGUiKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBtb2RlIik7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUJsZW5kRnVuY0ZhY3RvcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEZW51bSBzcmMsIEdDM0RlbnVtIGRzdCkKK3sKKyAgICBpZiAoKChzcmMgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkNPTlNUQU5UX0NPTE9SIHx8IHNyYyA9PSBHcmFwaGljc0NvbnRleHQzRDo6T05F
X01JTlVTX0NPTlNUQU5UX0NPTE9SKQorICAgICAgICAgJiYgKGRzdCA9PSBHcmFwaGljc0NvbnRl
eHQzRDo6Q09OU1RBTlRfQUxQSEEgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlO
VVNfQ09OU1RBTlRfQUxQSEEpKQorICAgICAgICB8fCAoKGRzdCA9PSBHcmFwaGljc0NvbnRleHQz
RDo6Q09OU1RBTlRfQ09MT1IgfHwgZHN0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
Q09OU1RBTlRfQ09MT1IpCisgICAgICAgICAgICAmJiAoc3JjID09IEdyYXBoaWNzQ29udGV4dDNE
OjpDT05TVEFOVF9BTFBIQSB8fCBzcmMgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19D
T05TVEFOVF9BTFBIQSkpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW5jb21wYXRpYmxlIHNy
YyBhbmQgZHN0Iik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNhcGFiaWxpdHko
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNEZW51bSBjYXApCit7CisgICAgc3dpdGNoIChj
YXApIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORDoKKyAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpDVUxMX0ZBQ0U6CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpESVRIRVI6CisgICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfRklMTDoKKyAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6CisgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6U0FNUExFX0NPVkVSQUdFOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlND
SVNTT1JfVEVTVDoKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1Q6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFs
aWQgY2FwYWJpbGl0eSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitib29s
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
RmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgcmVxdWlyZWRNaW5TaXplKQoreworICAgIGlmICgh
dikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gYXJyYXkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhmdW5j
dGlvbk5hbWUsIGxvY2F0aW9uLCBmYWxzZSwgdi0+ZGF0YSgpLCB2LT5sZW5ndGgoKSwgcmVxdWly
ZWRNaW5TaXplKTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVW5p
Zm9ybVBhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBXZWJHTFVuaWZv
cm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEdDM0RzaXplaSByZXF1aXJlZE1p
blNpemUpCit7CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB2YWxpZGF0ZVVuaWZvcm1N
YXRyaXhQYXJhbWV0ZXJzKGZ1bmN0aW9uTmFtZSwgbG9jYXRpb24sIGZhbHNlLCB2LT5kYXRhKCks
IHYtPmxlbmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgdm9pZCogdiwgR0MzRHNp
emVpIHNpemUsIEdDM0RzaXplaSByZXF1aXJlZE1pblNpemUpCit7CisgICAgcmV0dXJuIHZhbGlk
YXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgZmFsc2Us
IHYsIHNpemUsIHJlcXVpcmVkTWluU2l6ZSk7Cit9CisKK2Jvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKGNvbnN0IGNoYXIqIGZ1bmN0aW9u
TmFtZSwgY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6ZSkKK3sK
KyAgICBpZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFt
ZXRlcnMoZnVuY3Rpb25OYW1lLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LT5kYXRhKCksIHYtPmxl
bmd0aCgpLCByZXF1aXJlZE1pblNpemUpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5h
bWUsIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCB2b2lkKiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIHJlcXVpcmVkTWluU2l6
ZSkKK3sKKyAgICBpZiAoIWxvY2F0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgeworICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0
aW9uTmFtZSwgImxvY2F0aW9uIGlzIG5vdCBmcm9tIGN1cnJlbnQgcHJvZ3JhbSIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmICghdikgeworICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAi
bm8gYXJyYXkiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAodHJhbnNw
b3NlKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ0cmFuc3Bvc2Ugbm90IEZBTFNFIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgaWYgKHNpemUgPCByZXF1aXJlZE1pblNpemUgfHwg
KHNpemUgJSByZXF1aXJlZE1pblNpemUpKSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNp
emUiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworV2ViR0xCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVCdWZmZXJEYXRh
UGFyYW1ldGVycyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0Mz
RGVudW0gdXNhZ2UpCit7CisgICAgV2ViR0xCdWZmZXIqIGJ1ZmZlciA9IDA7CisgICAgc3dpdGNo
ICh0YXJnZXQpIHsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUjoKKyAgICAgICAgYnVmZmVyID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVt
ZW50QXJyYXlCdWZmZXIoKS5nZXQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSOgorICAgICAgICBidWZmZXIgPSBtX2JvdW5kQXJyYXlC
dWZmZXIuZ2V0KCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFt
ZSwgImludmFsaWQgdGFyZ2V0Iik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAg
ICBpZiAoIWJ1ZmZlcikgeworICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIm5vIGJ1ZmZlciIpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgc3dpdGNoICh1c2FnZSkgeworICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlNUQVRJQ19EUkFXOgorICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRZTkFNSUNf
RFJBVzoKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9CisgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB1c2FnZSIpOworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVIVE1MSW1hZ2VFbGVtZW50KGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlm
ICghaW1hZ2UgfHwgIWltYWdlLT5jYWNoZWRJbWFnZSgpKSB7CisgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBpbWFnZSIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGNvbnN0IFVSTCYg
dXJsID0gaW1hZ2UtPmNhY2hlZEltYWdlKCktPnJlc3BvbnNlKCkudXJsKCk7CisgICAgaWYgKHVy
bC5pc051bGwoKSB8fCB1cmwuaXNFbXB0eSgpIHx8ICF1cmwuaXNWYWxpZCgpKSB7CisgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5j
dGlvbk5hbWUsICJpbnZhbGlkIGltYWdlIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKSB7CisgICAgICAgIGVjID0gU0VDVVJJ
VFlfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVu
dChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIEV4
Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmICghY2FudmFzIHx8ICFjYW52YXMtPmJ1ZmZlcigp
KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBjYW52YXMiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbihjYW52YXMpKSB7CisgICAgICAgIGVj
ID0gU0VDVVJJVFlfRVJSOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorCisjaWYgRU5BQkxFKFZJREVPKQorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlSFRNTFZpZGVvRWxlbWVudChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIEhU
TUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBpZiAoIXZp
ZGVvIHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewor
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgZnVuY3Rpb25OYW1lLCAibm8gdmlkZW8iKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlbykpIHsKKyAgICAgICAgZWMgPSBTRUNV
UklUWV9FUlI7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7
Cit9CisjZW5kaWYKKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYmZJ
bXBsKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRHVpbnQgaW5kZXgsIEdDM0RzaXplaSBl
eHBlY3RlZFNpemUsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxLCBHQzNEZmxvYXQgdjIsIEdD
M0RmbG9hdCB2MykKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVu
Y3Rpb25OYW1lLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgLy8gSW4gR0wsIHdlIHNraXAgc2V0dGluZyB2ZXJ0ZXhBdHRyaWIwIHZhbHVlcy4KKyAg
ICBpZiAoaW5kZXggfHwgaXNHTEVTMkNvbXBsaWFudCgpKSB7CisgICAgICAgIHN3aXRjaCAoZXhw
ZWN0ZWRTaXplKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVy
dGV4QXR0cmliMWYoaW5kZXgsIHYwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IDI6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB2MCwgdjEp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHYwLCB2MSwgdjIpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
NGYoaW5kZXgsIHYwLCB2MSwgdjIsIHYzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIFZlcnRleEF0dHJpYlZhbHVlJiBhdHRyaWJWYWx1ZSA9IG1fdmVydGV4QXR0
cmliVmFsdWVbaW5kZXhdOworICAgIGF0dHJpYlZhbHVlLnZhbHVlWzBdID0gdjA7CisgICAgYXR0
cmliVmFsdWUudmFsdWVbMV0gPSB2MTsKKyAgICBhdHRyaWJWYWx1ZS52YWx1ZVsyXSA9IHYyOwor
ICAgIGF0dHJpYlZhbHVlLnZhbHVlWzNdID0gdjM7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBHQzNE
dWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2LCBHQzNEc2l6ZWkgZXhwZWN0ZWRTaXplKQorewor
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoIXYpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIm5vIGFycmF5Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgdmVydGV4QXR0cmliZnZJbXBsKGZ1bmN0aW9uTmFtZSwgaW5kZXgsIHYtPmRh
dGEoKSwgdi0+bGVuZ3RoKCksIGV4cGVjdGVkU2l6ZSk7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWJmdkltcGwoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgR0MzRHNpemVpIGV4
cGVjdGVkU2l6ZSkKK3sKKyAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCF2KSB7CisgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBhcnJheSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzaXplIDwgZXhwZWN0ZWRTaXplKSB7Cisg
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHNpemUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoaW5kZXggPj0gbV9tYXhWZXJ0ZXhBdHRyaWJzKSB7CisgICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUs
ICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAvLyBJ
biBHTCwgd2Ugc2tpcCBzZXR0aW5nIHZlcnRleEF0dHJpYjAgdmFsdWVzLgorICAgIGlmIChpbmRl
eCB8fCBpc0dMRVMyQ29tcGxpYW50KCkpIHsKKyAgICAgICAgc3dpdGNoIChleHBlY3RlZFNpemUp
IHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWIx
ZnYoaW5kZXgsIHYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAg
ICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliMmZ2KGluZGV4LCB2KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0
dHJpYjNmdihpbmRleCwgdik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0Ogor
ICAgICAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHYpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgVmVydGV4QXR0cmliVmFsdWUmIGF0
dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVtpbmRleF07CisgICAgYXR0cmliVmFsdWUu
aW5pdFZhbHVlKCk7CisgICAgZm9yIChpbnQgaWkgPSAwOyBpaSA8IGV4cGVjdGVkU2l6ZTsgKytp
aSkKKyAgICAgICAgYXR0cmliVmFsdWUudmFsdWVbaWldID0gdltpaV07Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojppbml0VmVydGV4QXR0cmliMCgpCit7CisgICAgV2ViR0xWZXJ0
ZXhBcnJheU9iamVjdE9FUzo6VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZSgwKTsKKyAgICAKKyAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXIgPSBjcmVhdGVCdWZmZXIoKTsKKyAgICBtX2NvbnRleHQtPmJpbmRCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
LT5vYmplY3QoKSk7CisgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNE
OjpBUlJBWV9CVUZGRVIsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpEWU5BTUlDX0RSQVcpOworICAg
IG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcigwLCA0LCBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBzdGF0ZS5idWZmZXJCaW5kaW5nID0gbV92ZXJ0ZXhB
dHRyaWIwQnVmZmVyOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6QVJSQVlfQlVGRkVSLCAwKTsKKyAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KDApOworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUgPSAwOworICAgIG1fdmVydGV4
QXR0cmliMEJ1ZmZlclZhbHVlWzBdID0gMC4wZjsKKyAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJW
YWx1ZVsxXSA9IDAuMGY7CisgICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFsdWVbMl0gPSAwLjBm
OworICAgIG1fdmVydGV4QXR0cmliMEJ1ZmZlclZhbHVlWzNdID0gMS4wZjsKKyAgICBtX2ZvcmNl
QXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOworICAgIG1fdmVydGV4QXR0cmliMFVzZWRCZWZv
cmUgPSBmYWxzZTsKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpbXVsYXRlVmVy
dGV4QXR0cmliMChHQzNEc2l6ZWkgbnVtVmVydGV4KQoreworICAgIGNvbnN0IFdlYkdMVmVydGV4
QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoMCk7CisgICAgY29uc3QgVmVydGV4QXR0
cmliVmFsdWUmIGF0dHJpYlZhbHVlID0gbV92ZXJ0ZXhBdHRyaWJWYWx1ZVswXTsKKyAgICBpZiAo
IW1fY3VycmVudFByb2dyYW0pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBib29sIHVzaW5n
VmVydGV4QXR0cmliMCA9IG1fY3VycmVudFByb2dyYW0tPmlzVXNpbmdWZXJ0ZXhBdHRyaWIwKCk7
CisgICAgaWYgKHVzaW5nVmVydGV4QXR0cmliMCkKKyAgICAgICAgbV92ZXJ0ZXhBdHRyaWIwVXNl
ZEJlZm9yZSA9IHRydWU7CisgICAgaWYgKHN0YXRlLmVuYWJsZWQgJiYgdXNpbmdWZXJ0ZXhBdHRy
aWIwKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCF1c2luZ1ZlcnRleEF0dHJpYjAg
JiYgIW1fdmVydGV4QXR0cmliMFVzZWRCZWZvcmUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBtX3ZlcnRleEF0dHJpYjBVc2VkQmVmb3JlID0gdHJ1ZTsKKyAgICBtX2NvbnRleHQtPmJpbmRC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV92ZXJ0ZXhBdHRyaWIwQnVm
ZmVyLT5vYmplY3QoKSk7CisgICAgR0MzRHNpemVpcHRyIGJ1ZmZlckRhdGFTaXplID0gKG51bVZl
cnRleCArIDEpICogNCAqIHNpemVvZihHQzNEZmxvYXQpOworICAgIGlmIChidWZmZXJEYXRhU2l6
ZSA+IG1fdmVydGV4QXR0cmliMEJ1ZmZlclNpemUpIHsKKyAgICAgICAgbV9jb250ZXh0LT5idWZm
ZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ1ZmZlckRhdGFTaXplLCAw
LCBHcmFwaGljc0NvbnRleHQzRDo6RFlOQU1JQ19EUkFXKTsKKyAgICAgICAgbV92ZXJ0ZXhBdHRy
aWIwQnVmZmVyU2l6ZSA9IGJ1ZmZlckRhdGFTaXplOworICAgICAgICBtX2ZvcmNlQXR0cmliMEJ1
ZmZlclJlZmlsbCA9IHRydWU7CisgICAgfQorICAgIGlmICh1c2luZ1ZlcnRleEF0dHJpYjAKKyAg
ICAgICAgJiYgKG1fZm9yY2VBdHRyaWIwQnVmZmVyUmVmaWxsCisgICAgICAgICAgICB8fCBhdHRy
aWJWYWx1ZS52YWx1ZVswXSAhPSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVswXQorICAgICAg
ICAgICAgfHwgYXR0cmliVmFsdWUudmFsdWVbMV0gIT0gbV92ZXJ0ZXhBdHRyaWIwQnVmZmVyVmFs
dWVbMV0KKyAgICAgICAgICAgIHx8IGF0dHJpYlZhbHVlLnZhbHVlWzJdICE9IG1fdmVydGV4QXR0
cmliMEJ1ZmZlclZhbHVlWzJdCisgICAgICAgICAgICB8fCBhdHRyaWJWYWx1ZS52YWx1ZVszXSAh
PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1ZVszXSkpIHsKKyAgICAgICAgYXV0byBidWZmZXJE
YXRhID0gc3RkOjptYWtlX3VuaXF1ZTxHQzNEZmxvYXRbXT4oKG51bVZlcnRleCArIDEpICogNCk7
CisgICAgICAgIGZvciAoR0MzRHNpemVpIGlpID0gMDsgaWkgPCBudW1WZXJ0ZXggKyAxOyArK2lp
KSB7CisgICAgICAgICAgICBidWZmZXJEYXRhW2lpICogNF0gPSBhdHRyaWJWYWx1ZS52YWx1ZVsw
XTsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMV0gPSBhdHRyaWJWYWx1ZS52YWx1
ZVsxXTsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgMl0gPSBhdHRyaWJWYWx1ZS52
YWx1ZVsyXTsKKyAgICAgICAgICAgIGJ1ZmZlckRhdGFbaWkgKiA0ICsgM10gPSBhdHRyaWJWYWx1
ZS52YWx1ZVszXTsKKyAgICAgICAgfQorICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZmZXJWYWx1
ZVswXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzBdOworICAgICAgICBtX3ZlcnRleEF0dHJpYjBCdWZm
ZXJWYWx1ZVsxXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzFdOworICAgICAgICBtX3ZlcnRleEF0dHJp
YjBCdWZmZXJWYWx1ZVsyXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzJdOworICAgICAgICBtX3ZlcnRl
eEF0dHJpYjBCdWZmZXJWYWx1ZVszXSA9IGF0dHJpYlZhbHVlLnZhbHVlWzNdOworICAgICAgICBt
X2ZvcmNlQXR0cmliMEJ1ZmZlclJlZmlsbCA9IGZhbHNlOworICAgICAgICBtX2NvbnRleHQtPmJ1
ZmZlclN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnVmZmVyRGF0
YVNpemUsIGJ1ZmZlckRhdGEuZ2V0KCkpOworICAgIH0KKyAgICBtX2NvbnRleHQtPnZlcnRleEF0
dHJpYlBvaW50ZXIoMCwgNCwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCAwLCAwLCAwKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVT
dGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCkKK3sKKyAgICBjb25zdCBXZWJHTFZl
cnRleEFycmF5T2JqZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVy
dGV4QXJyYXlPYmplY3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKDApOworICAgIGlmIChzdGF0ZS5i
dWZmZXJCaW5kaW5nICE9IG1fdmVydGV4QXR0cmliMEJ1ZmZlcikgeworICAgICAgICBtX2NvbnRl
eHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3Ja
ZXJvKHN0YXRlLmJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKKyAgICAgICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWJQb2ludGVyKDAsIHN0YXRlLnNpemUsIHN0YXRlLnR5cGUsIHN0YXRlLm5vcm1hbGl6
ZWQsIHN0YXRlLm9yaWdpbmFsU3RyaWRlLCBzdGF0ZS5vZmZzZXQpOworICAgIH0KKyAgICBtX2Nv
bnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0
T3JaZXJvKG1fYm91bmRBcnJheUJ1ZmZlci5nZXQoKSkpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZGlzcGF0Y2hDb250ZXh0TG9zdEV2ZW50KCkKK3sKKyAgICBSZWZQdHI8V2Vi
R0xDb250ZXh0RXZlbnQ+IGV2ZW50ID0gV2ViR0xDb250ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5h
bWVzKCkud2ViZ2xjb250ZXh0bG9zdEV2ZW50LCBmYWxzZSwgdHJ1ZSwgIiIpOworICAgIGNhbnZh
cygpLT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKKyAgICBtX3Jlc3RvcmVBbGxvd2VkID0gZXZlbnQt
PmRlZmF1bHRQcmV2ZW50ZWQoKTsKKyAgICBpZiAobV9jb250ZXh0TG9zdE1vZGUgPT0gUmVhbExv
c3RDb250ZXh0ICYmIG1fcmVzdG9yZUFsbG93ZWQpCisgICAgICAgIG1fcmVzdG9yZVRpbWVyLnN0
YXJ0T25lU2hvdCgwKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVz
dG9yZUNvbnRleHQoKQoreworICAgIEFTU0VSVChtX2NvbnRleHRMb3N0KTsKKyAgICBpZiAoIW1f
Y29udGV4dExvc3QpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSByZW5kZXJpbmcgY29u
dGV4dCBpcyBub3QgcmVzdG9yZWQgdW5sZXNzIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIHRoZQor
ICAgIC8vIHdlYmdsY29udGV4dGxvc3QgZXZlbnQgd2FzIHByZXZlbnRlZCBlYXJsaWVyLgorICAg
IC8vCisgICAgLy8gQmVjYXVzZSBvZiB0aGUgd2F5IG1fcmVzdG9yZVRpbWVyIGlzIHNldCB1cCBm
b3IgcmVhbCB2cy4gc3ludGhldGljIGxvc3QKKyAgICAvLyBjb250ZXh0IGV2ZW50cywgd2UgZG9u
J3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHRlc3Qgc2hvcnQtY2lyY3VpdGluZworICAgIC8v
IHRoZSByZXRyeSBsb29wIGZvciByZWFsIGNvbnRleHQgbG9zdCBldmVudHMuCisgICAgaWYgKCFt
X3Jlc3RvcmVBbGxvd2VkKQorICAgICAgICByZXR1cm47CisKKyAgICBpbnQgY29udGV4dExvc3RS
ZWFzb24gPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1
c0FSQigpOworCisgICAgc3dpdGNoIChjb250ZXh0TG9zdFJlYXNvbikgeworICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SOgorICAgICAgICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0
M0QgaW1wbGVtZW50YXRpb24gbWlnaHQgbm90IGZ1bGx5CisgICAgICAgIC8vIHN1cHBvcnQgR0xf
QVJCX3JvYnVzdG5lc3Mgc2VtYW50aWNzIHlldC4gQWx0ZXJuYXRpdmVseSwgdGhlCisgICAgICAg
IC8vIFdFQkdMX2xvc2VfY29udGV4dCBleHRlbnNpb24gbWlnaHQgaGF2ZSBiZWVuIHVzZWQgdG8g
Zm9yY2UKKyAgICAgICAgLy8gYSBsb3N0IGNvbnRleHQuCisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRXh0ZW5zaW9uczNEOjpHVUlMVFlfQ09OVEVYVF9SRVNFVF9BUkI6CisgICAgICAgIC8vIFRo
ZSByZW5kZXJpbmcgY29udGV4dCBpcyBub3QgcmVzdG9yZWQgaWYgdGhpcyBjb250ZXh0IHdhcwor
ICAgICAgICAvLyBndWlsdHkgb2YgY2F1c2luZyB0aGUgZ3JhcGhpY3MgcmVzZXQuCisgICAgICAg
IHByaW50V2FybmluZ1RvQ29uc29sZSgiV0FSTklORzogV2ViR0wgY29udGVudCBvbiB0aGUgcGFn
ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8gcmVzZXQ7IG5vdCByZXN0b3JpbmcgdGhlIGNv
bnRleHQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpJTk5PQ0VO
VF9DT05URVhUX1JFU0VUX0FSQjoKKyAgICAgICAgLy8gQWx3YXlzIGFsbG93IHRoZSBjb250ZXh0
IHRvIGJlIHJlc3RvcmVkLgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEV4dGVuc2lvbnMzRDo6
VU5LTk9XTl9DT05URVhUX1JFU0VUX0FSQjoKKyAgICAgICAgLy8gV2Fybi4gSWRlYWxseSwgcHJv
bXB0IHRoZSB1c2VyIHRlbGxpbmcgdGhlbSB0aGF0IFdlYkdMCisgICAgICAgIC8vIGNvbnRlbnQg
b24gdGhlIHBhZ2UgbWlnaHQgaGF2ZSBjYXVzZWQgdGhlIGdyYXBoaWNzIGNhcmQgdG8KKyAgICAg
ICAgLy8gcmVzZXQgYW5kIGFzayB0aGVtIHdoZXRoZXIgdGhleSB3YW50IHRvIGNvbnRpbnVlIHJ1
bm5pbmcKKyAgICAgICAgLy8gdGhlIGNvbnRlbnQuIE9ubHkgaWYgdGhleSBzYXkgInllcyIgc2hv
dWxkIHdlIHN0YXJ0CisgICAgICAgIC8vIGF0dGVtcHRpbmcgdG8gcmVzdG9yZSB0aGUgY29udGV4
dC4KKyAgICAgICAgcHJpbnRXYXJuaW5nVG9Db25zb2xlKCJXQVJOSU5HOiBXZWJHTCBjb250ZW50
IG9uIHRoZSBwYWdlIG1pZ2h0IGhhdmUgY2F1c2VkIHRoZSBncmFwaGljcyBjYXJkIHRvIHJlc2V0
Iik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIEZyYW1lKiBmcmFtZSA9IGNhbnZhcygp
LT5kb2N1bWVudCgpLmZyYW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKCFmcmFtZS0+bG9hZGVyKCkuY2xpZW50KCkuYWxsb3dXZWJHTChmcmFtZS0+c2V0
dGluZ3MoKS53ZWJHTEVuYWJsZWQoKSkpCisgICAgICAgIHJldHVybjsKKworICAgIEZyYW1lVmll
dyogdmlldyA9IGZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KQorICAgICAgICByZXR1cm47
CisgICAgU2Nyb2xsVmlldyogcm9vdCA9IHZpZXctPnJvb3QoKTsKKyAgICBpZiAoIXJvb3QpCisg
ICAgICAgIHJldHVybjsKKyAgICBIb3N0V2luZG93KiBob3N0V2luZG93ID0gcm9vdC0+aG9zdFdp
bmRvdygpOworICAgIGlmICghaG9zdFdpbmRvdykKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUo
bV9hdHRyaWJ1dGVzLCBob3N0V2luZG93KSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAg
IGlmIChtX2NvbnRleHRMb3N0TW9kZSA9PSBSZWFsTG9zdENvbnRleHQpCisgICAgICAgICAgICBt
X3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3Qoc2Vjb25kc0JldHdlZW5SZXN0b3JlQXR0ZW1wdHMp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICAvLyBUaGlzIGxpa2VseSBzaG91bGRuJ3QgaGFw
cGVuIGJ1dCBpcyB0aGUgYmVzdCB3YXkgdG8gcmVwb3J0IGl0IHRvIHRoZSBXZWJHTCBhcHAuCisg
ICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICIiLCAiZXJyb3IgcmVzdG9yaW5nIGNvbnRleHQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIC8vIENvbnN0cnVjdCBhIG5ldyBkcmF3aW5nIGJ1ZmZlciB3aXRoIHRo
ZSBuZXcgR3JhcGhpY3NDb250ZXh0M0QuCisgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgeworICAg
ICAgICBtX2RyYXdpbmdCdWZmZXItPmRpc2NhcmRSZXNvdXJjZXMoKTsKKyAgICAgICAgRHJhd2lu
Z0J1ZmZlcjo6UHJlc2VydmVEcmF3aW5nQnVmZmVyIHByZXNlcnZlID0gbV9hdHRyaWJ1dGVzLnBy
ZXNlcnZlRHJhd2luZ0J1ZmZlciA/IERyYXdpbmdCdWZmZXI6OlByZXNlcnZlIDogRHJhd2luZ0J1
ZmZlcjo6RGlzY2FyZDsKKyAgICAgICAgRHJhd2luZ0J1ZmZlcjo6QWxwaGFSZXF1aXJlbWVudCBh
bHBoYSA9IG1fYXR0cmlidXRlcy5hbHBoYSA/IERyYXdpbmdCdWZmZXI6OkFscGhhIDogRHJhd2lu
Z0J1ZmZlcjo6T3BhcXVlOworICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBEcmF3aW5nQnVmZmVy
OjpjcmVhdGUoY29udGV4dC5nZXQoKSwgbV9kcmF3aW5nQnVmZmVyLT5zaXplKCksIHByZXNlcnZl
LCBhbHBoYSk7CisgICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOworICAgIH0KKworICAg
IG1fY29udGV4dCA9IGNvbnRleHQ7CisgICAgbV9jb250ZXh0TG9zdCA9IGZhbHNlOworICAgIHNl
dHVwRmxhZ3MoKTsKKyAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOworICAgIGNhbnZhcygpLT5k
aXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmds
Y29udGV4dHJlc3RvcmVkRXZlbnQsIGZhbHNlLCB0cnVlLCAiIikpOworfQorCitTdHJpbmcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjplbnN1cmVOb3ROdWxsKGNvbnN0IFN0cmluZyYgdGV4dCkgY29u
c3QKK3sKKyAgICBpZiAodGV4dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6ZW1wdHlT
dHJpbmcoKTsKKyAgICByZXR1cm4gdGV4dDsKK30KKworV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpM
UlVJbWFnZUJ1ZmZlckNhY2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKKyAg
ICA6IG1fYnVmZmVycyhzdGQ6Om1ha2VfdW5pcXVlPHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZl
cj5bXT4oY2FwYWNpdHkpKQorICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKK3sKK30KKworSW1h
Z2VCdWZmZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1h
Z2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkg
PSAwOyBpIDwgbV9jYXBhY2l0eTsgKytpKSB7CisgICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBt
X2J1ZmZlcnNbaV0uZ2V0KCk7CisgICAgICAgIGlmICghYnVmKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGlmIChidWYtPmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBidWJibGVUb0Zyb250KGkpOworICAgICAgICByZXR1cm4gYnVmOwor
ICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gdGVtcCA9IEltYWdlQnVm
ZmVyOjpjcmVhdGUoc2l6ZSwgMSk7CisgICAgaWYgKCF0ZW1wKQorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICBpID0gc3RkOjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOworICAgIG1fYnVmZmVy
c1tpXSA9IFdURjo6bW92ZSh0ZW1wKTsKKworICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZl
cnNbaV0uZ2V0KCk7CisgICAgYnViYmxlVG9Gcm9udChpKTsKKyAgICByZXR1cm4gYnVmOworfQor
Cit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6YnViYmxl
VG9Gcm9udChpbnQgaWR4KQoreworICAgIGZvciAoaW50IGkgPSBpZHg7IGkgPiAwOyAtLWkpCisg
ICAgICAgIG1fYnVmZmVyc1tpXS5zd2FwKG1fYnVmZmVyc1tpLTFdKTsKK30KKworbmFtZXNwYWNl
IHsKKworICAgIFN0cmluZyBHZXRFcnJvclN0cmluZyhHQzNEZW51bSBlcnJvcikKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoZXJyb3IpIHsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNOgorICAgICAgICAgICAgcmV0dXJuICJJTlZBTElEX0VOVU0iOworICAgICAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFOgorICAgICAgICAgICAgcmV0
dXJuICJJTlZBTElEX1ZBTFVFIjsKKyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9PUEVSQVRJT046CisgICAgICAgICAgICByZXR1cm4gIklOVkFMSURfT1BFUkFUSU9OIjsK
KyAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKKyAgICAgICAg
ICAgIHJldHVybiAiT1VUX09GX01FTU9SWSI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgorICAgICAgICAgICAgcmV0dXJuICJJ
TlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTiI7CisgICAgICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTlRFWFRfTE9TVF9XRUJHTDoKKyAgICAgICAgICAgIHJldHVybiAiQ09OVEVYVF9M
T1NUX1dFQkdMIjsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmc6
OmZvcm1hdCgiV2ViR0wgRVJST1IoJTA0eCkiLCBlcnJvcik7CisgICAgICAgIH0KKyAgICB9CisK
K30gLy8gbmFtZXNwYWNlIGFub255bW91cworCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
c3ludGhlc2l6ZUdMRXJyb3IoR0MzRGVudW0gZXJyb3IsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFt
ZSwgY29uc3QgY2hhciogZGVzY3JpcHRpb24sIENvbnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNw
bGF5KQoreworICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlICYmIGRpc3BsYXkg
PT0gRGlzcGxheUluQ29uc29sZSkgeworICAgICAgU3RyaW5nIHN0ciA9IFN0cmluZygiV2ViR0w6
ICIpICsgR2V0RXJyb3JTdHJpbmcoZXJyb3IpICsgICI6ICIgKyBTdHJpbmcoZnVuY3Rpb25OYW1l
KSArICI6ICIgKyBTdHJpbmcoZGVzY3JpcHRpb24pOworICAgICAgcHJpbnRHTEVycm9yVG9Db25z
b2xlKHN0cik7CisgICAgfQorICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoZXJyb3Ip
OworfQorCisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwcmludEdMV2FybmluZ1RvQ29u
c29sZShjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IGNoYXIqIGRlc2NyaXB0aW9uKQor
eworICAgIGlmIChtX3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKSB7CisgICAgICAgIFN0cmlu
ZyBzdHIgPSBTdHJpbmcoIldlYkdMOiAiKSArIFN0cmluZyhmdW5jdGlvbk5hbWUpICsgIjogIiAr
IFN0cmluZyhkZXNjcmlwdGlvbik7CisgICAgICAgIHByaW50R0xFcnJvclRvQ29uc29sZShzdHIp
OworICAgIH0KK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U3RlbmNpbFRl
c3QoKQoreworICAgIGJvb2wgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBmYWxzZTsKKworICAgIGlmICht
X2ZyYW1lYnVmZmVyQmluZGluZykKKyAgICAgICAgaGF2ZVN0ZW5jaWxCdWZmZXIgPSBtX2ZyYW1l
YnVmZmVyQmluZGluZy0+aGFzU3RlbmNpbEJ1ZmZlcigpOworICAgIGVsc2UgeworICAgICAgICBS
ZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4gYXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRy
aWJ1dGVzKCk7CisgICAgICAgIGhhdmVTdGVuY2lsQnVmZmVyID0gYXR0cmlidXRlcy0+c3RlbmNp
bCgpOworICAgIH0KKyAgICBlbmFibGVPckRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5D
SUxfVEVTVCwKKyAgICAgICAgICAgICAgICAgICAgbV9zdGVuY2lsRW5hYmxlZCAmJiBoYXZlU3Rl
bmNpbEJ1ZmZlcik7Cit9CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFibGVPckRp
c2FibGUoR0MzRGVudW0gY2FwYWJpbGl0eSwgYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJs
ZSkKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoY2FwYWJpbGl0eSk7CisgICAgZWxzZQorICAg
ICAgICBtX2NvbnRleHQtPmRpc2FibGUoY2FwYWJpbGl0eSk7Cit9CisKK0ludFNpemUgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpjbGFtcGVkQ2FudmFzU2l6ZSgpCit7CisgICAgcmV0dXJuIEludFNp
emUoY2xhbXAoY2FudmFzKCktPndpZHRoKCksIDEsIG1fbWF4Vmlld3BvcnREaW1zWzBdKSwKKyAg
ICAgICAgICAgICAgICAgICBjbGFtcChjYW52YXMoKS0+aGVpZ2h0KCksIDEsIG1fbWF4Vmlld3Bv
cnREaW1zWzFdKSk7Cit9CisKK0dDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhE
cmF3QnVmZmVycygpCit7CisgICAgaWYgKCFzdXBwb3J0c0RyYXdCdWZmZXJzKCkpCisgICAgICAg
IHJldHVybiAwOworICAgIGlmICghbV9tYXhEcmF3QnVmZmVycykKKyAgICAgICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhULCAmbV9tYXhE
cmF3QnVmZmVycyk7CisgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCisgICAgICAgIG1f
Y29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNf
RVhULCAmbV9tYXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICAvLyBXRUJHTF9kcmF3X2J1ZmZlcnMg
cmVxdWlyZXMgTUFYX0NPTE9SX0FUVEFDSE1FTlRTID49IE1BWF9EUkFXX0JVRkZFUlMuCisgICAg
cmV0dXJuIHN0ZDo6bWluKG1fbWF4RHJhd0J1ZmZlcnMsIG1fbWF4Q29sb3JBdHRhY2htZW50cyk7
Cit9CisKK0dDM0RpbnQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRNYXhDb2xvckF0dGFjaG1l
bnRzKCkKK3sKKyAgICBpZiAoIXN1cHBvcnRzRHJhd0J1ZmZlcnMoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgaWYgKCFtX21heENvbG9yQXR0YWNobWVudHMpCisgICAgICAgIG1fY29udGV4dC0+
Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhULCAmbV9t
YXhDb2xvckF0dGFjaG1lbnRzKTsKKyAgICByZXR1cm4gbV9tYXhDb2xvckF0dGFjaG1lbnRzOwor
fQorCit2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c2V0QmFja0RyYXdCdWZmZXIoR0MzRGVu
dW0gYnVmKQoreworICAgIG1fYmFja0RyYXdCdWZmZXIgPSBidWY7Cit9CisKK3ZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudEZyYW1lYnVmZmVyKCkKK3sKKyAgICBFeGNl
cHRpb25Db2RlIGVjOworICAgIGJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpLCBlYyk7Cit9CisKK3ZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlQ3VycmVudFRleHR1cmUyRCgpCit7CisgICAgRXhj
ZXB0aW9uQ29kZSBlYzsKKyAgICBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
Zy5nZXQoKSwgZWMpOworfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3VwcG9ydHNE
cmF3QnVmZmVycygpCit7CisgICAgaWYgKCFtX2RyYXdCdWZmZXJzV2ViR0xSZXF1aXJlbWVudHND
aGVja2VkKSB7CisgICAgICAgIG1fZHJhd0J1ZmZlcnNXZWJHTFJlcXVpcmVtZW50c0NoZWNrZWQg
PSB0cnVlOworICAgICAgICBtX2RyYXdCdWZmZXJzU3VwcG9ydGVkID0gV2ViR0xEcmF3QnVmZmVy
czo6c3VwcG9ydGVkKHRoaXMpOworICAgIH0KKyAgICByZXR1cm4gbV9kcmF3QnVmZmVyc1N1cHBv
cnRlZDsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdBcnJheXNJbnN0YW5j
ZWQoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50LCBHQzNEc2l6
ZWkgcHJpbWNvdW50KQoreworICAgIGlmICghcHJpbWNvdW50KSB7CisgICAgICAgIG1hcmtDb250
ZXh0Q2hhbmdlZCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCF2YWxpZGF0
ZURyYXdBcnJheXMoImRyYXdBcnJheXNJbnN0YW5jZWQiLCBtb2RlLCBmaXJzdCwgY291bnQsIHBy
aW1jb3VudCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNsZWFySWZDb21wb3NpdGVkKCk7CisK
KyAgICBib29sIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKKyAgICBpZiAoIWlzR0xF
UzJDb21wbGlhbnQoKSkKKyAgICAgICAgdmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IHNpbXVsYXRl
VmVydGV4QXR0cmliMChmaXJzdCArIGNvdW50IC0gMSk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0
cmljdCgpKQorICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdBcnJheXNJbnN0
YW5jZWQiLCB0cnVlKTsKKworICAgIG1fY29udGV4dC0+ZHJhd0FycmF5c0luc3RhbmNlZChtb2Rl
LCBmaXJzdCwgY291bnQsIHByaW1jb3VudCk7CisKKyAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQorICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOworICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkK
KyAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzSW5zdGFuY2VkIiwg
ZmFsc2UpOworICAgIG1hcmtDb250ZXh0Q2hhbmdlZCgpOworfQorCit2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzSW5zdGFuY2VkKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgR0MzRHNpemVpIHByaW1j
b3VudCkKK3sKKyAgICBpZiAoIXByaW1jb3VudCkgeworICAgICAgICBtYXJrQ29udGV4dENoYW5n
ZWQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHVuc2lnbmVkIG51bUVsZW1lbnRz
ID0gMDsKKyAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxlbWVudHNJbnN0YW5j
ZWQiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cywgcHJpbWNvdW50KSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKKworICAgIGJvb2wg
dmVydGV4QXR0cmliMFNpbXVsYXRlZCA9IGZhbHNlOworICAgIGlmICghaXNHTEVTMkNvbXBsaWFu
dCgpKSB7CisgICAgICAgIGlmICghbnVtRWxlbWVudHMpCisgICAgICAgICAgICB2YWxpZGF0ZUlu
ZGV4QXJyYXlQcmVjaXNlKGNvdW50LCB0eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZz
ZXQpLCBudW1FbGVtZW50cyk7CisgICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11
bGF0ZVZlcnRleEF0dHJpYjAobnVtRWxlbWVudHMpOworICAgIH0KKyAgICBpZiAoIWlzR0xFUzJO
UE9UU3RyaWN0KCkpCisgICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVzcygiZHJhd0VsZW1l
bnRzSW5zdGFuY2VkIiwgdHJ1ZSk7CisKKyAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50c0luc3Rh
bmNlZChtb2RlLCBjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwg
cHJpbWNvdW50KTsKKworICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpICYmIHZlcnRleEF0dHJp
YjBTaW11bGF0ZWQpCisgICAgICAgIHJlc3RvcmVTdGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11
bGF0aW9uKCk7CisgICAgaWYgKCFpc0dMRVMyTlBPVFN0cmljdCgpKQorICAgICAgICBjaGVja1Rl
eHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50c0luc3RhbmNlZCIsIGZhbHNlKTsKKyAgICBt
YXJrQ29udGV4dENoYW5nZWQoKTsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZl
cnRleEF0dHJpYkRpdmlzb3IoR0MzRHVpbnQgaW5kZXgsIEdDM0R1aW50IGRpdmlzb3IpCit7Cisg
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgeworICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInZlcnRleEF0dHJpYkRpdmlz
b3IiLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPnNldFZlcnRleEF0dHJpYkRpdmlzb3IoaW5kZXgs
IGRpdmlzb3IpOworICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliRGl2aXNvcihpbmRleCwgZGl2
aXNvcik7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQkdMKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wxUmVuZGVyaW5n
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0wxUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMMVJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNiw2MjM3ICsyNiwyMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogCiAjaWYgRU5BQkxF
KFdFQkdMKQotCi0jaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCi0KLSNpbmNsdWRl
ICJBTkdMRUluc3RhbmNlZEFycmF5cy5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5j
bHVkZSAiRE9NV2luZG93LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJFWFRT
aGFkZXJUZXh0dXJlTE9ELmgiCi0jaW5jbHVkZSAiRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGlj
LmgiCi0jaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgotI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5o
IgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRl
ICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCi0jaW5j
bHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgotI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIK
LSNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1
ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1l
LmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJPRVNFbGVtZW50SW5k
ZXhVaW50LmgiCi0jaW5jbHVkZSAiT0VTU3RhbmRhcmREZXJpdmF0aXZlcy5oIgotI2luY2x1ZGUg
Ik9FU1RleHR1cmVGbG9hdC5oIgotI2luY2x1ZGUgIk9FU1RleHR1cmVGbG9hdExpbmVhci5oIgot
I2luY2x1ZGUgIk9FU1RleHR1cmVIYWxmRmxvYXQuaCIKLSNpbmNsdWRlICJPRVNUZXh0dXJlSGFs
ZkZsb2F0TGluZWFyLmgiCi0jaW5jbHVkZSAiT0VTVmVydGV4QXJyYXlPYmplY3QuaCIKLSNpbmNs
dWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKLSNpbmNsdWRlICJXZWJHTEFjdGl2ZUluZm8uaCIKLSNpbmNsdWRlICJXZWJHTEJ1ZmZlci5o
IgotI2luY2x1ZGUgIldlYkdMQ29tcHJlc3NlZFRleHR1cmVBVEMuaCIKLSNpbmNsdWRlICJXZWJH
TENvbXByZXNzZWRUZXh0dXJlUFZSVEMuaCIKLSNpbmNsdWRlICJXZWJHTENvbXByZXNzZWRUZXh0
dXJlUzNUQy5oIgotI2luY2x1ZGUgIldlYkdMQ29udGV4dEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRl
ICJXZWJHTENvbnRleHRFdmVudC5oIgotI2luY2x1ZGUgIldlYkdMQ29udGV4dEdyb3VwLmgiCi0j
aW5jbHVkZSAiV2ViR0xEZWJ1Z1JlbmRlcmVySW5mby5oIgotI2luY2x1ZGUgIldlYkdMRGVidWdT
aGFkZXJzLmgiCi0jaW5jbHVkZSAiV2ViR0xEZXB0aFRleHR1cmUuaCIKLSNpbmNsdWRlICJXZWJH
TERyYXdCdWZmZXJzLmgiCi0jaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgotI2luY2x1ZGUg
IldlYkdMTG9zZUNvbnRleHQuaCIKLSNpbmNsdWRlICJXZWJHTFByb2dyYW0uaCIKLSNpbmNsdWRl
ICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgotI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCi0jaW5jbHVk
ZSAiV2ViR0xTaGFkZXJQcmVjaXNpb25Gb3JtYXQuaCIKLSNpbmNsdWRlICJXZWJHTFRleHR1cmUu
aCIKLSNpbmNsdWRlICJXZWJHTFVuaWZvcm1Mb2NhdGlvbi5oIgotCi0jaW5jbHVkZSA8cnVudGlt
ZS9KU0NJbmxpbmVzLmg+Ci0jaW5jbHVkZSA8cnVudGltZS9UeXBlZEFycmF5SW5saW5lcy5oPgot
I2luY2x1ZGUgPHJ1bnRpbWUvVWludDMyQXJyYXkuaD4KLSNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlICJXZWJHTDFSZW5kZXJpbmdDb250ZXh0LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY29uc3QgZG91YmxlIHNlY29uZHNCZXR3ZWVuUmVzdG9y
ZUF0dGVtcHRzID0gMS4wOwotY29uc3QgaW50IG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSA9
IDI1NjsKLQotbmFtZXNwYWNlIHsKLQotICAgIGNsYXNzIFNjb3BlZERyYXdpbmdCdWZmZXJCaW5k
ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlcihEcmF3
aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlckJp
bmRpbmcpCi0gICAgICAgICAgICA6IG1fZHJhd2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyKQotICAg
ICAgICAgICAgLCBtX2ZyYW1lYnVmZmVyQmluZGluZyhmcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIC8vIENvbW1pdCBEcmF3aW5nQnVmZmVyIGlmIG5lZWRlZCAoZS5n
LiwgZm9yIG11bHRpc2FtcGxpbmcpCi0gICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5k
aW5nICYmIG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIt
PmNvbW1pdCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgflNjb3BlZERyYXdpbmdCdWZmZXJCaW5k
ZXIoKQotICAgICAgICB7Ci0gICAgICAgICAgICAvLyBSZXN0b3JlIERyYXdpbmdCdWZmZXIgaWYg
bmVlZGVkCi0gICAgICAgICAgICBpZiAoIW1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZHJhd2lu
Z0J1ZmZlcikKLSAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLSAgICAg
ICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgRHJhd2luZ0J1ZmZlciogbV9kcmF3aW5nQnVm
ZmVyOwotICAgICAgICBXZWJHTEZyYW1lYnVmZmVyKiBtX2ZyYW1lYnVmZmVyQmluZGluZzsKLSAg
ICB9OwotCi0gICAgUGxhdGZvcm0zRE9iamVjdCBvYmplY3RPclplcm8oV2ViR0xPYmplY3QqIG9i
amVjdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBvYmplY3QgPyBvYmplY3QtPm9iamVjdCgpIDog
MDsKLSAgICB9Ci0KLSAgICB2b2lkIGNsaXAxRChHQzNEaW50IHN0YXJ0LCBHQzNEc2l6ZWkgcmFu
Z2UsIEdDM0RzaXplaSBzb3VyY2VSYW5nZSwgR0MzRGludCogY2xpcHBlZFN0YXJ0LCBHQzNEc2l6
ZWkqIGNsaXBwZWRSYW5nZSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChjbGlwcGVkU3RhcnQgJiYg
Y2xpcHBlZFJhbmdlKTsKLSAgICAgICAgaWYgKHN0YXJ0IDwgMCkgewotICAgICAgICAgICAgcmFu
Z2UgKz0gc3RhcnQ7Ci0gICAgICAgICAgICBzdGFydCA9IDA7Ci0gICAgICAgIH0KLSAgICAgICAg
R0MzRGludCBlbmQgPSBzdGFydCArIHJhbmdlOwotICAgICAgICBpZiAoZW5kID4gc291cmNlUmFu
Z2UpCi0gICAgICAgICAgICByYW5nZSAtPSBlbmQgLSBzb3VyY2VSYW5nZTsKLSAgICAgICAgKmNs
aXBwZWRTdGFydCA9IHN0YXJ0OwotICAgICAgICAqY2xpcHBlZFJhbmdlID0gcmFuZ2U7Ci0gICAg
fQotCi0gICAgLy8gUmV0dXJucyBmYWxzZSBpZiBubyBjbGlwcGluZyBpcyBuZWNlc3NhcnksIGku
ZS4sIHgsIHksIHdpZHRoLCBoZWlnaHQgc3RheSB0aGUgc2FtZS4KLSAgICBib29sIGNsaXAyRChH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LAot
ICAgICAgICAgICAgICAgIEdDM0RzaXplaSBzb3VyY2VXaWR0aCwgR0MzRHNpemVpIHNvdXJjZUhl
aWdodCwKLSAgICAgICAgICAgICAgICBHQzNEaW50KiBjbGlwcGVkWCwgR0MzRGludCogY2xpcHBl
ZFksIEdDM0RzaXplaSogY2xpcHBlZFdpZHRoLCBHQzNEc2l6ZWkqY2xpcHBlZEhlaWdodCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVChjbGlwcGVkWCAmJiBjbGlwcGVkWSAmJiBjbGlwcGVkV2lkdGgg
JiYgY2xpcHBlZEhlaWdodCk7Ci0gICAgICAgIGNsaXAxRCh4LCB3aWR0aCwgc291cmNlV2lkdGgs
IGNsaXBwZWRYLCBjbGlwcGVkV2lkdGgpOwotICAgICAgICBjbGlwMUQoeSwgaGVpZ2h0LCBzb3Vy
Y2VIZWlnaHQsIGNsaXBwZWRZLCBjbGlwcGVkSGVpZ2h0KTsKLSAgICAgICAgcmV0dXJuICgqY2xp
cHBlZFggIT0geCB8fCAqY2xpcHBlZFkgIT0geSB8fCAqY2xpcHBlZFdpZHRoICE9IHdpZHRoIHx8
ICpjbGlwcGVkSGVpZ2h0ICE9IGhlaWdodCk7Ci0gICAgfQotCi0gICAgR0MzRGludCBjbGFtcChH
QzNEaW50IHZhbHVlLCBHQzNEaW50IG1pbiwgR0MzRGludCBtYXgpCi0gICAgewotICAgICAgICBp
ZiAodmFsdWUgPCBtaW4pCi0gICAgICAgICAgICB2YWx1ZSA9IG1pbjsKLSAgICAgICAgaWYgKHZh
bHVlID4gbWF4KQotICAgICAgICAgICAgdmFsdWUgPSBtYXg7Ci0gICAgICAgIHJldHVybiB2YWx1
ZTsKLSAgICB9Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiBhIGNoYXJhY3RlciBiZWxvbmdzIHRv
IHRoZSBBU0NJSSBzdWJzZXQgYXMgZGVmaW5lZCBpbgotICAgIC8vIEdMU0wgRVMgMS4wIHNwZWMg
c2VjdGlvbiAzLjEuCi0gICAgYm9vbCB2YWxpZGF0ZUNoYXJhY3Rlcih1bnNpZ25lZCBjaGFyIGMp
Ci0gICAgewotICAgICAgICAvLyBQcmludGluZyBjaGFyYWN0ZXJzIGFyZSB2YWxpZCBleGNlcHQg
IiAkIGAgQCBcICcgREVMLgotICAgICAgICBpZiAoYyA+PSAzMiAmJiBjIDw9IDEyNgotICAgICAg
ICAgICAgJiYgYyAhPSAnIicgJiYgYyAhPSAnJCcgJiYgYyAhPSAnYCcgJiYgYyAhPSAnQCcgJiYg
YyAhPSAnXFwnICYmIGMgIT0gJ1wnJykKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICAvLyBIb3Jpem9udGFsIHRhYiwgbGluZSBmZWVkLCB2ZXJ0aWNhbCB0YWIsIGZvcm0gZmVlZCwg
Y2FycmlhZ2UgcmV0dXJuCi0gICAgICAgIC8vIGFyZSBhbHNvIHZhbGlkLgotICAgICAgICBpZiAo
YyA+PSA5ICYmIGMgPD0gMTMpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvb2wgaXNQcmVmaXhSZXNlcnZlZChjb25zdCBTdHJp
bmcmIG5hbWUpCi0gICAgewotICAgICAgICBpZiAobmFtZS5zdGFydHNXaXRoKCJnbF8iKSB8fCBu
YW1lLnN0YXJ0c1dpdGgoIndlYmdsXyIpIHx8IG5hbWUuc3RhcnRzV2l0aCgiX3dlYmdsXyIpKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0K
LSAgICAvLyBTdHJpcHMgY29tbWVudHMgZnJvbSBzaGFkZXIgdGV4dC4gVGhpcyBhbGxvd3Mgbm9u
LUFTQ0lJIGNoYXJhY3RlcnMKLSAgICAvLyB0byBiZSB1c2VkIGluIGNvbW1lbnRzIHdpdGhvdXQg
cG90ZW50aWFsbHkgYnJlYWtpbmcgT3BlbkdMCi0gICAgLy8gaW1wbGVtZW50YXRpb25zIG5vdCBl
eHBlY3RpbmcgY2hhcmFjdGVycyBvdXRzaWRlIHRoZSBHTFNMIEVTIHNldC4KLSAgICBjbGFzcyBT
dHJpcENvbW1lbnRzIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFN0cmlwQ29tbWVudHMoY29uc3Qg
U3RyaW5nJiBzdHIpCi0gICAgICAgICAgICA6IG1fcGFyc2VTdGF0ZShCZWdpbm5pbmdPZkxpbmUp
Ci0gICAgICAgICAgICAsIG1fc291cmNlU3RyaW5nKHN0cikKLSAgICAgICAgICAgICwgbV9sZW5n
dGgoc3RyLmxlbmd0aCgpKQotICAgICAgICAgICAgLCBtX3Bvc2l0aW9uKDApCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHBhcnNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBTdHJpbmcgcmVzdWx0
KCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fYnVpbGRlci50b1N0cmluZygpOwot
ICAgICAgICB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBib29sIGhhc01vcmVDaGFyYWN0ZXJz
KCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIChtX3Bvc2l0aW9uIDwgbV9s
ZW5ndGgpOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBwYXJzZSgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHdoaWxlIChoYXNNb3JlQ2hhcmFjdGVycygpKSB7Ci0gICAgICAgICAgICAgICAg
cHJvY2VzcyhjdXJyZW50KCkpOwotICAgICAgICAgICAgICAgIC8vIHByb2Nlc3MoKSBtaWdodCBh
ZHZhbmNlIHRoZSBwb3NpdGlvbi4KLSAgICAgICAgICAgICAgICBpZiAoaGFzTW9yZUNoYXJhY3Rl
cnMoKSkKLSAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgfQotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBwcm9jZXNzKFVDaGFyKTsKLQotICAgICAgICBib29sIHBl
ZWsoVUNoYXImIGNoYXJhY3RlcikgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1f
cG9zaXRpb24gKyAxID49IG1fbGVuZ3RoKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgICAgIGNoYXJhY3RlciA9IG1fc291cmNlU3RyaW5nW21fcG9zaXRpb24gKyAxXTsK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgVUNoYXIgY3Vy
cmVudCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk7Ci0gICAgICAgICAgICByZXR1cm4g
bV9zb3VyY2VTdHJpbmdbbV9wb3NpdGlvbl07Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGFk
dmFuY2UoKQotICAgICAgICB7Ci0gICAgICAgICAgICArK21fcG9zaXRpb247Ci0gICAgICAgIH0K
LQotICAgICAgICBib29sIGlzTmV3bGluZShVQ2hhciBjaGFyYWN0ZXIpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIC8vIERvbid0IGF0dGVtcHQgdG8gY2Fub25pY2FsaXplIG5ld2xpbmUg
cmVsYXRlZCBjaGFyYWN0ZXJzLgotICAgICAgICAgICAgcmV0dXJuIChjaGFyYWN0ZXIgPT0gJ1xu
JyB8fCBjaGFyYWN0ZXIgPT0gJ1xyJyk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGVtaXQo
VUNoYXIgY2hhcmFjdGVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2J1aWxkZXIuYXBwZW5k
KGNoYXJhY3Rlcik7Ci0gICAgICAgIH0KLQotICAgICAgICBlbnVtIFBhcnNlU3RhdGUgewotICAg
ICAgICAgICAgLy8gSGF2ZSBub3Qgc2VlbiBhbiBBU0NJSSBub24td2hpdGVzcGFjZSBjaGFyYWN0
ZXIgeWV0IG9uCi0gICAgICAgICAgICAvLyB0aGlzIGxpbmUuIFBvc3NpYmxlIHRoYXQgd2UgbWln
aHQgc2VlIGEgcHJlcHJvY2Vzc29yCi0gICAgICAgICAgICAvLyBkaXJlY3RpdmUuCi0gICAgICAg
ICAgICBCZWdpbm5pbmdPZkxpbmUsCi0KLSAgICAgICAgICAgIC8vIEhhdmUgc2VlbiBhdCBsZWFz
dCBvbmUgQVNDSUkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyCi0gICAgICAgICAgICAvLyBvbiB0
aGlzIGxpbmUuCi0gICAgICAgICAgICBNaWRkbGVPZkxpbmUsCi0KLSAgICAgICAgICAgIC8vIEhh
bmRsaW5nIGEgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZS4gUGFzc2VzIHRocm91Z2ggYWxsCi0gICAg
ICAgICAgICAvLyBjaGFyYWN0ZXJzIHVwIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuIERpc2FibGVz
IGNvbW1lbnQKLSAgICAgICAgICAgIC8vIHByb2Nlc3NpbmcuCi0gICAgICAgICAgICBJblByZXBy
b2Nlc3NvckRpcmVjdGl2ZSwKLQotICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBzaW5nbGUtbGlu
ZSBjb21tZW50LiBUaGUgY29tbWVudCB0ZXh0IGlzCi0gICAgICAgICAgICAvLyByZXBsYWNlZCB3
aXRoIGEgc2luZ2xlIHNwYWNlLgotICAgICAgICAgICAgSW5TaW5nbGVMaW5lQ29tbWVudCwKLQot
ICAgICAgICAgICAgLy8gSGFuZGxpbmcgYSBtdWx0aS1saW5lIGNvbW1lbnQuIE5ld2xpbmVzIGFy
ZSBwYXNzZWQKLSAgICAgICAgICAgIC8vIHRocm91Z2ggdG8gcHJlc2VydmUgbGluZSBudW1iZXJz
LgotICAgICAgICAgICAgSW5NdWx0aUxpbmVDb21tZW50Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
UGFyc2VTdGF0ZSBtX3BhcnNlU3RhdGU7Ci0gICAgICAgIFN0cmluZyBtX3NvdXJjZVN0cmluZzsK
LSAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7Ci0gICAgICAgIHVuc2lnbmVkIG1fcG9zaXRpb247
Ci0gICAgICAgIFN0cmluZ0J1aWxkZXIgbV9idWlsZGVyOwotICAgIH07Ci0KLSAgICB2b2lkIFN0
cmlwQ29tbWVudHM6OnByb2Nlc3MoVUNoYXIgYykKLSAgICB7Ci0gICAgICAgIGlmIChpc05ld2xp
bmUoYykpIHsKLSAgICAgICAgICAgIC8vIE5vIG1hdHRlciB3aGF0IHN0YXRlIHdlIGFyZSBpbiwg
cGFzcyB0aHJvdWdoIG5ld2xpbmVzCi0gICAgICAgICAgICAvLyBzbyB3ZSBwcmVzZXJ2ZSBsaW5l
IG51bWJlcnMuCi0gICAgICAgICAgICBlbWl0KGMpOwotCi0gICAgICAgICAgICBpZiAobV9wYXJz
ZVN0YXRlICE9IEluTXVsdGlMaW5lQ29tbWVudCkKLSAgICAgICAgICAgICAgICBtX3BhcnNlU3Rh
dGUgPSBCZWdpbm5pbmdPZkxpbmU7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIFVDaGFyIHRlbXAgPSAwOwotICAgICAgICBzd2l0Y2ggKG1fcGFyc2VTdGF0ZSkg
ewotICAgICAgICBjYXNlIEJlZ2lubmluZ09mTGluZToKLSAgICAgICAgICAgIGlmIChXVEY6Omlz
QVNDSUlTcGFjZShjKSkgewotICAgICAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjID09ICcjJykgewot
ICAgICAgICAgICAgICAgIG1fcGFyc2VTdGF0ZSA9IEluUHJlcHJvY2Vzc29yRGlyZWN0aXZlOwot
ICAgICAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIC8vIFRyYW5zaXRpb24gdG8gbm9ybWFsIHN0YXRlIGFuZCBy
ZS1oYW5kbGUgY2hhcmFjdGVyLgotICAgICAgICAgICAgbV9wYXJzZVN0YXRlID0gTWlkZGxlT2ZM
aW5lOwotICAgICAgICAgICAgcHJvY2VzcyhjKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgIGNhc2UgTWlkZGxlT2ZMaW5lOgotICAgICAgICAgICAgaWYgKGMgPT0gJy8nICYmIHBlZWso
dGVtcCkpIHsKLSAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSAnLycpIHsKLSAgICAgICAgICAg
ICAgICAgICAgbV9wYXJzZVN0YXRlID0gSW5TaW5nbGVMaW5lQ29tbWVudDsKLSAgICAgICAgICAg
ICAgICAgICAgZW1pdCgnICcpOwotICAgICAgICAgICAgICAgICAgICBhZHZhbmNlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ICAgIGlmICh0ZW1wID09ICcqJykgewotICAgICAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUg
PSBJbk11bHRpTGluZUNvbW1lbnQ7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEVtaXQgdGhlIGNv
bW1lbnQgc3RhcnQgaW4gY2FzZSB0aGUgdXNlciBoYXMKLSAgICAgICAgICAgICAgICAgICAgLy8g
YW4gdW5jbG9zZWQgY29tbWVudCBhbmQgd2Ugd2FudCB0byBsYXRlcgotICAgICAgICAgICAgICAg
ICAgICAvLyBzaWduYWwgYW4gZXJyb3IuCi0gICAgICAgICAgICAgICAgICAgIGVtaXQoJy8nKTsK
LSAgICAgICAgICAgICAgICAgICAgZW1pdCgnKicpOwotICAgICAgICAgICAgICAgICAgICBhZHZh
bmNlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZW1pdChjKTsKLSAgICAgICAgICAgIGJyZWFrOwot
Ci0gICAgICAgIGNhc2UgSW5QcmVwcm9jZXNzb3JEaXJlY3RpdmU6Ci0gICAgICAgICAgICAvLyBO
byBtYXR0ZXIgd2hhdCB0aGUgY2hhcmFjdGVyIGlzLCBqdXN0IHBhc3MgaXQKLSAgICAgICAgICAg
IC8vIHRocm91Z2guIERvIG5vdCBwYXJzZSBjb21tZW50cyBpbiB0aGlzIHN0YXRlLiBUaGlzCi0g
ICAgICAgICAgICAvLyBtaWdodCBub3QgYmUgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIGxvbmcgdGVy
bSwgYnV0IGl0Ci0gICAgICAgICAgICAvLyBzaG91bGQgaGFuZGxlIHRoZSAjZXJyb3IgcHJlcHJv
Y2Vzc29yIGRpcmVjdGl2ZS4KLSAgICAgICAgICAgIGVtaXQoYyk7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIEluU2luZ2xlTGluZUNvbW1lbnQ6Ci0gICAgICAgICAgICAvLyBU
aGUgbmV3bGluZSBjb2RlIGF0IHRoZSB0b3Agb2YgdGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlCi0g
ICAgICAgICAgICAvLyBvZiByZXNldHRpbmcgb3VyIHN0YXRlIHdoZW4gd2UgZ2V0IG91dCBvZiB0
aGUKLSAgICAgICAgICAgIC8vIHNpbmdsZS1saW5lIGNvbW1lbnQuIFN3YWxsb3cgYWxsIG90aGVy
IGNoYXJhY3RlcnMuCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEluTXVsdGlM
aW5lQ29tbWVudDoKLSAgICAgICAgICAgIGlmIChjID09ICcqJyAmJiBwZWVrKHRlbXApICYmIHRl
bXAgPT0gJy8nKSB7Ci0gICAgICAgICAgICAgICAgZW1pdCgnKicpOwotICAgICAgICAgICAgICAg
IGVtaXQoJy8nKTsKLSAgICAgICAgICAgICAgICBtX3BhcnNlU3RhdGUgPSBNaWRkbGVPZkxpbmU7
Ci0gICAgICAgICAgICAgICAgYWR2YW5jZSgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBTd2FsbG93IGFsbCBvdGhlciBjaGFyYWN0ZXJz
LiBVbmNsZWFyIHdoZXRoZXIgd2UgbWF5Ci0gICAgICAgICAgICAvLyB3YW50IG9yIG5lZWQgdG8g
anVzdCBlbWl0IGEgc3BhY2UgcGVyIGNoYXJhY3RlciB0byB0cnkKLSAgICAgICAgICAgIC8vIHRv
IHByZXNlcnZlIGNvbHVtbiBudW1iZXJzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0gLy8gbmFtZXNwYWNlIGFub255bW91cwot
Ci1jbGFzcyBXZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2sgOiBwdWJsaWMgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNvbnRleHRMb3N0Q2FsbGJhY2sgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IFdlYkdMUmVuZGVyaW5nQ29udGV4dExvc3RD
YWxsYmFjayhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNiKSA6IG1fY29udGV4dChjYikgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIG9uQ29udGV4dExvc3QoKSBvdmVycmlkZSB7IG1fY29udGV4dC0+Zm9y
Y2VMb3N0Q29udGV4dChXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OlJlYWxMb3N0Q29udGV4dCk7IH0K
LSAgICB2aXJ0dWFsIH5XZWJHTFJlbmRlcmluZ0NvbnRleHRMb3N0Q2FsbGJhY2soKSB7fQotcHJp
dmF0ZToKLSAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIG1fY29udGV4dDsKLX07Ci0KLWNsYXNz
IFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrIDogcHVibGljIEdyYXBo
aWNzQ29udGV4dDNEOjpFcnJvck1lc3NhZ2VDYWxsYmFjayB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgV2ViR0xSZW5kZXJpbmdDb250ZXh0RXJy
b3JNZXNzYWdlQ2FsbGJhY2soV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjYikgOiBtX2NvbnRleHQo
Y2IpIHsgfQotICAgIHZpcnR1YWwgdm9pZCBvbkVycm9yTWVzc2FnZShjb25zdCBTdHJpbmcmIG1l
c3NhZ2UsIEdDM0RpbnQpIG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAobV9jb250ZXh0LT5t
X3N5bnRoZXNpemVkRXJyb3JzVG9Db25zb2xlKQotICAgICAgICAgICAgbV9jb250ZXh0LT5wcmlu
dEdMRXJyb3JUb0NvbnNvbGUobWVzc2FnZSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfldlYkdMUmVu
ZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNhbGxiYWNrKCkgeyB9Ci1wcml2YXRlOgotICAgIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogbV9jb250ZXh0OwotfTsKLQotc3RkOjp1bmlxdWVfcHRyPFdl
YkdMUmVuZGVyaW5nQ29udGV4dD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUoSFRNTENh
bnZhc0VsZW1lbnQqIGNhbnZhcywgV2ViR0xDb250ZXh0QXR0cmlidXRlcyogYXR0cnMpCi17Ci0g
ICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gY2FudmFzLT5kb2N1bWVudCgpOwotICAgIEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50LmZyYW1lKCk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICAvLyBUaGUgRnJhbWVMb2FkZXJDbGllbnQgbWlnaHQgYmxvY2sgY3Jl
YXRpb24gb2YgYSBuZXcgV2ViR0wgY29udGV4dCBkZXNwaXRlIHRoZSBwYWdlIHNldHRpbmdzOyBp
bgotICAgIC8vIHBhcnRpY3VsYXIsIGlmIFdlYkdMIGNvbnRleHRzIHdlcmUgbG9zdCBvbmUgb3Ig
bW9yZSB0aW1lcyB2aWEgdGhlIEdMX0FSQl9yb2J1c3RuZXNzIGV4dGVuc2lvbi4KLSAgICBpZiAo
IWZyYW1lLT5sb2FkZXIoKS5jbGllbnQoKS5hbGxvd1dlYkdMKGZyYW1lLT5zZXR0aW5ncygpLndl
YkdMRW5hYmxlZCgpKSkgewotICAgICAgICBjYW52YXMtPmRpc3BhdGNoRXZlbnQoV2ViR0xDb250
ZXh0RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkud2ViZ2xjb250ZXh0Y3JlYXRpb25lcnJvckV2
ZW50LCBmYWxzZSwgdHJ1ZSwgIldlYiBwYWdlIHdhcyBub3QgYWxsb3dlZCB0byBjcmVhdGUgYSBX
ZWJHTCBjb250ZXh0LiIpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
Ym9vbCBpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uID0gZmFsc2U7Ci0gICAgRG9jdW1lbnQmIHRv
cERvY3VtZW50ID0gZG9jdW1lbnQudG9wRG9jdW1lbnQoKTsKLSAgICBQYWdlKiBwYWdlID0gdG9w
RG9jdW1lbnQucGFnZSgpOwotICAgIGlmIChwYWdlICYmICF0b3BEb2N1bWVudC51cmwoKS5pc0xv
Y2FsRmlsZSgpKSB7Ci0gICAgICAgIFdlYkdMTG9hZFBvbGljeSBwb2xpY3kgPSBwYWdlLT5tYWlu
RnJhbWUoKS5sb2FkZXIoKS5jbGllbnQoKS53ZWJHTFBvbGljeUZvclVSTCh0b3BEb2N1bWVudC51
cmwoKSk7Ci0KLSAgICAgICAgaWYgKHBvbGljeSA9PSBXZWJHTEJsb2NrQ3JlYXRpb24pIHsKLSAg
ICAgICAgICAgIExPRyhXZWJHTCwgIlRoZSBwb2xpY3kgZm9yIHRoaXMgVVJMICglcykgaXMgdG8g
YmxvY2sgV2ViR0wuIiwgdG9wRG9jdW1lbnQudXJsKCkuaG9zdCgpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAocG9s
aWN5ID09IFdlYkdMUGVuZGluZ0NyZWF0aW9uKSB7Ci0gICAgICAgICAgICBMT0coV2ViR0wsICJX
ZWJHTCBwb2xpY3kgaXMgcGVuZGluZy4gTWF5IG5lZWQgdG8gYmUgcmVzb2x2ZWQgbGF0ZXIuIik7
Ci0gICAgICAgICAgICBpc1BlbmRpbmdQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMg
PSBhdHRycyA/IGF0dHJzLT5hdHRyaWJ1dGVzKCkgOiBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcygpOwotCi0gICAgaWYgKGF0dHJpYnV0ZXMuYW50aWFsaWFzKSB7Ci0gICAgICAgIGlmICgh
ZnJhbWUtPnNldHRpbmdzKCkub3BlbkdMTXVsdGlzYW1wbGluZ0VuYWJsZWQoKSkKLSAgICAgICAg
ICAgIGF0dHJpYnV0ZXMuYW50aWFsaWFzID0gZmFsc2U7Ci0gICAgfQotCi0gICAgYXR0cmlidXRl
cy5ub0V4dGVuc2lvbnMgPSB0cnVlOwotICAgIGF0dHJpYnV0ZXMuc2hhcmVSZXNvdXJjZXMgPSBm
YWxzZTsKLSAgICBhdHRyaWJ1dGVzLnByZWZlckRpc2NyZXRlR1BVID0gdHJ1ZTsKLQotICAgIGlm
IChmcmFtZS0+c2V0dGluZ3MoKS5mb3JjZVNvZnR3YXJlV2ViR0xSZW5kZXJpbmcoKSkKLSAgICAg
ICAgYXR0cmlidXRlcy5mb3JjZVNvZnR3YXJlUmVuZGVyZXIgPSB0cnVlOwotCi0gICAgaWYgKHBh
Z2UpCi0gICAgICAgIGF0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRpbyA9IHBhZ2UtPmRldmljZVNj
YWxlRmFjdG9yKCk7Ci0KLSAgICBpZiAoaXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgewotICAg
ICAgICBMT0coV2ViR0wsICJDcmVhdGUgYSBXZWJHTCBjb250ZXh0IHRoYXQgbG9va3MgcmVhbCwg
YnV0IHdpbGwgcmVxdWlyZSBhIHBvbGljeSByZXNvbHV0aW9uIGlmIHVzZWQuIik7Ci0gICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHJlbmRlcmluZ0NvbnRleHQo
bmV3IFdlYkdMUmVuZGVyaW5nQ29udGV4dChjYW52YXMsIGF0dHJpYnV0ZXMpKTsKLSAgICAgICAg
cmVuZGVyaW5nQ29udGV4dC0+c3VzcGVuZElmTmVlZGVkKCk7Ci0gICAgICAgIHJldHVybiByZW5k
ZXJpbmdDb250ZXh0OwotICAgIH0KLQotICAgIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cgPSBkb2N1
bWVudC52aWV3KCktPnJvb3QoKS0+aG9zdFdpbmRvdygpOwotICAgIFJlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dChHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHJpYnV0ZXMsIGhv
c3RXaW5kb3cpKTsKLQotICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCkpIHsKLSAgICAgICAgY2FudmFzLT5kaXNwYXRjaEV2ZW50KFdlYkdMQ29udGV4dEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLndlYmdsY29udGV4dGNyZWF0aW9uZXJyb3JFdmVudCwg
ZmFsc2UsIHRydWUsICJDb3VsZCBub3QgY3JlYXRlIGEgV2ViR0wgY29udGV4dC4iKSk7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9u
cyA9IGNvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKLSAgICBpZiAoZXh0ZW5zaW9ucy0+c3VwcG9y
dHMoIkdMX0VYVF9kZWJ1Z19tYXJrZXIiKSkKLSAgICAgICAgZXh0ZW5zaW9ucy0+cHVzaEdyb3Vw
TWFya2VyRVhUKCJXZWJHTFJlbmRlcmluZ0NvbnRleHQiKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxXZWJHTFJlbmRlcmluZ0NvbnRleHQ+IHJlbmRlcmluZ0NvbnRleHQobmV3IFdlYkdMUmVuZGVy
aW5nQ29udGV4dChjYW52YXMsIGNvbnRleHQsIGF0dHJpYnV0ZXMpKTsKLSAgICByZW5kZXJpbmdD
b250ZXh0LT5zdXNwZW5kSWZOZWVkZWQoKTsKLQotICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0
OwotfQotCi1XZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1M
Q2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyBhdHRyaWJ1dGVzKQotICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChwYXNzZWRDYW52YXMp
Ci0gICAgLCBBY3RpdmVET01PYmplY3QoJnBhc3NlZENhbnZhcy0+ZG9jdW1lbnQoKSkKLSAgICAs
IG1fY29udGV4dCgwKQotICAgICwgbV9kcmF3aW5nQnVmZmVyKDApCi0gICAgLCBtX2Rpc3BhdGNo
Q29udGV4dExvc3RFdmVudFRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNw
YXRjaENvbnRleHRMb3N0RXZlbnQpCi0gICAgLCBtX3Jlc3RvcmVBbGxvd2VkKGZhbHNlKQotICAg
ICwgbV9yZXN0b3JlVGltZXIoKnRoaXMsICZXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1heWJlUmVz
dG9yZUNvbnRleHQpCi0gICAgLCBtX2dlbmVyYXRlZEltYWdlQ2FjaGUoMCkKLSAgICAsIG1fY29u
dGV4dExvc3QoZmFsc2UpCi0gICAgLCBtX2NvbnRleHRMb3N0TW9kZShTeW50aGV0aWNMb3N0Q29u
dGV4dCkKLSAgICAsIG1fYXR0cmlidXRlcyhhdHRyaWJ1dGVzKQotICAgICwgbV9zeW50aGVzaXpl
ZEVycm9yc1RvQ29uc29sZSh0cnVlKQotICAgICwgbV9udW1HTEVycm9yc1RvQ29uc29sZUFsbG93
ZWQobWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlKQotICAgICwgbV9pc1BlbmRpbmdQb2xpY3lS
ZXNvbHV0aW9uKHRydWUpCi0gICAgLCBtX2hhc1JlcXVlc3RlZFBvbGljeVJlc29sdXRpb24oZmFs
c2UpCi17Ci19Ci0KLVdlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IGNvbnRleHQsCi0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmli
dXRlcykKLSAgICA6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQocGFzc2VkQ2FudmFzKQotICAgICwg
QWN0aXZlRE9NT2JqZWN0KCZwYXNzZWRDYW52YXMtPmRvY3VtZW50KCkpCi0gICAgLCBtX2NvbnRl
eHQoY29udGV4dCkKLSAgICAsIG1fZHJhd2luZ0J1ZmZlcigwKQotICAgICwgbV9kaXNwYXRjaENv
bnRleHRMb3N0RXZlbnRUaW1lcigqdGhpcywgJldlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGlzcGF0
Y2hDb250ZXh0TG9zdEV2ZW50KQotICAgICwgbV9yZXN0b3JlQWxsb3dlZChmYWxzZSkKLSAgICAs
IG1fcmVzdG9yZVRpbWVyKCp0aGlzLCAmV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXliZVJlc3Rv
cmVDb250ZXh0KQotICAgICwgbV9nZW5lcmF0ZWRJbWFnZUNhY2hlKDQpCi0gICAgLCBtX2NvbnRl
eHRMb3N0KGZhbHNlKQotICAgICwgbV9jb250ZXh0TG9zdE1vZGUoU3ludGhldGljTG9zdENvbnRl
eHQpCi0gICAgLCBtX2F0dHJpYnV0ZXMoYXR0cmlidXRlcykKLSAgICAsIG1fc3ludGhlc2l6ZWRF
cnJvcnNUb0NvbnNvbGUodHJ1ZSkKLSAgICAsIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2Vk
KG1heEdMRXJyb3JzQWxsb3dlZFRvQ29uc29sZSkKLSAgICAsIG1faXNQZW5kaW5nUG9saWN5UmVz
b2x1dGlvbihmYWxzZSkKLSAgICAsIG1faGFzUmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbihmYWxz
ZSkKLXsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKLSAgICBtX2NvbnRleHRHcm91cCA9IFdlYkdM
Q29udGV4dEdyb3VwOjpjcmVhdGUoKTsKLSAgICBtX2NvbnRleHRHcm91cC0+YWRkQ29udGV4dCh0
aGlzKTsKLQotICAgIG1fbWF4Vmlld3BvcnREaW1zWzBdID0gbV9tYXhWaWV3cG9ydERpbXNbMV0g
PSAwOwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9W
SUVXUE9SVF9ESU1TLCBtX21heFZpZXdwb3J0RGltcyk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLQotICAgIHNldHVwRmxhZ3Mo
KTsKLSAgICBpbml0aWFsaXplTmV3Q29udGV4dCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6aW5pdGlhbGl6ZU5ld0NvbnRleHQoKQotewotICAgIEFTU0VSVCghbV9jb250ZXh0
TG9zdCk7Ci0gICAgbV9uZWVkc1VwZGF0ZSA9IHRydWU7Ci0gICAgbV9tYXJrZWRDYW52YXNEaXJ0
eSA9IGZhbHNlOwotICAgIG1fYWN0aXZlVGV4dHVyZVVuaXQgPSAwOwotICAgIG1fcGFja0FsaWdu
bWVudCA9IDQ7Ci0gICAgbV91bnBhY2tBbGlnbm1lbnQgPSA0OwotICAgIG1fdW5wYWNrRmxpcFkg
PSBmYWxzZTsKLSAgICBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEgPSBmYWxzZTsKLSAgICBtX3Vu
cGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJST1dTRVJfREVG
QVVMVF9XRUJHTDsKLSAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSAwOwotICAgIG1fY3VycmVudFBy
b2dyYW0gPSAwOwotICAgIG1fZnJhbWVidWZmZXJCaW5kaW5nID0gMDsKLSAgICBtX3JlbmRlcmJ1
ZmZlckJpbmRpbmcgPSAwOwotICAgIG1fZGVwdGhNYXNrID0gdHJ1ZTsKLSAgICBtX3N0ZW5jaWxF
bmFibGVkID0gZmFsc2U7Ci0gICAgbV9zdGVuY2lsTWFzayA9IDB4RkZGRkZGRkY7Ci0gICAgbV9z
dGVuY2lsTWFza0JhY2sgPSAweEZGRkZGRkZGOwotICAgIG1fc3RlbmNpbEZ1bmNSZWYgPSAwOwot
ICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gMDsKLSAgICBtX3N0ZW5jaWxGdW5jTWFzayA9IDB4
RkZGRkZGRkY7Ci0gICAgbV9zdGVuY2lsRnVuY01hc2tCYWNrID0gMHhGRkZGRkZGRjsKLSAgICBt
X2xheWVyQ2xlYXJlZCA9IGZhbHNlOwotICAgIG1fbnVtR0xFcnJvcnNUb0NvbnNvbGVBbGxvd2Vk
ID0gbWF4R0xFcnJvcnNBbGxvd2VkVG9Db25zb2xlOwotICAgIAotICAgIG1fY2xlYXJDb2xvclsw
XSA9IG1fY2xlYXJDb2xvclsxXSA9IG1fY2xlYXJDb2xvclsyXSA9IG1fY2xlYXJDb2xvclszXSA9
IDA7Ci0gICAgbV9zY2lzc29yRW5hYmxlZCA9IGZhbHNlOwotICAgIG1fY2xlYXJEZXB0aCA9IDE7
Ci0gICAgbV9jbGVhclN0ZW5jaWwgPSAwOwotICAgIG1fY29sb3JNYXNrWzBdID0gbV9jb2xvck1h
c2tbMV0gPSBtX2NvbG9yTWFza1syXSA9IG1fY29sb3JNYXNrWzNdID0gdHJ1ZTsKLQotICAgIEdD
M0RpbnQgbnVtQ29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDA7Ci0gICAgbV9jb250ZXh0LT5n
ZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0Vf
VU5JVFMsICZudW1Db21iaW5lZFRleHR1cmVJbWFnZVVuaXRzKTsKLSAgICBtX3RleHR1cmVVbml0
cy5jbGVhcigpOwotICAgIG1fdGV4dHVyZVVuaXRzLnJlc2l6ZShudW1Db21iaW5lZFRleHR1cmVJ
bWFnZVVuaXRzKTsKLQotICAgIEdDM0RpbnQgbnVtVmVydGV4QXR0cmlicyA9IDA7Ci0gICAgbV9j
b250ZXh0LT5nZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJT
LCAmbnVtVmVydGV4QXR0cmlicyk7Ci0gICAgbV9tYXhWZXJ0ZXhBdHRyaWJzID0gbnVtVmVydGV4
QXR0cmliczsKLSAgICAKLSAgICBtX21heFRleHR1cmVTaXplID0gMDsKLSAgICBtX2NvbnRleHQt
PmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbV9tYXhU
ZXh0dXJlU2l6ZSk7Ci0gICAgbV9tYXhUZXh0dXJlTGV2ZWwgPSBXZWJHTFRleHR1cmU6OmNvbXB1
dGVMZXZlbENvdW50KG1fbWF4VGV4dHVyZVNpemUsIG1fbWF4VGV4dHVyZVNpemUpOwotICAgIG1f
bWF4Q3ViZU1hcFRleHR1cmVTaXplID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFLCAmbV9tYXhDdWJlTWFw
VGV4dHVyZVNpemUpOwotICAgIG1fbWF4Q3ViZU1hcFRleHR1cmVMZXZlbCA9IFdlYkdMVGV4dHVy
ZTo6Y29tcHV0ZUxldmVsQ291bnQobV9tYXhDdWJlTWFwVGV4dHVyZVNpemUsIG1fbWF4Q3ViZU1h
cFRleHR1cmVTaXplKTsKLSAgICBtX21heFJlbmRlcmJ1ZmZlclNpemUgPSAwOwotICAgIG1fY29u
dGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9SRU5ERVJCVUZGRVJfU0la
RSwgJm1fbWF4UmVuZGVyYnVmZmVyU2l6ZSk7Ci0KLSAgICAvLyBUaGVzZSB0d28gdmFsdWVzIGZy
b20gRVhUX2RyYXdfYnVmZmVycyBhcmUgbGF6aWx5IHF1ZXJpZWQuCi0gICAgbV9tYXhEcmF3QnVm
ZmVycyA9IDA7Ci0gICAgbV9tYXhDb2xvckF0dGFjaG1lbnRzID0gMDsKLQotICAgIG1fYmFja0Ry
YXdCdWZmZXIgPSBHcmFwaGljc0NvbnRleHQzRDo6QkFDSzsKLSAgICBtX2RyYXdCdWZmZXJzV2Vi
R0xSZXF1aXJlbWVudHNDaGVja2VkID0gZmFsc2U7Ci0gICAgbV9kcmF3QnVmZmVyc1N1cHBvcnRl
ZCA9IGZhbHNlOwotCi0gICAgbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QgPSBXZWJHTFZlcnRl
eEFycmF5T2JqZWN0T0VTOjpjcmVhdGUodGhpcywgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmFvVHlwZURlZmF1bHQpOwotICAgIGFkZENvbnRleHRPYmplY3QobV9kZWZhdWx0VmVydGV4QXJy
YXlPYmplY3QuZ2V0KCkpOwotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG1fZGVmYXVs
dFZlcnRleEFycmF5T2JqZWN0OwotICAgIAotICAgIG1fdmVydGV4QXR0cmliVmFsdWUucmVzaXpl
KG1fbWF4VmVydGV4QXR0cmlicyk7Ci0KLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0g
ICAgICAgIGNyZWF0ZUZhbGxiYWNrQmxhY2tUZXh0dXJlczF4MSgpOwotICAgIGlmICghaXNHTEVT
MkNvbXBsaWFudCgpKQotICAgICAgICBpbml0VmVydGV4QXR0cmliMCgpOwotCi0gICAgSW50U2l6
ZSBjYW52YXNTaXplID0gY2xhbXBlZENhbnZhc1NpemUoKTsKLSAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnJlc2V0KGNhbnZhc1NpemUpOwotCi0gICAg
bV9jb250ZXh0LT5yZXNoYXBlKGNhbnZhc1NpemUud2lkdGgoKSwgY2FudmFzU2l6ZS5oZWlnaHQo
KSk7Ci0gICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBjYW52YXNTaXplLndpZHRoKCksIGNh
bnZhc1NpemUuaGVpZ2h0KCkpOwotICAgIG1fY29udGV4dC0+c2Npc3NvcigwLCAwLCBjYW52YXNT
aXplLndpZHRoKCksIGNhbnZhc1NpemUuaGVpZ2h0KCkpOwotCi0gICAgbV9jb250ZXh0LT5zZXRD
b250ZXh0TG9zdENhbGxiYWNrKHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xSZW5kZXJpbmdDb250ZXh0
TG9zdENhbGxiYWNrPih0aGlzKSk7Ci0gICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VDYWxs
YmFjayhzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMUmVuZGVyaW5nQ29udGV4dEVycm9yTWVzc2FnZUNh
bGxiYWNrPih0aGlzKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzZXR1cEZs
YWdzKCkKLXsKLSAgICBBU1NFUlQobV9jb250ZXh0KTsKLQotICAgIGlmIChQYWdlKiBwYWdlID0g
Y2FudmFzKCktPmRvY3VtZW50KCkucGFnZSgpKQotICAgICAgICBtX3N5bnRoZXNpemVkRXJyb3Jz
VG9Db25zb2xlID0gcGFnZS0+c2V0dGluZ3MoKS53ZWJHTEVycm9yc1RvQ29uc29sZUVuYWJsZWQo
KTsKLQotICAgIG1faXNHTEVTMkNvbXBsaWFudCA9IG1fY29udGV4dC0+aXNHTEVTMkNvbXBsaWFu
dCgpOwotICAgIG1faXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcyA9IG1fY29u
dGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3N0cmljdF9hdHRy
aWJzIik7Ci0gICAgbV9pc1Jlc291cmNlU2FmZSA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5pc0VuYWJsZWQoIkdMX0NIUk9NSVVNX3Jlc291cmNlX3NhZmUiKTsKLSAgICBpZiAobV9pc0dM
RVMyQ29tcGxpYW50KSB7Ci0gICAgICAgIG1faXNHTEVTMk5QT1RTdHJpY3QgPSAhbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCktPmlzRW5hYmxlZCgiR0xfT0VTX3RleHR1cmVfbnBvdCIpOwotICAg
ICAgICBtX2lzRGVwdGhTdGVuY2lsU3VwcG9ydGVkID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmlzRW5hYmxlZCgiR0xfT0VTX3BhY2tlZF9kZXB0aF9zdGVuY2lsIik7Ci0gICAgfSBlbHNl
IHsKLSAgICAgICAgbV9pc0dMRVMyTlBPVFN0cmljdCA9ICFtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+aXNFbmFibGVkKCJHTF9BUkJfdGV4dHVyZV9ub25fcG93ZXJfb2ZfdHdvIik7Ci0gICAg
ICAgIG1faXNEZXB0aFN0ZW5jaWxTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+aXNFbmFibGVkKCJHTF9FWFRfcGFja2VkX2RlcHRoX3N0ZW5jaWwiKTsKLSAgICB9Ci0gICAg
bV9pc1JvYnVzdG5lc3NFWFRTdXBwb3J0ZWQgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
aXNFbmFibGVkKCJHTF9FWFRfcm9idXN0bmVzcyIpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6YWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpIGNvbnN0Ci17Ci0gICAgaWYgKFBh
Z2UqIHBhZ2UgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS5wYWdlKCkpCi0gICAgICAgIHJldHVybiBw
YWdlLT5zZXR0aW5ncygpLnByaXZpbGVnZWRXZWJHTEV4dGVuc2lvbnNFbmFibGVkKCk7Ci0gICAg
cmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkQ29tcHJl
c3NlZFRleHR1cmVGb3JtYXQoR0MzRGVudW0gZm9ybWF0KQotewotICAgIGlmICghbV9jb21wcmVz
c2VkVGV4dHVyZUZvcm1hdHMuY29udGFpbnMoZm9ybWF0KSkKLSAgICAgICAgbV9jb21wcmVzc2Vk
VGV4dHVyZUZvcm1hdHMuYXBwZW5kKGZvcm1hdCk7Ci19Ci0KLVdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6fldlYkdMUmVuZGVyaW5nQ29udGV4dCgpCi17Ci0gICAgLy8gUmVtb3ZlIGFsbCByZWZlcmVu
Y2VzIHRvIFdlYkdMT2JqZWN0cyBzbyBpZiB0aGV5IGFyZSB0aGUgbGFzdCByZWZlcmVuY2UKLSAg
ICAvLyB0aGV5IHdpbGwgYmUgZnJlZWQgYmVmb3JlIHRoZSBsYXN0IGNvbnRleHQgaXMgcmVtb3Zl
ZCBmcm9tIHRoZSBjb250ZXh0IGdyb3VwLgotICAgIG1fYm91bmRBcnJheUJ1ZmZlciA9IG51bGxw
dHI7Ci0gICAgbV9kZWZhdWx0VmVydGV4QXJyYXlPYmplY3QgPSBudWxscHRyOwotICAgIG1fYm91
bmRWZXJ0ZXhBcnJheU9iamVjdCA9IG51bGxwdHI7Ci0gICAgbV92ZXJ0ZXhBdHRyaWIwQnVmZmVy
ID0gbnVsbHB0cjsKLSAgICBtX2N1cnJlbnRQcm9ncmFtID0gbnVsbHB0cjsKLSAgICBtX2ZyYW1l
YnVmZmVyQmluZGluZyA9IG51bGxwdHI7Ci0gICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nID0gbnVs
bHB0cjsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV90ZXh0dXJlVW5pdHMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgbV90ZXh0dXJlVW5pdHNbaV0udGV4dHVyZTJEQmluZGluZyA9IG51
bGxwdHI7Ci0gICAgICAgIG1fdGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZyA9
IG51bGxwdHI7Ci0gICAgfQotCi0gICAgbV9ibGFja1RleHR1cmUyRCA9IG51bGxwdHI7Ci0gICAg
bV9ibGFja1RleHR1cmVDdWJlTWFwID0gbnVsbHB0cjsKLQotICAgIGlmICghbV9pc1BlbmRpbmdQ
b2xpY3lSZXNvbHV0aW9uKSB7Ci0gICAgICAgIGRldGFjaEFuZFJlbW92ZUFsbE9iamVjdHMoKTsK
LSAgICAgICAgZGVzdHJveUdyYXBoaWNzQ29udGV4dDNEKCk7Ci0gICAgICAgIG1fY29udGV4dEdy
b3VwLT5yZW1vdmVDb250ZXh0KHRoaXMpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRlc3Ryb3lHcmFwaGljc0NvbnRleHQzRCgpCi17Ci0gICAgaWYgKG1faXNQZW5k
aW5nUG9saWN5UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVGhlIGRyYXdp
bmcgYnVmZmVyIGhvbGRzIGEgY29udGV4dCByZWZlcmVuY2UuIEl0IG11c3QgYWxzbyBiZSBkZXN0
cm95ZWQKLSAgICAvLyBpbiBvcmRlciBmb3IgdGhlIGNvbnRleHQgdG8gYmUgcmVsZWFzZWQuCi0g
ICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLmNsZWFyKCk7
Ci0KLSAgICBpZiAobV9jb250ZXh0KSB7Ci0gICAgICAgIG1fY29udGV4dC0+c2V0Q29udGV4dExv
c3RDYWxsYmFjayhudWxscHRyKTsKLSAgICAgICAgbV9jb250ZXh0LT5zZXRFcnJvck1lc3NhZ2VD
YWxsYmFjayhudWxscHRyKTsKLSAgICAgICAgbV9jb250ZXh0LmNsZWFyKCk7Ci0gICAgfQotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKLXsKLSAg
ICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29u
dGV4dC0+bWFya0NvbnRleHRDaGFuZ2VkKCk7Ci0KLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQot
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPm1hcmtDb250ZW50c0NoYW5nZWQoKTsKLQotICAgIG1f
bGF5ZXJDbGVhcmVkID0gZmFsc2U7Ci0gICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMo
KS0+cmVuZGVyQm94KCk7Ci0gICAgaWYgKGlzQWNjZWxlcmF0ZWQoKSAmJiByZW5kZXJCb3ggJiYg
cmVuZGVyQm94LT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpIHsKLSAgICAgICAgbV9tYXJr
ZWRDYW52YXNEaXJ0eSA9IHRydWU7Ci0gICAgICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdl
KCk7Ci0gICAgICAgIHJlbmRlckJveC0+Y29udGVudENoYW5nZWQoQ2FudmFzQ2hhbmdlZCk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5KSB7Ci0gICAgICAg
ICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGNhbnZhcygpLT5k
aWREcmF3KEZsb2F0UmVjdChGbG9hdFBvaW50KDAsIDApLCBjbGFtcGVkQ2FudmFzU2l6ZSgpKSk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjbGVh
cklmQ29tcG9zaXRlZChHQzNEYml0ZmllbGQgbWFzaykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIW1fY29udGV4
dC0+bGF5ZXJDb21wb3NpdGVkKCkgfHwgbV9sYXllckNsZWFyZWQKLSAgICAgICAgfHwgbV9hdHRy
aWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlciB8fCAobWFzayAmJiBtX2ZyYW1lYnVmZmVyQmlu
ZGluZykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxXZWJHTENvbnRleHRB
dHRyaWJ1dGVzPiBjb250ZXh0QXR0cmlidXRlcyA9IGdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0K
LSAgICAvLyBEZXRlcm1pbmUgaWYgaXQncyBwb3NzaWJsZSB0byBjb21iaW5lIHRoZSBjbGVhciB0
aGUgdXNlciBhc2tlZCBmb3IgYW5kIHRoaXMgY2xlYXIuCi0gICAgYm9vbCBjb21iaW5lZENsZWFy
ID0gbWFzayAmJiAhbV9zY2lzc29yRW5hYmxlZDsKLQotICAgIG1fY29udGV4dC0+ZGlzYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBpZiAoY29tYmluZWRDbGVhciAm
JiAobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKSkKLSAgICAgICAg
bV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY29sb3JNYXNrWzBdID8gbV9jbGVhckNvbG9yWzBdIDog
MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNrWzFdID8gbV9jbGVh
ckNvbG9yWzFdIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29sb3JNYXNr
WzJdID8gbV9jbGVhckNvbG9yWzJdIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY29sb3JNYXNrWzNdID8gbV9jbGVhckNvbG9yWzNdIDogMCk7Ci0gICAgZWxzZQotICAgICAg
ICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgbV9jb250ZXh0LT5jb2xv
ck1hc2sodHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7Ci0gICAgR0MzRGJpdGZpZWxkIGNsZWFyTWFz
ayA9IEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUOwotICAgIGlmIChjb250ZXh0
QXR0cmlidXRlcy0+ZGVwdGgoKSkgewotICAgICAgICBpZiAoIWNvbWJpbmVkQ2xlYXIgfHwgIW1f
ZGVwdGhNYXNrIHx8ICEobWFzayAmIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklU
KSkKLSAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJEZXB0aCgxLjBmKTsKLSAgICAgICAgY2xl
YXJNYXNrIHw9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUOwotICAgICAgICBt
X2NvbnRleHQtPmRlcHRoTWFzayh0cnVlKTsKLSAgICB9Ci0gICAgaWYgKGNvbnRleHRBdHRyaWJ1
dGVzLT5zdGVuY2lsKCkpIHsKLSAgICAgICAgaWYgKGNvbWJpbmVkQ2xlYXIgJiYgKG1hc2sgJiBH
cmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+Y2xlYXJTdGVuY2lsKG1fY2xlYXJTdGVuY2lsICYgbV9zdGVuY2lsTWFzayk7Ci0gICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKDApOwotICAgICAg
ICBjbGVhck1hc2sgfD0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVDsKLSAg
ICAgICAgbV9jb250ZXh0LT5zdGVuY2lsTWFza1NlcGFyYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpG
Uk9OVCwgMHhGRkZGRkZGRik7Ci0gICAgfQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAg
ICAgIG1fZHJhd2luZ0J1ZmZlci0+Y2xlYXJGcmFtZWJ1ZmZlcnMoY2xlYXJNYXNrKTsKLSAgICBl
bHNlIHsKLSAgICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAw
KTsKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhcihjbGVhck1hc2spOwotICAgIH0KLQotICAgIHJl
c3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcpCi0g
ICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Ci0gICAg
bV9sYXllckNsZWFyZWQgPSB0cnVlOwotCi0gICAgcmV0dXJuIGNvbWJpbmVkQ2xlYXI7Ci19Ci0K
LXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlU3RhdGVBZnRlckNsZWFyKCkKLXsK
LSAgICAvLyBSZXN0b3JlIHRoZSBzdGF0ZSB0aGF0IHRoZSBjb250ZXh0IHNldC4KLSAgICBpZiAo
bV9zY2lzc29yRW5hYmxlZCkKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci0gICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKG1fY2xlYXJD
b2xvclswXSwgbV9jbGVhckNvbG9yWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Ns
ZWFyQ29sb3JbMl0sIG1fY2xlYXJDb2xvclszXSk7Ci0gICAgbV9jb250ZXh0LT5jb2xvck1hc2so
bV9jb2xvck1hc2tbMF0sIG1fY29sb3JNYXNrWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAg
IG1fY29sb3JNYXNrWzJdLCBtX2NvbG9yTWFza1szXSk7Ci0gICAgbV9jb250ZXh0LT5jbGVhckRl
cHRoKG1fY2xlYXJEZXB0aCk7Ci0gICAgbV9jb250ZXh0LT5jbGVhclN0ZW5jaWwobV9jbGVhclN0
ZW5jaWwpOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShHcmFwaGljc0NvbnRl
eHQzRDo6RlJPTlQsIG1fc3RlbmNpbE1hc2spOwotICAgIG1fY29udGV4dC0+ZGVwdGhNYXNrKG1f
ZGVwdGhNYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtMYXllckNv
bXBvc2l0ZWQoKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX2NvbnRleHQtPm1hcmtMYXllckNvbXBvc2l0ZWQoKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkK
LXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoY2FudmFzKCktPmRvY3VtZW50KCkucHJpbnRpbmcoKSkKLSAgICAgICAgY2FudmFz
KCktPmNsZWFyUHJlc2VudGF0aW9uQ29weSgpOwotCi0gICAgLy8gVW50aWwgdGhlIGNhbnZhcyBp
cyB3cml0dGVuIHRvIGJ5IHRoZSBhcHBsaWNhdGlvbiwgdGhlIGNsZWFyIHRoYXQKLSAgICAvLyBo
YXBwZW5lZCBhZnRlciBpdCB3YXMgY29tcG9zaXRlZCBzaG91bGQgYmUgaWdub3JlZCBieSB0aGUg
Y29tcG9zaXRvci4KLSAgICBpZiAobV9jb250ZXh0LT5sYXllckNvbXBvc2l0ZWQoKSAmJiAhbV9h
dHRyaWJ1dGVzLnByZXNlcnZlRHJhd2luZ0J1ZmZlcikgewotICAgICAgICBtX2NvbnRleHQtPnBh
aW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhjYW52YXMoKS0+YnVmZmVyKCkpOwotCi0gICAg
ICAgIGNhbnZhcygpLT5tYWtlUHJlc2VudGF0aW9uQ29weSgpOwotICAgIH0gZWxzZQotICAgICAg
ICBjYW52YXMoKS0+Y2xlYXJQcmVzZW50YXRpb25Db3B5KCk7Ci0gICAgY2xlYXJJZkNvbXBvc2l0
ZWQoKTsKLQotICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSAmJiAhbV9sYXllckNsZWFyZWQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGNhbnZhcygpLT5jbGVhckNvcGllZEltYWdlKCk7Ci0g
ICAgbV9tYXJrZWRDYW52YXNEaXJ0eSA9IGZhbHNlOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5jb21taXQoKTsKLSAgICBtX2NvbnRleHQtPnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKGNhbnZhcygpLT5idWZmZXIoKSwgbV9kcmF3aW5n
QnVmZmVyLmdldCgpKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAgICAgICAgaWYg
KG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclplcm8obV9mcmFt
ZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9kcmF3
aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPEltYWdlRGF0YT4gV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICBpZiAobV9kcmF3aW5nQnVmZmVyKQot
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPmNvbW1pdCgpOwotICAgIFJlZlB0cjxJbWFnZURhdGE+
IGltYWdlRGF0YSA9IG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEo
bV9kcmF3aW5nQnVmZmVyLmdldCgpKTsKLQotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpIHsKLSAg
ICAgICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nKQotICAgICAgICAgICAgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBvYmplY3RPclpl
cm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdlRGF0
YTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc2hhcGUoaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIC8vIFRoaXMgaXMgYW4gYXBwcm94aW1hdGlvbiBiZWNhdXNlIGF0IFdl
YkdMUmVuZGVyaW5nQ29udGV4dCBsZXZlbCB3ZSBkb24ndAotICAgIC8vIGtub3cgaWYgdGhlIHVu
ZGVybHlpbmcgRkJPIHVzZXMgdGV4dHVyZXMgb3IgcmVuZGVyYnVmZmVycy4KLSAgICBHQzNEaW50
IG1heFNpemUgPSBzdGQ6Om1pbihtX21heFRleHR1cmVTaXplLCBtX21heFJlbmRlcmJ1ZmZlclNp
emUpOwotICAgIC8vIExpbWl0IGRyYXdpbmcgYnVmZmVyIHNpemUgdG8gNGsgdG8gYXZvaWQgbWVt
b3J5IGV4aGF1c3Rpb24uCi0gICAgY29uc3QgaW50IHNpemVVcHBlckxpbWl0ID0gNDA5NjsKLSAg
ICBtYXhTaXplID0gc3RkOjptaW4obWF4U2l6ZSwgc2l6ZVVwcGVyTGltaXQpOwotICAgIEdDM0Rp
bnQgbWF4V2lkdGggPSBzdGQ6Om1pbihtYXhTaXplLCBtX21heFZpZXdwb3J0RGltc1swXSk7Ci0g
ICAgR0MzRGludCBtYXhIZWlnaHQgPSBzdGQ6Om1pbihtYXhTaXplLCBtX21heFZpZXdwb3J0RGlt
c1sxXSk7Ci0gICAgd2lkdGggPSBjbGFtcCh3aWR0aCwgMSwgbWF4V2lkdGgpOwotICAgIGhlaWdo
dCA9IGNsYW1wKGhlaWdodCwgMSwgbWF4SGVpZ2h0KTsKLQotICAgIGlmIChtX25lZWRzVXBkYXRl
KSB7Ci0gICAgICAgIFJlbmRlckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgp
OwotICAgICAgICBpZiAocmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZygpKQotICAgICAgICAgICAgcmVuZGVyQm94LT5jb250ZW50Q2hhbmdlZChDYW52YXND
aGFuZ2VkKTsKLSAgICAgICAgbV9uZWVkc1VwZGF0ZSA9IGZhbHNlOwotICAgIH0KLQotICAgIC8v
IFdlIGRvbid0IGhhdmUgdG8gbWFyayB0aGUgY2FudmFzIGFzIGRpcnR5LCBzaW5jZSB0aGUgbmV3
bHkgY3JlYXRlZCBpbWFnZSBidWZmZXIgd2lsbCBhbHNvIHN0YXJ0IG9mZgotICAgIC8vIGNsZWFy
IChhbmQgdGhpcyBtYXRjaGVzIHdoYXQgcmVzaGFwZSB3aWxsIGRvKS4KLSAgICBpZiAobV9kcmF3
aW5nQnVmZmVyKSB7Ci0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+cmVzZXQoSW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KSk7Ci0gICAgICAgIHJlc3RvcmVTdGF0ZUFmdGVyQ2xlYXIoKTsKLSAgICB9IGVs
c2UKLSAgICAgICAgbV9jb250ZXh0LT5yZXNoYXBlKHdpZHRoLCBoZWlnaHQpOwotCi0gICAgbV9j
b250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0
T3JaZXJvKG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRp
bmcuZ2V0KCkpKTsKLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgb2JqZWN0T3JaZXJvKG1fcmVuZGVyYnVmZmVyQmluZGluZy5n
ZXQoKSkpOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgb2JqZWN0T3Ja
ZXJvKG1fZnJhbWVidWZmZXJCaW5kaW5nLmdldCgpKSk7Ci19Ci0KLWludCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKG1fZHJhd2lu
Z0J1ZmZlcikKLSAgICAgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlci0+c2l6ZSgpLndpZHRoKCk7
Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSgpLndp
ZHRoKCk7Ci19Ci0KLWludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRyYXdpbmdCdWZmZXJIZWln
aHQoKSBjb25zdAotewotICAgIGlmIChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgIHJldHVybiBt
X2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKTsKLQotICAgIHJldHVybiBtX2NvbnRleHQt
PmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkuaGVpZ2h0KCk7Ci19Ci0KLXVuc2lnbmVkIGlu
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNpemVJbkJ5dGVzKEdDM0RlbnVtIHR5cGUpCi17Ci0g
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QllURToKLSAg
ICAgICAgcmV0dXJuIHNpemVvZihHQzNEYnl0ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURToKLSAgICAgICAgcmV0dXJuIHNpemVvZihHQzNEdWJ5dGUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNIT1JUOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdD
M0RzaG9ydCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0g
ICAgICAgIHJldHVybiBzaXplb2YoR0MzRHVzaG9ydCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6SU5UOgotICAgICAgICByZXR1cm4gc2l6ZW9mKEdDM0RpbnQpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAgICAgICAgcmV0dXJuIHNpemVvZihHQzNE
dWludCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6Ci0gICAgICAgIHJldHVy
biBzaXplb2YoR0MzRGZsb2F0KTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjphY3RpdmVUZXh0
dXJlKEdDM0RlbnVtIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9Q
QVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmICh0ZXh0dXJlIC0gR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwID49IG1f
dGV4dHVyZVVuaXRzLnNpemUoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiYWN0aXZlVGV4dHVyZSIsICJ0ZXh0dXJlIHVuaXQg
b3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV9hY3RpdmVUZXh0
dXJlVW5pdCA9IHRleHR1cmUgLSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTA7Ci0gICAgbV9j
b250ZXh0LT5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZl
cikKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRBY3RpdmVUZXh0dXJlVW5pdCh0ZXh0dXJl
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmF0dGFjaFNoYWRlcihXZWJHTFBy
b2dyYW0qIHByb2dyYW0sIFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYXR0YWNoU2hhZGVyIiwgcHJvZ3JhbSkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImF0dGFjaFNoYWRlciIsIHNoYWRlcikpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIXByb2dyYW0tPmF0dGFjaFNoYWRlcihzaGFkZXIpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImF0
dGFjaFNoYWRlciIsICJzaGFkZXIgYXR0YWNobWVudCBhbHJlYWR5IGhhcyBzaGFkZXIiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmF0dGFjaFNoYWRlcihvYmplY3RP
clplcm8ocHJvZ3JhbSksIG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAgICBzaGFkZXItPm9uQXR0
YWNoZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRBdHRyaWJMb2Nh
dGlvbihXZWJHTFByb2dyYW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcm
IG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiYmlu
ZEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZh
bGlkYXRlTG9jYXRpb25MZW5ndGgoImJpbmRBdHRyaWJMb2NhdGlvbiIsIG5hbWUpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVN0cmluZygiYmluZEF0dHJpYkxvY2F0aW9uIiwg
bmFtZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoaXNQcmVmaXhSZXNlcnZlZChuYW1lKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJiaW5kQXR0cmliTG9jYXRpb24iLCAicmVzZXJ2ZWQgcHJlZml4Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImJpbmRBdHRyaWJMb2NhdGlvbiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmJpbmRBdHRyaWJMb2NhdGlvbihvYmpl
Y3RPclplcm8ocHJvZ3JhbSksIGluZGV4LCBuYW1lKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmNoZWNrT2JqZWN0VG9CZUJvdW5kKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwg
V2ViR0xPYmplY3QqIG9iamVjdCwgYm9vbCYgZGVsZXRlZCkKLXsKLSAgICBkZWxldGVkID0gZmFs
c2U7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChvYmplY3QpIHsKLSAgICAgICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNv
bnRleHRHcm91cCgpLCB0aGlzKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJvYmplY3Qg
bm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICAgICAgZGVsZXRlZCA9ICFvYmplY3QtPm9iamVjdCgpOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRCdWZmZXIo
R0MzRGVudW0gdGFyZ2V0LCBXZWJHTEJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGJvb2wgZGVsZXRlZDsKLSAgICBpZiAoIWNo
ZWNrT2JqZWN0VG9CZUJvdW5kKCJiaW5kQnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBidWZmZXIgPSAwOwotICAgIGlm
IChidWZmZXIgJiYgYnVmZmVyLT5nZXRUYXJnZXQoKSAmJiBidWZmZXItPmdldFRhcmdldCgpICE9
IHRhcmdldCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJiaW5kQnVmZmVyIiwgImJ1ZmZlcnMgY2FuIG5vdCBiZSB1c2Vk
IHdpdGggbXVsdGlwbGUgdGFyZ2V0cyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
ICh0YXJnZXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUikKLSAgICAgICAgbV9i
b3VuZEFycmF5QnVmZmVyID0gYnVmZmVyOwotICAgIGVsc2UgaWYgKHRhcmdldCA9PSBHcmFwaGlj
c0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIpCi0gICAgICAgIG1fYm91bmRWZXJ0ZXhB
cnJheU9iamVjdC0+c2V0RWxlbWVudEFycmF5QnVmZmVyKGJ1ZmZlcik7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0s
ICJiaW5kQnVmZmVyIiwgImludmFsaWQgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIodGFyZ2V0LCBvYmplY3RPclplcm8oYnVmZmVy
KSk7Ci0gICAgaWYgKGJ1ZmZlcikKLSAgICAgICAgYnVmZmVyLT5zZXRUYXJnZXQodGFyZ2V0KTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51
bSB0YXJnZXQsIFdlYkdMRnJhbWVidWZmZXIqIGJ1ZmZlciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBib29sIGRlbGV0ZWQ7Ci0gICAgaWYgKCFjaGVj
a09iamVjdFRvQmVCb3VuZCgiYmluZEZyYW1lYnVmZmVyIiwgYnVmZmVyLCBkZWxldGVkKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBidWZmZXIgPSAwOwotICAg
IGlmICh0YXJnZXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5k
RnJhbWVidWZmZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZyA9IGJ1ZmZlcjsKLSAgICBpZiAobV9kcmF3aW5nQnVm
ZmVyKQotICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZyhvYmpl
Y3RPclplcm8obV9mcmFtZWJ1ZmZlckJpbmRpbmcuZ2V0KCkpKTsKLSAgICBpZiAoIW1fZnJhbWVi
dWZmZXJCaW5kaW5nICYmIG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBJbnN0ZWFkIG9m
IGJpbmRpbmcgZmIgMCwgYmluZCB0aGUgZHJhd2luZyBidWZmZXIuCi0gICAgICAgIG1fZHJhd2lu
Z0J1ZmZlci0+YmluZCgpOwotICAgIH0gZWxzZQotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcih0YXJnZXQsIG9iamVjdE9yWmVybyhidWZmZXIpKTsKLSAgICBpZiAoYnVmZmVyKQot
ICAgICAgICBidWZmZXItPnNldEhhc0V2ZXJCZWVuQm91bmQoKTsKLSAgICBhcHBseVN0ZW5jaWxU
ZXN0KCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiaW5kUmVuZGVyYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlckJ1ZmZlciwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBib29sIGRlbGV0ZWQ7
Ci0gICAgaWYgKCFjaGVja09iamVjdFRvQmVCb3VuZCgiYmluZFJlbmRlcmJ1ZmZlciIsIHJlbmRl
ckJ1ZmZlciwgZGVsZXRlZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZGVsZXRlZCkKLSAg
ICAgICAgcmVuZGVyQnVmZmVyID0gMDsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImJpbmRSZW5kZXJidWZmZXIiLCAiaW52YWxpZCB0YXJn
ZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcg
PSByZW5kZXJCdWZmZXI7Ci0gICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwg
b2JqZWN0T3JaZXJvKHJlbmRlckJ1ZmZlcikpOwotICAgIGlmIChyZW5kZXJCdWZmZXIpCi0gICAg
ICAgIHJlbmRlckJ1ZmZlci0+c2V0SGFzRXZlckJlZW5Cb3VuZCgpOwotfQotCi12b2lkIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBXZWJHTFRleHR1
cmUqIHRleHR1cmUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgYm9vbCBkZWxldGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoImJpbmRU
ZXh0dXJlIiwgdGV4dHVyZSwgZGVsZXRlZCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoZGVs
ZXRlZCkKLSAgICAgICAgdGV4dHVyZSA9IDA7Ci0gICAgaWYgKHRleHR1cmUgJiYgdGV4dHVyZS0+
Z2V0VGFyZ2V0KCkgJiYgdGV4dHVyZS0+Z2V0VGFyZ2V0KCkgIT0gdGFyZ2V0KSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImJpbmRUZXh0dXJlIiwgInRleHR1cmVzIGNhbiBub3QgYmUgdXNlZCB3aXRoIG11bHRpcGxlIHRh
cmdldHMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBHQzNEaW50IG1heExldmVsID0g
MDsKLSAgICBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKSB7Ci0g
ICAgICAgIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4dHVyZVVuaXRdLnRleHR1cmUyREJpbmRp
bmcgPSB0ZXh0dXJlOwotICAgICAgICBtYXhMZXZlbCA9IG1fbWF4VGV4dHVyZUxldmVsOwotCi0g
ICAgICAgIGlmIChtX2RyYXdpbmdCdWZmZXIgJiYgIW1fYWN0aXZlVGV4dHVyZVVuaXQpCi0gICAg
ICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFRleHR1cmUyREJpbmRpbmcob2JqZWN0T3JaZXJv
KHRleHR1cmUpKTsKLQotICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQKSB7Ci0gICAgICAgIG1fdGV4dHVyZVVuaXRzW21fYWN0aXZlVGV4
dHVyZVVuaXRdLnRleHR1cmVDdWJlTWFwQmluZGluZyA9IHRleHR1cmU7Ci0gICAgICAgIG1heExl
dmVsID0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVsOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJiaW5kVGV4
dHVyZSIsICJpbnZhbGlkIHRhcmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1f
Y29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCBvYmplY3RPclplcm8odGV4dHVyZSkpOwotICAg
IGlmICh0ZXh0dXJlKQotICAgICAgICB0ZXh0dXJlLT5zZXRUYXJnZXQodGFyZ2V0LCBtYXhMZXZl
bCk7Ci0KLSAgICAvLyBOb3RlOiBwcmV2aW91c2x5IHdlIHVzZWQgdG8gYXV0b21hdGljYWxseSBz
ZXQgdGhlIFRFWFRVUkVfV1JBUF9SCi0gICAgLy8gcmVwZWF0IG1vZGUgdG8gQ0xBTVBfVE9fRURH
RSBmb3IgY3ViZSBtYXAgdGV4dHVyZXMsIGJlY2F1c2UgT3BlbkdMCi0gICAgLy8gRVMgMi4wIGRv
ZXNuJ3QgZXhwb3NlIHRoaXMgZmxhZyAoYSBidWcgaW4gdGhlIHNwZWNpZmljYXRpb24pIGFuZAot
ICAgIC8vIG90aGVyd2lzZSB0aGUgYXBwbGljYXRpb24gaGFzIG5vIGNvbnRyb2wgb3ZlciB0aGUg
c2VhbXMgaW4gdGhpcwotICAgIC8vIGRpbWVuc2lvbi4gSG93ZXZlciwgaXQgYXBwZWFycyB0aGF0
IHN1cHBvcnRpbmcgdGhpcyBwcm9wZXJseSBvbiBhbGwKLSAgICAvLyBwbGF0Zm9ybXMgaXMgZmFp
cmx5IGludm9sdmVkICh3aWxsIHJlcXVpcmUgYSBIYXNoTWFwIGZyb20gdGV4dHVyZSBJRAotICAg
IC8vIGluIGFsbCBwb3J0cyksIGFuZCB3ZSBoYXZlIG5vdCBoYWQgYW55IGNvbXBsYWludHMsIHNv
IHRoZSBsb2dpYyBoYXMKLSAgICAvLyBiZWVuIHJlbW92ZWQuCi19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpibGVuZENvbG9yKEdDM0RmbG9hdCByZWQsIEdDM0RmbG9hdCBncmVlbiwg
R0MzRGZsb2F0IGJsdWUsIEdDM0RmbG9hdCBhbHBoYSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZENvbG9y
KHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKK1dlYkdMMVJlbmRlcmluZ0NvbnRleHQ6
OldlYkdMMVJlbmRlcmluZ0NvbnRleHQoSFRNTENhbnZhc0VsZW1lbnQqIHBhc3NlZENhbnZhcywg
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcykKKyAgICA6IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2UocGFzc2VkQ2FudmFzLCBhdHRyaWJ1dGVzKQogewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlQmxlbmRFcXVhdGlvbigiYmxlbmRF
cXVhdGlvbiIsIG1vZGUpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEVx
dWF0aW9uKG1vZGUpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmxlbmRFcXVh
dGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKLXsKLSAg
ICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZUJsZW5kRXF1YXRpb24o
ImJsZW5kRXF1YXRpb24iLCBtb2RlUkdCKSB8fCAhdmFsaWRhdGVCbGVuZEVxdWF0aW9uKCJibGVu
ZEVxdWF0aW9uIiwgbW9kZUFscGhhKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+
YmxlbmRFcXVhdGlvblNlcGFyYXRlKG1vZGVSR0IsIG1vZGVBbHBoYSk7Ci19Ci0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuYyhHQzNEZW51bSBzZmFjdG9yLCBHQzNEZW51
bSBkZmFjdG9yKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlQmxlbmRGdW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc2ZhY3RvciwgZGZhY3RvcikpCi0gICAg
ICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhzZmFjdG9yLCBkZmFjdG9yKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0Rl
bnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0g
ZHN0QWxwaGEpCi17Ci0gICAgLy8gTm90ZTogQWxwaGEgZG9lcyBub3QgaGF2ZSB0aGUgc2FtZSBy
ZXN0cmljdGlvbnMgYXMgUkdCLgotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlQmxlbmRGdW5jRmFjdG9ycygiYmxlbmRGdW5jIiwgc3JjUkdCLCBkc3RSR0IpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5ibGVuZEZ1bmNTZXBhcmF0ZShzcmNSR0Is
IGRzdFJHQiwgc3JjQWxwaGEsIGRzdEFscGhhKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBsb25nIGxvbmcgc2l6ZSwgR0MzRGVu
dW0gdXNhZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdl
YkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJE
YXRhIiwgdGFyZ2V0LCB1c2FnZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoc2l6ZSA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJidWZmZXJEYXRhIiwgInNpemUgPCAwIik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCFzaXplKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiYnVmZmVyRGF0YSIsICJz
aXplID09IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIWlzRXJyb3JHZW5l
cmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNz
b2NpYXRlQnVmZmVyRGF0YShzdGF0aWNfY2FzdDxHQzNEc2l6ZWlwdHI+KHNpemUpKSkgewotICAg
ICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUsICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpOwotICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHN0YXRpY19j
YXN0PEdDM0RzaXplaXB0cj4oc2l6ZSksIHVzYWdlKTsKLSAgICBpZiAobV9jb250ZXh0LT5tb3Zl
RXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAvLyBUaGUgYnVmZmVyRGF0
YSBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIGJ1ZmZlciBpdCBkb2Vzbid0IGhhdmUgdGhlIGRh
dGEgaXQgdGhpbmtzIGl0IGRvZXMuCi0gICAgICAgIGJ1ZmZlci0+ZGlzYXNzb2NpYXRlQnVmZmVy
RGF0YSgpOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJ1ZmZlckRh
dGEoR0MzRGVudW0gdGFyZ2V0LCBBcnJheUJ1ZmZlciogZGF0YSwgR0MzRGVudW0gdXNhZ2UsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMQnVmZmVyKiBi
dWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJEYXRhIiwgdGFyZ2V0
LCB1c2FnZSk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWRh
dGEpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfVkFMVUUsICJidWZmZXJEYXRhIiwgIm5vIGRhdGEiKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewot
ICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRlQnVmZmVyRGF0YShkYXRhKSkgewotICAgICAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
ICJidWZmZXJEYXRhIiwgImludmFsaWQgYnVmZmVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vy
cm9yTGlzdCgpOwotICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIGRhdGEtPmJ5dGVM
ZW5ndGgoKSwgZGF0YS0+ZGF0YSgpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4dC0+bW92ZUVy
cm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1ZmZlckRhdGEg
ZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZlIHRoZSBkYXRh
IGl0IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0ZUJ1ZmZlckRh
dGEoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpidWZmZXJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhLCBHQzNEZW51bSB1c2FnZSwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXND
b250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIq
IGJ1ZmZlciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlckRhdGEiLCB0YXJn
ZXQsIHVzYWdlKTsKLSAgICBpZiAoIWJ1ZmZlcikKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICgh
ZGF0YSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImJ1ZmZlckRhdGEiLCAibm8gZGF0YSIpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nlc3NlcygpKSB7
Ci0gICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJEYXRhKGRhdGEpKSB7Ci0gICAg
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxV
RSwgImJ1ZmZlckRhdGEiLCAiaW52YWxpZCBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdldCwgZGF0YS0+Ynl0
ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpLCB1c2FnZSk7Ci0gICAgaWYgKG1fY29udGV4
dC0+bW92ZUVycm9yc1RvU3ludGhldGljRXJyb3JMaXN0KCkpIHsKLSAgICAgICAgLy8gVGhlIGJ1
ZmZlckRhdGEgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBidWZmZXIgaXQgZG9lc24ndCBoYXZl
IHRoZSBkYXRhIGl0IHRoaW5rcyBpdCBkb2VzLgotICAgICAgICBidWZmZXItPmRpc2Fzc29jaWF0
ZUJ1ZmZlckRhdGEoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
dWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgbG9uZyBsb25nIG9mZnNldCwgQXJyYXlCdWZm
ZXIqIGRhdGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0g
ICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdl
YkdMQnVmZmVyKiBidWZmZXIgPSB2YWxpZGF0ZUJ1ZmZlckRhdGFQYXJhbWV0ZXJzKCJidWZmZXJT
dWJEYXRhIiwgdGFyZ2V0LCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwotICAgIGlm
ICghYnVmZmVyKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKG9mZnNldCA8IDApIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJi
dWZmZXJTdWJEYXRhIiwgIm9mZnNldCA8IDAiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoIWRhdGEpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzRXJyb3JHZW5lcmF0ZWRP
bk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICBpZiAoIWJ1ZmZlci0+YXNzb2NpYXRl
QnVmZmVyU3ViRGF0YShzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhKSkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
VkFMVUUsICJidWZmZXJTdWJEYXRhIiwgIm9mZnNldCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bW92ZUVycm9y
c1RvU3ludGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRh
cmdldCwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgZGF0YS0+Ynl0ZUxlbmd0aCgp
LCBkYXRhLT5kYXRhKCkpOwotICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRp
Y0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZh
aWxlZC4gVGVsbCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3Mg
aXQgZG9lcy4KLSAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAg
fQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YnVmZmVyU3ViRGF0YShHQzNEZW51
bSB0YXJnZXQsIGxvbmcgbG9uZyBvZmZzZXQsIEFycmF5QnVmZmVyVmlldyogZGF0YSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgV2ViR0xCdWZmZXIqIGJ1ZmZl
ciA9IHZhbGlkYXRlQnVmZmVyRGF0YVBhcmFtZXRlcnMoImJ1ZmZlclN1YkRhdGEiLCB0YXJnZXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7Ci0gICAgaWYgKCFidWZmZXIpCi0gICAg
ICAgIHJldHVybjsKLSAgICBpZiAob2Zmc2V0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1YkRhdGEiLCAi
b2Zmc2V0IDwgMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghZGF0YSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3VuZHNBY2Nl
c3NlcygpKSB7Ci0gICAgICAgIGlmICghYnVmZmVyLT5hc3NvY2lhdGVCdWZmZXJTdWJEYXRhKHN0
YXRpY19jYXN0PEdDM0RpbnRwdHI+KG9mZnNldCksIGRhdGEpKSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImJ1ZmZlclN1
YkRhdGEiLCAib2Zmc2V0IG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJv
ckxpc3QoKTsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBzdGF0aWNfY2Fz
dDxHQzNEaW50cHRyPihvZmZzZXQpLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRy
ZXNzKCkpOwotICAgIGlmIChtX2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlz
dCgpKSB7Ci0gICAgICAgIC8vIFRoZSBidWZmZXJTdWJEYXRhIGZ1bmN0aW9uIGZhaWxlZC4gVGVs
bCB0aGUgYnVmZmVyIGl0IGRvZXNuJ3QgaGF2ZSB0aGUgZGF0YSBpdCB0aGlua3MgaXQgZG9lcy4K
LSAgICAgICAgYnVmZmVyLT5kaXNhc3NvY2lhdGVCdWZmZXJEYXRhKCk7Ci0gICAgfQotfQotCi1H
QzNEZW51bSBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0Mz
RGVudW0gdGFyZ2V0KQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAg
ICAgIHJldHVybiBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0g
ICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpIHsKLSAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZm
ZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUl9DT01QTEVURTsKLSAgICBjb25zdCBjaGFyKiByZWFzb24gPSAiZnJhbWVidWZm
ZXIgaW5jb21wbGV0ZSI7Ci0gICAgR0MzRGVudW0gcmVzdWx0ID0gbV9mcmFtZWJ1ZmZlckJpbmRp
bmctPmNoZWNrU3RhdHVzKCZyZWFzb24pOwotICAgIGlmIChyZXN1bHQgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7Ci0gICAgICAgIHByaW50R0xXYXJuaW5nVG9D
b25zb2xlKCJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIiwgcmVhc29uKTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0gICAgcmVzdWx0ID0gbV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKHRhcmdldCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAobWFzayAmIH4oR3Jh
cGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQlVGRkVSX0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZB
TFVFLCAiY2xlYXIiLCAiaW52YWxpZCBtYXNrIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29tcGxldGUiOwotICAgIGlm
IChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNz
KGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAmcmVhc29uKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJV
RkZFUl9PUEVSQVRJT04sICJjbGVhciIsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKCFjbGVhcklmQ29tcG9zaXRlZChtYXNrKSkKLSAgICAgICAgbV9jb250ZXh0LT5j
bGVhcihtYXNrKTsKLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyQ29sb3IoR0MzRGZsb2F0IHIsIEdDM0RmbG9hdCBnLCBHQzNE
ZmxvYXQgYiwgR0MzRGZsb2F0IGEpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChzdGQ6OmlzbmFuKHIpKQotICAgICAgICByID0g
MDsKLSAgICBpZiAoc3RkOjppc25hbihnKSkKLSAgICAgICAgZyA9IDA7Ci0gICAgaWYgKHN0ZDo6
aXNuYW4oYikpCi0gICAgICAgIGIgPSAwOwotICAgIGlmIChzdGQ6OmlzbmFuKGEpKQotICAgICAg
ICBhID0gMTsKLSAgICBtX2NsZWFyQ29sb3JbMF0gPSByOwotICAgIG1fY2xlYXJDb2xvclsxXSA9
IGc7Ci0gICAgbV9jbGVhckNvbG9yWzJdID0gYjsKLSAgICBtX2NsZWFyQ29sb3JbM10gPSBhOwot
ICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmNsZWFyRGVwdGgoR0MzRGZsb2F0IGRlcHRoKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NsZWFyRGVw
dGggPSBkZXB0aDsKLSAgICBtX2NvbnRleHQtPmNsZWFyRGVwdGgoZGVwdGgpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jbGVh
clN0ZW5jaWwgPSBzOwotICAgIG1fY29udGV4dC0+Y2xlYXJTdGVuY2lsKHMpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJv
b2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bG9yTWFza1swXSA9IHJlZDsKLSAgICBtX2NvbG9yTWFza1sxXSA9IGdyZWVuOwotICAgIG1fY29s
b3JNYXNrWzJdID0gYmx1ZTsKLSAgICBtX2NvbG9yTWFza1szXSA9IGFscGhhOwotICAgIG1fY29u
dGV4dC0+Y29sb3JNYXNrKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OmNvbXBpbGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJjb21waWxlU2hhZGVy
Iiwgc2hhZGVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+Y29tcGlsZVNoYWRl
cihvYmplY3RPclplcm8oc2hhZGVyKSk7Ci0gICAgR0MzRGludCB2YWx1ZTsKLSAgICBtX2NvbnRl
eHQtPmdldFNoYWRlcml2KG9iamVjdE9yWmVybyhzaGFkZXIpLCBHcmFwaGljc0NvbnRleHQzRDo6
Q09NUElMRV9TVEFUVVMsICZ2YWx1ZSk7Ci0gICAgc2hhZGVyLT5zZXRWYWxpZCh2YWx1ZSk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpjb21wcmVzc2VkVGV4SW1hZ2UyRChHQzNE
ZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNE
c2l6ZWkgd2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEFycmF5QnVmZmVyVmlldyog
ZGF0YSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNMZXZlbCgiY29tcHJlc3NlZFRleEltYWdlMkQi
LCB0YXJnZXQsIGxldmVsKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCF2YWxpZGF0ZUNv
bXByZXNzZWRUZXhGb3JtYXQoaW50ZXJuYWxmb3JtYXQpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJjb21wcmVzc2VkVGV4SW1h
Z2UyRCIsICJpbnZhbGlkIGludGVybmFsZm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgaWYgKGJvcmRlcikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNzZWRUZXhJbWFnZTJEIiwgImJvcmRlciBu
b3QgMCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVDb21wcmVz
c2VkVGV4RGltZW5zaW9ucygiY29tcHJlc3NlZFRleEltYWdlMkQiLCB0YXJnZXQsIGxldmVsLCB3
aWR0aCwgaGVpZ2h0LCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAo
IXZhbGlkYXRlQ29tcHJlc3NlZFRleEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4SW1hZ2UyRCIsIHdp
ZHRoLCBoZWlnaHQsIGludGVybmFsZm9ybWF0LCBkYXRhKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgV2ViR0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJjb21wcmVzc2Vk
VGV4SW1hZ2UyRCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVy
bjsKLSAgICBpZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpIHsKLSAgICAgICAgaWYgKGxldmVsICYm
IFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvbXByZXNz
ZWRUZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93ZXIgb2YgMiIpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3lu
dGhldGljRXJyb3JMaXN0KCk7Ci0gICAgbV9jb250ZXh0LT5jb21wcmVzc2VkVGV4SW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgYm9y
ZGVyLCBkYXRhLT5ieXRlTGVuZ3RoKCksIGRhdGEtPmJhc2VBZGRyZXNzKCkpOwotICAgIGlmICht
X2NvbnRleHQtPm1vdmVFcnJvcnNUb1N5bnRoZXRpY0Vycm9yTGlzdCgpKSB7Ci0gICAgICAgIC8v
IFRoZSBjb21wcmVzc2VkVGV4SW1hZ2UyRCBmdW5jdGlvbiBmYWlsZWQuIFRlbGwgdGhlIFdlYkdM
VGV4dHVyZSBpdCBkb2Vzbid0IGhhdmUgdGhlIGRhdGEgZm9yIHRoaXMgbGV2ZWwuCi0gICAgICAg
IHRleC0+bWFya0ludmFsaWQodGFyZ2V0LCBsZXZlbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwg
d2lkdGgsIGhlaWdodCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwotICAgIHRl
eC0+c2V0Q29tcHJlc3NlZCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29t
cHJlc3NlZFRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
aW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQsIEdDM0RlbnVtIGZvcm1hdCwgQXJyYXlCdWZmZXJWaWV3KiBkYXRhKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIXZhbGlk
YXRlVGV4RnVuY0xldmVsKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHRhcmdldCwgbGV2ZWwp
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQo
Zm9ybWF0KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCAiaW52YWxpZCBmb3JtYXQi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3NlZFRl
eEZ1bmNEYXRhKCJjb21wcmVzc2VkVGV4U3ViSW1hZ2UyRCIsIHdpZHRoLCBoZWlnaHQsIGZvcm1h
dCwgZGF0YSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFs
aWRhdGVUZXh0dXJlQmluZGluZygiY29tcHJlc3NlZFRleFN1YkltYWdlMkQiLCB0YXJnZXQsIHRy
dWUpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZm9ybWF0ICE9
IHRleC0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhl
c2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29tcHJl
c3NlZFRleFN1YkltYWdlMkQiLCAiZm9ybWF0IGRvZXMgbm90IG1hdGNoIHRleHR1cmUgZm9ybWF0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlQ29tcHJlc3Nl
ZFRleFN1YkRpbWVuc2lvbnMoImNvbXByZXNzZWRUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCBsZXZl
bCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0ZXgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBncmFwaGljc0NvbnRleHQzRCgpLT5jb21wcmVzc2VkVGV4U3ViSW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgZGF0
YS0+Ynl0ZUxlbmd0aCgpLCBkYXRhLT5iYXNlQWRkcmVzcygpKTsKLSAgICB0ZXgtPnNldENvbXBy
ZXNzZWQoKTsKKyAgICBtX3R5cGUgPSAid2ViZ2wxIjsKIH0KIAotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlU2V0dGFibGVUZXhGb3JtYXQoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLCBHQzNEZW51bSBmb3JtYXQpCitXZWJHTDFSZW5kZXJpbmdDb250ZXh0OjpXZWJHTDFSZW5k
ZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBhc3NSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsCisgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cmlidXRlcykgOiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlKHBhc3NlZENhbnZh
cywgY29udGV4dCwgYXR0cmlidXRlcykKIHsKLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dENsZWFyQml0c0J5Rm9ybWF0KGZvcm1hdCkgJiAoR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JV
RkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklUKSkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJ
T04sIGZ1bmN0aW9uTmFtZSwgImZvcm1hdCBjYW4gbm90IGJlIHNldCwgb25seSByZW5kZXJlZCB0
byIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOworICAg
IG1fdHlwZSA9ICJ3ZWJnbDEiOwogfQogCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Y29w
eVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRl
cm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBl
bmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1l
dGVycygiY29weVRleEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCB0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBpbnRlcm5hbGZvcm1hdCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJjb3B5VGV4SW1hZ2UyRCIsIGludGVybmFsZm9y
bWF0KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVU
ZXh0dXJlQmluZGluZygiY29weVRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmICgh
dGV4KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFpc1RleEludGVybmFsRm9ybWF0Q29sb3JC
dWZmZXJDb21iaW5hdGlvblZhbGlkKGludGVybmFsZm9ybWF0LCBnZXRCb3VuZEZyYW1lYnVmZmVy
Q29sb3JGb3JtYXQoKSkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiY29weVRleEltYWdlMkQiLCAiZnJhbWVidWZmZXIg
aXMgaW5jb21wYXRpYmxlIGZvcm1hdCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
ICghaXNHTEVTMk5QT1RTdHJpY3QoKSAmJiBsZXZlbCAmJiBXZWJHTFRleHR1cmU6OmlzTlBPVCh3
aWR0aCwgaGVpZ2h0KSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgImNvcHlUZXhJbWFnZTJEIiwgImxldmVsID4gMCBub3QgcG93
ZXIgb2YgMiIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNvbnN0IGNoYXIqIHJlYXNv
biA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBpZiAobV9mcmFtZWJ1ZmZlckJpbmRp
bmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2VzcyhncmFwaGljc0NvbnRleHQzRCgp
LCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OLCAiY29w
eVRleEltYWdlMkQiLCByZWFzb24pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNsZWFy
SWZDb21wb3NpdGVkKCk7Ci0gICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpIHsKLSAgICAgICAgU2Nv
cGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2Zy
YW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgIG1fY29udGV4dC0+Y29weVRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJv
cmRlcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBi
aW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7
Ci0gICAgICAgIEdDM0RpbnQgY2xpcHBlZFgsIGNsaXBwZWRZOwotICAgICAgICBHQzNEc2l6ZWkg
Y2xpcHBlZFdpZHRoLCBjbGlwcGVkSGVpZ2h0OwotICAgICAgICBpZiAoY2xpcDJEKHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpLCBnZXRCb3VuZEZyYW1lYnVm
ZmVySGVpZ2h0KCksICZjbGlwcGVkWCwgJmNsaXBwZWRZLCAmY2xpcHBlZFdpZHRoLCAmY2xpcHBl
ZEhlaWdodCkpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2Fm
ZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybmFsZm9y
bWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgbV91bnBhY2tBbGlnbm1lbnQp
OwotICAgICAgICAgICAgaWYgKGNsaXBwZWRXaWR0aCA+IDAgJiYgY2xpcHBlZEhlaWdodCA+IDAp
IHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlUZXhTdWJJbWFnZTJEKHRhcmdldCwg
bGV2ZWwsIGNsaXBwZWRYIC0geCwgY2xpcHBlZFkgLSB5LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgs
IGNsaXBwZWRIZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Ci0gICAgfQotICAgIC8vIEZJWE1FOiBp
ZiB0aGUgZnJhbWVidWZmZXIgaXMgbm90IGNvbXBsZXRlLCBub25lIG9mIHRoZSBiZWxvdyBzaG91
bGQgYmUgZXhlY3V0ZWQuCi0gICAgdGV4LT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZlbCwgaW50
ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9C
WVRFKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNvcHlUZXhTdWJJbWFnZTJE
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50
IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXpl
aSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jTGV2ZWwoImNvcHlUZXhTdWJJbWFnZTJE
IiwgdGFyZ2V0LCBsZXZlbCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJHTFRleHR1cmUqIHRl
eCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImNvcHlUZXhTdWJJbWFnZTJEIiwgdGFyZ2V0LCB0
cnVlKTsKLSAgICBpZiAoIXRleCkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVT
aXplKCJjb3B5VGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpIHx8ICF2YWxpZGF0ZVNp
emUoImNvcHlUZXhTdWJJbWFnZTJEIiwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAvLyBCZWZvcmUgY2hlY2tpbmcgaWYgaXQgaXMgaW4gdGhlIHJhbmdlLCBjaGVjayBpZiBv
dmVyZmxvdyBoYXBwZW5zIGZpcnN0LgotICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPCAwIHx8IHlv
ZmZzZXQgKyBoZWlnaHQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiY29weVRleFN1YkltYWdlMkQiLCAiYmFkIGRpbWVu
c2lvbnMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoeG9mZnNldCArIHdpZHRo
ID4gdGV4LT5nZXRXaWR0aCh0YXJnZXQsIGxldmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4
LT5nZXRIZWlnaHQodGFyZ2V0LCBsZXZlbCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJjb3B5VGV4U3ViSW1hZ2UyRCIsICJy
ZWN0YW5nbGUgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgR0Mz
RGVudW0gaW50ZXJuYWxmb3JtYXQgPSB0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2
ZWwpOwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgiY29weVRleFN1YkltYWdl
MkQiLCBpbnRlcm5hbGZvcm1hdCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoIWlzVGV4SW50
ZXJuYWxGb3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoaW50ZXJuYWxmb3JtYXQsIGdl
dEJvdW5kRnJhbWVidWZmZXJDb2xvckZvcm1hdCgpKSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJjb3B5VGV4U3ViSW1h
Z2UyRCIsICJmcmFtZWJ1ZmZlciBpcyBpbmNvbXBhdGlibGUgZm9ybWF0Iik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVyIGluY29t
cGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1ZmZlckJp
bmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2FmZSgpLCAm
cmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJjb3B5VGV4U3ViSW1hZ2UyRCIsIHJlYXNv
bik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAg
ICBpZiAoaXNSZXNvdXJjZVNhZmUoKSkgewotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmlu
ZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdl
dCgpKTsKLSAgICAgICAgbV9jb250ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICBHQzNEaW50IGNsaXBwZWRYLCBjbGlwcGVkWTsKLSAgICAgICAgR0MzRHNpemVpIGNs
aXBwZWRXaWR0aCwgY2xpcHBlZEhlaWdodDsKLSAgICAgICAgaWYgKGNsaXAyRCh4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBnZXRCb3VuZEZyYW1lYnVmZmVyV2lkdGgoKSwgZ2V0Qm91bmRGcmFtZWJ1ZmZl
ckhlaWdodCgpLCAmY2xpcHBlZFgsICZjbGlwcGVkWSwgJmNsaXBwZWRXaWR0aCwgJmNsaXBwZWRI
ZWlnaHQpKSB7Ci0gICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQgPSB0ZXgtPmdldEludGVybmFs
Rm9ybWF0KHRhcmdldCwgbGV2ZWwpOwotICAgICAgICAgICAgR0MzRGVudW0gdHlwZSA9IHRleC0+
Z2V0VHlwZSh0YXJnZXQsIGxldmVsKTsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjx1bnNp
Z25lZCBjaGFyW10+IHplcm87Ci0gICAgICAgICAgICBpZiAod2lkdGggJiYgaGVpZ2h0KSB7Ci0g
ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemU7Ci0gICAgICAgICAgICAgICAgR0MzRGVu
dW0gZXJyb3IgPSBtX2NvbnRleHQtPmNvbXB1dGVJbWFnZVNpemVJbkJ5dGVzKGZvcm1hdCwgdHlw
ZSwgd2lkdGgsIGhlaWdodCwgbV91bnBhY2tBbGlnbm1lbnQsICZzaXplLCAwKTsKLSAgICAgICAg
ICAgICAgICBpZiAoZXJyb3IgIT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKGVycm9yLCAiY29weVRleFN1YkltYWdl
MkQiLCAiYmFkIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB6ZXJvID0gc3RkOjptYWtlX3VuaXF1ZTx1
bnNpZ25lZCBjaGFyW10+KHNpemUpOwotICAgICAgICAgICAgICAgIGlmICghemVybykgewotICAg
ICAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgImNvcHlUZXhTdWJJbWFnZTJEIiwgIm91dCBvZiBtZW1vcnkiKTsKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBtZW1zZXQoemVyby5nZXQoKSwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNl
dCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCB6ZXJvLmdldCgpKTsKLSAgICAgICAgICAg
IGlmIChjbGlwcGVkV2lkdGggPiAwICYmIGNsaXBwZWRIZWlnaHQgPiAwKSB7Ci0gICAgICAgICAg
ICAgICAgU2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdl
dCgpLCBtX2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgbV9jb250
ZXh0LT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0ICsgY2xpcHBlZFgg
LSB4LCB5b2Zmc2V0ICsgY2xpcHBlZFkgLSB5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2xpcHBlZFgsIGNsaXBwZWRZLCBjbGlwcGVkV2lkdGgsIGNsaXBw
ZWRIZWlnaHQpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
U2NvcGVkRHJhd2luZ0J1ZmZlckJpbmRlciBiaW5kZXIobV9kcmF3aW5nQnVmZmVyLmdldCgpLCBt
X2ZyYW1lYnVmZmVyQmluZGluZy5nZXQoKSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmNvcHlU
ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRo
LCBoZWlnaHQpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1QYXNzUmVmUHRyPFdlYkdMQnVmZmVy
PiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZUJ1ZmZlcigpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRy
PFdlYkdMQnVmZmVyPiBvID0gV2ViR0xCdWZmZXI6OmNyZWF0ZSh0aGlzKTsKLSAgICBhZGRTaGFy
ZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0dXJuIG87Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xG
cmFtZWJ1ZmZlcj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGcmFtZWJ1ZmZlcigpCi17
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgUmVmUHRyPFdlYkdMRnJhbWVidWZmZXI+IG8gPSBXZWJHTEZyYW1lYnVmZmVyOjpj
cmVhdGUodGhpcyk7Ci0gICAgYWRkQ29udGV4dE9iamVjdChvLmdldCgpKTsKLSAgICByZXR1cm4g
bzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFRleHR1cmU+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
Y3JlYXRlVGV4dHVyZSgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbyA9IFdlYkdM
VGV4dHVyZTo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZFNoYXJlZE9iamVjdChvLmdldCgpKTsKLSAg
ICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFByb2dyYW0+IFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Y3JlYXRlUHJvZ3JhbSgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgUmVmUHRyPFdlYkdMUHJvZ3JhbT4g
byA9IFdlYkdMUHJvZ3JhbTo6Y3JlYXRlKHRoaXMpOwotICAgIGFkZFNoYXJlZE9iamVjdChvLmdl
dCgpKTsKLSAgICByZXR1cm4gbzsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4g
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVSZW5kZXJidWZmZXIoKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIFJl
ZlB0cjxXZWJHTFJlbmRlcmJ1ZmZlcj4gbyA9IFdlYkdMUmVuZGVyYnVmZmVyOjpjcmVhdGUodGhp
cyk7Ci0gICAgYWRkU2hhcmVkT2JqZWN0KG8uZ2V0KCkpOwotICAgIHJldHVybiBvOwotfQotCi1Q
YXNzUmVmUHRyPFdlYkdMU2hhZGVyPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZVNoYWRl
cihHQzNEZW51bSB0eXBlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVS
ICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUikgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiY3Jl
YXRlU2hhZGVyIiwgImludmFsaWQgc2hhZGVyIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgfQotCi0gICAgUmVmUHRyPFdlYkdMU2hhZGVyPiBvID0gV2ViR0xTaGFkZXI6OmNy
ZWF0ZSh0aGlzLCB0eXBlKTsKLSAgICBhZGRTaGFyZWRPYmplY3Qoby5nZXQoKSk7Ci0gICAgcmV0
dXJuIG87Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjdWxsRmFjZShHQzNEZW51
bSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBtX2NvbnRleHQtPmN1bGxGYWNlKG1vZGUpOwotfQotCi1ib29sIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6ZGVsZXRlT2JqZWN0KFdlYkdMT2JqZWN0KiBvYmplY3QpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhb2JqZWN0KQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKCFvYmplY3QtPnZhbGlkYXRlKGNvbnRleHRHcm91cCgpLCB0aGlzKSkg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04sICJkZWxldGUiLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRl
eHQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAob2JqZWN0LT5vYmpl
Y3QoKSkKLSAgICAgICAgLy8gV2UgbmVlZCB0byBwYXNzIGluIGNvbnRleHQgaGVyZSBiZWNhdXNl
IHdlIHdhbnQKLSAgICAgICAgLy8gdGhpbmdzIGluIHRoaXMgY29udGV4dCB1bmJvdW5kLgotICAg
ICAgICBvYmplY3QtPmRlbGV0ZU9iamVjdChncmFwaGljc0NvbnRleHQzRCgpKTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZUJ1ZmZlcihX
ZWJHTEJ1ZmZlciogYnVmZmVyKQotewotICAgIGlmICghZGVsZXRlT2JqZWN0KGJ1ZmZlcikpCi0g
ICAgICAgIHJldHVybjsKLSAgICBpZiAobV9ib3VuZEFycmF5QnVmZmVyID09IGJ1ZmZlcikKLSAg
ICAgICAgbV9ib3VuZEFycmF5QnVmZmVyID0gMDsKLQotICAgIG1fYm91bmRWZXJ0ZXhBcnJheU9i
amVjdC0+dW5iaW5kQnVmZmVyKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZWxldGVGcmFtZWJ1ZmZlcihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsK
LSAgICBpZiAoIWRlbGV0ZU9iamVjdChmcmFtZWJ1ZmZlcikpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoZnJhbWVidWZmZXIgPT0gbV9mcmFtZWJ1ZmZlckJpbmRpbmcpIHsKLSAgICAgICAgbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgPSAwOwotICAgICAgICBpZiAobV9kcmF3aW5nQnVmZmVyKSB7Ci0g
ICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldEZyYW1lYnVmZmVyQmluZGluZygwKTsKLSAg
ICAgICAgICAgIC8vIEhhdmUgdG8gY2FsbCBiaW5kRnJhbWVidWZmZXIgaGVyZSB0byBiaW5kIGJh
Y2sgdG8gaW50ZXJuYWwgZmJvLgotICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5iaW5kKCk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpkZWxldGVQcm9ncmFtKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSkK
LXsKLSAgICBkZWxldGVPYmplY3QocHJvZ3JhbSk7Ci0gICAgLy8gV2UgZG9uJ3QgcmVzZXQgbV9j
dXJyZW50UHJvZ3JhbSB0byAwIGhlcmUgYmVjYXVzZSB0aGUgZGVsZXRpb24gb2YgdGhlCi0gICAg
Ly8gY3VycmVudCBwcm9ncmFtIGlzIGRlbGF5ZWQuCi19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZWxldGVSZW5kZXJidWZmZXIoV2ViR0xSZW5kZXJidWZmZXIqIHJlbmRlcmJ1ZmZl
cikKLXsKLSAgICBpZiAoIWRlbGV0ZU9iamVjdChyZW5kZXJidWZmZXIpKQotICAgICAgICByZXR1
cm47Ci0gICAgaWYgKHJlbmRlcmJ1ZmZlciA9PSBtX3JlbmRlcmJ1ZmZlckJpbmRpbmcpCi0gICAg
ICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZyA9IDA7Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5k
aW5nKQotICAgICAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+cmVtb3ZlQXR0YWNobWVudEZyb21C
b3VuZEZyYW1lYnVmZmVyKHJlbmRlcmJ1ZmZlcik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZWxldGVTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKLXsKLSAgICBkZWxldGVP
YmplY3Qoc2hhZGVyKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlbGV0ZVRl
eHR1cmUoV2ViR0xUZXh0dXJlKiB0ZXh0dXJlKQotewotICAgIGlmICghZGVsZXRlT2JqZWN0KHRl
eHR1cmUpKQotICAgICAgICByZXR1cm47Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3Rl
eHR1cmVVbml0cy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAodGV4dHVyZSA9PSBtX3RleHR1
cmVVbml0c1tpXS50ZXh0dXJlMkRCaW5kaW5nKQotICAgICAgICAgICAgbV90ZXh0dXJlVW5pdHNb
aV0udGV4dHVyZTJEQmluZGluZyA9IG51bGxwdHI7Ci0gICAgICAgIGlmICh0ZXh0dXJlID09IG1f
dGV4dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZykKLSAgICAgICAgICAgIG1fdGV4
dHVyZVVuaXRzW2ldLnRleHR1cmVDdWJlTWFwQmluZGluZyA9IG51bGxwdHI7Ci0gICAgfQotICAg
IGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmct
PnJlbW92ZUF0dGFjaG1lbnRGcm9tQm91bmRGcmFtZWJ1ZmZlcih0ZXh0dXJlKTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2Nv
bnRleHQtPmRlcHRoRnVuYyhmdW5jKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmRlcHRoTWFzayhHQzNEYm9vbGVhbiBmbGFnKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2RlcHRoTWFzayA9IGZsYWc7Ci0gICAg
bV9jb250ZXh0LT5kZXB0aE1hc2soZmxhZyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpkZXB0aFJhbmdlKEdDM0RmbG9hdCB6TmVhciwgR0MzRGZsb2F0IHpGYXIpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICh6
TmVhciA+IHpGYXIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZGVwdGhSYW5nZSIsICJ6TmVhciA+IHpGYXIiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmRlcHRoUmFuZ2Uoek5lYXIsIHpG
YXIpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZGV0YWNoU2hhZGVyKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgV2ViR0xTaGFkZXIqIHNoYWRlciwgRXhjZXB0aW9uQ29kZSYgZWMp
Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJkZXRhY2hTaGFkZXIiLCBwcm9ncmFtKSB8fCAh
dmFsaWRhdGVXZWJHTE9iamVjdCgiZGV0YWNoU2hhZGVyIiwgc2hhZGVyKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmICghcHJvZ3JhbS0+ZGV0YWNoU2hhZGVyKHNoYWRlcikpIHsKLSAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAi
ZGV0YWNoU2hhZGVyIiwgInNoYWRlciBub3QgYXR0YWNoZWQiKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLSAgICBtX2NvbnRleHQtPmRldGFjaFNoYWRlcihvYmplY3RPclplcm8ocHJvZ3JhbSks
IG9iamVjdE9yWmVybyhzaGFkZXIpKTsKLSAgICBzaGFkZXItPm9uRGV0YWNoZWQoZ3JhcGhpY3ND
b250ZXh0M0QoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpkaXNhYmxlKEdD
M0RlbnVtIGNhcCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUNhcGFiaWxpdHkoImRpc2FibGUiLCBjYXApKQotICAgICAgICByZXR1cm47Ci0gICAgaWYg
KGNhcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKSB7Ci0gICAgICAgIG1fc3Rl
bmNpbEVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNT
T1JfVEVTVCkgewotICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gZmFsc2U7Ci0gICAgICAgIGlm
IChtX2RyYXdpbmdCdWZmZXIpCi0gICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXItPnNldFNjaXNz
b3JFbmFibGVkKG1fc2Npc3NvckVuYWJsZWQpOwotICAgIH0KLSAgICBtX2NvbnRleHQtPmRpc2Fi
bGUoY2FwKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmRpc2FibGVWZXJ0ZXhB
dHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheSIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZlcnRleEF0
dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0
cmliU3RhdGUoaW5kZXgpOwotICAgIHN0YXRlLmVuYWJsZWQgPSBmYWxzZTsKLQotICAgIGlmIChp
bmRleCA+IDAgfHwgaXNHTEVTMkNvbXBsaWFudCgpKQotICAgICAgICBtX2NvbnRleHQtPmRpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp2YWxpZGF0ZUVsZW1lbnRBcnJheVNpemUoR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0
eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKLXsKLSAgICBSZWZQdHI8V2ViR0xCdWZmZXI+IGVsZW1l
bnRBcnJheUJ1ZmZlciA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5
QnVmZmVyKCk7Ci0gICAgCi0gICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGlmIChvZmZzZXQgPCAwKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfSU5UKSB7Ci0g
ICAgICAgIC8vIEZvciBhbiB1bnNpZ25lZCBpbnQgYXJyYXksIG9mZnNldCBtdXN0IGJlIGRpdmlz
aWJsZSBieSA0IGZvciBhbGlnbm1lbnQgcmVhc29ucy4KLSAgICAgICAgaWYgKG9mZnNldCAlIDQp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFu
IGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICBvZmZzZXQgLz0gNDsKLQotICAgICAgICBHQzNEc2l6
ZWlwdHIgbiA9IGVsZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpIC8gNDsKLSAgICAgICAg
aWYgKG9mZnNldCA+IG4gfHwgY291bnQgPiBuIC0gb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlQpIHsKLSAgICAgICAgLy8gRm9yIGFuIHVuc2lnbmVkIHNob3J0IGFycmF5LCBvZmZz
ZXQgbXVzdCBiZSBkaXZpc2libGUgYnkgMiBmb3IgYWxpZ25tZW50IHJlYXNvbnMuCi0gICAgICAg
IGlmIChvZmZzZXQgJSAyKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8v
IE1ha2UgdW9mZnNldCBhbiBlbGVtZW50IG9mZnNldC4KLSAgICAgICAgb2Zmc2V0IC89IDI7Ci0K
LSAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVtZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgo
KSAvIDI7Ci0gICAgICAgIGlmIChvZmZzZXQgPiBuIHx8IGNvdW50ID4gbiAtIG9mZnNldCkKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAgICAgR0MzRHNpemVpcHRyIG4gPSBlbGVt
ZW50QXJyYXlCdWZmZXItPmJ5dGVMZW5ndGgoKTsKLSAgICAgICAgaWYgKG9mZnNldCA+IG4gfHwg
Y291bnQgPiBuIC0gb2Zmc2V0KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRl
SW5kZXhBcnJheUNvbnNlcnZhdGl2ZShHQzNEZW51bSB0eXBlLCB1bnNpZ25lZCYgbnVtRWxlbWVu
dHNSZXF1aXJlZCkKLXsKLSAgICAvLyBQZXJmb3JtcyBjb25zZXJ2YXRpdmUgdmFsaWRhdGlvbiBi
eSBjYWNoaW5nIGEgbWF4aW11bSBpbmRleCBvZgotICAgIC8vIHRoZSBnaXZlbiB0eXBlIHBlciBl
bGVtZW50IGFycmF5IGJ1ZmZlci4gSWYgYWxsIG9mIHRoZSBib3VuZAotICAgIC8vIGFycmF5IGJ1
ZmZlcnMgaGF2ZSBlbm91Z2ggZWxlbWVudHMgdG8gc2F0aXNmeSB0aGF0IG1heGltdW0KLSAgICAv
LyBpbmRleCwgc2tpcHMgdGhlIGV4cGVuc2l2ZSBwZXItZHJhdy1jYWxsIGl0ZXJhdGlvbiBpbgot
ICAgIC8vIHZhbGlkYXRlSW5kZXhBcnJheVByZWNpc2UuCi0gICAgCi0gICAgUmVmUHRyPFdlYkdM
QnVmZmVyPiBlbGVtZW50QXJyYXlCdWZmZXIgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmplY3QtPmdl
dEVsZW1lbnRBcnJheUJ1ZmZlcigpOwotCi0gICAgaWYgKCFlbGVtZW50QXJyYXlCdWZmZXIpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEdDM0RzaXplaXB0ciBudW1FbGVtZW50cyA9IGVs
ZW1lbnRBcnJheUJ1ZmZlci0+Ynl0ZUxlbmd0aCgpOwotICAgIC8vIFRoZSBjYXNlIGNvdW50PT0w
IGlzIGFscmVhZHkgZGVhbHQgd2l0aCBpbiBkcmF3RWxlbWVudHMgYmVmb3JlIHZhbGlkYXRlSW5k
ZXhBcnJheUNvbnNlcnZhdGl2ZS4KLSAgICBpZiAoIW51bUVsZW1lbnRzKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgY29uc3QgQXJyYXlCdWZmZXIqIGJ1ZmZlciA9IGVsZW1lbnRBcnJheUJ1
ZmZlci0+ZWxlbWVudEFycmF5QnVmZmVyKCk7Ci0gICAgQVNTRVJUKGJ1ZmZlcik7Ci0KLSAgICBp
bnQgbWF4SW5kZXggPSBlbGVtZW50QXJyYXlCdWZmZXItPmdldENhY2hlZE1heEluZGV4KHR5cGUp
OwotICAgIGlmIChtYXhJbmRleCA8IDApIHsKLSAgICAgICAgLy8gQ29tcHV0ZSB0aGUgbWF4aW11
bSBpbmRleCBpbiB0aGUgZW50aXJlIGJ1ZmZlciBmb3IgdGhlIGdpdmVuIHR5cGUgb2YgaW5kZXgu
Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFOiB7Ci0gICAgICAgICAgICBjb25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0
aWNfY2FzdDxjb25zdCBHQzNEdWJ5dGUqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAgICAgICBm
b3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCi0gICAgICAgICAg
ICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50PihwW2ld
KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDogewotICAgICAgICAgICAgbnVtRWxlbWVudHMgLz0g
c2l6ZW9mKEdDM0R1c2hvcnQpOwotICAgICAgICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0
YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQqPihidWZmZXItPmRhdGEoKSk7Ci0gICAgICAgICAg
ICBmb3IgKEdDM0RzaXplaXB0ciBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspCi0gICAgICAg
ICAgICAgICAgbWF4SW5kZXggPSBzdGQ6Om1heChtYXhJbmRleCwgc3RhdGljX2Nhc3Q8aW50Pihw
W2ldKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQ6IHsKLSAgICAgICAgICAgIGlmICghbV9vZXNFbGVt
ZW50SW5kZXhVaW50KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IG51bUVsZW1lbnRzIC89IHNpemVvZihHQzNEdWludCk7Ci0gICAgICAgICAgICBjb25zdCBHQzNE
dWludCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1aW50Kj4oYnVmZmVyLT5kYXRhKCkpOwot
ICAgICAgICAgICAgZm9yIChHQzNEc2l6ZWlwdHIgaSA9IDA7IGkgPCBudW1FbGVtZW50czsgaSsr
KQotICAgICAgICAgICAgICAgIG1heEluZGV4ID0gc3RkOjptYXgobWF4SW5kZXgsIHN0YXRpY19j
YXN0PGludD4ocFtpXSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBl
bGVtZW50QXJyYXlCdWZmZXItPnNldENhY2hlZE1heEluZGV4KHR5cGUsIG1heEluZGV4KTsKLSAg
ICB9Ci0KLSAgICBpZiAobWF4SW5kZXggPj0gMCkgewotICAgICAgICAvLyBUaGUgbnVtYmVyIG9m
IHJlcXVpcmVkIGVsZW1lbnRzIGlzIG9uZSBtb3JlIHRoYW4gdGhlIG1heGltdW0KLSAgICAgICAg
Ly8gaW5kZXggdGhhdCB3aWxsIGJlIGFjY2Vzc2VkLgotICAgICAgICBudW1FbGVtZW50c1JlcXVp
cmVkID0gbWF4SW5kZXggKyAxOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUlu
ZGV4QXJyYXlQcmVjaXNlKEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0
ciBvZmZzZXQsIHVuc2lnbmVkJiBudW1FbGVtZW50c1JlcXVpcmVkKQotewotICAgIEFTU0VSVChj
b3VudCA+PSAwICYmIG9mZnNldCA+PSAwKTsKLSAgICB1bnNpZ25lZCBsYXN0SW5kZXggPSAwOwot
ICAgIAotICAgIFJlZlB0cjxXZWJHTEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyID0gbV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0LT5nZXRFbGVtZW50QXJyYXlCdWZmZXIoKTsKLQotICAgIGlmICgh
ZWxlbWVudEFycmF5QnVmZmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWNv
dW50KSB7Ci0gICAgICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSAwOwotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoIWVsZW1lbnRBcnJheUJ1ZmZlci0+ZWxlbWVudEFycmF5
QnVmZmVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIGxvbmcgdW9m
ZnNldCA9IG9mZnNldDsKLSAgICB1bnNpZ25lZCBsb25nIG4gPSBjb3VudDsKLQotICAgIGlmICh0
eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKLSAgICAgICAgLy8gTWFr
ZSB1b2Zmc2V0IGFuIGVsZW1lbnQgb2Zmc2V0LgotICAgICAgICB1b2Zmc2V0IC89IHNpemVvZihH
QzNEdWludCk7Ci0gICAgICAgIGNvbnN0IEdDM0R1aW50KiBwID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
R0MzRHVpbnQqPihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRh
KCkpICsgdW9mZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAgICAgICAgIGlm
ICgqcCA+IGxhc3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAqcDsKLSAgICAg
ICAgICAgICsrcDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0Nv
bnRleHQzRDo6VU5TSUdORURfU0hPUlQpIHsKLSAgICAgICAgLy8gTWFrZSB1b2Zmc2V0IGFuIGVs
ZW1lbnQgb2Zmc2V0LgotICAgICAgICB1b2Zmc2V0IC89IHNpemVvZihHQzNEdXNob3J0KTsKLSAg
ICAgICAgY29uc3QgR0MzRHVzaG9ydCogcCA9IHN0YXRpY19jYXN0PGNvbnN0IEdDM0R1c2hvcnQq
PihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZlcigpLT5kYXRhKCkpICsgdW9m
ZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAgICAgICAgIGlmICgqcCA+IGxh
c3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAqcDsKLSAgICAgICAgICAgICsr
cDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAodHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSkgewotICAgICAgICBjb25zdCBHQzNEdWJ5dGUqIHAgPSBzdGF0aWNfY2Fz
dDxjb25zdCBHQzNEdWJ5dGUqPihlbGVtZW50QXJyYXlCdWZmZXItPmVsZW1lbnRBcnJheUJ1ZmZl
cigpLT5kYXRhKCkpICsgdW9mZnNldDsKLSAgICAgICAgd2hpbGUgKG4tLSA+IDApIHsKLSAgICAg
ICAgICAgIGlmICgqcCA+IGxhc3RJbmRleCkKLSAgICAgICAgICAgICAgICBsYXN0SW5kZXggPSAq
cDsKLSAgICAgICAgICAgICsrcDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIFRoZW4gc2V0
IHRoZSBsYXN0IGluZGV4IGluIHRoZSBpbmRleCBhcnJheSBhbmQgbWFrZSBzdXJlIGl0IGlzIHZh
bGlkLgotICAgIG51bUVsZW1lbnRzUmVxdWlyZWQgPSBsYXN0SW5kZXggKyAxOwotICAgIHJldHVy
biBudW1FbGVtZW50c1JlcXVpcmVkID4gMDsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlVmVydGV4QXR0cmlidXRlcyh1bnNpZ25lZCBlbGVtZW50Q291bnQsIHVuc2ln
bmVkIHByaW1pdGl2ZUNvdW50KQotewotICAgIGlmICghbV9jdXJyZW50UHJvZ3JhbSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gTG9vayBpbiBlYWNoIGVuYWJsZWQgdmVydGV4IGF0
dHJpYiBhbmQgY2hlY2sgaWYgdGhleSd2ZSBiZWVuIGJvdW5kIHRvIGEgYnVmZmVyLgotICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21heFZlcnRleEF0dHJpYnM7ICsraSkgewotICAgICAg
ICBpZiAoIW1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0cmliU3RhdGUoaSku
dmFsaWRhdGVCaW5kaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgaWYgKGVsZW1lbnRDb3VudCA8PSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotCi0gICAg
Ly8gTG9vayBpbiBlYWNoIGNvbnN1bWVkIHZlcnRleCBhdHRyaWIgKGJ5IHRoZSBjdXJyZW50IHBy
b2dyYW0pLgotICAgIGJvb2wgc2F3Tm9uSW5zdGFuY2VkQXR0cmliID0gZmFsc2U7Ci0gICAgYm9v
bCBzYXdFbmFibGVkQXR0cmliID0gZmFsc2U7Ci0gICAgaW50IG51bUFjdGl2ZUF0dHJpYkxvY2F0
aW9ucyA9IG1fY3VycmVudFByb2dyYW0tPm51bUFjdGl2ZUF0dHJpYkxvY2F0aW9ucygpOwotICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtQWN0aXZlQXR0cmliTG9jYXRpb25zOyArK2kpIHsKLSAg
ICAgICAgaW50IGxvYyA9IG1fY3VycmVudFByb2dyYW0tPmdldEFjdGl2ZUF0dHJpYkxvY2F0aW9u
KGkpOwotICAgICAgICBpZiAobG9jID49IDAgJiYgbG9jIDwgc3RhdGljX2Nhc3Q8aW50PihtX21h
eFZlcnRleEF0dHJpYnMpKSB7Ci0gICAgICAgICAgICBjb25zdCBXZWJHTFZlcnRleEFycmF5T2Jq
ZWN0T0VTOjpWZXJ0ZXhBdHRyaWJTdGF0ZSYgc3RhdGUgPSBtX2JvdW5kVmVydGV4QXJyYXlPYmpl
Y3QtPmdldFZlcnRleEF0dHJpYlN0YXRlKGxvYyk7Ci0gICAgICAgICAgICBpZiAoc3RhdGUuZW5h
YmxlZCkgewotICAgICAgICAgICAgICAgIHNhd0VuYWJsZWRBdHRyaWIgPSB0cnVlOwotICAgICAg
ICAgICAgICAgIC8vIEF2b2lkIG9mZi1ieS1vbmUgZXJyb3JzIGluIG51bUVsZW1lbnRzIGNvbXB1
dGF0aW9uLgotICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgbGFzdCBlbGVtZW50LCB3ZSB3aWxs
IG9ubHkgdG91Y2ggdGhlIGRhdGEgZm9yIHRoZQotICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQg
YW5kIG5vdGhpbmcgYmV5b25kIGl0LgotICAgICAgICAgICAgICAgIGludCBieXRlc1JlbWFpbmlu
ZyA9IHN0YXRpY19jYXN0PGludD4oc3RhdGUuYnVmZmVyQmluZGluZy0+Ynl0ZUxlbmd0aCgpIC0g
c3RhdGUub2Zmc2V0KTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1FbGVtZW50cyA9IDA7
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHN0YXRlLnN0cmlkZSA+IDApOwotICAgICAgICAgICAg
ICAgIGlmIChieXRlc1JlbWFpbmluZyA+PSBzdGF0ZS5ieXRlc1BlckVsZW1lbnQpCi0gICAgICAg
ICAgICAgICAgICAgIG51bUVsZW1lbnRzID0gMSArIChieXRlc1JlbWFpbmluZyAtIHN0YXRlLmJ5
dGVzUGVyRWxlbWVudCkgLyBzdGF0ZS5zdHJpZGU7Ci0gICAgICAgICAgICAgICAgaWYgKCFzdGF0
ZS5kaXZpc29yKQotICAgICAgICAgICAgICAgICAgICBzYXdOb25JbnN0YW5jZWRBdHRyaWIgPSB0
cnVlOwotICAgICAgICAgICAgICAgIGlmICgoIXN0YXRlLmRpdmlzb3IgJiYgZWxlbWVudENvdW50
ID4gbnVtRWxlbWVudHMpIHx8IChzdGF0ZS5kaXZpc29yICYmIHByaW1pdGl2ZUNvdW50ID4gbnVt
RWxlbWVudHMpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIXNhd05vbkluc3RhbmNlZEF0dHJpYiAm
JiBzYXdFbmFibGVkQXR0cmliKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlV2ViR0xPYmpl
Y3QoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBXZWJHTE9iamVjdCogb2JqZWN0KQotewotICAg
IGlmICghb2JqZWN0IHx8ICFvYmplY3QtPm9iamVjdCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJu
byBvYmplY3Qgb3Igb2JqZWN0IGRlbGV0ZWQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICBpZiAoIW9iamVjdC0+dmFsaWRhdGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgZnVuY3Rpb25OYW1lLCAib2JqZWN0IGRvZXMgbm90IGJlbG9uZyB0byB0aGlzIGNvbnRl
eHQiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd0FycmF5cyhjb25zdCBj
aGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXpl
aSBjb3VudCwgR0MzRHNpemVpIHByaW1jb3VudCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZURyYXdNb2RlKGZ1bmN0aW9uTmFtZSwgbW9kZSkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsU2V0dGluZ3MoZnVu
Y3Rpb25OYW1lKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKGZpcnN0IDwgMCB8
fCBjb3VudCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImZpcnN0IG9yIGNvdW50IDwgMCIpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFjb3VudCkgewotICAgICAg
ICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIGlmIChwcmltY291bnQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJwcmltY291bnQgPCAw
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzRXJyb3JHZW5l
cmF0ZWRPbk91dE9mQm91bmRzQWNjZXNzZXMoKSkgewotICAgICAgICAvLyBFbnN1cmUgd2UgaGF2
ZSBhIHZhbGlkIHJlbmRlcmluZyBzdGF0ZQotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29y
ZE92ZXJmbG93PiBjaGVja2VkRmlyc3QoZmlyc3QpOwotICAgICAgICBDaGVja2VkPEdDM0RpbnQs
IFJlY29yZE92ZXJmbG93PiBjaGVja2VkQ291bnQoY291bnQpOwotICAgICAgICBDaGVja2VkPEdD
M0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2VkU3VtID0gY2hlY2tlZEZpcnN0ICsgY2hlY2tl
ZENvdW50OwotICAgICAgICBDaGVja2VkPEdDM0RpbnQsIFJlY29yZE92ZXJmbG93PiBjaGVja2Vk
UHJpbUNvdW50KHByaW1jb3VudCk7Ci0gICAgICAgIGlmIChjaGVja2VkU3VtLmhhc092ZXJmbG93
ZWQoKSB8fCBjaGVja2VkUHJpbUNvdW50Lmhhc092ZXJmbG93ZWQoKSB8fCAhdmFsaWRhdGVWZXJ0
ZXhBdHRyaWJ1dGVzKGNoZWNrZWRTdW0udW5zYWZlR2V0KCksIGNoZWNrZWRQcmltQ291bnQudW5z
YWZlR2V0KCkpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImF0dGVtcHQgdG8gYWNjZXNz
IG91dCBvZiBib3VuZHMgYXJyYXlzIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoIXZhbGlkYXRlVmVydGV4QXR0cmlidXRl
cygwKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRyaWJzIG5vdCBzZXR1cCBjb3Jy
ZWN0bHkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIGNvbnN0IGNoYXIqIHJlYXNvbiA9ICJmcmFtZWJ1ZmZlciBpbmNvbXBsZXRlIjsKLSAgICBp
ZiAobV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vbkFjY2Vz
cyhncmFwaGljc0NvbnRleHQzRCgpLCAhaXNSZXNvdXJjZVNhZmUoKSwgJnJlYXNvbikpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsIHJlYXNvbik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNp
emVpIGNvdW50LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
Ci0gICAgaWYgKCF2YWxpZGF0ZURyYXdBcnJheXMoImRyYXdBcnJheXMiLCBtb2RlLCBmaXJzdCwg
Y291bnQsIDApKQotICAgICAgICByZXR1cm47Ci0KLSAgICBjbGVhcklmQ29tcG9zaXRlZCgpOwot
Ci0gICAgYm9vbCB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gZmFsc2U7Ci0gICAgaWYgKCFpc0dM
RVMyQ29tcGxpYW50KCkpCi0gICAgICAgIHZlcnRleEF0dHJpYjBTaW11bGF0ZWQgPSBzaW11bGF0
ZVZlcnRleEF0dHJpYjAoZmlyc3QgKyBjb3VudCAtIDEpOwotICAgIGlmICghaXNHTEVTMk5QT1RT
dHJpY3QoKSkKLSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3QXJyYXlzIiwg
dHJ1ZSk7Ci0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci0g
ICAgaWYgKCFpc0dMRVMyQ29tcGxpYW50KCkgJiYgdmVydGV4QXR0cmliMFNpbXVsYXRlZCkKLSAg
ICAgICAgcmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKTsKLSAgICBp
ZiAoIWlzR0xFUzJOUE9UU3RyaWN0KCkpCi0gICAgICAgIGNoZWNrVGV4dHVyZUNvbXBsZXRlbmVz
cygiZHJhd0FycmF5cyIsIGZhbHNlKTsKLSAgICBtYXJrQ29udGV4dENoYW5nZWQoKTsKLX0KLQot
Ym9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlRHJhd0VsZW1lbnRzKGNvbnN0IGNo
YXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51
bSB0eXBlLCBsb25nIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCYgbnVtRWxlbWVudHMpCi17Ci0gICAg
aWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVEcmF3TW9kZShmdW5jdGlv
bk5hbWUsIG1vZGUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIXZhbGlkYXRl
U3RlbmNpbFNldHRpbmdzKGZ1bmN0aW9uTmFtZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAg
ICAgICAgaWYgKG1fb2VzRWxlbWVudEluZGV4VWludCkKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBm
dW5jdGlvbk5hbWUsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKGNvdW50IDwgMCB8fCBvZmZzZXQgPCAwKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
LCBmdW5jdGlvbk5hbWUsICJjb3VudCBvciBvZmZzZXQgPCAwIik7Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIWNvdW50KSB7Ci0gICAgICAgIG1hcmtDb250ZXh0Q2hh
bmdlZCgpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKCFtX2JvdW5k
VmVydGV4QXJyYXlPYmplY3QtPmdldEVsZW1lbnRBcnJheUJ1ZmZlcigpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAibm8gRUxFTUVOVF9BUlJBWV9CVUZGRVIgYm91bmQiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaXNFcnJvckdlbmVyYXRlZE9uT3V0T2ZCb3Vu
ZHNBY2Nlc3NlcygpKSB7Ci0gICAgICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGEgdmFsaWQgcmVuZGVy
aW5nIHN0YXRlCi0gICAgICAgIGlmICghdmFsaWRhdGVFbGVtZW50QXJyYXlTaXplKGNvdW50LCB0
eXBlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKSkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJyZXF1ZXN0IG91dCBvZiBib3VuZHMgZm9yIGN1cnJlbnQgRUxFTUVOVF9BUlJB
WV9CVUZGRVIiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoIWNvdW50KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoIXZh
bGlkYXRlSW5kZXhBcnJheUNvbnNlcnZhdGl2ZSh0eXBlLCBudW1FbGVtZW50cykgfHwgIXZhbGlk
YXRlVmVydGV4QXR0cmlidXRlcyhudW1FbGVtZW50cykpIHsKLSAgICAgICAgICAgIGlmICghdmFs
aWRhdGVJbmRleEFycmF5UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0
cj4ob2Zmc2V0KSwgbnVtRWxlbWVudHMpIHx8ICF2YWxpZGF0ZVZlcnRleEF0dHJpYnV0ZXMobnVt
RWxlbWVudHMpKSB7Ci0gICAgICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJhdHRlbXB0IHRvIGFj
Y2VzcyBvdXQgb2YgYm91bmRzIGFycmF5cyIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICgh
dmFsaWRhdGVWZXJ0ZXhBdHRyaWJ1dGVzKDApKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImF0dHJpYnMgbm90IHNldHVwIGNvcnJlY3RseSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotCi0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVm
ZmVyIGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFt
ZWJ1ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNl
U2FmZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgcmVh
c29uKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1v
ZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgbG9uZyBsb25nIG9mZnNldCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLQotICAgIHVuc2lnbmVk
IG51bUVsZW1lbnRzID0gMDsKLSAgICBpZiAoIXZhbGlkYXRlRHJhd0VsZW1lbnRzKCJkcmF3RWxl
bWVudHMiLCBtb2RlLCBjb3VudCwgdHlwZSwgb2Zmc2V0LCBudW1FbGVtZW50cykpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGNsZWFySWZDb21wb3NpdGVkKCk7Ci0KLSAgICBib29sIHZlcnRleEF0
dHJpYjBTaW11bGF0ZWQgPSBmYWxzZTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkgewot
ICAgICAgICBpZiAoIW51bUVsZW1lbnRzKQotICAgICAgICAgICAgdmFsaWRhdGVJbmRleEFycmF5
UHJlY2lzZShjb3VudCwgdHlwZSwgc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zmc2V0KSwgbnVt
RWxlbWVudHMpOwotICAgICAgICB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkID0gc2ltdWxhdGVWZXJ0
ZXhBdHRyaWIwKG51bUVsZW1lbnRzKTsKLSAgICB9Ci0gICAgaWYgKCFpc0dMRVMyTlBPVFN0cmlj
dCgpKQotICAgICAgICBjaGVja1RleHR1cmVDb21wbGV0ZW5lc3MoImRyYXdFbGVtZW50cyIsIHRy
dWUpOwotICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBzdGF0
aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQo
KSAmJiB2ZXJ0ZXhBdHRyaWIwU2ltdWxhdGVkKQotICAgICAgICByZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpOwotICAgIGlmICghaXNHTEVTMk5QT1RTdHJpY3QoKSkK
LSAgICAgICAgY2hlY2tUZXh0dXJlQ29tcGxldGVuZXNzKCJkcmF3RWxlbWVudHMiLCBmYWxzZSk7
Ci0gICAgbWFya0NvbnRleHRDaGFuZ2VkKCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjplbmFibGUoR0MzRGVudW0gY2FwKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlQ2FwYWJpbGl0eSgiZW5hYmxlIiwgY2FwKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkgewot
ICAgICAgICBtX3N0ZW5jaWxFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgYXBwbHlTdGVuY2lsVGVz
dCgpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChjYXAgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlNDSVNTT1JfVEVTVCkgewotICAgICAgICBtX3NjaXNzb3JFbmFibGVkID0gdHJ1ZTsK
LSAgICAgICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZl
ci0+c2V0U2Npc3NvckVuYWJsZWQobV9zY2lzc29yRW5hYmxlZCk7Ci0gICAgfQotICAgIG1fY29u
dGV4dC0+ZW5hYmxlKGNhcCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjplbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykg
ewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSwgImVuYWJsZVZlcnRleEF0dHJpYkFycmF5IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUzo6
VmVydGV4QXR0cmliU3RhdGUmIHN0YXRlID0gbV9ib3VuZFZlcnRleEFycmF5T2JqZWN0LT5nZXRW
ZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7Ci0gICAgc3RhdGUuZW5hYmxlZCA9IHRydWU7Ci0KLSAg
ICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZpbmlzaCgpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZmluaXNoKCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpmbHVzaCgpCi17Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+Zmx1
c2goKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVu
ZGVyYnVmZmVydGFyZ2V0LCBXZWJHTFJlbmRlcmJ1ZmZlciogYnVmZmVyLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZmZXJGdW5jUGFyYW1ldGVycygiZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIiLCB0YXJnZXQsIGF0dGFjaG1lbnQpKQotICAgICAgICByZXR1cm47Ci0g
ICAgaWYgKHJlbmRlcmJ1ZmZlcnRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJpbnZhbGlkIHRhcmdldCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmIChidWZmZXIgJiYgIWJ1ZmZlci0+dmFsaWRh
dGUoY29udGV4dEdyb3VwKCksIHRoaXMpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImZyYW1lYnVmZmVyUmVuZGVyYnVm
ZmVyIiwgIm5vIGJ1ZmZlciBvciBidWZmZXIgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVi
dWZmZXIgdG8gYmUgbXV0YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMg
dXNlIGFuIEZCTyBpbnRlcm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0Ci0gICAgLy8gRkJP
LgotICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5n
LT5vYmplY3QoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlciIsICJubyBmcmFt
ZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyT2JqZWN0ID0gb2JqZWN0T3JaZXJvKGJ1ZmZlcik7Ci0gICAgc3dpdGNoIChh
dHRhY2htZW50KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfU1RFTkNJTF9B
VFRBQ0hNRU5UOgotICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKHRh
cmdldCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRl
cmJ1ZmZlcih0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIHJl
bmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVm
YXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQs
IGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRhcmdldCwgYnVmZmVyT2JqZWN0KTsKLSAgICB9Ci0g
ICAgbV9mcmFtZWJ1ZmZlckJpbmRpbmctPnNldEF0dGFjaG1lbnRGb3JCb3VuZEZyYW1lYnVmZmVy
KGF0dGFjaG1lbnQsIGJ1ZmZlcik7Ci0gICAgYXBwbHlTdGVuY2lsVGVzdCgpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFdlYkdMVGV4dHVy
ZSogdGV4dHVyZSwgR0MzRGludCBsZXZlbCwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUZyYW1lYnVmZmVyRnVuY1BhcmFtZXRlcnMoImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgdGFy
Z2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChsZXZlbCkgewotICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwg
ImZyYW1lYnVmZmVyVGV4dHVyZTJEIiwgImxldmVsIG5vdCAwIik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0gICAgaWYgKHRleHR1cmUgJiYgIXRleHR1cmUtPnZhbGlkYXRlKGNvbnRleHRHcm91
cCgpLCB0aGlzKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyB0ZXh0dXJl
IG9yIHRleHR1cmUgbm90IGZyb20gdGhpcyBjb250ZXh0Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgLy8gRG9uJ3QgYWxsb3cgdGhlIGRlZmF1bHQgZnJhbWVidWZmZXIgdG8gYmUgbXV0
YXRlZDsgYWxsIGN1cnJlbnQKLSAgICAvLyBpbXBsZW1lbnRhdGlvbnMgdXNlIGFuIEZCTyBpbnRl
cm5hbGx5IGluIHBsYWNlIG9mIHRoZSBkZWZhdWx0Ci0gICAgLy8gRkJPLgotICAgIGlmICghbV9m
cmFtZWJ1ZmZlckJpbmRpbmcgfHwgIW1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJmcmFtZWJ1ZmZlclRleHR1cmUyRCIsICJubyBmcmFtZWJ1ZmZlciBib3VuZCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZU9iamVj
dCA9IG9iamVjdE9yWmVybyh0ZXh0dXJlKTsKLSAgICBzd2l0Y2ggKGF0dGFjaG1lbnQpIHsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMX0FUVEFDSE1FTlQ6Ci0gICAg
ICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQVRUQUNITUVOVCwgdGV4dGFyZ2V0LCB0ZXh0dXJlT2JqZWN0LCBsZXZlbCk7
Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3Qs
IGxldmVsKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfQVRUQUNITUVOVDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0
YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1F
TlQ6Ci0gICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRh
Y2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmVPYmplY3QsIGxldmVsKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0
YXJnZXQsIGF0dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZU9iamVjdCwgbGV2ZWwpOwotICAg
IH0KLSAgICBtX2ZyYW1lYnVmZmVyQmluZGluZy0+c2V0QXR0YWNobWVudEZvckJvdW5kRnJhbWVi
dWZmZXIoYXR0YWNobWVudCwgdGV4dGFyZ2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci0gICAgYXBwbHlT
dGVuY2lsVGVzdCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6ZnJvbnRGYWNl
KEdDM0RlbnVtIG1vZGUpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+ZnJvbnRGYWNlKG1vZGUpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2VuZXJhdGVNaXBtYXAoR0MzRGVudW0gdGFyZ2V0KQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBXZWJHTFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoImdlbmVyYXRlTWlw
bWFwIiwgdGFyZ2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXRleC0+Y2FuR2VuZXJhdGVNaXBtYXBzKCkpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAiZ2VuZXJhdGVNaXBt
YXAiLCAibGV2ZWwgMCBub3QgcG93ZXIgb2YgMiBvciBub3QgYWxsIHRoZSBzYW1lIHNpemUiKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzkxNi4gQ29tcHJlc3NlZCB0ZXh0dXJlcyBzaG91bGQg
YmUgYWxsb3dlZCBpbiBXZWJHTCAyOgotICAgIGlmICh0ZXgtPmlzQ29tcHJlc3NlZCgpKSB7Ci0g
ICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJB
VElPTiwgImdlbmVyYXRlTWlwbWFwIiwgInRyeWluZyB0byBnZW5lcmF0ZSBtaXBtYXBzIGZyb20g
Y29tcHJlc3NlZCB0ZXh0dXJlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgaWYgKCF2
YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KCJnZW5lcmF0ZU1pcG1hcCIsIHRleC0+Z2V0SW50ZXJu
YWxGb3JtYXQodGFyZ2V0LCAwKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIGdlbmVyYXRl
TWlwbWFwIHdvbid0IHdvcmsgcHJvcGVybHkgaWYgbWluRmlsdGVyIGlzIG5vdCBORUFSRVNUX01J
UE1BUF9MSU5FQVIKLSAgICAvLyBvbiBNYWMuICBSZW1vdmUgdGhlIGhhY2sgb25jZSB0aGlzIGRy
aXZlciBidWcgaXMgZml4ZWQuCi0jaWYgT1MoREFSV0lOKQotICAgIGJvb2wgbmVlZFRvUmVzZXRN
aW5GaWx0ZXIgPSBmYWxzZTsKLSAgICBpZiAodGV4LT5nZXRNaW5GaWx0ZXIoKSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6TkVBUkVTVF9NSVBNQVBfTElORUFSKSB7Ci0gICAgICAgIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaSh0YXJnZXQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxU
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUX01JUE1BUF9MSU5FQVIpOwotICAgICAgICBu
ZWVkVG9SZXNldE1pbkZpbHRlciA9IHRydWU7Ci0gICAgfQotI2VuZGlmCi0gICAgbV9jb250ZXh0
LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOwotI2lmIE9TKERBUldJTikKLSAgICBpZiAobmVlZFRv
UmVzZXRNaW5GaWx0ZXIpCi0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIHRleC0+Z2V0TWluRmlsdGVy
KCkpOwotI2VuZGlmCi0gICAgdGV4LT5nZW5lcmF0ZU1pcG1hcExldmVsSW5mbygpOwotfQotCi1Q
YXNzUmVmUHRyPFdlYkdMQWN0aXZlSW5mbz4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRBY3Rp
dmVBdHRyaWIoV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBY3RpdmVBdHRyaWIiLCBw
cm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwot
ICAgIGlmICghbV9jb250ZXh0LT5nZXRBY3RpdmVBdHRyaWIob2JqZWN0T3JaZXJvKHByb2dyYW0p
LCBpbmRleCwgaW5mbykpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgTE9HKFdlYkdM
LCAiUmV0dXJuaW5nIGFjdGl2ZSBhdHRyaWJ1dGUgJWQ6ICVzIiwgaW5kZXgsIGluZm8ubmFtZS51
dGY4KCkuZGF0YSgpKTsKLQotICAgIHJldHVybiBXZWJHTEFjdGl2ZUluZm86OmNyZWF0ZShpbmZv
Lm5hbWUsIGluZm8udHlwZSwgaW5mby5zaXplKTsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTEFjdGl2
ZUluZm8+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QWN0aXZlVW5pZm9ybShXZWJHTFByb2dy
YW0qIHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlV2ViR0xPYmplY3QoImdldEFjdGl2ZVVuaWZvcm0iLCBwcm9ncmFtKSkKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgQWN0aXZlSW5mbyBpbmZvOwotICAgIGlmICghbV9jb250ZXh0LT5nZXRB
Y3RpdmVVbmlmb3JtKG9iamVjdE9yWmVybyhwcm9ncmFtKSwgaW5kZXgsIGluZm8pKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIWlzR0xFUzJDb21wbGlhbnQoKSkKLSAgICAgICAg
aWYgKGluZm8uc2l6ZSA+IDEgJiYgIWluZm8ubmFtZS5lbmRzV2l0aCgiWzBdIikpCi0gICAgICAg
ICAgICBpbmZvLm5hbWUuYXBwZW5kKCJbMF0iKTsKLQotICAgIExPRyhXZWJHTCwgIlJldHVybmlu
ZyBhY3RpdmUgdW5pZm9ybSAlZDogJXMiLCBpbmRleCwgaW5mby5uYW1lLnV0ZjgoKS5kYXRhKCkp
OwotCi0gICAgcmV0dXJuIFdlYkdMQWN0aXZlSW5mbzo6Y3JlYXRlKGluZm8ubmFtZSwgaW5mby50
eXBlLCBpbmZvLnNpemUpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0QXR0
YWNoZWRTaGFkZXJzKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgVmVjdG9yPFJlZlB0cjxXZWJHTFNo
YWRlcj4+JiBzaGFkZXJPYmplY3RzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURf
UEFSQU0oZWMpOwotICAgIHNoYWRlck9iamVjdHMuY2xlYXIoKTsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdlYkdMT2JqZWN0KCJnZXRBdHRhY2hlZFNoYWRl
cnMiLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgR0MzRGVu
dW0gc2hhZGVyVHlwZVtdID0gewotICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX1NI
QURFUiwKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUgotICAgIH07
Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemVvZihzaGFkZXJUeXBlKSAvIHNpemVv
ZihHQzNEZW51bSk7ICsraSkgewotICAgICAgICBXZWJHTFNoYWRlciogc2hhZGVyID0gcHJvZ3Jh
bS0+Z2V0QXR0YWNoZWRTaGFkZXIoc2hhZGVyVHlwZVtpXSk7Ci0gICAgICAgIGlmIChzaGFkZXIp
Ci0gICAgICAgICAgICBzaGFkZXJPYmplY3RzLmFwcGVuZChzaGFkZXIpOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotR0MzRGludCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEF0dHJp
YkxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3Qo
ImdldEF0dHJpYkxvY2F0aW9uIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBp
ZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldEF0dHJpYkxvY2F0aW9uIiwgbmFtZSkpCi0g
ICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJnZXRBdHRyaWJMb2Nh
dGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKGlzUHJlZml4UmVzZXJ2
ZWQobmFtZSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAoIXByb2dyYW0tPmdldExpbmtT
dGF0dXMoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9PUEVSQVRJT04sICJnZXRBdHRyaWJMb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5r
ZWQiKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gbV9jb250ZXh0LT5n
ZXRBdHRyaWJMb2NhdGlvbihvYmplY3RPclplcm8ocHJvZ3JhbSksIG5hbWUpOwotfQotCi1XZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRCdWZmZXJQYXJhbWV0ZXIoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRl
eHQzRDo6QVJSQVlfQlVGRkVSICYmIHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVO
VF9BUlJBWV9CVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEJ1ZmZlclBhcmFtZXRlciIsICJpbnZhbGlkIHRhcmdl
dCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotCi0gICAgaWYgKHBu
YW1lICE9IEdyYXBoaWNzQ29udGV4dDNEOjpCVUZGRVJfU0laRSAmJiBwbmFtZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6QlVGRkVSX1VTQUdFKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRCdWZmZXJQYXJhbWV0ZXIiLCAiaW52
YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0g
ICAgfQotCi0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0LT5nZXRCdWZmZXJQ
YXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1lLCAmdmFsdWUpOwotICAgIGlmIChwbmFtZSA9PSBHcmFw
aGljc0NvbnRleHQzRDo6QlVGRkVSX1NJWkUpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
dmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50
Pih2YWx1ZSkpOwotfQotCi1QYXNzUmVmUHRyPFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM+IFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQotewotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIC8vIFdl
IGFsd2F5cyBuZWVkIHRvIHJldHVybiBhIG5ldyBXZWJHTENvbnRleHRBdHRyaWJ1dGVzIG9iamVj
dCB0bwotICAgIC8vIHByZXZlbnQgdGhlIHVzZXIgZnJvbSBtdXRhdGluZyBhbnkgY2FjaGVkIHZl
cnNpb24uCi0KLSAgICAvLyBBbHNvLCB3ZSBuZWVkIHRvIGVuZm9yY2UgcmVxdWVzdGVkIHZhbHVl
cyBvZiAiZmFsc2UiIGZvciBkZXB0aAotICAgIC8vIGFuZCBzdGVuY2lsLCByZWdhcmRsZXNzIG9m
IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSB1bmRlcmx5aW5nCi0gICAgLy8gR3JhcGhpY3NDb250ZXh0
M0Qgb3IgRHJhd2luZ0J1ZmZlci4KLSAgICBSZWZQdHI8V2ViR0xDb250ZXh0QXR0cmlidXRlcz4g
YXR0cmlidXRlcyA9IFdlYkdMQ29udGV4dEF0dHJpYnV0ZXM6OmNyZWF0ZShtX2NvbnRleHQtPmdl
dENvbnRleHRBdHRyaWJ1dGVzKCkpOwotICAgIGlmICghbV9hdHRyaWJ1dGVzLmRlcHRoKQotICAg
ICAgICBhdHRyaWJ1dGVzLT5zZXREZXB0aChmYWxzZSk7Ci0gICAgaWYgKCFtX2F0dHJpYnV0ZXMu
c3RlbmNpbCkKLSAgICAgICAgYXR0cmlidXRlcy0+c2V0U3RlbmNpbChmYWxzZSk7Ci0gICAgaWYg
KG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBUaGUgRHJhd2luZ0J1ZmZlciBvYnRhaW5z
IGl0cyBwYXJhbWV0ZXJzIGZyb20gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENvbnRleHRBdHRyaWJ1
dGVzKCksCi0gICAgICAgIC8vIGJ1dCBpdCBtYWtlcyBpdHMgb3duIGRldGVybWluYXRpb24gb2Yg
d2hldGhlciBtdWx0aXNhbXBsaW5nIGlzIHN1cHBvcnRlZC4KLSAgICAgICAgYXR0cmlidXRlcy0+
c2V0QW50aWFsaWFzKG1fZHJhd2luZ0J1ZmZlci0+bXVsdGlzYW1wbGUoKSk7Ci0gICAgfQotICAg
IHJldHVybiBhdHRyaWJ1dGVzLnJlbGVhc2UoKTsKLX0KLQotR0MzRGVudW0gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRFcnJvcigpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1
dGlvbikKLSAgICAgICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUjsKLSAgICBy
ZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOwotfQotCi1XZWJHTEV4dGVuc2lvbiogV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsICJFWFRfc2hhZGVyX3RleHR1cmVfbG9k
IikKLSAgICAgICAgJiYgKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xf
RVhUX3NoYWRlcl90ZXh0dXJlX2xvZCIpIHx8IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5z
dXBwb3J0cygiR0xfQVJCX3NoYWRlcl90ZXh0dXJlX2xvZCIpKSkgewotICAgICAgICBpZiAoIW1f
ZXh0U2hhZGVyVGV4dHVyZUxPRCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0VYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKLSAgICAg
ICAgICAgIG1fZXh0U2hhZGVyVGV4dHVyZUxPRCA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUU2hhZGVy
VGV4dHVyZUxPRD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fZXh0U2hhZGVy
VGV4dHVyZUxPRC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJXRUJLSVRfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIikKLSAgICAgICAgJiYgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJf
YW5pc290cm9waWMiKSkgewotICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZpbHRlckFuaXNvdHJv
cGljKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIik7Ci0gICAgICAgICAgICBt
X2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYyA9IHN0ZDo6bWFrZV91bmlxdWU8RVhUVGV4dHVy
ZUZpbHRlckFuaXNvdHJvcGljPih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9l
eHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbEln
bm9yaW5nQ2FzZShuYW1lLCAiT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIikKLSAgICAgICAgJiYg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMiKSkgewotICAgICAgICBpZiAoIW1fb2VzU3RhbmRhcmREZXJpdmF0aXZlcykgewot
ICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdM
X09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAgICAgICAgICAgbV9vZXNTdGFuZGFyZERl
cml2YXRpdmVzID0gc3RkOjptYWtlX3VuaXF1ZTxPRVNTdGFuZGFyZERlcml2YXRpdmVzPih0aGlz
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzLmdl
dCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJl
X2Zsb2F0IikKLSAgICAgICAgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRz
KCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpKSB7Ci0gICAgICAgIGlmICghbV9vZXNUZXh0dXJlRmxv
YXQpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFi
bGVkKCJHTF9PRVNfdGV4dHVyZV9mbG9hdCIpOwotICAgICAgICAgICAgbV9vZXNUZXh0dXJlRmxv
YXQgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdD4odGhpcyk7Ci0gICAgICAgIH0K
LSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0LmdldCgpOwotICAgIH0KLSAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpCi0gICAg
ICAgICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1
cmVfZmxvYXRfbGluZWFyIikpIHsKLSAgICAgICAgaWYgKCFtX29lc1RleHR1cmVGbG9hdExpbmVh
cikgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJs
ZWQoIkdMX09FU190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpOwotICAgICAgICAgICAgbV9vZXNUZXh0
dXJlRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVGbG9hdExpbmVhcj4o
dGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVyZUZsb2F0TGluZWFy
LmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIk9FU190ZXh0
dXJlX2hhbGZfZmxvYXQiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKSkgewotICAgICAgICBpZiAoIW1f
b2VzVGV4dHVyZUhhbGZGbG9hdCkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKLSAgICAg
ICAgICAgIG1fb2VzVGV4dHVyZUhhbGZGbG9hdCA9IHN0ZDo6bWFrZV91bmlxdWU8T0VTVGV4dHVy
ZUhhbGZGbG9hdD4odGhpcyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG1fb2VzVGV4dHVy
ZUhhbGZGbG9hdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIpCi0gICAgICAgICYmIG1fY29udGV4dC0+
Z2V0RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX3RleHR1cmVfaGFsZl9mbG9hdF9saW5l
YXIiKSkgewotICAgICAgICBpZiAoIW1fb2VzVGV4dHVyZUhhbGZGbG9hdExpbmVhcikgewotICAg
ICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXRfbGluZWFyIik7Ci0gICAgICAgICAgICBtX29lc1RleHR1cmVI
YWxmRmxvYXRMaW5lYXIgPSBzdGQ6Om1ha2VfdW5pcXVlPE9FU1RleHR1cmVIYWxmRmxvYXRMaW5l
YXI+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX29lc1RleHR1cmVIYWxmRmxv
YXRMaW5lYXIuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAi
T0VTX3ZlcnRleF9hcnJheV9vYmplY3QiKQotICAgICAgICAmJiBtX2NvbnRleHQtPmdldEV4dGVu
c2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpIHsKLSAgICAg
ICAgaWYgKCFtX29lc1ZlcnRleEFycmF5T2JqZWN0KSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3ZlcnRleF9hcnJheV9vYmpl
Y3QiKTsKLSAgICAgICAgICAgIG1fb2VzVmVydGV4QXJyYXlPYmplY3QgPSBzdGQ6Om1ha2VfdW5p
cXVlPE9FU1ZlcnRleEFycmF5T2JqZWN0Pih0aGlzKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gbV9vZXNWZXJ0ZXhBcnJheU9iamVjdC5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJPRVNfZWxlbWVudF9pbmRleF91aW50IikKLSAgICAgICAgJiYgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfZWxlbWVudF9pbmRleF91
aW50IikpIHsKLSAgICAgICAgaWYgKCFtX29lc0VsZW1lbnRJbmRleFVpbnQpIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfZWxl
bWVudF9pbmRleF91aW50Iik7Ci0gICAgICAgICAgICBtX29lc0VsZW1lbnRJbmRleFVpbnQgPSBz
dGQ6Om1ha2VfdW5pcXVlPE9FU0VsZW1lbnRJbmRleFVpbnQ+KHRoaXMpOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiBtX29lc0VsZW1lbnRJbmRleFVpbnQuZ2V0KCk7Ci0gICAgfQotICAgIGlm
IChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfbG9zZV9jb250ZXh0IikpIHsKLSAgICAg
ICAgaWYgKCFtX3dlYmdsTG9zZUNvbnRleHQpCi0gICAgICAgICAgICBtX3dlYmdsTG9zZUNvbnRl
eHQgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMTG9zZUNvbnRleHQ+KHRoaXMpOwotICAgICAgICBy
ZXR1cm4gbV93ZWJnbExvc2VDb250ZXh0LmdldCgpOwotICAgIH0KLSAgICBpZiAoKGVxdWFsSWdu
b3JpbmdDYXNlKG5hbWUsICJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX2F0YyIpKQot
ICAgICAgICAmJiBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVRDOjpzdXBwb3J0ZWQodGhpcykpIHsK
LSAgICAgICAgaWYgKCFtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMpCi0gICAgICAgICAgICBt
X3dlYmdsQ29tcHJlc3NlZFRleHR1cmVBVEMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYkdMQ29tcHJl
c3NlZFRleHR1cmVBVEM+KHRoaXMpOwotICAgICAgICByZXR1cm4gbV93ZWJnbENvbXByZXNzZWRU
ZXh0dXJlQVRDLmdldCgpOwotICAgIH0KLSAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKG5hbWUs
ICJXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3B2cnRjIikpCi0gICAgICAgICYmIFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVQVlJUQzo6c3VwcG9ydGVkKHRoaXMpKSB7Ci0gICAgICAgIGlm
ICghbV93ZWJnbENvbXByZXNzZWRUZXh0dXJlUFZSVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29t
cHJlc3NlZFRleHR1cmVQVlJUQyA9IHN0ZDo6bWFrZV91bmlxdWU8V2ViR0xDb21wcmVzc2VkVGV4
dHVyZVBWUlRDPih0aGlzKTsKLSAgICAgICAgcmV0dXJuIG1fd2ViZ2xDb21wcmVzc2VkVGV4dHVy
ZVBWUlRDLmdldCgpOwotICAgIH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldF
QkdMX2NvbXByZXNzZWRfdGV4dHVyZV9zM3RjIikKLSAgICAgICAgJiYgV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlzKSkgewotICAgICAgICBpZiAoIW1fd2ViZ2xDb21w
cmVzc2VkVGV4dHVyZVMzVEMpCi0gICAgICAgICAgICBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVT
M1RDID0gc3RkOjptYWtlX3VuaXF1ZTxXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQz4odGhpcyk7
Ci0gICAgICAgIHJldHVybiBtX3dlYmdsQ29tcHJlc3NlZFRleHR1cmVTM1RDLmdldCgpOwotICAg
IH0KLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlcHRoX3RleHR1cmUi
KQotICAgICAgICAmJiBXZWJHTERlcHRoVGV4dHVyZTo6c3VwcG9ydGVkKGdyYXBoaWNzQ29udGV4
dDNEKCkpKSB7Ci0gICAgICAgIGlmICghbV93ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmVuc3VyZUVuYWJsZWQoIkdMX0NIUk9NSVVN
X2RlcHRoX3RleHR1cmUiKTsKLSAgICAgICAgICAgIG1fd2ViZ2xEZXB0aFRleHR1cmUgPSBzdGQ6
Om1ha2VfdW5pcXVlPFdlYkdMRGVwdGhUZXh0dXJlPih0aGlzKTsKLSAgICAgICAgfQotICAgICAg
ICByZXR1cm4gbV93ZWJnbERlcHRoVGV4dHVyZS5nZXQoKTsKLSAgICB9Ci0gICAgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKG5hbWUsICJXRUJHTF9kcmF3X2J1ZmZlcnMiKSAmJiBzdXBwb3J0c0RyYXdC
dWZmZXJzKCkpIHsKLSAgICAgICAgaWYgKCFtX3dlYmdsRHJhd0J1ZmZlcnMpIHsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZHJh
d19idWZmZXJzIik7Ci0gICAgICAgICAgICBtX3dlYmdsRHJhd0J1ZmZlcnMgPSBzdGQ6Om1ha2Vf
dW5pcXVlPFdlYkdMRHJhd0J1ZmZlcnM+KHRoaXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBtX3dlYmdsRHJhd0J1ZmZlcnMuZ2V0KCk7Ci0gICAgfQotICAgIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShuYW1lLCAiQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpICYmIEFOR0xFSW5zdGFuY2VkQXJy
YXlzOjpzdXBwb3J0ZWQodGhpcykpIHsKLSAgICAgICAgaWYgKCFtX2FuZ2xlSW5zdGFuY2VkQXJy
YXlzKSB7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+ZW5zdXJlRW5h
YmxlZCgiR0xfQU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOwotICAgICAgICAgICAgbV9hbmdsZUlu
c3RhbmNlZEFycmF5cyA9IHN0ZDo6bWFrZV91bmlxdWU8QU5HTEVJbnN0YW5jZWRBcnJheXM+KHRo
aXMpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLmdl
dCgpOwotICAgIH0KLSAgICBpZiAoYWxsb3dQcml2aWxlZ2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAg
ICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShuYW1lLCAiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5m
byIpKSB7Ci0gICAgICAgICAgICBpZiAoIW1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbykKLSAgICAg
ICAgICAgICAgICBtX3dlYmdsRGVidWdSZW5kZXJlckluZm8gPSBzdGQ6Om1ha2VfdW5pcXVlPFdl
YkdMRGVidWdSZW5kZXJlckluZm8+KHRoaXMpOwotICAgICAgICAgICAgcmV0dXJuIG1fd2ViZ2xE
ZWJ1Z1JlbmRlcmVySW5mby5nZXQoKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UobmFtZSwgIldFQkdMX2RlYnVnX3NoYWRlcnMiKQotICAgICAgICAgICAgJiYgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3No
YWRlcl9zb3VyY2UiKSkgewotICAgICAgICAgICAgaWYgKCFtX3dlYmdsRGVidWdTaGFkZXJzKQot
ICAgICAgICAgICAgICAgIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMgPSBzdGQ6Om1ha2VfdW5pcXVlPFdl
YkdMRGVidWdTaGFkZXJzPih0aGlzKTsKLSAgICAgICAgICAgIHJldHVybiBtX3dlYmdsRGVidWdT
aGFkZXJzLmdldCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEZyYW1lYnVmZmVyQXR0
YWNobWVudFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdD
M0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlRnJhbWVidWZm
ZXJGdW5jUGFyYW1ldGVycygiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyIiwgdGFy
Z2V0LCBhdHRhY2htZW50KSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotCi0gICAg
aWYgKCFtX2ZyYW1lYnVmZmVyQmluZGluZyB8fCAhbV9mcmFtZWJ1ZmZlckJpbmRpbmctPm9iamVj
dCgpKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX09QRVJBVElPTiwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlciIsICJubyBm
cmFtZWJ1ZmZlciBib3VuZCIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAg
fQotCi0gICAgV2ViR0xTaGFyZWRPYmplY3QqIG9iamVjdCA9IG1fZnJhbWVidWZmZXJCaW5kaW5n
LT5nZXRBdHRhY2htZW50T2JqZWN0KGF0dGFjaG1lbnQpOwotICAgIGlmICghb2JqZWN0KSB7Ci0g
ICAgICAgIGlmIChwbmFtZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9PQkpFQ1RfVFlQRSkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PTkUpOwotICAgICAgICAvLyBPcGVuR0wgRVMgMi4wIHNwZWNpZmllcyBJ
TlZBTElEX0VOVU0gaW4gdGhpcyBjYXNlLCB3aGlsZSBkZXNrdG9wIEdMCi0gICAgICAgIC8vIHNw
ZWNpZmllcyBJTlZBTElEX09QRVJBVElPTi4KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIik7Ci0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQob2JqZWN0LT5pc1RleHR1cmUoKSB8fCBv
YmplY3QtPmlzUmVuZGVyYnVmZmVyKCkpOwotICAgIGlmIChvYmplY3QtPmlzVGV4dHVyZSgpKSB7
Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUpOwotICAgICAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9OQU1FOgot
ICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4o
cmVpbnRlcnByZXRfY2FzdDxXZWJHTFRleHR1cmUqPihvYmplY3QpKSk7Ci0gICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9MRVZFTDoK
LSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9U
RVhUVVJFX0NVQkVfTUFQX0ZBQ0U6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgR0Mz
RGludCB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRGcmFtZWJ1ZmZl
ckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1lLCAmdmFsdWUp
OwotICAgICAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgICAgICAg
ICAgfQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBh
cmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lIGZvciB0ZXh0dXJlIGF0dGFjaG1lbnQi
KTsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICAgICAgfQotICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9PQkpFQ1RfVFlQRToKLSAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUik7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JK
RUNUX05BTUU6Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2Vi
R0xSZW5kZXJidWZmZXI+KHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJidWZmZXIqPihvYmpl
Y3QpKSk7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihH
cmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50
UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUgZm9yIHJlbmRlcmJ1ZmZlciBhdHRh
Y2htZW50Iik7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLVdlYkdMR2V0SW5mbyBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFBhcmFt
ZXRlcihHQzNEZW51bSBwbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY29uc3QgaW50IGludFplcm8gPSAwOwotICAgIHN3aXRj
aCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJVkVfVEVYVFVSRToK
LSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBTElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgICAgIHJl
dHVybiBnZXRXZWJHTEZsb2F0QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICAgICAgcmV0dXJuIGdl
dFdlYkdMRmxvYXRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6QUxQSEFfQklUUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSX0JJTkRJTkc6Ci0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oUGFzc1JlZlB0cjxXZWJHTEJ1ZmZlcj4obV9ib3VuZEFy
cmF5QnVmZmVyKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQ6Ci0gICAgICAg
IHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORF9DT0xPUjoKLSAgICAgICAgcmV0dXJuIGdldFdlYkdMRmxvYXRBcnJheVBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRFNUX0FM
UEhBOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0RTVF9SR0I6Ci0gICAgICAgIHJldHVybiBn
ZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6QkxFTkRfRVFVQVRJT05fQUxQSEE6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QkxFTkRfRVFVQVRJ
T05fUkdCOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX1NSQ19BTFBIQToKLSAgICAgICAgcmV0
dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORF9TUkNfUkdCOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJh
bWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJMVUVfQklUUzoKLSAg
ICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6Q09MT1JfQ0xFQVJfVkFMVUU6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0
QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9S
X1dSSVRFTUFTSzoKLSAgICAgICAgcmV0dXJuIGdldEJvb2xlYW5BcnJheVBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Q09NUFJFU1NFRF9URVhUVVJFX0ZPUk1B
VFM6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oVWludDMyQXJyYXk6OmNyZWF0ZShtX2Nv
bXByZXNzZWRUZXh0dXJlRm9ybWF0cy5kYXRhKCksIG1fY29tcHJlc3NlZFRleHR1cmVGb3JtYXRz
LnNpemUoKSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVTExfRkFDRToKLSAgICAg
ICAgcmV0dXJuIGdldEJvb2xlYW5QYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkNVTExfRkFDRV9NT0RFOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJFTlRfUFJP
R1JBTToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMUHJvZ3Jh
bT4obV9jdXJyZW50UHJvZ3JhbSkpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X0JJVFM6Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRl
cy5kZXB0aCkKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oaW50WmVybyk7Ci0gICAg
ICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OkRFUFRIX0NMRUFSX1ZBTFVFOgotICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0
ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0ZVTkM6Ci0gICAg
ICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfUkFOR0U6Ci0gICAgICAgIHJldHVybiBnZXRXZWJHTEZsb2F0
QXJyYXlQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRI
X1RFU1Q6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9XUklURU1BU0s6Ci0gICAgICAgIHJldHVybiBn
ZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpE
SVRIRVI6Ci0gICAgICAgIHJldHVybiBnZXRCb29sZWFuUGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KG1fYm91bmRW
ZXJ0ZXhBcnJheU9iamVjdC0+Z2V0RWxlbWVudEFycmF5QnVmZmVyKCkpKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9CSU5ESU5HOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xGcmFtZWJ1ZmZlcj4obV9mcmFtZWJ1ZmZlckJpbmRp
bmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGUk9OVF9GQUNFOgotICAgICAgICBy
ZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OkdFTkVSQVRFX01JUE1BUF9ISU5UOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVO
X0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6Ci0gICAgICAgIHJldHVybiBnZXRGbG9hdFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NPTUJJTkVE
X1RFWFRVUkVfSU1BR0VfVU5JVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJ
WkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6Ci0gICAgICAgIHJl
dHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9SRU5ERVJCVUZGRVJfU0laRToKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5J
VFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX1NJWkU6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5H
X1ZFQ1RPUlM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklCUzoKLSAgICAgICAgcmV0dXJu
IGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOgotICAgICAgICByZXR1cm4gZ2V0SW50UGFyYW1l
dGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1VOSUZP
Uk1fVkVDVE9SUzoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZJRVdQT1JUX0RJTVM6Ci0gICAgICAgIHJldHVy
biBnZXRXZWJHTEludEFycmF5UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpOVU1fU0hBREVSX0JJTkFSWV9GT1JNQVRTOgotICAgICAgICAvLyBGSVhNRTogc2hv
dWxkIHdlIGFsd2F5cyByZXR1cm4gMCBmb3IgdGhpcz8KLSAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UEFDS19BTElHTk1F
TlQ6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlBPTFlHT05fT0ZGU0VUX0ZBQ1RPUjoKLSAgICAgICAgcmV0dXJuIGdl
dEZsb2F0UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpQT0xZ
R09OX09GRlNFVF9GSUxMOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UE9MWUdPTl9PRkZTRVRfVU5JVFM6Ci0g
ICAgICAgIHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6UkVEX0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQYXJhbWV0ZXIocG5h
bWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9CSU5ESU5HOgot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xSZW5kZXJidWZmZXI+
KG1fcmVuZGVyYnVmZmVyQmluZGluZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkVSOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFN0cmluZygiV2ViS2l0IFdlYkdM
IikpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRV9CVUZGRVJTOgotICAgICAg
ICByZXR1cm4gZ2V0SW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpTQU1QTEVfQ09WRVJBR0VfSU5WRVJUOgotICAgICAgICByZXR1cm4gZ2V0Qm9vbGVhblBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFX0NPVkVS
QUdFX1ZBTFVFOgotICAgICAgICByZXR1cm4gZ2V0RmxvYXRQYXJhbWV0ZXIocG5hbWUpOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfQk9Y
OgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUOgotICAgICAgICByZXR1cm4gZ2V0
Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hB
RElOR19MQU5HVUFHRV9WRVJTSU9OOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCJXZWJH
TCBHTFNMIEVTIDEuMCAoIiArIG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNE
OjpTSEFESU5HX0xBTkdVQUdFX1ZFUlNJT04pICsgIikiKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0JBQ0tfRkFJTDoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50
UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JB
Q0tfRlVOQzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlM
OgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1M6Ci0gICAg
ICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1JFRjoKLSAgICAgICAgcmV0dXJuIGdldEludFBh
cmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNL
X1ZBTFVFX01BU0s6Ci0gICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRlcihwbmFt
ZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CQUNLX1dSSVRFTUFTSzoK
LSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0JJVFM6Ci0gICAgICAgIGlmICghbV9mcmFtZWJ1
ZmZlckJpbmRpbmcgJiYgIW1fYXR0cmlidXRlcy5zdGVuY2lsKQotICAgICAgICAgICAgcmV0dXJu
IFdlYkdMR2V0SW5mbyhpbnRaZXJvKTsKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihw
bmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9DTEVBUl9WQUxVRToK
LSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9GQUlMOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfRlVO
QzoKLSAgICAgICAgcmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfRkFJTDoKLSAgICAgICAg
cmV0dXJuIGdldFVuc2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTVEVOQ0lMX1BBU1NfREVQVEhfUEFTUzoKLSAgICAgICAgcmV0dXJuIGdldFVu
c2lnbmVkSW50UGFyYW1ldGVyKHBuYW1lKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX1JFRjoKLSAgICAgICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAg
Y2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUOgotICAgICAgICByZXR1cm4gZ2V0
Qm9vbGVhblBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9WQUxVRV9NQVNLOgotICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIo
cG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfV1JJVEVNQVNLOgot
ICAgICAgICByZXR1cm4gZ2V0VW5zaWduZWRJbnRQYXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OlNVQlBJWEVMX0JJVFM6Ci0gICAgICAgIHJldHVybiBnZXRJbnRQ
YXJhbWV0ZXIocG5hbWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklO
RElOR18yRDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4
dHVyZT4obV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
ZykpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQklORElOR19DVUJFX01B
UDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhQYXNzUmVmUHRyPFdlYkdMVGV4dHVyZT4o
bV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5n
KSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVDoKLSAgICAg
ICAgcmV0dXJuIGdldEludFBhcmFtZXRlcihwbmFtZSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5QQUNLX0ZMSVBfWV9XRUJHTDoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyht
X3VucGFja0ZsaXBZKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfUFJFTVVM
VElQTFlfQUxQSEFfV0VCR0w6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQ09M
T1JTUEFDRV9DT05WRVJTSU9OX1dFQkdMOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKG1f
dW5wYWNrQ29sb3JzcGFjZUNvbnZlcnNpb24pOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlZFTkRPUjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhTdHJpbmcoIldlYktpdCIpKTsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJTSU9OOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCJXZWJHTCAxLjAgKCIgKyBtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGljc0Nv
bnRleHQzRDo6VkVSU0lPTikgKyAiKSIpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZJ
RVdQT1JUOgotICAgICAgICByZXR1cm4gZ2V0V2ViR0xJbnRBcnJheVBhcmFtZXRlcihwbmFtZSk7
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRf
T0VTOiAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMKLSAgICAgICAgaWYgKG1fb2VzU3RhbmRh
cmREZXJpdmF0aXZlcykKLSAgICAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZEludFBhcmFtZXRl
cihFeHRlbnNpb25zM0Q6OkZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTKTsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwg
ImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBPRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwot
ICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURfUkVOREVSRVJfV0VCR0w6
Ci0gICAgICAgIGlmIChtX3dlYmdsRGVidWdSZW5kZXJlckluZm8pCi0gICAgICAgICAgICByZXR1
cm4gV2ViR0xHZXRJbmZvKG1fY29udGV4dC0+Z2V0U3RyaW5nKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJFUikpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUsIFdF
QkdMX2RlYnVnX3JlbmRlcmVyX2luZm8gbm90IGVuYWJsZWQiKTsKLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbygpOwotICAgIGNhc2UgV2ViR0xEZWJ1Z1JlbmRlcmVySW5mbzo6VU5NQVNLRURf
VkVORE9SX1dFQkdMOgotICAgICAgICBpZiAobV93ZWJnbERlYnVnUmVuZGVyZXJJbmZvKQotICAg
ICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhtX2NvbnRleHQtPmdldFN0cmluZyhHcmFwaGlj
c0NvbnRleHQzRDo6VkVORE9SKSk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0
ZXIgbmFtZSwgV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyBub3QgZW5hYmxlZCIpOwotICAgICAg
ICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OlZFUlRFWF9B
UlJBWV9CSU5ESU5HX09FUzogLy8gT0VTX3ZlcnRleF9hcnJheV9vYmplY3QKLSAgICAgICAgaWYg
KG1fb2VzVmVydGV4QXJyYXlPYmplY3QpIHsKLSAgICAgICAgICAgIGlmICghbV9ib3VuZFZlcnRl
eEFycmF5T2JqZWN0LT5pc0RlZmF1bHRPYmplY3QoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUz4obV9ib3Vu
ZFZlcnRleEFycmF5T2JqZWN0KSk7Ci0gICAgICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZhbGlkIHBhcmFtZXRlciBuYW1lLCBP
RVNfdmVydGV4X2FycmF5X29iamVjdCBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklT
T1RST1BZX0VYVDogLy8gRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljCi0gICAgICAgIGlm
IChtX2V4dFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYykKLSAgICAgICAgICAgIHJldHVybiBnZXRV
bnNpZ25lZEludFBhcmFtZXRlcihFeHRlbnNpb25zM0Q6Ok1BWF9URVhUVVJFX01BWF9BTklTT1RS
T1BZX0VYVCk7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSwgRVhU
X3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVy
biBXZWJHTEdldEluZm8oKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6TUFYX0NPTE9SX0FUVEFD
SE1FTlRTX0VYVDogLy8gRVhUX2RyYXdfYnVmZmVycyBCRUdJTgotICAgICAgICBpZiAobV93ZWJn
bERyYXdCdWZmZXJzKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhnZXRNYXhDb2xv
ckF0dGFjaG1lbnRzKCkpOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5h
bWUsIFdFQkdMX2RyYXdfYnVmZmVycyBub3QgZW5hYmxlZCIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6Ok1BWF9EUkFXX0JVRkZFUlNfRVhU
OgotICAgICAgICBpZiAobV93ZWJnbERyYXdCdWZmZXJzKQotICAgICAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhnZXRNYXhEcmF3QnVmZmVycygpKTsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFBhcmFtZXRlciIsICJpbnZh
bGlkIHBhcmFtZXRlciBuYW1lLCBXRUJHTF9kcmF3X2J1ZmZlcnMgbm90IGVuYWJsZWQiKTsKLSAg
ICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICht
X3dlYmdsRHJhd0J1ZmZlcnMKLSAgICAgICAgICAgICYmIHBuYW1lID49IEV4dGVuc2lvbnMzRDo6
RFJBV19CVUZGRVIwX0VYVAotICAgICAgICAgICAgJiYgcG5hbWUgPCBzdGF0aWNfY2FzdDxHQzNE
ZW51bT4oRXh0ZW5zaW9uczNEOjpEUkFXX0JVRkZFUjBfRVhUICsgZ2V0TWF4RHJhd0J1ZmZlcnMo
KSkpIHsKLSAgICAgICAgICAgIEdDM0RpbnQgdmFsdWUgPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9O
RTsKLSAgICAgICAgICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZykKLSAgICAgICAgICAgICAg
ICB2YWx1ZSA9IG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXREcmF3QnVmZmVyKHBuYW1lKTsKLSAg
ICAgICAgICAgIGVsc2UgLy8gZW11bGF0ZWQgYmFja2J1ZmZlcgotICAgICAgICAgICAgICAgIHZh
bHVlID0gbV9iYWNrRHJhd0J1ZmZlcjsKLSAgICAgICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
dmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIg
bmFtZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1XZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRQcm9ncmFtUGFyYW1ldGVyKFdlYkdM
UHJvZ3JhbSogcHJvZ3JhbSwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0UHJvZ3JhbVBhcmFtZXRlciIsIHByb2dyYW0pKQot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0KLSAgICBHQzNEaW50IHZhbHVlID0gMDsK
LSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVMRVRF
X1NUQVRVUzoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhwcm9ncmFtLT5pc0RlbGV0ZWQo
KSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkFMSURBVEVfU1RBVFVTOgotICAgICAg
ICBtX2NvbnRleHQtPmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAm
dmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PGJvb2w+KHZh
bHVlKSk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TElOS19TVEFUVVM6Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8ocHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKTsKLSAgICBjYXNl
IEdyYXBoaWNzQ29udGV4dDNEOjpBVFRBQ0hFRF9TSEFERVJTOgotICAgICAgICBtX2NvbnRleHQt
PmdldFByb2dyYW1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIHBuYW1lLCAmdmFsdWUpOwotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZhbHVlKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpBQ1RJVkVfQVRUUklCVVRFUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBQ1RJ
VkVfVU5JRk9STVM6Ci0gICAgICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVpbHRJbkFjdGl2ZVN5bWJv
bENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWUpOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRQcm9ncmFtUGFy
YW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwotICAgIH0KLX0KLQotU3RyaW5nIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
UHJvZ3JhbUluZm9Mb2coV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybiBTdHJpbmcoKTsKLSAgICBpZiAoIXZhbGlkYXRlV2ViR0xPYmpl
Y3QoImdldFByb2dyYW1JbmZvTG9nIiwgcHJvZ3JhbSkpCi0gICAgICAgIHJldHVybiAiIjsKLSAg
ICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdldFByb2dyYW1JbmZvTG9nKG9iamVj
dE9yWmVybyhwcm9ncmFtKSkpOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KCk7Ci0gICAgaWYgKHRhcmdldCAhPSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSKSB7
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCB0YXJnZXQiKTsKLSAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLSAgICBpZiAoIW1fcmVuZGVyYnVmZmVy
QmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJn
ZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXIiLCAibm8gcmVuZGVyYnVmZmVyIGJvdW5kIik7Ci0gICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICB9Ci0KLSAgICBpZiAobV9yZW5kZXJidWZm
ZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9TVEVOQ0lMCi0gICAgICAgICYmICFtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPmlzVmFsaWQoKSkg
ewotICAgICAgICBBU1NFUlQoIWlzRGVwdGhTdGVuY2lsU3VwcG9ydGVkKCkpOwotICAgICAgICBp
bnQgdmFsdWUgPSAwOwotICAgICAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9XSURUSDoKLSAgICAgICAgICAgIHZhbHVlID0g
bV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRXaWR0aCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9IRUlHSFQ6Ci0gICAg
ICAgICAgICB2YWx1ZSA9IG1fcmVuZGVyYnVmZmVyQmluZGluZy0+Z2V0SGVpZ2h0KCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX1JFRF9TSVpFOgotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVJfR1JFRU5fU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX0JMVUVfU0laRToKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSX0FMUEhBX1NJWkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0RFUFRIX1NJ
WkU6Ci0gICAgICAgICAgICB2YWx1ZSA9IDI0OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkU6Ci0gICAg
ICAgICAgICB2YWx1ZSA9IDg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0lOVEVSTkFMX0ZPUk1BVDoKLSAgICAgICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJidWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZv
cm1hdCgpKTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJnZXRSZW5kZXJidWZmZXJQYXJhbWV0
ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbygpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUp
OwotICAgIH0KLQotICAgIEdDM0RpbnQgdmFsdWUgPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsK
LSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfV0lEVEg6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSX0hFSUdIVDoKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVJfUkVEX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSX0dSRUVOX1NJWkU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSX0JMVUVfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVJfQUxQSEFfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVJfREVQVEhfU0laRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVJfU1RFTkNJTF9TSVpFOgotICAgICAgICBtX2NvbnRleHQtPmdldFJlbmRlcmJ1ZmZl
clBhcmFtZXRlcml2KHRhcmdldCwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8odmFsdWUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Ul9JTlRFUk5BTF9GT1JNQVQ6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8obV9yZW5kZXJi
dWZmZXJCaW5kaW5nLT5nZXRJbnRlcm5hbEZvcm1hdCgpKTsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0
UmVuZGVyYnVmZmVyUGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAg
ICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyUGFyYW1ldGVyKFdlYkdMU2hhZGVyKiBzaGFkZXIs
IEdDM0RlbnVtIHBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0o
ZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlV2ViR0xP
YmplY3QoImdldFNoYWRlclBhcmFtZXRlciIsIHNoYWRlcikpCi0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oKTsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVMRVRFX1NUQVRVUzoKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzaGFkZXItPmlzRGVsZXRlZCgpKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpDT01QSUxFX1NUQVRVUzoKLSAgICAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJp
dihvYmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBX
ZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUpKTsKLSAgICBjYXNlIEdyYXBoaWNz
Q29udGV4dDNEOjpTSEFERVJfVFlQRToKLSAgICAgICAgbV9jb250ZXh0LT5nZXRTaGFkZXJpdihv
YmplY3RPclplcm8oc2hhZGVyKSwgcG5hbWUsICZ2YWx1ZSk7Ci0gICAgICAgIHJldHVybiBXZWJH
TEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkpOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJnZXRTaGFkZXJQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwotICAg
ICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1TdHJpbmcgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJJbmZvTG9nKFdlYkdMU2hhZGVyKiBzaGFkZXIsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4
dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgIGlmICghdmFs
aWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVySW5mb0xvZyIsIHNoYWRlcikpCi0gICAgICAgIHJl
dHVybiAiIjsKLSAgICByZXR1cm4gZW5zdXJlTm90TnVsbChtX2NvbnRleHQtPmdldFNoYWRlcklu
Zm9Mb2cob2JqZWN0T3JaZXJvKHNoYWRlcikpKTsKLX0KLQotUGFzc1JlZlB0cjxXZWJHTFNoYWRl
clByZWNpc2lvbkZvcm1hdD4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTaGFkZXJQcmVjaXNp
b25Gb3JtYXQoR0MzRGVudW0gc2hhZGVyVHlwZSwgR0MzRGVudW0gcHJlY2lzaW9uVHlwZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250
ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBzd2l0Y2gg
KHNoYWRlclR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhfU0hBREVS
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZSQUdNRU5UX1NIQURFUjoKLSAgICAgICAg
YnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRU5VTSwgImdldFNoYWRlclByZWNpc2lvbkZvcm1hdCIsICJpbnZh
bGlkIHNoYWRlciB0eXBlIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBz
d2l0Y2ggKHByZWNpc2lvblR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMT1df
RkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUVESVVNX0ZMT0FUOgotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfRkxPQVQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TE9XX0lOVDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNRURJVU1fSU5UOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkhJR0hfSU5UOgotICAgICAgICBicmVhazsKLSAg
ICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9FTlVNLCAiZ2V0U2hhZGVyUHJlY2lzaW9uRm9ybWF0IiwgImludmFsaWQgcHJlY2lz
aW9uIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgR0MzRGlu
dCByYW5nZVsyXSA9IHswLCAwfTsKLSAgICBHQzNEaW50IHByZWNpc2lvbiA9IDA7Ci0gICAgbV9j
b250ZXh0LT5nZXRTaGFkZXJQcmVjaXNpb25Gb3JtYXQoc2hhZGVyVHlwZSwgcHJlY2lzaW9uVHlw
ZSwgcmFuZ2UsICZwcmVjaXNpb24pOwotICAgIHJldHVybiBXZWJHTFNoYWRlclByZWNpc2lvbkZv
cm1hdDo6Y3JlYXRlKHJhbmdlWzBdLCByYW5nZVsxXSwgcHJlY2lzaW9uKTsKLX0KLQotU3RyaW5n
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U2hhZGVyU291cmNlKFdlYkdMU2hhZGVyKiBzaGFk
ZXIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAg
IGlmICghdmFsaWRhdGVXZWJHTE9iamVjdCgiZ2V0U2hhZGVyU291cmNlIiwgc2hhZGVyKSkKLSAg
ICAgICAgcmV0dXJuICIiOwotICAgIHJldHVybiBlbnN1cmVOb3ROdWxsKHNoYWRlci0+Z2V0U291
cmNlKCkpOwotfQotCi1WZWN0b3I8U3RyaW5nPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldFN1
cHBvcnRlZEV4dGVuc2lvbnMoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHJlc3VsdDsKLQotICAg
IGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24pCi0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0KLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNf
dGV4dHVyZV9mbG9hdCIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9mbG9h
dCIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09F
U190ZXh0dXJlX2Zsb2F0X2xpbmVhciIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4
dHVyZV9mbG9hdF9saW5lYXIiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkt
PnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IikpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRF
eHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIp
KQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciIp
OwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyIpKQotICAgICAgICByZXN1bHQuYXBwZW5kKCJPRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMiKTsKLSAgICBpZiAobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1
cHBvcnRzKCJHTF9FWFRfc2hhZGVyX3RleHR1cmVfbG9kIikgfHwgbV9jb250ZXh0LT5nZXRFeHRl
bnNpb25zKCktPnN1cHBvcnRzKCJHTF9BUkJfc2hhZGVyX3RleHR1cmVfbG9kIikpCi0gICAgICAg
IHJlc3VsdC5hcHBlbmQoIkVYVF9zaGFkZXJfdGV4dHVyZV9sb2QiKTsKLSAgICBpZiAobV9jb250
ZXh0LT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9maWx0ZXJfYW5p
c290cm9waWMiKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lUX0VYVF90ZXh0dXJlX2Zp
bHRlcl9hbmlzb3Ryb3BpYyIpOwotICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
c3VwcG9ydHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0IikpCi0gICAgICAgIHJlc3VsdC5h
cHBlbmQoIk9FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7Ci0gICAgaWYgKG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5zdXBwb3J0cygiR0xfT0VTX2VsZW1lbnRfaW5kZXhfdWludCIpKQotICAg
ICAgICByZXN1bHQuYXBwZW5kKCJPRVNfZWxlbWVudF9pbmRleF91aW50Iik7Ci0gICAgcmVzdWx0
LmFwcGVuZCgiV0VCR0xfbG9zZV9jb250ZXh0Iik7Ci0gICAgaWYgKFdlYkdMQ29tcHJlc3NlZFRl
eHR1cmVBVEM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCS0lU
X1dFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9hdGMiKTsKLSAgICBpZiAoV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVBWUlRDOjpzdXBwb3J0ZWQodGhpcykpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldF
QktJVF9XRUJHTF9jb21wcmVzc2VkX3RleHR1cmVfcHZydGMiKTsKLSAgICBpZiAoV2ViR0xDb21w
cmVzc2VkVGV4dHVyZVMzVEM6OnN1cHBvcnRlZCh0aGlzKSkKLSAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiV0VCR0xfY29tcHJlc3NlZF90ZXh0dXJlX3MzdGMiKTsKLSAgICBpZiAoV2ViR0xEZXB0aFRl
eHR1cmU6OnN1cHBvcnRlZChncmFwaGljc0NvbnRleHQzRCgpKSkKLSAgICAgICAgcmVzdWx0LmFw
cGVuZCgiV0VCR0xfZGVwdGhfdGV4dHVyZSIpOwotICAgIGlmIChzdXBwb3J0c0RyYXdCdWZmZXJz
KCkpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2RyYXdfYnVmZmVycyIpOwotICAgIGlm
IChBTkdMRUluc3RhbmNlZEFycmF5czo6c3VwcG9ydGVkKHRoaXMpKQotICAgICAgICByZXN1bHQu
YXBwZW5kKCJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7Ci0KLSAgICBpZiAoYWxsb3dQcml2aWxl
Z2VkRXh0ZW5zaW9ucygpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+c3VwcG9ydHMoIkdMX0FOR0xFX3RyYW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSIpKQotICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfZGVidWdfc2hhZGVycyIpOwotICAgICAgICByZXN1
bHQuYXBwZW5kKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIik7Ci0gICAgfQotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VGV4UGFyYW1ldGVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygpOwotICAgIFdlYkdMVGV4
dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygiZ2V0VGV4UGFyYW1ldGVyIiwgdGFy
Z2V0LCBmYWxzZSk7Ci0gICAgaWYgKCF0ZXgpCi0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8o
KTsKLSAgICBHQzNEaW50IHZhbHVlID0gMDsKLSAgICBzd2l0Y2ggKHBuYW1lKSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX1dSQVBfUzoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X1dSQVBfVDoKLSAgICAgICAgbV9jb250ZXh0LT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBu
YW1lLCAmdmFsdWUpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4odmFsdWUpKTsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhf
QU5JU09UUk9QWV9FWFQ6IC8vIEVYVF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAgICAg
ICBpZiAobV9leHRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMpIHsKLSAgICAgICAgICAgIG1fY29u
dGV4dC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgJnZhbHVlKTsKLSAgICAgICAg
ICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pih2YWx1ZSkp
OwotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX0VOVU0sICJnZXRUZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFt
ZSwgRVhUX3RleHR1cmVfZmlsdGVyX2FuaXNvdHJvcGljIG5vdCBlbmFibGVkIik7Ci0gICAgICAg
IHJldHVybiBXZWJHTEdldEluZm8oKTsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXpl
R0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiZ2V0VGV4UGFyYW1ldGVy
IiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5m
bygpOwotICAgIH0KLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0
VW5pZm9ybShXZWJHTFByb2dyYW0qIHByb2dyYW0sIGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9u
KiB1bmlmb3JtTG9jYXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJB
TShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVXZWJH
TE9iamVjdCgiZ2V0VW5pZm9ybSIsIHByb2dyYW0pKQotICAgICAgICByZXR1cm4gV2ViR0xHZXRJ
bmZvKCk7Ci0gICAgaWYgKCF1bmlmb3JtTG9jYXRpb24gfHwgdW5pZm9ybUxvY2F0aW9uLT5wcm9n
cmFtKCkgIT0gcHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJnZXRVbmlmb3JtIiwgIm5vIHVuaWZvcm1sb2Nh
dGlvbiBvciBub3QgdmFsaWQgZm9yIHRoaXMgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKCk7Ci0gICAgfQotICAgIEdDM0RpbnQgbG9jYXRpb24gPSB1bmlmb3JtTG9jYXRp
b24tPmxvY2F0aW9uKCk7Ci0KLSAgICBHQzNEZW51bSBiYXNlVHlwZTsKLSAgICB1bnNpZ25lZCBs
ZW5ndGg7Ci0gICAgc3dpdGNoICh1bmlmb3JtTG9jYXRpb24tPnR5cGUoKSkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0xfVkVDMjoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFw
aGljc0NvbnRleHQzRDo6Qk9PTDsKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6Qk9PTF9WRUMzOgotICAgICAgICBiYXNlVHlw
ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpCT09MOwotICAgICAgICBsZW5ndGggPSAzOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCT09MX1ZFQzQ6Ci0gICAgICAg
IGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkJPT0w7Ci0gICAgICAgIGxlbmd0aCA9IDQ7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVDoKLSAgICAg
ICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5ndGggPSAx
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRfVkVDMjoK
LSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAgICBsZW5n
dGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlRf
VkVDMzoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwotICAgICAg
ICBsZW5ndGggPSAzOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpJTlRfVkVDNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5UOwot
ICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpGTE9BVDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQ7Ci0gICAgICAgIGxlbmd0aCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FUX1ZFQzI6Ci0gICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250
ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5ndGggPSAyOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVF9WRUMzOgotICAgICAgICBiYXNlVHlwZSA9IEdy
YXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAgICAgICAgbGVuZ3RoID0gMzsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVRfVkVDNDoKLSAgICAgICAgYmFz
ZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0g
ICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUX01BVDI6Ci0g
ICAgICAgIGJhc2VUeXBlID0gR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FUOwotICAgICAgICBsZW5n
dGggPSA0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VF9NQVQzOgotICAgICAgICBiYXNlVHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDsKLSAg
ICAgICAgbGVuZ3RoID0gOTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVRfTUFUNDoKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQ7Ci0gICAgICAgIGxlbmd0aCA9IDE2OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlNBTVBMRVJfQ1VCRToKLSAgICAgICAgYmFzZVR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6SU5U
OwotICAgICAgICBsZW5ndGggPSAxOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICAvLyBDYW4ndCBoYW5kbGUgdGhpcyB0eXBlCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAiZ2V0VW5pZm9ybSIsICJ1bmhhbmRs
ZWQgdHlwZSIpOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotICAgIHN3
aXRjaCAoYmFzZVR5cGUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVDogewot
ICAgICAgICBHQzNEZmxvYXQgdmFsdWVbMTZdID0gezB9OwotICAgICAgICBpZiAobV9pc1JvYnVz
dG5lc3NFWFRTdXBwb3J0ZWQpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS0+Z2V0blVuaWZvcm1mdkVYVChvYmplY3RPclplcm8ocHJvZ3JhbSksIGxvY2F0aW9uLCAxNiAq
IHNpemVvZihHQzNEZmxvYXQpLCB2YWx1ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0VW5pZm9ybWZ2KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgbG9jYXRpb24sIHZh
bHVlKTsKLSAgICAgICAgaWYgKGxlbmd0aCA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyh2YWx1ZVswXSk7Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oRmxvYXQzMkFy
cmF5OjpjcmVhdGUodmFsdWUsIGxlbmd0aCkpOwotICAgIH0KLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlQ6IHsKLSAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsKLSAgICAgICAg
aWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBs
b2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJvZ3JhbSksIGxv
Y2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPT0gMSkKLSAgICAgICAgICAgIHJl
dHVybiBXZWJHTEdldEluZm8odmFsdWVbMF0pOwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZv
KEludDMyQXJyYXk6OmNyZWF0ZSh2YWx1ZSwgbGVuZ3RoKSk7Ci0gICAgfQotICAgIGNhc2UgR3Jh
cGhpY3NDb250ZXh0M0Q6OkJPT0w6IHsKLSAgICAgICAgR0MzRGludCB2YWx1ZVs0XSA9IHswfTsK
LSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdldG5Vbmlmb3JtaXZFWFQob2JqZWN0T3JaZXJvKHBy
b2dyYW0pLCBsb2NhdGlvbiwgNCAqIHNpemVvZihHQzNEaW50KSwgdmFsdWUpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPmdldFVuaWZvcm1pdihvYmplY3RPclplcm8ocHJv
Z3JhbSksIGxvY2F0aW9uLCB2YWx1ZSk7Ci0gICAgICAgIGlmIChsZW5ndGggPiAxKSB7Ci0gICAg
ICAgICAgICBib29sIGJvb2xWYWx1ZVsxNl0gPSB7MH07Ci0gICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGogPSAwOyBqIDwgbGVuZ3RoOyBqKyspCi0gICAgICAgICAgICAgICAgYm9vbFZhbHVlW2pd
ID0gc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWVbal0pOwotICAgICAgICAgICAgcmV0dXJuIFdlYkdM
R2V0SW5mbyhib29sVmFsdWUsIGxlbmd0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFdl
YkdMR2V0SW5mbyhzdGF0aWNfY2FzdDxib29sPih2YWx1ZVswXSkpOwotICAgIH0KLSAgICBkZWZh
dWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLQotICAgIC8vIElmIHdlIGdl
dCBoZXJlLCBzb21ldGhpbmcgd2VudCB3cm9uZyBpbiBvdXIgdW5mb3J0dW5hdGVseSBjb21wbGV4
IGxvZ2ljIGFib3ZlCi0gICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsICJnZXRVbmlmb3JtIiwgInVua25vd24gZXJyb3IiKTsKLSAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKCk7Ci19Ci0KLVBhc3NSZWZQdHI8V2ViR0xVbmlmb3JtTG9jYXRpb24+IFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVT
RURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlk
YXRlV2ViR0xPYmplY3QoImdldFVuaWZvcm1Mb2NhdGlvbiIsIHByb2dyYW0pKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIXZhbGlkYXRlTG9jYXRpb25MZW5ndGgoImdldFVuaWZv
cm1Mb2NhdGlvbiIsIG5hbWUpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBpZiAoIXZh
bGlkYXRlU3RyaW5nKCJnZXRVbmlmb3JtTG9jYXRpb24iLCBuYW1lKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgaWYgKGlzUHJlZml4UmVzZXJ2ZWQobmFtZSkpCi0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIGlmICghcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygpKSB7Ci0gICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwg
ImdldFVuaWZvcm1Mb2NhdGlvbiIsICJwcm9ncmFtIG5vdCBsaW5rZWQiKTsKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIEdDM0RpbnQgdW5pZm9ybUxvY2F0aW9uID0gbV9jb250
ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ob2JqZWN0T3JaZXJvKHByb2dyYW0pLCBuYW1lKTsKLSAg
ICBpZiAodW5pZm9ybUxvY2F0aW9uID09IC0xKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQot
ICAgIEdDM0RpbnQgYWN0aXZlVW5pZm9ybXMgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0Tm9uQnVp
bHRJbkFjdGl2ZVN5bWJvbENvdW50KG9iamVjdE9yWmVybyhwcm9ncmFtKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OkFDVElWRV9VTklGT1JNUywgJmFjdGl2ZVVuaWZvcm1zKTsKLSAgICBmb3IgKEdDM0Rp
bnQgaSA9IDA7IGkgPCBhY3RpdmVVbmlmb3JtczsgaSsrKSB7Ci0gICAgICAgIEFjdGl2ZUluZm8g
aW5mbzsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmdldEFjdGl2ZVVuaWZvcm0ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pLCBpLCBpbmZvKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAvLyBTdHJpcCAiWzBdIiBmcm9tIHRoZSBuYW1lIGlmIGl0J3MgYW4gYXJyYXkuCi0gICAg
ICAgIGlmIChpbmZvLm5hbWUuZW5kc1dpdGgoIlswXSIpKQotICAgICAgICAgICAgaW5mby5uYW1l
ID0gaW5mby5uYW1lLmxlZnQoaW5mby5uYW1lLmxlbmd0aCgpIC0gMyk7Ci0gICAgICAgIC8vIElm
IGl0J3MgYW4gYXJyYXksIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGVhY2ggZWxlbWVudCwg
YXBwZW5kaW5nICJbaW5kZXhdIiB0byB0aGUgbmFtZS4KLSAgICAgICAgZm9yIChHQzNEaW50IGlu
ZGV4ID0gMDsgaW5kZXggPCBpbmZvLnNpemU7ICsraW5kZXgpIHsKLSAgICAgICAgICAgIFN0cmlu
ZyB1bmlmb3JtTmFtZSA9IGluZm8ubmFtZSArICJbIiArIFN0cmluZzo6bnVtYmVyKGluZGV4KSAr
ICJdIjsKLQotICAgICAgICAgICAgaWYgKG5hbWUgPT0gdW5pZm9ybU5hbWUgfHwgbmFtZSA9PSBp
bmZvLm5hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdlYkdMVW5pZm9ybUxvY2F0aW9uOjpj
cmVhdGUocHJvZ3JhbSwgdW5pZm9ybUxvY2F0aW9uLCBpbmZvLnR5cGUpOwotICAgICAgICB9Ci0g
ICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWIoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1l
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotCi0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OwotCi0gICAgaWYgKGluZGV4ID49IG1fbWF4VmVydGV4QXR0cmlicykgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgImdldFZlcnRl
eEF0dHJpYiIsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0
SW5mbygpOwotICAgIH0KLQotICAgIGNvbnN0IFdlYkdMVmVydGV4QXJyYXlPYmplY3RPRVM6OlZl
cnRleEF0dHJpYlN0YXRlJiBzdGF0ZSA9IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVy
dGV4QXR0cmliU3RhdGUoaW5kZXgpOwotCi0gICAgaWYgKG1fYW5nbGVJbnN0YW5jZWRBcnJheXMg
JiYgcG5hbWUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNP
Ul9BTkdMRSkKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5kaXZpc29yKTsKLQot
ICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
QVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HOgotICAgICAgICBpZiAoKCFpc0dMRVMyQ29tcGxp
YW50KCkgJiYgIWluZGV4ICYmIG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+Z2V0VmVydGV4QXR0
cmliU3RhdGUoMCkuYnVmZmVyQmluZGluZyA9PSBtX3ZlcnRleEF0dHJpYjBCdWZmZXIpCi0gICAg
ICAgICAgICB8fCAhc3RhdGUuYnVmZmVyQmluZGluZwotICAgICAgICAgICAgfHwgIXN0YXRlLmJ1
ZmZlckJpbmRpbmctPm9iamVjdCgpKQotICAgICAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbygp
OwotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKFBhc3NSZWZQdHI8V2ViR0xCdWZmZXI+KHN0
YXRlLmJ1ZmZlckJpbmRpbmcpKTsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpWRVJURVhf
QVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGUu
ZW5hYmxlZCk7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJB
WV9OT1JNQUxJWkVEOgotICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHN0YXRlLm5vcm1hbGl6
ZWQpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlZFUlRFWF9BVFRSSUJfQVJSQVlfU0la
RToKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5zaXplKTsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpWRVJURVhfQVRUUklCX0FSUkFZX1NUUklERToKLSAgICAgICAgcmV0
dXJuIFdlYkdMR2V0SW5mbyhzdGF0ZS5vcmlnaW5hbFN0cmlkZSk7Ci0gICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6VkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFOgotICAgICAgICByZXR1cm4gV2Vi
R0xHZXRJbmZvKHN0YXRlLnR5cGUpOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkNVUlJF
TlRfVkVSVEVYX0FUVFJJQjoKLSAgICAgICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhGbG9hdDMyQXJy
YXk6OmNyZWF0ZShtX3ZlcnRleEF0dHJpYlZhbHVlW2luZGV4XS52YWx1ZSwgNCkpOwotICAgIGRl
ZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX0VOVU0sICJnZXRWZXJ0ZXhBdHRyaWIiLCAiaW52YWxpZCBwYXJhbWV0ZXIgbmFtZSIpOwot
ICAgICAgICByZXR1cm4gV2ViR0xHZXRJbmZvKCk7Ci0gICAgfQotfQotCi1sb25nIGxvbmcgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgs
IEdDM0RlbnVtIHBuYW1lKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIEdDM0RzaXplaXB0ciByZXN1bHQgPSBtX2NvbnRleHQtPmdl
dFZlcnRleEF0dHJpYk9mZnNldChpbmRleCwgcG5hbWUpOwotICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxsb25nIGxvbmc+KHJlc3VsdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpo
aW50KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gbW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgYm9vbCBpc1ZhbGlkID0gZmFs
c2U7Ci0gICAgc3dpdGNoICh0YXJnZXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpH
RU5FUkFURV9NSVBNQVBfSElOVDoKLSAgICAgICAgaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpGUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9I
SU5UX09FUzogLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzCi0gICAgICAgIGlmIChtX29lc1N0
YW5kYXJkRGVyaXZhdGl2ZXMpCi0gICAgICAgICAgICBpc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotICAgIGlmICghaXNWYWxpZCkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAiaGludCIsICJpbnZhbGlkIHRh
cmdldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+aGludCh0YXJn
ZXQsIG1vZGUpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQnVm
ZmVyKFdlYkdMQnVmZmVyKiBidWZmZXIpCi17Ci0gICAgaWYgKCFidWZmZXIgfHwgaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYnVmZmVyLT5o
YXNFdmVyQmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29u
dGV4dC0+aXNCdWZmZXIoYnVmZmVyLT5vYmplY3QoKSk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJp
bmdDb250ZXh0Ojppc0NvbnRleHRMb3N0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0
TG9zdDsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzQ29udGV4dExvc3RPclBl
bmRpbmcoKQotewotICAgIGlmIChtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRpb24gJiYgIW1faGFz
UmVxdWVzdGVkUG9saWN5UmVzb2x1dGlvbikgewotICAgICAgICBMT0coV2ViR0wsICJDb250ZXh0
IGlzIGJlaW5nIHVzZWQuIEF0dGVtcHQgdG8gcmVzb2x2ZSB0aGUgcG9saWN5LiIpOwotICAgICAg
ICBEb2N1bWVudCYgZG9jdW1lbnQgPSBjYW52YXMoKS0+ZG9jdW1lbnQoKS50b3BEb2N1bWVudCgp
OwotICAgICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpOwotICAgICAgICBpZiAocGFn
ZSAmJiAhZG9jdW1lbnQudXJsKCkuaXNMb2NhbEZpbGUoKSkKLSAgICAgICAgICAgIHBhZ2UtPm1h
aW5GcmFtZSgpLmxvYWRlcigpLmNsaWVudCgpLnJlc29sdmVXZWJHTFBvbGljeUZvclVSTChkb2N1
bWVudC51cmwoKSk7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBkb24ndCBjdXJyZW50bHkgZG8gYW55
dGhpbmcgd2l0aCB0aGUgcmVzdWx0IGZyb20gcmVzb2x1dGlvbi4gQSBtb3JlCi0gICAgICAgIC8v
IGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG1pZ2h0IHRyeSB0byBjb25zdHJ1Y3QgYSByZWFsIGNv
bnRleHQsIGV0YyBhbmQgcHJvY2VlZAotICAgICAgICAvLyB3aXRoIG5vcm1hbCBvcGVyYXRpb24u
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjkx
MjIKLSAgICAgICAgbV9oYXNSZXF1ZXN0ZWRQb2xpY3lSZXNvbHV0aW9uID0gdHJ1ZTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0TG9zdCB8fCBtX2lzUGVuZGluZ1BvbGljeVJlc29sdXRp
b247Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNFbmFibGVkKEdD
M0RlbnVtIGNhcCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZUNhcGFiaWxpdHkoImlzRW5hYmxlZCIsIGNhcCkpCi0gICAgICAgIHJldHVybiAwOwotICAg
IGlmIChjYXAgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCkKLSAgICAgICAgcmV0
dXJuIG1fc3RlbmNpbEVuYWJsZWQ7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNFbmFibGVkKGNh
cCk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNGcmFtZWJ1ZmZl
cihXZWJHTEZyYW1lYnVmZmVyKiBmcmFtZWJ1ZmZlcikKLXsKLSAgICBpZiAoIWZyYW1lYnVmZmVy
IHx8IGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBp
ZiAoIWZyYW1lYnVmZmVyLT5oYXNFdmVyQmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwot
Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlci0+b2JqZWN0
KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzUHJvZ3JhbShX
ZWJHTFByb2dyYW0qIHByb2dyYW0pCi17Ci0gICAgaWYgKCFwcm9ncmFtIHx8IGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb250ZXh0
LT5pc1Byb2dyYW0ocHJvZ3JhbS0+b2JqZWN0KCkpOwotfQotCi1HQzNEYm9vbGVhbiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OmlzUmVuZGVyYnVmZmVyKFdlYkdMUmVuZGVyYnVmZmVyKiByZW5kZXJi
dWZmZXIpCi17Ci0gICAgaWYgKCFyZW5kZXJidWZmZXIgfHwgaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghcmVuZGVyYnVmZmVyLT5oYXNFdmVy
QmVlbkJvdW5kKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+
aXNSZW5kZXJidWZmZXIocmVuZGVyYnVmZmVyLT5vYmplY3QoKSk7Ci19Ci0KLUdDM0Rib29sZWFu
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNTaGFkZXIoV2ViR0xTaGFkZXIqIHNoYWRlcikKLXsK
LSAgICBpZiAoIXNoYWRlciB8fCBpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIG1fY29udGV4dC0+aXNTaGFkZXIoc2hhZGVyLT5vYmplY3Qo
KSk7Ci19Ci0KLUdDM0Rib29sZWFuIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6aXNUZXh0dXJlKFdl
YkdMVGV4dHVyZSogdGV4dHVyZSkKLXsKLSAgICBpZiAoIXRleHR1cmUgfHwgaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghdGV4dHVyZS0+aGFz
RXZlckJlZW5Cb3VuZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbnRl
eHQtPmlzVGV4dHVyZSh0ZXh0dXJlLT5vYmplY3QoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpsaW5lV2lkdGgoR0MzRGZsb2F0IHdpZHRoKQotewotICAgIGlmIChpc0NvbnRl
eHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPmxpbmVX
aWR0aCh3aWR0aCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpsaW5rUHJvZ3Jh
bShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNF
RF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRh
dGVXZWJHTE9iamVjdCgibGlua1Byb2dyYW0iLCBwcm9ncmFtKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGlmICghaXNHTEVTMkNvbXBsaWFudCgpKSB7Ci0gICAgICAgIFdlYkdMU2hhZGVyKiB2ZXJ0
ZXhTaGFkZXIgPSBwcm9ncmFtLT5nZXRBdHRhY2hlZFNoYWRlcihHcmFwaGljc0NvbnRleHQzRDo6
VkVSVEVYX1NIQURFUik7Ci0gICAgICAgIFdlYkdMU2hhZGVyKiBmcmFnbWVudFNoYWRlciA9IHBy
b2dyYW0tPmdldEF0dGFjaGVkU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFHTUVOVF9TSEFE
RVIpOwotICAgICAgICBpZiAoIXZlcnRleFNoYWRlciB8fCAhdmVydGV4U2hhZGVyLT5pc1ZhbGlk
KCkgfHwgIWZyYWdtZW50U2hhZGVyIHx8ICFmcmFnbWVudFNoYWRlci0+aXNWYWxpZCgpIHx8ICFt
X2NvbnRleHQtPnByZWNpc2lvbnNNYXRjaChvYmplY3RPclplcm8odmVydGV4U2hhZGVyKSwgb2Jq
ZWN0T3JaZXJvKGZyYWdtZW50U2hhZGVyKSkgfHwgIW1fY29udGV4dC0+Y2hlY2tWYXJ5aW5nc1Bh
Y2tpbmcob2JqZWN0T3JaZXJvKHZlcnRleFNoYWRlciksIG9iamVjdE9yWmVybyhmcmFnbWVudFNo
YWRlcikpKSB7Ci0gICAgICAgICAgICBwcm9ncmFtLT5zZXRMaW5rU3RhdHVzKGZhbHNlKTsKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fY29udGV4dC0+bGlu
a1Byb2dyYW0ob2JqZWN0T3JaZXJvKHByb2dyYW0pKTsKLSAgICBwcm9ncmFtLT5pbmNyZWFzZUxp
bmtDb3VudCgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGl4ZWxTdG9yZWko
R0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfRkxJUF9ZX1dFQkdMOgotICAgICAgICBtX3Vu
cGFja0ZsaXBZID0gcGFyYW07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOUEFDS19QUkVNVUxUSVBMWV9BTFBIQV9XRUJHTDoKLSAgICAgICAgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhID0gcGFyYW07Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOUEFDS19DT0xPUlNQQUNFX0NPTlZFUlNJT05fV0VCR0w6Ci0gICAgICAg
IGlmIChwYXJhbSA9PSBHcmFwaGljc0NvbnRleHQzRDo6QlJPV1NFUl9ERUZBVUxUX1dFQkdMIHx8
IHBhcmFtID09IEdyYXBoaWNzQ29udGV4dDNEOjpOT05FKQotICAgICAgICAgICAgbV91bnBhY2tD
b2xvcnNwYWNlQ29udmVyc2lvbiA9IHN0YXRpY19jYXN0PEdDM0RlbnVtPihwYXJhbSk7Ci0gICAg
ICAgIGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBmb3Ig
VU5QQUNLX0NPTE9SU1BBQ0VfQ09OVkVSU0lPTl9XRUJHTCIpOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlBBQ0tfQUxJR05NRU5UOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElH
Tk1FTlQ6Ci0gICAgICAgIGlmIChwYXJhbSA9PSAxIHx8IHBhcmFtID09IDIgfHwgcGFyYW0gPT0g
NCB8fCBwYXJhbSA9PSA4KSB7Ci0gICAgICAgICAgICBpZiAocG5hbWUgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlBBQ0tfQUxJR05NRU5UKQotICAgICAgICAgICAgICAgIG1fcGFja0FsaWdubWVudCA9
IHBhcmFtOwotICAgICAgICAgICAgZWxzZSAvLyBHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FM
SUdOTUVOVDoKLSAgICAgICAgICAgICAgICBtX3VucGFja0FsaWdubWVudCA9IHBhcmFtOwotICAg
ICAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShwbmFtZSwgcGFyYW0pOwotICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJwaXhlbFN0b3JlaSIsICJpbnZhbGlkIHBhcmFtZXRlciBmb3IgYWxp
Z25tZW50Iik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfRU5VTSwgInBpeGVsU3RvcmVpIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUi
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQotewot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NvbnRleHQtPnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Ci19Ci0KLXZvaWQgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIGlmIChp
c0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBEdWUgdG8g
V2ViR0wncyBzYW1lLW9yaWdpbiByZXN0cmljdGlvbnMsIGl0IGlzIG5vdCBwb3NzaWJsZSB0bwot
ICAgIC8vIHRhaW50IHRoZSBvcmlnaW4gdXNpbmcgdGhlIFdlYkdMIEFQSS4KLSAgICBBU1NFUlQo
Y2FudmFzKCktPm9yaWdpbkNsZWFuKCkpOwotICAgIC8vIFZhbGlkYXRlIGlucHV0IHBhcmFtZXRl
cnMuCi0gICAgaWYgKCFwaXhlbHMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJyZWFkUGl4ZWxzIiwgIm5vIGRlc3RpbmF0aW9u
IEFycmF5QnVmZmVyVmlldyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIHN3aXRjaCAo
Zm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6QUxQSEE6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6
Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQg
Zm9ybWF0Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURToKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF81XzZfNToKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJyZWFkUGl4ZWxzIiwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotICAgIGlmIChmb3JtYXQgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEgfHwgdHlwZSAhPSBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkgewotICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwg
ImZvcm1hdCBub3QgUkdCQSBvciB0eXBlIG5vdCBVTlNJR05FRF9CWVRFIik7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgLy8gVmFsaWRhdGUgYXJyYXkgdHlwZSBhZ2FpbnN0IHBpeGVsIHR5
cGUuCi0gICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQ4KSB7Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgInJlYWRQaXhlbHMiLCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBVaW50OEFycmF5Iik7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgY29uc3QgY2hhciogcmVhc29uID0gImZyYW1lYnVmZmVy
IGluY29tcGxldGUiOwotICAgIGlmIChtX2ZyYW1lYnVmZmVyQmluZGluZyAmJiAhbV9mcmFtZWJ1
ZmZlckJpbmRpbmctPm9uQWNjZXNzKGdyYXBoaWNzQ29udGV4dDNEKCksICFpc1Jlc291cmNlU2Fm
ZSgpLCAmcmVhc29uKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04sICJyZWFkUGl4ZWxzIiwgcmVhc29u
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAvLyBDYWxjdWxhdGUgYXJyYXkgc2l6ZSwg
dGFraW5nIGludG8gY29uc2lkZXJhdGlvbiBvZiBQQUNLX0FMSUdOTUVOVC4KLSAgICB1bnNpZ25l
ZCBpbnQgdG90YWxCeXRlc1JlcXVpcmVkID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgcGFkZGluZyA9
IDA7Ci0gICAgaWYgKCFtX2lzUm9idXN0bmVzc0VYVFN1cHBvcnRlZCkgewotICAgICAgICBHQzNE
ZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0
eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3BhY2tBbGlnbm1lbnQsICZ0b3RhbEJ5dGVzUmVxdWlyZWQs
ICZwYWRkaW5nKTsKLSAgICAgICAgaWYgKGVycm9yICE9IEdyYXBoaWNzQ29udGV4dDNEOjpOT19F
UlJPUikgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoZXJyb3IsICJyZWFkUGl4ZWxz
IiwgImludmFsaWQgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChwaXhlbHMtPmJ5dGVMZW5ndGgoKSA8IHRvdGFsQnl0ZXNSZXF1aXJlZCkg
ewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAicmVhZFBpeGVscyIsICJBcnJheUJ1ZmZlclZpZXcgbm90IGxhcmdlIGVu
b3VnaCBmb3IgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgY2xlYXJJZkNvbXBvc2l0ZWQoKTsKLSAgICB2b2lkKiBkYXRhID0gcGl4ZWxz
LT5iYXNlQWRkcmVzcygpOwotCi0gICAgewotICAgICAgICBTY29wZWREcmF3aW5nQnVmZmVyQmlu
ZGVyIGJpbmRlcihtX2RyYXdpbmdCdWZmZXIuZ2V0KCksIG1fZnJhbWVidWZmZXJCaW5kaW5nLmdl
dCgpKTsKLSAgICAgICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKQotICAgICAgICAg
ICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlYWRuUGl4ZWxzRVhUKHgsIHksIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLT5ieXRlTGVuZ3RoKCksIGRhdGEpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKLSAgICB9Ci0KLSNpZiBPUyhEQVJXSU4pCi0g
ICAgaWYgKG1faXNSb2J1c3RuZXNzRVhUU3VwcG9ydGVkKSAvLyB3ZSBoYXZlbid0IGNvbXB1dGVk
IHBhZGRpbmcKLSAgICAgICAgbV9jb250ZXh0LT5jb21wdXRlSW1hZ2VTaXplSW5CeXRlcyhmb3Jt
YXQsIHR5cGUsIHdpZHRoLCBoZWlnaHQsIG1fcGFja0FsaWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1
aXJlZCwgJnBhZGRpbmcpOwotICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBzZWN0aW9uIHdoZW4g
R0wgZHJpdmVyIGJ1ZyBvbiBNYWMgQU5EIHRoZSBHTEVTIGRyaXZlciBidWcKLSAgICAvLyBvbiBR
QyBpcyBmaXhlZCwgaS5lLiwgd2hlbiBhbHBoYSBpcyBvZmYsIHJlYWRQaXhlbHMgc2hvdWxkCi0g
ICAgLy8gc2V0IGFscGhhIHRvIDI1NSBpbnN0ZWFkIG9mIDAuCi0gICAgaWYgKCFtX2ZyYW1lYnVm
ZmVyQmluZGluZyAmJiAhbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpLmFscGhhKSB7
Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVscyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWdu
ZWQgY2hhcio+KGRhdGEpOwotICAgICAgICBmb3IgKEdDM0RzaXplaSBpeSA9IDA7IGl5IDwgaGVp
Z2h0OyArK2l5KSB7Ci0gICAgICAgICAgICBmb3IgKEdDM0RzaXplaSBpeCA9IDA7IGl4IDwgd2lk
dGg7ICsraXgpIHsKLSAgICAgICAgICAgICAgICBwaXhlbHNbM10gPSAyNTU7Ci0gICAgICAgICAg
ICAgICAgcGl4ZWxzICs9IDQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwaXhlbHMgKz0g
cGFkZGluZzsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKLXsKLSAgICBpZiAoaXNDb250ZXh0
TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5yZWxlYXNl
U2hhZGVyQ29tcGlsZXIoKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewotICAgIGlmIChpc0NvbnRleHRM
b3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAodGFyZ2V0ICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgInJlbmRlcmJ1ZmZlclN0b3JhZ2UiLCAi
aW52YWxpZCB0YXJnZXQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAoIW1fcmVu
ZGVyYnVmZmVyQmluZGluZyB8fCAhbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5vYmplY3QoKSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgIm5vIGJvdW5kIHJlbmRlcmJ1ZmZlciIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghdmFsaWRhdGVTaXplKCJyZW5kZXJidWZm
ZXJTdG9yYWdlIiwgd2lkdGgsIGhlaWdodCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2gg
KGludGVybmFsZm9ybWF0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09N
UE9ORU5UMTY6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTQ6Ci0gICAgY2FzZSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCNV9BMToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpS
R0I1NjU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDg6Ci0gICAg
ICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFsZm9ybWF0
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRl
cm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGlu
Zy0+c2V0SXNWYWxpZCh0cnVlKTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRT
aXplKHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgICAgICBpZiAoaXNEZXB0aFN0ZW5jaWxTdXBwb3J0
ZWQoKSkgewotICAgICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdl
dCwgRXh0ZW5zaW9uczNEOjpERVBUSDI0X1NURU5DSUw4LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAg
ICAgfQotICAgICAgICBtX3JlbmRlcmJ1ZmZlckJpbmRpbmctPnNldFNpemUod2lkdGgsIGhlaWdo
dCk7Ci0gICAgICAgIG1fcmVuZGVyYnVmZmVyQmluZGluZy0+c2V0SXNWYWxpZChpc0RlcHRoU3Rl
bmNpbFN1cHBvcnRlZCgpKTsKLSAgICAgICAgbV9yZW5kZXJidWZmZXJCaW5kaW5nLT5zZXRJbnRl
cm5hbEZvcm1hdChpbnRlcm5hbGZvcm1hdCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VO
VU0sICJyZW5kZXJidWZmZXJTdG9yYWdlIiwgImludmFsaWQgaW50ZXJuYWxmb3JtYXQiKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBhcHBseVN0ZW5jaWxUZXN0KCk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpzYW1wbGVDb3ZlcmFnZShHQzNEZmxvYXQgdmFsdWUsIEdD
M0Rib29sZWFuIGludmVydCkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5zYW1wbGVDb3ZlcmFnZSh2YWx1ZSwgaW52
ZXJ0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNjaXNzb3IoR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCF2
YWxpZGF0ZVNpemUoInNjaXNzb3IiLCB3aWR0aCwgaGVpZ2h0KSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1fY29udGV4dC0+c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnNoYWRlclNvdXJjZShXZWJHTFNoYWRlciogc2hhZGVyLCBj
b25zdCBTdHJpbmcmIHN0cmluZywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVdl
YkdMT2JqZWN0KCJzaGFkZXJTb3VyY2UiLCBzaGFkZXIpKQotICAgICAgICByZXR1cm47Ci0gICAg
U3RyaW5nIHN0cmluZ1dpdGhvdXRDb21tZW50cyA9IFN0cmlwQ29tbWVudHMoc3RyaW5nKS5yZXN1
bHQoKTsKLSAgICBpZiAoIXZhbGlkYXRlU3RyaW5nKCJzaGFkZXJTb3VyY2UiLCBzdHJpbmdXaXRo
b3V0Q29tbWVudHMpKQotICAgICAgICByZXR1cm47Ci0gICAgc2hhZGVyLT5zZXRTb3VyY2Uoc3Ry
aW5nKTsKLSAgICBtX2NvbnRleHQtPnNoYWRlclNvdXJjZShvYmplY3RPclplcm8oc2hhZGVyKSwg
c3RyaW5nV2l0aG91dENvbW1lbnRzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNrKQot
ewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBpZiAoIXZhbGlkYXRlU3RlbmNpbEZ1bmMoInN0ZW5jaWxGdW5jIiwgZnVuYykpCi0gICAgICAg
IHJldHVybjsKLSAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwotICAgIG1fc3RlbmNpbEZ1bmNS
ZWZCYWNrID0gcmVmOwotICAgIG1fc3RlbmNpbEZ1bmNNYXNrID0gbWFzazsKLSAgICBtX3N0ZW5j
aWxGdW5jTWFza0JhY2sgPSBtYXNrOwotICAgIG1fY29udGV4dC0+c3RlbmNpbEZ1bmMoZnVuYywg
cmVmLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxGdW5j
U2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1
aW50IG1hc2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTdGVuY2lsRnVuYygic3RlbmNpbEZ1bmNTZXBhcmF0
ZSIsIGZ1bmMpKQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNoIChmYWNlKSB7Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlRfQU5EX0JBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbEZ1
bmNSZWYgPSByZWY7Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOwotICAgICAg
ICBtX3N0ZW5jaWxGdW5jTWFzayA9IG1hc2s7Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNNYXNrQmFj
ayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkZS
T05UOgotICAgICAgICBtX3N0ZW5jaWxGdW5jUmVmID0gcmVmOwotICAgICAgICBtX3N0ZW5jaWxG
dW5jTWFzayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkJBQ0s6Ci0gICAgICAgIG1fc3RlbmNpbEZ1bmNSZWZCYWNrID0gcmVmOwotICAgICAgICBt
X3N0ZW5jaWxGdW5jTWFza0JhY2sgPSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0
OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNLCAic3RlbmNpbEZ1bmNTZXBhcmF0ZSIsICJpbnZhbGlkIGZhY2UiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFjZSwgZnVu
YywgcmVmLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxN
YXNrKEdDM0R1aW50IG1hc2spCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG1fc3RlbmNpbE1hc2sgPSBtYXNrOwotICAgIG1fc3RlbmNp
bE1hc2tCYWNrID0gbWFzazsKLSAgICBtX2NvbnRleHQtPnN0ZW5jaWxNYXNrKG1hc2spOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNEZW51
bSBmYWNlLCBHQzNEdWludCBtYXNrKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKGZhY2UpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpGUk9OVF9BTkRfQkFDSzoKLSAgICAgICAgbV9zdGVuY2lsTWFzayA9IG1h
c2s7Ci0gICAgICAgIG1fc3RlbmNpbE1hc2tCYWNrID0gbWFzazsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RlJPTlQ6Ci0gICAgICAgIG1fc3RlbmNpbE1hc2sg
PSBtYXNrOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpCQUNL
OgotICAgICAgICBtX3N0ZW5jaWxNYXNrQmFjayA9IG1hc2s7Ci0gICAgICAgIGJyZWFrOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX0VOVU0sICJzdGVuY2lsTWFza1NlcGFyYXRlIiwgImludmFsaWQgZmFjZSIpOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotICAgIG1fY29udGV4dC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShm
YWNlLCBtYXNrKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnN0ZW5jaWxPcChH
QzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4
dC0+c3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmYWls
LCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCi17Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+c3RlbmNpbE9w
U2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleEltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZl
bCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29u
c3Qgdm9pZCogcGl4ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBGSVhNRTogRm9y
IG5vdyB3ZSBpZ25vcmUgYW55IGVycm9ycyByZXR1cm5lZC4KLSAgICBlYyA9IDA7Ci0gICAgV2Vi
R0xUZXh0dXJlKiB0ZXggPSB2YWxpZGF0ZVRleHR1cmVCaW5kaW5nKCJ0ZXhJbWFnZTJEIiwgdGFy
Z2V0LCB0cnVlKTsKLSAgICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycygidGV4SW1h
Z2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3
aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSkpOwotICAgIEFTU0VSVCh0ZXgpOwot
ICAgIEFTU0VSVCghbGV2ZWwgfHwgIVdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQp
KTsKLSAgICBpZiAoIXBpeGVscykgewotICAgICAgICAvLyBOb3RlOiBDaHJvbWl1bSdzIE9wZW5H
TCBpbXBsZW1lbnRhdGlvbiBjbGVhcnMgdGV4dHVyZXMgYW5kIGlzUmVzb3VyY2VTYWZlKCkgaXMg
dGhlcmVmb3JlIHRydWUuCi0gICAgICAgIC8vIEZvciBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIGlm
IHRoZXkgYXJlIHVzaW5nIEFOR0xFX2RlcHRoX3RleHR1cmUsIEFOR0xFIGRlcHRoIHRleHR1cmVz
Ci0gICAgICAgIC8vIGNhbiBub3QgYmUgY2xlYXJlZCB3aXRoIHRleEltYWdlMkQgYW5kIG11c3Qg
YmUgY2xlYXJlZCBieSBiaW5kaW5nIHRvIGFuIGZibyBhbmQgY2FsbGluZwotICAgICAgICAvLyBj
bGVhci4KLSAgICAgICAgaWYgKGlzUmVzb3VyY2VTYWZlKCkpCi0gICAgICAgICAgICBtX2NvbnRl
eHQtPnRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWln
aHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBudWxscHRyKTsKLSAgICAgICAgZWxzZSB7Ci0gICAg
ICAgICAgICBib29sIHN1Y2NlZWQgPSBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUo
dGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVy
LCBmb3JtYXQsIHR5cGUsIG1fdW5wYWNrQWxpZ25tZW50KTsKLSAgICAgICAgICAgIGlmICghc3Vj
Y2VlZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICBBU1NFUlQodmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4SW1hZ2UyRCIsIGlu
dGVybmFsZm9ybWF0KSk7Ci0gICAgICAgIG1fY29udGV4dC0+bW92ZUVycm9yc1RvU3ludGhldGlj
RXJyb3JMaXN0KCk7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvcmRlciwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotICAgICAgICBpZiAobV9jb250
ZXh0LT5tb3ZlRXJyb3JzVG9TeW50aGV0aWNFcnJvckxpc3QoKSkgewotICAgICAgICAgICAgLy8g
VGhlIHRleEltYWdlMkQgZnVuY3Rpb24gZmFpbGVkLiBUZWxsIHRoZSBXZWJHTFRleHR1cmUgaXQg
ZG9lc24ndCBoYXZlIHRoZSBkYXRhIGZvciB0aGlzIGxldmVsLgotICAgICAgICAgICAgdGV4LT5t
YXJrSW52YWxpZCh0YXJnZXQsIGxldmVsKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
fQotICAgIH0KLSAgICB0ZXgtPnNldExldmVsSW5mbyh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhJbWFnZTJESW1wbChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEltYWdl
KiBpbWFnZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkltYWdlSHRtbERvbVNvdXJjZSBkb21Tb3VyY2Us
IGJvb2wgZmxpcFksIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgZWMgPSAwOwotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUV4dHJhY3RvciBpbWFnZUV4dHJhY3RvcihpbWFnZSwgZG9tU291cmNlLCBw
cmVtdWx0aXBseUFscGhhLCBtX3VucGFja0NvbG9yc3BhY2VDb252ZXJzaW9uID09IEdyYXBoaWNz
Q29udGV4dDNEOjpOT05FKTsKLSAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVk
ZWQoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgInRleEltYWdlMkQiLCAiYmFkIGltYWdlIGRhdGEiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdCBzb3VyY2VEYXRh
Rm9ybWF0ID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VTb3VyY2VGb3JtYXQoKTsKLSAgICBHcmFwaGlj
c0NvbnRleHQzRDo6QWxwaGFPcCBhbHBoYU9wID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VBbHBoYU9w
KCk7Ci0gICAgY29uc3Qgdm9pZCogaW1hZ2VQaXhlbERhdGEgPSBpbWFnZUV4dHJhY3Rvci5pbWFn
ZVBpeGVsRGF0YSgpOwotCi0gICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgaWYg
KHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgc291cmNlRGF0YUZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6RGF0YUZvcm1hdFJHQkE4ICYmIGZvcm1hdCA9PSBH
cmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiBhbHBoYU9wID09IEdyYXBoaWNzQ29udGV4dDNEOjpB
bHBoYURvTm90aGluZyAmJiAhZmxpcFkpCi0gICAgICAgIG5lZWRDb252ZXJzaW9uID0gZmFsc2U7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5wYWNrSW1hZ2VEYXRhKGltYWdl
LCBpbWFnZVBpeGVsRGF0YSwgZm9ybWF0LCB0eXBlLCBmbGlwWSwgYWxwaGFPcCwgc291cmNlRGF0
YUZvcm1hdCwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VXaWR0aCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFn
ZUhlaWdodCgpLCBpbWFnZUV4dHJhY3Rvci5pbWFnZVNvdXJjZVVucGFja0FsaWdubWVudCgpLCBk
YXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgInBhY2tJbWFnZSBlcnJvciIpOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKG1fdW5wYWNrQWxpZ25t
ZW50ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0
M0Q6OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2
ZWwsIGludGVybmFsZm9ybWF0LCBpbWFnZS0+d2lkdGgoKSwgaW1hZ2UtPmhlaWdodCgpLCAwLCBm
b3JtYXQsIHR5cGUsIG5lZWRDb252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0
YSwgZWMpOwotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRl
eHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3Vu
cGFja0FsaWdubWVudCk7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0
ZVRleEZ1bmMoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBUZXhGdW5jVmFsaWRhdGlvbkZ1bmN0
aW9uVHlwZSBmdW5jdGlvblR5cGUsIFRleEZ1bmNWYWxpZGF0aW9uU291cmNlVHlwZSBzb3VyY2VU
eXBlLCBHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9y
bWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBH
QzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0KQotewotICAgIGlmICghdmFsaWRhdGVUZXhGdW5jUGFyYW1ldGVycyhmdW5jdGlvbk5h
bWUsIGZ1bmN0aW9uVHlwZSwgdGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBo
ZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgV2ViR0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZyhmdW5jdGlv
bk5hbWUsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoZnVuY3Rpb25UeXBlID09IE5vdFRleFN1YkltYWdlMkQpIHsKLSAg
ICAgICAgaWYgKGxldmVsICYmIFdlYkdMVGV4dHVyZTo6aXNOUE9UKHdpZHRoLCBoZWlnaHQpKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgPiAwIG5vdCBwb3dlciBvZiAyIik7Ci0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRm9yIFNvdXJjZUFy
cmF5QnVmZmVyVmlldywgZnVuY3Rpb24gdmFsaWRhdGVUZXhGdW5jRGF0YSgpIHdvdWxkIGhhbmRs
ZSB3aGV0aGVyIHRvIHZhbGlkYXRlIHRoZSBTZXR0YWJsZVRleEZvcm1hdAotICAgICAgICAvLyBi
eSBjaGVja2luZyBpZiB0aGUgQXJyYXlCdWZmZXJWaWV3IGlzIG51bGwgb3Igbm90LgotICAgICAg
ICBpZiAoc291cmNlVHlwZSAhPSBTb3VyY2VBcnJheUJ1ZmZlclZpZXcpIHsKLSAgICAgICAgICAg
IGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5hbWUsIGZvcm1hdCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKCF2YWxpZGF0ZVNldHRhYmxlVGV4Rm9ybWF0KGZ1bmN0aW9uTmFtZSwgZm9ybWF0
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCF2YWxpZGF0ZVNpemUo
ZnVuY3Rpb25OYW1lLCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgLy8gQmVmb3JlIGNoZWNraW5nIGlmIGl0IGlzIGluIHRoZSByYW5nZSwgY2hl
Y2sgaWYgb3ZlcmZsb3cgaGFwcGVucyBmaXJzdC4KLSAgICAgICAgaWYgKHhvZmZzZXQgKyB3aWR0
aCA8IDAgfHwgeW9mZnNldCArIGhlaWdodCA8IDApIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJi
YWQgZGltZW5zaW9ucyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiB0ZXh0dXJlLT5nZXRXaWR0aCh0YXJnZXQsIGxl
dmVsKSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gdGV4dHVyZS0+Z2V0SGVpZ2h0KHRhcmdldCwgbGV2
ZWwpKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAiZGltZW5zaW9ucyBvdXQgb2YgcmFuZ2UiKTsK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBpZiAodGV4dHVy
ZS0+Z2V0SW50ZXJuYWxGb3JtYXQodGFyZ2V0LCBsZXZlbCkgIT0gZm9ybWF0IHx8IHRleHR1cmUt
PmdldFR5cGUodGFyZ2V0LCBsZXZlbCkgIT0gdHlwZSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5jdGlvbk5h
bWUsICJ0eXBlIGFuZCBmb3JtYXQgZG8gbm90IG1hdGNoIHRleHR1cmUiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXZhbGlkYXRlVGV4RnVuY0RhdGEoInRleEltYWdlMkQiLCBsZXZlbCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMsIE51bGxBbGxvd2VkKQotICAgICAgICB8fCAhdmFsaWRh
dGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwgTm90VGV4U3ViSW1hZ2UyRCwgU291cmNlQXJyYXlCdWZm
ZXJWaWV3LCB0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9y
ZGVyLCBmb3JtYXQsIHR5cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0gICAgdm9pZCogZGF0
YSA9IHBpeGVscyA/IHBpeGVscy0+YmFzZUFkZHJlc3MoKSA6IDA7Ci0gICAgVmVjdG9yPHVpbnQ4
X3Q+IHRlbXBEYXRhOwotICAgIGJvb2wgY2hhbmdlVW5wYWNrQWxpZ25tZW50ID0gZmFsc2U7Ci0g
ICAgaWYgKGRhdGEgJiYgKG1fdW5wYWNrRmxpcFkgfHwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhh
KSkgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdFRleHR1cmVEYXRhKHdpZHRoLCBo
ZWlnaHQsIGZvcm1hdCwgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3VucGFja0FsaWdubWVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wRGF0YSkpCi0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIGRhdGEgPSB0ZW1wRGF0YS5kYXRhKCk7Ci0gICAgICAgIGNoYW5n
ZVVucGFja0FsaWdubWVudCA9IHRydWU7Ci0gICAgfQotICAgIGlmIChjaGFuZ2VVbnBhY2tBbGln
bm1lbnQpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsCi0gICAgICAgICAgICAgICAg
ICAgZm9ybWF0LCB0eXBlLCBkYXRhLCBlYyk7Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVu
dCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0
T3JQZW5kaW5nKCkgfHwgIXBpeGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhJbWFnZTJEIiwg
Tm90VGV4U3ViSW1hZ2UyRCwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBpbnRlcm5h
bGZvcm1hdCwgcGl4ZWxzLT53aWR0aCgpLCBwaXhlbHMtPmhlaWdodCgpLCAwLCBmb3JtYXQsIHR5
cGUsIDAsIDApKQotICAgICAgICByZXR1cm47Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IGRhdGE7Ci0g
ICAgYm9vbCBuZWVkQ29udmVyc2lvbiA9IHRydWU7Ci0gICAgLy8gVGhlIGRhdGEgZnJvbSBJbWFn
ZURhdGEgaXMgYWx3YXlzIG9mIGZvcm1hdCBSR0JBOC4KLSAgICAvLyBObyBjb252ZXJzaW9uIGlz
IG5lZWRlZCBpZiBkZXN0aW5hdGlvbiBmb3JtYXQgaXMgUkdCQSBhbmQgdHlwZSBpcyBVU0lHTkVE
X0JZVEUgYW5kIG5vIEZsaXAgb3IgUHJlbXVsdGlwbHkgb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgot
ICAgIGlmICghbV91bnBhY2tGbGlwWSAmJiAhbV91bnBhY2tQcmVtdWx0aXBseUFscGhhICYmIGZv
cm1hdCA9PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAg
IGVsc2UgewotICAgICAgICBpZiAoIW1fY29udGV4dC0+ZXh0cmFjdEltYWdlRGF0YShwaXhlbHMs
IGZvcm1hdCwgdHlwZSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBk
YXRhKSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUsICJ0ZXhJbWFnZTJEIiwgImJhZCBpbWFnZSBkYXRhIik7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50
ICE9IDEpCi0gICAgICAgIG1fY29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6
OlVOUEFDS19BTElHTk1FTlQsIDEpOwotICAgIHRleEltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWws
IGludGVybmFsZm9ybWF0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZv
cm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgp
LT5kYXRhKCksIGVjKTsKLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi1QYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OmRyYXdJbWFnZUludG9CdWZmZXIoSW1hZ2UqIGltYWdlLCBpbnQgd2lkdGgs
IGludCBoZWlnaHQsIGludCBkZXZpY2VTY2FsZUZhY3RvcikKLXsKLSAgICBJbnRTaXplIHNpemUo
d2lkdGgsIGhlaWdodCk7Ci0gICAgc2l6ZS5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7Ci0gICAg
SW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fZ2VuZXJhdGVkSW1hZ2VDYWNoZS5pbWFnZUJ1ZmZlcihzaXpl
KTsKLSAgICBpZiAoIWJ1ZikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6T1VUX09GX01FTU9SWSwgInRleEltYWdlMkQiLCAib3V0IG9mIG1lbW9yeSIpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBGbG9hdFJlY3Qgc3JjUmVjdChG
bG9hdFBvaW50KCksIGltYWdlLT5zaXplKCkpOwotICAgIEZsb2F0UmVjdCBkZXN0UmVjdChGbG9h
dFBvaW50KCksIHNpemUpOwotICAgIGJ1Zi0+Y29udGV4dCgpLT5kcmF3SW1hZ2UoaW1hZ2UsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIGRlc3RSZWN0LCBzcmNSZWN0KTsKLSAgICByZXR1cm4gYnVmLT5j
b3B5SW1hZ2UoSW1hZ2VCdWZmZXI6OmZhc3RDb3B5SW1hZ2VNb2RlKCkpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VF
bGVtZW50KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlm
IChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgi
dGV4SW1hZ2UyRCIsIGltYWdlLCBlYykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJ
bWFnZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5k
ZXJlcihpbWFnZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NWR0lt
YWdlKCkpCi0gICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFn
ZUZvclJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7Ci0K
LSAgICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleEltYWdlMkQi
LCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgaW1hZ2VGb3JSZW5kZXItPndpZHRoKCksIGltYWdlRm9yUmVuZGVy
LT5oZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwg
dHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tSW1h
Z2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdD
M0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1M
Q2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVIVE1MQ2FudmFz
RWxlbWVudCgidGV4SW1hZ2UyRCIsIGNhbnZhcywgZWMpIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRl
eEltYWdlMkQiLCBOb3RUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFy
Z2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWln
aHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2Vi
R0xUZXh0dXJlKiB0ZXh0dXJlID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4SW1hZ2UyRCIs
IHRhcmdldCwgdHJ1ZSk7Ci0gICAgLy8gSWYgcG9zc2libGUsIGNvcHkgZnJvbSB0aGUgY2FudmFz
IGVsZW1lbnQgZGlyZWN0bHkgdG8gdGhlIHRleHR1cmUKLSAgICAvLyB2aWEgdGhlIEdQVSwgd2l0
aG91dCBhIHJlYWQtYmFjayB0byBzeXN0ZW0gbWVtb3J5LgotICAgIC8vCi0gICAgLy8gRklYTUU6
IHJlc3RyaWN0aW9uIG9mIChSR0IgfHwgUkdCQSkvVU5TSUdORURfQllURSBzaG91bGQgYmUgbGlm
dGVkIHdoZW4KLSAgICAvLyBJbWFnZUJ1ZmZlcjo6Y29weVRvUGxhdGZvcm1UZXh0dXJlIGltcGxl
bWVudGF0aW9ucyBhcmUgZnVsbHkgZnVuY3Rpb25hbC4KLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQgPT0gdGFyZ2V0ICYmIHRleHR1cmUgJiYgdHlwZSA9PSB0ZXh0dXJlLT5n
ZXRUeXBlKHRhcmdldCwgbGV2ZWwpCi0gICAgICAgICYmIChmb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQiB8fCBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEpICYmIHR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpIHsKLSAgICAgICAgSW1hZ2VCdWZm
ZXIqIGJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7Ci0gICAgICAgIGlmIChidWZmZXIgJiYgYnVm
ZmVyLT5jb3B5VG9QbGF0Zm9ybVRleHR1cmUoKm1fY29udGV4dC5nZXQoKSwgdGV4dHVyZS0+b2Jq
ZWN0KCksIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1fdW5wYWNr
RmxpcFkpKSB7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0LCBsZXZl
bCwgaW50ZXJuYWxmb3JtYXQsIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgdHlw
ZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBSZWZQdHI8
SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBjYW52YXMtPmdldEltYWdlRGF0YSgpOwotICAgIGlmIChp
bWFnZURhdGEpCi0gICAgICAgIHRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3Jt
YXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2VEYXRhLmdldCgpLCBlYyk7Ci0gICAgZWxzZQotICAgICAg
ICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0
eXBlLCBjYW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tQ2Fu
dmFzLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQot
I2lmIEVOQUJMRShWSURFTykKLVBhc3NSZWZQdHI8SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEJhY2tpbmdTdG9y
ZUNvcHkgYmFja2luZ1N0b3JlQ29weSwgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgSW50U2l6ZSBz
aXplKHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpKTsKLSAgICBJbWFn
ZUJ1ZmZlciogYnVmID0gbV9nZW5lcmF0ZWRJbWFnZUNhY2hlLmltYWdlQnVmZmVyKHNpemUpOwot
ICAgIGlmICghYnVmKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpPVVRfT0ZfTUVNT1JZLCAidGV4SW1hZ2UyRCIsICJvdXQgb2YgbWVtb3J5Iik7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBJbnRSZWN0IGRlc3RSZWN0KDAsIDAsIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci0gICAgLy8gRklYTUU6IFR1cm4gdGhpcyBpbnRv
IGEgR1BVLUdQVSB0ZXh0dXJlIGNvcHkgaW5zdGVhZCBvZiBDUFUgcmVhZGJhY2suCi0gICAgdmlk
ZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1Zi0+Y29udGV4dCgpLCBkZXN0UmVjdCk7
Ci0gICAgcmV0dXJuIGJ1Zi0+Y29weUltYWdlKGJhY2tpbmdTdG9yZUNvcHkpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0Rp
bnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MVmlk
ZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTFZpZGVvRWxlbWVu
dCgidGV4SW1hZ2UyRCIsIHZpZGVvLCBlYykKLSAgICAgICAgfHwgIXZhbGlkYXRlVGV4RnVuYygi
dGV4SW1hZ2UyRCIsIE5vdFRleFN1YkltYWdlMkQsIFNvdXJjZUhUTUxWaWRlb0VsZW1lbnQsIHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+
dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBlLCAwLCAwKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gR28gdGhyb3VnaCB0aGUgZmFzdCBwYXRoIGRvaW5nIGEgR1BVLUdQVSB0ZXh0dXJl
cyBjb3B5IHdpdGhvdXQgYSByZWFkYmFjayB0byBzeXN0ZW0gbWVtb3J5IGlmIHBvc3NpYmxlLgot
ICAgIC8vIE90aGVyd2lzZSwgaXQgd2lsbCBmYWxsIGJhY2sgdG8gdGhlIG5vcm1hbCBTVyBwYXRo
LgotICAgIC8vIEZJWE1FOiBUaGUgY3VycmVudCByZXN0cmljdGlvbnMgcmVxdWlyZSB0aGF0IGZv
cm1hdCBzaG91ZCBiZSBSR0Igb3IgUkdCQSwKLSAgICAvLyB0eXBlIHNob3VsZCBiZSBVTlNJR05F
RF9CWVRFIGFuZCBsZXZlbCBzaG91bGQgYmUgMC4gSXQgbWF5IGJlIGxpZnRlZCBpbiB0aGUgZnV0
dXJlLgotICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmco
InRleEltYWdlMkQiLCB0YXJnZXQsIHRydWUpOwotICAgIGlmIChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCA9PSB0YXJnZXQgJiYgdGV4dHVyZQotICAgICAgICAmJiAoZm9ybWF0ID09IEdy
YXBoaWNzQ29udGV4dDNEOjpSR0IgfHwgZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
KQotICAgICAgICAmJiB0eXBlID09IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0g
ICAgICAgICYmICh0ZXh0dXJlLT5nZXRUeXBlKHRhcmdldCwgbGV2ZWwpID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFIHx8ICF0ZXh0dXJlLT5pc1ZhbGlkKHRhcmdldCwgbGV2ZWwp
KQotICAgICAgICAmJiAhbGV2ZWwpIHsKLSAgICAgICAgaWYgKHZpZGVvLT5jb3B5VmlkZW9UZXh0
dXJlVG9QbGF0Zm9ybVRleHR1cmUobV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlLT5vYmplY3QoKSwg
bGV2ZWwsIHR5cGUsIGludGVybmFsZm9ybWF0LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIG1f
dW5wYWNrRmxpcFkpKSB7Ci0gICAgICAgICAgICB0ZXh0dXJlLT5zZXRMZXZlbEluZm8odGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHZpZGVvLT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRl
b0hlaWdodCgpLCB0eXBlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIE5vcm1hbCBwdXJlIFNXIHBhdGguCi0gICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9
IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJbWFnZU1vZGUo
KSwgZWMpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICB0ZXhJbWFnZTJE
SW1wbCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5n
ZXQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6Okh0bWxEb21WaWRlbywgbV91bnBhY2tGbGlwWSwgbV91
bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7Ci19Ci0jZW5kaWYKLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1l
LCBHQzNEZmxvYXQgcGFyYW1mLCBHQzNEaW50IHBhcmFtaSwgYm9vbCBpc0Zsb2F0KQotewotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBXZWJH
TFRleHR1cmUqIHRleCA9IHZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoInRleFBhcmFtZXRlciIsIHRh
cmdldCwgZmFsc2UpOwotICAgIGlmICghdGV4KQotICAgICAgICByZXR1cm47Ci0gICAgc3dpdGNo
IChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRF
UjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVI6Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TOgot
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9UOgotICAgICAgICBpZiAo
KGlzRmxvYXQgJiYgcGFyYW1mICE9IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFICYm
IHBhcmFtZiAhPSBHcmFwaGljc0NvbnRleHQzRDo6TUlSUk9SRURfUkVQRUFUICYmIHBhcmFtZiAh
PSBHcmFwaGljc0NvbnRleHQzRDo6UkVQRUFUKQotICAgICAgICAgICAgfHwgKCFpc0Zsb2F0ICYm
IHBhcmFtaSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSAmJiBwYXJhbWkgIT0g
R3JhcGhpY3NDb250ZXh0M0Q6Ok1JUlJPUkVEX1JFUEVBVCAmJiBwYXJhbWkgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlJFUEVBVCkpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ0ZXhQYXJhbWV0ZXIiLCAiaW52YWxpZCBwYXJh
bWV0ZXIiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsK
LSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6VEVYVFVSRV9NQVhfQU5JU09UUk9QWV9FWFQ6IC8vIEVY
VF90ZXh0dXJlX2ZpbHRlcl9hbmlzb3Ryb3BpYwotICAgICAgICBpZiAoIW1fZXh0VGV4dHVyZUZp
bHRlckFuaXNvdHJvcGljKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1l
dGVyLCBFWFRfdGV4dHVyZV9maWx0ZXJfYW5pc290cm9waWMgbm90IGVuYWJsZWQiKTsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0Ogot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVN
LCAidGV4UGFyYW1ldGVyIiwgImludmFsaWQgcGFyYW1ldGVyIG5hbWUiKTsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLSAgICBpZiAoaXNGbG9hdCkgewotICAgICAgICB0ZXgtPnNldFBhcmFtZXRl
cmYocG5hbWUsIHBhcmFtZik7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyZih0YXJn
ZXQsIHBuYW1lLCBwYXJhbWYpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHRleC0+c2V0UGFyYW1l
dGVyaShwbmFtZSwgcGFyYW1pKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRh
cmdldCwgcG5hbWUsIHBhcmFtaSk7Ci0gICAgfQotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
ZmxvYXQgcGFyYW0pCi17Ci0gICAgdGV4UGFyYW1ldGVyKHRhcmdldCwgcG5hbWUsIHBhcmFtLCAw
LCB0cnVlKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFBhcmFtZXRlcmko
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKLXsKLSAgICB0
ZXhQYXJhbWV0ZXIodGFyZ2V0LCBwbmFtZSwgMCwgcGFyYW0sIGZhbHNlKTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkRCYXNlKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBjb25zdCB2b2lkKiBwaXhlbHMsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8vIEZJWE1F
OiBGb3Igbm93IHdlIGlnbm9yZSBhbnkgZXJyb3JzIHJldHVybmVkCi0gICAgZWMgPSAwOwotICAg
IEFTU0VSVCghaXNDb250ZXh0TG9zdCgpKTsKLSAgICBBU1NFUlQodmFsaWRhdGVUZXhGdW5jUGFy
YW1ldGVycygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIHRhcmdldCwgbGV2ZWwsIGZv
cm1hdCwgd2lkdGgsIGhlaWdodCwgMCwgZm9ybWF0LCB0eXBlKSk7Ci0gICAgQVNTRVJUKHZhbGlk
YXRlU2l6ZSgidGV4U3ViSW1hZ2UyRCIsIHhvZmZzZXQsIHlvZmZzZXQpKTsKLSAgICBBU1NFUlQo
dmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdCgidGV4U3ViSW1hZ2UyRCIsIGZvcm1hdCkpOwotICAg
IFdlYkdMVGV4dHVyZSogdGV4ID0gdmFsaWRhdGVUZXh0dXJlQmluZGluZygidGV4U3ViSW1hZ2Uy
RCIsIHRhcmdldCwgdHJ1ZSk7Ci0gICAgaWYgKCF0ZXgpIHsKLSAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgQVNTRVJUKCh4b2Zmc2V0ICsg
d2lkdGgpID49IDApOwotICAgIEFTU0VSVCgoeW9mZnNldCArIGhlaWdodCkgPj0gMCk7Ci0gICAg
QVNTRVJUKHRleC0+Z2V0V2lkdGgodGFyZ2V0LCBsZXZlbCkgPj0gKHhvZmZzZXQgKyB3aWR0aCkp
OwotICAgIEFTU0VSVCh0ZXgtPmdldEhlaWdodCh0YXJnZXQsIGxldmVsKSA+PSAoeW9mZnNldCAr
IGhlaWdodCkpOwotICAgIEFTU0VSVCh0ZXgtPmdldEludGVybmFsRm9ybWF0KHRhcmdldCwgbGV2
ZWwpID09IGZvcm1hdCk7Ci0gICAgQVNTRVJUKHRleC0+Z2V0VHlwZSh0YXJnZXQsIGxldmVsKSA9
PSB0eXBlKTsKLSAgICBtX2NvbnRleHQtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyREltcGwoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwg
R0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZSogaW1hZ2UsIEdyYXBoaWNzQ29u
dGV4dDNEOjpJbWFnZUh0bWxEb21Tb3VyY2UgZG9tU291cmNlLCBib29sIGZsaXBZLCBib29sIHBy
ZW11bHRpcGx5QWxwaGEsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIGVjID0gMDsKLSAgICBW
ZWN0b3I8dWludDhfdD4gZGF0YTsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6SW1hZ2VFeHRyYWN0
b3IgaW1hZ2VFeHRyYWN0b3IoaW1hZ2UsIGRvbVNvdXJjZSwgcHJlbXVsdGlwbHlBbHBoYSwgbV91
bnBhY2tDb2xvcnNwYWNlQ29udmVyc2lvbiA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9ORSk7ICAK
LSAgICBpZiAoIWltYWdlRXh0cmFjdG9yLmV4dHJhY3RTdWNjZWVkZWQoKSkgewotICAgICAgICBz
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInRleFN1
YkltYWdlMkQiLCAiYmFkIGltYWdlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRhdGFGb3JtYXQgc291cmNlRGF0YUZvcm1hdCA9IGltYWdlRXh0cmFj
dG9yLmltYWdlU291cmNlRm9ybWF0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0Q6OkFscGhhT3Ag
YWxwaGFPcCA9IGltYWdlRXh0cmFjdG9yLmltYWdlQWxwaGFPcCgpOwotICAgIGNvbnN0IHZvaWQq
IGltYWdlUGl4ZWxEYXRhID0gaW1hZ2VFeHRyYWN0b3IuaW1hZ2VQaXhlbERhdGEoKTsKLQotICAg
IGJvb2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIGlmICh0eXBlID09IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9CWVRFICYmIHNvdXJjZURhdGFGb3JtYXQgPT0gR3JhcGhpY3NDb250
ZXh0M0Q6OkRhdGFGb3JtYXRSR0JBOCAmJiBmb3JtYXQgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEgJiYgYWxwaGFPcCA9PSBHcmFwaGljc0NvbnRleHQzRDo6QWxwaGFEb05vdGhpbmcgJiYgIWZs
aXBZKQotICAgICAgICBuZWVkQ29udmVyc2lvbiA9IGZhbHNlOwotICAgIGVsc2UgewotICAgICAg
ICBpZiAoIW1fY29udGV4dC0+cGFja0ltYWdlRGF0YShpbWFnZSwgaW1hZ2VQaXhlbERhdGEsIGZv
cm1hdCwgdHlwZSwgZmxpcFksIGFscGhhT3AsIHNvdXJjZURhdGFGb3JtYXQsIGltYWdlRXh0cmFj
dG9yLmltYWdlV2lkdGgoKSwgaW1hZ2VFeHRyYWN0b3IuaW1hZ2VIZWlnaHQoKSwgaW1hZ2VFeHRy
YWN0b3IuaW1hZ2VTb3VyY2VVbnBhY2tBbGlnbm1lbnQoKSwgZGF0YSkpIHsKLSAgICAgICAgICAg
IHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCAidGV4
SW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpCi0gICAgICAgIG1f
Y29udGV4dC0+cGl4ZWxTdG9yZWkoR3JhcGhpY3NDb250ZXh0M0Q6OlVOUEFDS19BTElHTk1FTlQs
IDEpOwotICAgIHRleFN1YkltYWdlMkRCYXNlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIGltYWdlLT53aWR0aCgpLCBpbWFnZS0+aGVpZ2h0KCksIGZvcm1hdCwgdHlwZSwgIG5lZWRD
b252ZXJzaW9uID8gZGF0YS5kYXRhKCkgOiBpbWFnZVBpeGVsRGF0YSwgZWMpOwotICAgIGlmICht
X3VucGFja0FsaWdubWVudCAhPSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdy
YXBoaWNzQ29udGV4dDNEOjpVTlBBQ0tfQUxJR05NRU5ULCBtX3VucGFja0FsaWdubWVudCk7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEFycmF5QnVmZmVyVmlldyogcGl4
ZWxzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGlu
ZygpIHx8ICF2YWxpZGF0ZVRleEZ1bmNEYXRhKCJ0ZXhTdWJJbWFnZTJEIiwgbGV2ZWwsIHdpZHRo
LCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzLCBOdWxsTm90QWxsb3dlZCkKLSAgICAgICAg
fHwgIXZhbGlkYXRlVGV4RnVuYygidGV4U3ViSW1hZ2UyRCIsIFRleFN1YkltYWdlMkQsIFNvdXJj
ZUFycmF5QnVmZmVyVmlldywgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCAw
LCBmb3JtYXQsIHR5cGUsIHhvZmZzZXQsIHlvZmZzZXQpKQotICAgICAgICByZXR1cm47Ci0gICAg
dm9pZCogZGF0YSA9IHBpeGVscy0+YmFzZUFkZHJlc3MoKTsKLSAgICBWZWN0b3I8dWludDhfdD4g
dGVtcERhdGE7Ci0gICAgYm9vbCBjaGFuZ2VVbnBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKLSAgICBp
ZiAoZGF0YSAmJiAobV91bnBhY2tGbGlwWSB8fCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEpKSB7
Ci0gICAgICAgIGlmICghbV9jb250ZXh0LT5leHRyYWN0VGV4dHVyZURhdGEod2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdW5wYWNrQWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBEYXRhKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgZGF0YSA9IHRlbXBEYXRhLmRhdGEoKTsKLSAgICAgICAgY2hhbmdlVW5w
YWNrQWxpZ25tZW50ID0gdHJ1ZTsKLSAgICB9Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVu
dCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5Q
QUNLX0FMSUdOTUVOVCwgMSk7Ci0gICAgdGV4U3ViSW1hZ2UyREJhc2UodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhLCBlYyk7
Ci0gICAgaWYgKGNoYW5nZVVucGFja0FsaWdubWVudCkKLSAgICAgICAgbV9jb250ZXh0LT5waXhl
bFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVOVCwgbV91bnBhY2tBbGln
bm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChH
QzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5
b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBJbWFnZURhdGEqIHBpeGVscywgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkg
fHwgIXBpeGVscyB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3ViSW1h
Z2UyRCwgU291cmNlSW1hZ2VEYXRhLCB0YXJnZXQsIGxldmVsLCBmb3JtYXQsICBwaXhlbHMtPndp
ZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNl
dCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOwotICAgIGJv
b2wgbmVlZENvbnZlcnNpb24gPSB0cnVlOwotICAgIC8vIFRoZSBkYXRhIGZyb20gSW1hZ2VEYXRh
IGlzIGFsd2F5cyBvZiBmb3JtYXQgUkdCQTguCi0gICAgLy8gTm8gY29udmVyc2lvbiBpcyBuZWVk
ZWQgaWYgZGVzdGluYXRpb24gZm9ybWF0IGlzIFJHQkEgYW5kIHR5cGUgaXMgVVNJR05FRF9CWVRF
IGFuZCBubyBGbGlwIG9yIFByZW11bHRpcGx5IG9wZXJhdGlvbiBpcyByZXF1aXJlZC4KLSAgICBp
ZiAoZm9ybWF0ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUgJiYgIW1fdW5wYWNrRmxpcFkgJiYgIW1fdW5wYWNrUHJl
bXVsdGlwbHlBbHBoYSkKLSAgICAgICAgbmVlZENvbnZlcnNpb24gPSBmYWxzZTsKLSAgICBlbHNl
IHsKLSAgICAgICAgaWYgKCFtX2NvbnRleHQtPmV4dHJhY3RJbWFnZURhdGEocGl4ZWxzLCBmb3Jt
YXQsIHR5cGUsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZGF0YSkp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCAidGV4U3ViSW1hZ2UyRCIsICJiYWQgaW1hZ2UgZGF0YSIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChtX3VucGFja0FsaWdubWVudCAh
PSAxKQotICAgICAgICBtX2NvbnRleHQtPnBpeGVsU3RvcmVpKEdyYXBoaWNzQ29udGV4dDNEOjpV
TlBBQ0tfQUxJR05NRU5ULCAxKTsKLSAgICB0ZXhTdWJJbWFnZTJEQmFzZSh0YXJnZXQsIGxldmVs
LCB4b2Zmc2V0LCB5b2Zmc2V0LCBwaXhlbHMtPndpZHRoKCksIHBpeGVscy0+aGVpZ2h0KCksIGZv
cm1hdCwgdHlwZSwgbmVlZENvbnZlcnNpb24gPyBkYXRhLmRhdGEoKSA6IHBpeGVscy0+ZGF0YSgp
LT5kYXRhKCksIGVjKTsKLSAgICBpZiAobV91bnBhY2tBbGlnbm1lbnQgIT0gMSkKLSAgICAgICAg
bV9jb250ZXh0LT5waXhlbFN0b3JlaShHcmFwaGljc0NvbnRleHQzRDo6VU5QQUNLX0FMSUdOTUVO
VCwgbV91bnBhY2tBbGlnbm1lbnQpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9m
ZnNldCwgR0MzRGludCB5b2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBIVE1MSW1hZ2VFbGVtZW50
KiBpbWFnZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgZWMgPSAwOwotICAgIGlmIChpc0Nv
bnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlSFRNTEltYWdlRWxlbWVudCgidGV4U3Vi
SW1hZ2UyRCIsIGltYWdlLCBlYykpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFn
ZT4gaW1hZ2VGb3JSZW5kZXIgPSBpbWFnZS0+Y2FjaGVkSW1hZ2UoKS0+aW1hZ2VGb3JSZW5kZXJl
cihpbWFnZS0+cmVuZGVyZXIoKSk7Ci0gICAgaWYgKGltYWdlRm9yUmVuZGVyLT5pc1NWR0ltYWdl
KCkpCi0gICAgICAgIGltYWdlRm9yUmVuZGVyID0gZHJhd0ltYWdlSW50b0J1ZmZlcihpbWFnZUZv
clJlbmRlci5nZXQoKSwgaW1hZ2UtPndpZHRoKCksIGltYWdlLT5oZWlnaHQoKSwgMSk7Ci0KLSAg
ICBpZiAoIWltYWdlRm9yUmVuZGVyIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQi
LCBUZXhTdWJJbWFnZTJELCBTb3VyY2VIVE1MSW1hZ2VFbGVtZW50LCB0YXJnZXQsIGxldmVsLCBm
b3JtYXQsIGltYWdlRm9yUmVuZGVyLT53aWR0aCgpLCBpbWFnZUZvclJlbmRlci0+aGVpZ2h0KCks
IDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwgeW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIHRleFN1YkltYWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZv
cm1hdCwgdHlwZSwgaW1hZ2VGb3JSZW5kZXIuZ2V0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1s
RG9tSW1hZ2UsIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0
LCBHQzNEZW51bSB0eXBlLCBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8
fCAhdmFsaWRhdGVIVE1MQ2FudmFzRWxlbWVudCgidGV4U3ViSW1hZ2UyRCIsIGNhbnZhcywgZWMp
Ci0gICAgICAgIHx8ICF2YWxpZGF0ZVRleEZ1bmMoInRleFN1YkltYWdlMkQiLCBUZXhTdWJJbWFn
ZTJELCBTb3VyY2VIVE1MQ2FudmFzRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCBjYW52
YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksIDAsIGZvcm1hdCwgdHlwZSwgeG9mZnNldCwg
eW9mZnNldCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdl
RGF0YSA9IGNhbnZhcy0+Z2V0SW1hZ2VEYXRhKCk7Ci0gICAgaWYgKGltYWdlRGF0YSkKLSAgICAg
ICAgdGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQs
IHR5cGUsIGltYWdlRGF0YS5nZXQoKSwgZWMpOwotICAgIGVsc2UKLSAgICAgICAgdGV4U3ViSW1h
Z2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBj
YW52YXMtPmNvcGllZEltYWdlKCksIEdyYXBoaWNzQ29udGV4dDNEOjpIdG1sRG9tQ2FudmFzLCBt
X3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLQotI2lmIEVO
QUJMRShWSURFTykKLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKEdD
M0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNEaW50IHlv
ZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRp
b25Db2RlJiBlYykKLXsKLSAgICBlYyA9IDA7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSB8fCAhdmFsaWRhdGVIVE1MVmlkZW9FbGVtZW50KCJ0ZXhTdWJJbWFnZTJEIiwgdmlkZW8s
IGVjKQotICAgICAgICB8fCAhdmFsaWRhdGVUZXhGdW5jKCJ0ZXhTdWJJbWFnZTJEIiwgVGV4U3Vi
SW1hZ2UyRCwgU291cmNlSFRNTFZpZGVvRWxlbWVudCwgdGFyZ2V0LCBsZXZlbCwgZm9ybWF0LCB2
aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSwgMCwgZm9ybWF0LCB0eXBl
LCB4b2Zmc2V0LCB5b2Zmc2V0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmVmUHRyPEltYWdl
PiBpbWFnZSA9IHZpZGVvRnJhbWVUb0ltYWdlKHZpZGVvLCBJbWFnZUJ1ZmZlcjo6ZmFzdENvcHlJ
bWFnZU1vZGUoKSwgZWMpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybjsKLSAgICB0
ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQs
IHR5cGUsIGltYWdlLmdldCgpLCBHcmFwaGljc0NvbnRleHQzRDo6SHRtbERvbVZpZGVvLCBtX3Vu
cGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKLX0KLSNlbmRpZgotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0IFdlYkdMVW5pZm9ybUxv
Y2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
bG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgp
ICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTFmIiwgImxvY2F0aW9uIG5v
dCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBt
X2NvbnRleHQtPnVuaWZvcm0xZihsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCk7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0
aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAg
ICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwg
IXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xZnYiLCBsb2NhdGlvbiwgdiwgMSkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihsb2NhdGlvbi0+
bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCksIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtMWZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtMWZ2IiwgbG9jYXRpb24sIHYs
IHNpemUsIDEpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dW5pZm9ybTFpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwg
R0MzRGludCB4LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVuaWZvcm0xaSIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3Jh
bSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKChsb2NhdGlvbi0+dHlwZSgp
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBlKCkgPT0g
R3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkgJiYgeCA+PSAoaW50KW1fdGV4dHVyZVVu
aXRzLnNpemUoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaSIsICJpbnZhbGlkIHRleHR1cmUgdW5pdCIpOwot
ICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWkobG9jYXRp
b24tPmxvY2F0aW9uKCksIHgpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5p
Zm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkq
IHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygi
dW5pZm9ybTFpdiIsIGxvY2F0aW9uLCB2LCAxKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KGxvY2F0aW9uLT50eXBlKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfMkQgfHwgbG9j
YXRpb24tPnR5cGUoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6U0FNUExFUl9DVUJFKQotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdi0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICAg
ICAgaWYgKHYtPmRhdGEoKVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVyZVVuaXRzLnNp
emUoKSkpIHsKLSAgICAgICAgICAgICAgICBMT0coV2ViR0wsICJUZXh0dXJlIHVuaXQgc2l6ZT0l
enUsIHZbJWRdPSVkLiBMb2NhdGlvbiB0eXBlID0gJTA0WC4iLCBtX3RleHR1cmVVbml0cy5zaXpl
KCksIGksIHYtPmRhdGEoKVtpXSwgbG9jYXRpb24tPnR5cGUoKSk7Ci0gICAgICAgICAgICAgICAg
c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ1bmlm
b3JtMWl2IiwgImludmFsaWQgdGV4dHVyZSB1bml0Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xaXYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpLCB2LT5kYXRhKCkpOwotfQotCi12b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQ
ZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm0xaXYiLCBsb2Nh
dGlvbiwgdiwgc2l6ZSwgMSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+
dHlwZSgpID09IEdyYXBoaWNzQ29udGV4dDNEOjpTQU1QTEVSXzJEIHx8IGxvY2F0aW9uLT50eXBl
KCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6OlNBTVBMRVJfQ1VCRSkKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzaXplKTsgKytpKSB7Ci0gICAg
ICAgICAgICBpZiAoKChHQzNEaW50Kil2KVtpXSA+PSBzdGF0aWNfY2FzdDxpbnQ+KG1fdGV4dHVy
ZVVuaXRzLnNpemUoKSkpIHsKLSAgICAgICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFw
aGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgInVuaWZvcm0xaXYiLCAiaW52YWxpZCB0ZXh0
dXJlIHVuaXQiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
c2l6ZSwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtMmYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0
IHksIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGlmIChsb2NhdGlvbi0+cHJvZ3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFU
SU9OLCAidW5pZm9ybTJmIiwgImxvY2F0aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgeCwgeSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1
bmlmb3JtMmZ2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgRmxvYXQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoInVuaWZvcm0yZnYiLCBsb2NhdGlvbiwgdiwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY29udGV4dC0+dW5pZm9ybTJmdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkg
LyAyLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTJmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCogdiwg
R0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShl
Yyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3Jt
UGFyYW1ldGVycygidW5pZm9ybTJmdiIsIGxvY2F0aW9uLCB2LCBzaXplLCAyKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigp
LCBzaXplIC8gMiwgdik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MmkoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBp
ZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJyZW50UHJvZ3JhbSkgewot
ICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT04sICJ1bmlmb3JtMmkiLCAibG9jYXRpb24gbm90IGZvciBjdXJyZW50IHByb2dyYW0iKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJpKGxvY2F0
aW9uLT5sb2NhdGlvbigpLCB4LCB5KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnVuaWZvcm0yaXYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBJbnQzMkFy
cmF5KiB2LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAg
IGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBhcmFtZXRl
cnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgMikpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwgdi0+bGVuZ3RoKCkg
LyAyLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bTJpdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdD
M0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMp
OwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybVBh
cmFtZXRlcnMoInVuaWZvcm0yaXYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwgMikpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJpdihsb2NhdGlvbi0+bG9jYXRpb24oKSwg
c2l6ZSAvIDIsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTNm
KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0Rm
bG9hdCB5LCBHQzNEZmxvYXQgeiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICFsb2NhdGlvbikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGxvY2F0aW9uLT5wcm9ncmFtKCkgIT0gbV9jdXJy
ZW50UHJvZ3JhbSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJ1bmlmb3JtM2YiLCAibG9jYXRpb24gbm90IGZvciBjdXJy
ZW50IHByb2dyYW0iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fY29udGV4dC0+
dW5pZm9ybTNmKGxvY2F0aW9uLT5sb2NhdGlvbigpLCB4LCB5LCB6KTsKLX0KLQotdm9pZCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24q
IGxvY2F0aW9uLCBGbG9hdDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVO
VVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFs
aWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTNmdiIsIGxvY2F0aW9uLCB2LCAzKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtM2Z2KGxvY2F0aW9uLT5sb2Nh
dGlvbigpLCB2LT5sZW5ndGgoKSAvIDMsIHYtPmRhdGEoKSk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2Z2KGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2Nh
dGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygp
IHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2Z2IiwgbG9jYXRpb24sIHYs
IHNpemUsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zZnYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OnVuaWZvcm0zaShjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmco
KSB8fCAhbG9jYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChsb2NhdGlvbi0+cHJv
Z3JhbSgpICE9IG1fY3VycmVudFByb2dyYW0pIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCAidW5pZm9ybTNpIiwgImxvY2F0
aW9uIG5vdCBmb3IgY3VycmVudCBwcm9ncmFtIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0K
LSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaShsb2NhdGlvbi0+bG9jYXRpb24oKSwgeCwgeSwgeik7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtM2l2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgSW50MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVu
ZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2IiwgbG9jYXRp
b24sIHYsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0zaXYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gMywgdi0+ZGF0YSgpKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm0zaXYoY29uc3QgV2ViR0xVbmlmb3Jt
TG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9z
dE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtM2l2Iiwg
bG9jYXRpb24sIHYsIHNpemUsIDMpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2NvbnRleHQt
PnVuaWZvcm0zaXYobG9jYXRpb24tPmxvY2F0aW9uKCksIHNpemUgLyAzLCB2KTsKLX0KLQotdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm00Zihjb25zdCBXZWJHTFVuaWZvcm1Mb2Nh
dGlvbiogbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdD
M0RmbG9hdCB3LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwot
ICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24tPnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFt
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVuaWZvcm00ZiIsICJsb2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3Jh
bSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGYo
bG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHksIHosIHcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dW5pZm9ybTRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRp
b24sIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BB
UkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxpZGF0ZVVu
aWZvcm1QYXJhbWV0ZXJzKCJ1bmlmb3JtNGZ2IiwgbG9jYXRpb24sIHYsIDQpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm00ZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHYtPmxlbmd0aCgpIC8gNCwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnVuaWZvcm00ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBH
QzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBV
TlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5nKCkgfHwgIXZh
bGlkYXRlVW5pZm9ybVBhcmFtZXRlcnMoInVuaWZvcm00ZnYiLCBsb2NhdGlvbiwgdiwgc2l6ZSwg
NCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTRmdihsb2NhdGlv
bi0+bG9jYXRpb24oKSwgc2l6ZSAvIDQsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dW5pZm9ybTRpKGNvbnN0IFdlYkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0Mz
RGludCB4LCBHQzNEaW50IHksIEdDM0RpbnQgeiwgR0MzRGludCB3LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIWxvY2F0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobG9jYXRpb24t
PnByb2dyYW0oKSAhPSBtX2N1cnJlbnRQcm9ncmFtKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVy
cm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgInVuaWZvcm00aSIsICJs
b2NhdGlvbiBub3QgZm9yIGN1cnJlbnQgcHJvZ3JhbSIpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtNGkobG9jYXRpb24tPmxvY2F0aW9uKCksIHgsIHks
IHosIHcpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTRpdihjb25z
dCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEludDMyQXJyYXkqIHYsIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExv
c3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9ybTRpdiIs
IGxvY2F0aW9uLCB2LCA0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0LT51bmlm
b3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHYtPmRhdGEoKSk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtNGl2KGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29u
dGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtUGFyYW1ldGVycygidW5pZm9y
bTRpdiIsIGxvY2F0aW9uLCB2LCBzaXplLCA0KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9j
b250ZXh0LT51bmlmb3JtNGl2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdik7Ci19
Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3JtTWF0cml4MmZ2KGNvbnN0IFdl
YkdMVW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBGbG9h
dDMyQXJyYXkqIHYsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7
Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0
cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYs
IDQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxv
Y2F0aW9uLT5sb2NhdGlvbigpLCB2LT5sZW5ndGgoKSAvIDQsIHRyYW5zcG9zZSwgdi0+ZGF0YSgp
KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRyaXgyZnYoY29u
c3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2Us
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAg
IFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAh
dmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1ldGVycygidW5pZm9ybU1hdHJpeDJmdiIsIGxvY2F0
aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250
ZXh0LT51bmlmb3JtTWF0cml4MmZ2KGxvY2F0aW9uLT5sb2NhdGlvbigpLCBzaXplIC8gNCwgdHJh
bnNwb3NlLCB2KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnVuaWZvcm1NYXRy
aXgzZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0
cmFuc3Bvc2UsIEZsb2F0MzJBcnJheSogdiwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgVU5V
U0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpIHx8ICF2YWxp
ZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0cml4M2Z2IiwgbG9jYXRpb24s
IHRyYW5zcG9zZSwgdiwgOSkpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2NvbnRleHQtPnVuaWZv
cm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0aCgpIC8gOSwgdHJhbnNw
b3NlLCB2LT5kYXRhKCkpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9y
bU1hdHJpeDNmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24sIEdDM0Rib29s
ZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgVU5VU0VEX1BBUkFNKGVjKTsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9y
UGVuZGluZygpIHx8ICF2YWxpZGF0ZVVuaWZvcm1NYXRyaXhQYXJhbWV0ZXJzKCJ1bmlmb3JtTWF0
cml4M2Z2IiwgbG9jYXRpb24sIHRyYW5zcG9zZSwgdiwgc2l6ZSwgOSkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobG9jYXRpb24tPmxvY2F0aW9uKCks
IHNpemUgLyA5LCB0cmFuc3Bvc2UsIHYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dDo6dW5pZm9ybU1hdHJpeDRmdihjb25zdCBXZWJHTFVuaWZvcm1Mb2NhdGlvbiogbG9jYXRpb24s
IEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgRmxvYXQzMkFycmF5KiB2LCBFeGNlcHRpb25Db2RlJiBl
YykKLXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5k
aW5nKCkgfHwgIXZhbGlkYXRlVW5pZm9ybU1hdHJpeFBhcmFtZXRlcnMoInVuaWZvcm1NYXRyaXg0
ZnYiLCBsb2NhdGlvbiwgdHJhbnNwb3NlLCB2LCAxNikpCi0gICAgICAgIHJldHVybjsKLSAgICBt
X2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24tPmxvY2F0aW9uKCksIHYtPmxlbmd0
aCgpIC8gMTYsIHRyYW5zcG9zZSwgdi0+ZGF0YSgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnVuaWZvcm1NYXRyaXg0ZnYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxv
Y2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNp
emUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgaWYg
KGlzQ29udGV4dExvc3RPclBlbmRpbmcoKSB8fCAhdmFsaWRhdGVVbmlmb3JtTWF0cml4UGFyYW1l
dGVycygidW5pZm9ybU1hdHJpeDRmdiIsIGxvY2F0aW9uLCB0cmFuc3Bvc2UsIHYsIHNpemUsIDE2
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihsb2Nh
dGlvbi0+bG9jYXRpb24oKSwgc2l6ZSAvIDE2LCB0cmFuc3Bvc2UsIHYpOwotfQotCi12b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dXNlUHJvZ3JhbShXZWJHTFByb2dyYW0qIHByb2dyYW0sIEV4
Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFVOVVNFRF9QQVJBTShlYyk7Ci0gICAgYm9vbCBkZWxl
dGVkOwotICAgIGlmICghY2hlY2tPYmplY3RUb0JlQm91bmQoInVzZVByb2dyYW0iLCBwcm9ncmFt
LCBkZWxldGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmIChkZWxldGVkKQotICAgICAgICBw
cm9ncmFtID0gMDsKLSAgICBpZiAocHJvZ3JhbSAmJiAhcHJvZ3JhbS0+Z2V0TGlua1N0YXR1cygp
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X09QRVJBVElPTiwgInVzZVByb2dyYW0iLCAicHJvZ3JhbSBub3QgdmFsaWQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLSAgICBpZiAobV9jdXJyZW50UHJvZ3JhbSAhPSBwcm9ncmFtKSB7Ci0g
ICAgICAgIGlmIChtX2N1cnJlbnRQcm9ncmFtKQotICAgICAgICAgICAgbV9jdXJyZW50UHJvZ3Jh
bS0+b25EZXRhY2hlZChncmFwaGljc0NvbnRleHQzRCgpKTsKLSAgICAgICAgbV9jdXJyZW50UHJv
Z3JhbSA9IHByb2dyYW07Ci0gICAgICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShvYmplY3RPclpl
cm8ocHJvZ3JhbSkpOwotICAgICAgICBpZiAocHJvZ3JhbSkKLSAgICAgICAgICAgIHByb2dyYW0t
Pm9uQXR0YWNoZWQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
YWxpZGF0ZVByb2dyYW0oV2ViR0xQcm9ncmFtKiBwcm9ncmFtLCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkgfHwgIXZhbGlkYXRlV2ViR0xPYmplY3QoInZhbGlkYXRlUHJvZ3JhbSIsIHByb2dyYW0pKQot
ICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT52YWxpZGF0ZVByb2dyYW0ob2JqZWN0T3Ja
ZXJvKHByb2dyYW0pKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0
dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjApCi17Ci0gICAgdmVydGV4QXR0cmli
ZkltcGwoInZlcnRleEF0dHJpYjFmIiwgaW5kZXgsIDEsIHYwLCAwLjBmLCAwLjBmLCAxLjBmKTsK
LX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjFmdihHQzNEdWlu
dCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVy
dGV4QXR0cmliMWZ2IiwgaW5kZXgsIHYsIDEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0Rz
aXplaSBzaXplKQotewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliMWZ2Iiwg
aW5kZXgsIHYsIHNpemUsIDEpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVy
dGV4QXR0cmliMmYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB2MCwgR0MzRGZsb2F0IHYxKQot
ewotICAgIHZlcnRleEF0dHJpYmZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZiIsIGluZGV4LCAyLCB2MCwg
djEsIDAuMGYsIDEuMGYpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4
QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBGbG9hdDMyQXJyYXkqIHYpCi17Ci0gICAgdmVydGV4
QXR0cmliZnZJbXBsKCJ2ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgMik7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCi17Ci0gICAgdmVydGV4QXR0cmliZnZJbXBsKCJ2
ZXJ0ZXhBdHRyaWIyZnYiLCBpbmRleCwgdiwgc2l6ZSwgMik7Ci19Ci0KLXZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHYw
LCBHQzNEZmxvYXQgdjEsIEdDM0RmbG9hdCB2MikKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmSW1wbCgi
dmVydGV4QXR0cmliM2YiLCBpbmRleCwgMywgdjAsIHYxLCB2MiwgMS4wZik7Ci19Ci0KLXZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEZs
b2F0MzJBcnJheSogdikKLXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNm
diIsIGluZGV4LCB2LCAzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRl
eEF0dHJpYjNmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkK
LXsKLSAgICB2ZXJ0ZXhBdHRyaWJmdkltcGwoInZlcnRleEF0dHJpYjNmdiIsIGluZGV4LCB2LCBz
aXplLCAzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnZlcnRleEF0dHJpYjRm
KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgdjAsIEdDM0RmbG9hdCB2MSwgR0MzRGZsb2F0IHYy
LCBHQzNEZmxvYXQgdjMpCi17Ci0gICAgdmVydGV4QXR0cmliZkltcGwoInZlcnRleEF0dHJpYjRm
IiwgaW5kZXgsIDQsIHYwLCB2MSwgdjIsIHYzKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgRmxvYXQzMkFycmF5KiB2KQot
ewotICAgIHZlcnRleEF0dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgsIHYsIDQp
OwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1
aW50IGluZGV4LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQotewotICAgIHZlcnRleEF0
dHJpYmZ2SW1wbCgidmVydGV4QXR0cmliNGZ2IiwgaW5kZXgsIHYsIHNpemUsIDQpOwotfQotCi12
b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmVydGV4QXR0cmliUG9pbnRlcihHQzNEdWludCBp
bmRleCwgR0MzRGludCBzaXplLCBHQzNEZW51bSB0eXBlLCBHQzNEYm9vbGVhbiBub3JtYWxpemVk
LCBHQzNEc2l6ZWkgc3RyaWRlLCBsb25nIGxvbmcgb2Zmc2V0LCBFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBVTlVTRURfUEFSQU0oZWMpOwotICAgIGlmIChpc0NvbnRleHRMb3N0T3JQZW5kaW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpCWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVE
X0JZVEU6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0hPUlQ6Ci0gICAgY2FzZSBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQ6Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sICJ2ZXJ0ZXhBdHRyaWJQ
b2ludGVyIiwgImludmFsaWQgdHlwZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChpbmRleCA+PSBtX21heFZlcnRleEF0dHJpYnMpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJy
b3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsICJ2ZXJ0ZXhBdHRyaWJQb2ludGVy
IiwgImluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlm
IChzaXplIDwgMSB8fCBzaXplID4gNCB8fCBzdHJpZGUgPCAwIHx8IHN0cmlkZSA+IDI1NSB8fCBv
ZmZzZXQgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFLCAidmVydGV4QXR0cmliUG9pbnRlciIsICJiYWQgc2l6ZSwgc3RyaWRl
IG9yIG9mZnNldCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGlmICghbV9ib3VuZEFy
cmF5QnVmZmVyKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgInZlcnRleEF0dHJpYlBvaW50ZXIiLCAibm8gYm91bmQgQVJS
QVlfQlVGRkVSIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgLy8gRGV0ZXJtaW5lIHRo
ZSBudW1iZXIgb2YgZWxlbWVudHMgdGhlIGJvdW5kIGJ1ZmZlciBjYW4gaG9sZCwgZ2l2ZW4gdGhl
IG9mZnNldCwgc2l6ZSwgdHlwZSBhbmQgc3RyaWRlCi0gICAgdW5zaWduZWQgaW50IHR5cGVTaXpl
ID0gc2l6ZUluQnl0ZXModHlwZSk7Ci0gICAgaWYgKCF0eXBlU2l6ZSkgewotICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCAidmVydGV4QXR0
cmliUG9pbnRlciIsICJpbnZhbGlkIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICBpZiAoKHN0cmlkZSAlIHR5cGVTaXplKSB8fCAoc3RhdGljX2Nhc3Q8R0MzRGludHB0cj4ob2Zm
c2V0KSAlIHR5cGVTaXplKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sICJ2ZXJ0ZXhBdHRyaWJQb2ludGVyIiwgInN0cmlk
ZSBvciBvZmZzZXQgbm90IHZhbGlkIGZvciB0eXBlIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0gICAgR0MzRHNpemVpIGJ5dGVzUGVyRWxlbWVudCA9IHNpemUgKiB0eXBlU2l6ZTsKLQotICAg
IG1fYm91bmRWZXJ0ZXhBcnJheU9iamVjdC0+c2V0VmVydGV4QXR0cmliU3RhdGUoaW5kZXgsIGJ5
dGVzUGVyRWxlbWVudCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBzdGF0aWNfY2Fz
dDxHQzNEaW50cHRyPihvZmZzZXQpLCBtX2JvdW5kQXJyYXlCdWZmZXIpOwotICAgIG1fY29udGV4
dC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3Ry
aWRlLCBzdGF0aWNfY2FzdDxHQzNEaW50cHRyPihvZmZzZXQpKTsKLX0KLQotdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZpZXdwb3J0KEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgaWYgKGlzQ29udGV4dExvc3RPclBlbmRp
bmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghdmFsaWRhdGVTaXplKCJ2aWV3cG9ydCIs
IHdpZHRoLCBoZWlnaHQpKQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT52aWV3cG9y
dCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OmZvcmNlTG9zdENvbnRleHQoV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMb3N0Q29udGV4dE1vZGUg
bW9kZSkKLXsKLSAgICBpZiAoaXNDb250ZXh0TG9zdE9yUGVuZGluZygpKSB7Ci0gICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgImxv
c2VDb250ZXh0IiwgImNvbnRleHQgYWxyZWFkeSBsb3N0Iik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBtX2NvbnRleHRHcm91cC0+bG9zZUNvbnRleHRHcm91cChtb2RlKTsKLX0KLQot
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Omxvc2VDb250ZXh0SW1wbChXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6Okxvc3RDb250ZXh0TW9kZSBtb2RlKQotewotICAgIGlmIChpc0NvbnRleHRMb3N0
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY29udGV4dExvc3QgPSB0cnVlOwotICAgIG1f
Y29udGV4dExvc3RNb2RlID0gbW9kZTsKLQotICAgIGlmIChtb2RlID09IFJlYWxMb3N0Q29udGV4
dCkgewotICAgICAgICAvLyBJbmZvcm0gdGhlIGVtYmVkZGVyIHRoYXQgYSBsb3N0IGNvbnRleHQg
d2FzIHJlY2VpdmVkLiBJbiByZXNwb25zZSwgdGhlIGVtYmVkZGVyIG1pZ2h0Ci0gICAgICAgIC8v
IGRlY2lkZSB0byB0YWtlIGFjdGlvbiBzdWNoIGFzIGFza2luZyB0aGUgdXNlciBmb3IgcGVybWlz
c2lvbiB0byB1c2UgV2ViR0wgYWdhaW4uCi0gICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBjYW52
YXMoKS0+ZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICAgICAgZnJhbWUtPmxvYWRlcigpLmNs
aWVudCgpLmRpZExvc2VXZWJHTENvbnRleHQobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPmdl
dEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSk7Ci0gICAgfQotCi0gICAgZGV0YWNoQW5kUmVtb3Zl
QWxsT2JqZWN0cygpOwotCi0gICAgaWYgKG1fZHJhd2luZ0J1ZmZlcikgewotICAgICAgICAvLyBN
YWtlIGFic29sdXRlbHkgc3VyZSB3ZSBkbyBub3QgcmVmZXIgdG8gYW4gYWxyZWFkeS1kZWxldGVk
IHRleHR1cmUgb3IgZnJhbWVidWZmZXIuCi0gICAgICAgIG1fZHJhd2luZ0J1ZmZlci0+c2V0VGV4
dHVyZTJEQmluZGluZygwKTsKLSAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5zZXRGcmFtZWJ1ZmZl
ckJpbmRpbmcoMCk7Ci0gICAgfQotCi0gICAgLy8gVGhlcmUgaXMgbm8gZGlyZWN0IHdheSB0byBj
bGVhciBlcnJvcnMgZnJvbSBhIEdMIGltcGxlbWVudGF0aW9uIGFuZAotICAgIC8vIGxvb3Bpbmcg
dW50aWwgZ2V0RXJyb3IoKSBiZWNvbWVzIE5PX0VSUk9SIG1pZ2h0IGNhdXNlIGFuIGluZmluaXRl
IGxvb3AgaWYKLSAgICAvLyB0aGUgZHJpdmVyIG9yIGNvbnRleHQgaW1wbGVtZW50YXRpb24gaGFk
IGEgYnVnLiBTbywgbG9vcCBhIHJlYXNvbmFibHkKLSAgICAvLyBsYXJnZSBudW1iZXIgb2YgdGlt
ZXMgdG8gY2xlYXIgYW55IGV4aXN0aW5nIGVycm9ycy4KLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IDEwMDsgKytpKSB7Ci0gICAgICAgIGlmIChtX2NvbnRleHQtPmdldEVycm9yKCkgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6Ok5PX0VSUk9SKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIENv
bnNvbGVEaXNwbGF5UHJlZmVyZW5jZSBkaXNwbGF5ID0gKG1vZGUgPT0gUmVhbExvc3RDb250ZXh0
KSA/IERpc3BsYXlJbkNvbnNvbGU6IERvbnREaXNwbGF5SW5Db25zb2xlOwotICAgIHN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpDT05URVhUX0xPU1RfV0VCR0wsICJsb3NlQ29u
dGV4dCIsICJjb250ZXh0IGxvc3QiLCBkaXNwbGF5KTsKLQotICAgIC8vIERvbid0IGFsbG93IHJl
c3RvcmF0aW9uIHVubGVzcyB0aGUgY29udGV4dCBsb3N0IGV2ZW50IGhhcyBib3RoIGJlZW4KLSAg
ICAvLyBkaXNwYXRjaGVkIGFuZCBpdHMgZGVmYXVsdCBiZWhhdmlvciBwcmV2ZW50ZWQuCi0gICAg
bV9yZXN0b3JlQWxsb3dlZCA9IGZhbHNlOwotCi0gICAgLy8gQWx3YXlzIGRlZmVyIHRoZSBkaXNw
YXRjaCBvZiB0aGUgY29udGV4dCBsb3N0IGV2ZW50LCB0byBpbXBsZW1lbnQKLSAgICAvLyB0aGUg
c3BlYyBiZWhhdmlvciBvZiBxdWV1ZWluZyBhIHRhc2suCi0gICAgbV9kaXNwYXRjaENvbnRleHRM
b3N0RXZlbnRUaW1lci5zdGFydE9uZVNob3QoMCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojpmb3JjZVJlc3RvcmVDb250ZXh0KCkKLXsKLSAgICBpZiAoIWlzQ29udGV4dExvc3RP
clBlbmRpbmcoKSkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9PUEVSQVRJT04sICJyZXN0b3JlQ29udGV4dCIsICJjb250ZXh0IG5vdCBsb3N0
Iik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoIW1fcmVzdG9yZUFsbG93ZWQp
IHsKLSAgICAgICAgaWYgKG1fY29udGV4dExvc3RNb2RlID09IFN5bnRoZXRpY0xvc3RDb250ZXh0
KQotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFM
SURfT1BFUkFUSU9OLCAicmVzdG9yZUNvbnRleHQiLCAiY29udGV4dCByZXN0b3JhdGlvbiBub3Qg
YWxsb3dlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKCFtX3Jlc3RvcmVU
aW1lci5pc0FjdGl2ZSgpKQotICAgICAgICBtX3Jlc3RvcmVUaW1lci5zdGFydE9uZVNob3QoMCk7
Ci19Ci0KLVBsYXRmb3JtTGF5ZXIqIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGxhdGZvcm1MYXll
cigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuICghaXNDb250ZXh0TG9zdCgpICYmICFtX2lzUGVuZGlu
Z1BvbGljeVJlc29sdXRpb24pID8gbV9jb250ZXh0LT5wbGF0Zm9ybUxheWVyKCkgOiAwOwotfQot
Ci12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVtb3ZlU2hhcmVkT2JqZWN0KFdlYkdMU2hh
cmVkT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0R3JvdXAtPnJlbW92ZU9iamVjdChv
YmplY3QpOwotfQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YWRkU2hhcmVkT2JqZWN0
KFdlYkdMU2hhcmVkT2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5
UmVzb2x1dGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0
KCkpOwotICAgIG1fY29udGV4dEdyb3VwLT5hZGRPYmplY3Qob2JqZWN0KTsKLX0KLQotdm9pZCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlbW92ZUNvbnRleHRPYmplY3QoV2ViR0xDb250ZXh0T2Jq
ZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgbV9jb250ZXh0T2JqZWN0cy5yZW1vdmUob2JqZWN0KTsKLX0K
LQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmFkZENvbnRleHRPYmplY3QoV2ViR0xDb250
ZXh0T2JqZWN0KiBvYmplY3QpCi17Ci0gICAgaWYgKG1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlv
bikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKCFpc0NvbnRleHRMb3N0KCkpOwotICAg
IG1fY29udGV4dE9iamVjdHMuYWRkKG9iamVjdCk7Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpkZXRhY2hBbmRSZW1vdmVBbGxPYmplY3RzKCkKLXsKLSAgICBpZiAobV9pc1BlbmRp
bmdQb2xpY3lSZXNvbHV0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICB3aGlsZSAobV9jb250
ZXh0T2JqZWN0cy5zaXplKCkgPiAwKSB7Ci0gICAgICAgIEhhc2hTZXQ8V2ViR0xDb250ZXh0T2Jq
ZWN0Kj46Oml0ZXJhdG9yIGl0ID0gbV9jb250ZXh0T2JqZWN0cy5iZWdpbigpOwotICAgICAgICAo
Kml0KS0+ZGV0YWNoQ29udGV4dCgpOwotICAgIH0KLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6Omhhc1BlbmRpbmdBY3Rpdml0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi12b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6c3RvcCgpCi17Ci0gICAgaWYgKCFpc0Nv
bnRleHRMb3N0KCkgJiYgIW1faXNQZW5kaW5nUG9saWN5UmVzb2x1dGlvbikgewotICAgICAgICBm
b3JjZUxvc3RDb250ZXh0KFN5bnRoZXRpY0xvc3RDb250ZXh0KTsKLSAgICAgICAgZGVzdHJveUdy
YXBoaWNzQ29udGV4dDNEKCk7Ci0gICAgfQotfQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJp
bmdDb250ZXh0OjpnZXRCb29sZWFuUGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIEdD
M0Rib29sZWFuIHZhbHVlID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEJvb2xlYW52KHBuYW1lLCAm
dmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8oc3RhdGljX2Nhc3Q8Ym9vbD4odmFsdWUp
KTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm9vbGVhbkFy
cmF5UGFyYW1ldGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIGlmIChwbmFtZSAhPSBHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfV1JJVEVNQVNLKSB7Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7
Ci0gICAgICAgIHJldHVybiBXZWJHTEdldEluZm8oMCwgMCk7Ci0gICAgfQotICAgIEdDM0Rib29s
ZWFuIHZhbHVlWzRdID0gezB9OwotICAgIG1fY29udGV4dC0+Z2V0Qm9vbGVhbnYocG5hbWUsIHZh
bHVlKTsKLSAgICBib29sIGJvb2xWYWx1ZVs0XTsKLSAgICBmb3IgKGludCBpaSA9IDA7IGlpIDwg
NDsgKytpaSkKLSAgICAgICAgYm9vbFZhbHVlW2lpXSA9IHN0YXRpY19jYXN0PGJvb2w+KHZhbHVl
W2lpXSk7Ci0gICAgcmV0dXJuIFdlYkdMR2V0SW5mbyhib29sVmFsdWUsIDQpOwotfQotCi1XZWJH
TEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRGbG9hdFBhcmFtZXRlcihHQzNEZW51
bSBwbmFtZSkKLXsKLSAgICBHQzNEZmxvYXQgdmFsdWUgPSAwOwotICAgIG1fY29udGV4dC0+Z2V0
RmxvYXR2KHBuYW1lLCAmdmFsdWUpOwotICAgIHJldHVybiBXZWJHTEdldEluZm8odmFsdWUpOwot
fQotCi1XZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRJbnRQYXJhbWV0ZXIo
R0MzRGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7Ci0gICAgbV9jb250ZXh0
LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4gV2ViR0xHZXRJbmZvKHZh
bHVlKTsKLX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0VW5zaWdu
ZWRJbnRQYXJhbWV0ZXIoR0MzRGVudW0gcG5hbWUpCi17Ci0gICAgR0MzRGludCB2YWx1ZSA9IDA7
Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgJnZhbHVlKTsKLSAgICByZXR1cm4g
V2ViR0xHZXRJbmZvKHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4odmFsdWUpKTsKLX0KLQotV2Vi
R0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xGbG9hdEFycmF5UGFyYW1l
dGVyKEdDM0RlbnVtIHBuYW1lKQotewotICAgIEdDM0RmbG9hdCB2YWx1ZVs0XSA9IHswfTsKLSAg
ICBtX2NvbnRleHQtPmdldEZsb2F0dihwbmFtZSwgdmFsdWUpOwotICAgIHVuc2lnbmVkIGxlbmd0
aCA9IDA7Ci0gICAgc3dpdGNoIChwbmFtZSkgewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OkFMSUFTRURfUE9JTlRfU0laRV9SQU5HRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpB
TElBU0VEX0xJTkVfV0lEVEhfUkFOR0U6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6REVQ
VEhfUkFOR0U6Ci0gICAgICAgIGxlbmd0aCA9IDI7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EX0NPTE9SOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTE9SX0NMRUFSX1ZBTFVFOgotICAgICAgICBsZW5ndGggPSA0OwotICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgIH0KLSAgICBy
ZXR1cm4gV2ViR0xHZXRJbmZvKEZsb2F0MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5ndGgpKTsK
LX0KLQotV2ViR0xHZXRJbmZvIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0V2ViR0xJbnRBcnJh
eVBhcmFtZXRlcihHQzNEZW51bSBwbmFtZSkKLXsKLSAgICBHQzNEaW50IHZhbHVlWzRdID0gezB9
OwotICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKLSAgICB1bnNpZ25l
ZCBsZW5ndGggPSAwOwotICAgIHN3aXRjaCAocG5hbWUpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29u
dGV4dDNEOjpNQVhfVklFV1BPUlRfRElNUzoKLSAgICAgICAgbGVuZ3RoID0gMjsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9CT1g6Ci0gICAgY2Fz
ZSBHcmFwaGljc0NvbnRleHQzRDo6VklFV1BPUlQ6Ci0gICAgICAgIGxlbmd0aCA9IDQ7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
fQotICAgIHJldHVybiBXZWJHTEdldEluZm8oSW50MzJBcnJheTo6Y3JlYXRlKHZhbHVlLCBsZW5n
dGgpKTsKLX0KLQotdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmNoZWNrVGV4dHVyZUNvbXBs
ZXRlbmVzcyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGJvb2wgcHJlcGFyZVRvRHJhdykKLXsK
LSAgICBib29sIHJlc2V0QWN0aXZlVW5pdCA9IGZhbHNlOwotICAgIFdlYkdMVGV4dHVyZTo6VGV4
dHVyZUV4dGVuc2lvbkZsYWcgZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PFdlYkdMVGV4dHVyZTo6
VGV4dHVyZUV4dGVuc2lvbkZsYWc+KChtX29lc1RleHR1cmVGbG9hdExpbmVhciA/IFdlYkdMVGV4
dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkZsb2F0TGluZWFyRW5hYmxlZCA6IDApIHwgKG1fb2VzVGV4
dHVyZUhhbGZGbG9hdExpbmVhciA/IFdlYkdMVGV4dHVyZTo6VGV4dHVyZUV4dGVuc2lvbkhhbGZG
bG9hdExpbmVhckVuYWJsZWQgOiAwKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGlpID0gMDsgaWkg
PCBtX3RleHR1cmVVbml0cy5zaXplKCk7ICsraWkpIHsKLSAgICAgICAgaWYgKChtX3RleHR1cmVV
bml0c1tpaV0udGV4dHVyZTJEQmluZGluZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZTJE
QmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4dGVuc2lvbnMpKQotICAgICAgICAgICAg
fHwgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlQ3ViZU1hcEJpbmRpbmcgJiYgbV90ZXh0dXJl
VW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGluZy0+bmVlZFRvVXNlQmxhY2tUZXh0dXJlKGV4
dGVuc2lvbnMpKSkgewotICAgICAgICAgICAgaWYgKGlpICE9IG1fYWN0aXZlVGV4dHVyZVVuaXQp
IHsKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoaWkpOwotICAgICAg
ICAgICAgICAgIHJlc2V0QWN0aXZlVW5pdCA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYg
KHJlc2V0QWN0aXZlVW5pdCkgewotICAgICAgICAgICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4
dHVyZShpaSk7Ci0gICAgICAgICAgICAgICAgcmVzZXRBY3RpdmVVbml0ID0gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBXZWJHTFRleHR1cmUqIHRleDJEOwotICAgICAgICAgICAg
V2ViR0xUZXh0dXJlKiB0ZXhDdWJlTWFwOwotICAgICAgICAgICAgaWYgKHByZXBhcmVUb0RyYXcp
IHsKLSAgICAgICAgICAgICAgICBTdHJpbmcgbXNnKFN0cmluZygidGV4dHVyZSBib3VuZCB0byB0
ZXh0dXJlIHVuaXQgIikgKyBTdHJpbmc6Om51bWJlcihpaSkKLSAgICAgICAgICAgICAgICAgICAg
KyAiIGlzIG5vdCByZW5kZXJhYmxlLiBJdCBtYXliZSBub24tcG93ZXItb2YtMiBhbmQgaGF2ZSBp
bmNvbXBhdGlibGUgdGV4dHVyZSBmaWx0ZXJpbmcgb3IgaXMgbm90ICd0ZXh0dXJlIGNvbXBsZXRl
JywiCi0gICAgICAgICAgICAgICAgICAgICsgIiBvciBpdCBpcyBhIGZsb2F0L2hhbGYtZmxvYXQg
dHlwZSB3aXRoIGxpbmVhciBmaWx0ZXJpbmcgYW5kIHdpdGhvdXQgdGhlIHJlbGV2YW50IGZsb2F0
L2hhbGYtZmxvYXQgbGluZWFyIGV4dGVuc2lvbiBlbmFibGVkLiIpOwotICAgICAgICAgICAgICAg
IHByaW50R0xXYXJuaW5nVG9Db25zb2xlKGZ1bmN0aW9uTmFtZSwgbXNnLnV0ZjgoKS5kYXRhKCkp
OwotICAgICAgICAgICAgICAgIHRleDJEID0gbV9ibGFja1RleHR1cmUyRC5nZXQoKTsKLSAgICAg
ICAgICAgICAgICB0ZXhDdWJlTWFwID0gbV9ibGFja1RleHR1cmVDdWJlTWFwLmdldCgpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0ZXgyRCA9IG1fdGV4dHVyZVVuaXRz
W2lpXS50ZXh0dXJlMkRCaW5kaW5nLmdldCgpOwotICAgICAgICAgICAgICAgIHRleEN1YmVNYXAg
PSBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgpOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgaWYgKG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5k
aW5nICYmIG1fdGV4dHVyZVVuaXRzW2lpXS50ZXh0dXJlMkRCaW5kaW5nLT5uZWVkVG9Vc2VCbGFj
a1RleHR1cmUoZXh0ZW5zaW9ucykpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgb2JqZWN0T3JaZXJvKHRleDJEKSk7
Ci0gICAgICAgICAgICBpZiAobV90ZXh0dXJlVW5pdHNbaWldLnRleHR1cmVDdWJlTWFwQmluZGlu
ZyAmJiBtX3RleHR1cmVVbml0c1tpaV0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLT5uZWVkVG9Vc2VC
bGFja1RleHR1cmUoZXh0ZW5zaW9ucykpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5k
VGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUCwgb2JqZWN0T3JaZXJv
KHRleEN1YmVNYXApKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAocmVzZXRBY3RpdmVVbml0
KQotICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUobV9hY3RpdmVUZXh0dXJlVW5pdCk7
Ci19Ci0KLXZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpjcmVhdGVGYWxsYmFja0JsYWNrVGV4
dHVyZXMxeDEoKQotewotICAgIHVuc2lnbmVkIGNoYXIgYmxhY2tbXSA9IHswLCAwLCAwLCAyNTV9
OwotICAgIG1fYmxhY2tUZXh0dXJlMkQgPSBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgbV9jb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9ibGFja1RleHR1
cmUyRC0+b2JqZWN0KCkpOwotICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwotICAgIG1fYmxhY2tUZXh0
dXJlQ3ViZU1hcCA9IGNyZWF0ZVRleHR1cmUoKTsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQLCBtX2JsYWNrVGV4dHVyZUN1YmVN
YXAtPm9iamVjdCgpKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIDEsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1f
Y29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9YLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4
dDNEOjpVTlNJR05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1ksIDAsIEdyYXBoaWNz
Q29udGV4dDNEOjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFw
aGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJs
YWNrKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIDEsIDEs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBH
cmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgYmxhY2spOwotICAgIG1fY29udGV4dC0+
dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
LCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgMSwgMSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFLCBibGFjayk7Ci0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1osIDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCAxLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGJsYWNrKTsKLSAg
ICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVf
TUFQLCAwKTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmlzVGV4SW50ZXJuYWxG
b3JtYXRDb2xvckJ1ZmZlckNvbWJpbmF0aW9uVmFsaWQoR0MzRGVudW0gdGV4SW50ZXJuYWxGb3Jt
YXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBjb2xvckJ1ZmZlckZvcm1hdCkKLXsKLSAg
ICB1bnNpZ25lZCBuZWVkID0gR3JhcGhpY3NDb250ZXh0M0Q6OmdldENoYW5uZWxCaXRzQnlGb3Jt
YXQodGV4SW50ZXJuYWxGb3JtYXQpOwotICAgIHVuc2lnbmVkIGhhdmUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0Q2hhbm5lbEJpdHNCeUZvcm1hdChjb2xvckJ1ZmZlckZvcm1hdCk7Ci0gICAgcmV0
dXJuIChuZWVkICYgaGF2ZSkgPT0gbmVlZDsKLX0KLQotR0MzRGVudW0gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRCb3VuZEZyYW1lYnVmZmVyQ29sb3JGb3JtYXQoKQotewotICAgIGlmIChtX2Zy
YW1lYnVmZmVyQmluZGluZyAmJiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+b2JqZWN0KCkpCi0gICAg
ICAgIHJldHVybiBtX2ZyYW1lYnVmZmVyQmluZGluZy0+Z2V0Q29sb3JCdWZmZXJGb3JtYXQoKTsK
LSAgICBpZiAobV9hdHRyaWJ1dGVzLmFscGhhKQotICAgICAgICByZXR1cm4gR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkE7Ci0gICAgcmV0dXJuIEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7Ci19Ci0KLWlu
dCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmdldEJvdW5kRnJhbWVidWZmZXJXaWR0aCgpCi17Ci0g
ICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5vYmpl
Y3QoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5kaW5nLT5nZXRDb2xvckJ1ZmZl
cldpZHRoKCk7Ci0gICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+
c2l6ZSgpLndpZHRoKCkgOiBtX2NvbnRleHQtPmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCku
d2lkdGgoKTsKLX0KLQotaW50IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0Qm91bmRGcmFtZWJ1
ZmZlckhlaWdodCgpCi17Ci0gICAgaWYgKG1fZnJhbWVidWZmZXJCaW5kaW5nICYmIG1fZnJhbWVi
dWZmZXJCaW5kaW5nLT5vYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIG1fZnJhbWVidWZmZXJCaW5k
aW5nLT5nZXRDb2xvckJ1ZmZlckhlaWdodCgpOwotICAgIHJldHVybiBtX2RyYXdpbmdCdWZmZXIg
PyBtX2RyYXdpbmdCdWZmZXItPnNpemUoKS5oZWlnaHQoKSA6IG1fY29udGV4dC0+Z2V0SW50ZXJu
YWxGcmFtZWJ1ZmZlclNpemUoKS5oZWlnaHQoKTsKLX0KLQotV2ViR0xUZXh0dXJlKiBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnZhbGlkYXRlVGV4dHVyZUJpbmRpbmcoY29uc3QgY2hhciogZnVuY3Rp
b25OYW1lLCBHQzNEZW51bSB0YXJnZXQsIGJvb2wgdXNlU2l4RW51bXNGb3JDdWJlTWFwKQotewot
ICAgIFdlYkdMVGV4dHVyZSogdGV4dHVyZSA9IG51bGxwdHI7Ci0gICAgc3dpdGNoICh0YXJnZXQp
IHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEOgotICAgICAgICB0ZXh0
dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZTJEQmluZGlu
Zy5nZXQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAgIGlmICghdXNlU2l4RW51bXNG
b3JDdWJlTWFwKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0
Iik7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICB0ZXh0
dXJlID0gbV90ZXh0dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBC
aW5kaW5nLmdldCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQOgotICAgICAgICBpZiAodXNlU2l4RW51bXNGb3JDdWJlTWFwKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgICAgICB0ZXh0dXJlID0gbV90ZXh0
dXJlVW5pdHNbbV9hY3RpdmVUZXh0dXJlVW5pdF0udGV4dHVyZUN1YmVNYXBCaW5kaW5nLmdldCgp
OwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJv
cihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlk
IHRleHR1cmUgdGFyZ2V0Iik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBp
ZiAoIXRleHR1cmUpCi0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAibm8gdGV4dHVyZSIpOwotICAgIHJl
dHVybiB0ZXh0dXJlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVM
b2NhdGlvbkxlbmd0aChjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUsIGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQotewotICAgIGNvbnN0IHVuc2lnbmVkIG1heFdlYkdMTG9jYXRpb25MZW5ndGggPSAyNTY7
Ci0gICAgaWYgKHN0cmluZy5sZW5ndGgoKSA+IG1heFdlYkdMTG9jYXRpb25MZW5ndGgpIHsKLSAg
ICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUs
IGZ1bmN0aW9uTmFtZSwgImxvY2F0aW9uIGxlbmd0aCA+IDI1NiIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6dmFsaWRhdGVTaXplKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0MzRGludCB4
LCBHQzNEaW50IHkpCi17Ci0gICAgaWYgKHggPCAwIHx8IHkgPCAwKSB7Ci0gICAgICAgIHN5bnRo
ZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5h
bWUsICJzaXplIDwgMCIpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVTdHJpbmco
Y29uc3QgY2hhciogZnVuY3Rpb25OYW1lLCBjb25zdCBTdHJpbmcmIHN0cmluZykKLXsKLSAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlm
ICghdmFsaWRhdGVDaGFyYWN0ZXIoc3RyaW5nW2ldKSkgewotICAgICAgICAgICAgc3ludGhlc2l6
ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwg
InN0cmluZyBub3QgQVNDSUkiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
fQotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnZhbGlkYXRlVGV4RnVuY0Zvcm1hdEFuZFR5cGUoY29uc3QgY2hhciogZnVuY3Rpb25OYW1l
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnQgbGV2ZWwpCi17Ci0gICAg
c3dpdGNoIChmb3JtYXQpIHsKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpBTFBIQToKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0U6Ci0gICAgY2FzZSBHcmFwaGljc0Nv
bnRleHQzRDo6TFVNSU5BTkNFX0FMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QjoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOgotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9TVEVOQ0lMOgotICAgIGNhc2UgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEZXB0aFRl
eHR1cmUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiZGVwdGggdGV4dHVy
ZSBmb3JtYXRzIG5vdCBlbmFibGVkIik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBkZWZh
dWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgZm9ybWF0Iik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVO
U0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfU0hPUlRfNV81XzVfMToKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQ6Ci0gICAgICAgIGlmIChtX29lc1RleHR1cmVGbG9hdCkKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIHRleHR1cmUgdHlwZSIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9P
RVM6Ci0gICAgICAgIGlmIChtX29lc1RleHR1cmVIYWxmRmxvYXQpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0lOVDoKLSAg
ICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9JTlRfMjRfODoKLSAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVDoKLSAgICAgICAgaWYgKG1fd2ViZ2xEZXB0
aFRleHR1cmUpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3Io
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0
ZXh0dXJlIHR5cGUiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1
bmN0aW9uTmFtZSwgImludmFsaWQgdGV4dHVyZSB0eXBlIik7Ci0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICB9Ci0KLSAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29tYmluYXRpb24gb2YgZm9ybWF0
IGFuZCB0eXBlIGlzIHN1cHBvcnRlZC4KLSAgICBzd2l0Y2ggKGZvcm1hdCkgewotICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OkFMUEhBOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxV
TUlOQU5DRToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpMVU1JTkFOQ0VfQUxQSEE6Ci0g
ICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAg
ICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVAotICAgICAgICAgICAg
JiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9PRVMpIHsKLSAgICAgICAg
ICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElP
TiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBmb3JtYXQiKTsKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBjYXNlIEdyYXBo
aWNzQ29udGV4dDNEOjpSR0I6Ci0gICAgICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9CWVRFCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVF81XzZfNQotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQKLSAgICAgICAgICAgICYmIHR5cGUgIT0gR3JhcGhpY3NDb250ZXh0M0Q6
OkhBTEZfRkxPQVRfT0VTKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGlj
c0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdHlw
ZSBmb3IgUkdCIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE6Ci0gICAg
ICAgIGlmICh0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFCi0gICAgICAg
ICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVF80XzRfNF80
Ci0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9S
VF81XzVfNV8xCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGTE9B
VAotICAgICAgICAgICAgJiYgdHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6SEFMRl9GTE9BVF9P
RVMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZvciBSR0JBIGZv
cm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDoKLSAgICAg
ICAgaWYgKCFtX3dlYmdsRGVwdGhUZXh0dXJlKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZh
bGlkIGZvcm1hdC4gREVQVEhfQ09NUE9ORU5UIG5vdCBlbmFibGVkIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHR5cGUgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUCi0gICAgICAgICAgICAmJiB0eXBlICE9IEdyYXBoaWNzQ29u
dGV4dDNEOjpVTlNJR05FRF9JTlQpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxp
ZCB0eXBlIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxldmVsID4gMCkgewotICAgICAgICAgIHN5
bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVu
Y3Rpb25OYW1lLCAibGV2ZWwgbXVzdCBiZSAwIGZvciBERVBUSF9DT01QT05FTlQgZm9ybWF0Iik7
Ci0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX1NURU5DSUw6Ci0gICAgICAgIGlmICghbV93
ZWJnbERlcHRoVGV4dHVyZSkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTSwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCBmb3JtYXQu
IERFUFRIX1NURU5DSUwgbm90IGVuYWJsZWQiKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQotICAgICAgICBpZiAodHlwZSAhPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdO
RURfSU5UXzI0XzgpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29u
dGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0eXBlIGZv
ciBERVBUSF9TVEVOQ0lMIGZvcm1hdCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICB9Ci0gICAgICAgIGlmIChsZXZlbCA+IDApIHsKLSAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwg
ImxldmVsIG11c3QgYmUgMCBmb3IgREVQVEhfU1RFTkNJTCBmb3JtYXQiKTsKLSAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNMZXZlbChjb25z
dCBjaGFyKiBmdW5jdGlvbk5hbWUsIEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCkKLXsK
LSAgICBpZiAobGV2ZWwgPCAwKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJsZXZlbCA8IDAiKTsKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBzd2l0Y2ggKHRhcmdldCkgewotICAgIGNh
c2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQ6Ci0gICAgICAgIGlmIChsZXZlbCA+PSBt
X21heFRleHR1cmVMZXZlbCkgewotICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxldmVsIG91dCBvZiBy
YW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX05FR0FU
SVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfQ1VCRV9NQVBfTkVH
QVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX0NVQkVfTUFQX1BP
U0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9aOgotICAgICAgICBpZiAobGV2ZWwgPj0gbV9tYXhDdWJlTWFwVGV4dHVyZUxldmVs
KSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5W
QUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibGV2ZWwgb3V0IG9mIHJhbmdlIik7Ci0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAg
IC8vIFRoaXMgZnVuY3Rpb24gb25seSBjaGVja3MgaWYgbGV2ZWwgaXMgbGVnYWwsIHNvIHdlIHJl
dHVybiB0cnVlIGFuZCBkb24ndAotICAgIC8vIGdlbmVyYXRlIElOVkFMSURfRU5VTSBpZiB0YXJn
ZXQgaXMgaWxsZWdhbC4KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnZhbGlkYXRlVGV4RnVuY1BhcmFtZXRlcnMoY29uc3QgY2hhciogZnVuY3Rpb25O
YW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVGV4RnVuY1ZhbGlkYXRpb25GdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlKQotewotICAgIC8vIFdlIGFic29sdXRlbHkgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgZm9y
bWF0IGFuZCB0eXBlIGNvbWJpbmF0aW9uLgotICAgIC8vIFRoZSB0ZXhJbWFnZTJEIGVudHJ5IHBv
aW50cyB0YWtpbmcgSFRNTEltYWdlLCBldGMuIHdpbGwgcHJvZHVjZQotICAgIC8vIHRlbXBvcmFy
eSBkYXRhIGJhc2VkIG9uIHRoaXMgY29tYmluYXRpb24sIHNvIGl0IG11c3QgYmUgbGVnYWwuCi0g
ICAgaWYgKCF2YWxpZGF0ZVRleEZ1bmNGb3JtYXRBbmRUeXBlKGZ1bmN0aW9uTmFtZSwgZm9ybWF0
LCB0eXBlLCBsZXZlbCkgfHwgIXZhbGlkYXRlVGV4RnVuY0xldmVsKGZ1bmN0aW9uTmFtZSwgdGFy
Z2V0LCBsZXZlbCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICh3aWR0aCA8IDAg
fHwgaGVpZ2h0IDwgMCkgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lkdGggb3IgaGVpZ2h0IDwgMCIp
OwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgR0MzRGludCBtYXhUZXh0dXJl
U2l6ZUZvckxldmVsID0gcG93KDIuMCwgbV9tYXhUZXh0dXJlTGV2ZWwgLSAxIC0gbGV2ZWwpOwot
ICAgIHN3aXRjaCAodGFyZ2V0KSB7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRDoKLSAgICAgICAgaWYgKHdpZHRoID4gbWF4VGV4dHVyZVNpemVGb3JMZXZlbCB8fCBoZWln
aHQgPiBtYXhUZXh0dXJlU2l6ZUZvckxldmVsKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xF
cnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAid2lk
dGggb3IgaGVpZ2h0IG91dCBvZiByYW5nZSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZOgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICBpZiAoZnVuY3Rpb25UeXBl
ICE9IFRleFN1YkltYWdlMkQgJiYgd2lkdGggIT0gaGVpZ2h0KSB7Ci0gICAgICAgICAgICBzeW50
aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25O
YW1lLCAid2lkdGggIT0gaGVpZ2h0IGZvciBjdWJlIG1hcCIpOwotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgaGVpZ2h0IGhl
cmUuIEZvciB0ZXhJbWFnZSB3aWR0aCA9PSBoZWlnaHQuCi0gICAgICAgIC8vIEZvciB0ZXhTdWJJ
bWFnZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB3aGVuIGNoZWNraW5nIHlvZmZzZXQgKyBoZWlnaHQg
aXMgaW4gcmFuZ2UuCi0gICAgICAgIGlmICh3aWR0aCA+IG1heFRleHR1cmVTaXplRm9yTGV2ZWwp
IHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZB
TElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBoZWlnaHQgb3V0IG9mIHJhbmdlIGZv
ciBjdWJlIG1hcCIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBo
aWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0sIGZ1bmN0aW9uTmFtZSwgImludmFsaWQgdGFyZ2V0
Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoZm9ybWF0ICE9IGlu
dGVybmFsZm9ybWF0KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAiZm9ybWF0ICE9IGludGVybmFs
Zm9ybWF0Iik7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoYm9yZGVy
KSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElE
X1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJib3JkZXIgIT0gMCIpOwotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp2YWxpZGF0ZVRleEZ1bmNEYXRhKGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSwgR0Mz
RGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFy
cmF5QnVmZmVyVmlldyogcGl4ZWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTnVsbERpc3Bvc2l0aW9uIGRpc3Bvc2l0aW9uKQotewotICAgIGlmICgh
cGl4ZWxzKSB7Ci0gICAgICAgIGlmIChkaXNwb3NpdGlvbiA9PSBOdWxsQWxsb3dlZCkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0Nv
bnRleHQzRDo6SU5WQUxJRF9WQUxVRSwgZnVuY3Rpb25OYW1lLCAibm8gcGl4ZWxzIik7Ci0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAoIXZhbGlkYXRlVGV4RnVuY0Zvcm1h
dEFuZFR5cGUoZnVuY3Rpb25OYW1lLCBmb3JtYXQsIHR5cGUsIGxldmVsKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGlmICghdmFsaWRhdGVTZXR0YWJsZVRleEZvcm1hdChmdW5jdGlvbk5h
bWUsIGZvcm1hdCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU6Ci0gICAgICAgIGlm
IChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5cGVVaW50OCkgewotICAgICAgICAgICAgc3lu
dGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OLCBmdW5j
dGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX0JZVEUgYnV0IEFycmF5QnVmZmVyVmlldyBub3QgVWlu
dDhBcnJheSIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzVfNl81
OgotICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6Ci0g
ICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlRfNV81XzVfMToKLSAgICAg
ICAgaWYgKHBpeGVscy0+Z2V0VHlwZSgpICE9IEpTQzo6VHlwZVVpbnQxNikgewotICAgICAgICAg
ICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9O
LCBmdW5jdGlvbk5hbWUsICJ0eXBlIFVOU0lHTkVEX1NIT1JUIGJ1dCBBcnJheUJ1ZmZlclZpZXcg
bm90IFVpbnQxNkFycmF5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0K
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQ6IC8vIE9F
U190ZXh0dXJlX2Zsb2F0Ci0gICAgICAgIGlmIChwaXhlbHMtPmdldFR5cGUoKSAhPSBKU0M6OlR5
cGVGbG9hdDMyKSB7Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRl
eHQzRDo6SU5WQUxJRF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgInR5cGUgRkxPQVQgYnV0IEFy
cmF5QnVmZmVyVmlldyBub3QgRmxvYXQzMkFycmF5Iik7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SEFMRl9GTE9BVF9PRVM6IC8vIE9FU190ZXh0dXJlX2hhbGZfZmxvYXQKLSAgICAgICAgLy8g
QXMgcGVyIHRoZSBzcGVjaWZpY2F0aW9uLCBBcnJheUJ1ZmZlclZpZXcgc2hvdWxkIGJlIG51bGwg
d2hlbgotICAgICAgICAvLyBPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0IGlzIGVuYWJsZWQuCi0gICAg
ICAgIGlmIChwaXhlbHMpIHsKLSAgICAgICAgICAgIHN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNz
Q29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1lLCAidHlwZSBIQUxGX0ZM
T0FUX09FUyBidXQgQXJyYXlCdWZmZXJWaWV3IGlzIG5vdCBOVUxMIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaW50IHRv
dGFsQnl0ZXNSZXF1aXJlZDsKLSAgICBHQzNEZW51bSBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0
ZUltYWdlU2l6ZUluQnl0ZXMoZm9ybWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCBtX3VucGFja0Fs
aWdubWVudCwgJnRvdGFsQnl0ZXNSZXF1aXJlZCwgMCk7Ci0gICAgaWYgKGVycm9yICE9IEdyYXBo
aWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihlcnJv
ciwgZnVuY3Rpb25OYW1lLCAiaW52YWxpZCB0ZXh0dXJlIGRpbWVuc2lvbnMiKTsKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPCB0b3Rh
bEJ5dGVzUmVxdWlyZWQpIHsKLSAgICAgICAgaWYgKG1fdW5wYWNrQWxpZ25tZW50ICE9IDEpIHsK
LSAgICAgICAgICBlcnJvciA9IG1fY29udGV4dC0+Y29tcHV0ZUltYWdlU2l6ZUluQnl0ZXMoZm9y
bWF0LCB0eXBlLCB3aWR0aCwgaGVpZ2h0LCAxLCAmdG90YWxCeXRlc1JlcXVpcmVkLCAwKTsKLSAg
ICAgICAgICBpZiAocGl4ZWxzLT5ieXRlTGVuZ3RoKCkgPT0gdG90YWxCeXRlc1JlcXVpcmVkKSB7
Ci0gICAgICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04sIGZ1bmN0aW9uTmFtZSwgIkFycmF5QnVmZmVyVmlldyBub3QgYmlnIGVub3Vn
aCBmb3IgcmVxdWVzdCB3aXRoIFVOUEFDS19BTElHTk1FTlQgPiAxIik7Ci0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHN5bnRoZXNpemVH
TEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiwgZnVuY3Rpb25OYW1l
LCAiQXJyYXlCdWZmZXJWaWV3IG5vdCBiaWcgZW5vdWdoIGZvciByZXF1ZXN0Iik7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0Ojp2YWxpZGF0ZUNvbXByZXNzZWRUZXhGb3JtYXQoR0MzRGVudW0gZm9y
bWF0KQotewotICAgIHJldHVybiBtX2NvbXByZXNzZWRUZXh0dXJlRm9ybWF0cy5jb250YWlucyhm
b3JtYXQpOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmFsaWRhdGVDb21wcmVz
c2VkVGV4RnVuY0RhdGEoY29uc3QgY2hhciogZnVuY3Rpb25OYW1lLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBHQzNEZW51bSBmb3JtYXQsIEFycmF5QnVmZmVyVmlldyog
cGl4ZWxzKQotewotICAgIGlmICghcGl4ZWxzKSB7Ci0gICAgICAgIHN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFLCBmdW5jdGlvbk5hbWUsICJubyBwaXhl
bHMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBpZiAod2lkdGggPCAwIHx8
IGhlaWdodCA8IDApIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0
M0Q6OklOVkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgIndpZHRoIG9yIGhlaWdodCA8IDAiKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGludCBieXRlc1Jl
cXVpcmVkID0gMDsKLQotICAgIHN3aXRjaCAoZm9ybWF0KSB7Ci0gICAgY2FzZSBFeHRlbnNpb25z
M0Q6OkNPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6
OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpD
T01QUkVTU0VEX0FUQ19SR0JfQU1EOgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQg
a0Jsb2NrU2l6ZSA9IDg7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSA0Owot
ICAgICAgICAgICAgY29uc3QgaW50IGtCbG9ja0hlaWdodCA9IDQ7Ci0gICAgICAgICAgICBpbnQg
bnVtQmxvY2tzQWNyb3NzID0gKHdpZHRoICsga0Jsb2NrV2lkdGggLSAxKSAvIGtCbG9ja1dpZHRo
OwotICAgICAgICAgICAgaW50IG51bUJsb2Nrc0Rvd24gPSAoaGVpZ2h0ICsga0Jsb2NrSGVpZ2h0
IC0gMSkgLyBrQmxvY2tIZWlnaHQ7Ci0gICAgICAgICAgICBieXRlc1JlcXVpcmVkID0gbnVtQmxv
Y2tzQWNyb3NzICogbnVtQmxvY2tzRG93biAqIGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDNfRVhUOgotICAgIGNhc2UgRXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1
X0VYVDoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9BVENfUkdCQV9FWFBMSUNJ
VF9BTFBIQV9BTUQ6Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfQVRDX1JHQkFf
SU5URVJQT0xBVEVEX0FMUEhBX0FNRDoKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgaW50
IGtCbG9ja1NpemUgPSAxNjsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDQ7
Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgICAgIGlu
dCBudW1CbG9ja3NBY3Jvc3MgPSAod2lkdGggKyBrQmxvY2tXaWR0aCAtIDEpIC8ga0Jsb2NrV2lk
dGg7Ci0gICAgICAgICAgICBpbnQgbnVtQmxvY2tzRG93biA9IChoZWlnaHQgKyBrQmxvY2tIZWln
aHQgLSAxKSAvIGtCbG9ja0hlaWdodDsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQgPSBudW1C
bG9ja3NBY3Jvc3MgKiBudW1CbG9ja3NEb3duICoga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUFZSVENf
NEJQUFYxX0lNRzoKLSAgICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1BWUlRD
XzRCUFBWMV9JTUc6Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tTaXpl
ID0gODsKLSAgICAgICAgICAgIGNvbnN0IGludCBrQmxvY2tXaWR0aCA9IDg7Ci0gICAgICAgICAg
ICBjb25zdCBpbnQga0Jsb2NrSGVpZ2h0ID0gODsKLSAgICAgICAgICAgIGJ5dGVzUmVxdWlyZWQg
PSAoc3RkOjptYXgod2lkdGgsIGtCbG9ja1dpZHRoKSAqIHN0ZDo6bWF4KGhlaWdodCwga0Jsb2Nr
SGVpZ2h0KSAqIDQgKyA3KSAvIGtCbG9ja1NpemU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCX1BWUlRDXzJCUFBWMV9JTUc6
Ci0gICAgY2FzZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9QVlJUQ18yQlBQVjFfSU1H
OgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBpbnQga0Jsb2NrU2l6ZSA9IDg7Ci0gICAg
ICAgICAgICBjb25zdCBpbnQga0Jsb2NrV2lkdGggPSAxNjsKLSAgICAgICAgICAgIGNvbnN0IGlu
dCBrQmxvY2tIZWlnaHQgPSA4OwotICAgICAgICAgICAgYnl0ZXNSZXF1aXJlZCA9IChzdGQ6Om1h
eCh3aWR0aCwga0Jsb2NrV2lkdGgpICogc3RkOjptYXgoaGVpZ2h0LCBrQmxvY2tIZWlnaHQpICog
MiArIDcpIC8ga0Jsb2NrU2l6ZTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICBkZWZh
dWx0OgotICAgICAgICBzeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9FTlVNLCBmdW5jdGlvbk5hbWUsICJpbnZhbGlkIGZvcm1hdCIpOwotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfQotCi0gICAgaWYgKHBpeGVscy0+Ynl0ZUxlbmd0aCgpICE9IGJ5dGVzUmVx
dWlyZWQpIHsKLSAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklO
VkFMSURfVkFMVUUsIGZ1bmN0aW9uTmFtZSwgImxlbmd0aCBvZiBBcnJheUJ1ZmZlclZpZXcgaXMg
bm90IGNvcnJlY3QgZm9yIGRpbWVuc2lvbnMiKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
dmFsaWRhdGVDb21wcmVzc2VkVGV4RGltZW5zaW9ucyhjb25zdCBjaGFyKiBmdW5jdGlvbk5hbWUs
IEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQpCi17Ci0gICAgc3dpdGNoIChmb3JtYXQpIHsKLSAg
ICBjYXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKLSAgICBj
YXNlIEV4dGVuc2lvbnMzRDo6Q09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6Ci0gICAgY2Fz
ZSBFeHRlbnNpb25zM0Q6OkNPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDNfRVhUOgotICAgIGNhc2Ug
RXh0ZW5zaW9uczNEOjpDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVDogewotICAgICAgICBj
b25zdCBHQzNEc2l6ZWkga0Jsb2NrV2lkdGggPSA0OwotICAgICAgICBjb25zdCBHQzNEc2l6ZWkg
a0Jsb2NrSGVpZ2h0ID0gNDsKLSAgICAgICAgY29uc3QgR0MzRGludCBtYXhUZXh0dXJlU2l6ZSA9
IHRhcmdldCA/IG1fbWF4VGV4dHVyZVNpemUgOiBtX21heEN1YmVNYXBUZXh0dXJlU2l6ZTsKLSAg
ICAgICAgY29uc3QgR0MzRHNpemVpIG1heENvbXByZXNzZWREaW1lbnNpb24gPSBtYXhUZXh0dXJl
U2l6ZSA+PiBsZXZlbDsKLSAgICAgICAgYm9vbCB3aWR0aFZhbGlkID0gKGxldmVsICYmIHdpZHRo
ID09IDEpIHx8IChsZXZlbCAmJiB3aWR0aCA9PSAyKSB8fCAoISh3aWR0aCAlIGtCbG9ja1dpZHRo
KSAmJiB3aWR0aCA8PSBtYXhDb21wcmVzc2VkRGltZW5zaW9uKTsKLSAgICAgICAgYm9vbCBoZWln
aHRWYWxpZCA9IChsZXZlbCAmJiBoZWlnaHQgPT0gMSkgfHwgKGxldmVsICYmIGhlaWdodCA9PSAy
KSB8fCAoIShoZWlnaHQgJSBrQmxvY2tIZWlnaHQpICYmIGhlaWdodCA8PSBtYXhDb21wcmVzc2Vk
RGltZW5zaW9uKTsKLSAgICAgICAgaWYgKCF3aWR0aFZhbGlkIHx8ICFoZWlnaHRWYWxpZCkgewot
ICAgICAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
T1BFUkFUSU9OLCBmdW5jdGlvbk5hbWUsICJ3aWR0aCBvciBo