<?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>47194</bug_id>
          
          <creation_ts>2010-10-05 10:33:58 -0700</creation_ts>
          <short_desc>Update ANGLE rev in Webkit</short_desc>
          <delta_ts>2011-01-18 19:58:05 -0800</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>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alok Priyadarshi">alokp</reporter>
          <assigned_to name="Ben Vanik">ben.vanik</assigned_to>
          <cc>abarth</cc>
    
    <cc>ben.vanik</cc>
    
    <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>enne</cc>
    
    <cc>eric</cc>
    
    <cc>kbr</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>289727</commentid>
    <comment_count>0</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2010-10-05 10:33:58 -0700</bug_when>
    <thetext>The ANGLE snapshot in WebKit is pretty old. The latest revision of ANGLE has many bug fixes and improvements. Since ANGLE is in a very active state of development, it would also be nice to have an automated tool to update the WebKit snapshot.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>298069</commentid>
    <comment_count>1</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-10-22 10:50:37 -0700</bug_when>
    <thetext>Also, the current implementation in Mac port handling ANGLE is both inefficient and buggy.  Look at WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp for comparison.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334598</commentid>
    <comment_count>2</comment_count>
    <who name="Ben Vanik">ben.vanik</who>
    <bug_when>2011-01-14 14:08:37 -0800</bug_when>
    <thetext>Any status on this? Getting *really* out of date now and making it difficult to keep changes working with WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334695</commentid>
    <comment_count>3</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2011-01-14 15:58:49 -0800</bug_when>
    <thetext>I have no problem with updating ANGLE, I just haven&apos;t had the time. Please feel free to snag it, or I will get to it in a couple of weeks or so...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334700</commentid>
    <comment_count>4</comment_count>
    <who name="Ben Vanik">ben.vanik</who>
    <bug_when>2011-01-14 16:02:17 -0800</bug_when>
    <thetext>I&apos;ll give it a shot!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334714</commentid>
    <comment_count>5</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-14 16:25:11 -0800</bug_when>
    <thetext>Since ANGLE interfaces changed, you need to fix WebCore/platform/graphics/ANGLEWebkitBridge.cpp and also shader related functions in WebCore/platform/graphics/opengl/GraphicsContext3DOpenGL.cpp.

You can look at http://src.chromium.org/viewvc/chrome/trunk/src/webkit/gpu/webgraphicscontext3d_in_process_impl.cc?view=log.  The implementation ins GraphicsContext3DOpenGL.cpp should be very similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>334854</commentid>
    <comment_count>6</comment_count>
      <attachid>79053</attachid>
    <who name="Ben Vanik">ben.vanik</who>
    <bug_when>2011-01-14 22:34:39 -0800</bug_when>
    <thetext>Created attachment 79053
ANGLE r533

This updates ANGLE to r533. Tested against the WebGL conformance tests and several of the WebGL samples - all seem to work OK. Only unique changes were in WebCore to support API changes made to ANGLE since the last snapshot several months ago.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335872</commentid>
    <comment_count>7</comment_count>
      <attachid>79053</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-18 09:46:02 -0800</bug_when>
    <thetext>Comment on attachment 79053
ANGLE r533

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

Looks good in general.  Thanks for taking care of this long-standing task.

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:85
&gt; +            char* logBuffer = new char[logSize];

Should use OwnArrayPtr&lt;char&gt; here.

&gt; Source/WebCore/platform/graphics/ANGLEWebKitBridge.cpp:98
&gt; +        char* translationBuffer = new char[translationLength];

Should use OwnArrayPtr&lt;char&gt; here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335962</commentid>
    <comment_count>8</comment_count>
      <attachid>79053</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-18 11:39:19 -0800</bug_when>
    <thetext>Comment on attachment 79053
ANGLE r533

Ben, seconded; thanks for taking care of this long outstanding task. Could you please address Mo&apos;s review comments and upload a revised patch? I&apos;ll help you get it committed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336146</commentid>
    <comment_count>9</comment_count>
      <attachid>79343</attachid>
    <who name="Ben Vanik">ben.vanik</who>
    <bug_when>2011-01-18 15:25:22 -0800</bug_when>
    <thetext>Created attachment 79343
ANGLE r533 - revised patch

This patch applies the review feedback and uses OwnArrayPtr&lt;char&gt; instead of raw character buffers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336150</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-18 15:28:48 -0800</bug_when>
    <thetext>Attachment 79343 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/ThirdParty/ANGLE/ANGLE.xcodeproj/pr...&quot; exit_code: 1

Last 3072 characters of output:
ANGLE/src/compiler/glslang_tab.cpp:4699:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/glslang_tab.cpp:4706:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/glslang_tab.cpp:4706:  glslang_parse is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/ThirdParty/ANGLE/src/compiler/Initialize.h:20:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/src/compiler/Initialize.h:20:  The parameter name &quot;spec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/src/compiler/Initialize.h:21:  The parameter name &quot;resources&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/src/compiler/Initialize.h:28:  The parameter name &quot;type&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/src/compiler/Initialize.h:28:  The parameter name &quot;spec&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/src/compiler/Initialize.h:29:  The parameter name &quot;resources&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/src/compiler/Initialize.h:32:  The parameter name &quot;resources&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/src/compiler/Initialize.h:33:  The parameter name &quot;extensionBehavior&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/ThirdParty/ANGLE/src/libGLESv2/Fence.h:9:  #ifndef header guard has wrong style, please use: WTF_Fence_h  [build/header_guard] [5]
Source/ThirdParty/ANGLE/src/libGLESv2/Fence.h:16:  Alphabetical sorting problem.  [build/include_order] [4]
Source/ThirdParty/ANGLE/src/libGLESv2/Fence.h:19:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/libGLESv2/Fence.h:22:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/libGLESv2/Fence.h:43:  One space before end of line comments  [whitespace/comments] [5]
Source/ThirdParty/ANGLE/src/compiler/glslang_tab.h:41:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/glslang_tab.h:133:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/ThirdParty/ANGLE/src/compiler/glslang_tab.h:231:  Extra space for operator !   [whitespace/operators] [4]
Source/ThirdParty/ANGLE/src/compiler/glslang_tab.h:234:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/ThirdParty/ANGLE/src/compiler/glslang_tab.h:267:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 3817 in 97 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>336155</commentid>
    <comment_count>11</comment_count>
    <who name="Ben Vanik">ben.vanik</who>
    <bug_when>2011-01-18 15:34:21 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Attachment 79343 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/ThirdParty/ANGLE/ANGLE.xcodeproj/pr...&quot; exit_code: 1

So, yeah, ANGLE doesn&apos;t pass the style check. But the unique changes I made under WebCore do pass (so all errors are from ANGLE/).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336157</commentid>
    <comment_count>12</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-18 15:41:46 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; &gt; Attachment 79343 [details] [details] did not pass style-queue:
&gt; &gt; 
&gt; &gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/ThirdParty/ANGLE/ANGLE.xcodeproj/pr...&quot; exit_code: 1
&gt; 
&gt; So, yeah, ANGLE doesn&apos;t pass the style check. But the unique changes I made under WebCore do pass (so all errors are from ANGLE/).

Not a problem for the time being.

Mo, does this update look good to you?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336220</commentid>
    <comment_count>13</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2011-01-18 17:00:09 -0800</bug_when>
    <thetext>Looks good.  Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336222</commentid>
    <comment_count>14</comment_count>
      <attachid>79343</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-18 17:03:02 -0800</bug_when>
    <thetext>Comment on attachment 79343
ANGLE r533 - revised patch

Thanks, Mo. Let&apos;s see whether the commit queue can handle this monster patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336260</commentid>
    <comment_count>15</comment_count>
      <attachid>79343</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-18 18:04:14 -0800</bug_when>
    <thetext>Comment on attachment 79343
ANGLE r533 - revised patch

Rejecting attachment 79343 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-4&apos;, &apos;apply-...&quot; exit_code: 2

Last 500 characters of output:
rc/libEGL/libEGL.cpp
patching file Source/ThirdParty/ANGLE/src/libEGL/Config.cpp
patching file Source/ThirdParty/ANGLE/src/libEGL/Display.cpp
patching file Source/ThirdParty/ANGLE/src/libEGL/Surface.cpp
patching file Source/ThirdParty/ANGLE/src/libEGL/Display.h
patching file Source/ThirdParty/ANGLE/src/libEGL/Surface.h
patching file Source/ThirdParty/ANGLE/ChangeLog

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Kenneth Russell&apos;, u&apos;--...&quot; exit_code: 1

Full output: http://queues.webkit.org/results/7550178</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336265</commentid>
    <comment_count>16</comment_count>
    <who name="Ben Vanik">ben.vanik</who>
    <bug_when>2011-01-18 18:12:49 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 79343 [details])
&gt; Rejecting attachment 79343 [details] from commit-queue.

Hmmm... The log snippet doesn&apos;t seem to show anything useful. Being my first submission, what exactly is the error here? What should I try next?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336268</commentid>
    <comment_count>17</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-18 18:16:28 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; (From update of attachment 79343 [details] [details])
&gt; &gt; Rejecting attachment 79343 [details] [details] from commit-queue.
&gt; 
&gt; Hmmm... The log snippet doesn&apos;t seem to show anything useful. Being my first submission, what exactly is the error here? What should I try next?

I&apos;m not sure what the error is. I&apos;m in the process of applying your patch to a local workspace and committing it by hand.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336273</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-18 18:23:10 -0800</bug_when>
    <thetext>Yeah, our error reporting from svn-apply is bad.  :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336297</commentid>
    <comment_count>19</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-18 19:01:00 -0800</bug_when>
    <thetext>Committed r76091: &lt;http://trac.webkit.org/changeset/76091&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336298</commentid>
    <comment_count>20</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-18 19:02:40 -0800</bug_when>
    <thetext>It turns out there were tabs in three autogenerated files: glslang_lex.cpp, glslang_tab.cpp and glslang_tab.h in Source/ThirdParty/ANGLE/src/compiler/. I added the allow-tabs property to these and was able to commit the patch by hand. I&apos;m not sure whether this was actually the failure that caused the commit queue to fail to process the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336304</commentid>
    <comment_count>21</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-18 19:25:17 -0800</bug_when>
    <thetext>Note: the Mac Release builds broke with this patch; one-liner fix committed in http://trac.webkit.org/changeset/76093 , being upstreamed under http://codereview.appspot.com/4043042 .</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336307</commentid>
    <comment_count>22</comment_count>
    <who name="Ben Vanik">ben.vanik</who>
    <bug_when>2011-01-18 19:36:43 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; Note: the Mac Release builds broke with this patch; one-liner fix committed in http://trac.webkit.org/changeset/76093 , being upstreamed under http://codereview.appspot.com/4043042 .

Interesting - I did a build-webkit (set to release) and didn&apos;t hit this error - so I don&apos;t make the same mistake again, how did you build?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336311</commentid>
    <comment_count>23</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-18 19:56:58 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; (In reply to comment #21)
&gt; &gt; Note: the Mac Release builds broke with this patch; one-liner fix committed in http://trac.webkit.org/changeset/76093 , being upstreamed under http://codereview.appspot.com/4043042 .
&gt; 
&gt; Interesting - I did a build-webkit (set to release) and didn&apos;t hit this error - so I don&apos;t make the same mistake again, how did you build?

This may have been a Leopard-only build failure. I didn&apos;t build Release mode (on Snow Leopard) until after committing the patch. The only way to have caught this in advance therefore would have been to either use the commit queue (which didn&apos;t work) or to have built on Leopard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336313</commentid>
    <comment_count>24</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-18 19:58:05 -0800</bug_when>
    <thetext>It turns out to also have been necessary to remove the steps from ANGLE.xcodeproj which generated the grammar from the glslang.l/y files. The generated sources were already checked in and the version of these tools on Leopard was too old to handle one of the constructs in the grammar file. See http://trac.webkit.org/changeset/76095 .</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79053</attachid>
            <date>2011-01-14 22:34:39 -0800</date>
            <delta_ts>2011-01-18 15:25:22 -0800</delta_ts>
            <desc>ANGLE r533</desc>
            <filename>ANGLE_update_bug47194.patch</filename>
            <type>text/plain</type>
            <size>1031227</size>
            <attacher name="Ben Vanik">ben.vanik</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc1ODcxKQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
NTk4IEBACisyMDExLTAxLTE0ICBCZW4gVmFuaWsgIDxiZW4udmFuaWtAZ21haWwuY29tPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0aW5nIEFO
R0xFIGluIFdlYktpdCB0byByNTMzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NDcxOTQKKworICAgICAgICAqIEFOR0xFLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaDoKKyAgICAg
ICAgKiBzcmMvY29tbW9uL2RlYnVnLmNwcDoKKyAgICAgICAgKGdsOjp0cmFjZSk6CisgICAgICAg
ICogc3JjL2NvbW1vbi9kZWJ1Zy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9Db2RlR2VuR0xT
TC5jcHA6CisgICAgICAgIChDb25zdHJ1Y3RDb21waWxlcik6CisgICAgICAgICogc3JjL2NvbXBp
bGVyL0NvZGVHZW5ITFNMLmNwcDoKKyAgICAgICAgKENvbnN0cnVjdENvbXBpbGVyKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvQ29tbW9uLmg6CisgICAgICAgIChFbmNvZGVTb3VyY2VMb2MpOgor
ICAgICAgICAoRGVjb2RlU291cmNlTG9jKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQ29tcGls
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFRTaEhhbmRsZUJhc2U6OlRTaEhhbmRsZUJhc2UpOgor
ICAgICAgICAoVFNoSGFuZGxlQmFzZTo6flRTaEhhbmRsZUJhc2UpOgorICAgICAgICAoVENvbXBp
bGVyOjpUQ29tcGlsZXIpOgorICAgICAgICAoVENvbXBpbGVyOjp+VENvbXBpbGVyKToKKyAgICAg
ICAgKFRDb21waWxlcjo6SW5pdCk6CisgICAgICAgIChUQ29tcGlsZXI6OmNvbXBpbGUpOgorICAg
ICAgICAoVENvbXBpbGVyOjpJbml0QnVpbHRJblN5bWJvbFRhYmxlKToKKyAgICAgICAgKFRDb21w
aWxlcjo6Y2xlYXJSZXN1bHRzKToKKyAgICAgICAgKFRDb21waWxlcjo6dmFsaWRhdGVMaW1pdGF0
aW9ucyk6CisgICAgICAgIChUQ29tcGlsZXI6OmNvbGxlY3RBdHRyaWJzVW5pZm9ybXMpOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oOiBBZGRlZC4KKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwOgorICAgICAgICAoVEluZm9TaW5rQmFzZTo6bG9j
YXRpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9JbmZvU2luay5oOgorICAgICAgICAoVElu
Zm9TaW5rQmFzZTo6c2l6ZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuY3Bw
OgorICAgICAgICAoQnVpbHRJbkZ1bmN0aW9uc0NvbW1vbik6CisgICAgICAgIChCdWlsdEluRnVu
Y3Rpb25zVmVydGV4KToKKyAgICAgICAgKEJ1aWx0SW5GdW5jdGlvbnNGcmFnbWVudCk6CisgICAg
ICAgIChTdGFuZGFyZFVuaWZvcm1zKToKKyAgICAgICAgKERlZmF1bHRQcmVjaXNpb25WZXJ0ZXgp
OgorICAgICAgICAoRGVmYXVsdFByZWNpc2lvbkZyYWdtZW50KToKKyAgICAgICAgKEJ1aWx0SW5D
b25zdGFudHMpOgorICAgICAgICAoVEJ1aWx0SW5zOjppbml0aWFsaXplKToKKyAgICAgICAgKElk
ZW50aWZ5QnVpbHRJbnMpOgorICAgICAgICAoSW5pdEV4dGVuc2lvbkJlaGF2aW9yKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9J
bnRlcm1UcmF2ZXJzZS5jcHA6CisgICAgICAgIChUSW50ZXJtTG9vcDo6dHJhdmVyc2UpOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9JbnRlcm1lZGlhdGUuY3BwOgorICAgICAgICAoZ2V0T3BlcmF0
b3JTdHJpbmcpOgorICAgICAgICAoVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5TWF0aCk6CisgICAg
ICAgIChUSW50ZXJtZWRpYXRlOjphZGRMb29wKToKKyAgICAgICAgKFRJbnRlcm1lZGlhdGU6OnBv
c3RQcm9jZXNzKToKKyAgICAgICAgKFRJbnRlcm1CaW5hcnk6OnByb21vdGUpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9PdXRwdXRHTFNMLmNwcDoKKyAgICAgICAgKFRPdXRwdXRHTFNMOjp2aXNp
dFVuYXJ5KToKKyAgICAgICAgKFRPdXRwdXRHTFNMOjp2aXNpdExvb3ApOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9PdXRwdXRITFNMLmNwcDoKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpPdXRw
dXRITFNMKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjpoZWFkZXIpOgorICAgICAgICAoc2g6
Ok91dHB1dEhMU0w6OnZpc2l0QmluYXJ5KToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp2aXNp
dFVuYXJ5KToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdEFnZ3JlZ2F0ZSk6CisgICAg
ICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNM
OjpoYW5kbGVFeGNlc3NpdmVMb29wKToKKyAgICAgICAgKHNoOjpPdXRwdXRITFNMOjphcmd1bWVu
dFN0cmluZyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaDoKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwOgorICAgICAgICAoUmVwb3J0SW5mbyk6Cisg
ICAgICAgIChEZWZpbmVFeHRlbnNpb25NYWNyb3MpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6
ZXJyb3IpOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6d2FybmluZyk6CisgICAgICAgIChUUGFy
c2VDb250ZXh0OjpyZXNlcnZlZEVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6
Y29uc3RydWN0b3JFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFycmF5UXVh
bGlmaWVyRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjpleHRlbnNpb25FcnJv
ckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OmFyZUFsbENoaWxkQ29uc3QpOgorICAg
ICAgICAoUGFQYXJzZVN0cmluZ3MpOgorICAgICAgICAqIHNyYy9jb21waWxlci9QYXJzZUhlbHBl
ci5oOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6VFBhcnNlQ29udGV4dCk6CisgICAgICAgICog
c3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHA6CisgICAgICAgIChJbml0aWFsaXplR2xvYmFsUG9v
bHMpOgorICAgICAgICAoRnJlZUdsb2JhbFBvb2xzKToKKyAgICAgICAgKFNldEdsb2JhbFBvb2xB
bGxvY2F0b3IpOgorICAgICAgICAoVFBvb2xBbGxvY2F0b3I6OlRQb29sQWxsb2NhdG9yKToKKyAg
ICAgICAgKFRQb29sQWxsb2NhdG9yOjp+VFBvb2xBbGxvY2F0b3IpOgorICAgICAgICAoVEFsbG9j
YXRpb246OmNoZWNrQWxsb2NMaXN0KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUG9vbEFsbG9j
Lmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHA6IEFkZGVkLgorICAg
ICAgICAoc2g6OlNlYXJjaFN5bWJvbDo6U2VhcmNoU3ltYm9sKToKKyAgICAgICAgKHNoOjpTZWFy
Y2hTeW1ib2w6OnRyYXZlcnNlKToKKyAgICAgICAgKHNoOjpTZWFyY2hTeW1ib2w6OnZpc2l0U3lt
Ym9sKToKKyAgICAgICAgKHNoOjpTZWFyY2hTeW1ib2w6OmZvdW5kTWF0Y2gpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuaDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBp
bGVyL1NoSGFuZGxlLmg6CisgICAgICAgIChUQ29tcGlsZXI6OmdldEFzQ29tcGlsZXIpOgorICAg
ICAgICAoVENvbXBpbGVyOjpnZXRJbmZvU2luayk6CisgICAgICAgIChUQ29tcGlsZXI6OmdldEF0
dHJpYnMpOgorICAgICAgICAoVENvbXBpbGVyOjpnZXRVbmlmb3Jtcyk6CisgICAgICAgIChUQ29t
cGlsZXI6OmdldFNoYWRlclR5cGUpOgorICAgICAgICAoVENvbXBpbGVyOjpnZXRTaGFkZXJTcGVj
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHA6CisgICAgICAgIChnZXRW
YXJpYWJsZU1heExlbmd0aCk6CisgICAgICAgIChnZXRWYXJpYWJsZUluZm8pOgorICAgICAgICAo
U2hJbml0QnVpbHRJblJlc291cmNlcyk6CisgICAgICAgIChTaENvbnN0cnVjdENvbXBpbGVyKToK
KyAgICAgICAgKFNoQ29tcGlsZSk6CisgICAgICAgIChTaEdldEluZm8pOgorICAgICAgICAoU2hH
ZXRJbmZvTG9nKToKKyAgICAgICAgKFNoR2V0T2JqZWN0Q29kZSk6CisgICAgICAgIChTaEdldEFj
dGl2ZUF0dHJpYik6CisgICAgICAgIChTaEdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHA6CisgICAgICAgIChUU3ltYm9sVGFibGVMZXZlbDo6
cmVsYXRlVG9FeHRlbnNpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9TeW1ib2xUYWJsZS5o
OgorICAgICAgICAoVFZhcmlhYmxlOjpzaGFyZUNvbnN0UG9pbnRlcik6CisgICAgICAgIChURnVu
Y3Rpb246OnJlbGF0ZVRvRXh0ZW5zaW9uKToKKyAgICAgICAgKFRGdW5jdGlvbjo6Z2V0RXh0ZW5z
aW9uKToKKyAgICAgICAgKFRGdW5jdGlvbjo6Z2V0UGFyYW1Db3VudCk6CisgICAgICAgIChURnVu
Y3Rpb246OmdldFBhcmFtKToKKyAgICAgICAgKFRTeW1ib2xUYWJsZTo6Z2V0R2xvYmFsTGV2ZWwp
OgorICAgICAgICAoVFN5bWJvbFRhYmxlOjpyZWxhdGVUb09wZXJhdG9yKToKKyAgICAgICAgKFRT
eW1ib2xUYWJsZTo6cmVsYXRlVG9FeHRlbnNpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9U
cmFuc2xhdG9yR0xTTC5jcHA6CisgICAgICAgICh3cml0ZVZlcnNpb24pOgorICAgICAgICAoVHJh
bnNsYXRvckdMU0w6OlRyYW5zbGF0b3JHTFNMKToKKyAgICAgICAgKFRyYW5zbGF0b3JHTFNMOjp0
cmFuc2xhdGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5oOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHA6CisgICAgICAgIChUcmFuc2xh
dG9ySExTTDo6VHJhbnNsYXRvckhMU0wpOgorICAgICAgICAoVHJhbnNsYXRvckhMU0w6OnRyYW5z
bGF0ZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmg6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL1R5cGVzLmg6CisgICAgICAgIChUVHlwZTo6VFR5cGUpOgorICAgICAg
ICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwOgorICAgICAgICAoc2g6OlVuZm9sZFNl
bGVjdDo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9VbmZvbGRTZWxl
Y3QuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHA6IEFk
ZGVkLgorICAgICAgICAoVmFsaWRhdGVMaW1pdGF0aW9uczo6VmFsaWRhdGVMaW1pdGF0aW9ucyk6
CisgICAgICAgIChWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdFN5bWJvbCk6CisgICAgICAgIChW
YWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdENvbnN0YW50VW5pb24pOgorICAgICAgICAoVmFsaWRh
dGVMaW1pdGF0aW9uczo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoVmFsaWRhdGVMaW1pdGF0aW9u
czo6dmlzaXRVbmFyeSk6CisgICAgICAgIChWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdFNlbGVj
dGlvbik6CisgICAgICAgIChWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZSk6Cisg
ICAgICAgIChWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdExvb3ApOgorICAgICAgICAoVmFsaWRh
dGVMaW1pdGF0aW9uczo6dmlzaXRCcmFuY2gpOgorICAgICAgICAoVmFsaWRhdGVMaW1pdGF0aW9u
czo6ZXJyb3IpOgorICAgICAgICAoVmFsaWRhdGVMaW1pdGF0aW9uczo6d2l0aGluTG9vcEJvZHkp
OgorICAgICAgICAoVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNMb29wSW5kZXgpOgorICAgICAgICAo
VmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVMb29wVHlwZSk6CisgICAgICAgIChWYWxpZGF0
ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BIZWFkZXIpOgorICAgICAgICAoVmFsaWRhdGVM
aW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5pdCk6CisgICAgICAgIChWYWxpZGF0ZUxpbWl0
YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BDb25kKToKKyAgICAgICAgKFZhbGlkYXRlTGltaXRhdGlv
bnM6OnZhbGlkYXRlRm9yTG9vcEV4cHIpOgorICAgICAgICAoVmFsaWRhdGVMaW1pdGF0aW9uczo6
dmFsaWRhdGVGdW5jdGlvbkNhbGwpOgorICAgICAgICAoVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFs
aWRhdGVPcGVyYXRpb24pOgorICAgICAgICAoVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEV4
cHIpOgorICAgICAgICAoVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEluZGV4RXhwcik6Cisg
ICAgICAgIChWYWxpZGF0ZUxpbWl0YXRpb25zOjp2YWxpZGF0ZUluZGV4aW5nKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oOiBBZGRlZC4KKyAgICAgICAgKFZh
bGlkYXRlTGltaXRhdGlvbnM6Om51bUVycm9ycyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1Zh
cmlhYmxlSW5mby5jcHA6IEFkZGVkLgorICAgICAgICAoYXJyYXlCcmFja2V0cyk6CisgICAgICAg
IChnZXRWYXJpYWJsZURhdGFUeXBlKToKKyAgICAgICAgKGdldFZhcmlhYmxlSW5mbyk6CisgICAg
ICAgIChnZXRCdWlsdEluVmFyaWFibGVJbmZvKToKKyAgICAgICAgKGdldFVzZXJEZWZpbmVkVmFy
aWFibGVJbmZvKToKKyAgICAgICAgKENvbGxlY3RBdHRyaWJzVW5pZm9ybXM6OkNvbGxlY3RBdHRy
aWJzVW5pZm9ybXMpOgorICAgICAgICAoQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6dmlzaXRTeW1i
b2wpOgorICAgICAgICAoQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6dmlzaXRDb25zdGFudFVuaW9u
KToKKyAgICAgICAgKENvbGxlY3RBdHRyaWJzVW5pZm9ybXM6OnZpc2l0QmluYXJ5KToKKyAgICAg
ICAgKENvbGxlY3RBdHRyaWJzVW5pZm9ybXM6OnZpc2l0VW5hcnkpOgorICAgICAgICAoQ29sbGVj
dEF0dHJpYnNVbmlmb3Jtczo6dmlzaXRTZWxlY3Rpb24pOgorICAgICAgICAoQ29sbGVjdEF0dHJp
YnNVbmlmb3Jtczo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoQ29sbGVjdEF0dHJpYnNVbmlm
b3Jtczo6dmlzaXRMb29wKToKKyAgICAgICAgKENvbGxlY3RBdHRyaWJzVW5pZm9ybXM6OnZpc2l0
QnJhbmNoKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmg6IEFkZGVkLgor
ICAgICAgICAqIHNyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHA6IEFkZGVkLgorICAgICAgICAo
VFZlcnNpb25HTFNMOjpUVmVyc2lvbkdMU0wpOgorICAgICAgICAoVFZlcnNpb25HTFNMOjp2aXNp
dFN5bWJvbCk6CisgICAgICAgIChUVmVyc2lvbkdMU0w6OnZpc2l0Q29uc3RhbnRVbmlvbik6Cisg
ICAgICAgIChUVmVyc2lvbkdMU0w6OnZpc2l0QmluYXJ5KToKKyAgICAgICAgKFRWZXJzaW9uR0xT
TDo6dmlzaXRVbmFyeSk6CisgICAgICAgIChUVmVyc2lvbkdMU0w6OnZpc2l0U2VsZWN0aW9uKToK
KyAgICAgICAgKFRWZXJzaW9uR0xTTDo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAoVFZlcnNp
b25HTFNMOjp2aXNpdExvb3ApOgorICAgICAgICAoVFZlcnNpb25HTFNMOjp2aXNpdEJyYW5jaCk6
CisgICAgICAgIChUVmVyc2lvbkdMU0w6OnVwZGF0ZVZlcnNpb24pOgorICAgICAgICAqIHNyYy9j
b21waWxlci9WZXJzaW9uR0xTTC5oOiBBZGRlZC4KKyAgICAgICAgKFRWZXJzaW9uR0xTTDo6Z2V0
VmVyc2lvbik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dlbmVyYXRlX2dsc2xhbmdfbGV4ZXIu
c2g6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9nZW5lcmF0ZV9nbHNsYW5nX3BhcnNl
ci5zaDogQWRkZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmcuaDogQWRkZWQuCisg
ICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmcubDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIv
Z2xzbGFuZy55OgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHA6IEFkZGVk
LgorICAgICAgICAoeXlfZ2V0X25leHRfYnVmZmVyKToKKyAgICAgICAgKHl5X2dldF9wcmV2aW91
c19zdGF0ZSk6CisgICAgICAgICh5eV90cnlfTlVMX3RyYW5zKToKKyAgICAgICAgKGlucHV0KToK
KyAgICAgICAgKHl5cmVzdGFydCk6CisgICAgICAgICh5eV9zd2l0Y2hfdG9fYnVmZmVyKToKKyAg
ICAgICAgKHl5X2xvYWRfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHl5X2NyZWF0ZV9idWZmZXIp
OgorICAgICAgICAoeXlfZGVsZXRlX2J1ZmZlcik6CisgICAgICAgICh5eV9pbml0X2J1ZmZlcik6
CisgICAgICAgICh5eV9mbHVzaF9idWZmZXIpOgorICAgICAgICAoeXlwdXNoX2J1ZmZlcl9zdGF0
ZSk6CisgICAgICAgICh5eXBvcF9idWZmZXJfc3RhdGUpOgorICAgICAgICAoeXllbnN1cmVfYnVm
ZmVyX3N0YWNrKToKKyAgICAgICAgKHl5X3NjYW5fYnVmZmVyKToKKyAgICAgICAgKHl5X3NjYW5f
c3RyaW5nKToKKyAgICAgICAgKHl5X3NjYW5fYnl0ZXMpOgorICAgICAgICAoeXlfcHVzaF9zdGF0
ZSk6CisgICAgICAgICh5eV9wb3Bfc3RhdGUpOgorICAgICAgICAoeXlfdG9wX3N0YXRlKToKKyAg
ICAgICAgKHl5X2ZhdGFsX2Vycm9yKToKKyAgICAgICAgKHl5Z2V0X2V4dHJhKToKKyAgICAgICAg
KHl5Z2V0X2xpbmVubyk6CisgICAgICAgICh5eWdldF9jb2x1bW4pOgorICAgICAgICAoeXlnZXRf
aW4pOgorICAgICAgICAoeXlnZXRfb3V0KToKKyAgICAgICAgKHl5Z2V0X2xlbmcpOgorICAgICAg
ICAoeXlnZXRfdGV4dCk6CisgICAgICAgICh5eXNldF9leHRyYSk6CisgICAgICAgICh5eXNldF9s
aW5lbm8pOgorICAgICAgICAoeXlzZXRfY29sdW1uKToKKyAgICAgICAgKHl5c2V0X2luKToKKyAg
ICAgICAgKHl5c2V0X291dCk6CisgICAgICAgICh5eWdldF9kZWJ1Zyk6CisgICAgICAgICh5eXNl
dF9kZWJ1Zyk6CisgICAgICAgICh5eWdldF9sdmFsKToKKyAgICAgICAgKHl5c2V0X2x2YWwpOgor
ICAgICAgICAoeXlsZXhfaW5pdCk6CisgICAgICAgICh5eWxleF9pbml0X2V4dHJhKToKKyAgICAg
ICAgKHl5X2luaXRfZ2xvYmFscyk6CisgICAgICAgICh5eWxleF9kZXN0cm95KToKKyAgICAgICAg
KHl5X2ZsZXhfc3RybmNweSk6CisgICAgICAgICh5eV9mbGV4X3N0cmxlbik6CisgICAgICAgICh5
eWFsbG9jKToKKyAgICAgICAgKHl5cmVhbGxvYyk6CisgICAgICAgICh5eWZyZWUpOgorICAgICAg
ICAoc3RyaW5nX2lucHV0KToKKyAgICAgICAgKGNoZWNrX3R5cGUpOgorICAgICAgICAocmVzZXJ2
ZWRfd29yZCk6CisgICAgICAgICh5eWVycm9yKToKKyAgICAgICAgKGdsc2xhbmdfaW5pdGlhbGl6
ZSk6CisgICAgICAgIChnbHNsYW5nX2ZpbmFsaXplKToKKyAgICAgICAgKGdsc2xhbmdfc2Nhbik6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcDogQWRkZWQuCisgICAgICAg
ICh5eXRuYW1lcnIpOgorICAgICAgICAoeXlzeW50YXhfZXJyb3IpOgorICAgICAgICAoZ2xzbGFu
Z19wYXJzZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmg6IEFkZGVkLgor
ICAgICAgICAqIHNyYy9jb21waWxlci9pbnRlcm1PdXQuY3BwOgorICAgICAgICAoVE91dHB1dFRy
YXZlcnNlcjo6VE91dHB1dFRyYXZlcnNlcik6CisgICAgICAgIChPdXRwdXRUcmVlVGV4dCk6Cisg
ICAgICAgIChUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFN5bWJvbCk6CisgICAgICAgIChUT3V0cHV0
VHJhdmVyc2VyOjp2aXNpdEJpbmFyeSk6CisgICAgICAgIChUT3V0cHV0VHJhdmVyc2VyOjp2aXNp
dFVuYXJ5KToKKyAgICAgICAgKFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0QWdncmVnYXRlKToKKyAg
ICAgICAgKFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKFRPdXRw
dXRUcmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvbik6CisgICAgICAgIChUT3V0cHV0VHJhdmVy
c2VyOjp2aXNpdExvb3ApOgorICAgICAgICAoVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRCcmFuY2gp
OgorICAgICAgICAoVEludGVybWVkaWF0ZTo6b3V0cHV0VHJlZSk6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL2ludGVybWVkaWF0ZS5oOgorICAgICAgICAoVEludGVybUxvb3A6OlRJbnRlcm1Mb29w
KToKKyAgICAgICAgKFRJbnRlcm1Mb29wOjpnZXRUeXBlKToKKyAgICAgICAgKFRJbnRlcm1Mb29w
OjpnZXRJbml0KToKKyAgICAgICAgKFRJbnRlcm1Mb29wOjpnZXRDb25kaXRpb24pOgorICAgICAg
ICAoVEludGVybUxvb3A6OmdldEV4cHJlc3Npb24pOgorICAgICAgICAoVEludGVybUxvb3A6Omdl
dEJvZHkpOgorICAgICAgICAqIHNyYy9jb21waWxlci9sb2NhbGludGVybWVkaWF0ZS5oOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9vc2luY2x1ZGUuaDoKKyAgICAgICAgKE9TX0dldFRMU1ZhbHVl
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvb3Nzb3VyY2VfbnNwci5jcHA6IEFkZGVkLgorICAg
ICAgICAoT1NfQWxsb2NUTFNJbmRleCk6CisgICAgICAgIChPU19TZXRUTFNWYWx1ZSk6CisgICAg
ICAgIChPU19GcmVlVExTSW5kZXgpOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNz
b3IvY29tcGlsZS5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmM6
CisgICAgICAgIChDUFBkZWZpbmUpOgorICAgICAgICAoQ1BQZWxzZSk6CisgICAgICAgIChDUFBp
Zik6CisgICAgICAgIChDUFBpZmRlZik6CisgICAgICAgIChDUFBlcnJvcik6CisgICAgICAgIChD
UFBleHRlbnNpb24pOgorICAgICAgICAocmVhZENQUGxpbmUpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9w
cmVwcm9jZXNzb3Ivc2Nhbm5lci5jOgorICAgICAgICAoc3RyX2dldGNoKToKKyAgICAgICAgKHN0
cl91bmdldGNoKToKKyAgICAgICAgKFNjYW5Gcm9tU3RyaW5nKToKKyAgICAgICAgKGxGbG9hdENv
bnN0KToKKyAgICAgICAgKGJ5dGVfc2Nhbik6CisgICAgICAgICh5eWxleF9DUFApOgorICAgICAg
ICAoY2hlY2tfRU9GKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5u
ZXIuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jOgorICAg
ICAgICAoUmVjb3JkVG9rZW4pOgorICAgICAgICAoUmVhZFRva2VuKToKKyAgICAgICAgKiBzcmMv
Y29tcGlsZXIvdG9vbHM6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2NvbXBpbGVyL3VuaXN0ZC5o
OiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci91dGlsLmNwcDogQWRkZWQuCisgICAg
ICAgIChhdG9mX2RvdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3V0aWwuaDogQWRkZWQuCisg
ICAgICAgICogc3JjL2xpYkVHTC9Db25maWcuY3BwOgorICAgICAgICAoZWdsOjpDb25maWc6OnNl
dCk6CisgICAgICAgICogc3JjL2xpYkVHTC9EaXNwbGF5LmNwcDoKKyAgICAgICAgKGVnbDo6RGlz
cGxheTo6RGlzcGxheSk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmluaXRpYWxpemUpOgorICAg
ICAgICAoZWdsOjpEaXNwbGF5Ojp0ZXJtaW5hdGUpOgorICAgICAgICAoZWdsOjpEaXNwbGF5Ojpj
cmVhdGVEZXZpY2UpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpyZXNldERldmljZSk6CisgICAg
ICAgIChlZ2w6OkRpc3BsYXk6OmNyZWF0ZUNvbnRleHQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5
OjpkZXN0cm95Q29udGV4dCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldE1pblN3YXBJbnRl
cnZhbCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldE1heFN3YXBJbnRlcnZhbCk6CisgICAg
ICAgIChlZ2w6OkRpc3BsYXk6OmdldERldmljZSk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6Omdl
dEZsb2F0VGV4dHVyZVN1cHBvcnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRIYWxmRmxv
YXRUZXh0dXJlU3VwcG9ydCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldEx1bWluYW5jZVRl
eHR1cmVTdXBwb3J0KToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Z2V0THVtaW5hbmNlQWxwaGFU
ZXh0dXJlU3VwcG9ydCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldEJ1ZmZlclBvb2wpOgor
ICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCk6CisgICAgICAgIChl
Z2w6OkRpc3BsYXk6OmdldERlZmF1bHRQcmVzZW50UGFyYW1ldGVycyk6CisgICAgICAgICogc3Jj
L2xpYkVHTC9EaXNwbGF5Lmg6CisgICAgICAgICogc3JjL2xpYkVHTC9TdXJmYWNlLmNwcDoKKyAg
ICAgICAgKGVnbDo6U3VyZmFjZTo6U3VyZmFjZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6On5T
dXJmYWNlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6cmVsZWFzZSk6CisgICAgICAgIChlZ2w6
OlN1cmZhY2U6OnJlc2V0U3dhcENoYWluKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6d3JpdGVS
ZWNvcmRhYmxlRmxpcFN0YXRlKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6cmVzdG9yZVN0YXRl
KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZVdpbmRvd1Byb2MpOgorICAgICAgICAoZWdsOjpTdXJm
YWNlOjpzdWJjbGFzc1dpbmRvdyk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnVuc3ViY2xhc3NX
aW5kb3cpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFp
bik6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OmNvbnZlcnRJbnRlcnZhbCk6CisgICAgICAgIChl
Z2w6OlN1cmZhY2U6OnN3YXApOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpnZXRSZW5kZXJUYXJn
ZXQpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpzZXRTd2FwSW50ZXJ2YWwpOgorICAgICAgICAq
IHNyYy9saWJFR0wvU3VyZmFjZS5oOgorICAgICAgICAqIHNyYy9saWJFR0wvbGliRUdMLmNwcDoK
KyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0JsaXQuY3BwOgorICAgICAgICAoZ2w6OkJsaXQ6OmNv
cHlTdXJmYWNlVG9UZXh0dXJlKToKKyAgICAgICAgKGdsOjpCbGl0OjpzZXRDb21tb25CbGl0U3Rh
dGUpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvQnVmZmVyLmNwcDoKKyAgICAgICAgKGdsOjpC
dWZmZXI6OkJ1ZmZlcik6CisgICAgICAgIChnbDo6QnVmZmVyOjp+QnVmZmVyKToKKyAgICAgICAg
KGdsOjpCdWZmZXI6OmJ1ZmZlckRhdGEpOgorICAgICAgICAoZ2w6OkJ1ZmZlcjo6YnVmZmVyU3Vi
RGF0YSk6CisgICAgICAgIChnbDo6QnVmZmVyOjpnZXRWZXJ0ZXhCdWZmZXIpOgorICAgICAgICAo
Z2w6OkJ1ZmZlcjo6Z2V0SW5kZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OkJ1ZmZlcjo6aW52YWxp
ZGF0ZVN0YXRpY0RhdGEpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvQnVmZmVyLmg6CisgICAg
ICAgICogc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcDoKKyAgICAgICAgKGdsOjpDb250ZXh0OjpD
b250ZXh0KToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojp+Q29udGV4dCk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6bWFrZUN1cnJlbnQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Om1hcmtBbGxTdGF0
ZURpcnR5KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRGcmFnbWVudFNoYWRlckRlcml2YXRp
dmVIaW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYnV0ZXMpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmNyZWF0ZUZlbmNlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkZWxldGVGZW5jZSk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6YmluZFRleHR1cmUyRCk6CisgICAgICAgIChnbDo6Q29udGV4
dDo6YmluZFRleHR1cmVDdWJlTWFwKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRGZW5jZSk6
CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0VGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0U2FtcGxl
clRleHR1cmUpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldEJvb2xlYW52KToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpnZXRJbnRlZ2Vydik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0UXVl
cnlQYXJhbWV0ZXJJbmZvKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseVJlbmRlclRhcmdl
dCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlTdGF0ZSk6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6bG9va3VwQXR0cmlidXRlTWFwcGluZyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBw
bHlWZXJ0ZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmFwcGx5SW5kZXhCdWZmZXIp
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnJlYWRQaXhlbHMpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmNsZWFyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpkcmF3QXJyYXlzKToKKyAgICAgICAg
KGdsOjpDb250ZXh0OjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmZpbmlz
aCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0Nsb3NpbmdMaW5lKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpnZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmdldE1heGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpzdXBwb3J0c0V2ZW50UXVlcmllcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9y
dHNGbG9hdFRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0TGlu
ZWFyRmlsdGVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0Zsb2F0UmVuZGVyYWJs
ZVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0hhbGZGbG9hdFRleHR1
cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0hhbGZGbG9hdExpbmVhckZpbHRl
cik6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNIYWxmRmxvYXRSZW5kZXJhYmxlVGV4
dHVyZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1SZW5kZXJidWZmZXJEaW1l
bnNpb24pOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9u
KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24p
OgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldE1heGltdW1UZXh0dXJlTGV2ZWwpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OnN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyk6CisgICAgICAgIChnbDo6
Q29udGV4dDo6c3VwcG9ydHMzMmJpdEluZGljZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Omdl
dEluY29tcGxldGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpzZXRWZXJ0ZXhBdHRy
aWIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmluaXRFeHRlbnNpb25TdHJpbmcpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OmJsaXRGcmFtZWJ1ZmZlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2
Mi9Db250ZXh0Lmg6CisgICAgICAgIChnbDo6VmVydGV4QXR0cmlidXRlOjpWZXJ0ZXhBdHRyaWJ1
dGUpOgorICAgICAgICAoZ2w6OlZlcnRleEF0dHJpYnV0ZTo6dHlwZVNpemUpOgorICAgICAgICAo
Z2w6OlZlcnRleEF0dHJpYnV0ZTo6c3RyaWRlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0Zl
bmNlLmNwcDogQWRkZWQuCisgICAgICAgIChnbDo6RmVuY2U6OkZlbmNlKToKKyAgICAgICAgKGds
OjpGZW5jZTo6fkZlbmNlKToKKyAgICAgICAgKGdsOjpGZW5jZTo6aXNGZW5jZSk6CisgICAgICAg
IChnbDo6RmVuY2U6OnNldEZlbmNlKToKKyAgICAgICAgKGdsOjpGZW5jZTo6dGVzdEZlbmNlKToK
KyAgICAgICAgKGdsOjpGZW5jZTo6ZmluaXNoRmVuY2UpOgorICAgICAgICAoZ2w6OkZlbmNlOjpn
ZXRGZW5jZWl2KToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZlbmNlLmg6IEFkZGVkLgorICAg
ICAgICAqIHNyYy9saWJHTEVTdjIvRnJhbWVidWZmZXIuY3BwOgorICAgICAgICAoZ2w6OkZyYW1l
YnVmZmVyOjpjb21wbGV0ZW5lc3MpOgorICAgICAgICAoZ2w6OkRlZmF1bHRGcmFtZWJ1ZmZlcjo6
RGVmYXVsdEZyYW1lYnVmZmVyKToKKyAgICAgICAgKGdsOjpEZWZhdWx0RnJhbWVidWZmZXI6OmNv
bXBsZXRlbmVzcyk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmNwcDoKKyAgICAg
ICAgKGdsOjpQcm9ncmFtOjpQcm9ncmFtKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRTYW1w
bGVyTWFwcGluZyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKToK
KyAgICAgICAgKGdsOjpQcm9ncmFtOjpzZXRVbmlmb3JtMWl2KToKKyAgICAgICAgKGdsOjpQcm9n
cmFtOjphcHBseVVuaWZvcm1zKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpwYWNrVmFyeWluZ3Mp
OgorICAgICAgICAoZ2w6OlByb2dyYW06OmxpbmtWYXJ5aW5ncyk6CisgICAgICAgIChnbDo6UHJv
Z3JhbTo6bGluayk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6ZGVmaW5lVW5pZm9ybSk6CisgICAg
ICAgIChnbDo6UHJvZ3JhbTo6Y3JlYXRlVW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6
YXBwbHlVbmlmb3JtMWl2KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpyZXNldEluZm9Mb2cpOgor
ICAgICAgICAoZ2w6OlByb2dyYW06OnVubGluayk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0
QWN0aXZlQXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3Jt
KToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpnZXREeERlcHRoUmFuZ2VMb2NhdGlvbik6CisgICAg
ICAgICogc3JjL2xpYkdMRVN2Mi9Qcm9ncmFtLmg6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9S
ZWZDb3VudE9iamVjdC5jcHA6CisgICAgICAgIChnbDo6UmVmQ291bnRPYmplY3Q6On5SZWZDb3Vu
dE9iamVjdCk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuY3BwOgorICAg
ICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OlJlbmRlcmJ1ZmZlclN0b3JhZ2UpOgorICAg
ICAgICAoZ2w6OlJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmlzRmxvYXRpbmdQb2ludCk6CisgICAgICAg
IChnbDo6Q29sb3JidWZmZXI6OkNvbG9yYnVmZmVyKToKKyAgICAgICAgKGdsOjpEZXB0aFN0ZW5j
aWxidWZmZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9S
ZW5kZXJidWZmZXIuaDoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL1NoYWRlci5jcHA6CisgICAg
ICAgIChnbDo6U2hhZGVyOjpTaGFkZXIpOgorICAgICAgICAoZ2w6OlNoYWRlcjo6cGFyc2VWYXJ5
aW5ncyk6CisgICAgICAgIChnbDo6U2hhZGVyOjpjb21waWxlVG9ITFNMKToKKyAgICAgICAgKGds
OjpWZXJ0ZXhTaGFkZXI6OnBhcnNlQXR0cmlidXRlcyk6CisgICAgICAgICogc3JjL2xpYkdMRVN2
Mi9UZXh0dXJlLmNwcDoKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpUZXh0dXJlKToKKyAgICAgICAg
KGdsOjpUZXh0dXJlOjppc0Zsb2F0aW5nUG9pbnQpOgorICAgICAgICAoZ2w6OlRleHR1cmU6Omlz
UmVuZGVyYWJsZUZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2VsZWN0Rm9ybWF0KToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkSW1hZ2VEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0
dXJlOjpsb2FkQWxwaGFGbG9hdEltYWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9h
ZEFscGhhSGFsZkZsb2F0SW1hZ2VEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkTHVt
aW5hbmNlSW1hZ2VEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkTHVtaW5hbmNlRmxv
YXRJbWFnZURhdGEpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmxvYWRMdW1pbmFuY2VIYWxmRmxv
YXRJbWFnZURhdGEpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmxvYWRMdW1pbmFuY2VBbHBoYUlt
YWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZEx1bWluYW5jZUFscGhhRmxvYXRJ
bWFnZURhdGEpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZG
bG9hdEltYWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZFJHQkZsb2F0SW1hZ2VE
YXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkUkdCSGFsZkZsb2F0SW1hZ2VEYXRhKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkUkdCQUZsb2F0SW1hZ2VEYXRhKToKKyAgICAgICAg
KGdsOjpUZXh0dXJlOjpsb2FkUkdCQUhhbGZGbG9hdEltYWdlRGF0YSk6CisgICAgICAgIChnbDo6
VGV4dHVyZTo6Y3JlYXRlU3VyZmFjZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6c2V0SW1hZ2Up
OgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZSk6CisgICAgICAgIChn
bDo6VGV4dHVyZTo6c3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnN1YkltYWdlQ29t
cHJlc3NlZCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6Y29weU5vblJlbmRlcmFibGUpOgorICAg
ICAgICAoZ2w6OlRleHR1cmU6OmdldEQzREZvcm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
aXNSZW5kZXJhYmxlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OlRleHR1cmUyRCk6CisgICAg
ICAgIChnbDo6VGV4dHVyZTJEOjp+VGV4dHVyZTJEKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6
OnJlZGVmaW5lVGV4dHVyZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpzZXRJbWFnZSk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZTJEOjpzZXRDb21wcmVzc2VkSW1hZ2UpOgorICAgICAgICAoZ2w6
OlRleHR1cmUyRDo6Y29weUltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmNvcHlTdWJJ
bWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjppc0NvbXBsZXRlKToKKyAgICAgICAgKGds
OjpUZXh0dXJlMkQ6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Y29u
dmVydFRvUmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlMkQ6OmdlbmVyYXRlTWlw
bWFwcyk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZXRDb2xvcmJ1ZmZlcik6CisgICAgICAg
IChnbDo6VGV4dHVyZTJEOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVD
dWJlTWFwOjpUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6On5U
ZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlKToK
KyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2VDb21wcmVzc2VkKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6aXNDb21wbGV0ZSk6CisgICAgICAgIChnbDo6VGV4dHVy
ZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpj
b252ZXJ0VG9SZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpyZWRl
ZmluZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5SW1hZ2UpOgor
ICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UpOgorICAgICAgICAoZ2w6
OlRleHR1cmVDdWJlTWFwOjpnZW5lcmF0ZU1pcG1hcHMpOgorICAgICAgICAoZ2w6OlRleHR1cmVD
dWJlTWFwOjpnZXRDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6Omdl
dFJlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVy
UHJveHk6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpU
ZXh0dXJlQ29sb3JidWZmZXJQcm94eTo6aXNGbG9hdGluZ1BvaW50KToKKyAgICAgICAgKiBzcmMv
bGliR0xFU3YyL1RleHR1cmUuaDoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2dlb21ldHJ5L0lu
ZGV4RGF0YU1hbmFnZXIuY3BwOgorICAgICAgICAoZ2w6OkluZGV4RGF0YU1hbmFnZXI6OkluZGV4
RGF0YU1hbmFnZXIpOgorICAgICAgICAoZ2w6OkluZGV4RGF0YU1hbmFnZXI6On5JbmRleERhdGFN
YW5hZ2VyKToKKyAgICAgICAgKGdsOjpjb252ZXJ0SW5kaWNlcyk6CisgICAgICAgIChnbDo6Y29t
cHV0ZVJhbmdlKToKKyAgICAgICAgKGdsOjpJbmRleERhdGFNYW5hZ2VyOjpwcmVwYXJlSW5kZXhE
YXRhKToKKyAgICAgICAgKGdsOjpJbmRleERhdGFNYW5hZ2VyOjppbmRleFNpemUpOgorICAgICAg
ICAoZ2w6OkluZGV4RGF0YU1hbmFnZXI6OnR5cGVTaXplKToKKyAgICAgICAgKGdsOjpJbmRleEJ1
ZmZlcjo6SW5kZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OkluZGV4QnVmZmVyOjp+SW5kZXhCdWZm
ZXIpOgorICAgICAgICAoZ2w6OkluZGV4QnVmZmVyOjpnZXRCdWZmZXIpOgorICAgICAgICAoZ2w6
OkluZGV4QnVmZmVyOjp1bm1hcCk6CisgICAgICAgIChnbDo6U3RyZWFtaW5nSW5kZXhCdWZmZXI6
OlN0cmVhbWluZ0luZGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpTdHJlYW1pbmdJbmRleEJ1ZmZl
cjo6flN0cmVhbWluZ0luZGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpTdHJlYW1pbmdJbmRleEJ1
ZmZlcjo6bWFwKToKKyAgICAgICAgKGdsOjpTdHJlYW1pbmdJbmRleEJ1ZmZlcjo6cmVzZXJ2ZVNw
YWNlKToKKyAgICAgICAgKGdsOjpTdGF0aWNJbmRleEJ1ZmZlcjo6U3RhdGljSW5kZXhCdWZmZXIp
OgorICAgICAgICAoZ2w6OlN0YXRpY0luZGV4QnVmZmVyOjp+U3RhdGljSW5kZXhCdWZmZXIpOgor
ICAgICAgICAoZ2w6OlN0YXRpY0luZGV4QnVmZmVyOjptYXApOgorICAgICAgICAoZ2w6OlN0YXRp
Y0luZGV4QnVmZmVyOjpyZXNlcnZlU3BhY2UpOgorICAgICAgICAoZ2w6OlN0YXRpY0luZGV4QnVm
ZmVyOjpsb29rdXBUeXBlKToKKyAgICAgICAgKGdsOjpTdGF0aWNJbmRleEJ1ZmZlcjo6bG9va3Vw
UmFuZ2UpOgorICAgICAgICAoZ2w6OlN0YXRpY0luZGV4QnVmZmVyOjphZGRSYW5nZSk6CisgICAg
ICAgICogc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmg6CisgICAgICAg
IChnbDo6SW5kZXhCdWZmZXI6OnNpemUpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvZ2VvbWV0
cnkvVmVydGV4RGF0YU1hbmFnZXIuY3BwOgorICAgICAgICAoZ2w6OlZlcnRleERhdGFNYW5hZ2Vy
OjpWZXJ0ZXhEYXRhTWFuYWdlcik6CisgICAgICAgIChnbDo6VmVydGV4RGF0YU1hbmFnZXI6On5W
ZXJ0ZXhEYXRhTWFuYWdlcik6CisgICAgICAgIChnbDo6VmVydGV4RGF0YU1hbmFnZXI6OndyaXRl
QXR0cmlidXRlRGF0YSk6CisgICAgICAgIChnbDo6VmVydGV4RGF0YU1hbmFnZXI6OnByZXBhcmVW
ZXJ0ZXhEYXRhKToKKyAgICAgICAgKGdsOjpWZXJ0ZXhEYXRhTWFuYWdlcjo6c3BhY2VSZXF1aXJl
ZCk6CisgICAgICAgIChnbDo6VmVydGV4RGF0YU1hbmFnZXI6OmNoZWNrVmVydGV4Q2Fwcyk6Cisg
ICAgICAgIChnbDo6VmVydGV4RGF0YU1hbmFnZXI6OnR5cGVJbmRleCk6CisgICAgICAgIChnbDo6
VmVydGV4RGF0YU1hbmFnZXI6OnNldHVwQXR0cmlidXRlcyk6CisgICAgICAgIChnbDo6VmVydGV4
QnVmZmVyOjpWZXJ0ZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OlZlcnRleEJ1ZmZlcjo6flZlcnRl
eEJ1ZmZlcik6CisgICAgICAgIChnbDo6VmVydGV4QnVmZmVyOjp1bm1hcCk6CisgICAgICAgIChn
bDo6VmVydGV4QnVmZmVyOjpnZXRCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnN0YW50VmVydGV4
QnVmZmVyOjpDb25zdGFudFZlcnRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6Q29uc3RhbnRWZXJ0
ZXhCdWZmZXI6On5Db25zdGFudFZlcnRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6QXJyYXlWZXJ0
ZXhCdWZmZXI6OkFycmF5VmVydGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpBcnJheVZlcnRleEJ1
ZmZlcjo6fkFycmF5VmVydGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpBcnJheVZlcnRleEJ1ZmZl
cjo6YWRkUmVxdWlyZWRTcGFjZSk6CisgICAgICAgIChnbDo6QXJyYXlWZXJ0ZXhCdWZmZXI6OmFk
ZFJlcXVpcmVkU3BhY2VGb3IpOgorICAgICAgICAoZ2w6OlN0cmVhbWluZ1ZlcnRleEJ1ZmZlcjo6
U3RyZWFtaW5nVmVydGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpTdHJlYW1pbmdWZXJ0ZXhCdWZm
ZXI6On5TdHJlYW1pbmdWZXJ0ZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OlN0cmVhbWluZ1ZlcnRl
eEJ1ZmZlcjo6bWFwKToKKyAgICAgICAgKGdsOjpTdHJlYW1pbmdWZXJ0ZXhCdWZmZXI6OnJlc2Vy
dmVSZXF1aXJlZFNwYWNlKToKKyAgICAgICAgKGdsOjpTdGF0aWNWZXJ0ZXhCdWZmZXI6OlN0YXRp
Y1ZlcnRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6U3RhdGljVmVydGV4QnVmZmVyOjp+U3RhdGlj
VmVydGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpTdGF0aWNWZXJ0ZXhCdWZmZXI6Om1hcCk6Cisg
ICAgICAgIChnbDo6U3RhdGljVmVydGV4QnVmZmVyOjpyZXNlcnZlUmVxdWlyZWRTcGFjZSk6Cisg
ICAgICAgIChnbDo6U3RhdGljVmVydGV4QnVmZmVyOjpsb29rdXBBdHRyaWJ1dGUpOgorICAgICAg
ICAoZ2w6OlZlcnRleERhdGFNYW5hZ2VyOjpmb3JtYXRDb252ZXJ0ZXIpOgorICAgICAgICAqIHNy
Yy9saWJHTEVTdjIvZ2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuaDoKKyAgICAgICAgKGdsOjpB
cnJheVZlcnRleEJ1ZmZlcjo6c2l6ZSk6CisgICAgICAgIChnbDo6VmVydGV4RGF0YU1hbmFnZXI6
OmRpcnR5Q3VycmVudFZhbHVlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2dlb21ldHJ5L2Jh
Y2tlbmQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFj
a2VuZC5oOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5oOiBSZW1v
dmVkLgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcDoKKyAgICAgICAgKiBz
cmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWY6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9saWJH
TEVTdjIudmNwcm9qOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmNwcDoKKyAg
ICAgICAgKGdsOjpVbmlmb3JtQ29tcG9uZW50Q291bnQpOgorICAgICAgICAoZ2w6OlVuaWZvcm1D
b21wb25lbnRUeXBlKToKKyAgICAgICAgKGdsOjpDb21wdXRlUGl4ZWxTaXplKToKKyAgICAgICAg
KGdsOjpDaGVja1RleHR1cmVGb3JtYXRUeXBlKToKKyAgICAgICAgKGdsOjpJc0NvbG9yUmVuZGVy
YWJsZSk6CisgICAgICAgIChnbDo6SXNEZXB0aFJlbmRlcmFibGUpOgorICAgICAgICAoZ2w6Oklz
U3RlbmNpbFJlbmRlcmFibGUpOgorICAgICAgICAoZXMyZHg6OkdldEFscGhhU2l6ZSk6CisgICAg
ICAgIChlczJkeDo6R2V0UmVkU2l6ZSk6CisgICAgICAgIChlczJkeDo6R2V0R3JlZW5TaXplKToK
KyAgICAgICAgKGVzMmR4OjpHZXRCbHVlU2l6ZSk6CisgICAgICAgIChlczJkeDo6R2V0RGVwdGhT
aXplKToKKyAgICAgICAgKGVzMmR4OjpDb252ZXJ0UHJpbWl0aXZlVHlwZSk6CisgICAgICAgIChk
eDJlczo6Q29udmVydEJhY2tCdWZmZXJGb3JtYXQpOgorICAgICAgICAoZHgyZXM6OkNvbnZlcnRE
ZXB0aFN0ZW5jaWxGb3JtYXQpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvdXRpbGl0aWVzLmg6
CisKIDIwMTAtMTItMDEgIFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZp
c2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcsNiArNywyMiBAQAogCW9iamVjdHMg
PSB7CiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisJCTkwRDlCMTAyMTJFMTFE
Q0IwMDJENDI1NSAvKiBDb21waWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjBGOTEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3Bw
ICovOyB9OworCQk5MEQ5QjEwMzEyRTExRENCMDAyRDQyNTUgLyogRXh0ZW5zaW9uQmVoYXZpb3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMEZB
MTJFMTFEQ0IwMDJENDI1NSAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovOyB9OworCQk5MEQ5QjEw
NDEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIwRkIxMkUxMURDQjAwMkQ0MjU1IC8qIGds
c2xhbmdfbGV4LmNwcCAqLzsgfTsKKwkJOTBEOUIxMDUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xh
bmdfdGFiLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDkwRDlCMEZDMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5jcHAgKi87IH07CisJCTkw
RDlCMTA2MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIwRkQxMkUxMURDQjAwMkQ0MjU1IC8q
IGdsc2xhbmdfdGFiLmggKi87IH07CisJCTkwRDlCMTA3MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNs
YW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQ5
QjBGRTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZy5oICovOyB9OworCQk5MEQ5QjEwOTEyRTEx
RENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTAwMTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hT
eW1ib2wuY3BwICovOyB9OworCQk5MEQ5QjEwQTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3lt
Ym9sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQ5
QjEwMTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggKi87IH07CisJCTkwRDlCMTEz
MTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCAq
LzsgfTsKKwkJOTBEOUIxMTQxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTBDMTJFMTFERDYwMDJENDI1
NSAvKiB1dGlsLmggKi87IH07CisJCTkwRDlCMTE1MTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0
ZUxpbWl0YXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkwRDlCMTBEMTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNw
cCAqLzsgfTsKKwkJOTBEOUIxMTYxMkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlv
bnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlC
MTBFMTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi87IH07CisJCTkw
RDlCMTE3MTJFMTFERDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8uY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIxMEYxMkUxMURENjAwMkQ0MjU1
IC8qIFZhcmlhYmxlSW5mby5jcHAgKi87IH07CisJCTkwRDlCMTE4MTJFMTFERDYwMDJENDI1NSAv
KiBWYXJpYWJsZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDkwRDlCMTEwMTJFMTFERDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8uaCAqLzsgfTsK
KwkJOTBEOUIxMTkxMkUxMURENjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTExMTJFMTFERDYwMDJE
NDI1NSAvKiBWZXJzaW9uR0xTTC5jcHAgKi87IH07CisJCTkwRDlCMTFBMTJFMTFERDYwMDJENDI1
NSAvKiBWZXJzaW9uR0xTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gOTBEOUIxMTIxMkUxMURENjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmggKi87IH07
CiAJCUZCMzlEMjcxMTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyMjEyMDBGMzVBMDAw
ODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovOyB9OwogCQlGQjM5RDI3NTEyMDBGMzVBMDAwODhF
NjkgLyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gRkIzOUQyMjYxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJRkIz
OUQyNzkxMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJ
bmZvU2luay5jcHAgKi87IH07CkBAIC00Miw2ICs1OCwyMyBAQAogCQk1RDdDNTlDNTEyMDhDNjhC
MDAxQzg3M0UgLyogQU5HTEUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRo
ID0gQU5HTEUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM2
MTIwOEM2OEIwMDFDODczRSAvKiBCYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZp
ZzsgcGF0aCA9IEJhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVE
N0M1OUM3MTIwOEM2OEIwMDFDODczRSAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5MEQ5QjBGOTEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGlsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MEQ5QjBGQTEyRTExRENCMDAyRDQyNTUgLyog
RXh0ZW5zaW9uQmVoYXZpb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0
ZW5zaW9uQmVoYXZpb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTBEOUIwRkIx
MkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfbGV4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IGdsc2xhbmdfbGV4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTBEOUIwRkMxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGdsc2xhbmdfdGFiLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTBEOUIwRkQxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdf
dGFiLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGdsc2xhbmdfdGFiLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkwRDlCMEZFMTJFMTFEQ0IwMDJENDI1NSAvKiBn
bHNsYW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGdsc2xhbmcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTBEOUIwRkYxMkUxMURDQjAwMkQ0MjU1IC8qIG9z
c291cmNlX25zcHIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gb3Nz
b3VyY2VfbnNwci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkwRDlCMTAwMTJF
MTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1ib2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2VhcmNoU3ltYm9sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTBEOUIxMDExMkUxMURDQjAwMkQ0MjU1IC8qIFNlYXJjaFN5bWJvbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFyY2hTeW1ib2wuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJOTBEOUIxMEIxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gdXRpbC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTkwRDlCMTBDMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJOTBEOUIxMEQxMkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFsaWRhdGVMaW1pdGF0
aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkwRDlCMTBFMTJFMTFERDYw
MDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTBEOUIxMEYxMkUxMURENjAwMkQ0MjU1IC8qIFZhcmlhYmxlSW5mby5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk5MEQ5QjExMDEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFi
bGVJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlhYmxlSW5mby5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MEQ5QjExMTEyRTExREQ2MDAyRDQyNTUg
LyogVmVyc2lvbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
VmVyc2lvbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MEQ5QjExMjEy
RTExREQ2MDAyRDQyNTUgLyogVmVyc2lvbkdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVmVyc2lvbkdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIz
OUQwRDExMjAwRjBFMzAwMDg4RTY5IC8qIGxpYkFOR0xFLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0g
MDsgcGF0aCA9IGxpYkFOR0xFLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07
CiAJCUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZCMzlEMTg3MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXgg
PSAwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVH
ZW5HTFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMiw3ICsxNDUsNiBA
QAogCQlGQjM5RDFEMTEyMDBGMjYyMDAwODhFNjkgLyogVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
RkIzOUQxRDIxMjAwRjI2MjAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVj
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMUQzMTIwMEYyNjIwMDA4
OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
VW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUQ0MTIw
MEYyNjIwMDA4OEU2OSAvKiB1bmlzdGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gdW5pc3RkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIxMTIwMEYz
NUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBl
eHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0
aCA9IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDIyMjEy
MDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVF
bmNvZGluZyA9IDQ7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE3NSw3ICsyMDcsNiBAQAogCQlGQjM5RDI2QzEyMDBGMzVBMDAwODhFNjkgLyogVHlwZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjZEMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxl
Y3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxp
Y2l0RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0g
VW5mb2xkU2VsZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjZGMTIw
MEYzNUEwMDA4OEU2OSAvKiB1bmlzdGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gdW5pc3RkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMkJGMTIwMEYz
RTYwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBh
dGggPSBTaGFkZXJMYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlENzIw
MTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IGdsc2xhbmcuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvQU5HTEUvZ2xz
bGFuZy5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUZCMzlENzIx
MTIwMTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBnbHNsYW5nX3RhYi5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvQU5HTEUvZ2xz
bGFuZ190YWIuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTI5Nyw3
ICszMjgsNiBAQAogCQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovLAog
CQkJCUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovLAogCQkJ
CUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLywKLQkJCQlGQjM5
RDFENDEyMDBGMjYyMDAwODhFNjkgLyogdW5pc3RkLmggKi8sCiAJCQkpOwogCQkJaW5jbHVkZUlu
SW5kZXggPSAwOwogCQkJbmFtZSA9IGNvbXBpbGVyOwpAQCAtMzMyLDEyICszNjIsMTkgQEAKIAkJ
RkIzOUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyog
cHJlcHJvY2Vzc29yICovLAogCQkJCUZCMzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlw
ZXMuaCAqLywKIAkJCQlGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3Bw
ICovLAogCQkJCUZCMzlEMjI0MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLywKKwkJCQk5
MEQ5QjBGOTEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3BwICovLAogCQkJCUZCMzlEMjI1
MTIwMEYzNUEwMDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8sCiAJCQkJRkIzOUQyMjYxMjAw
RjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLywKIAkJCQlGQjM5RDIyNzEyMDBGMzVBMDAwODhF
NjkgLyogZGVidWcuaCAqLywKKwkJCQk5MEQ5QjBGQTEyRTExRENCMDAyRDQyNTUgLyogRXh0ZW5z
aW9uQmVoYXZpb3IuaCAqLywKKwkJCQk5MEQ5QjBGQjEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFu
Z19sZXguY3BwICovLAorCQkJCTkwRDlCMEZDMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3Rh
Yi5jcHAgKi8sCisJCQkJOTBEOUIwRkQxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmgg
Ki8sCisJCQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLywKIAkJCQlG
QjM5RDIyODEyMDBGMzVBMDAwODhFNjkgLyogZ2xzbGFuZy5sICovLAogCQkJCUZCMzlEMjI5MTIw
MEYzNUEwMDA4OEU2OSAvKiBnbHNsYW5nLnkgKi8sCiAJCQkJRkIzOUQyMkExMjAwRjM1QTAwMDg4
RTY5IC8qIEluZm9TaW5rLmNwcCAqLywKQEAgLTM1NSw2ICszOTIsNyBAQAogCQkJCUZCMzlEMjM2
MTIwMEYzNUEwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAogCQkJCUZCMzlEMjM3
MTIwMEYzNUEwMDA4OEU2OSAvKiBNTWFwLmggKi8sCiAJCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4
RTY5IC8qIG9zaW5jbHVkZS5oICovLAorCQkJCTkwRDlCMEZGMTJFMTFEQ0IwMDJENDI1NSAvKiBv
c3NvdXJjZV9uc3ByLmNwcCAqLywKIAkJCQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nz
b3VyY2VfcG9zaXguY3BwICovLAogCQkJCUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAvKiBvc3Nv
dXJjZV93aW4uY3BwICovLAogCQkJCUZCMzlEMjNCMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRH
TFNMLmNwcCAqLywKQEAgLTM2NCwxMSArNDAyLDEyIEBACiAJCQkJRkIzOUQyNDExMjAwRjM1QTAw
MDg4RTY5IC8qIFBhcnNlSGVscGVyLmggKi8sCiAJCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5
IC8qIFBvb2xBbGxvYy5jcHAgKi8sCiAJCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBv
b2xBbGxvYy5oICovLAotCQkJCUZCMzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNz
b3IgKi8sCiAJCQkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNw
cCAqLywKIAkJCQlGQjM5RDI1NzEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuaCAq
LywKIAkJCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8sCiAJ
CQkJRkIzOUQyNTkxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQk5MEQ5
QjEwMDEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKKwkJCQk5MEQ5QjEw
MTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUExMjAw
RjM1QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYzNUEw
MDA4OEU2OSAvKiBTaEhhbmRsZS5oICovLAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAv
KiBTeW1ib2xUYWJsZS5jcHAgKi8sCkBAIC0zNzgsNyArNDE3LDE0IEBACiAJCQkJRkIzOUQyNkMx
MjAwRjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8sCiAJCQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4
RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCiAJCQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5
IC8qIFVuZm9sZFNlbGVjdC5oICovLAotCQkJCUZCMzlEMjZGMTIwMEYzNUEwMDA4OEU2OSAvKiB1
bmlzdGQuaCAqLywKKwkJCQk5MEQ5QjEwQjEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5jcHAgKi8s
CisJCQkJOTBEOUIxMEMxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuaCAqLywKKwkJCQk5MEQ5QjEw
RDEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8sCisJCQkJOTBE
OUIxMEUxMkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLywKKwkJCQk5
MEQ5QjEwRjEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJbmZvLmNwcCAqLywKKwkJCQk5MEQ5
QjExMDEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJbmZvLmggKi8sCisJCQkJOTBEOUIxMTEx
MkUxMURENjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmNwcCAqLywKKwkJCQk5MEQ5QjExMjEyRTEx
REQ2MDAyRDQyNTUgLyogVmVyc2lvbkdMU0wuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gY29tcGls
ZXI7CiAJCQlwYXRoID0gc3JjL2NvbXBpbGVyOwpAQCAtNDI1LDYgKzQ3MSwxNCBAQAogCQkJYnVp
bGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCUZCMzlENzZFMTIw
MTEwRkMwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk5MEQ5QjEw
MzEyRTExRENCMDAyRDQyNTUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCBpbiBIZWFkZXJzICovLAor
CQkJCTkwRDlCMTA2MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJOTBEOUIxMDcxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTkwRDlCMTBBMTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1ib2wuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTkwRDlCMTE0MTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk5MEQ5QjExNjEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTBEOUIxMTgxMkUxMURENjAwMkQ0MjU1IC8qIFZh
cmlhYmxlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTBEOUIxMUExMkUxMURENjAwMkQ0MjU1
IC8qIFZlcnNpb25HTFNMLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU0Myw2ICs1OTcsMTQgQEAKIAkJ
CQlGQjM5RDJBQTEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRkIzOUQyQUMxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUZCMzlEMkIxMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTBEOUIxMDIxMkUxMURDQjAwMkQ0MjU1IC8qIENv
bXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkwRDlCMTA0MTJFMTFEQ0IwMDJENDI1NSAv
KiBnbHNsYW5nX2xleC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5MEQ5QjEwNTEyRTExRENCMDAy
RDQyNTUgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTBEOUIxMDkxMkUx
MURDQjAwMkQ0MjU1IC8qIFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5MEQ5
QjExMzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5MEQ5
QjExNTEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk5MEQ5QjExNzEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJbmZvLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTkwRDlCMTE5MTJFMTFERDYwMDJENDI1NSAvKiBWZXJzaW9uR0xT
TC5jcHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1
ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkocmV2aXNpb24gNzU4MDEpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNCw2ICsxNCw2NiBAQAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4g
IkMiIHsKICNlbmRpZgorCisvLyBWZXJzaW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9u
IEFQSS4KKy8vIEl0IGlzIGluY3JlbWVudGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5nZXMuCisj
ZGVmaW5lIFNIX1ZFUlNJT04gMTAzCisKKy8vCisvLyBUaGUgbmFtZXMgb2YgdGhlIGZvbGxvd2lu
ZyBlbnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJlZml4CisvLyB3aXRo
IFNILiBGb3IgZXhhbXBsZSwgU0hfSU5GT19MT0dfTEVOR1RIIGlzIGVxdWl2YWxlbnQgdG8gR0xf
SU5GT19MT0dfTEVOR1RILgorLy8gVGhlIGVudW0gdmFsdWVzIGFyZSBhbHNvIGVxdWFsIHRvIHRo
ZSB2YWx1ZXMgb2YgdGhlaXIgR0wgY291bnRlcnBhcnQuIFRoaXMKKy8vIGlzIGRvbmUgdG8gbWFr
ZSBpdCBlYXNpZXIgZm9yIGFwcGxpY2F0aW9ucyB0byB1c2UgdGhlIHNoYWRlciBsaWJyYXJ5Lgor
Ly8KK3R5cGVkZWYgZW51bSB7CisgIFNIX0ZSQUdNRU5UX1NIQURFUiA9IDB4OEIzMCwKKyAgU0hf
VkVSVEVYX1NIQURFUiAgID0gMHg4QjMxCit9IFNoU2hhZGVyVHlwZTsKKwordHlwZWRlZiBlbnVt
IHsKKyAgU0hfR0xFUzJfU1BFQyA9IDB4OEI0MCwKKyAgU0hfV0VCR0xfU1BFQyA9IDB4OEI0MQor
fSBTaFNoYWRlclNwZWM7CisKK3R5cGVkZWYgZW51bSB7CisgIFNIX05PTkUgICAgICAgICAgID0g
MCwKKyAgU0hfSU5UICAgICAgICAgICAgPSAweDE0MDQsCisgIFNIX0ZMT0FUICAgICAgICAgID0g
MHgxNDA2LAorICBTSF9GTE9BVF9WRUMyICAgICA9IDB4OEI1MCwKKyAgU0hfRkxPQVRfVkVDMyAg
ICAgPSAweDhCNTEsCisgIFNIX0ZMT0FUX1ZFQzQgICAgID0gMHg4QjUyLAorICBTSF9JTlRfVkVD
MiAgICAgICA9IDB4OEI1MywKKyAgU0hfSU5UX1ZFQzMgICAgICAgPSAweDhCNTQsCisgIFNIX0lO
VF9WRUM0ICAgICAgID0gMHg4QjU1LAorICBTSF9CT09MICAgICAgICAgICA9IDB4OEI1NiwKKyAg
U0hfQk9PTF9WRUMyICAgICAgPSAweDhCNTcsCisgIFNIX0JPT0xfVkVDMyAgICAgID0gMHg4QjU4
LAorICBTSF9CT09MX1ZFQzQgICAgICA9IDB4OEI1OSwKKyAgU0hfRkxPQVRfTUFUMiAgICAgPSAw
eDhCNUEsCisgIFNIX0ZMT0FUX01BVDMgICAgID0gMHg4QjVCLAorICBTSF9GTE9BVF9NQVQ0ICAg
ICA9IDB4OEI1QywKKyAgU0hfU0FNUExFUl8yRCAgICAgPSAweDhCNUUsCisgIFNIX1NBTVBMRVJf
Q1VCRSAgID0gMHg4QjYwCit9IFNoRGF0YVR5cGU7CisKK3R5cGVkZWYgZW51bSB7CisgIFNIX0lO
Rk9fTE9HX0xFTkdUSCAgICAgICAgICAgICA9ICAweDhCODQsCisgIFNIX09CSkVDVF9DT0RFX0xF
TkdUSCAgICAgICAgICA9ICAweDhCODgsICAvLyBHTF9TSEFERVJfU09VUkNFX0xFTkdUSAorICBT
SF9BQ1RJVkVfVU5JRk9STVMgICAgICAgICAgICAgPSAgMHg4Qjg2LAorICBTSF9BQ1RJVkVfVU5J
Rk9STV9NQVhfTEVOR1RIICAgPSAgMHg4Qjg3LAorICBTSF9BQ1RJVkVfQVRUUklCVVRFUyAgICAg
ICAgICAgPSAgMHg4Qjg5LAorICBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggPSAgMHg4
QjhBCit9IFNoU2hhZGVySW5mbzsKKworLy8gQ29tcGlsZSBvcHRpb25zLgordHlwZWRlZiBlbnVt
IHsKKyAgU0hfVkFMSURBVEUgICAgICAgICAgICAgICA9IDAsCisgIFNIX1ZBTElEQVRFX0xPT1Bf
SU5ERVhJTkcgPSAweDAwMDEsCisgIFNIX0lOVEVSTUVESUFURV9UUkVFICAgICAgPSAweDAwMDIs
CisgIFNIX09CSkVDVF9DT0RFICAgICAgICAgICAgPSAweDAwMDQsCisgIFNIX0FUVFJJQlVURVNf
VU5JRk9STVMgICAgPSAweDAwMDgKK30gU2hDb21waWxlT3B0aW9uczsKKwogLy8KIC8vIERyaXZl
ciBtdXN0IGNhbGwgdGhpcyBmaXJzdCwgb25jZSwgYmVmb3JlIGRvaW5nIGFueSBvdGhlcgogLy8g
Y29tcGlsZXIgb3BlcmF0aW9ucy4KQEAgLTI1LDIzICs4NSw2IEBAIGludCBTaEluaXRpYWxpemUo
KTsKIC8vIElmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcywgdGhlIHJldHVybiB2YWx1ZSBpcyBub256
ZXJvLCBlbHNlIHplcm8uCiAvLwogaW50IFNoRmluYWxpemUoKTsKLS8vCi0vLyBUeXBlcyBvZiBs
YW5ndWFnZXMgdGhlIGNvbXBpbGVyIGNhbiBjb25zdW1lLgotLy8KLXR5cGVkZWYgZW51bSB7Ci0g
ICAgRVNoTGFuZ1ZlcnRleCwKLSAgICBFU2hMYW5nRnJhZ21lbnQsCi0gICAgRVNoTGFuZ0NvdW50
LAotfSBFU2hMYW5ndWFnZTsKLQotLy8KLS8vIFRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIGNv
bXBpbGVyIGNvbmZvcm1zIHRvLgotLy8gSXQgY3VycmVudGx5IHN1cHBvcnRzIE9wZW5HTCBFUyBh
bmQgV2ViR0wgc3BlY2lmaWNhdGlvbnMuCi0vLwotdHlwZWRlZiBlbnVtIHsKLSAgICBFU2hTcGVj
R0xFUzIsCi0gICAgRVNoU3BlY1dlYkdMLAotfSBFU2hTcGVjOwogCiAvLwogLy8gSW1wbGVtZW50
YXRpb24gZGVwZW5kZW50IGJ1aWx0LWluIHJlc291cmNlcyAoY29uc3RhbnRzIGFuZCBleHRlbnNp
b25zKS4KQEAgLTYyLDI3ICsxMDUsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QKICAgICAvLyBFeHRlbnNp
b25zLgogICAgIC8vIFNldCB0byAxIHRvIGVuYWJsZSB0aGUgZXh0ZW5zaW9uLCBlbHNlIDAuCiAg
ICAgaW50IE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlczsKLX0gVEJ1aWx0SW5SZXNvdXJjZTsKK30g
U2hCdWlsdEluUmVzb3VyY2VzOwogCiAvLwogLy8gSW5pdGlhbGl6ZSBidWlsdC1pbiByZXNvdXJj
ZXMgd2l0aCBtaW5pbXVtIGV4cGVjdGVkIHZhbHVlcy4KIC8vCi12b2lkIFNoSW5pdEJ1aWx0SW5S
ZXNvdXJjZShUQnVpbHRJblJlc291cmNlKiByZXNvdXJjZXMpOwotCi0vLwotLy8gT3B0aW1pemF0
aW9uIGxldmVsIGZvciB0aGUgY29tcGlsZXIuCi0vLwotdHlwZWRlZiBlbnVtIHsKLSAgICBFU2hP
cHROb0dlbmVyYXRpb24sCi0gICAgRVNoT3B0Tm9uZSwKLSAgICBFU2hPcHRTaW1wbGUsICAgICAg
IC8vIE9wdGltaXphdGlvbnMgdGhhdCBjYW4gYmUgZG9uZSBxdWlja2x5Ci0gICAgRVNoT3B0RnVs
bCwgICAgICAgICAvLyBPcHRpbWl6YXRpb25zIHRoYXQgd2lsbCB0YWtlIG1vcmUgdGltZQotfSBF
U2hPcHRpbWl6YXRpb25MZXZlbDsKLQotZW51bSBURGVidWdPcHRpb25zIHsKLSAgICBFRGVidWdP
cE5vbmUgICAgICAgICAgICAgICA9IDB4MDAwLAotICAgIEVEZWJ1Z09wSW50ZXJtZWRpYXRlICAg
ICAgID0gMHgwMDEsICAvLyBXcml0ZXMgaW50ZXJtZWRpYXRlIHRyZWUgaW50byBpbmZvLWxvZy4K
LX07Cit2b2lkIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoU2hCdWlsdEluUmVzb3VyY2VzKiByZXNv
dXJjZXMpOwogCiAvLwogLy8gU2hIYW5kbGUgaGVsZCBieSBidXQgb3BhcXVlIHRvIHRoZSBkcml2
ZXIuICBJdCBpcyBhbGxvY2F0ZWQsCkBAIC05NiwzMCArMTI0LDEzMCBAQCB0eXBlZGVmIHZvaWQq
IFNoSGFuZGxlOwogLy8KIC8vIERyaXZlciBjYWxscyB0aGVzZSB0byBjcmVhdGUgYW5kIGRlc3Ry
b3kgY29tcGlsZXIgb2JqZWN0cy4KIC8vCi1TaEhhbmRsZSBTaENvbnN0cnVjdENvbXBpbGVyKEVT
aExhbmd1YWdlLCBFU2hTcGVjLCBjb25zdCBUQnVpbHRJblJlc291cmNlKik7Ci12b2lkIFNoRGVz
dHJ1Y3QoU2hIYW5kbGUpOworLy8gUmV0dXJucyB0aGUgaGFuZGxlIG9mIGNvbnN0cnVjdGVkIGNv
bXBpbGVyLgorLy8gUGFyYW1ldGVyczoKKy8vIHR5cGU6IFNwZWNpZmllcyB0aGUgdHlwZSBvZiBz
aGFkZXIgLSBTSF9GUkFHTUVOVF9TSEFERVIgb3IgU0hfVkVSVEVYX1NIQURFUi4KKy8vIHNwZWM6
IFNwZWNpZmllcyB0aGUgbGFuZ3VhZ2Ugc3BlYyB0aGUgY29tcGlsZXIgbXVzdCBjb25mb3JtIHRv
IC0KKy8vICAgICAgIFNIX0dMRVMyX1NQRUMgb3IgU0hfV0VCR0xfU1BFQy4KKy8vIHJlc291cmNl
czogU3BlY2lmaWVzIHRoZSBidWlsdC1pbiByZXNvdXJjZXMuCitTaEhhbmRsZSBTaENvbnN0cnVj
dENvbXBpbGVyKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzKiByZXNvdXJjZXMp
Owordm9pZCBTaERlc3RydWN0KFNoSGFuZGxlIGhhbmRsZSk7CiAKIC8vCi0vLyBUaGUgcmV0dXJu
IHZhbHVlIG9mIFNoQ29tcGlsZSBpcyBib29sZWFuLCBpbmRpY2F0aW5nCi0vLyBzdWNjZXNzIG9y
IGZhaWx1cmUuCi0vLwotLy8gVGhlIGluZm8tbG9nIHNob3VsZCBiZSB3cml0dGVuIGJ5IFNoQ29t
cGlsZSBpbnRvIAotLy8gU2hIYW5kbGUsIHNvIGl0IGNhbiBhbnN3ZXIgZnV0dXJlIHF1ZXJpZXMu
CisvLyBDb21waWxlcyB0aGUgZ2l2ZW4gc2hhZGVyIHNvdXJjZS4KKy8vIElmIHRoZSBmdW5jdGlv
biBzdWNjZWVkcywgdGhlIHJldHVybiB2YWx1ZSBpcyBub256ZXJvLCBlbHNlIHplcm8uCisvLyBQ
YXJhbWV0ZXJzOgorLy8gaGFuZGxlOiBTcGVjaWZpZXMgdGhlIGhhbmRsZSBvZiBjb21waWxlciB0
byBiZSB1c2VkLgorLy8gc2hhZGVyU3RyaW5nczogU3BlY2lmaWVzIGFuIGFycmF5IG9mIHBvaW50
ZXJzIHRvIG51bGwtdGVybWluYXRlZCBzdHJpbmdzCisvLyAgICAgICAgICAgICAgICBjb250YWlu
aW5nIHRoZSBzaGFkZXIgc291cmNlIGNvZGUuCisvLyBudW1TdHJpbmdzOiBTcGVjaWZpZXMgdGhl
IG51bWJlciBvZiBlbGVtZW50cyBpbiBzaGFkZXJTdHJpbmdzIGFycmF5LgorLy8gY29tcGlsZU9w
dGlvbnM6IEEgbWFzayBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKKy8vIFNI
X1ZBTElEQVRFOiBWYWxpZGF0ZXMgc2hhZGVyIHRvIGVuc3VyZSB0aGF0IGl0IGNvbmZvcm1zIHRv
IHRoZSBzcGVjCisvLyAgICAgICAgICAgICAgc3BlY2lmaWVkIGR1cmluZyBjb21waWxlciBjb25z
dHJ1Y3Rpb24uCisvLyBTSF9WQUxJREFURV9MT09QX0lOREVYSU5HOiBWYWxpZGF0ZXMgbG9vcCBh
bmQgaW5kZXhpbmcgaW4gdGhlIHNoYWRlciB0bworLy8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW5zdXJlIHRoYXQgdGhleSBkbyBub3QgZXhjZWVkIHRoZSBtaW5pbXVtCisvLyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNw
ZWMsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHBlbmRpeCBBLCBTZWN0aW9uIDQg
YW5kIDUuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVyZSBpcyBubyBuZWVkIHRv
IHNwZWNpZnkgdGhpcyBwYXJhbWV0ZXIgd2hlbgorLy8gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29tcGlsaW5nIGZvciBXZWJHTCAtIGl0IGlzIGltcGxpZWQuCisvLyBTSF9JTlRFUk1FRElB
VEVfVFJFRTogV3JpdGVzIGludGVybWVkaWF0ZSB0cmVlIHRvIGluZm8gbG9nLgorLy8gICAgICAg
ICAgICAgICAgICAgICAgIENhbiBiZSBxdWVyaWVkIGJ5IGNhbGxpbmcgU2hHZXRJbmZvTG9nKCku
CisvLyBTSF9PQkpFQ1RfQ09ERTogVHJhbnNsYXRlcyBpbnRlcm1lZGlhdGUgdHJlZSB0byBnbHNs
IG9yIGhsc2wgc2hhZGVyLgorLy8gICAgICAgICAgICAgICAgIENhbiBiZSBxdWVyaWVkIGJ5IGNh
bGxpbmcgU2hHZXRPYmplY3RDb2RlKCkuCisvLyBTSF9BVFRSSUJVVEVTX1VOSUZPUk1TOiBFeHRy
YWN0cyBhdHRyaWJ1dGVzIGFuZCB1bmlmb3Jtcy4KKy8vICAgICAgICAgICAgICAgICAgICAgICAg
IENhbiBiZSBxdWVyaWVkIGJ5IGNhbGxpbmcgU2hHZXRBY3RpdmVBdHRyaWIoKSBhbmQKKy8vICAg
ICAgICAgICAgICAgICAgICAgICAgIFNoR2V0QWN0aXZlVW5pZm9ybSgpLgogLy8KIGludCBTaENv
bXBpbGUoCi0gICAgY29uc3QgU2hIYW5kbGUsCisgICAgY29uc3QgU2hIYW5kbGUgaGFuZGxlLAog
ICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICBjb25zdCBpbnQgbnVt
U3RyaW5ncywKLSAgICBjb25zdCBFU2hPcHRpbWl6YXRpb25MZXZlbCwKLSAgICBpbnQgZGVidWdP
cHRpb25zCisgICAgaW50IGNvbXBpbGVPcHRpb25zCiAgICAgKTsKIAotLy8KLS8vIEFsbCB0aGUg
Zm9sbG93aW5nIHJldHVybiAwIGlmIHRoZSBpbmZvcm1hdGlvbiBpcyBub3QKLS8vIGF2YWlsYWJs
ZSBpbiB0aGUgb2JqZWN0IHBhc3NlZCBkb3duLCBvciB0aGUgb2JqZWN0IGlzIGJhZC4KLS8vCi1j
b25zdCBjaGFyKiBTaEdldEluZm9Mb2coY29uc3QgU2hIYW5kbGUpOwotY29uc3QgY2hhciogU2hH
ZXRPYmplY3RDb2RlKGNvbnN0IFNoSGFuZGxlKTsKKy8vIFJldHVybnMgYSBwYXJhbWV0ZXIgZnJv
bSBhIGNvbXBpbGVkIHNoYWRlci4KKy8vIFBhcmFtZXRlcnM6CisvLyBoYW5kbGU6IFNwZWNpZmll
cyB0aGUgY29tcGlsZXIKKy8vIHBuYW1lOiBTcGVjaWZpZXMgdGhlIHBhcmFtZXRlciB0byBxdWVy
eS4KKy8vIFRoZSBmb2xsb3dpbmcgcGFyYW1ldGVycyBhcmUgZGVmaW5lZDoKKy8vIFNIX0lORk9f
TE9HX0xFTkdUSDogdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBpbmZvcm1hdGlvbiBs
b2cKKy8vICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHRoZSBudWxsIHRlcm1pbmF0aW9u
IGNoYXJhY3Rlci4KKy8vIFNIX09CSkVDVF9DT0RFX0xFTkdUSDogdGhlIG51bWJlciBvZiBjaGFy
YWN0ZXJzIGluIHRoZSBvYmplY3QgY29kZQorLy8gICAgICAgICAgICAgICAgICAgICAgICBpbmNs
dWRpbmcgdGhlIG51bGwgdGVybWluYXRpb24gY2hhcmFjdGVyLgorLy8gU0hfQUNUSVZFX0FUVFJJ
QlVURVM6IHRoZSBudW1iZXIgb2YgYWN0aXZlIGF0dHJpYnV0ZSB2YXJpYWJsZXMuCisvLyBTSF9B
Q1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEg6IHRoZSBsZW5ndGggb2YgdGhlIGxvbmdlc3QgYWN0
aXZlIGF0dHJpYnV0ZQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJs
ZSBuYW1lIGluY2x1ZGluZyB0aGUgbnVsbAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIuCisvLyBTSF9BQ1RJVkVfVU5JRk9STVM6IHRoZSBu
dW1iZXIgb2YgYWN0aXZlIHVuaWZvcm0gdmFyaWFibGVzLgorLy8gU0hfQUNUSVZFX1VOSUZPUk1f
TUFYX0xFTkdUSDogdGhlIGxlbmd0aCBvZiB0aGUgbG9uZ2VzdCBhY3RpdmUgdW5pZm9ybQorLy8g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgbmFtZSBpbmNsdWRpbmcgdGhl
IG51bGwKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0aW9uIGNoYXJh
Y3Rlci4KKy8vIAorLy8gcGFyYW1zOiBSZXF1ZXN0ZWQgcGFyYW1ldGVyCit2b2lkIFNoR2V0SW5m
byhjb25zdCBTaEhhbmRsZSBoYW5kbGUsIFNoU2hhZGVySW5mbyBwbmFtZSwgaW50KiBwYXJhbXMp
OworCisvLyBSZXR1cm5zIG51bC10ZXJtaW5hdGVkIGluZm9ybWF0aW9uIGxvZyBmb3IgYSBjb21w
aWxlZCBzaGFkZXIuCisvLyBQYXJhbWV0ZXJzOgorLy8gaGFuZGxlOiBTcGVjaWZpZXMgdGhlIGNv
bXBpbGVyCisvLyBpbmZvTG9nOiBTcGVjaWZpZXMgYW4gYXJyYXkgb2YgY2hhcmFjdGVycyB0aGF0
IGlzIHVzZWQgdG8gcmV0dXJuCisvLyAgICAgICAgICB0aGUgaW5mb3JtYXRpb24gbG9nLiBJdCBp
cyBhc3N1bWVkIHRoYXQgaW5mb0xvZyBoYXMgZW5vdWdoIG1lbW9yeQorLy8gICAgICAgICAgdG8g
YWNjb21vZGF0ZSB0aGUgaW5mb3JtYXRpb24gbG9nLiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHJl
cXVpcmVkCisvLyAgICAgICAgICB0byBzdG9yZSB0aGUgcmV0dXJuZWQgaW5mb3JtYXRpb24gbG9n
IGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nCisvLyAgICAgICAgICBTaEdldEluZm8gd2l0aCBT
SF9JTkZPX0xPR19MRU5HVEguCit2b2lkIFNoR2V0SW5mb0xvZyhjb25zdCBTaEhhbmRsZSBoYW5k
bGUsIGNoYXIqIGluZm9Mb2cpOworCisvLyBSZXR1cm5zIG51bGwtdGVybWluYXRlZCBvYmplY3Qg
Y29kZSBmb3IgYSBjb21waWxlZCBzaGFkZXIuCisvLyBQYXJhbWV0ZXJzOgorLy8gaGFuZGxlOiBT
cGVjaWZpZXMgdGhlIGNvbXBpbGVyCisvLyBpbmZvTG9nOiBTcGVjaWZpZXMgYW4gYXJyYXkgb2Yg
Y2hhcmFjdGVycyB0aGF0IGlzIHVzZWQgdG8gcmV0dXJuCisvLyAgICAgICAgICB0aGUgb2JqZWN0
IGNvZGUuIEl0IGlzIGFzc3VtZWQgdGhhdCBpbmZvTG9nIGhhcyBlbm91Z2ggbWVtb3J5IHRvCisv
LyAgICAgICAgICBhY2NvbW9kYXRlIHRoZSBvYmplY3QgY29kZS4gVGhlIHNpemUgb2YgdGhlIGJ1
ZmZlciByZXF1aXJlZCB0bworLy8gICAgICAgICAgc3RvcmUgdGhlIHJldHVybmVkIG9iamVjdCBj
b2RlIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nCisvLyAgICAgICAgICBTaEdldEluZm8gd2l0
aCBTSF9PQkpFQ1RfQ09ERV9MRU5HVEguCit2b2lkIFNoR2V0T2JqZWN0Q29kZShjb25zdCBTaEhh
bmRsZSBoYW5kbGUsIGNoYXIqIG9iakNvZGUpOworCisvLyBSZXR1cm5zIGluZm9ybWF0aW9uIGFi
b3V0IGFuIGFjdGl2ZSBhdHRyaWJ1dGUgdmFyaWFibGUuCisvLyBQYXJhbWV0ZXJzOgorLy8gaGFu
ZGxlOiBTcGVjaWZpZXMgdGhlIGNvbXBpbGVyCisvLyBpbmRleDogU3BlY2lmaWVzIHRoZSBpbmRl
eCBvZiB0aGUgYXR0cmlidXRlIHZhcmlhYmxlIHRvIGJlIHF1ZXJpZWQuCisvLyBsZW5ndGg6IFJl
dHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjdHVhbGx5IHdyaXR0ZW4gaW4gdGhlIHN0
cmluZworLy8gICAgICAgICBpbmRpY2F0ZWQgYnkgbmFtZSAoZXhjbHVkaW5nIHRoZSBudWxsIHRl
cm1pbmF0b3IpIGlmIGEgdmFsdWUgb3RoZXIKKy8vICAgICAgICAgdGhhbiBOVUxMIGlzIHBhc3Nl
ZC4KKy8vIHNpemU6IFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGF0dHJpYnV0ZSB2YXJpYWJsZS4K
Ky8vIHR5cGU6IFJldHVybnMgdGhlIGRhdGEgdHlwZSBvZiB0aGUgYXR0cmlidXRlIHZhcmlhYmxl
LgorLy8gbmFtZTogUmV0dXJucyBhIG51bGwgdGVybWluYXRlZCBzdHJpbmcgY29udGFpbmluZyB0
aGUgbmFtZSBvZiB0aGUKKy8vICAgICAgIGF0dHJpYnV0ZSB2YXJpYWJsZS4gSXQgaXMgYXNzdW1l
ZCB0aGF0IG5hbWUgaGFzIGVub3VnaCBtZW1vcnkgdG8KKy8vICAgICAgIGFjY29tb2RhdGUgdGhl
IGF0dHJpYnV0ZSB2YXJpYWJsZSBuYW1lLiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyCisvLyAgICAg
ICByZXF1aXJlZCB0byBzdG9yZSB0aGUgYXR0cmlidXRlIHZhcmlhYmxlIG5hbWUgY2FuIGJlIG9i
dGFpbmVkIGJ5CisvLyAgICAgICBjYWxsaW5nIFNoR2V0SW5mbyB3aXRoIFNIX0FDVElWRV9BVFRS
SUJVVEVfTUFYX0xFTkdUSC4KK3ZvaWQgU2hHZXRBY3RpdmVBdHRyaWIoY29uc3QgU2hIYW5kbGUg
aGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXgsCisgICAgICAgICAgICAg
ICAgICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNpemUs
CisgICAgICAgICAgICAgICAgICAgICAgIFNoRGF0YVR5cGUqIHR5cGUsCisgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIqIG5hbWUpOworCisvLyBSZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGFu
IGFjdGl2ZSB1bmlmb3JtIHZhcmlhYmxlLgorLy8gUGFyYW1ldGVyczoKKy8vIGhhbmRsZTogU3Bl
Y2lmaWVzIHRoZSBjb21waWxlcgorLy8gaW5kZXg6IFNwZWNpZmllcyB0aGUgaW5kZXggb2YgdGhl
IHVuaWZvcm0gdmFyaWFibGUgdG8gYmUgcXVlcmllZC4KKy8vIGxlbmd0aDogUmV0dXJucyB0aGUg
bnVtYmVyIG9mIGNoYXJhY3RlcnMgYWN0dWFsbHkgd3JpdHRlbiBpbiB0aGUgc3RyaW5nCisvLyAg
ICAgICAgIGluZGljYXRlZCBieSBuYW1lIChleGNsdWRpbmcgdGhlIG51bGwgdGVybWluYXRvcikg
aWYgYSB2YWx1ZQorLy8gICAgICAgICBvdGhlciB0aGFuIE5VTEwgaXMgcGFzc2VkLgorLy8gc2l6
ZTogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdW5pZm9ybSB2YXJpYWJsZS4KKy8vIHR5cGU6IFJl
dHVybnMgdGhlIGRhdGEgdHlwZSBvZiB0aGUgdW5pZm9ybSB2YXJpYWJsZS4KKy8vIG5hbWU6IFJl
dHVybnMgYSBudWxsIHRlcm1pbmF0ZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhl
CisvLyAgICAgICB1bmlmb3JtIHZhcmlhYmxlLiBJdCBpcyBhc3N1bWVkIHRoYXQgbmFtZSBoYXMg
ZW5vdWdoIG1lbW9yeSB0bworLy8gICAgICAgYWNjb21vZGF0ZSB0aGUgdW5pZm9ybSB2YXJpYWJs
ZSBuYW1lLiBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHJlcXVpcmVkCisvLyAgICAgICB0byBzdG9y
ZSB0aGUgdW5pZm9ybSB2YXJpYWJsZSBuYW1lIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nCisv
LyAgICAgICBTaEdldEluZm8gd2l0aCBTSF9BQ1RJVkVfVU5JRk9STVNfTUFYX0xFTkdUSC4KK3Zv
aWQgU2hHZXRBY3RpdmVVbmlmb3JtKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCogbGVu
Z3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBzaXplLAorICAgICAgICAgICAgICAg
ICAgICAgICAgU2hEYXRhVHlwZSogdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIq
IG5hbWUpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCShyZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMSwxNyArMTEsMjIgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGFyZy5o
PgogCisjaWZuZGVmIFRSQUNFX09VVFBVVF9GSUxFCisjZGVmaW5lIFRSQUNFX09VVFBVVF9GSUxF
ICJkZWJ1Zy50eHQiCisjZW5kaWYKKwogc3RhdGljIGJvb2wgdHJhY2Vfb24gPSB0cnVlOwogCiBu
YW1lc3BhY2UgZ2wKIHsKIHZvaWQgdHJhY2UoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7Cisj
aWYgIWRlZmluZWQoQU5HTEVfRElTQUJMRV9UUkFDRSkgCiAgICAgaWYgKHRyYWNlX29uKQogICAg
IHsKICAgICAgICAgaWYgKGZvcm1hdCkKICAgICAgICAgewotICAgICAgICAgICAgRklMRSAqZmls
ZSA9IGZvcGVuKCJkZWJ1Zy50eHQiLCAiYSIpOworICAgICAgICAgICAgRklMRSAqZmlsZSA9IGZv
cGVuKFRSQUNFX09VVFBVVF9GSUxFLCAiYSIpOwogCiAgICAgICAgICAgICBpZiAoZmlsZSkKICAg
ICAgICAgICAgIHsKQEAgLTM0LDUgKzM5LDYgQEAgdm9pZCB0cmFjZShjb25zdCBjaGFyICpmb3Jt
YXQsIC4uLikKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKyNlbmRpZiAvLyAhZGVm
aW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKQogfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbW1vbi9kZWJ1Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21tb24vZGVidWcuaAkocmV2aXNpb24gNzU4MDEpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcg
KzE5LDcgQEAgbmFtZXNwYWNlIGdsCiB9CiAKIC8vIEEgbWFjcm8gdG8gb3V0cHV0IGEgdHJhY2Ug
b2YgYSBmdW5jdGlvbiBjYWxsIGFuZCBpdHMgYXJndW1lbnRzIHRvIHRoZSBkZWJ1Z2dpbmcgbG9n
Ci0jaWZuZGVmIE5ERUJVRworI2lmICFkZWZpbmVkKE5ERUJVRykgJiYgIWRlZmluZWQoQU5HTEVf
RElTQUJMRV9UUkFDRSkgCiAgICAgI2RlZmluZSBUUkFDRShtZXNzYWdlLCAuLi4pIGdsOjp0cmFj
ZSgidHJhY2U6ICVzIm1lc3NhZ2UiXG4iLCBfX0ZVTkNUSU9OX18sIF9fVkFfQVJHU19fKQogI2Vs
c2UKICAgICAjZGVmaW5lIFRSQUNFKC4uLikgKCh2b2lkKTApCkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAJKHJldmlz
aW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVH
ZW5HTFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEsOSArMTEsOSBAQAogLy8gY29tcGlsZSBv
YmplY3QgdXNlZCBieSBoaWdoZXIgbGV2ZWwgY29kZS4gIEl0IHJldHVybnMKIC8vIGEgc3ViY2xh
c3Mgb2YgVENvbXBpbGVyLgogLy8KLVRDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFu
Z3VhZ2UgbGFuZ3VhZ2UsIEVTaFNwZWMgc3BlYykKK1RDb21waWxlciogQ29uc3RydWN0Q29tcGls
ZXIoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKQogewotICAgIHJldHVybiBu
ZXcgVHJhbnNsYXRvckdMU0wobGFuZ3VhZ2UsIHNwZWMpOworICAgIHJldHVybiBuZXcgVHJhbnNs
YXRvckdMU0wodHlwZSwgc3BlYyk7CiB9CiAKIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvQ29kZUdlbkhMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuSExTTC5jcHAJKHJldmlzaW9uIDc1
ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5ITFNM
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEsOSArMTEsOSBAQAogLy8gY29tcGlsZSBvYmplY3Qg
dXNlZCBieSBoaWdoZXIgbGV2ZWwgY29kZS4gIEl0IHJldHVybnMKIC8vIGEgc3ViY2xhc3Mgb2Yg
VENvbXBpbGVyLgogLy8KLVRDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ3VhZ2Ug
bGFuZ3VhZ2UsIEVTaFNwZWMgc3BlYykKK1RDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoU2hT
aGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKQogewotICAgIHJldHVybiBuZXcgVHJh
bnNsYXRvckhMU0wobGFuZ3VhZ2UsIHNwZWMpOworICAgIHJldHVybiBuZXcgVHJhbnNsYXRvckhM
U0wodHlwZSwgc3BlYyk7CiB9CiAKIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0NvbW1vbi5oCShyZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTQs
OSArMTQsMjQgQEAKIAogI2luY2x1ZGUgImNvbXBpbGVyL1Bvb2xBbGxvYy5oIgogCisvLyBXZSBu
ZWVkIHR3byBwaWVjZXMgb2YgaW5mb3JtYXRpb24gdG8gcmVwb3J0IGVycm9ycy93YXJuaW5ncyAt
IHN0cmluZyBhbmQKKy8vIGxpbmUgbnVtYmVyLiBXZSBlbmNvZGUgdGhlc2UgaW50byBhIHNpbmds
ZSBpbnQgc28gdGhhdCBpdCBjYW4gYmUgZWFzaWx5CisvLyBpbmNyZW1lbnRlZC9kZWNyZW1lbnRl
ZCBieSBsZXhlci4gVGhlIHJpZ2h0IFNPVVJDRV9MT0NfTElORV9TSVpFIGJpdHMgc3RvcmUKKy8v
IGxpbmUgbnVtYmVyIHdoaWxlIHRoZSByZXN0IHN0b3JlIHRoZSBzdHJpbmcgbnVtYmVyLiBTaW5j
ZSB0aGUgc2hhZGVycyBhcmUKKy8vIHVzdWFsbHkgc21hbGwsIHdlIHNob3VsZCBub3QgcnVuIG91
dCBvZiBtZW1vcnkuIFNPVVJDRV9MT0NfTElORV9TSVpFCisvLyBjYW4gYmUgaW5jcmVhc2VkIHRv
IGFsbGV2aWF0ZSB0aGlzIGlzc3VlLgogdHlwZWRlZiBpbnQgVFNvdXJjZUxvYzsKLWNvbnN0IHVu
c2lnbmVkIGludCBTb3VyY2VMb2NMaW5lTWFzayA9IDB4ZmZmZjsKLWNvbnN0IHVuc2lnbmVkIGlu
dCBTb3VyY2VMb2NTdHJpbmdTaGlmdCA9IDE2OworY29uc3QgdW5zaWduZWQgaW50IFNPVVJDRV9M
T0NfTElORV9TSVpFID0gMTY7ICAvLyBpbiBiaXRzLgorY29uc3QgdW5zaWduZWQgaW50IFNPVVJD
RV9MT0NfTElORV9NQVNLID0gKDEgPDwgU09VUkNFX0xPQ19MSU5FX1NJWkUpIC0gMTsKKworaW5s
aW5lIFRTb3VyY2VMb2MgRW5jb2RlU291cmNlTG9jKGludCBzdHJpbmcsIGludCBsaW5lKSB7Cisg
ICAgcmV0dXJuIChzdHJpbmcgPDwgU09VUkNFX0xPQ19MSU5FX1NJWkUpIHwgKGxpbmUgJiBTT1VS
Q0VfTE9DX0xJTkVfTUFTSyk7Cit9CisKK2lubGluZSB2b2lkIERlY29kZVNvdXJjZUxvYyhUU291
cmNlTG9jIGxvYywgaW50KiBzdHJpbmcsIGludCogbGluZSkgeworICAgIGlmIChzdHJpbmcpICpz
dHJpbmcgPSBsb2MgPj4gU09VUkNFX0xPQ19MSU5FX1NJWkU7CisgICAgaWYgKGxpbmUpICpsaW5l
ID0gbG9jICYgU09VUkNFX0xPQ19MSU5FX01BU0s7Cit9CiAKIC8vCiAvLyBQdXQgUE9PTF9BTExP
Q0FUT1JfTkVXX0RFTEVURSBpbiBiYXNlIGNsYXNzZXMgdG8gbWFrZSB0aGVtIHVzZSB0aGlzIHNj
aGVtZS4KQEAgLTcxLDYgKzg2LDQgQEAgcHVibGljOgogICAgIFRNYXAoY29uc3QgdEFsbG9jYXRv
ciYgYSkgOiBzdGQ6Om1hcDxLLCBELCBDTVAsIHRBbGxvY2F0b3I+KHN0ZDo6bWFwPEssIEQsIENN
UCwgdEFsbG9jYXRvcj46OmtleV9jb21wYXJlKCksIGEpIHt9CiB9OwogCi10eXBlZGVmIFRNYXA8
VFN0cmluZywgVFN0cmluZz4gVFByYWdtYVRhYmxlOwotCiAjZW5kaWYgLy8gX0NPTU1PTl9JTkNM
VURFRF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21waWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L0NvbXBpbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Db21waWxlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTg5IEBACisv
LworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZS5oIgorI2lu
Y2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvU2hIYW5k
bGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisKK25hbWVz
cGFjZSB7Citib29sIEluaXRpYWxpemVTeW1ib2xUYWJsZSgKKyAgICBjb25zdCBUQnVpbHRJblN0
cmluZ3MmIGJ1aWx0SW5TdHJpbmdzLAorICAgIFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNw
ZWMgc3BlYywgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMsCisgICAgVEluZm9T
aW5rJiBpbmZvU2luaywgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKK3sKKyAgICBUSW50ZXJt
ZWRpYXRlIGludGVybWVkaWF0ZShpbmZvU2luayk7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9yIGV4
dEJlaGF2aW9yOworICAgIFRQYXJzZUNvbnRleHQgcGFyc2VDb250ZXh0KHN5bWJvbFRhYmxlLCBl
eHRCZWhhdmlvciwgaW50ZXJtZWRpYXRlLCB0eXBlLCBzcGVjLCBpbmZvU2luayk7CisKKyAgICBH
bG9iYWxQYXJzZUNvbnRleHQgPSAmcGFyc2VDb250ZXh0OworCisgICAgYXNzZXJ0KHN5bWJvbFRh
YmxlLmlzRW1wdHkoKSk7ICAgICAgIAorICAgIC8vCisgICAgLy8gUGFyc2UgdGhlIGJ1aWx0LWlu
cy4gIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIG9uY2UgcGVyCisgICAgLy8gbGFuZ3VhZ2Ugc3lt
Ym9sIHRhYmxlLgorICAgIC8vCisgICAgLy8gUHVzaCB0aGUgc3ltYm9sIHRhYmxlIHRvIGdpdmUg
aXQgYW4gaW5pdGlhbCBzY29wZS4gIFRoaXMKKyAgICAvLyBwdXNoIHNob3VsZCBub3QgaGF2ZSBh
IGNvcnJlc3BvbmRpbmcgcG9wLCBzbyB0aGF0IGJ1aWx0LWlucworICAgIC8vIGFyZSBwcmVzZXJ2
ZWQsIGFuZCB0aGUgdGVzdCBmb3IgYW4gZW1wdHkgdGFibGUgZmFpbHMuCisgICAgLy8KKyAgICBz
eW1ib2xUYWJsZS5wdXNoKCk7CisKKyAgICBmb3IgKFRCdWlsdEluU3RyaW5nczo6Y29uc3RfaXRl
cmF0b3IgaSA9IGJ1aWx0SW5TdHJpbmdzLmJlZ2luKCk7IGkgIT0gYnVpbHRJblN0cmluZ3MuZW5k
KCk7ICsraSkKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIqIGJ1aWx0SW5TaGFkZXJzID0gaS0+
Y19zdHIoKTsKKyAgICAgICAgaW50IGJ1aWx0SW5MZW5ndGhzID0gc3RhdGljX2Nhc3Q8aW50Pihp
LT5zaXplKCkpOworICAgICAgICBpZiAoYnVpbHRJbkxlbmd0aHMgPD0gMCkKKyAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBpZiAoUGFQYXJzZVN0cmluZ3MoMSwgJmJ1aWx0SW5TaGFkZXJz
LCAmYnVpbHRJbkxlbmd0aHMsICZwYXJzZUNvbnRleHQpICE9IDApCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIlVuYWJs
ZSB0byBwYXJzZSBidWlsdC1pbnMiKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIElkZW50aWZ5QnVpbHRJbnModHlwZSwgc3BlYywgcmVzb3VyY2Vz
LCBzeW1ib2xUYWJsZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworY2xhc3MgVFNjb3BlZFBv
b2xBbGxvY2F0b3IgeworcHVibGljOgorICAgIFRTY29wZWRQb29sQWxsb2NhdG9yKFRQb29sQWxs
b2NhdG9yKiBhbGxvY2F0b3IsIGJvb2wgcHVzaFBvcCkKKyAgICAgICAgOiBtQWxsb2NhdG9yKGFs
bG9jYXRvciksIG1QdXNoUG9wQWxsb2NhdG9yKHB1c2hQb3ApIHsKKyAgICAgICAgaWYgKG1QdXNo
UG9wQWxsb2NhdG9yKSBtQWxsb2NhdG9yLT5wdXNoKCk7CisgICAgICAgIFNldEdsb2JhbFBvb2xB
bGxvY2F0b3IobUFsbG9jYXRvcik7CisgICAgfQorICAgIH5UU2NvcGVkUG9vbEFsbG9jYXRvcigp
IHsKKyAgICAgICAgU2V0R2xvYmFsUG9vbEFsbG9jYXRvcihOVUxMKTsKKyAgICAgICAgaWYgKG1Q
dXNoUG9wQWxsb2NhdG9yKSBtQWxsb2NhdG9yLT5wb3AoKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgVFBvb2xBbGxvY2F0b3IqIG1BbGxvY2F0b3I7CisgICAgYm9vbCBtUHVzaFBvcEFsbG9jYXRv
cjsKK307Cit9ICAvLyBuYW1lc3BhY2UKKworVFNoSGFuZGxlQmFzZTo6VFNoSGFuZGxlQmFzZSgp
IHsKKyAgICBhbGxvY2F0b3IucHVzaCgpOworICAgIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoJmFs
bG9jYXRvcik7Cit9CisKK1RTaEhhbmRsZUJhc2U6On5UU2hIYW5kbGVCYXNlKCkgeworICAgIFNl
dEdsb2JhbFBvb2xBbGxvY2F0b3IoTlVMTCk7CisgICAgYWxsb2NhdG9yLnBvcEFsbCgpOworfQor
CitUQ29tcGlsZXI6OlRDb21waWxlcihTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNw
ZWMpCisgICAgOiBzaGFkZXJUeXBlKHR5cGUpLAorICAgICAgc2hhZGVyU3BlYyhzcGVjKSAKK3sK
K30KKworVENvbXBpbGVyOjp+VENvbXBpbGVyKCkKK3sKK30KKworYm9vbCBUQ29tcGlsZXI6Oklu
aXQoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpCit7CisgICAgVFNjb3BlZFBv
b2xBbGxvY2F0b3Igc2NvcGVkQWxsb2MoJmFsbG9jYXRvciwgZmFsc2UpOworCisgICAgLy8gR2Vu
ZXJhdGUgYnVpbHQtaW4gc3ltYm9sIHRhYmxlLgorICAgIGlmICghSW5pdEJ1aWx0SW5TeW1ib2xU
YWJsZShyZXNvdXJjZXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgSW5pdEV4dGVuc2lv
bkJlaGF2aW9yKHJlc291cmNlcywgZXh0ZW5zaW9uQmVoYXZpb3IpOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjpjb21waWxlKGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRl
clN0cmluZ3NbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBudW1TdHJpbmdz
LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXBpbGVPcHRpb25zKQoreworICAgIFRT
Y29wZWRQb29sQWxsb2NhdG9yIHNjb3BlZEFsbG9jKCZhbGxvY2F0b3IsIHRydWUpOworICAgIGNs
ZWFyUmVzdWx0cygpOworCisgICAgaWYgKG51bVN0cmluZ3MgPT0gMCkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAvLyBJZiBjb21waWxpbmcgZm9yIFdlYkdMLCB2YWxpZGF0ZSBsb29wIGFu
ZCBpbmRleGluZyBhcyB3ZWxsLgorICAgIGlmIChzaGFkZXJTcGVjID09IFNIX1dFQkdMX1NQRUMp
CisgICAgICAgIGNvbXBpbGVPcHRpb25zIHw9IFNIX1ZBTElEQVRFX0xPT1BfSU5ERVhJTkc7CisK
KyAgICBUSW50ZXJtZWRpYXRlIGludGVybWVkaWF0ZShpbmZvU2luayk7CisgICAgVFBhcnNlQ29u
dGV4dCBwYXJzZUNvbnRleHQoc3ltYm9sVGFibGUsIGV4dGVuc2lvbkJlaGF2aW9yLCBpbnRlcm1l
ZGlhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hhZGVyVHlwZSwgc2hhZGVy
U3BlYywgaW5mb1NpbmspOworICAgIEdsb2JhbFBhcnNlQ29udGV4dCA9ICZwYXJzZUNvbnRleHQ7
CisKKyAgICAvLyBXZSBwcmVzZXJ2ZSBzeW1ib2xzIGF0IHRoZSBidWlsdC1pbiBsZXZlbCBmcm9t
IGNvbXBpbGUtdG8tY29tcGlsZS4KKyAgICAvLyBTdGFydCBwdXNoaW5nIHRoZSB1c2VyLWRlZmlu
ZWQgc3ltYm9scyBhdCBnbG9iYWwgbGV2ZWwuCisgICAgc3ltYm9sVGFibGUucHVzaCgpOworICAg
IGlmICghc3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpKQorICAgICAgICBpbmZvU2luay5pbmZv
Lm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3IsICJXcm9uZyBzeW1ib2wgdGFibGUgbGV2ZWwi
KTsKKworICAgIC8vIFBhcnNlIHNoYWRlci4KKyAgICBib29sIHN1Y2Nlc3MgPQorICAgICAgICAo
UGFQYXJzZVN0cmluZ3MobnVtU3RyaW5ncywgc2hhZGVyU3RyaW5ncywgTlVMTCwgJnBhcnNlQ29u
dGV4dCkgPT0gMCkgJiYKKyAgICAgICAgKHBhcnNlQ29udGV4dC50cmVlUm9vdCAhPSBOVUxMKTsK
KyAgICBpZiAoc3VjY2VzcykgeworICAgICAgICBUSW50ZXJtTm9kZSogcm9vdCA9IHBhcnNlQ29u
dGV4dC50cmVlUm9vdDsKKyAgICAgICAgc3VjY2VzcyA9IGludGVybWVkaWF0ZS5wb3N0UHJvY2Vz
cyhyb290KTsKKworICAgICAgICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9W
QUxJREFURV9MT09QX0lOREVYSU5HKSkKKyAgICAgICAgICAgIHN1Y2Nlc3MgPSB2YWxpZGF0ZUxp
bWl0YXRpb25zKHJvb3QpOworCisgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9u
cyAmIFNIX0lOVEVSTUVESUFURV9UUkVFKSkKKyAgICAgICAgICAgIGludGVybWVkaWF0ZS5vdXRw
dXRUcmVlKHJvb3QpOworCisgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAm
IFNIX09CSkVDVF9DT0RFKSkKKyAgICAgICAgICAgIHRyYW5zbGF0ZShyb290KTsKKworICAgICAg
ICBpZiAoc3VjY2VzcyAmJiAoY29tcGlsZU9wdGlvbnMgJiBTSF9BVFRSSUJVVEVTX1VOSUZPUk1T
KSkKKyAgICAgICAgICAgIGNvbGxlY3RBdHRyaWJzVW5pZm9ybXMocm9vdCk7CisgICAgfQorCisg
ICAgLy8gQ2xlYW51cCBtZW1vcnkuCisgICAgaW50ZXJtZWRpYXRlLnJlbW92ZShwYXJzZUNvbnRl
eHQudHJlZVJvb3QpOworICAgIC8vIEVuc3VyZSBzeW1ib2wgdGFibGUgaXMgcmV0dXJuZWQgdG8g
dGhlIGJ1aWx0LWluIGxldmVsLAorICAgIC8vIHRocm93aW5nIGF3YXkgYWxsIGJ1dCB0aGUgYnVp
bHQtaW5zLgorICAgIHdoaWxlICghc3ltYm9sVGFibGUuYXRCdWlsdEluTGV2ZWwoKSkKKyAgICAg
ICAgc3ltYm9sVGFibGUucG9wKCk7CisKKyAgICByZXR1cm4gc3VjY2VzczsKK30KKworYm9vbCBU
Q29tcGlsZXI6OkluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hCdWlsdEluUmVzb3VyY2Vz
JiByZXNvdXJjZXMpCit7CisgICAgVEJ1aWx0SW5zIGJ1aWx0SW5zOworCisgICAgYnVpbHRJbnMu
aW5pdGlhbGl6ZShzaGFkZXJUeXBlLCBzaGFkZXJTcGVjLCByZXNvdXJjZXMpOworICAgIHJldHVy
biBJbml0aWFsaXplU3ltYm9sVGFibGUoYnVpbHRJbnMuZ2V0QnVpbHRJblN0cmluZ3MoKSwKKyAg
ICAgICAgc2hhZGVyVHlwZSwgc2hhZGVyU3BlYywgcmVzb3VyY2VzLCBpbmZvU2luaywgc3ltYm9s
VGFibGUpOworfQorCit2b2lkIFRDb21waWxlcjo6Y2xlYXJSZXN1bHRzKCkKK3sKKyAgICBpbmZv
U2luay5pbmZvLmVyYXNlKCk7CisgICAgaW5mb1Npbmsub2JqLmVyYXNlKCk7CisgICAgaW5mb1Np
bmsuZGVidWcuZXJhc2UoKTsKKworICAgIGF0dHJpYnMuY2xlYXIoKTsKKyAgICB1bmlmb3Jtcy5j
bGVhcigpOworfQorCitib29sIFRDb21waWxlcjo6dmFsaWRhdGVMaW1pdGF0aW9ucyhUSW50ZXJt
Tm9kZSogcm9vdCkgeworICAgIFZhbGlkYXRlTGltaXRhdGlvbnMgdmFsaWRhdGUoc2hhZGVyVHlw
ZSwgaW5mb1NpbmsuaW5mbyk7CisgICAgcm9vdC0+dHJhdmVyc2UoJnZhbGlkYXRlKTsKKyAgICBy
ZXR1cm4gdmFsaWRhdGUubnVtRXJyb3JzKCkgPT0gMDsKK30KKwordm9pZCBUQ29tcGlsZXI6OmNv
bGxlY3RBdHRyaWJzVW5pZm9ybXMoVEludGVybU5vZGUqIHJvb3QpCit7CisgICAgQ29sbGVjdEF0
dHJpYnNVbmlmb3JtcyBjb2xsZWN0KGF0dHJpYnMsIHVuaWZvcm1zKTsKKyAgICByb290LT50cmF2
ZXJzZSgmY29sbGVjdCk7Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAy
LTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaWZu
ZGVmIF9FWFRFTlNJT05fQkVIQVZJT1JfSU5DTFVERURfCisjZGVmaW5lIF9FWFRFTlNJT05fQkVI
QVZJT1JfSU5DTFVERURfCisKKyNpbmNsdWRlICJjb21waWxlci9Db21tb24uaCIKKwordHlwZWRl
ZiBlbnVtIHsKKyAgICBFQmhSZXF1aXJlLAorICAgIEVCaEVuYWJsZSwKKyAgICBFQmhXYXJuLAor
ICAgIEVCaERpc2FibGUKK30gVEJlaGF2aW9yOworCit0eXBlZGVmIFRNYXA8VFN0cmluZywgVEJl
aGF2aW9yPiBURXh0ZW5zaW9uQmVoYXZpb3I7CisKKyNlbmRpZiAvLyBfRVhURU5TSU9OX1RBQkxF
X0lOQ0xVREVEXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
Zm9TaW5rLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvSW5mb1NpbmsuY3BwCShyZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9JbmZvU2luay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDgg
KzMyLDggQEAgdm9pZCBUSW5mb1NpbmtCYXNlOjpwcmVmaXgoVFByZWZpeFR5cGUgbQogfQogCiB2
b2lkIFRJbmZvU2lua0Jhc2U6OmxvY2F0aW9uKFRTb3VyY2VMb2MgbG9jKSB7Ci0gICAgaW50IHN0
cmluZyA9IGxvYyA+PiBTb3VyY2VMb2NTdHJpbmdTaGlmdDsKLSAgICBpbnQgbGluZSA9IGxvYyAm
IFNvdXJjZUxvY0xpbmVNYXNrOworICAgIGludCBzdHJpbmcgPSAwLCBsaW5lID0gMDsKKyAgICBE
ZWNvZGVTb3VyY2VMb2MobG9jLCAmc3RyaW5nLCAmbGluZSk7CiAKICAgICBUUGVyc2lzdFN0cmlu
Z1N0cmVhbSBzdHJlYW07CiAgICAgaWYgKGxpbmUpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuaAkocmV2aXNpb24gNzU4MDEpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuaAkod29ya2luZyBj
b3B5KQpAQCAtOTEsNiArOTEsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBlcmFzZSgp
IHsgc2luay5jbGVhcigpOyB9CisgICAgaW50IHNpemUoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxp
bnQ+KHNpbmsuc2l6ZSgpKTsgfQogCiAgICAgY29uc3QgVFBlcnNpc3RTdHJpbmcmIHN0cigpIGNv
bnN0IHsgcmV0dXJuIHNpbms7IH0KICAgICBjb25zdCBjaGFyKiBjX3N0cigpIGNvbnN0IHsgcmV0
dXJuIHNpbmsuY19zdHIoKTsgfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0luaXRpYWxpemUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXplLmNwcAkocmV2aXNpb24gNzU4MDEpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxMSwxNSArMzExLDYgQEAgc3RhdGljIFRTdHJpbmcgQnVpbHRJbkZ1bmN0aW9u
c0NvbW1vbigpCiAgICAgcy5hcHBlbmQoVFN0cmluZygiYnZlYzQgbm90KGJ2ZWM0IHgpOyIpKTsK
IAogICAgIC8vCi0gICAgLy8gVGV4dHVyZSBGdW5jdGlvbnMuCi0gICAgLy8KLSAgICBzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRChzYW1wbGVyMkQgc2FtcGxlciwgdmVjMiBjb29yZCk7
IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQg
c2FtcGxlciwgdmVjMyBjb29yZCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4
dHVyZTJEUHJvaihzYW1wbGVyMkQgc2FtcGxlciwgdmVjNCBjb29yZCk7IikpOwotCi0gICAgcy5h
cHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlQ3ViZShzYW1wbGVyQ3ViZSBzYW1wbGVyLCB2ZWMz
IGNvb3JkKTsiKSk7Ci0KLSAgICAvLwogICAgIC8vIE5vaXNlIGZ1bmN0aW9ucy4KICAgICAvLwog
ICAgIC8vcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgbm9pc2UxKGZsb2F0IHgpOyIpKTsKQEAgLTM0
Miw3ICszMzMsNiBAQCBzdGF0aWMgVFN0cmluZyBCdWlsdEluRnVuY3Rpb25zQ29tbW9uKCkKICAg
ICAvL3MuYXBwZW5kKFRTdHJpbmcoInZlYzQgbm9pc2U0KHZlYzMgIHgpOyIpKTsKICAgICAvL3Mu
YXBwZW5kKFRTdHJpbmcoInZlYzQgbm9pc2U0KHZlYzQgIHgpOyIpKTsKIAotICAgIHMuYXBwZW5k
KFRTdHJpbmcoIlxuIikpOwogICAgIHJldHVybiBzOwogfQogCkBAIC0zNTEsNyArMzQxLDcgQEAg
c3RhdGljIFRTdHJpbmcgQnVpbHRJbkZ1bmN0aW9uc0NvbW1vbigpCiAvLyBQcm90b3R5cGVzIGZv
ciBidWlsdC1pbiBmdW5jdGlvbnMgc2VlbiBieSB2ZXJ0ZXggc2hhZGVycyBvbmx5LgogLy8KIC8v
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotc3RhdGljIFRTdHJpbmcgQnVpbHRJbkZ1bmN0aW9uc1ZlcnRl
eCgpCitzdGF0aWMgVFN0cmluZyBCdWlsdEluRnVuY3Rpb25zVmVydGV4KGNvbnN0IFNoQnVpbHRJ
blJlc291cmNlcyYgcmVzb3VyY2VzKQogewogICAgIFRTdHJpbmcgczsKIApAQCAtMzYzLDEyICsz
NTMsMTggQEAgc3RhdGljIFRTdHJpbmcgQnVpbHRJbkZ1bmN0aW9uc1ZlcnRleCgpCiAgICAgLy8K
ICAgICAvLyBUZXh0dXJlIEZ1bmN0aW9ucy4KICAgICAvLwotICAgIHMuYXBwZW5kKFRTdHJpbmco
InZlYzQgdGV4dHVyZTJETG9kKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMyIGNvb3JkLCBmbG9hdCBs
b2QpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFByb2pMb2Qoc2Ft
cGxlcjJEIHNhbXBsZXIsIHZlYzMgY29vcmQsIGZsb2F0IGxvZCk7IikpOwotICAgIHMuYXBwZW5k
KFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJvakxvZChzYW1wbGVyMkQgc2FtcGxlciwgdmVjNCBj
b29yZCwgZmxvYXQgbG9kKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJl
Q3ViZUxvZChzYW1wbGVyQ3ViZSBzYW1wbGVyLCB2ZWMzIGNvb3JkLCBmbG9hdCBsb2QpOyIpKTsK
KyAgICBpZiAocmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID4gMCkgeworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRChzYW1wbGVyMkQgc2FtcGxlciwg
dmVjMiBjb29yZCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUy
RFByb2ooc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzMgY29vcmQpOyIpKTsKKyAgICAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWM0IGNv
b3JkKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZUN1YmUoc2Ft
cGxlckN1YmUgc2FtcGxlciwgdmVjMyBjb29yZCk7IikpOworCisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoInZlYzQgdGV4dHVyZTJETG9kKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMyIGNvb3JkLCBm
bG9hdCBsb2QpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQ
cm9qTG9kKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMzIGNvb3JkLCBmbG9hdCBsb2QpOyIpKTsKKyAg
ICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBz
YW1wbGVyLCB2ZWM0IGNvb3JkLCBmbG9hdCBsb2QpOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjNCB0ZXh0dXJlQ3ViZUxvZChzYW1wbGVyQ3ViZSBzYW1wbGVyLCB2ZWMzIGNvb3Jk
LCBmbG9hdCBsb2QpOyIpKTsKKyAgICB9CiAKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJcbiIpKTsK
ICAgICByZXR1cm4gczsKIH0KIApAQCAtMzc3LDM0ICszNzMsNDAgQEAgc3RhdGljIFRTdHJpbmcg
QnVpbHRJbkZ1bmN0aW9uc1ZlcnRleCgpCiAvLyBQcm90b3R5cGVzIGZvciBidWlsdC1pbiBmdW5j
dGlvbnMgc2VlbiBieSBmcmFnbWVudCBzaGFkZXJzIG9ubHkuCiAvLwogLy89PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci1zdGF0aWMgVFN0cmluZyBCdWlsdEluRnVuY3Rpb25zRnJhZ21lbnQoKQorc3RhdGlj
IFRTdHJpbmcgQnVpbHRJbkZ1bmN0aW9uc0ZyYWdtZW50KGNvbnN0IFNoQnVpbHRJblJlc291cmNl
cyYgcmVzb3VyY2VzKQogewogICAgIFRTdHJpbmcgczsKIAogICAgIC8vCiAgICAgLy8gVGV4dHVy
ZSBGdW5jdGlvbnMuCiAgICAgLy8KKyAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUy
RChzYW1wbGVyMkQgc2FtcGxlciwgdmVjMiBjb29yZCk7IikpOworICAgIHMuYXBwZW5kKFRTdHJp
bmcoInZlYzQgdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgc2FtcGxlciwgdmVjMyBjb29yZCk7Iikp
OworICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJvaihzYW1wbGVyMkQgc2Ft
cGxlciwgdmVjNCBjb29yZCk7IikpOworICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVy
ZUN1YmUoc2FtcGxlckN1YmUgc2FtcGxlciwgdmVjMyBjb29yZCk7IikpOworCiAgICAgcy5hcHBl
bmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkQoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzIgY29vcmQs
IGZsb2F0IGJpYXMpOyIpKTsKICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFBy
b2ooc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzMgY29vcmQsIGZsb2F0IGJpYXMpOyIpKTsKICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFByb2ooc2FtcGxlcjJEIHNhbXBsZXIsIHZl
YzQgY29vcmQsIGZsb2F0IGJpYXMpOyIpKTsKICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRl
eHR1cmVDdWJlKHNhbXBsZXJDdWJlIHNhbXBsZXIsIHZlYzMgY29vcmQsIGZsb2F0IGJpYXMpOyIp
KTsKIAotICAgIC8vcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZEZkeChmbG9hdCBwKTsiKSk7Ci0g
ICAgLy9zLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBkRmR4KHZlYzIgIHApOyIpKTsKLSAgICAvL3Mu
YXBwZW5kKFRTdHJpbmcoInZlYzMgIGRGZHgodmVjMyAgcCk7IikpOwotICAgIC8vcy5hcHBlbmQo
VFN0cmluZygidmVjNCAgZEZkeCh2ZWM0ICBwKTsiKSk7Ci0KLSAgICAvL3MuYXBwZW5kKFRTdHJp
bmcoImZsb2F0IGRGZHkoZmxvYXQgcCk7IikpOwotICAgIC8vcy5hcHBlbmQoVFN0cmluZygidmVj
MiAgZEZkeSh2ZWMyICBwKTsiKSk7Ci0gICAgLy9zLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBkRmR5
KHZlYzMgIHApOyIpKTsKLSAgICAvL3MuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGRGZHkodmVjNCAg
cCk7IikpOwotCi0gICAgcy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZndpZHRoKGZsb2F0IHApOyIp
KTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBmd2lkdGgodmVjMiAgcCk7IikpOwotICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGZ3aWR0aCh2ZWMzICBwKTsiKSk7Ci0gICAgcy5hcHBl
bmQoVFN0cmluZygidmVjNCAgZndpZHRoKHZlYzQgIHApOyIpKTsKKyAgICBpZiAocmVzb3VyY2Vz
Lk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykgeworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJm
bG9hdCBkRmR4KGZsb2F0IHApOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAg
ZEZkeCh2ZWMyICBwKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGRGZHgo
dmVjMyAgcCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBkRmR4KHZlYzQg
IHApOyIpKTsKKworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkRmR5KGZsb2F0IHAp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZEZkeSh2ZWMyICBwKTsiKSk7
CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzMgIGRGZHkodmVjMyAgcCk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBkRmR5KHZlYzQgIHApOyIpKTsKKworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBmd2lkdGgoZmxvYXQgcCk7IikpOworICAgICAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBmd2lkdGgodmVjMiAgcCk7IikpOworICAgICAgICBzLmFw
cGVuZChUU3RyaW5nKCJ2ZWMzICBmd2lkdGgodmVjMyAgcCk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWM0ICBmd2lkdGgodmVjNCAgcCk7IikpOworICAgIH0KIAotICAgIHMuYXBw
ZW5kKFRTdHJpbmcoIlxuIikpOwogICAgIHJldHVybiBzOwogfQogCkBAIC00MjcsNyArNDI5LDYg
QEAgc3RhdGljIFRTdHJpbmcgU3RhbmRhcmRVbmlmb3JtcygpCiAgICAgcy5hcHBlbmQoVFN0cmlu
ZygifTsiKSk7CiAgICAgcy5hcHBlbmQoVFN0cmluZygidW5pZm9ybSBnbF9EZXB0aFJhbmdlUGFy
YW1ldGVycyBnbF9EZXB0aFJhbmdlOyIpKTsKIAotICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikp
OwogICAgIHJldHVybiBzOwogfQogCkBAIC00NDMsNyArNDQ0LDYgQEAgc3RhdGljIFRTdHJpbmcg
RGVmYXVsdFByZWNpc2lvblZlcnRleCgpCiAgICAgcy5hcHBlbmQoVFN0cmluZygicHJlY2lzaW9u
IGhpZ2hwIGludDsiKSk7CiAgICAgcy5hcHBlbmQoVFN0cmluZygicHJlY2lzaW9uIGhpZ2hwIGZs
b2F0OyIpKTsKIAotICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikpOwogICAgIHJldHVybiBzOwog
fQogCkBAIC00NTksNyArNDU5LDYgQEAgc3RhdGljIFRTdHJpbmcgRGVmYXVsdFByZWNpc2lvbkZy
YWdtZW50KAogICAgIHMuYXBwZW5kKFRTdHJpbmcoInByZWNpc2lvbiBtZWRpdW1wIGludDsiKSk7
CiAgICAgLy8gTm8gZGVmYXVsdCBwcmVjaXNpb24gZm9yIGZsb2F0IGluIGZyYWdtZW50IHNoYWRl
cnMKIAotICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikpOwogICAgIHJldHVybiBzOwogfQogCkBA
IC00NjgsNyArNDY3LDcgQEAgc3RhdGljIFRTdHJpbmcgRGVmYXVsdFByZWNpc2lvbkZyYWdtZW50
KAogLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1aWx0LWluIGNvbnN0YW50cy4KIC8vCiAv
Lz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUU3RyaW5nIEJ1aWx0SW5Db25zdGFudHMoY29u
c3QgVEJ1aWx0SW5SZXNvdXJjZSAmcmVzb3VyY2VzKQorc3RhdGljIFRTdHJpbmcgQnVpbHRJbkNv
bnN0YW50cyhjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMgJnJlc291cmNlcykKIHsKICAgICBUU3Ry
aW5nU3RyZWFtIHM7CiAKQEAgLTQ4NSwyMCArNDg0LDIxIEBAIHN0YXRpYyBUU3RyaW5nIEJ1aWx0
SW5Db25zdGFudHMoY29uc3QgVEIKICAgICByZXR1cm4gcy5zdHIoKTsKIH0KIAotdm9pZCBUQnVp
bHRJbnM6OmluaXRpYWxpemUoRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UsIEVTaFNwZWMgc3BlYywgY29u
c3QgVEJ1aWx0SW5SZXNvdXJjZSYgcmVzb3VyY2VzKQordm9pZCBUQnVpbHRJbnM6OmluaXRpYWxp
emUoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpCiB7Ci0gICAg
c3dpdGNoIChsYW5ndWFnZSkgewotICAgIGNhc2UgRVNoTGFuZ0ZyYWdtZW50OgorICAgIHN3aXRj
aCAodHlwZSkgeworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgogICAgICAgICBidWlsdElu
U3RyaW5ncy5wdXNoX2JhY2soRGVmYXVsdFByZWNpc2lvbkZyYWdtZW50KCkpOwogICAgICAgICBi
dWlsdEluU3RyaW5ncy5wdXNoX2JhY2soQnVpbHRJbkZ1bmN0aW9uc0NvbW1vbigpKTsKLSAgICAg
ICAgYnVpbHRJblN0cmluZ3MucHVzaF9iYWNrKEJ1aWx0SW5GdW5jdGlvbnNGcmFnbWVudCgpKTsK
KyAgICAgICAgYnVpbHRJblN0cmluZ3MucHVzaF9iYWNrKEJ1aWx0SW5GdW5jdGlvbnNGcmFnbWVu
dChyZXNvdXJjZXMpKTsKICAgICAgICAgYnVpbHRJblN0cmluZ3MucHVzaF9iYWNrKFN0YW5kYXJk
VW5pZm9ybXMoKSk7CiAgICAgICAgIGJyZWFrOwogCi0gICAgY2FzZSBFU2hMYW5nVmVydGV4Ogor
ICAgIGNhc2UgU0hfVkVSVEVYX1NIQURFUjoKICAgICAgICAgYnVpbHRJblN0cmluZ3MucHVzaF9i
YWNrKERlZmF1bHRQcmVjaXNpb25WZXJ0ZXgoKSk7CiAgICAgICAgIGJ1aWx0SW5TdHJpbmdzLnB1
c2hfYmFjayhCdWlsdEluRnVuY3Rpb25zQ29tbW9uKCkpOwotICAgICAgICBidWlsdEluU3RyaW5n
cy5wdXNoX2JhY2soQnVpbHRJbkZ1bmN0aW9uc1ZlcnRleCgpKTsKKyAgICAgICAgYnVpbHRJblN0
cmluZ3MucHVzaF9iYWNrKEJ1aWx0SW5GdW5jdGlvbnNWZXJ0ZXgocmVzb3VyY2VzKSk7CiAgICAg
ICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhTdGFuZGFyZFVuaWZvcm1zKCkpOwogICAgICAg
ICBicmVhazsKIApAQCAtNTA4LDE0ICs1MDgsMTYgQEAgdm9pZCBUQnVpbHRJbnM6OmluaXRpYWxp
emUoRVNoTGFuZ3VhZ2UgbAogICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhCdWlsdEluQ29u
c3RhbnRzKHJlc291cmNlcykpOwogfQogCi12b2lkIElkZW50aWZ5QnVpbHRJbnMoRVNoTGFuZ3Vh
Z2UgbGFuZ3VhZ2UsIEVTaFNwZWMgc3BlYywgY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSYgcmVzb3Vy
Y2VzLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQordm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNo
U2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKKyAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcywKKyAgICAgICAgICAgICAgICAg
ICAgICBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQogewogICAgIC8vCiAgICAgLy8gRmlyc3Qs
IGluc2VydCBzb21lIHNwZWNpYWwgYnVpbHQtaW4gdmFyaWFibGVzIHRoYXQgYXJlIG5vdCBpbiAK
ICAgICAvLyB0aGUgYnVpbHQtaW4gaGVhZGVyIGZpbGVzLgogICAgIC8vCi0gICAgc3dpdGNoKGxh
bmd1YWdlKSB7Ci0gICAgY2FzZSBFU2hMYW5nRnJhZ21lbnQ6CisgICAgc3dpdGNoKHR5cGUpIHsK
KyAgICBjYXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0
KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5nKCJnbF9GcmFnQ29vcmQiKSwgICAgICAgICAg
ICAgICAgICAgVFR5cGUoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Nvb3JkLCAgIDQpKSk7
CiAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmlu
ZygiZ2xfRnJvbnRGYWNpbmciKSwgICAgICAgICAgICAgICAgIFRUeXBlKEVidEJvb2wsICBFYnBV
bmRlZmluZWQsIEV2cUZyb250RmFjaW5nLCAxKSkpOwogICAgICAgICBzeW1ib2xUYWJsZS5pbnNl
cnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb2xvciIpLCAgICAgICAg
ICAgICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29sb3IsICAgNCkp
KTsKQEAgLTUyMyw3ICs1MjUsNyBAQCB2b2lkIElkZW50aWZ5QnVpbHRJbnMoRVNoTGFuZ3VhZ2Ug
bGFuZ3VhCiAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29s
VFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAgIFRUeXBlKEVidEZsb2F0
LCBFYnBNZWRpdW0sIEV2cVBvaW50Q29vcmQsICAyKSkpOwogICAgICAgICBicmVhazsKIAotICAg
IGNhc2UgRVNoTGFuZ1ZlcnRleDoKKyAgICBjYXNlIFNIX1ZFUlRFWF9TSEFERVI6CiAgICAgICAg
IHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9z
aXRpb24iKSwgICAgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cVBvc2l0aW9uLCAgICA0KSkp
OwogICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJp
bmcoImdsX1BvaW50U2l6ZSIpLCAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50
U2l6ZSwgICAxKSkpOwogICAgICAgICBicmVhazsKQEAgLTU5MSwyMCArNTkzLDI2IEBAIHZvaWQg
SWRlbnRpZnlCdWlsdElucyhFU2hMYW5ndWFnZSBsYW5ndWEKICAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb09wZXJhdG9yKCJhbGwiLCAgICAgICAgICBFT3BBbGwpOwogCiAgICAgLy8gTWFwIGxhbmd1
YWdlLXNwZWNpZmljIG9wZXJhdG9ycy4KLSAgICBzd2l0Y2gobGFuZ3VhZ2UpIHsKLSAgICBjYXNl
IEVTaExhbmdWZXJ0ZXg6CisgICAgc3dpdGNoKHR5cGUpIHsKKyAgICBjYXNlIFNIX1ZFUlRFWF9T
SEFERVI6CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgRVNoTGFuZ0ZyYWdtZW50OgotICAgICAg
ICAvL3N5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHgiLCAgIEVPcERQZHgpOyAgICAv
LyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCi0gICAgICAgIC8vc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeSIsICAgRU9wRFBkeSk7ICAgIC8vIE9FU19zdGFuZGFy
ZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KLSAgICAgICAgLy9zeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJmd2lkdGgiLCBFT3BGd2lkdGgpOyAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVz
IGV4dGVuc2lvbgorICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgorICAgICAgICBpZiAocmVz
b3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykgeworICAgICAgICAgICAgc3ltYm9sVGFi
bGUucmVsYXRlVG9PcGVyYXRvcigiZEZkeCIsICAgRU9wREZkeCk7CisgICAgICAgICAgICBzeW1i
b2xUYWJsZS5yZWxhdGVUb09wZXJhdG9yKCJkRmR5IiwgICBFT3BERmR5KTsKKyAgICAgICAgICAg
IHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImZ3aWR0aCIsIEVPcEZ3aWR0aCk7CisKKyAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJkRmR4IiwgIkdMX09FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9F
eHRlbnNpb24oImRGZHkiLCAiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7CisgICAgICAg
ICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb0V4dGVuc2lvbigiZndpZHRoIiwgIkdMX09FU19zdGFu
ZGFyZF9kZXJpdmF0aXZlcyIpOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6IGJyZWFrOwogICAgIH0KIAogICAgIC8vIEZpbmFsbHkgYWRkIHJlc291cmNlLXNwZWNpZmlj
IHZhcmlhYmxlcy4KLSAgICBzd2l0Y2gobGFuZ3VhZ2UpIHsKLSAgICBjYXNlIEVTaExhbmdGcmFn
bWVudDogeworICAgIHN3aXRjaCh0eXBlKSB7CisgICAgY2FzZSBTSF9GUkFHTUVOVF9TSEFERVI6
IHsKICAgICAgICAgICAgIC8vIFNldCB1cCBnbF9GcmFnRGF0YS4gIFRoZSBhcnJheSBzaXplLgog
ICAgICAgICAgICAgVFR5cGUgZnJhZ0RhdGEoRWJ0RmxvYXQsIEVicE1lZGl1bSwgRXZxRnJhZ0Nv
bG9yLCAgIDQsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgICAgIGZyYWdEYXRhLnNldEFycmF5U2l6
ZShyZXNvdXJjZXMuTWF4RHJhd0J1ZmZlcnMpOwpAQCAtNjE1LDMgKzYyMyw5IEBAIHZvaWQgSWRl
bnRpZnlCdWlsdElucyhFU2hMYW5ndWFnZSBsYW5ndWEKICAgICB9CiB9CiAKK3ZvaWQgSW5pdEV4
dGVuc2lvbkJlaGF2aW9yKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRCZWhhdmlvcikK
K3sKKyAgICBpZiAocmVzb3VyY2VzLk9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcykKKyAgICAgICAg
ZXh0QmVoYXZpb3JbIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyJdID0gRUJoRGlzYWJsZTsK
K30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Jbml0aWFsaXpl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
aXRpYWxpemUuaAkocmV2aXNpb24gNzU4MDEpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNywxNyArMTcsMTkg
QEAgY2xhc3MgVEJ1aWx0SW5zIHsKIHB1YmxpYzoKICAgICBQT09MX0FMTE9DQVRPUl9ORVdfREVM
RVRFKEdsb2JhbFBvb2xBbGxvY2F0b3IpCiAKLSAgICB2b2lkIGluaXRpYWxpemUoRVNoTGFuZ3Vh
Z2UgbGFuZ3VhZ2UsIEVTaFNwZWMgc3BlYywgY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSYgcmVzb3Vy
Y2VzKTsKKyAgICB2b2lkIGluaXRpYWxpemUoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3Bl
YyBzcGVjLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJl
c291cmNlcyk7CiAgICAgY29uc3QgVEJ1aWx0SW5TdHJpbmdzJiBnZXRCdWlsdEluU3RyaW5ncygp
IHsgcmV0dXJuIGJ1aWx0SW5TdHJpbmdzOyB9CiAKIHByb3RlY3RlZDoKICAgICBUQnVpbHRJblN0
cmluZ3MgYnVpbHRJblN0cmluZ3M7CiB9OwogCi12b2lkIElkZW50aWZ5QnVpbHRJbnMoRVNoTGFu
Z3VhZ2UgbGFuZ3VhZ2UsIEVTaFNwZWMgc3BlYywgY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSYgcmVz
b3VyY2VzLAordm9pZCBJZGVudGlmeUJ1aWx0SW5zKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRl
clNwZWMgc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTaEJ1aWx0SW5SZXNvdXJj
ZXMmIHJlc291cmNlcywKICAgICAgICAgICAgICAgICAgICAgICBUU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlKTsKIAotZXh0ZXJuICJDIiBpbnQgSW5pdFByZXByb2Nlc3Nvcih2b2lkKTsKLWV4dGVy
biAiQyIgaW50IEZpbmFsaXplUHJlcHJvY2Vzc29yKHZvaWQpOwordm9pZCBJbml0RXh0ZW5zaW9u
QmVoYXZpb3IoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dGVuc2lvbkJlaGF2aW9yKTsK
IAogI2VuZGlmIC8vIF9JTklUSUFMSVpFX0lOQ0xVREVEXwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtVHJhdmVyc2UuY3BwCShy
ZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9J
bnRlcm1UcmF2ZXJzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyOSw5ICsyMjksOSBAQCB2b2lk
IFRJbnRlcm1Mb29wOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyCiAKIAkJaWYoaXQtPnJpZ2h0VG9M
ZWZ0KQogCQl7Ci0JCQlpZih0ZXJtaW5hbCkKKwkJCWlmKGV4cHIpCiAJCQl7Ci0JCQkJdGVybWlu
YWwtPnRyYXZlcnNlKGl0KTsKKwkJCQlleHByLT50cmF2ZXJzZShpdCk7CiAJCQl9CiAKIAkJCWlm
KGJvZHkpCkBAIC0yMzksMTYgKzIzOSwxNiBAQCB2b2lkIFRJbnRlcm1Mb29wOjp0cmF2ZXJzZShU
SW50ZXJtVHJhdmVyCiAJCQkJYm9keS0+dHJhdmVyc2UoaXQpOwogCQkJfQogCi0JCQlpZih0ZXN0
KQorCQkJaWYoY29uZCkKIAkJCXsKLQkJCQl0ZXN0LT50cmF2ZXJzZShpdCk7CisJCQkJY29uZC0+
dHJhdmVyc2UoaXQpOwogCQkJfQogCQl9CiAJCWVsc2UKIAkJewotCQkJaWYodGVzdCkKKwkJCWlm
KGNvbmQpCiAJCQl7Ci0JCQkJdGVzdC0+dHJhdmVyc2UoaXQpOworCQkJCWNvbmQtPnRyYXZlcnNl
KGl0KTsKIAkJCX0KIAogCQkJaWYoYm9keSkKQEAgLTI1Niw5ICsyNTYsOSBAQCB2b2lkIFRJbnRl
cm1Mb29wOjp0cmF2ZXJzZShUSW50ZXJtVHJhdmVyCiAJCQkJYm9keS0+dHJhdmVyc2UoaXQpOwog
CQkJfQogCi0JCQlpZih0ZXJtaW5hbCkKKwkJCWlmKGV4cHIpCiAJCQl7Ci0JCQkJdGVybWluYWwt
PnRyYXZlcnNlKGl0KTsKKwkJCQlleHByLT50cmF2ZXJzZShpdCk7CiAJCQl9CiAJCX0KIApJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVy
bWVkaWF0ZS5jcHAJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIy
LDEwMSBAQCBzdGF0aWMgVFByZWNpc2lvbiBHZXRIaWdoZXJQcmVjaXNpb24oIFRQCiAgICAgcmV0
dXJuIGxlZnQgPiByaWdodCA/IGxlZnQgOiByaWdodDsKIH0KIAorY29uc3QgY2hhciogZ2V0T3Bl
cmF0b3JTdHJpbmcoVE9wZXJhdG9yIG9wKSB7CisgICAgc3dpdGNoIChvcCkgeworICAgICAgY2Fz
ZSBFT3BJbml0aWFsaXplOiByZXR1cm4gIj0iOworICAgICAgY2FzZSBFT3BBc3NpZ246IHJldHVy
biAiPSI7CisgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogcmV0dXJuICIrPSI7CisgICAgICBjYXNl
IEVPcFN1YkFzc2lnbjogcmV0dXJuICItPSI7CisgICAgICBjYXNlIEVPcERpdkFzc2lnbjogcmV0
dXJuICIvPSI7CisKKyAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAgICAgIGNhc2UgRU9wTXVsQXNz
aWduOiAKKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhBc3NpZ246CisgICAgICBjYXNl
IEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOgorICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1Nj
YWxhckFzc2lnbjoKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246IHJldHVy
biAiKj0iOworCisgICAgICAvLyBGYWxsLXRocm91Z2guCisgICAgICBjYXNlIEVPcEluZGV4RGly
ZWN0OgorICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiByZXR1cm4gIltdIjsKKworICAgICAg
Y2FzZSBFT3BJbmRleERpcmVjdFN0cnVjdDogcmV0dXJuICIuIjsKKyAgICAgIGNhc2UgRU9wVmVj
dG9yU3dpenpsZTogcmV0dXJuICIuIjsKKyAgICAgIGNhc2UgRU9wQWRkOiByZXR1cm4gIisiOwor
ICAgICAgY2FzZSBFT3BTdWI6IHJldHVybiAiLSI7CisgICAgICBjYXNlIEVPcE11bDogcmV0dXJu
ICIqIjsKKyAgICAgIGNhc2UgRU9wRGl2OiByZXR1cm4gIi8iOworICAgICAgY2FzZSBFT3BNb2Q6
IFVOSU1QTEVNRU5URUQoKTsgYnJlYWs7CisgICAgICBjYXNlIEVPcEVxdWFsOiByZXR1cm4gIj09
IjsKKyAgICAgIGNhc2UgRU9wTm90RXF1YWw6IHJldHVybiAiIT0iOworICAgICAgY2FzZSBFT3BM
ZXNzVGhhbjogcmV0dXJuICI8IjsKKyAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46IHJldHVybiAi
PiI7CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6IHJldHVybiAiPD0iOworICAgICAgY2Fz
ZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiByZXR1cm4gIj49IjsKKworICAgICAgLy8gRmFsbC10aHJv
dWdoLgorICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjoKKyAgICAgIGNhc2UgRU9wVmVj
dG9yVGltZXNNYXRyaXg6CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzVmVjdG9yOgorICAgICAg
Y2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjoKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRy
aXg6IHJldHVybiAiKiI7CisKKyAgICAgIGNhc2UgRU9wTG9naWNhbE9yOiByZXR1cm4gInx8IjsK
KyAgICAgIGNhc2UgRU9wTG9naWNhbFhvcjogcmV0dXJuICJeXiI7CisgICAgICBjYXNlIEVPcExv
Z2ljYWxBbmQ6IHJldHVybiAiJiYiOworICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogcmV0dXJuICIt
IjsKKyAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDogcmV0dXJuICJub3QiOworICAgICAg
Y2FzZSBFT3BMb2dpY2FsTm90OiByZXR1cm4gIiEiOworICAgICAgY2FzZSBFT3BQb3N0SW5jcmVt
ZW50OiByZXR1cm4gIisrIjsKKyAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDogcmV0dXJuICIt
LSI7CisgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDogcmV0dXJuICIrKyI7CisgICAgICBjYXNl
IEVPcFByZURlY3JlbWVudDogcmV0dXJuICItLSI7CisKKyAgICAgIC8vIEZhbGwtdGhyb3VnaC4K
KyAgICAgIGNhc2UgRU9wQ29udkludFRvQm9vbDoKKyAgICAgIGNhc2UgRU9wQ29udkZsb2F0VG9C
b29sOiByZXR1cm4gImJvb2wiOworIAorICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgICAgY2Fz
ZSBFT3BDb252Qm9vbFRvRmxvYXQ6CisgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiByZXR1
cm4gImZsb2F0IjsKKyAKKyAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAgICAgIGNhc2UgRU9wQ29u
dkZsb2F0VG9JbnQ6CisgICAgICBjYXNlIEVPcENvbnZCb29sVG9JbnQ6IHJldHVybiAiaW50IjsK
KworICAgICAgY2FzZSBFT3BSYWRpYW5zOiByZXR1cm4gInJhZGlhbnMiOworICAgICAgY2FzZSBF
T3BEZWdyZWVzOiByZXR1cm4gImRlZ3JlZXMiOworICAgICAgY2FzZSBFT3BTaW46IHJldHVybiAi
c2luIjsKKyAgICAgIGNhc2UgRU9wQ29zOiByZXR1cm4gImNvcyI7CisgICAgICBjYXNlIEVPcFRh
bjogcmV0dXJuICJ0YW4iOworICAgICAgY2FzZSBFT3BBc2luOiByZXR1cm4gImFzaW4iOworICAg
ICAgY2FzZSBFT3BBY29zOiByZXR1cm4gImFjb3MiOworICAgICAgY2FzZSBFT3BBdGFuOiByZXR1
cm4gImF0YW4iOworICAgICAgY2FzZSBFT3BFeHA6IHJldHVybiAiZXhwIjsKKyAgICAgIGNhc2Ug
RU9wTG9nOiByZXR1cm4gImxvZyI7CisgICAgICBjYXNlIEVPcEV4cDI6IHJldHVybiAiZXhwMiI7
CisgICAgICBjYXNlIEVPcExvZzI6IHJldHVybiAibG9nMiI7CisgICAgICBjYXNlIEVPcFNxcnQ6
IHJldHVybiAic3FydCI7CisgICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiByZXR1cm4gImludmVy
c2VzcXJ0IjsKKyAgICAgIGNhc2UgRU9wQWJzOiByZXR1cm4gImFicyI7CisgICAgICBjYXNlIEVP
cFNpZ246IHJldHVybiAic2lnbiI7CisgICAgICBjYXNlIEVPcEZsb29yOiByZXR1cm4gImZsb29y
IjsKKyAgICAgIGNhc2UgRU9wQ2VpbDogcmV0dXJuICJjZWlsIjsKKyAgICAgIGNhc2UgRU9wRnJh
Y3Q6IHJldHVybiAiZnJhY3QiOworICAgICAgY2FzZSBFT3BMZW5ndGg6IHJldHVybiAibGVuZ3Ro
IjsKKyAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiByZXR1cm4gIm5vcm1hbGl6ZSI7CisgICAgICBj
YXNlIEVPcERGZHg6IHJldHVybiAiZEZkeCI7CisgICAgICBjYXNlIEVPcERGZHk6IHJldHVybiAi
ZEZkeSI7CisgICAgICBjYXNlIEVPcEZ3aWR0aDogcmV0dXJuICJmd2lkdGgiOworICAgICAgY2Fz
ZSBFT3BBbnk6IHJldHVybiAiYW55IjsKKyAgICAgIGNhc2UgRU9wQWxsOiByZXR1cm4gImFsbCI7
CisKKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gIiI7Cit9CisKIC8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KIC8vCiAvLyBGaXJzdCBzZXQgb2YgZnVuY3Rpb25zIGFyZSB0byBo
ZWxwIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24uCkBAIC01MSwxOCArMTQ2
LDIzIEBAIFRJbnRlcm1TeW1ib2wqIFRJbnRlcm1lZGlhdGU6OmFkZFN5bWJvbCgKIFRJbnRlcm1U
eXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5TWF0aChUT3BlcmF0b3Igb3AsIFRJbnRlcm1U
eXBlZCogbGVmdCwgVEludGVybVR5cGVkKiByaWdodCwgVFNvdXJjZUxvYyBsaW5lLCBUU3ltYm9s
VGFibGUmIHN5bWJvbFRhYmxlKQogewogICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBF
T3BFcXVhbDoKKyAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDoKKyAgICAgICAgICAgIGlmIChsZWZ0
LT5pc0FycmF5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKICAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhh
bjoKICAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOgogICAgICAgICBjYXNlIEVPcEdyZWF0
ZXJUaGFuRXF1YWw6Ci0gICAgICAgICAgICBpZiAobGVmdC0+Z2V0VHlwZSgpLmlzTWF0cml4KCkg
fHwgbGVmdC0+Z2V0VHlwZSgpLmlzQXJyYXkoKSB8fCBsZWZ0LT5nZXRUeXBlKCkuaXNWZWN0b3Io
KSB8fCBsZWZ0LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAg
ICAgICAgICBpZiAobGVmdC0+aXNNYXRyaXgoKSB8fCBsZWZ0LT5pc0FycmF5KCkgfHwgbGVmdC0+
aXNWZWN0b3IoKSB8fCBsZWZ0LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKICAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIEVPcExvZ2ljYWxPcjoKICAgICAgICAgY2FzZSBFT3BMb2dpY2FsWG9yOgog
ICAgICAgICBjYXNlIEVPcExvZ2ljYWxBbmQ6Ci0gICAgICAgICAgICBpZiAobGVmdC0+Z2V0VHlw
ZSgpLmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wgfHwgbGVmdC0+Z2V0VHlwZSgpLmlzTWF0cml4
KCkgfHwgbGVmdC0+Z2V0VHlwZSgpLmlzQXJyYXkoKSB8fCBsZWZ0LT5nZXRUeXBlKCkuaXNWZWN0
b3IoKSkgeworICAgICAgICAgICAgaWYgKGxlZnQtPmdldEJhc2ljVHlwZSgpICE9IEVidEJvb2wg
fHwgbGVmdC0+aXNNYXRyaXgoKSB8fCBsZWZ0LT5pc0FycmF5KCkgfHwgbGVmdC0+aXNWZWN0b3Io
KSkgewogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgYnJlYWs7CkBAIC03MCw3ICsxNzAsNyBAQCBUSW50ZXJtVHlwZWQqIFRJbnRlcm1lZGlhdGU6
OmFkZEJpbmFyeU1hCiAgICAgICAgIGNhc2UgRU9wU3ViOgogICAgICAgICBjYXNlIEVPcERpdjoK
ICAgICAgICAgY2FzZSBFT3BNdWw6Ci0gICAgICAgICAgICBpZiAobGVmdC0+Z2V0VHlwZSgpLmdl
dEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCB8fCBsZWZ0LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBl
KCkgPT0gRWJ0Qm9vbCkKKyAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRTdHJ1Y3QgfHwgbGVmdC0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Qm9vbCkKICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgfQpAQCAtNzgsOCAr
MTc4LDEwIEBAIFRJbnRlcm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5TWEKICAgICAv
LwogICAgIC8vIEZpcnN0IHRyeSBjb252ZXJ0aW5nIHRoZSBjaGlsZHJlbiB0byBjb21wYXRpYmxl
IHR5cGVzLgogICAgIC8vCi0KLSAgICBpZiAoIShsZWZ0LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkg
JiYgcmlnaHQtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSkpIHsKKyAgICBpZiAobGVmdC0+Z2V0VHlw
ZSgpLmdldFN0cnVjdCgpICYmIHJpZ2h0LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpIHsKKyAgICAg
ICAgaWYgKGxlZnQtPmdldFR5cGUoKSAhPSByaWdodC0+Z2V0VHlwZSgpKQorICAgICAgICAgICAg
cmV0dXJuIDA7CisgICAgfSBlbHNlIHsKICAgICAgICAgVEludGVybVR5cGVkKiBjaGlsZCA9IGFk
ZENvbnZlcnNpb24ob3AsIGxlZnQtPmdldFR5cGUoKSwgcmlnaHQpOwogICAgICAgICBpZiAoY2hp
bGQpCiAgICAgICAgICAgICByaWdodCA9IGNoaWxkOwpAQCAtOTAsMTIgKzE5Miw4IEBAIFRJbnRl
cm1UeXBlZCogVEludGVybWVkaWF0ZTo6YWRkQmluYXJ5TWEKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChsZWZ0LT5nZXRUeXBlKCkgIT0gcmlnaHQtPmdldFR5cGUoKSkKLSAgICAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAotCiAgICAgLy8KICAgICAvLyBOZWVkIGEgbmV3IG5vZGUgaG9sZGlu
ZyB0aGluZ3MgdG9nZXRoZXIgdGhlbi4gIE1ha2UKICAgICAvLyBvbmUgYW5kIHByb21vdGUgaXQg
dG8gdGhlIHJpZ2h0IHR5cGUuCkBAIC0xMDcsMTggKzIwNSwxNiBAQCBUSW50ZXJtVHlwZWQqIFRJ
bnRlcm1lZGlhdGU6OmFkZEJpbmFyeU1hCiAKICAgICBub2RlLT5zZXRMZWZ0KGxlZnQpOwogICAg
IG5vZGUtPnNldFJpZ2h0KHJpZ2h0KTsKLSAgICBpZiAoISBub2RlLT5wcm9tb3RlKGluZm9TaW5r
KSkKKyAgICBpZiAoIW5vZGUtPnByb21vdGUoaW5mb1NpbmspKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpsZWZ0VGVtcENvbnN0YW50ID0gbGVmdC0+Z2V0
QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgVEludGVybUNvbnN0YW50VW5pb24gKnJpZ2h0VGVtcENv
bnN0YW50ID0gcmlnaHQtPmdldEFzQ29uc3RhbnRVbmlvbigpOwotCiAgICAgLy8KICAgICAvLyBT
ZWUgaWYgd2UgY2FuIGZvbGQgY29uc3RhbnRzLgogICAgIC8vCi0KICAgICBUSW50ZXJtVHlwZWQq
IHR5cGVkUmV0dXJuTm9kZSA9IDA7Ci0gICAgaWYgKCBsZWZ0VGVtcENvbnN0YW50ICYmIHJpZ2h0
VGVtcENvbnN0YW50KSB7CisgICAgVEludGVybUNvbnN0YW50VW5pb24gKmxlZnRUZW1wQ29uc3Rh
bnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsKKyAgICBUSW50ZXJtQ29uc3RhbnRVbmlv
biAqcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7CisgICAg
aWYgKGxlZnRUZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1wQ29uc3RhbnQpIHsKICAgICAgICAgdHlw
ZWRSZXR1cm5Ob2RlID0gbGVmdFRlbXBDb25zdGFudC0+Zm9sZChub2RlLT5nZXRPcCgpLCByaWdo
dFRlbXBDb25zdGFudCwgaW5mb1NpbmspOwogCiAgICAgICAgIGlmICh0eXBlZFJldHVybk5vZGUp
CkBAIC02MDIsOSArNjk4LDkgQEAgVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRTd2l6
emxlKAogLy8KIC8vIENyZWF0ZSBsb29wIG5vZGVzLgogLy8KLVRJbnRlcm1Ob2RlKiBUSW50ZXJt
ZWRpYXRlOjphZGRMb29wKFRJbnRlcm1Ob2RlICppbml0LCBUSW50ZXJtTm9kZSogYm9keSwgVElu
dGVybVR5cGVkKiB0ZXN0LCBUSW50ZXJtVHlwZWQqIHRlcm1pbmFsLCBib29sIHRlc3RGaXJzdCwg
VFNvdXJjZUxvYyBsaW5lKQorVEludGVybU5vZGUqIFRJbnRlcm1lZGlhdGU6OmFkZExvb3AoVExv
b3BUeXBlIHR5cGUsIFRJbnRlcm1Ob2RlKiBpbml0LCBUSW50ZXJtVHlwZWQqIGNvbmQsIFRJbnRl
cm1UeXBlZCogZXhwciwgVEludGVybU5vZGUqIGJvZHksIFRTb3VyY2VMb2MgbGluZSkKIHsKLSAg
ICBUSW50ZXJtTm9kZSogbm9kZSA9IG5ldyBUSW50ZXJtTG9vcChpbml0LCBib2R5LCB0ZXN0LCB0
ZXJtaW5hbCwgdGVzdEZpcnN0KTsKKyAgICBUSW50ZXJtTm9kZSogbm9kZSA9IG5ldyBUSW50ZXJt
TG9vcCh0eXBlLCBpbml0LCBjb25kLCBleHByLCBib2R5KTsKICAgICBub2RlLT5zZXRMaW5lKGxp
bmUpOwogCiAgICAgcmV0dXJuIG5vZGU7CkBAIC02MzAsNyArNzI2LDcgQEAgVEludGVybUJyYW5j
aCogVEludGVybWVkaWF0ZTo6YWRkQnJhbmNoKAogLy8gVGhpcyBpcyB0byBiZSBleGVjdXRlZCBv
bmNlIHRoZSBmaW5hbCByb290IGlzIHB1dCBvbiB0b3AgYnkgdGhlIHBhcnNpbmcKIC8vIHByb2Nl
c3MuCiAvLwotYm9vbCBUSW50ZXJtZWRpYXRlOjpwb3N0UHJvY2VzcyhUSW50ZXJtTm9kZSogcm9v
dCwgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UpCitib29sIFRJbnRlcm1lZGlhdGU6OnBvc3RQcm9jZXNz
KFRJbnRlcm1Ob2RlKiByb290KQogewogICAgIGlmIChyb290ID09IDApCiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtNzYwLDYgKzg1NiwxMiBAQCBib29sIFRJbnRlcm1VbmFyeTo6cHJvbW90ZShU
SW5mb1NpbmsmKQogLy8KIGJvb2wgVEludGVybUJpbmFyeTo6cHJvbW90ZShUSW5mb1NpbmsmIGlu
Zm9TaW5rKQogeworICAgIC8vIFRoaXMgZnVuY3Rpb24gb25seSBoYW5kbGVzIHNjYWxhcnMsIHZl
Y3RvcnMsIGFuZCBtYXRyaWNlcy4KKyAgICBpZiAobGVmdC0+aXNBcnJheSgpIHx8IHJpZ2h0LT5p
c0FycmF5KCkpIHsKKyAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5h
bEVycm9yLCAiSW52YWxpZCBvcGVyYXRpb24gZm9yIGFycmF5cyIsIGdldExpbmUoKSk7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICAvLyBHTFNMIEVTIDIuMCBkb2VzIG5vdCBz
dXBwb3J0IGltcGxpY2l0IHR5cGUgY2FzdGluZy4KICAgICAvLyBTbyB0aGUgYmFzaWMgdHlwZSBz
aG91bGQgYWx3YXlzIG1hdGNoLgogICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSAhPSByaWdo
dC0+Z2V0QmFzaWNUeXBlKCkpCkBAIC03ODEsNDAgKzg4Myw2IEBAIGJvb2wgVEludGVybUJpbmFy
eTo6cHJvbW90ZShUSW5mb1NpbmsmIGkKICAgICAgICAgZ2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVh
bGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAgICAgfQogCi0gICAgLy8KLSAgICAvLyBBcnJheSBvcGVy
YXRpb25zLgotICAgIC8vCi0gICAgaWYgKGxlZnQtPmlzQXJyYXkoKSB8fCByaWdodC0+aXNBcnJh
eSgpKSB7Ci0gICAgICAgIC8vCi0gICAgICAgIC8vIEFycmF5cyB0eXBlcyBoYXZlIHRvIGJlIGV4
YWN0IG1hdGNoZXMuCi0gICAgICAgIC8vCi0gICAgICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkgIT0g
cmlnaHQtPmdldFR5cGUoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBz
d2l0Y2ggKG9wKSB7Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gUHJvbW90ZSB0byBj
b25kaXRpb25hbAotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGNhc2UgRU9wRXF1YWw6Ci0g
ICAgICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgotICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5
cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAg
ICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBTZXQgYXJyYXkgaW5mb3JtYXRpb24uCi0gICAg
ICAgICAgICAvLwotICAgICAgICAgICAgY2FzZSBFT3BBc3NpZ246Ci0gICAgICAgICAgICBjYXNl
IEVPcEluaXRpYWxpemU6Ci0gICAgICAgICAgICAgICAgZ2V0VHlwZVBvaW50ZXIoKS0+c2V0QXJy
YXlTaXplKGxlZnQtPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSk7Ci0gICAgICAgICAgICAgICAg
Z2V0VHlwZVBvaW50ZXIoKS0+c2V0QXJyYXlJbmZvcm1hdGlvblR5cGUobGVmdC0+Z2V0VHlwZSgp
LmdldEFycmF5SW5mb3JtYXRpb25UeXBlKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KICAgICBpbnQgc2l6ZSA9IHN0ZDo6
bWF4KGxlZnQtPmdldE5vbWluYWxTaXplKCksIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKTsKIAog
ICAgIC8vCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0
R0xTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL091dHB1dEdMU0wuY3BwCShyZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc0
LDYgKzM3NCwxMCBAQCBib29sIFRPdXRwdXRHTFNMOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0CiAg
ICAgICAgIGNhc2UgRU9wTGVuZ3RoOiB3cml0ZVRyaXBsZXQodmlzaXQsICJsZW5ndGgoIiwgTlVM
TCwgIikiKTsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiB3cml0ZVRyaXBsZXQo
dmlzaXQsICJub3JtYWxpemUoIiwgTlVMTCwgIikiKTsgYnJlYWs7CiAKKyAgICAgICAgY2FzZSBF
T3BERmR4OiB3cml0ZVRyaXBsZXQodmlzaXQsICJkRmR4KCIsIE5VTEwsICIpIik7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcERGZHk6IHdyaXRlVHJpcGxldCh2aXNpdCwgImRGZHkoIiwgTlVMTCwg
IikiKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRndpZHRoOiB3cml0ZVRyaXBsZXQodmlzaXQs
ICJmd2lkdGgoIiwgTlVMTCwgIikiKTsgYnJlYWs7CisKICAgICAgICAgY2FzZSBFT3BBbnk6IHdy
aXRlVHJpcGxldCh2aXNpdCwgImFueSgiLCBOVUxMLCAiKSIpOyBicmVhazsKICAgICAgICAgY2Fz
ZSBFT3BBbGw6IHdyaXRlVHJpcGxldCh2aXNpdCwgImFsbCgiLCBOVUxMLCAiKSIpOyBicmVhazsK
IApAQCAtNjA4LDIzICs2MTIsMzIgQEAgYm9vbCBUT3V0cHV0R0xTTDo6dmlzaXRMb29wKFZpc2l0
IHZpc2l0LAogCiAgICAgaW5jcmVtZW50RGVwdGgoKTsKICAgICAvLyBMb29wIGhlYWRlci4KLSAg
ICBpZiAobm9kZS0+dGVzdEZpcnN0KCkpICAvLyBmb3IgbG9vcAorICAgIFRMb29wVHlwZSBsb29w
VHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAgICBpZiAobG9vcFR5cGUgPT0gRUxvb3BGb3IpICAv
LyBmb3IgbG9vcAogICAgIHsKICAgICAgICAgb3V0IDw8ICJmb3IgKCI7CiAgICAgICAgIGlmIChu
b2RlLT5nZXRJbml0KCkpCiAgICAgICAgICAgICBub2RlLT5nZXRJbml0KCktPnRyYXZlcnNlKHRo
aXMpOwogICAgICAgICBvdXQgPDwgIjsgIjsKIAotICAgICAgICBBU1NFUlQobm9kZS0+Z2V0VGVz
dCgpICE9IE5VTEwpOwotICAgICAgICBub2RlLT5nZXRUZXN0KCktPnRyYXZlcnNlKHRoaXMpOwor
ICAgICAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpCisgICAgICAgICAgICBub2RlLT5nZXRD
b25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CiAgICAgICAgIG91dCA8PCAiOyAiOwogCi0gICAg
ICAgIGlmIChub2RlLT5nZXRUZXJtaW5hbCgpKQotICAgICAgICAgICAgbm9kZS0+Z2V0VGVybWlu
YWwoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkp
CisgICAgICAgICAgICBub2RlLT5nZXRFeHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOworICAg
ICAgICBvdXQgPDwgIilcbiI7CisgICAgfQorICAgIGVsc2UgaWYgKGxvb3BUeXBlID09IEVMb29w
V2hpbGUpICAvLyB3aGlsZSBsb29wCisgICAgeworICAgICAgICBvdXQgPDwgIndoaWxlICgiOwor
ICAgICAgICBBU1NFUlQobm9kZS0+Z2V0Q29uZGl0aW9uKCkgIT0gTlVMTCk7CisgICAgICAgIG5v
ZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKICAgICAgICAgb3V0IDw8ICIpXG4i
OwogICAgIH0KICAgICBlbHNlICAvLyBkby13aGlsZSBsb29wCiAgICAgeworICAgICAgICBBU1NF
UlQobG9vcFR5cGUgPT0gRUxvb3BEb1doaWxlKTsKICAgICAgICAgb3V0IDw8ICJkb1xuIjsKICAg
ICB9CiAKQEAgLTYzMiwxMSArNjQ1LDExIEBAIGJvb2wgVE91dHB1dEdMU0w6OnZpc2l0TG9vcChW
aXNpdCB2aXNpdCwKICAgICB2aXNpdENvZGVCbG9jayhub2RlLT5nZXRCb2R5KCkpOwogCiAgICAg
Ly8gTG9vcCBmb290ZXIuCi0gICAgaWYgKCFub2RlLT50ZXN0Rmlyc3QoKSkgIC8vIHdoaWxlIGxv
b3AKKyAgICBpZiAobG9vcFR5cGUgPT0gRUxvb3BEb1doaWxlKSAgLy8gZG8td2hpbGUgbG9vcAog
ICAgIHsKICAgICAgICAgb3V0IDw8ICJ3aGlsZSAoIjsKLSAgICAgICAgQVNTRVJUKG5vZGUtPmdl
dFRlc3QoKSAhPSBOVUxMKTsKLSAgICAgICAgbm9kZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlz
KTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldENvbmRpdGlvbigpICE9IE5VTEwpOworICAgICAg
ICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CiAgICAgICAgIG91dCA8PCAi
KTtcbiI7CiAgICAgfQogICAgIGRlY3JlbWVudERlcHRoKCk7CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuY3BwCShyZXZpc2lv
biA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRI
TFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlICJjb21waWxl
ci9kZWJ1Zy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCiAjaW5jbHVkZSAiY29t
cGlsZXIvVW5mb2xkU2VsZWN0LmgiCisjaW5jbHVkZSAiY29tcGlsZXIvU2VhcmNoU3ltYm9sLmgi
CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTY0LDcgKzY1
LDcgQEAgT3V0cHV0SExTTDo6T3V0cHV0SExTTChUUGFyc2VDb250ZXh0ICZjbwogCiAgICAgbVNj
b3BlRGVwdGggPSAwOwogCi0gICAgbUFyZ3VtZW50SW5kZXggPSAwOworICAgIG1VbmlxdWVJbmRl
eCA9IDA7CiB9CiAKIE91dHB1dEhMU0w6On5PdXRwdXRITFNMKCkKQEAgLTk2LDcgKzk3LDcgQEAg
aW50IE91dHB1dEhMU0w6OnZlY3RvclNpemUoY29uc3QgVFR5cGUgJgogCiB2b2lkIE91dHB1dEhM
U0w6OmhlYWRlcigpCiB7Ci0gICAgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UgPSBtQ29udGV4dC5sYW5n
dWFnZTsKKyAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSA9IG1Db250ZXh0LnNoYWRlclR5cGU7
CiAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUhlYWRlcjsKIAogICAgIGZvciAoU3RydWN0RGVj
bGFyYXRpb25zOjppdGVyYXRvciBzdHJ1Y3REZWNsYXJhdGlvbiA9IG1TdHJ1Y3REZWNsYXJhdGlv
bnMuYmVnaW4oKTsgc3RydWN0RGVjbGFyYXRpb24gIT0gbVN0cnVjdERlY2xhcmF0aW9ucy5lbmQo
KTsgc3RydWN0RGVjbGFyYXRpb24rKykKQEAgLTEwOSw3ICsxMTAsNyBAQCB2b2lkIE91dHB1dEhM
U0w6OmhlYWRlcigpCiAgICAgICAgIG91dCA8PCAqY29uc3RydWN0b3I7CiAgICAgfQogCi0gICAg
aWYgKGxhbmd1YWdlID09IEVTaExhbmdGcmFnbWVudCkKKyAgICBpZiAoc2hhZGVyVHlwZSA9PSBT
SF9GUkFHTUVOVF9TSEFERVIpCiAgICAgewogICAgICAgICBUU3RyaW5nIHVuaWZvcm1zOwogICAg
ICAgICBUU3RyaW5nIHZhcnlpbmdzOwpAQCAtMzYxLDcgKzM2Miw4IEBAIHZvaWQgT3V0cHV0SExT
TDo6aGVhZGVyKCkKICAgICAgICAgICAgICAgICIgICAgZmxvYXQgZGlmZjtcbiIKICAgICAgICAg
ICAgICAgICJ9O1xuIgogICAgICAgICAgICAgICAgIlxuIgotICAgICAgICAgICAgICAgInVuaWZv
cm0gZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMgZ2xfRGVwdGhSYW5nZTtcbiIKKyAgICAgICAgICAg
ICAgICJ1bmlmb3JtIGZsb2F0MyBkeF9EZXB0aFJhbmdlOyIKKyAgICAgICAgICAgICAgICJzdGF0
aWMgZ2xfRGVwdGhSYW5nZVBhcmFtZXRlcnMgZ2xfRGVwdGhSYW5nZSA9IHtkeF9EZXB0aFJhbmdl
LngsIGR4X0RlcHRoUmFuZ2UueSwgZHhfRGVwdGhSYW5nZS56fTtcbiIKICAgICAgICAgICAgICAg
ICJcbiI7CiAgICAgfQogCkBAIC02NTMsNyArNjU1LDM5IEBAIGJvb2wgT3V0cHV0SExTTDo6dmlz
aXRCaW5hcnkoVmlzaXQgdmlzaXQKICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCiAgICAgewog
ICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgIigiLCAiID0gIiwgIikiKTsgICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbml0
aWFsaXplOiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICIgPSAiLCAiIik7
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BJbml0aWFsaXplOgorICAgICAgICBp
ZiAodmlzaXQgPT0gUHJlVmlzaXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEdMU0wgYWxs
b3dzIHRvIHdyaXRlIHRoaW5ncyBsaWtlICJmbG9hdCB4ID0geDsiIHdoZXJlIGEgbmV3IHZhcmlh
YmxlIHggaXMgZGVmaW5lZAorICAgICAgICAgICAgLy8gYW5kIHRoZSB2YWx1ZSBvZiBhbiBleGlz
dGluZyB2YXJpYWJsZSB4IGlzIGFzc2lnbmVkLiBITFNMIHVzZXMgQyBzZW1hbnRpY3MgKHRoZQor
ICAgICAgICAgICAgLy8gbmV3IHZhcmlhYmxlIGlzIGNyZWF0ZWQgYmVmb3JlIHRoZSBhc3NpZ25t
ZW50IGlzIGV2YWx1YXRlZCksIHNvIHdlIG5lZWQgdG8gY29udmVydAorICAgICAgICAgICAgLy8g
dGhpcyB0byAiZmxvYXQgdCA9IHgsIHggPSB0OyIuCisKKyAgICAgICAgICAgIFRJbnRlcm1TeW1i
b2wgKnN5bWJvbE5vZGUgPSBub2RlLT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAg
ICAgICAgICAgVEludGVybVR5cGVkICpleHByZXNzaW9uID0gbm9kZS0+Z2V0UmlnaHQoKTsKKwor
ICAgICAgICAgICAgc2g6OlNlYXJjaFN5bWJvbCBzZWFyY2hTeW1ib2woc3ltYm9sTm9kZS0+Z2V0
U3ltYm9sKCkpOworICAgICAgICAgICAgZXhwcmVzc2lvbi0+dHJhdmVyc2UoJnNlYXJjaFN5bWJv
bCk7CisgICAgICAgICAgICBib29sIHNhbWVTeW1ib2wgPSBzZWFyY2hTeW1ib2wuZm91bmRNYXRj
aCgpOworCisgICAgICAgICAgICBpZiAoc2FtZVN5bWJvbCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAvLyBUeXBlIGFscmVhZHkgcHJpbnRlZAorICAgICAgICAgICAgICAgIG91dCA8
PCAidCIgKyBzdHIobVVuaXF1ZUluZGV4KSArICIgPSAiOworICAgICAgICAgICAgICAgIGV4cHJl
c3Npb24tPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAg
ICAgICAgICAgICAgIHN5bWJvbE5vZGUtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAg
IG91dCA8PCAiID0gdCIgKyBzdHIobVVuaXF1ZUluZGV4KTsKKworICAgICAgICAgICAgICAgIG1V
bmlxdWVJbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAg
ICB7CisgICAgICAgICAgICBvdXQgPDwgIiA9ICI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiKCIsICIgKz0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcFN1
YkFzc2lnbjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLT0gIiwg
IikiKTsgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcE11bEFzc2lnbjogICAgICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKj0gIiwgIikiKTsgICAgICAgICAgYnJl
YWs7CkBAIC05MzMsOSArOTY3LDkgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdFVuYXJ5KFZpc2l0
IHZpc2l0LAogICAgICAgY2FzZSBFT3BGcmFjdDogICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiZnJhYygiLCAiIiwgIikiKTsgICAgICBicmVhazsKICAgICAgIGNhc2UgRU9wTGVuZ3Ro
OiAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImxlbmd0aCgiLCAiIiwgIikiKTsgICAg
YnJlYWs7CiAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJub3JtYWxpemUoIiwgIiIsICIpIik7IGJyZWFrOwotLy8gICAgY2FzZSBFT3BEUGR4OiAg
ICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR4KCIsICIiLCAiKSIpOyAgICAgICBi
cmVhazsKLS8vICAgIGNhc2UgRU9wRFBkeTogICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNp
dCwgImRkeSgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7Ci0vLyAgICBjYXNlIEVPcEZ3aWR0aDog
ICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJmd2lkdGgoIiwgIiIsICIpIik7ICAgIGJy
ZWFrOyAgICAgICAgCisgICAgICBjYXNlIEVPcERGZHg6ICAgICAgICAgICAgIG91dHB1dFRyaXBs
ZXQodmlzaXQsICJkZHgoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBFT3BE
RmR5OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZGR5KCIsICIiLCAiKSIpOyAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wRndpZHRoOiAgICAgICAgICAgb3V0cHV0VHJpcGxl
dCh2aXNpdCwgImZ3aWR0aCgiLCAiIiwgIikiKTsgICAgYnJlYWs7ICAgICAgICAKICAgICAgIGNh
c2UgRU9wQW55OiAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImFueSgiLCAiIiwg
IikiKTsgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcEFsbDogICAgICAgICAgICAgIG91dHB1
dFRyaXBsZXQodmlzaXQsICJhbGwoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwogICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKQEAgLTk0Niw3ICs5ODAsNyBAQCBib29sIE91dHB1dEhMU0w6
OnZpc2l0VW5hcnkoVmlzaXQgdmlzaXQsCiAKIGJvb2wgT3V0cHV0SExTTDo6dmlzaXRBZ2dyZWdh
dGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUgKm5vZGUpCiB7Ci0gICAgRVNoTGFuZ3Vh
Z2UgbGFuZ3VhZ2UgPSBtQ29udGV4dC5sYW5ndWFnZTsKKyAgICBTaFNoYWRlclR5cGUgc2hhZGVy
VHlwZSA9IG1Db250ZXh0LnNoYWRlclR5cGU7CiAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUJv
ZHk7CiAKICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCkBAIC0xMzkyLDcgKzE0MjYsNyBAQCBi
b29sIE91dHB1dEhMU0w6OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgCiAKICAgICBUSW5mb1NpbmtC
YXNlICZvdXQgPSBtQm9keTsKIAotICAgIGlmICghbm9kZS0+dGVzdEZpcnN0KCkpCisgICAgaWYg
KG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcERvV2hpbGUpCiAgICAgewogICAgICAgICBvdXQgPDwg
ImRvXG4iCiAgICAgICAgICAgICAgICAie1xuIjsKQEAgLTE0MDQsMTQgKzE0MzgsMTQgQEAgYm9v
bCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQsIAogICAgICAgICAgICAgbVVuZm9s
ZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0SW5pdCgpKTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgaWYgKG5vZGUtPmdldFRlc3QoKSkKKyAgICAgICAgaWYgKG5vZGUtPmdldENvbmRp
dGlvbigpKQogICAgICAgICB7Ci0gICAgICAgICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZShu
b2RlLT5nZXRUZXN0KCkpOworICAgICAgICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9k
ZS0+Z2V0Q29uZGl0aW9uKCkpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBpZiAobm9k
ZS0+Z2V0VGVybWluYWwoKSkKKyAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKICAg
ICAgICAgewotICAgICAgICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0VGVy
bWluYWwoKSk7CisgICAgICAgICAgICBtVW5mb2xkU2VsZWN0LT50cmF2ZXJzZShub2RlLT5nZXRF
eHByZXNzaW9uKCkpOwogICAgICAgICB9CiAKICAgICAgICAgb3V0IDw8ICJmb3IoIjsKQEAgLTE0
MjMsMTYgKzE0NTcsMTYgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQgdmlzaXQs
IAogCiAgICAgICAgIG91dCA8PCAiOyAiOwogCi0gICAgICAgIGlmIChub2RlLT5nZXRUZXN0KCkp
CisgICAgICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKICAgICAgICAgewotICAgICAgICAg
ICAgbm9kZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG5vZGUtPmdl
dENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIG91dCA8
PCAiOyAiOwogCi0gICAgICAgIGlmIChub2RlLT5nZXRUZXJtaW5hbCgpKQorICAgICAgICBpZiAo
bm9kZS0+Z2V0RXhwcmVzc2lvbigpKQogICAgICAgICB7Ci0gICAgICAgICAgICBub2RlLT5nZXRU
ZXJtaW5hbCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgICAgIG5vZGUtPmdldEV4cHJlc3Np
b24oKS0+dHJhdmVyc2UodGhpcyk7CiAgICAgICAgIH0KIAogICAgICAgICBvdXQgPDwgIilcbiIK
QEAgLTE0NDYsMTEgKzE0ODAsMTEgQEAgYm9vbCBPdXRwdXRITFNMOjp2aXNpdExvb3AoVmlzaXQg
dmlzaXQsIAogCiAgICAgb3V0IDw8ICJ9XG4iOwogCi0gICAgaWYgKCFub2RlLT50ZXN0Rmlyc3Qo
KSkKKyAgICBpZiAobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRG9XaGlsZSkKICAgICB7CiAgICAg
ICAgIG91dCA8PCAid2hpbGUoXG4iOwogCi0gICAgICAgIG5vZGUtPmdldFRlc3QoKS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsK
IAogICAgICAgICBvdXQgPDwgIikiOwogICAgIH0KQEAgLTE1NjUsOSArMTU5OSw5IEBAIGJvb2wg
T3V0cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcChUSW4KICAgICB9CiAKICAgICAvLyBQYXJz
ZSBjb21wYXJhdG9yIGFuZCBsaW1pdCB2YWx1ZQotICAgIGlmIChpbmRleCAhPSBOVUxMICYmIG5v
ZGUtPmdldFRlc3QoKSkKKyAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBub2RlLT5nZXRDb25kaXRp
b24oKSkKICAgICB7Ci0gICAgICAgIFRJbnRlcm1CaW5hcnkgKnRlc3QgPSBub2RlLT5nZXRUZXN0
KCktPmdldEFzQmluYXJ5Tm9kZSgpOworICAgICAgICBUSW50ZXJtQmluYXJ5ICp0ZXN0ID0gbm9k
ZS0+Z2V0Q29uZGl0aW9uKCktPmdldEFzQmluYXJ5Tm9kZSgpOwogICAgICAgICAKICAgICAgICAg
aWYgKHRlc3QgJiYgdGVzdC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0SWQoKSA9
PSBpbmRleC0+Z2V0SWQoKSkKICAgICAgICAgewpAQCAtMTU4NSwxMCArMTYxOSwxMCBAQCBib29s
IE91dHB1dEhMU0w6OmhhbmRsZUV4Y2Vzc2l2ZUxvb3AoVEluCiAgICAgfQogCiAgICAgLy8gUGFy
c2UgaW5jcmVtZW50Ci0gICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgY29tcGFyYXRvciAhPSBFT3BO
dWxsICYmIG5vZGUtPmdldFRlcm1pbmFsKCkpCisgICAgaWYgKGluZGV4ICE9IE5VTEwgJiYgY29t
cGFyYXRvciAhPSBFT3BOdWxsICYmIG5vZGUtPmdldEV4cHJlc3Npb24oKSkKICAgICB7Ci0gICAg
ICAgIFRJbnRlcm1CaW5hcnkgKmJpbmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0VGVybWluYWwoKS0+
Z2V0QXNCaW5hcnlOb2RlKCk7Ci0gICAgICAgIFRJbnRlcm1VbmFyeSAqdW5hcnlUZXJtaW5hbCA9
IG5vZGUtPmdldFRlcm1pbmFsKCktPmdldEFzVW5hcnlOb2RlKCk7CisgICAgICAgIFRJbnRlcm1C
aW5hcnkgKmJpbmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT5nZXRBc0JpbmFy
eU5vZGUoKTsKKyAgICAgICAgVEludGVybVVuYXJ5ICp1bmFyeVRlcm1pbmFsID0gbm9kZS0+Z2V0
RXhwcmVzc2lvbigpLT5nZXRBc1VuYXJ5Tm9kZSgpOwogICAgICAgICAKICAgICAgICAgaWYgKGJp
bmFyeVRlcm1pbmFsKQogICAgICAgICB7CkBAIC0xNzExLDcgKzE3NDUsNyBAQCBUU3RyaW5nIE91
dHB1dEhMU0w6OmFyZ3VtZW50U3RyaW5nKGNvbnN0CiAKICAgICBpZiAobmFtZS5lbXB0eSgpKSAg
IC8vIEhMU0wgZGVtYW5kcyBuYW1lZCBhcmd1bWVudHMsIGFsc28gZm9yIHByb3RvdHlwZXMKICAg
ICB7Ci0gICAgICAgIG5hbWUgPSAieCIgKyBzdHIobUFyZ3VtZW50SW5kZXgrKyk7CisgICAgICAg
IG5hbWUgPSAieCIgKyBzdHIobVVuaXF1ZUluZGV4KyspOwogICAgIH0KICAgICBlbHNlCiAgICAg
ewpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0
cHV0SExTTC5oCShyZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9PdXRwdXRITFNMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBA
QCBjbGFzcyBPdXRwdXRITFNMIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzCiAgICAgU2NvcGVCcmFj
a2V0IG1TY29wZUJyYWNrZXQ7CiAgICAgdW5zaWduZWQgaW50IG1TY29wZURlcHRoOwogCi0gICAg
aW50IG1Bcmd1bWVudEluZGV4OyAgIC8vIEZvciBjcmVhdGluZyB1bmlxdWUgYXJndW1lbnQgbmFt
ZXMKKyAgICBpbnQgbVVuaXF1ZUluZGV4OyAgIC8vIEZvciBjcmVhdGluZyB1bmlxdWUgbmFtZXMK
IH07CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJz
ZUhlbHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1BhcnNlSGVscGVyLmNwcAkocmV2aXNpb24gNzU4MDEpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05LDkgKzksMzUgQEAKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgog
CisjaW5jbHVkZSAiY29tcGlsZXIvZ2xzbGFuZy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL29zaW5j
bHVkZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0luaXRpYWxpemVQYXJzZUNvbnRleHQuaCIKIAor
ZXh0ZXJuICJDIiB7CitleHRlcm4gaW50IEluaXRQcmVwcm9jZXNzb3IoKTsKK2V4dGVybiBpbnQg
RmluYWxpemVQcmVwcm9jZXNzb3IoKTsKK2V4dGVybiB2b2lkIFByZWRlZmluZUludE1hY3JvKGNv
bnN0IGNoYXIgKm5hbWUsIGludCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIFJlcG9ydEluZm8o
VEluZm9TaW5rQmFzZSYgc2luaywKKyAgICAgICAgICAgICAgICAgICAgICAgVFByZWZpeFR5cGUg
dHlwZSwgVFNvdXJjZUxvYyBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4sIAorICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBleHRyYUluZm8pCit7CisgICAgLyogVkMrKyBmb3JtYXQ6IGZpbGUobGluZW51bSkg
OiBlcnJvciAjOiAndG9rZW4nIDogZXh0cmFpbmZvICovCisgICAgc2luay5wcmVmaXgodHlwZSk7
CisgICAgc2luay5sb2NhdGlvbihsb2MpOworICAgIHNpbmsgPDwgIiciIDw8IHRva2VuIDw8ICAi
JyA6ICIgPDwgcmVhc29uIDw8ICIgIiA8PCBleHRyYUluZm8gPDwgIlxuIjsKK30KKworc3RhdGlj
IHZvaWQgRGVmaW5lRXh0ZW5zaW9uTWFjcm9zKGNvbnN0IFRFeHRlbnNpb25CZWhhdmlvciYgZXh0
QmVoYXZpb3IpCit7CisgICAgZm9yIChURXh0ZW5zaW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBleHRCZWhhdmlvci5iZWdpbigpOworICAgICAgICAgaXRlciAhPSBleHRCZWhhdmlv
ci5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFByZWRlZmluZUludE1hY3JvKGl0ZXItPmZpcnN0
LmNfc3RyKCksIDEpOworICAgIH0KK30KKwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vCiAvLyBTdWItIHZl
Y3RvciBhbmQgbWF0cml4IGZpZWxkcwpAQCAtMTc2LDI0ICsyMDIsMzIgQEAgdm9pZCBUUGFyc2VD
b250ZXh0OjpyZWNvdmVyKCkKIC8vCiAvLyBVc2VkIGJ5IGZsZXgvYmlzb24gdG8gb3V0cHV0IGFs
bCBzeW50YXggYW5kIHBhcnNpbmcgZXJyb3JzLgogLy8KLXZvaWQgVFBhcnNlQ29udGV4dDo6ZXJy
b3IoVFNvdXJjZUxvYyBuTGluZSwgY29uc3QgY2hhciAqc3pSZWFzb24sIGNvbnN0IGNoYXIgKnN6
VG9rZW4sIAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpzekV4dHJhSW5m
b0Zvcm1hdCwgLi4uKQordm9pZCBUUGFyc2VDb250ZXh0OjplcnJvcihUU291cmNlTG9jIGxvYywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFy
KiB0b2tlbiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5m
b0Zvcm1hdCwgLi4uKQogewotICAgIGNoYXIgc3pFeHRyYUluZm9bNDAwXTsKKyAgICBjaGFyIGV4
dHJhSW5mb1s1MTJdOwogICAgIHZhX2xpc3QgbWFya2VyOworICAgIHZhX3N0YXJ0KG1hcmtlciwg
ZXh0cmFJbmZvRm9ybWF0KTsKKyAgICB2c25wcmludGYoZXh0cmFJbmZvLCBzaXplb2YoZXh0cmFJ
bmZvKSwgZXh0cmFJbmZvRm9ybWF0LCBtYXJrZXIpOwogCi0gICAgdmFfc3RhcnQobWFya2VyLCBz
ekV4dHJhSW5mb0Zvcm1hdCk7CisgICAgUmVwb3J0SW5mbyhpbmZvU2luay5pbmZvLCBFUHJlZml4
RXJyb3IsIGxvYywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKIAotICAgIHZzbnByaW50Zihz
ekV4dHJhSW5mbywgc2l6ZW9mKHN6RXh0cmFJbmZvKSwgc3pFeHRyYUluZm9Gb3JtYXQsIG1hcmtl
cik7CisgICAgdmFfZW5kKG1hcmtlcik7CisgICAgKytudW1FcnJvcnM7Cit9CiAKLSAgICAvKiBW
QysrIGZvcm1hdDogZmlsZShsaW5lbnVtKSA6IGVycm9yICM6ICd0b2tlbicgOiBleHRyYWluZm8g
Ki8KLSAgICBpbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOwotICAgIGluZm9TaW5r
LmluZm8ubG9jYXRpb24obkxpbmUpOwotICAgIGluZm9TaW5rLmluZm8gPDwgIiciIDw8IHN6VG9r
ZW4gPDwgICInIDogIiA8PCBzelJlYXNvbiA8PCAiICIgPDwgc3pFeHRyYUluZm8gPDwgIlxuIjsK
K3ZvaWQgVFBhcnNlQ29udGV4dDo6d2FybmluZyhUU291cmNlTG9jIGxvYywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mb0Zvcm1hdCwg
Li4uKSB7CisgICAgY2hhciBleHRyYUluZm9bNTEyXTsKKyAgICB2YV9saXN0IG1hcmtlcjsKKyAg
ICB2YV9zdGFydChtYXJrZXIsIGV4dHJhSW5mb0Zvcm1hdCk7CisgICAgdnNucHJpbnRmKGV4dHJh
SW5mbywgc2l6ZW9mKGV4dHJhSW5mbyksIGV4dHJhSW5mb0Zvcm1hdCwgbWFya2VyKTsKIAotICAg
IHZhX2VuZChtYXJrZXIpOworICAgIFJlcG9ydEluZm8oaW5mb1NpbmsuaW5mbywgRVByZWZpeFdh
cm5pbmcsIGxvYywgcmVhc29uLCB0b2tlbiwgZXh0cmFJbmZvKTsKIAotICAgICsrbnVtRXJyb3Jz
OworICAgIHZhX2VuZChtYXJrZXIpOwogfQogCiAvLwpAQCAtNDE1LDcgKzQ0OSw3IEBAIGJvb2wg
VFBhcnNlQ29udGV4dDo6cmVzZXJ2ZWRFcnJvckNoZWNrKGkKICAgICAgICAgICAgIGVycm9yKGxp
bmUsIHJlc2VydmVkRXJyTXNnLCAiZ2xfIiwgIiIpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHNwZWMgPT0gRVNoU3BlY1dlYkdMKSB7CisgICAgICAg
IGlmIChzaGFkZXJTcGVjID09IFNIX1dFQkdMX1NQRUMpIHsKICAgICAgICAgICAgIGlmIChpZGVu
dGlmaWVyLnN1YnN0cigwLCA2KSA9PSBUU3RyaW5nKCJ3ZWJnbF8iKSkgewogICAgICAgICAgICAg
ICAgIGVycm9yKGxpbmUsIHJlc2VydmVkRXJyTXNnLCAid2ViZ2xfIiwgIiIpOwogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDcxLDE3ICs1MDUsMTggQEAgYm9vbCBUUGFyc2VDb250
ZXh0Ojpjb25zdHJ1Y3RvckVycm9yQ2hlYwogICAgIGJvb2wgbWF0cml4SW5NYXRyaXggPSBmYWxz
ZTsKICAgICBib29sIGFycmF5QXJnID0gZmFsc2U7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBm
dW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7ICsraSkgewotICAgICAgICBzaXplICs9IGZ1bmN0aW9u
W2ldLnR5cGUtPmdldE9iamVjdFNpemUoKTsKKyAgICAgICAgY29uc3QgVFBhcmFtZXRlciYgcGFy
YW0gPSBmdW5jdGlvbi5nZXRQYXJhbShpKTsKKyAgICAgICAgc2l6ZSArPSBwYXJhbS50eXBlLT5n
ZXRPYmplY3RTaXplKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoY29uc3RydWN0aW5nTWF0cml4
ICYmIGZ1bmN0aW9uW2ldLnR5cGUtPmlzTWF0cml4KCkpCisgICAgICAgIGlmIChjb25zdHJ1Y3Rp
bmdNYXRyaXggJiYgcGFyYW0udHlwZS0+aXNNYXRyaXgoKSkKICAgICAgICAgICAgIG1hdHJpeElu
TWF0cml4ID0gdHJ1ZTsKICAgICAgICAgaWYgKGZ1bGwpCiAgICAgICAgICAgICBvdmVyRnVsbCA9
IHRydWU7CiAgICAgICAgIGlmIChvcCAhPSBFT3BDb25zdHJ1Y3RTdHJ1Y3QgJiYgIXR5cGUtPmlz
QXJyYXkoKSAmJiBzaXplID49IHR5cGUtPmdldE9iamVjdFNpemUoKSkKICAgICAgICAgICAgIGZ1
bGwgPSB0cnVlOwotICAgICAgICBpZiAoZnVuY3Rpb25baV0udHlwZS0+Z2V0UXVhbGlmaWVyKCkg
IT0gRXZxQ29uc3QpCisgICAgICAgIGlmIChwYXJhbS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSBF
dnFDb25zdCkKICAgICAgICAgICAgIGNvbnN0VHlwZSA9IGZhbHNlOwotICAgICAgICBpZiAoZnVu
Y3Rpb25baV0udHlwZS0+aXNBcnJheSgpKQorICAgICAgICBpZiAocGFyYW0udHlwZS0+aXNBcnJh
eSgpKQogICAgICAgICAgICAgYXJyYXlBcmcgPSB0cnVlOwogICAgIH0KICAgICAKQEAgLTUxMCw3
ICs1NDUsNyBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKLSAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0
U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgdHlwZS0+Z2V0U3RydWN0KCktPnNpemUoKSAh
PSBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCkpIHsKKyAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0
U3RydWN0ICYmICF0eXBlLT5pc0FycmF5KCkgJiYgaW50KHR5cGUtPmdldFN0cnVjdCgpLT5zaXpl
KCkpICE9IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKSkgewogICAgICAgICBlcnJvcihsaW5lLCAi
TnVtYmVyIG9mIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJl
ciBvZiBzdHJ1Y3R1cmUgZmllbGRzIiwgImNvbnN0cnVjdG9yIiwgIiIpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9CkBAIC02NzQsMTQgKzcwOSwxMSBAQCBib29sIFRQYXJzZUNvbnRleHQ6
OmFycmF5U2l6ZUVycm9yQ2hlY2soCiAvLwogYm9vbCBUUGFyc2VDb250ZXh0OjphcnJheVF1YWxp
ZmllckVycm9yQ2hlY2soaW50IGxpbmUsIFRQdWJsaWNUeXBlIHR5cGUpCiB7Ci0gICAgaWYgKHR5
cGUucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSkgeworICAgIGlmICgodHlwZS5xdWFsaWZpZXIg
PT0gRXZxQXR0cmlidXRlKSB8fCAodHlwZS5xdWFsaWZpZXIgPT0gRXZxQ29uc3QpKSB7CiAgICAg
ICAgIGVycm9yKGxpbmUsICJjYW5ub3QgZGVjbGFyZSBhcnJheXMgb2YgdGhpcyBxdWFsaWZpZXIi
LCBUVHlwZSh0eXBlKS5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCksICIiKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgaWYgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0
ICYmIGV4dGVuc2lvbkVycm9yQ2hlY2sobGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC04ODYsMTYg
KzkxOCwyMiBAQCBib29sIFRQYXJzZUNvbnRleHQ6OnBhcmFtRXJyb3JDaGVjayhpbnQgCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9yQ2hl
Y2soaW50IGxpbmUsIGNvbnN0IGNoYXIqIGV4dGVuc2lvbikKLXsgICAgICAgCi0gICAgaWYgKGV4
dGVuc2lvbkJlaGF2aW9yW2V4dGVuc2lvbl0gPT0gRUJoV2FybikgewotICAgICAgICBpbmZvU2lu
ay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsICgiZXh0ZW5zaW9uICIgKyBUU3RyaW5nKGV4
dGVuc2lvbikgKyAiIGlzIGJlaW5nIHVzZWQiKS5jX3N0cigpLCBsaW5lKTsKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworYm9vbCBUUGFyc2VDb250ZXh0OjpleHRlbnNpb25FcnJvckNoZWNrKGludCBs
aW5lLCBjb25zdCBUU3RyaW5nJiBleHRlbnNpb24pCit7CisgICAgVEV4dGVuc2lvbkJlaGF2aW9y
Ojpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChleHRlbnNpb24p
OworICAgIGlmIChpdGVyID09IGV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpKSB7CisgICAgICAgIGVy
cm9yKGxpbmUsICJleHRlbnNpb24iLCBleHRlbnNpb24uY19zdHIoKSwgImlzIG5vdCBzdXBwb3J0
ZWQiKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGlmIChleHRlbnNpb25CZWhh
dmlvcltleHRlbnNpb25dID09IEVCaERpc2FibGUpIHsKLSAgICAgICAgZXJyb3IobGluZSwgImV4
dGVuc2lvbiIsIGV4dGVuc2lvbiwgImlzIGRpc2FibGVkIik7CisgICAgaWYgKGl0ZXItPnNlY29u
ZCA9PSBFQmhEaXNhYmxlKSB7CisgICAgICAgIGVycm9yKGxpbmUsICJleHRlbnNpb24iLCBleHRl
bnNpb24uY19zdHIoKSwgImlzIGRpc2FibGVkIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KKyAgICBpZiAoaXRlci0+c2Vjb25kID09IEVCaFdhcm4pIHsKKyAgICAgICAgVFN0cmluZyBt
c2cgPSAiZXh0ZW5zaW9uICIgKyBleHRlbnNpb24gKyAiIGlzIGJlaW5nIHVzZWQiOworICAgICAg
ICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCBsaW5l
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIHJldHVybiBmYWxzZTsKIH0K
QEAgLTEwMjEsNiArMTA1OSw3IEBAIGJvb2wgVFBhcnNlQ29udGV4dDo6ZXhlY3V0ZUluaXRpYWxp
emVyKFQKIAogYm9vbCBUUGFyc2VDb250ZXh0OjphcmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dy
ZWdhdGUqIGFnZ3JOb2RlKQogeworICAgIEFTU0VSVChhZ2dyTm9kZSAhPSBOVUxMKTsKICAgICBp
ZiAoIWFnZ3JOb2RlLT5pc0NvbnN0cnVjdG9yKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtMTAyOCwxMyArMTA2NywxMCBAQCBib29sIFRQYXJzZUNvbnRleHQ6OmFyZUFsbENoaWxkQ29u
c3QoVEluCiAKICAgICAvLyBjaGVjayBpZiBhbGwgdGhlIGNoaWxkIG5vZGVzIGFyZSBjb25zdGFu
dHMgc28gdGhhdCB0aGV5IGNhbiBiZSBpbnNlcnRlZCBpbnRvIAogICAgIC8vIHRoZSBwYXJlbnQg
bm9kZQotICAgIGlmIChhZ2dyTm9kZSkgewotICAgICAgICBUSW50ZXJtU2VxdWVuY2UgJmNoaWxk
U2VxdWVuY2VWZWN0b3IgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7Ci0gICAgICAgIGZvciAo
VEludGVybVNlcXVlbmNlOjppdGVyYXRvciBwID0gY2hpbGRTZXF1ZW5jZVZlY3Rvci5iZWdpbigp
OyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAgIT0gY2hpbGRTZXF1ZW5j
ZVZlY3Rvci5lbmQoKTsgcCsrKSB7Ci0gICAgICAgICAgICBpZiAoISgqcCktPmdldEFzVHlwZWQo
KS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9CisgICAgVEludGVybVNlcXVlbmNlICZzZXF1ZW5jZSA9IGFnZ3JOb2RlLT5nZXRT
ZXF1ZW5jZSgpIDsKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6aXRlcmF0b3IgcCA9IHNlcXVl
bmNlLmJlZ2luKCk7IHAgIT0gc2VxdWVuY2UuZW5kKCk7ICsrcCkgeworICAgICAgICBpZiAoISgq
cCktPmdldEFzVHlwZWQoKS0+Z2V0QXNDb25zdGFudFVuaW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcmV0dXJuIGFsbENvbnN0YW50OwpAQCAtMTM3OSwxNiAr
MTQxNSwyOSBAQCBUSW50ZXJtVHlwZWQqIFRQYXJzZUNvbnRleHQ6OmFkZENvbnN0U3RyCiB9CiAK
IC8vCi0vLyBJbml0aWFsaXplIGFsbCBzdXBwb3J0ZWQgZXh0ZW5zaW9ucyB0byBkaXNhYmxlCisv
LyBQYXJzZSBhbiBhcnJheSBvZiBzdHJpbmdzIHVzaW5nIHl5cGFyc2UuCiAvLwotdm9pZCBUUGFy
c2VDb250ZXh0Ojppbml0aWFsaXplRXh0ZW5zaW9uQmVoYXZpb3IoKQotewotICAgIC8vCi0gICAg
Ly8gZXhhbXBsZSBjb2RlOiBleHRlbnNpb25CZWhhdmlvclsidGVzdCJdID0gRUJoRGlzYWJsZTsg
Ly8gd2hlcmUgInRlc3QiIGlzIHRoZSBuYW1lIG9mIAotICAgIC8vIHN1cHBvcnRlZCBleHRlbnNp
b24KLSAgICAvLwotICAgIGV4dGVuc2lvbkJlaGF2aW9yWyJHTF9BUkJfdGV4dHVyZV9yZWN0YW5n
bGUiXSA9IEVCaFJlcXVpcmU7Ci0gICAgZXh0ZW5zaW9uQmVoYXZpb3JbIkdMXzNETF9hcnJheV9v
YmplY3RzIl0gPSBFQmhEaXNhYmxlOworLy8gUmV0dXJucyAwIGZvciBzdWNjZXNzLgorLy8KK2lu
dCBQYVBhcnNlU3RyaW5ncyhpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBj
b25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29u
dGV4dCkgeworICAgIGlmICgoY291bnQgPT0gMCkgfHwgKHN0cmluZyA9PSBOVUxMKSkKKyAgICAg
ICAgcmV0dXJuIDE7CisKKyAgICAvLyBzZXR1cCBwcmVwcm9jZXNzb3IuCisgICAgaWYgKEluaXRQ
cmVwcm9jZXNzb3IoKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgRGVmaW5lRXh0ZW5zaW9uTWFj
cm9zKGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yKTsKKworICAgIGlmIChnbHNsYW5nX2luaXRp
YWxpemUoY29udGV4dCkpCisgICAgICAgIHJldHVybiAxOworCisgICAgZ2xzbGFuZ19zY2FuKGNv
dW50LCBzdHJpbmcsIGxlbmd0aCwgY29udGV4dCk7CisgICAgaW50IGVycm9yID0gZ2xzbGFuZ19w
YXJzZShjb250ZXh0KTsKKworICAgIGdsc2xhbmdfZmluYWxpemUoY29udGV4dCk7CisgICAgRmlu
YWxpemVQcmVwcm9jZXNzb3IoKTsKKyAgICByZXR1cm4gKGVycm9yID09IDApICYmIChjb250ZXh0
LT5udW1FcnJvcnMgPT0gMCkgPyAwIDogMTsKIH0KIAogT1NfVExTSW5kZXggR2xvYmFsUGFyc2VD
b250ZXh0SW5kZXggPSBPU19JTlZBTElEX1RMU19JTkRFWDsKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5oCShyZXZpc2lvbiA3
NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC02LDkgKzYsMTAgQEAKICNpZm5kZWYgX1BBUlNFUl9IRUxQ
RVJfSU5DTFVERURfCiAjZGVmaW5lIF9QQVJTRVJfSEVMUEVSX0lOQ0xVREVEXwogCisjaW5jbHVk
ZSAiY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaCIKKyNpbmNsdWRlICJjb21waWxlci9sb2Nh
bGludGVybWVkaWF0ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCiAjaW5jbHVk
ZSAiY29tcGlsZXIvU3ltYm9sVGFibGUuaCIKLSNpbmNsdWRlICJjb21waWxlci9sb2NhbGludGVy
bWVkaWF0ZS5oIgogCiBzdHJ1Y3QgVE1hdHJpeEZpZWxkcyB7CiAgICAgYm9vbCB3aG9sZVJvdzsK
QEAgLTE3LDEzICsxOCw2IEBAIHN0cnVjdCBUTWF0cml4RmllbGRzIHsKICAgICBpbnQgY29sOwog
fTsKIAotdHlwZWRlZiBlbnVtIHsKLSAgICBFQmhSZXF1aXJlLAotICAgIEVCaEVuYWJsZSwKLSAg
ICBFQmhXYXJuLAotICAgIEVCaERpc2FibGUKLX0gVEJlaGF2aW9yOwotCiBzdHJ1Y3QgVFByYWdt
YSB7CiAgICAgVFByYWdtYShib29sIG8sIGJvb2wgZCkgOiBvcHRpbWl6ZShvKSwgZGVidWcoZCkg
eyB9CiAgICAgYm9vbCBvcHRpbWl6ZTsKQEAgLTM2LDE1ICszMCwxNiBAQCBzdHJ1Y3QgVFByYWdt
YSB7CiAvLyB0aGV5IGNhbiBiZSBwYXNzZWQgdG8gdGhlIHBhcnNlciB3aXRob3V0IG5lZWRpbmcg
YSBnbG9iYWwuCiAvLwogc3RydWN0IFRQYXJzZUNvbnRleHQgewotICAgIFRQYXJzZUNvbnRleHQo
VFN5bWJvbFRhYmxlJiBzeW10LCBUSW50ZXJtZWRpYXRlJiBpbnRlcm0sIEVTaExhbmd1YWdlIGws
IEVTaFNwZWMgcywgVEluZm9TaW5rJiBpcykgOgotICAgICAgICAgICAgaW50ZXJtZWRpYXRlKGlu
dGVybSksIHN5bWJvbFRhYmxlKHN5bXQpLCBpbmZvU2luayhpcyksIGxhbmd1YWdlKGwpLCBzcGVj
KHMpLCB0cmVlUm9vdCgwKSwKKyAgICBUUGFyc2VDb250ZXh0KFRTeW1ib2xUYWJsZSYgc3ltdCwg
Y29uc3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHQsIFRJbnRlcm1lZGlhdGUmIGludGVybSwgU2hT
aGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBUSW5mb1NpbmsmIGlzKSA6CisgICAg
ICAgICAgICBpbnRlcm1lZGlhdGUoaW50ZXJtKSwgc3ltYm9sVGFibGUoc3ltdCksIGV4dGVuc2lv
bkJlaGF2aW9yKGV4dCksIGluZm9TaW5rKGlzKSwgc2hhZGVyVHlwZSh0eXBlKSwgc2hhZGVyU3Bl
YyhzcGVjKSwgdHJlZVJvb3QoMCksCiAgICAgICAgICAgICByZWNvdmVyZWRGcm9tRXJyb3IoZmFs
c2UpLCBudW1FcnJvcnMoMCksIGxleEFmdGVyVHlwZShmYWxzZSksIGxvb3BOZXN0aW5nTGV2ZWwo
MCksCi0gICAgICAgICAgICBpblR5cGVQYXJlbihmYWxzZSksIGNvbnRleHRQcmFnbWEodHJ1ZSwg
ZmFsc2UpIHsgIH0KKyAgICAgICAgICAgIGluVHlwZVBhcmVuKGZhbHNlKSwgc2Nhbm5lcihOVUxM
KSwgY29udGV4dFByYWdtYSh0cnVlLCBmYWxzZSkgeyAgfQogICAgIFRJbnRlcm1lZGlhdGUmIGlu
dGVybWVkaWF0ZTsgLy8gdG8gaG9sZCBhbmQgYnVpbGQgYSBwYXJzZSB0cmVlCiAgICAgVFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZTsgICAvLyBzeW1ib2wgdGFibGUgdGhhdCBnb2VzIHdpdGggdGhl
IGxhbmd1YWdlIGN1cnJlbnRseSBiZWluZyBwYXJzZWQKKyAgICBURXh0ZW5zaW9uQmVoYXZpb3Ig
ZXh0ZW5zaW9uQmVoYXZpb3I7ICAvLyBtYXBwaW5nIGJldHdlZW4gc3VwcG9ydGVkIGV4dGVuc2lv
bnMgYW5kIGN1cnJlbnQgYmVoYXZpb3IuCiAgICAgVEluZm9TaW5rJiBpbmZvU2luazsKLSAgICBF
U2hMYW5ndWFnZSBsYW5ndWFnZTsgICAgICAgIC8vIHZlcnRleCBvciBmcmFnbWVudCBsYW5ndWFn
ZSAoZnV0dXJlOiBwYWNrIG9yIHVucGFjaykKLSAgICBFU2hTcGVjIHNwZWM7ICAgICAgICAgICAg
ICAgIC8vIFRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIGNvbXBpbGVyIGNvbmZvcm1zIHRvIC0g
R0xFUzIgb3IgV2ViR0wuCisgICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGU7ICAgICAgICAgICAg
ICAvLyB2ZXJ0ZXggb3IgZnJhZ21lbnQgbGFuZ3VhZ2UgKGZ1dHVyZTogcGFjayBvciB1bnBhY2sp
CisgICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7ICAgICAgICAgICAgICAvLyBUaGUgbGFuZ3Vh
Z2Ugc3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25mb3JtcyB0byAtIEdMRVMyIG9yIFdlYkdMLgog
ICAgIFRJbnRlcm1Ob2RlKiB0cmVlUm9vdDsgICAgICAgLy8gcm9vdCBvZiBwYXJzZSB0cmVlIGJl
aW5nIGNyZWF0ZWQKICAgICBib29sIHJlY292ZXJlZEZyb21FcnJvcjsgICAgIC8vIHRydWUgaWYg
YSBwYXJzZSBlcnJvciBoYXMgb2NjdXJyZWQsIGJ1dCB3ZSBjb250aW51ZSB0byBwYXJzZQogICAg
IGludCBudW1FcnJvcnM7CkBAIC01MywxMSArNDgsMTEgQEAgc3RydWN0IFRQYXJzZUNvbnRleHQg
ewogICAgIGJvb2wgaW5UeXBlUGFyZW47ICAgICAgICAgICAgLy8gdHJ1ZSBpZiBpbiBwYXJlbnRo
ZXNlcywgbG9va2luZyBvbmx5IGZvciBhbiBpZGVudGlmaWVyCiAgICAgY29uc3QgVFR5cGUqIGN1
cnJlbnRGdW5jdGlvblR5cGU7ICAvLyB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIHRo
YXQncyBjdXJyZW50bHkgYmVpbmcgcGFyc2VkCiAgICAgYm9vbCBmdW5jdGlvblJldHVybnNWYWx1
ZTsgICAvLyB0cnVlIGlmIGEgbm9uLXZvaWQgZnVuY3Rpb24gaGFzIGEgcmV0dXJuCi0gICAgVE1h
cDxUU3RyaW5nLCBUQmVoYXZpb3I+IGV4dGVuc2lvbkJlaGF2aW9yOwotICAgIHZvaWQgaW5pdGlh
bGl6ZUV4dGVuc2lvbkJlaGF2aW9yKCk7CiAKLSAgICB2b2lkIGVycm9yKFRTb3VyY2VMb2MsIGNv
bnN0IGNoYXIgKnN6UmVhc29uLCBjb25zdCBjaGFyICpzelRva2VuLAotICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqc3pFeHRyYUluZm9Gb3JtYXQsIC4uLik7CisgICAgdm9pZCBlcnJvcihUU291
cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbiwKKyAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mb0Zvcm1hdCwgLi4uKTsKKyAgICB2b2lkIHdh
cm5pbmcoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29uc3QgY2hhciogdG9r
ZW4sCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGV4dHJhSW5mb0Zvcm1hdCwgLi4uKTsK
ICAgICBib29sIHJlc2VydmVkRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYgaWRl
bnRpZmllcik7CiAgICAgdm9pZCByZWNvdmVyKCk7CiAKQEAgLTg2LDcgKzgxLDcgQEAgc3RydWN0
IFRQYXJzZUNvbnRleHQgewogICAgIGJvb2wgbm9uSW5pdENvbnN0RXJyb3JDaGVjayhpbnQgbGlu
ZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1YmxpY1R5cGUmIHR5cGUpOwogICAgIGJvb2wgbm9u
SW5pdEVycm9yQ2hlY2soaW50IGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBl
JiB0eXBlKTsKICAgICBib29sIHBhcmFtRXJyb3JDaGVjayhpbnQgbGluZSwgVFF1YWxpZmllciBx
dWFsaWZpZXIsIFRRdWFsaWZpZXIgcGFyYW1RdWFsaWZpZXIsIFRUeXBlKiB0eXBlKTsKLSAgICBi
b29sIGV4dGVuc2lvbkVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IGNoYXIqKTsKKyAgICBib29s
IGV4dGVuc2lvbkVycm9yQ2hlY2soaW50IGxpbmUsIGNvbnN0IFRTdHJpbmcmKTsKICAgICBjb25z
dCBURnVuY3Rpb24qIGZpbmRGdW5jdGlvbihpbnQgbGluZSwgVEZ1bmN0aW9uKiBwZm5DYWxsLCBi
b29sICpidWlsdEluID0gMCk7CiAgICAgYm9vbCBleGVjdXRlSW5pdGlhbGl6ZXIoVFNvdXJjZUxv
YyBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgcFR5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbml0aWFsaXplciwgVEludGVybU5v
ZGUqJiBpbnRlcm1Ob2RlLCBUVmFyaWFibGUqIHZhcmlhYmxlID0gMCk7CkBAIC0xMDAsMTYgKzk1
LDE0IEBAIHN0cnVjdCBUUGFyc2VDb250ZXh0IHsKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0
QXJyYXlOb2RlKGludCBpbmRleCwgVEludGVybVR5cGVkKiBub2RlLCBUU291cmNlTG9jIGxpbmUp
OwogICAgIFRJbnRlcm1UeXBlZCogYWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYgLCBUSW50ZXJtVHlw
ZWQqLCBUU291cmNlTG9jKTsKICAgICBib29sIGFycmF5U2V0TWF4U2l6ZShUSW50ZXJtU3ltYm9s
KiwgVFR5cGUqLCBpbnQsIGJvb2wsIFRTb3VyY2VMb2MpOworICAgIHZvaWQqIHNjYW5uZXI7CiAg
ICAgc3RydWN0IFRQcmFnbWEgY29udGV4dFByYWdtYTsKICAgICBUU3RyaW5nIEhhc2hFcnJNc2c7
CiAgICAgYm9vbCBBZnRlckVPRjsKIH07CiAKLWludCBQYVBhcnNlU3RyaW5ncyhjaGFyKiBhcmd2
W10sIGludCBzdHJMZW5bXSwgaW50IGFyZ2MsIFRQYXJzZUNvbnRleHQmKTsKLXZvaWQgUGFSZXNl
cnZlZFdvcmQoKTsKLWludCBQYUlkZW50T3JUeXBlKFRTdHJpbmcmIGlkLCBUUGFyc2VDb250ZXh0
JiwgVFN5bWJvbComKTsKLWludCBQYVBhcnNlQ29tbWVudChpbnQgJmxpbmVubywgVFBhcnNlQ29u
dGV4dCYpOwotdm9pZCBzZXRJbml0aWFsU3RhdGUoKTsKK2ludCBQYVBhcnNlU3RyaW5ncyhpbnQg
Y291bnQsIGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisg
ICAgICAgICAgICAgICAgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiAKIHR5cGVkZWYgVFBh
cnNlQ29udGV4dCogVFBhcnNlQ29udGV4dFBvaW50ZXI7CiBleHRlcm4gVFBhcnNlQ29udGV4dFBv
aW50ZXImIEdldEdsb2JhbFBhcnNlQ29udGV4dCgpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAJKHJldmlzaW9uIDc1ODAx
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIyLDE0ICsyMiwxMCBAQCB2b2lkIEluaXRpYWxpemVHbG9iYWxQ
b29scygpCiAgICAgaWYgKGdsb2JhbFBvb2xzKQogICAgICAgICByZXR1cm47CiAKLSAgICBUUG9v
bEFsbG9jYXRvciAqZ2xvYmFsUG9vbEFsbG9jYXRvciA9IG5ldyBUUG9vbEFsbG9jYXRvcih0cnVl
KTsKLQogICAgIFRUaHJlYWRHbG9iYWxQb29scyogdGhyZWFkRGF0YSA9IG5ldyBUVGhyZWFkR2xv
YmFsUG9vbHMoKTsKLSAgICAKLSAgICB0aHJlYWREYXRhLT5nbG9iYWxQb29sQWxsb2NhdG9yID0g
Z2xvYmFsUG9vbEFsbG9jYXRvcjsKLSAgICAgICAgCi0gICAgT1NfU2V0VExTVmFsdWUoUG9vbElu
ZGV4LCB0aHJlYWREYXRhKTsgICAgIAotICAgIGdsb2JhbFBvb2xBbGxvY2F0b3ItPnB1c2goKTsK
KyAgICB0aHJlYWREYXRhLT5nbG9iYWxQb29sQWxsb2NhdG9yID0gMDsKKworICAgIE9TX1NldFRM
U1ZhbHVlKFBvb2xJbmRleCwgdGhyZWFkRGF0YSk7CiB9CiAKIHZvaWQgRnJlZUdsb2JhbFBvb2xz
KCkKQEAgLTM4LDkgKzM0LDcgQEAgdm9pZCBGcmVlR2xvYmFsUG9vbHMoKQogICAgIFRUaHJlYWRH
bG9iYWxQb29scyogZ2xvYmFsUG9vbHM9IHN0YXRpY19jYXN0PFRUaHJlYWRHbG9iYWxQb29scyo+
KE9TX0dldFRMU1ZhbHVlKFBvb2xJbmRleCkpOyAgICAKICAgICBpZiAoIWdsb2JhbFBvb2xzKQog
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgR2xvYmFsUG9vbEFsbG9jYXRvci5wb3BBbGwoKTsK
LSAgICBkZWxldGUgJkdsb2JhbFBvb2xBbGxvY2F0b3I7ICAgICAgIAorIAogICAgIGRlbGV0ZSBn
bG9iYWxQb29sczsKIH0KIApAQCAtNjYsNyArNjAsNyBAQCBUUG9vbEFsbG9jYXRvciYgR2V0R2xv
YmFsUG9vbEFsbG9jYXRvcigpCiAgICAgcmV0dXJuICp0aHJlYWREYXRhLT5nbG9iYWxQb29sQWxs
b2NhdG9yOwogfQogCi12b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0b3JQdHIoVFBvb2xBbGxvY2F0
b3IqIHBvb2xBbGxvY2F0b3IpCit2b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxv
Y2F0b3IqIHBvb2xBbGxvY2F0b3IpCiB7CiAgICAgVFRocmVhZEdsb2JhbFBvb2xzKiB0aHJlYWRE
YXRhID0gc3RhdGljX2Nhc3Q8VFRocmVhZEdsb2JhbFBvb2xzKj4oT1NfR2V0VExTVmFsdWUoUG9v
bEluZGV4KSk7CiAKQEAgLTc3LDEzICs3MSwxMyBAQCB2b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0
b3JQdHIoVFBvb2xBbGxvCiAvLyBJbXBsZW1lbnQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFRQ
b29sQWxsb2NhdG9yIGNsYXNzLCB3aGljaAogLy8gaXMgZG9jdW1lbnRlZCBpbiBQb29sQWxsb2Mu
aC4KIC8vCi1UUG9vbEFsbG9jYXRvcjo6VFBvb2xBbGxvY2F0b3IoYm9vbCBnLCBpbnQgZ3Jvd3Ro
SW5jcmVtZW50LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCkgOiAKLSAgICBnbG9iYWwoZyksCitU
UG9vbEFsbG9jYXRvcjo6VFBvb2xBbGxvY2F0b3IoaW50IGdyb3d0aEluY3JlbWVudCwgaW50IGFs
bG9jYXRpb25BbGlnbm1lbnQpIDogCiAgICAgcGFnZVNpemUoZ3Jvd3RoSW5jcmVtZW50KSwKICAg
ICBhbGlnbm1lbnQoYWxsb2NhdGlvbkFsaWdubWVudCksCiAgICAgZnJlZUxpc3QoMCksCiAgICAg
aW5Vc2VMaXN0KDApLAotICAgIG51bUNhbGxzKDApCisgICAgbnVtQ2FsbHMoMCksCisgICAgdG90
YWxCeXRlcygwKQogewogICAgIC8vCiAgICAgLy8gRG9uJ3QgYWxsb3cgcGFnZSBzaXplcyB3ZSBr
bm93IGFyZSBzbWFsbGVyIHRoYW4gYWxsIGNvbW1vbgpAQCAtMTIzLDI0ICsxMTcsMTQgQEAgVFBv
b2xBbGxvY2F0b3I6OlRQb29sQWxsb2NhdG9yKGJvb2wgZywgaQogCiBUUG9vbEFsbG9jYXRvcjo6
flRQb29sQWxsb2NhdG9yKCkKIHsKLSAgICBpZiAoIWdsb2JhbCkgewotICAgICAgICAvLwotICAg
ICAgICAvLyBUaGVuIHdlIGtub3cgdGhhdCB0aGlzIG9iamVjdCBpcyBub3QgYmVpbmcgCi0gICAg
ICAgIC8vIGFsbG9jYXRlZCBhZnRlciBvdGhlciwgZ2xvYmFsbHkgc2NvcGVkIG9iamVjdHMKLSAg
ICAgICAgLy8gdGhhdCBkZXBlbmQgb24gaXQuICBTbyB3ZSBjYW4gZGVsZXRlIHRoZSAiaW4gdXNl
IiBtZW1vcnkuCi0gICAgICAgIC8vCi0gICAgICAgIHdoaWxlIChpblVzZUxpc3QpIHsKLSAgICAg
ICAgICAgIHRIZWFkZXIqIG5leHQgPSBpblVzZUxpc3QtPm5leHRQYWdlOwotICAgICAgICAgICAg
aW5Vc2VMaXN0LT5+dEhlYWRlcigpOwotICAgICAgICAgICAgZGVsZXRlIFtdIHJlaW50ZXJwcmV0
X2Nhc3Q8Y2hhcio+KGluVXNlTGlzdCk7Ci0gICAgICAgICAgICBpblVzZUxpc3QgPSBuZXh0Owot
ICAgICAgICB9CisgICAgd2hpbGUgKGluVXNlTGlzdCkgeworICAgICAgICB0SGVhZGVyKiBuZXh0
ID0gaW5Vc2VMaXN0LT5uZXh0UGFnZTsKKyAgICAgICAgaW5Vc2VMaXN0LT5+dEhlYWRlcigpOwor
ICAgICAgICBkZWxldGUgW10gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5Vc2VMaXN0KTsKKyAg
ICAgICAgaW5Vc2VMaXN0ID0gbmV4dDsKICAgICB9CiAKLSAgICAvLwotICAgIC8vIEFsd2F5cyBk
ZWxldGUgdGhlIGZyZWUgbGlzdCBtZW1vcnkgLSBpdCBjYW4ndCBiZSBiZWluZwotICAgIC8vIChj
b3JyZWN0bHkpIHJlZmVyZW5jZWQsIHdoZXRoZXIgdGhlIHBvb2wgYWxsb2NhdG9yIHdhcwotICAg
IC8vIGdsb2JhbCBvciBub3QuICBXZSBzaG91bGQgbm90IGNoZWNrIHRoZSBndWFyZCBibG9ja3MK
KyAgICAvLyBXZSBzaG91bGQgbm90IGNoZWNrIHRoZSBndWFyZCBibG9ja3MKICAgICAvLyBoZXJl
LCBiZWNhdXNlIHdlIGRpZCBpdCBhbHJlYWR5IHdoZW4gdGhlIGJsb2NrIHdhcwogICAgIC8vIHBs
YWNlZCBpbnRvIHRoZSBmcmVlIGxpc3QuCiAgICAgLy8KQEAgLTMxNSw0ICsyOTksNCBAQCB2b2lk
IFRBbGxvY2F0aW9uOjpjaGVja0FsbG9jTGlzdCgpIGNvbnN0CiB7CiAgICAgZm9yIChjb25zdCBU
QWxsb2NhdGlvbiogYWxsb2MgPSB0aGlzOyBhbGxvYyAhPSAwOyBhbGxvYyA9IGFsbG9jLT5wcmV2
QWxsb2MpCiAgICAgICAgIGFsbG9jLT5jaGVjaygpOwotfQorfQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Qb29s
QWxsb2MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvUG9vbEFsbG9jLmgJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1Bvb2xBbGxvYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNyArMTE1
LDcgQEAgcHJpdmF0ZToKIC8vCiBjbGFzcyBUUG9vbEFsbG9jYXRvciB7CiBwdWJsaWM6Ci0gICAg
VFBvb2xBbGxvY2F0b3IoYm9vbCBnbG9iYWwgPSBmYWxzZSwgaW50IGdyb3d0aEluY3JlbWVudCA9
IDgqMTAyNCwgaW50IGFsbG9jYXRpb25BbGlnbm1lbnQgPSAxNik7CisgICAgVFBvb2xBbGxvY2F0
b3IoaW50IGdyb3d0aEluY3JlbWVudCA9IDgqMTAyNCwgaW50IGFsbG9jYXRpb25BbGlnbm1lbnQg
PSAxNik7CiAKICAgICAvLwogICAgIC8vIERvbid0IGNhbGwgdGhlIGRlc3RydWN0b3IganVzdCB0
byBmcmVlIHVwIHRoZSBtZW1vcnksIGNhbGwgcG9wKCkKQEAgLTE5NCw3ICsxOTQsNiBAQCBwcm90
ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBUQWxsb2NhdGlvbjo6b2Zmc2V0QWxsb2NhdGlvbihtZW1v
cnkpOwogICAgIH0KIAotICAgIGJvb2wgZ2xvYmFsOyAgICAgICAgICAgIC8vIHNob3VsZCBiZSB0
cnVlIGlmIHRoaXMgb2JqZWN0IGlzIGdsb2JhbGx5IHNjb3BlZAogICAgIHNpemVfdCBwYWdlU2l6
ZTsgICAgICAgIC8vIGdyYW51bGFyaXR5IG9mIGFsbG9jYXRpb24gZnJvbSB0aGUgT1MKICAgICBz
aXplX3QgYWxpZ25tZW50OyAgICAgICAvLyBhbGwgcmV0dXJuZWQgYWxsb2NhdGlvbnMgd2lsbCBi
ZSBhbGlnbmVkIGF0IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgZ3JhbnVs
YXJpdHksIHdoaWNoIHdpbGwgYmUgYSBwb3dlciBvZiAyCkBAIC0yMjAsMTggKzIxOSwxNSBAQCBw
cml2YXRlOgogLy8gZGlmZmVyZW50IHRpbWVzLiAgQnV0IGEgc2ltcGxlIHVzZSBpcyB0byBoYXZl
IGEgZ2xvYmFsIHBvcAogLy8gd2l0aCBldmVyeW9uZSB1c2luZyB0aGUgc2FtZSBnbG9iYWwgYWxs
b2NhdG9yLgogLy8KLXR5cGVkZWYgVFBvb2xBbGxvY2F0b3IqIFBvb2xBbGxvY2F0b3JQb2ludGVy
OwogZXh0ZXJuIFRQb29sQWxsb2NhdG9yJiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCk7CitleHRl
cm4gdm9pZCBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKFRQb29sQWxsb2NhdG9yKiBwb29sQWxsb2Nh
dG9yKTsKICNkZWZpbmUgR2xvYmFsUG9vbEFsbG9jYXRvciBHZXRHbG9iYWxQb29sQWxsb2NhdG9y
KCkKIAotCiBzdHJ1Y3QgVFRocmVhZEdsb2JhbFBvb2xzCiB7CiAgICAgVFBvb2xBbGxvY2F0b3Iq
IGdsb2JhbFBvb2xBbGxvY2F0b3I7CiB9OwogCi12b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0b3JQ
dHIoVFBvb2xBbGxvY2F0b3IqIHBvb2xBbGxvY2F0b3IpOwotCiAvLwogLy8gVGhpcyBTVEwgY29t
cGF0aWJsZSBhbGxvY2F0b3IgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyB0aGUgYWxsb2NhdG9y
CiAvLyBwYXJhbWV0ZXIgdG8gdGVtcGxhdGl6ZWQgU1RMIGNvbnRhaW5lcnMsIGxpa2UgdmVjdG9y
IGFuZCBtYXAuCkBAIC0zMDEsNCArMjk3LDQgQEAgcHJvdGVjdGVkOgogICAgIFRQb29sQWxsb2Nh
dG9yJiBhbGxvY2F0b3I7CiB9OwogCi0jZW5kaWYgLy8gX1BPT0xBTExPQ19JTkNMVURFRF8KKyNl
bmRpZiAvLyBfUE9PTEFMTE9DX0lOQ0xVREVEXwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hTeW1ib2wu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9T
ZWFyY2hTeW1ib2wuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzgg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBTZWFyY2hTeW1ib2wgaXMgYW4gQVNUIHRyYXZlcnNl
ciB0byBkZXRlY3QgdGhlIHVzZSBvZiBhIGdpdmVuIHN5bWJvbCBuYW1lCisvLworCisjaW5jbHVk
ZSAiY29tcGlsZXIvU2VhcmNoU3ltYm9sLmgiCisKKyNpbmNsdWRlICJjb21waWxlci9JbmZvU2lu
ay5oIgorI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKKworbmFtZXNwYWNlIHNoCit7
CitTZWFyY2hTeW1ib2w6OlNlYXJjaFN5bWJvbChjb25zdCBUU3RyaW5nICZzeW1ib2wpIDogbVN5
bWJvbChzeW1ib2wpCit7CisgICAgbWF0Y2ggPSBmYWxzZTsKK30KKwordm9pZCBTZWFyY2hTeW1i
b2w6OnRyYXZlcnNlKFRJbnRlcm1Ob2RlICpub2RlKQoreworICAgIG5vZGUtPnRyYXZlcnNlKHRo
aXMpOworfQorCit2b2lkIFNlYXJjaFN5bWJvbDo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAq
c3ltYm9sTm9kZSkKK3sKKyAgICBpZiAoc3ltYm9sTm9kZS0+Z2V0U3ltYm9sKCkgPT0gbVN5bWJv
bCkKKyAgICB7CisgICAgICAgIG1hdGNoID0gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgU2VhcmNo
U3ltYm9sOjpmb3VuZE1hdGNoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbWF0Y2g7Cit9Cit9Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJj
aFN5bWJvbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NlYXJjaFN5bWJvbC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMzIEBACisvLwor
Ly8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworLy8gU2VhcmNoU3ltYm9sIGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gZGV0
ZWN0IHRoZSB1c2Ugb2YgYSBnaXZlbiBzeW1ib2wgbmFtZQorLy8KKworI2lmbmRlZiBDT01QSUxF
Ul9TRUFSQ0hTWU1CT0xfSF8KKyNkZWZpbmUgQ09NUElMRVJfU0VBUkNIU1lNQk9MX0hfCisKKyNp
bmNsdWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJz
ZUhlbHBlci5oIgorCituYW1lc3BhY2Ugc2gKK3sKK2NsYXNzIFNlYXJjaFN5bWJvbCA6IHB1Ymxp
YyBUSW50ZXJtVHJhdmVyc2VyCit7CisgIHB1YmxpYzoKKyAgICBTZWFyY2hTeW1ib2woY29uc3Qg
VFN0cmluZyAmc3ltYm9sKTsKKworICAgIHZvaWQgdHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUp
OworICAgIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCAqc3ltYm9sTm9kZSk7CisKKyAg
ICBib29sIGZvdW5kTWF0Y2goKSBjb25zdDsKKworICBwcm90ZWN0ZWQ6CisgICAgY29uc3QgVFN0
cmluZyAmbVN5bWJvbDsKKyAgICBib29sIG1hdGNoOworfTsKK30KKworI2VuZGlmICAgLy8gQ09N
UElMRVJfU0VBUkNIU1lNQk9MX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvU2hIYW5kbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAkocmV2aXNpb24gNzU4MDEpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hIYW5kbGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTYsMjAgKzE2LDI2IEBACiAKICNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKIAorI2lu
Y2x1ZGUgImNvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmgiCiAjaW5jbHVkZSAiY29tcGlsZXIv
SW5mb1NpbmsuaCIKICNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL1ZhcmlhYmxlSW5mby5oIgogCiBjbGFzcyBUQ29tcGlsZXI7Ci1jbGFzcyBUSW50
ZXJtTm9kZTsKIAogLy8KIC8vIFRoZSBiYXNlIGNsYXNzIHVzZWQgdG8gYmFjayBoYW5kbGVzIHJl
dHVybmVkIHRvIHRoZSBkcml2ZXIuCiAvLwogY2xhc3MgVFNoSGFuZGxlQmFzZSB7CiBwdWJsaWM6
Ci0gICAgVFNoSGFuZGxlQmFzZSgpIHsgfQotICAgIHZpcnR1YWwgflRTaEhhbmRsZUJhc2UoKSB7
IH0KKyAgICBUU2hIYW5kbGVCYXNlKCk7CisgICAgdmlydHVhbCB+VFNoSGFuZGxlQmFzZSgpOwog
ICAgIHZpcnR1YWwgVENvbXBpbGVyKiBnZXRBc0NvbXBpbGVyKCkgeyByZXR1cm4gMDsgfQorCitw
cm90ZWN0ZWQ6CisgICAgLy8gTWVtb3J5IGFsbG9jYXRvci4gQWxsb2NhdGVzIGFuZCB0cmFja3Mg
bWVtb3J5IHJlcXVpcmVkIGJ5IHRoZSBjb21waWxlci4KKyAgICAvLyBEZWFsbG9jYXRlcyBhbGwg
bWVtb3J5IHdoZW4gY29tcGlsZXIgaXMgZGVzdHJ1Y3RlZC4KKyAgICBUUG9vbEFsbG9jYXRvciBh
bGxvY2F0b3I7CiB9OwogCiAvLwpAQCAtMzgsMjcgKzQ0LDQ5IEBAIHB1YmxpYzoKIC8vCiBjbGFz
cyBUQ29tcGlsZXIgOiBwdWJsaWMgVFNoSGFuZGxlQmFzZSB7CiBwdWJsaWM6Ci0gICAgVENvbXBp
bGVyKEVTaExhbmd1YWdlIGwsIEVTaFNwZWMgcykgOiBsYW5ndWFnZShsKSwgc3BlYyhzKSB7IH0K
LSAgICB2aXJ0dWFsIH5UQ29tcGlsZXIoKSB7IH0KLQotICAgIEVTaExhbmd1YWdlIGdldExhbmd1
YWdlKCkgY29uc3QgeyByZXR1cm4gbGFuZ3VhZ2U7IH0KLSAgICBFU2hTcGVjIGdldFNwZWMoKSBj
b25zdCB7IHJldHVybiBzcGVjOyB9Ci0gICAgVFN5bWJvbFRhYmxlJiBnZXRTeW1ib2xUYWJsZSgp
IHsgcmV0dXJuIHN5bWJvbFRhYmxlOyB9Ci0gICAgVEluZm9TaW5rJiBnZXRJbmZvU2luaygpIHsg
cmV0dXJuIGluZm9TaW5rOyB9CisgICAgVENvbXBpbGVyKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNo
YWRlclNwZWMgc3BlYyk7CisgICAgdmlydHVhbCB+VENvbXBpbGVyKCk7CisgICAgdmlydHVhbCBU
Q29tcGlsZXIqIGdldEFzQ29tcGlsZXIoKSB7IHJldHVybiB0aGlzOyB9CiAKLSAgICB2aXJ0dWFs
IGJvb2wgY29tcGlsZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworICAgIGJvb2wgSW5pdChjb25z
dCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcyk7CisgICAgYm9vbCBjb21waWxlKGNvbnN0
IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKKyAgICAgICAgICAgICAgICAgY29uc3QgaW50
IG51bVN0cmluZ3MsCisgICAgICAgICAgICAgICAgIGludCBjb21waWxlT3B0aW9ucyk7CiAKLSAg
ICB2aXJ0dWFsIFRDb21waWxlciogZ2V0QXNDb21waWxlcigpIHsgcmV0dXJuIHRoaXM7IH0KKyAg
ICAvLyBHZXQgcmVzdWx0cyBvZiB0aGUgbGFzdCBjb21waWxhdGlvbi4KKyAgICBUSW5mb1Npbmsm
IGdldEluZm9TaW5rKCkgeyByZXR1cm4gaW5mb1Npbms7IH0KKyAgICBjb25zdCBUVmFyaWFibGVJ
bmZvTGlzdCYgZ2V0QXR0cmlicygpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnM7IH0KKyAgICBjb25z
dCBUVmFyaWFibGVJbmZvTGlzdCYgZ2V0VW5pZm9ybXMoKSBjb25zdCB7IHJldHVybiB1bmlmb3Jt
czsgfQogCiBwcm90ZWN0ZWQ6Ci0gICAgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2U7Ci0gICAgRVNoU3Bl
YyBzcGVjOworICAgIFNoU2hhZGVyVHlwZSBnZXRTaGFkZXJUeXBlKCkgY29uc3QgeyByZXR1cm4g
c2hhZGVyVHlwZTsgfQorICAgIFNoU2hhZGVyU3BlYyBnZXRTaGFkZXJTcGVjKCkgY29uc3QgeyBy
ZXR1cm4gc2hhZGVyU3BlYzsgfQorICAgIC8vIEluaXRpYWxpemUgc3ltYm9sLXRhYmxlIHdpdGgg
YnVpbHQtaW4gc3ltYm9scy4KKyAgICBib29sIEluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3Qg
U2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMpOworICAgIC8vIENsZWFycyB0aGUgcmVzdWx0
cyBmcm9tIHRoZSBwcmV2aW91cyBjb21waWxhdGlvbi4KKyAgICB2b2lkIGNsZWFyUmVzdWx0cygp
OworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2Vl
ZCB0aGUgbWluaW11bQorICAgIC8vIGZ1bmN0aW9uYWxpdHkgbWFuZGF0ZWQgaW4gR0xTTCAxLjAg
c3BlYyBBcHBlbmRpeCBBLgorICAgIGJvb2wgdmFsaWRhdGVMaW1pdGF0aW9ucyhUSW50ZXJtTm9k
ZSogcm9vdCk7CisgICAgLy8gQ29sbGVjdCBpbmZvIGZvciBhbGwgYXR0cmlicyBhbmQgdW5pZm9y
bXMuCisgICAgdm9pZCBjb2xsZWN0QXR0cmlic1VuaWZvcm1zKFRJbnRlcm1Ob2RlKiByb290KTsK
KyAgICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0IGNvZGUuCisgICAgdmlydHVhbCB2b2lkIHRyYW5z
bGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworCitwcml2YXRlOgorICAgIFNoU2hhZGVyVHlw
ZSBzaGFkZXJUeXBlOworICAgIFNoU2hhZGVyU3BlYyBzaGFkZXJTcGVjOwogCiAgICAgLy8gQnVp
bHQtaW4gc3ltYm9sIHRhYmxlIGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UsIHNwZWMsIGFuZCByZXNv
dXJjZXMuCiAgICAgLy8gSXQgaXMgcHJlc2VydmVkIGZyb20gY29tcGlsZS10by1jb21waWxlLgog
ICAgIFRTeW1ib2xUYWJsZSBzeW1ib2xUYWJsZTsKLSAgICAvLyBPdXRwdXQgc2luay4KLSAgICBU
SW5mb1NpbmsgaW5mb1Npbms7CisgICAgLy8gQnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1
bHQgYmVoYXZpb3IuCisgICAgVEV4dGVuc2lvbkJlaGF2aW9yIGV4dGVuc2lvbkJlaGF2aW9yOwor
CisgICAgLy8gUmVzdWx0cyBvZiBjb21waWxhdGlvbi4KKyAgICBUSW5mb1NpbmsgaW5mb1Npbms7
ICAvLyBPdXRwdXQgc2luay4KKyAgICBUVmFyaWFibGVJbmZvTGlzdCBhdHRyaWJzOyAgLy8gQWN0
aXZlIGF0dHJpYnV0ZXMgaW4gdGhlIGNvbXBpbGVkIHNoYWRlci4KKyAgICBUVmFyaWFibGVJbmZv
TGlzdCB1bmlmb3JtczsgIC8vIEFjdGl2ZSB1bmlmb3JtcyBpbiB0aGUgY29tcGlsZWQgc2hhZGVy
LgogfTsKIAogLy8KQEAgLTcwLDcgKzk4LDcgQEAgcHJvdGVjdGVkOgogLy8gZGVzdHJveSB0aGUg
bWFjaGluZSBkZXBlbmRlbnQgb2JqZWN0cywgd2hpY2ggY29udGFpbiB0aGUKIC8vIGFib3ZlIG1h
Y2hpbmUgaW5kZXBlbmRlbnQgaW5mb3JtYXRpb24uCiAvLwotVENvbXBpbGVyKiBDb25zdHJ1Y3RD
b21waWxlcihFU2hMYW5ndWFnZSwgRVNoU3BlYyk7CitUQ29tcGlsZXIqIENvbnN0cnVjdENvbXBp
bGVyKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7CiB2b2lkIERlbGV0ZUNv
bXBpbGVyKFRDb21waWxlciopOwogCi0jZW5kaWYgLy8gX1NISEFORExFX0lOQ0xVREVEXworI2Vu
ZGlmIC8vIF9TSEhBTkRMRV9JTkNMVURFRF8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRl
ckxhbmcuY3BwCShyZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9TaGFkZXJMYW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEsNzggKzExLDU1
IEBACiAKICNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKIAotI2luY2x1ZGUgImNvbXBp
bGVyL0luaXRpYWxpemUuaCIKICNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplRGxsLmgiCi0j
aW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKICNpbmNsdWRlICJjb21waWxlci9TaEhh
bmRsZS5oIgotI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRhYmxlLmgiCiAKLXN0YXRpYyBib29s
IEluaXRpYWxpemVTeW1ib2xUYWJsZSgKLSAgICAgICAgY29uc3QgVEJ1aWx0SW5TdHJpbmdzJiBi
dWlsdEluU3RyaW5ncywKLSAgICAgICAgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UsIEVTaFNwZWMgc3Bl
YywgY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSYgcmVzb3VyY2VzLAotICAgICAgICBUSW5mb1Npbmsm
IGluZm9TaW5rLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQotewotICAgIFRJbnRlcm1lZGlh
dGUgaW50ZXJtZWRpYXRlKGluZm9TaW5rKTsKLSAgICBUUGFyc2VDb250ZXh0IHBhcnNlQ29udGV4
dChzeW1ib2xUYWJsZSwgaW50ZXJtZWRpYXRlLCBsYW5ndWFnZSwgc3BlYywgaW5mb1NpbmspOwot
Ci0gICAgR2xvYmFsUGFyc2VDb250ZXh0ID0gJnBhcnNlQ29udGV4dDsKLQotICAgIHNldEluaXRp
YWxTdGF0ZSgpOwotCi0gICAgYXNzZXJ0KHN5bWJvbFRhYmxlLmlzRW1wdHkoKSk7ICAgICAgIAot
ICAgIC8vCi0gICAgLy8gUGFyc2UgdGhlIGJ1aWx0LWlucy4gIFRoaXMgc2hvdWxkIG9ubHkgaGFw
cGVuIG9uY2UgcGVyCi0gICAgLy8gbGFuZ3VhZ2Ugc3ltYm9sIHRhYmxlLgotICAgIC8vCi0gICAg
Ly8gUHVzaCB0aGUgc3ltYm9sIHRhYmxlIHRvIGdpdmUgaXQgYW4gaW5pdGlhbCBzY29wZS4gIFRo
aXMKLSAgICAvLyBwdXNoIHNob3VsZCBub3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgcG9wLCBzbyB0
aGF0IGJ1aWx0LWlucwotICAgIC8vIGFyZSBwcmVzZXJ2ZWQsIGFuZCB0aGUgdGVzdCBmb3IgYW4g
ZW1wdHkgdGFibGUgZmFpbHMuCi0gICAgLy8KLSAgICBzeW1ib2xUYWJsZS5wdXNoKCk7Ci0gICAg
Ci0gICAgLy9Jbml0aWFsaXplIHRoZSBQcmVwcm9jZXNzb3IKLSAgICBpZiAoSW5pdFByZXByb2Nl
c3NvcigpKQotICAgIHsKLSAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRl
cm5hbEVycm9yLCAgIlVuYWJsZSB0byBpbnRpYWxpemUgdGhlIFByZXByb2Nlc3NvciIpOwotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQorLy8KKy8vIFRoaXMgaXMgdGhlIHBsYXRmb3JtIGlu
ZGVwZW5kZW50IGludGVyZmFjZSBiZXR3ZWVuIGFuIE9HTCBkcml2ZXIKKy8vIGFuZCB0aGUgc2hh
ZGluZyBsYW5ndWFnZSBjb21waWxlci4KKy8vCiAKLSAgICBmb3IgKFRCdWlsdEluU3RyaW5nczo6
Y29uc3RfaXRlcmF0b3IgaSA9IGJ1aWx0SW5TdHJpbmdzLmJlZ2luKCk7IGkgIT0gYnVpbHRJblN0
cmluZ3MuZW5kKCk7ICsraSkKK3N0YXRpYyBpbnQgZ2V0VmFyaWFibGVNYXhMZW5ndGgoY29uc3Qg
VFZhcmlhYmxlSW5mb0xpc3QmIHZhckxpc3QpCit7CisgICAgVFN0cmluZzo6c2l6ZV90eXBlIG1h
eExlbiA9IDA7CisgICAgZm9yIChUVmFyaWFibGVJbmZvTGlzdDo6Y29uc3RfaXRlcmF0b3IgaSA9
IHZhckxpc3QuYmVnaW4oKTsKKyAgICAgICAgIGkgIT0gdmFyTGlzdC5lbmQoKTsgKytpKQogICAg
IHsKLSAgICAgICAgY29uc3QgY2hhciogYnVpbHRJblNoYWRlcnNbMV07Ci0gICAgICAgIGludCBi
dWlsdEluTGVuZ3Roc1sxXTsKLQotICAgICAgICBidWlsdEluU2hhZGVyc1swXSA9ICgqaSkuY19z
dHIoKTsKLSAgICAgICAgYnVpbHRJbkxlbmd0aHNbMF0gPSAoaW50KSAoKmkpLnNpemUoKTsKLQot
ICAgICAgICBpZiAoUGFQYXJzZVN0cmluZ3MoY29uc3RfY2FzdDxjaGFyKio+KGJ1aWx0SW5TaGFk
ZXJzKSwgYnVpbHRJbkxlbmd0aHMsIDEsIHBhcnNlQ29udGV4dCkgIT0gMCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAi
VW5hYmxlIHRvIHBhcnNlIGJ1aWx0LWlucyIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9CisgICAgICAgIG1heExlbiA9IHN0ZDo6bWF4KG1heExlbiwgaS0+bmFtZS5zaXpl
KCkpOwogICAgIH0KLQotICAgIElkZW50aWZ5QnVpbHRJbnMobGFuZ3VhZ2UsIHNwZWMsIHJlc291
cmNlcywgc3ltYm9sVGFibGUpOwotCi0gICAgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKLQotICAg
IHJldHVybiB0cnVlOworICAgIC8vIEFkZCAxIHRvIGluY2x1ZGUgbnVsbC10ZXJtaW5hdGlvbiBj
aGFyYWN0ZXIuCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4obWF4TGVuKSArIDE7CiB9CiAK
LXN0YXRpYyBib29sIEdlbmVyYXRlQnVpbHRJblN5bWJvbFRhYmxlKAotICAgICAgICBFU2hMYW5n
dWFnZSBsYW5ndWFnZSwgRVNoU3BlYyBzcGVjLCBjb25zdCBUQnVpbHRJblJlc291cmNlJiByZXNv
dXJjZXMsCi0gICAgICAgIFRJbmZvU2luayYgaW5mb1NpbmssIFRTeW1ib2xUYWJsZSYgc3ltYm9s
VGFibGUpCitzdGF0aWMgdm9pZCBnZXRWYXJpYWJsZUluZm8oU2hTaGFkZXJJbmZvIHZhclR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2hIYW5kbGUgaGFuZGxlLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNp
emUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hEYXRhVHlwZSogdHlwZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBuYW1lKQogewotICAgIFRCdWlsdElucyBidWls
dEluczsKKyAgICBpZiAoIWhhbmRsZSB8fCAhc2l6ZSB8fCAhdHlwZSB8fCAhbmFtZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIEFTU0VSVCgodmFyVHlwZSA9PSBTSF9BQ1RJVkVfQVRUUklCVVRFUykg
fHwKKyAgICAgICAgICAgKHZhclR5cGUgPT0gU0hfQUNUSVZFX1VOSUZPUk1TKSk7CiAKLSAgICBi
dWlsdElucy5pbml0aWFsaXplKGxhbmd1YWdlLCBzcGVjLCByZXNvdXJjZXMpOwotICAgIHJldHVy
biBJbml0aWFsaXplU3ltYm9sVGFibGUoYnVpbHRJbnMuZ2V0QnVpbHRJblN0cmluZ3MoKSwgbGFu
Z3VhZ2UsIHNwZWMsIHJlc291cmNlcywgaW5mb1NpbmssIHN5bWJvbFRhYmxlKTsKLX0KKyAgICBU
U2hIYW5kbGVCYXNlKiBiYXNlID0gcmVpbnRlcnByZXRfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFu
ZGxlKTsKKyAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOwor
ICAgIGlmIChjb21waWxlciA9PSAwKQorICAgICAgICByZXR1cm47CiAKLS8vCi0vLyBUaGlzIGlz
IHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBpbnRlcmZhY2UgYmV0d2VlbiBhbiBPR0wgZHJpdmVy
Ci0vLyBhbmQgdGhlIHNoYWRpbmcgbGFuZ3VhZ2UgY29tcGlsZXIuCi0vLworICAgIGNvbnN0IFRW
YXJpYWJsZUluZm9MaXN0JiB2YXJMaXN0ID0gdmFyVHlwZSA9PSBTSF9BQ1RJVkVfQVRUUklCVVRF
UyA/CisgICAgICAgIGNvbXBpbGVyLT5nZXRBdHRyaWJzKCkgOiBjb21waWxlci0+Z2V0VW5pZm9y
bXMoKTsKKyAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHN0YXRpY19jYXN0PGludD4odmFy
TGlzdC5zaXplKCkpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBUVmFyaWFibGVJbmZv
JiB2YXJJbmZvID0gdmFyTGlzdFtpbmRleF07CisgICAgaWYgKGxlbmd0aCkgKmxlbmd0aCA9IHZh
ckluZm8ubmFtZS5zaXplKCk7CisgICAgKnNpemUgPSB2YXJJbmZvLnNpemU7CisgICAgKnR5cGUg
PSB2YXJJbmZvLnR5cGU7CisgICAgc3RyY3B5KG5hbWUsIHZhckluZm8ubmFtZS5jX3N0cigpKTsK
K30KIAogLy8KIC8vIERyaXZlciBtdXN0IGNhbGwgdGhpcyBmaXJzdCwgb25jZSwgYmVmb3JlIGRv
aW5nIGFueSBvdGhlcgpAQCAtMTEwLDcgKzg3LDcgQEAgaW50IFNoRmluYWxpemUoKQogLy8KIC8v
IEluaXRpYWxpemUgYnVpbHQtaW4gcmVzb3VyY2VzIHdpdGggbWluaW11bSBleHBlY3RlZCB2YWx1
ZXMuCiAvLwotdm9pZCBTaEluaXRCdWlsdEluUmVzb3VyY2UoVEJ1aWx0SW5SZXNvdXJjZSogcmVz
b3VyY2VzKQordm9pZCBTaEluaXRCdWlsdEluUmVzb3VyY2VzKFNoQnVpbHRJblJlc291cmNlcyog
cmVzb3VyY2VzKQogewogICAgIC8vIENvbnN0YW50cy4KICAgICByZXNvdXJjZXMtPk1heFZlcnRl
eEF0dHJpYnMgPSA4OwpAQCAtMTI5LDE4ICsxMDYsMTkgQEAgdm9pZCBTaEluaXRCdWlsdEluUmVz
b3VyY2UoVEJ1aWx0SW5SZXNvdQogLy8KIC8vIERyaXZlciBjYWxscyB0aGVzZSB0byBjcmVhdGUg
YW5kIGRlc3Ryb3kgY29tcGlsZXIgb2JqZWN0cy4KIC8vCi1TaEhhbmRsZSBTaENvbnN0cnVjdENv
bXBpbGVyKEVTaExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNwZWMsIGNvbnN0IFRCdWlsdElu
UmVzb3VyY2UqIHJlc291cmNlcykKK1NoSGFuZGxlIFNoQ29uc3RydWN0Q29tcGlsZXIoU2hTaGFk
ZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMqIHJlc291cmNlcykKIHsKICAgICBpZiAoIUlu
aXRUaHJlYWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBUU2hIYW5kbGVCYXNlKiBiYXNl
ID0gc3RhdGljX2Nhc3Q8VFNoSGFuZGxlQmFzZSo+KENvbnN0cnVjdENvbXBpbGVyKGxhbmd1YWdl
LCBzcGVjKSk7CisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRs
ZUJhc2UqPihDb25zdHJ1Y3RDb21waWxlcih0eXBlLCBzcGVjKSk7CiAgICAgVENvbXBpbGVyKiBj
b21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKICAgICBpZiAoY29tcGlsZXIgPT0gMCkK
ICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAvLyBHZW5lcmF0ZSBidWlsdC1pbiBzeW1ib2wgdGFi
bGUuCi0gICAgaWYgKCFHZW5lcmF0ZUJ1aWx0SW5TeW1ib2xUYWJsZShsYW5ndWFnZSwgc3BlYywg
KnJlc291cmNlcywgY29tcGlsZXItPmdldEluZm9TaW5rKCksIGNvbXBpbGVyLT5nZXRTeW1ib2xU
YWJsZSgpKSkgeworICAgIGlmICghY29tcGlsZXItPkluaXQoKnJlc291cmNlcykpIHsKICAgICAg
ICAgU2hEZXN0cnVjdChiYXNlKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMTcwLDkg
KzE0OCw3IEBAIGludCBTaENvbXBpbGUoCiAgICAgY29uc3QgU2hIYW5kbGUgaGFuZGxlLAogICAg
IGNvbnN0IGNoYXIqIGNvbnN0IHNoYWRlclN0cmluZ3NbXSwKICAgICBjb25zdCBpbnQgbnVtU3Ry
aW5ncywKLSAgICBjb25zdCBFU2hPcHRpbWl6YXRpb25MZXZlbCBvcHRMZXZlbCwKLSAgICBpbnQg
ZGVidWdPcHRpb25zCi0gICAgKQorICAgIGludCBjb21waWxlT3B0aW9ucykKIHsKICAgICBpZiAo
IUluaXRUaHJlYWQoKSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xODQsMTI4ICsxNjAsOTUgQEAg
aW50IFNoQ29tcGlsZSgKICAgICBUQ29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21w
aWxlcigpOwogICAgIGlmIChjb21waWxlciA9PSAwKQogICAgICAgICByZXR1cm4gMDsKLSAgICAK
LSAgICBHbG9iYWxQb29sQWxsb2NhdG9yLnB1c2goKTsKLSAgICBUSW5mb1NpbmsmIGluZm9TaW5r
ID0gY29tcGlsZXItPmdldEluZm9TaW5rKCk7Ci0gICAgaW5mb1NpbmsuaW5mby5lcmFzZSgpOwot
ICAgIGluZm9TaW5rLmRlYnVnLmVyYXNlKCk7Ci0gICAgaW5mb1Npbmsub2JqLmVyYXNlKCk7Ci0K
LSAgICBpZiAobnVtU3RyaW5ncyA9PSAwKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIFRJbnRl
cm1lZGlhdGUgaW50ZXJtZWRpYXRlKGluZm9TaW5rKTsKLSAgICBUU3ltYm9sVGFibGUmIHN5bWJv
bFRhYmxlID0gY29tcGlsZXItPmdldFN5bWJvbFRhYmxlKCk7Ci0KLSAgICBUUGFyc2VDb250ZXh0
IHBhcnNlQ29udGV4dChzeW1ib2xUYWJsZSwgaW50ZXJtZWRpYXRlLCBjb21waWxlci0+Z2V0TGFu
Z3VhZ2UoKSwgY29tcGlsZXItPmdldFNwZWMoKSwgaW5mb1NpbmspOwotICAgIHBhcnNlQ29udGV4
dC5pbml0aWFsaXplRXh0ZW5zaW9uQmVoYXZpb3IoKTsKLSAgICBHbG9iYWxQYXJzZUNvbnRleHQg
PSAmcGFyc2VDb250ZXh0OwotIAotICAgIHNldEluaXRpYWxTdGF0ZSgpOwotCi0gICAgSW5pdFBy
ZXByb2Nlc3NvcigpOwotICAgIC8vCi0gICAgLy8gUGFyc2UgdGhlIGFwcGxpY2F0aW9uJ3Mgc2hh
ZGVycy4gIEFsbCB0aGUgZm9sbG93aW5nIHN5bWJvbCB0YWJsZQotICAgIC8vIHdvcmsgd2lsbCBi
ZSB0aHJvdy1hd2F5LCBzbyBwdXNoIGEgbmV3IGFsbG9jYXRpb24gc2NvcGUgdGhhdCBjYW4KLSAg
ICAvLyBiZSB0aHJvd24gYXdheSwgdGhlbiBwdXNoIGEgc2NvcGUgZm9yIHRoZSBjdXJyZW50IHNo
YWRlcidzIGdsb2JhbHMuCi0gICAgLy8KLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwotCi0gICAg
c3ltYm9sVGFibGUucHVzaCgpOwotICAgIGlmICghc3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
KQotICAgICAgICBwYXJzZUNvbnRleHQuaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRl
cm5hbEVycm9yLCAiV3Jvbmcgc3ltYm9sIHRhYmxlIGxldmVsIik7Ci0KLSAgICBpbnQgcmV0ID0g
UGFQYXJzZVN0cmluZ3MoY29uc3RfY2FzdDxjaGFyKio+KHNoYWRlclN0cmluZ3MpLCAwLCBudW1T
dHJpbmdzLCBwYXJzZUNvbnRleHQpOwotICAgIGlmIChyZXQpCi0gICAgICAgIHN1Y2Nlc3MgPSBm
YWxzZTsKLQotICAgIGlmIChzdWNjZXNzICYmIHBhcnNlQ29udGV4dC50cmVlUm9vdCkgewotICAg
ICAgICBpZiAob3B0TGV2ZWwgPT0gRVNoT3B0Tm9HZW5lcmF0aW9uKQotICAgICAgICAgICAgcGFy
c2VDb250ZXh0LmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4Tm9uZSwgIk5vIGVycm9ycy4g
IE5vIGNvZGUgZ2VuZXJhdGlvbiB3YXMgcmVxdWVzdGVkLiIpOwotICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgIHN1Y2Nlc3MgPSBpbnRlcm1lZGlhdGUucG9zdFByb2Nlc3MocGFyc2VDb250ZXh0
LnRyZWVSb290LCBwYXJzZUNvbnRleHQubGFuZ3VhZ2UpOwotCi0gICAgICAgICAgICBpZiAoc3Vj
Y2VzcykgewotCi0gICAgICAgICAgICAgICAgaWYgKGRlYnVnT3B0aW9ucyAmIEVEZWJ1Z09wSW50
ZXJtZWRpYXRlKQotICAgICAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0VHJlZShw
YXJzZUNvbnRleHQudHJlZVJvb3QpOwotCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
ICAgICAvLyBDYWxsIHRoZSBtYWNoaW5lIGRlcGVuZGVudCBjb21waWxlcgotICAgICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAgICAgaWYgKCFjb21waWxlci0+Y29tcGlsZShwYXJzZUNvbnRl
eHQudHJlZVJvb3QpKQotICAgICAgICAgICAgICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKCFzdWNjZXNzKSB7Ci0gICAgICAg
IHBhcnNlQ29udGV4dC5pbmZvU2luay5pbmZvLnByZWZpeChFUHJlZml4RXJyb3IpOwotICAgICAg
ICBwYXJzZUNvbnRleHQuaW5mb1NpbmsuaW5mbyA8PCBwYXJzZUNvbnRleHQubnVtRXJyb3JzIDw8
ICIgY29tcGlsYXRpb24gZXJyb3JzLiAgTm8gY29kZSBnZW5lcmF0ZWQuXG5cbiI7Ci0gICAgICAg
IHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgaWYgKGRlYnVnT3B0aW9ucyAmIEVEZWJ1Z09wSW50
ZXJtZWRpYXRlKQotICAgICAgICAgICAgaW50ZXJtZWRpYXRlLm91dHB1dFRyZWUocGFyc2VDb250
ZXh0LnRyZWVSb290KTsKLSAgICB9IGVsc2UgaWYgKCFwYXJzZUNvbnRleHQudHJlZVJvb3QpIHsK
LSAgICAgICAgcGFyc2VDb250ZXh0LmVycm9yKDEsICJVbmV4cGVjdGVkIGVuZCBvZiBmaWxlLiIs
ICIiLCAiIik7Ci0gICAgICAgIHBhcnNlQ29udGV4dC5pbmZvU2luay5pbmZvIDw8IHBhcnNlQ29u
dGV4dC5udW1FcnJvcnMgPDwgIiBjb21waWxhdGlvbiBlcnJvcnMuICBObyBjb2RlIGdlbmVyYXRl
ZC5cblxuIjsKLSAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwotICAgICAgICBpZiAoZGVidWdPcHRp
b25zICYgRURlYnVnT3BJbnRlcm1lZGlhdGUpCi0gICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0
cHV0VHJlZShwYXJzZUNvbnRleHQudHJlZVJvb3QpOwotICAgIH0KIAotICAgIGludGVybWVkaWF0
ZS5yZW1vdmUocGFyc2VDb250ZXh0LnRyZWVSb290KTsKKyAgICBib29sIHN1Y2Nlc3MgPSBjb21w
aWxlci0+Y29tcGlsZShzaGFkZXJTdHJpbmdzLCBudW1TdHJpbmdzLCBjb21waWxlT3B0aW9ucyk7
CisgICAgcmV0dXJuIHN1Y2Nlc3MgPyAxIDogMDsKK30KKwordm9pZCBTaEdldEluZm8oY29uc3Qg
U2hIYW5kbGUgaGFuZGxlLCBTaFNoYWRlckluZm8gcG5hbWUsIGludCogcGFyYW1zKQoreworICAg
IGlmICghaGFuZGxlIHx8ICFwYXJhbXMpCisgICAgICAgIHJldHVybjsKKworICAgIFRTaEhhbmRs
ZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oaGFuZGxlKTsKKyAgICBU
Q29tcGlsZXIqIGNvbXBpbGVyID0gYmFzZS0+Z2V0QXNDb21waWxlcigpOworICAgIGlmICghY29t
cGlsZXIpIHJldHVybjsKIAotICAgIC8vCi0gICAgLy8gRW5zdXJlIHN5bWJvbCB0YWJsZSBpcyBy
ZXR1cm5lZCB0byB0aGUgYnVpbHQtaW4gbGV2ZWwsCi0gICAgLy8gdGhyb3dpbmcgYXdheSBhbGwg
YnV0IHRoZSBidWlsdC1pbnMuCi0gICAgLy8KLSAgICB3aGlsZSAoIXN5bWJvbFRhYmxlLmF0QnVp
bHRJbkxldmVsKCkpCi0gICAgICAgIHN5bWJvbFRhYmxlLnBvcCgpOwotCi0gICAgRmluYWxpemVQ
cmVwcm9jZXNzb3IoKTsKLSAgICAvLwotICAgIC8vIFRocm93IGF3YXkgYWxsIHRoZSB0ZW1wb3Jh
cnkgbWVtb3J5IHVzZWQgYnkgdGhlIGNvbXBpbGF0aW9uIHByb2Nlc3MuCi0gICAgLy8KLSAgICBH
bG9iYWxQb29sQWxsb2NhdG9yLnBvcCgpOworICAgIHN3aXRjaChwbmFtZSkKKyAgICB7CisgICAg
Y2FzZSBTSF9JTkZPX0xPR19MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0
SW5mb1NpbmsoKS5pbmZvLnNpemUoKSArIDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hf
T0JKRUNUX0NPREVfTEVOR1RIOgorICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldEluZm9T
aW5rKCkub2JqLnNpemUoKSArIDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfQUNUSVZF
X1VOSUZPUk1TOgorICAgICAgICAqcGFyYW1zID0gY29tcGlsZXItPmdldFVuaWZvcm1zKCkuc2l6
ZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5H
VEg6CisgICAgICAgICpwYXJhbXMgPSBnZXRWYXJpYWJsZU1heExlbmd0aChjb21waWxlci0+Z2V0
VW5pZm9ybXMoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU0hfQUNUSVZFX0FUVFJJQlVU
RVM6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0QXR0cmlicygpLnNpemUoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEg6Cisg
ICAgICAgICpwYXJhbXMgPSBnZXRWYXJpYWJsZU1heExlbmd0aChjb21waWxlci0+Z2V0QXR0cmli
cygpKTsKKyAgICAgICAgYnJlYWs7CiAKLSAgICByZXR1cm4gc3VjY2VzcyA/IDEgOiAwOworICAg
IGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgfQogfQogCiAvLwogLy8gUmV0dXJuIGFueSBj
b21waWxlciBsb2cgb2YgbWVzc2FnZXMgZm9yIHRoZSBhcHBsaWNhdGlvbi4KIC8vCi1jb25zdCBj
aGFyKiBTaEdldEluZm9Mb2coY29uc3QgU2hIYW5kbGUgaGFuZGxlKQordm9pZCBTaEdldEluZm9M
b2coY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBjaGFyKiBpbmZvTG9nKQogewotICAgIGlmICghSW5p
dFRocmVhZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChoYW5kbGUgPT0gMCkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFoYW5kbGUgfHwgIWluZm9Mb2cpCisgICAgICAgIHJl
dHVybjsKIAogICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVC
YXNlKj4oaGFuZGxlKTsKLSAgICBUSW5mb1NpbmsqIGluZm9TaW5rID0gMDsKLQotICAgIGlmIChi
YXNlLT5nZXRBc0NvbXBpbGVyKCkpCi0gICAgICAgIGluZm9TaW5rID0gJihiYXNlLT5nZXRBc0Nv
bXBpbGVyKCktPmdldEluZm9TaW5rKCkpOworICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNl
LT5nZXRBc0NvbXBpbGVyKCk7CisgICAgaWYgKCFjb21waWxlcikgcmV0dXJuOwogCi0gICAgaW5m
b1NpbmstPmluZm8gPDwgaW5mb1NpbmstPmRlYnVnLmNfc3RyKCk7Ci0gICAgcmV0dXJuIGluZm9T
aW5rLT5pbmZvLmNfc3RyKCk7CisgICAgVEluZm9TaW5rJiBpbmZvU2luayA9IGNvbXBpbGVyLT5n
ZXRJbmZvU2luaygpOworICAgIHN0cmNweShpbmZvTG9nLCBpbmZvU2luay5pbmZvLmNfc3RyKCkp
OwogfQogCiAvLwogLy8gUmV0dXJuIGFueSBvYmplY3QgY29kZS4KIC8vCi1jb25zdCBjaGFyKiBT
aEdldE9iamVjdENvZGUoY29uc3QgU2hIYW5kbGUgaGFuZGxlKQordm9pZCBTaEdldE9iamVjdENv
ZGUoY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBjaGFyKiBvYmpDb2RlKQogewotICAgIGlmICghSW5p
dFRocmVhZCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChoYW5kbGUgPT0gMCkKLSAg
ICAgICAgcmV0dXJuIDA7CisgICAgaWYgKCFoYW5kbGUgfHwgIW9iakNvZGUpCisgICAgICAgIHJl
dHVybjsKIAogICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVC
YXNlKj4oaGFuZGxlKTsKLSAgICBUSW5mb1NpbmsqIGluZm9TaW5rOworICAgIFRDb21waWxlciog
Y29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CisgICAgaWYgKCFjb21waWxlcikgcmV0
dXJuOwogCi0gICAgaWYgKGJhc2UtPmdldEFzQ29tcGlsZXIoKSkKLSAgICAgICAgaW5mb1Npbmsg
PSAmKGJhc2UtPmdldEFzQ29tcGlsZXIoKS0+Z2V0SW5mb1NpbmsoKSk7CisgICAgVEluZm9TaW5r
JiBpbmZvU2luayA9IGNvbXBpbGVyLT5nZXRJbmZvU2luaygpOworICAgIHN0cmNweShvYmpDb2Rl
LCBpbmZvU2luay5vYmouY19zdHIoKSk7Cit9CiAKLSAgICByZXR1cm4gaW5mb1NpbmstPm9iai5j
X3N0cigpOwordm9pZCBTaEdldEFjdGl2ZUF0dHJpYihjb25zdCBTaEhhbmRsZSBoYW5kbGUsCisg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAg
aW50KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIGludCogc2l6ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgU2hEYXRhVHlwZSogdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciogbmFtZSkKK3sKKyAgICBnZXRWYXJpYWJsZUluZm8oU0hfQUNUSVZFX0FUVFJJQlVURVMs
CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZSwgaW5kZXgsIGxlbmd0aCwgc2l6ZSwgdHlwZSwg
bmFtZSk7Cit9CisKK3ZvaWQgU2hHZXRBY3RpdmVVbmlmb3JtKGNvbnN0IFNoSGFuZGxlIGhhbmRs
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBpbmRleCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGludCogbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBzaXplLAor
ICAgICAgICAgICAgICAgICAgICAgICAgU2hEYXRhVHlwZSogdHlwZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIqIG5hbWUpCit7CisgICAgZ2V0VmFyaWFibGVJbmZvKFNIX0FDVElWRV9V
TklGT1JNUywKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBpbmRleCwgbGVuZ3RoLCBzaXpl
LCB0eXBlLCBuYW1lKTsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gNzU4MDEpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDAsNiArMTQwLDIyIEBAIHZvaWQgVFN5bWJvbFRhYmxlTGV2ZWw6OnJlbGF0
ZVRvT3BlcmF0b3IKICAgICB9CiB9CiAKKy8vCisvLyBDaGFuZ2UgYWxsIGZ1bmN0aW9uIGVudHJp
ZXMgaW4gdGhlIHRhYmxlIHdpdGggdGhlIG5vbi1tYW5nbGVkIG5hbWUKKy8vIHRvIGJlIHJlbGF0
ZWQgdG8gdGhlIHByb3ZpZGVkIGJ1aWx0LWluIGV4dGVuc2lvbi4gVGhpcyBpcyBhIGxvdworLy8g
cGVyZm9ybWFuY2Ugb3BlcmF0aW9uLCBhbmQgb25seSBpbnRlbmRlZCBmb3Igc3ltYm9sIHRhYmxl
cyB0aGF0CisvLyBsaXZlIGFjcm9zcyBhIGxhcmdlIG51bWJlciBvZiBjb21waWxlcy4KKy8vCit2
b2lkIFRTeW1ib2xUYWJsZUxldmVsOjpyZWxhdGVUb0V4dGVuc2lvbihjb25zdCBjaGFyKiBuYW1l
LCBjb25zdCBUU3RyaW5nJiBleHQpCit7CisgICAgZm9yICh0TGV2ZWw6Oml0ZXJhdG9yIGl0ID0g
bGV2ZWwuYmVnaW4oKTsgaXQgIT0gbGV2ZWwuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0
LT5zZWNvbmQtPmlzRnVuY3Rpb24oKSkgeworICAgICAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlv
biA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGl0LT5zZWNvbmQpOworICAgICAgICAgICAgaWYg
KGZ1bmN0aW9uLT5nZXROYW1lKCkgPT0gbmFtZSkKKyAgICAgICAgICAgICAgICBmdW5jdGlvbi0+
cmVsYXRlVG9FeHRlbnNpb24oZXh0KTsKKyAgICAgICAgfQorICAgIH0KK30KIAogVFN5bWJvbDo6
VFN5bWJvbChjb25zdCBUU3ltYm9sJiBjb3B5T2YpCiB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gNzU4
MDEpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsMTAgQEAgcHVibGljOgogCiAgICAgdm9pZCBz
aGFyZUNvbnN0UG9pbnRlciggQ29uc3RhbnRVbmlvbiAqY29uc3RBcnJheSkKICAgICB7Ci0gICAg
ICAgIGRlbGV0ZSB1bmlvbkFycmF5OworICAgICAgICBpZiAodW5pb25BcnJheSA9PSBjb25zdEFy
cmF5KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGRlbGV0ZVtdIHVuaW9uQXJyYXk7
CiAgICAgICAgIHVuaW9uQXJyYXkgPSBjb25zdEFycmF5OyAgCiAgICAgfQogICAgIFRWYXJpYWJs
ZShjb25zdCBUVmFyaWFibGUmLCBUU3RydWN0dXJlTWFwJiByZW1hcHBlcik7IC8vIGNvcHkgY29u
c3RydWN0b3IKQEAgLTE1NiwxNCArMTU5LDE4IEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFRTdHJp
bmcmIGdldE1hbmdsZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbWFuZ2xlZE5hbWU7IH0KICAgICBj
b25zdCBUVHlwZSYgZ2V0UmV0dXJuVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHJldHVyblR5cGU7IH0K
KwogICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihUT3BlcmF0b3IgbykgeyBvcCA9IG87IH0KICAg
ICBUT3BlcmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29uc3QgeyByZXR1cm4gb3A7IH0KKworICAgIHZv
aWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgVFN0cmluZyYgZXh0KSB7IGV4dGVuc2lvbiA9IGV4
dDsgfQorICAgIGNvbnN0IFRTdHJpbmcmIGdldEV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuIGV4
dGVuc2lvbjsgfQorCiAgICAgdm9pZCBzZXREZWZpbmVkKCkgeyBkZWZpbmVkID0gdHJ1ZTsgfQog
ICAgIGJvb2wgaXNEZWZpbmVkKCkgeyByZXR1cm4gZGVmaW5lZDsgfQogCi0gICAgaW50IGdldFBh
cmFtQ291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBhcmFtZXRlcnMuc2l6
ZSgpKTsgfSAgICAKLSAgICBUUGFyYW1ldGVyJiBvcGVyYXRvciBbXShpbnQgaSkgICAgICAgeyBy
ZXR1cm4gcGFyYW1ldGVyc1tpXTsgfQotICAgIGNvbnN0IFRQYXJhbWV0ZXImIG9wZXJhdG9yIFtd
KGludCBpKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzW2ldOyB9CisgICAgaW50IGdldFBhcmFt
Q291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBhcmFtZXRlcnMuc2l6ZSgp
KTsgfSAgCisgICAgY29uc3QgVFBhcmFtZXRlciYgZ2V0UGFyYW0oaW50IGkpIGNvbnN0IHsgcmV0
dXJuIHBhcmFtZXRlcnNbaV07IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAm
aW5mb1NpbmspIGNvbnN0OwogICAgIFRGdW5jdGlvbihjb25zdCBURnVuY3Rpb24mLCBUU3RydWN0
dXJlTWFwJiByZW1hcHBlcik7CkBAIC0xNzUsNiArMTgyLDcgQEAgcHJvdGVjdGVkOgogICAgIFRU
eXBlIHJldHVyblR5cGU7CiAgICAgVFN0cmluZyBtYW5nbGVkTmFtZTsKICAgICBUT3BlcmF0b3Ig
b3A7CisgICAgVFN0cmluZyBleHRlbnNpb247CiAgICAgYm9vbCBkZWZpbmVkOwogfTsKIApAQCAt
MjIxLDYgKzIyOSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIHJlbGF0ZVRvT3BlcmF0
b3IoY29uc3QgY2hhciogbmFtZSwgVE9wZXJhdG9yIG9wKTsKKyAgICB2b2lkIHJlbGF0ZVRvRXh0
ZW5zaW9uKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IFRTdHJpbmcmIGV4dCk7CiAgICAgdm9pZCBk
dW1wKFRJbmZvU2luayAmaW5mb1NpbmspIGNvbnN0OwogICAgIFRTeW1ib2xUYWJsZUxldmVsKiBj
bG9uZShUU3RydWN0dXJlTWFwJiByZW1hcHBlcik7CiAKQEAgLTI4OSw4ICsyOTgsMTYgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gc3ltYm9sOwogICAgIH0KIAotICAgIFRTeW1ib2xUYWJsZUxl
dmVsKiBnZXRHbG9iYWxMZXZlbCgpIHsgYXNzZXJ0KHRhYmxlLnNpemUoKSA+PSAyKTsgcmV0dXJu
IHRhYmxlWzFdOyB9Ci0gICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUs
IFRPcGVyYXRvciBvcCkgeyB0YWJsZVswXS0+cmVsYXRlVG9PcGVyYXRvcihuYW1lLCBvcCk7IH0K
KyAgICBUU3ltYm9sVGFibGVMZXZlbCogZ2V0R2xvYmFsTGV2ZWwoKSB7CisgICAgICAgIGFzc2Vy
dCh0YWJsZS5zaXplKCkgPj0gMik7CisgICAgICAgIHJldHVybiB0YWJsZVsxXTsKKyAgICB9Cisg
ICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCkg
eworICAgICAgICB0YWJsZVswXS0+cmVsYXRlVG9PcGVyYXRvcihuYW1lLCBvcCk7CisgICAgfQor
ICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmlu
ZyYgZXh0KSB7CisgICAgICAgIHRhYmxlWzBdLT5yZWxhdGVUb0V4dGVuc2lvbihuYW1lLCBleHQp
OworICAgIH0KICAgICBpbnQgZ2V0TWF4U3ltYm9sSWQoKSB7IHJldHVybiB1bmlxdWVJZDsgfQog
ICAgIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9TaW5rKSBjb25zdDsKICAgICB2b2lkIGNvcHlU
YWJsZShjb25zdCBUU3ltYm9sVGFibGUmIGNvcHlPZik7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAJKHJl
dmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1Ry
YW5zbGF0b3JHTFNMLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNywxNCArNywzMSBAQAogI2luY2x1
ZGUgImNvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmgiCiAKICNpbmNsdWRlICJjb21waWxlci9PdXRw
dXRHTFNMLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvVmVyc2lvbkdMU0wuaCIKIAotVHJhbnNsYXRv
ckdMU0w6OlRyYW5zbGF0b3JHTFNMKEVTaExhbmd1YWdlIGxhbmcsIEVTaFNwZWMgc3BlYykKLSAg
ICA6IFRDb21waWxlcihsYW5nLCBzcGVjKSB7CitzdGF0aWMgdm9pZCB3cml0ZVZlcnNpb24oU2hT
aGFkZXJUeXBlIHR5cGUsIFRJbnRlcm1Ob2RlKiByb290LAorICAgICAgICAgICAgICAgICAgICAg
ICAgIFRJbmZvU2lua0Jhc2UmIHNpbmspIHsKKyAgICBUVmVyc2lvbkdMU0wgdmVyc2lvbkdMU0wo
dHlwZSk7CisgICAgcm9vdC0+dHJhdmVyc2UoJnZlcnNpb25HTFNMKTsKKyAgICBpbnQgdmVyc2lv
biA9IHZlcnNpb25HTFNMLmdldFZlcnNpb24oKTsKKyAgICAvLyBXZSBuZWVkIHRvIHdyaXRlIHZl
cnNpb24gZGlyZWN0aXZlIG9ubHkgaWYgaXQgaXMgZ3JlYXRlciB0aGFuIDExMC4KKyAgICAvLyBJ
ZiB0aGVyZSBpcyBubyB2ZXJzaW9uIGRpcmVjdGl2ZSBpbiB0aGUgc2hhZGVyLCAxMTAgaXMgaW1w
bGllZC4KKyAgICBpZiAodmVyc2lvbiA+IDExMCkgeworICAgICAgICBzaW5rIDw8ICIjdmVyc2lv
biAiIDw8IHZlcnNpb24gPDwgIlxuIjsKKyAgICB9CiB9CiAKLWJvb2wgVHJhbnNsYXRvckdMU0w6
OmNvbXBpbGUoVEludGVybU5vZGUqIHJvb3QpIHsKLSAgICBUT3V0cHV0R0xTTCBvdXRwdXRHTFNM
KGluZm9TaW5rLm9iaik7Ci0gICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEdMU0wpOworVHJhbnNs
YXRvckdMU0w6OlRyYW5zbGF0b3JHTFNMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMg
c3BlYykKKyAgICA6IFRDb21waWxlcih0eXBlLCBzcGVjKSB7Cit9CisKK3ZvaWQgVHJhbnNsYXRv
ckdMU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgeworICAgIFRJbmZvU2lua0Jhc2Um
IHNpbmsgPSBnZXRJbmZvU2luaygpLm9iajsKIAotICAgIHJldHVybiB0cnVlOworICAgIC8vIFdy
aXRlIEdMU0wgdmVyc2lvbi4KKyAgICB3cml0ZVZlcnNpb24oZ2V0U2hhZGVyVHlwZSgpLCByb290
LCBzaW5rKTsKKworICAgIC8vIFdyaXRlIHRyYW5zbGF0ZWQgc2hhZGVyLgorICAgIFRPdXRwdXRH
TFNMIG91dHB1dEdMU0woc2luayk7CisgICAgcm9vdC0+dHJhdmVyc2UoJm91dHB1dEdMU0wpOwog
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JH
TFNMLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1RyYW5zbGF0b3JHTFNMLmgJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNMLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
LDggKzExLDEwIEBACiAKIGNsYXNzIFRyYW5zbGF0b3JHTFNMIDogcHVibGljIFRDb21waWxlciB7
CiBwdWJsaWM6Ci0gICAgVHJhbnNsYXRvckdMU0woRVNoTGFuZ3VhZ2UgbGFuZywgRVNoU3BlYyBz
cGVjKTsKLSAgICB2aXJ0dWFsIGJvb2wgY29tcGlsZShUSW50ZXJtTm9kZSogcm9vdCk7CisgICAg
VHJhbnNsYXRvckdMU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKTsKKwor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3Qp
OwogfTsKIAogI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SR0xTTF9IXwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRv
ckhMU0wuY3BwCShyZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgsMTcgKzgs
MTUgQEAKIAogI2luY2x1ZGUgImNvbXBpbGVyL091dHB1dEhMU0wuaCIKIAotVHJhbnNsYXRvckhM
U0w6OlRyYW5zbGF0b3JITFNMKEVTaExhbmd1YWdlIGxhbmcsIEVTaFNwZWMgc3BlYykKLSAgICA6
IFRDb21waWxlcihsYW5nLCBzcGVjKQorVHJhbnNsYXRvckhMU0w6OlRyYW5zbGF0b3JITFNMKFNo
U2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYykKKyAgICA6IFRDb21waWxlcih0eXBl
LCBzcGVjKQogewogfQogCi1ib29sIFRyYW5zbGF0b3JITFNMOjpjb21waWxlKFRJbnRlcm1Ob2Rl
ICpyb290KQordm9pZCBUcmFuc2xhdG9ySExTTDo6dHJhbnNsYXRlKFRJbnRlcm1Ob2RlICpyb290
KQogewogICAgIFRQYXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dCA9ICpHZXRHbG9iYWxQYXJzZUNv
bnRleHQoKTsKICAgICBzaDo6T3V0cHV0SExTTCBvdXRwdXRITFNMKHBhcnNlQ29udGV4dCk7CiAK
ICAgICBvdXRwdXRITFNMLm91dHB1dCgpOwotICAgIAotICAgIHJldHVybiB0cnVlOwogfQpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5z
bGF0b3JITFNMLmgJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmgJKHdvcmtpbmcgY29weSkKQEAgLTExLDggKzEx
LDEwIEBACiAKIGNsYXNzIFRyYW5zbGF0b3JITFNMIDogcHVibGljIFRDb21waWxlciB7CiBwdWJs
aWM6Ci0gICAgVHJhbnNsYXRvckhMU0woRVNoTGFuZ3VhZ2UgbGFuZywgRVNoU3BlYyBzcGVjKTsK
LSAgICB2aXJ0dWFsIGJvb2wgY29tcGlsZShUSW50ZXJtTm9kZSogcm9vdCk7CisgICAgVHJhbnNs
YXRvckhMU0woU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKTsKKworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCB0cmFuc2xhdGUoVEludGVybU5vZGUqIHJvb3QpOwogfTsK
IAogI2VuZGlmICAvLyBDT01QSUxFUl9UUkFOU0xBVE9SSExTTF9IXwpJbmRleDogU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmgJKHJldmlzaW9uIDc1ODAxKQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg1LDEyICs4NSwxMiBAQCBwdWJsaWM6CiAgICAgVFR5cGUoKSB7fQogICAgIFRU
eXBlKFRCYXNpY1R5cGUgdCwgVFByZWNpc2lvbiBwLCBUUXVhbGlmaWVyIHEgPSBFdnFUZW1wb3Jh
cnksIGludCBzID0gMSwgYm9vbCBtID0gZmFsc2UsIGJvb2wgYSA9IGZhbHNlKSA6CiAgICAgICAg
ICAgICB0eXBlKHQpLCBwcmVjaXNpb24ocCksIHF1YWxpZmllcihxKSwgc2l6ZShzKSwgbWF0cml4
KG0pLCBhcnJheShhKSwgYXJyYXlTaXplKDApLAotICAgICAgICAgICAgc3RydWN0dXJlKDApLCBz
dHJ1Y3R1cmVTaXplKDApLCBtYXhBcnJheVNpemUoMCksIGFycmF5SW5mb3JtYXRpb25UeXBlKDAp
LCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCksIHR5cGVOYW1lKDApCisgICAgICAgICAgICBtYXhB
cnJheVNpemUoMCksIGFycmF5SW5mb3JtYXRpb25UeXBlKDApLCBzdHJ1Y3R1cmUoMCksIHN0cnVj
dHVyZVNpemUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKICAgICB7
CiAgICAgfQogICAgIGV4cGxpY2l0IFRUeXBlKGNvbnN0IFRQdWJsaWNUeXBlICZwKSA6CiAgICAg
ICAgICAgICB0eXBlKHAudHlwZSksIHByZWNpc2lvbihwLnByZWNpc2lvbiksIHF1YWxpZmllcihw
LnF1YWxpZmllciksIHNpemUocC5zaXplKSwgbWF0cml4KHAubWF0cml4KSwgYXJyYXkocC5hcnJh
eSksIGFycmF5U2l6ZShwLmFycmF5U2l6ZSksCi0gICAgICAgICAgICBzdHJ1Y3R1cmUoMCksIHN0
cnVjdHVyZVNpemUoMCksIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCks
IGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKKyAgICAgICAgICAgIG1heEFy
cmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIHN0cnVjdHVyZSgwKSwgc3RydWN0
dXJlU2l6ZSgwKSwgZmllbGROYW1lKDApLCBtYW5nbGVkKDApLCB0eXBlTmFtZSgwKQogICAgIHsK
ICAgICAgICAgaWYgKHAudXNlckRlZikgewogICAgICAgICAgICAgc3RydWN0dXJlID0gcC51c2Vy
RGVmLT5nZXRTdHJ1Y3QoKTsKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogICAgIH0KICAgICBU
VHlwZShUVHlwZUxpc3QqIHVzZXJEZWYsIGNvbnN0IFRTdHJpbmcmIG4sIFRQcmVjaXNpb24gcCA9
IEVicFVuZGVmaW5lZCkgOgogICAgICAgICAgICAgdHlwZShFYnRTdHJ1Y3QpLCBwcmVjaXNpb24o
cCksIHF1YWxpZmllcihFdnFUZW1wb3JhcnkpLCBzaXplKDEpLCBtYXRyaXgoZmFsc2UpLCBhcnJh
eShmYWxzZSksIGFycmF5U2l6ZSgwKSwKLSAgICAgICAgICAgIHN0cnVjdHVyZSh1c2VyRGVmKSwg
c3RydWN0dXJlU2l6ZSgwKSwgbWF4QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgw
KSwgZmllbGROYW1lKDApLCBtYW5nbGVkKDApCisgICAgICAgICAgICBtYXhBcnJheVNpemUoMCks
IGFycmF5SW5mb3JtYXRpb25UeXBlKDApLCBzdHJ1Y3R1cmUodXNlckRlZiksIHN0cnVjdHVyZVNp
emUoMCksIGZpZWxkTmFtZSgwKSwgbWFuZ2xlZCgwKQogICAgIHsKICAgICAgICAgdHlwZU5hbWUg
PSBOZXdQb29sVFN0cmluZyhuLmNfc3RyKCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxlY3QuY3BwCShyZXZp
c2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZv
bGRTZWxlY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsOCBAQAogLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8vCisvLyBVbmZvbGRTZWxlY3Qg
aXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVjdCBvcGVyYXRvciA/OiBhcyBp
Zi1lbHNlIHN0YXRlbWVudHMKKy8vCiAKICNpbmNsdWRlICJjb21waWxlci9VbmZvbGRTZWxlY3Qu
aCIKIApAQCAtNDQsNyArNDYsNyBAQCBib29sIFVuZm9sZFNlbGVjdDo6dmlzaXRTZWxlY3Rpb24o
VmlzaXQgCiAgICAgICAgICAgICAgICAifVxuIgogICAgICAgICAgICAgICAgImVsc2VcbiIKICAg
ICAgICAgICAgICAgICJ7XG4iOwotICAgICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVy
c2UodGhpcyk7CisgICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7
CiAgICAgICAgIG91dCA8PCAiICAgIHQiIDw8IGkgPDwgIiA9ICI7CiAgICAgICAgIG5vZGUtPmdl
dEZhbHNlQmxvY2soKS0+dHJhdmVyc2UobU91dHB1dEhMU0wpOwogICAgICAgICBvdXQgPDwgIjtc
biIKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9VbmZvbGRTZWxl
Y3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VW5mb2xkU2VsZWN0LmgJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL1VuZm9sZFNlbGVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMs
OCBAQAogLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQogLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KIC8v
CisvLyBVbmZvbGRTZWxlY3QgaXMgYW4gQVNUIHRyYXZlcnNlciB0byBvdXRwdXQgdGhlIHNlbGVj
dCBvcGVyYXRvciA/OiBhcyBpZi1lbHNlIHN0YXRlbWVudHMKKy8vCiAKICNpZm5kZWYgQ09NUElM
RVJfVU5GT0xEU0VMRUNUX0hfCiAjZGVmaW5lIENPTVBJTEVSX1VORk9MRFNFTEVDVF9IXwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0NjggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUg
QU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRo
aXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNh
biBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21w
aWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1Npbmsu
aCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorCituYW1lc3BhY2UgeworYm9v
bCBJc0xvb3BJbmRleChjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wsIGNvbnN0IFRMb29wU3Rh
Y2smIHN0YWNrKSB7CisgICAgZm9yIChUTG9vcFN0YWNrOjpjb25zdF9pdGVyYXRvciBpID0gc3Rh
Y2suYmVnaW4oKTsgaSAhPSBzdGFjay5lbmQoKTsgKytpKSB7CisgICAgICAgIGlmIChpLT5pbmRl
eC5pZCA9PSBzeW1ib2wtPmdldElkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUcmF2ZXJzZXMgYSBub2RlIHRvIGNoZWNrIGlm
IGl0IHJlcHJlc2VudHMgYSBjb25zdGFudCBpbmRleCBleHByZXNzaW9uLgorLy8gRGVmaW5pdGlv
bjoKKy8vIGNvbnN0YW50LWluZGV4LWV4cHJlc3Npb25zIGFyZSBhIHN1cGVyc2V0IG9mIGNvbnN0
YW50LWV4cHJlc3Npb25zLgorLy8gQ29uc3RhbnQtaW5kZXgtZXhwcmVzc2lvbnMgY2FuIGluY2x1
ZGUgbG9vcCBpbmRpY2VzIGFzIGRlZmluZWQgaW4KKy8vIEdMU0wgRVMgMS4wIHNwZWMsIEFwcGVu
ZGl4IEEsIHNlY3Rpb24gNC4KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGNvbnN0YW50LWluZGV4LWV4
cHJlc3Npb25zOgorLy8gLSBDb25zdGFudCBleHByZXNzaW9ucworLy8gLSBMb29wIGluZGljZXMg
YXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQKKy8vIC0gRXhwcmVzc2lvbnMgY29tcG9zZWQgb2YgYm90
aCBvZiB0aGUgYWJvdmUKK2NsYXNzIFZhbGlkYXRlQ29uc3RJbmRleEV4cHIgOiBwdWJsaWMgVElu
dGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVmFsaWRhdGVDb25zdEluZGV4RXhwcihjb25z
dCBUTG9vcFN0YWNrJiBzdGFjaykKKyAgICAgICAgOiBtVmFsaWQodHJ1ZSksIG1Mb29wU3RhY2so
c3RhY2spIHt9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBhcnNlZCBub2RlIHJlcHJl
c2VudHMgYSBjb25zdGFudCBpbmRleCBleHByZXNzaW9uLgorICAgIGJvb2wgaXNWYWxpZCgpIGNv
bnN0IHsgcmV0dXJuIG1WYWxpZDsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJ
bnRlcm1TeW1ib2wqIHN5bWJvbCkgeworICAgICAgICAvLyBPbmx5IGNvbnN0YW50cyBhbmQgbG9v
cCBpbmRpY2VzIGFyZSBhbGxvd2VkIGluIGEKKyAgICAgICAgLy8gY29uc3RhbnQgaW5kZXggZXhw
cmVzc2lvbi4KKyAgICAgICAgaWYgKG1WYWxpZCkgeworICAgICAgICAgICAgbVZhbGlkID0gKHN5
bWJvbC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHx8CisgICAgICAgICAgICAgICAgICAg
ICBJc0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2spOworICAgICAgICB9CisgICAgfQorICAg
IHZpcnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKSB7
fQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSopIHsg
cmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVy
bVVuYXJ5KikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlv
bihWaXNpdCwgVEludGVybVNlbGVjdGlvbiopIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKSB7IHJldHVybiB0
cnVlOyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AqKSB7
IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0LCBUSW50
ZXJtQnJhbmNoKikgeyByZXR1cm4gdHJ1ZTsgfQorCitwcml2YXRlOgorICAgIGJvb2wgbVZhbGlk
OworICAgIGNvbnN0IFRMb29wU3RhY2smIG1Mb29wU3RhY2s7Cit9OworfSAgLy8gbmFtZXNwYWNl
CisKK1ZhbGlkYXRlTGltaXRhdGlvbnM6OlZhbGlkYXRlTGltaXRhdGlvbnMoU2hTaGFkZXJUeXBl
IHNoYWRlclR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJ
bmZvU2lua0Jhc2UmIHNpbmspCisgICAgOiBtU2hhZGVyVHlwZShzaGFkZXJUeXBlKSwKKyAgICAg
IG1TaW5rKHNpbmspLAorICAgICAgbU51bUVycm9ycygwKQoreworfQorCit2b2lkIFZhbGlkYXRl
TGltaXRhdGlvbnM6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKQoreworfQorCit2b2lkIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlv
biopCit7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRCaW5hcnkoVmlzaXQs
IFRJbnRlcm1CaW5hcnkqIG5vZGUpCit7CisgICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBt
b2RpZmllZCBpbiB0aGUgbG9vcCBib2R5LgorICAgIHZhbGlkYXRlT3BlcmF0aW9uKG5vZGUsIG5v
ZGUtPmdldExlZnQoKSk7CisKKyAgICAvLyBDaGVjayBpbmRleGluZy4KKyAgICBzd2l0Y2ggKG5v
ZGUtPmdldE9wKCkpIHsKKyAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6CisgICAgICBjYXNlIEVP
cEluZGV4SW5kaXJlY3Q6CisgICAgICAgIHZhbGlkYXRlSW5kZXhpbmcobm9kZSk7CisgICAgICAg
IGJyZWFrOworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1V
bmFyeSogbm9kZSkKK3sKKyAgICAvLyBDaGVjayBpZiBsb29wIGluZGV4IGlzIG1vZGlmaWVkIGlu
IHRoZSBsb29wIGJvZHkuCisgICAgdmFsaWRhdGVPcGVyYXRpb24obm9kZSwgbm9kZS0+Z2V0T3Bl
cmFuZCgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlv
bnM6OnZpc2l0U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKikKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZShW
aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9w
KCkpIHsKKyAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgorICAgICAgICB2YWxpZGF0ZUZ1bmN0
aW9uQ2FsbChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0
aW9uczo6dmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKK3sKKyAgICBpZiAoIXZh
bGlkYXRlTG9vcFR5cGUobm9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFRMb29w
SW5mbyBpbmZvOworICAgIG1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKFRMb29wSW5mbykpOworICAg
IGlmICghdmFsaWRhdGVGb3JMb29wSGVhZGVyKG5vZGUsICZpbmZvKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgVEludGVybU5vZGUqIGJvZHkgPSBub2RlLT5nZXRCb2R5KCk7CisgICAg
aWYgKGJvZHkgIT0gTlVMTCkgeworICAgICAgICBtTG9vcFN0YWNrLnB1c2hfYmFjayhpbmZvKTsK
KyAgICAgICAgYm9keS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG1Mb29wU3RhY2sucG9wX2Jh
Y2soKTsKKyAgICB9CisKKyAgICAvLyBUaGUgbG9vcCBpcyBmdWxseSBwcm9jZXNzZWQgLSBubyBu
ZWVkIHRvIHZpc2l0IGNoaWxkcmVuLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBWYWxp
ZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCopCit7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVmFsaWRhdGVMaW1pdGF0aW9uczo6ZXJyb3IoVFNv
dXJjZUxvYyBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg
KnJlYXNvbiwgY29uc3QgY2hhciogdG9rZW4pCit7CisgICAgbVNpbmsucHJlZml4KEVQcmVmaXhF
cnJvcik7CisgICAgbVNpbmsubG9jYXRpb24obG9jKTsKKyAgICBtU2luayA8PCAiJyIgPDwgdG9r
ZW4gPDwgIicgOiAiIDw8IHJlYXNvbiA8PCAiXG4iOworICAgICsrbU51bUVycm9yczsKK30KKwor
Ym9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp3aXRoaW5Mb29wQm9keSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICFtTG9vcFN0YWNrLmVtcHR5KCk7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9u
czo6aXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sKSBjb25zdAoreworICAg
IHJldHVybiBJc0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2spOworfQorCitib29sIFZhbGlk
YXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUpIHsKKyAg
ICBUTG9vcFR5cGUgdHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAgICBpZiAodHlwZSA9PSBFTG9v
cEZvcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBSZWplY3Qgd2hpbGUgYW5kIGRv
LXdoaWxlIGxvb3BzLgorICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKKyAgICAgICAgICAiVGhp
cyB0eXBlIG9mIGxvb3AgaXMgbm90IGFsbG93ZWQiLAorICAgICAgICAgIHR5cGUgPT0gRUxvb3BX
aGlsZSA/ICJ3aGlsZSIgOiAiZG8iKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVmFs
aWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRlcm1Mb29wKiBub2Rl
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJ
bmZvKiBpbmZvKQoreworICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkgPT0gRUxvb3BGb3IpOwor
CisgICAgLy8KKyAgICAvLyBUaGUgZm9yIHN0YXRlbWVudCBoYXMgdGhlIGZvcm06CisgICAgLy8g
ICAgZm9yICggaW5pdC1kZWNsYXJhdGlvbiA7IGNvbmRpdGlvbiA7IGV4cHJlc3Npb24gKSBzdGF0
ZW1lbnQKKyAgICAvLworICAgIGlmICghdmFsaWRhdGVGb3JMb29wSW5pdChub2RlLCBpbmZvKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdmFsaWRhdGVGb3JMb29wQ29uZChub2Rl
LCBpbmZvKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdmFsaWRhdGVGb3JMb29w
RXhwcihub2RlLCBpbmZvKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5pdChU
SW50ZXJtTG9vcCogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBUTG9vcEluZm8qIGluZm8pCit7CisgICAgVEludGVybU5vZGUqIGluaXQgPSBub2Rl
LT5nZXRJbml0KCk7CisgICAgaWYgKGluaXQgPT0gTlVMTCkgeworICAgICAgICBlcnJvcihub2Rl
LT5nZXRMaW5lKCksICJNaXNzaW5nIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIGluaXQtZGVjbGFyYXRpb24g
aGFzIHRoZSBmb3JtOgorICAgIC8vICAgICB0eXBlLXNwZWNpZmllciBpZGVudGlmaWVyID0gY29u
c3RhbnQtZXhwcmVzc2lvbgorICAgIC8vCisgICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGlu
aXQtPmdldEFzQWdncmVnYXRlKCk7CisgICAgaWYgKChkZWNsID09IE5VTEwpIHx8IChkZWNsLT5n
ZXRPcCgpICE9IEVPcERlY2xhcmF0aW9uKSkgeworICAgICAgICBlcnJvcihpbml0LT5nZXRMaW5l
KCksICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgLy8gVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGRvIG5vdCBhbGxvdyBk
ZWNsYXJhdGlvbiBsaXN0LgorICAgIFRJbnRlcm1TZXF1ZW5jZSYgZGVjbFNlcSA9IGRlY2wtPmdl
dFNlcXVlbmNlKCk7CisgICAgaWYgKGRlY2xTZXEuc2l6ZSgpICE9IDEpIHsKKyAgICAgICAgZXJy
b3IoZGVjbC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0
ID0gZGVjbFNlcVswXS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgaWYgKChkZWNsSW5pdCA9PSBO
VUxMKSB8fCAoZGVjbEluaXQtPmdldE9wKCkgIT0gRU9wSW5pdGlhbGl6ZSkpIHsKKyAgICAgICAg
ZXJyb3IoZGVjbC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIp
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJv
bCA9IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgIGlmIChzeW1i
b2wgPT0gTlVMTCkgeworICAgICAgICBlcnJvcihkZWNsSW5pdC0+Z2V0TGluZSgpLCAiSW52YWxp
ZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIC8vIFRoZSBsb29wIGluZGV4IGhhcyB0eXBlIGludCBvciBmbG9hdC4KKyAgICBUQmFz
aWNUeXBlIHR5cGUgPSBzeW1ib2wtPmdldEJhc2ljVHlwZSgpOworICAgIGlmICgodHlwZSAhPSBF
YnRJbnQpICYmICh0eXBlICE9IEVidEZsb2F0KSkgeworICAgICAgICBlcnJvcihzeW1ib2wtPmdl
dExpbmUoKSwKKyAgICAgICAgICAgICAgIkludmFsaWQgdHlwZSBmb3IgbG9vcCBpbmRleCIsIGdl
dEJhc2ljU3RyaW5nKHR5cGUpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAv
LyBUaGUgbG9vcCBpbmRleCBpcyBpbml0aWFsaXplZCB3aXRoIGNvbnN0YW50IGV4cHJlc3Npb24u
CisgICAgaWYgKCFpc0NvbnN0RXhwcihkZWNsSW5pdC0+Z2V0UmlnaHQoKSkpIHsKKyAgICAgICAg
ZXJyb3IoZGVjbEluaXQtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fu
bm90IGJlIGluaXRpYWxpemVkIHdpdGggbm9uLWNvbnN0YW50IGV4cHJlc3Npb24iLAorICAgICAg
ICAgICAgICBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaW5mby0+aW5kZXguaWQgPSBzeW1ib2wtPmdldElkKCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JM
b29wQ29uZChUSW50ZXJtTG9vcCogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCit7CisgICAgVEludGVybU5vZGUqIGNv
bmQgPSBub2RlLT5nZXRDb25kaXRpb24oKTsKKyAgICBpZiAoY29uZCA9PSBOVUxMKSB7CisgICAg
ICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwgIk1pc3NpbmcgY29uZGl0aW9uIiwgImZvciIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vCisgICAgLy8gY29uZGl0aW9uIGhh
cyB0aGUgZm9ybToKKyAgICAvLyAgICAgbG9vcF9pbmRleCByZWxhdGlvbmFsX29wZXJhdG9yIGNv
bnN0YW50X2V4cHJlc3Npb24KKyAgICAvLworICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gY29u
ZC0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgaWYgKGJpbk9wID09IE5VTEwpIHsKKyAgICAgICAg
ZXJyb3Iobm9kZS0+Z2V0TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gTG9vcCBpbmRleCBzaG91bGQgYmUgdG8g
dGhlIGxlZnQgb2YgcmVsYXRpb25hbCBvcGVyYXRvci4KKyAgICBUSW50ZXJtU3ltYm9sKiBzeW1i
b2wgPSBiaW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBpZiAoc3ltYm9s
ID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3IoYmluT3AtPmdldExpbmUoKSwgIkludmFsaWQgY29u
ZGl0aW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChz
eW1ib2wtPmdldElkKCkgIT0gaW5mby0+aW5kZXguaWQpIHsKKyAgICAgICAgZXJyb3Ioc3ltYm9s
LT5nZXRMaW5lKCksCisgICAgICAgICAgICAgICJFeHBlY3RlZCBsb29wIGluZGV4Iiwgc3ltYm9s
LT5nZXRTeW1ib2woKS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICAvLyBSZWxhdGlvbmFsIG9wZXJhdG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9yICE9Lgor
ICAgIHN3aXRjaCAoYmluT3AtPmdldE9wKCkpIHsKKyAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAg
ICBjYXNlIEVPcE5vdEVxdWFsOgorICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgIGNhc2Ug
RU9wR3JlYXRlclRoYW46CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAgICBjYXNl
IEVPcEdyZWF0ZXJUaGFuRXF1YWw6CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgZXJyb3IoYmluT3AtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgIkludmFsaWQgcmVs
YXRpb25hbCBvcGVyYXRvciIsCisgICAgICAgICAgICAgIGdldE9wZXJhdG9yU3RyaW5nKGJpbk9w
LT5nZXRPcCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBMb29wIGluZGV4IG11
c3QgYmUgY29tcGFyZWQgd2l0aCBhIGNvbnN0YW50LgorICAgIGlmICghaXNDb25zdEV4cHIoYmlu
T3AtPmdldFJpZ2h0KCkpKSB7CisgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCisgICAg
ICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBjb21wYXJlZCB3aXRoIG5vbi1jb25zdGFu
dCBleHByZXNzaW9uIiwKKyAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigp
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxv
b3AqIG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
VExvb3BJbmZvKiBpbmZvKQoreworICAgIFRJbnRlcm1Ob2RlKiBleHByID0gbm9kZS0+Z2V0RXhw
cmVzc2lvbigpOworICAgIGlmIChleHByID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3Iobm9kZS0+
Z2V0TGluZSgpLCAiTWlzc2luZyBleHByZXNzaW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgLy8gZm9yIGV4cHJlc3Npb24gaGFzIG9uZSBvZiB0aGUgZm9s
bG93aW5nIGZvcm1zOgorICAgIC8vICAgICBsb29wX2luZGV4KysKKyAgICAvLyAgICAgbG9vcF9p
bmRleC0tCisgICAgLy8gICAgIGxvb3BfaW5kZXggKz0gY29uc3RhbnRfZXhwcmVzc2lvbgorICAg
IC8vICAgICBsb29wX2luZGV4IC09IGNvbnN0YW50X2V4cHJlc3Npb24KKyAgICAvLyAgICAgKyts
b29wX2luZGV4CisgICAgLy8gICAgIC0tbG9vcF9pbmRleAorICAgIC8vIFRoZSBsYXN0IHR3byBm
b3JtcyBhcmUgbm90IHNwZWNpZmllZCBpbiB0aGUgc3BlYywgYnV0IEkgYW0gYXNzdW1pbmcKKyAg
ICAvLyBpdHMgYW4gb3ZlcnNpZ2h0LgorICAgIFRJbnRlcm1VbmFyeSogdW5PcCA9IGV4cHItPmdl
dEFzVW5hcnlOb2RlKCk7CisgICAgVEludGVybUJpbmFyeSogYmluT3AgPSB1bk9wID8gTlVMTCA6
IGV4cHItPmdldEFzQmluYXJ5Tm9kZSgpOworCisgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsK
KyAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBOVUxMOworICAgIGlmICh1bk9wICE9IE5VTEwp
IHsKKyAgICAgICAgb3AgPSB1bk9wLT5nZXRPcCgpOworICAgICAgICBzeW1ib2wgPSB1bk9wLT5n
ZXRPcGVyYW5kKCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgIH0gZWxzZSBpZiAoYmluT3AgIT0g
TlVMTCkgeworICAgICAgICBvcCA9IGJpbk9wLT5nZXRPcCgpOworICAgICAgICBzeW1ib2wgPSBi
aW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICB9CisKKyAgICAvLyBUaGUg
b3BlcmFuZCBtdXN0IGJlIGxvb3AgaW5kZXguCisgICAgaWYgKHN5bWJvbCA9PSBOVUxMKSB7Cisg
ICAgICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgZXhwcmVzc2lvbiIsICJmb3Ii
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoc3ltYm9sLT5nZXRJZCgp
ICE9IGluZm8tPmluZGV4LmlkKSB7CisgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAor
ICAgICAgICAgICAgICAiRXhwZWN0ZWQgbG9vcCBpbmRleCIsIHN5bWJvbC0+Z2V0U3ltYm9sKCku
Y19zdHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgb3Bl
cmF0b3IgaXMgb25lIG9mOiArKyAtLSArPSAtPS4KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAg
IGNhc2UgRU9wUG9zdEluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50Ogor
ICAgICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1l
bnQ6CisgICAgICAgICAgICBBU1NFUlQoKHVuT3AgIT0gTlVMTCkgJiYgKGJpbk9wID09IE5VTEwp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKKyAgICAg
ICAgY2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkg
JiYgKGJpbk9wICE9IE5VTEwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgZXJyb3IoZXhwci0+Z2V0TGluZSgpLCAiSW52YWxpZCBvcGVyYXRvciIs
IGdldE9wZXJhdG9yU3RyaW5nKG9wKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgLy8gTG9vcCBpbmRleCBtdXN0IGJlIGluY3JlbWVudGVkL2RlY3JlbWVudGVkIHdp
dGggYSBjb25zdGFudC4KKyAgICBpZiAoYmluT3AgIT0gTlVMTCkgeworICAgICAgICBpZiAoIWlz
Q29uc3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgICAgICAgICAgZXJyb3IoYmluT3At
PmdldExpbmUoKSwKKyAgICAgICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBtb2Rp
ZmllZCBieSBub24tY29uc3RhbnQgZXhwcmVzc2lvbiIsCisgICAgICAgICAgICAgICAgICBzeW1i
b2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1p
dGF0aW9uczo6dmFsaWRhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sK
KyAgICBBU1NFUlQobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlvbkNhbGwpOworCisgICAgLy8g
SWYgbm90IHdpdGhpbiBsb29wIGJvZHksIHRoZXJlIGlzIG5vdGhpbmcgdG8gY2hlY2suCisgICAg
aWYgKCF3aXRoaW5Mb29wQm9keSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIExp
c3Qgb2YgcGFyYW0gaW5kaWNlcyBmb3Igd2hpY2ggbG9vcCBpbmRpY2VzIGFyZSB1c2VkIGFzIGFy
Z3VtZW50LgorICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8aW50PiBQYXJhbUluZGV4OworICAgIFBh
cmFtSW5kZXggcEluZGV4OworICAgIFRJbnRlcm1TZXF1ZW5jZSYgcGFyYW1zID0gbm9kZS0+Z2V0
U2VxdWVuY2UoKTsKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6c2l6ZV90eXBlIGkgPSAwOyBp
IDwgcGFyYW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9
IHBhcmFtc1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgIGlmIChzeW1ib2wgJiYgaXNM
b29wSW5kZXgoc3ltYm9sKSkKKyAgICAgICAgICAgIHBJbmRleC5wdXNoX2JhY2soaSk7CisgICAg
fQorICAgIC8vIElmIG5vbmUgb2YgdGhlIGxvb3AgaW5kaWNlcyBhcmUgdXNlZCBhcyBhcmd1bWVu
dHMsCisgICAgLy8gdGhlcmUgaXMgbm90aGluZyB0byBjaGVjay4KKyAgICBpZiAocEluZGV4LmVt
cHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7Cisg
ICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9IEdsb2JhbFBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGU7CisgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXRO
YW1lKCkpOworICAgIEFTU0VSVChzeW1ib2wgJiYgc3ltYm9sLT5pc0Z1bmN0aW9uKCkpOworICAg
IFRGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihzeW1ib2wpOwor
ICAgIGZvciAoUGFyYW1JbmRleDo6Y29uc3RfaXRlcmF0b3IgaSA9IHBJbmRleC5iZWdpbigpOwor
ICAgICAgICAgaSAhPSBwSW5kZXguZW5kKCk7ICsraSkgeworICAgICAgICBjb25zdCBUUGFyYW1l
dGVyJiBwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJhbSgqaSk7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IHBhcmFtLnR5cGUtPmdldFF1YWxpZmllcigpOworICAgICAgICBpZiAoKHF1YWwgPT0g
RXZxT3V0KSB8fCAocXVhbCA9PSBFdnFJbk91dCkpIHsKKyAgICAgICAgICAgIGVycm9yKHBhcmFt
c1sqaV0tPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBi
ZSB1c2VkIGFzIGFyZ3VtZW50IHRvIGEgZnVuY3Rpb24gb3V0IG9yIGlub3V0IHBhcmFtZXRlciIs
CisgICAgICAgICAgICAgICAgICBwYXJhbXNbKmldLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3lt
Ym9sKCkuY19zdHIoKSk7CisgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIHZhbGlkOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6
OnZhbGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRvciogbm9kZSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUqIG9wZXJhbmQpIHsKKyAg
ICAvLyBDaGVjayBpZiBsb29wIGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCisg
ICAgaWYgKCF3aXRoaW5Mb29wQm9keSgpIHx8ICFub2RlLT5tb2RpZmllc1N0YXRlKCkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sID0gb3Bl
cmFuZC0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRleChz
eW1ib2wpKSB7CisgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAg
Ikxvb3AgaW5kZXggY2Fubm90IGJlIHN0YXRpY2FsbHkgYXNzaWduZWQgdG8gd2l0aGluIHRoZSBi
b2R5IG9mIHRoZSBsb29wIiwKKyAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0
cigpKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0
aW9uczo6aXNDb25zdEV4cHIoVEludGVybU5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUg
IT0gTlVMTCk7CisgICAgcmV0dXJuIG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpICE9IE5VTEw7
Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEluZGV4RXhwcihUSW50ZXJt
Tm9kZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSAhPSBOVUxMKTsKKworICAgIFZhbGlkYXRl
Q29uc3RJbmRleEV4cHIgdmFsaWRhdGUobUxvb3BTdGFjayk7CisgICAgbm9kZS0+dHJhdmVyc2Uo
JnZhbGlkYXRlKTsKKyAgICByZXR1cm4gdmFsaWRhdGUuaXNWYWxpZCgpOworfQorCitib29sIFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSogbm9kZSkK
K3sKKyAgICBBU1NFUlQoKG5vZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhEaXJlY3QpIHx8CisgICAg
ICAgICAgIChub2RlLT5nZXRPcCgpID09IEVPcEluZGV4SW5kaXJlY3QpKTsKKworICAgIGJvb2wg
dmFsaWQgPSB0cnVlOworICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBub2RlLT5nZXRSaWdodCgp
OworICAgIC8vIFRoZSBpbmRleCBleHByZXNzaW9uIG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlLgor
ICAgIGlmICghaW5kZXgtPmlzU2NhbGFyKCkgfHwgKGluZGV4LT5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRJbnQpKSB7CisgICAgICAgIGVycm9yKGluZGV4LT5nZXRMaW5lKCksCisgICAgICAgICAgICAg
ICJJbmRleCBleHByZXNzaW9uIG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlIiwKKyAgICAgICAgICAg
ICAgaW5kZXgtPmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgIHZhbGlkID0g
ZmFsc2U7CisgICAgfQorICAgIC8vIFRoZSBpbmRleCBleHBlc3Npb24gbXVzdCBiZSBhIGNvbnN0
YW50LWluZGV4LWV4cHJlc3Npb24gdW5sZXNzCisgICAgLy8gdGhlIG9wZXJhbmQgaXMgYSB1bmlm
b3JtIGluIGEgdmVydGV4IHNoYWRlci4KKyAgICBUSW50ZXJtVHlwZWQqIG9wZXJhbmQgPSBub2Rl
LT5nZXRMZWZ0KCk7CisgICAgYm9vbCBza2lwID0gKG1TaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9T
SEFERVIpICYmCisgICAgICAgICAgICAgICAgKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2
cVVuaWZvcm0pOworICAgIGlmICghc2tpcCAmJiAhaXNDb25zdEluZGV4RXhwcihpbmRleCkpIHsK
KyAgICAgICAgZXJyb3IoaW5kZXgtPmdldExpbmUoKSwgIkluZGV4IGV4cHJlc3Npb24gbXVzdCBi
ZSBjb25zdGFudCIsICJbXSIpOworICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgIH0KKyAgICBy
ZXR1cm4gdmFsaWQ7Cit9CisKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRp
b25zLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMp
IDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8v
IFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5j
bHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRp
YXRlLmgiCisKK2NsYXNzIFRJbmZvU2lua0Jhc2U7CisKK3N0cnVjdCBUTG9vcEluZm8geworICAg
IHN0cnVjdCBUSW5kZXggeworICAgICAgICBpbnQgaWQ7ICAvLyBzeW1ib2wgaWQuCisgICAgfSBp
bmRleDsKK307Cit0eXBlZGVmIFRWZWN0b3I8VExvb3BJbmZvPiBUTG9vcFN0YWNrOworCisvLyBU
cmF2ZXJzZXMgaW50ZXJtZWRpYXRlIHRyZWUgdG8gZW5zdXJlIHRoYXQgdGhlIHNoYWRlciBkb2Vz
IG5vdCBleGNlZWQgdGhlCisvLyBtaW5pbXVtIGZ1bmN0aW9uYWxpdHkgbWFuZGF0ZWQgaW4gR0xT
TCAxLjAgc3BlYywgQXBwZW5kaXggQS4KK2NsYXNzIFZhbGlkYXRlTGltaXRhdGlvbnMgOiBwdWJs
aWMgVEludGVybVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVmFsaWRhdGVMaW1pdGF0aW9ucyhT
aFNoYWRlclR5cGUgc2hhZGVyVHlwZSwgVEluZm9TaW5rQmFzZSYgc2luayk7CisKKyAgICBpbnQg
bnVtRXJyb3JzKCkgY29uc3QgeyByZXR1cm4gbU51bUVycm9yczsgfQorCisgICAgdmlydHVhbCB2
b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICB2aXJ0dWFsIHZvaWQgdmlzaXRD
b25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7CisgICAgdmlydHVhbCBib29sIHZp
c2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7CisgICAgdmlydHVhbCBib29sIHZpc2l0
VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVj
dGlvbihWaXNpdCwgVEludGVybVNlbGVjdGlvbiopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNo
KFZpc2l0LCBUSW50ZXJtQnJhbmNoKik7CisKK3ByaXZhdGU6CisgICAgdm9pZCBlcnJvcihUU291
cmNlTG9jIGxvYywgY29uc3QgY2hhciAqcmVhc29uLCBjb25zdCBjaGFyKiB0b2tlbik7CisKKyAg
ICBib29sIHdpdGhpbkxvb3BCb2R5KCkgY29uc3Q7CisgICAgYm9vbCBpc0xvb3BJbmRleChjb25z
dCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wpIGNvbnN0OworICAgIGJvb2wgdmFsaWRhdGVMb29wVHlw
ZShUSW50ZXJtTG9vcCogbm9kZSk7CisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BIZWFkZXIoVElu
dGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7CisgICAgYm9vbCB2YWxpZGF0ZUZvckxv
b3BJbml0KFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOworICAgIGJvb2wgdmFs
aWRhdGVGb3JMb29wQ29uZChUSW50ZXJtTG9vcCogbm9kZSwgVExvb3BJbmZvKiBpbmZvKTsKKyAg
ICBib29sIHZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3AqIG5vZGUsIFRMb29wSW5mbyog
aW5mbyk7CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIG5vbmUgb2YgdGhlIGxvb3AgaW5kaWNlcyBp
cyB1c2VkIGFzIHRoZSBhcmd1bWVudCB0bworICAgIC8vIHRoZSBnaXZlbiBmdW5jdGlvbiBvdXQg
b3IgaW5vdXQgcGFyYW1ldGVyLgorICAgIGJvb2wgdmFsaWRhdGVGdW5jdGlvbkNhbGwoVEludGVy
bUFnZ3JlZ2F0ZSogbm9kZSk7CisgICAgYm9vbCB2YWxpZGF0ZU9wZXJhdGlvbihUSW50ZXJtT3Bl
cmF0b3IqIG5vZGUsIFRJbnRlcm1Ob2RlKiBvcGVyYW5kKTsKKworICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiBpbmRleGluZyBkb2VzIG5vdCBleGNlZWQgdGhlIG1pbmltdW0gZnVuY3Rpb25hbGl0eQor
ICAgIC8vIG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMsIEFwcGVuZGl4IEEsIFNlY3Rpb24gNS4K
KyAgICBib29sIGlzQ29uc3RFeHByKFRJbnRlcm1Ob2RlKiBub2RlKTsKKyAgICBib29sIGlzQ29u
c3RJbmRleEV4cHIoVEludGVybU5vZGUqIG5vZGUpOworICAgIGJvb2wgdmFsaWRhdGVJbmRleGlu
ZyhUSW50ZXJtQmluYXJ5KiBub2RlKTsKKworICAgIFNoU2hhZGVyVHlwZSBtU2hhZGVyVHlwZTsK
KyAgICBUSW5mb1NpbmtCYXNlJiBtU2luazsKKyAgICBpbnQgbU51bUVycm9yczsKKyAgICBUTG9v
cFN0YWNrIG1Mb29wU3RhY2s7Cit9OworCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFyaWFibGVJbmZvLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxMCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0y
MDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBV
c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNl
IHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1
ZGUgImNvbXBpbGVyL1ZhcmlhYmxlSW5mby5oIgorCitzdGF0aWMgVFN0cmluZyBhcnJheUJyYWNr
ZXRzKGludCBpbmRleCkKK3sKKyAgICBUU3RyaW5nU3RyZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0g
PDwgIlsiIDw8IGluZGV4IDw8ICJdIjsKKyAgICByZXR1cm4gc3RyZWFtLnN0cigpOworfQorCisv
LyBSZXR1cm5zIHRoZSBkYXRhIHR5cGUgZm9yIGFuIGF0dHJpYnV0ZSBvciB1bmlmb3JtLgorc3Rh
dGljIFNoRGF0YVR5cGUgZ2V0VmFyaWFibGVEYXRhVHlwZShjb25zdCBUVHlwZSYgdHlwZSkKK3sK
KyAgICBzd2l0Y2ggKHR5cGUuZ2V0QmFzaWNUeXBlKCkpIHsKKyAgICAgIGNhc2UgRWJ0RmxvYXQ6
CisgICAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICBzd2l0Y2gg
KHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJu
IFNIX0ZMT0FUX01BVDI7CisgICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gU0hfRkxPQVRf
TUFUMzsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9GTE9BVF9NQVQ0OworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkgeworICAgICAgICAgICAgICBzd2l0
Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0
dXJuIFNIX0ZMT0FUX1ZFQzI7CisgICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gU0hfRkxP
QVRfVkVDMzsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9GTE9BVF9WRUM0Owor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICAgIH0K
KyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICByZXR1cm4gU0hfRkxPQVQ7CisgICAg
ICAgICAgfQorICAgICAgY2FzZSBFYnRJbnQ6CisgICAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgo
KSkgeworICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgIH0gZWxzZSBpZiAo
dHlwZS5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFs
U2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gU0hfSU5UX1ZFQzI7Cisg
ICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gU0hfSU5UX1ZFQzM7CisgICAgICAgICAgICAg
ICAgY2FzZSA0OiByZXR1cm4gU0hfSU5UX1ZFQzQ7CisgICAgICAgICAgICAgICAgZGVmYXVsdDog
VU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgIHJldHVybiBTSF9JTlQ7CisgICAgICAgICAgfQorICAgICAgY2FzZSBFYnRCb29s
OgorICAgICAgICAgIGlmICh0eXBlLmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgICAgVU5SRUFD
SEFCTEUoKTsKKyAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUuaXNWZWN0b3IoKSkgeworICAgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUuZ2V0Tm9taW5hbFNpemUoKSkgeworICAgICAgICAgICAgICAg
IGNhc2UgMjogcmV0dXJuIFNIX0JPT0xfVkVDMjsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJl
dHVybiBTSF9CT09MX1ZFQzM7CisgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gU0hfQk9P
TF9WRUM0OworICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICByZXR1cm4gU0hfQk9P
TDsKKyAgICAgICAgICB9CisgICAgICBjYXNlIEVidFNhbXBsZXIyRDogcmV0dXJuIFNIX1NBTVBM
RVJfMkQ7CisgICAgICBjYXNlIEVidFNhbXBsZXJDdWJlOiByZXR1cm4gU0hfU0FNUExFUl9DVUJF
OworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CisgICAgcmV0dXJuIFNIX05P
TkU7Cit9CisKK3N0YXRpYyB2b2lkIGdldEJ1aWx0SW5WYXJpYWJsZUluZm8oY29uc3QgVFR5cGUm
IHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcm
IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9M
aXN0JiBpbmZvTGlzdCk7CitzdGF0aWMgdm9pZCBnZXRVc2VyRGVmaW5lZFZhcmlhYmxlSW5mbyhj
b25zdCBUVHlwZSYgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRTdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUVmFyaWFibGVJbmZvTGlzdCYgaW5mb0xpc3QpOworCisvLyBSZXR1cm5zIGluZm8gZm9y
IGFuIGF0dHJpYnV0ZSBvciB1bmlmb3JtLgorc3RhdGljIHZvaWQgZ2V0VmFyaWFibGVJbmZvKGNv
bnN0IFRUeXBlJiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJp
bmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3Qm
IGluZm9MaXN0KQoreworICAgIGlmICh0eXBlLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVjdCkg
eworICAgICAgICBpZiAodHlwZS5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgdHlwZS5nZXRBcnJheVNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgVFN0
cmluZyBsbmFtZSA9IG5hbWUgKyBhcnJheUJyYWNrZXRzKGkpOworICAgICAgICAgICAgICAgIGdl
dFVzZXJEZWZpbmVkVmFyaWFibGVJbmZvKHR5cGUsIGxuYW1lLCBpbmZvTGlzdCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBnZXRVc2VyRGVmaW5lZFZhcmlh
YmxlSW5mbyh0eXBlLCBuYW1lLCBpbmZvTGlzdCk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgICBnZXRCdWlsdEluVmFyaWFibGVJbmZvKHR5cGUsIG5hbWUsIGluZm9MaXN0KTsKKyAg
ICB9Cit9CisKK3ZvaWQgZ2V0QnVpbHRJblZhcmlhYmxlSW5mbyhjb25zdCBUVHlwZSYgdHlwZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUU3RyaW5nJiBuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCkKK3sKKyAg
ICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRTdHJ1Y3QpOworCisgICAgVFZhcmlh
YmxlSW5mbyB2YXJJbmZvOworICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgeworICAgICAgICB2YXJJ
bmZvLm5hbWUgPSAobmFtZSArICJbMF0iKS5jX3N0cigpOworICAgICAgICB2YXJJbmZvLnNpemUg
PSB0eXBlLmdldEFycmF5U2l6ZSgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhckluZm8ubmFt
ZSA9IG5hbWUuY19zdHIoKTsKKyAgICAgICAgdmFySW5mby5zaXplID0gMTsKKyAgICB9CisgICAg
dmFySW5mby50eXBlID0gZ2V0VmFyaWFibGVEYXRhVHlwZSh0eXBlKTsKKyAgICBpbmZvTGlzdC5w
dXNoX2JhY2sodmFySW5mbyk7Cit9CisKK3ZvaWQgZ2V0VXNlckRlZmluZWRWYXJpYWJsZUluZm8o
Y29uc3QgVFR5cGUmIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFRTdHJpbmcmIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRWYXJpYWJs
ZUluZm9MaXN0JiBpbmZvTGlzdCkKK3sKKyAgICBBU1NFUlQodHlwZS5nZXRCYXNpY1R5cGUoKSA9
PSBFYnRTdHJ1Y3QpOworCisgICAgVFN0cmluZyBsbmFtZSA9IG5hbWUgKyAiLiI7CisgICAgY29u
c3QgVFR5cGVMaXN0KiBzdHJ1Y3R1cmUgPSB0eXBlLmdldFN0cnVjdCgpOworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgc3RydWN0dXJlLT5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBU
VHlwZSogZmllbGRUeXBlID0gKCpzdHJ1Y3R1cmUpW2ldLnR5cGU7CisgICAgICAgIGdldFZhcmlh
YmxlSW5mbygqZmllbGRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgbG5hbWUgKyBmaWVs
ZFR5cGUtPmdldEZpZWxkTmFtZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5mb0xpc3Qp
OworICAgIH0KK30KKworQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6Q29sbGVjdEF0dHJpYnNVbmlm
b3JtcyhUVmFyaWFibGVJbmZvTGlzdCYgYXR0cmlicywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHVuaWZvcm1zKQorICAg
IDogbUF0dHJpYnMoYXR0cmlicyksCisgICAgICBtVW5pZm9ybXModW5pZm9ybXMpCit7Cit9CisK
Ky8vIFdlIGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gYXR0cmlidXRlIGFuZCB1bmlmb3JtIHZhcmlh
YmxlIGRlY2xhcmF0aW9uLgordm9pZCBDb2xsZWN0QXR0cmlic1VuaWZvcm1zOjp2aXNpdFN5bWJv
bChUSW50ZXJtU3ltYm9sKikKK3sKK30KKwordm9pZCBDb2xsZWN0QXR0cmlic1VuaWZvcm1zOjp2
aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKQoreworfQorCitib29sIENv
bGxlY3RBdHRyaWJzVW5pZm9ybXM6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5KikK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6
dmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5KikKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2Jvb2wgQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6dmlzaXRTZWxlY3Rpb24oVmlzaXQsIFRJ
bnRlcm1TZWxlY3Rpb24qKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDb2xsZWN0
QXR0cmlic1VuaWZvcm1zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSog
bm9kZSkKK3sKKyAgICBib29sIHZpc2l0Q2hpbGRyZW4gPSBmYWxzZTsKKworICAgIHN3aXRjaCAo
bm9kZS0+Z2V0T3AoKSkKKyAgICB7CisgICAgY2FzZSBFT3BTZXF1ZW5jZToKKyAgICAgICAgLy8g
V2UgbmVlZCB0byB2aXNpdCBzZXF1ZW5jZSBjaGlsZHJlbiB0byBnZXQgdG8gdmFyaWFibGUgZGVj
bGFyYXRpb25zLgorICAgICAgICB2aXNpdENoaWxkcmVuID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBFT3BEZWNsYXJhdGlvbjogeworICAgICAgICBjb25zdCBUSW50ZXJtU2VxdWVu
Y2UmIHNlcXVlbmNlID0gbm9kZS0+Z2V0U2VxdWVuY2UoKTsKKyAgICAgICAgVFF1YWxpZmllciBx
dWFsaWZpZXIgPSBzZXF1ZW5jZS5mcm9udCgpLT5nZXRBc1R5cGVkKCktPmdldFF1YWxpZmllcigp
OworICAgICAgICBpZiAocXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSB8fCBxdWFsaWZpZXIgPT0g
RXZxVW5pZm9ybSkKKyAgICAgICAgeworICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGlu
Zm9MaXN0ID0gcXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSA/CisgICAgICAgICAgICAgICAgbUF0
dHJpYnMgOiBtVW5pZm9ybXM7CisgICAgICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6Y29u
c3RfaXRlcmF0b3IgaSA9IHNlcXVlbmNlLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgIGkgIT0g
c2VxdWVuY2UuZW5kKCk7ICsraSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25z
dCBUSW50ZXJtU3ltYm9sKiB2YXJpYWJsZSA9ICgqaSktPmdldEFzU3ltYm9sTm9kZSgpOworICAg
ICAgICAgICAgICAgIC8vIFRoZSBvbmx5IGNhc2UgaW4gd2hpY2ggdGhlIHNlcXVlbmNlIHdpbGwg
bm90IGNvbnRhaW4gYQorICAgICAgICAgICAgICAgIC8vIFRJbnRlcm1TeW1ib2wgbm9kZSBpcyBp
bml0aWFsaXphdGlvbi4gSXQgd2lsbCBjb250YWluIGEKKyAgICAgICAgICAgICAgICAvLyBUSW50
ZXJCaW5hcnkgbm9kZSBpbiB0aGF0IGNhc2UuIFNpbmNlIGF0dHJpYnV0ZXMgYW5kIHVuaWZyb21z
CisgICAgICAgICAgICAgICAgLy8gY2Fubm90IGJlIGluaXRpYWxpemVkIGluIGEgc2hhZGVyLCB3
ZSBtdXN0IGhhdmUgb25seQorICAgICAgICAgICAgICAgIC8vIFRJbnRlcm1TeW1ib2wgbm9kZXMg
aW4gdGhlIHNlcXVlbmNlLgorICAgICAgICAgICAgICAgIEFTU0VSVCh2YXJpYWJsZSAhPSBOVUxM
KTsKKyAgICAgICAgICAgICAgICBnZXRWYXJpYWJsZUluZm8odmFyaWFibGUtPmdldFR5cGUoKSwg
dmFyaWFibGUtPmdldFN5bWJvbCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bmZvTGlzdCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiB2aXNpdENoaWxkcmVu
OworfQorCitib29sIENvbGxlY3RBdHRyaWJzVW5pZm9ybXM6OnZpc2l0TG9vcChWaXNpdCwgVElu
dGVybUxvb3AqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDb2xsZWN0QXR0cmli
c1VuaWZvcm1zOjp2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCopCit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVmFyaWFibGVJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDM4IEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFk
ZXJMYW5nLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKKy8vIFByb3Zp
ZGVzIGluZm9ybWF0aW9uIGFib3V0IGEgdmFyaWFibGUuCisvLyBJdCBpcyBjdXJyZW50bHkgYmVp
bmcgdXNlZCB0byBzdG9yZSBpbmZvIGFib3V0IGFjdGl2ZSBhdHRyaWJzIGFuZCB1bmlmb3Jtcy4K
K3N0cnVjdCBUVmFyaWFibGVJbmZvIHsKKyAgICBUUGVyc2lzdFN0cmluZyBuYW1lOworICAgIFNo
RGF0YVR5cGUgdHlwZTsKKyAgICBpbnQgc2l6ZTsKK307Cit0eXBlZGVmIHN0ZDo6dmVjdG9yPFRW
YXJpYWJsZUluZm8+IFRWYXJpYWJsZUluZm9MaXN0OworCisvLyBUcmF2ZXJzZXMgaW50ZXJtZWRp
YXRlIHRyZWUgdG8gY29sbGVjdCBhbGwgYXR0cmlidXRlcyBhbmQgdW5pZm9ybXMuCitjbGFzcyBD
b2xsZWN0QXR0cmlic1VuaWZvcm1zIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVibGlj
OgorICAgIENvbGxlY3RBdHRyaWJzVW5pZm9ybXMoVFZhcmlhYmxlSW5mb0xpc3QmIGF0dHJpYnMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgdW5pZm9ybXMp
OworCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKik7Cisg
ICAgdmlydHVhbCBib29sIHZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5Kik7CisgICAg
dmlydHVhbCBib29sIHZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSopOworICAgIHZpcnR1
YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihWaXNpdCwgVEludGVybVNlbGVjdGlvbiopOworICAgIHZp
cnR1YWwgYm9vbCB2aXNpdEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSopOworICAg
IHZpcnR1YWwgYm9vbCB2aXNpdExvb3AoVmlzaXQsIFRJbnRlcm1Mb29wKik7CisgICAgdmlydHVh
bCBib29sIHZpc2l0QnJhbmNoKFZpc2l0LCBUSW50ZXJtQnJhbmNoKik7CisKK3ByaXZhdGU6Cisg
ICAgVFZhcmlhYmxlSW5mb0xpc3QmIG1BdHRyaWJzOworICAgIFRWYXJpYWJsZUluZm9MaXN0JiBt
VW5pZm9ybXM7Cit9OworCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvVmVyc2lvbkdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEwOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdM
RSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJl
CisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVy
L1ZlcnNpb25HTFNMLmgiCisKK3N0YXRpYyBjb25zdCBpbnQgR0xTTF9WRVJTSU9OXzExMCA9IDEx
MDsKK3N0YXRpYyBjb25zdCBpbnQgR0xTTF9WRVJTSU9OXzEyMCA9IDEyMDsKKworLy8gV2UgbmVl
ZCB0byBzY2FuIGZvciB0d28gdGhpbmdzOgorLy8gMS4gImludmFyaWFudCIga2V5d29yZDogVGhp
cyBjYW4gb2NjdXIgaW4gYm90aCAtIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycworLy8gICAg
YnV0IG9ubHkgYXQgdGhlIGdsb2JhbCBzY29wZS4KKy8vIDIuICJnbF9Qb2ludENvb3JkIiBidWls
dC1pbiB2YXJpYWJsZTogVGhpcyBjYW4gb25seSBvY2N1ciBpbiBmcmFnbWVudCBzaGFkZXIKKy8v
ICAgIGJ1dCBpbnNpZGUgYW55IHNjb3BlLgorLy8gU28gd2UgbmVlZCB0byBzY2FuIHRoZSBlbnRp
cmUgZnJhZ21lbnQgc2hhZGVyIGJ1dCBvbmx5IHRoZSBnbG9iYWwgc2NvcGUKKy8vIG9mIHZlcnRl
eCBzaGFkZXIuCisvLworLy8gVE9ETyhhbG9rcCk6IFRoZSBmb2xsb3dpbmcgdHdvIGNhc2VzIG9m
IGludmFyaWFudCBkZWNhbGFyYXRpb24gZ2V0IGxvc3QKKy8vIGR1cmluZyBwYXJzaW5nIC0gdGhl
eSBkbyBub3QgZ2V0IGNhcnJpZWQgb3ZlciB0byB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCisvLyBI
YW5kbGUgdGhlc2UgY2FzZXM6CisvLyAxLiBXaGVuIGEgcHJhZ21hIGlzIHVzZWQgdG8gZm9yY2Ug
YWxsIG91dHB1dCB2YXJpYWJsZXMgdG8gYmUgaW52YXJpYW50OgorLy8gICAgLSAjcHJhZ21hIFNU
REdMIGludmFyaWFudChhbGwpCisvLyAyLiBXaGVuIGEgcHJldmlvdXNseSBkZWNhbGFyZWQgb3Ig
YnVpbHQtaW4gdmFyaWFibGUgaXMgbWFya2VkIGludmFyaWFudDoKKy8vICAgIC0gaW52YXJpYW50
IGdsX1Bvc2l0aW9uOworLy8gICAgLSB2YXJ5aW5nIHZlYzMgY29sb3I7IGludmFyaWFudCBjb2xv
cjsKKy8vCitUVmVyc2lvbkdMU0w6OlRWZXJzaW9uR0xTTChTaFNoYWRlclR5cGUgdHlwZSkKKyAg
ICA6IG1TaGFkZXJUeXBlKHR5cGUpLAorICAgICAgbVZlcnNpb24oR0xTTF9WRVJTSU9OXzExMCkK
K3sKK30KKwordm9pZCBUVmVyc2lvbkdMU0w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5v
ZGUpCit7CisgICAgQVNTRVJUKG1TaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUik7CisK
KyAgICBpZiAobm9kZS0+Z2V0U3ltYm9sKCkgPT0gImdsX1BvaW50Q29vcmQiKQorICAgICAgICB1
cGRhdGVWZXJzaW9uKEdMU0xfVkVSU0lPTl8xMjApOworfQorCit2b2lkIFRWZXJzaW9uR0xTTDo6
dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKikKK3sKKyAgICBBU1NFUlQo
bVNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKTsKK30KKworYm9vbCBUVmVyc2lvbkdM
U0w6OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5KikKK3sKKyAgICBBU1NFUlQobVNo
YWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBUVmVyc2lvbkdMU0w6OnZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSopCit7Cisg
ICAgQVNTRVJUKG1TaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUik7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgVFZlcnNpb25HTFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCwgVElu
dGVybVNlbGVjdGlvbiopCit7CisgICAgQVNTRVJUKG1TaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5U
X1NIQURFUik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVFZlcnNpb25HTFNMOjp2aXNp
dEFnZ3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAgICAvLyBXZSBu
ZWVkIHRvIHNjYW4gdGhlIGVudGlyZSBmcmFnbWVudCBzaGFkZXIgYnV0IG9ubHkgdGhlIGdsb2Jh
bCBzY29wZQorICAgIC8vIG9mIHZlcnRleCBzaGFkZXIuCisgICAgYm9vbCB2aXNpdENoaWxkcmVu
ID0gbVNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSID8gdHJ1ZSA6IGZhbHNlOworCisg
ICAgc3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CisgICAgICBjYXNlIEVPcFNlcXVlbmNlOgorICAg
ICAgICAvLyBXZSBuZWVkIHRvIHZpc2l0IHNlcXVlbmNlIGNoaWxkcmVuIHRvIGdldCB0byBnbG9i
YWwgb3IgaW5uZXIgc2NvcGUuCisgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOworICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgRU9wRGVjbGFyYXRpb246IHsKKyAgICAgICAgY29uc3QgVElu
dGVybVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgIFRR
dWFsaWZpZXIgcXVhbGlmaWVyID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0QXNUeXBlZCgpLT5nZXRR
dWFsaWZpZXIoKTsKKyAgICAgICAgaWYgKChxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWlu
Z0luKSB8fAorICAgICAgICAgICAgKHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0
KSkgeworICAgICAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNMX1ZFUlNJT05fMTIwKTsKKyAgICAg
ICAgfQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAg
IH0KKworICAgIHJldHVybiB2aXNpdENoaWxkcmVuOworfQorCitib29sIFRWZXJzaW9uR0xTTDo6
dmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCopCit7CisgICAgQVNTRVJUKG1TaGFkZXJUeXBl
ID09IFNIX0ZSQUdNRU5UX1NIQURFUik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVFZl
cnNpb25HTFNMOjp2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCopCit7CisgICAgQVNT
RVJUKG1TaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUik7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgVFZlcnNpb25HTFNMOjp1cGRhdGVWZXJzaW9uKGludCB2ZXJzaW9uKQorewor
ICAgIG1WZXJzaW9uID0gc3RkOjptYXgodmVyc2lvbiwgbVZlcnNpb24pOworfQorCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9W
ZXJzaW9uR0xTTC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDUwIEBACisvLworLy8gQ29weXJp
Z2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNE
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUu
CisvLworCisjaWZuZGVmIENPTVBJTEVSX1ZFUlNJT05HTFNMX0hfCisjZGVmaW5lIENPTVBJTEVS
X1ZFUlNJT05HTFNMX0hfCisKKyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKyNpbmNs
dWRlICJjb21waWxlci9pbnRlcm1lZGlhdGUuaCIKKworLy8gVHJhdmVyc2VzIHRoZSBpbnRlcm1l
ZGlhdGUgdHJlZSB0byByZXR1cm4gdGhlIG1pbmltdW0gR0xTTCB2ZXJzaW9uCisvLyByZXF1aXJl
ZCB0byBsZWdhbGx5IGFjY2VzcyBhbGwgYnVpbHQtaW4gZmVhdHVyZXMgdXNlZCBpbiB0aGUgc2hh
ZGVyLgorLy8gR0xTTCAxLjEgd2hpY2ggaXMgbWFuZGF0ZWQgYnkgT3BlbkdMIDIuMCBwcm92aWRl
czoKKy8vICAgLSAjdmVyc2lvbiBhbmQgI2V4dGVuc2lvbiB0byBkZWNsYXJlIHZlcnNpb24gYW5k
IGV4dGVuc2lvbnMuCisvLyAgIC0gYnVpbHQtaW4gZnVuY3Rpb25zIHJlZnJhY3QsIGV4cCwgYW5k
IGxvZy4KKy8vICAgLSB1cGRhdGVkIHN0ZXAoKSB0byBjb21wYXJlIHggPCBlZGdlIGluc3RlYWQg
b2YgeCA8PSBlZGdlLgorLy8gR0xTTCAxLjIgd2hpY2ggaXMgbWFuZGF0ZWQgYnkgT3BlbkdMIDIu
MSBwcm92aWRlczoKKy8vICAgLSBtYW55IGNoYW5nZXMgdG8gcmVkdWNlIGRpZmZlcmVuY2VzIHdo
ZW4gY29tcGFyZWQgdG8gdGhlIEVTIHNwZWNpZmljYXRpb24uCisvLyAgIC0gaW52YXJpYW50IGtl
eXdvcmQgYW5kIGl0cyBzdXBwb3J0LgorLy8gICAtIGMrKyBzdHlsZSBuYW1lIGhpZGluZyBydWxl
cy4KKy8vICAgLSBidWlsdC1pbiB2YXJpYWJsZSBnbF9Qb2ludENvb3JkIGZvciBmcmFnbWVudCBz
aGFkZXJzLgorLy8KK2NsYXNzIFRWZXJzaW9uR0xTTCA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2Vy
IHsKK3B1YmxpYzoKKyAgICBUVmVyc2lvbkdMU0woU2hTaGFkZXJUeXBlIHR5cGUpOworCisgICAg
Ly8gUmV0dXJucyAxMjAgaWYgImludmFyaWFudCIga2V5d29yZCBvciAiZ2xfUG9pbnRDb29yZCIg
aXMgdXNlZAorICAgIC8vIGluIHRoZSBzaGFkZXIuIEVsc2UgMTEwIGlzIHJldHVybmVkLgorICAg
IGludCBnZXRWZXJzaW9uKCkgeyByZXR1cm4gbVZlcnNpb247IH0KKworICAgIHZpcnR1YWwgdm9p
ZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29u
c3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVu
YXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rp
b24oVmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dy
ZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRM
b29wKFZpc2l0LCBUSW50ZXJtTG9vcCopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChW
aXNpdCwgVEludGVybUJyYW5jaCopOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCB1cGRhdGVWZXJz
aW9uKGludCB2ZXJzaW9uKTsKKworcHJpdmF0ZToKKyAgICBTaFNoYWRlclR5cGUgbVNoYWRlclR5
cGU7CisgICAgaW50IG1WZXJzaW9uOworfTsKKworI2VuZGlmICAvLyBDT01QSUxFUl9WRVJTSU9O
R0xTTF9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dlbmVy
YXRlX2dsc2xhbmdfbGV4ZXIuc2gKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dlbmVyYXRlX2dsc2xhbmdfbGV4ZXIuc2gJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2VuZXJhdGVfZ2xzbGFuZ19s
ZXhlci5zaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorIyEvYmluL2Jhc2gKKyMgQ29w
eXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0
eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyMgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKwor
IyBHZW5lcmF0ZXMgR0xTTCBFUyBsZXhlciAtIGdsc2xhbmdfbGV4LmNwcAorCitzY3JpcHRfZGly
PSQoZGlybmFtZSAkMCkKK2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIvZ2xzbGFuZy5sCitvdXRwdXRf
ZmlsZT0kc2NyaXB0X2Rpci9nbHNsYW5nX2xleC5jcHAKK2ZsZXggLS1ub2xpbmUgLS1ub3VuaXN0
ZCAtLW91dGZpbGU9JG91dHB1dF9maWxlICRpbnB1dF9maWxlCgpQcm9wZXJ0eSBjaGFuZ2VzIG9u
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2VuZXJhdGVfZ2xzbGFuZ19s
ZXhlci5zaApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2VuZXJhdGVfZ2xzbGFuZ19wYXJz
ZXIuc2gKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2dlbmVyYXRlX2dsc2xhbmdfcGFyc2VyLnNoCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dlbmVyYXRlX2dsc2xhbmdfcGFyc2VyLnNoCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACisjIS9iaW4vYmFzaAorIyBDb3B5cmlnaHQgKGMpIDIw
MTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisjIEdlbmVyYXRlcyBH
TFNMIEVTIHBhcnNlciAtIGdsc2xhbmdfdGFiLmggYW5kIGdsc2xhbmdfdGFiLmNwcAorCitzY3Jp
cHRfZGlyPSQoZGlybmFtZSAkMCkKK2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIvZ2xzbGFuZy55Citv
dXRwdXRfaGVhZGVyPSRzY3JpcHRfZGlyL2dsc2xhbmdfdGFiLmgKK291dHB1dF9zb3VyY2U9JHNj
cmlwdF9kaXIvZ2xzbGFuZ190YWIuY3BwCitiaXNvbiAtLW5vLWxpbmVzIC0tc2tlbGV0b249eWFj
Yy5jIC0tZGVmaW5lcz0kb3V0cHV0X2hlYWRlciAtLW91dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5w
dXRfZmlsZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dlbmVyYXRlX2dsc2xhbmdfcGFyc2VyLnNoCl9fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2
bjpleGVjdXRhYmxlCiAgICsgKgoKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2dsc2xhbmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVy
bmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBM
SUNFTlNFIGZpbGUuCisvLworCitzdHJ1Y3QgVFBhcnNlQ29udGV4dDsKK2V4dGVybiBpbnQgZ2xz
bGFuZ19pbml0aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNs
YW5nX2ZpbmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOworCitleHRlcm4gdm9pZCBnbHNs
YW5nX3NjYW4oaW50IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IGNvbnN0IHN0cmluZ1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5n
dGhbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsK
K2V4dGVybiBpbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKKwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCShy
ZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9n
bHNsYW5nLmwJKHdvcmtpbmcgY29weSkKQEAgLTQsMzQgKzQsMjkgQEAKIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwotKi8KLS8qIEJhc2VkIG9uCi1B
TlNJIEMgZ3JhbW1hciwgTGV4IHNwZWNpZmljYXRpb24KLQotSW4gMTk4NSwgSmVmZiBMZWUgcHVi
bGlzaGVkIHRoaXMgTGV4IHNwZWNpZmljYXRpb24gdG9nZXRoZXIgd2l0aCBhIFlhY2MgCi1ncmFt
bWFyIGZvciB0aGUgQXByaWwgMzAsIDE5ODUgQU5TSSBDIGRyYWZ0LiAgVG9tIFN0b2NrZmlzY2gg
cmVwb3N0ZWQgCi1ib3RoIHRvIG5ldC5zb3VyY2VzIGluIDE5ODc7IHRoYXQgb3JpZ2luYWwsIGFz
IG1lbnRpb25lZCBpbiB0aGUgYW5zd2VyIAotdG8gcXVlc3Rpb24gMTcuMjUgb2YgdGhlIGNvbXAu
bGFuZy5jIEZBUSwgY2FuIGJlIGZ0cCdlZCBmcm9tIGZ0cC51dS5uZXQsIAotZmlsZSB1c2VuZXQv
bmV0LnNvdXJjZXMvYW5zaS5jLmdyYW1tYXIuWi4gCiAKLUkgaW50ZW5kIHRvIGtlZXAgdGhpcyB2
ZXJzaW9uIGFzIGNsb3NlIHRvIHRoZSBjdXJyZW50IEMgU3RhbmRhcmQgZ3JhbW1hciAKLWFzIHBv
c3NpYmxlOyBwbGVhc2UgbGV0IG1lIGtub3cgaWYgeW91IGRpc2NvdmVyIGRpc2NyZXBhbmNpZXMu
IAorVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBMZXggc3BlY2lmaWNhdGlvbiBmb3IgR0xTTCBFUy4K
K0Jhc2VkIG9uIEFOU0kgQyBncmFtbWFyLCBMZXggc3BlY2lmaWNhdGlvbjoKK2h0dHA6Ly93d3cu
bHlzYXRvci5saXUuc2UvYy9BTlNJLUMtZ3JhbW1hci1sLmh0bWwKIAotSnV0dGEgRGVnZW5lciwg
MTk5NSAKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVy
YXRlX2dsc2xhbmdfbGV4ZXIuc2gsCitXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIg
KGdsc2xhbmdfbGV4LmNwcCkuCiAqLwogCi1EICAgICAgICAgICBbMC05XQotTCAgICAgICAgICAg
W2EtekEtWl9dCi1IICAgICAgICAgICBbYS1mQS1GMC05XQotRSAgICAgICAgICAgW0VlXVsrLV0/
e0R9KwotTyAgICAgICAgICAgWzAtN10KKyV0b3B7CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KIAotJW9wdGlvbiBu
b3VucHV0IAotJXsKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgorLy8g
VGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX2dsc2xhbmdfbGV4ZXIuc2gu
IERPIE5PVCBFRElUIQorfQogCisleworI2luY2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKICNp
bmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwu
aCIKICNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgogCiAvKiB3aW5kb3dzIG9ubHkgcHJhZ21hICov
CkBAIC0zOSw0MDcgKzM0LDMwNCBAQCBPICAgICAgICAgICBbMC03XQogI3ByYWdtYSB3YXJuaW5n
KGRpc2FibGUgOiA0MTAyKQogI2VuZGlmCiAKLWludCB5eV9pbnB1dChjaGFyKiBidWYsIGludCBt
YXhfc2l6ZSk7Ci0KLWV4dGVybiBpbnQgeXlwYXJzZSh2b2lkKik7Ci0jZGVmaW5lIFlZX0RFQ0wg
aW50IHl5bGV4KFlZU1RZUEUqIHB5eWx2YWwsIHZvaWQqIHBhcnNlQ29udGV4dExvY2FsKQotI2Rl
ZmluZSBwYXJzZUNvbnRleHQgKCooKFRQYXJzZUNvbnRleHQqKShwYXJzZUNvbnRleHRMb2NhbCkp
KQotIAotI2RlZmluZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9zaXplKSAocmVzdWx0ID0geXlf
aW5wdXQoYnVmLCBtYXhfc2l6ZSkpCi0KKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04geXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4X3Np
emUpIFwKKyAgICByZXN1bHQgPSBzdHJpbmdfaW5wdXQoYnVmLCBtYXhfc2l6ZSwgeXlzY2FubmVy
KTsKKworc3RhdGljIGludCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUsIHl5
c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2Fu
bmVyKTsKK3N0YXRpYyBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5eXNjYW5uZXIpOwogJX0K
IAotLyoKLVRPRE8oYWxva3ApOiB5eWxpbmVubyBpcyBvbmx5IGhlcmUgdG8gc3VwcG9ydCBvbGQg
ZmxleC5leGUgaW4gY29tcGlsZXIvdG9vbHMuCi1SZW1vdmUgaXQgd2hlbiB3ZSBjYW4gZXhjbHVz
aXZlbHkgdXNlIHRoZSBuZXdlciB2ZXJzaW9uLgotKi8KLSVvcHRpb24geXlsaW5lbm8KLQotJW9w
dGlvbiBub3l5d3JhcAotJW9wdGlvbiBuZXZlci1pbnRlcmFjdGl2ZQotJXggRklFTERTCislb3B0
aW9uIG5veXl3cmFwIG5vdW5wdXQgbmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24geXlsaW5lbm8g
cmVlbnRyYW50IGJpc29uLWJyaWRnZQorJW9wdGlvbiBzdGFjaworJW9wdGlvbiBleHRyYS10eXBl
PSJUUGFyc2VDb250ZXh0KiIKKyV4IENPTU1FTlQgRklFTERTCiAKK0QgICAgICAgICAgIFswLTld
CitMICAgICAgICAgICBbYS16QS1aX10KK0ggICAgICAgICAgIFthLWZBLUYwLTldCitFICAgICAg
ICAgICBbRWVdWystXT97RH0rCitPICAgICAgICAgICBbMC03XQogCiAlJQotPCo+Ii8vIlteXG5d
KiJcbiIgICAgIHsgLyogPz8gY2FycmlhZ2UgYW5kL29yIGxpbmUtZmVlZD8gKi8gfTsKIAotImlu
dmFyaWFudCIgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKElOVkFS
SUFOVCk7IH0KLSJoaWdocCIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihISUdIX1BSRUNJU0lPTik7IH0KLSJtZWRpdW1wIiAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihNRURJVU1fUFJFQ0lTSU9OKTsgfQotImxvd3AiICAg
ICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKExPV19QUkVDSVNJ
T04pOyB9Ci0icHJlY2lzaW9uIiAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBy
ZXR1cm4oUFJFQ0lTSU9OKTsgfQotCi0iYXR0cmlidXRlIiAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oQVRUUklCVVRFKTsgfQotImNvbnN0IiAgICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKENPTlNUX1FVQUwpOyB9Ci0idW5pZm9y
bSIgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oVU5JRk9STSk7
IH0KLSJ2YXJ5aW5nIiAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihWQVJZSU5HKTsgfQotCi0iYnJlYWsiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oQlJFQUspOyB9Ci0iY29udGludWUiICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ09OVElOVUUpOyB9Ci0iZG8iICAgICAgICAgICB7ICBw
eXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oRE8pOyB9Ci0iZm9yIiAgICAgICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oRk9SKTsgfQotIndoaWxl
IiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFdISUxFKTsg
fQotCi0iaWYiICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1
cm4oSUYpOyB9Ci0iZWxzZSIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oRUxTRSk7IH0KLQotImluIiAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcmV0dXJuKElOX1FVQUwpOyB9Ci0ib3V0IiAgICAgICAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oT1VUX1FVQUwpOyB9Ci0iaW5vdXQiICAgICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5PVVRfUVVBTCk7IH0K
LQotImZsb2F0IiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VD
b250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihGTE9BVF9UWVBFKTsgfQotImludCIg
ICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0Lmxl
eEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihJTlRfVFlQRSk7IH0KLSJ2b2lkIiAgICAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUg
PSB0cnVlOyByZXR1cm4oVk9JRF9UWVBFKTsgfQotImJvb2wiICAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJl
dHVybihCT09MX1RZUEUpOyB9Ci0idHJ1ZSIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyBweXlsdmFsLT5sZXguYiA9IHRydWU7ICByZXR1cm4oQk9PTENPTlNUQU5UKTsg
fQotImZhbHNlIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZh
bC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuKEJPT0xDT05TVEFOVCk7IH0KLQotImRpc2NhcmQiICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKERJU0NBUkQpOyB9Ci0i
cmV0dXJuIiAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oUkVU
VVJOKTsgfQotCi0ibWF0MiIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKE1BVFJJWDIpOyB9Ci0i
bWF0MyIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRl
eHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKE1BVFJJWDMpOyB9Ci0ibWF0NCIgICAgICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJU
eXBlID0gdHJ1ZTsgcmV0dXJuKE1BVFJJWDQpOyB9Ci0KLSJ2ZWMyIiAgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVl
OyByZXR1cm4gKFZFQzIpOyB9Ci0idmVjMyIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChWRUMz
KTsgfQotInZlYzQiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFy
c2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoVkVDNCk7IH0KLSJpdmVjMiIg
ICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhB
ZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKElWRUMyKTsgfQotIml2ZWMzIiAgICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRy
dWU7IHJldHVybiAoSVZFQzMpOyB9Ci0iaXZlYzQiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChJ
VkVDNCk7IH0KLSJidmVjMiIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKEJWRUMyKTsgfQotImJ2
ZWMzIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0
LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoQlZFQzMpOyB9Ci0iYnZlYzQiICAgICAgICB7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBl
ID0gdHJ1ZTsgcmV0dXJuIChCVkVDNCk7IH0KLQotInNhbXBsZXIyRCIgICAgICAgeyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7
IHJldHVybiBTQU1QTEVSMkQ7IH0KLSJzYW1wbGVyQ3ViZSIgICAgIHsgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4g
U0FNUExFUkNVQkU7IH0KLQotInN0cnVjdCIgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihTVFJVQ1Qp
OyB9Ci0KLSJhc20iICAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0K
LSJjbGFzcyIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0idW5pb24i
ICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotImVudW0iICAgICAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJ0eXBlZGVmIiAgICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0idGVtcGxhdGUiICAgICB7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQotInRoaXMiICAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KLSJwYWNrZWQiICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
Ci0KLSJnb3RvIiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0ic3dp
dGNoIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotImRlZmF1bHQiICAg
ICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLQotImlubGluZSIgICAgICAgeyAg
UGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJub2lubGluZSIgICAgIHsgIFBhUmVzZXJ2
ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0idm9sYXRpbGUiICAgICB7ICBQYVJlc2VydmVkV29yZCgp
OyByZXR1cm4gMDsgfQotInB1YmxpYyIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJu
IDA7IH0KLSJzdGF0aWMiICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0i
ZXh0ZXJuIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotImV4dGVybmFs
IiAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJpbnRlcmZhY2UiICAgIHsg
IFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0KLSJsb25nIiAgICAgICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0ic2hvcnQiICAgICAgICB7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQotImRvdWJsZSIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KLSJoYWxmIiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
Ci0iZml4ZWQiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotInVuc2ln
bmVkIiAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLQotImlucHV0IiAgICAg
ICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJvdXRwdXQiICAgICAgIHsgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0KLSJodmVjMiIgICAgICAgIHsgIFBhUmVzZXJ2
ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0iaHZlYzMiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgp
OyByZXR1cm4gMDsgfQotImh2ZWM0IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJu
IDA7IH0KLSJmdmVjMiIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0i
ZnZlYzMiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotImZ2ZWM0IiAg
ICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJkdmVjMiIgICAgICAgIHsg
IFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0iZHZlYzMiICAgICAgICB7ICBQYVJlc2Vy
dmVkV29yZCgpOyByZXR1cm4gMDsgfQotImR2ZWM0IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQo
KTsgcmV0dXJuIDA7IH0KLQotInNpemVvZiIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KLSJjYXN0IiAgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9
Ci0KLSJuYW1lc3BhY2UiICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0idXNp
bmciICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotCi17TH0oe0x9fHtE
fSkqICAgICAgIHsgIAotICAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgCi0gICBweXls
dmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmcoeXl0ZXh0KTsgCi0gICByZXR1cm4gUGFJ
ZGVudE9yVHlwZSgqcHl5bHZhbC0+bGV4LnN0cmluZywgcGFyc2VDb250ZXh0LCBweXlsdmFsLT5s
ZXguc3ltYm9sKTsgCi19Ci0KLTBbeFhde0h9KyAgICAgICAgIHsgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJu
KElOVENPTlNUQU5UKTsgfQotMHtPfSsgICAgICAgICAgICAgeyBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyBweXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4o
SU5UQ09OU1RBTlQpOyB9Ci0we0R9KyAgICAgICAgICAgICB7IHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHBhcnNlQ29udGV4dC5lcnJvcih5eWxpbmVubywgIkludmFsaWQgT2N0YWwgbnVt
YmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgcGFyc2VDb250ZXh0LnJlY292ZXIoKTsgcmV0dXJuIDA7
fQote0R9KyAgICAgICAgICAgICAgeyBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXls
dmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9
Ci0KLXtEfSt7RX0gICAgICAgICAgIHsgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5
bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZih5eXRleHQpKTsgcmV0dXJuKEZM
T0FUQ09OU1RBTlQpOyB9Ci17RH0rIi4ie0R9Kih7RX0pPyB7IHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2YoeXl0ZXh0
KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQotIi4ie0R9Kyh7RX0pPyAgICAgeyBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0
PihhdG9mKHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KLQotIi8qIiAgICAgICAg
ICAgIHsgIGludCByZXQgPSBQYVBhcnNlQ29tbWVudChweXlsdmFsLT5sZXgubGluZSwgcGFyc2VD
b250ZXh0KTsgaWYgKCFyZXQpIHJldHVybiByZXQ7IH0gICAKLQotIis9IiAgICAgICAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBRERfQVNTSUdOKTsgfQotIi09
IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihTVUJf
QVNTSUdOKTsgfQotIio9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHJldHVybihNVUxfQVNTSUdOKTsgfQotIi89IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihESVZfQVNTSUdOKTsgfQotIiU9IiAgICAgICAgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihNT0RfQVNTSUdOKTsgfQot
Ijw8PSIgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihM
RUZUX0FTU0lHTik7IH0KLSI+Pj0iICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oUklHSFRfQVNTSUdOKTsgfQotIiY9IiAgICAgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihBTkRfQVNTSUdOKTsgfQotIl49IiAgICAg
ICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihYT1JfQVNTSUdO
KTsgfQotInw9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJl
dHVybihPUl9BU1NJR04pOyB9Ci0KLSIrKyIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oSU5DX09QKTsgfQotIi0tIiAgICAgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihERUNfT1ApOyB9Ci0iJiYiICAgICAgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFORF9PUCk7IH0KLSJ8
fCIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oT1Jf
T1ApOyB9Ci0iXl4iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cmV0dXJuKFhPUl9PUCk7IH0KLSI8PSIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oTEVfT1ApOyB9Ci0iPj0iICAgICAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEdFX09QKTsgfQotIj09IiAgICAgICAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihFUV9PUCk7IH0KLSIhPSIgICAg
ICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTkVfT1ApOyB9
Ci0iPDwiICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJu
KExFRlRfT1ApOyB9Ci0iPj4iICAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcmV0dXJuKFJJR0hUX09QKTsgfQotIjsiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4o
U0VNSUNPTE9OKTsgfQotKCJ7InwiPCUiKSAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKExFRlRfQlJB
Q0UpOyB9Ci0oIn0ifCIlPiIpICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cmV0dXJuKFJJR0hUX0JSQUNFKTsgfQotIiwiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgaWYgKHBhcnNlQ29udGV4dC5pblR5cGVQYXJlbikgcGFyc2VDb250ZXh0Lmxl
eEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9Ci0iOiIgICAgICAgICB7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ09MT04pOyB9Ci0iPSIgICAgICAgICB7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBl
ID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KLSIoIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcGFyc2VD
b250ZXh0LmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRfUEFSRU4pOyB9Ci0iKSIgICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQuaW5UeXBl
UGFyZW4gPSBmYWxzZTsgcmV0dXJuKFJJR0hUX1BBUkVOKTsgfQotKCJbInwiPDoiKSAgICAgIHsg
IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMRUZUX0JSQUNLRVQpOyB9Ci0o
Il0ifCI6PiIpICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFJJ
R0hUX0JSQUNLRVQpOyB9CisleworICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSB5eWV4dHJh
OworJX0KKworICAgIC8qIFNpbmdsZS1saW5lIGNvbW1lbnRzICovCisiLy8iW15cbl0qIDsKKwor
ICAgIC8qIE11bHRpLWxpbmUgY29tbWVudHMgKi8KKyIvKiIgICAgICAgICAgIHsgeXlfcHVzaF9z
dGF0ZShDT01NRU5ULCB5eXNjYW5uZXIpOyB9Cis8Q09NTUVOVD4uIHwKKzxDT01NRU5UPlxuIDsK
KzxDT01NRU5UPiIqLyIgIHsgeXlfcG9wX3N0YXRlKHl5c2Nhbm5lcik7IH0KKworImludmFyaWFu
dCIgICAgeyByZXR1cm4oSU5WQVJJQU5UKTsgfQorImhpZ2hwIiAgICAgICAgeyByZXR1cm4oSElH
SF9QUkVDSVNJT04pOyB9CisibWVkaXVtcCIgICAgICB7IHJldHVybihNRURJVU1fUFJFQ0lTSU9O
KTsgfQorImxvd3AiICAgICAgICAgeyByZXR1cm4oTE9XX1BSRUNJU0lPTik7IH0KKyJwcmVjaXNp
b24iICAgIHsgcmV0dXJuKFBSRUNJU0lPTik7IH0KKworImF0dHJpYnV0ZSIgICAgeyByZXR1cm4o
QVRUUklCVVRFKTsgfQorImNvbnN0IiAgICAgICAgeyByZXR1cm4oQ09OU1RfUVVBTCk7IH0KKyJ1
bmlmb3JtIiAgICAgIHsgcmV0dXJuKFVOSUZPUk0pOyB9CisidmFyeWluZyIgICAgICB7IHJldHVy
bihWQVJZSU5HKTsgfQorCisiYnJlYWsiICAgICAgICB7IHJldHVybihCUkVBSyk7IH0KKyJjb250
aW51ZSIgICAgIHsgcmV0dXJuKENPTlRJTlVFKTsgfQorImRvIiAgICAgICAgICAgeyByZXR1cm4o
RE8pOyB9CisiZm9yIiAgICAgICAgICB7IHJldHVybihGT1IpOyB9Cisid2hpbGUiICAgICAgICB7
IHJldHVybihXSElMRSk7IH0KKworImlmIiAgICAgICAgICAgeyByZXR1cm4oSUYpOyB9CisiZWxz
ZSIgICAgICAgICB7IHJldHVybihFTFNFKTsgfQorCisiaW4iICAgICAgICAgICB7IHJldHVybihJ
Tl9RVUFMKTsgfQorIm91dCIgICAgICAgICAgeyByZXR1cm4oT1VUX1FVQUwpOyB9CisiaW5vdXQi
ICAgICAgICB7IHJldHVybihJTk9VVF9RVUFMKTsgfQorCisiZmxvYXQiICAgICAgICB7IGNvbnRl
eHQtPmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihGTE9BVF9UWVBFKTsgfQorImludCIgICAg
ICAgICAgeyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oSU5UX1RZUEUpOyB9
Cisidm9pZCIgICAgICAgICB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihW
T0lEX1RZUEUpOyB9CisiYm9vbCIgICAgICAgICB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IHRy
dWU7IHJldHVybihCT09MX1RZUEUpOyB9CisidHJ1ZSIgICAgICAgICB7IHl5bHZhbC0+bGV4LmIg
PSB0cnVlOyAgcmV0dXJuKEJPT0xDT05TVEFOVCk7IH0KKyJmYWxzZSIgICAgICAgIHsgeXlsdmFs
LT5sZXguYiA9IGZhbHNlOyByZXR1cm4oQk9PTENPTlNUQU5UKTsgfQorCisiZGlzY2FyZCIgICAg
ICB7IHJldHVybihESVNDQVJEKTsgfQorInJldHVybiIgICAgICAgeyByZXR1cm4oUkVUVVJOKTsg
fQorCisibWF0MiIgICAgICAgICB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVy
bihNQVRSSVgyKTsgfQorIm1hdDMiICAgICAgICAgeyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSB0
cnVlOyByZXR1cm4oTUFUUklYMyk7IH0KKyJtYXQ0IiAgICAgICAgIHsgY29udGV4dC0+bGV4QWZ0
ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKE1BVFJJWDQpOyB9CisKKyJ2ZWMyIiAgICAgICAgIHsgY29u
dGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChWRUMyKTsgfQorInZlYzMiICAgICAg
ICAgeyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKFZFQzMpOyB9CisidmVj
NCIgICAgICAgICB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoVkVDNCk7
IH0KKyJpdmVjMiIgICAgICAgIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJu
IChJVkVDMik7IH0KKyJpdmVjMyIgICAgICAgIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1
ZTsgcmV0dXJuIChJVkVDMyk7IH0KKyJpdmVjNCIgICAgICAgIHsgY29udGV4dC0+bGV4QWZ0ZXJU
eXBlID0gdHJ1ZTsgcmV0dXJuIChJVkVDNCk7IH0KKyJidmVjMiIgICAgICAgIHsgY29udGV4dC0+
bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDMik7IH0KKyJidmVjMyIgICAgICAgIHsg
Y29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDMyk7IH0KKyJidmVjNCIg
ICAgICAgIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDNCk7IH0K
KworInNhbXBsZXIyRCIgICAgICAgeyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1
cm4gU0FNUExFUjJEOyB9Cisic2FtcGxlckN1YmUiICAgICB7IGNvbnRleHQtPmxleEFmdGVyVHlw
ZSA9IHRydWU7IHJldHVybiBTQU1QTEVSQ1VCRTsgfQorCisic3RydWN0IiAgICAgICB7IGNvbnRl
eHQtPmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihTVFJVQ1QpOyB9CisKKyJhc20iICAgICAg
ICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisiY2xhc3MiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJ1bmlvbiIgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImVudW0iICAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisidHlwZWRlZiIgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJ0ZW1wbGF0ZSIgICAgIHsgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInRoaXMiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisicGFja2VkIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKworImdvdG8iICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9Cisic3dpdGNoIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KKyJkZWZhdWx0IiAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorCisiaW5saW5lIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKyJub2lubGluZSIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
InZvbGF0aWxlIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisicHVi
bGljIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzdGF0aWMi
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImV4dGVybiIgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZXh0ZXJuYWwiICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJpbnRlcmZhY2UiICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCisibG9uZyIgICAgICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzaG9ydCIgICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImRvdWJsZSIgICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiaGFsZiIgICAgICAgICB7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKyJmaXhlZCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorInVuc2lnbmVkIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisKKyJpbnB1dCIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQorIm91dHB1dCIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisKKyJodmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQorImh2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9Cisi
aHZlYzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVj
MiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMzIiAg
ICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzQiICAgICAg
ICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJkdmVjMiIgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImR2ZWMzIiAgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZHZlYzQiICAgICAgICB7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKworInNpemVvZiIgICAgICAgeyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiY2FzdCIgICAgICAgICB7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KKworIm5hbWVzcGFjZSIgICAgeyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisidXNpbmciICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKwore0x9KHtMfXx7RH0pKiAgICAgICB7CisgICB5eWx2YWwtPmxleC5z
dHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKyAgIHJldHVybiBjaGVja190eXBlKHl5
c2Nhbm5lcik7Cit9CisKKzBbeFhde0h9KyAgICAgICAgIHsgeXlsdmFsLT5sZXguaSA9IHN0cnRv
bCh5eXRleHQsIDAsIDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9Ciswe099KyAgICAgICAgICAg
ICB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNU
QU5UKTsgfQorMHtEfSsgICAgICAgICAgICAgeyBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgIklu
dmFsaWQgT2N0YWwgbnVtYmVyLiIsIHl5dGV4dCwgIiIsICIiKTsgY29udGV4dC0+cmVjb3Zlcigp
OyByZXR1cm4gMDt9Cit7RH0rICAgICAgICAgICAgICB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2wo
eXl0ZXh0LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQorCit7RH0re0V9ICAgICAgICAg
ICB7IHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZl9kb3QoeXl0ZXh0KSk7
IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQore0R9KyIuIntEfSooe0V9KT8geyB5eWx2YWwtPmxl
eC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRD
T05TVEFOVCk7IH0KKyIuIntEfSsoe0V9KT8gICAgIHsgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19j
YXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CisK
KyIrPSIgICAgICAgICAgICB7ICByZXR1cm4oQUREX0FTU0lHTik7IH0KKyItPSIgICAgICAgICAg
ICB7ICByZXR1cm4oU1VCX0FTU0lHTik7IH0KKyIqPSIgICAgICAgICAgICB7ICByZXR1cm4oTVVM
X0FTU0lHTik7IH0KKyIvPSIgICAgICAgICAgICB7ICByZXR1cm4oRElWX0FTU0lHTik7IH0KKyIl
PSIgICAgICAgICAgICB7ICByZXR1cm4oTU9EX0FTU0lHTik7IH0KKyI8PD0iICAgICAgICAgICB7
ICByZXR1cm4oTEVGVF9BU1NJR04pOyB9CisiPj49IiAgICAgICAgICAgeyAgcmV0dXJuKFJJR0hU
X0FTU0lHTik7IH0KKyImPSIgICAgICAgICAgICB7ICByZXR1cm4oQU5EX0FTU0lHTik7IH0KKyJe
PSIgICAgICAgICAgICB7ICByZXR1cm4oWE9SX0FTU0lHTik7IH0KKyJ8PSIgICAgICAgICAgICB7
ICByZXR1cm4oT1JfQVNTSUdOKTsgfQorCisiKysiICAgICAgICAgICAgeyAgcmV0dXJuKElOQ19P
UCk7IH0KKyItLSIgICAgICAgICAgICB7ICByZXR1cm4oREVDX09QKTsgfQorIiYmIiAgICAgICAg
ICAgIHsgIHJldHVybihBTkRfT1ApOyB9CisifHwiICAgICAgICAgICAgeyAgcmV0dXJuKE9SX09Q
KTsgfQorIl5eIiAgICAgICAgICAgIHsgIHJldHVybihYT1JfT1ApOyB9CisiPD0iICAgICAgICAg
ICAgeyAgcmV0dXJuKExFX09QKTsgfQorIj49IiAgICAgICAgICAgIHsgIHJldHVybihHRV9PUCk7
IH0KKyI9PSIgICAgICAgICAgICB7ICByZXR1cm4oRVFfT1ApOyB9CisiIT0iICAgICAgICAgICAg
eyAgcmV0dXJuKE5FX09QKTsgfQorIjw8IiAgICAgICAgICAgIHsgIHJldHVybihMRUZUX09QKTsg
fQorIj4+IiAgICAgICAgICAgIHsgIHJldHVybihSSUdIVF9PUCk7IH0KKyI7IiAgICAgICAgICAg
ICB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oU0VNSUNPTE9OKTsgfQor
KCJ7InwiPCUiKSAgICAgIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihM
RUZUX0JSQUNFKTsgfQorKCJ9InwiJT4iKSAgICAgIHsgcmV0dXJuKFJJR0hUX0JSQUNFKTsgfQor
IiwiICAgICAgICAgeyBpZiAoY29udGV4dC0+aW5UeXBlUGFyZW4pIGNvbnRleHQtPmxleEFmdGVy
VHlwZSA9IGZhbHNlOyByZXR1cm4oQ09NTUEpOyB9CisiOiIgICAgICAgICB7IHJldHVybihDT0xP
Tik7IH0KKyI9IiAgICAgICAgIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVy
bihFUVVBTCk7IH0KKyIoIiAgICAgICAgIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7
IGNvbnRleHQtPmluVHlwZVBhcmVuID0gdHJ1ZTsgcmV0dXJuKExFRlRfUEFSRU4pOyB9CisiKSIg
ICAgICAgICB7IGNvbnRleHQtPmluVHlwZVBhcmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJF
Tik7IH0KKygiWyJ8Ijw6IikgICAgICB7IHJldHVybihMRUZUX0JSQUNLRVQpOyB9CisoIl0ifCI6
PiIpICAgICAgeyByZXR1cm4oUklHSFRfQlJBQ0tFVCk7IH0KICIuIiAgICAgICAgIHsgQkVHSU4o
RklFTERTKTsgIHJldHVybihET1QpOyB9Ci0iISIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyByZXR1cm4oQkFORyk7IH0KLSItIiAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihEQVNIKTsgfQotIn4iICAgICAgICAgeyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFRJTERFKTsgfQotIisiICAgICAgICAgeyAg
cHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFBMVVMpOyB9Ci0iKiIgICAgICAg
ICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oU1RBUik7IH0KLSIvIiAg
ICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihTTEFTSCk7IH0K
LSIlIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihQRVJD
RU5UKTsgfQotIjwiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKExFRlRfQU5HTEUpOyB9Ci0iPiIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oUklHSFRfQU5HTEUpOyB9Ci0ifCIgICAgICAgICB7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oVkVSVElDQUxfQkFSKTsgfQotIl4iICAgICAgICAg
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKENBUkVUKTsgfQotIiYiICAg
ICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEFNUEVSU0FORCk7
IH0KLSI/IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihR
VUVTVElPTik7IH0KKyIhIiAgICAgICAgIHsgcmV0dXJuKEJBTkcpOyB9CisiLSIgICAgICAgICB7
IHJldHVybihEQVNIKTsgfQorIn4iICAgICAgICAgeyByZXR1cm4oVElMREUpOyB9CisiKyIgICAg
ICAgICB7IHJldHVybihQTFVTKTsgfQorIioiICAgICAgICAgeyByZXR1cm4oU1RBUik7IH0KKyIv
IiAgICAgICAgIHsgcmV0dXJuKFNMQVNIKTsgfQorIiUiICAgICAgICAgeyByZXR1cm4oUEVSQ0VO
VCk7IH0KKyI8IiAgICAgICAgIHsgcmV0dXJuKExFRlRfQU5HTEUpOyB9CisiPiIgICAgICAgICB7
IHJldHVybihSSUdIVF9BTkdMRSk7IH0KKyJ8IiAgICAgICAgIHsgcmV0dXJuKFZFUlRJQ0FMX0JB
Uik7IH0KKyJeIiAgICAgICAgIHsgcmV0dXJuKENBUkVUKTsgfQorIiYiICAgICAgICAgeyByZXR1
cm4oQU1QRVJTQU5EKTsgfQorIj8iICAgICAgICAgeyByZXR1cm4oUVVFU1RJT04pOyB9CiAKIDxG
SUVMRFM+e0x9KHtMfXx7RH0pKiB7IAotQkVHSU4oSU5JVElBTCk7ICAgICAgCi0gICAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgICAgIAotICAgIHB5eWx2YWwtPmxleC5zdHJpbmcgPSBO
ZXdQb29sVFN0cmluZyh5eXRleHQpOyAKLSAgICByZXR1cm4gRklFTERfU0VMRUNUSU9OOyB9Cisg
ICAgQkVHSU4oSU5JVElBTCk7CisgICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJp
bmcoeXl0ZXh0KTsgCisgICAgcmV0dXJuIEZJRUxEX1NFTEVDVElPTjsKK30KIDxGSUVMRFM+WyBc
dFx2XGZccl0ge30KIAogWyBcdFx2XG5cZlxyXSAgIHsgIH0KLTwqPjw8RU9GPj4geyAoJnBhcnNl
Q29udGV4dCktPkFmdGVyRU9GID0gdHJ1ZTsgeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJSRU5UX0JV
RkZFUik7IHl5dGVybWluYXRlKCk7fQotPCo+LiAgICB7IHBhcnNlQ29udGV4dC5pbmZvU2luay5p
bmZvIDw8ICJGTEVYOiBVbmtub3duIGNoYXIgIiA8PCB5eXRleHQgPDwgIlxuIjsKLSAgICAgICAg
ICByZXR1cm4gMDsgfQorPCo+PDxFT0Y+PiAgICAgIHsgY29udGV4dC0+QWZ0ZXJFT0YgPSB0cnVl
OyB5eXRlcm1pbmF0ZSgpOyB9Cis8Kj4uICAgICAgICAgICAgeyBjb250ZXh0LT53YXJuaW5nKHl5
bGluZW5vLCAiVW5rbm93biBjaGFyIiwgeXl0ZXh0LCAiIik7IHJldHVybiAwOyB9CiAKICUlCiAK
LQotLy9JbmNsdWRpbmcgUHJlLXByb2Nlc3Nvci4KIGV4dGVybiAiQyIgewotICAjaW5jbHVkZSAi
Y29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCIKLX0gCi0KLS8vCi0vLyBUaGUgWVlf
SU5QVVQgbWFjcm8ganVzdCBjYWxscyB0aGlzLiAgTWF5YmUgdGhpcyBjb3VsZCBiZSBqdXN0IHB1
dCBpbnRvCi0vLyB0aGUgbWFjcm8gZGlyZWN0bHkuCi0vLwotCi1pbnQgeXlfaW5wdXQoY2hhciog
YnVmLCBpbnQgbWF4X3NpemUpCi17Ci0gICAgaW50IGxlbjsKLQotICAgIGlmICgobGVuID0geXls
ZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpKSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAo
bGVuID49IG1heF9zaXplKSAKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBidWZmZXIg
b3ZlcmZsb3csIGNhbid0IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ugc2Nhbm5lciB1c2VzIFJFSkVD
VCIgKTsKLQotICAgIGJ1ZltsZW5dID0gJyAnOwotCXJldHVybiBsZW4rMTsKLX0KLQotCi0vLwot
Ly8gUGFyc2UgYW4gYXJyYXkgb2Ygc3RyaW5ncyB1c2luZyB5eXBhcnNlLiAgV2Ugc2V0IHVwIGds
b2JhbHMgdXNlZCBieQotLy8geXl3cmFwLgotLy8KLS8vIFJldHVybnMgMCBmb3Igc3VjY2Vzcywg
YXMgcGVyIHl5cGFyc2UoKS4KLS8vCi1pbnQgUGFQYXJzZVN0cmluZ3MoY2hhciogYXJndltdLCBp
bnQgc3RyTGVuW10sIGludCBhcmdjLCBUUGFyc2VDb250ZXh0JiBwYXJzZUNvbnRleHRMb2NhbCkK
LXsKLSAgICBpbnQgYXJndjBsZW47Ci0gICAgCi0gICAgU2NhbkZyb21TdHJpbmcoYXJndlswXSk7
IAotICAgIAotICAgIC8vU3RvcmluZyB0aGUgQ3VycmVudCBDb21waWxlciBQYXJzZSBjb250ZXh0
IGludG8gdGhlIGNwcCBzdHJ1Y3R1cmUuCi0JY3BwLT5wQyA9ICh2b2lkKikmcGFyc2VDb250ZXh0
TG9jYWw7Ci0JCi0JaWYgKCFhcmd2IHx8IGFyZ2MgPT0gMCkKLSAgICAgICAgcmV0dXJuIDE7Ci0g
ICAgCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdjOyArK2kpIHsKLSAgICAgICAgaWYgKCFh
cmd2W2ldKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHRMb2NhbC5lcnJvcigwLCAiTnVsbCBz
aGFkZXIgc291cmNlIHN0cmluZyIsICIiLCAiIik7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHRM
b2NhbC5yZWNvdmVyKCk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0K
LSAgICAKLSAgICBpZiAoIXN0ckxlbikgewotICAgICAgICBhcmd2MGxlbiA9IChpbnQpIHN0cmxl
bihhcmd2WzBdKTsKLSAgICAgICAgc3RyTGVuICAgPSAmYXJndjBsZW47Ci0gICAgfQotICAgIHl5
cmVzdGFydCgwKTsKLSAgICAoJnBhcnNlQ29udGV4dExvY2FsKS0+QWZ0ZXJFT0YgPSBmYWxzZTsK
LSAgICBjcHAtPlBhV2hpY2hTdHIgPSAwOwotICAgIGNwcC0+UGFBcmd2ICAgICA9IGFyZ3Y7Ci0g
ICAgY3BwLT5QYUFyZ2MgICAgID0gYXJnYzsKLSAgICBjcHAtPlBhU3RyTGVuICAgPSBzdHJMZW47
Ci0gICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAwOwotICAgIHl5bGluZW5vICAgPSAxOwot
ICAgCi0gICAgaWYgKCpjcHAtPlBhU3RyTGVuID49IDApIHsgICAgCi0gICAgICAgIGludCByZXQg
PSB5eXBhcnNlKCh2b2lkKikoJnBhcnNlQ29udGV4dExvY2FsKSk7Ci0gICAgICAgIGlmIChyZXQg
fHwgY3BwLT5Db21waWxlRXJyb3IgPT0gMSB8fCBwYXJzZUNvbnRleHRMb2NhbC5yZWNvdmVyZWRG
cm9tRXJyb3IgfHwgcGFyc2VDb250ZXh0TG9jYWwubnVtRXJyb3JzID4gMCkKLSAgICAgICAgICAg
ICByZXR1cm4gMTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0K
LSAgICBlbHNlCi0gICAgICAgIHJldHVybiAwOwotfQotCi12b2lkIHl5ZXJyb3IoY29uc3QgY2hh
ciAqcykgCi17Ci0gICAgaWYgKCgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5BZnRlckVPRikg
ewotICAgICAgICBpZiAoY3BwLT50b2tlbnNCZWZvcmVFT0YgPT0gMSkgewotICAgICAgICAgICAg
R2xvYmFsUGFyc2VDb250ZXh0LT5lcnJvcih5eWxpbmVubywgInN5bnRheCBlcnJvciIsICJwcmUt
bWF0dXJlIEVPRiIsIHMsICIiKTsKLSAgICAgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR2xvYmFsUGFyc2VDb250
ZXh0LT5lcnJvcih5eWxpbmVubywgInN5bnRheCBlcnJvciIsIHl5dGV4dCwgcywgIiIpOwotICAg
ICAgICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICB9ICAgICAgICAgICAgCi19
CisvLyBQcmVwcm9jZXNzb3IgaW50ZXJmYWNlLgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9wcmVwcm9jZXNzLmgiCiAKLXZvaWQgUGFSZXNlcnZlZFdvcmQoKQotewotICAgIEdsb2Jh
bFBhcnNlQ29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJSZXNlcnZlZCB3b3JkLiIsIHl5dGV4dCwg
IiIsICIiKTsKLSAgICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLX0KLQotaW50IFBh
SWRlbnRPclR5cGUoVFN0cmluZyYgaWQsIFRQYXJzZUNvbnRleHQmIHBhcnNlQ29udGV4dExvY2Fs
LCBUU3ltYm9sKiYgc3ltYm9sKQotewotICAgIHN5bWJvbCA9IHBhcnNlQ29udGV4dExvY2FsLnN5
bWJvbFRhYmxlLmZpbmQoaWQpOwotICAgIGlmIChwYXJzZUNvbnRleHRMb2NhbC5sZXhBZnRlclR5
cGUgPT0gZmFsc2UgJiYgc3ltYm9sICYmIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0gICAgICAg
IFRWYXJpYWJsZSogdmFyaWFibGUgPSBzdGF0aWNfY2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOwot
ICAgICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUoKSkgewotICAgICAgICAgICAgcGFyc2VD
b250ZXh0TG9jYWwubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsKLSAgICAgICAgICAgIHJldHVybiBUWVBF
X05BTUU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIElERU5USUZJRVI7Ci19
Ci0KLWludCBQYVBhcnNlQ29tbWVudChpbnQgJmxpbmVubywgVFBhcnNlQ29udGV4dCYgcGFyc2VD
b250ZXh0TG9jYWwpCi17Ci0gICAgaW50IHRyYW5zaXRpb25GbGFnID0gMDsKLSAgICBpbnQgbmV4
dENoYXI7Ci0gICAgCi0gICAgd2hpbGUgKHRyYW5zaXRpb25GbGFnICE9IDIpIHsKLSAgICAgICAg
bmV4dENoYXIgPSB5eWlucHV0KCk7Ci0gICAgICAgIGlmIChuZXh0Q2hhciA9PSAnXG4nKQotICAg
ICAgICAgICAgIGxpbmVubysrOwotICAgICAgICBzd2l0Y2ggKG5leHRDaGFyKSB7Ci0gICAgICAg
IGNhc2UgJyonIDoKLSAgICAgICAgICAgIHRyYW5zaXRpb25GbGFnID0gMTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlICcvJyA6ICAvKiBpZiBzdGFyIGlzIHRoZSBwcmV2aW91cyBj
aGFyYWN0ZXIsIHRoZW4gaXQgaXMgdGhlIGVuZCBvZiBjb21tZW50ICovCi0gICAgICAgICAgICBp
ZiAodHJhbnNpdGlvbkZsYWcgPT0gMSkgewotICAgICAgICAgICAgICAgIHJldHVybiAxIDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPRiA6Ci0gICAg
ICAgICAgICAvKiBSYWlzZSBlcnJvciBtZXNzYWdlIGhlcmUgKi8KLSAgICAgICAgICAgIHBhcnNl
Q29udGV4dExvY2FsLmVycm9yKHl5bGluZW5vLCAiRW5kIG9mIHNoYWRlciBmb3VuZCBiZWZvcmUg
ZW5kIG9mIGNvbW1lbnQuIiwgIiIsICIiLCAiIik7Ci0gICAgICAgICAgICBHbG9iYWxQYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIHJldHVybiBZWV9OVUxMOyAKLSAgICAgICAg
ZGVmYXVsdCA6ICAvKiBBbnkgb3RoZXIgY2hhcmFjdGVyIHdpbGwgYmUgYSBwYXJ0IG9mIHRoZSBj
b21tZW50ICovCi0gICAgICAgICAgICB0cmFuc2l0aW9uRmxhZyA9IDA7Ci0gICAgICAgIH0KLSAg
ICB9Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLWV4dGVybiAiQyIgeworI2RlZmluZSBTRVRVUF9DT05U
RVhUKHBwKSBcCisgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCA9IChUUGFyc2VDb250ZXh0Kikg
cHAtPnBDOyBcCisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kikg
Y29udGV4dC0+c2Nhbm5lcjsKIAorLy8gUHJlcHJvY2Vzc29yIGNhbGxiYWNrcy4KIHZvaWQgQ1BQ
RGVidWdMb2dNc2coY29uc3QgY2hhciAqbXNnKQogewotICAgICgoVFBhcnNlQ29udGV4dCAqKWNw
cC0+cEMpLT5pbmZvU2luay5kZWJ1Zy5tZXNzYWdlKEVQcmVmaXhOb25lLCBtc2cpOworICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKKyAgICBjb250ZXh0LT5pbmZvU2luay5kZWJ1Zy5tZXNzYWdlKEVQ
cmVmaXhOb25lLCBtc2cpOwogfQogCiB2b2lkIENQUFdhcm5pbmdUb0luZm9Mb2coY29uc3QgY2hh
ciAqbXNnKQogewotICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5pbmZvU2luay5pbmZv
Lm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIG1zZywgeXlsaW5lbm8pOyAKKyAgICBTRVRVUF9DT05U
RVhUKGNwcCk7CisgICAgY29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAiIiwgIiIpOwog
fQogCiB2b2lkIENQUFNoSW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCiB7Ci0gICAgKChUUGFy
c2VDb250ZXh0ICopY3BwLT5wQyktPmVycm9yKHl5bGluZW5vLCIiLCAiIixtc2csIiIpOwotICAg
IEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsK
KyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwgIiIpOworICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKIH0KIAogdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICptc2cpCiB7Ci0g
ICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmVycm9yKHl5bGluZW5vLCJzeW50YXggZXJy
b3IiLCAiIixtc2csIiIpOwotICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
IFNFVFVQX0NPTlRFWFQoY3BwKTsKKyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAi
IiwgIiIpOworICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIH0KIAogdm9pZCBTZXRMaW5lTnVtYmVy
KGludCBsaW5lKQogewotICAgIHl5bGluZW5vICY9IH5Tb3VyY2VMb2NMaW5lTWFzazsKLSAgICB5
eWxpbmVubyB8PSBsaW5lOworICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKKyAgICBpbnQgc3RyaW5n
ID0gMDsKKyAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZzdHJpbmcsIE5VTEwpOworICAg
IHl5bGluZW5vID0gRW5jb2RlU291cmNlTG9jKHN0cmluZywgbGluZSk7CiB9CiAKIHZvaWQgU2V0
U3RyaW5nTnVtYmVyKGludCBzdHJpbmcpCiB7Ci0gICAgeXlsaW5lbm8gPSAoc3RyaW5nIDw8IFNv
dXJjZUxvY1N0cmluZ1NoaWZ0KSB8ICh5eWxpbmVubyAmIFNvdXJjZUxvY0xpbmVNYXNrKTsKKyAg
ICBTRVRVUF9DT05URVhUKGNwcCk7CisgICAgaW50IGxpbmUgPSAwOworICAgIERlY29kZVNvdXJj
ZUxvYyh5eWxpbmVubywgTlVMTCwgJmxpbmUpOworICAgIHl5bGluZW5vID0gRW5jb2RlU291cmNl
TG9jKHN0cmluZywgbGluZSk7CiB9CiAKLWludCBHZXRTdHJpbmdOdW1iZXIodm9pZCkKK2ludCBH
ZXRTdHJpbmdOdW1iZXIoKQogewotICAgIHJldHVybiB5eWxpbmVubyA+PiAxNjsKKyAgICBTRVRV
UF9DT05URVhUKGNwcCk7CisgICAgaW50IHN0cmluZyA9IDA7CisgICAgRGVjb2RlU291cmNlTG9j
KHl5bGluZW5vLCAmc3RyaW5nLCBOVUxMKTsKKyAgICByZXR1cm4gc3RyaW5nOwogfQogCi1pbnQg
R2V0TGluZU51bWJlcih2b2lkKQoraW50IEdldExpbmVOdW1iZXIoKQogewotICAgIHJldHVybiB5
eWxpbmVubyAmIFNvdXJjZUxvY0xpbmVNYXNrOworICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKKyAg
ICBpbnQgbGluZSA9IDA7CisgICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCBOVUxMLCAmbGlu
ZSk7CisgICAgcmV0dXJuIGxpbmU7CiB9CiAKLXZvaWQgSW5jTGluZU51bWJlcih2b2lkKQordm9p
ZCBJbmNMaW5lTnVtYmVyKCkKIHsKLSAgICBpZiAoKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1h
c2spIDw9IFNvdXJjZUxvY0xpbmVNYXNrKQotICAgICAgICArK3l5bGluZW5vOworICAgIFNFVFVQ
X0NPTlRFWFQoY3BwKTsKKyAgICBpbnQgc3RyaW5nID0gMCwgbGluZSA9IDA7CisgICAgRGVjb2Rl
U291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCAmbGluZSk7CisgICAgeXlsaW5lbm8gPSBFbmNv
ZGVTb3VyY2VMb2Moc3RyaW5nLCArK2xpbmUpOwogfQogCi12b2lkIERlY0xpbmVOdW1iZXIodm9p
ZCkKK3ZvaWQgRGVjTGluZU51bWJlcigpCiB7Ci0gICAgaWYgKCh5eWxpbmVubyAmIFNvdXJjZUxv
Y0xpbmVNYXNrKSA+IDApCi0gICAgICAgIC0teXlsaW5lbm87CisgICAgU0VUVVBfQ09OVEVYVChj
cHApOworICAgIGludCBzdHJpbmcgPSAwLCBsaW5lID0gMDsKKyAgICBEZWNvZGVTb3VyY2VMb2Mo
eXlsaW5lbm8sICZzdHJpbmcsICZsaW5lKTsKKyAgICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxv
YyhzdHJpbmcsIC0tbGluZSk7CiB9CiAKIHZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0
b2tlbnMsIGludCBudW1Ub2tlbnMpCi17ICAgIAoreworICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsK
ICAgICBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJvcHRpbWl6ZSIpKSB7CiAgICAgICAgIGlmIChu
dW1Ub2tlbnMgIT0gNCkgewogICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJvcHRpbWl6ZSBw
cmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOwpAQCAtNDUyLDkgKzM0NCw5IEBAIHZvaWQgSGFu
ZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGkKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9uIikpCi0gICAgICAgICAgICAoKFRQ
YXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IHRydWU7Cisg
ICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gdHJ1ZTsKICAgICAg
ICAgZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAgICAgICAgICAgICgoVFBh
cnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gZmFsc2U7Cisg
ICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gZmFsc2U7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9uXCIgb3IgXCJvZmZc
IiBleHBlY3RlZCBhZnRlciAnKCcgZm9yICdvcHRpbWl6ZScgcHJhZ21hIik7CiAgICAgICAgICAg
ICByZXR1cm47CkBAIC00NzYsOSArMzY4LDkgQEAgdm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hh
ciAqKnRva2VucywgaQogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgaWYgKCFzdHJj
bXAodG9rZW5zWzJdLCAib24iKSkKLSAgICAgICAgICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+
cEMpLT5jb250ZXh0UHJhZ21hLmRlYnVnID0gdHJ1ZTsKKyAgICAgICAgICAgIGNvbnRleHQtPmNv
bnRleHRQcmFnbWEuZGVidWcgPSB0cnVlOwogICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vu
c1syXSwgIm9mZiIpKQotICAgICAgICAgICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNv
bnRleHRQcmFnbWEuZGVidWcgPSBmYWxzZTsKKyAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQ
cmFnbWEuZGVidWcgPSBmYWxzZTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBDUFBTaElu
Zm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3IgJ2RlYnVn
JyBwcmFnbWEiKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQ4OSw3ICszODEsNiBAQCB2b2lk
IEhhbmRsZVByYWdtYShjb25zdCBjaGFyICoqdG9rZW5zLCBpCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotCiAjaWZkZWYgUFJBR01BX1RBQkxFCiAgICAgICAg
IC8vCiAgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHByYWdtYQpAQCAtNTI0LDIx
ICs0MTUsMjQgQEAgdm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hhciAqKnRva2VucywgaQogCiB2
b2lkIFN0b3JlU3RyKGNoYXIgKnN0cmluZykKIHsKKyAgICBTRVRVUF9DT05URVhUKGNwcCk7CiAg
ICAgVFN0cmluZyBzdHJTcmM7CiAgICAgc3RyU3JjID0gVFN0cmluZyhzdHJpbmcpOwogCi0gICAg
KChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPkhhc2hFcnJNc2cgPSAoKFRQYXJzZUNvbnRleHQg
KiljcHAtPnBDKS0+SGFzaEVyck1zZyArICIgIiArIHN0clNyYzsKKyAgICBjb250ZXh0LT5IYXNo
RXJyTXNnID0gY29udGV4dC0+SGFzaEVyck1zZyArICIgIiArIHN0clNyYzsKIH0KIAogY29uc3Qg
Y2hhciogR2V0U3RyZnJvbVRTdHIodm9pZCkKIHsKLSAgICBjcHAtPkVyck1zZyA9ICgoKFRQYXJz
ZUNvbnRleHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZykuY19zdHIoKTsKKyAgICBTRVRVUF9DT05U
RVhUKGNwcCk7CisgICAgY3BwLT5FcnJNc2cgPSBjb250ZXh0LT5IYXNoRXJyTXNnLmNfc3RyKCk7
CiAgICAgcmV0dXJuIGNwcC0+RXJyTXNnOwogfQogCiB2b2lkIFJlc2V0VFN0cmluZyh2b2lkKQog
ewotICAgICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5IYXNoRXJyTXNnID0gIiI7CisgICAg
U0VUVVBfQ09OVEVYVChjcHApOworICAgIGNvbnRleHQtPkhhc2hFcnJNc2cgPSAiIjsKIH0KIAog
VEJlaGF2aW9yIEdldEJlaGF2aW9yKGNvbnN0IGNoYXIqIGJlaGF2aW9yKQpAQCAtNTU3LDggKzQ1
MSw5IEBAIFRCZWhhdmlvciBHZXRCZWhhdmlvcihjb25zdCBjaGFyKiBiZWhhdmkKICAgICB9ICAg
ICAgICAKIH0KIAotdm9pZCAgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hhciogZXh0
TmFtZSwgY29uc3QgY2hhciogYmVoYXZpb3IpCit2b2lkIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9y
KGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQogeworICAgIFNFVFVQ
X0NPTlRFWFQoY3BwKTsKICAgICBUQmVoYXZpb3IgYmVoYXZpb3JWYWwgPSBHZXRCZWhhdmlvcihi
ZWhhdmlvcik7CiAgICAgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+OjogaXRlcmF0b3IgaXRlcjsK
ICAgICBUU3RyaW5nIG1zZzsKQEAgLTU2OSwxMiArNDY0LDEyIEBAIHZvaWQgIHVwZGF0ZUV4dGVu
c2lvbkJlaGF2aW9yKGNvbnN0IGNoYXIKICAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiZXh0
ZW5zaW9uICdhbGwnIGNhbm5vdCBoYXZlICdyZXF1aXJlJyBvciAnZW5hYmxlJyBiZWhhdmlvciIp
OyAgCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBm
b3IgKGl0ZXIgPSAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmV4dGVuc2lvbkJlaGF2aW9y
LmJlZ2luKCk7IGl0ZXIgIT0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmV4dGVuc2lvbkJl
aGF2aW9yLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICBmb3IgKGl0ZXIgPSBjb250ZXh0LT5l
eHRlbnNpb25CZWhhdmlvci5iZWdpbigpOyBpdGVyICE9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2
aW9yLmVuZCgpOyArK2l0ZXIpCiAgICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gYmVoYXZp
b3JWYWw7CiAgICAgICAgIH0gICAgICAgIAogICAgIH0gZWxzZSB7Ci0gICAgICAgIGl0ZXIgPSAo
KFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuZmluZChUU3RyaW5n
KGV4dE5hbWUpKTsKLSAgICAgICAgaWYgKGl0ZXIgPT0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5w
QyktPmV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpKSB7CisgICAgICAgIGl0ZXIgPSBjb250ZXh0LT5l
eHRlbnNpb25CZWhhdmlvci5maW5kKFRTdHJpbmcoZXh0TmFtZSkpOworICAgICAgICBpZiAoaXRl
ciA9PSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5lbmQoKSkgewogICAgICAgICAgICAgc3dp
dGNoIChiZWhhdmlvclZhbCkgewogICAgICAgICAgICAgY2FzZSBFQmhSZXF1aXJlOgogICAgICAg
ICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygoVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5h
bWUgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIikuY19zdHIoKSk7ICAKQEAgLTU4Myw3ICs0NzgsNyBA
QCB2b2lkICB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyCiAgICAgICAgICAgICBj
YXNlIEVCaFdhcm46CiAgICAgICAgICAgICBjYXNlIEVCaERpc2FibGU6CiAgICAgICAgICAgICAg
ICAgbXNnID0gVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBub3Qgc3Vw
cG9ydGVkIjsKLSAgICAgICAgICAgICAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+aW5m
b1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBtc2cuY19zdHIoKSwgeXlsaW5lbm8p
OyAKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5pbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZp
eFdhcm5pbmcsIG1zZy5jX3N0cigpLCB5eWxpbmVubyk7IAogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTkxLDEwICs0ODYsODUg
QEAgdm9pZCAgdXBkYXRlRXh0ZW5zaW9uQmVoYXZpb3IoY29uc3QgY2hhcgogICAgICAgICAgICAg
aXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7CiAgICAgfQogfQotICAgICAgICAKIH0gIC8vIGV4
dGVybiAiQyIKIAotdm9pZCBzZXRJbml0aWFsU3RhdGUoKQotewotICAgIHl5X3N0YXJ0ID0gMTsK
K2ludCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nh
bm5lcikgeworICAgIGludCBsZW47CisKKyAgICBpZiAoKGxlbiA9IHl5bGV4X0NQUChidWYsIG1h
eF9zaXplKSkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGxlbiA+PSBtYXhfc2l6
ZSkgCisgICAgICAgIFlZX0ZBVEFMX0VSUk9SKCJpbnB1dCBidWZmZXIgb3ZlcmZsb3csIGNhbid0
IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ugc2Nhbm5lciB1c2VzIFJFSkVDVCIpOworCisgICAgYnVm
W2xlbl0gPSAnICc7CisgICAgcmV0dXJuIGxlbisxOworfQorCitpbnQgY2hlY2tfdHlwZSh5eXNj
YW5fdCB5eXNjYW5uZXIpIHsKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKSB5eXNjYW5uZXI7CisgICAgCisgICAgaW50IHRva2VuID0gSURFTlRJRklFUjsKKyAg
ICBUU3ltYm9sKiBzeW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4dCk7Cisg
ICAgaWYgKHl5ZXh0cmEtPmxleEFmdGVyVHlwZSA9PSBmYWxzZSAmJiBzeW1ib2wgJiYgc3ltYm9s
LT5pc1ZhcmlhYmxlKCkpIHsKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19j
YXN0PFRWYXJpYWJsZSo+KHN5bWJvbCk7CisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlw
ZSgpKSB7CisgICAgICAgICAgICB5eWV4dHJhLT5sZXhBZnRlclR5cGUgPSB0cnVlOworICAgICAg
ICAgICAgdG9rZW4gPSBUWVBFX05BTUU7CisgICAgICAgIH0KKyAgICB9CisgICAgeXlsdmFsLT5s
ZXguc3ltYm9sID0gc3ltYm9sOworICAgIHJldHVybiB0b2tlbjsKK30KKworaW50IHJlc2VydmVk
X3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190KikgeXlzY2FubmVyOworCisgICAgeXlleHRyYS0+ZXJyb3IoeXlsaW5l
bm8sICJJbGxlZ2FsIHVzZSBvZiByZXNlcnZlZCB3b3JkIiwgeXl0ZXh0LCAiIik7CisgICAgeXll
eHRyYS0+cmVjb3ZlcigpOworICAgIHJldHVybiAwOwogfQorCit2b2lkIHl5ZXJyb3IoVFBhcnNl
Q29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7CisgICAgc3RydWN0IHl5Z3V0
c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlm
IChjb250ZXh0LT5BZnRlckVPRikgeworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywg
cmVhc29uLCAidW5leHBlY3RlZCBFT0YiLCAiIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29u
dGV4dC0+ZXJyb3IoeXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0LCAiIik7CisgICAgfQorICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKK30KKworaW50IGdsc2xhbmdfaW5pdGlhbGl6ZShUUGFyc2VDb250
ZXh0KiBjb250ZXh0KSB7CisgICAgeXlzY2FuX3Qgc2Nhbm5lciA9IE5VTEw7CisgICAgaWYgKHl5
bGV4X2luaXRfZXh0cmEoY29udGV4dCwgJnNjYW5uZXIpKQorICAgICAgICByZXR1cm4gMTsKKwor
ICAgIGNvbnRleHQtPnNjYW5uZXIgPSBzY2FubmVyOworICAgIHJldHVybiAwOworfQorCitpbnQg
Z2xzbGFuZ19maW5hbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CisgICAgeXlzY2FuX3Qg
c2Nhbm5lciA9IGNvbnRleHQtPnNjYW5uZXI7CisgICAgaWYgKHNjYW5uZXIgPT0gTlVMTCkgcmV0
dXJuIDA7CisgICAgCisgICAgY29udGV4dC0+c2Nhbm5lciA9IE5VTEw7CisgICAgcmV0dXJuIHl5
bGV4X2Rlc3Ryb3koc2Nhbm5lcik7Cit9CisKK3ZvaWQgZ2xzbGFuZ19zY2FuKGludCBjb3VudCwg
Y29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10sIGNvbnN0IGludCBsZW5ndGhbXSwKKyAgICAgICAg
ICAgICAgICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKKyAgICB5eXJlc3RhcnQoTlVMTCwg
Y29udGV4dC0+c2Nhbm5lcik7CisgICAgeXlzZXRfbGluZW5vKEVuY29kZVNvdXJjZUxvYygwLCAx
KSwgY29udGV4dC0+c2Nhbm5lcik7CisgICAgY29udGV4dC0+QWZ0ZXJFT0YgPSBmYWxzZTsKKyAg
ICAKKyAgICAvLyBJbml0IHByZXByb2Nlc3Nvci4KKyAgICBjcHAtPnBDID0gY29udGV4dDsKKyAg
ICBjcHAtPlBhV2hpY2hTdHIgPSAwOworICAgIGNwcC0+UGFBcmd2ICAgICA9IHN0cmluZzsKKyAg
ICBjcHAtPlBhQXJnYyAgICAgPSBjb3VudDsKKyAgICBjcHAtPlBhU3RyTGVuICAgPSBsZW5ndGg7
CisgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAwOworICAgIFNjYW5Gcm9tU3RyaW5nKHN0
cmluZ1swXSk7Cit9CisKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9nbHNsYW5nLnkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2dsc2xhbmcueQkocmV2aXNpb24gNzU4MDEpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy55CSh3b3JraW5nIGNvcHkpCkBAIC0xLDg5ICsxLDM4
IEBACisvKgogLy8KIC8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCiAvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KIAotLyoqCi0gKiBUaGlzIGlzIGJpc29uIGdyYW1t
YXIgYW5kIHByb2R1Y3Rpb24gY29kZSBmb3IgcGFyc2luZyB0aGUgT3BlbkdMIDIuMCBzaGFkaW5n
Ci0gKiBsYW5ndWFnZXMuCi0gKi8KLSV7Ci0KLS8qIEJhc2VkIG9uOgotQU5TSSBDIFlhY2MgZ3Jh
bW1hcgorVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBZYWNjIGdyYW1tYXIgZm9yIEdMU0wgRVMuCitC
YXNlZCBvbiBBTlNJIEMgWWFjYyBncmFtbWFyOgoraHR0cDovL3d3dy5seXNhdG9yLmxpdS5zZS9j
L0FOU0ktQy1ncmFtbWFyLXkuaHRtbAogCi1JbiAxOTg1LCBKZWZmIExlZSBwdWJsaXNoZWQgaGlz
IFlhY2MgZ3JhbW1hciAod2hpY2ggaXMgYWNjb21wYW5pZWQgYnkgYQotbWF0Y2hpbmcgTGV4IHNw
ZWNpZmljYXRpb24pIGZvciB0aGUgQXByaWwgMzAsIDE5ODUgZHJhZnQgdmVyc2lvbiBvZiB0aGUK
LUFOU0kgQyBzdGFuZGFyZC4gIFRvbSBTdG9ja2Zpc2NoIHJlcG9zdGVkIGl0IHRvIG5ldC5zb3Vy
Y2VzIGluIDE5ODc7IHRoYXQKLW9yaWdpbmFsLCBhcyBtZW50aW9uZWQgaW4gdGhlIGFuc3dlciB0
byBxdWVzdGlvbiAxNy4yNSBvZiB0aGUgY29tcC5sYW5nLmMKLUZBUSwgY2FuIGJlIGZ0cCdlZCBm
cm9tIGZ0cC51dS5uZXQsIGZpbGUgdXNlbmV0L25ldC5zb3VyY2VzL2Fuc2kuYy5ncmFtbWFyLlou
CitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVEIFRPIFJVTiBnZW5lcmF0ZV9n
bHNsYW5nX3BhcnNlci5zaCwKK1dISUNIIEdFTkVSQVRFUyBUSEUgR0xTTCBFUyBQQVJTRVIgKGds
c2xhbmdfdGFiLmNwcCBBTkQgZ2xzbGFuZ190YWIuaCkuCisqLwogCi1JIGludGVuZCB0byBrZWVw
IHRoaXMgdmVyc2lvbiBhcyBjbG9zZSB0byB0aGUgY3VycmVudCBDIFN0YW5kYXJkIGdyYW1tYXIg
YXMKLXBvc3NpYmxlOyBwbGVhc2UgbGV0IG1lIGtub3cgaWYgeW91IGRpc2NvdmVyIGRpc2NyZXBh
bmNpZXMuCisleworLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9q
ZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2Ug
Y29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBm
b3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KIAotSnV0dGEgRGVnZW5lciwgMTk5NQotKi8K
Ky8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9nbHNsYW5nX3BhcnNl
ci5zaC4gRE8gTk9UIEVESVQhCiAKICNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJsZS5oIgog
I2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCiAjaW5jbHVkZSAiR0xTTEFORy9TaGFk
ZXJMYW5nLmgiCiAKLSNkZWZpbmUgWVlQQVJTRV9QQVJBTSBwYXJzZUNvbnRleHRMb2NhbAotLyoK
LVRPRE8oYWxva3ApOiBZWVBBUlNFX1BBUkFNX0RFQ0wgaXMgb25seSBoZXJlIHRvIHN1cHBvcnQg
b2xkIGJpc29uLmV4ZSBpbgotY29tcGlsZXIvdG9vbHMuIFJlbW92ZSBpdCB3aGVuIHdlIGNhbiBl
eGNsdXNpdmVseSB1c2UgdGhlIG5ld2VyIHZlcnNpb24uCi0qLwotI2RlZmluZSBZWVBBUlNFX1BB
UkFNX0RFQ0wgdm9pZCoKLSNkZWZpbmUgcGFyc2VDb250ZXh0ICgoVFBhcnNlQ29udGV4dCopKHBh
cnNlQ29udGV4dExvY2FsKSkKLSNkZWZpbmUgWVlMRVhfUEFSQU0gcGFyc2VDb250ZXh0TG9jYWwK
LSNkZWZpbmUgWVlfREVDTCBpbnQgeXlsZXgoWVlTVFlQRSogcHl5bHZhbCwgdm9pZCogcGFyc2VD
b250ZXh0TG9jYWwpCi1leHRlcm4gdm9pZCB5eWVycm9yKGNvbnN0IGNoYXIqKTsKLQotI2RlZmlu
ZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNo
TGFuZ0ZyYWdtZW50ICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHBh
cnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1ZlcnRleCkgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0
ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgIFwKLSAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi19Ci0KLSNkZWZpbmUgVkVSVEVYX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChwYXJzZUNvbnRleHQt
Pmxhbmd1YWdlICE9IEVTaExhbmdWZXJ0ZXgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRl
eCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgICBcCi0gICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0j
ZGVmaW5lIEZSQUdfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSAh
PSBFU2hMYW5nRnJhZ21lbnQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgcGFyc2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJz
IG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgXAotICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotI2RlZmluZSBQQUNL
X09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1Bh
Y2spIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHBhcnNlQ29u
dGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gcGFjayBzaGFkZXJzIG9ubHkgIiwgUywgIiIs
ICIiKTsgICAgICAgICAgICAgIFwKLSAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19CisjZGVmaW5lIFlZTEVYX1BBUkFNIGNvbnRl
eHQtPnNjYW5uZXIKKyV9CiAKLSNkZWZpbmUgVU5QQUNLX09OTFkoUywgTCkgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChwYXJz
ZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdVbnBhY2spIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVk
IGluIHVucGFjayBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgICBcCi0gICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAotfQorJWV4cGVjdCAxIC8qIE9uZSBzaGlmdCByZWR1Y2UgY29uZmxpY3QgYmVjYXVzZSBvZiBp
ZiB8IGVsc2UgKi8KKyVwdXJlLXBhcnNlcgorJXBhcnNlLXBhcmFtIHtUUGFyc2VDb250ZXh0KiBj
b250ZXh0fQogCi0jZGVmaW5lIFBBQ0tfVU5QQUNLX09OTFkoUywgTCkgeyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAocGFyc2VDb250ZXh0
LT5sYW5ndWFnZSAhPSBFU2hMYW5nVW5wYWNrICYmICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgcGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nUGFjaykgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcGFyc2VDb250ZXh0LT5l
cnJvcihMLCAiIHN1cHBvcnRlZCBpbiBwYWNrL3VucGFjayBzaGFkZXJzIG9ubHkgIiwgUywgIiIs
ICIiKTsgICAgICAgXAotICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
fSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLX0KLSV9CiAldW5pb24gewogICAgIHN0cnVjdCB7CiAgICAg
ICAgIFRTb3VyY2VMb2MgbGluZTsKQEAgLTExNywxMSArNjYsMzIgQEAgZXh0ZXJuIHZvaWQgeXll
cnJvcihjb25zdCBjaGFyKik7CiB9CiAKICV7Ci0gICAgZXh0ZXJuIGludCB5eWxleChZWVNUWVBF
Kiwgdm9pZCopOworZXh0ZXJuIGludCB5eWxleChZWVNUWVBFKiB5eWx2YWxfcGFyYW0sIHZvaWQq
IHl5c2Nhbm5lcik7CitleHRlcm4gdm9pZCB5eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQs
IGNvbnN0IGNoYXIqIHJlYXNvbik7CisKKyNkZWZpbmUgRlJBR19WRVJUX09OTFkoUywgTCkgeyAg
XAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUiAmJiAg
XAorICAgICAgICBjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX1ZFUlRFWF9TSEFERVIpIHsgIFwK
KyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50
IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7ICBcCisgICAgfSAgXAorfQorCisjZGVmaW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgIFwKKyAg
ICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCisgICAg
ICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkg
IiwgUywgIiIsICIiKTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAgIH0g
IFwKK30KKworI2RlZmluZSBGUkFHX09OTFkoUywgTCkgeyAgXAorICAgIGlmIChjb250ZXh0LT5z
aGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUikgeyAgXAorICAgICAgICBjb250ZXh0LT5l
cnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIi
KTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwKK30KICV9CiAK
LSVwdXJlX3BhcnNlciAvKiBKdXN0IGluIGNhc2UgaXMgY2FsbGVkIGZyb20gbXVsdGlwbGUgdGhy
ZWFkcyAqLwotJWV4cGVjdCAxIC8qIE9uZSBzaGlmdCByZWR1Y2UgY29uZmxpY3QgYmVjYXVzZSBv
ZiBpZiB8IGVsc2UgKi8KICV0b2tlbiA8bGV4PiBJTlZBUklBTlQgSElHSF9QUkVDSVNJT04gTUVE
SVVNX1BSRUNJU0lPTiBMT1dfUFJFQ0lTSU9OIFBSRUNJU0lPTgogJXRva2VuIDxsZXg+IEFUVFJJ
QlVURSBDT05TVF9RVUFMIEJPT0xfVFlQRSBGTE9BVF9UWVBFIElOVF9UWVBFCiAldG9rZW4gPGxl
eD4gQlJFQUsgQ09OVElOVUUgRE8gRUxTRSBGT1IgSUYgRElTQ0FSRCBSRVRVUk4KQEAgLTE4NSwx
NyArMTU1LDE3IEBAIHZhcmlhYmxlX2lkZW50aWZpZXIKICAgICAgICAgY29uc3QgVFN5bWJvbCog
c3ltYm9sID0gJDEuc3ltYm9sOwogICAgICAgICBjb25zdCBUVmFyaWFibGUqIHZhcmlhYmxlOwog
ICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJy
b3IoJDEubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICQxLnN0cmluZy0+Y19zdHIoKSwg
IiIpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgJDEuc3RyaW5n
LT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
ICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAgICAgICAgVFZh
cmlhYmxlKiBmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQxLnN0cmluZywgdHlwZSk7Ci0g
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxl
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFrZVZhcmlhYmxl
KTsKICAgICAgICAgICAgIHZhcmlhYmxlID0gZmFrZVZhcmlhYmxlOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5IGJlIGEgdmFyaWFibGUg
dHlwZSBzeW1ib2wKICAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJsZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAidmFyaWFibGUgZXhw
ZWN0ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCksICIiKTsKLSAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5l
LCAidmFyaWFibGUgZXhwZWN0ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICB2
YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CiAgICAgICAg
IH0KQEAgLTIwNiw5ICsxNzYsOSBAQCB2YXJpYWJsZV9pZGVudGlmaWVyCiAgICAgICAgIGlmICh2
YXJpYWJsZS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0ICkgewogICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiogY29uc3RBcnJheSA9IHZhcmlhYmxlLT5nZXRDb25zdFBvaW50
ZXIoKTsKICAgICAgICAgICAgIFRUeXBlIHQodmFyaWFibGUtPmdldFR5cGUoKSk7Ci0gICAgICAg
ICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29u
c3RBcnJheSwgdCwgJDEubGluZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIHQsICQxLmxpbmUpOwogICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3lt
Ym9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAorICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0
TmFtZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAkMS5saW5lKTsKICAgICB9CkBAIC0yMjQsMjIgKzE5
NCwyMiBAQCBwcmltYXJ5X2V4cHJlc3Npb24KICAgICAgICAgLy8gY2hlY2sgZm9yIG92ZXJmbG93
IGZvciBjb25zdGFudHMKICAgICAgICAgLy8KICAgICAgICAgaWYgKGFicygkMS5pKSA+PSAoMSA8
PCAxNikpIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgIiBpbnRl
Z2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIsICIiKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgIiBpbnRl
Z2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgkMS5p
KTsKLSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVu
aW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQx
LmxpbmUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVu
aW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQx
LmxpbmUpOwogICAgIH0KICAgICB8IEZMT0FUQ09OU1RBTlQgewogICAgICAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgIHVuaW9uQXJy
YXktPnNldEZDb25zdCgkMS5mKTsKLSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRl
ZmluZWQsIEV2cUNvbnN0KSwgJDEubGluZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCAkMS5saW5lKTsKICAgICB9CiAgICAgfCBCT09MQ09OU1RBTlQg
ewogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07CiAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdCgkMS5iKTsKLSAgICAgICAgJCQgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRU
eXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMS5saW5lKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBU
VHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDEubGluZSk7CiAgICAgfQog
ICAgIHwgTEVGVF9QQVJFTiBleHByZXNzaW9uIFJJR0hUX1BBUkVOIHsKICAgICAgICAgJCQgPSAk
MjsKQEAgLTI1Myw1NyArMjIzLDU3IEBAIHBvc3RmaXhfZXhwcmVzc2lvbgogICAgIHwgcG9zdGZp
eF9leHByZXNzaW9uIExFRlRfQlJBQ0tFVCBpbnRlZ2VyX2V4cHJlc3Npb24gUklHSFRfQlJBQ0tF
VCB7CiAgICAgICAgIGlmICghJDEtPmlzQXJyYXkoKSAmJiAhJDEtPmlzTWF0cml4KCkgJiYgISQx
LT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICBpZiAoJDEtPmdldEFzU3ltYm9sTm9kZSgpKQot
ICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdb
JyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFzU3lt
Ym9sTm9kZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwg
bWF0cml4LCBvciB2ZWN0b3IgIiwgJDEtPmdldEFzU3ltYm9sTm9kZSgpLT5nZXRTeW1ib2woKS5j
X3N0cigpLCAiIik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBt
YXRyaXgsIG9yIHZlY3RvciAiLCAiZXhwcmVzc2lvbiIsICIiKTsKLSAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxp
bmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9y
ICIsICJleHByZXNzaW9uIiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICB9CiAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2
cUNvbnN0ICYmICQzLT5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkgewogICAgICAgICAgICAg
aWYgKCQxLT5pc0FycmF5KCkpIHsgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgYXJyYXlzCi0gICAg
ICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0QXJyYXlOb2RlKCQzLT5nZXRB
c0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksICQx
LCAkMi5saW5lKTsKKyAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmFkZENvbnN0QXJyYXlO
b2RlKCQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0
SUNvbnN0KCksICQxLCAkMi5saW5lKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzVmVj
dG9yKCkpIHsgIC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvcnMKICAgICAgICAgICAgICAg
ICBUVmVjdG9yRmllbGRzIGZpZWxkczsKICAgICAgICAgICAgICAgICBmaWVsZHMubnVtID0gMTsK
ICAgICAgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9ICQzLT5nZXRBc0NvbnN0YW50VW5p
b24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCk7IC8vIG5lZWQgdG8gZG8g
aXQgdGhpcyB3YXkgYmVjYXVzZSB2Lnh5IHNlbmRzIGZpZWxkcyBpbnRlZ2VyIGFycmF5Ci0gICAg
ICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmFkZENvbnN0VmVjdG9yTm9kZShmaWVsZHMs
ICQxLCAkMi5saW5lKTsKKyAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmFkZENvbnN0VmVj
dG9yTm9kZShmaWVsZHMsICQxLCAkMi5saW5lKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoJDEt
PmlzTWF0cml4KCkpIHsgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgbWF0cmljZXMKLSAgICAgICAg
ICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RNYXRyaXhOb2RlKCQzLT5nZXRBc0Nv
bnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksICQxLCAk
Mi5saW5lKTsKKyAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmFkZENvbnN0TWF0cml4Tm9k
ZSgkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElD
b25zdCgpLCAkMSwgJDIubGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBpZiAoJDMtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CiAgICAgICAg
ICAgICAgICAgaWYgKCgkMS0+aXNWZWN0b3IoKSB8fCAkMS0+aXNNYXRyaXgoKSkgJiYgJDEtPmdl
dFR5cGUoKS5nZXROb21pbmFsU2l6ZSgpIDw9ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgJiYgISQxLT5pc0FycmF5KCkgKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwg
ImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5p
b24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOwotICAgICAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFu
Z2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCQxLT5p
c0FycmF5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdl
dEFycmF5U2l6ZSgpID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJDEt
PmdldFR5cGUoKS5nZXRNYXhBcnJheVNpemUoKSA8PSAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCkt
PmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2V0TWF4U2l6ZSgkMS0+Z2V0
QXNTeW1ib2xOb2RlKCksICQxLT5nZXRUeXBlUG9pbnRlcigpLCAkMy0+Z2V0QXNDb25zdGFudFVu
aW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpLCB0cnVlLCAkMi5saW5l
KSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlTZXRNYXhTaXplKCQxLT5nZXRBc1N5bWJvbE5vZGUoKSwgJDEtPmdldFR5cGVQb2ludGVyKCks
ICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNv
bnN0KCksIHRydWUsICQyLmxpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFy
cmF5U2V0TWF4U2l6ZSgkMS0+Z2V0QXNTeW1ib2xOb2RlKCksICQxLT5nZXRUeXBlUG9pbnRlcigp
LCAwLCBmYWxzZSwgJDIubGluZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmFycmF5U2V0TWF4U2l6ZSgkMS0+Z2V0QXNTeW1ib2xOb2RlKCksICQx
LT5nZXRUeXBlUG9pbnRlcigpLCAwLCBmYWxzZSwgJDIubGluZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggJDMtPmdl
dEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSA+
PSAkMS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6ZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXgg
b3V0IG9mIHJhbmdlICclZCciLCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJy
YXlQb2ludGVyKCktPmdldElDb25zdCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigkMi5saW5lLCAiIiwgIlsiLCAiYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlICcl
ZCciLCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdl
dElDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRl
eChFT3BJbmRleERpcmVjdCwgJDEsICQzLCAkMi5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCAk
MywgJDIubGluZSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSAmJiAkMS0+Z2V0VHlwZSgpLmdldEFycmF5
U2l6ZSgpID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAiIiwgIlsiLCAiYXJyYXkgbXVzdCBiZSByZWRlY2xhcmVkIHdpdGggYSBzaXplIGJl
Zm9yZSBiZWluZyBpbmRleGVkIHdpdGggYSB2YXJpYWJsZSIpOwotICAgICAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIiIsICJbIiwgImFycmF5IG11c3QgYmUgcmVkZWNsYXJlZCB3aXRoIGEg
c2l6ZSBiZWZvcmUgYmVpbmcgaW5kZXhlZCB3aXRoIGEgdmFyaWFibGUiKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5k
ZXhJbmRpcmVjdCwgJDEsICQzLCAkMi5saW5lKTsKKyAgICAgICAgICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleEluZGlyZWN0LCAkMSwgJDMsICQyLmxp
bmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAg
ICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25b
MV07CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoMC4wZik7Ci0gICAgICAgICAg
ICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAg
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9u
QXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBIaWdoLCBFdnFDb25zdCksICQyLmxpbmUpOwogICAg
ICAgICB9IGVsc2UgaWYgKCQxLT5pc0FycmF5KCkpIHsKICAgICAgICAgICAgIGlmICgkMS0+Z2V0
VHlwZSgpLmdldFN0cnVjdCgpKQogICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQx
LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCksICQxLT5nZXRUeXBlKCkuZ2V0VHlwZU5hbWUoKSkpOwpA
QCAtMzI4LDIyICsyOTgsMjIgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAgICAgfQogICAgIHwgcG9z
dGZpeF9leHByZXNzaW9uIERPVCBGSUVMRF9TRUxFQ1RJT04gewogICAgICAgICBpZiAoJDEtPmlz
QXJyYXkoKSkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMy5saW5lLCAiY2Fu
bm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOwotICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
My5saW5lLCAiY2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIp
OworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAKICAgICAgICAg
aWYgKCQxLT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICBUVmVjdG9yRmllbGRzIGZpZWxkczsK
LSAgICAgICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+cGFyc2VWZWN0b3JGaWVsZHMoKiQzLnN0
cmluZywgJDEtPmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgJDMubGluZSkpIHsKKyAgICAgICAg
ICAgIGlmICghIGNvbnRleHQtPnBhcnNlVmVjdG9yRmllbGRzKCokMy5zdHJpbmcsICQxLT5nZXRO
b21pbmFsU2l6ZSgpLCBmaWVsZHMsICQzLmxpbmUpKSB7CiAgICAgICAgICAgICAgICAgZmllbGRz
Lm51bSA9IDE7CiAgICAgICAgICAgICAgICAgZmllbGRzLm9mZnNldHNbMF0gPSAwOwotICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCQxLT5nZXRU
eXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsgLy8gY29uc3RhbnQgZm9sZGluZyBm
b3IgdmVjdG9yIGZpZWxkcwotICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRD
b25zdFZlY3Rvck5vZGUoZmllbGRzLCAkMSwgJDMubGluZSk7CisgICAgICAgICAgICAgICAgJCQg
PSBjb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUoZmllbGRzLCAkMSwgJDMubGluZSk7CiAgICAg
ICAgICAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgZWxzZQpAQCAtMzUyLDQ3ICszMjIsNDcgQEAgcG9zdGZpeF9leHByZXNzaW9uCiAg
ICAgICAgICAgICAgICAgaWYgKGZpZWxkcy5udW0gPT0gMSkgewogICAgICAgICAgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAg
ICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1swXSk7
Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQzLmxpbmUpOwotICAgICAgICAgICAgICAgICAgICAk
JCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAk
MSwgaW5kZXgsICQyLmxpbmUpOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGlu
ZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
VFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDMubGluZSk7CisgICAgICAg
ICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4
RGlyZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOwogICAgICAgICAgICAgICAgICAgICAkJC0+c2V0
VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSkpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9y
U3RyaW5nID0gKiQzLnN0cmluZzsKLSAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBp
bmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRzLCAkMy5s
aW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAkMSwgaW5kZXgsICQyLmxpbmUpOworICAgICAg
ICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN3aXp6bGUoZmllbGRzLCAkMy5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wVmVjdG9yU3dpenpsZSwgJDEsIGluZGV4
LCAkMi5saW5lKTsKICAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdl
dEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVj
dG9yU3RyaW5nLnNpemUoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgfSBlbHNlIGlmICgkMS0+aXNNYXRyaXgoKSkgewogICAgICAgICAgICAgVE1hdHJpeEZp
ZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAoISBwYXJzZUNvbnRleHQtPnBhcnNlTWF0cml4
RmllbGRzKCokMy5zdHJpbmcsICQxLT5nZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsICQzLmxpbmUp
KSB7CisgICAgICAgICAgICBpZiAoISBjb250ZXh0LT5wYXJzZU1hdHJpeEZpZWxkcygqJDMuc3Ry
aW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCAkMy5saW5lKSkgewogICAgICAgICAg
ICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGZpZWxkcy53
aG9sZUNvbCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIGZpZWxkcy5yb3cgPSAwOwogICAgICAg
ICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOwotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgaWYgKGZpZWxkcy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVD
b2wpIHsKLSAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbm9u
LXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIiwgIiIpOwotICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIs
ICIuIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
CiAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KDApOwotICAgICAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFD
b25zdCksICQzLmxpbmUpOwotICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICQxLCBpbmRleCwgJDIubGluZSk7Cisg
ICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVk
LCBFdnFDb25zdCksICQzLmxpbmUpOworICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOwog
ICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRUeXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEt
PmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgJDEtPmdldE5vbWluYWxTaXplKCkpKTsKICAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25B
cnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAgICAgICAgICAgICAgIHVuaW9uQXJyYXkt
PnNldElDb25zdChmaWVsZHMuY29sICogJDEtPmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93
KTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMy5saW5lKTsKLSAgICAgICAgICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5k
ZXgsICQyLmxpbmUpOworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJ
bnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMy5saW5lKTsKKyAgICAgICAgICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgJDEsIGlu
ZGV4LCAkMi5saW5lKTsKICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0
QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24oKSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgaWYgKCQxLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QpIHsKICAgICAgICAg
ICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgY29uc3QgVFR5cGVMaXN0
KiBmaWVsZHMgPSAkMS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpOwogICAgICAgICAgICAgaWYgKGZp
ZWxkcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5l
LCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAiSW50ZXJuYWwgRXJyb3IiLCAiIik7Ci0gICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDIubGluZSwgInN0cnVjdHVyZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFs
IEVycm9yIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgICAgICAgICAkJCA9ICQxOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgaTsKQEAgLTQwNCw5ICszNzQsOSBAQCBwb3N0Zml4X2V4cHJlc3Npb24K
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGZpZWxkRm91bmQpIHsKICAg
ICAgICAgICAgICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZx
Q29uc3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRD
b25zdFN0cnVjdCgqJDMuc3RyaW5nLCAkMSwgJDIubGluZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAkJCA9IGNvbnRleHQtPmFkZENvbnN0U3RydWN0KCokMy5zdHJpbmcsICQxLCAkMi5saW5l
KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICQkID0gJDE7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlIHsKQEAgLTQxOCw0MCArMzg4LDQwIEBAIHBvc3RmaXhfZXhwcmVzc2lvbgog
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgQ29u
c3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAgICAgICAg
ICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGkpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKigqZmllbGRzKVtpXS50eXBlLCAkMy5saW5l
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3RTdHJ1Y3QsICQxLCBpbmRleCwgJDIubGluZSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgKigqZmllbGRzKVtpXS50eXBl
LCAkMy5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsICQyLmxpbmUp
OwogICAgICAgICAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBl
KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgIiBubyBzdWNoIGZp
ZWxkIGluIHN0cnVjdHVyZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOwotICAgICAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDIubGluZSwgIiBubyBzdWNoIGZpZWxkIGluIHN0cnVjdHVyZSIsICQzLnN0
cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICAgICAgICAgICQkID0gJDE7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5l
cnJvcigkMi5saW5lLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rv
ciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigpLCAiIik7
Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICIgZmllbGQgc2VsZWN0aW9uIHJlcXVpcmVzIHN0cnVjdHVyZSwg
dmVjdG9yLCBvciBtYXRyaXggb24gbGVmdCBoYW5kIHNpZGUiLCAkMy5zdHJpbmctPmNfc3RyKCks
ICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQkID0g
JDE7CiAgICAgICAgIH0KICAgICAgICAgLy8gZG9uJ3QgZGVsZXRlICQzLnN0cmluZywgaXQncyBm
cm9tIHRoZSBwb29sCiAgICAgfQogICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIElOQ19PUCB7Ci0g
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJDIubGluZSwgIisrIiwg
JDEpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3RJbmNyZW1lbnQs
ICQxLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKGNv
bnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJDIubGluZSwgIisrIiwgJDEpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwgJDEsICQyLmxpbmUsIGNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+dW5hcnlPcEVycm9yKCQyLmxpbmUsICIrKyIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
LSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgY29udGV4
dC0+dW5hcnlPcEVycm9yKCQyLmxpbmUsICIrKyIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQkID0gJDE7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgfCBwb3N0Zml4X2V4cHJlc3Npb24gREVDX09QIHsKLSAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMi5saW5lLCAiLS0iLCAkMSkp
Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3JlbWVudCwgJDEs
ICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoY29udGV4
dC0+bFZhbHVlRXJyb3JDaGVjaygkMi5saW5lLCAiLS0iLCAkMSkpCisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVu
YXJ5TWF0aChFT3BQb3N0RGVjcmVtZW50LCAkMSwgJDIubGluZSwgY29udGV4dC0+c3ltYm9sVGFi
bGUpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT51
bmFyeU9wRXJyb3IoJDIubGluZSwgIi0tIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0LT51
bmFyeU9wRXJyb3IoJDIubGluZSwgIi0tIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgJCQgPSAkMTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTQ1OSw4ICs0MjksOCBAQCBwb3N0Zml4X2V4cHJlc3Npb24KIAogaW50
ZWdlcl9leHByZXNzaW9uCiAgICAgOiBleHByZXNzaW9uIHsKLSAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+aW50ZWdlckVycm9yQ2hlY2soJDEsICJbXSIpKQotICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5pbnRlZ2VyRXJyb3JDaGVjaygk
MSwgIltdIikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICQkID0g
JDE7CiAgICAgfQogICAgIDsKQEAgLTQ3OCwxOCArNDQ4LDE4IEBAIGZ1bmN0aW9uX2NhbGwKICAg
ICAgICAgICAgIC8vIFRoZWlyIHBhcmFtZXRlcnMgd2lsbCBiZSB2ZXJpZmllZCBhbGdvcml0aG1p
Y2FsbHkuCiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRWb2lkLCBF
YnBVbmRlZmluZWQpOyAgLy8gdXNlIHRoaXMgdG8gZ2V0IHRoZSB0eXBlIGJhY2sKLSAgICAgICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPmNvbnN0cnVjdG9yRXJyb3JDaGVjaygkMS5saW5lLCAkMS5p
bnRlcm1Ob2RlLCAqZm5DYWxsLCBvcCwgJnR5cGUpKSB7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+Y29uc3RydWN0b3JFcnJvckNoZWNrKCQxLmxpbmUsICQxLmludGVybU5vZGUsICpmbkNhbGws
IG9wLCAmdHlwZSkpIHsKICAgICAgICAgICAgICAgICAkJCA9IDA7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAgLy8gSXQncyBhIGNvbnN0
cnVjdG9yLCBvZiB0eXBlICd0eXBlJy4KICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdHJ1Y3RvcigkMS5pbnRlcm1Ob2RlLCAmdHlw
ZSwgb3AsIGZuQ2FsbCwgJDEubGluZSk7CisgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5h
ZGRDb25zdHJ1Y3RvcigkMS5pbnRlcm1Ob2RlLCAmdHlwZSwgb3AsIGZuQ2FsbCwgJDEubGluZSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigwLCBvcCwgJDEubGlu
ZSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKDAsIG9wLCAk
MS5saW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICQkLT5zZXRUeXBlKHR5cGUpOwog
ICAgICAgICB9IGVsc2UgewpAQCAtNDk4LDEyICs0NjgsMTUgQEAgZnVuY3Rpb25fY2FsbAogICAg
ICAgICAgICAgLy8KICAgICAgICAgICAgIGNvbnN0IFRGdW5jdGlvbiogZm5DYW5kaWRhdGU7CiAg
ICAgICAgICAgICBib29sIGJ1aWx0SW47Ci0gICAgICAgICAgICBmbkNhbmRpZGF0ZSA9IHBhcnNl
Q29udGV4dC0+ZmluZEZ1bmN0aW9uKCQxLmxpbmUsIGZuQ2FsbCwgJmJ1aWx0SW4pOworICAgICAg
ICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5maW5kRnVuY3Rpb24oJDEubGluZSwgZm5DYWxs
LCAmYnVpbHRJbik7CiAgICAgICAgICAgICBpZiAoZm5DYW5kaWRhdGUpIHsKICAgICAgICAgICAg
ICAgICAvLwotICAgICAgICAgICAgICAgIC8vIEEgZGVjbGFyZWQgZnVuY3Rpb24uICBCdXQsIGl0
IG1pZ2h0IHN0aWxsIG1hcCB0byBhIGJ1aWx0LWluCi0gICAgICAgICAgICAgICAgLy8gb3BlcmF0
aW9uLgorICAgICAgICAgICAgICAgIC8vIEEgZGVjbGFyZWQgZnVuY3Rpb24uCiAgICAgICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoYnVpbHRJbiAmJiAhZm5DYW5kaWRhdGUtPmdl
dEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXh0
ZW5zaW9uRXJyb3JDaGVjaygkMS5saW5lLCBmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkpKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgb3AgPSBmbkNhbmRpZGF0ZS0+Z2V0QnVpbHRJbk9wKCk7CiAg
ICAgICAgICAgICAgICAgaWYgKGJ1aWx0SW4gJiYgb3AgIT0gRU9wTnVsbCkgewogICAgICAgICAg
ICAgICAgICAgICAvLwpAQCAtNTEzLDIwICs0ODYsMjAgQEAgZnVuY3Rpb25fY2FsbAogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0
IGxpa2UgYSBidWlsdC1pbiB1bmFyeSBvcGVyYXRvci4KICAgICAgICAgICAgICAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFVuYXJ5TWF0aChvcCwgJDEuaW50ZXJtTm9kZSwgMCwgcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRVbmFyeU1hdGgob3AsICQxLmludGVybU5vZGUsIDAsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAgewotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0
TGluZSgpLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGlu
ZSgpLCAiIHdyb25nIG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJidWlsdCBpbiB1bmFyeSBvcGVyYXRvciBmdW5jdGlvbi4g
IFR5cGU6ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
VEludGVybVR5cGVkKj4oJDEuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIo
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsKICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3Bl
cmF0b3IoJDEuaW50ZXJtQWdncmVnYXRlLCBvcCwgJDEubGluZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigk
MS5pbnRlcm1BZ2dyZWdhdGUsIG9wLCAkMS5saW5lKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
YSByZWFsIGZ1bmN0aW9uIGNhbGwKIAotICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0
ZSwgRU9wRnVuY3Rpb25DYWxsLCAkMS5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoJDEuaW50ZXJtQWdncmVn
YXRlLCBFT3BGdW5jdGlvbkNhbGwsICQxLmxpbmUpOwogICAgICAgICAgICAgICAgICAgICAkJC0+
c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKIAogICAgICAgICAgICAgICAg
ICAgICAvLyB0aGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIgdGhlIGdpdmVuIGZ1bmN0aW9uIGlz
IGEgYnVpbHRJbiBmdW5jdGlvbiBvciBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbgpAQCAtNTM3LDE2
ICs1MTAsMTQgQEAgZnVuY3Rpb25fY2FsbAogICAgICAgICAgICAgICAgICAgICAkJC0+Z2V0QXNB
Z2dyZWdhdGUoKS0+c2V0TmFtZShmbkNhbmRpZGF0ZS0+Z2V0TWFuZ2xlZE5hbWUoKSk7CiAKICAg
ICAgICAgICAgICAgICAgICAgVFF1YWxpZmllciBxdWFsOwotICAgICAgICAgICAgICAgICAgICBU
UXVhbGlmaWVyTGlzdCYgcXVhbGlmaWVyTGlzdCA9ICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRR
dWFsaWZpZXIoKTsKICAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmbkNh
bmRpZGF0ZS0+Z2V0UGFyYW1Db3VudCgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IHF1YWwgPSAoKmZuQ2FuZGlkYXRlKVtpXS50eXBlLT5nZXRRdWFsaWZpZXIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHF1YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0
UXVhbGlmaWVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVhbCA9PSBFdnFPdXQg
fHwgcXVhbCA9PSBFdnFJbk91dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJCQtPmdldExpbmUoKSwgImFzc2lnbiIsICQk
LT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpW2ldLT5nZXRBc1R5cGVkKCkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEuaW50
ZXJtTm9kZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3Ig
J291dCcgb3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJvciIsICIiKTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJCQtPmdldExp
bmUoKSwgImFzc2lnbiIsICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRTZXF1ZW5jZSgpW2ldLT5n
ZXRBc1R5cGVkKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50IHZhbHVlIGNhbm5vdCBi
ZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4iLCAiRXJyb3IiLCAiIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBxdWFsaWZpZXJMaXN0LnB1c2hfYmFjayhxdWFsKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAk
JC0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKQEAgLTU1NSw4ICs1MjYs
OCBAQCBmdW5jdGlvbl9jYWxsCiAgICAgICAgICAgICAgICAgLy8gUHV0IG9uIGEgZHVtbXkgbm9k
ZSBmb3IgZXJyb3IgcmVjb3ZlcnkKICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgICAgICAgICAgdW5pb25BcnJh
eS0+c2V0RkNvbnN0KDAuMGYpOwotICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQxLmxpbmUpOwotICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCAkMS5saW5lKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZGVsZXRlIGZuQ2Fs
bDsKQEAgLTU2OCw4ICs1MzksOCBAQCBmdW5jdGlvbl9jYWxsX29yX21ldGhvZAogICAgICAgICAk
JCA9ICQxOwogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBET1QgZnVuY3Rpb25fY2Fs
bF9nZW5lcmljIHsKLSAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMy5saW5lLCAibWV0aG9k
cyBhcmUgbm90IHN1cHBvcnRlZCIsICIiLCAiIik7Ci0gICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICBjb250ZXh0LT5lcnJvcigkMy5saW5lLCAibWV0aG9kcyBhcmUgbm90
IHN1cHBvcnRlZCIsICIiLCAiIik7CisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgJCQgPSAkMzsKICAgICB9CiAgICAgOwpAQCAtNjA3LDcgKzU3OCw3IEBAIGZ1bmN0aW9uX2Nh
bGxfaGVhZGVyX3dpdGhfcGFyYW1ldGVycwogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyAw
LCBuZXcgVFR5cGUoJDMtPmdldFR5cGUoKSkgfTsKICAgICAgICAgJDEuZnVuY3Rpb24tPmFkZFBh
cmFtZXRlcihwYXJhbSk7CiAgICAgICAgICQkLmZ1bmN0aW9uID0gJDEuZnVuY3Rpb247Ci0gICAg
ICAgICQkLmludGVybU5vZGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVn
YXRlKCQxLmludGVybU5vZGUsICQzLCAkMi5saW5lKTsKKyAgICAgICAgJCQuaW50ZXJtTm9kZSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsICQzLCAk
Mi5saW5lKTsKICAgICB9CiAgICAgOwogCkBAIC02MjUsMTkgKzU5NiwxNiBAQCBmdW5jdGlvbl9p
ZGVudGlmaWVyCiAgICAgICAgIC8vIENvbnN0cnVjdG9yCiAgICAgICAgIC8vCiAgICAgICAgIGlm
ICgkMS5hcnJheSkgewotICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJy
b3JDaGVjaygkMS5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkgewotICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICQxLnNldEFycmF5
KGZhbHNlKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIENvbnN0cnVjdG9ycyBmb3Ig
YXJyYXlzIGFyZSBub3QgYWxsb3dlZC4KKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsICJhcnJheSIsICIiKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQxLnNldEFycmF5KGZhbHNlKTsK
ICAgICAgICAgfQogCisgICAgICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7CiAgICAgICAgIGlm
ICgkMS51c2VyRGVmKSB7Ci0gICAgICAgICAgICBUU3RyaW5nIHRlbXBTdHJpbmcgPSAiIjsKLSAg
ICAgICAgICAgIFRUeXBlIHR5cGUoJDEpOwotICAgICAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlv
biA9IG5ldyBURnVuY3Rpb24oJnRlbXBTdHJpbmcsIHR5cGUsIEVPcENvbnN0cnVjdFN0cnVjdCk7
Ci0gICAgICAgICAgICAkJCA9IGZ1bmN0aW9uOworICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1
Y3RTdHJ1Y3Q7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBUT3BlcmF0b3Igb3AgPSBF
T3BOdWxsOwogICAgICAgICAgICAgc3dpdGNoICgkMS50eXBlKSB7CiAgICAgICAgICAgICBjYXNl
IEVidEZsb2F0OgogICAgICAgICAgICAgICAgIGlmICgkMS5tYXRyaXgpIHsKQEAgLTY3MSwyOSAr
NjM5LDMwIEBAIGZ1bmN0aW9uX2lkZW50aWZpZXIKICAgICAgICAgICAgICAgICBjYXNlIDQ6ICAg
ICAgIEZSQUdfVkVSVF9PTkxZKCJidmVjNCIsICQxLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdEJW
ZWM0OyBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
IChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigk
MS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBnZXRCYXNpY1N0cmluZygkMS50
eXBlKSwgIiIpOwotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjYW5ub3QgY29uc3RydWN0IHRo
aXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5cGUpLCAiIik7CisgICAgICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgICQxLnR5cGUgPSBFYnRGbG9hdDsK
ICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5nID0gIiI7Ci0gICAgICAgICAgICBUVHlwZSB0
eXBlKCQxKTsKLSAgICAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9u
KCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Ci0gICAgICAgICAgICAkJCA9IGZ1bmN0aW9uOwogICAg
ICAgICB9CisgICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZzsKKyAgICAgICAgVFR5cGUgdHlwZSgk
MSk7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3Ry
aW5nLCB0eXBlLCBvcCk7CisgICAgICAgICQkID0gZnVuY3Rpb247CiAgICAgfQogICAgIHwgSURF
TlRJRklFUiB7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygk
MS5saW5lLCAqJDEuc3RyaW5nKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQxLmxpbmUsICokMS5z
dHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBUVHlwZSB0
eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CiAgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24g
PSBuZXcgVEZ1bmN0aW9uKCQxLnN0cmluZywgdHlwZSk7CiAgICAgICAgICQkID0gZnVuY3Rpb247
CiAgICAgfQogICAgIHwgRklFTERfU0VMRUNUSU9OIHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4
dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQxLmxpbmUsICokMS5zdHJpbmcpKQotICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVy
cm9yQ2hlY2soJDEubGluZSwgKiQxLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAg
ICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJDEuc3RyaW5nLCB0eXBlKTsK
ICAgICAgICAgJCQgPSBmdW5jdGlvbjsKQEAgLTcwNSwyOCArNjc0LDI4IEBAIHVuYXJ5X2V4cHJl
c3Npb24KICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgfCBJTkNfT1AgdW5hcnlfZXhwcmVz
c2lvbiB7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJDEubGlu
ZSwgIisrIiwgJDIpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZUlu
Y3JlbWVudCwgJDIsICQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAg
ICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMS5saW5lLCAiKysiLCAkMikpCisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQsICQyLCAkMS5saW5lLCBjb250ZXh0
LT5zeW1ib2xUYWJsZSk7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnVuYXJ5T3BFcnJvcigkMS5saW5lLCAiKysiLCAkMi0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnVuYXJ5T3BFcnJvcigkMS5saW5lLCAiKysiLCAkMi0+Z2V0Q29tcGxldGVTdHJp
bmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkJCA9
ICQyOwogICAgICAgICB9CiAgICAgfQogICAgIHwgREVDX09QIHVuYXJ5X2V4cHJlc3Npb24gewot
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQxLmxpbmUsICItLSIs
ICQyKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9
IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVEZWNyZW1lbnQs
ICQyLCAkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKGNv
bnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJDEubGluZSwgIi0tIiwgJDIpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRVbmFyeU1hdGgoRU9wUHJlRGVjcmVtZW50LCAkMiwgJDEubGluZSwgY29udGV4dC0+c3ltYm9s
VGFibGUpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT51bmFyeU9wRXJyb3IoJDEubGluZSwgIi0tIiwgJDItPmdldENvbXBsZXRlU3RyaW5nKCkpOwot
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0
LT51bmFyeU9wRXJyb3IoJDEubGluZSwgIi0tIiwgJDItPmdldENvbXBsZXRlU3RyaW5nKCkpOwor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgJCQgPSAkMjsKICAg
ICAgICAgfQogICAgIH0KICAgICB8IHVuYXJ5X29wZXJhdG9yIHVuYXJ5X2V4cHJlc3Npb24gewog
ICAgICAgICBpZiAoJDEub3AgIT0gRU9wTnVsbCkgewotICAgICAgICAgICAgJCQgPSBwYXJzZUNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoJDEub3AsICQyLCAkMS5saW5lLCBwYXJz
ZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZFVuYXJ5TWF0aCgkMS5vcCwgJDIsICQxLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKICAgICAgICAgICAgIGlmICgkJCA9PSAwKSB7CiAgICAgICAgICAgICAgICAgY29uc3Qg
Y2hhciogZXJyb3JPcCA9ICIiOwogICAgICAgICAgICAgICAgIHN3aXRjaCgkMS5vcCkgewpAQCAt
NzM0LDggKzcwMyw4IEBAIHVuYXJ5X2V4cHJlc3Npb24KICAgICAgICAgICAgICAgICBjYXNlIEVP
cExvZ2ljYWxOb3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOwogICAgICAgICAgICAgICAgIGRlZmF1
bHQ6IGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnVuYXJ5T3BFcnJvcigkMS5saW5lLCBlcnJvck9wLCAkMi0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7Ci0gICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCQxLmxpbmUsIGVycm9yT3AsICQyLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICAgICAgJCQgPSAkMjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCkBAIC03
NTUsMTkgKzcyNCwxOSBAQCBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uCiAgICAgOiB1bmFyeV9l
eHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwgbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiBT
VEFSIHVuYXJ5X2V4cHJlc3Npb24gewogICAgICAgICBGUkFHX1ZFUlRfT05MWSgiKiIsICQyLmxp
bmUpOwotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTXVsLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE11bCwg
JDEsICQzLCAkMi5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CiAgICAgICAgIGlmICgkJCA9
PSAwKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwg
IioiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwot
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0
LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICIqIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQz
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgICQkID0gJDE7CiAgICAgICAgIH0KICAgICB9CiAgICAgfCBtdWx0aXBsaWNh
dGl2ZV9leHByZXNzaW9uIFNMQVNIIHVuYXJ5X2V4cHJlc3Npb24gewogICAgICAgICBGUkFHX1ZF
UlRfT05MWSgiLyIsICQyLmxpbmUpOwotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRC
aW5hcnlNYXRoKEVPcERpdiwgJDEsICQzLCAkMi5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CiAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFy
eU9wRXJyb3IoJDIubGluZSwgIi8iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENv
bXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICIvIiwgJDEtPmdldENv
bXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQkID0gJDE7CiAgICAgICAgIH0KICAgICB9
CkBAIC03NzYsMTggKzc0NSwxOCBAQCBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uCiBhZGRpdGl2
ZV9leHByZXNzaW9uCiAgICAgOiBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIHsgJCQgPSAkMTsg
fQogICAgIHwgYWRkaXRpdmVfZXhwcmVzc2lvbiBQTFVTIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Np
b24gewotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wQWRkLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEFkZCwg
JDEsICQzLCAkMi5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CiAgICAgICAgIGlmICgkJCA9
PSAwKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwg
IisiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwot
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0
LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICIrIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQz
LT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgICQkID0gJDE7CiAgICAgICAgIH0KICAgICB9CiAgICAgfCBhZGRpdGl2ZV9l
eHByZXNzaW9uIERBU0ggbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQkID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICQxLCAkMywg
JDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wU3ViLCAkMSwgJDMsICQyLmxpbmUsIGNv
bnRleHQtPnN5bWJvbFRhYmxlKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiLSIsICQxLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIu
bGluZSwgIi0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5n
KCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgJCQgPSAk
MTsKICAgICAgICAgfQogICAgIH0KQEAgLTgwMCw0MyArNzY5LDQzIEBAIHNoaWZ0X2V4cHJlc3Np
b24KIHJlbGF0aW9uYWxfZXhwcmVzc2lvbgogICAgIDogc2hpZnRfZXhwcmVzc2lvbiB7ICQkID0g
JDE7IH0KICAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRUZUX0FOR0xFIHNoaWZ0X2V4cHJl
c3Npb24gewotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wTGVzc1RoYW4sICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgo
RU9wTGVzc1RoYW4sICQxLCAkMywgJDIubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwogICAg
ICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVy
cm9yKCQyLmxpbmUsICI8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPCIsICQxLT5nZXRDb21wbGV0
ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3
IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFs
c2UpOwotICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25z
dGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29u
c3QpLCAkMi5saW5lKTsKKyAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBF
dnFDb25zdCksICQyLmxpbmUpOwogICAgICAgICB9CiAgICAgfQogICAgIHwgcmVsYXRpb25hbF9l
eHByZXNzaW9uIFJJR0hUX0FOR0xFIHNoaWZ0X2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAk
MSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuLCAkMSwg
JDMsICQyLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKICAgICAgICAgaWYgKCQkID09IDAp
IHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPiIs
ICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmJp
bmFyeU9wRXJyb3IoJDIubGluZSwgIj4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdl
dENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFd
OwogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFy
cmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7Cisg
ICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVu
aW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5l
KTsKICAgICAgICAgfQogICAgIH0KICAgICB8IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiBMRV9PUCBz
aGlmdF9leHByZXNzaW9uICB7Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCaW5hcnlNYXRoKEVPcExlc3NUaGFuRXF1YWwsICQxLCAkMywgJDIubGluZSwgY29udGV4
dC0+c3ltYm9sVGFibGUpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICI8PSIsICQxLT5nZXRDb21wbGV0ZVN0
cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGlu
ZSwgIjw9IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIENvbnN0YW50
VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAgIHVu
aW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9v
bCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gR0VfT1Agc2hpZnRfZXhwcmVzc2lvbiAg
ewotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgo
RU9wR3JlYXRlclRoYW5FcXVhbCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAkMSwgJDMsICQyLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPj0iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMt
PmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICI+PSIsICQx
LT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5z
ZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVm
aW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOwogICAgICAgICB9CiAgICAgfQogICAgIDsK
QEAgLTg0NCwyNiArODEzLDI0IEBAIHJlbGF0aW9uYWxfZXhwcmVzc2lvbgogZXF1YWxpdHlfZXhw
cmVzc2lvbgogICAgIDogcmVsYXRpb25hbF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwg
ZXF1YWxpdHlfZXhwcmVzc2lvbiBFUV9PUCByZWxhdGlvbmFsX2V4cHJlc3Npb24gIHsKLSAgICAg
ICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVxdWFs
LCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEVxdWFsLCAkMSwgJDMs
ICQyLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKICAgICAgICAgaWYgKCQkID09IDApIHsK
LSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPT0iLCAk
MS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5h
cnlPcEVycm9yKCQyLmxpbmUsICI9PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKLSAg
ICAgICAgfSBlbHNlIGlmICgoJDEtPmlzQXJyYXkoKSB8fCAkMy0+aXNBcnJheSgpKSAmJiBwYXJz
ZUNvbnRleHQtPmV4dGVuc2lvbkVycm9yQ2hlY2soJDIubGluZSwgIkdMXzNETF9hcnJheV9vYmpl
Y3RzIikpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwg
VFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAg
ICB9CiAgICAgfQogICAgIHwgZXF1YWxpdHlfZXhwcmVzc2lvbiBORV9PUCByZWxhdGlvbmFsX2V4
cHJlc3Npb24gewotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJp
bmFyeU1hdGgoRU9wTm90RXF1YWwsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wTm90RXF1YWwsICQxLCAkMywgJDIubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwog
ICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlP
cEVycm9yKCQyLmxpbmUsICIhPSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIiE9IiwgJDEtPmdldENv
bXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25z
dChmYWxzZSk7Ci0gICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBF
dnFDb25zdCksICQyLmxpbmUpOwotICAgICAgICB9IGVsc2UgaWYgKCgkMS0+aXNBcnJheSgpIHx8
ICQzLT5pc0FycmF5KCkpICYmIHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygkMi5s
aW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29u
c3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgJDIubGluZSk7CisgICAgICAgIH0KICAgICB9CiAgICAgOwogCkBAIC04ODIsMTMgKzg0
OSwxMyBAQCBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbgogbG9naWNhbF9hbmRfZXhwcmVzc2lvbgog
ICAgIDogaW5jbHVzaXZlX29yX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBsb2dpY2Fs
X2FuZF9leHByZXNzaW9uIEFORF9PUCBpbmNsdXNpdmVfb3JfZXhwcmVzc2lvbiB7Ci0gICAgICAg
ICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2Fs
QW5kLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAg
ICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxBbmQs
ICQxLCAkMywgJDIubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwogICAgICAgICBpZiAoJCQg
PT0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUs
ICImJiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIiYmIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCks
ICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAg
ICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxp
bmUpOworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwg
JDIubGluZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgOwpAQCAtODk2LDEzICs4NjMsMTMgQEAg
bG9naWNhbF9hbmRfZXhwcmVzc2lvbgogbG9naWNhbF94b3JfZXhwcmVzc2lvbgogICAgIDogbG9n
aWNhbF9hbmRfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0KICAgICB8IGxvZ2ljYWxfeG9yX2V4cHJl
c3Npb24gWE9SX09QIGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24gIHsKLSAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICQxLCAk
MywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbFhvciwgJDEsICQzLCAk
Mi5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0g
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIl5eIiwgJDEt
PmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5
T3BFcnJvcigkMi5saW5lLCAiXl4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENv
bXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwog
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICQk
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5
LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAg
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9u
QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsK
ICAgICAgICAgfQogICAgIH0KICAgICA7CkBAIC05MTAsMTMgKzg3NywxMyBAQCBsb2dpY2FsX3hv
cl9leHByZXNzaW9uCiBsb2dpY2FsX29yX2V4cHJlc3Npb24KICAgICA6IGxvZ2ljYWxfeG9yX2V4
cHJlc3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gT1JfT1Ag
bG9naWNhbF94b3JfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAkMSwgJDMsICQyLmxpbmUsIHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgJDEsICQzLCAkMi5saW5lLCBjb250ZXh0
LT5zeW1ib2xUYWJsZSk7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgInx8IiwgJDEtPmdldENvbXBsZXRlU3Ry
aW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5l
LCAifHwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkp
OworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgQ29uc3RhbnRV
bmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAgICAgICAgICAgdW5p
b25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29s
LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKICAgICAgICAgfQogICAg
IH0KICAgICA7CkBAIC05MjQsMTYgKzg5MSwxNiBAQCBsb2dpY2FsX29yX2V4cHJlc3Npb24KIGNv
bmRpdGlvbmFsX2V4cHJlc3Npb24KICAgICA6IGxvZ2ljYWxfb3JfZXhwcmVzc2lvbiB7ICQkID0g
JDE7IH0KICAgICB8IGxvZ2ljYWxfb3JfZXhwcmVzc2lvbiBRVUVTVElPTiBleHByZXNzaW9uIENP
TE9OIGFzc2lnbm1lbnRfZXhwcmVzc2lvbiB7Ci0gICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9v
bEVycm9yQ2hlY2soJDIubGluZSwgJDEpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAotICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigkMSwgJDMsICQ1LCAkMi5saW5lKTsKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU2VsZWN0aW9uKCQxLCAkMywgJDUs
ICQyLmxpbmUpOwogICAgICAgICBpZiAoJDMtPmdldFR5cGUoKSAhPSAkNS0+Z2V0VHlwZSgpKQog
ICAgICAgICAgICAgJCQgPSAwOwogCiAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIjoiLCAkMy0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSwgJDUtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCQy
LmxpbmUsICI6IiwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCksICQ1LT5nZXRDb21wbGV0ZVN0cmlu
ZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQkID0g
JDU7CiAgICAgICAgIH0KICAgICB9CkBAIC05NDIsMTUgKzkwOSwxNCBAQCBjb25kaXRpb25hbF9l
eHByZXNzaW9uCiBhc3NpZ25tZW50X2V4cHJlc3Npb24KICAgICA6IGNvbmRpdGlvbmFsX2V4cHJl
c3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCB1bmFyeV9leHByZXNzaW9uIGFzc2lnbm1lbnRfb3Bl
cmF0b3IgYXNzaWdubWVudF9leHByZXNzaW9uIHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
bFZhbHVlRXJyb3JDaGVjaygkMi5saW5lLCAiYXNzaWduIiwgJDEpKQotICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQXNzaWduKCQyLm9wLCAkMSwgJDMsICQyLmxpbmUpOworICAgICAgICBpZiAoY29u
dGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMi5saW5lLCAiYXNzaWduIiwgJDEpKQorICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRBc3NpZ24oJDIub3AsICQxLCAkMywgJDIubGluZSk7CiAgICAgICAgIGlmICgkJCA9PSAw
KSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmFzc2lnbkVycm9yKCQyLmxpbmUsICJhc3Np
Z24iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwot
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0
LT5hc3NpZ25FcnJvcigkMi5saW5lLCAiYXNzaWduIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCks
ICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0gZWxzZSBpZiAoKCQxLT5pc0FycmF5
KCkgfHwgJDMtPmlzQXJyYXkoKSkgJiYgcGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNr
KCQyLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQotICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KICAgICB9CiAgICAgOwogCkBAIC05NjcsMTAgKzkz
MywxMCBAQCBleHByZXNzaW9uCiAgICAgICAgICQkID0gJDE7CiAgICAgfQogICAgIHwgZXhwcmVz
c2lvbiBDT01NQSBhc3NpZ25tZW50X2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbW1hKCQxLCAkMywgJDIubGluZSk7CisgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbW1hKCQxLCAkMywgJDIubGluZSk7CiAgICAg
ICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJy
b3IoJDIubGluZSwgIiwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRl
U3RyaW5nKCkpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICIsIiwgJDEtPmdldENvbXBsZXRl
U3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgICQkID0gJDM7CiAgICAgICAgIH0KICAgICB9CkBAIC05
NzgsOCArOTQ0LDggQEAgZXhwcmVzc2lvbgogCiBjb25zdGFudF9leHByZXNzaW9uCiAgICAgOiBj
b25kaXRpb25hbF9leHByZXNzaW9uIHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Y29uc3RF
cnJvckNoZWNrKCQxKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICBpZiAoY29udGV4dC0+Y29uc3RFcnJvckNoZWNrKCQxKSkKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgJCQgPSAkMTsKICAgICB9CiAgICAgOwpAQCAtOTk0LDE2
ICs5NjAsMTYgQEAgZGVjbGFyYXRpb24KICAgICAgICAgCiAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyBpKyspCiAgICAgICAgIHsKLSAgICAgICAg
ICAgIFRQYXJhbWV0ZXIgJnBhcmFtID0gZnVuY3Rpb25baV07CisgICAgICAgICAgICBjb25zdCBU
UGFyYW1ldGVyICZwYXJhbSA9IGZ1bmN0aW9uLmdldFBhcmFtKGkpOwogICAgICAgICAgICAgaWYg
KHBhcmFtLm5hbWUgIT0gMCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBUVmFyaWFi
bGUgKnZhcmlhYmxlID0gbmV3IFRWYXJpYWJsZShwYXJhbS5uYW1lLCAqcGFyYW0udHlwZSk7CiAg
ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgcHJvdG90eXBlID0gcGFyc2VDb250ZXh0
LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUsIHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwgdmFyaWFibGUtPmdl
dE5hbWUoKSwgdmFyaWFibGUtPmdldFR5cGUoKSwgJDEubGluZSksICQxLmxpbmUpOworICAgICAg
ICAgICAgICAgIHByb3RvdHlwZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRl
KHByb3RvdHlwZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0
VW5pcXVlSWQoKSwgdmFyaWFibGUtPmdldE5hbWUoKSwgdmFyaWFibGUtPmdldFR5cGUoKSwgJDEu
bGluZSksICQxLmxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmdyb3dBZ2dyZWdhdGUocHJvdG90eXBlLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAkMS5saW5lKSwgJDEubGluZSk7CisgICAg
ICAgICAgICAgICAgcHJvdG90eXBlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdh
dGUocHJvdG90eXBlLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFy
YW0udHlwZSwgJDEubGluZSksICQxLmxpbmUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIApAQCAtMTAxNiw3ICs5ODIsNyBAQCBkZWNsYXJhdGlvbgogICAgICAgICAkJCA9ICQx
LmludGVybUFnZ3JlZ2F0ZTsKICAgICB9CiAgICAgfCBQUkVDSVNJT04gcHJlY2lzaW9uX3F1YWxp
ZmllciB0eXBlX3NwZWNpZmllcl9ub19wcmVjIFNFTUlDT0xPTiB7Ci0gICAgICAgIHBhcnNlQ29u
dGV4dC0+c3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbiggJDMudHlwZSwgJDIgKTsKKyAg
ICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbiggJDMudHlwZSwg
JDIgKTsKICAgICAgICAgJCQgPSAwOwogICAgIH0KICAgICA7CkBAIC0xMDMxLDE2ICs5OTcsMTYg
QEAgZnVuY3Rpb25fcHJvdG90eXBlCiAgICAgICAgIC8vCiAgICAgICAgIC8vIFJlZGVjbGFyYXRp
b25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBxdWFsaWZp
ZXJzIG11c3QgbWF0Y2guCiAgICAgICAgIC8vCi0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9
IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgk
MS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0
aWNfY2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCQxLT5nZXRNYW5n
bGVkTmFtZSgpKSk7CiAgICAgICAgIGlmIChwcmV2RGVjKSB7CiAgICAgICAgICAgICBpZiAocHJl
dkRlYy0+Z2V0UmV0dXJuVHlwZSgpICE9ICQxLT5nZXRSZXR1cm5UeXBlKCkpIHsKLSAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9u
cyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0dXJuIHR5cGUiLCAkMS0+Z2V0UmV0dXJuVHlwZSgpLmdl
dEJhc2ljU3RyaW5nKCksICIiKTsKLSAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRl
ZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdldFJldHVy
blR5cGUoKS5nZXRCYXNpY1N0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBwcmV2RGVjLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgewotICAgICAgICAgICAgICAgIGlmICgo
KnByZXZEZWMpW2ldLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICgqJDEpW2ldLnR5cGUtPmdldFF1
YWxpZmllcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIu
bGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIg
cXVhbGlmaWVycyIsICgqJDEpW2ldLnR5cGUtPmdldFF1YWxpZmllclN0cmluZygpLCAiIik7Ci0g
ICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAg
ICAgIGlmIChwcmV2RGVjLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAkMS0+
Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0
aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIsICQxLT5nZXRQYXJhbShpKS50eXBlLT5nZXRR
dWFsaWZpZXJTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0x
MDUzLDcgKzEwMTksNyBAQCBmdW5jdGlvbl9wcm90b3R5cGUKICAgICAgICAgJCQuZnVuY3Rpb24g
PSAkMTsKICAgICAgICAgJCQubGluZSA9ICQyLmxpbmU7CiAKLSAgICAgICAgcGFyc2VDb250ZXh0
LT5zeW1ib2xUYWJsZS5pbnNlcnQoKiQkLmZ1bmN0aW9uKTsKKyAgICAgICAgY29udGV4dC0+c3lt
Ym9sVGFibGUuaW5zZXJ0KCokJC5mdW5jdGlvbik7CiAgICAgfQogICAgIDsKIApAQCAtMTA4NSw4
ICsxMDUxLDggQEAgZnVuY3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycwogICAgICAgICAgICAg
Ly8KICAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4gZmlyc3QgaXMgdm9pZAogICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5v
dCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIsICIiKTsK
LSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4Y2VwdCBmb3Ig
Jyh2b2lkKSciLCAidm9pZCIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgICAgIGRlbGV0ZSAkMy5wYXJhbS50eXBlOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIKQEAgLTEwOTksMTIgKzEwNjUsMTIgQEAgZnVu
Y3Rpb25faGVhZGVyX3dpdGhfcGFyYW1ldGVycwogZnVuY3Rpb25faGVhZGVyCiAgICAgOiBmdWxs
eV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIExFRlRfUEFSRU4gewogICAgICAgICBpZiAoJDEu
cXVhbGlmaWVyICE9IEV2cUdsb2JhbCAmJiAkMS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5KSB7
Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJubyBxdWFsaWZpZXJz
IGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFs
aWZpZXIpLCAiIik7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9y
IGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgLy8g
bWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQgYXMgd2VsbC4uLgotICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkK
LSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgLy8gQWRkIHRoZSBmdW5jdGlvbiBhcyBhIHBy
b3RvdHlwZSBhZnRlciBwYXJzaW5nIGl0ICh3ZSBkbyBub3Qgc3VwcG9ydCByZWN1cnNpb24pCiAg
ICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb247CkBAIC0xMTE4LDI2ICsxMDg0LDI2IEBAIHBhcmFt
ZXRlcl9kZWNsYXJhdG9yCiAgICAgLy8gVHlwZSArIG5hbWUKICAgICA6IHR5cGVfc3BlY2lmaWVy
IElERU5USUZJRVIgewogICAgICAgICBpZiAoJDEudHlwZSA9PSBFYnRWb2lkKSB7Ci0gICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2
b2lkJyIsICQyLnN0cmluZy0+Y19zdHIoKSwgIiIpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiaWxsZWdh
bCB1c2Ugb2YgdHlwZSAndm9pZCciLCAkMi5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQotICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZykpCi0gICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVk
RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHskMi5zdHJpbmcsIG5ldyBUVHlw
ZSgkMSl9OwogICAgICAgICAkJC5saW5lID0gJDIubGluZTsKICAgICAgICAgJCQucGFyYW0gPSBw
YXJhbTsKICAgICB9CiAgICAgfCB0eXBlX3NwZWNpZmllciBJREVOVElGSUVSIExFRlRfQlJBQ0tF
VCBjb25zdGFudF9leHByZXNzaW9uIFJJR0hUX0JSQUNLRVQgewogICAgICAgICAvLyBDaGVjayB0
aGF0IHdlIGNhbiBtYWtlIGFuIGFycmF5IG91dCBvZiB0aGlzIHR5cGUKLSAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkMy5saW5lLCAkMSkpCi0gICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlw
ZUVycm9yQ2hlY2soJDMubGluZSwgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogCi0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMi5saW5l
LCAqJDIuc3RyaW5nKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgIGludCBzaXplOwot
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQzLmxpbmUsICQ0
LCBzaXplKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBp
ZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkMy5saW5lLCAkNCwgc2l6ZSkpCisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICQxLnNldEFycmF5KHRydWUsIHNp
emUpOwogCiAgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKCQxKTsKQEAgLTExNTgsMzAg
KzExMjQsMzAgQEAgcGFyYW1ldGVyX2RlY2xhcmF0aW9uCiAgICAgLy8KICAgICA6IHR5cGVfcXVh
bGlmaWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX2RlY2xhcmF0b3IgewogICAgICAg
ICAkJCA9ICQzOwotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soJDMu
bGluZSwgJDEucXVhbGlmaWVyLCAkMiwgJCQucGFyYW0udHlwZSkpCi0gICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVj
aygkMy5saW5lLCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgfCBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBh
cmFtZXRlcl9kZWNsYXJhdG9yIHsKICAgICAgICAgJCQgPSAkMjsKLSAgICAgICAgaWYgKHBhcnNl
Q29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soJDIubGluZSwgJDEsICokMi5wYXJh
bS50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soJDIubGluZSwgRXZxVGVtcG9yYXJ5LCAk
MSwgJCQucGFyYW0udHlwZSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKCQyLmxpbmUs
ICQxLCAqJDIucGFyYW0udHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soJDIubGluZSwgRXZxVGVtcG9yYXJ5
LCAkMSwgJCQucGFyYW0udHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgfQogICAgIC8vCiAgICAgLy8gT25seSB0eXBlCiAgICAgLy8KICAgICB8IHR5cGVfcXVhbGlm
aWVyIHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIHsKICAgICAg
ICAgJCQgPSAkMzsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCQz
LmxpbmUsICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hl
Y2soJDMubGluZSwgJDEucXVhbGlmaWVyLCAkMiwgJCQucGFyYW0udHlwZSkpCisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgfQogICAgIHwgcGFyYW1ldGVyX3F1YWxpZmllciBw
YXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIgewogICAgICAgICAkJCA9ICQyOwotICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSwgKiQy
LnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygkMi5saW5lLCBFdnFUZW1wb3Jh
cnksICQxLCAkJC5wYXJhbS50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soJDIu
bGluZSwgJDEsICokMi5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygkMi5saW5lLCBFdnFUZW1w
b3JhcnksICQxLCAkJC5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICB9CiAgICAgOwogCkBAIC0xMjEyLDE1MiArMTE3OCw4MyBAQCBpbml0X2RlY2xhcmF0
b3JfbGlzdAogICAgICAgICAkJCA9ICQxOwogICAgICAgICAKICAgICAgICAgaWYgKCQkLnR5cGUu
cHJlY2lzaW9uID09IEVicFVuZGVmaW5lZCkgewotICAgICAgICAgICAgJCQudHlwZS5wcmVjaXNp
b24gPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmdldERlZmF1bHRQcmVjaXNpb24oJDEudHlw
ZS50eXBlKTsKLSAgICAgICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnByZWNpc2lvbkVycm9yQ2hl
Y2soJDEubGluZSwgJCQudHlwZS5wcmVjaXNpb24sICQxLnR5cGUudHlwZSkpIHsKLSAgICAgICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkLnR5cGUucHJl
Y2lzaW9uID0gY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0RGVmYXVsdFByZWNpc2lvbigkMS50eXBl
LnR5cGUpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPnByZWNpc2lvbkVycm9yQ2hlY2soJDEu
bGluZSwgJCQudHlwZS5wcmVjaXNpb24sICQxLnR5cGUudHlwZSkpIHsKKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAg
ICAgfCBpbml0X2RlY2xhcmF0b3JfbGlzdCBDT01NQSBJREVOVElGSUVSIHsKLSAgICAgICAgJCQu
aW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZSgkMS5pbnRlcm1Ob2RlLCBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwg
KiQzLnN0cmluZywgVFR5cGUoJDEudHlwZSksICQzLmxpbmUpLCAkMy5saW5lKTsKKyAgICAgICAg
JCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUo
JDEuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDMuc3Ry
aW5nLCBUVHlwZSgkMS50eXBlKSwgJDMubGluZSksICQzLmxpbmUpOwogICAgICAgICAKLSAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAk
JC50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBp
ZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkJC50eXBlKSkK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAotICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQkLnR5cGUp
KQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250
ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQkLnR5cGUp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAgIGlmIChwYXJzZUNv
bnRleHQtPm5vbkluaXRFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQkLnR5cGUpKQot
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0
LT5ub25Jbml0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5nLCAkJC50eXBlKSkKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgfCBpbml0X2RlY2xhcmF0b3Jf
bGlzdCBDT01NQSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKLSAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAk
MS50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBp
ZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMS50eXBlKSkK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAotICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUp
KQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250
ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQzLmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICQkID0gJDE7CiAK
LSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkNC5saW5lLCAk
MS50eXBlKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygkNC5saW5l
LCAkMS50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSB8fCBj
b250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkpCisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
JDEudHlwZS5zZXRBcnJheSh0cnVlKTsKICAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7
Ci0gICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDQubGluZSwg
KiQzLnN0cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVj
aygkNC5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAgfQogICAgIHwgaW5pdF9kZWNs
YXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVz
c2lvbiBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMS50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJy
b3JDaGVjaygkMy5saW5lLCAkMS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKIAotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQz
LmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQz
LmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogCiAgICAgICAgICQkID0gJDE7CiAKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJy
YXlUeXBlRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5
UXVhbGlmaWVyRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSkKLSAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JD
aGVjaygkNC5saW5lLCAkMS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hl
Y2soJDQubGluZSwgJDEudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQ0LmxpbmUsICQ1LCBzaXplKSkKLSAgICAg
ICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGlmIChjb250
ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQ0LmxpbmUsICQ1LCBzaXplKSkKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkMS50eXBlLnNldEFycmF5KHRy
dWUsIHNpemUpOwogICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKLSAgICAgICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkNC5saW5lLCAqJDMuc3RyaW5nLCAk
MS50eXBlLCB2YXJpYWJsZSkpCi0gICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCQ0LmxpbmUsICok
My5zdHJpbmcsICQxLnR5cGUsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoJDEudHlwZSk7CiAgICAg
ICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKLSAgICAgICAgICAgICQkLmludGVybUFn
Z3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50
ZXJtTm9kZSwgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMy5zdHJp
bmcsIHR5cGUsICQzLmxpbmUpLCAkMy5saW5lKTsKLSAgICAgICAgfQotICAgIH0KLSAgICB8IGlu
aXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIFJJR0hUX0JS
QUNLRVQgRVFVQUwgaW5pdGlhbGl6ZXIgewotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1
Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5cGUpKQotICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgJCQgPSAkMTsKLQotICAgICAgICBUVmFy
aWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBl
RXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlm
aWVyRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICQxLnR5cGUuc2V0QXJy
YXkodHJ1ZSwgJDctPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSk7Ci0gICAgICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDQubGluZSwgKiQzLnN0cmluZywgJDEudHlw
ZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVj
aygkJC5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKLSAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFRJbnRlcm1Ob2Rl
KiBpbnRlcm1Ob2RlOwotICAgICAgICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0
aWFsaXplcigkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlLCAkNywgaW50ZXJtTm9kZSwgdmFy
aWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBidWlsZCB0
aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAgICAgICAgICAgLy8KLSAgICAg
ICAgICAgICAgICBpZiAoaW50ZXJtTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJt
QWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5p
bnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAkNi5saW5lKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9ICQxLmludGVybUFnZ3JlZ2F0
ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENP
TU1BIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJB
Q0tFVCBFUVVBTCBpbml0aWFsaXplciB7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVj
dFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEudHlwZSkpCi0gICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAkJCA9ICQxOwotCi0gICAgICAgIFRWYXJp
YWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVF
cnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpIHx8IHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZp
ZXJFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaW50IHNpemU7Ci0gICAg
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQ0LmxpbmUsICQ1
LCBzaXplKSkKLSAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAg
ICAgICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0gICAgICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDQubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSwg
dmFyaWFibGUpKQotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygk
JC5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIFRJbnRlcm1Ob2RlKiBp
bnRlcm1Ob2RlOwotICAgICAgICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFs
aXplcigkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlLCAkOCwgaW50ZXJtTm9kZSwgdmFyaWFi
bGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAvLyBidWlsZCB0aGUg
aW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgICAgICBpZiAoaW50ZXJtTm9kZSkKLSAgICAgICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdn
cmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRl
cm1Ob2RlLCBpbnRlcm1Ob2RlLCAkNy5saW5lKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9ICQxLmludGVybUFnZ3JlZ2F0ZTsK
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKLSAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTeW1ib2woMCwgKiQzLnN0cmluZywgdHlwZSwgJDMubGluZSksICQzLmxpbmUpOwogICAgICAg
ICB9CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiBF
UVVBTCBpbml0aWFsaXplciB7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxp
ZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEudHlwZSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9y
Q2hlY2soJDMubGluZSwgJDEudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAKICAgICAgICAgJCQgPSAkMTsKIAogICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsK
LSAgICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigkMy5saW5lLCAq
JDMuc3RyaW5nLCAkMS50eXBlLCAkNSwgaW50ZXJtTm9kZSkpIHsKKyAgICAgICAgaWYgKCFjb250
ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoJDMubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSwgJDUs
IGludGVybU5vZGUpKSB7CiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gYnVpbGQgdGhl
IGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgogICAgICAgICAgICAgLy8KICAgICAgICAgICAg
IGlmIChpbnRlcm1Ob2RlKQotICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIGludGVybU5vZGUs
ICQ0LmxpbmUpOworICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAkNC5saW5lKTsK
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSAk
MS5pbnRlcm1BZ2dyZWdhdGU7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IDA7CiAgICAgICAgIH0KICAgICB9CkBAIC0xMzY2
LDg4ICsxMjYzLDg4IEBAIGluaXRfZGVjbGFyYXRvcl9saXN0CiBzaW5nbGVfZGVjbGFyYXRpb24K
ICAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIHsKICAgICAgICAgJCQudHlwZSA9ICQxOwotICAg
ICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtl
QWdncmVnYXRlKHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgVFR5
cGUoJDEpLCAkMS5saW5lKSwgJDEubGluZSk7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2woMCwgIiIsIFRUeXBlKCQxKSwgJDEubGluZSksICQxLmxpbmUpOwogICAgIH0K
ICAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIgewotICAgICAgICAkJC5pbnRl
cm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlwZSgk
MSksICQyLmxpbmUpLCAkMi5saW5lKTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCBUVHlwZSgkMSksICQyLmxpbmUpLCAkMi5saW5lKTsKICAg
ICAgICAgCi0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soJDIubGluZSwgJCQudHlwZSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDIubGlu
ZSwgJCQudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3Ry
aW5nLCAkJC50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3Ry
aW5nLCAkJC50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgJCQudHlwZSA9ICQxOwogCi0gICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPm5vbkluaXRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQkLnR5cGUpKQotICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5u
b25Jbml0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkJC50eXBlKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlw
ZSBJREVOVElGSUVSIExFRlRfQlJBQ0tFVCBSSUdIVF9CUkFDS0VUIHsKLSAgICAgICAgJCQuaW50
ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUo
JDEpLCAkMi5saW5lKSwgJDIubGluZSk7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCAkMi5saW5lKSwgJDIubGluZSk7CiAg
ICAgICAgIAotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNo
ZWNrKCQyLmxpbmUsICQxKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAk
MSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYgKHBhcnNl
Q29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkMSkp
Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRl
eHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZywgJDEpKQorICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICQkLnR5cGUgPSAkMTsKIAot
ICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQzLmxpbmUsICQx
KSB8fCBwYXJzZUNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMSkp
Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDMubGluZSwgJDEpIHx8IGNvbnRleHQtPmFycmF5UXVh
bGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgJDEuc2V0QXJyYXkodHJ1ZSk7CiAg
ICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOwotICAgICAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+YXJyYXlFcnJvckNoZWNrKCQzLmxpbmUsICokMi5zdHJpbmcsICQxLCB2YXJpYWJsZSkp
Ci0gICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+YXJyYXlFcnJvckNoZWNrKCQzLmxpbmUsICokMi5zdHJpbmcsICQxLCB2YXJp
YWJsZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAg
ICAgfQogICAgIHwgZnVsbHlfc3BlY2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQg
Y29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKICAgICAgICAgVFR5cGUgdHlwZSA9
IFRUeXBlKCQxKTsKICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PmFycmF5U2l6ZUVycm9yQ2hlY2soJDIubGluZSwgJDQsIHNpemUpKQotICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJv
ckNoZWNrKCQyLmxpbmUsICQ0LCBzaXplKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7Ci0gICAgICAgICQkLmludGVybUFn
Z3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUocGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIHR5cGUsICQyLmxp
bmUpLCAkMi5saW5lKTsKKyAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgw
LCAqJDIuc3RyaW5nLCB0eXBlLCAkMi5saW5lKSwgJDIubGluZSk7CiAgICAgICAgIAotICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQx
KSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29u
dGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5p
dENvbnN0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkMSkpCi0gICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25z
dEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZywgJDEpKQorICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICQkLnR5cGUgPSAkMTsKIAotICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQzLmxpbmUsICQxKSB8fCBwYXJzZUNvbnRl
eHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygkMy5saW5lLCAkMSkpCi0gICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVy
cm9yQ2hlY2soJDMubGluZSwgJDEpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVj
aygkMy5saW5lLCAkMSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQzLmxpbmUsICQ0LCBzaXplKSkKLSAgICAgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5h
cnJheVNpemVFcnJvckNoZWNrKCQzLmxpbmUsICQ0LCBzaXplKSkKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgICAgICQxLnNldEFycmF5KHRydWUsIHNpemUp
OwogICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKLSAgICAgICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkMy5saW5lLCAqJDIuc3RyaW5nLCAkMSwgdmFyaWFi
bGUpKQotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkMy5saW5lLCAqJDIuc3RyaW5nLCAkMSwg
dmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
fQogICAgIH0KICAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIgRVFVQUwgaW5p
dGlhbGl6ZXIgewotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJv
ckNoZWNrKCQyLmxpbmUsICQxKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5l
LCAkMSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgJCQudHlw
ZSA9ICQxOwogCiAgICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICBpZiAo
IXBhcnNlQ29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCQyLmxpbmUsICokMi5zdHJpbmcsICQx
LCAkNCwgaW50ZXJtTm9kZSkpIHsKKyAgICAgICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlh
bGl6ZXIoJDIubGluZSwgKiQyLnN0cmluZywgJDEsICQ0LCBpbnRlcm1Ob2RlKSkgewogICAgICAg
ICAvLwogICAgICAgICAvLyBCdWlsZCBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb24KICAgICAg
ICAgLy8KICAgICAgICAgICAgIGlmKGludGVybU5vZGUpCi0gICAgICAgICAgICAgICAgJCQuaW50
ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShp
bnRlcm1Ob2RlLCAkMy5saW5lKTsKKyAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCAkMy5saW5l
KTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUg
PSAwOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkJC5pbnRl
cm1BZ2dyZWdhdGUgPSAwOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQ3OSwxNCArMTM3NiwxNCBA
QCBzaW5nbGVfZGVjbGFyYXRpb24KIC8vCiAvL2lucHV0X29yX291dHB1dAogLy8gICAgOiBJTlBV
VCB7Ci0vLyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5l
LCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImlucHV0IikpCi0v
LyAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworLy8gICAgICAgIGlmIChjb250
ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQxLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSwgImlucHV0IikpCisvLyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
IC8vICAgICAgICBVTlBBQ0tfT05MWSgiaW5wdXQiLCAkMS5saW5lKTsKIC8vICAgICAgICAkJC5x
dWFsaWZpZXIgPSBFdnFJbnB1dDsKIC8vICAgIH0KIC8vICAgIHwgT1VUUFVUIHsKLS8vICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQxLmxpbmUsIHBhcnNlQ29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAib3V0cHV0IikpCi0vLyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworLy8gICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxF
cnJvckNoZWNrKCQxLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwg
Im91dHB1dCIpKQorLy8gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAvLyAgICAgICAg
UEFDS19PTkxZKCJvdXRwdXQiLCAkMS5saW5lKTsKIC8vICAgICAgICAkJC5xdWFsaWZpZXIgPSBF
dnFPdXRwdXQ7CiAvLyAgICB9CkBAIC0xNTE1LDEyICsxNDEyLDEyIEBAIHNpbmdsZV9kZWNsYXJh
dGlvbgogLy8KIC8vYnVmZmVyX2RlY2xhcmF0aW9uCiAvLyAgICA6IHR5cGVfc3BlY2lmaWVyIElE
RU5USUZJRVIgQ09MT04gY29uc3RhbnRfZXhwcmVzc2lvbiBTRU1JQ09MT04gewotLy8gICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5n
LCBwYXJzZUNvbnRleHQpKQotLy8gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
Ky8vICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5z
dHJpbmcsIGNvbnRleHQpKQorLy8gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAvLyAg
ICAgICAgJCQudmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQyLnN0cmluZywgJDEpOwotLy8gICAg
ICAgIGlmICghIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCokJC52YXJpYWJsZSkp
IHsKLS8vICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0
aW9uIiwgJCQudmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7Ci0vLyAgICAgICAgICAg
IHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworLy8gICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJv
bFRhYmxlLmluc2VydCgqJCQudmFyaWFibGUpKSB7CisvLyAgICAgICAgICAgIGNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICJyZWRlZmluaXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3Ry
KCksICIiKTsKKy8vICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogLy8gICAgICAgICAg
ICAvLyBkb24ndCBoYXZlIHRvIGRlbGV0ZSAkJC52YXJpYWJsZSwgdGhlIHBvb2wgcG9wIHdpbGwg
dGFrZSBjYXJlIG9mIGl0CiAvLyAgICAgICAgfQogLy8gICAgfQpAQCAtMTUzMSwzMSArMTQyOCwy
NyBAQCBmdWxseV9zcGVjaWZpZWRfdHlwZQogICAgICAgICAkJCA9ICQxOwogCiAgICAgICAgIGlm
ICgkMS5hcnJheSkgewotICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJy
b3JDaGVjaygkMS5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkgewotICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgICAgICQxLnNldEFycmF5
KGZhbHNlKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJub3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJDEuc2V0QXJyYXkoZmFsc2UpOwog
ICAgICAgICB9CiAgICAgfQogICAgIHwgdHlwZV9xdWFsaWZpZXIgdHlwZV9zcGVjaWZpZXIgIHsK
LSAgICAgICAgaWYgKCQyLmFycmF5ICYmIHBhcnNlQ29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVj
aygkMi5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkgewotICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAkMi5zZXRBcnJheShmYWxzZSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKCQyLmFycmF5ICYmIHBhcnNlQ29udGV4dC0+YXJyYXlRdWFsaWZp
ZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgIGlmICgkMi5hcnJheSkgeworICAgICAgICAgICAgY29udGV4dC0+
ZXJyb3IoJDIubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkMi5zZXRBcnJh
eShmYWxzZSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoJDEucXVhbGlmaWVyID09IEV2cUF0
dHJpYnV0ZSAmJgogICAgICAgICAgICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09
IEVidEludCkpIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNh
bm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAi
Iik7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZp
ZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOwogICAgICAgICB9CiAgICAgICAgIGlmICgoJDEucXVhbGlmaWVyID09IEV2cVZhcnlpbmdJ
biB8fCAkMS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKICAgICAgICAgICAgICgkMi50
eXBlID09IEVidEJvb2wgfHwgJDIudHlwZSA9PSBFYnRJbnQpKSB7Ci0gICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFs
aWZpZXJTdHJpbmcoJDEucXVhbGlmaWVyKSwgIiIpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiY2Fubm90
IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAkJCA9
ICQyOwogICAgICAgICAkJC5xdWFsaWZpZXIgPSAkMS5xdWFsaWZpZXI7CkBAIC0xNTY4LDI5ICsx
NDYxLDI5IEBAIHR5cGVfcXVhbGlmaWVyCiAgICAgfQogICAgIHwgQVRUUklCVVRFIHsKICAgICAg
ICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIsICQxLmxpbmUpOwotICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpLCAiYXR0cmlidXRlIikpCi0gICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soJDEu
bGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiYXR0cmlidXRlIikp
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICQkLnNldEJhc2ljKEVi
dFZvaWQsIEV2cUF0dHJpYnV0ZSwgJDEubGluZSk7CiAgICAgfQogICAgIHwgVkFSWUlORyB7Ci0g
ICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soJDEubGluZSwgcGFyc2VD
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ2YXJ5aW5nIikpCi0gICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
bGFuZ3VhZ2UgPT0gRVNoTGFuZ1ZlcnRleCkKKyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVy
cm9yQ2hlY2soJDEubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAi
dmFyeWluZyIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAo
Y29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQogICAgICAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ091dCwgJDEubGluZSk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJbiwgJDEubGluZSk7
CiAgICAgfQogICAgIHwgSU5WQVJJQU5UIFZBUllJTkcgewotICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmciKSkKLSAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSA9
PSBFU2hMYW5nVmVydGV4KQorICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygk
MS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJpbnZhcmlhbnQg
dmFyeWluZyIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAo
Y29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQogICAgICAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ091dCwgJDEubGluZSk7CiAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZh
cnlpbmdJbiwgJDEubGluZSk7CiAgICAgfQogICAgIHwgVU5JRk9STSB7Ci0gICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCi0gICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2so
JDEubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9ybSIp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAkJC5zZXRCYXNpYyhF
YnRWb2lkLCBFdnFVbmlmb3JtLCAkMS5saW5lKTsKICAgICB9CiAgICAgOwpAQCAtMTYyNCwxMiAr
MTUxNywxMiBAQCB0eXBlX3NwZWNpZmllcl9ub19wcmVjCiAgICAgfCB0eXBlX3NwZWNpZmllcl9u
b25hcnJheSBMRUZUX0JSQUNLRVQgY29uc3RhbnRfZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsK
ICAgICAgICAgJCQgPSAkMTsKIAotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVF
cnJvckNoZWNrKCQyLmxpbmUsICQxKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkMi5saW5lLCAk
MSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNp
emVFcnJvckNoZWNrKCQyLmxpbmUsICQzLCBzaXplKSkKLSAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJv
ckNoZWNrKCQyLmxpbmUsICQzLCBzaXplKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgICAgICAkJC5zZXRBcnJheSh0cnVlLCBzaXplKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTE2MzcsMTAzICsxNTMwLDEwMyBAQCB0eXBlX3NwZWNpZmllcl9ub19wcmVjCiAK
IHR5cGVfc3BlY2lmaWVyX25vbmFycmF5CiAgICAgOiBWT0lEX1RZUEUgewotICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCAkMS5saW5lKTsKICAgICB9
CiAgICAgfCBGTE9BVF9UWVBFIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOwogICAgIH0KICAgICB8IElOVF9UWVBFIHsKLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAkMS5saW5l
KTsKICAgICB9CiAgICAgfCBCT09MX1RZUEUgewotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAk
JC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAkMS5saW5lKTsKICAgICB9CiAvLyAgICB8IFVOU0lH
TkVEIElOVF9UWVBFIHsKIC8vICAgICAgICBQQUNLX1VOUEFDS19PTkxZKCJ1bnNpZ25lZCIsICQx
LmxpbmUpOwotLy8gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworLy8gICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKIC8vICAgICAgICAkJC5zZXRCYXNpYyhFYnRJ
bnQsIHF1YWwsICQxLmxpbmUpOwogLy8gICAgfQogICAgIHwgVkVDMiB7Ci0gICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250
ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jh
cnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKICAgICAg
ICAgJCQuc2V0QWdncmVnYXRlKDIpOwogICAgIH0KICAgICB8IFZFQzMgewotICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7CiAgICAg
ICAgICQkLnNldEFnZ3JlZ2F0ZSgzKTsKICAgICB9CiAgICAgfCBWRUM0IHsKLSAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkg
PyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOwogICAg
ICAgICAkJC5zZXRBZ2dyZWdhdGUoNCk7CiAgICAgfQogICAgIHwgQlZFQzIgewotICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAkMS5saW5lKTsKICAg
ICAgICAgJCQuc2V0QWdncmVnYXRlKDIpOwogICAgIH0KICAgICB8IEJWRUMzIHsKLSAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgJDEubGluZSk7CiAg
ICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgzKTsKICAgICB9CiAgICAgfCBCVkVDNCB7Ci0gICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICQxLmxpbmUpOwog
ICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoNCk7CiAgICAgfQogICAgIHwgSVZFQzIgewotICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICQxLmxpbmUpOwog
ICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMik7CiAgICAgfQogICAgIHwgSVZFQzMgewotICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICQxLmxpbmUpOwog
ICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMyk7CiAgICAgfQogICAgIHwgSVZFQzQgewotICAgICAg
ICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2
ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICQxLmxpbmUpOwog
ICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoNCk7CiAgICAgfQogICAgIHwgTUFUUklYMiB7CiAgICAg
ICAgIEZSQUdfVkVSVF9PTkxZKCJtYXQyIiwgJDEubGluZSk7Ci0gICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xv
YmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5z
eW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAg
ICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKICAgICAgICAgJCQu
c2V0QWdncmVnYXRlKDIsIHRydWUpOwogICAgIH0KICAgICB8IE1BVFJJWDMgewogICAgICAgICBG
UkFHX1ZFUlRfT05MWSgibWF0MyIsICQxLmxpbmUpOwotICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAg
ICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7CiAgICAgICAgICQkLnNldEFn
Z3JlZ2F0ZSgzLCB0cnVlKTsKICAgICB9CiAgICAgfCBNQVRSSVg0IHsKICAgICAgICAgRlJBR19W
RVJUX09OTFkoIm1hdDQiLCAkMS5saW5lKTsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgJCQu
c2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOwogICAgICAgICAkJC5zZXRBZ2dyZWdh
dGUoNCwgdHJ1ZSk7CiAgICAgfQogICAgIHwgU0FNUExFUjJEIHsKICAgICAgICAgRlJBR19WRVJU
X09OTFkoInNhbXBsZXIyRCIsICQxLmxpbmUpOwotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAk
JC5zZXRCYXNpYyhFYnRTYW1wbGVyMkQsIHF1YWwsICQxLmxpbmUpOwogICAgIH0KICAgICB8IFNB
TVBMRVJDVUJFIHsKICAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXJDdWJlIiwgJDEubGlu
ZSk7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidFNhbXBsZXJDdWJl
LCBxdWFsLCAkMS5saW5lKTsKICAgICB9CiAgICAgfCBzdHJ1Y3Rfc3BlY2lmaWVyIHsKICAgICAg
ICAgRlJBR19WRVJUX09OTFkoInN0cnVjdCIsICQxLmxpbmUpOwogICAgICAgICAkJCA9ICQxOwot
ICAgICAgICAkJC5xdWFsaWZpZXIgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgJCQucXVhbGlmaWVy
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OwogICAgIH0KICAgICB8IFRZUEVfTkFNRSB7CiAgICAgICAgIC8vCkBAIC0xNzQx
LDcgKzE2MzQsNyBAQCB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogICAgICAgICAvLyB0eXBlLgog
ICAgICAgICAvLwogICAgICAgICBUVHlwZSYgc3RydWN0dXJlID0gc3RhdGljX2Nhc3Q8VFZhcmlh
YmxlKj4oJDEuc3ltYm9sKS0+Z2V0VHlwZSgpOwotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFi
bGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAk
JC5zZXRCYXNpYyhFYnRTdHJ1Y3QsIHF1YWwsICQxLmxpbmUpOwogICAgICAgICAkJC51c2VyRGVm
ID0gJnN0cnVjdHVyZTsKICAgICB9CkBAIC0xNzQ5LDE0ICsxNjQyLDE0IEBAIHR5cGVfc3BlY2lm
aWVyX25vbmFycmF5CiAKIHN0cnVjdF9zcGVjaWZpZXIKICAgICA6IFNUUlVDVCBJREVOVElGSUVS
IExFRlRfQlJBQ0Ugc3RydWN0X2RlY2xhcmF0aW9uX2xpc3QgUklHSFRfQlJBQ0UgewotICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmlu
ZykpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNv
bnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3
IFRUeXBlKCQ0LCAqJDIuc3RyaW5nKTsKICAgICAgICAgVFZhcmlhYmxlKiB1c2VyVHlwZURlZiA9
IG5ldyBUVmFyaWFibGUoJDIuc3RyaW5nLCAqc3RydWN0dXJlLCB0cnVlKTsKLSAgICAgICAgaWYg
KCEgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnVzZXJUeXBlRGVmKSkgewotICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAicmVkZWZpbml0aW9uIiwgJDIu
c3RyaW5nLT5jX3N0cigpLCAic3RydWN0Iik7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2Vy
VHlwZURlZikpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJyZWRlZmlu
aXRpb24iLCAkMi5zdHJpbmctPmNfc3RyKCksICJzdHJ1Y3QiKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAkJC5zZXRCYXNpYyhFYnRTdHJ1Y3Qs
IEV2cVRlbXBvcmFyeSwgJDEubGluZSk7CiAgICAgICAgICQkLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7
CkBAIC0xNzc3LDggKzE2NzAsOCBAQCBzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdAogICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8ICQyLT5zaXplKCk7ICsraSkgewogICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaiA9IDA7IGogPCAkJC0+c2l6ZSgpOyArK2opIHsKICAgICAg
ICAgICAgICAgICBpZiAoKCokJClbal0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0gKCokMilbaV0u
dHlwZS0+Z2V0RmllbGROYW1lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5lcnJvcigoKiQyKVtpXS5saW5lLCAiZHVwbGljYXRlIGZpZWxkIG5hbWUgaW4gc3RydWN0dXJl
OiIsICJzdHJ1Y3QiLCAoKiQyKVtpXS50eXBlLT5nZXRGaWVsZE5hbWUoKS5jX3N0cigpKTsKLSAg
ICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCgqJDIpW2ldLmxpbmUsICJkdXBsaWNhdGUgZmllbGQgbmFt
ZSBpbiBzdHJ1Y3R1cmU6IiwgInN0cnVjdCIsICgqJDIpW2ldLnR5cGUtPmdldEZpZWxkTmFtZSgp
LmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgJCQtPnB1c2hfYmFjaygo
KiQyKVtpXSk7CkBAIC0xNzkwLDggKzE2ODMsOCBAQCBzdHJ1Y3RfZGVjbGFyYXRpb24KICAgICA6
IHR5cGVfc3BlY2lmaWVyIHN0cnVjdF9kZWNsYXJhdG9yX2xpc3QgU0VNSUNPTE9OIHsKICAgICAg
ICAgJCQgPSAkMjsKIAotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT52b2lkRXJyb3JDaGVjaygk
MS5saW5lLCAoKiQyKVswXS50eXBlLT5nZXRGaWVsZE5hbWUoKSwgJDEpKSB7Ci0gICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJv
ckNoZWNrKCQxLmxpbmUsICgqJDIpWzBdLnR5cGUtPmdldEZpZWxkTmFtZSgpLCAkMSkpIHsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8ICQkLT5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgLy8K
QEAgLTE4MDQsOCArMTY5Nyw4IEBAIHN0cnVjdF9kZWNsYXJhdGlvbgogCiAgICAgICAgICAgICAv
LyBkb24ndCBhbGxvdyBhcnJheXMgb2YgYXJyYXlzCiAgICAgICAgICAgICBpZiAodHlwZS0+aXNB
cnJheSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJy
b3JDaGVjaygkMS5saW5lLCAkMSkpCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNo
ZWNrKCQxLmxpbmUsICQxKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCQxLmFycmF5KQogICAgICAgICAgICAg
ICAgIHR5cGUtPnNldEFycmF5U2l6ZSgkMS5hcnJheVNpemUpOwpAQCAtMTgyOSwyNCArMTcyMiwy
NCBAQCBzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0CiAKIHN0cnVjdF9kZWNsYXJhdG9yCiAgICAgOiBJ
REVOVElGSUVSIHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNr
KCQxLmxpbmUsICokMS5zdHJpbmcpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDEubGluZSwgKiQx
LnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgJCQu
dHlwZSA9IG5ldyBUVHlwZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwogICAgICAgICAkJC5saW5l
ID0gJDEubGluZTsKICAgICAgICAgJCQudHlwZS0+c2V0RmllbGROYW1lKCokMS5zdHJpbmcpOwog
ICAgIH0KICAgICB8IElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24g
UklHSFRfQlJBQ0tFVCB7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JD
aGVjaygkMS5saW5lLCAqJDEuc3RyaW5nKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQxLmxpbmUs
ICokMS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAg
ICQkLnR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgJCQu
bGluZSA9ICQxLmxpbmU7CiAgICAgICAgICQkLnR5cGUtPnNldEZpZWxkTmFtZSgqJDEuc3RyaW5n
KTsKIAogICAgICAgICBpbnQgc2l6ZTsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlT
aXplRXJyb3JDaGVjaygkMi5saW5lLCAkMywgc2l6ZSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2so
JDIubGluZSwgJDMsIHNpemUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAkJC50eXBlLT5zZXRBcnJheVNpemUoc2l6ZSk7CiAgICAgfQogICAgIDsKQEAgLTE4NzYs
NyArMTc2OSw3IEBAIHNpbXBsZV9zdGF0ZW1lbnQKIAogY29tcG91bmRfc3RhdGVtZW50CiAgICAg
OiBMRUZUX0JSQUNFIFJJR0hUX0JSQUNFIHsgJCQgPSAwOyB9Ci0gICAgfCBMRUZUX0JSQUNFIHsg
cGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0gc3RhdGVtZW50X2xpc3QgeyBwYXJz
ZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyB9IFJJR0hUX0JSQUNFIHsKKyAgICB8IExFRlRf
QlJBQ0UgeyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IH0gc3RhdGVtZW50X2xpc3QgeyBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgfSBSSUdIVF9CUkFDRSB7CiAgICAgICAgIGlmICgk
MyAhPSAwKQogICAgICAgICAgICAgJDMtPnNldE9wKEVPcFNlcXVlbmNlKTsKICAgICAgICAgJCQg
PSAkMzsKQEAgLTE5MDIsMTAgKzE3OTUsMTAgQEAgY29tcG91bmRfc3RhdGVtZW50X25vX25ld19z
Y29wZQogCiBzdGF0ZW1lbnRfbGlzdAogICAgIDogc3RhdGVtZW50IHsKLSAgICAgICAgJCQgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKCQxLCAwKTsKKyAgICAgICAg
JCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZSgkMSwgMCk7CiAgICAgfQog
ICAgIHwgc3RhdGVtZW50X2xpc3Qgc3RhdGVtZW50IHsKLSAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLCAkMiwgMCk7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQyLCAwKTsKICAgICB9CiAg
ICAgOwogCkBAIC0xOTE2LDkgKzE4MDksOSBAQCBleHByZXNzaW9uX3N0YXRlbWVudAogCiBzZWxl
Y3Rpb25fc3RhdGVtZW50CiAgICAgOiBJRiBMRUZUX1BBUkVOIGV4cHJlc3Npb24gUklHSFRfUEFS
RU4gc2VsZWN0aW9uX3Jlc3Rfc3RhdGVtZW50IHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
Ym9vbEVycm9yQ2hlY2soJDEubGluZSwgJDMpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU2Vs
ZWN0aW9uKCQzLCAkNSwgJDEubGluZSk7CisgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JD
aGVjaygkMS5saW5lLCAkMykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigkMywgJDUsICQxLmxp
bmUpOwogICAgIH0KICAgICA7CiAKQEAgLTE5MzksNDIgKzE4MzIsNDIgQEAgY29uZGl0aW9uCiAg
ICAgLy8gSW4gMTk5NiBjKysgZHJhZnQsIGNvbmRpdGlvbnMgY2FuIGluY2x1ZGUgc2luZ2xlIGRl
Y2xhcmF0aW9ucwogICAgIDogZXhwcmVzc2lvbiB7CiAgICAgICAgICQkID0gJDE7Ci0gICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQxLT5nZXRMaW5lKCksICQxKSkKLSAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+
Ym9vbEVycm9yQ2hlY2soJDEtPmdldExpbmUoKSwgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgIH0KICAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIg
RVFVQUwgaW5pdGlhbGl6ZXIgewogICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5l
LCAkMSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2soJDIubGluZSwgJDEpKQotICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFs
aWZpZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAotICAgICAgICBpZiAoIXBhcnNlQ29u
dGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCQyLmxpbmUsICokMi5zdHJpbmcsICQxLCAkNCwgaW50
ZXJtTm9kZSkpCisgICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCQyLmxp
bmUsICokMi5zdHJpbmcsICQxLCAkNCwgaW50ZXJtTm9kZSkpCiAgICAgICAgICAgICAkJCA9ICQ0
OwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgJCQgPSAwOwogICAg
ICAgICB9CiAgICAgfQogICAgIDsKIAogaXRlcmF0aW9uX3N0YXRlbWVudAotICAgIDogV0hJTEUg
TEVGVF9QQVJFTiB7IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK3BhcnNlQ29u
dGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfSBjb25kaXRpb24gUklHSFRfUEFSRU4gc3RhdGVtZW50
X25vX25ld19zY29wZSB7Ci0gICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7
Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcCgwLCAkNiwg
JDQsIDAsIHRydWUsICQxLmxpbmUpOwotICAgICAgICAtLXBhcnNlQ29udGV4dC0+bG9vcE5lc3Rp
bmdMZXZlbDsKLSAgICB9Ci0gICAgfCBETyB7ICsrcGFyc2VDb250ZXh0LT5sb29wTmVzdGluZ0xl
dmVsOyB9IHN0YXRlbWVudCBXSElMRSBMRUZUX1BBUkVOIGV4cHJlc3Npb24gUklHSFRfUEFSRU4g
U0VNSUNPTE9OIHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Ym9vbEVycm9yQ2hlY2soJDgu
bGluZSwgJDYpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAg
ICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKDAsICQzLCAkNiwgMCwg
ZmFsc2UsICQ0LmxpbmUpOwotICAgICAgICAtLXBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZl
bDsKLSAgICB9Ci0gICAgfCBGT1IgTEVGVF9QQVJFTiB7IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUucHVzaCgpOyArK3BhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfSBmb3JfaW5pdF9z
dGF0ZW1lbnQgZm9yX3Jlc3Rfc3RhdGVtZW50IFJJR0hUX1BBUkVOIHN0YXRlbWVudF9ub19uZXdf
c2NvcGUgewotICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgICAg
ICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoJDQsICQ3LCByZWludGVy
cHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCQ1Lm5vZGUxKSwgcmVpbnRlcnByZXRfY2FzdDxUSW50
ZXJtVHlwZWQqPigkNS5ub2RlMiksIHRydWUsICQxLmxpbmUpOwotICAgICAgICAtLXBhcnNlQ29u
dGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICA6IFdISUxFIExFRlRfUEFSRU4geyBjb250ZXh0
LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfSBjb25k
aXRpb24gUklHSFRfUEFSRU4gc3RhdGVtZW50X25vX25ld19zY29wZSB7CisgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRMb29wKEVMb29wV2hpbGUsIDAsICQ0LCAwLCAkNiwgJDEubGluZSk7CisgICAgICAgIC0t
Y29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICB9CisgICAgfCBETyB7ICsrY29udGV4dC0+
bG9vcE5lc3RpbmdMZXZlbDsgfSBzdGF0ZW1lbnQgV0hJTEUgTEVGVF9QQVJFTiBleHByZXNzaW9u
IFJJR0hUX1BBUkVOIFNFTUlDT0xPTiB7CisgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JD
aGVjaygkOC5saW5lLCAkNikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcERvV2hpbGUsIDAs
ICQ2LCAwLCAkMywgJDQubGluZSk7CisgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZl
bDsKKyAgICB9CisgICAgfCBGT1IgTEVGVF9QQVJFTiB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnB1
c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9IGZvcl9pbml0X3N0YXRlbWVudCBm
b3JfcmVzdF9zdGF0ZW1lbnQgUklHSFRfUEFSRU4gc3RhdGVtZW50X25vX25ld19zY29wZSB7Cisg
ICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wRm9yLCAkNCwgcmVpbnRlcnByZXRfY2FzdDxUSW50
ZXJtVHlwZWQqPigkNS5ub2RlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4oJDUu
bm9kZTIpLCAkNywgJDEubGluZSk7CisgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZl
bDsKICAgICB9CiAgICAgOwogCkBAIC0yMDA5LDQwICsxOTAyLDQwIEBAIGZvcl9yZXN0X3N0YXRl
bWVudAogCiBqdW1wX3N0YXRlbWVudAogICAgIDogQ09OVElOVUUgU0VNSUNPTE9OIHsKLSAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Ci0gICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBh
bGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiY29udGludWUgc3RhdGVtZW50IG9u
bHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIH0KLSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICQxLmxpbmUpOworICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUsICQxLmxpbmUpOwogICAgIH0KICAg
ICB8IEJSRUFLIFNFTUlDT0xPTiB7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxvb3BOZXN0
aW5nTGV2ZWwgPD0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5l
LCAiYnJlYWsgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7Ci0gICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxv
b3BOZXN0aW5nTGV2ZWwgPD0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGlu
ZSwgImJyZWFrIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMiLCAiIiwgIiIpOworICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9Ci0gICAgICAgICQkID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEJyZWFrLCAkMS5saW5lKTsKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEJyZWFrLCAkMS5s
aW5lKTsKICAgICB9CiAgICAgfCBSRVRVUk4gU0VNSUNPTE9OIHsKLSAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAkMS5saW5lKTsKLSAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBl
KCkgIT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5l
LCAibm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7
Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgJDEubGluZSk7CisgICAgICAg
IGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRW
b2lkKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAibm9uLXZvaWQgZnVu
Y3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgfCBSRVRVUk4gZXhwcmVz
c2lvbiBTRU1JQ09MT04gewotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJyYW5jaChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKLSAgICAgICAgcGFyc2VDb250ZXh0
LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKLSAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90
IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICB9IGVsc2UgaWYgKCoocGFyc2VDb250ZXh0LT5jdXJyZW50
RnVuY3Rpb25UeXBlKSAhPSAkMi0+Z2V0VHlwZSgpKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6
IiwgInJldHVybiIsICIiKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAk
MiwgJDEubGluZSk7CisgICAgICAgIGNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlID0gdHJ1
ZTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlw
ZSgpID09IEVidFZvaWQpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJ2
b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSBpZiAoKihjb250ZXh0
LT5jdXJyZW50RnVuY3Rpb25UeXBlKSAhPSAkMi0+Z2V0VHlwZSgpKSB7CisgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gcmV0dXJuIGlzIG5vdCBtYXRjaGluZyB0
eXBlOiIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgfCBESVNDQVJEIFNFTUlDT0xPTiB7CiAgICAgICAgIEZSQUdf
T05MWSgiZGlzY2FyZCIsICQxLmxpbmUpOwotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BLaWxsLCAkMS5saW5lKTsKKyAgICAgICAgJCQgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcEtpbGwsICQxLmxpbmUpOwogICAgIH0KICAg
ICA7CiAKQEAgLTIwNTEsMTEgKzE5NDQsMTEgQEAganVtcF9zdGF0ZW1lbnQKIHRyYW5zbGF0aW9u
X3VuaXQKICAgICA6IGV4dGVybmFsX2RlY2xhcmF0aW9uIHsKICAgICAgICAgJCQgPSAkMTsKLSAg
ICAgICAgcGFyc2VDb250ZXh0LT50cmVlUm9vdCA9ICQkOworICAgICAgICBjb250ZXh0LT50cmVl
Um9vdCA9ICQkOwogICAgIH0KICAgICB8IHRyYW5zbGF0aW9uX3VuaXQgZXh0ZXJuYWxfZGVjbGFy
YXRpb24gewotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dy
ZWdhdGUoJDEsICQyLCAwKTsKLSAgICAgICAgcGFyc2VDb250ZXh0LT50cmVlUm9vdCA9ICQkOwor
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLCAkMiwg
MCk7CisgICAgICAgIGNvbnRleHQtPnRyZWVSb290ID0gJCQ7CiAgICAgfQogICAgIDsKIApAQCAt
MjA3MCw4ICsxOTYzLDggQEAgZXh0ZXJuYWxfZGVjbGFyYXRpb24KIAogZnVuY3Rpb25fZGVmaW5p
dGlvbgogICAgIDogZnVuY3Rpb25fcHJvdG90eXBlIHsKLSAgICAgICAgVEZ1bmN0aW9uJiBmdW5j
dGlvbiA9ICooJDEuZnVuY3Rpb24pOwotICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0
aWNfY2FzdDxURnVuY3Rpb24qPihwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rp
b24uZ2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICBURnVuY3Rpb24qIGZ1bmN0aW9uID0gJDEu
ZnVuY3Rpb247CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9IHN0YXRpY19jYXN0PFRGdW5j
dGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVuY3Rpb24tPmdldE1hbmdsZWROYW1l
KCkpKTsKICAgICAgICAgLy8KICAgICAgICAgLy8gTm90ZTogICdwcmV2RGVjJyBjb3VsZCBiZSAn
ZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgc2VlbiBmdW5jdGlvbgog
ICAgICAgICAvLyBhcyBpdCB3b3VsZCBoYXZlIGp1c3QgYmVlbiBwdXQgaW4gdGhlIHN5bWJvbCB0
YWJsZS4gIE90aGVyd2lzZSwgd2UncmUgbG9va2luZyB1cApAQCAtMjA4MSwzNSArMTk3NCwzNSBA
QCBmdW5jdGlvbl9kZWZpbml0aW9uCiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gVGhl
biB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAgICAgICAgIC8vCi0gICAg
ICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBhbHJlYWR5IGhh
cyBhIGJvZHkiLCBmdW5jdGlvbi5nZXROYW1lKCkuY19zdHIoKSwgIiIpOwotICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5s
aW5lLCAiZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5j
X3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0K
ICAgICAgICAgcHJldkRlYy0+c2V0RGVmaW5lZCgpOwogCiAgICAgICAgIC8vCiAgICAgICAgIC8v
IFJhaXNlIGVycm9yIG1lc3NhZ2UgaWYgbWFpbiBmdW5jdGlvbiB0YWtlcyBhbnkgcGFyYW1ldGVy
cyBvciByZXR1cm4gYW55dGhpbmcgb3RoZXIgdGhhbiB2b2lkCiAgICAgICAgIC8vCi0gICAgICAg
IGlmIChmdW5jdGlvbi5nZXROYW1lKCkgPT0gIm1haW4iKSB7Ci0gICAgICAgICAgICBpZiAoZnVu
Y3Rpb24uZ2V0UGFyYW1Db3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocyki
LCBmdW5jdGlvbi5nZXROYW1lKCkuY19zdHIoKSwgIiIpOwotICAgICAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZ1bmN0
aW9uLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0gICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiIiwgZnVuY3Rpb24uZ2V0UmV0
dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICJtYWluIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4g
YSB2YWx1ZSIpOwotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsKKyAgICAgICAgICAgIGlm
IChmdW5jdGlvbi0+Z2V0UGFyYW1Db3VudCgpID4gMCkgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFyYW1ldGVyKHMp
IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZ1bmN0aW9u
LT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICIiLCBmdW5jdGlvbi0+Z2V0UmV0dXJuVHlw
ZSgpLmdldEJhc2ljU3RyaW5nKCksICJtYWluIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1
ZSIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogCiAgICAgICAgIC8vCiAgICAgICAgIC8vIE5ldyBzeW1ib2wgdGFibGUgc2Nv
cGUgZm9yIGJvZHkgb2YgZnVuY3Rpb24gcGx1cyBpdHMgYXJndW1lbnRzCiAgICAgICAgIC8vCi0g
ICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOworICAgICAgICBjb250ZXh0
LT5zeW1ib2xUYWJsZS5wdXNoKCk7CiAKICAgICAgICAgLy8KICAgICAgICAgLy8gUmVtZW1iZXIg
dGhlIHJldHVybiB0eXBlIGZvciBsYXRlciBjaGVja2luZyBmb3IgUkVUVVJOIHN0YXRlbWVudHMu
CiAgICAgICAgIC8vCi0gICAgICAgIHBhcnNlQ29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSA9
ICYocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpKTsKLSAgICAgICAgcGFyc2VDb250ZXh0LT5mdW5j
dGlvblJldHVybnNWYWx1ZSA9IGZhbHNlOworICAgICAgICBjb250ZXh0LT5jdXJyZW50RnVuY3Rp
b25UeXBlID0gJihwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkpOworICAgICAgICBjb250ZXh0LT5m
dW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNlOwogCiAgICAgICAgIC8vCiAgICAgICAgIC8vIElu
c2VydCBwYXJhbWV0ZXJzIGludG8gdGhlIHN5bWJvbCB0YWJsZS4KQEAgLTIxMjAsNTkgKzIwMTMs
NjAgQEAgZnVuY3Rpb25fZGVmaW5pdGlvbgogICAgICAgICAvLyBrbm93cyB3aGVyZSB0byBmaW5k
IHBhcmFtZXRlcnMuCiAgICAgICAgIC8vCiAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIHBhcmFt
Tm9kZXMgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBmdW5jdGlvbi5nZXRQYXJhbUNvdW50KCk7IGkrKykgewotICAgICAgICAgICAgVFBhcmFtZXRl
ciYgcGFyYW0gPSBmdW5jdGlvbltpXTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmdW5j
dGlvbi0+Z2V0UGFyYW1Db3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIGNvbnN0IFRQYXJhbWV0
ZXImIHBhcmFtID0gZnVuY3Rpb24tPmdldFBhcmFtKGkpOwogICAgICAgICAgICAgaWYgKHBhcmFt
Lm5hbWUgIT0gMCkgewogICAgICAgICAgICAgICAgIFRWYXJpYWJsZSAqdmFyaWFibGUgPSBuZXcg
VFZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKICAgICAgICAgICAgICAgICAvLwog
ICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgcGFyYW1ldGVycyB3aXRoIG5hbWUgaW4gdGhl
IHN5bWJvbCB0YWJsZS4KICAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIGlmICgh
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp2YXJpYWJsZSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAicmVkZWZpbml0aW9uIiwg
dmFyaWFibGUtPmdldE5hbWUoKS5jX3N0cigpLCAiIik7Ci0gICAgICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGlmICghIGNvbnRleHQtPnN5
bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQxLmxpbmUsICJyZWRlZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNf
c3RyKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgICAgICAgICBkZWxldGUgdmFyaWFibGU7CiAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gVHJhbnNmZXIgb3duZXJzaGlwIG9m
IG5hbWUgcG9pbnRlciB0byBzeW1ib2wgdGFibGUuCi0gICAgICAgICAgICAgICAgLy8KLSAgICAg
ICAgICAgICAgICBwYXJhbS5uYW1lID0gMDsKIAogICAgICAgICAgICAgICAgIC8vCiAgICAgICAg
ICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIgdG8gdGhlIEhJTAogICAgICAgICAgICAgICAg
IC8vCi0gICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoCisgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJhbU5vZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1i
b2wodmFyaWFibGUtPmdldFVuaXF1ZUlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFi
bGUtPmdldFVuaXF1ZUlkKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksICQxLmxpbmUpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkMS5saW5lKTsKICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocGFyYW1Ob2RlcywgcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0udHlwZSwgJDEubGluZSksICQxLmxpbmUpOwor
ICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0Fn
Z3JlZ2F0ZShwYXJhbU5vZGVzLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIi
LCAqcGFyYW0udHlwZSwgJDEubGluZSksICQxLmxpbmUpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJh
dG9yKHBhcmFtTm9kZXMsIEVPcFBhcmFtZXRlcnMsICQxLmxpbmUpOworICAgICAgICBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IocGFyYW1Ob2RlcywgRU9wUGFyYW1l
dGVycywgJDEubGluZSk7CiAgICAgICAgICQxLmludGVybUFnZ3JlZ2F0ZSA9IHBhcmFtTm9kZXM7
Ci0gICAgICAgIHBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA9IDA7CisgICAgICAgIGNv
bnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPSAwOwogICAgIH0KICAgICBjb21wb3VuZF9zdGF0ZW1l
bnRfbm9fbmV3X3Njb3BlIHsKICAgICAgICAgLy8/PyBDaGVjayB0aGF0IGFsbCBwYXRocyByZXR1
cm4gYSB2YWx1ZSBpZiByZXR1cm4gdHlwZSAhPSB2b2lkID8KICAgICAgICAgLy8gICBNYXkgYmUg
YmVzdCBkb25lIGFzIHBvc3QgcHJvY2VzcyBwaGFzZSBvbiBpbnRlcm1lZGlhdGUgY29kZQotICAg
ICAgICBpZiAocGFyc2VDb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUo
KSAhPSBFYnRWb2lkICYmICEgcGFyc2VDb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSkgewot
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24gZG9lcyBu
b3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICQxLmZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7
Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgfQotICAgICAg
ICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOwotICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtQWdncmVnYXRlLCAkMywg
MCk7Ci0gICAgICAgIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJh
dG9yKCQkLCBFT3BGdW5jdGlvbiwgJDEubGluZSk7CisgICAgICAgIGlmIChjb250ZXh0LT5jdXJy
ZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkICYmICEgY29udGV4dC0+
ZnVuY3Rpb25SZXR1cm5zVmFsdWUpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxp
bmUsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAiIiwgJDEuZnVuY3Rpb24t
PmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgfQorICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1BZ2dyZWdhdGUs
ICQzLCAwKTsKKyAgICAgICAgY29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJh
dG9yKCQkLCBFT3BGdW5jdGlvbiwgJDEubGluZSk7CiAgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0
ZSgpLT5zZXROYW1lKCQxLmZ1bmN0aW9uLT5nZXRNYW5nbGVkTmFtZSgpLmNfc3RyKCkpOwogICAg
ICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VHlwZSgkMS5mdW5jdGlvbi0+Z2V0UmV0dXJu
VHlwZSgpKTsKIAogICAgICAgICAvLyBzdG9yZSB0aGUgcHJhZ21hIGluZm9ybWF0aW9uIGZvciBk
ZWJ1ZyBhbmQgb3B0aW1pemUgYW5kIG90aGVyIHZlbmRvciBzcGVjaWZpYwogICAgICAgICAvLyBp
bmZvcm1hdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgcXVlcmllZCBmcm9tIHRoZSBwYXJz
ZSB0cmVlCi0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRPcHRpbWl6ZShwYXJzZUNv
bnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1pemUpOwotICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdh
dGUoKS0+c2V0RGVidWcocGFyc2VDb250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnKTsKLSAgICAg
ICAgJCQtPmdldEFzQWdncmVnYXRlKCktPmFkZFRvUHJhZ21hVGFibGUocGFyc2VDb250ZXh0LT5j
b250ZXh0UHJhZ21hLnByYWdtYVRhYmxlKTsKKyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCkt
PnNldE9wdGltaXplKGNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1pemUpOworICAgICAgICAk
JC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0RGVidWcoY29udGV4dC0+Y29udGV4dFByYWdtYS5kZWJ1
Zyk7CisgICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5hZGRUb1ByYWdtYVRhYmxlKGNvbnRl
eHQtPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGUpOwogICAgIH0KICAgICA7CiAKICUlCisKK2lu
dCBnbHNsYW5nX3BhcnNlKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKKyAgICByZXR1cm4geXlw
YXJzZShjb250ZXh0KTsKK30KKwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2dsc2xhbmdfbGV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfbGV4LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzMTg2IEBACisjbGluZSAxNyAiY29tcGlsZXIvZ2xzbGFuZy5sIgorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9n
bHNsYW5nX2xleGVyLnNoLiBETyBOT1QgRURJVCEKKworCisKKyNsaW5lIDEzICJjb21waWxlci9n
bHNsYW5nX2xleC5jcHAiCisKKyNkZWZpbmUgIFlZX0lOVF9BTElHTkVEIHNob3J0IGludAorCisv
KiBBIGxleGljYWwgc2Nhbm5lciBnZW5lcmF0ZWQgYnkgZmxleCAqLworCisjZGVmaW5lIEZMRVhf
U0NBTk5FUgorI2RlZmluZSBZWV9GTEVYX01BSk9SX1ZFUlNJT04gMgorI2RlZmluZSBZWV9GTEVY
X01JTk9SX1ZFUlNJT04gNQorI2RlZmluZSBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gMzUKKyNp
ZiBZWV9GTEVYX1NVQk1JTk9SX1ZFUlNJT04gPiAwCisjZGVmaW5lIEZMRVhfQkVUQQorI2VuZGlm
CisKKy8qIEZpcnN0LCB3ZSBkZWFsIHdpdGggIHBsYXRmb3JtLXNwZWNpZmljIG9yIGNvbXBpbGVy
LXNwZWNpZmljIGlzc3Vlcy4gKi8KKworLyogYmVnaW4gc3RhbmRhcmQgQyBoZWFkZXJzLiAqLwor
I2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8u
aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogZW5kIHN0YW5kYXJkIEMgaGVhZGVycy4gKi8K
KworLyogZmxleCBpbnRlZ2VyIHR5cGUgZGVmaW5pdGlvbnMgKi8KKworI2lmbmRlZiBGTEVYSU5U
X0gKKyNkZWZpbmUgRkxFWElOVF9ICisKKy8qIEM5OSBzeXN0ZW1zIGhhdmUgPGludHR5cGVzLmg+
LiBOb24tQzk5IHN5c3RlbXMgbWF5IG9yIG1heSBub3QuICovCisKKyNpZiBkZWZpbmVkIChfX1NU
RENfVkVSU0lPTl9fKSAmJiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKKworLyogQzk5IHNh
eXMgdG8gZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgYmVmb3JlIGluY2x1ZGluZyBzdGRpbnQu
aCwKKyAqIGlmIHlvdSB3YW50IHRoZSBsaW1pdCAobWF4L21pbikgbWFjcm9zIGZvciBpbnQgdHlw
ZXMuIAorICovCisjaWZuZGVmIF9fU1REQ19MSU1JVF9NQUNST1MKKyNkZWZpbmUgX19TVERDX0xJ
TUlUX01BQ1JPUyAxCisjZW5kaWYKKworI2luY2x1ZGUgPGludHR5cGVzLmg+Cit0eXBlZGVmIGlu
dDhfdCBmbGV4X2ludDhfdDsKK3R5cGVkZWYgdWludDhfdCBmbGV4X3VpbnQ4X3Q7Cit0eXBlZGVm
IGludDE2X3QgZmxleF9pbnQxNl90OwordHlwZWRlZiB1aW50MTZfdCBmbGV4X3VpbnQxNl90Owor
dHlwZWRlZiBpbnQzMl90IGZsZXhfaW50MzJfdDsKK3R5cGVkZWYgdWludDMyX3QgZmxleF91aW50
MzJfdDsKKyNlbHNlCit0eXBlZGVmIHNpZ25lZCBjaGFyIGZsZXhfaW50OF90OwordHlwZWRlZiBz
aG9ydCBpbnQgZmxleF9pbnQxNl90OwordHlwZWRlZiBpbnQgZmxleF9pbnQzMl90OwordHlwZWRl
ZiB1bnNpZ25lZCBjaGFyIGZsZXhfdWludDhfdDsgCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu
dCBmbGV4X3VpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxleF91aW50MzJfdDsKKyNl
bmRpZiAvKiAhIEM5OSAqLworCisvKiBMaW1pdHMgb2YgaW50ZWdyYWwgdHlwZXMuICovCisjaWZu
ZGVmIElOVDhfTUlOCisjZGVmaW5lIElOVDhfTUlOICAgICAgICAgICAgICAgKC0xMjgpCisjZW5k
aWYKKyNpZm5kZWYgSU5UMTZfTUlOCisjZGVmaW5lIElOVDE2X01JTiAgICAgICAgICAgICAgKC0z
Mjc2Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJTlQzMl9NSU4gICAg
ICAgICAgICAgICgtMjE0NzQ4MzY0Ny0xKQorI2VuZGlmCisjaWZuZGVmIElOVDhfTUFYCisjZGVm
aW5lIElOVDhfTUFYICAgICAgICAgICAgICAgKDEyNykKKyNlbmRpZgorI2lmbmRlZiBJTlQxNl9N
QVgKKyNkZWZpbmUgSU5UMTZfTUFYICAgICAgICAgICAgICAoMzI3NjcpCisjZW5kaWYKKyNpZm5k
ZWYgSU5UMzJfTUFYCisjZGVmaW5lIElOVDMyX01BWCAgICAgICAgICAgICAgKDIxNDc0ODM2NDcp
CisjZW5kaWYKKyNpZm5kZWYgVUlOVDhfTUFYCisjZGVmaW5lIFVJTlQ4X01BWCAgICAgICAgICAg
ICAgKDI1NVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDE2X01BWAorI2RlZmluZSBVSU5UMTZfTUFY
ICAgICAgICAgICAgICg2NTUzNVUpCisjZW5kaWYKKyNpZm5kZWYgVUlOVDMyX01BWAorI2RlZmlu
ZSBVSU5UMzJfTUFYICAgICAgICAgICAgICg0Mjk0OTY3Mjk1VSkKKyNlbmRpZgorCisjZW5kaWYg
LyogISBGTEVYSU5UX0ggKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCisKKy8qIFRoZSAiY29uc3Qi
IHN0b3JhZ2UtY2xhc3MtbW9kaWZpZXIgaXMgdmFsaWQuICovCisjZGVmaW5lIFlZX1VTRV9DT05T
VAorCisjZWxzZQkvKiAhIF9fY3BsdXNwbHVzICovCisKKy8qIEM5OSByZXF1aXJlcyBfX1NURENf
XyB0byBiZSBkZWZpbmVkIGFzIDEuICovCisjaWYgZGVmaW5lZCAoX19TVERDX18pCisKKyNkZWZp
bmUgWVlfVVNFX0NPTlNUCisKKyNlbmRpZgkvKiBkZWZpbmVkIChfX1NURENfXykgKi8KKyNlbmRp
ZgkvKiAhIF9fY3BsdXNwbHVzICovCisKKyNpZmRlZiBZWV9VU0VfQ09OU1QKKyNkZWZpbmUgeXlj
b25zdCBjb25zdAorI2Vsc2UKKyNkZWZpbmUgeXljb25zdAorI2VuZGlmCisKKy8qIFJldHVybmVk
IHVwb24gZW5kLW9mLWZpbGUuICovCisjZGVmaW5lIFlZX05VTEwgMAorCisvKiBQcm9tb3RlcyBh
IHBvc3NpYmx5IG5lZ2F0aXZlLCBwb3NzaWJseSBzaWduZWQgY2hhciB0byBhbiB1bnNpZ25lZAor
ICogaW50ZWdlciBmb3IgdXNlIGFzIGFuIGFycmF5IGluZGV4LiAgSWYgdGhlIHNpZ25lZCBjaGFy
IGlzIG5lZ2F0aXZlLAorICogd2Ugd2FudCB0byBpbnN0ZWFkIHRyZWF0IGl0IGFzIGFuIDgtYml0
IHVuc2lnbmVkIGNoYXIsIGhlbmNlIHRoZQorICogZG91YmxlIGNhc3QuCisgKi8KKyNkZWZpbmUg
WVlfU0NfVE9fVUkoYykgKCh1bnNpZ25lZCBpbnQpICh1bnNpZ25lZCBjaGFyKSBjKQorCisvKiBB
biBvcGFxdWUgcG9pbnRlci4gKi8KKyNpZm5kZWYgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKKyNk
ZWZpbmUgWVlfVFlQRURFRl9ZWV9TQ0FOTkVSX1QKK3R5cGVkZWYgdm9pZCogeXlzY2FuX3Q7Cisj
ZW5kaWYKKworLyogRm9yIGNvbnZlbmllbmNlLCB0aGVzZSB2YXJzIChwbHVzIHRoZSBiaXNvbiB2
YXJzIGZhciBiZWxvdykKKyAgIGFyZSBtYWNyb3MgaW4gdGhlIHJlZW50cmFudCBzY2FubmVyLiAq
LworI2RlZmluZSB5eWluIHl5Zy0+eXlpbl9yCisjZGVmaW5lIHl5b3V0IHl5Zy0+eXlvdXRfcgor
I2RlZmluZSB5eWV4dHJhIHl5Zy0+eXlleHRyYV9yCisjZGVmaW5lIHl5bGVuZyB5eWctPnl5bGVu
Z19yCisjZGVmaW5lIHl5dGV4dCB5eWctPnl5dGV4dF9yCisjZGVmaW5lIHl5bGluZW5vIChZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2JzX2xpbmVubykKKyNkZWZpbmUgeXljb2x1bW4gKFlZ
X0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfY29sdW1uKQorI2RlZmluZSB5eV9mbGV4X2Rl
YnVnIHl5Zy0+eXlfZmxleF9kZWJ1Z19yCisKKy8qIEVudGVyIGEgc3RhcnQgY29uZGl0aW9uLiAg
VGhpcyBtYWNybyByZWFsbHkgb3VnaHQgdG8gdGFrZSBhIHBhcmFtZXRlciwKKyAqIGJ1dCB3ZSBk
byBpdCB0aGUgZGlzZ3VzdGluZyBjcnVmdHkgd2F5IGZvcmNlZCBvbiB1cyBieSB0aGUgKCktbGVz
cworICogZGVmaW5pdGlvbiBvZiBCRUdJTi4KKyAqLworI2RlZmluZSBCRUdJTiB5eWctPnl5X3N0
YXJ0ID0gMSArIDIgKgorCisvKiBUcmFuc2xhdGUgdGhlIGN1cnJlbnQgc3RhcnQgc3RhdGUgaW50
byBhIHZhbHVlIHRoYXQgY2FuIGJlIGxhdGVyIGhhbmRlZAorICogdG8gQkVHSU4gdG8gcmV0dXJu
IHRvIHRoZSBzdGF0ZS4gIFRoZSBZWVNUQVRFIGFsaWFzIGlzIGZvciBsZXgKKyAqIGNvbXBhdGli
aWxpdHkuCisgKi8KKyNkZWZpbmUgWVlfU1RBUlQgKCh5eWctPnl5X3N0YXJ0IC0gMSkgLyAyKQor
I2RlZmluZSBZWVNUQVRFIFlZX1NUQVJUCisKKy8qIEFjdGlvbiBudW1iZXIgZm9yIEVPRiBydWxl
IG9mIGEgZ2l2ZW4gc3RhcnQgc3RhdGUuICovCisjZGVmaW5lIFlZX1NUQVRFX0VPRihzdGF0ZSkg
KFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCisKKy8qIFNwZWNpYWwgYWN0aW9uIG1lYW5p
bmcgInN0YXJ0IHByb2Nlc3NpbmcgYSBuZXcgZmlsZSIuICovCisjZGVmaW5lIFlZX05FV19GSUxF
IHl5cmVzdGFydCh5eWluICx5eXNjYW5uZXIgKQorCisjZGVmaW5lIFlZX0VORF9PRl9CVUZGRVJf
Q0hBUiAwCisKKy8qIFNpemUgb2YgZGVmYXVsdCBpbnB1dCBidWZmZXIuICovCisjaWZuZGVmIFlZ
X0JVRl9TSVpFCisjZGVmaW5lIFlZX0JVRl9TSVpFIDE2Mzg0CisjZW5kaWYKKworLyogVGhlIHN0
YXRlIGJ1ZiBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIG9uZSBzdGF0ZSBwZXIgY2hhcmFj
dGVyIGluIHRoZSBtYWluIGJ1ZmZlci4KKyAqLworI2RlZmluZSBZWV9TVEFURV9CVUZfU0laRSAg
ICgoWVlfQlVGX1NJWkUgKyAyKSAqIHNpemVvZih5eV9zdGF0ZV90eXBlKSkKKworI2lmbmRlZiBZ
WV9UWVBFREVGX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9UWVBFREVGX1lZX0JVRkZFUl9T
VEFURQordHlwZWRlZiBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICpZWV9CVUZGRVJfU1RBVEU7Cisj
ZW5kaWYKKworI2RlZmluZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU4gMAorI2RlZmluZSBFT0JfQUNU
X0VORF9PRl9GSUxFIDEKKyNkZWZpbmUgRU9CX0FDVF9MQVNUX01BVENIIDIKKworICAgIC8qIE5v
dGU6IFdlIHNwZWNpZmljYWxseSBvbWl0IHRoZSB0ZXN0IGZvciB5eV9ydWxlX2Nhbl9tYXRjaF9l
b2wgYmVjYXVzZSBpdCByZXF1aXJlcworICAgICAqICAgICAgIGFjY2VzcyB0byB0aGUgbG9jYWwg
dmFyaWFibGUgeXlfYWN0LiBTaW5jZSB5eWxlc3MoKSBpcyBhIG1hY3JvLCBpdCB3b3VsZCBicmVh
aworICAgICAqICAgICAgIGV4aXN0aW5nIHNjYW5uZXJzIHRoYXQgY2FsbCB5eWxlc3MoKSBmcm9t
IE9VVFNJREUgeXlsZXguIAorICAgICAqICAgICAgIE9uZSBvYnZpb3VzIHNvbHV0aW9uIGl0IHRv
IG1ha2UgeXlfYWN0IGEgZ2xvYmFsLiBJIHRyaWVkIHRoYXQsIGFuZCBzYXcKKyAgICAgKiAgICAg
ICBhIDUlIHBlcmZvcm1hbmNlIGhpdCBpbiBhIG5vbi15eWxpbmVubyBzY2FubmVyLCBiZWNhdXNl
IHl5X2FjdCBpcworICAgICAqICAgICAgIG5vcm1hbGx5IGRlY2xhcmVkIGFzIGEgcmVnaXN0ZXIg
dmFyaWFibGUtLSBzbyBpdCBpcyBub3Qgd29ydGggaXQuCisgICAgICovCisgICAgI2RlZmluZSAg
WVlfTEVTU19MSU5FTk8obikgXAorICAgICAgICAgICAgZG8geyBcCisgICAgICAgICAgICAgICAg
aW50IHl5bDtcCisgICAgICAgICAgICAgICAgZm9yICggeXlsID0gbjsgeXlsIDwgeXlsZW5nOyAr
K3l5bCApXAorICAgICAgICAgICAgICAgICAgICBpZiAoIHl5dGV4dFt5eWxdID09ICdcbicgKVwK
KyAgICAgICAgICAgICAgICAgICAgICAgIC0teXlsaW5lbm87XAorICAgICAgICAgICAgfXdoaWxl
KDApCisgICAgCisvKiBSZXR1cm4gYWxsIGJ1dCB0aGUgZmlyc3QgIm4iIG1hdGNoZWQgY2hhcmFj
dGVycyBiYWNrIHRvIHRoZSBpbnB1dCBzdHJlYW0uICovCisjZGVmaW5lIHl5bGVzcyhuKSBcCisJ
ZG8gXAorCQl7IFwKKwkJLyogVW5kbyBlZmZlY3RzIG9mIHNldHRpbmcgdXAgeXl0ZXh0LiAqLyBc
CisgICAgICAgIGludCB5eWxlc3NfbWFjcm9fYXJnID0gKG4pOyBcCisgICAgICAgIFlZX0xFU1Nf
TElORU5PKHl5bGVzc19tYWNyb19hcmcpO1wKKwkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7
IFwKKwkJWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVCBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5
X2NwID0geXlfYnAgKyB5eWxlc3NfbWFjcm9fYXJnIC0gWVlfTU9SRV9BREo7IFwKKwkJWVlfRE9f
QkVGT1JFX0FDVElPTjsgLyogc2V0IHVwIHl5dGV4dCBhZ2FpbiAqLyBcCisJCX0gXAorCXdoaWxl
ICggMCApCisKKyNkZWZpbmUgdW5wdXQoYykgeXl1bnB1dCggYywgeXlnLT55eXRleHRfcHRyICwg
eXlzY2FubmVyICkKKworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NJWkVfVAorI2RlZmluZSBZWV9U
WVBFREVGX1lZX1NJWkVfVAordHlwZWRlZiBzaXplX3QgeXlfc2l6ZV90OworI2VuZGlmCisKKyNp
Zm5kZWYgWVlfU1RSVUNUX1lZX0JVRkZFUl9TVEFURQorI2RlZmluZSBZWV9TVFJVQ1RfWVlfQlVG
RkVSX1NUQVRFCitzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlCisJeworCUZJTEUgKnl5X2lucHV0X2Zp
bGU7CisKKwljaGFyICp5eV9jaF9idWY7CQkvKiBpbnB1dCBidWZmZXIgKi8KKwljaGFyICp5eV9i
dWZfcG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBpbiBpbnB1dCBidWZmZXIgKi8KKworCS8qIFNp
emUgb2YgaW5wdXQgYnVmZmVyIGluIGJ5dGVzLCBub3QgaW5jbHVkaW5nIHJvb20gZm9yIEVPQgor
CSAqIGNoYXJhY3RlcnMuCisJICovCisJeXlfc2l6ZV90IHl5X2J1Zl9zaXplOworCisJLyogTnVt
YmVyIG9mIGNoYXJhY3RlcnMgcmVhZCBpbnRvIHl5X2NoX2J1Ziwgbm90IGluY2x1ZGluZyBFT0IK
KwkgKiBjaGFyYWN0ZXJzLgorCSAqLworCWludCB5eV9uX2NoYXJzOworCisJLyogV2hldGhlciB3
ZSAib3duIiB0aGUgYnVmZmVyIC0gaS5lLiwgd2Uga25vdyB3ZSBjcmVhdGVkIGl0LAorCSAqIGFu
ZCBjYW4gcmVhbGxvYygpIGl0IHRvIGdyb3cgaXQsIGFuZCBzaG91bGQgZnJlZSgpIGl0IHRvCisJ
ICogZGVsZXRlIGl0LgorCSAqLworCWludCB5eV9pc19vdXJfYnVmZmVyOworCisJLyogV2hldGhl
ciB0aGlzIGlzIGFuICJpbnRlcmFjdGl2ZSIgaW5wdXQgc291cmNlOyBpZiBzbywgYW5kCisJICog
aWYgd2UncmUgdXNpbmcgc3RkaW8gZm9yIGlucHV0LCB0aGVuIHdlIHdhbnQgdG8gdXNlIGdldGMo
KQorCSAqIGluc3RlYWQgb2YgZnJlYWQoKSwgdG8gbWFrZSBzdXJlIHdlIHN0b3AgZmV0Y2hpbmcg
aW5wdXQgYWZ0ZXIKKwkgKiBlYWNoIG5ld2xpbmUuCisJICovCisJaW50IHl5X2lzX2ludGVyYWN0
aXZlOworCisJLyogV2hldGhlciB3ZSdyZSBjb25zaWRlcmVkIHRvIGJlIGF0IHRoZSBiZWdpbm5p
bmcgb2YgYSBsaW5lLgorCSAqIElmIHNvLCAnXicgcnVsZXMgd2lsbCBiZSBhY3RpdmUgb24gdGhl
IG5leHQgbWF0Y2gsIG90aGVyd2lzZQorCSAqIG5vdC4KKwkgKi8KKwlpbnQgeXlfYXRfYm9sOwor
CisgICAgaW50IHl5X2JzX2xpbmVubzsgLyoqPCBUaGUgbGluZSBjb3VudC4gKi8KKyAgICBpbnQg
eXlfYnNfY29sdW1uOyAvKio8IFRoZSBjb2x1bW4gY291bnQuICovCisgICAgCisJLyogV2hldGhl
ciB0byB0cnkgdG8gZmlsbCB0aGUgaW5wdXQgYnVmZmVyIHdoZW4gd2UgcmVhY2ggdGhlCisJICog
ZW5kIG9mIGl0LgorCSAqLworCWludCB5eV9maWxsX2J1ZmZlcjsKKworCWludCB5eV9idWZmZXJf
c3RhdHVzOworCisjZGVmaW5lIFlZX0JVRkZFUl9ORVcgMAorI2RlZmluZSBZWV9CVUZGRVJfTk9S
TUFMIDEKKwkvKiBXaGVuIGFuIEVPRidzIGJlZW4gc2VlbiBidXQgdGhlcmUncyBzdGlsbCBzb21l
IHRleHQgdG8gcHJvY2VzcworCSAqIHRoZW4gd2UgbWFyayB0aGUgYnVmZmVyIGFzIFlZX0VPRl9Q
RU5ESU5HLCB0byBpbmRpY2F0ZSB0aGF0IHdlCisJICogc2hvdWxkbid0IHRyeSByZWFkaW5nIGZy
b20gdGhlIGlucHV0IHNvdXJjZSBhbnkgbW9yZS4gIFdlIG1pZ2h0CisJICogc3RpbGwgaGF2ZSBh
IGJ1bmNoIG9mIHRva2VucyB0byBtYXRjaCwgdGhvdWdoLCBiZWNhdXNlIG9mCisJICogcG9zc2li
bGUgYmFja2luZy11cC4KKwkgKgorCSAqIFdoZW4gd2UgYWN0dWFsbHkgc2VlIHRoZSBFT0YsIHdl
IGNoYW5nZSB0aGUgc3RhdHVzIHRvICJuZXciCisJICogKHZpYSB5eXJlc3RhcnQoKSksIHNvIHRo
YXQgdGhlIHVzZXIgY2FuIGNvbnRpbnVlIHNjYW5uaW5nIGJ5CisJICoganVzdCBwb2ludGluZyB5
eWluIGF0IGEgbmV3IGlucHV0IGZpbGUuCisJICovCisjZGVmaW5lIFlZX0JVRkZFUl9FT0ZfUEVO
RElORyAyCisKKwl9OworI2VuZGlmIC8qICFZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFICovCisK
Ky8qIFdlIHByb3ZpZGUgbWFjcm9zIGZvciBhY2Nlc3NpbmcgYnVmZmVyIHN0YXRlcyBpbiBjYXNl
IGluIHRoZQorICogZnV0dXJlIHdlIHdhbnQgdG8gcHV0IHRoZSBidWZmZXIgc3RhdGVzIGluIGEg
bW9yZSBnZW5lcmFsCisgKiAic2Nhbm5lciBzdGF0ZSIuCisgKgorICogUmV0dXJucyB0aGUgdG9w
IG9mIHRoZSBzdGFjaywgb3IgTlVMTC4KKyAqLworI2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUiAo
IHl5Zy0+eXlfYnVmZmVyX3N0YWNrIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPyB5eWct
Pnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5X2J1ZmZlcl9zdGFja190b3BdIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgOiBOVUxMKQorCisvKiBTYW1lIGFzIHByZXZpb3VzIG1hY3JvLCBidXQg
dXNlZnVsIHdoZW4gd2Uga25vdyB0aGF0IHRoZSBidWZmZXIgc3RhY2sgaXMgbm90CisgKiBOVUxM
IG9yIHdoZW4gd2UgbmVlZCBhbiBsdmFsdWUuIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KKyAqLwor
I2RlZmluZSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgeXlnLT55eV9idWZmZXJfc3RhY2tbeXln
LT55eV9idWZmZXJfc3RhY2tfdG9wXQorCit2b2lkIHl5cmVzdGFydCAoRklMRSAqaW5wdXRfZmls
ZSAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5X3N3aXRjaF90b19idWZmZXIgKFlZX0JV
RkZFUl9TVEFURSBuZXdfYnVmZmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZFUl9T
VEFURSB5eV9jcmVhdGVfYnVmZmVyIChGSUxFICpmaWxlLGludCBzaXplICx5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKK3ZvaWQgeXlfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOwordm9pZCB5eV9mbHVzaF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBi
ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlwdXNoX2J1ZmZlcl9zdGF0ZSAoWVlfQlVG
RkVSX1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eXBvcF9i
dWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitzdGF0aWMgdm9pZCB5eWVuc3Vy
ZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgeXlfbG9h
ZF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHZvaWQgeXlfaW5p
dF9idWZmZXIgKFlZX0JVRkZFUl9TVEFURSBiLEZJTEUgKmZpbGUgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworCisjZGVmaW5lIFlZX0ZMVVNIX0JVRkZFUiB5eV9mbHVzaF9idWZmZXIoWVlfQ1VSUkVO
VF9CVUZGRVIgLHl5c2Nhbm5lcikKKworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyIChj
aGFyICpiYXNlLHl5X3NpemVfdCBzaXplICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK1lZX0JVRkZF
Ul9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICp5eV9zdHIgLHl5c2Nhbl90IHl5
c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnl0ZXMgKHl5Y29uc3QgY2hhciAq
Ynl0ZXMsaW50IGxlbiAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgKnl5YWxsb2MgKHl5
X3NpemVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkICp5eXJlYWxsb2MgKHZvaWQgKix5
eV9zaXplX3QgLHl5c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eWZyZWUgKHZvaWQgKiAseXlz
Y2FuX3QgeXlzY2FubmVyICk7CisKKyNkZWZpbmUgeXlfbmV3X2J1ZmZlciB5eV9jcmVhdGVfYnVm
ZmVyCisKKyNkZWZpbmUgeXlfc2V0X2ludGVyYWN0aXZlKGlzX2ludGVyYWN0aXZlKSBcCisJeyBc
CisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7IFwKKyAgICAgICAgeXllbnN1cmVfYnVmZmVy
X3N0YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAgIFwK
KyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2FubmVy
KTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUg
PSBpc19pbnRlcmFjdGl2ZTsgXAorCX0KKworI2RlZmluZSB5eV9zZXRfYm9sKGF0X2JvbCkgXAor
CXsgXAorCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApe1wKKyAgICAgICAgeXllbnN1cmVfYnVm
ZmVyX3N0YWNrICh5eXNjYW5uZXIpOyBcCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9ICAg
IFwKKyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlzY2Fu
bmVyKTsgXAorCX0gXAorCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYXRfYm9sID0gYXRf
Ym9sOyBcCisJfQorCisjZGVmaW5lIFlZX0FUX0JPTCgpIChZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2F0X2JvbCkKKworLyogQmVnaW4gdXNlciBzZWN0MyAqLworCisjZGVmaW5lIHl5d3Jh
cChuKSAxCisjZGVmaW5lIFlZX1NLSVBfWVlXUkFQCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBZ
WV9DSEFSOworCit0eXBlZGVmIGludCB5eV9zdGF0ZV90eXBlOworCisjZGVmaW5lIHl5dGV4dF9w
dHIgeXl0ZXh0X3IKKworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0X3ByZXZpb3VzX3N0YXRl
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxf
dHJhbnMgKHl5X3N0YXRlX3R5cGUgY3VycmVudF9zdGF0ZSAgLHl5c2Nhbl90IHl5c2Nhbm5lcik7
CitzdGF0aWMgaW50IHl5X2dldF9uZXh0X2J1ZmZlciAoeXlzY2FuX3QgeXlzY2FubmVyICk7Citz
dGF0aWMgdm9pZCB5eV9mYXRhbF9lcnJvciAoeXljb25zdCBjaGFyIG1zZ1tdICx5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKworLyogRG9uZSBhZnRlciB0aGUgY3VycmVudCBwYXR0ZXJuIGhhcyBiZWVu
IG1hdGNoZWQgYW5kIGJlZm9yZSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgYWN0aW9uIC0gc2V0cyB1
cCB5eXRleHQuCisgKi8KKyNkZWZpbmUgWVlfRE9fQkVGT1JFX0FDVElPTiBcCisJeXlnLT55eXRl
eHRfcHRyID0geXlfYnA7IFwKKwl5eWxlbmcgPSAoc2l6ZV90KSAoeXlfY3AgLSB5eV9icCk7IFwK
Kwl5eWctPnl5X2hvbGRfY2hhciA9ICp5eV9jcDsgXAorCSp5eV9jcCA9ICdcMCc7IFwKKwl5eWct
Pnl5X2NfYnVmX3AgPSB5eV9jcDsKKworI2RlZmluZSBZWV9OVU1fUlVMRVMgMTQ1CisjZGVmaW5l
IFlZX0VORF9PRl9CVUZGRVIgMTQ2CisvKiBUaGlzIHN0cnVjdCBpcyBub3QgdXNlZCBpbiB0aGlz
IHNjYW5uZXIsCisgICBidXQgaXRzIHByZXNlbmNlIGlzIG5lY2Vzc2FyeS4gKi8KK3N0cnVjdCB5
eV90cmFuc19pbmZvCisJeworCWZsZXhfaW50MzJfdCB5eV92ZXJpZnk7CisJZmxleF9pbnQzMl90
IHl5X254dDsKKwl9Oworc3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2FjY2VwdFs0MTFd
ID0KKyAgICB7ICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
IDE0NiwgIDE0NCwgIDE0MywgIDE0MywKKyAgICAgIDEyOCwgIDEzNCwgIDEzOSwgIDEyMywgIDEy
NCwgIDEzMiwgIDEzMSwgIDEyMCwgIDEyOSwgIDEyNywKKyAgICAgIDEzMywgICA5MiwgICA5Miwg
IDEyMSwgIDExNywgIDEzNSwgIDEyMiwgIDEzNiwgIDE0MCwgICA4OCwKKyAgICAgIDEyNSwgIDEy
NiwgIDEzOCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwKKyAgICAg
ICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4
OCwKKyAgICAgICA4OCwgICA4OCwgICA4OCwgIDExOCwgIDEzNywgIDExOSwgIDEzMCwgICAgMywg
ICAgNCwgICAgMywKKyAgICAgIDE0MiwgIDE0NSwgIDE0MSwgIDExNCwgIDEwMCwgIDExOSwgIDEw
OCwgIDEwMywgICA5OCwgIDEwNiwKKyAgICAgICA5NiwgIDEwNywgICA5NywgICA5NSwgICAgMiwg
ICAgMSwgICA5OSwgICA5NCwgICA5MCwgICA5MSwKKyAgICAgICAgMCwgICAgMCwgICA5MiwgIDEy
NiwgIDExOCwgIDEyNSwgIDExNSwgIDExMSwgIDExMywgIDExMiwKKyAgICAgIDExNiwgICA4OCwg
IDEwNCwgIDExMCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwKKworICAgICAg
IDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDE3LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4
LAorICAgICAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAg
IDIwLCAgIDIyLAorICAgICAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4
LCAgIDg4LCAgIDg4LCAgIDg4LAorICAgICAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAg
IDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LAorICAgICAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4
LCAgIDg4LCAgIDg4LCAgMTA1LCAgMTA5LCAgICA1LCAgMTQxLAorICAgICAgICAwLCAgICAxLCAg
IDk0LCAgICAwLCAgICAwLCAgIDkzLCAgIDg5LCAgMTAxLCAgMTAyLCAgIDQ4LAorICAgICAgIDg4
LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LAor
ICAgICAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDE4LCAgIDg4
LCAgIDg4LAorICAgICAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDI2LCAg
IDg4LCAgIDg4LCAgIDg4LAorICAgICAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDIz
LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LAorCisgICAgICAgODgsICAgODgsICAgODgsICAgODgs
ICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsCisgICAgICAgODgsICAgODgsICAg
ODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgIDAsICAgOTUsCisgICAgICAgIDAs
ICAgOTQsICAgODgsICAgMjgsICAgODgsICAgODgsICAgODUsICAgODgsICAgODgsICAgODgsCisg
ICAgICAgODgsICAgODgsICAgODgsICAgODgsICAgMjEsICAgNTEsICAgODgsICAgODgsICAgODgs
ICAgODgsCisgICAgICAgODgsICAgNTYsICAgNzAsICAgODgsICAgODgsICAgODgsICAgODgsICAg
ODgsICAgODgsICAgODgsCisgICAgICAgODgsICAgNjcsICAgIDksICAgMzMsICAgMzQsICAgMzUs
ICAgODgsICAgODgsICAgODgsICAgODgsCisgICAgICAgODgsICAgODgsICAgODgsICAgODgsICAg
ODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsCisgICAgICAgODgsICAgNTQsICAgMjks
ICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgMzYsCisgICAgICAgMzcsICAg
MzgsICAgMjcsICAgODgsICAgODgsICAgODgsICAgMTUsICAgNDIsICAgNDMsICAgNDQsCisgICAg
ICAgNDksICAgMTIsICAgODgsICAgODgsICAgODgsICAgODgsICAgODEsICAgODIsICAgODMsICAg
ODgsCisKKyAgICAgICAzMCwgICA3MSwgICAyNSwgICA3OCwgICA3OSwgICA4MCwgICAgNywgICA3
NSwgICA3NiwgICA3NywKKyAgICAgICA4OCwgICAyNCwgICA3MywgICA4OCwgICA4OCwgICAzOSwg
ICA0MCwgICA0MSwgICA4OCwgICA4OCwKKyAgICAgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4
OCwgICA4OCwgICA4OCwgICA2OCwgICA4OCwgICA4OCwKKyAgICAgICA4OCwgICA4OCwgICA4OCwg
ICA4OCwgICA4OCwgICA1MCwgICA4OCwgICA4NywgICA4OCwgICA4OCwKKyAgICAgICAxOSwgICA4
OCwgICA4OCwgICA4OCwgICA4OCwgICA2OSwgICA2NCwgICA1OSwgICA4OCwgICA4OCwKKyAgICAg
ICA4OCwgICA4OCwgICA4OCwgICA3NCwgICA1NSwgICA4OCwgICA2MiwgICAzMiwgICA4OCwgICA4
NCwKKyAgICAgICA2MywgICA0NywgICA1NywgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwg
ICA4OCwgICA4OCwKKyAgICAgICA4OCwgICA1OCwgICAzMSwgICA4OCwgICA4OCwgICA4OCwgICAg
OCwgICA4OCwgICA4OCwgICA4OCwKKyAgICAgICA4OCwgICA4OCwgICA1MiwgICAxMywgICA4OCwg
ICAxNCwgICA4OCwgICA4OCwgICAxNiwgICA2NSwKKyAgICAgICA4OCwgICA4OCwgICA4OCwgICA2
MCwgICA4OCwgICA4OCwgICA4OCwgICA1MywgICA3MiwgICA2MSwKKworICAgICAgIDExLCAgIDY2
LCAgICA2LCAgIDg2LCAgIDEwLCAgIDQ1LCAgIDg4LCAgIDg4LCAgIDQ2LCAgICAwCisgICAgfSA7
CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9lY1syNTZdID0KKyAgICB7ICAgMCwK
KyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MiwgICAgMywKKyAgICAgICAgMiwgICAgMiwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMiwgICAgNCwgICAgMSwg
ICAgMSwgICAgMSwgICAgNSwgICAgNiwgICAgMSwgICAgNywKKyAgICAgICAgOCwgICAgOSwgICAx
MCwgICAxMSwgICAxMiwgICAxMywgICAxNCwgICAxNSwgICAxNiwgICAxNywKKyAgICAgICAxOCwg
ICAxOSwgICAxNiwgICAxNiwgICAxNiwgICAyMCwgICAyMCwgICAyMSwgICAyMiwgICAyMywKKyAg
ICAgICAyNCwgICAyNSwgICAyNiwgICAgMSwgICAyNywgICAyNywgICAyOCwgICAyOSwgICAzMCwg
ICAyNywKKyAgICAgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAz
MSwgICAzMSwgICAzMSwKKyAgICAgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwgICAzMSwg
ICAzMSwgICAzMiwgICAzMSwgICAzMSwKKyAgICAgICAzMywgICAgMSwgICAzNCwgICAzNSwgICAz
MSwgICAgMSwgICAzNiwgICAzNywgICAzOCwgICAzOSwKKworICAgICAgIDQwLCAgIDQxLCAgIDQy
LCAgIDQzLCAgIDQ0LCAgIDMxLCAgIDQ1LCAgIDQ2LCAgIDQ3LCAgIDQ4LAorICAgICAgIDQ5LCAg
IDUwLCAgIDMxLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDU0LCAgIDU1LCAgIDU2LCAgIDU3LAorICAg
ICAgIDU4LCAgIDU5LCAgIDYwLCAgIDYxLCAgIDYyLCAgIDYzLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAx
LCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLAorCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
CisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEKKyAgICB9IDsKKworc3RhdGljIHl5
Y29uc3QgZmxleF9pbnQzMl90IHl5X21ldGFbNjRdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMSwg
ICAgMSwgICAgMiwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgMywgICAgMywgICAgMywgICAgMywg
ICAgMywKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMywgICAg
MywgICAgMywgICAgMywKKyAgICAgICAgNCwgICAgNCwgICAgMSwgICAgMSwgICAgMSwgICAgMywg
ICAgMywgICAgMywgICAgMywgICAgMywKKyAgICAgICAgMywgICAgNCwgICAgNCwgICAgNCwgICAg
NCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwKKyAgICAgICAgNCwgICAgNCwgICAgNCwg
ICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgNCwgICAgMSwKKyAgICAgICAgMSwgICAg
MSwgICAgMQorICAgIH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYmFzZVs0
MTZdID0KKyAgICB7ICAgMCwKKyAgICAgICAgMCwgICAgMCwgICA2MSwgICA2MiwgICA3MSwgICAg
MCwgIDYwNiwgIDYwNywgIDYwNywgIDYwNywKKyAgICAgIDU4MSwgICA0MiwgIDEyOSwgIDYwNywg
IDYwNywgIDU4MCwgIDEyNiwgIDYwNywgIDEyNSwgIDEyMywKKyAgICAgIDEzNywgIDE0OSwgIDE1
NywgIDU3OCwgIDYwNywgIDE3NSwgIDU3OCwgICA0NCwgIDYwNywgICAgMCwKKyAgICAgIDYwNywg
IDYwNywgIDEyMCwgICA5NSwgIDEwMywgIDE0MiwgIDE0NiwgIDEzNiwgIDE1NiwgIDU1MiwKKyAg
ICAgIDE2OCwgIDE2MiwgIDU1MSwgIDEyMCwgIDE1OCwgIDU0NSwgIDE3MywgIDU1OCwgIDE3Miwg
IDE3OCwKKyAgICAgIDExMSwgIDE4NiwgIDU1NCwgIDYwNywgIDE1OSwgIDYwNywgIDYwNywgIDYw
NywgIDYwNywgIDU4MiwKKyAgICAgIDYwNywgIDYwNywgICAgMCwgIDYwNywgIDYwNywgIDYwNywg
IDYwNywgIDYwNywgIDYwNywgIDYwNywKKyAgICAgIDYwNywgIDYwNywgIDYwNywgIDIyMiwgIDYw
NywgICAgMCwgIDYwNywgIDIyOCwgIDI1NCwgIDI2MiwKKyAgICAgIDI4MSwgICAgMCwgIDI5MCwg
IDYwNywgIDYwNywgIDYwNywgIDU3MSwgIDYwNywgIDYwNywgIDYwNywKKyAgICAgIDU3MCwgICAg
MCwgIDYwNywgIDYwNywgIDU0NiwgIDUzOSwgIDU0MiwgIDU1MCwgIDU0OSwgIDUzNiwKKworICAg
ICAgNTUxLCAgNTM4LCAgNTQ0LCAgNTMyLCAgNTI5LCAgNTQyLCAgNTI5LCAgNTI2LCAgNTI2LCAg
NTMyLAorICAgICAgNTIwLCAgNTI3LCAgNTI0LCAgNTM0LCAgNTIwLCAgNTI2LCAgNTI5LCAgNTMw
LCAgICAwLCAgMjA0LAorICAgICAgNTI5LCAgMjA3LCAgNTE1LCAgNTI4LCAgNTE5LCAgNTIxLCAg
NTExLCAgNTI1LCAgNTIyLCAgNTI0LAorICAgICAgNTA3LCAgNTEyLCAgNTA5LCAgNDk4LCAgMTgz
LCAgNTEyLCAgNTA4LCAgNTEwLCAgNDk5LCAgNTAyLAorICAgICAgMjEyLCAgNTA3LCAgNDk5LCAg
NTExLCAgMTg2LCAgNTA0LCAgNjA3LCAgNjA3LCAgNjA3LCAgICAwLAorICAgICAgMzA2LCAgICAw
LCAgMzE2LCAgMzMyLCAgMjcwLCAgMzQyLCAgICAwLCAgNjA3LCAgNjA3LCAgICAwLAorICAgICAg
NDk2LCAgNTAwLCAgNTA5LCAgNTA2LCAgNDkwLCAgNDkwLCAgMTYxLCAgNTA1LCAgNTAyLCAgNTAy
LAorICAgICAgNTAwLCAgNDk3LCAgNDg5LCAgNDk1LCAgNDgyLCAgNDkzLCAgNDk2LCAgICAwLCAg
NDkzLCAgNDgxLAorICAgICAgNDg4LCAgNDg1LCAgNDg5LCAgNDgyLCAgNDcxLCAgNDcwLCAgNDgz
LCAgNDg2LCAgNDgzLCAgNDc4LAorICAgICAgNDY5LCAgMjk0LCAgNDc0LCAgNDc3LCAgNDY4LCAg
NDY1LCAgNDY5LCAgNDc1LCAgNDY2LCAgNDU3LAorCisgICAgICA0NjAsICA0NTgsICA0NjgsICA0
NTQsICA0NTIsICA0NTIsICA0NTQsICA0NTEsICA0NjIsICA0NjEsCisgICAgICAyNzgsICA0NTYs
ICA0NTEsICA0NDAsICAzMjAsICA0NTgsICA0NjAsICA0NDksICAzNDgsICAzNTQsCisgICAgICAz
NjAsICAzNjYsICA0NTAsICAgIDAsICA0NDgsICAzMzYsICAgIDAsICA0NDAsICA0MzgsICA0NDYs
CisgICAgICA0MzUsICA0NTIsICA0NDEsICAzNzAsICAgIDAsICAgIDAsICA0MzUsICA0NDUsICA0
NDUsICA0MzAsCisgICAgICAzNzMsICAgIDAsICAgIDAsICA0MzIsICAzNzYsICA0MzMsICA0Mjcs
ICA0MjYsICA0MjcsICA0MjYsCisgICAgICAzNzksICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAg
IDAsICA0MjIsICA0MjMsICA0MjgsICA0MTksCisgICAgICA0MzIsICA0MjcsICA0MjYsICA0MTgs
ICA0MjIsICA0MTQsICA0MTcsICA0MjEsICA0MjYsICA0MjUsCisgICAgICA0MTYsICAgIDAsICAg
IDAsICA0MjIsICA0MTEsICA0MTEsICA0MTYsICA0MTUsICA0MTIsICAgIDAsCisgICAgICAgIDAs
ICAgIDAsICAgIDAsICA0MDIsICA0MTQsICA0MTYsICAgIDAsICAgIDAsICAgIDAsICAgIDAsCisg
ICAgICAgIDAsICAgIDAsICA0MDQsICA0MDUsICAzOTksICA0MDksICAgIDAsICAgIDAsICAgIDAs
ICA0MDAsCisKKyAgICAgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
ICAgMCwgICAgMCwgICAgMCwKKyAgICAgIDQwNywgICAgMCwgICAgMCwgIDQwNSwgIDQwMSwgICAg
MCwgICAgMCwgICAgMCwgIDM5NywgIDM5MywKKyAgICAgIDM5OCwgIDM4OCwgIDQwMSwgIDM4Nywg
IDQwMCwgIDM4OSwgIDM5NiwgICAgMCwgIDM5NCwgIDM5NiwKKyAgICAgIDM4MCwgIDM4OSwgIDM5
NSwgIDM5MCwgIDM3OCwgICAgMCwgIDM4MCwgICAgMCwgIDM3OSwgIDM4MiwKKyAgICAgICAgMCwg
IDM3MSwgIDM3MCwgIDM3MCwgIDM4MywgICAgMCwgIDM4NSwgICAgMCwgIDM4NCwgIDM4MywKKyAg
ICAgIDM2OCwgIDM4MSwgIDM2OCwgICAgMCwgICAgMCwgIDM3MSwgICAgMCwgICAgMCwgIDM2Mywg
ICAgMCwKKyAgICAgICAgMCwgICAgMCwgICAgMCwgIDM2MCwgIDM3MSwgIDM2NCwgIDM2OCwgIDMw
MywgIDI5NywgIDI4OCwKKyAgICAgIDMwMCwgICAgMCwgICAgMCwgIDI4MywgIDI5MCwgIDI2OSwg
ICAgMCwgIDI3NywgIDI3NCwgIDI1NSwKKyAgICAgIDIzMiwgIDI1NSwgICAgMCwgICAgMCwgIDI0
NCwgICAgMCwgIDIzNiwgIDIyNiwgICAgMCwgICAgMCwKKyAgICAgIDIyNSwgIDIwOCwgIDIxMSwg
ICAgMCwgIDE4NSwgIDIwMiwgIDEzMSwgICAgMCwgICAgMCwgICAgMCwKKworICAgICAgICAwLCAg
ICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTM0LCAgMTE3LCAgICAwLCAgNjA3LAorICAg
ICAgMzk4LCAgNDAwLCAgNDAyLCAgNDA2LCAgMTQyCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0
IGZsZXhfaW50MTZfdCB5eV9kZWZbNDE2XSA9CisgICAgeyAgIDAsCisgICAgICA0MTAsICAgIDEs
ICA0MTEsICA0MTEsICA0MTAsICAgIDUsICA0MTAsICA0MTAsICA0MTAsICA0MTAsCisgICAgICA0
MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAs
CisgICAgICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0
MTAsICA0MTIsCisgICAgICA0MTAsICA0MTAsICA0MTAsICA0MTIsICA0MTIsICA0MTIsICA0MTIs
ICA0MTIsICA0MTIsICA0MTIsCisgICAgICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0
MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsCisgICAgICA0MTIsICA0MTIsICA0MTIsICA0MTAs
ICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsCisgICAgICA0MTAsICA0MTAsICA0
MTMsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsCisgICAgICA0MTAs
ICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTQsICA0MTAsICA0MTAsICA0MTAsICA0MTAsCisg
ICAgICA0MTAsICA0MTUsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAs
ICA0MTAsCisgICAgICA0MTAsICA0MTIsICA0MTAsICA0MTAsICA0MTIsICA0MTIsICA0MTIsICA0
MTIsICA0MTIsICA0MTIsCisKKyAgICAgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQx
MiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKyAgICAgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwg
IDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKyAgICAgIDQxMiwgIDQxMiwgIDQx
MiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKyAgICAgIDQxMiwg
IDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKyAg
ICAgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMCwgIDQxMCwgIDQxMCwg
IDQxMywKKyAgICAgIDQxMCwgIDQxNCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxNSwgIDQx
MCwgIDQxMCwgIDQxMiwKKyAgICAgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwg
IDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKyAgICAgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQx
MiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKyAgICAgIDQxMiwgIDQxMiwgIDQxMiwg
IDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKyAgICAgIDQxMiwgIDQx
MiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKworICAg
ICAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAg
NDEyLAorICAgICAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEy
LCAgNDEwLCAgNDEwLAorICAgICAgNDEwLCAgNDEwLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAg
NDEyLCAgNDEyLCAgNDEyLCAgNDEyLAorICAgICAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEy
LCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLAorICAgICAgNDEyLCAgNDEyLCAgNDEyLCAg
NDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLAorICAgICAgNDEyLCAgNDEy
LCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLAorICAgICAg
NDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEy
LAorICAgICAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAg
NDEyLCAgNDEyLAorICAgICAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEy
LCAgNDEyLCAgNDEyLCAgNDEyLAorICAgICAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAg
NDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLAorCisgICAgICA0MTIsICA0MTIsICA0MTIsICA0
MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsCisgICAgICA0MTIsICA0MTIs
ICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsCisgICAgICA0
MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIs
CisgICAgICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0
MTIsICA0MTIsCisgICAgICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIs
ICA0MTIsICA0MTIsICA0MTIsCisgICAgICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0
MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsCisgICAgICA0MTIsICA0MTIsICA0MTIsICA0MTIs
ICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsCisgICAgICA0MTIsICA0MTIsICA0
MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsCisgICAgICA0MTIs
ICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsCisg
ICAgICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIs
ICA0MTIsCisKKyAgICAgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwg
IDQxMiwgIDQxMiwgICAgMCwKKyAgICAgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMAorICAg
IH0gOworCitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfbnh0WzY3MV0gPQorICAgIHsg
ICAwLAorICAgICAgICA4LCAgICA5LCAgIDEwLCAgIDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1
LCAgIDE2LCAgIDE3LAorICAgICAgIDE4LCAgIDE5LCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLAorICAgICAgIDI0LCAgIDI1LCAgIDI2LCAgIDI3LCAgIDI4
LCAgIDI5LCAgIDMwLCAgIDMwLCAgIDMwLCAgIDMwLAorICAgICAgIDMwLCAgIDMwLCAgIDMxLCAg
IDMyLCAgIDMzLCAgIDM0LCAgIDM1LCAgIDM2LCAgIDM3LCAgIDM4LAorICAgICAgIDM5LCAgIDQw
LCAgIDQxLCAgIDQyLCAgIDMwLCAgIDQzLCAgIDQ0LCAgIDQ1LCAgIDQ2LCAgIDQ3LAorICAgICAg
IDQ4LCAgIDQ5LCAgIDUwLCAgIDUxLCAgIDUyLCAgIDUzLCAgIDMwLCAgIDMwLCAgIDMwLCAgIDU0
LAorICAgICAgIDU1LCAgIDU2LCAgIDU3LCAgIDU5LCAgIDU5LCAgIDY1LCAgIDY2LCAgIDkwLCAg
IDkxLCAgIDYwLAorICAgICAgIDYwLCAgICA4LCAgIDYxLCAgIDYyLCAgICA4LCAgICA4LCAgICA4
LCAgICA4LCAgICA4LCAgICA4LAorICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LCAg
ICA4LCAgICA4LCAgICA4LCAgICA4LCAgICA4LAorICAgICAgICA4LCAgICA4LCAgICA4LCAgICA4
LCAgICA4LCAgICA4LCAgICA4LCAgIDYzLCAgIDYzLCAgIDYzLAorCisgICAgICAgNjMsICAgNjMs
ICAgNjMsICAgIDgsICAgIDgsICAgIDgsICAgNjMsICAgNjMsICAgNjMsICAgNjMsCisgICAgICAg
NjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMs
CisgICAgICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAgNjMsICAg
NjMsICAgNjMsCisgICAgICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgNjcsICAgNzAsICAgNzIs
ICAgNzQsICAgNzQsICAgNzQsCisgICAgICAgNzQsICAgNzQsICAgNzQsICAgOTMsICAxNTcsICAg
NzUsICAgOTUsICAgOTYsICAgNzMsICAgNzEsCisgICAgICAgNzYsICAgOTcsICAgNjgsICAgOTgs
ICAgOTQsICAxMjMsICA0MDksICAgOTksICAxNDEsICAxMjQsCisgICAgICAgNzcsICAgNzgsICAx
NDIsICAgNzksICAgNzksICAgNzksICAgNzksICAgNzksICAgODAsICAgNzgsCisgICAgICA0MDgs
ICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAxMDAsICAgODEsICAgODUsCisg
ICAgICAgODIsICAxMDcsICAxNDcsICAxMDgsICA0MDcsICAxMDMsICAgODEsICAxMDEsICAgODEs
ICAxMDQsCisgICAgICAxMDIsICAxMTAsICAxMDksICAxMjUsICAxMDUsICAgODYsICAgODEsICAg
ODcsICAgODgsICAxMTEsCisKKyAgICAgIDEwNiwgIDExMiwgIDExOSwgIDExNiwgIDExMywgICA4
MiwgIDEyNiwgIDEzMiwgIDEyOCwgIDEyMCwKKyAgICAgIDExNCwgIDExNywgIDIyOSwgIDIzMCwg
IDEzMywgIDEzNCwgIDEyMSwgIDEzNywgIDIwNCwgIDE0OCwKKyAgICAgIDEzOCwgIDE0MywgIDEx
OCwgIDEyOSwgIDEzNSwgIDE0NCwgIDEzMCwgIDEzNiwgIDEzOSwgIDIxNiwKKyAgICAgIDQwNiwg
IDIxNywgIDQwNSwgIDIwNSwgIDE0NSwgIDE0MCwgICA3NCwgICA3NCwgICA3NCwgICA3NCwKKyAg
ICAgICA3NCwgICA3NCwgIDE1MywgIDE1MywgIDE1MywgIDE1MywgIDE1MywgIDE1MywgIDM5Niwg
IDE4NCwKKyAgICAgIDQwNCwgIDE1MSwgIDE4NSwgIDE4NiwgIDE5MCwgIDIxMSwgIDE4NywgIDE1
NCwgIDE4OCwgIDM5NywKKyAgICAgIDQwMywgIDE1MSwgIDE5MSwgIDIxMiwgIDQwMiwgIDQwMSwg
ICA3OCwgIDE1NCwgICA3OSwgICA3OSwKKyAgICAgICA3OSwgICA3OSwgICA3OSwgICA4MCwgICA3
OCwgIDQwMCwgICA4MCwgICA4MCwgICA4MCwgICA4MCwKKyAgICAgICA4MCwgICA4MCwgIDM5OSwg
ICA4MSwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwKKyAgICAgIDE1NSwgICA4
MSwgIDE1NSwgICA4MSwgIDM5OCwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwKKworICAg
ICAgMTU2LCAgIDgxLCAgIDc4LCAgMzk1LCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAgIDgzLCAg
IDgzLAorICAgICAgMjU0LCAgMjU1LCAgMjU2LCAgMzk0LCAgMzkzLCAgMjE5LCAgMzkyLCAgMjE5
LCAgMjc1LCAgIDgxLAorICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAg
Mjc2LCAgMzkxLCAgMzkwLCAgIDgxLAorICAgICAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUz
LCAgMTUzLCAgMjgwLCAgMjgxLCAgMjgyLCAgMzg5LAorICAgICAgMzg4LCAgMjIxLCAgMzg3LCAg
MjIxLCAgMzg2LCAgMTU0LCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLAorICAgICAgMjIyLCAgMjIy
LCAgMjg4LCAgMjg5LCAgMjkwLCAgMTU0LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LAorICAgICAg
MTU2LCAgMTU2LCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIw
LAorICAgICAgMjIwLCAgMjIwLCAgMjIwLCAgMjIwLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAg
MjIyLCAgMjIyLAorICAgICAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjIyLCAgMjk3
LCAgMjk4LCAgMjk5LCAgMzA0LAorICAgICAgMzA1LCAgMzA2LCAgMzA4LCAgMzA5LCAgMzEwLCAg
MzE2LCAgMzE3LCAgMzE4LCAgIDU4LCAgIDU4LAorCisgICAgICAgNTgsICAgNTgsICAgOTIsICAg
OTIsICAxNTAsICAxNTAsICAxNTIsICAzODUsICAxNTIsICAxNTIsCisgICAgICAzODQsICAzODMs
ICAzODIsICAzODEsICAzODAsICAzNzksICAzNzgsICAzNzcsICAzNzYsICAzNzUsCisgICAgICAz
NzQsICAzNzMsICAzNzIsICAzNzEsICAzNzAsICAzNjksICAzNjgsICAzNjcsICAzNjYsICAzNjUs
CisgICAgICAzNjQsICAzNjMsICAzNjIsICAzNjEsICAzNjAsICAzNTksICAzNTgsICAzNTcsICAz
NTYsICAzNTUsCisgICAgICAzNTQsICAzNTMsICAzNTIsICAzNTEsICAzNTAsICAzNDksICAzNDgs
ICAzNDcsICAzNDYsICAzNDUsCisgICAgICAzNDQsICAzNDMsICAzNDIsICAzNDEsICAzNDAsICAz
MzksICAzMzgsICAzMzcsICAzMzYsICAzMzUsCisgICAgICAzMzQsICAzMzMsICAzMzIsICAzMzEs
ICAzMzAsICAzMjksICAzMjgsICAzMjcsICAzMjYsICAzMjUsCisgICAgICAzMjQsICAzMjMsICAz
MjIsICAzMjEsICAzMjAsICAzMTksICAzMTUsICAzMTQsICAzMTMsICAzMTIsCisgICAgICAzMTEs
ICAzMDcsICAzMDMsICAzMDIsICAzMDEsICAzMDAsICAyOTYsICAyOTUsICAyOTQsICAyOTMsCisg
ICAgICAyOTIsICAyOTEsICAyODcsICAyODYsICAyODUsICAyODQsICAyODMsICAyNzksICAyNzgs
ICAyNzcsCisKKyAgICAgIDI3NCwgIDI3MywgIDI3MiwgIDI3MSwgIDI3MCwgIDI2OSwgIDI2OCwg
IDI2NywgIDI2NiwgIDI2NSwKKyAgICAgIDI2NCwgIDI2MywgIDI2MiwgIDI2MSwgIDI2MCwgIDI1
OSwgIDI1OCwgIDI1NywgIDI1MywgIDI1MiwKKyAgICAgIDI1MSwgIDI1MCwgIDI0OSwgIDI0OCwg
IDI0NywgIDI0NiwgIDI0NSwgIDI0NCwgIDI0MywgIDI0MiwKKyAgICAgIDI0MSwgIDI0MCwgIDIz
OSwgIDIzOCwgIDIzNywgIDIzNiwgIDIzNSwgIDIzNCwgIDIzMywgIDIzMiwKKyAgICAgIDIzMSwg
IDIyOCwgIDIyNywgIDIyNiwgIDIyNSwgIDIyNCwgIDIyMywgIDIxOCwgIDIxNSwgIDIxNCwKKyAg
ICAgIDIxMywgIDIxMCwgIDIwOSwgIDIwOCwgIDIwNywgIDIwNiwgIDIwMywgIDIwMiwgIDIwMSwg
IDIwMCwKKyAgICAgIDE5OSwgIDE5OCwgIDE5NywgIDE5NiwgIDE5NSwgIDE5NCwgIDE5MywgIDE5
MiwgIDE4OSwgIDE4MywKKyAgICAgIDE4MiwgIDE4MSwgIDE4MCwgIDE3OSwgIDE3OCwgIDE3Nywg
IDE3NiwgIDE3NSwgIDE3NCwgIDE3MywKKyAgICAgIDE3MiwgIDE3MSwgIDE3MCwgIDE2OSwgIDE2
OCwgIDE2NywgIDE2NiwgIDE2NSwgIDE2NCwgIDE2MywKKyAgICAgIDE2MiwgIDE2MSwgIDE2MCwg
IDE1OSwgIDE1OCwgIDE0OSwgIDE0NiwgIDEzMSwgIDEyNywgIDEyMiwKKworICAgICAgMTE1LCAg
IDg5LCAgIDg0LCAgIDY5LCAgIDY0LCAgNDEwLCAgICA3LCAgNDEwLCAgNDEwLCAgNDEwLAorICAg
ICAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAg
NDEwLAorICAgICAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEw
LCAgNDEwLCAgNDEwLAorICAgICAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAg
NDEwLCAgNDEwLCAgNDEwLCAgNDEwLAorICAgICAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEw
LCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLAorICAgICAgNDEwLCAgNDEwLCAgNDEwLCAg
NDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLAorICAgICAgNDEwLCAgNDEw
LCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwCisgICAgfSA7
CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9jaGtbNjcxXSA9CisgICAgeyAgIDAs
CisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDMsICAgIDQsICAgMTIsICAgMTIsICAgMjgsICAgMjgs
ICAgIDMsCisgICAgICAgIDQsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsCisgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUs
ICAgIDUsICAgIDUsICAgIDUsICAgIDUsCisgICAgICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAg
IDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsICAgIDUsCisKKyAgICAgICAgNSwgICAgNSwgICAg
NSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKKyAgICAgICAgNSwg
ICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKKyAg
ICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwg
ICAgNSwKKyAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAxMywgICAxNywgICAxOSwgICAy
MCwgICAyMCwgICAyMCwKKyAgICAgICAyMCwgICAyMCwgICAyMCwgICAzMywgIDQxNSwgICAyMSwg
ICAzNCwgICAzNCwgICAxOSwgICAxNywKKyAgICAgICAyMSwgICAzNSwgICAxMywgICAzNSwgICAz
MywgICA0NCwgIDQwOCwgICAzNSwgICA1MSwgICA0NCwKKyAgICAgICAyMSwgICAyMiwgICA1MSwg
ICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMiwgICAyMywKKyAgICAgIDQwNywgICAy
MywgICAyMywgICAyMywgICAyMywgICAyMywgICAyMywgICAzNiwgICAyMiwgICAyNiwKKyAgICAg
ICAyMiwgICAzOCwgICA1NSwgICAzOCwgIDM5NywgICAzNywgICAyMywgICAzNiwgICAyMiwgICAz
NywKKyAgICAgICAzNiwgICAzOSwgICAzOCwgICA0NSwgICAzNywgICAyNiwgICAyMywgICAyNiwg
ICAyNiwgICAzOSwKKworICAgICAgIDM3LCAgIDM5LCAgIDQyLCAgIDQxLCAgIDM5LCAgIDIyLCAg
IDQ1LCAgIDQ5LCAgIDQ3LCAgIDQyLAorICAgICAgIDM5LCAgIDQxLCAgMTY3LCAgMTY3LCAgIDQ5
LCAgIDQ5LCAgIDQyLCAgIDUwLCAgMTM1LCAgIDU1LAorICAgICAgIDUwLCAgIDUyLCAgIDQxLCAg
IDQ3LCAgIDQ5LCAgIDUyLCAgIDQ3LCAgIDQ5LCAgIDUwLCAgMTQ1LAorICAgICAgMzk2LCAgMTQ1
LCAgMzk1LCAgMTM1LCAgIDUyLCAgIDUwLCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LAorICAgICAg
IDc0LCAgIDc0LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgIDc4LCAgMzgxLCAgMTIw
LAorICAgICAgMzkzLCAgIDc0LCAgMTIwLCAgMTIwLCAgMTIyLCAgMTQxLCAgMTIwLCAgIDc4LCAg
MTIwLCAgMzgxLAorICAgICAgMzkyLCAgIDc0LCAgMTIyLCAgMTQxLCAgMzkxLCAgMzg4LCAgIDc5
LCAgIDc4LCAgIDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAg
Mzg3LCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAorICAgICAgIDgwLCAgIDgwLCAgMzg1LCAgIDc5
LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LCAgMTU1LAorICAgICAgIDgxLCAgIDgwLCAg
IDgxLCAgIDc5LCAgMzgyLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLCAgIDgxLAorCisgICAgICAg
ODEsICAgODAsICAgODMsICAzODAsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
CisgICAgICAxOTIsICAxOTIsICAxOTIsICAzNzksICAzNzgsICAxNTEsICAzNzYsICAxNTEsICAy
MTEsICAgODMsCisgICAgICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAxNTEsICAyMTEs
ICAzNzUsICAzNzQsICAgODMsCisgICAgICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAx
NTMsICAyMTUsICAyMTUsICAyMTUsICAzNzEsCisgICAgICAzNzAsICAxNTQsICAzNjksICAxNTQs
ICAzNjgsICAxNTMsICAxNTQsICAxNTQsICAxNTQsICAxNTQsCisgICAgICAxNTQsICAxNTQsICAy
MjYsICAyMjYsICAyMjYsICAxNTMsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCisgICAgICAxNTYs
ICAxNTYsICAyMTksICAyMTksICAyMTksICAyMTksICAyMTksICAyMTksICAyMjAsICAyMjAsCisg
ICAgICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjEsICAyMjEsICAyMjEsICAyMjEsICAyMjEs
ICAyMjEsCisgICAgICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMzQsICAy
MzQsICAyMzQsICAyNDEsCisgICAgICAyNDEsICAyNDEsICAyNDUsICAyNDUsICAyNDUsICAyNTEs
ICAyNTEsICAyNTEsICA0MTEsICA0MTEsCisKKyAgICAgIDQxMSwgIDQxMSwgIDQxMiwgIDQxMiwg
IDQxMywgIDQxMywgIDQxNCwgIDM2NywgIDQxNCwgIDQxNCwKKyAgICAgIDM2NiwgIDM2NSwgIDM2
NCwgIDM1OSwgIDM1NiwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwKKyAgICAgIDM0Nywg
IDM0NSwgIDM0NCwgIDM0MywgIDM0MiwgIDM0MCwgIDMzOSwgIDMzNywgIDMzNSwgIDMzNCwKKyAg
ICAgIDMzMywgIDMzMiwgIDMzMSwgIDMzMCwgIDMyOSwgIDMyNywgIDMyNiwgIDMyNSwgIDMyNCwg
IDMyMywKKyAgICAgIDMyMiwgIDMyMSwgIDMyMCwgIDMxOSwgIDMxNSwgIDMxNCwgIDMxMSwgIDMw
MCwgIDI5NiwgIDI5NSwKKyAgICAgIDI5NCwgIDI5MywgIDI4NiwgIDI4NSwgIDI4NCwgIDI3OSwg
IDI3OCwgIDI3NywgIDI3NiwgIDI3NSwKKyAgICAgIDI3NCwgIDI3MSwgIDI3MCwgIDI2OSwgIDI2
OCwgIDI2NywgIDI2NiwgIDI2NSwgIDI2NCwgIDI2MywKKyAgICAgIDI2MiwgIDI2MSwgIDI2MCwg
IDI1OSwgIDI1OCwgIDI1NywgIDI1MCwgIDI0OSwgIDI0OCwgIDI0NywKKyAgICAgIDI0NiwgIDI0
NCwgIDI0MCwgIDIzOSwgIDIzOCwgIDIzNywgIDIzMywgIDIzMiwgIDIzMSwgIDIzMCwKKyAgICAg
IDIyOSwgIDIyOCwgIDIyNSwgIDIyMywgIDIxOCwgIDIxNywgIDIxNiwgIDIxNCwgIDIxMywgIDIx
MiwKKworICAgICAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAgMjA1LCAgMjA0LCAgMjAz
LCAgMjAyLCAgMjAxLAorICAgICAgMjAwLCAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1LCAg
MTk0LCAgMTkzLCAgMTkxLCAgMTkwLAorICAgICAgMTg5LCAgMTg4LCAgMTg3LCAgMTg2LCAgMTg1
LCAgMTg0LCAgMTgzLCAgMTgyLCAgMTgxLCAgMTgwLAorICAgICAgMTc5LCAgMTc3LCAgMTc2LCAg
MTc1LCAgMTc0LCAgMTczLCAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LAorICAgICAgMTY4LCAgMTY2
LCAgMTY1LCAgMTY0LCAgMTYzLCAgMTYyLCAgMTYxLCAgMTQ2LCAgMTQ0LCAgMTQzLAorICAgICAg
MTQyLCAgMTQwLCAgMTM5LCAgMTM4LCAgMTM3LCAgMTM2LCAgMTM0LCAgMTMzLCAgMTMyLCAgMTMx
LAorICAgICAgMTMwLCAgMTI5LCAgMTI4LCAgMTI3LCAgMTI2LCAgMTI1LCAgMTI0LCAgMTIzLCAg
MTIxLCAgMTE4LAorICAgICAgMTE3LCAgMTE2LCAgMTE1LCAgMTE0LCAgMTEzLCAgMTEyLCAgMTEx
LCAgMTEwLCAgMTA5LCAgMTA4LAorICAgICAgMTA3LCAgMTA2LCAgMTA1LCAgMTA0LCAgMTAzLCAg
MTAyLCAgMTAxLCAgMTAwLCAgIDk5LCAgIDk4LAorICAgICAgIDk3LCAgIDk2LCAgIDk1LCAgIDkx
LCAgIDg3LCAgIDYwLCAgIDUzLCAgIDQ4LCAgIDQ2LCAgIDQzLAorCisgICAgICAgNDAsICAgMjcs
ICAgMjQsICAgMTYsICAgMTEsICAgIDcsICA0MTAsICA0MTAsICA0MTAsICA0MTAsCisgICAgICA0
MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAs
CisgICAgICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0
MTAsICA0MTAsCisgICAgICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAs
ICA0MTAsICA0MTAsICA0MTAsCisgICAgICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0
MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsCisgICAgICA0MTAsICA0MTAsICA0MTAsICA0MTAs
ICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsCisgICAgICA0MTAsICA0MTAsICA0
MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAKKyAgICB9IDsKKwor
LyogVGFibGUgb2YgYm9vbGVhbnMsIHRydWUgaWYgcnVsZSBjb3VsZCBtYXRjaCBlb2wuICovCitz
dGF0aWMgeXljb25zdCBmbGV4X2ludDMyX3QgeXlfcnVsZV9jYW5fbWF0Y2hfZW9sWzE0Nl0gPQor
ICAgIHsgICAwLAorMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
CisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMSwgMCwgMCwgICAgIH07CisKKy8qIFRoZSBpbnRlbnQg
YmVoaW5kIHRoaXMgZGVmaW5pdGlvbiBpcyB0aGF0IGl0J2xsIGNhdGNoCisgKiBhbnkgdXNlcyBv
ZiBSRUpFQ1Qgd2hpY2ggZmxleCBtaXNzZWQuCisgKi8KKyNkZWZpbmUgUkVKRUNUIHJlamVjdF91
c2VkX2J1dF9ub3RfZGV0ZWN0ZWQKKyNkZWZpbmUgeXltb3JlKCkgeXltb3JlX3VzZWRfYnV0X25v
dF9kZXRlY3RlZAorI2RlZmluZSBZWV9NT1JFX0FESiAwCisjZGVmaW5lIFlZX1JFU1RPUkVfWVlf
TU9SRV9PRkZTRVQKKy8qCisvLworLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xF
IFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNv
dXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUK
Ky8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCitUaGlzIGZpbGUgY29udGFpbnMg
dGhlIExleCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTLgorQmFzZWQgb24gQU5TSSBDIGdyYW1t
YXIsIExleCBzcGVjaWZpY2F0aW9uOgoraHR0cDovL3d3dy5seXNhdG9yLmxpdS5zZS9jL0FOU0kt
Qy1ncmFtbWFyLWwuaHRtbAorCitJRiBZT1UgTU9ESUZZIFRISVMgRklMRSBZT1UgQUxTTyBORUVE
IFRPIFJVTiBnZW5lcmF0ZV9nbHNsYW5nX2xleGVyLnNoLAorV0hJQ0ggR0VORVJBVEVTIFRIRSBH
TFNMIEVTIExFWEVSIChnbHNsYW5nX2xleC5jcHApLgorKi8KKworI2luY2x1ZGUgImNvbXBpbGVy
L2dsc2xhbmcuaCIKKyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUg
ImNvbXBpbGVyL3V0aWwuaCIKKyNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgorCisvKiB3aW5kb3dz
IG9ubHkgcHJhZ21hICovCisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxl
IDogNDEwMikKKyNlbmRpZgorCisjZGVmaW5lIFlZX1VTRVJfQUNUSU9OIHl5bHZhbC0+bGV4Lmxp
bmUgPSB5eWxpbmVubzsKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLCByZXN1bHQsIG1heF9zaXplKSBc
CisgICAgcmVzdWx0ID0gc3RyaW5nX2lucHV0KGJ1ZiwgbWF4X3NpemUsIHl5c2Nhbm5lcik7CisK
K3N0YXRpYyBpbnQgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplLCB5eXNjYW5f
dCB5eXNjYW5uZXIpOworc3RhdGljIGludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcik7
CitzdGF0aWMgaW50IHJlc2VydmVkX3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKTsKKworI2RlZmlu
ZSBJTklUSUFMIDAKKyNkZWZpbmUgQ09NTUVOVCAxCisjZGVmaW5lIEZJRUxEUyAyCisKKyNkZWZp
bmUgWVlfRVhUUkFfVFlQRSBUUGFyc2VDb250ZXh0KgorCisvKiBIb2xkcyB0aGUgZW50aXJlIHN0
YXRlIG9mIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KK3N0cnVjdCB5eWd1dHNfdAorICAgIHsK
KworICAgIC8qIFVzZXItZGVmaW5lZC4gTm90IHRvdWNoZWQgYnkgZmxleC4gKi8KKyAgICBZWV9F
WFRSQV9UWVBFIHl5ZXh0cmFfcjsKKworICAgIC8qIFRoZSByZXN0IGFyZSB0aGUgc2FtZSBhcyB0
aGUgZ2xvYmFscyBkZWNsYXJlZCBpbiB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLiAqLworICAg
IEZJTEUgKnl5aW5fciwgKnl5b3V0X3I7CisgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja190b3A7
IC8qKjwgaW5kZXggb2YgdG9wIG9mIHN0YWNrLiAqLworICAgIHNpemVfdCB5eV9idWZmZXJfc3Rh
Y2tfbWF4OyAvKio8IGNhcGFjaXR5IG9mIHN0YWNrLiAqLworICAgIFlZX0JVRkZFUl9TVEFURSAq
IHl5X2J1ZmZlcl9zdGFjazsgLyoqPCBTdGFjayBhcyBhbiBhcnJheS4gKi8KKyAgICBjaGFyIHl5
X2hvbGRfY2hhcjsKKyAgICBpbnQgeXlfbl9jaGFyczsKKyAgICBpbnQgeXlsZW5nX3I7CisgICAg
Y2hhciAqeXlfY19idWZfcDsKKyAgICBpbnQgeXlfaW5pdDsKKyAgICBpbnQgeXlfc3RhcnQ7Cisg
ICAgaW50IHl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZjsKKyAgICBpbnQgeXlfc3RhcnRfc3Rh
Y2tfcHRyOworICAgIGludCB5eV9zdGFydF9zdGFja19kZXB0aDsKKyAgICBpbnQgKnl5X3N0YXJ0
X3N0YWNrOworICAgIHl5X3N0YXRlX3R5cGUgeXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisgICAg
Y2hhciogeXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKworICAgIGludCB5eWxpbmVub19yOworICAg
IGludCB5eV9mbGV4X2RlYnVnX3I7CisKKyAgICBjaGFyICp5eXRleHRfcjsKKyAgICBpbnQgeXlf
bW9yZV9mbGFnOworICAgIGludCB5eV9tb3JlX2xlbjsKKworICAgIFlZU1RZUEUgKiB5eWx2YWxf
cjsKKworICAgIH07IC8qIGVuZCBzdHJ1Y3QgeXlndXRzX3QgKi8KKworc3RhdGljIGludCB5eV9p
bml0X2dsb2JhbHMgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisgICAgLyogVGhpcyBtdXN0IGdv
IGhlcmUgYmVjYXVzZSBZWVNUWVBFIGFuZCBZWUxUWVBFIGFyZSBpbmNsdWRlZAorICAgICAqIGZy
b20gYmlzb24gb3V0cHV0IGluIHNlY3Rpb24gMS4qLworICAgICMgICAgZGVmaW5lIHl5bHZhbCB5
eWctPnl5bHZhbF9yCisgICAgCitpbnQgeXlsZXhfaW5pdCAoeXlzY2FuX3QqIHNjYW5uZXIpOwor
CitpbnQgeXlsZXhfaW5pdF9leHRyYSAoWVlfRVhUUkFfVFlQRSB1c2VyX2RlZmluZWQseXlzY2Fu
X3QqIHNjYW5uZXIpOworCisvKiBBY2Nlc3NvciBtZXRob2RzIHRvIGdsb2JhbHMuCisgICBUaGVz
ZSBhcmUgbWFkZSB2aXNpYmxlIHRvIG5vbi1yZWVudHJhbnQgc2Nhbm5lcnMgZm9yIGNvbnZlbmll
bmNlLiAqLworCitpbnQgeXlsZXhfZGVzdHJveSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2lu
dCB5eWdldF9kZWJ1ZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfZGVidWcg
KGludCBkZWJ1Z19mbGFnICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworWVlfRVhUUkFfVFlQRSB5
eWdldF9leHRyYSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfZXh0cmEgKFlZ
X0VYVFJBX1RZUEUgdXNlcl9kZWZpbmVkICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAq
eXlnZXRfaW4gKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHl5c2V0X2luICAoRklMRSAq
IGluX3N0ciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK0ZJTEUgKnl5Z2V0X291dCAoeXlzY2Fu
X3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfb3V0ICAoRklMRSAqIG91dF9zdHIgLHl5c2Nh
bl90IHl5c2Nhbm5lciApOworCitpbnQgeXlnZXRfbGVuZyAoeXlzY2FuX3QgeXlzY2FubmVyICk7
CisKK2NoYXIgKnl5Z2V0X3RleHQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitpbnQgeXlnZXRf
bGluZW5vICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9saW5lbm8gKGludCBs
aW5lX251bWJlciAseXlzY2FuX3QgeXlzY2FubmVyICk7CisKK1lZU1RZUEUgKiB5eWdldF9sdmFs
ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9sdmFsIChZWVNUWVBFICogeXls
dmFsX3BhcmFtICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworLyogTWFjcm9zIGFmdGVyIHRoaXMg
cG9pbnQgY2FuIGFsbCBiZSBvdmVycmlkZGVuIGJ5IHVzZXIgZGVmaW5pdGlvbnMgaW4KKyAqIHNl
Y3Rpb24gMS4KKyAqLworCisjaWZuZGVmIFlZX1NLSVBfWVlXUkFQCisjaWZkZWYgX19jcGx1c3Bs
dXMKK2V4dGVybiAiQyIgaW50IHl5d3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZWxzZQor
ZXh0ZXJuIGludCB5eXdyYXAgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2VuZGlmCisjZW5kaWYK
KworI2lmbmRlZiB5eXRleHRfcHRyCitzdGF0aWMgdm9pZCB5eV9mbGV4X3N0cm5jcHkgKGNoYXIg
Kix5eWNvbnN0IGNoYXIgKixpbnQgLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisjZW5kaWYKKworI2lm
ZGVmIFlZX05FRURfU1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNo
YXIgKiAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisjaWZuZGVmIFlZX05PX0lOUFVU
CisKKyNpZmRlZiBfX2NwbHVzcGx1cworc3RhdGljIGludCB5eWlucHV0ICh5eXNjYW5fdCB5eXNj
YW5uZXIgKTsKKyNlbHNlCitzdGF0aWMgaW50IGlucHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsK
KyNlbmRpZgorCisjZW5kaWYKKworICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3RhdGUgKGludCBu
ZXdfc3RhdGUgLHl5c2Nhbl90IHl5c2Nhbm5lcik7CisgICAgCisgICAgc3RhdGljIHZvaWQgeXlf
cG9wX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAgICAKKyAgICBzdGF0aWMgaW50IHl5
X3RvcF9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisgICAgCisvKiBBbW91bnQgb2Ygc3R1
ZmYgdG8gc2x1cnAgdXAgd2l0aCBlYWNoIHJlYWQuICovCisjaWZuZGVmIFlZX1JFQURfQlVGX1NJ
WkUKKyNkZWZpbmUgWVlfUkVBRF9CVUZfU0laRSA4MTkyCisjZW5kaWYKKworLyogQ29weSB3aGF0
ZXZlciB0aGUgbGFzdCBydWxlIG1hdGNoZWQgdG8gdGhlIHN0YW5kYXJkIG91dHB1dC4gKi8KKyNp
Zm5kZWYgRUNITworLyogVGhpcyB1c2VkIHRvIGJlIGFuIGZwdXRzKCksIGJ1dCBzaW5jZSB0aGUg
c3RyaW5nIG1pZ2h0IGNvbnRhaW4gTlVMJ3MsCisgKiB3ZSBub3cgdXNlIGZ3cml0ZSgpLgorICov
CisjZGVmaW5lIEVDSE8gZndyaXRlKCB5eXRleHQsIHl5bGVuZywgMSwgeXlvdXQgKQorI2VuZGlm
CisKKy8qIEdldHMgaW5wdXQgYW5kIHN0dWZmcyBpdCBpbnRvICJidWYiLiAgbnVtYmVyIG9mIGNo
YXJhY3RlcnMgcmVhZCwgb3IgWVlfTlVMTCwKKyAqIGlzIHJldHVybmVkIGluICJyZXN1bHQiLgor
ICovCisjaWZuZGVmIFlZX0lOUFVUCisjZGVmaW5lIFlZX0lOUFVUKGJ1ZixyZXN1bHQsbWF4X3Np
emUpIFwKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfaXNfaW50ZXJhY3RpdmUg
KSBcCisJCXsgXAorCQlpbnQgYyA9ICcqJzsgXAorCQlpbnQgbjsgXAorCQlmb3IgKCBuID0gMDsg
biA8IG1heF9zaXplICYmIFwKKwkJCSAgICAgKGMgPSBnZXRjKCB5eWluICkpICE9IEVPRiAmJiBj
ICE9ICdcbic7ICsrbiApIFwKKwkJCWJ1ZltuXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSAn
XG4nICkgXAorCQkJYnVmW24rK10gPSAoY2hhcikgYzsgXAorCQlpZiAoIGMgPT0gRU9GICYmIGZl
cnJvciggeXlpbiApICkgXAorCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5u
ZXIgZmFpbGVkIiApOyBcCisJCXJlc3VsdCA9IG47IFwKKwkJfSBcCisJZWxzZSBcCisJCXsgXAor
CQllcnJubz0wOyBcCisJCXdoaWxlICggKHJlc3VsdCA9IGZyZWFkKGJ1ZiwgMSwgbWF4X3NpemUs
IHl5aW4pKT09MCAmJiBmZXJyb3IoeXlpbikpIFwKKwkJCXsgXAorCQkJaWYoIGVycm5vICE9IEVJ
TlRSKSBcCisJCQkJeyBcCisJCQkJWVlfRkFUQUxfRVJST1IoICJpbnB1dCBpbiBmbGV4IHNjYW5u
ZXIgZmFpbGVkIiApOyBcCisJCQkJYnJlYWs7IFwKKwkJCQl9IFwKKwkJCWVycm5vPTA7IFwKKwkJ
CWNsZWFyZXJyKHl5aW4pOyBcCisJCQl9IFwKKwkJfVwKK1wKKworI2VuZGlmCisKKy8qIE5vIHNl
bWktY29sb24gYWZ0ZXIgcmV0dXJuOyBjb3JyZWN0IHVzYWdlIGlzIHRvIHdyaXRlICJ5eXRlcm1p
bmF0ZSgpOyIgLQorICogd2UgZG9uJ3Qgd2FudCBhbiBleHRyYSAnOycgYWZ0ZXIgdGhlICJyZXR1
cm4iIGJlY2F1c2UgdGhhdCB3aWxsIGNhdXNlCisgKiBzb21lIGNvbXBpbGVycyB0byBjb21wbGFp
biBhYm91dCB1bnJlYWNoYWJsZSBzdGF0ZW1lbnRzLgorICovCisjaWZuZGVmIHl5dGVybWluYXRl
CisjZGVmaW5lIHl5dGVybWluYXRlKCkgcmV0dXJuIFlZX05VTEwKKyNlbmRpZgorCisvKiBOdW1i
ZXIgb2YgZW50cmllcyBieSB3aGljaCBzdGFydC1jb25kaXRpb24gc3RhY2sgZ3Jvd3MuICovCisj
aWZuZGVmIFlZX1NUQVJUX1NUQUNLX0lOQ1IKKyNkZWZpbmUgWVlfU1RBUlRfU1RBQ0tfSU5DUiAy
NQorI2VuZGlmCisKKy8qIFJlcG9ydCBhIGZhdGFsIGVycm9yLiAqLworI2lmbmRlZiBZWV9GQVRB
TF9FUlJPUgorI2RlZmluZSBZWV9GQVRBTF9FUlJPUihtc2cpIHl5X2ZhdGFsX2Vycm9yKCBtc2cg
LCB5eXNjYW5uZXIpCisjZW5kaWYKKworLyogZW5kIHRhYmxlcyBzZXJpYWxpemF0aW9uIHN0cnVj
dHVyZXMgYW5kIHByb3RvdHlwZXMgKi8KKworLyogRGVmYXVsdCBkZWNsYXJhdGlvbiBvZiBnZW5l
cmF0ZWQgc2Nhbm5lciAtIGEgZGVmaW5lIHNvIHRoZSB1c2VyIGNhbgorICogZWFzaWx5IGFkZCBw
YXJhbWV0ZXJzLgorICovCisjaWZuZGVmIFlZX0RFQ0wKKyNkZWZpbmUgWVlfREVDTF9JU19PVVJT
IDEKKworZXh0ZXJuIGludCB5eWxleCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZh
bF9wYXJhbSAseXlzY2FuX3QgeXlzY2FubmVyKTsKKworI2RlZmluZSBZWV9ERUNMIGludCB5eWxl
eCBcCisgICAgICAgICAgICAgICAoWVlTVFlQRSAqIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKKyNlbmRpZiAvKiAhWVlfREVDTCAqLworCisvKiBDb2RlIGV4ZWN1dGVkIGF0IHRo
ZSBiZWdpbm5pbmcgb2YgZWFjaCBydWxlLCBhZnRlciB5eXRleHQgYW5kIHl5bGVuZworICogaGF2
ZSBiZWVuIHNldCB1cC4KKyAqLworI2lmbmRlZiBZWV9VU0VSX0FDVElPTgorI2RlZmluZSBZWV9V
U0VSX0FDVElPTgorI2VuZGlmCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGVuZCBvZiBlYWNo
IHJ1bGUuICovCisjaWZuZGVmIFlZX0JSRUFLCisjZGVmaW5lIFlZX0JSRUFLIGJyZWFrOworI2Vu
ZGlmCisKKyNkZWZpbmUgWVlfUlVMRV9TRVRVUCBcCisJWVlfVVNFUl9BQ1RJT04KKworLyoqIFRo
ZSBtYWluIHNjYW5uZXIgZnVuY3Rpb24gd2hpY2ggZG9lcyBhbGwgdGhlIHdvcmsuCisgKi8KK1lZ
X0RFQ0wKK3sKKwlyZWdpc3RlciB5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGU7CisJcmVn
aXN0ZXIgY2hhciAqeXlfY3AsICp5eV9icDsKKwlyZWdpc3RlciBpbnQgeXlfYWN0OworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAg
IFRQYXJzZUNvbnRleHQqIGNvbnRleHQgPSB5eWV4dHJhOworCisgICAgLyogU2luZ2xlLWxpbmUg
Y29tbWVudHMgKi8KKworICAgIHl5bHZhbCA9IHl5bHZhbF9wYXJhbTsKKworCWlmICggIXl5Zy0+
eXlfaW5pdCApCisJCXsKKwkJeXlnLT55eV9pbml0ID0gMTsKKworI2lmZGVmIFlZX1VTRVJfSU5J
VAorCQlZWV9VU0VSX0lOSVQ7CisjZW5kaWYKKworCQlpZiAoICEgeXlnLT55eV9zdGFydCApCisJ
CQl5eWctPnl5X3N0YXJ0ID0gMTsJLyogZmlyc3Qgc3RhcnQgc3RhdGUgKi8KKworCQlpZiAoICEg
eXlpbiApCisJCQl5eWluID0gc3RkaW47CisKKwkJaWYgKCAhIHl5b3V0ICkKKwkJCXl5b3V0ID0g
c3Rkb3V0OworCisJCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApIHsKKwkJCXl5ZW5zdXJlX2J1
ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9CisJ
CQkJeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOworCQl9CisK
KwkJeXlfbG9hZF9idWZmZXJfc3RhdGUoeXlzY2FubmVyICk7CisJCX0KKworCXdoaWxlICggMSAp
CQkvKiBsb29wcyB1bnRpbCBlbmQtb2YtZmlsZSBpcyByZWFjaGVkICovCisJCXsKKwkJeXlfY3Ag
PSB5eWctPnl5X2NfYnVmX3A7CisKKwkJLyogU3VwcG9ydCBvZiB5eXRleHQuICovCisJCSp5eV9j
cCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJCS8qIHl5X2JwIHBvaW50cyB0byB0aGUgcG9zaXRp
b24gaW4geXlfY2hfYnVmIG9mIHRoZSBzdGFydCBvZgorCQkgKiB0aGUgY3VycmVudCBydW4uCisJ
CSAqLworCQl5eV9icCA9IHl5X2NwOworCisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0
YXJ0OworeXlfbWF0Y2g6CisJCWRvCisJCQl7CisJCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSB5
eV9lY1tZWV9TQ19UT19VSSgqeXlfY3ApXTsKKwkJCWlmICggeXlfYWNjZXB0W3l5X2N1cnJlbnRf
c3RhdGVdICkKKwkJCQl7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1
cnJlbnRfc3RhdGU7CisJCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zID0geXlfY3A7CisJ
CQkJfQorCQkJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2Nd
ICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQkJCXsKKwkJCQl5eV9jdXJyZW50X3N0YXRlID0gKGlu
dCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+
PSA0MTEgKQorCQkJCQl5eV9jID0geXlfbWV0YVsodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCQl9
CisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0g
KyAodW5zaWduZWQgaW50KSB5eV9jXTsKKwkJCSsreXlfY3A7CisJCQl9CisJCXdoaWxlICggeXlf
Y3VycmVudF9zdGF0ZSAhPSA0MTAgKTsKKwkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5n
X2Nwb3M7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRl
OworCit5eV9maW5kX2FjdGlvbjoKKwkJeXlfYWN0ID0geXlfYWNjZXB0W3l5X2N1cnJlbnRfc3Rh
dGVdOworCisJCVlZX0RPX0JFRk9SRV9BQ1RJT047CisKKwkJaWYgKCB5eV9hY3QgIT0gWVlfRU5E
X09GX0JVRkZFUiAmJiB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbeXlfYWN0XSApCisJCQl7CisJCQlp
bnQgeXlsOworCQkJZm9yICggeXlsID0gMDsgeXlsIDwgeXlsZW5nOyArK3l5bCApCisJCQkJaWYg
KCB5eXRleHRbeXlsXSA9PSAnXG4nICkKKwkJCQkJICAgCisgICAgZG97IHl5bGluZW5vKys7Cisg
ICAgICAgIHl5Y29sdW1uPTA7CisgICAgfXdoaWxlKDApCis7CisJCQl9CisKK2RvX2FjdGlvbjoJ
LyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25zLiAqLworCisJ
CXN3aXRjaCAoIHl5X2FjdCApCisJeyAvKiBiZWdpbm5pbmcgb2YgYWN0aW9uIHN3aXRjaCAqLwor
CQkJY2FzZSAwOiAvKiBtdXN0IGJhY2sgdXAgKi8KKwkJCS8qIHVuZG8gdGhlIGVmZmVjdHMgb2Yg
WVlfRE9fQkVGT1JFX0FDVElPTiAqLworCQkJKnl5X2NwID0geXlnLT55eV9ob2xkX2NoYXI7CisJ
CQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsKKwkJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlOworCQkJZ290byB5eV9maW5kX2FjdGlv
bjsKKworY2FzZSAxOgorWVlfUlVMRV9TRVRVUAorOworCVlZX0JSRUFLCisvKiBNdWx0aS1saW5l
IGNvbW1lbnRzICovCitjYXNlIDI6CitZWV9SVUxFX1NFVFVQCit7IHl5X3B1c2hfc3RhdGUoQ09N
TUVOVCwgeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDM6CitjYXNlIDQ6CisvKiBydWxl
IDQgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9TRVRVUAorOworCVlZX0JSRUFLCitjYXNlIDU6
CitZWV9SVUxFX1NFVFVQCit7IHl5X3BvcF9zdGF0ZSh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgNjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuKElOVkFSSUFOVCk7IH0KKwlZWV9CUkVB
SworY2FzZSA3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4oSElHSF9QUkVDSVNJT04pOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuKE1FRElVTV9QUkVDSVNJ
T04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgOToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuKExPV19Q
UkVDSVNJT04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA6CitZWV9SVUxFX1NFVFVQCit7IHJldHVy
bihQUkVDSVNJT04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybihBVFRSSUJVVEUpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI6CitZWV9SVUxFX1NFVFVQCit7
IHJldHVybihDT05TVF9RVUFMKTsgfQorCVlZX0JSRUFLCitjYXNlIDEzOgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4oVU5JRk9STSk7IH0KKwlZWV9CUkVBSworY2FzZSAxNDoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuKFZBUllJTkcpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTU6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybihCUkVBSyk7IH0KKwlZWV9CUkVBSworY2FzZSAxNjoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuKENPTlRJTlVFKTsgfQorCVlZX0JSRUFLCitjYXNlIDE3OgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4oRE8pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTg6CitZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybihGT1IpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTk6CitZWV9SVUxFX1NFVFVQCit7
IHJldHVybihXSElMRSk7IH0KKwlZWV9CUkVBSworY2FzZSAyMDoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuKElGKTsgfQorCVlZX0JSRUFLCitjYXNlIDIxOgorWVlfUlVMRV9TRVRVUAoreyByZXR1
cm4oRUxTRSk7IH0KKwlZWV9CUkVBSworY2FzZSAyMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
KElOX1FVQUwpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVy
bihPVVRfUVVBTCk7IH0KKwlZWV9CUkVBSworY2FzZSAyNDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuKElOT1VUX1FVQUwpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjU6CitZWV9SVUxFX1NFVFVQCit7
IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihGTE9BVF9UWVBFKTsgfQorCVlZ
X0JSRUFLCitjYXNlIDI2OgorWVlfUlVMRV9TRVRVUAoreyBjb250ZXh0LT5sZXhBZnRlclR5cGUg
PSB0cnVlOyByZXR1cm4oSU5UX1RZUEUpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjc6CitZWV9SVUxF
X1NFVFVQCit7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihWT0lEX1RZUEUp
OyB9CisJWVlfQlJFQUsKK2Nhc2UgMjg6CitZWV9SVUxFX1NFVFVQCit7IGNvbnRleHQtPmxleEFm
dGVyVHlwZSA9IHRydWU7IHJldHVybihCT09MX1RZUEUpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjk6
CitZWV9SVUxFX1NFVFVQCit7IHl5bHZhbC0+bGV4LmIgPSB0cnVlOyAgcmV0dXJuKEJPT0xDT05T
VEFOVCk7IH0KKwlZWV9CUkVBSworY2FzZSAzMDoKK1lZX1JVTEVfU0VUVVAKK3sgeXlsdmFsLT5s
ZXguYiA9IGZhbHNlOyByZXR1cm4oQk9PTENPTlNUQU5UKTsgfQorCVlZX0JSRUFLCitjYXNlIDMx
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4oRElTQ0FSRCk7IH0KKwlZWV9CUkVBSworY2FzZSAz
MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuKFJFVFVSTik7IH0KKwlZWV9CUkVBSworY2FzZSAz
MzoKK1lZX1JVTEVfU0VUVVAKK3sgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJu
KE1BVFJJWDIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzQ6CitZWV9SVUxFX1NFVFVQCit7IGNvbnRl
eHQtPmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihNQVRSSVgzKTsgfQorCVlZX0JSRUFLCitj
YXNlIDM1OgorWVlfUlVMRV9TRVRVUAoreyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSB0cnVlOyBy
ZXR1cm4oTUFUUklYNCk7IH0KKwlZWV9CUkVBSworY2FzZSAzNjoKK1lZX1JVTEVfU0VUVVAKK3sg
Y29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChWRUMyKTsgfQorCVlZX0JSRUFL
CitjYXNlIDM3OgorWVlfUlVMRV9TRVRVUAoreyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSB0cnVl
OyByZXR1cm4gKFZFQzMpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzg6CitZWV9SVUxFX1NFVFVQCit7
IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoVkVDNCk7IH0KKwlZWV9CUkVB
SworY2FzZSAzOToKK1lZX1JVTEVfU0VUVVAKK3sgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1
ZTsgcmV0dXJuIChJVkVDMik7IH0KKwlZWV9CUkVBSworY2FzZSA0MDoKK1lZX1JVTEVfU0VUVVAK
K3sgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChJVkVDMyk7IH0KKwlZWV9C
UkVBSworY2FzZSA0MToKK1lZX1JVTEVfU0VUVVAKK3sgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0g
dHJ1ZTsgcmV0dXJuIChJVkVDNCk7IH0KKwlZWV9CUkVBSworY2FzZSA0MjoKK1lZX1JVTEVfU0VU
VVAKK3sgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDMik7IH0KKwlZ
WV9CUkVBSworY2FzZSA0MzoKK1lZX1JVTEVfU0VUVVAKK3sgY29udGV4dC0+bGV4QWZ0ZXJUeXBl
ID0gdHJ1ZTsgcmV0dXJuIChCVkVDMyk7IH0KKwlZWV9CUkVBSworY2FzZSA0NDoKK1lZX1JVTEVf
U0VUVVAKK3sgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDNCk7IH0K
KwlZWV9CUkVBSworY2FzZSA0NToKK1lZX1JVTEVfU0VUVVAKK3sgY29udGV4dC0+bGV4QWZ0ZXJU
eXBlID0gdHJ1ZTsgcmV0dXJuIFNBTVBMRVIyRDsgfQorCVlZX0JSRUFLCitjYXNlIDQ2OgorWVlf
UlVMRV9TRVRVUAoreyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gU0FNUExF
UkNVQkU7IH0KKwlZWV9CUkVBSworY2FzZSA0NzoKK1lZX1JVTEVfU0VUVVAKK3sgY29udGV4dC0+
bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKFNUUlVDVCk7IH0KKwlZWV9CUkVBSworY2FzZSA0
ODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
CVlZX0JSRUFLCitjYXNlIDQ5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNTA6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA1MToKK1lZ
X1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JS
RUFLCitjYXNlIDUyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNTM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA1NDoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitj
YXNlIDU1OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisJWVlfQlJFQUsKK2Nhc2UgNTY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA1NzoKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDU4
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgNTk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA2MDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDYxOgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJF
QUsKK2Nhc2UgNjI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA2MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDY0OgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgNjU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKwlZWV9CUkVBSworY2FzZSA2NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDY3OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjg6
CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZ
WV9CUkVBSworY2FzZSA2OToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDcwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzE6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVB
SworY2FzZSA3MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDczOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVz
ZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzQ6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2Fz
ZSA3NToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsg
fQorCVlZX0JSRUFLCitjYXNlIDc2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRf
d29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzc6CitZWV9SVUxFX1NFVFVQCit7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3ODoK
K1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZ
X0JSRUFLCitjYXNlIDc5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5
eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgODA6CitZWV9SVUxFX1NFVFVQCit7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA4MToKK1lZX1JV
TEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFL
CitjYXNlIDgyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgODM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA4NDoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNl
IDg1OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CisJWVlfQlJFQUsKK2Nhc2UgODY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93
b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA4NzoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDg4Ogor
WVlfUlVMRV9TRVRVUAoreworICAgeXlsdmFsLT5sZXguc3RyaW5nID0gTmV3UG9vbFRTdHJpbmco
eXl0ZXh0KTsgCisgICByZXR1cm4gY2hlY2tfdHlwZSh5eXNjYW5uZXIpOworfQorCVlZX0JSRUFL
CitjYXNlIDg5OgorWVlfUlVMRV9TRVRVUAoreyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4
dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KKwlZWV9CUkVBSworY2FzZSA5MDoKK1lZ
X1JVTEVfU0VUVVAKK3sgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDApOyByZXR1
cm4oSU5UQ09OU1RBTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTE6CitZWV9SVUxFX1NFVFVQCit7
IGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBPY3RhbCBudW1iZXIuIiwgeXl0ZXh0
LCAiIiwgIiIpOyBjb250ZXh0LT5yZWNvdmVyKCk7IHJldHVybiAwO30KKwlZWV9CUkVBSworY2Fz
ZSA5MjoKK1lZX1JVTEVfU0VUVVAKK3sgeXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAs
IDApOyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTM6CitZWV9SVUxF
X1NFVFVQCit7IHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZl9kb3QoeXl0
ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQorCVlZX0JSRUFLCitjYXNlIDk0OgorWVlf
UlVMRV9TRVRVUAoreyB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90
KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KKwlZWV9CUkVBSworY2FzZSA5NToK
K1lZX1JVTEVfU0VUVVAKK3sgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9m
X2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
OTY6CitZWV9SVUxFX1NFVFVQCit7ICByZXR1cm4oQUREX0FTU0lHTik7IH0KKwlZWV9CUkVBSwor
Y2FzZSA5NzoKK1lZX1JVTEVfU0VUVVAKK3sgIHJldHVybihTVUJfQVNTSUdOKTsgfQorCVlZX0JS
RUFLCitjYXNlIDk4OgorWVlfUlVMRV9TRVRVUAoreyAgcmV0dXJuKE1VTF9BU1NJR04pOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgOTk6CitZWV9SVUxFX1NFVFVQCit7ICByZXR1cm4oRElWX0FTU0lHTik7
IH0KKwlZWV9CUkVBSworY2FzZSAxMDA6CitZWV9SVUxFX1NFVFVQCit7ICByZXR1cm4oTU9EX0FT
U0lHTik7IH0KKwlZWV9CUkVBSworY2FzZSAxMDE6CitZWV9SVUxFX1NFVFVQCit7ICByZXR1cm4o
TEVGVF9BU1NJR04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTAyOgorWVlfUlVMRV9TRVRVUAoreyAg
cmV0dXJuKFJJR0hUX0FTU0lHTik7IH0KKwlZWV9CUkVBSworY2FzZSAxMDM6CitZWV9SVUxFX1NF
VFVQCit7ICByZXR1cm4oQU5EX0FTU0lHTik7IH0KKwlZWV9CUkVBSworY2FzZSAxMDQ6CitZWV9S
VUxFX1NFVFVQCit7ICByZXR1cm4oWE9SX0FTU0lHTik7IH0KKwlZWV9CUkVBSworY2FzZSAxMDU6
CitZWV9SVUxFX1NFVFVQCit7ICByZXR1cm4oT1JfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNl
IDEwNjoKK1lZX1JVTEVfU0VUVVAKK3sgIHJldHVybihJTkNfT1ApOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTA3OgorWVlfUlVMRV9TRVRVUAoreyAgcmV0dXJuKERFQ19PUCk7IH0KKwlZWV9CUkVBSwor
Y2FzZSAxMDg6CitZWV9SVUxFX1NFVFVQCit7ICByZXR1cm4oQU5EX09QKTsgfQorCVlZX0JSRUFL
CitjYXNlIDEwOToKK1lZX1JVTEVfU0VUVVAKK3sgIHJldHVybihPUl9PUCk7IH0KKwlZWV9CUkVB
SworY2FzZSAxMTA6CitZWV9SVUxFX1NFVFVQCit7ICByZXR1cm4oWE9SX09QKTsgfQorCVlZX0JS
RUFLCitjYXNlIDExMToKK1lZX1JVTEVfU0VUVVAKK3sgIHJldHVybihMRV9PUCk7IH0KKwlZWV9C
UkVBSworY2FzZSAxMTI6CitZWV9SVUxFX1NFVFVQCit7ICByZXR1cm4oR0VfT1ApOyB9CisJWVlf
QlJFQUsKK2Nhc2UgMTEzOgorWVlfUlVMRV9TRVRVUAoreyAgcmV0dXJuKEVRX09QKTsgfQorCVlZ
X0JSRUFLCitjYXNlIDExNDoKK1lZX1JVTEVfU0VUVVAKK3sgIHJldHVybihORV9PUCk7IH0KKwlZ
WV9CUkVBSworY2FzZSAxMTU6CitZWV9SVUxFX1NFVFVQCit7ICByZXR1cm4oTEVGVF9PUCk7IH0K
KwlZWV9CUkVBSworY2FzZSAxMTY6CitZWV9SVUxFX1NFVFVQCit7ICByZXR1cm4oUklHSFRfT1Ap
OyB9CisJWVlfQlJFQUsKK2Nhc2UgMTE3OgorWVlfUlVMRV9TRVRVUAoreyBjb250ZXh0LT5sZXhB
ZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKFNFTUlDT0xPTik7IH0KKwlZWV9CUkVBSworY2FzZSAx
MTg6CitZWV9SVUxFX1NFVFVQCit7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1
cm4oTEVGVF9CUkFDRSk7IH0KKwlZWV9CUkVBSworY2FzZSAxMTk6CitZWV9SVUxFX1NFVFVQCit7
IHJldHVybihSSUdIVF9CUkFDRSk7IH0KKwlZWV9CUkVBSworY2FzZSAxMjA6CitZWV9SVUxFX1NF
VFVQCit7IGlmIChjb250ZXh0LT5pblR5cGVQYXJlbikgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0g
ZmFsc2U7IHJldHVybihDT01NQSk7IH0KKwlZWV9CUkVBSworY2FzZSAxMjE6CitZWV9SVUxFX1NF
VFVQCit7IHJldHVybihDT0xPTik7IH0KKwlZWV9CUkVBSworY2FzZSAxMjI6CitZWV9SVUxFX1NF
VFVQCit7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1cm4oRVFVQUwpOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgMTIzOgorWVlfUlVMRV9TRVRVUAoreyBjb250ZXh0LT5sZXhBZnRlclR5
cGUgPSBmYWxzZTsgY29udGV4dC0+aW5UeXBlUGFyZW4gPSB0cnVlOyByZXR1cm4oTEVGVF9QQVJF
Tik7IH0KKwlZWV9CUkVBSworY2FzZSAxMjQ6CitZWV9SVUxFX1NFVFVQCit7IGNvbnRleHQtPmlu
VHlwZVBhcmVuID0gZmFsc2U7IHJldHVybihSSUdIVF9QQVJFTik7IH0KKwlZWV9CUkVBSworY2Fz
ZSAxMjU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybihMRUZUX0JSQUNLRVQpOyB9CisJWVlfQlJF
QUsKK2Nhc2UgMTI2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4oUklHSFRfQlJBQ0tFVCk7IH0K
KwlZWV9CUkVBSworY2FzZSAxMjc6CitZWV9SVUxFX1NFVFVQCit7IEJFR0lOKEZJRUxEUyk7ICBy
ZXR1cm4oRE9UKTsgfQorCVlZX0JSRUFLCitjYXNlIDEyODoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuKEJBTkcpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1
cm4oREFTSCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMzA6CitZWV9SVUxFX1NFVFVQCit7IHJldHVy
bihUSUxERSk7IH0KKwlZWV9CUkVBSworY2FzZSAxMzE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVy
bihQTFVTKTsgfQorCVlZX0JSRUFLCitjYXNlIDEzMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
KFNUQVIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTMzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4o
U0xBU0gpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4o
UEVSQ0VOVCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMzU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVy
bihMRUZUX0FOR0xFKTsgfQorCVlZX0JSRUFLCitjYXNlIDEzNjoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuKFJJR0hUX0FOR0xFKTsgfQorCVlZX0JSRUFLCitjYXNlIDEzNzoKK1lZX1JVTEVfU0VU
VVAKK3sgcmV0dXJuKFZFUlRJQ0FMX0JBUik7IH0KKwlZWV9CUkVBSworY2FzZSAxMzg6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybihDQVJFVCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMzk6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybihBTVBFUlNBTkQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTQwOgor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4oUVVFU1RJT04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTQx
OgorWVlfUlVMRV9TRVRVUAoreyAKKyAgICBCRUdJTihJTklUSUFMKTsKKyAgICB5eWx2YWwtPmxl
eC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKKyAgICByZXR1cm4gRklFTERfU0VM
RUNUSU9OOworfQorCVlZX0JSRUFLCitjYXNlIDE0MjoKK1lZX1JVTEVfU0VUVVAKK3t9CisJWVlf
QlJFQUsKK2Nhc2UgMTQzOgorLyogcnVsZSAxNDMgY2FuIG1hdGNoIGVvbCAqLworWVlfUlVMRV9T
RVRVUAoreyAgfQorCVlZX0JSRUFLCitjYXNlIFlZX1NUQVRFX0VPRihJTklUSUFMKToKK2Nhc2Ug
WVlfU1RBVEVfRU9GKENPTU1FTlQpOgorY2FzZSBZWV9TVEFURV9FT0YoRklFTERTKToKK3sgY29u
dGV4dC0+QWZ0ZXJFT0YgPSB0cnVlOyB5eXRlcm1pbmF0ZSgpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MTQ0OgorWVlfUlVMRV9TRVRVUAoreyBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCAiVW5rbm93
biBjaGFyIiwgeXl0ZXh0LCAiIik7IHJldHVybiAwOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTQ1Ogor
WVlfUlVMRV9TRVRVUAorRUNITzsKKwlZWV9CUkVBSworCisJY2FzZSBZWV9FTkRfT0ZfQlVGRkVS
OgorCQl7CisJCS8qIEFtb3VudCBvZiB0ZXh0IG1hdGNoZWQgbm90IGluY2x1ZGluZyB0aGUgRU9C
IGNoYXIuICovCisJCWludCB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0ID0gKGludCkgKHl5X2Nw
IC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwkJLyogVW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9E
T19CRUZPUkVfQUNUSU9OLiAqLworCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJWVlf
UkVTVE9SRV9ZWV9NT1JFX09GRlNFVAorCisJCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9ORVcgKQorCQkJeworCQkJLyogV2UncmUg
c2Nhbm5pbmcgYSBuZXcgZmlsZSBvciBpbnB1dCBzb3VyY2UuICBJdCdzCisJCQkgKiBwb3NzaWJs
ZSB0aGF0IHRoaXMgaGFwcGVuZWQgYmVjYXVzZSB0aGUgdXNlcgorCQkJICoganVzdCBwb2ludGVk
IHl5aW4gYXQgYSBuZXcgc291cmNlIGFuZCBjYWxsZWQKKwkJCSAqIHl5bGV4KCkuICBJZiBzbywg
dGhlbiB3ZSBoYXZlIHRvIGFzc3VyZQorCQkJICogY29uc2lzdGVuY3kgYmV0d2VlbiBZWV9DVVJS
RU5UX0JVRkZFUiBhbmQgb3VyCisJCQkgKiBnbG9iYWxzLiAgSGVyZSBpcyB0aGUgcmlnaHQgcGxh
Y2UgdG8gZG8gc28sIGJlY2F1c2UKKwkJCSAqIHRoaXMgaXMgdGhlIGZpcnN0IGFjdGlvbiAob3Ro
ZXIgdGhhbiBwb3NzaWJseSBhCisJCQkgKiBiYWNrLXVwKSB0aGF0IHdpbGwgbWF0Y2ggZm9yIHRo
ZSBuZXcgaW5wdXQgc291cmNlLgorCQkJICovCisJCQl5eWctPnl5X25fY2hhcnMgPSBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUtPnl5X2lucHV0X2ZpbGUgPSB5eWluOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55
eV9idWZmZXJfc3RhdHVzID0gWVlfQlVGRkVSX05PUk1BTDsKKwkJCX0KKworCQkvKiBOb3RlIHRo
YXQgaGVyZSB3ZSB0ZXN0IGZvciB5eV9jX2J1Zl9wICI8PSIgdG8gdGhlIHBvc2l0aW9uCisJCSAq
IG9mIHRoZSBmaXJzdCBFT0IgaW4gdGhlIGJ1ZmZlciwgc2luY2UgeXlfY19idWZfcCB3aWxsCisJ
CSAqIGFscmVhZHkgaGF2ZSBiZWVuIGluY3JlbWVudGVkIHBhc3QgdGhlIE5VTCBjaGFyYWN0ZXIK
KwkJICogKHNpbmNlIGFsbCBzdGF0ZXMgbWFrZSB0cmFuc2l0aW9ucyBvbiBFT0IgdG8gdGhlCisJ
CSAqIGVuZC1vZi1idWZmZXIgc3RhdGUpLiAgQ29udHJhc3QgdGhpcyB3aXRoIHRoZSB0ZXN0CisJ
CSAqIGluIGlucHV0KCkuCisJCSAqLworCQlpZiAoIHl5Zy0+eXlfY19idWZfcCA8PSAmWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSApCisJCQl7IC8q
IFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJCXl5X3N0YXRlX3R5cGUgeXlfbmV4dF9zdGF0
ZTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgeXlfYW1vdW50X29m
X21hdGNoZWRfdGV4dDsKKworCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19z
dGF0ZSggeXlzY2FubmVyICk7CisKKwkJCS8qIE9rYXksIHdlJ3JlIG5vdyBwb3NpdGlvbmVkIHRv
IG1ha2UgdGhlIE5VTAorCQkJICogdHJhbnNpdGlvbi4gIFdlIGNvdWxkbid0IGhhdmUKKwkJCSAq
IHl5X2dldF9wcmV2aW91c19zdGF0ZSgpIGdvIGFoZWFkIGFuZCBkbyBpdAorCQkJICogZm9yIHVz
IGJlY2F1c2UgaXQgZG9lc24ndCBrbm93IGhvdyB0byBkZWFsCisJCQkgKiB3aXRoIHRoZSBwb3Nz
aWJpbGl0eSBvZiBqYW1taW5nIChhbmQgd2UgZG9uJ3QKKwkJCSAqIHdhbnQgdG8gYnVpbGQgamFt
bWluZyBpbnRvIGl0IGJlY2F1c2UgdGhlbiBpdAorCQkJICogd2lsbCBydW4gbW9yZSBzbG93bHkp
LgorCQkJICovCisKKwkJCXl5X25leHRfc3RhdGUgPSB5eV90cnlfTlVMX3RyYW5zKCB5eV9jdXJy
ZW50X3N0YXRlICwgeXlzY2FubmVyKTsKKworCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZ
WV9NT1JFX0FESjsKKworCQkJaWYgKCB5eV9uZXh0X3N0YXRlICkKKwkJCQl7CisJCQkJLyogQ29u
c3VtZSB0aGUgTlVMLiAqLworCQkJCXl5X2NwID0gKyt5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlf
Y3VycmVudF9zdGF0ZSA9IHl5X25leHRfc3RhdGU7CisJCQkJZ290byB5eV9tYXRjaDsKKwkJCQl9
CisKKwkJCWVsc2UKKwkJCQl7CisJCQkJeXlfY3AgPSB5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nw
b3M7CisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7
CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCQl9CisJCQl9CisKKwkJZWxzZSBzd2l0Y2gg
KCB5eV9nZXRfbmV4dF9idWZmZXIoIHl5c2Nhbm5lciApICkKKwkJCXsKKwkJCWNhc2UgRU9CX0FD
VF9FTkRfT0ZfRklMRToKKwkJCQl7CisJCQkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRjaF9vbl9l
b2YgPSAwOworCisJCQkJaWYgKCB5eXdyYXAoeXlzY2FubmVyICkgKQorCQkJCQl7CisJCQkJCS8q
IE5vdGU6IGJlY2F1c2Ugd2UndmUgdGFrZW4gY2FyZSBpbgorCQkJCQkgKiB5eV9nZXRfbmV4dF9i
dWZmZXIoKSB0byBoYXZlIHNldCB1cAorCQkJCQkgKiB5eXRleHQsIHdlIGNhbiBub3cgc2V0IHVw
CisJCQkJCSAqIHl5X2NfYnVmX3Agc28gdGhhdCBpZiBzb21lIHRvdGFsCisJCQkJCSAqIGhvc2Vy
IChsaWtlIGZsZXggaXRzZWxmKSB3YW50cyB0bworCQkJCQkgKiBjYWxsIHRoZSBzY2FubmVyIGFm
dGVyIHdlIHJldHVybiB0aGUKKwkJCQkJICogWVlfTlVMTCwgaXQnbGwgc3RpbGwgd29yayAtIGFu
b3RoZXIKKwkJCQkJICogWVlfTlVMTCB3aWxsIGdldCByZXR1cm5lZC4KKwkJCQkJICovCisJCQkJ
CXl5Zy0+eXlfY19idWZfcCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCisJCQkJ
CXl5X2FjdCA9IFlZX1NUQVRFX0VPRihZWV9TVEFSVCk7CisJCQkJCWdvdG8gZG9fYWN0aW9uOwor
CQkJCQl9CisKKwkJCQllbHNlCisJCQkJCXsKKwkJCQkJaWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZl
cl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19GSUxFOworCQkJCQl9CisJCQkJYnJlYWs7
CisJCQkJfQorCisJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQl5eWctPnl5X2Nf
YnVmX3AgPQorCQkJCQl5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0Y2hlZF90ZXh0
OworCisJCQkJeXlfY3VycmVudF9zdGF0ZSA9IHl5X2dldF9wcmV2aW91c19zdGF0ZSggeXlzY2Fu
bmVyICk7CisKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9icCA9IHl5Zy0+
eXl0ZXh0X3B0ciArIFlZX01PUkVfQURKOworCQkJCWdvdG8geXlfbWF0Y2g7CisKKwkJCWNhc2Ug
RU9CX0FDVF9MQVNUX01BVENIOgorCQkJCXl5Zy0+eXlfY19idWZfcCA9CisJCQkJJllZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc107CisKKwkJCQl5eV9j
dXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIgKTsKKworCQkJ
CXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRleHRfcHRyICsg
WVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9maW5kX2FjdGlvbjsKKwkJCX0KKwkJYnJlYWs7CisJ
CX0KKworCWRlZmF1bHQ6CisJCVlZX0ZBVEFMX0VSUk9SKAorCQkJImZhdGFsIGZsZXggc2Nhbm5l
ciBpbnRlcm5hbCBlcnJvci0tbm8gYWN0aW9uIGZvdW5kIiApOworCX0gLyogZW5kIG9mIGFjdGlv
biBzd2l0Y2ggKi8KKwkJfSAvKiBlbmQgb2Ygc2Nhbm5pbmcgb25lIHRva2VuICovCit9IC8qIGVu
ZCBvZiB5eWxleCAqLworCisvKiB5eV9nZXRfbmV4dF9idWZmZXIgLSB0cnkgdG8gcmVhZCBpbiBh
IG5ldyBidWZmZXIKKyAqCisgKiBSZXR1cm5zIGEgY29kZSByZXByZXNlbnRpbmcgYW4gYWN0aW9u
OgorICoJRU9CX0FDVF9MQVNUX01BVENIIC0KKyAqCUVPQl9BQ1RfQ09OVElOVUVfU0NBTiAtIGNv
bnRpbnVlIHNjYW5uaW5nIGZyb20gY3VycmVudCBwb3NpdGlvbgorICoJRU9CX0FDVF9FTkRfT0Zf
RklMRSAtIGVuZCBvZiBmaWxlCisgKi8KK3N0YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworCXJlZ2lzdGVyIGNoYXIgKmRlc3QgPSBZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZjsKKwlyZWdpc3RlciBjaGFyICpzb3VyY2UgPSB5eWct
Pnl5dGV4dF9wdHI7CisJcmVnaXN0ZXIgaW50IG51bWJlcl90b19tb3ZlLCBpOworCWludCByZXRf
dmFsOworCisJaWYgKCB5eWctPnl5X2NfYnVmX3AgPiAmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsgMV0gKQorCQlZWV9GQVRBTF9FUlJPUigKKwkJ
ImZhdGFsIGZsZXggc2Nhbm5lciBpbnRlcm5hbCBlcnJvci0tZW5kIG9mIGJ1ZmZlciBtaXNzZWQi
ICk7CisKKwlpZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfZmlsbF9idWZmZXIgPT0g
MCApCisJCXsgLyogRG9uJ3QgdHJ5IHRvIGZpbGwgdGhlIGJ1ZmZlciwgc28gdGhpcyBpcyBhbiBF
T0YuICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyIC0gWVlfTU9S
RV9BREogPT0gMSApCisJCQl7CisJCQkvKiBXZSBtYXRjaGVkIGEgc2luZ2xlIGNoYXJhY3Rlciwg
dGhlIEVPQiwgc28KKwkJCSAqIHRyZWF0IHRoaXMgYXMgYSBmaW5hbCBFT0YuCisJCQkgKi8KKwkJ
CXJldHVybiBFT0JfQUNUX0VORF9PRl9GSUxFOworCQkJfQorCisJCWVsc2UKKwkJCXsKKwkJCS8q
IFdlIG1hdGNoZWQgc29tZSB0ZXh0IHByaW9yIHRvIHRoZSBFT0IsIGZpcnN0CisJCQkgKiBwcm9j
ZXNzIGl0LgorCQkJICovCisJCQlyZXR1cm4gRU9CX0FDVF9MQVNUX01BVENIOworCQkJfQorCQl9
CisKKwkvKiBUcnkgdG8gcmVhZCBtb3JlIGRhdGEuICovCisKKwkvKiBGaXJzdCBtb3ZlIGxhc3Qg
Y2hhcnMgdG8gc3RhcnQgb2YgYnVmZmVyLiAqLworCW51bWJlcl90b19tb3ZlID0gKGludCkgKHl5
Zy0+eXlfY19idWZfcCAtIHl5Zy0+eXl0ZXh0X3B0cikgLSAxOworCisJZm9yICggaSA9IDA7IGkg
PCBudW1iZXJfdG9fbW92ZTsgKytpICkKKwkJKihkZXN0KyspID0gKihzb3VyY2UrKyk7CisKKwlp
ZiAoIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9PSBZWV9CVUZG
RVJfRU9GX1BFTkRJTkcgKQorCQkvKiBkb24ndCBkbyB0aGUgcmVhZCwgaXQncyBub3QgZ3VhcmFu
dGVlZCB0byByZXR1cm4gYW4gRU9GLAorCQkgKiBqdXN0IGZvcmNlIGFuIEVPRgorCQkgKi8KKwkJ
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9uX2NoYXJzID0g
MDsKKworCWVsc2UKKwkJeworCQkJaW50IG51bV90b19yZWFkID0KKwkJCVlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfYnVmX3NpemUgLSBudW1iZXJfdG9fbW92ZSAtIDE7CisKKwkJd2hpbGUg
KCBudW1fdG9fcmVhZCA8PSAwICkKKwkJCXsgLyogTm90IGVub3VnaCByb29tIGluIHRoZSBidWZm
ZXIgLSBncm93IGl0LiAqLworCisJCQkvKiBqdXN0IGEgc2hvcnRlciBuYW1lIGZvciB0aGUgY3Vy
cmVudCBidWZmZXIgKi8KKwkJCVlZX0JVRkZFUl9TVEFURSBiID0gWVlfQ1VSUkVOVF9CVUZGRVI7
CisKKwkJCWludCB5eV9jX2J1Zl9wX29mZnNldCA9CisJCQkJKGludCkgKHl5Zy0+eXlfY19idWZf
cCAtIGItPnl5X2NoX2J1Zik7CisKKwkJCWlmICggYi0+eXlfaXNfb3VyX2J1ZmZlciApCisJCQkJ
eworCQkJCWludCBuZXdfc2l6ZSA9IGItPnl5X2J1Zl9zaXplICogMjsKKworCQkJCWlmICggbmV3
X3NpemUgPD0gMCApCisJCQkJCWItPnl5X2J1Zl9zaXplICs9IGItPnl5X2J1Zl9zaXplIC8gODsK
KwkJCQllbHNlCisJCQkJCWItPnl5X2J1Zl9zaXplICo9IDI7CisKKwkJCQliLT55eV9jaF9idWYg
PSAoY2hhciAqKQorCQkJCQkvKiBJbmNsdWRlIHJvb20gaW4gZm9yIDIgRU9CIGNoYXJzLiAqLwor
CQkJCQl5eXJlYWxsb2MoKHZvaWQgKikgYi0+eXlfY2hfYnVmLGItPnl5X2J1Zl9zaXplICsgMiAs
eXlzY2FubmVyICk7CisJCQkJfQorCQkJZWxzZQorCQkJCS8qIENhbid0IGdyb3cgaXQsIHdlIGRv
bid0IG93biBpdC4gKi8KKwkJCQliLT55eV9jaF9idWYgPSAwOworCisJCQlpZiAoICEgYi0+eXlf
Y2hfYnVmICkKKwkJCQlZWV9GQVRBTF9FUlJPUigKKwkJCQkiZmF0YWwgZXJyb3IgLSBzY2FubmVy
IGlucHV0IGJ1ZmZlciBvdmVyZmxvdyIgKTsKKworCQkJeXlnLT55eV9jX2J1Zl9wID0gJmItPnl5
X2NoX2J1Zlt5eV9jX2J1Zl9wX29mZnNldF07CisKKwkJCW51bV90b19yZWFkID0gWVlfQ1VSUkVO
VF9CVUZGRVJfTFZBTFVFLT55eV9idWZfc2l6ZSAtCisJCQkJCQludW1iZXJfdG9fbW92ZSAtIDE7
CisKKwkJCX0KKworCQlpZiAoIG51bV90b19yZWFkID4gWVlfUkVBRF9CVUZfU0laRSApCisJCQlu
dW1fdG9fcmVhZCA9IFlZX1JFQURfQlVGX1NJWkU7CisKKwkJLyogUmVhZCBpbiBtb3JlIGRhdGEu
ICovCisJCVlZX0lOUFVUKCAoJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW251
bWJlcl90b19tb3ZlXSksCisJCQl5eWctPnl5X25fY2hhcnMsIChzaXplX3QpIG51bV90b19yZWFk
ICk7CisKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0geXlnLT55eV9u
X2NoYXJzOworCQl9CisKKwlpZiAoIHl5Zy0+eXlfbl9jaGFycyA9PSAwICkKKwkJeworCQlpZiAo
IG51bWJlcl90b19tb3ZlID09IFlZX01PUkVfQURKICkKKwkJCXsKKwkJCXJldF92YWwgPSBFT0Jf
QUNUX0VORF9PRl9GSUxFOworCQkJeXlyZXN0YXJ0KHl5aW4gICx5eXNjYW5uZXIpOworCQkJfQor
CisJCWVsc2UKKwkJCXsKKwkJCXJldF92YWwgPSBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1ZmZlcl9zdGF0dXMgPQorCQkJCVlZX0JVRkZFUl9F
T0ZfUEVORElORzsKKwkJCX0KKwkJfQorCisJZWxzZQorCQlyZXRfdmFsID0gRU9CX0FDVF9DT05U
SU5VRV9TQ0FOOworCisJaWYgKCh5eV9zaXplX3QpICh5eWctPnl5X25fY2hhcnMgKyBudW1iZXJf
dG9fbW92ZSkgPiBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplKSB7CisJCS8q
IEV4dGVuZCB0aGUgYXJyYXkgYnkgNTAlLCBwbHVzIHRoZSBudW1iZXIgd2UgcmVhbGx5IG5lZWQu
ICovCisJCXl5X3NpemVfdCBuZXdfc2l6ZSA9IHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19t
b3ZlICsgKHl5Zy0+eXlfbl9jaGFycyA+PiAxKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWYgPSAoY2hhciAqKSB5eXJlYWxsb2MoKHZvaWQgKikgWVlfQ1VSUkVOVF9CVUZG
RVJfTFZBTFVFLT55eV9jaF9idWYsbmV3X3NpemUgLHl5c2Nhbm5lciApOworCQlpZiAoICEgWVlf
Q1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWYgKQorCQkJWVlfRkFUQUxfRVJST1IoICJv
dXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfZ2V0X25leHRfYnVmZmVyKCkiICk7CisJfQorCisJ
eXlnLT55eV9uX2NoYXJzICs9IG51bWJlcl90b19tb3ZlOworCVlZX0NVUlJFTlRfQlVGRkVSX0xW
QUxVRS0+eXlfY2hfYnVmW3l5Zy0+eXlfbl9jaGFyc10gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7
CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzICsg
MV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwl5eWctPnl5dGV4dF9wdHIgPSAmWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbMF07CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30K
KworLyogeXlfZ2V0X3ByZXZpb3VzX3N0YXRlIC0gZ2V0IHRoZSBzdGF0ZSBqdXN0IGJlZm9yZSB0
aGUgRU9CIGNoYXIgd2FzIHJlYWNoZWQgKi8KKworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5
X2dldF9wcmV2aW91c19zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIHl5
X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3RlciBjaGFyICp5eV9jcDsKKyAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisK
Kwl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9zdGFydDsKKworCWZvciAoIHl5X2NwID0geXln
LT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7IHl5X2NwIDwgeXlnLT55eV9jX2J1Zl9wOyArK3l5
X2NwICkKKwkJeworCQlyZWdpc3RlciBZWV9DSEFSIHl5X2MgPSAoKnl5X2NwID8geXlfZWNbWVlf
U0NfVE9fVUkoKnl5X2NwKV0gOiAxKTsKKwkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0
ZV0gKQorCQkJeworCQkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZSA9IHl5X2N1cnJlbnRf
c3RhdGU7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCX0KKwkJ
d2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5X2NdICE9IHl5X2N1
cnJlbnRfc3RhdGUgKQorCQkJeworCQkJeXlfY3VycmVudF9zdGF0ZSA9IChpbnQpIHl5X2RlZlt5
eV9jdXJyZW50X3N0YXRlXTsKKwkJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0MTEgKQorCQkJ
CXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJfQorCQl5eV9jdXJyZW50
X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWduZWQgaW50
KSB5eV9jXTsKKwkJfQorCisJcmV0dXJuIHl5X2N1cnJlbnRfc3RhdGU7Cit9CisKKy8qIHl5X3Ry
eV9OVUxfdHJhbnMgLSB0cnkgdG8gbWFrZSBhIHRyYW5zaXRpb24gb24gdGhlIE5VTCBjaGFyYWN0
ZXIKKyAqCisgKiBzeW5vcHNpcworICoJbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIGN1
cnJlbnRfc3RhdGUgKTsKKyAqLworICAgIHN0YXRpYyB5eV9zdGF0ZV90eXBlIHl5X3RyeV9OVUxf
dHJhbnMgICh5eV9zdGF0ZV90eXBlIHl5X2N1cnJlbnRfc3RhdGUgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisJcmVnaXN0ZXIgaW50IHl5X2lzX2phbTsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5
eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7IC8qIFRoaXMgdmFyIG1heSBiZSB1bnVz
ZWQgZGVwZW5kaW5nIHVwb24gb3B0aW9ucy4gKi8KKwlyZWdpc3RlciBjaGFyICp5eV9jcCA9IHl5
Zy0+eXlfY19idWZfcDsKKworCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IDE7CisJaWYgKCB5eV9h
Y2NlcHRbeXlfY3VycmVudF9zdGF0ZV0gKQorCQl7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdf
c3RhdGUgPSB5eV9jdXJyZW50X3N0YXRlOworCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3Mg
PSB5eV9jcDsKKwkJfQorCXdoaWxlICggeXlfY2hrW3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0g
KyB5eV9jXSAhPSB5eV9jdXJyZW50X3N0YXRlICkKKwkJeworCQl5eV9jdXJyZW50X3N0YXRlID0g
KGludCkgeXlfZGVmW3l5X2N1cnJlbnRfc3RhdGVdOworCQlpZiAoIHl5X2N1cnJlbnRfc3RhdGUg
Pj0gNDExICkKKwkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQl9CisJ
eXlfY3VycmVudF9zdGF0ZSA9IHl5X254dFt5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgKHVu
c2lnbmVkIGludCkgeXlfY107CisJeXlfaXNfamFtID0gKHl5X2N1cnJlbnRfc3RhdGUgPT0gNDEw
KTsKKworCXJldHVybiB5eV9pc19qYW0gPyAwIDogeXlfY3VycmVudF9zdGF0ZTsKK30KKworI2lm
bmRlZiBZWV9OT19JTlBVVAorI2lmZGVmIF9fY3BsdXNwbHVzCisgICAgc3RhdGljIGludCB5eWlu
cHV0ICh5eXNjYW5fdCB5eXNjYW5uZXIpCisjZWxzZQorICAgIHN0YXRpYyBpbnQgaW5wdXQgICh5
eXNjYW5fdCB5eXNjYW5uZXIpCisjZW5kaWYKKworeworCWludCBjOworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCSp5eWctPnl5X2Nf
YnVmX3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKworCWlmICggKnl5Zy0+eXlfY19idWZfcCA9PSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVIgKQorCQl7CisJCS8qIHl5X2NfYnVmX3Agbm93IHBvaW50cyB0
byB0aGUgY2hhcmFjdGVyIHdlIHdhbnQgdG8gcmV0dXJuLgorCQkgKiBJZiB0aGlzIG9jY3VycyAq
YmVmb3JlKiB0aGUgRU9CIGNoYXJhY3RlcnMsIHRoZW4gaXQncyBhCisJCSAqIHZhbGlkIE5VTDsg
aWYgbm90LCB0aGVuIHdlJ3ZlIGhpdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIuCisJCSAqLworCQlp
ZiAoIHl5Zy0+eXlfY19idWZfcCA8ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1
Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCS8qIFRoaXMgd2FzIHJlYWxseSBhIE5VTC4gKi8KKwkJ
CSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOworCisJCWVsc2UKKwkJCXsgLyogbmVlZCBtb3JlIGlu
cHV0ICovCisJCQlpbnQgb2Zmc2V0ID0geXlnLT55eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRy
OworCQkJKyt5eWctPnl5X2NfYnVmX3A7CisKKwkJCXN3aXRjaCAoIHl5X2dldF9uZXh0X2J1ZmZl
ciggeXlzY2FubmVyICkgKQorCQkJCXsKKwkJCQljYXNlIEVPQl9BQ1RfTEFTVF9NQVRDSDoKKwkJ
CQkJLyogVGhpcyBoYXBwZW5zIGJlY2F1c2UgeXlfZ19uX2IoKQorCQkJCQkgKiBzZWVzIHRoYXQg
d2UndmUgYWNjdW11bGF0ZWQgYQorCQkJCQkgKiB0b2tlbiBhbmQgZmxhZ3MgdGhhdCB3ZSBuZWVk
IHRvCisJCQkJCSAqIHRyeSBtYXRjaGluZyB0aGUgdG9rZW4gYmVmb3JlCisJCQkJCSAqIHByb2Nl
ZWRpbmcuICBCdXQgZm9yIGlucHV0KCksCisJCQkJCSAqIHRoZXJlJ3Mgbm8gbWF0Y2hpbmcgdG8g
Y29uc2lkZXIuCisJCQkJCSAqIFNvIGNvbnZlcnQgdGhlIEVPQl9BQ1RfTEFTVF9NQVRDSAorCQkJ
CQkgKiB0byBFT0JfQUNUX0VORF9PRl9GSUxFLgorCQkJCQkgKi8KKworCQkJCQkvKiBSZXNldCBi
dWZmZXIgc3RhdHVzLiAqLworCQkJCQl5eXJlc3RhcnQoeXlpbiAseXlzY2FubmVyKTsKKworCQkJ
CQkvKkZBTExUSFJPVUdIKi8KKworCQkJCWNhc2UgRU9CX0FDVF9FTkRfT0ZfRklMRToKKwkJCQkJ
eworCQkJCQlpZiAoIHl5d3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCQlyZXR1cm4gRU9GOworCisJ
CQkJCWlmICggISB5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiApCisJCQkJCQlZWV9O
RVdfRklMRTsKKyNpZmRlZiBfX2NwbHVzcGx1cworCQkJCQlyZXR1cm4geXlpbnB1dCh5eXNjYW5u
ZXIpOworI2Vsc2UKKwkJCQkJcmV0dXJuIGlucHV0KHl5c2Nhbm5lcik7CisjZW5kaWYKKwkJCQkJ
fQorCisJCQkJY2FzZSBFT0JfQUNUX0NPTlRJTlVFX1NDQU46CisJCQkJCXl5Zy0+eXlfY19idWZf
cCA9IHl5Zy0+eXl0ZXh0X3B0ciArIG9mZnNldDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQor
CQl9CisKKwljID0gKih1bnNpZ25lZCBjaGFyICopIHl5Zy0+eXlfY19idWZfcDsJLyogY2FzdCBm
b3IgOC1iaXQgY2hhcidzICovCisJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7CS8qIHByZXNlcnZl
IHl5dGV4dCAqLworCXl5Zy0+eXlfaG9sZF9jaGFyID0gKisreXlnLT55eV9jX2J1Zl9wOworCisJ
aWYgKCBjID09ICdcbicgKQorCQkgICAKKyAgICBkb3sgeXlsaW5lbm8rKzsKKyAgICAgICAgeXlj
b2x1bW49MDsKKyAgICB9d2hpbGUoMCkKKzsKKworCXJldHVybiBjOworfQorI2VuZGlmCS8qIGlm
bmRlZiBZWV9OT19JTlBVVCAqLworCisvKiogSW1tZWRpYXRlbHkgc3dpdGNoIHRvIGEgZGlmZmVy
ZW50IGlucHV0IHN0cmVhbS4KKyAqIEBwYXJhbSBpbnB1dF9maWxlIEEgcmVhZGFibGUgc3RyZWFt
LgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAbm90ZSBUaGlz
IGZ1bmN0aW9uIGRvZXMgbm90IHJlc2V0IHRoZSBzdGFydCBjb25kaXRpb24gdG8gQGMgSU5JVElB
TCAuCisgKi8KKyAgICB2b2lkIHl5cmVzdGFydCAgKEZJTEUgKiBpbnB1dF9maWxlICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICggISBZWV9DVVJSRU5UX0JVRkZFUiApeworICAgICAg
ICB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbm5lcik7CisJCVlZX0NVUlJFTlRfQlVGRkVS
X0xWQUxVRSA9CisgICAgICAgICAgICB5eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUg
LHl5c2Nhbm5lcik7CisJfQorCisJeXlfaW5pdF9idWZmZXIoWVlfQ1VSUkVOVF9CVUZGRVIsaW5w
dXRfZmlsZSAseXlzY2FubmVyKTsKKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsK
K30KKworLyoqIFN3aXRjaCB0byBhIGRpZmZlcmVudCBpbnB1dCBidWZmZXIuCisgKiBAcGFyYW0g
bmV3X2J1ZmZlciBUaGUgbmV3IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgorICovCisgICAgdm9pZCB5eV9zd2l0Y2hfdG9fYnVmZmVyICAoWVlf
QlVGRkVSX1NUQVRFICBuZXdfYnVmZmVyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCS8q
IFRPRE8uIFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlcGxhY2UgdGhpcyBlbnRpcmUgZnVuY3Rpb24g
Ym9keQorCSAqIHdpdGgKKwkgKgkJeXlwb3BfYnVmZmVyX3N0YXRlKCk7CisJICoJCXl5cHVzaF9i
dWZmZXJfc3RhdGUobmV3X2J1ZmZlcik7CisgICAgICovCisJeXllbnN1cmVfYnVmZmVyX3N0YWNr
ICh5eXNjYW5uZXIpOworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgPT0gbmV3X2J1ZmZlciApCisJ
CXJldHVybjsKKworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7CisJCS8qIEZsdXNoIG91
dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KKwkJKnl5Zy0+eXlfY19idWZfcCA9IHl5
Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1Zl9wb3Mg
PSB5eWctPnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFy
cyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0g
bmV3X2J1ZmZlcjsKKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKworCS8qIFdl
IGRvbid0IGFjdHVhbGx5IGtub3cgd2hldGhlciB3ZSBkaWQgdGhpcyBzd2l0Y2ggZHVyaW5nCisJ
ICogRU9GICh5eXdyYXAoKSkgcHJvY2Vzc2luZywgYnV0IHRoZSBvbmx5IHRpbWUgdGhpcyBmbGFn
CisJICogaXMgbG9va2VkIGF0IGlzIGFmdGVyIHl5d3JhcCgpIGlzIGNhbGxlZCwgc28gaXQncyBz
YWZlCisJICogdG8gZ28gYWhlYWQgYW5kIGFsd2F5cyBzZXQgaXQuCisJICovCisJeXlnLT55eV9k
aWRfYnVmZmVyX3N3aXRjaF9vbl9lb2YgPSAxOworfQorCitzdGF0aWMgdm9pZCB5eV9sb2FkX2J1
ZmZlcl9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJeXlnLT55eV9uX2NoYXJzID0g
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzOworCXl5Zy0+eXl0ZXh0X3B0ciA9
IHl5Zy0+eXlfY19idWZfcCA9IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvczsK
Kwl5eWluID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pbnB1dF9maWxlOworCXl5Zy0+
eXlfaG9sZF9jaGFyID0gKnl5Zy0+eXlfY19idWZfcDsKK30KKworLyoqIEFsbG9jYXRlIGFuZCBp
bml0aWFsaXplIGFuIGlucHV0IGJ1ZmZlciBzdGF0ZS4KKyAqIEBwYXJhbSBmaWxlIEEgcmVhZGFi
bGUgc3RyZWFtLgorICogQHBhcmFtIHNpemUgVGhlIGNoYXJhY3RlciBidWZmZXIgc2l6ZSBpbiBi
eXRlcy4gV2hlbiBpbiBkb3VidCwgdXNlIEBjIFlZX0JVRl9TSVpFLgorICogQHBhcmFtIHl5c2Nh
bm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBhbGxvY2F0ZWQgYnVmZmVy
IHN0YXRlLgorICovCisgICAgWVlfQlVGRkVSX1NUQVRFIHl5X2NyZWF0ZV9idWZmZXIgIChGSUxF
ICogZmlsZSwgaW50ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9T
VEFURSBiOworICAgIAorCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9jKHNpemVvZiggc3Ry
dWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAoICEgYiApCisJCVlZX0ZB
VEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIg
KTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZTsKKworCS8qIHl5X2NoX2J1ZiBoYXMgdG8gYmUg
MiBjaGFyYWN0ZXJzIGxvbmdlciB0aGFuIHRoZSBzaXplIGdpdmVuIGJlY2F1c2UKKwkgKiB3ZSBu
ZWVkIHRvIHB1dCBpbiAyIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4KKwkgKi8KKwliLT55eV9j
aF9idWYgPSAoY2hhciAqKSB5eWFsbG9jKGItPnl5X2J1Zl9zaXplICsgMiAseXlzY2FubmVyICk7
CisJaWYgKCAhIGItPnl5X2NoX2J1ZiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFt
aWMgbWVtb3J5IGluIHl5X2NyZWF0ZV9idWZmZXIoKSIgKTsKKworCWItPnl5X2lzX291cl9idWZm
ZXIgPSAxOworCisJeXlfaW5pdF9idWZmZXIoYixmaWxlICx5eXNjYW5uZXIpOworCisJcmV0dXJu
IGI7Cit9CisKKy8qKiBEZXN0cm95IHRoZSBidWZmZXIuCisgKiBAcGFyYW0gYiBhIGJ1ZmZlciBj
cmVhdGVkIHdpdGggeXlfY3JlYXRlX2J1ZmZlcigpCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KKyAqLworICAgIHZvaWQgeXlfZGVsZXRlX2J1ZmZlciAoWVlfQlVGRkVS
X1NUQVRFICBiICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICggISBiICkKKwkJcmV0
dXJuOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkgLyogTm90IHN1cmUgaWYgd2Ug
c2hvdWxkIHBvcCBoZXJlLiAqLworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSAoWVlfQlVG
RkVSX1NUQVRFKSAwOworCisJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKwkJeXlmcmVlKCh2
b2lkICopIGItPnl5X2NoX2J1ZiAseXlzY2FubmVyICk7CisKKwl5eWZyZWUoKHZvaWQgKikgYiAs
eXlzY2FubmVyICk7Cit9CisKKy8qIEluaXRpYWxpemVzIG9yIHJlaW5pdGlhbGl6ZXMgYSBidWZm
ZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHNvbWV0aW1lcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ug
b24gdGhlIHNhbWUgYnVmZmVyLAorICogc3VjaCBhcyBkdXJpbmcgYSB5eXJlc3RhcnQoKSBvciBh
dCBFT0YuCisgKi8KKyAgICBzdGF0aWMgdm9pZCB5eV9pbml0X2J1ZmZlciAgKFlZX0JVRkZFUl9T
VEFURSAgYiwgRklMRSAqIGZpbGUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCisKK3sKKwlpbnQgb2Vy
cm5vID0gZXJybm87CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworCisJeXlfZmx1c2hfYnVmZmVyKGIgLHl5c2Nhbm5lcik7CisKKwliLT55
eV9pbnB1dF9maWxlID0gZmlsZTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDE7CisKKyAgICAvKiBJ
ZiBiIGlzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiB5eV9pbml0X2J1ZmZlciB3YXMgX3Byb2Jh
Ymx5XworICAgICAqIGNhbGxlZCBmcm9tIHl5cmVzdGFydCgpIG9yIHRocm91Z2ggeXlfZ2V0X25l
eHRfYnVmZmVyLgorICAgICAqIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0byByZXNldCB0
aGUgbGluZW5vIG9yIGNvbHVtbi4KKyAgICAgKi8KKyAgICBpZiAoYiAhPSBZWV9DVVJSRU5UX0JV
RkZFUil7CisgICAgICAgIGItPnl5X2JzX2xpbmVubyA9IDE7CisgICAgICAgIGItPnl5X2JzX2Nv
bHVtbiA9IDA7CisgICAgfQorCisgICAgICAgIGItPnl5X2lzX2ludGVyYWN0aXZlID0gMDsKKyAg
ICAKKwllcnJubyA9IG9lcnJubzsKK30KKworLyoqIERpc2NhcmQgYWxsIGJ1ZmZlcmVkIGNoYXJh
Y3RlcnMuIE9uIHRoZSBuZXh0IHNjYW4sIFlZX0lOUFVUIHdpbGwgYmUgY2FsbGVkLgorICogQHBh
cmFtIGIgdGhlIGJ1ZmZlciBzdGF0ZSB0byBiZSBmbHVzaGVkLCB1c3VhbGx5IEBjIFlZX0NVUlJF
TlRfQlVGRkVSLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8K
KyAgICB2b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFICBiICwgeXlzY2FuX3Qg
eXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRz
X3QqKXl5c2Nhbm5lcjsKKwlpZiAoICEgYiApCisJCXJldHVybjsKKworCWItPnl5X25fY2hhcnMg
PSAwOworCisJLyogV2UgYWx3YXlzIG5lZWQgdHdvIGVuZC1vZi1idWZmZXIgY2hhcmFjdGVycy4g
IFRoZSBmaXJzdCBjYXVzZXMKKwkgKiBhIHRyYW5zaXRpb24gdG8gdGhlIGVuZC1vZi1idWZmZXIg
c3RhdGUuICBUaGUgc2Vjb25kIGNhdXNlcworCSAqIGEgamFtIGluIHRoYXQgc3RhdGUuCisJICov
CisJYi0+eXlfY2hfYnVmWzBdID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCWItPnl5X2NoX2J1
ZlsxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCWItPnl5X2J1Zl9wb3MgPSAmYi0+eXlf
Y2hfYnVmWzBdOworCisJYi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9idWZmZXJfc3RhdHVzID0g
WVlfQlVGRkVSX05FVzsKKworCWlmICggYiA9PSBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXl5X2xv
YWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQorCisvKiogUHVzaGVzIHRoZSBuZXcgc3Rh
dGUgb250byB0aGUgc3RhY2suIFRoZSBuZXcgc3RhdGUgYmVjb21lcworICogIHRoZSBjdXJyZW50
IHN0YXRlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgdGhlIHN0YWNrCisgKiAgaWYgbmVj
ZXNzYXJ5LgorICogIEBwYXJhbSBuZXdfYnVmZmVyIFRoZSBuZXcgc3RhdGUuCisgKiAgQHBhcmFt
IHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3ZvaWQgeXlwdXNoX2J1ZmZlcl9z
dGF0ZSAoWVlfQlVGRkVSX1NUQVRFIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7
CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVy
OworCWlmIChuZXdfYnVmZmVyID09IE5VTEwpCisJCXJldHVybjsKKworCXl5ZW5zdXJlX2J1ZmZl
cl9zdGFjayh5eXNjYW5uZXIpOworCisJLyogVGhpcyBibG9jayBpcyBjb3BpZWQgZnJvbSB5eV9z
d2l0Y2hfdG9fYnVmZmVyLiAqLworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVIgKQorCQl7CisJCS8q
IEZsdXNoIG91dCBpbmZvcm1hdGlvbiBmb3Igb2xkIGJ1ZmZlci4gKi8KKwkJKnl5Zy0+eXlfY19i
dWZfcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1Zl9wb3MgPSB5eWctPnl5X2NfYnVmX3A7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfbl9jaGFycyA9IHl5Zy0+eXlfbl9jaGFyczsKKwkJfQorCisJLyogT25seSBwdXNoIGlmIHRv
cCBleGlzdHMuIE90aGVyd2lzZSwgcmVwbGFjZSB0b3AuICovCisJaWYgKFlZX0NVUlJFTlRfQlVG
RkVSKQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja190b3ArKzsKKwlZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUgPSBuZXdfYnVmZmVyOworCisJLyogY29waWVkIGZyb20geXlfc3dpdGNoX3RvX2J1ZmZl
ci4gKi8KKwl5eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwl5eWctPnl5X2RpZF9i
dWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisKKy8qKiBSZW1vdmVzIGFuZCBkZWxldGVzIHRo
ZSB0b3Agb2YgdGhlIHN0YWNrLCBpZiBwcmVzZW50LgorICogIFRoZSBuZXh0IGVsZW1lbnQgYmVj
b21lcyB0aGUgbmV3IHRvcC4KKyAqICBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqLwordm9pZCB5eXBvcF9idWZmZXJfc3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisJaWYgKCFZWV9DVVJSRU5UX0JVRkZFUikKKwkJcmV0dXJuOworCisJeXlfZGVsZXRlX2J1ZmZl
cihZWV9DVVJSRU5UX0JVRkZFUiAseXlzY2FubmVyKTsKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFM
VUUgPSBOVUxMOworCWlmICh5eWctPnl5X2J1ZmZlcl9zdGFja190b3AgPiAwKQorCQktLXl5Zy0+
eXlfYnVmZmVyX3N0YWNrX3RvcDsKKworCWlmIChZWV9DVVJSRU5UX0JVRkZFUikgeworCQl5eV9s
b2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJeXlnLT55eV9kaWRfYnVmZmVyX3N3aXRj
aF9vbl9lb2YgPSAxOworCX0KK30KKworLyogQWxsb2NhdGVzIHRoZSBzdGFjayBpZiBpdCBkb2Vz
IG5vdCBleGlzdC4KKyAqICBHdWFyYW50ZWVzIHNwYWNlIGZvciBhdCBsZWFzdCBvbmUgcHVzaC4K
KyAqLworc3RhdGljIHZvaWQgeXllbnN1cmVfYnVmZmVyX3N0YWNrICh5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisJaW50IG51bV90b19hbGxvYzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKwlpZiAoIXl5Zy0+eXlfYnVmZmVyX3N0YWNr
KSB7CisKKwkJLyogRmlyc3QgYWxsb2NhdGlvbiBpcyBqdXN0IGZvciAyIGVsZW1lbnRzLCBzaW5j
ZSB3ZSBkb24ndCBrbm93IGlmIHRoaXMKKwkJICogc2Nhbm5lciB3aWxsIGV2ZW4gbmVlZCBhIHN0
YWNrLiBXZSB1c2UgMiBpbnN0ZWFkIG9mIDEgdG8gYXZvaWQgYW4KKwkJICogaW1tZWRpYXRlIHJl
YWxsb2Mgb24gdGhlIG5leHQgY2FsbC4KKyAgICAgICAgICovCisJCW51bV90b19hbGxvYyA9IDE7
CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eWFs
bG9jCisJCQkJCQkJCShudW1fdG9fYWxsb2MgKiBzaXplb2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0
ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYgKCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNr
ICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJl
X2J1ZmZlcl9zdGFjaygpIiApOworCQkJCQkJCQkgIAorCQltZW1zZXQoeXlnLT55eV9idWZmZXJf
c3RhY2ssIDAsIG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikp
OworCQkJCQorCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9fYWxsb2M7CisJCXl5
Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA9IDA7CisJCXJldHVybjsKKwl9CisKKwlpZiAoeXlnLT55
eV9idWZmZXJfc3RhY2tfdG9wID49ICh5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgpIC0gMSl7CisK
KwkJLyogSW5jcmVhc2UgdGhlIGJ1ZmZlciB0byBwcmVwYXJlIGZvciBhIHBvc3NpYmxlIHB1c2gu
ICovCisJCWludCBncm93X3NpemUgPSA4IC8qIGFyYml0cmFyeSBncm93IHNpemUgKi87CisKKwkJ
bnVtX3RvX2FsbG9jID0geXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ICsgZ3Jvd19zaXplOworCQl5
eWctPnl5X2J1ZmZlcl9zdGFjayA9IChzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKiopeXlyZWFsbG9j
CisJCQkJCQkJCSh5eWctPnl5X2J1ZmZlcl9zdGFjaywKKwkJCQkJCQkJbnVtX3RvX2FsbG9jICog
c2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKQorCQkJCQkJCQksIHl5c2Nhbm5lcik7CisJ
CWlmICggISB5eWctPnl5X2J1ZmZlcl9zdGFjayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBv
ZiBkeW5hbWljIG1lbW9yeSBpbiB5eWVuc3VyZV9idWZmZXJfc3RhY2soKSIgKTsKKworCQkvKiB6
ZXJvIG9ubHkgdGhlIG5ldyBzbG90cy4qLworCQltZW1zZXQoeXlnLT55eV9idWZmZXJfc3RhY2sg
KyB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXgsIDAsIGdyb3dfc2l6ZSAqIHNpemVvZihzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlKikpOworCQl5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSBudW1fdG9f
YWxsb2M7CisJfQorfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZlciBzdGF0ZSB0byBzY2Fu
IGRpcmVjdGx5IGZyb20gYSB1c2VyLXNwZWNpZmllZCBjaGFyYWN0ZXIgYnVmZmVyLgorICogQHBh
cmFtIGJhc2UgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIEBwYXJhbSBzaXplIHRoZSBzaXplIGlu
IGJ5dGVzIG9mIHRoZSBjaGFyYWN0ZXIgYnVmZmVyCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBz
Y2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3Rh
dGUgb2JqZWN0LiAKKyAqLworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fYnVmZmVyICAoY2hhciAq
IGJhc2UsIHl5X3NpemVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZG
RVJfU1RBVEUgYjsKKyAgICAKKwlpZiAoIHNpemUgPCAyIHx8CisJICAgICBiYXNlW3NpemUtMl0g
IT0gWVlfRU5EX09GX0JVRkZFUl9DSEFSIHx8CisJICAgICBiYXNlW3NpemUtMV0gIT0gWVlfRU5E
X09GX0JVRkZFUl9DSEFSICkKKwkJLyogVGhleSBmb3Jnb3QgdG8gbGVhdmUgcm9vbSBmb3IgdGhl
IEVPQidzLiAqLworCQlyZXR1cm4gMDsKKworCWIgPSAoWVlfQlVGRkVSX1NUQVRFKSB5eWFsbG9j
KHNpemVvZiggc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSApICx5eXNjYW5uZXIgKTsKKwlpZiAoICEg
YiApCisJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5bmFtaWMgbWVtb3J5IGluIHl5X3NjYW5f
YnVmZmVyKCkiICk7CisKKwliLT55eV9idWZfc2l6ZSA9IHNpemUgLSAyOwkvKiAiLSAyIiB0byB0
YWtlIGNhcmUgb2YgRU9CJ3MgKi8KKwliLT55eV9idWZfcG9zID0gYi0+eXlfY2hfYnVmID0gYmFz
ZTsKKwliLT55eV9pc19vdXJfYnVmZmVyID0gMDsKKwliLT55eV9pbnB1dF9maWxlID0gMDsKKwli
LT55eV9uX2NoYXJzID0gYi0+eXlfYnVmX3NpemU7CisJYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAw
OworCWItPnl5X2F0X2JvbCA9IDE7CisJYi0+eXlfZmlsbF9idWZmZXIgPSAwOworCWItPnl5X2J1
ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTkVXOworCisJeXlfc3dpdGNoX3RvX2J1ZmZlcihiICx5
eXNjYW5uZXIgKTsKKworCXJldHVybiBiOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1ZmZl
ciBzdGF0ZSB0byBzY2FuIGEgc3RyaW5nLiBUaGUgbmV4dCBjYWxsIHRvIHl5bGV4KCkgd2lsbAor
ICogc2NhbiBmcm9tIGEgQGUgY29weSBvZiBAYSBzdHIuCisgKiBAcGFyYW0geXlzdHIgYSBOVUwt
dGVybWluYXRlZCBzdHJpbmcgdG8gc2NhbgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5l
ciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBhbGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9i
amVjdC4KKyAqIEBub3RlIElmIHlvdSB3YW50IHRvIHNjYW4gYnl0ZXMgdGhhdCBtYXkgY29udGFp
biBOVUwgdmFsdWVzLCB0aGVuIHVzZQorICogICAgICAgeXlfc2Nhbl9ieXRlcygpIGluc3RlYWQu
CisgKi8KK1lZX0JVRkZFUl9TVEFURSB5eV9zY2FuX3N0cmluZyAoeXljb25zdCBjaGFyICogeXlz
dHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgCisJcmV0dXJuIHl5X3NjYW5fYnl0ZXMo
eXlzdHIsc3RybGVuKHl5c3RyKSAseXlzY2FubmVyKTsKK30KKworLyoqIFNldHVwIHRoZSBpbnB1
dCBidWZmZXIgc3RhdGUgdG8gc2NhbiB0aGUgZ2l2ZW4gYnl0ZXMuIFRoZSBuZXh0IGNhbGwgdG8g
eXlsZXgoKSB3aWxsCisgKiBzY2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIGJ5dGVzLgorICogQHBh
cmFtIGJ5dGVzIHRoZSBieXRlIGJ1ZmZlciB0byBzY2FuCisgKiBAcGFyYW0gbGVuIHRoZSBudW1i
ZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5IEBhIGJ5dGVzLgorICogQHBh
cmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKiBAcmV0dXJuIHRoZSBuZXdseSBh
bGxvY2F0ZWQgYnVmZmVyIHN0YXRlIG9iamVjdC4KKyAqLworWVlfQlVGRkVSX1NUQVRFIHl5X3Nj
YW5fYnl0ZXMgICh5eWNvbnN0IGNoYXIgKiB5eWJ5dGVzLCBpbnQgIF95eWJ5dGVzX2xlbiAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlZWV9CVUZGRVJfU1RBVEUgYjsKKwljaGFyICpidWY7CisJ
eXlfc2l6ZV90IG47CisJaW50IGk7CisgICAgCisJLyogR2V0IG1lbW9yeSBmb3IgZnVsbCBidWZm
ZXIsIGluY2x1ZGluZyBzcGFjZSBmb3IgdHJhaWxpbmcgRU9CJ3MuICovCisJbiA9IF95eWJ5dGVz
X2xlbiArIDI7CisJYnVmID0gKGNoYXIgKikgeXlhbGxvYyhuICx5eXNjYW5uZXIgKTsKKwlpZiAo
ICEgYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlf
c2Nhbl9ieXRlcygpIiApOworCisJZm9yICggaSA9IDA7IGkgPCBfeXlieXRlc19sZW47ICsraSAp
CisJCWJ1ZltpXSA9IHl5Ynl0ZXNbaV07CisKKwlidWZbX3l5Ynl0ZXNfbGVuXSA9IGJ1ZltfeXli
eXRlc19sZW4rMV0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisKKwliID0geXlfc2Nhbl9idWZm
ZXIoYnVmLG4gLHl5c2Nhbm5lcik7CisJaWYgKCAhIGIgKQorCQlZWV9GQVRBTF9FUlJPUiggImJh
ZCBidWZmZXIgaW4geXlfc2Nhbl9ieXRlcygpIiApOworCisJLyogSXQncyBva2F5IHRvIGdyb3cg
ZXRjLiB0aGlzIGJ1ZmZlciwgYW5kIHdlIHNob3VsZCB0aHJvdyBpdAorCSAqIGF3YXkgd2hlbiB3
ZSdyZSBkb25lLgorCSAqLworCWItPnl5X2lzX291cl9idWZmZXIgPSAxOworCisJcmV0dXJuIGI7
Cit9CisKKyAgICBzdGF0aWMgdm9pZCB5eV9wdXNoX3N0YXRlIChpbnQgIG5ld19zdGF0ZSAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJaWYgKCB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA+PSB5
eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICkKKwkJeworCQl5eV9zaXplX3QgbmV3X3NpemU7CisK
KwkJeXlnLT55eV9zdGFydF9zdGFja19kZXB0aCArPSBZWV9TVEFSVF9TVEFDS19JTkNSOworCQlu
ZXdfc2l6ZSA9IHl5Zy0+eXlfc3RhcnRfc3RhY2tfZGVwdGggKiBzaXplb2YoIGludCApOworCisJ
CWlmICggISB5eWctPnl5X3N0YXJ0X3N0YWNrICkKKwkJCXl5Zy0+eXlfc3RhcnRfc3RhY2sgPSAo
aW50ICopIHl5YWxsb2MobmV3X3NpemUgLHl5c2Nhbm5lciApOworCisJCWVsc2UKKwkJCXl5Zy0+
eXlfc3RhcnRfc3RhY2sgPSAoaW50ICopIHl5cmVhbGxvYygodm9pZCAqKSB5eWctPnl5X3N0YXJ0
X3N0YWNrLG5ld19zaXplICx5eXNjYW5uZXIgKTsKKworCQlpZiAoICEgeXlnLT55eV9zdGFydF9z
dGFjayApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBtZW1vcnkgZXhwYW5kaW5nIHN0YXJ0
LWNvbmRpdGlvbiBzdGFjayIgKTsKKwkJfQorCisJeXlnLT55eV9zdGFydF9zdGFja1t5eWctPnl5
X3N0YXJ0X3N0YWNrX3B0cisrXSA9IFlZX1NUQVJUOworCisJQkVHSU4obmV3X3N0YXRlKTsKK30K
KworICAgIHN0YXRpYyB2b2lkIHl5X3BvcF9zdGF0ZSAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sK
KyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7
CisJaWYgKCAtLXl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyIDwgMCApCisJCVlZX0ZBVEFMX0VSUk9S
KCAic3RhcnQtY29uZGl0aW9uIHN0YWNrIHVuZGVyZmxvdyIgKTsKKworCUJFR0lOKHl5Zy0+eXlf
c3RhcnRfc3RhY2tbeXlnLT55eV9zdGFydF9zdGFja19wdHJdKTsKK30KKworICAgIHN0YXRpYyBp
bnQgeXlfdG9wX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1
dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlyZXR1cm4geXlnLT55
eV9zdGFydF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciAtIDFdOworfQorCisjaWZuZGVm
IFlZX0VYSVRfRkFJTFVSRQorI2RlZmluZSBZWV9FWElUX0ZBSUxVUkUgMgorI2VuZGlmCisKK3N0
YXRpYyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIqIG1zZyAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICAJKHZvaWQpIGZwcmludGYoIHN0ZGVyciwgIiVzXG4iLCBtc2cgKTsK
KwlleGl0KCBZWV9FWElUX0ZBSUxVUkUgKTsKK30KKworLyogUmVkZWZpbmUgeXlsZXNzKCkgc28g
aXQgd29ya3MgaW4gc2VjdGlvbiAzIGNvZGUuICovCisKKyN1bmRlZiB5eWxlc3MKKyNkZWZpbmUg
eXlsZXNzKG4pIFwKKwlkbyBcCisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1
cCB5eXRleHQuICovIFwKKyAgICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAg
ICAgICAgWVlfTEVTU19MSU5FTk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQl5eXRleHRbeXlsZW5n
XSA9IHl5Zy0+eXlfaG9sZF9jaGFyOyBcCisJCXl5Zy0+eXlfY19idWZfcCA9IHl5dGV4dCArIHl5
bGVzc19tYWNyb19hcmc7IFwKKwkJeXlnLT55eV9ob2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9w
OyBcCisJCSp5eWctPnl5X2NfYnVmX3AgPSAnXDAnOyBcCisJCXl5bGVuZyA9IHl5bGVzc19tYWNy
b19hcmc7IFwKKwkJfSBcCisJd2hpbGUgKCAwICkKKworLyogQWNjZXNzb3IgIG1ldGhvZHMgKGdl
dC9zZXQgZnVuY3Rpb25zKSB0byBzdHJ1Y3QgbWVtYmVycy4gKi8KKworLyoqIEdldCB0aGUgdXNl
ci1kZWZpbmVkIGRhdGEgZm9yIHRoaXMgc2Nhbm5lci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhl
IHNjYW5uZXIgb2JqZWN0LgorICovCitZWV9FWFRSQV9UWVBFIHl5Z2V0X2V4dHJhICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlleHRyYTsKK30KKworLyoqIEdldCB0aGUg
Y3VycmVudCBsaW5lIG51bWJlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICovCitpbnQgeXlnZXRfbGluZW5vICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAg
ICAKKyAgICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAKKyAgICByZXR1cm4geXlsaW5lbm87Cit9CisKKy8qKiBHZXQgdGhlIGN1cnJlbnQg
Y29sdW1uIG51bWJlci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgor
ICovCitpbnQgeXlnZXRfY29sdW1uICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVj
dCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICAKKyAg
ICAgICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICByZXR1cm4geXljb2x1bW47Cit9CisKKy8qKiBHZXQgdGhlIGlucHV0IHN0cmVhbS4K
KyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitGSUxFICp5eWdl
dF9pbiAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcg
PSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5aW47Cit9CisKKy8q
KiBHZXQgdGhlIG91dHB1dCBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVy
IG9iamVjdC4KKyAqLworRklMRSAqeXlnZXRfb3V0ICAoeXlzY2FuX3QgeXlzY2FubmVyKQorewor
ICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsK
KyAgICByZXR1cm4geXlvdXQ7Cit9CisKKy8qKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY3VycmVu
dCB0b2tlbi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCitp
bnQgeXlnZXRfbGVuZyAgKHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRz
X3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bGVu
ZzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCB0b2tlbi4KKyAqIEBwYXJhbSB5eXNjYW5uZXIg
VGhlIHNjYW5uZXIgb2JqZWN0LgorICovCisKK2NoYXIgKnl5Z2V0X3RleHQgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworICAgIHJldHVybiB5eXRleHQ7Cit9CisKKy8qKiBTZXQgdGhlIHVzZXIt
ZGVmaW5lZCBkYXRhLiBUaGlzIGRhdGEgaXMgbmV2ZXIgdG91Y2hlZCBieSB0aGUgc2Nhbm5lci4K
KyAqIEBwYXJhbSB1c2VyX2RlZmluZWQgVGhlIGRhdGEgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRo
aXMgc2Nhbm5lci4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICov
Cit2b2lkIHl5c2V0X2V4dHJhIChZWV9FWFRSQV9UWVBFICB1c2VyX2RlZmluZWQgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1
dHNfdCopeXlzY2FubmVyOworICAgIHl5ZXh0cmEgPSB1c2VyX2RlZmluZWQgOworfQorCisvKiog
U2V0IHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiBA
cGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCB5eXNldF9saW5l
bm8gKGludCAgbGluZV9udW1iZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAg
IC8qIGxpbmVubyBpcyBvbmx5IHZhbGlkIGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCisg
ICAgICAgIGlmICghIFlZX0NVUlJFTlRfQlVGRkVSICkKKyAgICAgICAgICAgeXlfZmF0YWxfZXJy
b3IoICJ5eXNldF9saW5lbm8gY2FsbGVkIHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAor
ICAgIAorICAgIHl5bGluZW5vID0gbGluZV9udW1iZXI7Cit9CisKKy8qKiBTZXQgdGhlIGN1cnJl
bnQgY29sdW1uLgorICogQHBhcmFtIGxpbmVfbnVtYmVyCisgKiBAcGFyYW0geXlzY2FubmVyIFRo
ZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCB5eXNldF9jb2x1bW4gKGludCAgY29sdW1uX25v
ICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworICAgICAgICAvKiBjb2x1bW4gaXMgb25seSB2
YWxpZCBpZiBhbiBpbnB1dCBidWZmZXIgZXhpc3RzLiAqLworICAgICAgICBpZiAoISBZWV9DVVJS
RU5UX0JVRkZFUiApCisgICAgICAgICAgIHl5X2ZhdGFsX2Vycm9yKCAieXlzZXRfY29sdW1uIGNh
bGxlZCB3aXRoIG5vIGJ1ZmZlciIgLCB5eXNjYW5uZXIpOyAKKyAgICAKKyAgICB5eWNvbHVtbiA9
IGNvbHVtbl9ubzsKK30KKworLyoqIFNldCB0aGUgaW5wdXQgc3RyZWFtLiBUaGlzIGRvZXMgbm90
IGRpc2NhcmQgdGhlIGN1cnJlbnQKKyAqIGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBpbl9zdHIg
QSByZWFkYWJsZSBzdHJlYW0uCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVj
dC4KKyAqIEBzZWUgeXlfc3dpdGNoX3RvX2J1ZmZlcgorICovCit2b2lkIHl5c2V0X2luIChGSUxF
ICogIGluX3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3Qg
KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlpbiA9IGluX3N0ciA7
Cit9CisKK3ZvaWQgeXlzZXRfb3V0IChGSUxFICogIG91dF9zdHIgLCB5eXNjYW5fdCB5eXNjYW5u
ZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlz
Y2FubmVyOworICAgIHl5b3V0ID0gb3V0X3N0ciA7Cit9CisKK2ludCB5eWdldF9kZWJ1ZyAgKHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0
IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5X2ZsZXhfZGVidWc7Cit9CisKK3Zv
aWQgeXlzZXRfZGVidWcgKGludCAgYmRlYnVnICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAg
ICB5eV9mbGV4X2RlYnVnID0gYmRlYnVnIDsKK30KKworLyogQWNjZXNzb3IgbWV0aG9kcyBmb3Ig
eXlsdmFsIGFuZCB5eWxsb2MgKi8KKworWVlTVFlQRSAqIHl5Z2V0X2x2YWwgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWx2YWw7Cit9CisKK3ZvaWQgeXlzZXRfbHZhbCAo
WVlTVFlQRSAqICB5eWx2YWxfcGFyYW0gLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5
bHZhbCA9IHl5bHZhbF9wYXJhbTsKK30KKworLyogVXNlci12aXNpYmxlIEFQSSAqLworCisvKiB5
eWxleF9pbml0IGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBjcmVhdGVzIHRoZSBzY2FubmVyIGl0c2Vs
Ziwgc28gaXQgaXMKKyAqIHRoZSBPTkxZIHJlZW50cmFudCBmdW5jdGlvbiB0aGF0IGRvZXNuJ3Qg
dGFrZSB0aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4KKyAqIFRoYXQncyB3aHkgd2Ug
ZXhwbGljaXRseSBoYW5kbGUgdGhlIGRlY2xhcmF0aW9uLCBpbnN0ZWFkIG9mIHVzaW5nIG91ciBt
YWNyb3MuCisgKi8KKworaW50IHl5bGV4X2luaXQoeXlzY2FuX3QqIHB0cl95eV9nbG9iYWxzKQor
Cit7CisgICAgaWYgKHB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJ
TlZBTDsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgKnB0cl95eV9nbG9iYWxzID0g
KHl5c2Nhbl90KSB5eWFsbG9jICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgTlVMTCApOwor
CisgICAgaWYgKCpwdHJfeXlfZ2xvYmFscyA9PSBOVUxMKXsKKyAgICAgICAgZXJybm8gPSBFTk9N
RU07CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhB
QSwgd2UgZXhwb3NlIGJ1Z3MgaW4geXlfaW5pdF9nbG9iYWxzLiBMZWF2ZSBhdCAweDAwIGZvciBy
ZWxlYXNlcy4gKi8KKyAgICBtZW1zZXQoKnB0cl95eV9nbG9iYWxzLDB4MDAsc2l6ZW9mKHN0cnVj
dCB5eWd1dHNfdCkpOworCisgICAgcmV0dXJuIHl5X2luaXRfZ2xvYmFscyAoICpwdHJfeXlfZ2xv
YmFscyApOworfQorCisvKiB5eWxleF9pbml0X2V4dHJhIGhhcyB0aGUgc2FtZSBmdW5jdGlvbmFs
aXR5IGFzIHl5bGV4X2luaXQsIGJ1dCBmb2xsb3dzIHRoZQorICogY29udmVudGlvbiBvZiB0YWtp
bmcgdGhlIHNjYW5uZXIgYXMgdGhlIGxhc3QgYXJndW1lbnQuIE5vdGUgaG93ZXZlciwgdGhhdAor
ICogdGhpcyBpcyBhICpwb2ludGVyKiB0byBhIHNjYW5uZXIsIGFzIGl0IHdpbGwgYmUgYWxsb2Nh
dGVkIGJ5IHRoaXMgY2FsbCAoYW5kCisgKiBpcyB0aGUgcmVhc29uLCB0b28sIHdoeSB0aGlzIGZ1
bmN0aW9uIGFsc28gbXVzdCBoYW5kbGUgaXRzIG93biBkZWNsYXJhdGlvbikuCisgKiBUaGUgdXNl
ciBkZWZpbmVkIHZhbHVlIGluIHRoZSBmaXJzdCBhcmd1bWVudCB3aWxsIGJlIGF2YWlsYWJsZSB0
byB5eWFsbG9jIGluCisgKiB0aGUgeXlleHRyYSBmaWVsZC4KKyAqLworCitpbnQgeXlsZXhfaW5p
dF9leHRyYShZWV9FWFRSQV9UWVBFIHl5X3VzZXJfZGVmaW5lZCx5eXNjYW5fdCogcHRyX3l5X2ds
b2JhbHMgKQorCit7CisgICAgc3RydWN0IHl5Z3V0c190IGR1bW15X3l5Z3V0czsKKworICAgIHl5
c2V0X2V4dHJhICh5eV91c2VyX2RlZmluZWQsICZkdW1teV95eWd1dHMpOworCisgICAgaWYgKHB0
cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAg
cmV0dXJuIDE7CisgICAgfQorCQorICAgICpwdHJfeXlfZ2xvYmFscyA9ICh5eXNjYW5fdCkgeXlh
bGxvYyAoIHNpemVvZiggc3RydWN0IHl5Z3V0c190ICksICZkdW1teV95eWd1dHMgKTsKKwkKKyAg
ICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsK
KyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIAorICAgIC8qIEJ5IHNldHRpbmcgdG8gMHhB
QSwgd2UgZXhwb3NlIGJ1Z3MgaW4KKyAgICB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAg
Zm9yIHJlbGVhc2VzLiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yo
c3RydWN0IHl5Z3V0c190KSk7CisgICAgCisgICAgeXlzZXRfZXh0cmEgKHl5X3VzZXJfZGVmaW5l
ZCwgKnB0cl95eV9nbG9iYWxzKTsKKyAgICAKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICgg
KnB0cl95eV9nbG9iYWxzICk7Cit9CisKK3N0YXRpYyBpbnQgeXlfaW5pdF9nbG9iYWxzICh5eXNj
YW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5
eWd1dHNfdCopeXlzY2FubmVyOworICAgIC8qIEluaXRpYWxpemF0aW9uIGlzIHRoZSBzYW1lIGFz
IGZvciB0aGUgbm9uLXJlZW50cmFudCBzY2FubmVyLgorICAgICAqIFRoaXMgZnVuY3Rpb24gaXMg
Y2FsbGVkIGZyb20geXlsZXhfZGVzdHJveSgpLCBzbyBkb24ndCBhbGxvY2F0ZSBoZXJlLgorICAg
ICAqLworCisgICAgeXlnLT55eV9idWZmZXJfc3RhY2sgPSAwOworICAgIHl5Zy0+eXlfYnVmZmVy
X3N0YWNrX3RvcCA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3RhY2tfbWF4ID0gMDsKKyAgICB5
eWctPnl5X2NfYnVmX3AgPSAoY2hhciAqKSAwOworICAgIHl5Zy0+eXlfaW5pdCA9IDA7CisgICAg
eXlnLT55eV9zdGFydCA9IDA7CisKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrX3B0ciA9IDA7Cisg
ICAgeXlnLT55eV9zdGFydF9zdGFja19kZXB0aCA9IDA7CisgICAgeXlnLT55eV9zdGFydF9zdGFj
ayA9ICBOVUxMOworCisvKiBEZWZpbmVkIGluIG1haW4uYyAqLworI2lmZGVmIFlZX1NURElOSVQK
KyAgICB5eWluID0gc3RkaW47CisgICAgeXlvdXQgPSBzdGRvdXQ7CisjZWxzZQorICAgIHl5aW4g
PSAoRklMRSAqKSAwOworICAgIHl5b3V0ID0gKEZJTEUgKikgMDsKKyNlbmRpZgorCisgICAgLyog
Rm9yIGZ1dHVyZSByZWZlcmVuY2U6IFNldCBlcnJubyBvbiBlcnJvciwgc2luY2Ugd2UgYXJlIGNh
bGxlZCBieQorICAgICAqIHl5bGV4X2luaXQoKQorICAgICAqLworICAgIHJldHVybiAwOworfQor
CisvKiB5eWxleF9kZXN0cm95IGlzIGZvciBib3RoIHJlZW50cmFudCBhbmQgbm9uLXJlZW50cmFu
dCBzY2FubmVycy4gKi8KK2ludCB5eWxleF9kZXN0cm95ICAoeXlzY2FuX3QgeXlzY2FubmVyKQor
eworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5l
cjsKKworICAgIC8qIFBvcCB0aGUgYnVmZmVyIHN0YWNrLCBkZXN0cm95aW5nIGVhY2ggZWxlbWVu
dC4gKi8KKwl3aGlsZShZWV9DVVJSRU5UX0JVRkZFUil7CisJCXl5X2RlbGV0ZV9idWZmZXIoWVlf
Q1VSUkVOVF9CVUZGRVIgLHl5c2Nhbm5lciApOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUg
PSBOVUxMOworCQl5eXBvcF9idWZmZXJfc3RhdGUoeXlzY2FubmVyKTsKKwl9CisKKwkvKiBEZXN0
cm95IHRoZSBzdGFjayBpdHNlbGYuICovCisJeXlmcmVlKHl5Zy0+eXlfYnVmZmVyX3N0YWNrICx5
eXNjYW5uZXIpOworCXl5Zy0+eXlfYnVmZmVyX3N0YWNrID0gTlVMTDsKKworICAgIC8qIERlc3Ry
b3kgdGhlIHN0YXJ0IGNvbmRpdGlvbiBzdGFjay4gKi8KKyAgICAgICAgeXlmcmVlKHl5Zy0+eXlf
c3RhcnRfc3RhY2sgLHl5c2Nhbm5lciApOworICAgICAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0g
TlVMTDsKKworICAgIC8qIFJlc2V0IHRoZSBnbG9iYWxzLiBUaGlzIGlzIGltcG9ydGFudCBpbiBh
IG5vbi1yZWVudHJhbnQgc2Nhbm5lciBzbyB0aGUgbmV4dCB0aW1lCisgICAgICogeXlsZXgoKSBp
cyBjYWxsZWQsIGluaXRpYWxpemF0aW9uIHdpbGwgb2NjdXIuICovCisgICAgeXlfaW5pdF9nbG9i
YWxzKCB5eXNjYW5uZXIpOworCisgICAgLyogRGVzdHJveSB0aGUgbWFpbiBzdHJ1Y3QgKHJlZW50
cmFudCBvbmx5KS4gKi8KKyAgICB5eWZyZWUgKCB5eXNjYW5uZXIgLCB5eXNjYW5uZXIgKTsKKyAg
ICB5eXNjYW5uZXIgPSBOVUxMOworICAgIHJldHVybiAwOworfQorCisvKgorICogSW50ZXJuYWwg
dXRpbGl0eSByb3V0aW5lcy4KKyAqLworCisjaWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lk
IHl5X2ZsZXhfc3RybmNweSAoY2hhciogczEsIHl5Y29uc3QgY2hhciAqIHMyLCBpbnQgbiAsIHl5
c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZWdpc3RlciBpbnQgaTsKKwlmb3IgKCBpID0gMDsgaSA8
IG47ICsraSApCisJCXMxW2ldID0gczJbaV07Cit9CisjZW5kaWYKKworI2lmZGVmIFlZX05FRURf
U1RSTEVOCitzdGF0aWMgaW50IHl5X2ZsZXhfc3RybGVuICh5eWNvbnN0IGNoYXIgKiBzICwgeXlz
Y2FuX3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCBuOworCWZvciAoIG4gPSAwOyBzW25d
OyArK24gKQorCQk7CisKKwlyZXR1cm4gbjsKK30KKyNlbmRpZgorCit2b2lkICp5eWFsbG9jICh5
eV9zaXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmV0dXJuICh2b2lkICop
IG1hbGxvYyggc2l6ZSApOworfQorCit2b2lkICp5eXJlYWxsb2MgICh2b2lkICogcHRyLCB5eV9z
aXplX3QgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJLyogVGhlIGNhc3QgdG8gKGNo
YXIgKikgaW4gdGhlIGZvbGxvd2luZyBhY2NvbW1vZGF0ZXMgYm90aAorCSAqIGltcGxlbWVudGF0
aW9ucyB0aGF0IHVzZSBjaGFyKiBnZW5lcmljIHBvaW50ZXJzLCBhbmQgdGhvc2UKKwkgKiB0aGF0
IHVzZSB2b2lkKiBnZW5lcmljIHBvaW50ZXJzLiAgSXQgd29ya3Mgd2l0aCB0aGUgbGF0dGVyCisJ
ICogYmVjYXVzZSBib3RoIEFOU0kgQyBhbmQgQysrIGFsbG93IGNhc3RsZXNzIGFzc2lnbm1lbnQg
ZnJvbQorCSAqIGFueSBwb2ludGVyIHR5cGUgdG8gdm9pZCosIGFuZCBkZWFsIHdpdGggYXJndW1l
bnQgY29udmVyc2lvbnMKKwkgKiBhcyB0aG91Z2ggZG9pbmcgYW4gYXNzaWdubWVudC4KKwkgKi8K
KwlyZXR1cm4gKHZvaWQgKikgcmVhbGxvYyggKGNoYXIgKikgcHRyLCBzaXplICk7Cit9CisKK3Zv
aWQgeXlmcmVlICh2b2lkICogcHRyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCWZyZWUoIChj
aGFyICopIHB0ciApOwkvKiBzZWUgeXlyZWFsbG9jKCkgZm9yIChjaGFyICopIGNhc3QgKi8KK30K
KworI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKKworZXh0ZXJuICJDIiB7CisvLyBQ
cmVwcm9jZXNzb3IgaW50ZXJmYWNlLgorI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9w
cmVwcm9jZXNzLmgiCisKKyNkZWZpbmUgU0VUVVBfQ09OVEVYVChwcCkgXAorICAgIFRQYXJzZUNv
bnRleHQqIGNvbnRleHQgPSAoVFBhcnNlQ29udGV4dCopIHBwLT5wQzsgXAorICAgIHN0cnVjdCB5
eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CisKKy8v
IFByZXByb2Nlc3NvciBjYWxsYmFja3MuCit2b2lkIENQUERlYnVnTG9nTXNnKGNvbnN0IGNoYXIg
Km1zZykKK3sKKyAgICBTRVRVUF9DT05URVhUKGNwcCk7CisgICAgY29udGV4dC0+aW5mb1Npbmsu
ZGVidWcubWVzc2FnZShFUHJlZml4Tm9uZSwgbXNnKTsKK30KKwordm9pZCBDUFBXYXJuaW5nVG9J
bmZvTG9nKGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgICBTRVRVUF9DT05URVhUKGNwcCk7CisgICAg
Y29udGV4dC0+d2FybmluZyh5eWxpbmVubywgbXNnLCAiIiwgIiIpOworfQorCit2b2lkIENQUFNo
SW5mb0xvZ01zZyhjb25zdCBjaGFyICptc2cpCit7CisgICAgU0VUVVBfQ09OVEVYVChjcHApOwor
ICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+
cmVjb3ZlcigpOworfQorCit2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKm1zZykKK3sKKyAg
ICBTRVRVUF9DT05URVhUKGNwcCk7CisgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywg
IiIsICIiKTsKKyAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cit9CisKK3ZvaWQgU2V0TGluZU51bWJl
cihpbnQgbGluZSkKK3sKKyAgICBTRVRVUF9DT05URVhUKGNwcCk7CisgICAgaW50IHN0cmluZyA9
IDA7CisgICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCBOVUxMKTsKKyAgICB5
eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsIGxpbmUpOworfQorCit2b2lkIFNldFN0
cmluZ051bWJlcihpbnQgc3RyaW5nKQoreworICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKKyAgICBp
bnQgbGluZSA9IDA7CisgICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCBOVUxMLCAmbGluZSk7
CisgICAgeXlsaW5lbm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCBsaW5lKTsKK30KKworaW50
IEdldFN0cmluZ051bWJlcigpCit7CisgICAgU0VUVVBfQ09OVEVYVChjcHApOworICAgIGludCBz
dHJpbmcgPSAwOworICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgJnN0cmluZywgTlVMTCk7
CisgICAgcmV0dXJuIHN0cmluZzsKK30KKworaW50IEdldExpbmVOdW1iZXIoKQoreworICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKKyAgICBpbnQgbGluZSA9IDA7CisgICAgRGVjb2RlU291cmNlTG9j
KHl5bGluZW5vLCBOVUxMLCAmbGluZSk7CisgICAgcmV0dXJuIGxpbmU7Cit9CisKK3ZvaWQgSW5j
TGluZU51bWJlcigpCit7CisgICAgU0VUVVBfQ09OVEVYVChjcHApOworICAgIGludCBzdHJpbmcg
PSAwLCBsaW5lID0gMDsKKyAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZzdHJpbmcsICZs
aW5lKTsKKyAgICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsICsrbGluZSk7Cit9
CisKK3ZvaWQgRGVjTGluZU51bWJlcigpCit7CisgICAgU0VUVVBfQ09OVEVYVChjcHApOworICAg
IGludCBzdHJpbmcgPSAwLCBsaW5lID0gMDsKKyAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8s
ICZzdHJpbmcsICZsaW5lKTsKKyAgICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcs
IC0tbGluZSk7Cit9CisKK3ZvaWQgSGFuZGxlUHJhZ21hKGNvbnN0IGNoYXIgKip0b2tlbnMsIGlu
dCBudW1Ub2tlbnMpCit7CisgICAgU0VUVVBfQ09OVEVYVChjcHApOworICAgIGlmICghc3RyY21w
KHRva2Vuc1swXSwgIm9wdGltaXplIikpIHsKKyAgICAgICAgaWYgKG51bVRva2VucyAhPSA0KSB7
CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIm9wdGltaXplIHByYWdtYSBzeW50YXggaXMg
aW5jb3JyZWN0Iik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAiKCIpKSB7CisgICAgICAgICAgICBDUFBTaElu
Zm9Mb2dNc2coIlwiKFwiIGV4cGVjdGVkIGFmdGVyICdvcHRpbWl6ZScga2V5d29yZCIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgaWYgKCFz
dHJjbXAodG9rZW5zWzJdLCAib24iKSkKKyAgICAgICAgICAgIGNvbnRleHQtPmNvbnRleHRQcmFn
bWEub3B0aW1pemUgPSB0cnVlOworICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2Vuc1syXSwg
Im9mZiIpKQorICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IGZh
bHNlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygiXCJvblwi
IG9yIFwib2ZmXCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnb3B0aW1pemUnIHByYWdtYSIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3Ry
Y21wKHRva2Vuc1szXSwgIikiKSkgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIilc
IiBleHBlY3RlZCB0byBlbmQgJ29wdGltaXplJyBwcmFnbWEiKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMF0sICJkZWJ1ZyIp
KSB7CisgICAgICAgIGlmIChudW1Ub2tlbnMgIT0gNCkgeworICAgICAgICAgICAgQ1BQU2hJbmZv
TG9nTXNnKCJkZWJ1ZyBwcmFnbWEgc3ludGF4IGlzIGluY29ycmVjdCIpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1sx
XSwgIigiKSkgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIihcIiBleHBlY3RlZCBh
ZnRlciAnZGVidWcnIGtleXdvcmQiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9uIikpCisgICAg
ICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnID0gdHJ1ZTsKKyAgICAgICAgZWxz
ZSBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKKyAgICAgICAgICAgIGNvbnRleHQtPmNv
bnRleHRQcmFnbWEuZGVidWcgPSBmYWxzZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBD
UFBTaEluZm9Mb2dNc2coIlwib25cIiBvciBcIm9mZlwiIGV4cGVjdGVkIGFmdGVyICcoJyBmb3Ig
J2RlYnVnJyBwcmFnbWEiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKHN0cmNtcCh0b2tlbnNbM10sICIpIikpIHsKKyAgICAgICAgICAgIENQ
UFNoSW5mb0xvZ01zZygiXCIpXCIgZXhwZWN0ZWQgdG8gZW5kICdkZWJ1ZycgcHJhZ21hIik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworI2lmZGVmIFBSQUdN
QV9UQUJMRQorICAgICAgICAvLworICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYyBw
cmFnbWEKKyAgICAgICAgLy8gdXNlICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0
UHJhZ21hLnByYWdtYVRhYmxlIHRvIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBwcmFnbWEK
KyAgICAgICAgLy8gRm9yIG5vdywganVzdCBpZ25vcmUgdGhlIHByYWdtYSB0aGF0IHRoZSBpbXBs
ZW1lbnRhdGlvbiBjYW5ub3QgcmVjb2duaXplCisgICAgICAgIC8vIEFuIEV4YW1wbGUgb2Ygb25l
IHN1Y2ggaW1wbGVtZW50YXRpb24gZm9yIGEgcHJhZ21hIHRoYXQgaGFzIGEgc3ludGF4IGxpa2UK
KyAgICAgICAgLy8gI3ByYWdtYSBwcmFnbWFuYW1lKHByYWdtYXZhbHVlKQorICAgICAgICAvLyBU
aGlzIGltcGxlbWVudGF0aW9uIHN0b3JlcyB0aGUgY3VycmVudCBwcmFnbWF2YWx1ZSBhZ2FpbnN0
IHRoZSBwcmFnbWEgbmFtZSBpbiBwcmFnbWFUYWJsZS4KKyAgICAgICAgLy8gICAgICAgIAorICAg
ICAgICBpZiAobnVtVG9rZW5zID09IDQgJiYgIXN0cmNtcCh0b2tlbnNbMV0sICIoIikgJiYgIXN0
cmNtcCh0b2tlbnNbM10sICIpIikpIHsgICAgICAgICAgICAgIAorICAgICAgICAgICAgVFByYWdt
YVRhYmxlJiBwcmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0
UHJhZ21hLnByYWdtYVRhYmxlOworICAgICAgICAgICAgVFByYWdtYVRhYmxlOjppdGVyYXRvciBp
dGVyOworICAgICAgICAgICAgaXRlciA9IHByYWdtYVRhYmxlLmZpbmQoVFN0cmluZyh0b2tlbnNb
MF0pKTsKKyAgICAgICAgICAgIGlmIChpdGVyICE9IHByYWdtYVRhYmxlLmVuZCgpKSB7CisgICAg
ICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gdG9rZW5zWzJdOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBwcmFnbWFUYWJsZVsgdG9rZW5zWzBdIF0gPSB0b2tlbnNbMl07
CisgICAgICAgICAgICB9ICAgICAgICAKKyAgICAgICAgfSBlbHNlIGlmIChudW1Ub2tlbnMgPj0g
MikgeworICAgICAgICAgICAgVFByYWdtYVRhYmxlJiBwcmFnbWFUYWJsZSA9ICgoVFBhcnNlQ29u
dGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLnByYWdtYVRhYmxlOworICAgICAgICAgICAg
VFByYWdtYVRhYmxlOjppdGVyYXRvciBpdGVyOworICAgICAgICAgICAgaXRlciA9IHByYWdtYVRh
YmxlLmZpbmQoVFN0cmluZyh0b2tlbnNbMF0pKTsKKyAgICAgICAgICAgIGlmIChpdGVyICE9IHBy
YWdtYVRhYmxlLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgaXRlci0+c2Vjb25kID0gdG9rZW5z
WzFdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmFnbWFUYWJsZVsg
dG9rZW5zWzBdIF0gPSB0b2tlbnNbMV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRp
ZiAvLyBQUkFHTUFfVEFCTEUKKyAgICB9Cit9CisKK3ZvaWQgU3RvcmVTdHIoY2hhciAqc3RyaW5n
KQoreworICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKKyAgICBUU3RyaW5nIHN0clNyYzsKKyAgICBz
dHJTcmMgPSBUU3RyaW5nKHN0cmluZyk7CisKKyAgICBjb250ZXh0LT5IYXNoRXJyTXNnID0gY29u
dGV4dC0+SGFzaEVyck1zZyArICIgIiArIHN0clNyYzsKK30KKworY29uc3QgY2hhciogR2V0U3Ry
ZnJvbVRTdHIodm9pZCkKK3sKKyAgICBTRVRVUF9DT05URVhUKGNwcCk7CisgICAgY3BwLT5FcnJN
c2cgPSBjb250ZXh0LT5IYXNoRXJyTXNnLmNfc3RyKCk7CisgICAgcmV0dXJuIGNwcC0+RXJyTXNn
OworfQorCit2b2lkIFJlc2V0VFN0cmluZyh2b2lkKQoreworICAgIFNFVFVQX0NPTlRFWFQoY3Bw
KTsKKyAgICBjb250ZXh0LT5IYXNoRXJyTXNnID0gIiI7Cit9CisKK1RCZWhhdmlvciBHZXRCZWhh
dmlvcihjb25zdCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBpZiAoIXN0cmNtcCgicmVxdWlyZSIs
IGJlaGF2aW9yKSkKKyAgICAgICAgcmV0dXJuIEVCaFJlcXVpcmU7CisgICAgZWxzZSBpZiAoIXN0
cmNtcCgiZW5hYmxlIiwgYmVoYXZpb3IpKQorICAgICAgICByZXR1cm4gRUJoRW5hYmxlOworICAg
IGVsc2UgaWYgKCFzdHJjbXAoImRpc2FibGUiLCBiZWhhdmlvcikpCisgICAgICAgIHJldHVybiBF
QmhEaXNhYmxlOworICAgIGVsc2UgaWYgKCFzdHJjbXAoIndhcm4iLCBiZWhhdmlvcikpCisgICAg
ICAgIHJldHVybiBFQmhXYXJuOworICAgIGVsc2UgeworICAgICAgICBDUFBTaEluZm9Mb2dNc2co
KFRTdHJpbmcoImJlaGF2aW9yICciKSArIGJlaGF2aW9yICsgIicgaXMgbm90IHN1cHBvcnRlZCIp
LmNfc3RyKCkpOworICAgICAgICByZXR1cm4gRUJoRGlzYWJsZTsKKyAgICB9ICAgICAgICAKK30K
Kwordm9pZCB1cGRhdGVFeHRlbnNpb25CZWhhdmlvcihjb25zdCBjaGFyKiBleHROYW1lLCBjb25z
dCBjaGFyKiBiZWhhdmlvcikKK3sKKyAgICBTRVRVUF9DT05URVhUKGNwcCk7CisgICAgVEJlaGF2
aW9yIGJlaGF2aW9yVmFsID0gR2V0QmVoYXZpb3IoYmVoYXZpb3IpOworICAgIFRNYXA8VFN0cmlu
ZywgVEJlaGF2aW9yPjo6IGl0ZXJhdG9yIGl0ZXI7CisgICAgVFN0cmluZyBtc2c7CisgICAgCisg
ICAgLy8gc3BlY2lhbCBjYXNlZCBmb3IgYWxsIGV4dGVuc2lvbgorICAgIGlmICghc3RyY21wKGV4
dE5hbWUsICJhbGwiKSkgeworICAgICAgICBpZiAoYmVoYXZpb3JWYWwgPT0gRUJoUmVxdWlyZSB8
fCBiZWhhdmlvclZhbCA9PSBFQmhFbmFibGUpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xvZ01z
ZygiZXh0ZW5zaW9uICdhbGwnIGNhbm5vdCBoYXZlICdyZXF1aXJlJyBvciAnZW5hYmxlJyBiZWhh
dmlvciIpOyAgCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBmb3IgKGl0ZXIgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5iZWdpbigpOyBpdGVy
ICE9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAg
ICAgICAgaXRlci0+c2Vjb25kID0gYmVoYXZpb3JWYWw7CisgICAgICAgIH0gICAgICAgIAorICAg
IH0gZWxzZSB7CisgICAgICAgIGl0ZXIgPSBjb250ZXh0LT5leHRlbnNpb25CZWhhdmlvci5maW5k
KFRTdHJpbmcoZXh0TmFtZSkpOworICAgICAgICBpZiAoaXRlciA9PSBjb250ZXh0LT5leHRlbnNp
b25CZWhhdmlvci5lbmQoKSkgeworICAgICAgICAgICAgc3dpdGNoIChiZWhhdmlvclZhbCkgewor
ICAgICAgICAgICAgY2FzZSBFQmhSZXF1aXJlOgorICAgICAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZygoVFN0cmluZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBub3Qgc3VwcG9y
dGVkIikuY19zdHIoKSk7ICAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgRUJoRW5hYmxlOgorICAgICAgICAgICAgY2FzZSBFQmhXYXJuOgorICAgICAgICAgICAgY2Fz
ZSBFQmhEaXNhYmxlOgorICAgICAgICAgICAgICAgIG1zZyA9IFRTdHJpbmcoImV4dGVuc2lvbiAn
IikgKyBleHROYW1lICsgIicgaXMgbm90IHN1cHBvcnRlZCI7CisgICAgICAgICAgICAgICAgY29u
dGV4dC0+aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhXYXJuaW5nLCBtc2cuY19zdHIoKSwg
eXlsaW5lbm8pOyAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpdGVyLT5zZWNvbmQg
PSBiZWhhdmlvclZhbDsKKyAgICB9Cit9Cit9ICAvLyBleHRlcm4gIkMiCisKK2ludCBzdHJpbmdf
aW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAg
IGludCBsZW47CisKKyAgICBpZiAoKGxlbiA9IHl5bGV4X0NQUChidWYsIG1heF9zaXplKSkgPT0g
MCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGxlbiA+PSBtYXhfc2l6ZSkgCisgICAgICAg
IFlZX0ZBVEFMX0VSUk9SKCJpbnB1dCBidWZmZXIgb3ZlcmZsb3csIGNhbid0IGVubGFyZ2UgYnVm
ZmVyIGJlY2F1c2Ugc2Nhbm5lciB1c2VzIFJFSkVDVCIpOworCisgICAgYnVmW2xlbl0gPSAnICc7
CisgICAgcmV0dXJuIGxlbisxOworfQorCitpbnQgY2hlY2tfdHlwZSh5eXNjYW5fdCB5eXNjYW5u
ZXIpIHsKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKSB5eXNj
YW5uZXI7CisgICAgCisgICAgaW50IHRva2VuID0gSURFTlRJRklFUjsKKyAgICBUU3ltYm9sKiBz
eW1ib2wgPSB5eWV4dHJhLT5zeW1ib2xUYWJsZS5maW5kKHl5dGV4dCk7CisgICAgaWYgKHl5ZXh0
cmEtPmxleEFmdGVyVHlwZSA9PSBmYWxzZSAmJiBzeW1ib2wgJiYgc3ltYm9sLT5pc1ZhcmlhYmxl
KCkpIHsKKyAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJs
ZSo+KHN5bWJvbCk7CisgICAgICAgIGlmICh2YXJpYWJsZS0+aXNVc2VyVHlwZSgpKSB7CisgICAg
ICAgICAgICB5eWV4dHJhLT5sZXhBZnRlclR5cGUgPSB0cnVlOworICAgICAgICAgICAgdG9rZW4g
PSBUWVBFX05BTUU7CisgICAgICAgIH0KKyAgICB9CisgICAgeXlsdmFsLT5sZXguc3ltYm9sID0g
c3ltYm9sOworICAgIHJldHVybiB0b2tlbjsKK30KKworaW50IHJlc2VydmVkX3dvcmQoeXlzY2Fu
X3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190KikgeXlzY2FubmVyOworCisgICAgeXlleHRyYS0+ZXJyb3IoeXlsaW5lbm8sICJJbGxlZ2Fs
IHVzZSBvZiByZXNlcnZlZCB3b3JkIiwgeXl0ZXh0LCAiIik7CisgICAgeXlleHRyYS0+cmVjb3Zl
cigpOworICAgIHJldHVybiAwOworfQorCit2b2lkIHl5ZXJyb3IoVFBhcnNlQ29udGV4dCogY29u
dGV4dCwgY29uc3QgY2hhciogcmVhc29uKSB7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAo
c3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKKworICAgIGlmIChjb250ZXh0LT5B
ZnRlckVPRikgeworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgcmVhc29uLCAidW5l
eHBlY3RlZCBFT0YiLCAiIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3Io
eXlsaW5lbm8sIHJlYXNvbiwgeXl0ZXh0LCAiIik7CisgICAgfQorICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKK30KKworaW50IGdsc2xhbmdfaW5pdGlhbGl6ZShUUGFyc2VDb250ZXh0KiBjb250ZXh0
KSB7CisgICAgeXlzY2FuX3Qgc2Nhbm5lciA9IE5VTEw7CisgICAgaWYgKHl5bGV4X2luaXRfZXh0
cmEoY29udGV4dCwmc2Nhbm5lcikpCisgICAgICAgIHJldHVybiAxOworCisgICAgY29udGV4dC0+
c2Nhbm5lciA9IHNjYW5uZXI7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBnbHNsYW5nX2ZpbmFs
aXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsKKyAgICB5eXNjYW5fdCBzY2FubmVyID0gY29u
dGV4dC0+c2Nhbm5lcjsKKyAgICBpZiAoc2Nhbm5lciA9PSBOVUxMKSByZXR1cm4gMDsKKyAgICAK
KyAgICBjb250ZXh0LT5zY2FubmVyID0gTlVMTDsKKyAgICByZXR1cm4geXlsZXhfZGVzdHJveShz
Y2FubmVyKTsKK30KKwordm9pZCBnbHNsYW5nX3NjYW4oaW50IGNvdW50LCBjb25zdCBjaGFyKiBj
b25zdCBzdHJpbmdbXSwgY29uc3QgaW50IGxlbmd0aFtdLAorICAgICAgICAgICAgICAgICAgVFBh
cnNlQ29udGV4dCogY29udGV4dCkgeworICAgIHl5cmVzdGFydChOVUxMLGNvbnRleHQtPnNjYW5u
ZXIpOworICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2MoMCwgMSksY29udGV4dC0+c2Nh
bm5lcik7CisgICAgY29udGV4dC0+QWZ0ZXJFT0YgPSBmYWxzZTsKKyAgICAKKyAgICAvLyBJbml0
IHByZXByb2Nlc3Nvci4KKyAgICBjcHAtPnBDID0gY29udGV4dDsKKyAgICBjcHAtPlBhV2hpY2hT
dHIgPSAwOworICAgIGNwcC0+UGFBcmd2ICAgICA9IHN0cmluZzsKKyAgICBjcHAtPlBhQXJnYyAg
ICAgPSBjb3VudDsKKyAgICBjcHAtPlBhU3RyTGVuICAgPSBsZW5ndGg7CisgICAgY3BwLT5wYXN0
Rmlyc3RTdGF0ZW1lbnQgPSAwOworICAgIFNjYW5Gcm9tU3RyaW5nKHN0cmluZ1swXSk7Cit9CisK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ds
c2xhbmdfdGFiLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcxMCBA
QAorLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05VIEJpc29uIDIuMy4gICovCisKKy8qIFNr
ZWxldG9uIGltcGxlbWVudGF0aW9uIGZvciBCaXNvbidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMK
KworICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAy
MDAzLCAyMDA0LCAyMDA1LCAyMDA2CisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K
KworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkg
bGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg
IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAqLworCisvKiBBcyBhIHNwZWNpYWwg
ZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3b3JrIHRoYXQgY29udGFpbnMKKyAg
IHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUg
dGhhdCB3b3JrCisgICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0
IHdvcmsgaXNuJ3QgaXRzZWxmIGEKKyAgIHBhcnNlciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxl
dG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCisgICBhcyBhIHBhcnNlciBza2VsZXRv
bi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3IgcmVkaXN0cmlidXRlCisgICB0aGUg
cGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0
aGlzCisgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24g
YW5kIHRoZSByZXN1bHRpbmcKKyAgIEJpc29uIG91dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1
bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVj
aWFsIGV4Y2VwdGlvbi4KKworICAgVGhpcyBzcGVjaWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgorICAgdmVyc2lvbiAyLjIgb2YgQmlzb24u
ICAqLworCisvKiBDIExBTFIoMSkgcGFyc2VyIHNrZWxldG9uIHdyaXR0ZW4gYnkgUmljaGFyZCBT
dGFsbG1hbiwgYnkKKyAgIHNpbXBsaWZ5aW5nIHRoZSBvcmlnaW5hbCBzby1jYWxsZWQgInNlbWFu
dGljIiBwYXJzZXIuICAqLworCisvKiBBbGwgc3ltYm9scyBkZWZpbmVkIGJlbG93IHNob3VsZCBi
ZWdpbiB3aXRoIHl5IG9yIFlZLCB0byBhdm9pZAorICAgaW5mcmluZ2luZyBvbiB1c2VyIG5hbWUg
c3BhY2UuICBUaGlzIHNob3VsZCBiZSBkb25lIGV2ZW4gZm9yIGxvY2FsCisgICB2YXJpYWJsZXMs
IGFzIHRoZXkgbWlnaHQgb3RoZXJ3aXNlIGJlIGV4cGFuZGVkIGJ5IHVzZXIgbWFjcm9zLgorICAg
VGhlcmUgYXJlIHNvbWUgdW5hdm9pZGFibGUgZXhjZXB0aW9ucyB3aXRoaW4gaW5jbHVkZSBmaWxl
cyB0bworICAgZGVmaW5lIG5lY2Vzc2FyeSBsaWJyYXJ5IHN5bWJvbHM7IHRoZXkgYXJlIG5vdGVk
ICJJTkZSSU5HRVMgT04KKyAgIFVTRVIgTkFNRSBTUEFDRSIgYmVsb3cuICAqLworCisvKiBJZGVu
dGlmeSBCaXNvbiBvdXRwdXQuICAqLworI2RlZmluZSBZWUJJU09OIDEKKworLyogQmlzb24gdmVy
c2lvbi4gICovCisjZGVmaW5lIFlZQklTT05fVkVSU0lPTiAiMi4zIgorCisvKiBTa2VsZXRvbiBu
YW1lLiAgKi8KKyNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCisKKy8qIFB1cmUgcGFy
c2Vycy4gICovCisjZGVmaW5lIFlZUFVSRSAxCisKKy8qIFVzaW5nIGxvY2F0aW9ucy4gICovCisj
ZGVmaW5lIFlZTFNQX05FRURFRCAwCisKKworCisvKiBUb2tlbnMuICAqLworI2lmbmRlZiBZWVRP
S0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZUEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8g
dGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycworICAgICAg
a25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVudW0geXl0b2tlbnR5cGUgeworICAgICBJTlZBUklB
TlQgPSAyNTgsCisgICAgIEhJR0hfUFJFQ0lTSU9OID0gMjU5LAorICAgICBNRURJVU1fUFJFQ0lT
SU9OID0gMjYwLAorICAgICBMT1dfUFJFQ0lTSU9OID0gMjYxLAorICAgICBQUkVDSVNJT04gPSAy
NjIsCisgICAgIEFUVFJJQlVURSA9IDI2MywKKyAgICAgQ09OU1RfUVVBTCA9IDI2NCwKKyAgICAg
Qk9PTF9UWVBFID0gMjY1LAorICAgICBGTE9BVF9UWVBFID0gMjY2LAorICAgICBJTlRfVFlQRSA9
IDI2NywKKyAgICAgQlJFQUsgPSAyNjgsCisgICAgIENPTlRJTlVFID0gMjY5LAorICAgICBETyA9
IDI3MCwKKyAgICAgRUxTRSA9IDI3MSwKKyAgICAgRk9SID0gMjcyLAorICAgICBJRiA9IDI3MywK
KyAgICAgRElTQ0FSRCA9IDI3NCwKKyAgICAgUkVUVVJOID0gMjc1LAorICAgICBCVkVDMiA9IDI3
NiwKKyAgICAgQlZFQzMgPSAyNzcsCisgICAgIEJWRUM0ID0gMjc4LAorICAgICBJVkVDMiA9IDI3
OSwKKyAgICAgSVZFQzMgPSAyODAsCisgICAgIElWRUM0ID0gMjgxLAorICAgICBWRUMyID0gMjgy
LAorICAgICBWRUMzID0gMjgzLAorICAgICBWRUM0ID0gMjg0LAorICAgICBNQVRSSVgyID0gMjg1
LAorICAgICBNQVRSSVgzID0gMjg2LAorICAgICBNQVRSSVg0ID0gMjg3LAorICAgICBJTl9RVUFM
ID0gMjg4LAorICAgICBPVVRfUVVBTCA9IDI4OSwKKyAgICAgSU5PVVRfUVVBTCA9IDI5MCwKKyAg
ICAgVU5JRk9STSA9IDI5MSwKKyAgICAgVkFSWUlORyA9IDI5MiwKKyAgICAgU1RSVUNUID0gMjkz
LAorICAgICBWT0lEX1RZUEUgPSAyOTQsCisgICAgIFdISUxFID0gMjk1LAorICAgICBTQU1QTEVS
MkQgPSAyOTYsCisgICAgIFNBTVBMRVJDVUJFID0gMjk3LAorICAgICBJREVOVElGSUVSID0gMjk4
LAorICAgICBUWVBFX05BTUUgPSAyOTksCisgICAgIEZMT0FUQ09OU1RBTlQgPSAzMDAsCisgICAg
IElOVENPTlNUQU5UID0gMzAxLAorICAgICBCT09MQ09OU1RBTlQgPSAzMDIsCisgICAgIEZJRUxE
X1NFTEVDVElPTiA9IDMwMywKKyAgICAgTEVGVF9PUCA9IDMwNCwKKyAgICAgUklHSFRfT1AgPSAz
MDUsCisgICAgIElOQ19PUCA9IDMwNiwKKyAgICAgREVDX09QID0gMzA3LAorICAgICBMRV9PUCA9
IDMwOCwKKyAgICAgR0VfT1AgPSAzMDksCisgICAgIEVRX09QID0gMzEwLAorICAgICBORV9PUCA9
IDMxMSwKKyAgICAgQU5EX09QID0gMzEyLAorICAgICBPUl9PUCA9IDMxMywKKyAgICAgWE9SX09Q
ID0gMzE0LAorICAgICBNVUxfQVNTSUdOID0gMzE1LAorICAgICBESVZfQVNTSUdOID0gMzE2LAor
ICAgICBBRERfQVNTSUdOID0gMzE3LAorICAgICBNT0RfQVNTSUdOID0gMzE4LAorICAgICBMRUZU
X0FTU0lHTiA9IDMxOSwKKyAgICAgUklHSFRfQVNTSUdOID0gMzIwLAorICAgICBBTkRfQVNTSUdO
ID0gMzIxLAorICAgICBYT1JfQVNTSUdOID0gMzIyLAorICAgICBPUl9BU1NJR04gPSAzMjMsCisg
ICAgIFNVQl9BU1NJR04gPSAzMjQsCisgICAgIExFRlRfUEFSRU4gPSAzMjUsCisgICAgIFJJR0hU
X1BBUkVOID0gMzI2LAorICAgICBMRUZUX0JSQUNLRVQgPSAzMjcsCisgICAgIFJJR0hUX0JSQUNL
RVQgPSAzMjgsCisgICAgIExFRlRfQlJBQ0UgPSAzMjksCisgICAgIFJJR0hUX0JSQUNFID0gMzMw
LAorICAgICBET1QgPSAzMzEsCisgICAgIENPTU1BID0gMzMyLAorICAgICBDT0xPTiA9IDMzMywK
KyAgICAgRVFVQUwgPSAzMzQsCisgICAgIFNFTUlDT0xPTiA9IDMzNSwKKyAgICAgQkFORyA9IDMz
NiwKKyAgICAgREFTSCA9IDMzNywKKyAgICAgVElMREUgPSAzMzgsCisgICAgIFBMVVMgPSAzMzks
CisgICAgIFNUQVIgPSAzNDAsCisgICAgIFNMQVNIID0gMzQxLAorICAgICBQRVJDRU5UID0gMzQy
LAorICAgICBMRUZUX0FOR0xFID0gMzQzLAorICAgICBSSUdIVF9BTkdMRSA9IDM0NCwKKyAgICAg
VkVSVElDQUxfQkFSID0gMzQ1LAorICAgICBDQVJFVCA9IDM0NiwKKyAgICAgQU1QRVJTQU5EID0g
MzQ3LAorICAgICBRVUVTVElPTiA9IDM0OAorICAgfTsKKyNlbmRpZgorLyogVG9rZW5zLiAgKi8K
KyNkZWZpbmUgSU5WQVJJQU5UIDI1OAorI2RlZmluZSBISUdIX1BSRUNJU0lPTiAyNTkKKyNkZWZp
bmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKKyNkZWZpbmUgTE9XX1BSRUNJU0lPTiAyNjEKKyNkZWZp
bmUgUFJFQ0lTSU9OIDI2MgorI2RlZmluZSBBVFRSSUJVVEUgMjYzCisjZGVmaW5lIENPTlNUX1FV
QUwgMjY0CisjZGVmaW5lIEJPT0xfVFlQRSAyNjUKKyNkZWZpbmUgRkxPQVRfVFlQRSAyNjYKKyNk
ZWZpbmUgSU5UX1RZUEUgMjY3CisjZGVmaW5lIEJSRUFLIDI2OAorI2RlZmluZSBDT05USU5VRSAy
NjkKKyNkZWZpbmUgRE8gMjcwCisjZGVmaW5lIEVMU0UgMjcxCisjZGVmaW5lIEZPUiAyNzIKKyNk
ZWZpbmUgSUYgMjczCisjZGVmaW5lIERJU0NBUkQgMjc0CisjZGVmaW5lIFJFVFVSTiAyNzUKKyNk
ZWZpbmUgQlZFQzIgMjc2CisjZGVmaW5lIEJWRUMzIDI3NworI2RlZmluZSBCVkVDNCAyNzgKKyNk
ZWZpbmUgSVZFQzIgMjc5CisjZGVmaW5lIElWRUMzIDI4MAorI2RlZmluZSBJVkVDNCAyODEKKyNk
ZWZpbmUgVkVDMiAyODIKKyNkZWZpbmUgVkVDMyAyODMKKyNkZWZpbmUgVkVDNCAyODQKKyNkZWZp
bmUgTUFUUklYMiAyODUKKyNkZWZpbmUgTUFUUklYMyAyODYKKyNkZWZpbmUgTUFUUklYNCAyODcK
KyNkZWZpbmUgSU5fUVVBTCAyODgKKyNkZWZpbmUgT1VUX1FVQUwgMjg5CisjZGVmaW5lIElOT1VU
X1FVQUwgMjkwCisjZGVmaW5lIFVOSUZPUk0gMjkxCisjZGVmaW5lIFZBUllJTkcgMjkyCisjZGVm
aW5lIFNUUlVDVCAyOTMKKyNkZWZpbmUgVk9JRF9UWVBFIDI5NAorI2RlZmluZSBXSElMRSAyOTUK
KyNkZWZpbmUgU0FNUExFUjJEIDI5NgorI2RlZmluZSBTQU1QTEVSQ1VCRSAyOTcKKyNkZWZpbmUg
SURFTlRJRklFUiAyOTgKKyNkZWZpbmUgVFlQRV9OQU1FIDI5OQorI2RlZmluZSBGTE9BVENPTlNU
QU5UIDMwMAorI2RlZmluZSBJTlRDT05TVEFOVCAzMDEKKyNkZWZpbmUgQk9PTENPTlNUQU5UIDMw
MgorI2RlZmluZSBGSUVMRF9TRUxFQ1RJT04gMzAzCisjZGVmaW5lIExFRlRfT1AgMzA0CisjZGVm
aW5lIFJJR0hUX09QIDMwNQorI2RlZmluZSBJTkNfT1AgMzA2CisjZGVmaW5lIERFQ19PUCAzMDcK
KyNkZWZpbmUgTEVfT1AgMzA4CisjZGVmaW5lIEdFX09QIDMwOQorI2RlZmluZSBFUV9PUCAzMTAK
KyNkZWZpbmUgTkVfT1AgMzExCisjZGVmaW5lIEFORF9PUCAzMTIKKyNkZWZpbmUgT1JfT1AgMzEz
CisjZGVmaW5lIFhPUl9PUCAzMTQKKyNkZWZpbmUgTVVMX0FTU0lHTiAzMTUKKyNkZWZpbmUgRElW
X0FTU0lHTiAzMTYKKyNkZWZpbmUgQUREX0FTU0lHTiAzMTcKKyNkZWZpbmUgTU9EX0FTU0lHTiAz
MTgKKyNkZWZpbmUgTEVGVF9BU1NJR04gMzE5CisjZGVmaW5lIFJJR0hUX0FTU0lHTiAzMjAKKyNk
ZWZpbmUgQU5EX0FTU0lHTiAzMjEKKyNkZWZpbmUgWE9SX0FTU0lHTiAzMjIKKyNkZWZpbmUgT1Jf
QVNTSUdOIDMyMworI2RlZmluZSBTVUJfQVNTSUdOIDMyNAorI2RlZmluZSBMRUZUX1BBUkVOIDMy
NQorI2RlZmluZSBSSUdIVF9QQVJFTiAzMjYKKyNkZWZpbmUgTEVGVF9CUkFDS0VUIDMyNworI2Rl
ZmluZSBSSUdIVF9CUkFDS0VUIDMyOAorI2RlZmluZSBMRUZUX0JSQUNFIDMyOQorI2RlZmluZSBS
SUdIVF9CUkFDRSAzMzAKKyNkZWZpbmUgRE9UIDMzMQorI2RlZmluZSBDT01NQSAzMzIKKyNkZWZp
bmUgQ09MT04gMzMzCisjZGVmaW5lIEVRVUFMIDMzNAorI2RlZmluZSBTRU1JQ09MT04gMzM1Cisj
ZGVmaW5lIEJBTkcgMzM2CisjZGVmaW5lIERBU0ggMzM3CisjZGVmaW5lIFRJTERFIDMzOAorI2Rl
ZmluZSBQTFVTIDMzOQorI2RlZmluZSBTVEFSIDM0MAorI2RlZmluZSBTTEFTSCAzNDEKKyNkZWZp
bmUgUEVSQ0VOVCAzNDIKKyNkZWZpbmUgTEVGVF9BTkdMRSAzNDMKKyNkZWZpbmUgUklHSFRfQU5H
TEUgMzQ0CisjZGVmaW5lIFZFUlRJQ0FMX0JBUiAzNDUKKyNkZWZpbmUgQ0FSRVQgMzQ2CisjZGVm
aW5lIEFNUEVSU0FORCAzNDcKKyNkZWZpbmUgUVVFU1RJT04gMzQ4CisKKworCisKKy8qIENvcHkg
dGhlIGZpcnN0IHBhcnQgb2YgdXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKKy8vCisvLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KKy8vCisKKy8vIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9nbHNs
YW5nX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCisKKyNpbmNsdWRlICJjb21waWxlci9TeW1ib2xU
YWJsZS5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiR0xT
TEFORy9TaGFkZXJMYW5nLmgiCisKKyNkZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+c2Nhbm5l
cgorCisKKy8qIEVuYWJsaW5nIHRyYWNlcy4gICovCisjaWZuZGVmIFlZREVCVUcKKyMgZGVmaW5l
IFlZREVCVUcgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHZlcmJvc2UgZXJyb3IgbWVzc2FnZXMu
ICAqLworI2lmZGVmIFlZRVJST1JfVkVSQk9TRQorIyB1bmRlZiBZWUVSUk9SX1ZFUkJPU0UKKyMg
ZGVmaW5lIFlZRVJST1JfVkVSQk9TRSAxCisjZWxzZQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NF
IDAKKyNlbmRpZgorCisvKiBFbmFibGluZyB0aGUgdG9rZW4gdGFibGUuICAqLworI2lmbmRlZiBZ
WVRPS0VOX1RBQkxFCisjIGRlZmluZSBZWVRPS0VOX1RBQkxFIDAKKyNlbmRpZgorCisjaWYgISBk
ZWZpbmVkIFlZU1RZUEUgJiYgISBkZWZpbmVkIFlZU1RZUEVfSVNfREVDTEFSRUQKK3R5cGVkZWYg
dW5pb24gWVlTVFlQRQorCit7CisgICAgc3RydWN0IHsKKyAgICAgICAgVFNvdXJjZUxvYyBsaW5l
OworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUU3RyaW5nICpzdHJpbmc7CisgICAgICAg
ICAgICBmbG9hdCBmOworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBib29sIGI7Cisg
ICAgICAgIH07CisgICAgICAgIFRTeW1ib2wqIHN5bWJvbDsKKyAgICB9IGxleDsKKyAgICBzdHJ1
Y3QgeworICAgICAgICBUU291cmNlTG9jIGxpbmU7CisgICAgICAgIFRPcGVyYXRvciBvcDsKKyAg
ICAgICAgdW5pb24geworICAgICAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAg
ICAgICAgICBUSW50ZXJtTm9kZVBhaXIgbm9kZVBhaXI7CisgICAgICAgICAgICBUSW50ZXJtVHlw
ZWQqIGludGVybVR5cGVkTm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUqIGludGVy
bUFnZ3JlZ2F0ZTsKKyAgICAgICAgfTsKKyAgICAgICAgdW5pb24geworICAgICAgICAgICAgVFB1
YmxpY1R5cGUgdHlwZTsKKyAgICAgICAgICAgIFRQcmVjaXNpb24gcHJlY2lzaW9uOworICAgICAg
ICAgICAgVFF1YWxpZmllciBxdWFsaWZpZXI7CisgICAgICAgICAgICBURnVuY3Rpb24qIGZ1bmN0
aW9uOworICAgICAgICAgICAgVFBhcmFtZXRlciBwYXJhbTsKKyAgICAgICAgICAgIFRUeXBlTGlu
ZSB0eXBlTGluZTsKKyAgICAgICAgICAgIFRUeXBlTGlzdCogdHlwZUxpc3Q7CisgICAgICAgIH07
CisgICAgfSBpbnRlcm07Cit9CisvKiBMaW5lIDE4NyBvZiB5YWNjLmMuICAqLworCisJWVlTVFlQ
RTsKKyMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRo
ZHJhd24gKi8KKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorIyBkZWZpbmUgWVlTVFlQ
RV9JU19UUklWSUFMIDEKKyNlbmRpZgorCisKKworLyogQ29weSB0aGUgc2Vjb25kIHBhcnQgb2Yg
dXNlciBkZWNsYXJhdGlvbnMuICAqLworCisKK2V4dGVybiBpbnQgeXlsZXgoWVlTVFlQRSogeXls
dmFsX3BhcmFtLCB2b2lkKiB5eXNjYW5uZXIpOworZXh0ZXJuIHZvaWQgeXllcnJvcihUUGFyc2VD
b250ZXh0KiBjb250ZXh0LCBjb25zdCBjaGFyKiByZWFzb24pOworCisjZGVmaW5lIEZSQUdfVkVS
VF9PTkxZKFMsIEwpIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFH
TUVOVF9TSEFERVIgJiYgIFwKKyAgICAgICAgY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9WRVJU
RVhfU0hBREVSKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGlu
IHZlcnRleC9mcmFnbWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwKK30KKworI2RlZmluZSBWRVJURVhfT05M
WShTLCBMKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfVkVSVEVYX1NI
QURFUikgeyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiB2ZXJ0
ZXggc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsgIFwKKyAgICB9ICBcCit9CisKKyNkZWZpbmUgRlJBR19PTkxZKFMsIEwpIHsgIFwKKyAg
ICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAhPSBTSF9GUkFHTUVOVF9TSEFERVIpIHsgIFwKKyAg
ICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gZnJhZ21lbnQgc2hhZGVycyBv
bmx5ICIsIFMsICIiLCAiIik7ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKKyAg
ICB9ICBcCit9CisKKworLyogTGluZSAyMTYgb2YgeWFjYy5jLiAgKi8KKworCisjaWZkZWYgc2hv
cnQKKyMgdW5kZWYgc2hvcnQKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX1VJTlQ4Cit0eXBlZGVm
IFlZVFlQRV9VSU5UOCB5eXR5cGVfdWludDg7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBjaGFy
IHl5dHlwZV91aW50ODsKKyNlbmRpZgorCisjaWZkZWYgWVlUWVBFX0lOVDgKK3R5cGVkZWYgWVlU
WVBFX0lOVDggeXl0eXBlX2ludDg7CisjZWxpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCit0eXBlZGVmIHNpZ25lZCBjaGFyIHl5dHlwZV9pbnQ4OworI2Vsc2UKK3R5cGVk
ZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQ4OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfVUlOVDE2
Cit0eXBlZGVmIFlZVFlQRV9VSU5UMTYgeXl0eXBlX3VpbnQxNjsKKyNlbHNlCit0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IGludCB5eXR5cGVfdWludDE2OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVf
SU5UMTYKK3R5cGVkZWYgWVlUWVBFX0lOVDE2IHl5dHlwZV9pbnQxNjsKKyNlbHNlCit0eXBlZGVm
IHNob3J0IGludCB5eXR5cGVfaW50MTY7CisjZW5kaWYKKworI2lmbmRlZiBZWVNJWkVfVAorIyBp
ZmRlZiBfX1NJWkVfVFlQRV9fCisjICBkZWZpbmUgWVlTSVpFX1QgX19TSVpFX1RZUEVfXworIyBl
bGlmIGRlZmluZWQgc2l6ZV90CisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsaWYgISBk
ZWZpbmVkIFlZU0laRV9UICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZV
TkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikK
KyMgIGluY2x1ZGUgPHN0ZGRlZi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICov
CisjICBkZWZpbmUgWVlTSVpFX1Qgc2l6ZV90CisjIGVsc2UKKyMgIGRlZmluZSBZWVNJWkVfVCB1
bnNpZ25lZCBpbnQKKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIFlZU0laRV9NQVhJTVVNICgo
WVlTSVpFX1QpIC0xKQorCisjaWZuZGVmIFlZXworIyBpZiBZWUVOQUJMRV9OTFMKKyMgIGlmIEVO
QUJMRV9OTFMKKyMgICBpbmNsdWRlIDxsaWJpbnRsLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KKyMgICBkZWZpbmUgWVlfKG1zZ2lkKSBkZ2V0dGV4dCAoImJpc29uLXJ1bnRp
bWUiLCBtc2dpZCkKKyMgIGVuZGlmCisjIGVuZGlmCisjIGlmbmRlZiBZWV8KKyMgIGRlZmluZSBZ
WV8obXNnaWQpIG1zZ2lkCisjIGVuZGlmCisjZW5kaWYKKworLyogU3VwcHJlc3MgdW51c2VkLXZh
cmlhYmxlIHdhcm5pbmdzIGJ5ICJ1c2luZyIgRS4gICovCisjaWYgISBkZWZpbmVkIGxpbnQgfHwg
ZGVmaW5lZCBfX0dOVUNfXworIyBkZWZpbmUgWVlVU0UoZSkgKCh2b2lkKSAoZSkpCisjZWxzZQor
IyBkZWZpbmUgWVlVU0UoZSkgLyogZW1wdHkgKi8KKyNlbmRpZgorCisvKiBJZGVudGl0eSBmdW5j
dGlvbiwgdXNlZCB0byBzdXBwcmVzcyB3YXJuaW5ncyBhYm91dCBjb25zdGFudCBjb25kaXRpb25z
LiAgKi8KKyNpZm5kZWYgbGludAorIyBkZWZpbmUgWVlJRChuKSAobikKKyNlbHNlCisjaWYgKGRl
ZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5l
ZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIGludAorWVlJRCAoaW50
IGkpCisjZWxzZQorc3RhdGljIGludAorWVlJRCAoaSkKKyAgICBpbnQgaTsKKyNlbmRpZgorewor
ICByZXR1cm4gaTsKK30KKyNlbmRpZgorCisjaWYgISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlF
UlJPUl9WRVJCT1NFCisKKy8qIFRoZSBwYXJzZXIgaW52b2tlcyBhbGxvY2Egb3IgbWFsbG9jOyBk
ZWZpbmUgdGhlIG5lY2Vzc2FyeSBzeW1ib2xzLiAgKi8KKworIyBpZmRlZiBZWVNUQUNLX1VTRV9B
TExPQ0EKKyMgIGlmIFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgIGlmZGVmIF9fR05VQ19fCisjICAg
IGRlZmluZSBZWVNUQUNLX0FMTE9DIF9fYnVpbHRpbl9hbGxvY2EKKyMgICBlbGlmIGRlZmluZWQg
X19CVUlMVElOX1ZBX0FSR19JTkNSCisjICAgIGluY2x1ZGUgPGFsbG9jYS5oPiAvKiBJTkZSSU5H
RVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZWxpZiBkZWZpbmVkIF9BSVgKKyMgICAgZGVm
aW5lIFlZU1RBQ0tfQUxMT0MgX19hbGxvY2EKKyMgICBlbGlmIGRlZmluZWQgX01TQ19WRVIKKyMg
ICAgaW5jbHVkZSA8bWFsbG9jLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8K
KyMgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCisjICAgZWxzZQorIyAgICBkZWZpbmUgWVlTVEFD
S19BTExPQyBhbGxvY2EKKyMgICAgaWYgISBkZWZpbmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQg
X1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
CisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKKyMgICAg
IGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisj
ICAgICBpZm5kZWYgX1NURExJQl9ICisjICAgICAgZGVmaW5lIF9TVERMSUJfSCAxCisjICAgICBl
bmRpZgorIyAgICBlbmRpZgorIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorCisjIGlmZGVm
IFlZU1RBQ0tfQUxMT0MKKyAgIC8qIFBhY2lmeSBHQ0MncyBgZW1wdHkgaWYtYm9keScgd2Fybmlu
Zy4gICovCisjICBkZWZpbmUgWVlTVEFDS19GUkVFKFB0cikgZG8geyAvKiBlbXB0eSAqLzsgfSB3
aGlsZSAoWVlJRCAoMCkpCisjICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisgICAgLyog
VGhlIE9TIG1pZ2h0IGd1YXJhbnRlZSBvbmx5IG9uZSBndWFyZCBwYWdlIGF0IHRoZSBib3R0b20g
b2YgdGhlIHN0YWNrLAorICAgICAgIGFuZCBhIHBhZ2Ugc2l6ZSBjYW4gYmUgYXMgc21hbGwgYXMg
NDA5NiBieXRlcy4gIFNvIHdlIGNhbm5vdCBzYWZlbHkKKyAgICAgICBpbnZva2UgYWxsb2NhIChO
KSBpZiBOIGV4Y2VlZHMgNDA5Ni4gIFVzZSBhIHNsaWdodGx5IHNtYWxsZXIgbnVtYmVyCisgICAg
ICAgdG8gYWxsb3cgZm9yIGEgZmV3IGNvbXBpbGVyLWFsbG9jYXRlZCB0ZW1wb3Jhcnkgc3RhY2sg
c2xvdHMuICAqLworIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0gNDAzMiAvKiByZWFz
b25hYmxlIGNpcmNhIDIwMDYgKi8KKyMgIGVuZGlmCisjIGVsc2UKKyMgIGRlZmluZSBZWVNUQUNL
X0FMTE9DIFlZTUFMTE9DCisjICBkZWZpbmUgWVlTVEFDS19GUkVFIFlZRlJFRQorIyAgaWZuZGVm
IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQorIyAgIGRlZmluZSBZWVNUQUNLX0FMTE9DX01BWElNVU0g
WVlTSVpFX01BWElNVU0KKyMgIGVuZGlmCisjICBpZiAoZGVmaW5lZCBfX2NwbHVzcGx1cyAmJiAh
IGRlZmluZWQgX1NURExJQl9IIFwKKyAgICAgICAmJiAhICgoZGVmaW5lZCBZWU1BTExPQyB8fCBk
ZWZpbmVkIG1hbGxvYykgXAorCSAgICAgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJl
ZSkpKQorIyAgIGluY2x1ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQ
QUNFICovCisjICAgaWZuZGVmIF9TVERMSUJfSAorIyAgICBkZWZpbmUgX1NURExJQl9IIDEKKyMg
ICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmbmRlZiBZWU1BTExPQworIyAgIGRlZmluZSBZWU1BTExP
QyBtYWxsb2MKKyMgICBpZiAhIGRlZmluZWQgbWFsbG9jICYmICEgZGVmaW5lZCBfU1RETElCX0gg
JiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwg
ZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCAqbWFsbG9jIChZ
WVNJWkVfVCk7IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbmRpZgor
IyAgZW5kaWYKKyMgIGlmbmRlZiBZWUZSRUUKKyMgICBkZWZpbmUgWVlGUkVFIGZyZWUKKyMgICBp
ZiAhIGRlZmluZWQgZnJlZSAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3ZvaWQgZnJlZSAodm9pZCAqKTsgLyogSU5GUklOR0VT
IE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGVuZGlmCisjICBlbmRpZgorIyBlbmRpZgorI2Vu
ZGlmIC8qICEgZGVmaW5lZCB5eW92ZXJmbG93IHx8IFlZRVJST1JfVkVSQk9TRSAqLworCisKKyNp
ZiAoISBkZWZpbmVkIHl5b3ZlcmZsb3cgXAorICAgICAmJiAoISBkZWZpbmVkIF9fY3BsdXNwbHVz
IFwKKwkgfHwgKGRlZmluZWQgWVlTVFlQRV9JU19UUklWSUFMICYmIFlZU1RZUEVfSVNfVFJJVklB
TCkpKQorCisvKiBBIHR5cGUgdGhhdCBpcyBwcm9wZXJseSBhbGlnbmVkIGZvciBhbnkgc3RhY2sg
bWVtYmVyLiAgKi8KK3VuaW9uIHl5YWxsb2MKK3sKKyAgeXl0eXBlX2ludDE2IHl5c3M7CisgIFlZ
U1RZUEUgeXl2czsKKyAgfTsKKworLyogVGhlIHNpemUgb2YgdGhlIG1heGltdW0gZ2FwIGJldHdl
ZW4gb25lIGFsaWduZWQgc3RhY2sgYW5kIHRoZSBuZXh0LiAgKi8KKyMgZGVmaW5lIFlZU1RBQ0tf
R0FQX01BWElNVU0gKHNpemVvZiAodW5pb24geXlhbGxvYykgLSAxKQorCisvKiBUaGUgc2l6ZSBv
ZiBhbiBhcnJheSBsYXJnZSB0byBlbm91Z2ggdG8gaG9sZCBhbGwgc3RhY2tzLCBlYWNoIHdpdGgK
KyAgIE4gZWxlbWVudHMuICAqLworIyBkZWZpbmUgWVlTVEFDS19CWVRFUyhOKSBcCisgICAgICgo
TikgKiAoc2l6ZW9mICh5eXR5cGVfaW50MTYpICsgc2l6ZW9mIChZWVNUWVBFKSkgXAorICAgICAg
KyBZWVNUQUNLX0dBUF9NQVhJTVVNKQorCisvKiBDb3B5IENPVU5UIG9iamVjdHMgZnJvbSBGUk9N
IHRvIFRPLiAgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KKyAgIG5vdCBvdmVybGFwLiAg
Ki8KKyMgaWZuZGVmIFlZQ09QWQorIyAgaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAxIDwgX19HTlVD
X18KKyMgICBkZWZpbmUgWVlDT1BZKFRvLCBGcm9tLCBDb3VudCkgXAorICAgICAgX19idWlsdGlu
X21lbWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQorIyAgZWxzZQor
IyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KQkJXAorICAgICAgZG8JCQkJCVwKKwl7
CQkJCQlcCisJICBZWVNJWkVfVCB5eWk7CQkJCVwKKwkgIGZvciAoeXlpID0gMDsgeXlpIDwgKENv
dW50KTsgeXlpKyspCVwKKwkgICAgKFRvKVt5eWldID0gKEZyb20pW3l5aV07CQlcCisJfQkJCQkJ
XAorICAgICAgd2hpbGUgKFlZSUQgKDApKQorIyAgZW5kaWYKKyMgZW5kaWYKKworLyogUmVsb2Nh
dGUgU1RBQ0sgZnJvbSBpdHMgb2xkIGxvY2F0aW9uIHRvIHRoZSBuZXcgb25lLiAgVGhlCisgICBs
b2NhbCB2YXJpYWJsZXMgWVlTSVpFIGFuZCBZWVNUQUNLU0laRSBnaXZlIHRoZSBvbGQgYW5kIG5l
dyBudW1iZXIgb2YKKyAgIGVsZW1lbnRzIGluIHRoZSBzdGFjaywgYW5kIFlZUFRSIGdpdmVzIHRo
ZSBuZXcgbG9jYXRpb24gb2YgdGhlCisgICBzdGFjay4gIEFkdmFuY2UgWVlQVFIgdG8gYSBwcm9w
ZXJseSBhbGlnbmVkIGxvY2F0aW9uIGZvciB0aGUgbmV4dAorICAgc3RhY2suICAqLworIyBkZWZp
bmUgWVlTVEFDS19SRUxPQ0FURShTdGFjaykJCQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAg
IHsJCQkJCQkJCQlcCisJWVlTSVpFX1QgeXluZXdieXRlczsJCQkJCQlcCisJWVlDT1BZICgmeXlw
dHItPlN0YWNrLCBTdGFjaywgeXlzaXplKTsJCQkJXAorCVN0YWNrID0gJnl5cHRyLT5TdGFjazsJ
CQkJCQlcCisJeXluZXdieXRlcyA9IHl5c3RhY2tzaXplICogc2l6ZW9mICgqU3RhY2spICsgWVlT
VEFDS19HQVBfTUFYSU1VTTsgXAorCXl5cHRyICs9IHl5bmV3Ynl0ZXMgLyBzaXplb2YgKCp5eXB0
cik7CQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgd2hpbGUgKFlZSUQgKDApKQorCisjZW5k
aWYKKworLyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRl
LiAgKi8KKyNkZWZpbmUgWVlGSU5BTCAgNjkKKy8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGluIFlZ
VEFCTEUuICAqLworI2RlZmluZSBZWUxBU1QgICAxMzM0CisKKy8qIFlZTlRPS0VOUyAtLSBOdW1i
ZXIgb2YgdGVybWluYWxzLiAgKi8KKyNkZWZpbmUgWVlOVE9LRU5TICA5NAorLyogWVlOTlRTIC0t
IE51bWJlciBvZiBub250ZXJtaW5hbHMuICAqLworI2RlZmluZSBZWU5OVFMgIDc4CisvKiBZWU5S
VUxFUyAtLSBOdW1iZXIgb2YgcnVsZXMuICAqLworI2RlZmluZSBZWU5SVUxFUyAgMTkzCisvKiBZ
WU5SVUxFUyAtLSBOdW1iZXIgb2Ygc3RhdGVzLiAgKi8KKyNkZWZpbmUgWVlOU1RBVEVTICAyOTYK
KworLyogWVlUUkFOU0xBVEUoWVlMRVgpIC0tIEJpc29uIHN5bWJvbCBudW1iZXIgY29ycmVzcG9u
ZGluZyB0byBZWUxFWC4gICovCisjZGVmaW5lIFlZVU5ERUZUT0sgIDIKKyNkZWZpbmUgWVlNQVhV
VE9LICAgMzQ4CisKKyNkZWZpbmUgWVlUUkFOU0xBVEUoWVlYKQkJCQkJCVwKKyAgKCh1bnNpZ25l
ZCBpbnQpIChZWVgpIDw9IFlZTUFYVVRPSyA/IHl5dHJhbnNsYXRlW1lZWF0gOiBZWVVOREVGVE9L
KQorCisvKiBZWVRSQU5TTEFURVtZWUxFWF0gLS0gQmlzb24gc3ltYm9sIG51bWJlciBjb3JyZXNw
b25kaW5nIHRvIFlZTEVYLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXl0cmFuc2xh
dGVbXSA9Cit7CisgICAgICAgMCwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisg
ICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAg
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LAorICAg
ICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAg
ICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKKyAgICAgIDI1LCAgICAyNiwgICAgMjcsICAg
IDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgMzMsICAgIDM0LAorICAgICAgMzUs
ICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0Mywg
ICAgNDQsCisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgNDksICAgIDUwLCAgICA1
MSwgICAgNTIsICAgIDUzLCAgICA1NCwKKyAgICAgIDU1LCAgICA1NiwgICAgNTcsICAgIDU4LCAg
ICA1OSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjMsICAgIDY0LAorICAgICAgNjUsICAgIDY2
LCAgICA2NywgICAgNjgsICAgIDY5LCAgICA3MCwgICAgNzEsICAgIDcyLCAgICA3MywgICAgNzQs
CisgICAgICA3NSwgICAgNzYsICAgIDc3LCAgICA3OCwgICAgNzksICAgIDgwLCAgICA4MSwgICAg
ODIsICAgIDgzLCAgICA4NCwKKyAgICAgIDg1LCAgICA4NiwgICAgODcsICAgIDg4LCAgICA4OSwg
ICAgOTAsICAgIDkxLCAgICA5MiwgICAgOTMKK307CisKKyNpZiBZWURFQlVHCisvKiBZWVBSSFNb
WVlOXSAtLSBJbmRleCBvZiB0aGUgZmlyc3QgUkhTIHN5bWJvbCBvZiBydWxlIG51bWJlciBZWU4g
aW4KKyAgIFlZUkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cHJoc1tdID0K
K3sKKyAgICAgICAwLCAgICAgMCwgICAgIDMsICAgICA1LCAgICAgNywgICAgIDksICAgIDExLCAg
ICAxMywgICAgMTcsICAgIDE5LAorICAgICAgMjQsICAgIDI2LCAgICAzMCwgICAgMzMsICAgIDM2
LCAgICAzOCwgICAgNDAsICAgIDQyLCAgICA0NiwgICAgNDksCisgICAgICA1MiwgICAgNTUsICAg
IDU3LCAgICA2MCwgICAgNjQsICAgIDY3LCAgICA2OSwgICAgNzEsICAgIDczLCAgICA3NSwKKyAg
ICAgIDc4LCAgICA4MSwgICAgODQsICAgIDg2LCAgICA4OCwgICAgOTAsICAgIDkyLCAgICA5Niwg
ICAxMDAsICAgMTAyLAorICAgICAxMDYsICAgMTEwLCAgIDExMiwgICAxMTQsICAgMTE4LCAgIDEy
MiwgICAxMjYsICAgMTMwLCAgIDEzMiwgICAxMzYsCisgICAgIDE0MCwgICAxNDIsICAgMTQ0LCAg
IDE0NiwgICAxNDgsICAgMTUyLCAgIDE1NCwgICAxNTgsICAgMTYwLCAgIDE2NCwKKyAgICAgMTY2
LCAgIDE3MiwgICAxNzQsICAgMTc4LCAgIDE4MCwgICAxODIsICAgMTg0LCAgIDE4NiwgICAxODgs
ICAgMTkwLAorICAgICAxOTQsICAgMTk2LCAgIDE5OSwgICAyMDIsICAgMjA3LCAgIDIxMCwgICAy
MTIsICAgMjE0LCAgIDIxNywgICAyMjEsCisgICAgIDIyNSwgICAyMjgsICAgMjM0LCAgIDIzOCwg
ICAyNDEsICAgMjQ1LCAgIDI0OCwgICAyNDksICAgMjUxLCAgIDI1MywKKyAgICAgMjU1LCAgIDI1
NywgICAyNTksICAgMjYzLCAgIDI2OSwgICAyNzYsICAgMjgyLCAgIDI4NCwgICAyODcsICAgMjky
LAorICAgICAyOTgsICAgMzAzLCAgIDMwNiwgICAzMDgsICAgMzExLCAgIDMxMywgICAzMTUsICAg
MzE3LCAgIDMyMCwgICAzMjIsCisgICAgIDMyNCwgICAzMjcsICAgMzI5LCAgIDMzMSwgICAzMzMs
ICAgMzM1LCAgIDM0MCwgICAzNDIsICAgMzQ0LCAgIDM0NiwKKyAgICAgMzQ4LCAgIDM1MCwgICAz
NTIsICAgMzU0LCAgIDM1NiwgICAzNTgsICAgMzYwLCAgIDM2MiwgICAzNjQsICAgMzY2LAorICAg
ICAzNjgsICAgMzcwLCAgIDM3MiwgICAzNzQsICAgMzc2LCAgIDM3OCwgICAzODAsICAgMzg2LCAg
IDM5MSwgICAzOTMsCisgICAgIDM5NiwgICA0MDAsICAgNDAyLCAgIDQwNiwgICA0MDgsICAgNDEz
LCAgIDQxNSwgICA0MTcsICAgNDE5LCAgIDQyMSwKKyAgICAgNDIzLCAgIDQyNSwgICA0MjcsICAg
NDI5LCAgIDQzMSwgICA0MzQsICAgNDM1LCAgIDQzNiwgICA0NDIsICAgNDQ0LAorICAgICA0NDYs
ICAgNDQ5LCAgIDQ1MywgICA0NTUsICAgNDU4LCAgIDQ2MCwgICA0NjMsICAgNDY5LCAgIDQ3Mywg
ICA0NzUsCisgICAgIDQ3NywgICA0ODIsICAgNDgzLCAgIDQ5MCwgICA0OTEsICAgNTAwLCAgIDUw
MSwgICA1MDksICAgNTExLCAgIDUxMywKKyAgICAgNTE1LCAgIDUxNiwgICA1MTksICAgNTIzLCAg
IDUyNiwgICA1MjksICAgNTMyLCAgIDUzNiwgICA1MzksICAgNTQxLAorICAgICA1NDQsICAgNTQ2
LCAgIDU0OCwgICA1NDkKK307CisKKy8qIFlZUkhTIC0tIEEgYC0xJy1zZXBhcmF0ZWQgbGlzdCBv
ZiB0aGUgcnVsZXMnIFJIUy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5cmhzW10g
PQoreworICAgICAxNjgsICAgICAwLCAgICAtMSwgICAgNDMsICAgIC0xLCAgICA5NSwgICAgLTEs
ICAgIDQ2LCAgICAtMSwgICAgNDUsCisgICAgICAtMSwgICAgNDcsICAgIC0xLCAgICA3MCwgICAx
MjIsICAgIDcxLCAgICAtMSwgICAgOTYsICAgIC0xLCAgICA5NywKKyAgICAgIDcyLCAgICA5OCwg
ICAgNzMsICAgIC0xLCAgICA5OSwgICAgLTEsICAgIDk3LCAgICA3NiwgICAgNDgsICAgIC0xLAor
ICAgICAgOTcsICAgIDUxLCAgICAtMSwgICAgOTcsICAgIDUyLCAgICAtMSwgICAxMjIsICAgIC0x
LCAgIDEwMCwgICAgLTEsCisgICAgIDEwMSwgICAgLTEsICAgIDk3LCAgICA3NiwgICAxMDEsICAg
IC0xLCAgIDEwMywgICAgNzEsICAgIC0xLCAgIDEwMiwKKyAgICAgIDcxLCAgICAtMSwgICAxMDQs
ICAgIDM5LCAgICAtMSwgICAxMDQsICAgIC0xLCAgIDEwNCwgICAxMjAsICAgIC0xLAorICAgICAx
MDMsICAgIDc3LCAgIDEyMCwgICAgLTEsICAgMTA1LCAgICA3MCwgICAgLTEsICAgMTM3LCAgICAt
MSwgICAgNDMsCisgICAgICAtMSwgICAgNDgsICAgIC0xLCAgICA5NywgICAgLTEsICAgIDUxLCAg
IDEwNiwgICAgLTEsICAgIDUyLCAgIDEwNiwKKyAgICAgIC0xLCAgIDEwNywgICAxMDYsICAgIC0x
LCAgICA4NCwgICAgLTEsICAgIDgyLCAgICAtMSwgICAgODEsICAgIC0xLAorICAgICAxMDYsICAg
IC0xLCAgIDEwOCwgICAgODUsICAgMTA2LCAgICAtMSwgICAxMDgsICAgIDg2LCAgIDEwNiwgICAg
LTEsCisgICAgIDEwOCwgICAgLTEsICAgMTA5LCAgICA4NCwgICAxMDgsICAgIC0xLCAgIDEwOSwg
ICAgODIsICAgMTA4LCAgICAtMSwKKyAgICAgMTA5LCAgICAtMSwgICAxMTAsICAgIC0xLCAgIDEx
MSwgICAgODgsICAgMTEwLCAgICAtMSwgICAxMTEsICAgIDg5LAorICAgICAxMTAsICAgIC0xLCAg
IDExMSwgICAgNTMsICAgMTEwLCAgICAtMSwgICAxMTEsICAgIDU0LCAgIDExMCwgICAgLTEsCisg
ICAgIDExMSwgICAgLTEsICAgMTEyLCAgICA1NSwgICAxMTEsICAgIC0xLCAgIDExMiwgICAgNTYs
ICAgMTExLCAgICAtMSwKKyAgICAgMTEyLCAgICAtMSwgICAxMTMsICAgIC0xLCAgIDExNCwgICAg
LTEsICAgMTE1LCAgICAtMSwgICAxMTYsICAgIDU3LAorICAgICAxMTUsICAgIC0xLCAgIDExNiwg
ICAgLTEsICAgMTE3LCAgICA1OSwgICAxMTYsICAgIC0xLCAgIDExNywgICAgLTEsCisgICAgIDEx
OCwgICAgNTgsICAgMTE3LCAgICAtMSwgICAxMTgsICAgIC0xLCAgIDExOCwgICAgOTMsICAgMTIy
LCAgICA3OCwKKyAgICAgMTIwLCAgICAtMSwgICAxMTksICAgIC0xLCAgIDEwNiwgICAxMjEsICAg
MTIwLCAgICAtMSwgICAgNzksICAgIC0xLAorICAgICAgNjAsICAgIC0xLCAgICA2MSwgICAgLTEs
ICAgIDYyLCAgICAtMSwgICAgNjksICAgIC0xLCAgIDEyMCwgICAgLTEsCisgICAgIDEyMiwgICAg
NzcsICAgMTIwLCAgICAtMSwgICAxMTksICAgIC0xLCAgIDEyNSwgICAgODAsICAgIC0xLCAgIDEz
MywKKyAgICAgIDgwLCAgICAtMSwgICAgIDcsICAgMTM4LCAgIDEzOSwgICAgODAsICAgIC0xLCAg
IDEyNiwgICAgNzEsICAgIC0xLAorICAgICAxMjgsICAgIC0xLCAgIDEyNywgICAgLTEsICAgMTI4
LCAgIDEzMCwgICAgLTEsICAgMTI3LCAgICA3NywgICAxMzAsCisgICAgICAtMSwgICAxMzUsICAg
IDQzLCAgICA3MCwgICAgLTEsICAgMTM3LCAgICA0MywgICAgLTEsICAgMTM3LCAgICA0MywKKyAg
ICAgIDcyLCAgIDEyMywgICAgNzMsICAgIC0xLCAgIDEzNiwgICAxMzEsICAgMTI5LCAgICAtMSwg
ICAxMzEsICAgMTI5LAorICAgICAgLTEsICAgMTM2LCAgIDEzMSwgICAxMzIsICAgIC0xLCAgIDEz
MSwgICAxMzIsICAgIC0xLCAgICAtMSwgICAgMzMsCisgICAgICAtMSwgICAgMzQsICAgIC0xLCAg
ICAzNSwgICAgLTEsICAgMTM3LCAgICAtMSwgICAxMzQsICAgIC0xLCAgIDEzMywKKyAgICAgIDc3
LCAgICA0MywgICAgLTEsICAgMTMzLCAgICA3NywgICAgNDMsICAgIDcyLCAgICA3MywgICAgLTEs
ICAgMTMzLAorICAgICAgNzcsICAgIDQzLCAgICA3MiwgICAxMjMsICAgIDczLCAgICAtMSwgICAx
MzMsICAgIDc3LCAgICA0MywgICAgNzksCisgICAgIDE0NiwgICAgLTEsICAgMTM1LCAgICAtMSwg
ICAxMzUsICAgIDQzLCAgICAtMSwgICAxMzUsICAgIDQzLCAgICA3MiwKKyAgICAgIDczLCAgICAt
MSwgICAxMzUsICAgIDQzLCAgICA3MiwgICAxMjMsICAgIDczLCAgICAtMSwgICAxMzUsICAgIDQz
LAorICAgICAgNzksICAgMTQ2LCAgICAtMSwgICAgIDMsICAgIDQzLCAgICAtMSwgICAxMzcsICAg
IC0xLCAgIDEzNiwgICAxMzcsCisgICAgICAtMSwgICAgIDksICAgIC0xLCAgICAgOCwgICAgLTEs
ICAgIDM3LCAgICAtMSwgICAgIDMsICAgIDM3LCAgICAtMSwKKyAgICAgIDM2LCAgICAtMSwgICAx
MzksICAgIC0xLCAgIDEzOCwgICAxMzksICAgIC0xLCAgICAgNCwgICAgLTEsICAgICA1LAorICAg
ICAgLTEsICAgICA2LCAgICAtMSwgICAxNDAsICAgIC0xLCAgIDE0MCwgICAgNzIsICAgMTIzLCAg
ICA3MywgICAgLTEsCisgICAgICAzOSwgICAgLTEsICAgIDExLCAgICAtMSwgICAgMTIsICAgIC0x
LCAgICAxMCwgICAgLTEsICAgIDI3LCAgICAtMSwKKyAgICAgIDI4LCAgICAtMSwgICAgMjksICAg
IC0xLCAgICAyMSwgICAgLTEsICAgIDIyLCAgICAtMSwgICAgMjMsICAgIC0xLAorICAgICAgMjQs
ICAgIC0xLCAgICAyNSwgICAgLTEsICAgIDI2LCAgICAtMSwgICAgMzAsICAgIC0xLCAgICAzMSwg
ICAgLTEsCisgICAgICAzMiwgICAgLTEsICAgIDQxLCAgICAtMSwgICAgNDIsICAgIC0xLCAgIDE0
MSwgICAgLTEsICAgIDQ0LCAgICAtMSwKKyAgICAgIDM4LCAgICA0MywgICAgNzQsICAgMTQyLCAg
ICA3NSwgICAgLTEsICAgIDM4LCAgICA3NCwgICAxNDIsICAgIDc1LAorICAgICAgLTEsICAgMTQz
LCAgICAtMSwgICAxNDIsICAgMTQzLCAgICAtMSwgICAxMzcsICAgMTQ0LCAgICA4MCwgICAgLTEs
CisgICAgIDE0NSwgICAgLTEsICAgMTQ0LCAgICA3NywgICAxNDUsICAgIC0xLCAgICA0MywgICAg
LTEsICAgIDQzLCAgICA3MiwKKyAgICAgMTIzLCAgICA3MywgICAgLTEsICAgMTIwLCAgICAtMSwg
ICAxMjQsICAgIC0xLCAgIDE1MCwgICAgLTEsICAgMTQ5LAorICAgICAgLTEsICAgMTQ3LCAgICAt
MSwgICAxNTYsICAgIC0xLCAgIDE1NywgICAgLTEsICAgMTYwLCAgICAtMSwgICAxNjcsCisgICAg
ICAtMSwgICAgNzQsICAgIDc1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NCwgICAxNTEsICAg
MTU1LCAgIDE1MiwKKyAgICAgIDc1LCAgICAtMSwgICAxNTQsICAgIC0xLCAgIDE0OSwgICAgLTEs
ICAgIDc0LCAgICA3NSwgICAgLTEsICAgIDc0LAorICAgICAxNTUsICAgIDc1LCAgICAtMSwgICAx
NDgsICAgIC0xLCAgIDE1NSwgICAxNDgsICAgIC0xLCAgICA4MCwgICAgLTEsCisgICAgIDEyMiwg
ICAgODAsICAgIC0xLCAgICAxOCwgICAgNzAsICAgMTIyLCAgICA3MSwgICAxNTgsICAgIC0xLCAg
IDE0OCwKKyAgICAgIDE2LCAgIDE0OCwgICAgLTEsICAgMTQ4LCAgICAtMSwgICAxMjIsICAgIC0x
LCAgIDEzNSwgICAgNDMsICAgIDc5LAorICAgICAxNDYsICAgIC0xLCAgICAtMSwgICAgNDAsICAg
IDcwLCAgIDE2MSwgICAxNTksICAgIDcxLCAgIDE1MywgICAgLTEsCisgICAgICAtMSwgICAgMTUs
ICAgMTYyLCAgIDE0OCwgICAgNDAsICAgIDcwLCAgIDEyMiwgICAgNzEsICAgIDgwLCAgICAtMSwK
KyAgICAgIC0xLCAgICAxNywgICAgNzAsICAgMTYzLCAgIDE2NCwgICAxNjYsICAgIDcxLCAgIDE1
MywgICAgLTEsICAgMTU2LAorICAgICAgLTEsICAgMTQ3LCAgICAtMSwgICAxNTksICAgIC0xLCAg
ICAtMSwgICAxNjUsICAgIDgwLCAgICAtMSwgICAxNjUsCisgICAgICA4MCwgICAxMjIsICAgIC0x
LCAgICAxNCwgICAgODAsICAgIC0xLCAgICAxMywgICAgODAsICAgIC0xLCAgICAyMCwKKyAgICAg
IDgwLCAgICAtMSwgICAgMjAsICAgMTIyLCAgICA4MCwgICAgLTEsICAgIDE5LCAgICA4MCwgICAg
LTEsICAgMTY5LAorICAgICAgLTEsICAgMTY4LCAgIDE2OSwgICAgLTEsICAgMTcwLCAgICAtMSwg
ICAxMjQsICAgIC0xLCAgICAtMSwgICAxMjUsCisgICAgIDE3MSwgICAxNTQsICAgIC0xCit9Owor
CisvKiBZWVJMSU5FW1lZTl0gLS0gc291cmNlIGxpbmUgd2hlcmUgcnVsZSBudW1iZXIgWVlOIHdh
cyBkZWZpbmVkLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5cmxpbmVbXSA9Cit7
CisgICAgICAgMCwgICAxNTMsICAgMTUzLCAgIDE4OCwgICAxOTEsICAgMjA0LCAgIDIwOSwgICAy
MTQsICAgMjIwLCAgIDIyMywKKyAgICAgMjk2LCAgIDI5OSwgICA0MDgsICAgNDE4LCAgIDQzMSwg
ICA0MzksICAgNTM4LCAgIDU0MSwgICA1NDksICAgNTUzLAorICAgICA1NjAsICAgNTY0LCAgIDU3
MSwgICA1NzcsICAgNTg2LCAgIDU5NCwgICA2NTYsICAgNjYzLCAgIDY3MywgICA2NzYsCisgICAg
IDY4NiwgICA2OTYsICAgNzE3LCAgIDcxOCwgICA3MTksICAgNzI0LCAgIDcyNSwgICA3MzQsICAg
NzQ2LCAgIDc0NywKKyAgICAgNzU1LCAgIDc2NiwgICA3NzAsICAgNzcxLCAgIDc4MSwgICA3OTEs
ICAgODAxLCAgIDgxNCwgICA4MTUsICAgODI1LAorICAgICA4MzgsICAgODQyLCAgIDg0NiwgICA4
NTAsICAgODUxLCAgIDg2NCwgICA4NjUsICAgODc4LCAgIDg3OSwgICA4OTIsCisgICAgIDg5Mywg
ICA5MTAsICAgOTExLCAgIDkyNCwgICA5MjUsICAgOTI2LCAgIDkyNywgICA5MjgsICAgOTMyLCAg
IDkzNSwKKyAgICAgOTQ2LCAgIDk1NCwgICA5NzksICAgOTg0LCAgIDk5MSwgIDEwMjcsICAxMDMw
LCAgMTAzNywgIDEwNDUsICAxMDY2LAorICAgIDEwODUsICAxMDk2LCAgMTEyNSwgIDExMzAsICAx
MTQwLCAgMTE0NSwgIDExNTUsICAxMTU4LCAgMTE2MSwgIDExNjQsCisgICAgMTE3MCwgIDExNzcs
ICAxMTg3LCAgMTE5OSwgIDEyMTcsICAxMjQxLCAgMTI2NCwgIDEyNjgsICAxMjgyLCAgMTMwMiwK
KyAgICAxMzMxLCAgMTM1MSwgIDE0MjcsICAxNDM2LCAgMTQ1OSwgIDE0NjIsICAxNDY4LCAgMTQ3
NiwgIDE0ODQsICAxNDkyLAorICAgIDE0OTUsICAxNTAyLCAgMTUwNSwgIDE1MDgsICAxNTE0LCAg
MTUxNywgIDE1MzIsICAxNTM2LCAgMTU0MCwgIDE1NDQsCisgICAgMTU1MywgIDE1NTgsICAxNTYz
LCAgMTU2OCwgIDE1NzMsICAxNTc4LCAgMTU4MywgIDE1ODgsICAxNTkzLCAgMTU5OCwKKyAgICAx
NjA0LCAgMTYxMCwgIDE2MTYsICAxNjIxLCAgMTYyNiwgIDE2MzEsICAxNjQ0LCAgMTY1NywgIDE2
NjUsICAxNjY4LAorICAgIDE2ODMsICAxNzE0LCAgMTcxOCwgIDE3MjQsICAxNzMyLCAgMTc0OCwg
IDE3NTIsICAxNzU2LCAgMTc1NywgIDE3NjMsCisgICAgMTc2NCwgIDE3NjUsICAxNzY2LCAgMTc2
NywgIDE3NzEsICAxNzcyLCAgMTc3MiwgIDE3NzIsICAxNzgwLCAgMTc4MSwKKyAgICAxNzg2LCAg
MTc4OSwgIDE3OTcsICAxODAwLCAgMTgwNiwgIDE4MDcsICAxODExLCAgMTgxOSwgIDE4MjMsICAx
ODMzLAorICAgIDE4MzgsICAxODU1LCAgMTg1NSwgIDE4NjAsICAxODYwLCAgMTg2NywgIDE4Njcs
ICAxODc1LCAgMTg3OCwgIDE4ODQsCisgICAgMTg4NywgIDE4OTMsICAxODk3LCAgMTkwNCwgIDE5
MTEsICAxOTE4LCAgMTkyNSwgIDE5MzYsICAxOTQ1LCAgMTk0OSwKKyAgICAxOTU2LCAgMTk1OSwg
IDE5NjUsICAxOTY1Cit9OworI2VuZGlmCisKKyNpZiBZWURFQlVHIHx8IFlZRVJST1JfVkVSQk9T
RSB8fCBZWVRPS0VOX1RBQkxFCisvKiBZWVROQU1FW1NZTUJPTC1OVU1dIC0tIFN0cmluZyBuYW1l
IG9mIHRoZSBzeW1ib2wgU1lNQk9MLU5VTS4KKyAgIEZpcnN0LCB0aGUgdGVybWluYWxzLCB0aGVu
LCBzdGFydGluZyBhdCBZWU5UT0tFTlMsIG5vbnRlcm1pbmFscy4gICovCitzdGF0aWMgY29uc3Qg
Y2hhciAqY29uc3QgeXl0bmFtZVtdID0KK3sKKyAgIiRlbmQiLCAiZXJyb3IiLCAiJHVuZGVmaW5l
ZCIsICJJTlZBUklBTlQiLCAiSElHSF9QUkVDSVNJT04iLAorICAiTUVESVVNX1BSRUNJU0lPTiIs
ICJMT1dfUFJFQ0lTSU9OIiwgIlBSRUNJU0lPTiIsICJBVFRSSUJVVEUiLAorICAiQ09OU1RfUVVB
TCIsICJCT09MX1RZUEUiLCAiRkxPQVRfVFlQRSIsICJJTlRfVFlQRSIsICJCUkVBSyIsICJDT05U
SU5VRSIsCisgICJETyIsICJFTFNFIiwgIkZPUiIsICJJRiIsICJESVNDQVJEIiwgIlJFVFVSTiIs
ICJCVkVDMiIsICJCVkVDMyIsCisgICJCVkVDNCIsICJJVkVDMiIsICJJVkVDMyIsICJJVkVDNCIs
ICJWRUMyIiwgIlZFQzMiLCAiVkVDNCIsICJNQVRSSVgyIiwKKyAgIk1BVFJJWDMiLCAiTUFUUklY
NCIsICJJTl9RVUFMIiwgIk9VVF9RVUFMIiwgIklOT1VUX1FVQUwiLCAiVU5JRk9STSIsCisgICJW
QVJZSU5HIiwgIlNUUlVDVCIsICJWT0lEX1RZUEUiLCAiV0hJTEUiLCAiU0FNUExFUjJEIiwgIlNB
TVBMRVJDVUJFIiwKKyAgIklERU5USUZJRVIiLCAiVFlQRV9OQU1FIiwgIkZMT0FUQ09OU1RBTlQi
LCAiSU5UQ09OU1RBTlQiLAorICAiQk9PTENPTlNUQU5UIiwgIkZJRUxEX1NFTEVDVElPTiIsICJM
RUZUX09QIiwgIlJJR0hUX09QIiwgIklOQ19PUCIsCisgICJERUNfT1AiLCAiTEVfT1AiLCAiR0Vf
T1AiLCAiRVFfT1AiLCAiTkVfT1AiLCAiQU5EX09QIiwgIk9SX09QIiwKKyAgIlhPUl9PUCIsICJN
VUxfQVNTSUdOIiwgIkRJVl9BU1NJR04iLCAiQUREX0FTU0lHTiIsICJNT0RfQVNTSUdOIiwKKyAg
IkxFRlRfQVNTSUdOIiwgIlJJR0hUX0FTU0lHTiIsICJBTkRfQVNTSUdOIiwgIlhPUl9BU1NJR04i
LCAiT1JfQVNTSUdOIiwKKyAgIlNVQl9BU1NJR04iLCAiTEVGVF9QQVJFTiIsICJSSUdIVF9QQVJF
TiIsICJMRUZUX0JSQUNLRVQiLAorICAiUklHSFRfQlJBQ0tFVCIsICJMRUZUX0JSQUNFIiwgIlJJ
R0hUX0JSQUNFIiwgIkRPVCIsICJDT01NQSIsICJDT0xPTiIsCisgICJFUVVBTCIsICJTRU1JQ09M
T04iLCAiQkFORyIsICJEQVNIIiwgIlRJTERFIiwgIlBMVVMiLCAiU1RBUiIsICJTTEFTSCIsCisg
ICJQRVJDRU5UIiwgIkxFRlRfQU5HTEUiLCAiUklHSFRfQU5HTEUiLCAiVkVSVElDQUxfQkFSIiwg
IkNBUkVUIiwKKyAgIkFNUEVSU0FORCIsICJRVUVTVElPTiIsICIkYWNjZXB0IiwgInZhcmlhYmxl
X2lkZW50aWZpZXIiLAorICAicHJpbWFyeV9leHByZXNzaW9uIiwgInBvc3RmaXhfZXhwcmVzc2lv
biIsICJpbnRlZ2VyX2V4cHJlc3Npb24iLAorICAiZnVuY3Rpb25fY2FsbCIsICJmdW5jdGlvbl9j
YWxsX29yX21ldGhvZCIsICJmdW5jdGlvbl9jYWxsX2dlbmVyaWMiLAorICAiZnVuY3Rpb25fY2Fs
bF9oZWFkZXJfbm9fcGFyYW1ldGVycyIsCisgICJmdW5jdGlvbl9jYWxsX2hlYWRlcl93aXRoX3Bh
cmFtZXRlcnMiLCAiZnVuY3Rpb25fY2FsbF9oZWFkZXIiLAorICAiZnVuY3Rpb25faWRlbnRpZmll
ciIsICJ1bmFyeV9leHByZXNzaW9uIiwgInVuYXJ5X29wZXJhdG9yIiwKKyAgIm11bHRpcGxpY2F0
aXZlX2V4cHJlc3Npb24iLCAiYWRkaXRpdmVfZXhwcmVzc2lvbiIsICJzaGlmdF9leHByZXNzaW9u
IiwKKyAgInJlbGF0aW9uYWxfZXhwcmVzc2lvbiIsICJlcXVhbGl0eV9leHByZXNzaW9uIiwgImFu
ZF9leHByZXNzaW9uIiwKKyAgImV4Y2x1c2l2ZV9vcl9leHByZXNzaW9uIiwgImluY2x1c2l2ZV9v
cl9leHByZXNzaW9uIiwKKyAgImxvZ2ljYWxfYW5kX2V4cHJlc3Npb24iLCAibG9naWNhbF94b3Jf
ZXhwcmVzc2lvbiIsCisgICJsb2dpY2FsX29yX2V4cHJlc3Npb24iLCAiY29uZGl0aW9uYWxfZXhw
cmVzc2lvbiIsCisgICJhc3NpZ25tZW50X2V4cHJlc3Npb24iLCAiYXNzaWdubWVudF9vcGVyYXRv
ciIsICJleHByZXNzaW9uIiwKKyAgImNvbnN0YW50X2V4cHJlc3Npb24iLCAiZGVjbGFyYXRpb24i
LCAiZnVuY3Rpb25fcHJvdG90eXBlIiwKKyAgImZ1bmN0aW9uX2RlY2xhcmF0b3IiLCAiZnVuY3Rp
b25faGVhZGVyX3dpdGhfcGFyYW1ldGVycyIsCisgICJmdW5jdGlvbl9oZWFkZXIiLCAicGFyYW1l
dGVyX2RlY2xhcmF0b3IiLCAicGFyYW1ldGVyX2RlY2xhcmF0aW9uIiwKKyAgInBhcmFtZXRlcl9x
dWFsaWZpZXIiLCAicGFyYW1ldGVyX3R5cGVfc3BlY2lmaWVyIiwKKyAgImluaXRfZGVjbGFyYXRv
cl9saXN0IiwgInNpbmdsZV9kZWNsYXJhdGlvbiIsICJmdWxseV9zcGVjaWZpZWRfdHlwZSIsCisg
ICJ0eXBlX3F1YWxpZmllciIsICJ0eXBlX3NwZWNpZmllciIsICJwcmVjaXNpb25fcXVhbGlmaWVy
IiwKKyAgInR5cGVfc3BlY2lmaWVyX25vX3ByZWMiLCAidHlwZV9zcGVjaWZpZXJfbm9uYXJyYXki
LCAic3RydWN0X3NwZWNpZmllciIsCisgICJzdHJ1Y3RfZGVjbGFyYXRpb25fbGlzdCIsICJzdHJ1
Y3RfZGVjbGFyYXRpb24iLAorICAic3RydWN0X2RlY2xhcmF0b3JfbGlzdCIsICJzdHJ1Y3RfZGVj
bGFyYXRvciIsICJpbml0aWFsaXplciIsCisgICJkZWNsYXJhdGlvbl9zdGF0ZW1lbnQiLCAic3Rh
dGVtZW50IiwgInNpbXBsZV9zdGF0ZW1lbnQiLAorICAiY29tcG91bmRfc3RhdGVtZW50IiwgIkAx
IiwgIkAyIiwgInN0YXRlbWVudF9ub19uZXdfc2NvcGUiLAorICAiY29tcG91bmRfc3RhdGVtZW50
X25vX25ld19zY29wZSIsICJzdGF0ZW1lbnRfbGlzdCIsCisgICJleHByZXNzaW9uX3N0YXRlbWVu
dCIsICJzZWxlY3Rpb25fc3RhdGVtZW50IiwKKyAgInNlbGVjdGlvbl9yZXN0X3N0YXRlbWVudCIs
ICJjb25kaXRpb24iLCAiaXRlcmF0aW9uX3N0YXRlbWVudCIsICJAMyIsCisgICJANCIsICJANSIs
ICJmb3JfaW5pdF9zdGF0ZW1lbnQiLCAiY29uZGl0aW9ub3B0IiwgImZvcl9yZXN0X3N0YXRlbWVu
dCIsCisgICJqdW1wX3N0YXRlbWVudCIsICJ0cmFuc2xhdGlvbl91bml0IiwgImV4dGVybmFsX2Rl
Y2xhcmF0aW9uIiwKKyAgImZ1bmN0aW9uX2RlZmluaXRpb24iLCAiQDYiLCAwCit9OworI2VuZGlm
CisKKyMgaWZkZWYgWVlQUklOVAorLyogWVlUT0tOVU1bWVlMRVgtTlVNXSAtLSBJbnRlcm5hbCB0
b2tlbiBudW1iZXIgY29ycmVzcG9uZGluZyB0bworICAgdG9rZW4gWVlMRVgtTlVNLiAgKi8KK3N0
YXRpYyBjb25zdCB5eXR5cGVfdWludDE2IHl5dG9rbnVtW10gPQoreworICAgICAgIDAsICAgMjU2
LCAgIDI1NywgICAyNTgsICAgMjU5LCAgIDI2MCwgICAyNjEsICAgMjYyLCAgIDI2MywgICAyNjQs
CisgICAgIDI2NSwgICAyNjYsICAgMjY3LCAgIDI2OCwgICAyNjksICAgMjcwLCAgIDI3MSwgICAy
NzIsICAgMjczLCAgIDI3NCwKKyAgICAgMjc1LCAgIDI3NiwgICAyNzcsICAgMjc4LCAgIDI3OSwg
ICAyODAsICAgMjgxLCAgIDI4MiwgICAyODMsICAgMjg0LAorICAgICAyODUsICAgMjg2LCAgIDI4
NywgICAyODgsICAgMjg5LCAgIDI5MCwgICAyOTEsICAgMjkyLCAgIDI5MywgICAyOTQsCisgICAg
IDI5NSwgICAyOTYsICAgMjk3LCAgIDI5OCwgICAyOTksICAgMzAwLCAgIDMwMSwgICAzMDIsICAg
MzAzLCAgIDMwNCwKKyAgICAgMzA1LCAgIDMwNiwgICAzMDcsICAgMzA4LCAgIDMwOSwgICAzMTAs
ICAgMzExLCAgIDMxMiwgICAzMTMsICAgMzE0LAorICAgICAzMTUsICAgMzE2LCAgIDMxNywgICAz
MTgsICAgMzE5LCAgIDMyMCwgICAzMjEsICAgMzIyLCAgIDMyMywgICAzMjQsCisgICAgIDMyNSwg
ICAzMjYsICAgMzI3LCAgIDMyOCwgICAzMjksICAgMzMwLCAgIDMzMSwgICAzMzIsICAgMzMzLCAg
IDMzNCwKKyAgICAgMzM1LCAgIDMzNiwgICAzMzcsICAgMzM4LCAgIDMzOSwgICAzNDAsICAgMzQx
LCAgIDM0MiwgICAzNDMsICAgMzQ0LAorICAgICAzNDUsICAgMzQ2LCAgIDM0NywgICAzNDgKK307
CisjIGVuZGlmCisKKy8qIFlZUjFbWVlOXSAtLSBTeW1ib2wgbnVtYmVyIG9mIHN5bWJvbCB0aGF0
IHJ1bGUgWVlOIGRlcml2ZXMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXIxW10g
PQoreworICAgICAgIDAsICAgIDk0LCAgICA5NSwgICAgOTYsICAgIDk2LCAgICA5NiwgICAgOTYs
ICAgIDk2LCAgICA5NywgICAgOTcsCisgICAgICA5NywgICAgOTcsICAgIDk3LCAgICA5NywgICAg
OTgsICAgIDk5LCAgIDEwMCwgICAxMDAsICAgMTAxLCAgIDEwMSwKKyAgICAgMTAyLCAgIDEwMiwg
ICAxMDMsICAgMTAzLCAgIDEwNCwgICAxMDUsICAgMTA1LCAgIDEwNSwgICAxMDYsICAgMTA2LAor
ICAgICAxMDYsICAgMTA2LCAgIDEwNywgICAxMDcsICAgMTA3LCAgIDEwOCwgICAxMDgsICAgMTA4
LCAgIDEwOSwgICAxMDksCisgICAgIDEwOSwgICAxMTAsICAgMTExLCAgIDExMSwgICAxMTEsICAg
MTExLCAgIDExMSwgICAxMTIsICAgMTEyLCAgIDExMiwKKyAgICAgMTEzLCAgIDExNCwgICAxMTUs
ICAgMTE2LCAgIDExNiwgICAxMTcsICAgMTE3LCAgIDExOCwgICAxMTgsICAgMTE5LAorICAgICAx
MTksICAgMTIwLCAgIDEyMCwgICAxMjEsICAgMTIxLCAgIDEyMSwgICAxMjEsICAgMTIxLCAgIDEy
MiwgICAxMjIsCisgICAgIDEyMywgICAxMjQsICAgMTI0LCAgIDEyNCwgICAxMjUsICAgMTI2LCAg
IDEyNiwgICAxMjcsICAgMTI3LCAgIDEyOCwKKyAgICAgMTI5LCAgIDEyOSwgICAxMzAsICAgMTMw
LCAgIDEzMCwgICAxMzAsICAgMTMxLCAgIDEzMSwgICAxMzEsICAgMTMxLAorICAgICAxMzIsICAg
MTMzLCAgIDEzMywgICAxMzMsICAgMTMzLCAgIDEzMywgICAxMzQsICAgMTM0LCAgIDEzNCwgICAx
MzQsCisgICAgIDEzNCwgICAxMzQsICAgMTM1LCAgIDEzNSwgICAxMzYsICAgMTM2LCAgIDEzNiwg
ICAxMzYsICAgMTM2LCAgIDEzNywKKyAgICAgMTM3LCAgIDEzOCwgICAxMzgsICAgMTM4LCAgIDEz
OSwgICAxMzksICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLAorICAgICAxNDAsICAgMTQwLCAg
IDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsCisg
ICAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MSwgICAxNDEs
ICAgMTQyLCAgIDE0MiwKKyAgICAgMTQzLCAgIDE0NCwgICAxNDQsICAgMTQ1LCAgIDE0NSwgICAx
NDYsICAgMTQ3LCAgIDE0OCwgICAxNDgsICAgMTQ5LAorICAgICAxNDksICAgMTQ5LCAgIDE0OSwg
ICAxNDksICAgMTUwLCAgIDE1MSwgICAxNTIsICAgMTUwLCAgIDE1MywgICAxNTMsCisgICAgIDE1
NCwgICAxNTQsICAgMTU1LCAgIDE1NSwgICAxNTYsICAgMTU2LCAgIDE1NywgICAxNTgsICAgMTU4
LCAgIDE1OSwKKyAgICAgMTU5LCAgIDE2MSwgICAxNjAsICAgMTYyLCAgIDE2MCwgICAxNjMsICAg
MTYwLCAgIDE2NCwgICAxNjQsICAgMTY1LAorICAgICAxNjUsICAgMTY2LCAgIDE2NiwgICAxNjcs
ICAgMTY3LCAgIDE2NywgICAxNjcsICAgMTY3LCAgIDE2OCwgICAxNjgsCisgICAgIDE2OSwgICAx
NjksICAgMTcxLCAgIDE3MAorfTsKKworLyogWVlSMltZWU5dIC0tIE51bWJlciBvZiBzeW1ib2xz
IGNvbXBvc2luZyByaWdodCBoYW5kIHNpZGUgb2YgcnVsZSBZWU4uICAqLworc3RhdGljIGNvbnN0
IHl5dHlwZV91aW50OCB5eXIyW10gPQoreworICAgICAgIDAsICAgICAyLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwgICAgIDQsCisgICAgICAgMSwgICAg
IDMsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAyLCAgICAg
MiwKKyAgICAgICAyLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDEsICAgICAxLCAg
ICAgMSwgICAgIDEsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDMsICAgICAzLCAgICAgMSwgICAgIDMsCisgICAgICAgMywgICAgIDEsICAg
ICAxLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMywKKyAg
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDEsICAgICAzLCAgICAgMSwg
ICAgIDMsICAgICAxLAorICAgICAgIDUsICAgICAxLCAgICAgMywgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsCisgICAgICAgMSwgICAgIDIsICAgICAyLCAg
ICAgNCwgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgMywKKyAgICAgICAy
LCAgICAgNSwgICAgIDMsICAgICAyLCAgICAgMywgICAgIDIsICAgICAwLCAgICAgMSwgICAgIDEs
ICAgICAxLAorICAgICAgIDEsICAgICAxLCAgICAgMywgICAgIDUsICAgICA2LCAgICAgNSwgICAg
IDEsICAgICAyLCAgICAgNCwgICAgIDUsCisgICAgICAgNCwgICAgIDIsICAgICAxLCAgICAgMiwg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAxLCAgICAgMSwKKyAgICAgICAyLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDQsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAx
LAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgNSwgICAgIDQsICAgICAxLCAgICAgMiwKKyAgICAgICAzLCAgICAgMSwgICAg
IDMsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLAorICAg
ICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAyLCAgICAgMCwgICAgIDAsICAgICA1LCAg
ICAgMSwgICAgIDEsCisgICAgICAgMiwgICAgIDMsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAy
LCAgICAgNSwgICAgIDMsICAgICAxLCAgICAgMSwKKyAgICAgICA0LCAgICAgMCwgICAgIDYsICAg
ICAwLCAgICAgOCwgICAgIDAsICAgICA3LCAgICAgMSwgICAgIDEsICAgICAxLAorICAgICAgIDAs
ICAgICAyLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDMsICAgICAyLCAgICAgMSwg
ICAgIDIsCisgICAgICAgMSwgICAgIDEsICAgICAwLCAgICAgMworfTsKKworLyogWVlERUZBQ1Rb
U1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBydWxlIHRvIHJlZHVjZSB3aXRoIGluIHN0YXRlCisgICBT
VEFURS1OVU0gd2hlbiBZWVRBQkxFIGRvZXNuJ3Qgc3BlY2lmeSBzb21ldGhpbmcgZWxzZSB0byBk
by4gIFplcm8KKyAgIG1lYW5zIHRoZSBkZWZhdWx0IGlzIGFuIGVycm9yLiAgKi8KK3N0YXRpYyBj
b25zdCB5eXR5cGVfdWludDggeXlkZWZhY3RbXSA9Cit7CisgICAgICAgMCwgICAgIDAsICAgMTEx
LCAgIDExMiwgICAxMTMsICAgICAwLCAgIDEwNSwgICAxMDQsICAgMTE5LCAgIDExNywKKyAgICAg
MTE4LCAgIDEyMywgICAxMjQsICAgMTI1LCAgIDEyNiwgICAxMjcsICAgMTI4LCAgIDEyMCwgICAx
MjEsICAgMTIyLAorICAgICAxMjksICAgMTMwLCAgIDEzMSwgICAxMDgsICAgMTA2LCAgICAgMCwg
ICAxMTYsICAgMTMyLCAgIDEzMywgICAxMzUsCisgICAgIDE5MSwgICAxOTIsICAgICAwLCAgICA3
NiwgICAgODYsICAgICAwLCAgICA5MSwgICAgOTYsICAgICAwLCAgIDEwMiwKKyAgICAgICAwLCAg
IDEwOSwgICAxMTQsICAgMTM0LCAgICAgMCwgICAxODgsICAgMTkwLCAgIDEwNywgICAxMDEsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgICA3MSwgICAgIDAsICAgIDc0LCAgICA4NiwgICAgIDAs
ICAgIDg3LCAgICA4OCwgICAgODksCisgICAgICA3NywgICAgIDAsICAgIDg2LCAgICAgMCwgICAg
NzIsICAgIDk3LCAgIDEwMywgICAxMTAsICAgICAwLCAgICAgMSwKKyAgICAgMTg5LCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAxMzgsICAgICAwLCAgIDE5MywgICAgNzgsICAgIDgzLAor
ICAgICAgODUsICAgIDkwLCAgICAgMCwgICAgOTIsICAgIDc5LCAgICAgMCwgICAgIDAsICAgICAy
LCAgICAgNSwgICAgIDQsCisgICAgICAgNiwgICAgMjcsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDM0LCAgICAzMywgICAgMzIsICAgICAzLCAgICAgOCwKKyAgICAgIDI4LCAgICAxMCwgICAgMTUs
ICAgIDE2LCAgICAgMCwgICAgIDAsICAgIDIxLCAgICAgMCwgICAgMzUsICAgICAwLAorICAgICAg
MzgsICAgIDQxLCAgICA0MiwgICAgNDcsICAgIDUwLCAgICA1MSwgICAgNTIsICAgIDUzLCAgICA1
NSwgICAgNTcsCisgICAgICA1OSwgICAgNzAsICAgICAwLCAgICAyNSwgICAgNzMsICAgICAwLCAg
IDE0MywgICAgIDAsICAgMTQxLCAgIDEzNywKKyAgICAgMTM5LCAgICAgMCwgICAgIDAsICAgMTcz
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTU1LAorICAgICAxNjAsICAg
MTY0LCAgICAzNSwgICAgNjEsICAgIDY4LCAgICAgMCwgICAxNDYsICAgICAwLCAgIDEwMiwgICAx
NDksCisgICAgIDE2MiwgICAxNDgsICAgMTQ3LCAgICAgMCwgICAxNTAsICAgMTUxLCAgIDE1Miwg
ICAxNTMsICAgIDgwLCAgICA4MiwKKyAgICAgIDg0LCAgICAgMCwgICAgIDAsICAgIDk4LCAgICAg
MCwgICAxNDUsICAgMTAwLCAgICAyOSwgICAgMzAsICAgICAwLAorICAgICAgMTIsICAgIDEzLCAg
ICAgMCwgICAgIDAsICAgIDE5LCAgICAxOCwgICAgIDAsICAgMTE2LCAgICAyMiwgICAgMjQsCisg
ICAgICAzMSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAx
MTUsICAgMTM2LCAgICAgMCwgICAgIDAsICAgMTQwLAorICAgICAxODQsICAgMTgzLCAgICAgMCwg
ICAxNzUsICAgICAwLCAgIDE4NywgICAxODUsICAgICAwLCAgIDE3MSwgICAxNTQsCisgICAgICAg
MCwgICAgNjQsICAgIDY1LCAgICA2NiwgICAgNjcsICAgIDYzLCAgICAgMCwgICAgIDAsICAgMTY1
LCAgIDE2MSwKKyAgICAgMTYzLCAgICAgMCwgICAgOTMsICAgICAwLCAgICA5NSwgICAgOTksICAg
ICA3LCAgICAgMCwgICAgMTQsICAgIDI2LAorICAgICAgMTEsICAgIDE3LCAgICAyMywgICAgMzYs
ICAgIDM3LCAgICA0MCwgICAgMzksICAgIDQ1LCAgICA0NiwgICAgNDMsCisgICAgICA0NCwgICAg
NDgsICAgIDQ5LCAgICA1NCwgICAgNTYsICAgIDU4LCAgICAgMCwgICAgIDAsICAgMTQyLCAgICAg
MCwKKyAgICAgICAwLCAgICAgMCwgICAxODYsICAgICAwLCAgIDE1NiwgICAgNjIsICAgIDY5LCAg
ICAgMCwgICAgOTQsICAgICA5LAorICAgICAgIDAsICAgMTQ0LCAgICAgMCwgICAxNzgsICAgMTc3
LCAgIDE4MCwgICAgIDAsICAgMTY5LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgODEsICAg
IDYwLCAgICAgMCwgICAxNzksICAgICAwLCAgICAgMCwgICAxNjgsICAgMTY2LCAgICAgMCwKKyAg
ICAgICAwLCAgIDE1NywgICAgIDAsICAgMTgxLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE1OSwg
ICAxNzIsICAgMTU4LAorICAgICAgIDAsICAgMTgyLCAgIDE3NiwgICAxNjcsICAgMTcwLCAgIDE3
NAorfTsKKworLyogWVlERUZHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlw
ZV9pbnQxNiB5eWRlZmdvdG9bXSA9Cit7CisgICAgICAtMSwgICAgOTgsICAgIDk5LCAgIDEwMCwg
ICAyMjcsICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LCAgIDEwNSwKKyAgICAgMTA2LCAgIDEw
NywgICAxNDIsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAxMTQsICAgMTE1
LAorICAgICAxMTYsICAgMTE3LCAgIDExOCwgICAxMTksICAgMTIwLCAgIDE0MywgICAxNDQsICAg
MjE2LCAgIDE0NSwgICAxMjIsCisgICAgIDE0NiwgICAxNDcsICAgIDMyLCAgICAzMywgICAgMzQs
ICAgIDc5LCAgICA2MCwgICAgNjEsICAgIDgwLCAgICAzNSwKKyAgICAgIDM2LCAgICAzNywgICAg
MzgsICAgMTIzLCAgICA0MCwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNzQsICAgIDc1LAorICAg
ICAxMjcsICAgMTI4LCAgIDE2NiwgICAxNDksICAgMTUwLCAgIDE1MSwgICAxNTIsICAgMjEwLCAg
IDI3MCwgICAyODgsCisgICAgIDI4OSwgICAxNTMsICAgMTU0LCAgIDE1NSwgICAyNzgsICAgMjY5
LCAgIDE1NiwgICAyNTMsICAgMjAyLCAgIDI1MCwKKyAgICAgMjY1LCAgIDI3NSwgICAyNzYsICAg
MTU3LCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA1MworfTsKKworLyogWVlQQUNUW1NUQVRFLU5V
TV0gLS0gSW5kZXggaW4gWVlUQUJMRSBvZiB0aGUgcG9ydGlvbiBkZXNjcmliaW5nCisgICBTVEFU
RS1OVU0uICAqLworI2RlZmluZSBZWVBBQ1RfTklORiAtMjUwCitzdGF0aWMgY29uc3QgeXl0eXBl
X2ludDE2IHl5cGFjdFtdID0KK3sKKyAgICAxMjI1LCAgICAzNiwgIC0yNTAsICAtMjUwLCAgLTI1
MCwgICAxNTAsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAtMjUwLAorICAgIC0yNTAsICAtMjUwLCAg
LTI1MCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgIC0yNTAsCisg
ICAgLTI1MCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAgLTMzLCAgLTI1MCwgIC0yNTAs
ICAtMjUwLCAgLTI1MCwKKyAgICAtMjUwLCAgIC02MCwgICAtMjIsICAgLTE3LCAgICAyMSwgICAt
NjIsICAtMjUwLCAgICAyMiwgIDEyNjYsICAtMjUwLAorICAgIDEyOTAsICAtMjUwLCAgICAxMSwg
IC0yNTAsICAxMTM4LCAgLTI1MCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgIDEyOTAsCisgICAgICAx
NCwgIDEyNjYsICAtMjUwLCAgICAyNywgIC0yNTAsICAgIDM0LCAgICA0MSwgIC0yNTAsICAtMjUw
LCAgLTI1MCwKKyAgICAtMjUwLCAgMTI2NiwgICAxMjksICAgIDYxLCAgLTI1MCwgICAgMTcsICAt
MjUwLCAgLTI1MCwgICA5MDgsICAtMjUwLAorICAgIC0yNTAsICAgIDMxLCAgMTI2NiwgICAgNzIs
ICAxMDQyLCAgLTI1MCwgICAyODMsICAtMjUwLCAgLTI1MCwgIC0yNTAsCisgICAgLTI1MCwgICAg
OTAsICAxMjY2LCAgIC00NiwgIC0yNTAsICAgMTk0LCAgIDkwOCwgICAgNjUsICAtMjUwLCAgLTI1
MCwKKyAgICAtMjUwLCAgLTI1MCwgICA5MDgsICAgOTA4LCAgIDkwOCwgIC0yNTAsICAtMjUwLCAg
LTI1MCwgIC0yNTAsICAtMjUwLAorICAgICAtNDAsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAgIDgw
LCAgIC0yNSwgICA5NzUsICAgIDg3LCAgLTI1MCwgICA5MDgsCisgICAgICAzNSwgICAgMTMsICAt
MjUwLCAgIC0yNiwgICAgNjgsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAgMTEwLCAgIDEwOSwKKyAg
ICAgLTU0LCAgLTI1MCwgICAgOTYsICAtMjUwLCAgLTI1MCwgIDEwODMsICAgIDk4LCAgICAzMywg
IC0yNTAsICAtMjUwLAorICAgIC0yNTAsICAgIDkxLCAgICA5MiwgIC0yNTAsICAgMTA0LCAgIDEw
NywgICAgOTksICAgNzYwLCAgIDEwOCwgICAxMDUsCisgICAgLTI1MCwgIC0yNTAsICAgIDI0LCAg
LTI1MCwgIC0yNTAsICAgIDM3LCAgLTI1MCwgICAtNjAsICAgMTEyLCAgLTI1MCwKKyAgICAtMjUw
LCAgLTI1MCwgIC0yNTAsICAgMzY1LCAgLTI1MCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgICAxMTEs
ICAtMjUwLAorICAgIC0yNTAsICAgODI3LCAgIDkwOCwgIC0yNTAsICAgMTEzLCAgLTI1MCwgIC0y
NTAsICAtMjUwLCAgLTI1MCwgICAgIDQsCisgICAgLTI1MCwgIC0yNTAsICAgOTA4LCAgMTE3OSwg
IC0yNTAsICAtMjUwLCAgIDkwOCwgICAxMTQsICAtMjUwLCAgLTI1MCwKKyAgICAtMjUwLCAgIDkw
OCwgICA5MDgsICAgOTA4LCAgIDkwOCwgICA5MDgsICAgOTA4LCAgIDkwOCwgICA5MDgsICAgOTA4
LAorICAgICA5MDgsICAgOTA4LCAgIDkwOCwgICA5MDgsICAgOTA4LCAgLTI1MCwgIC0yNTAsICAg
OTA4LCAgICA3MiwgIC0yNTAsCisgICAgLTI1MCwgIC0yNTAsICAgNDQ3LCAgLTI1MCwgICA5MDgs
ICAtMjUwLCAgLTI1MCwgICAgNDIsICAtMjUwLCAgLTI1MCwKKyAgICAgNDQ3LCAgLTI1MCwgIC0y
NTAsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAgOTA4LCAgIDkwOCwgIC0yNTAsICAtMjUwLAorICAg
IC0yNTAsICAgOTA4LCAgLTI1MCwgICAxMTUsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAgMTE2LCAg
IDExNywgIC0yNTAsCisgICAgIDEyMCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAgIDM1
LCAgICAzNSwgIC0yNTAsICAtMjUwLCAgLTI1MCwKKyAgICAtMjUwLCAgIC0yNiwgICAtMjYsICAt
MjUwLCAgIDExMCwgICAxMDksICAgIDUxLCAgIDExOSwgIC0yNTAsICAgMTQ0LAorICAgICA2MTEs
ICAgIDIzLCAgLTI1MCwgICA2OTMsICAgNDQ3LCAgLTI1MCwgIC0yNTAsICAgMTIyLCAgLTI1MCwg
IC0yNTAsCisgICAgIDkwOCwgIC0yNTAsICAgMTIzLCAgLTI1MCwgIC0yNTAsICAgNjkzLCAgIDQ0
NywgICAxMTcsICAgMTUzLCAgIDEyNiwKKyAgICAgMTI4LCAgLTI1MCwgIC0yNTAsICAgOTA4LCAg
LTI1MCwgICAxMjcsICAgMTM3LCAgIDE3MSwgIC0yNTAsICAgMTMwLAorICAgICA1MjksICAtMjUw
LCAgICAyOCwgICA5MDgsICAgNTI5LCAgIDQ0NywgICA5MDgsICAtMjUwLCAgLTI1MCwgIC0yNTAs
CisgICAgIDEzMSwgICAxMTcsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAtMjUwCit9OworCisvKiBZ
WVBHT1RPW05URVJNLU5VTV0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eXBnb3Rv
W10gPQoreworICAgIC0yNTAsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgIC0y
NTAsICAgIDM5LCAgLTI1MCwgIC0yNTAsCisgICAgLTI1MCwgIC0yNTAsICAgLTQ1LCAgLTI1MCwg
ICAtMTgsICAtMjUwLCAgIC03OSwgICAtMzAsICAtMjUwLCAgLTI1MCwKKyAgICAtMjUwLCAgICAz
OCwgICAgNTIsICAgIDIwLCAgLTI1MCwgICAtNjMsICAgLTg1LCAgLTI1MCwgICAtOTIsICAgLTcx
LAorICAgICAgIDYsICAgICA5LCAgLTI1MCwgIC0yNTAsICAtMjUwLCAgIDEzMiwgICAxNzIsICAg
MTY2LCAgIDE0OCwgIC0yNTAsCisgICAgLTI1MCwgIC0yNDYsICAgLTIxLCAgICAgMCwgICAyMjYs
ICAgLTI0LCAgLTI1MCwgIC0yNTAsICAgMTYyLCAgIC02NiwKKyAgICAtMjUwLCAgICA0NSwgIC0x
NTksICAgIC0zLCAgLTEzNiwgIC0yNDksICAtMjUwLCAgLTI1MCwgIC0yNTAsICAgLTM2LAorICAg
ICAxOTYsICAgIDQ2LCAgICAgMSwgIC0yNTAsICAtMjUwLCAgIC0xMywgIC0yNTAsICAtMjUwLCAg
LTI1MCwgIC0yNTAsCisgICAgLTI1MCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAgMjEx
LCAgLTI1MCwgIC0yNTAKK307CisKKy8qIFlZVEFCTEVbWVlQQUNUW1NUQVRFLU5VTV1dLiAgV2hh
dCB0byBkbyBpbiBzdGF0ZSBTVEFURS1OVU0uICBJZgorICAgcG9zaXRpdmUsIHNoaWZ0IHRoYXQg
dG9rZW4uICBJZiBuZWdhdGl2ZSwgcmVkdWNlIHRoZSBydWxlIHdoaWNoCisgICBudW1iZXIgaXMg
dGhlIG9wcG9zaXRlLiAgSWYgemVybywgZG8gd2hhdCBZWURFRkFDVCBzYXlzLgorICAgSWYgWVlU
QUJMRV9OSU5GLCBzeW50YXggZXJyb3IuICAqLworI2RlZmluZSBZWVRBQkxFX05JTkYgLTc2Citz
dGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5dGFibGVbXSA9Cit7CisgICAgICAzOSwgICAxNjUs
ICAgMTY5LCAgIDIyNCwgICAxOTMsICAgMTIxLCAgICAzMCwgICAyNjgsICAgMTMwLCAgICAzMSwK
KyAgICAgIDUwLCAgIDE3MCwgICAxNzEsICAgIDYyLCAgIDE2NCwgICAgNjMsICAgIDY3LCAgIDIy
MCwgICAgNjQsICAgMjY4LAorICAgICAgNTIsICAgMTc4LCAgIDEyMSwgICAxMDgsICAgIDU2LCAg
ICA3MSwgICAxNjEsICAgMTg1LCAgIDE4NiwgICAgIDYsCisgICAgICAgNywgICAyODcsICAgMTcy
LCAgIDE2MiwgICAgNjIsICAgMjg3LCAgIDE3MywgICAgNTYsICAgIDY2LCAgIDE5NCwKKyAgICAg
MTA4LCAgICA1MSwgICAgIDYsICAgICA3LCAgICAzOSwgICAyMDcsICAgMTc1LCAgIDE2NywgICAx
NjgsICAgIDU0LAorICAgICAgMzAsICAgIDczLCAgIDE3NiwgICAgMzEsICAgIDU3LCAgICA1OCwg
ICAgNTksICAgIDIzLCAgICAyNCwgICAxMzAsCisgICAgICA1NSwgICAgODEsICAgMTg3LCAgIDE4
OCwgICAxODAsICAgIDY1LCAgIDI0OSwgICAgNTcsICAgIDU4LCAgICA1OSwKKyAgICAgIDIzLCAg
ICAyNCwgICAgNzMsICAgIDQ3LCAgICA3MywgICAyMjYsICAgMTQ4LCAgIDE2NSwgICAgNDcsICAg
IDQ4LAorICAgICAyMjgsICAgMjE3LCAgICA4MSwgICAgNjgsICAgMjExLCAgIDIxMiwgICAyMTMs
ICAgIDg0LCAgICA3MiwgICAgODUsCisgICAgIDIyMywgICAyMzIsICAgLTc1LCAgIDIxNCwgICAy
NjYsICAgMTgzLCAgICA4NiwgICAxODQsICAgMTIxLCAgIDI5MCwKKyAgICAgMjE3LCAgICA3Niwg
ICAyNDYsICAgMjE1LCAgICA4MywgICAyMTcsICAgMjM3LCAgIDIzOCwgICAyMzksICAgMjQwLAor
ICAgICAxOTgsICAgMTI0LCAgIDI1MSwgICAxOTksICAgMjE3LCAgIDEyNiwgICAxMDgsICAgMjE4
LCAgIDIyMCwgICAyMTcsCisgICAgIDE4MSwgICAxODIsICAgMjUyLCAgIDE4OSwgICAxOTAsICAg
IDczLCAgIDI0NywgICAyOTQsICAgMjE3LCAgIDI2MCwKKyAgICAgMjc3LCAgIDI1NSwgICAyNTYs
ICAgMTU4LCAgIDEyMSwgICAtMjYsICAgMjMzLCAgIDIzNCwgICAxMDgsICAgMTA4LAorICAgICAx
MDgsICAgMTA4LCAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEw
OCwgICAyOTMsCisgICAgIDI1NywgICAxNzQsICAgMTA4LCAgIDE0OCwgICAgIDIsICAgICAzLCAg
ICAgNCwgICAxNzksICAgMTIxLCAgIDI0MSwKKyAgICAgMjQyLCAgIDI2NywgICAgNTcsICAgIDU4
LCAgICA1OSwgICAyMzUsICAgMjM2LCAgIDE5MSwgICAxOTIsICAgMTk1LAorICAgICAxOTcsICAg
MjAwLCAgIDIwMSwgICAyNjcsICAgMjAzLCAgIDI3MiwgICAxMDgsICAgMjA0LCAgIDIwOCwgICAy
MDUsCisgICAgIDIwOSwgICAyODIsICAgLTI1LCAgIDIyMSwgICAyNjIsICAgLTIwLCAgIDIyNSwg
ICAyODUsICAgMjU4LCAgIDI1OSwKKyAgICAgLTI3LCAgIDI5MSwgICAyNjEsICAgMjczLCAgIDIx
NywgICAyNzEsICAgMjc5LCAgIDI4MCwgICAgIDIsICAgICAzLAorICAgICAgIDQsICAgMTY1LCAg
IDE0OCwgICAyODEsICAgICA4LCAgICAgOSwgICAgMTAsICAgMjgzLCAgIDI4NCwgICAyODYsCisg
ICAgIDE0OCwgICAyOTUsICAgMjMxLCAgIDI0NSwgICAxNTksICAgIDExLCAgICAxMiwgICAgMTMs
ICAgIDE0LCAgICAxNSwKKyAgICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
MjEsICAgIDIyLCAgICA3OCwgICAgODIsICAgMjQzLAorICAgICAxNjAsICAgIDQ5LCAgICAyNSwg
ICAgMjYsICAgMTI1LCAgICAyNywgICAgMjgsICAgIDg3LCAgICAyOSwgICAgODgsCisgICAgICA4
OSwgICAgOTAsICAgIDkxLCAgIDI0OCwgICAyNDQsICAgIDkyLCAgICA5MywgICAyNjMsICAgMjky
LCAgICA3NywKKyAgICAgMTQ4LCAgIDI2NCwgICAyNzQsICAgMTQ4LCAgIDE0OCwgICAgNzAsICAg
MjU0LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgIDk0LCAgIDE0OCwgICAxNDgsICAgMTYzLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk1LCAgICA5NiwgICAgIDAsICAgIDk3LCAgICAg
MCwKKyAgICAgMTQ4LCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0OCwgICAxNDgsICAgICAxLCAg
ICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5
LCAgICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsCisgICAgIDEzNCwgICAxMzUsICAg
MTM2LCAgIDEzNywgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAg
ICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAy
OCwgICAgODcsICAgIDI5LCAgICA4OCwgICAgODksCisgICAgICA5MCwgICAgOTEsICAgICAwLCAg
ICAgMCwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTQsICAgICAwLCAgICAgMCwgICAg
IDAsICAgMTM5LCAgIDE0MCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwg
ICAgOTUsICAgIDk2LCAgICAgMCwgICAgOTcsICAgICAxLCAgICAgMiwKKyAgICAgICAzLCAgICAg
NCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAxMzEsICAgMTMy
LAorICAgICAxMzMsICAgICAwLCAgIDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAg
IDEyLCAgICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTks
ICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAxMzgsICAgIDI3LCAgICAyOCwgICAgODcsICAgIDI5LAorICAg
ICAgODgsICAgIDg5LCAgICA5MCwgICAgOTEsICAgICAwLCAgICAgMCwgICAgOTIsICAgIDkzLCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgOTQsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTM5LAorICAgICAyMTks
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwgICAgOTUsICAgIDk2LCAgICAgMCwg
ICAgOTcsCisgICAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAg
NywgICAgIDgsICAgICA5LCAgICAxMCwKKyAgICAgMTMxLCAgIDEzMiwgICAxMzMsICAgICAwLCAg
IDEzNCwgICAxMzUsICAgMTM2LCAgIDEzNywgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0
LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIs
CisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAx
MzgsICAgIDI3LCAgICAyOCwKKyAgICAgIDg3LCAgICAyOSwgICAgODgsICAgIDg5LCAgICA5MCwg
ICAgOTEsICAgICAwLCAgICAgMCwgICAgOTIsICAgIDkzLAorICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTQsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDEzOSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgIDE0MSwgICAgOTUsICAgIDk2LAorICAgICAgIDAsICAgIDk3LCAgICAgMSwgICAg
IDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsCisgICAgICAgOSwg
ICAgMTAsICAgMTMxLCAgIDEzMiwgICAxMzMsICAgICAwLCAgIDEzNCwgICAxMzUsICAgMTM2LCAg
IDEzNywKKyAgICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3
LCAgICAxOCwgICAgMTksICAgIDIwLAorICAgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAxMzgsCisgICAgICAyNywgICAgMjgs
ICAgIDg3LCAgICAyOSwgICAgODgsICAgIDg5LCAgICA5MCwgICAgOTEsICAgICAwLCAgICAgMCwK
KyAgICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTQsCisgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICA3NiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDE0MSwKKyAgICAg
IDk1LCAgICA5NiwgICAgIDAsICAgIDk3LCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAg
IDUsICAgICA2LAorICAgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwKKyAgICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAg
IDI1LAorICAgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgIDg3LCAgICAyOSwgICAgODgs
ICAgIDg5LCAgICA5MCwgICAgOTEsCisgICAgICAgMCwgICAgIDAsICAgIDkyLCAgICA5MywgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAor
ICAgICAgIDAsICAgIDk0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAxNDEsICAgIDk1LCAgICA5NiwgICAgIDAsICAg
IDk3LCAgICA1NiwgICAgIDIsICAgICAzLCAgICAgNCwKKyAgICAgICAwLCAgICAgNiwgICAgIDcs
ICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAx
NSwgICAgMTYsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAyMywKKyAgICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAw
LCAgICAyNywgICAgMjgsICAgIDg3LCAgICAyOSwgICAgODgsICAgIDg5LAorICAgICAgOTAsICAg
IDkxLCAgICAgMCwgICAgIDAsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICAg
MiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDgsICAgICA5LCAg
ICAxMCwgICAgIDAsICAgIDk1LCAgICA5NiwgICAgIDAsICAgIDk3LCAgICAgMCwgICAgIDAsCisg
ICAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LAorICAgICAgIDAsICAgIDI3LCAgICAyOCwg
ICAgODcsICAgIDI5LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgIDAsCisgICAgICAg
MCwgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgOTQsICAgICAyLCAgICAgMywgICAgIDQs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsCisgICAgIDIwNiwgICAg
OTUsICAgIDk2LCAgICAgMCwgICAgOTcsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAx
MiwKKyAgICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsCisgICAgICA4NywgICAgMjksICAg
IDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICAgMCwgICAgIDAsICAgIDkyLCAgICA5MywKKyAg
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgIDk0LCAgICAgMCwgICAgIDAsCisgICAgIDIyMiwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk1LCAgICA5NiwKKyAgICAgICAw
LCAgICA5NywgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgs
ICAgICA5LAorICAgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwg
ICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgIDIyLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3
LAorICAgICAgMjgsICAgIDg3LCAgICAyOSwgICAgODgsICAgIDg5LCAgICA5MCwgICAgOTEsICAg
ICAwLCAgICAgMCwgICAgOTIsCisgICAgICA5MywgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTQsICAgICAyLAorICAg
ICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAgMCwgICAgOTUsCisgICAgICA5NiwgICAgIDAsICAgIDk3LCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAxNiwgICAgMTcsICAg
IDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLAorICAgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgMjUsICAgMTc3LCAgICAgMCwgICAgMjcsICAgIDI4LCAgICA4Nywg
ICAgMjksCisgICAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgIDAsICAgICAwLCAgICA5
MiwgICAgOTMsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NCwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDAs
CisgICAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICA5NSwgICAg
OTYsICAgICAwLCAgICA5NywKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwg
ICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LAorICAgICAgMTgsICAgIDE5LCAgICAy
MCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwgICAgIDIsICAg
ICAzLCAgICAgNCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsCisgICAgICAxNywg
ICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAxMjksICAgICAwLCAg
ICAgMCwKKyAgICAgICAwLCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAw
LCAgICAyOSwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA2OSwgICAgIDAsCisgICAgICAgMCwgICAgIDEs
ICAgICAyLCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwK
KyAgICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAxOTYsICAgIDExLAorICAgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIDE2LCAg
ICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsCisgICAgICAyMiwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywKKyAgICAg
IDI4LCAgICAgMCwgICAgMjksICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICA4LAorICAgICAgIDksICAgIDEwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAx
NCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAg
ICAyMiwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsICAg
ICAwLAorICAgICAgMjcsICAgIDI4LCAgIDIyOSwgICAgMjksICAgICAwLCAgICAgMCwgICAgIDAs
ICAgMjMwLCAgICAgMSwgICAgIDIsCisgICAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAg
IDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAor
ICAgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIy
LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
ICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAyOSwKKyAgICAgICAyLCAgICAgMywgICAgIDQs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAgICAgOSwgICAgMTAsICAgICAwLAorICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDExLCAgICAx
MiwgICAgMTMsCisgICAgICAxNCwgICAgMTUsICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAg
ICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwKKyAgICAgICA4LCAgICAgOSwgICAgMTAsICAgICAw
LCAgICAyNSwgICAgMjYsICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLAorICAgICAgMjksICAg
IDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksCisgICAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgIDI1LCAgICAyNiwKKyAgICAgICAwLCAgICAyNywgICAgMjgsICAgICAwLCAgICAy
OQorfTsKKworc3RhdGljIGNvbnN0IHl5dHlwZV9pbnQxNiB5eWNoZWNrW10gPQoreworICAgICAg
IDAsICAgIDg2LCAgICA5NCwgICAxNjIsICAgIDU4LCAgICA2OCwgICAgIDAsICAgMjUzLCAgICA3
NCwgICAgIDAsCisgICAgICA0MywgICAgNTEsICAgIDUyLCAgICAzNCwgICAgODUsICAgIDc3LCAg
ICA0MCwgICAxNTMsICAgIDgwLCAgIDI2NSwKKyAgICAgIDgwLCAgIDEwNiwgICAgODUsICAgIDY4
LCAgICAgMywgICAgNDksICAgIDcyLCAgICA1MywgICAgNTQsICAgICA4LAorICAgICAgIDksICAg
MjgwLCAgICA3MiwgICAgNzksICAgIDU1LCAgIDI4NCwgICAgNzYsICAgICAzLCAgICAzOCwgICAg
OTMsCisgICAgICA4NSwgICAgNzQsICAgICA4LCAgICAgOSwgICAgNDQsICAgMTM3LCAgICA3MSwg
ICAgOTIsICAgIDkzLCAgICA3MSwKKyAgICAgIDQ0LCAgICA1MSwgICAgNzcsICAgIDQ0LCAgICAz
MywgICAgMzQsICAgIDM1LCAgICAzNiwgICAgMzcsICAgMTI1LAorICAgICAgNzcsICAgIDYxLCAg
ICA4OCwgICAgODksICAgMTA5LCAgICA0MywgICAyMDIsICAgIDMzLCAgICAzNCwgICAgMzUsCisg
ICAgICAzNiwgICAgMzcsICAgIDcyLCAgICAzNywgICAgNzQsICAgIDcxLCAgICA3NiwgICAxNjIs
ICAgIDM3LCAgICA0MywKKyAgICAgMTcyLCAgICA3NywgICAgODIsICAgIDcyLCAgICA2MCwgICAg
NjEsICAgIDYyLCAgICA3MCwgICAgNzQsICAgIDcyLAorICAgICAxNjEsICAgMTc2LCAgICA3MSwg
ICAgNjksICAgIDcxLCAgICA4MiwgICAgNzksICAgIDg0LCAgIDE2MSwgICAgNzEsCisgICAgICA3
NywgICAgNzQsICAgMTk0LCAgICA3OSwgICAgNDMsICAgIDc3LCAgIDE4NSwgICAxODYsICAgMTg3
LCAgIDE4OCwKKyAgICAgIDc3LCAgICA4MCwgICAyMDQsICAgIDgwLCAgICA3NywgICAgNDMsICAg
MTYxLCAgICA4MCwgICAyNTQsICAgIDc3LAorICAgICAgODUsICAgIDg2LCAgICA4MCwgICAgNTUs
ICAgIDU2LCAgIDEyNSwgICAxOTcsICAgMjg2LCAgICA3NywgICAgNzgsCisgICAgIDI2NiwgICAy
MTYsICAgMjE3LCAgICA0MywgICAxOTcsICAgIDcwLCAgIDE4MSwgICAxODIsICAgMTgzLCAgIDE4
NCwKKyAgICAgMTg1LCAgIDE4NiwgICAxODcsICAgMTg4LCAgIDE4OSwgICAxOTAsICAgMTkxLCAg
IDE5MiwgICAxOTMsICAgMjg1LAorICAgICAyMjEsICAgIDcxLCAgIDE5NywgICAxNTMsICAgICA0
LCAgICAgNSwgICAgIDYsICAgIDcwLCAgIDIyMSwgICAxODksCisgICAgIDE5MCwgICAyNTMsICAg
IDMzLCAgICAzNCwgICAgMzUsICAgMTgzLCAgIDE4NCwgICAgNTcsICAgIDU5LCAgICA3MywKKyAg
ICAgIDcyLCAgICA4MCwgICAgODAsICAgMjY1LCAgICA3MCwgICAyNjAsICAgMjIxLCAgICA3MCwg
ICAgNzAsICAgIDgwLAorICAgICAgNzUsICAgMjczLCAgICA3MCwgICAgNzIsICAgIDQwLCAgICA3
MSwgICAgNzMsICAgIDE2LCAgICA3MywgICAgNzMsCisgICAgICA3MCwgICAyODMsICAgIDczLCAg
ICA3MCwgICAgNzcsICAgIDczLCAgICA0MywgICAgNzEsICAgICA0LCAgICAgNSwKKyAgICAgICA2
LCAgIDI4NiwgICAyMDIsICAgIDc1LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICA4MCwgICAgNzEs
ICAgIDc5LAorICAgICAyMTAsICAgIDgwLCAgIDE3MywgICAxOTMsICAgIDgyLCAgICAyMSwgICAg
MjIsICAgIDIzLCAgICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwg
ICAgMzAsICAgIDMxLCAgICAzMiwgICAgNTUsICAgIDYyLCAgIDE5MSwKKyAgICAgIDgyLCAgICAg
NSwgICAgMzgsICAgIDM5LCAgICA3MiwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1
LAorICAgICAgNDYsICAgIDQ3LCAgICA0OCwgICAxOTgsICAgMTkyLCAgICA1MSwgICAgNTIsICAg
MjUwLCAgIDI4NCwgICAgNTMsCisgICAgIDI1MCwgICAyNTAsICAgMjY1LCAgIDI1MywgICAyNTQs
ICAgIDQ0LCAgIDIxMCwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICA3MCwgICAyNjUsICAgMjY2LCAgICA3MywgICAgLTEsICAgIC0xLAorICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwgICAgODIsICAgIC0xLCAg
ICA4NCwgICAgLTEsCisgICAgIDI4MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAyODQsICAgMjg1
LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgICA3LCAgICAgOCwgICAgIDksICAg
IDEwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0xLAorICAgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAzNiwKKyAgICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAg
ICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4
LCAgICAtMSwgICAgLTEsICAgIDUxLCAgICA1MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICA3NCwgICAgNzUsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgODAsICAgIDgxLCAgICA4MiwgICAgLTEsICAgIDg0LCAgICAgMywgICAgIDQsCisgICAg
ICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAg
IDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAg
MjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAg
ICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICAtMSwgICAgLTEsICAgIDUx
LCAgICA1MiwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NCwK
KyAgICAgIDc1LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgODAsICAgIDgxLCAgICA4
MiwgICAgLTEsICAgIDg0LAorICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsCisgICAgICAxMywgICAgMTQsICAgIDE1
LCAgICAtMSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwKKyAgICAg
IDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAg
MzEsICAgIDMyLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwg
ICAgMzksICAgIDQwLCAgICA0MSwgICAgNDIsCisgICAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0
NiwgICAgNDcsICAgIDQ4LCAgICAtMSwgICAgLTEsICAgIDUxLCAgICA1MiwKKyAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDcwLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgNzQsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgODAsICAgIDgxLCAgICA4MiwKKyAgICAgIC0xLCAgICA4NCwg
ICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAor
ICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAtMSwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLAorICAgICAg
NDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICAt
MSwgICAgLTEsCisgICAgICA1MSwgICAgNTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcwLAorICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgNzQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
ODAsCisgICAgICA4MSwgICAgODIsICAgIC0xLCAgICA4NCwgICAgIDMsICAgICA0LCAgICAgNSwg
ICAgIDYsICAgICA3LCAgICAgOCwKKyAgICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsCisg
ICAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYs
ICAgIDM3LCAgICAzOCwKKyAgICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAg
NDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LAorICAgICAgLTEsICAgIC0xLCAgICA1MSwg
ICAgNTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwKKyAgICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDgwLCAgICA4MSwgICAgODIs
ICAgIC0xLCAgICA4NCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAtMSwgICAg
IDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAg
ICAyNCwgICAgMjUsICAgIDI2LAorICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMx
LCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsCisgICAgICAzNywgICAgMzgsICAg
IDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwKKyAg
ICAgIDQ3LCAgICA0OCwgICAgLTEsICAgIC0xLCAgICA1MSwgICAgNTIsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICA3MCwgICAgIDQsICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDEw
LCAgICAxMSwgICAgMTIsICAgIC0xLCAgICA4MSwgICAgODIsICAgIC0xLCAgICA4NCwgICAgLTEs
ICAgIC0xLAorICAgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAgICA0
MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIC0x
LAorICAgICAgLTEsICAgIDUxLCAgICA1MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIDcwLCAgICAgNCwgICAg
IDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLAorICAg
ICAgODAsICAgIDgxLCAgICA4MiwgICAgLTEsICAgIDg0LCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAyMSwgICAgMjIsCisgICAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLAorICAgICAgNDMs
ICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3LCAgICA0OCwgICAgLTEsICAgIC0xLCAgICA1MSwg
ICAgNTIsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwgICAgLTEsICAgIC0xLAorICAgICAgNzMsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MSwgICAgODIs
CisgICAgICAtMSwgICAgODQsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLAorICAgICAgMjIsICAgIDIzLCAgICAy
NCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsCisgICAg
ICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAg
IC0xLCAgICA0MSwKKyAgICAgIDQyLCAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcs
ICAgIDQ4LCAgICAtMSwgICAgLTEsICAgIDUxLAorICAgICAgNTIsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcwLCAg
ICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDEx
LCAgICAxMiwgICAgLTEsICAgIDgxLAorICAgICAgODIsICAgIC0xLCAgICA4NCwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAgMjYs
ICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwK
KyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwgICAgLTEsICAgIDQxLCAgICA0
MiwgICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIC0xLCAg
ICAtMSwgICAgNTEsICAgIDUyLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzAsICAgICA0LCAgICAgNSwgICAg
IDYsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwg
ICAgODEsICAgIDgyLCAgICAtMSwgICAgODQsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAy
MSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywKKyAgICAgIDI4LCAg
ICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICAtMSwgICAgNDQs
ICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAg
MTEsICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LAor
ICAgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIDc1
LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAg
IDQyLCAgICAtMSwgICAgNDQsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgIDAsICAgIC0xLAorICAgICAg
LTEsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAx
MCwgICAgMTEsCisgICAgICAxMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDc1LCAgICAyMSwKKyAgICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLAorICAgICAgMzIsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgsICAgIDM5LCAgICAtMSwgICAg
NDEsCisgICAgICA0MiwgICAgLTEsICAgIDQ0LCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAxMCwKKyAgICAgIDExLCAgICAxMiwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgMjEsICAgIDIyLCAg
ICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsCisg
ICAgICAzMSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgs
ICAgIDM5LCAgICAtMSwKKyAgICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICA0OCwgICAgIDMsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsICAgICA5LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIz
LCAgICAyNCwKKyAgICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAg
IDMxLCAgICAzMiwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDM2LCAgICAzNywgICAgMzgs
ICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICAtMSwgICAgNDQsCisgICAgICAgNCwgICAg
IDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAt
MSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAyMSwgICAgMjIsICAgIDIzLAorICAgICAgMjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4
LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsCisgICAgICAxMCwgICAgMTEsICAg
IDEyLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAtMSwgICAgNDEsICAgIDQyLCAgICAtMSwKKyAg
ICAgIDQ0LCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksCisgICAgICAtMSwgICAgNDEsICAgIDQyLCAg
ICAtMSwgICAgNDQKK307CisKKy8qIFlZU1RPU1tTVEFURS1OVU1dIC0tIFRoZSAoaW50ZXJuYWwg
bnVtYmVyIG9mIHRoZSkgYWNjZXNzaW5nCisgICBzeW1ib2wgb2Ygc3RhdGUgU1RBVEUtTlVNLiAg
Ki8KK3N0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlzdG9zW10gPQoreworICAgICAgIDAsICAg
ICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAg
MTEsCisgICAgICAxMiwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwg
ICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAgIDMwLCAgICAzMSwgICAgMzIsICAgIDM2LCAgICAz
NywgICAgMzgsICAgIDM5LCAgICA0MSwgICAgNDIsICAgIDQ0LAorICAgICAxMjQsICAgMTI1LCAg
IDEyNiwgICAxMjcsICAgMTI4LCAgIDEzMywgICAxMzQsICAgMTM1LCAgIDEzNiwgICAxMzcsCisg
ICAgIDEzOCwgICAxMzksICAgMTQwLCAgIDE0MSwgICAxNjgsICAgMTY5LCAgIDE3MCwgICAgMzcs
ICAgIDQzLCAgIDEzOCwKKyAgICAgIDQzLCAgICA3NCwgICAgODAsICAgMTcxLCAgICA3MSwgICAg
NzcsICAgICAzLCAgICAzMywgICAgMzQsICAgIDM1LAorICAgICAxMzAsICAgMTMxLCAgIDEzNiwg
ICAgNzcsICAgIDgwLCAgICA0MywgICAxMzcsICAgMTM5LCAgICA3MiwgICAgIDAsCisgICAgIDE2
OSwgICAxMzksICAgIDc0LCAgIDEzNywgICAxNDIsICAgMTQzLCAgICA3NCwgICAxNTQsICAgMTMw
LCAgIDEyOSwKKyAgICAgMTMyLCAgIDEzNywgICAxMzEsICAgIDQzLCAgICA3MCwgICAgNzIsICAg
IDc5LCAgICA0MywgICAgNDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICA1MSwgICAgNTIs
ICAgIDcwLCAgICA4MSwgICAgODIsICAgIDg0LCAgICA5NSwgICAgOTYsCisgICAgICA5NywgICAg
OTksICAgMTAwLCAgIDEwMSwgICAxMDIsICAgMTAzLCAgIDEwNCwgICAxMDUsICAgMTA2LCAgIDEw
NywKKyAgICAgMTA4LCAgIDEwOSwgICAxMTAsICAgMTExLCAgIDExMiwgICAxMTMsICAgMTE0LCAg
IDExNSwgICAxMTYsICAgMTE3LAorICAgICAxMTgsICAgMTE5LCAgIDEyMywgICAxMzcsICAgIDgw
LCAgIDE0MiwgICAgNDMsICAgMTQ0LCAgIDE0NSwgICAgNzUsCisgICAgIDE0MywgICAgMTMsICAg
IDE0LCAgICAxNSwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDQwLCAgICA3NCwKKyAg
ICAgIDc1LCAgICA4MCwgICAxMDYsICAgMTE5LCAgIDEyMCwgICAxMjIsICAgMTI0LCAgIDEyNSwg
ICAxMzcsICAgMTQ3LAorICAgICAxNDgsICAgMTQ5LCAgIDE1MCwgICAxNTUsICAgMTU2LCAgIDE1
NywgICAxNjAsICAgMTY3LCAgICA0MywgICAxMjksCisgICAgIDEzMiwgICAgNzIsICAgIDc5LCAg
ICA3MywgICAxMjMsICAgMTIwLCAgIDE0NiwgICAxMDYsICAgMTA2LCAgIDEyMiwKKyAgICAgIDUx
LCAgICA1MiwgICAgNzIsICAgIDc2LCAgICA3MSwgICAgNzEsICAgIDc3LCAgICAzOSwgICAxMjAs
ICAgIDcwLAorICAgICAxMDYsICAgIDg1LCAgICA4NiwgICAgODIsICAgIDg0LCAgICA1MywgICAg
NTQsICAgIDg4LCAgICA4OSwgICAgNTUsCisgICAgICA1NiwgICAgNTcsICAgIDU5LCAgICA1OCwg
ICAgOTMsICAgIDczLCAgICA3NSwgICAgNzIsICAgIDc3LCAgICA4MCwKKyAgICAgIDgwLCAgICA4
MCwgICAxNjIsICAgIDcwLCAgICA3MCwgICAgODAsICAgIDgwLCAgIDEyMiwgICAgNzAsICAgIDc1
LAorICAgICAxNTEsICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDY5LCAgICA3OSwgICAxMjEsICAg
IDc3LCAgICA4MCwgICAgNzUsCisgICAgIDE0OCwgICAgNzIsICAgIDczLCAgIDEyMywgICAxNDYs
ICAgIDczLCAgICA3MSwgICAgOTgsICAgMTIyLCAgICA0MywKKyAgICAgIDQ4LCAgIDEwMSwgICAx
MjAsICAgMTA2LCAgIDEwNiwgICAxMDgsICAgMTA4LCAgIDExMCwgICAxMTAsICAgMTEwLAorICAg
ICAxMTAsICAgMTExLCAgIDExMSwgICAxMTUsICAgMTE2LCAgIDExNywgICAxMjIsICAgMTIzLCAg
IDE0NSwgICAxNDgsCisgICAgIDE2MywgICAxMjIsICAgIDgwLCAgIDE2MSwgICAxNTUsICAgMTIw
LCAgIDEyMCwgICAxMjMsICAgIDczLCAgICA3MywKKyAgICAgIDc4LCAgICA3MywgICAgNDAsICAg
MTQ3LCAgIDE1NiwgICAxNjQsICAgIDcxLCAgIDEyMiwgICAxMzUsICAgMTU5LAorICAgICAxNTIs
ICAgIDczLCAgIDEyMCwgICAgNzAsICAgMTU5LCAgIDE2NSwgICAxNjYsICAgMTQ4LCAgIDE1OCwg
ICAgNDMsCisgICAgICA3MSwgICAgNzUsICAgMTIyLCAgICA4MCwgICAgNzEsICAgIDE2LCAgICA3
OSwgICAxNDksICAgMTUzLCAgIDE1NCwKKyAgICAgIDcxLCAgIDEyMiwgICAxNTMsICAgMTQ4LCAg
IDE0NiwgICAgODAKK307CisKKyNkZWZpbmUgeXllcnJvawkJKHl5ZXJyc3RhdHVzID0gMCkKKyNk
ZWZpbmUgeXljbGVhcmluCSh5eWNoYXIgPSBZWUVNUFRZKQorI2RlZmluZSBZWUVNUFRZCQkoLTIp
CisjZGVmaW5lIFlZRU9GCQkwCisKKyNkZWZpbmUgWVlBQ0NFUFQJZ290byB5eWFjY2VwdGxhYgor
I2RlZmluZSBZWUFCT1JUCQlnb3RvIHl5YWJvcnRsYWIKKyNkZWZpbmUgWVlFUlJPUgkJZ290byB5
eWVycm9ybGFiCisKKworLyogTGlrZSBZWUVSUk9SIGV4Y2VwdCBkbyBjYWxsIHl5ZXJyb3IuICBU
aGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3JhcmlseQorICAgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0
byB0aGUgbmV3IG1lYW5pbmcgb2YgWVlFUlJPUiwgZm9yIEdDQy4KKyAgIE9uY2UgR0NDIHZlcnNp
b24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAgKi8KKworI2RlZmlu
ZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKKworI2RlZmluZSBZWVJFQ09WRVJJTkcoKSAgKCEheXll
cnJzdGF0dXMpCisKKyNkZWZpbmUgWVlCQUNLVVAoVG9rZW4sIFZhbHVlKQkJCQkJXAorZG8JCQkJ
CQkJCVwKKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZICYmIHl5bGVuID09IDEpCQkJCVwKKyAgICB7
CQkJCQkJCQlcCisgICAgICB5eWNoYXIgPSAoVG9rZW4pOwkJCQkJCVwKKyAgICAgIHl5bHZhbCA9
IChWYWx1ZSk7CQkJCQkJXAorICAgICAgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJ
CQlcCisgICAgICBZWVBPUFNUQUNLICgxKTsJCQkJCQlcCisgICAgICBnb3RvIHl5YmFja3VwOwkJ
CQkJCVwKKyAgICB9CQkJCQkJCQlcCisgIGVsc2UJCQkJCQkJCVwKKyAgICB7CQkJCQkJCQlcCisg
ICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvcjogY2Fubm90IGJhY2sgdXAi
KSk7IFwKKyAgICAgIFlZRVJST1I7CQkJCQkJCVwKKyAgICB9CQkJCQkJCQlcCit3aGlsZSAoWVlJ
RCAoMCkpCisKKworI2RlZmluZSBZWVRFUlJPUgkxCisjZGVmaW5lIFlZRVJSQ09ERQkyNTYKKwor
CisvKiBZWUxMT0NfREVGQVVMVCAtLSBTZXQgQ1VSUkVOVCB0byBzcGFuIGZyb20gUkhTWzFdIHRv
IFJIU1tOXS4KKyAgIElmIE4gaXMgMCwgdGhlbiBzZXQgQ1VSUkVOVCB0byB0aGUgZW1wdHkgbG9j
YXRpb24gd2hpY2ggZW5kcworICAgdGhlIHByZXZpb3VzIHN5bWJvbDogUkhTWzBdIChhbHdheXMg
ZGVmaW5lZCkuICAqLworCisjZGVmaW5lIFlZUkhTTE9DKFJocywgSykgKChSaHMpW0tdKQorI2lm
bmRlZiBZWUxMT0NfREVGQVVMVAorIyBkZWZpbmUgWVlMTE9DX0RFRkFVTFQoQ3VycmVudCwgUmhz
LCBOKQkJCQlcCisgICAgZG8JCQkJCQkJCQlcCisgICAgICBpZiAoWVlJRCAoTikpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl7CQkJCQkJCQlc
CisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gWVlSSFNMT0MgKFJocywgMSkuZmlyc3RfbGlu
ZTsJXAorCSAgKEN1cnJlbnQpLmZpcnN0X2NvbHVtbiA9IFlZUkhTTE9DIChSaHMsIDEpLmZpcnN0
X2NvbHVtbjsJXAorCSAgKEN1cnJlbnQpLmxhc3RfbGluZSAgICA9IFlZUkhTTE9DIChSaHMsIE4p
Lmxhc3RfbGluZTsJCVwKKwkgIChDdXJyZW50KS5sYXN0X2NvbHVtbiAgPSBZWVJIU0xPQyAoUmhz
LCBOKS5sYXN0X2NvbHVtbjsJXAorCX0JCQkJCQkJCVwKKyAgICAgIGVsc2UJCQkJCQkJCVwKKwl7
CQkJCQkJCQlcCisJICAoQ3VycmVudCkuZmlyc3RfbGluZSAgID0gKEN1cnJlbnQpLmxhc3RfbGlu
ZSAgID0JCVwKKwkgICAgWVlSSFNMT0MgKFJocywgMCkubGFzdF9saW5lOwkJCQlcCisJICAoQ3Vy
cmVudCkuZmlyc3RfY29sdW1uID0gKEN1cnJlbnQpLmxhc3RfY29sdW1uID0JCVwKKwkgICAgWVlS
SFNMT0MgKFJocywgMCkubGFzdF9jb2x1bW47CQkJCVwKKwl9CQkJCQkJCQlcCisgICAgd2hpbGUg
KFlZSUQgKDApKQorI2VuZGlmCisKKworLyogWVlfTE9DQVRJT05fUFJJTlQgLS0gUHJpbnQgdGhl
IGxvY2F0aW9uIG9uIHRoZSBzdHJlYW0uCisgICBUaGlzIG1hY3JvIHdhcyBub3QgbWFuZGF0ZWQg
b3JpZ2luYWxseTogZGVmaW5lIG9ubHkgaWYgd2Uga25vdworICAgd2Ugd29uJ3QgYnJlYWsgdXNl
ciBjb2RlOiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuICAqLworCisjaWZu
ZGVmIFlZX0xPQ0FUSU9OX1BSSU5UCisjIGlmIFlZTFRZUEVfSVNfVFJJVklBTAorIyAgZGVmaW5l
IFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykJCQlcCisgICAgIGZwcmludGYgKEZpbGUsICIl
ZC4lZC0lZC4lZCIsCQkJXAorCSAgICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2Nv
bHVtbiwJXAorCSAgICAgIChMb2MpLmxhc3RfbGluZSwgIChMb2MpLmxhc3RfY29sdW1uKQorIyBl
bHNlCisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKSAoKHZvaWQpIDApCisj
IGVuZGlmCisjZW5kaWYKKworCisvKiBZWUxFWCAtLSBjYWxsaW5nIGB5eWxleCcgd2l0aCB0aGUg
cmlnaHQgYXJndW1lbnRzLiAgKi8KKworI2lmZGVmIFlZTEVYX1BBUkFNCisjIGRlZmluZSBZWUxF
WCB5eWxleCAoJnl5bHZhbCwgWVlMRVhfUEFSQU0pCisjZWxzZQorIyBkZWZpbmUgWVlMRVggeXls
ZXggKCZ5eWx2YWwpCisjZW5kaWYKKworLyogRW5hYmxlIGRlYnVnZ2luZyBpZiByZXF1ZXN0ZWQu
ICAqLworI2lmIFlZREVCVUcKKworIyBpZm5kZWYgWVlGUFJJTlRGCisjICBpbmNsdWRlIDxzdGRp
by5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICBkZWZpbmUgWVlGUFJJ
TlRGIGZwcmludGYKKyMgZW5kaWYKKworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCQkJXAorZG8g
ewkJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQlcCisgICAgWVlGUFJJTlRGIEFyZ3M7CQkJCVwK
K30gd2hpbGUgKFlZSUQgKDApKQorCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0bGUsIFR5
cGUsIFZhbHVlLCBMb2NhdGlvbikJCQkgIFwKK2RvIHsJCQkJCQkJCQkgIFwKKyAgaWYgKHl5ZGVi
dWcpCQkJCQkJCQkgIFwKKyAgICB7CQkJCQkJCQkJICBcCisgICAgICBZWUZQUklOVEYgKHN0ZGVy
ciwgIiVzICIsIFRpdGxlKTsJCQkJCSAgXAorICAgICAgeXlfc3ltYm9sX3ByaW50IChzdGRlcnIs
CQkJCQkJICBcCisJCSAgVHlwZSwgVmFsdWUsIGNvbnRleHQpOyBcCisgICAgICBZWUZQUklOVEYg
KHN0ZGVyciwgIlxuIik7CQkJCQkJICBcCisgICAgfQkJCQkJCQkJCSAgXAorfSB3aGlsZSAoWVlJ
RCAoMCkpCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUHJpbnQg
dGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0qLworCisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVk
IF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQg
X01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ZhbHVlX3ByaW50IChGSUxFICp5eW91
dHB1dCwgaW50IHl5dHlwZSwgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVwLCBUUGFyc2VD
b250ZXh0KiBjb250ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJp
bnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIEZJTEUgKnl5b3V0
cHV0OworICAgIGludCB5eXR5cGU7CisgICAgWVlTVFlQRSBjb25zdCAqIGNvbnN0IHl5dmFsdWVw
OworICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaWYgKCF5eXZhbHVl
cCkKKyAgICByZXR1cm47CisgIFlZVVNFIChjb250ZXh0KTsKKyMgaWZkZWYgWVlQUklOVAorICBp
ZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZUFJJTlQgKHl5b3V0cHV0LCB5eXRva251bVt5
eXR5cGVdLCAqeXl2YWx1ZXApOworIyBlbHNlCisgIFlZVVNFICh5eW91dHB1dCk7CisjIGVuZGlm
CisgIHN3aXRjaCAoeXl0eXBlKQorICAgIHsKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAg
fQorfQorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IFByaW50IHRo
aXMgc3ltYm9sIG9uIFlZT1VUUFVULiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBc
CisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRp
YyB2b2lkCit5eV9zeW1ib2xfcHJpbnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNU
WVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXAsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCisjZWxz
ZQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1
ZXAsIGNvbnRleHQpCisgICAgRklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZ
WVNUWVBFIGNvbnN0ICogY29uc3QgeXl2YWx1ZXA7CisgICAgVFBhcnNlQ29udGV4dCogY29udGV4
dDsKKyNlbmRpZgoreworICBpZiAoeXl0eXBlIDwgWVlOVE9LRU5TKQorICAgIFlZRlBSSU5URiAo
eXlvdXRwdXQsICJ0b2tlbiAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKKyAgZWxzZQorICAgIFlZ
RlBSSU5URiAoeXlvdXRwdXQsICJudGVybSAlcyAoIiwgeXl0bmFtZVt5eXR5cGVdKTsKKworICB5
eV9zeW1ib2xfdmFsdWVfcHJpbnQgKHl5b3V0cHV0LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0
KTsKKyAgWVlGUFJJTlRGICh5eW91dHB1dCwgIikiKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5
X3N0YWNrX3ByaW50IC0tIFByaW50IHRoZSBzdGF0ZSBzdGFjayBmcm9tIGl0cyBCT1RUT00gdXAg
dG8gaXRzIHwKK3wgVE9QIChpbmNsdWRlZCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNpZiAoZGVmaW5lZCBfX1NU
RENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNw
bHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlfc3RhY2tfcHJpbnQgKHl5
dHlwZV9pbnQxNiAqYm90dG9tLCB5eXR5cGVfaW50MTYgKnRvcCkKKyNlbHNlCitzdGF0aWMgdm9p
ZAoreXlfc3RhY2tfcHJpbnQgKGJvdHRvbSwgdG9wKQorICAgIHl5dHlwZV9pbnQxNiAqYm90dG9t
OworICAgIHl5dHlwZV9pbnQxNiAqdG9wOworI2VuZGlmCit7CisgIFlZRlBSSU5URiAoc3RkZXJy
LCAiU3RhY2sgbm93Iik7CisgIGZvciAoOyBib3R0b20gPD0gdG9wOyArK2JvdHRvbSkKKyAgICBZ
WUZQUklOVEYgKHN0ZGVyciwgIiAlZCIsICpib3R0b20pOworICBZWUZQUklOVEYgKHN0ZGVyciwg
IlxuIik7Cit9CisKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRvbSwgVG9wKQkJCQlcCitk
byB7CQkJCQkJCQlcCisgIGlmICh5eWRlYnVnKQkJCQkJCQlcCisgICAgeXlfc3RhY2tfcHJpbnQg
KChCb3R0b20pLCAoVG9wKSk7CQkJCVwKK30gd2hpbGUgKFlZSUQgKDApKQorCisKKy8qLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZXBvcnQgdGhh
dCB0aGUgWVlSVUxFIGlzIGdvaW5nIHRvIGJlIHJlZHVjZWQuICB8CitgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKFlZ
U1RZUEUgKnl5dnNwLCBpbnQgeXlydWxlLCBUUGFyc2VDb250ZXh0KiBjb250ZXh0KQorI2Vsc2UK
K3N0YXRpYyB2b2lkCit5eV9yZWR1Y2VfcHJpbnQgKHl5dnNwLCB5eXJ1bGUsIGNvbnRleHQpCisg
ICAgWVlTVFlQRSAqeXl2c3A7CisgICAgaW50IHl5cnVsZTsKKyAgICBUUGFyc2VDb250ZXh0KiBj
b250ZXh0OworI2VuZGlmCit7CisgIGludCB5eW5yaHMgPSB5eXIyW3l5cnVsZV07CisgIGludCB5
eWk7CisgIHVuc2lnbmVkIGxvbmcgaW50IHl5bG5vID0geXlybGluZVt5eXJ1bGVdOworICBZWUZQ
UklOVEYgKHN0ZGVyciwgIlJlZHVjaW5nIHN0YWNrIGJ5IHJ1bGUgJWQgKGxpbmUgJWx1KTpcbiIs
CisJICAgICB5eXJ1bGUgLSAxLCB5eWxubyk7CisgIC8qIFRoZSBzeW1ib2xzIGJlaW5nIHJlZHVj
ZWQuICAqLworICBmb3IgKHl5aSA9IDA7IHl5aSA8IHl5bnJoczsgeXlpKyspCisgICAgeworICAg
ICAgZnByaW50ZiAoc3RkZXJyLCAiICAgJCVkID0gIiwgeXlpICsgMSk7CisgICAgICB5eV9zeW1i
b2xfcHJpbnQgKHN0ZGVyciwgeXlyaHNbeXlwcmhzW3l5cnVsZV0gKyB5eWldLAorCQkgICAgICAg
Jih5eXZzcFsoeXlpICsgMSkgLSAoeXlucmhzKV0pCisJCSAgICAgICAJCSAgICAgICAsIGNvbnRl
eHQpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiXG4iKTsKKyAgICB9Cit9CisKKyMgZGVmaW5l
IFlZX1JFRFVDRV9QUklOVChSdWxlKQkJXAorZG8gewkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJ
XAorICAgIHl5X3JlZHVjZV9wcmludCAoeXl2c3AsIFJ1bGUsIGNvbnRleHQpOyBcCit9IHdoaWxl
IChZWUlEICgwKSkKKworLyogTm9uemVybyBtZWFucyBwcmludCBwYXJzZSB0cmFjZS4gIEl0IGlz
IGxlZnQgdW5pbml0aWFsaXplZCBzbyB0aGF0CisgICBtdWx0aXBsZSBwYXJzZXJzIGNhbiBjb2V4
aXN0LiAgKi8KK2ludCB5eWRlYnVnOworI2Vsc2UgLyogIVlZREVCVUcgKi8KKyMgZGVmaW5lIFlZ
RFBSSU5URihBcmdzKQorIyBkZWZpbmUgWVlfU1lNQk9MX1BSSU5UKFRpdGxlLCBUeXBlLCBWYWx1
ZSwgTG9jYXRpb24pCisjIGRlZmluZSBZWV9TVEFDS19QUklOVChCb3R0b20sIFRvcCkKKyMgZGVm
aW5lIFlZX1JFRFVDRV9QUklOVChSdWxlKQorI2VuZGlmIC8qICFZWURFQlVHICovCisKKworLyog
WVlJTklUREVQVEggLS0gaW5pdGlhbCBzaXplIG9mIHRoZSBwYXJzZXIncyBzdGFja3MuICAqLwor
I2lmbmRlZglZWUlOSVRERVBUSAorIyBkZWZpbmUgWVlJTklUREVQVEggMjAwCisjZW5kaWYKKwor
LyogWVlNQVhERVBUSCAtLSBtYXhpbXVtIHNpemUgdGhlIHN0YWNrcyBjYW4gZ3JvdyB0byAoZWZm
ZWN0aXZlIG9ubHkKKyAgIGlmIHRoZSBidWlsdC1pbiBzdGFjayBleHRlbnNpb24gbWV0aG9kIGlz
IHVzZWQpLgorCisgICBEbyBub3QgbWFrZSB0aGlzIHZhbHVlIHRvbyBsYXJnZTsgdGhlIHJlc3Vs
dHMgYXJlIHVuZGVmaW5lZCBpZgorICAgWVlTVEFDS19BTExPQ19NQVhJTVVNIDwgWVlTVEFDS19C
WVRFUyAoWVlNQVhERVBUSCkKKyAgIGV2YWx1YXRlZCB3aXRoIGluZmluaXRlLXByZWNpc2lvbiBp
bnRlZ2VyIGFyaXRobWV0aWMuICAqLworCisjaWZuZGVmIFlZTUFYREVQVEgKKyMgZGVmaW5lIFlZ
TUFYREVQVEggMTAwMDAKKyNlbmRpZgorCisMCisKKyNpZiBZWUVSUk9SX1ZFUkJPU0UKKworIyBp
Zm5kZWYgeXlzdHJsZW4KKyMgIGlmIGRlZmluZWQgX19HTElCQ19fICYmIGRlZmluZWQgX1NUUklO
R19ICisjICAgZGVmaW5lIHl5c3RybGVuIHN0cmxlbgorIyAgZWxzZQorLyogUmV0dXJuIHRoZSBs
ZW5ndGggb2YgWVlTVFIuICAqLworI2lmIChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19D
OTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVND
X1ZFUikKK3N0YXRpYyBZWVNJWkVfVAoreXlzdHJsZW4gKGNvbnN0IGNoYXIgKnl5c3RyKQorI2Vs
c2UKK3N0YXRpYyBZWVNJWkVfVAoreXlzdHJsZW4gKHl5c3RyKQorICAgIGNvbnN0IGNoYXIgKnl5
c3RyOworI2VuZGlmCit7CisgIFlZU0laRV9UIHl5bGVuOworICBmb3IgKHl5bGVuID0gMDsgeXlz
dHJbeXlsZW5dOyB5eWxlbisrKQorICAgIGNvbnRpbnVlOworICByZXR1cm4geXlsZW47Cit9Cisj
ICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiB5eXN0cGNweQorIyAgaWYgZGVmaW5lZCBfX0dM
SUJDX18gJiYgZGVmaW5lZCBfU1RSSU5HX0ggJiYgZGVmaW5lZCBfR05VX1NPVVJDRQorIyAgIGRl
ZmluZSB5eXN0cGNweSBzdHBjcHkKKyMgIGVsc2UKKy8qIENvcHkgWVlTUkMgdG8gWVlERVNULCBy
ZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRlcm1pbmF0aW5nICdcMCcgaW4KKyAgIFlZREVT
VC4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwK
KyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGlj
IGNoYXIgKgoreXlzdHBjcHkgKGNoYXIgKnl5ZGVzdCwgY29uc3QgY2hhciAqeXlzcmMpCisjZWxz
ZQorc3RhdGljIGNoYXIgKgoreXlzdHBjcHkgKHl5ZGVzdCwgeXlzcmMpCisgICAgY2hhciAqeXlk
ZXN0OworICAgIGNvbnN0IGNoYXIgKnl5c3JjOworI2VuZGlmCit7CisgIGNoYXIgKnl5ZCA9IHl5
ZGVzdDsKKyAgY29uc3QgY2hhciAqeXlzID0geXlzcmM7CisKKyAgd2hpbGUgKCgqeXlkKysgPSAq
eXlzKyspICE9ICdcMCcpCisgICAgY29udGludWU7CisKKyAgcmV0dXJuIHl5ZCAtIDE7Cit9Cisj
ICBlbmRpZgorIyBlbmRpZgorCisjIGlmbmRlZiB5eXRuYW1lcnIKKy8qIENvcHkgdG8gWVlSRVMg
dGhlIGNvbnRlbnRzIG9mIFlZU1RSIGFmdGVyIHN0cmlwcGluZyBhd2F5IHVubmVjZXNzYXJ5Cisg
ICBxdW90ZXMgYW5kIGJhY2tzbGFzaGVzLCBzbyB0aGF0IGl0J3Mgc3VpdGFibGUgZm9yIHl5ZXJy
b3IuICBUaGUKKyAgIGhldXJpc3RpYyBpcyB0aGF0IGRvdWJsZS1xdW90aW5nIGlzIHVubmVjZXNz
YXJ5IHVubGVzcyB0aGUgc3RyaW5nCisgICBjb250YWlucyBhbiBhcG9zdHJvcGhlLCBhIGNvbW1h
LCBvciBiYWNrc2xhc2ggKG90aGVyIHRoYW4KKyAgIGJhY2tzbGFzaC1iYWNrc2xhc2gpLiAgWVlT
VFIgaXMgdGFrZW4gZnJvbSB5eXRuYW1lLiAgSWYgWVlSRVMgaXMKKyAgIG51bGwsIGRvIG5vdCBj
b3B5OyBpbnN0ZWFkLCByZXR1cm4gdGhlIGxlbmd0aCBvZiB3aGF0IHRoZSByZXN1bHQKKyAgIHdv
dWxkIGhhdmUgYmVlbi4gICovCitzdGF0aWMgWVlTSVpFX1QKK3l5dG5hbWVyciAoY2hhciAqeXly
ZXMsIGNvbnN0IGNoYXIgKnl5c3RyKQoreworICBpZiAoKnl5c3RyID09ICciJykKKyAgICB7Cisg
ICAgICBZWVNJWkVfVCB5eW4gPSAwOworICAgICAgY2hhciBjb25zdCAqeXlwID0geXlzdHI7CisK
KyAgICAgIGZvciAoOzspCisJc3dpdGNoICgqKyt5eXApCisJICB7CisJICBjYXNlICdcJyc6CisJ
ICBjYXNlICcsJzoKKwkgICAgZ290byBkb19ub3Rfc3RyaXBfcXVvdGVzOworCisJICBjYXNlICdc
XCc6CisJICAgIGlmICgqKyt5eXAgIT0gJ1xcJykKKwkgICAgICBnb3RvIGRvX25vdF9zdHJpcF9x
dW90ZXM7CisJICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisJICBkZWZhdWx0OgorCSAgICBpZiAo
eXlyZXMpCisJICAgICAgeXlyZXNbeXluXSA9ICp5eXA7CisJICAgIHl5bisrOworCSAgICBicmVh
azsKKworCSAgY2FzZSAnIic6CisJICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0g
J1wwJzsKKwkgICAgcmV0dXJuIHl5bjsKKwkgIH0KKyAgICBkb19ub3Rfc3RyaXBfcXVvdGVzOiA7
CisgICAgfQorCisgIGlmICghIHl5cmVzKQorICAgIHJldHVybiB5eXN0cmxlbiAoeXlzdHIpOwor
CisgIHJldHVybiB5eXN0cGNweSAoeXlyZXMsIHl5c3RyKSAtIHl5cmVzOworfQorIyBlbmRpZgor
CisvKiBDb3B5IGludG8gWVlSRVNVTFQgYW4gZXJyb3IgbWVzc2FnZSBhYm91dCB0aGUgdW5leHBl
Y3RlZCB0b2tlbgorICAgWVlDSEFSIHdoaWxlIGluIHN0YXRlIFlZU1RBVEUuICBSZXR1cm4gdGhl
IG51bWJlciBvZiBieXRlcyBjb3BpZWQsCisgICBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIG51
bGwgYnl0ZS4gIElmIFlZUkVTVUxUIGlzIG51bGwsIGRvIG5vdAorICAgY29weSBhbnl0aGluZzsg
anVzdCByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB0aGF0IHdvdWxkIGJlCisgICBjb3BpZWQu
ICBBcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5bnRheCBlcnJv
ciIKKyAgIG1lc3NhZ2Ugd2lsbCBkby4gIFJldHVybiBZWVNJWkVfTUFYSU1VTSBpZiBvdmVyZmxv
dyBvY2N1cnMgZHVyaW5nCisgICBzaXplIGNhbGN1bGF0aW9uLiAgKi8KK3N0YXRpYyBZWVNJWkVf
VAoreXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwgaW50IHl5Y2hh
cikKK3sKKyAgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKworICBpZiAoISAoWVlQQUNUX05J
TkYgPCB5eW4gJiYgeXluIDw9IFlZTEFTVCkpCisgICAgcmV0dXJuIDA7CisgIGVsc2UKKyAgICB7
CisgICAgICBpbnQgeXl0eXBlID0gWVlUUkFOU0xBVEUgKHl5Y2hhcik7CisgICAgICBZWVNJWkVf
VCB5eXNpemUwID0geXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5dHlwZV0pOworICAgICAgWVlTSVpF
X1QgeXlzaXplID0geXlzaXplMDsKKyAgICAgIFlZU0laRV9UIHl5c2l6ZTE7CisgICAgICBpbnQg
eXlzaXplX292ZXJmbG93ID0gMDsKKyAgICAgIGVudW0geyBZWUVSUk9SX1ZFUkJPU0VfQVJHU19N
QVhJTVVNID0gNSB9OworICAgICAgY2hhciBjb25zdCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FS
R1NfTUFYSU1VTV07CisgICAgICBpbnQgeXl4OworCisjIGlmIDAKKyAgICAgIC8qIFRoaXMgaXMg
c28geGdldHRleHQgc2VlcyB0aGUgdHJhbnNsYXRhYmxlIGZvcm1hdHMgdGhhdCBhcmUKKwkgY29u
c3RydWN0ZWQgb24gdGhlIGZseS4gICovCisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBl
Y3RlZCAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVj
dGluZyAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVj
dGluZyAlcyBvciAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMs
IGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOworICAgICAgWVlfKCJzeW50YXggZXJyb3IsIHVu
ZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyBvciAlcyIpOworIyBlbmRpZgor
ICAgICAgY2hhciAqeXlmbXQ7CisgICAgICBjaGFyIGNvbnN0ICp5eWY7CisgICAgICBzdGF0aWMg
Y2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMi
OworICAgICAgc3RhdGljIGNoYXIgY29uc3QgeXlleHBlY3RpbmdbXSA9ICIsIGV4cGVjdGluZyAl
cyI7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eW9yW10gPSAiIG9yICVzIjsKKyAgICAgIGNo
YXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZAorCQkgICAgKyBzaXplb2YgeXlleHBlY3Rp
bmcgLSAxCisJCSAgICArICgoWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSAtIDIpCisJCSAg
ICAgICAqIChzaXplb2YgeXlvciAtIDEpKV07CisgICAgICBjaGFyIGNvbnN0ICp5eXByZWZpeCA9
IHl5ZXhwZWN0aW5nOworCisgICAgICAvKiBTdGFydCBZWVggYXQgLVlZTiBpZiBuZWdhdGl2ZSB0
byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCisJIFlZQ0hFQ0suICAqLworICAgICAgaW50IHl5
eGJlZ2luID0geXluIDwgMCA/IC15eW4gOiAwOworCisgICAgICAvKiBTdGF5IHdpdGhpbiBib3Vu
ZHMgb2YgYm90aCB5eWNoZWNrIGFuZCB5eXRuYW1lLiAgKi8KKyAgICAgIGludCB5eWNoZWNrbGlt
ID0gWVlMQVNUIC0geXluICsgMTsKKyAgICAgIGludCB5eXhlbmQgPSB5eWNoZWNrbGltIDwgWVlO
VE9LRU5TID8geXljaGVja2xpbSA6IFlZTlRPS0VOUzsKKyAgICAgIGludCB5eWNvdW50ID0gMTsK
KworICAgICAgeXlhcmdbMF0gPSB5eXRuYW1lW3l5dHlwZV07CisgICAgICB5eWZtdCA9IHl5c3Rw
Y3B5ICh5eWZvcm1hdCwgeXl1bmV4cGVjdGVkKTsKKworICAgICAgZm9yICh5eXggPSB5eXhiZWdp
bjsgeXl4IDwgeXl4ZW5kOyArK3l5eCkKKwlpZiAoeXljaGVja1t5eXggKyB5eW5dID09IHl5eCAm
JiB5eXggIT0gWVlURVJST1IpCisJICB7CisJICAgIGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVS
Qk9TRV9BUkdTX01BWElNVU0pCisJICAgICAgeworCQl5eWNvdW50ID0gMTsKKwkJeXlzaXplID0g
eXlzaXplMDsKKwkJeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBlY3RlZCAtIDFdID0gJ1wwJzsKKwkJ
YnJlYWs7CisJICAgICAgfQorCSAgICB5eWFyZ1t5eWNvdW50KytdID0geXl0bmFtZVt5eXhdOwor
CSAgICB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRuYW1lW3l5eF0pOworCSAg
ICB5eXNpemVfb3ZlcmZsb3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOworCSAgICB5eXNpemUgPSB5
eXNpemUxOworCSAgICB5eWZtdCA9IHl5c3RwY3B5ICh5eWZtdCwgeXlwcmVmaXgpOworCSAgICB5
eXByZWZpeCA9IHl5b3I7CisJICB9CisKKyAgICAgIHl5ZiA9IFlZXyh5eWZvcm1hdCk7CisgICAg
ICB5eXNpemUxID0geXlzaXplICsgeXlzdHJsZW4gKHl5Zik7CisgICAgICB5eXNpemVfb3ZlcmZs
b3cgfD0gKHl5c2l6ZTEgPCB5eXNpemUpOworICAgICAgeXlzaXplID0geXlzaXplMTsKKworICAg
ICAgaWYgKHl5c2l6ZV9vdmVyZmxvdykKKwlyZXR1cm4gWVlTSVpFX01BWElNVU07CisKKyAgICAg
IGlmICh5eXJlc3VsdCkKKwl7CisJICAvKiBBdm9pZCBzcHJpbnRmLCBhcyB0aGF0IGluZnJpbmdl
cyBvbiB0aGUgdXNlcidzIG5hbWUgc3BhY2UuCisJICAgICBEb24ndCBoYXZlIHVuZGVmaW5lZCBi
ZWhhdmlvciBldmVuIGlmIHRoZSB0cmFuc2xhdGlvbgorCSAgICAgcHJvZHVjZWQgYSBzdHJpbmcg
d2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLiAgKi8KKwkgIGNoYXIgKnl5cCA9IHl5cmVz
dWx0OworCSAgaW50IHl5aSA9IDA7CisJICB3aGlsZSAoKCp5eXAgPSAqeXlmKSAhPSAnXDAnKQor
CSAgICB7CisJICAgICAgaWYgKCp5eXAgPT0gJyUnICYmIHl5ZlsxXSA9PSAncycgJiYgeXlpIDwg
eXljb3VudCkKKwkJeworCQkgIHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytdKTsK
KwkJICB5eWYgKz0gMjsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIHl5cCsrOworCQkgIHl5
ZisrOworCQl9CisJICAgIH0KKwl9CisgICAgICByZXR1cm4geXlzaXplOworICAgIH0KK30KKyNl
bmRpZiAvKiBZWUVSUk9SX1ZFUkJPU0UgKi8KKwwKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgUmVsZWFzZSB0aGUgbWVtb3J5IGFzc29jaWF0
ZWQgdG8gdGhpcyBzeW1ib2wuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworCisvKkFSR1NVU0VEKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8
fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8
IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMgdm9pZAoreXlkZXN0cnVjdCAoY29uc3QgY2hhciAq
eXltc2csIGludCB5eXR5cGUsIFlZU1RZUEUgKnl5dmFsdWVwLCBUUGFyc2VDb250ZXh0KiBjb250
ZXh0KQorI2Vsc2UKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0ICh5eW1zZywgeXl0eXBlLCB5eXZh
bHVlcCwgY29udGV4dCkKKyAgICBjb25zdCBjaGFyICp5eW1zZzsKKyAgICBpbnQgeXl0eXBlOwor
ICAgIFlZU1RZUEUgKnl5dmFsdWVwOworICAgIFRQYXJzZUNvbnRleHQqIGNvbnRleHQ7CisjZW5k
aWYKK3sKKyAgWVlVU0UgKHl5dmFsdWVwKTsKKyAgWVlVU0UgKGNvbnRleHQpOworCisgIGlmICgh
eXltc2cpCisgICAgeXltc2cgPSAiRGVsZXRpbmciOworICBZWV9TWU1CT0xfUFJJTlQgKHl5bXNn
LCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCk7CisKKyAgc3dpdGNoICh5eXR5cGUpCisg
ICAgeworCisgICAgICBkZWZhdWx0OgorCWJyZWFrOworICAgIH0KK30KKwwKKworLyogUHJldmVu
dCB3YXJuaW5ncyBmcm9tIC1XbWlzc2luZy1wcm90b3R5cGVzLiAgKi8KKworI2lmZGVmIFlZUEFS
U0VfUEFSQU0KKyNpZiBkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKK2lu
dCB5eXBhcnNlICh2b2lkICpZWVBBUlNFX1BBUkFNKTsKKyNlbHNlCitpbnQgeXlwYXJzZSAoKTsK
KyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICovCisjaWYgZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCitpbnQgeXlwYXJzZSAoVFBhcnNlQ29udGV4dCogY29u
dGV4dCk7CisjZWxzZQoraW50IHl5cGFyc2UgKCk7CisjZW5kaWYKKyNlbmRpZiAvKiAhIFlZUEFS
U0VfUEFSQU0gKi8KKworCisKKworCisKKy8qLS0tLS0tLS0tLS4KK3wgeXlwYXJzZS4gIHwKK2At
LS0tLS0tLS0tKi8KKworI2lmZGVmIFlZUEFSU0VfUEFSQU0KKyNpZiAoZGVmaW5lZCBfX1NURENf
XyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVz
IHx8IGRlZmluZWQgX01TQ19WRVIpCitpbnQKK3l5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0p
CisjZWxzZQoraW50Cit5eXBhcnNlIChZWVBBUlNFX1BBUkFNKQorICAgIHZvaWQgKllZUEFSU0Vf
UEFSQU07CisjZW5kaWYKKyNlbHNlIC8qICEgWVlQQVJTRV9QQVJBTSAqLworI2lmIChkZWZpbmVk
IF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19j
cGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJzZSAoVFBhcnNlQ29udGV4
dCogY29udGV4dCkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKGNvbnRleHQpCisgICAgVFBhcnNlQ29u
dGV4dCogY29udGV4dDsKKyNlbmRpZgorI2VuZGlmCit7CisgIC8qIFRoZSBsb29rLWFoZWFkIHN5
bWJvbC4gICovCitpbnQgeXljaGFyOworCisvKiBUaGUgc2VtYW50aWMgdmFsdWUgb2YgdGhlIGxv
b2stYWhlYWQgc3ltYm9sLiAgKi8KK1lZU1RZUEUgeXlsdmFsOworCisvKiBOdW1iZXIgb2Ygc3lu
dGF4IGVycm9ycyBzbyBmYXIuICAqLworaW50IHl5bmVycnM7CisKKyAgaW50IHl5c3RhdGU7Cisg
IGludCB5eW47CisgIGludCB5eXJlc3VsdDsKKyAgLyogTnVtYmVyIG9mIHRva2VucyB0byBzaGlm
dCBiZWZvcmUgZXJyb3IgbWVzc2FnZXMgZW5hYmxlZC4gICovCisgIGludCB5eWVycnN0YXR1czsK
KyAgLyogTG9vay1haGVhZCB0b2tlbiBhcyBhbiBpbnRlcm5hbCAodHJhbnNsYXRlZCkgdG9rZW4g
bnVtYmVyLiAgKi8KKyAgaW50IHl5dG9rZW4gPSAwOworI2lmIFlZRVJST1JfVkVSQk9TRQorICAv
KiBCdWZmZXIgZm9yIGVycm9yIG1lc3NhZ2VzLCBhbmQgaXRzIGFsbG9jYXRlZCBzaXplLiAgKi8K
KyAgY2hhciB5eW1zZ2J1ZlsxMjhdOworICBjaGFyICp5eW1zZyA9IHl5bXNnYnVmOworICBZWVNJ
WkVfVCB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKyNlbmRpZgorCisgIC8qIFRocmVl
IHN0YWNrcyBhbmQgdGhlaXIgdG9vbHM6CisgICAgIGB5eXNzJzogcmVsYXRlZCB0byBzdGF0ZXMs
CisgICAgIGB5eXZzJzogcmVsYXRlZCB0byBzZW1hbnRpYyB2YWx1ZXMsCisgICAgIGB5eWxzJzog
cmVsYXRlZCB0byBsb2NhdGlvbnMuCisKKyAgICAgUmVmZXIgdG8gdGhlIHN0YWNrcyB0aHJ1IHNl
cGFyYXRlIHBvaW50ZXJzLCB0byBhbGxvdyB5eW92ZXJmbG93CisgICAgIHRvIHJlYWxsb2NhdGUg
dGhlbSBlbHNld2hlcmUuICAqLworCisgIC8qIFRoZSBzdGF0ZSBzdGFjay4gICovCisgIHl5dHlw
ZV9pbnQxNiB5eXNzYVtZWUlOSVRERVBUSF07CisgIHl5dHlwZV9pbnQxNiAqeXlzcyA9IHl5c3Nh
OworICB5eXR5cGVfaW50MTYgKnl5c3NwOworCisgIC8qIFRoZSBzZW1hbnRpYyB2YWx1ZSBzdGFj
ay4gICovCisgIFlZU1RZUEUgeXl2c2FbWVlJTklUREVQVEhdOworICBZWVNUWVBFICp5eXZzID0g
eXl2c2E7CisgIFlZU1RZUEUgKnl5dnNwOworCisKKworI2RlZmluZSBZWVBPUFNUQUNLKE4pICAg
KHl5dnNwIC09IChOKSwgeXlzc3AgLT0gKE4pKQorCisgIFlZU0laRV9UIHl5c3RhY2tzaXplID0g
WVlJTklUREVQVEg7CisKKyAgLyogVGhlIHZhcmlhYmxlcyB1c2VkIHRvIHJldHVybiBzZW1hbnRp
YyB2YWx1ZSBhbmQgbG9jYXRpb24gZnJvbSB0aGUKKyAgICAgYWN0aW9uIHJvdXRpbmVzLiAgKi8K
KyAgWVlTVFlQRSB5eXZhbDsKKworCisgIC8qIFRoZSBudW1iZXIgb2Ygc3ltYm9scyBvbiB0aGUg
UkhTIG9mIHRoZSByZWR1Y2VkIHJ1bGUuCisgICAgIEtlZXAgdG8gemVybyB3aGVuIG5vIHN5bWJv
bCBzaG91bGQgYmUgcG9wcGVkLiAgKi8KKyAgaW50IHl5bGVuID0gMDsKKworICBZWURQUklOVEYg
KChzdGRlcnIsICJTdGFydGluZyBwYXJzZVxuIikpOworCisgIHl5c3RhdGUgPSAwOworICB5eWVy
cnN0YXR1cyA9IDA7CisgIHl5bmVycnMgPSAwOworICB5eWNoYXIgPSBZWUVNUFRZOwkJLyogQ2F1
c2UgYSB0b2tlbiB0byBiZSByZWFkLiAgKi8KKworICAvKiBJbml0aWFsaXplIHN0YWNrIHBvaW50
ZXJzLgorICAgICBXYXN0ZSBvbmUgZWxlbWVudCBvZiB2YWx1ZSBhbmQgbG9jYXRpb24gc3RhY2sK
KyAgICAgc28gdGhhdCB0aGV5IHN0YXkgb24gdGhlIHNhbWUgbGV2ZWwgYXMgdGhlIHN0YXRlIHN0
YWNrLgorICAgICBUaGUgd2FzdGVkIGVsZW1lbnRzIGFyZSBuZXZlciBpbml0aWFsaXplZC4gICov
CisKKyAgeXlzc3AgPSB5eXNzOworICB5eXZzcCA9IHl5dnM7CisKKyAgZ290byB5eXNldHN0YXRl
OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS4KK3wgeXluZXdzdGF0ZSAtLSBQdXNoIGEgbmV3IHN0YXRlLCB3aGljaCBpcyBm
b3VuZCBpbiB5eXN0YXRlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgeXluZXdzdGF0ZToKKyAgLyogSW4gYWxsIGNh
c2VzLCB3aGVuIHlvdSBnZXQgaGVyZSwgdGhlIHZhbHVlIGFuZCBsb2NhdGlvbiBzdGFja3MKKyAg
ICAgaGF2ZSBqdXN0IGJlZW4gcHVzaGVkLiAgU28gcHVzaGluZyBhIHN0YXRlIGhlcmUgZXZlbnMg
dGhlIHN0YWNrcy4gICovCisgIHl5c3NwKys7CisKKyB5eXNldHN0YXRlOgorICAqeXlzc3AgPSB5
eXN0YXRlOworCisgIGlmICh5eXNzICsgeXlzdGFja3NpemUgLSAxIDw9IHl5c3NwKQorICAgIHsK
KyAgICAgIC8qIEdldCB0aGUgY3VycmVudCB1c2VkIHNpemUgb2YgdGhlIHRocmVlIHN0YWNrcywg
aW4gZWxlbWVudHMuICAqLworICAgICAgWVlTSVpFX1QgeXlzaXplID0geXlzc3AgLSB5eXNzICsg
MTsKKworI2lmZGVmIHl5b3ZlcmZsb3cKKyAgICAgIHsKKwkvKiBHaXZlIHVzZXIgYSBjaGFuY2Ug
dG8gcmVhbGxvY2F0ZSB0aGUgc3RhY2suICBVc2UgY29waWVzIG9mCisJICAgdGhlc2Ugc28gdGhh
dCB0aGUgJidzIGRvbid0IGZvcmNlIHRoZSByZWFsIG9uZXMgaW50bworCSAgIG1lbW9yeS4gICov
CisJWVlTVFlQRSAqeXl2czEgPSB5eXZzOworCXl5dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOwor
CisKKwkvKiBFYWNoIHN0YWNrIHBvaW50ZXIgYWRkcmVzcyBpcyBmb2xsb3dlZCBieSB0aGUgc2l6
ZSBvZiB0aGUKKwkgICBkYXRhIGluIHVzZSBpbiB0aGF0IHN0YWNrLCBpbiBieXRlcy4gIFRoaXMg
dXNlZCB0byBiZSBhCisJICAgY29uZGl0aW9uYWwgYXJvdW5kIGp1c3QgdGhlIHR3byBleHRyYSBh
cmdzLCBidXQgdGhhdCBtaWdodAorCSAgIGJlIHVuZGVmaW5lZCBpZiB5eW92ZXJmbG93IGlzIGEg
bWFjcm8uICAqLworCXl5b3ZlcmZsb3cgKFlZXygibWVtb3J5IGV4aGF1c3RlZCIpLAorCQkgICAg
Jnl5c3MxLCB5eXNpemUgKiBzaXplb2YgKCp5eXNzcCksCisJCSAgICAmeXl2czEsIHl5c2l6ZSAq
IHNpemVvZiAoKnl5dnNwKSwKKworCQkgICAgJnl5c3RhY2tzaXplKTsKKworCXl5c3MgPSB5eXNz
MTsKKwl5eXZzID0geXl2czE7CisgICAgICB9CisjZWxzZSAvKiBubyB5eW92ZXJmbG93ICovCisj
IGlmbmRlZiBZWVNUQUNLX1JFTE9DQVRFCisgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworIyBl
bHNlCisgICAgICAvKiBFeHRlbmQgdGhlIHN0YWNrIG91ciBvd24gd2F5LiAgKi8KKyAgICAgIGlm
IChZWU1BWERFUFRIIDw9IHl5c3RhY2tzaXplKQorCWdvdG8geXlleGhhdXN0ZWRsYWI7CisgICAg
ICB5eXN0YWNrc2l6ZSAqPSAyOworICAgICAgaWYgKFlZTUFYREVQVEggPCB5eXN0YWNrc2l6ZSkK
Kwl5eXN0YWNrc2l6ZSA9IFlZTUFYREVQVEg7CisKKyAgICAgIHsKKwl5eXR5cGVfaW50MTYgKnl5
c3MxID0geXlzczsKKwl1bmlvbiB5eWFsbG9jICp5eXB0ciA9CisJICAodW5pb24geXlhbGxvYyAq
KSBZWVNUQUNLX0FMTE9DIChZWVNUQUNLX0JZVEVTICh5eXN0YWNrc2l6ZSkpOworCWlmICghIHl5
cHRyKQorCSAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwlZWVNUQUNLX1JFTE9DQVRFICh5eXNzKTsK
KwlZWVNUQUNLX1JFTE9DQVRFICh5eXZzKTsKKworIyAgdW5kZWYgWVlTVEFDS19SRUxPQ0FURQor
CWlmICh5eXNzMSAhPSB5eXNzYSkKKwkgIFlZU1RBQ0tfRlJFRSAoeXlzczEpOworICAgICAgfQor
IyBlbmRpZgorI2VuZGlmIC8qIG5vIHl5b3ZlcmZsb3cgKi8KKworICAgICAgeXlzc3AgPSB5eXNz
ICsgeXlzaXplIC0gMTsKKyAgICAgIHl5dnNwID0geXl2cyArIHl5c2l6ZSAtIDE7CisKKworICAg
ICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiU3RhY2sgc2l6ZSBpbmNyZWFzZWQgdG8gJWx1XG4iLAor
CQkgICh1bnNpZ25lZCBsb25nIGludCkgeXlzdGFja3NpemUpKTsKKworICAgICAgaWYgKHl5c3Mg
KyB5eXN0YWNrc2l6ZSAtIDEgPD0geXlzc3ApCisJWVlBQk9SVDsKKyAgICB9CisKKyAgWVlEUFJJ
TlRGICgoc3RkZXJyLCAiRW50ZXJpbmcgc3RhdGUgJWRcbiIsIHl5c3RhdGUpKTsKKworICBnb3Rv
IHl5YmFja3VwOworCisvKi0tLS0tLS0tLS0tLgorfCB5eWJhY2t1cC4gIHwKK2AtLS0tLS0tLS0t
LSovCit5eWJhY2t1cDoKKworICAvKiBEbyBhcHByb3ByaWF0ZSBwcm9jZXNzaW5nIGdpdmVuIHRo
ZSBjdXJyZW50IHN0YXRlLiAgUmVhZCBhCisgICAgIGxvb2stYWhlYWQgdG9rZW4gaWYgd2UgbmVl
ZCBvbmUgYW5kIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIEZpcnN0IHRyeSB0
byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJlZmVyZW5jZSB0byBsb29rLWFoZWFkIHRva2Vu
LiAgKi8KKyAgeXluID0geXlwYWN0W3l5c3RhdGVdOworICBpZiAoeXluID09IFlZUEFDVF9OSU5G
KQorICAgIGdvdG8geXlkZWZhdWx0OworCisgIC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rLWFo
ZWFkIHRva2VuIGlmIGRvbid0IGFscmVhZHkgaGF2ZSBvbmUuICAqLworCisgIC8qIFlZQ0hBUiBp
cyBlaXRoZXIgWVlFTVBUWSBvciBZWUVPRiBvciBhIHZhbGlkIGxvb2stYWhlYWQgc3ltYm9sLiAg
Ki8KKyAgaWYgKHl5Y2hhciA9PSBZWUVNUFRZKQorICAgIHsKKyAgICAgIFlZRFBSSU5URiAoKHN0
ZGVyciwgIlJlYWRpbmcgYSB0b2tlbjogIikpOworICAgICAgeXljaGFyID0gWVlMRVg7CisgICAg
fQorCisgIGlmICh5eWNoYXIgPD0gWVlFT0YpCisgICAgeworICAgICAgeXljaGFyID0geXl0b2tl
biA9IFlZRU9GOworICAgICAgWVlEUFJJTlRGICgoc3RkZXJyLCAiTm93IGF0IGVuZCBvZiBpbnB1
dC5cbiIpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB5eXRva2VuID0gWVlUUkFOU0xB
VEUgKHl5Y2hhcik7CisgICAgICBZWV9TWU1CT0xfUFJJTlQgKCJOZXh0IHRva2VuIGlzIiwgeXl0
b2tlbiwgJnl5bHZhbCwgJnl5bGxvYyk7CisgICAgfQorCisgIC8qIElmIHRoZSBwcm9wZXIgYWN0
aW9uIG9uIHNlZWluZyB0b2tlbiBZWVRPS0VOIGlzIHRvIHJlZHVjZSBvciB0bworICAgICBkZXRl
Y3QgYW4gZXJyb3IsIHRha2UgdGhhdCBhY3Rpb24uICAqLworICB5eW4gKz0geXl0b2tlbjsKKyAg
aWYgKHl5biA8IDAgfHwgWVlMQVNUIDwgeXluIHx8IHl5Y2hlY2tbeXluXSAhPSB5eXRva2VuKQor
ICAgIGdvdG8geXlkZWZhdWx0OworICB5eW4gPSB5eXRhYmxlW3l5bl07CisgIGlmICh5eW4gPD0g
MCkKKyAgICB7CisgICAgICBpZiAoeXluID09IDAgfHwgeXluID09IFlZVEFCTEVfTklORikKKwln
b3RvIHl5ZXJybGFiOworICAgICAgeXluID0gLXl5bjsKKyAgICAgIGdvdG8geXlyZWR1Y2U7Cisg
ICAgfQorCisgIGlmICh5eW4gPT0gWVlGSU5BTCkKKyAgICBZWUFDQ0VQVDsKKworICAvKiBDb3Vu
dCB0b2tlbnMgc2hpZnRlZCBzaW5jZSBlcnJvcjsgYWZ0ZXIgdGhyZWUsIHR1cm4gb2ZmIGVycm9y
CisgICAgIHN0YXR1cy4gICovCisgIGlmICh5eWVycnN0YXR1cykKKyAgICB5eWVycnN0YXR1cy0t
OworCisgIC8qIFNoaWZ0IHRoZSBsb29rLWFoZWFkIHRva2VuLiAgKi8KKyAgWVlfU1lNQk9MX1BS
SU5UICgiU2hpZnRpbmciLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKworICAvKiBEaXNj
YXJkIHRoZSBzaGlmdGVkIHRva2VuIHVubGVzcyBpdCBpcyBlb2YuICAqLworICBpZiAoeXljaGFy
ICE9IFlZRU9GKQorICAgIHl5Y2hhciA9IFlZRU1QVFk7CisKKyAgeXlzdGF0ZSA9IHl5bjsKKyAg
KisreXl2c3AgPSB5eWx2YWw7CisKKyAgZ290byB5eW5ld3N0YXRlOworCisKKy8qLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5
ZGVmYXVsdCAtLSBkbyB0aGUgZGVmYXVsdCBhY3Rpb24gZm9yIHRoZSBjdXJyZW50IHN0YXRlLiAg
fAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KK3l5ZGVmYXVsdDoKKyAgeXluID0geXlkZWZhY3RbeXlzdGF0ZV07CisgIGlmICh5
eW4gPT0gMCkKKyAgICBnb3RvIHl5ZXJybGFiOworICBnb3RvIHl5cmVkdWNlOworCisKKy8qLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5cmVkdWNlIC0tIERvIGEgcmVkdWN0aW9u
LiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5cmVkdWNlOgorICAvKiB5
eW4gaXMgdGhlIG51bWJlciBvZiBhIHJ1bGUgdG8gcmVkdWNlIHdpdGguICAqLworICB5eWxlbiA9
IHl5cjJbeXluXTsKKworICAvKiBJZiBZWUxFTiBpcyBub256ZXJvLCBpbXBsZW1lbnQgdGhlIGRl
ZmF1bHQgdmFsdWUgb2YgdGhlIGFjdGlvbjoKKyAgICAgYCQkID0gJDEnLgorCisgICAgIE90aGVy
d2lzZSwgdGhlIGZvbGxvd2luZyBsaW5lIHNldHMgWVlWQUwgdG8gZ2FyYmFnZS4KKyAgICAgVGhp
cyBiZWhhdmlvciBpcyB1bmRvY3VtZW50ZWQgYW5kIEJpc29uCisgICAgIHVzZXJzIHNob3VsZCBu
b3QgcmVseSB1cG9uIGl0LiAgQXNzaWduaW5nIHRvIFlZVkFMCisgICAgIHVuY29uZGl0aW9uYWxs
eSBtYWtlcyB0aGUgcGFyc2VyIGEgYml0IHNtYWxsZXIsIGFuZCBpdCBhdm9pZHMgYQorICAgICBH
Q0Mgd2FybmluZyB0aGF0IFlZVkFMIG1heSBiZSB1c2VkIHVuaW5pdGlhbGl6ZWQuICAqLworICB5
eXZhbCA9IHl5dnNwWzEteXlsZW5dOworCisKKyAgWVlfUkVEVUNFX1BSSU5UICh5eW4pOworICBz
d2l0Y2ggKHl5bikKKyAgICB7CisgICAgICAgIGNhc2UgMjoKKworICAgIHsKKyAgICAgICAgLy8g
VGhlIHN5bWJvbCB0YWJsZSBzZWFyY2ggd2FzIGRvbmUgaW4gdGhlIGxleGljYWwgcGhhc2UKKyAg
ICAgICAgY29uc3QgVFN5bWJvbCogc3ltYm9sID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zeW1i
b2w7CisgICAgICAgIGNvbnN0IFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgIGlmIChzeW1i
b2wgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCk7CisgICAgICAg
ICAgICBUVmFyaWFibGUqIGZha2VWYXJpYWJsZSA9IG5ldyBUVmFyaWFibGUoKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOworICAgICAgICAgICAgY29udGV4dC0+c3ltYm9sVGFi
bGUuaW5zZXJ0KCpmYWtlVmFyaWFibGUpOworICAgICAgICAgICAgdmFyaWFibGUgPSBmYWtlVmFy
aWFibGU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBUaGlzIGlkZW50aWZpZXIg
Y2FuIG9ubHkgYmUgYSB2YXJpYWJsZSB0eXBlIHN5bWJvbAorICAgICAgICAgICAgaWYgKCEgc3lt
Ym9sLT5pc1ZhcmlhYmxlKCkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ2YXJpYWJsZSBleHBlY3RlZCIsICh5eXZzcFsoMSkg
LSAoMSldLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyaWFibGUgPSBzdGF0
aWNfY2FzdDxjb25zdCBUVmFyaWFibGUqPihzeW1ib2wpOworICAgICAgICB9CisKKyAgICAgICAg
Ly8gZG9uJ3QgZGVsZXRlICQxLnN0cmluZywgaXQncyB1c2VkIGJ5IGVycm9yIHJlY292ZXJ5LCBh
bmQgdGhlIHBvb2wKKyAgICAgICAgLy8gcG9wIHdpbGwgcmVjbGFpbSB0aGUgbWVtb3J5CisKKyAg
ICAgICAgaWYgKHZhcmlhYmxlLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3Qg
KSB7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uKiBjb25zdEFycmF5ID0gdmFyaWFibGUtPmdl
dENvbnN0UG9pbnRlcigpOworICAgICAgICAgICAgVFR5cGUgdCh2YXJpYWJsZS0+Z2V0VHlwZSgp
KTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIHQsICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUo
KSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDQ6CisKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIElO
VF9UWVBFIGlzIG9ubHkgMTYtYml0IHBsdXMgc2lnbiBiaXQgZm9yIHZlcnRleC9mcmFnbWVudCBz
aGFkZXJzLAorICAgICAgICAvLyBjaGVjayBmb3Igb3ZlcmZsb3cgZm9yIGNvbnN0YW50cworICAg
ICAgICAvLworICAgICAgICBpZiAoYWJzKCh5eXZzcFsoMSkgLSAoMSldLmxleCkuaSkgPj0gKDEg
PDwgMTYpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUsICIgaW50ZWdlciBjb25zdGFudCBvdmVyZmxvdyIsICIiLCAiIik7CisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5
LT5zZXRJQ29uc3QoKHl5dnNwWygxKSAtICgxKV0ubGV4KS5pKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50
VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNToKKworICAgIHsKKyAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uWzFdOworICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5mKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5
cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2OgorCisgICAgeworICAg
ICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07Cisg
ICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmIpOwor
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRl
ZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgNzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDg6CisKKyAgICB7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5OgorCisgICAg
eworICAgICAgICBpZiAoISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5pc0FycmF5KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5pc01hdHJpeCgpICYmICEoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+aXNWZWN0b3IoKSkgeworICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKSkKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIgbGVmdCBvZiAnWycg
aXMgbm90IG9mIHR5cGUgYXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICh5eXZzcFsoMSkgLSAo
NCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9s
KCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBu
b3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0
UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QgJiYgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CisgICAgICAgICAgICBp
ZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkg
eyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciBhcnJheXMKKyAgICAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRDb25zdEFycmF5Tm9kZSgoeXl2
c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9u
KCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpLCAoeXl2c3BbKDEpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmlzVmVjdG9yKCkpIHsgIC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvcnMK
KyAgICAgICAgICAgICAgICBUVmVjdG9yRmllbGRzIGZpZWxkczsKKyAgICAgICAgICAgICAgICBm
aWVsZHMubnVtID0gMTsKKyAgICAgICAgICAgICAgICBmaWVsZHMub2Zmc2V0c1swXSA9ICh5eXZz
cFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24o
KS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCk7IC8vIG5lZWQgdG8gZG8gaXQg
dGhpcyB3YXkgYmVjYXVzZSB2Lnh5IHNlbmRzIGZpZWxkcyBpbnRlZ2VyIGFycmF5CisgICAgICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkQ29u
c3RWZWN0b3JOb2RlKGZpZWxkcywgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgp
KSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIG1hdHJpY2VzCisgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+YWRkQ29uc3RNYXRyaXhOb2Rl
KCh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50
VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksICh5eXZzcFsoMSkg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxp
bmUpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCh5
eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRRdWFsaWZpZXIoKSA9
PSBFdnFDb25zdCkgeworICAgICAgICAgICAgICAgIGlmICgoKHl5dnNwWygxKSAtICg0KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkgfHwgKHl5dnNwWygxKSAtICg0KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpICYmICh5eXZzcFsoMSkgLSAoNCldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0Tm9taW5hbFNpemUoKSA8PSAoeXl2
c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9u
KCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpICYmICEoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICkgeworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIiLCAi
WyIsICJmaWVsZCBzZWxlY3Rpb24gb3V0IG9mIHJhbmdlICclZCciLCAoeXl2c3BbKDMpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9u
QXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJh
eSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSA9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0TWF4QXJyYXlTaXplKCkgPD0gKHl5dnNwWygz
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTZXRNYXhTaXplKCh5eXZzcFsoMSkgLSAo
NCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc1N5bWJvbE5vZGUoKSwgKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGVQb2ludGVyKCksICh5eXZz
cFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24o
KS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksIHRydWUsICh5eXZzcFsoMikg
LSAoNCldLmxleCkubGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2V0TWF4
U2l6ZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNTeW1i
b2xOb2RlKCksICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRU
eXBlUG9pbnRlcigpLCAwLCBmYWxzZSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXND
b25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpID49ICh5
eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0QXJy
YXlTaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICIiLCAiWyIsICJhcnJheSBpbmRleCBvdXQgb2Yg
cmFuZ2UgJyVkJyIsICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpICYmICh5eXZzcFsoMSkgLSAoNCldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkgPT0gMCkgewor
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgp
LmxpbmUsICIiLCAiWyIsICJhcnJheSBtdXN0IGJlIHJlZGVjbGFyZWQgd2l0aCBhIHNpemUgYmVm
b3JlIGJlaW5nIGluZGV4ZWQgd2l0aCBhIHZhcmlhYmxlIik7CisgICAgICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkSW5kZXgoRU9wSW5kZXhJbmRpcmVjdCwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENv
bnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUNvbnN0
KSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKTsKKyAgICAgICAgfSBlbHNlIGlmICgoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNBcnJheSgpKSB7CisgICAg
ICAgICAgICBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFR5cGUoKS5nZXRTdHJ1Y3QoKSkKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSwgKHl5dnNwWygxKSAtICg0KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRUeXBlTmFtZSgpKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpLCAoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkpOworCisgICAgICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRR
dWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihFdnFDb25zdCk7
CisgICAgICAgIH0gZWxzZSBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmlzTWF0cml4KCkgJiYgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFso
MSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29u
c3QsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFs
U2l6ZSgpKSk7CisgICAgICAgIGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKQorICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAg
ICAgIGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5p
c1ZlY3RvcigpICYmICh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpCisgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICg0KV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNvbnN0KSk7Cisg
ICAgICAgIGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5pc1ZlY3RvcigpKQorICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3JhcnkpKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKCh5eXZzcFsoMSkg
LSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDExOgorCisgICAgeworICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSkgewor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAi
Y2Fubm90IGFwcGx5IGRvdCBvcGVyYXRvciB0byBhbiBhcnJheSIsICIuIiwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7CisgICAg
ICAgICAgICBUVmVjdG9yRmllbGRzIGZpZWxkczsKKyAgICAgICAgICAgIGlmICghIGNvbnRleHQt
PnBhcnNlVmVjdG9yRmllbGRzKCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksIGZp
ZWxkcywgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lKSkgeworICAgICAgICAgICAgICAgIGZp
ZWxkcy5udW0gPSAxOworICAgICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0
VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7IC8vIGNvbnN0YW50IGZvbGRpbmcg
Zm9yIHZlY3RvciBmaWVsZHMKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUoZmllbGRzLCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5s
aW5lKTsKKyAgICAgICAgICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cUNvbnN0LCAoaW50KSAoKih5eXZzcFso
MykgLSAoMyldLmxleCkuc3RyaW5nKS5zaXplKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGZpZWxkcy5udW0gPT0gMSkgeworICAgICAgICAgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAg
ICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMub2Zmc2V0c1swXSk7
CisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAg
ICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJlY3QsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5l
KTsKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5z
ZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldFByZWNpc2lvbigpKSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgVFN0cmluZyB2ZWN0b3JTdHJpbmcgPSAqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5z
dHJpbmc7CisgICAgICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkU3dpenpsZShmaWVsZHMsICh5eXZzcFsoMykgLSAoMyldLmxleCku
bGluZSk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxVGVtcG9yYXJ5LCAoaW50KSB2ZWN0
b3JTdHJpbmcuc2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICBUTWF0cml4RmllbGRzIGZpZWxkczsKKyAgICAg
ICAgICAgIGlmICghIGNvbnRleHQtPnBhcnNlTWF0cml4RmllbGRzKCooeXl2c3BbKDMpIC0gKDMp
XS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldE5vbWluYWxTaXplKCksIGZpZWxkcywgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lKSkg
eworICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNlOworICAgICAgICAgICAg
ICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGZpZWxkcy5yb3cg
PSAwOworICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGZpZWxk
cy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMg
bm90IGltcGxlbWVudGVkIHlldCIsICIuIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNv
bnN0KDApOworICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVi
cFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOworICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUp
OworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlw
ZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFz
aWNUeXBlKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQ
cmVjaXNpb24oKSxFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXROb21pbmFsU2l6ZSgpKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlv
blsxXTsKKyAgICAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRJQ29uc3QoZmllbGRzLmNvbCAq
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXROb21pbmFsU2l6
ZSgpICsgZmllbGRzLnJvdyk7CisgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMykgLSAoMyldLmxleCku
bGluZSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eXZzcFsoMikgLSAoMyld
LmxleCkubGluZSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldFByZWNpc2lvbigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBp
ZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCkgeworICAgICAgICAgICAgYm9vbCBmaWVsZEZvdW5kID0gZmFsc2U7
CisgICAgICAgICAgICBjb25zdCBUVHlwZUxpc3QqIGZpZWxkcyA9ICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCk7CisgICAgICAg
ICAgICBpZiAoZmllbGRzID09IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJzdHJ1Y3R1cmUgaGFzIG5vIGZpZWxkcyIsICJJ
bnRlcm5hbCBFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpOworICAgICAgICAgICAgICAgIGZvciAo
aSA9IDA7IGkgPCBmaWVsZHMtPnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICgoKmZpZWxkcylbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkgPT0gKih5eXZzcFsoMykgLSAoMyld
LmxleCkuc3RyaW5nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEZvdW5kID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmaWVsZEZvdW5kKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5hZGRDb25zdFN0cnVjdCgqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgp
LmxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5zZXRUeXBlKCooKmZpZWxkcylbaV0udHlwZSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gY2hhbmdlIHRoZSBxdWFsaWZpZXIgb2YgdGhlIHJldHVybiB0eXBlLCBub3Qg
b2YgdGhlIHN0cnVjdHVyZSBmaWVsZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFz
IHRoZSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbiBpcyBzaGFyZWQgYmV0d2VlbiB2YXJpb3VzIHN0cnVj
dHVyZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRUeXBlUG9pbnRlcigpLT5zZXRRdWFsaWZpZXIoRXZxQ29uc3QpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25z
dGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNv
bnN0KGkpOworICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksICooKmZpZWxk
cylbaV0udHlwZSwgKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdFN0cnVjdCwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUpOworICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5zZXRUeXBlKCooKmZpZWxkcylbaV0udHlwZSk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1
Y3R1cmUiLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0
b3IsIG9yIG1hdHJpeCBvbiBsZWZ0IGhhbmQgc2lkZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCku
c3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgICAgICAvLyBkb24n
dCBkZWxldGUgJDMuc3RyaW5nLCBpdCdzIGZyb20gdGhlIHBvb2wKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMTI6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJv
ckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgIisrIiwgKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3RJbmNyZW1lbnQsICh5eXZzcFsoMSkgLSAo
MildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUs
IGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5
dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAiKysiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAg
fQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzoKKworICAgIHsKKyAgICAgICAgaWYg
KGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAi
LS0iLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdERlY3Jl
bWVudCwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MikgLSAoMildLmxleCkubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAo
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnVuYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICItLSIsICh5eXZz
cFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE0Ogor
CisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+aW50ZWdlckVycm9yQ2hlY2soKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICJbXSIpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTU6CisKKyAgICB7CisgICAgICAgIFRGdW5jdGlvbiogZm5DYWxs
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKKyAgICAgICAgVE9wZXJhdG9y
IG9wID0gZm5DYWxsLT5nZXRCdWlsdEluT3AoKTsKKworICAgICAgICBpZiAob3AgIT0gRU9wTnVs
bCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoZW4gdGhpcyBz
aG91bGQgYmUgYSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgICAgIC8vIERvbid0IGdvIHRocm91Z2gg
dGhlIHN5bWJvbCB0YWJsZSBmb3IgY29uc3RydWN0b3JzLgorICAgICAgICAgICAgLy8gVGhlaXIg
cGFyYW1ldGVycyB3aWxsIGJlIHZlcmlmaWVkIGFsZ29yaXRobWljYWxseS4KKyAgICAgICAgICAg
IC8vCisgICAgICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7ICAvLyB1
c2UgdGhpcyB0byBnZXQgdGhlIHR5cGUgYmFjaworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmNv
bnN0cnVjdG9yRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICh5eXZz
cFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSwgKmZuQ2FsbCwgb3AsICZ0eXBlKSkgewor
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8g
SXQncyBhIGNvbnN0cnVjdG9yLCBvZiB0eXBlICd0eXBlJy4KKyAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmFkZENvbnN0cnVjdG9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSwgJnR5
cGUsIG9wLCBmbkNhbGwsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoMCwgb3AsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSku
bGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPnNldFR5cGUodHlwZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAv
LworICAgICAgICAgICAgLy8gTm90IGEgY29uc3RydWN0b3IuICBGaW5kIGl0IGluIHRoZSBzeW1i
b2wgdGFibGUuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uKiBm
bkNhbmRpZGF0ZTsKKyAgICAgICAgICAgIGJvb2wgYnVpbHRJbjsKKyAgICAgICAgICAgIGZuQ2Fu
ZGlkYXRlID0gY29udGV4dC0+ZmluZEZ1bmN0aW9uKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSku
bGluZSwgZm5DYWxsLCAmYnVpbHRJbik7CisgICAgICAgICAgICBpZiAoZm5DYW5kaWRhdGUpIHsK
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEEgZGVjbGFyZWQgZnVuY3Rp
b24uCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoYnVpbHRJbiAmJiAh
Zm5DYW5kaWRhdGUtPmdldEV4dGVuc2lvbigpLmVtcHR5KCkgJiYKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+ZXh0ZW5zaW9uRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0p
LmxpbmUsIGZuQ2FuZGlkYXRlLT5nZXRFeHRlbnNpb24oKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBvcCA9IGZuQ2FuZGlkYXRlLT5nZXRCdWlsdEluT3AoKTsKKyAgICAgICAgICAgICAgICBpZiAo
YnVpbHRJbiAmJiBvcCAhPSBFT3BOdWxsKSB7CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgICAgIC8vIEEgZnVuY3Rpb24gY2FsbCBtYXBwZWQgdG8gYSBidWlsdC1pbiBv
cGVyYXRpb24uCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIGlm
IChmbkNhbmRpZGF0ZS0+Z2V0UGFyYW1Db3VudCgpID09IDEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUcmVhdCBpdCBsaWtlIGEgYnVp
bHQtaW4gdW5hcnkgb3BlcmF0b3IuCisgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChvcCwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
KS5pbnRlcm1Ob2RlLCAwLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApICB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtKS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICIgd3Jvbmcgb3BlcmFuZCB0eXBlIiwgIklu
dGVybmFsIEVycm9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJ1aWx0IGlu
IHVuYXJ5IG9wZXJhdG9yIGZ1bmN0aW9uLiAgVHlwZTogJXMiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLmludGVybU5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLmNfc3RyKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFlZRVJST1I7CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
c2V0QWdncmVnYXRlT3BlcmF0b3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1BZ2dy
ZWdhdGUsIG9wLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBpcyBhIHJlYWwgZnVuY3Rpb24gY2FsbAorCisgICAgICAgICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRB
Z2dyZWdhdGVPcGVyYXRvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0
ZSwgRU9wRnVuY3Rpb25DYWxsLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpOworICAg
ICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUo
Zm5DYW5kaWRhdGUtPmdldFJldHVyblR5cGUoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
dGhpcyBpcyBob3cgd2Uga25vdyB3aGV0aGVyIHRoZSBnaXZlbiBmdW5jdGlvbiBpcyBhIGJ1aWx0
SW4gZnVuY3Rpb24gb3IgYSB1c2VyIGRlZmluZWQgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAg
ICAgLy8gaWYgYnVpbHRJbiA9PSBmYWxzZSwgaXQncyBhIHVzZXJEZWZpbmVkIC0+IGNvdWxkIGJl
IGFuIG92ZXJsb2FkZWQgYnVpbHRJbiBmdW5jdGlvbiBhbHNvCisgICAgICAgICAgICAgICAgICAg
IC8vIGlmIGJ1aWx0SW4gPT0gdHJ1ZSwgaXQncyBkZWZpbml0ZWx5IGEgYnVpbHRJbiBmdW5jdGlv
biB3aXRoIEVPcE51bGwKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFidWlsdEluKQorICAgICAg
ICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0Fn
Z3JlZ2F0ZSgpLT5zZXRVc2VyRGVmaW5lZCgpOworICAgICAgICAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoZm5DYW5k
aWRhdGUtPmdldE1hbmdsZWROYW1lKCkpOworCisgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZp
ZXIgcXVhbDsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmbkNhbmRp
ZGF0ZS0+Z2V0UGFyYW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHF1
YWwgPSBmbkNhbmRpZGF0ZS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAocXVhbCA9PSBFdnFPdXQgfHwgcXVhbCA9PSBFdnFJbk91
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJv
ckNoZWNrKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0TGluZSgpLCAiYXNzaWdu
IiwgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5nZXRT
ZXF1ZW5jZSgpW2ldLT5nZXRBc1R5cGVkKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9k
ZS0+Z2V0TGluZSgpLCAiQ29uc3RhbnQgdmFsdWUgY2Fubm90IGJlIHBhc3NlZCBmb3IgJ291dCcg
b3IgJ2lub3V0JyBwYXJhbWV0ZXJzLiIsICJFcnJvciIsICIiKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPnNldFR5cGUoZm5DYW5kaWRhdGUtPmdldFJldHVyblR5cGUoKSk7CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIGVycm9yIG1lc3NhZ2Ugd2FzIHB1
dCBvdXQgYnkgUGFGaW5kRnVuY3Rpb24oKQorICAgICAgICAgICAgICAgIC8vIFB1dCBvbiBhIGR1
bW15IG5vZGUgZm9yIGVycm9yIHJlY292ZXJ5CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVu
aW9uQXJyYXktPnNldEZDb25zdCgwLjBmKTsKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5
eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlbGV0ZSBmbkNh
bGw7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE2OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybSk7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDE3OgorCisgICAgeworICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkIiwg
IiIsICIiKTsKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50
ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7CisgICAgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDE4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkg
LSAoMildLmludGVybSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDIp
IC0gKDIpXS5sZXgpLmxpbmU7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE5OgorCisg
ICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxp
bmU7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDIwOgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlv
bik7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAwOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAyMToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkuZnVu
Y3Rpb24gPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgICAgICAoeXl2
YWwuaW50ZXJtKS5pbnRlcm1Ob2RlID0gMDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
MjI6CisKKyAgICB7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5ldyBUVHlwZSgo
eXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKSB9Owor
ICAgICAgICAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5hZGRQYXJhbWV0ZXIo
cGFyYW0pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAo
MildLmludGVybS5mdW5jdGlvbik7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUg
PSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMjM6CisKKyAgICB7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0g
PSB7IDAsIG5ldyBUVHlwZSgoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0VHlwZSgpKSB9OworICAgICAgICAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0
aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0pOworICAgICAgICAoeXl2YWwuaW50ZXJtKS5mdW5jdGlv
biA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuZnVuY3Rpb247CisgICAgICAgICh5eXZhbC5p
bnRlcm0pLmludGVybU5vZGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5vZGUsICh5eXZzcFsoMykgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOworICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNToKKworICAgIHsKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gQ29uc3RydWN0b3IKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAo
MSldLmludGVybS50eXBlKS5hcnJheSkgeworICAgICAgICAgICAgLy8gQ29uc3RydWN0b3JzIGZv
ciBhcnJheXMgYXJlIG5vdCBhbGxvd2VkLgorICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMg
dHlwZSIsICJhcnJheSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zZXRBcnJheShmYWxzZSk7
CisgICAgICAgIH0KKworICAgICAgICBUT3BlcmF0b3Igb3AgPSBFT3BOdWxsOworICAgICAgICBp
ZiAoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYpIHsKKyAgICAgICAgICAg
IG9wID0gRU9wQ29uc3RydWN0U3RydWN0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
c3dpdGNoICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSkgeworICAgICAgICAg
ICAgY2FzZSBFYnRGbG9hdDoKKyAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpLm1hdHJpeCkgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVj
dE1hdDI7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdE1hdDM7ICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSA0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcCA9IEVPcENvbnN0cnVjdE1hdDQ7ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCgo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgeworICAgICAgICAgICAgICAgICAg
ICBjYXNlIDE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29u
c3RydWN0RmxvYXQ7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0VmVjMjsgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0VmVjMzsgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9w
Q29uc3RydWN0VmVjNDsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFYnRJbnQ6
CisgICAgICAgICAgICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5z
aXplKSB7CisgICAgICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RJbnQ7ICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSAyOiAgICAgICBGUkFHX1ZFUlRfT05MWSgiaXZlYzIiLCAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0udHlwZSkubGluZSk7IG9wID0gRU9wQ29uc3RydWN0SVZlYzI7IGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgMzogICAgICAgRlJBR19WRVJUX09OTFkoIml2ZWMzIiwgKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdElWZWMz
OyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJp
dmVjNCIsICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKTsgb3AgPSBFT3BDb25z
dHJ1Y3RJVmVjNDsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBFYnRCb29sOgorICAgICAgICAgICAgICAgIHN3aXRjaCgo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgeworICAgICAgICAgICAgICAgIGNh
c2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29u
c3RydWN0Qm9vbDsgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjogICAgICAgRlJBR19W
RVJUX09OTFkoImJ2ZWMyIiwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpOyBv
cCA9IEVPcENvbnN0cnVjdEJWZWMyOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6ICAg
ICAgIEZSQUdfVkVSVF9PTkxZKCJidmVjMyIsICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBl
KS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RCVmVjMzsgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSA0OiAgICAgICBGUkFHX1ZFUlRfT05MWSgiYnZlYzQiLCAoeXl2c3BbKDEpIC0gKDEpXS5p
bnRlcm0udHlwZSkubGluZSk7IG9wID0gRU9wQ29uc3RydWN0QlZlYzQ7IGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG9wID09IEVPcE51bGwpIHsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkubGluZSwgImNhbm5vdCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgZ2V0QmFzaWNTdHJpbmco
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUpLCAiIik7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSld
LmludGVybS50eXBlKS50eXBlID0gRWJ0RmxvYXQ7CisgICAgICAgICAgICAgICAgb3AgPSBFT3BD
b25zdHJ1Y3RGbG9hdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBUU3RyaW5n
IHRlbXBTdHJpbmc7CisgICAgICAgIFRUeXBlIHR5cGUoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LnR5cGUpKTsKKyAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVuY3Rpb24oJnRl
bXBTdHJpbmcsIHR5cGUsIG9wKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBm
dW5jdGlvbjsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjY6CisKKyAgICB7CisgICAg
ICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lLCAqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5l
ZCk7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFso
MSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5mdW5j
dGlvbikgPSBmdW5jdGlvbjsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjc6CisKKyAg
ICB7CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lLCAqKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpKQorICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVi
cFVuZGVmaW5lZCk7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9u
KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nLCB0eXBlKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
Mjg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAyOToKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVy
cm9yQ2hlY2soKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiKysiLCAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVtZW50LCAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5l
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5
eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgIisrIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAg
IH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMzA6CisKKyAgICB7CisgICAgICAgIGlm
IChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwg
Ii0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3Jl
bWVudCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MSkgLSAoMildLmxleCkubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAo
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnVuYXJ5T3BFcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICItLSIsICh5eXZz
cFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDMxOgor
CisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCAhPSBFT3BO
dWxsKSB7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCh5eXZzcFsoMSkgLSAoMildLmludGVybSku
b3AsICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0pLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgICAg
IGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGVycm9yT3AgPSAiIjsKKyAgICAgICAgICAgICAgICBzd2l0Y2goKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtKS5vcCkgeworICAgICAgICAgICAgICAgIGNhc2UgRU9wTmVn
YXRpdmU6ICAgZXJyb3JPcCA9ICItIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBFT3BM
b2dpY2FsTm90OiBlcnJvck9wID0gIiEiOyBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0
OiBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGV4dC0+dW5h
cnlPcEVycm9yKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkubGluZSwgZXJyb3JPcCwgKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMzI6
CisKKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTnVsbDsgO30KKyAgICBicmVhazsKKworICBjYXNl
IDMzOgorCisgICAgeyAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE5lZ2F0aXZlOyA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMzQ6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTG9naWNhbE5vdDsgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDM1OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDM2OgorCisgICAgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgi
KiIsICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cE11bCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgp
LmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVy
cm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIioiLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMzc6CisKKyAgICB7
CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCIvIiwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5l
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwor
ICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5l
LCAiLyIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAzODoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAzOToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wQWRkLCAo
eXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwg
Y29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5
dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiKyIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAg
ICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0MDoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEJpbmFyeU1hdGgoRU9wU3ViLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZz
cFsoMikgLSAoMyldLmxleCkubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBp
ZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNv
bnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiLSIsICh5
eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmlu
ZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA0MToKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA0MjoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSA0MzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW4sICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3Bb
KDIpIC0gKDMpXS5sZXgpLmxpbmUsICI8IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkg
PSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25z
dChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShF
YnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5s
aW5lKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0NDoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkg
eworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5s
ZXgpLmxpbmUsICI+IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Cisg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBV
bmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAg
ICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0NToKKworICAgIHsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wTGVzc1RoYW5FcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAg
ICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwg
Ijw9IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBs
ZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsx
XTsKKyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQs
IEV2cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgfQorICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA0NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1h
dGgoRU9wR3JlYXRlclRoYW5FcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2
c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAg
aWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBj
b250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIj49Iiwg
KHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3Ry
aW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAg
ICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29u
c3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNv
bnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgfQorICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA0NzoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA0ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9w
RXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICI9PSIsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFy
cmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNDk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgY29udGV4
dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygy
KSAtICgzKV0ubGV4KS5saW5lLCAiIT0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDUwOgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDUxOgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDUyOgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDUzOgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDU0OgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsQW5kLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgY29udGV4dC0+c3ltYm9sVGFi
bGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsK
KyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lLCAiJiYiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAg
ICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDU1OgorCisgICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDU2OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BMb2dpY2FsWG9yLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5
eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAg
ICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiXl4i
LCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwor
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICB9CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDU3OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30K
KyAgICBicmVhazsKKworICBjYXNlIDU4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BMb2dpY2FsT3IsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+Ymlu
YXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICJ8fCIsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFu
dFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1
bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24o
dW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZz
cFsoMikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgNTk6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgNjA6CisKKyAgICB7CisgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNr
KCh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAg
ICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTZWxlY3Rpb24oKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDUpIC0g
KDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5l
KTsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRUeXBlKCkgIT0gKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldFR5cGUoKSkKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IDA7CisKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7
CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoNSldLmxl
eCkubGluZSwgIjoiLCAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNw
Wyg1KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgNjE6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgNjI6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5s
VmFsdWVFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMyldLmludGVybSkubGluZSwgImFzc2lnbiIs
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEFzc2lnbigoeXl2c3BbKDIpIC0gKDMpXS5p
bnRlcm0pLm9wLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyld
LmludGVybSkubGluZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9k
ZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YXNzaWduRXJyb3IoKHl5dnNwWygyKSAt
ICgzKV0uaW50ZXJtKS5saW5lLCAiYXNzaWduIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAg
ICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDYzOgorCisgICAgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wQXNzaWduOyA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgNjQ6CisKKyAgICB7IEZSQUdfVkVSVF9PTkxZKCIqPSIsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7ICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcE11bEFzc2ln
bjsgO30KKyAgICBicmVhazsKKworICBjYXNlIDY1OgorCisgICAgeyBGUkFHX1ZFUlRfT05MWSgi
Lz0iLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOyAgICAgKHl5dmFsLmludGVybSkubGlu
ZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BE
aXZBc3NpZ247IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2NjoKKworICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygx
KSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50ZXJtKS5vcCA9IEVPcEFkZEFzc2lnbjsgO30K
KyAgICBicmVhazsKKworICBjYXNlIDY3OgorCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgp
LmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wU3ViQXNzaWduOyA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgNjg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA2OToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbW1hKCh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAg
ICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAg
ICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwg
IiwiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxl
dGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygzKSAtICgz
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgNzA6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5jb25zdEVycm9y
Q2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5
cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzE6CisKKyAgICB7CisgICAgICAgIFRGdW5jdGlv
biAmZnVuY3Rpb24gPSAqKCh5eXZzcFsoMSkgLSAoMildLmludGVybSkuZnVuY3Rpb24pOworICAg
ICAgICAKKyAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSAqcHJvdG90eXBlID0gbmV3IFRJbnRlcm1B
Z2dyZWdhdGU7CisgICAgICAgIHByb3RvdHlwZS0+c2V0VHlwZShmdW5jdGlvbi5nZXRSZXR1cm5U
eXBlKCkpOworICAgICAgICBwcm90b3R5cGUtPnNldE5hbWUoZnVuY3Rpb24uZ2V0TmFtZSgpKTsK
KyAgICAgICAgCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1D
b3VudCgpOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN0IFRQYXJhbWV0ZXIgJnBh
cmFtID0gZnVuY3Rpb24uZ2V0UGFyYW0oaSk7CisgICAgICAgICAgICBpZiAocGFyYW0ubmFtZSAh
PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFRWYXJpYWJsZSAqdmFyaWFibGUg
PSBuZXcgVFZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jv
d0FnZ3JlZ2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFy
aWFibGUtPmdldFVuaXF1ZUlkKCksIHZhcmlhYmxlLT5nZXROYW1lKCksIHZhcmlhYmxlLT5nZXRU
eXBlKCksICh5eXZzcFsoMSkgLSAoMildLmludGVybSkubGluZSksICh5eXZzcFsoMSkgLSAoMild
LmludGVybSkubGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcHJvdG90eXBlID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
Lmdyb3dBZ2dyZWdhdGUocHJvdG90eXBlLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KDAsICIiLCAqcGFyYW0udHlwZSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5saW5lKSwgKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtKS5saW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgcHJvdG90eXBlLT5zZXRPcChFT3BQcm90b3R5cGUpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gcHJvdG90eXBlOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSA3MjoKKworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMild
LmludGVybSkuaW50ZXJtQWdncmVnYXRlKQorICAgICAgICAgICAgKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUtPnNldE9wKEVPcERlY2xhcmF0aW9uKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybSkuaW50
ZXJtQWdncmVnYXRlOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3MzoKKworICAgIHsK
KyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuc2V0RGVmYXVsdFByZWNpc2lvbiggKHl5dnNw
WygzKSAtICg0KV0uaW50ZXJtLnR5cGUpLnR5cGUsICh5eXZzcFsoMikgLSAoNCldLmludGVybS5w
cmVjaXNpb24pICk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOworICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3NDoKKworICAgIHsKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gTXVsdGlwbGUgZGVjbGFyYXRpb25zIG9mIHRoZSBzYW1lIGZ1bmN0aW9uIGFyZSBhbGxv
d2VkLgorICAgICAgICAvLworICAgICAgICAvLyBJZiB0aGlzIGlzIGEgZGVmaW5pdGlvbiwgdGhl
IGRlZmluaXRpb24gcHJvZHVjdGlvbiBjb2RlIHdpbGwgY2hlY2sgZm9yIHJlZGVmaW5pdGlvbnMK
KyAgICAgICAgLy8gKHdlIGRvbid0IGtub3cgYXQgdGhpcyBwb2ludCBpZiBpdCdzIGEgZGVmaW5p
dGlvbiBvciBub3QpLgorICAgICAgICAvLworICAgICAgICAvLyBSZWRlY2xhcmF0aW9ucyBhcmUg
YWxsb3dlZC4gIEJ1dCwgcmV0dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIgcXVhbGlmaWVycyBtdXN0
IG1hdGNoLgorICAgICAgICAvLworICAgICAgICBURnVuY3Rpb24qIHByZXZEZWMgPSBzdGF0aWNf
Y2FzdDxURnVuY3Rpb24qPihjb250ZXh0LT5zeW1ib2xUYWJsZS5maW5kKCh5eXZzcFsoMSkgLSAo
MildLmludGVybS5mdW5jdGlvbiktPmdldE1hbmdsZWROYW1lKCkpKTsKKyAgICAgICAgaWYgKHBy
ZXZEZWMpIHsKKyAgICAgICAgICAgIGlmIChwcmV2RGVjLT5nZXRSZXR1cm5UeXBlKCkgIT0gKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpKSB7CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAi
b3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2lj
U3RyaW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByZXZEZWMtPmdldFBh
cmFtQ291bnQoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFBhcmFt
KGkpLnR5cGUtPmdldFF1YWxpZmllcigpICE9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5j
dGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSwgIm92ZXJs
b2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSBwYXJhbWV0ZXIgcXVhbGlmaWVycyIs
ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbiktPmdldFBhcmFtKGkpLnR5cGUtPmdl
dFF1YWxpZmllclN0cmluZygpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLworICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcmVkZWNsYXJhdGlvbiwgaXQgY291
bGQgYWxzbyBiZSBhIGRlZmluaXRpb24sCisgICAgICAgIC8vIGluIHdoaWNoIGNhc2UsIHdlIHdh
bnQgdG8gdXNlIHRoZSB2YXJpYWJsZSBuYW1lcyBmcm9tIHRoaXMgb25lLCBhbmQgbm90IHRoZSBv
bmUgdGhhdCdzCisgICAgICAgIC8vIGJlaW5nIHJlZGVjbGFyZWQuICBTbywgcGFzcyBiYWNrIHVw
IHRoaXMgZGVjbGFyYXRpb24sIG5vdCB0aGUgb25lIGluIHRoZSBzeW1ib2wgdGFibGUuCisgICAg
ICAgIC8vCisgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZz
cFsoMikgLSAoMildLmxleCkubGluZTsKKworICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5p
bnNlcnQoKih5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uKTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgNzU6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgNzY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgNzc6CisKKyAgICB7CisgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCisgICAgICAg
ICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0
aW9uKTsKKyAgICAgICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0udHlwZS0+
Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMild
LmludGVybS5mdW5jdGlvbiktPmFkZFBhcmFtZXRlcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0p
LnBhcmFtKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZGVsZXRlICh5eXZzcFsoMikgLSAo
MildLmludGVybSkucGFyYW0udHlwZTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNzg6
CisKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIE9ubHkgZmlyc3QgcGFyYW1ldGVyIG9m
IG9uZS1wYXJhbWV0ZXIgZnVuY3Rpb25zIGNhbiBiZSB2b2lkCisgICAgICAgIC8vIFRoZSBjaGVj
ayBmb3IgbmFtZWQgcGFyYW1ldGVycyBub3QgYmVpbmcgdm9pZCBpcyBkb25lIGluIHBhcmFtZXRl
cl9kZWNsYXJhdG9yCisgICAgICAgIC8vCisgICAgICAgIGlmICgoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0pLnBhcmFtLnR5cGUtPmdldEJhc2ljVHlwZSgpID09IEVidFZvaWQpIHsKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlzIHZvaWQKKyAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMp
XS5sZXgpLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICcodm9p
ZCknIiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICBkZWxldGUgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5wYXJhbS50eXBlOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIKKyAgICAgICAg
ICAgICh5eXZhbC5pbnRlcm0uZnVuY3Rpb24pID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmZ1
bmN0aW9uKTsKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5mdW5jdGlvbikt
PmFkZFBhcmFtZXRlcigoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLnBhcmFtKTsKKyAgICAgICAg
fQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3OToKKworICAgIHsKKyAgICAgICAgaWYg
KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxR2xvYmFsICYm
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5xdWFsaWZpZXIgIT0gRXZxVGVtcG9yYXJ5
KSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxp
bmUsICJubyBxdWFsaWZpZXJzIGFsbG93ZWQgZm9yIGZ1bmN0aW9uIHJldHVybiIsIGdldFF1YWxp
ZmllclN0cmluZygoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIp
OworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIC8v
IG1ha2Ugc3VyZSBhIHNhbXBsZXIgaXMgbm90IGludm9sdmVkIGFzIHdlbGwuLi4KKyAgICAgICAg
aWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgzKV0u
bGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIC8vIEFkZCB0aGUgZnVuY3Rpb24gYXMgYSBw
cm90b3R5cGUgYWZ0ZXIgcGFyc2luZyBpdCAod2UgZG8gbm90IHN1cHBvcnQgcmVjdXJzaW9uKQor
ICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uOworICAgICAgICBUVHlwZSB0eXBlKCh5eXZzcFso
MSkgLSAoMyldLmludGVybS50eXBlKSk7CisgICAgICAgIGZ1bmN0aW9uID0gbmV3IFRGdW5jdGlv
bigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLnN0cmluZywgdHlwZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uZnVuY3Rpb24pID0gZnVuY3Rpb247CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDgwOgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUp
LnR5cGUgPT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygy
KSAtICgyKV0ubGV4KS5saW5lLCAiaWxsZWdhbCB1c2Ugb2YgdHlwZSAndm9pZCciLCAoeXl2c3Bb
KDIpIC0gKDIpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVy
cm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgyKV0u
bGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBU
UGFyYW1ldGVyIHBhcmFtID0geyh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCBuZXcgVFR5
cGUoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpKX07CisgICAgICAgICh5eXZhbC5pbnRl
cm0pLmxpbmUgPSAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmU7CisgICAgICAgICh5eXZhbC5p
bnRlcm0pLnBhcmFtID0gcGFyYW07CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDgxOgor
CisgICAgeworICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGNhbiBtYWtlIGFuIGFycmF5IG91dCBv
ZiB0aGlzIHR5cGUKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5
dnNwWygzKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChjb250ZXh0
LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lLCAqKHl5dnNw
WygyKSAtICg1KV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworCisgICAgICAgIGludCBzaXplOworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJy
b3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoNCkgLSAoNSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KHRy
dWUsIHNpemUpOworCisgICAgICAgIFRUeXBlKiB0eXBlID0gbmV3IFRUeXBlKCh5eXZzcFsoMSkg
LSAoNSldLmludGVybS50eXBlKSk7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7ICh5eXZz
cFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCB0eXBlIH07CisgICAgICAgICh5eXZhbC5pbnRlcm0p
LmxpbmUgPSAoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmU7CisgICAgICAgICh5eXZhbC5pbnRl
cm0pLnBhcmFtID0gcGFyYW07CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDgyOgorCisg
ICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7
CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5dnNwWygzKSAtICgzKV0u
aW50ZXJtKS5saW5lLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAo
eXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0u
dHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDgzOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZz
cFsoMikgLSAoMildLmludGVybSk7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbWV0ZXJTYW1w
bGVyRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5xdWFsaWZpZXIpLCAqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJh
bS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNv
bnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIEV2
cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5p
bnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4NDoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybSkgPSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pOworICAgICAgICBpZiAoY29udGV4dC0+
cGFyYW1FcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciwgKHl5dnNwWygyKSAtICgzKV0uaW50ZXJt
LnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4NToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pOwor
ICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soKHl5dnNwWygy
KSAtICgyKV0uaW50ZXJtKS5saW5lLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVhbGlmaWVy
KSwgKih5eXZzcFsoMikgLSAoMildLmludGVybSkucGFyYW0udHlwZSkpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2so
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5saW5lLCBFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwuaW50ZXJtKS5wYXJhbS50eXBlKSkKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgODY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUlu
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA4NzoKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybS5xdWFsaWZpZXIpID0gRXZxSW47CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDg4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFP
dXQ7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDg5OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbk91dDsKKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgOTA6CisKKyAgICB7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7IDAsIG5l
dyBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpIH07CisgICAgICAgICh5eXZh
bC5pbnRlcm0pLnBhcmFtID0gcGFyYW07CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDkx
OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSk7CisgICAgICAgIAorICAgICAgICBpZiAoKHl5dmFsLmludGVybSkudHlwZS5wcmVjaXNp
b24gPT0gRWJwVW5kZWZpbmVkKSB7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS50eXBlLnBy
ZWNpc2lvbiA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmdldERlZmF1bHRQcmVjaXNpb24oKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtKS50eXBlLnR5cGUpOworICAgICAgICAgICAgaWYgKGNvbnRleHQt
PnByZWNpc2lvbkVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAoeXl2
YWwuaW50ZXJtKS50eXBlLnByZWNpc2lvbiwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS50eXBl
LnR5cGUpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDkyOgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybU5v
ZGUsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMykgLSAoMyld
LmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLnR5cGUpLCAoeXl2
c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOwor
ICAgICAgICAKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2so
KHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5p
dENvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSkpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNo
ZWNrKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoMyldLmxleCku
c3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOTM6CisKKyAgICB7CisgICAgICAg
IGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSld
LmxleCkubGluZSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0
RXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMpIC0gKDUp
XS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZz
cFsoMSkgLSAoNSldLmludGVybSk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVy
cm9yQ2hlY2soKHl5dnNwWyg0KSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDUpXS5p
bnRlcm0pLnR5cGUpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3Bb
KDQpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSkpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLnNldEFycmF5KHRydWUpOworICAgICAg
ICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJh
eUVycm9yQ2hlY2soKHl5dnNwWyg0KSAtICg1KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg1
KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgdmFyaWFibGUp
KQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA5NDoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQt
PnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg2KV0ubGV4KS5saW5lLCAo
eXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5
eXZzcFsoMykgLSAoNildLmxleCkubGluZSwgKih5eXZzcFsoMykgLSAoNildLmxleCkuc3RyaW5n
LCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICg2KV0u
aW50ZXJtKTsKKworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXl2
c3BbKDQpIC0gKDYpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkg
fHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNildLmxl
eCkubGluZSwgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgc2l6ZTsK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eXZzcFsoNCkg
LSAoNildLmxleCkubGluZSwgKHl5dnNwWyg1KSAtICg2KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksIHNpemUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsK
KyAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+YXJyYXlFcnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNildLmxleCkubGluZSwgKih5eXZzcFso
MykgLSAoNildLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUsIHZh
cmlhYmxlKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICBUVHlwZSB0eXBlID0gVFR5cGUoKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlKTsKKyAg
ICAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOworICAgICAgICAgICAgKHl5dmFsLmlu
dGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdh
dGUoKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkU3ltYm9sKDAsICooeXl2c3BbKDMpIC0gKDYpXS5sZXgpLnN0cmluZywgdHlwZSwg
KHl5dnNwWygzKSAtICg2KV0ubGV4KS5saW5lKSwgKHl5dnNwWygzKSAtICg2KV0ubGV4KS5saW5l
KTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5NToKKworICAgIHsK
KyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygz
KSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUpKQorICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRlcm0pID0g
KHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKKworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJt
Tm9kZTsKKyAgICAgICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5dnNwWygz
KSAtICg1KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZz
cFsoMSkgLSAoNSldLmludGVybSkudHlwZSwgKHl5dnNwWyg1KSAtICg1KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksIGludGVybU5vZGUpKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gYnVpbGQgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIGlmIChpbnRlcm1Ob2RlKQorICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRl
cm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3Bb
KDEpIC0gKDUpXS5pbnRlcm0pLmludGVybU5vZGUsIGludGVybU5vZGUsICh5eXZzcFsoNCkgLSAo
NSldLmxleCkubGluZSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKHl5dmFs
LmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS5pbnRl
cm1BZ2dyZWdhdGU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAwOwor
ICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDk2OgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtKS50eXBlID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUp
OworICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAs
ICIiLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkpLCAoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0udHlwZSkubGluZSksICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5s
aW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOTc6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5t
YWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFso
MikgLSAoMildLmxleCkuc3RyaW5nLCBUVHlwZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlw
ZSkpLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUpLCAoeXl2c3BbKDIpIC0gKDIpXS5sZXgp
LmxpbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVy
cm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAoeXl2YWwuaW50ZXJtKS50eXBl
KSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4
dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICoo
eXl2c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZywgKHl5dmFsLmludGVybSkudHlwZSkpCisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSk7CisKKyAg
ICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmxl
eCkubGluZSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50
eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgOTg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoNCldLmxleCkuc3RyaW5nLCBU
VHlwZSgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpLCAoeXl2c3BbKDIpIC0gKDQpXS5s
ZXgpLmxpbmUpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAgICAKKyAgICAg
ICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg0
KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29u
c3RFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAo
NCldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpKQorICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUg
PSAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgaWYgKGNvbnRleHQt
PmFycmF5VHlwZUVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0udHlwZSkpIHx8IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JD
aGVjaygoeXl2c3BbKDMpIC0gKDQpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNCldLmludGVy
bS50eXBlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLnNldEFycmF5KHRy
dWUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg0KV0ubGV4KS5saW5lLCAqKHl5
dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBl
KSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5OToKKworICAgIHsKKyAgICAgICAg
VFR5cGUgdHlwZSA9IFRUeXBlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSk7CisgICAg
ICAgIGludCBzaXplOworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygo
eXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCBzaXplKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3Ry
aW5nLCB0eXBlLCAoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUpLCAoeXl2c3BbKDIpIC0gKDUp
XS5sZXgpLmxpbmUpOworICAgICAgICAKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxp
ZmllckVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisg
ICAgICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAo
NSldLmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEp
IC0gKDUpXS5pbnRlcm0udHlwZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
CisgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0u
dHlwZSk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5dnNw
WygzKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSkpIHx8
IGNvbnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgp
LmxpbmUsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7Cisg
ICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0g
KDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoNCkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LCBzaXplKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAg
ICAgICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKS5zZXRBcnJheSh0cnVlLCBzaXplKTsK
KyAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7CisgICAgICAgICAgICBpZiAoY29udGV4
dC0+YXJyYXlFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKih5eXZzcFso
MikgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlwZSksIHZh
cmlhYmxlKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0K
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTAwOgorCisgICAgeworICAgICAgICBpZiAo
Y29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDQpXS5sZXgp
LmxpbmUsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFso
MSkgLSAoNCldLmludGVybS50eXBlKTsKKworICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9k
ZTsKKyAgICAgICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5dnNwWygyKSAt
ICg0KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eXZzcFso
MSkgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksIGludGVybU5vZGUpKSB7CisgICAgICAgIC8vCisgICAgICAgIC8vIEJ1aWxkIGlu
dGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbgorICAgICAgICAvLworICAgICAgICAgICAgaWYoaW50
ZXJtTm9kZSkKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShpbnRlcm1Ob2RlLCAoeXl2c3Bb
KDMpIC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
KS5pbnRlcm1BZ2dyZWdhdGUgPSAwOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDEwMToKKworICAgIHsKKyAgICAgICAgVkVSVEVYX09OTFkoImludmFyaWFudCBkZWNs
YXJhdGlvbiIsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0pLnF1YWxpZmllciA9IEV2cUludmFyaWFudFZhcnlpbmdPdXQ7CisgICAgICAgICh5eXZh
bC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDEwMjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS50eXBlKTsKKworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpLmFycmF5KSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xh
c3MgYXJyYXkiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOworICAg
ICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwMzoKKworICAgIHsKKyAgICAg
ICAgaWYgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5hcnJheSkgeworICAgICAgICAg
ICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUsICJu
b3Qgc3VwcG9ydGVkIiwgImZpcnN0LWNsYXNzIGFycmF5IiwgIiIpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGUpLnNldEFycmF5KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoeXl2c3BbKDEp
IC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyID09IEV2cUF0dHJpYnV0ZSAmJgorICAgICAg
ICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEJvb2wgfHwg
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkgeworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmxpbmUs
ICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKCh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ0luIHx8ICh5eXZzcFsoMSkgLSAoMild
LmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxVmFyeWluZ091dCkgJiYKKyAgICAgICAgICAg
ICgoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRCb29sIHx8ICh5eXZz
cFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVidEludCkpIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS5saW5lLCAiY2Fu
bm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMild
LmludGVybS50eXBlKS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9ICh5eXZzcFso
MikgLSAoMildLmludGVybS50eXBlKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5xdWFs
aWZpZXIgPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyOworICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQ29uc3QsICh5eXZzcFsoMSkgLSAoMSldLmxl
eCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwNToKKworICAgIHsKKyAg
ICAgICAgVkVSVEVYX09OTFkoImF0dHJpYnV0ZSIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZSk7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAo
MSldLmxleCkubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAiYXR0
cmlidXRlIikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxQXR0cmlidXRlLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDY6CisK
KyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpLCAi
dmFyeWluZyIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAo
Y29udGV4dC0+c2hhZGVyVHlwZSA9PSBTSF9WRVJURVhfU0hBREVSKQorICAgICAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlpbmdJbiwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTA3OgorCisg
ICAgeworICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0g
KDIpXS5sZXgpLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImlu
dmFyaWFudCB2YXJ5aW5nIikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cUludmFyaWFudFZh
cnlpbmdPdXQsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJp
YW50VmFyeWluZ0luLCAoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMDg6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9i
YWxFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpLCAidW5pZm9ybSIpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQs
IEV2cVVuaWZvcm0sICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDEwOToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBl
KSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKTsKKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTEwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnByZWNpc2lvbiA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5wcmVjaXNpb24pOworICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0ucHJlY2lzaW9uKSA9IEVicEhpZ2g7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEx
MjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTWVkaXVt
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTM6CisKKyAgICB7CisgICAgICAgICh5
eXZhbC5pbnRlcm0ucHJlY2lzaW9uKSA9IEVicExvdzsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTE0OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MTU6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0udHlwZSk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9y
Q2hlY2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0udHlwZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5
U2l6ZUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3BbKDMpIC0g
KDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCisgICAgICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBcnJh
eSh0cnVlLCBzaXplKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
MTY6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBxdWFsLCAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTc6CisKKyAg
ICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xv
YmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTE4OgorCisgICAgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTk6CisKKyAgICB7CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUds
b2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNp
YyhFYnRCb29sLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMjA6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9h
dCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDEyMToKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAg
ICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3Jl
Z2F0ZSgzKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTIyOgorCisgICAgeworICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlw
ZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMjM6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29s
LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2Ug
MTI0OgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdh
dGUoMyk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEyNToKKworICAgIHsKKyAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgp
ID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUp
LnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMjY6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1
YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjc6
CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDMp
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjg6CisKKyAgICB7CisgICAgICAgIFRR
dWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRC
YXNpYyhFYnRJbnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDQpOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxMjk6CisKKyAgICB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJtYXQyIiwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBx
dWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEFnZ3JlZ2F0ZSgyLCB0cnVlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgMTMwOgorCisgICAgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgibWF0MyIsICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEzMToK
KworICAgIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoIm1hdDQiLCAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVn
YXRlKDQsIHRydWUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzI6CisKKyAgICB7
CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyMkQiLCAoeXl2c3BbKDEpIC0gKDEpXS5s
ZXgpLmxpbmUpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCAoeXl2c3BbKDEp
IC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzM6CisK
KyAgICB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyQ3ViZSIsICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyQ3ViZSwgcXVhbCwg
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgMTM0OgorCisgICAgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgic3RydWN0IiwgKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnF1YWxpZmllciA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgMTM1OgorCisgICAgeworICAgICAgICAvLworICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2Vy
IGRlZmluZWQgdHlwZSBuYW1lcy4gIFRoZSBsZXhpY2FsIHBoYXNlIGxvb2tlZCB1cCB0aGUKKyAg
ICAgICAgLy8gdHlwZS4KKyAgICAgICAgLy8KKyAgICAgICAgVFR5cGUmIHN0cnVjdHVyZSA9IHN0
YXRpY19jYXN0PFRWYXJpYWJsZSo+KCh5eXZzcFsoMSkgLSAoMSldLmxleCkuc3ltYm9sKS0+Z2V0
VHlwZSgpOworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEp
XS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnVzZXJEZWYgPSAmc3Ry
dWN0dXJlOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMzY6CisKKyAgICB7CisgICAg
ICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg1KV0ubGV4
KS5saW5lLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIFRUeXBlKiBzdHJ1Y3R1cmUgPSBuZXcgVFR5cGUo
KHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLnR5cGVMaXN0KSwgKih5eXZzcFsoMikgLSAoNSldLmxl
eCkuc3RyaW5nKTsKKyAgICAgICAgVFZhcmlhYmxlKiB1c2VyVHlwZURlZiA9IG5ldyBUVmFyaWFi
bGUoKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICpzdHJ1Y3R1cmUsIHRydWUpOworICAg
ICAgICBpZiAoISBjb250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnVzZXJUeXBlRGVmKSkgewor
ICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lLCAi
cmVkZWZpbml0aW9uIiwgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICJz
dHJ1Y3QiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFN0cnVjdCwgRXZxVGVtcG9yYXJ5
LCAoeXl2c3BbKDEpIC0gKDUpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnVzZXJEZWYgPSBzdHJ1Y3R1cmU7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEz
NzoKKworICAgIHsKKyAgICAgICAgVFR5cGUqIHN0cnVjdHVyZSA9IG5ldyBUVHlwZSgoeXl2c3Bb
KDMpIC0gKDQpXS5pbnRlcm0udHlwZUxpc3QpLCBUU3RyaW5nKCIiKSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksICh5eXZzcFso
MSkgLSAoNCldLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkudXNlckRl
ZiA9IHN0cnVjdHVyZTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTM4OgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS50eXBlTGlzdCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEzOToKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS5p
bnRlcm0udHlwZUxpc3QpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8ICh5
eXZzcFsoMikgLSAoMildLmludGVybS50eXBlTGlzdCktPnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8ICh5eXZhbC5pbnRlcm0udHlwZUxpc3Qp
LT5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgIGlmICgoKih5eXZhbC5pbnRlcm0udHlw
ZUxpc3QpKVtqXS50eXBlLT5nZXRGaWVsZE5hbWUoKSA9PSAoKih5eXZzcFsoMikgLSAoMildLmlu
dGVybS50eXBlTGlzdCkpW2ldLnR5cGUtPmdldEZpZWxkTmFtZSgpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCgqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0
KSlbaV0ubGluZSwgImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0
IiwgKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZUxpc3QpKVtpXS50eXBlLT5nZXRGaWVs
ZE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0udHlwZUxpc3QpLT5wdXNoX2JhY2soKCooeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlw
ZUxpc3QpKVtpXSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQw
OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9ICh5eXZzcFsoMikg
LSAoMyldLmludGVybS50eXBlTGlzdCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJv
ckNoZWNrKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5saW5lLCAoKih5eXZzcFsoMikg
LSAoMyldLmludGVybS50eXBlTGlzdCkpWzBdLnR5cGUtPmdldEZpZWxkTmFtZSgpLCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCAoeXl2
YWwuaW50ZXJtLnR5cGVMaXN0KS0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAvLyBDYXJlZnVsIG5vdCB0byByZXBsYWNlIGFscmVhZHkga25vd24gYXNwZWN0cyBv
ZiB0eXBlLCBsaWtlIGFycmF5LW5lc3MKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBUVHlw
ZSogdHlwZSA9ICgqKHl5dmFsLmludGVybS50eXBlTGlzdCkpW2ldLnR5cGU7CisgICAgICAgICAg
ICB0eXBlLT5zZXRCYXNpY1R5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnR5cGUp
OworICAgICAgICAgICAgdHlwZS0+c2V0Tm9taW5hbFNpemUoKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLnR5cGUpLnNpemUpOworICAgICAgICAgICAgdHlwZS0+c2V0TWF0cml4KCh5eXZzcFsoMSkg
LSAoMyldLmludGVybS50eXBlKS5tYXRyaXgpOworCisgICAgICAgICAgICAvLyBkb24ndCBhbGxv
dyBhcnJheXMgb2YgYXJyYXlzCisgICAgICAgICAgICBpZiAodHlwZS0+aXNBcnJheSgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLnR5cGUpLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkuYXJyYXkp
CisgICAgICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS50eXBlKS5hcnJheVNpemUpOworICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyld
LmludGVybS50eXBlKS51c2VyRGVmKSB7CisgICAgICAgICAgICAgICAgdHlwZS0+c2V0U3RydWN0
KCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS51c2VyRGVmLT5nZXRTdHJ1Y3QoKSk7Cisg
ICAgICAgICAgICAgICAgdHlwZS0+c2V0VHlwZU5hbWUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LnR5cGUpLnVzZXJEZWYtPmdldFR5cGVOYW1lKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE0MToKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlTGlzdCkgPSBOZXdQb29sVFR5cGVMaXN0KCk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZUxpc3QpLT5wdXNoX2JhY2soKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5
cGVMaW5lKSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE0MjoKKworICAgIHsKKyAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDMpIC0gKDMp
XS5pbnRlcm0udHlwZUxpbmUpKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQzOgor
CisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZSwgKih5eXZzcFsoMSkgLSAoMSldLmxleCkuc3RyaW5nKSkKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGVMaW5lKS50eXBlID0gbmV3IFRUeXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmU7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUtPnNldEZpZWxkTmFtZSgq
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxNDQ6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hl
Y2soKHl5dnNwWygxKSAtICg0KV0ubGV4KS5saW5lLCAqKHl5dnNwWygxKSAtICg0KV0ubGV4KS5z
dHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZUxpbmUpLnR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVk
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGluZSkubGluZSA9ICh5eXZzcFsoMSkgLSAo
NCldLmxleCkubGluZTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGluZSkudHlwZS0+c2V0
RmllbGROYW1lKCooeXl2c3BbKDEpIC0gKDQpXS5sZXgpLnN0cmluZyk7CisKKyAgICAgICAgaW50
IHNpemU7CisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eXZzcFso
MikgLSAoNCldLmxleCkubGluZSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksIHNpemUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAo
eXl2YWwuaW50ZXJtLnR5cGVMaW5lKS50eXBlLT5zZXRBcnJheVNpemUoc2l6ZSk7CisgICAgO30K
KyAgICBicmVhazsKKworICBjYXNlIDE0NToKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNDY6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7IDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNDc6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAo
eXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsgO30KKyAgICBicmVhazsK
KworICBjYXNlIDE0ODoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNl
IDE0OToKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAo
MSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE1MDoKKwor
ICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bS5pbnRlcm1Ob2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE1MToKKworICAgIHsgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1O
b2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE1MjoKKworICAgIHsgKHl5dmFsLmludGVy
bS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30K
KyAgICBicmVhazsKKworICBjYXNlIDE1MzoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsgO30KKyAgICBicmVh
azsKKworICBjYXNlIDE1NDoKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1BZ2dyZWdhdGUp
ID0gMDsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE1NToKKworICAgIHsgY29udGV4dC0+c3lt
Ym9sVGFibGUucHVzaCgpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU2OgorCisgICAgeyBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE1NzoK
KworICAgIHsKKyAgICAgICAgaWYgKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1BZ2dy
ZWdhdGUpICE9IDApCisgICAgICAgICAgICAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJt
QWdncmVnYXRlKS0+c2V0T3AoRU9wU2VxdWVuY2UpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybUFnZ3JlZ2F0ZSkgPSAoeXl2c3BbKDMpIC0gKDUpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRl
KTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU4OgorCisgICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU5OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTYwOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gMDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTYxOgorCisgICAgewor
ICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkpCisg
ICAgICAgICAgICAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKS0+c2V0
T3AoRU9wU2VxdWVuY2UpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5
dnNwWygyKSAtICgzKV0uaW50ZXJtLmludGVybUFnZ3JlZ2F0ZSk7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDE2MjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1B
Z2dyZWdhdGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpLCAwKTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTYzOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybUFnZ3JlZ2F0
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVy
bU5vZGUpLCAwKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTY0OgorCisgICAgeyAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gMDsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE2
NToKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IHN0YXRpY19jYXN0PFRJbnRl
cm1Ob2RlKj4oKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkpOyA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTY2OgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+
Ym9vbEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDMpIC0g
KDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU2VsZWN0aW9uKCh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0ubm9kZVBhaXIpLCAoeXl2c3BbKDEpIC0g
KDUpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjc6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWly
KS5ub2RlMiA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTY4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJt
Lm5vZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAwOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxNjk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OworICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldExpbmUoKSwgKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzA6CisKKyAgICB7CisgICAgICAgIFRJbnRl
cm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVy
RXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNCld
LmludGVybS50eXBlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUs
ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKCFjb250ZXh0LT5leGVjdXRlSW5pdGlhbGl6ZXIoKHl5
dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcs
ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSwgKHl5dnNwWyg0KSAtICg0KV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSksIGludGVybU5vZGUpKQorICAgICAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWyg0KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKKyAgICAgICAg
fQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzE6CisKKyAgICB7IGNvbnRleHQtPnN5
bWJvbFRhYmxlLnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTcyOgorCisgICAgeworICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJs
ZS5wb3AoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRMb29wKEVMb29wV2hpbGUsIDAsICh5eXZzcFsoNCkgLSAoNildLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAwLCAoeXl2c3BbKDYpIC0gKDYpXS5pbnRlcm0uaW50ZXJtTm9k
ZSksICh5eXZzcFsoMSkgLSAoNildLmxleCkubGluZSk7CisgICAgICAgIC0tY29udGV4dC0+bG9v
cE5lc3RpbmdMZXZlbDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTczOgorCisgICAg
eyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
NzQ6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXl2c3Bb
KDgpIC0gKDgpXS5sZXgpLmxpbmUsICh5eXZzcFsoNikgLSAoOCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxv
b3BEb1doaWxlLCAwLCAoeXl2c3BbKDYpIC0gKDgpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwg
MCwgKHl5dnNwWygzKSAtICg4KV0uaW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDQpIC0gKDgp
XS5sZXgpLmxpbmUpOworICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDE3NToKKworICAgIHsgY29udGV4dC0+c3ltYm9sVGFi
bGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxNzY6CisKKyAgICB7CisgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZExvb3AoRUxvb3BGb3IsICh5eXZzcFsoNCkgLSAoNyldLmludGVybS5pbnRlcm1Ob2Rl
KSwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2c3BbKDUpIC0gKDcpXS5pbnRl
cm0ubm9kZVBhaXIpLm5vZGUxKSwgcmVpbnRlcnByZXRfY2FzdDxUSW50ZXJtVHlwZWQqPigoeXl2
c3BbKDUpIC0gKDcpXS5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyKSwgKHl5dnNwWyg3KSAtICg3KV0u
aW50ZXJtLmludGVybU5vZGUpLCAoeXl2c3BbKDEpIC0gKDcpXS5sZXgpLmxpbmUpOworICAgICAg
ICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDE3NzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9ICh5
eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTc4OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxNzk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODA6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IDA7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDE4MToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEg
PSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgKHl5
dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAwOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxODI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUx
ID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE4MzoKKworICAg
IHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPD0gMCkgeworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiY29udGlu
dWUgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQ29udGludWUs
ICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDE4NDoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwg
PD0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4
KS5saW5lLCAiYnJlYWsgc3RhdGVtZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2go
RU9wQnJlYWssICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDE4NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAoeXl2c3Bb
KDEpIC0gKDIpXS5sZXgpLmxpbmUpOworICAgICAgICBpZiAoY29udGV4dC0+Y3VycmVudEZ1bmN0
aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgY29udGV4
dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAibm9uLXZvaWQgZnVuY3Rpb24g
bXVzdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTg2
OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICh5eXZzcFsoMikgLSAoMyldLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAg
ICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IHRydWU7CisgICAgICAgIGlmIChjb250
ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRWb2lkKSB7Cisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJ2
b2lkIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIsICJyZXR1cm4iLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0gZWxzZSBpZiAoKihjb250ZXh0
LT5jdXJyZW50RnVuY3Rpb25UeXBlKSAhPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0VHlwZSgpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDMpXS5sZXgpLmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5n
IHR5cGU6IiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODc6CisKKyAgICB7Cisg
ICAgICAgIEZSQUdfT05MWSgiZGlzY2FyZCIsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7
CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQnJhbmNoKEVPcEtpbGwsICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDE4ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsK
KyAgICAgICAgY29udGV4dC0+dHJlZVJvb3QgPSAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpOwor
ICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxODk6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoMikgLSAoMild
LmludGVybS5pbnRlcm1Ob2RlKSwgMCk7CisgICAgICAgIGNvbnRleHQtPnRyZWVSb290ID0gKHl5
dmFsLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTkw
OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxOTE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDE5MjoKKworICAgIHsKKyAgICAgICAgVEZ1bmN0aW9uKiBmdW5jdGlvbiA9ICh5eXZz
cFsoMSkgLSAoMSldLmludGVybSkuZnVuY3Rpb247CisgICAgICAgIFRGdW5jdGlvbiogcHJldkRl
YyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQoZnVu
Y3Rpb24tPmdldE1hbmdsZWROYW1lKCkpKTsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gTm90ZTog
ICdwcmV2RGVjJyBjb3VsZCBiZSAnZnVuY3Rpb24nIGlmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUg
d2UndmUgc2VlbiBmdW5jdGlvbgorICAgICAgICAvLyBhcyBpdCB3b3VsZCBoYXZlIGp1c3QgYmVl
biBwdXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4gIE90aGVyd2lzZSwgd2UncmUgbG9va2luZyB1cAor
ICAgICAgICAvLyBhbiBlYXJsaWVyIG9jY3VyYW5jZS4KKyAgICAgICAgLy8KKyAgICAgICAgaWYg
KHByZXZEZWMtPmlzRGVmaW5lZCgpKSB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
VGhlbiB0aGlzIGZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keS4KKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUs
ICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAg
ICAgICBwcmV2RGVjLT5zZXREZWZpbmVkKCk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gUmFp
c2UgZXJyb3IgbWVzc2FnZSBpZiBtYWluIGZ1bmN0aW9uIHRha2VzIGFueSBwYXJhbWV0ZXJzIG9y
IHJldHVybiBhbnl0aGluZyBvdGhlciB0aGFuIHZvaWQKKyAgICAgICAgLy8KKyAgICAgICAgaWYg
KGZ1bmN0aW9uLT5nZXROYW1lKCkgPT0gIm1haW4iKSB7CisgICAgICAgICAgICBpZiAoZnVuY3Rp
b24tPmdldFBhcmFtQ291bnQoKSA+IDApIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBh
bnkgcGFyYW1ldGVyKHMpIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Vm9p
ZCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybSkubGluZSwgIiIsIGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmco
KSwgIm1haW4gZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIik7CisgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gTmV3IHN5bWJvbCB0YWJsZSBzY29wZSBmb3IgYm9keSBvZiBmdW5j
dGlvbiBwbHVzIGl0cyBhcmd1bWVudHMKKyAgICAgICAgLy8KKyAgICAgICAgY29udGV4dC0+c3lt
Ym9sVGFibGUucHVzaCgpOworCisgICAgICAgIC8vCisgICAgICAgIC8vIFJlbWVtYmVyIHRoZSBy
ZXR1cm4gdHlwZSBmb3IgbGF0ZXIgY2hlY2tpbmcgZm9yIFJFVFVSTiBzdGF0ZW1lbnRzLgorICAg
ICAgICAvLworICAgICAgICBjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlID0gJihwcmV2RGVj
LT5nZXRSZXR1cm5UeXBlKCkpOworICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1
ZSA9IGZhbHNlOworCisgICAgICAgIC8vCisgICAgICAgIC8vIEluc2VydCBwYXJhbWV0ZXJzIGlu
dG8gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgLy8gSWYgdGhlIHBhcmFtZXRlciBoYXMgbm8g
bmFtZSwgaXQncyBub3QgYW4gZXJyb3IsIGp1c3QgZG9uJ3QgaW5zZXJ0IGl0CisgICAgICAgIC8v
IChjb3VsZCBiZSB1c2VkIGZvciB1bnVzZWQgYXJncykuCisgICAgICAgIC8vCisgICAgICAgIC8v
IEFsc28sIGFjY3VtdWxhdGUgdGhlIGxpc3Qgb2YgcGFyYW1ldGVycyBpbnRvIHRoZSBISUwsIHNv
IGxvd2VyIGxldmVsIGNvZGUKKyAgICAgICAgLy8ga25vd3Mgd2hlcmUgdG8gZmluZCBwYXJhbWV0
ZXJzLgorICAgICAgICAvLworICAgICAgICBUSW50ZXJtQWdncmVnYXRlKiBwYXJhbU5vZGVzID0g
bmV3IFRJbnRlcm1BZ2dyZWdhdGU7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVuY3Rp
b24tPmdldFBhcmFtQ291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBUUGFyYW1ldGVy
JiBwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJhbShpKTsKKyAgICAgICAgICAgIGlmIChwYXJhbS5u
YW1lICE9IDApIHsKKyAgICAgICAgICAgICAgICBUVmFyaWFibGUgKnZhcmlhYmxlID0gbmV3IFRW
YXJpYWJsZShwYXJhbS5uYW1lLCAqcGFyYW0udHlwZSk7CisgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1lIGluIHRoZSBz
eW1ib2wgdGFibGUuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICBpZiAoISBj
b250ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUsICJyZWRl
ZmluaXRpb24iLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICBkZWxldGUg
dmFyaWFibGU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFtZXRlciB0byB0aGUgSElMCisgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
Lmdyb3dBZ2dyZWdhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcmFtTm9kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wodmFyaWFibGUtPmdldFVu
aXF1ZUlkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLT5nZXROYW1lKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhcmlhYmxlLT5nZXRUeXBlKCksICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZzcFso
MSkgLSAoMSldLmludGVybSkubGluZSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShw
YXJhbU5vZGVzLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCAqcGFyYW0u
dHlwZSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lKSwgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtKS5saW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IocGFyYW1Ob2RlcywgRU9wUGFyYW1l
dGVycywgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lKTsKKyAgICAgICAgKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJhbU5vZGVzOworICAgICAgICBj
b250ZXh0LT5sb29wTmVzdGluZ0xldmVsID0gMDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgMTkzOgorCisgICAgeworICAgICAgICAvLz8/IENoZWNrIHRoYXQgYWxsIHBhdGhzIHJldHVy
biBhIHZhbHVlIGlmIHJldHVybiB0eXBlICE9IHZvaWQgPworICAgICAgICAvLyAgIE1heSBiZSBi
ZXN0IGRvbmUgYXMgcG9zdCBwcm9jZXNzIHBoYXNlIG9uIGludGVybWVkaWF0ZSBjb2RlCisgICAg
ICAgIGlmIChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBF
YnRWb2lkICYmICEgY29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUpIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkubGluZSwgImZ1bmN0aW9u
IGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0p
LmZ1bmN0aW9uLT5nZXROYW1lKCkuY19zdHIoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7Cisg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
Z3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSwg
KHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybU5vZGUpLCAwKTsKKyAgICAgICAgY29udGV4
dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCh5eXZhbC5pbnRlcm0uaW50ZXJt
Tm9kZSksIEVPcEZ1bmN0aW9uLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmxpbmUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXROYW1l
KCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkuY19z
dHIoKSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRl
KCktPnNldFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+Z2V0UmV0dXJu
VHlwZSgpKTsKKworICAgICAgICAvLyBzdG9yZSB0aGUgcHJhZ21hIGluZm9ybWF0aW9uIGZvciBk
ZWJ1ZyBhbmQgb3B0aW1pemUgYW5kIG90aGVyIHZlbmRvciBzcGVjaWZpYworICAgICAgICAvLyBp
bmZvcm1hdGlvbi4gVGhpcyBpbmZvcm1hdGlvbiBjYW4gYmUgcXVlcmllZCBmcm9tIHRoZSBwYXJz
ZSB0cmVlCisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRl
KCktPnNldE9wdGltaXplKGNvbnRleHQtPmNvbnRleHRQcmFnbWEub3B0aW1pemUpOworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1Zyhj
b250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+YWRkVG9QcmFnbWFUYWJsZShjb250ZXh0LT5jb250
ZXh0UHJhZ21hLnByYWdtYVRhYmxlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisKKy8qIExpbmUg
MTI2NyBvZiB5YWNjLmMuICAqLworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgIFlZ
X1NZTUJPTF9QUklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKKwor
ICBZWVBPUFNUQUNLICh5eWxlbik7CisgIHl5bGVuID0gMDsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5
c3MsIHl5c3NwKTsKKworICAqKyt5eXZzcCA9IHl5dmFsOworCisKKyAgLyogTm93IGBzaGlmdCcg
dGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uLiAgRGV0ZXJtaW5lIHdoYXQgc3RhdGUKKyAgICAg
dGhhdCBnb2VzIHRvLCBiYXNlZCBvbiB0aGUgc3RhdGUgd2UgcG9wcGVkIGJhY2sgdG8gYW5kIHRo
ZSBydWxlCisgICAgIG51bWJlciByZWR1Y2VkIGJ5LiAgKi8KKworICB5eW4gPSB5eXIxW3l5bl07
CisKKyAgeXlzdGF0ZSA9IHl5cGdvdG9beXluIC0gWVlOVE9LRU5TXSArICp5eXNzcDsKKyAgaWYg
KDAgPD0geXlzdGF0ZSAmJiB5eXN0YXRlIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5c3RhdGVdID09
ICp5eXNzcCkKKyAgICB5eXN0YXRlID0geXl0YWJsZVt5eXN0YXRlXTsKKyAgZWxzZQorICAgIHl5
c3RhdGUgPSB5eWRlZmdvdG9beXluIC0gWVlOVE9LRU5TXTsKKworICBnb3RvIHl5bmV3c3RhdGU7
CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFi
IC0tIGhlcmUgb24gZGV0ZWN0aW5nIGVycm9yIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0qLworeXllcnJsYWI6CisgIC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcg
ZnJvbSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuICAqLworICBpZiAoIXl5ZXJyc3RhdHVz
KQorICAgIHsKKyAgICAgICsreXluZXJyczsKKyNpZiAhIFlZRVJST1JfVkVSQk9TRQorICAgICAg
eXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7CisjZWxzZQorICAgICAgewor
CVlZU0laRV9UIHl5c2l6ZSA9IHl5c3ludGF4X2Vycm9yICgwLCB5eXN0YXRlLCB5eWNoYXIpOwor
CWlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5eW1zZ19hbGxvYyA8IFlZU1RBQ0tfQUxMT0Nf
TUFYSU1VTSkKKwkgIHsKKwkgICAgWVlTSVpFX1QgeXlhbGxvYyA9IDIgKiB5eXNpemU7CisJICAg
IGlmICghICh5eXNpemUgPD0geXlhbGxvYyAmJiB5eWFsbG9jIDw9IFlZU1RBQ0tfQUxMT0NfTUFY
SU1VTSkpCisJICAgICAgeXlhbGxvYyA9IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTTsKKwkgICAgaWYg
KHl5bXNnICE9IHl5bXNnYnVmKQorCSAgICAgIFlZU1RBQ0tfRlJFRSAoeXltc2cpOworCSAgICB5
eW1zZyA9IChjaGFyICopIFlZU1RBQ0tfQUxMT0MgKHl5YWxsb2MpOworCSAgICBpZiAoeXltc2cp
CisJICAgICAgeXltc2dfYWxsb2MgPSB5eWFsbG9jOworCSAgICBlbHNlCisJICAgICAgeworCQl5
eW1zZyA9IHl5bXNnYnVmOworCQl5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKKwkgICAg
ICB9CisJICB9CisKKwlpZiAoMCA8IHl5c2l6ZSAmJiB5eXNpemUgPD0geXltc2dfYWxsb2MpCisJ
ICB7CisJICAgICh2b2lkKSB5eXN5bnRheF9lcnJvciAoeXltc2csIHl5c3RhdGUsIHl5Y2hhcik7
CisJICAgIHl5ZXJyb3IgKGNvbnRleHQsIHl5bXNnKTsKKwkgIH0KKwllbHNlCisJICB7CisJICAg
IHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yIikpOworCSAgICBpZiAoeXlzaXpl
ICE9IDApCisJICAgICAgZ290byB5eWV4aGF1c3RlZGxhYjsKKwkgIH0KKyAgICAgIH0KKyNlbmRp
ZgorICAgIH0KKworCisKKyAgaWYgKHl5ZXJyc3RhdHVzID09IDMpCisgICAgeworICAgICAgLyog
SWYganVzdCB0cmllZCBhbmQgZmFpbGVkIHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIg
YW4KKwkgZXJyb3IsIGRpc2NhcmQgaXQuICAqLworCisgICAgICBpZiAoeXljaGFyIDw9IFlZRU9G
KQorCXsKKwkgIC8qIFJldHVybiBmYWlsdXJlIGlmIGF0IGVuZCBvZiBpbnB1dC4gICovCisJICBp
ZiAoeXljaGFyID09IFlZRU9GKQorCSAgICBZWUFCT1JUOworCX0KKyAgICAgIGVsc2UKKwl7CisJ
ICB5eWRlc3RydWN0ICgiRXJyb3I6IGRpc2NhcmRpbmciLAorCQkgICAgICB5eXRva2VuLCAmeXls
dmFsLCBjb250ZXh0KTsKKwkgIHl5Y2hhciA9IFlZRU1QVFk7CisJfQorICAgIH0KKworICAvKiBF
bHNlIHdpbGwgdHJ5IHRvIHJldXNlIGxvb2stYWhlYWQgdG9rZW4gYWZ0ZXIgc2hpZnRpbmcgdGhl
IGVycm9yCisgICAgIHRva2VuLiAgKi8KKyAgZ290byB5eWVycmxhYjE7CisKKworLyotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJyb3Js
YWIgLS0gZXJyb3IgcmFpc2VkIGV4cGxpY2l0bHkgYnkgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXllcnJvcmxhYjoK
KworICAvKiBQYWNpZnkgY29tcGlsZXJzIGxpa2UgR0NDIHdoZW4gdGhlIHVzZXIgY29kZSBuZXZl
ciBpbnZva2VzCisgICAgIFlZRVJST1IgYW5kIHRoZSBsYWJlbCB5eWVycm9ybGFiIHRoZXJlZm9y
ZSBuZXZlciBhcHBlYXJzIGluIHVzZXIKKyAgICAgY29kZS4gICovCisgIGlmICgvKkNPTlNUQ09O
RCovIDApCisgICAgIGdvdG8geXllcnJvcmxhYjsKKworICAvKiBEbyBub3QgcmVjbGFpbSB0aGUg
c3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCisgICAgIHRoaXMgWVlF
UlJPUi4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAwOworICBZWV9TVEFD
S19QUklOVCAoeXlzcywgeXlzc3ApOworICB5eXN0YXRlID0gKnl5c3NwOworICBnb3RvIHl5ZXJy
bGFiMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0uCit8IHl5ZXJybGFiMSAtLSBjb21tb24gY29kZSBmb3IgYm90aCBz
eW50YXggZXJyb3IgYW5kIFlZRVJST1IuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjE6CisgIHl5ZXJy
c3RhdHVzID0gMzsJLyogRWFjaCByZWFsIHRva2VuIHNoaWZ0ZWQgZGVjcmVtZW50cyB0aGlzLiAg
Ki8KKworICBmb3IgKDs7KQorICAgIHsKKyAgICAgIHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKKyAg
ICAgIGlmICh5eW4gIT0gWVlQQUNUX05JTkYpCisJeworCSAgeXluICs9IFlZVEVSUk9SOworCSAg
aWYgKDAgPD0geXluICYmIHl5biA8PSBZWUxBU1QgJiYgeXljaGVja1t5eW5dID09IFlZVEVSUk9S
KQorCSAgICB7CisJICAgICAgeXluID0geXl0YWJsZVt5eW5dOworCSAgICAgIGlmICgwIDwgeXlu
KQorCQlicmVhazsKKwkgICAgfQorCX0KKworICAgICAgLyogUG9wIHRoZSBjdXJyZW50IHN0YXRl
IGJlY2F1c2UgaXQgY2Fubm90IGhhbmRsZSB0aGUgZXJyb3IgdG9rZW4uICAqLworICAgICAgaWYg
KHl5c3NwID09IHl5c3MpCisJWVlBQk9SVDsKKworCisgICAgICB5eWRlc3RydWN0ICgiRXJyb3I6
IHBvcHBpbmciLAorCQkgIHl5c3Rvc1t5eXN0YXRlXSwgeXl2c3AsIGNvbnRleHQpOworICAgICAg
WVlQT1BTVEFDSyAoMSk7CisgICAgICB5eXN0YXRlID0gKnl5c3NwOworICAgICAgWVlfU1RBQ0tf
UFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgICB9CisKKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorICAg
IFlZQUNDRVBUOworCisgICorK3l5dnNwID0geXlsdmFsOworCisKKyAgLyogU2hpZnQgdGhlIGVy
cm9yIHRva2VuLiAgKi8KKyAgWVlfU1lNQk9MX1BSSU5UICgiU2hpZnRpbmciLCB5eXN0b3NbeXlu
XSwgeXl2c3AsIHl5bHNwKTsKKworICB5eXN0YXRlID0geXluOworICBnb3RvIHl5bmV3c3RhdGU7
CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWFjY2Vw
dGxhYiAtLSBZWUFDQ0VQVCBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworeXlhY2NlcHRsYWI6CisgIHl5cmVzdWx0ID0gMDsKKyAgZ290byB5
eXJldHVybjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlh
Ym9ydGxhYiAtLSBZWUFCT1JUIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLworeXlhYm9ydGxhYjoKKyAgeXlyZXN1bHQgPSAxOworICBnb3RvIHl5
cmV0dXJuOworCisjaWZuZGVmIHl5b3ZlcmZsb3cKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlleGhhdXN0ZWRsYWIgLS0gbWVtb3J5IGV4
aGF1c3Rpb24gY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXhoYXVzdGVkbGFiOgorICB5eWVycm9yIChjb250ZXh0
LCBZWV8oIm1lbW9yeSBleGhhdXN0ZWQiKSk7CisgIHl5cmVzdWx0ID0gMjsKKyAgLyogRmFsbCB0
aHJvdWdoLiAgKi8KKyNlbmRpZgorCit5eXJldHVybjoKKyAgaWYgKHl5Y2hhciAhPSBZWUVPRiAm
JiB5eWNoYXIgIT0gWVlFTVBUWSkKKyAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2NhcmRp
bmcgbG9va2FoZWFkIiwKKwkJIHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOworICAvKiBEbyBu
b3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVk
CisgICAgIHRoaXMgWVlBQk9SVCBvciBZWUFDQ0VQVC4gICovCisgIFlZUE9QU1RBQ0sgKHl5bGVu
KTsKKyAgWVlfU1RBQ0tfUFJJTlQgKHl5c3MsIHl5c3NwKTsKKyAgd2hpbGUgKHl5c3NwICE9IHl5
c3MpCisgICAgeworICAgICAgeXlkZXN0cnVjdCAoIkNsZWFudXA6IHBvcHBpbmciLAorCQkgIHl5
c3Rvc1sqeXlzc3BdLCB5eXZzcCwgY29udGV4dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAg
ICB9CisjaWZuZGVmIHl5b3ZlcmZsb3cKKyAgaWYgKHl5c3MgIT0geXlzc2EpCisgICAgWVlTVEFD
S19GUkVFICh5eXNzKTsKKyNlbmRpZgorI2lmIFlZRVJST1JfVkVSQk9TRQorICBpZiAoeXltc2cg
IT0geXltc2didWYpCisgICAgWVlTVEFDS19GUkVFICh5eW1zZyk7CisjZW5kaWYKKyAgLyogTWFr
ZSBzdXJlIFlZSUQgaXMgdXNlZC4gICovCisgIHJldHVybiBZWUlEICh5eXJlc3VsdCk7Cit9CisK
KworCisKKworaW50IGdsc2xhbmdfcGFyc2UoVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworICAg
IHJldHVybiB5eXBhcnNlKGNvbnRleHQpOworfQorCisKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjc0IEBACisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBH
TlUgQmlzb24gMi4zLiAgKi8KKworLyogU2tlbGV0b24gaW50ZXJmYWNlIGZvciBCaXNvbidzIFlh
Y2MtbGlrZSBwYXJzZXJzIGluIEMKKworICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkw
LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CisgICBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg
ICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQg
eW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAq
LworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxhcmdlciB3
b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJzZXIgc2tl
bGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRlciB0ZXJtcyBvZiB5b3VyIGNo
b2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKKyAgIHBhcnNlciBnZW5l
cmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVyZW9mCisg
ICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2RpZnkgb3Ig
cmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1heSAoYXQg
eW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hpY2ggd2ls
bCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKKyAgIEJpc29uIG91dHB1dCBm
aWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgICBMaWNl
bnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKworICAgVGhpcyBzcGVjaWFsIGV4
Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBpbgorICAg
dmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisvKiBUb2tlbnMuICAqLworI2lmbmRlZiBZWVRP
S0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZUEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5zIGludG8g
dGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2VycworICAgICAg
a25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVudW0geXl0b2tlbnR5cGUgeworICAgICBJTlZBUklB
TlQgPSAyNTgsCisgICAgIEhJR0hfUFJFQ0lTSU9OID0gMjU5LAorICAgICBNRURJVU1fUFJFQ0lT
SU9OID0gMjYwLAorICAgICBMT1dfUFJFQ0lTSU9OID0gMjYxLAorICAgICBQUkVDSVNJT04gPSAy
NjIsCisgICAgIEFUVFJJQlVURSA9IDI2MywKKyAgICAgQ09OU1RfUVVBTCA9IDI2NCwKKyAgICAg
Qk9PTF9UWVBFID0gMjY1LAorICAgICBGTE9BVF9UWVBFID0gMjY2LAorICAgICBJTlRfVFlQRSA9
IDI2NywKKyAgICAgQlJFQUsgPSAyNjgsCisgICAgIENPTlRJTlVFID0gMjY5LAorICAgICBETyA9
IDI3MCwKKyAgICAgRUxTRSA9IDI3MSwKKyAgICAgRk9SID0gMjcyLAorICAgICBJRiA9IDI3MywK
KyAgICAgRElTQ0FSRCA9IDI3NCwKKyAgICAgUkVUVVJOID0gMjc1LAorICAgICBCVkVDMiA9IDI3
NiwKKyAgICAgQlZFQzMgPSAyNzcsCisgICAgIEJWRUM0ID0gMjc4LAorICAgICBJVkVDMiA9IDI3
OSwKKyAgICAgSVZFQzMgPSAyODAsCisgICAgIElWRUM0ID0gMjgxLAorICAgICBWRUMyID0gMjgy
LAorICAgICBWRUMzID0gMjgzLAorICAgICBWRUM0ID0gMjg0LAorICAgICBNQVRSSVgyID0gMjg1
LAorICAgICBNQVRSSVgzID0gMjg2LAorICAgICBNQVRSSVg0ID0gMjg3LAorICAgICBJTl9RVUFM
ID0gMjg4LAorICAgICBPVVRfUVVBTCA9IDI4OSwKKyAgICAgSU5PVVRfUVVBTCA9IDI5MCwKKyAg
ICAgVU5JRk9STSA9IDI5MSwKKyAgICAgVkFSWUlORyA9IDI5MiwKKyAgICAgU1RSVUNUID0gMjkz
LAorICAgICBWT0lEX1RZUEUgPSAyOTQsCisgICAgIFdISUxFID0gMjk1LAorICAgICBTQU1QTEVS
MkQgPSAyOTYsCisgICAgIFNBTVBMRVJDVUJFID0gMjk3LAorICAgICBJREVOVElGSUVSID0gMjk4
LAorICAgICBUWVBFX05BTUUgPSAyOTksCisgICAgIEZMT0FUQ09OU1RBTlQgPSAzMDAsCisgICAg
IElOVENPTlNUQU5UID0gMzAxLAorICAgICBCT09MQ09OU1RBTlQgPSAzMDIsCisgICAgIEZJRUxE
X1NFTEVDVElPTiA9IDMwMywKKyAgICAgTEVGVF9PUCA9IDMwNCwKKyAgICAgUklHSFRfT1AgPSAz
MDUsCisgICAgIElOQ19PUCA9IDMwNiwKKyAgICAgREVDX09QID0gMzA3LAorICAgICBMRV9PUCA9
IDMwOCwKKyAgICAgR0VfT1AgPSAzMDksCisgICAgIEVRX09QID0gMzEwLAorICAgICBORV9PUCA9
IDMxMSwKKyAgICAgQU5EX09QID0gMzEyLAorICAgICBPUl9PUCA9IDMxMywKKyAgICAgWE9SX09Q
ID0gMzE0LAorICAgICBNVUxfQVNTSUdOID0gMzE1LAorICAgICBESVZfQVNTSUdOID0gMzE2LAor
ICAgICBBRERfQVNTSUdOID0gMzE3LAorICAgICBNT0RfQVNTSUdOID0gMzE4LAorICAgICBMRUZU
X0FTU0lHTiA9IDMxOSwKKyAgICAgUklHSFRfQVNTSUdOID0gMzIwLAorICAgICBBTkRfQVNTSUdO
ID0gMzIxLAorICAgICBYT1JfQVNTSUdOID0gMzIyLAorICAgICBPUl9BU1NJR04gPSAzMjMsCisg
ICAgIFNVQl9BU1NJR04gPSAzMjQsCisgICAgIExFRlRfUEFSRU4gPSAzMjUsCisgICAgIFJJR0hU
X1BBUkVOID0gMzI2LAorICAgICBMRUZUX0JSQUNLRVQgPSAzMjcsCisgICAgIFJJR0hUX0JSQUNL
RVQgPSAzMjgsCisgICAgIExFRlRfQlJBQ0UgPSAzMjksCisgICAgIFJJR0hUX0JSQUNFID0gMzMw
LAorICAgICBET1QgPSAzMzEsCisgICAgIENPTU1BID0gMzMyLAorICAgICBDT0xPTiA9IDMzMywK
KyAgICAgRVFVQUwgPSAzMzQsCisgICAgIFNFTUlDT0xPTiA9IDMzNSwKKyAgICAgQkFORyA9IDMz
NiwKKyAgICAgREFTSCA9IDMzNywKKyAgICAgVElMREUgPSAzMzgsCisgICAgIFBMVVMgPSAzMzks
CisgICAgIFNUQVIgPSAzNDAsCisgICAgIFNMQVNIID0gMzQxLAorICAgICBQRVJDRU5UID0gMzQy
LAorICAgICBMRUZUX0FOR0xFID0gMzQzLAorICAgICBSSUdIVF9BTkdMRSA9IDM0NCwKKyAgICAg
VkVSVElDQUxfQkFSID0gMzQ1LAorICAgICBDQVJFVCA9IDM0NiwKKyAgICAgQU1QRVJTQU5EID0g
MzQ3LAorICAgICBRVUVTVElPTiA9IDM0OAorICAgfTsKKyNlbmRpZgorLyogVG9rZW5zLiAgKi8K
KyNkZWZpbmUgSU5WQVJJQU5UIDI1OAorI2RlZmluZSBISUdIX1BSRUNJU0lPTiAyNTkKKyNkZWZp
bmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKKyNkZWZpbmUgTE9XX1BSRUNJU0lPTiAyNjEKKyNkZWZp
bmUgUFJFQ0lTSU9OIDI2MgorI2RlZmluZSBBVFRSSUJVVEUgMjYzCisjZGVmaW5lIENPTlNUX1FV
QUwgMjY0CisjZGVmaW5lIEJPT0xfVFlQRSAyNjUKKyNkZWZpbmUgRkxPQVRfVFlQRSAyNjYKKyNk
ZWZpbmUgSU5UX1RZUEUgMjY3CisjZGVmaW5lIEJSRUFLIDI2OAorI2RlZmluZSBDT05USU5VRSAy
NjkKKyNkZWZpbmUgRE8gMjcwCisjZGVmaW5lIEVMU0UgMjcxCisjZGVmaW5lIEZPUiAyNzIKKyNk
ZWZpbmUgSUYgMjczCisjZGVmaW5lIERJU0NBUkQgMjc0CisjZGVmaW5lIFJFVFVSTiAyNzUKKyNk
ZWZpbmUgQlZFQzIgMjc2CisjZGVmaW5lIEJWRUMzIDI3NworI2RlZmluZSBCVkVDNCAyNzgKKyNk
ZWZpbmUgSVZFQzIgMjc5CisjZGVmaW5lIElWRUMzIDI4MAorI2RlZmluZSBJVkVDNCAyODEKKyNk
ZWZpbmUgVkVDMiAyODIKKyNkZWZpbmUgVkVDMyAyODMKKyNkZWZpbmUgVkVDNCAyODQKKyNkZWZp
bmUgTUFUUklYMiAyODUKKyNkZWZpbmUgTUFUUklYMyAyODYKKyNkZWZpbmUgTUFUUklYNCAyODcK
KyNkZWZpbmUgSU5fUVVBTCAyODgKKyNkZWZpbmUgT1VUX1FVQUwgMjg5CisjZGVmaW5lIElOT1VU
X1FVQUwgMjkwCisjZGVmaW5lIFVOSUZPUk0gMjkxCisjZGVmaW5lIFZBUllJTkcgMjkyCisjZGVm
aW5lIFNUUlVDVCAyOTMKKyNkZWZpbmUgVk9JRF9UWVBFIDI5NAorI2RlZmluZSBXSElMRSAyOTUK
KyNkZWZpbmUgU0FNUExFUjJEIDI5NgorI2RlZmluZSBTQU1QTEVSQ1VCRSAyOTcKKyNkZWZpbmUg
SURFTlRJRklFUiAyOTgKKyNkZWZpbmUgVFlQRV9OQU1FIDI5OQorI2RlZmluZSBGTE9BVENPTlNU
QU5UIDMwMAorI2RlZmluZSBJTlRDT05TVEFOVCAzMDEKKyNkZWZpbmUgQk9PTENPTlNUQU5UIDMw
MgorI2RlZmluZSBGSUVMRF9TRUxFQ1RJT04gMzAzCisjZGVmaW5lIExFRlRfT1AgMzA0CisjZGVm
aW5lIFJJR0hUX09QIDMwNQorI2RlZmluZSBJTkNfT1AgMzA2CisjZGVmaW5lIERFQ19PUCAzMDcK
KyNkZWZpbmUgTEVfT1AgMzA4CisjZGVmaW5lIEdFX09QIDMwOQorI2RlZmluZSBFUV9PUCAzMTAK
KyNkZWZpbmUgTkVfT1AgMzExCisjZGVmaW5lIEFORF9PUCAzMTIKKyNkZWZpbmUgT1JfT1AgMzEz
CisjZGVmaW5lIFhPUl9PUCAzMTQKKyNkZWZpbmUgTVVMX0FTU0lHTiAzMTUKKyNkZWZpbmUgRElW
X0FTU0lHTiAzMTYKKyNkZWZpbmUgQUREX0FTU0lHTiAzMTcKKyNkZWZpbmUgTU9EX0FTU0lHTiAz
MTgKKyNkZWZpbmUgTEVGVF9BU1NJR04gMzE5CisjZGVmaW5lIFJJR0hUX0FTU0lHTiAzMjAKKyNk
ZWZpbmUgQU5EX0FTU0lHTiAzMjEKKyNkZWZpbmUgWE9SX0FTU0lHTiAzMjIKKyNkZWZpbmUgT1Jf
QVNTSUdOIDMyMworI2RlZmluZSBTVUJfQVNTSUdOIDMyNAorI2RlZmluZSBMRUZUX1BBUkVOIDMy
NQorI2RlZmluZSBSSUdIVF9QQVJFTiAzMjYKKyNkZWZpbmUgTEVGVF9CUkFDS0VUIDMyNworI2Rl
ZmluZSBSSUdIVF9CUkFDS0VUIDMyOAorI2RlZmluZSBMRUZUX0JSQUNFIDMyOQorI2RlZmluZSBS
SUdIVF9CUkFDRSAzMzAKKyNkZWZpbmUgRE9UIDMzMQorI2RlZmluZSBDT01NQSAzMzIKKyNkZWZp
bmUgQ09MT04gMzMzCisjZGVmaW5lIEVRVUFMIDMzNAorI2RlZmluZSBTRU1JQ09MT04gMzM1Cisj
ZGVmaW5lIEJBTkcgMzM2CisjZGVmaW5lIERBU0ggMzM3CisjZGVmaW5lIFRJTERFIDMzOAorI2Rl
ZmluZSBQTFVTIDMzOQorI2RlZmluZSBTVEFSIDM0MAorI2RlZmluZSBTTEFTSCAzNDEKKyNkZWZp
bmUgUEVSQ0VOVCAzNDIKKyNkZWZpbmUgTEVGVF9BTkdMRSAzNDMKKyNkZWZpbmUgUklHSFRfQU5H
TEUgMzQ0CisjZGVmaW5lIFZFUlRJQ0FMX0JBUiAzNDUKKyNkZWZpbmUgQ0FSRVQgMzQ2CisjZGVm
aW5lIEFNUEVSU0FORCAzNDcKKyNkZWZpbmUgUVVFU1RJT04gMzQ4CisKKworCisKKyNpZiAhIGRl
ZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAordHlwZWRlZiB1
bmlvbiBZWVNUWVBFCisKK3sKKyAgICBzdHJ1Y3QgeworICAgICAgICBUU291cmNlTG9jIGxpbmU7
CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKKyAgICAgICAg
ICAgIGZsb2F0IGY7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGJvb2wgYjsKKyAg
ICAgICAgfTsKKyAgICAgICAgVFN5bWJvbCogc3ltYm9sOworICAgIH0gbGV4OworICAgIHN0cnVj
dCB7CisgICAgICAgIFRTb3VyY2VMb2MgbGluZTsKKyAgICAgICAgVE9wZXJhdG9yIG9wOworICAg
ICAgICB1bmlvbiB7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKKyAgICAg
ICAgICAgIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpcjsKKyAgICAgICAgICAgIFRJbnRlcm1UeXBl
ZCogaW50ZXJtVHlwZWROb2RlOworICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSogaW50ZXJt
QWdncmVnYXRlOworICAgICAgICB9OworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUUHVi
bGljVHlwZSB0eXBlOworICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247CisgICAgICAg
ICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKKyAgICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rp
b247CisgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOworICAgICAgICAgICAgVFR5cGVMaW5l
IHR5cGVMaW5lOworICAgICAgICAgICAgVFR5cGVMaXN0KiB0eXBlTGlzdDsKKyAgICAgICAgfTsK
KyAgICB9IGludGVybTsKK30KKy8qIExpbmUgMTQ4OSBvZiB5YWNjLmMuICAqLworCisJWVlTVFlQ
RTsKKyMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBiZSB3aXRo
ZHJhd24gKi8KKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorIyBkZWZpbmUgWVlTVFlQ
RV9JU19UUklWSUFMIDEKKyNlbmRpZgorCisKKwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAJKHJldmlzaW9uIDc1ODAxKQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDggQEAKIC8vCiBjbGFzcyBUT3V0cHV0VHJhdmVyc2Vy
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewogcHVibGljOgotICAgIFRPdXRwdXRUcmF2ZXJz
ZXIoVEluZm9TaW5rJiBpKSA6IGluZm9TaW5rKGkpIHsgfQotICAgIFRJbmZvU2luayYgaW5mb1Np
bms7CisgICAgVE91dHB1dFRyYXZlcnNlcihUSW5mb1NpbmtCYXNlJiBpKSA6IHNpbmsoaSkgeyB9
CisgICAgVEluZm9TaW5rQmFzZSYgc2luazsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgdmlzaXRT
eW1ib2woVEludGVybVN5bWJvbCopOwpAQCAtNTYsMTQgKzU2LDE0IEBAIFRTdHJpbmcgVFR5cGU6
OmdldENvbXBsZXRlU3RyaW5nKCkgY29uc3QKIC8vIEhlbHBlciBmdW5jdGlvbnMgZm9yIHByaW50
aW5nLCBub3QgcGFydCBvZiB0cmF2ZXJzaW5nLgogLy8KIAotdm9pZCBPdXRwdXRUcmVlVGV4dChU
SW5mb1NpbmsmIGluZm9TaW5rLCBUSW50ZXJtTm9kZSogbm9kZSwgY29uc3QgaW50IGRlcHRoKQor
dm9pZCBPdXRwdXRUcmVlVGV4dChUSW5mb1NpbmtCYXNlJiBzaW5rLCBUSW50ZXJtTm9kZSogbm9k
ZSwgY29uc3QgaW50IGRlcHRoKQogewogICAgIGludCBpOwogCi0gICAgaW5mb1NpbmsuZGVidWcu
bG9jYXRpb24obm9kZS0+Z2V0TGluZSgpKTsKKyAgICBzaW5rLmxvY2F0aW9uKG5vZGUtPmdldExp
bmUoKSk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgZGVwdGg7ICsraSkKLSAgICAgICAgaW5mb1Np
bmsuZGVidWcgPDwgIiAgIjsKKyAgICAgICAgc2luayA8PCAiICAiOwogfQogCiAvLwpAQCAtNzcs
MjI2ICs3NywyMjYgQEAgdm9pZCBPdXRwdXRUcmVlVGV4dChUSW5mb1NpbmsmIGluZm9TaW5rLAog
CiB2b2lkIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUp
CiB7Ci0gICAgT3V0cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBPdXRw
dXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7CiAKLSAgICBpbmZvU2luay5kZWJ1ZyA8PCAi
JyIgPDwgbm9kZS0+Z2V0U3ltYm9sKCkgPDwgIicgIjsKLSAgICBpbmZvU2luay5kZWJ1ZyA8PCAi
KCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKVxuIjsKKyAgICBzaW5rIDw8ICIn
IiA8PCBub2RlLT5nZXRTeW1ib2woKSA8PCAiJyAiOworICAgIHNpbmsgPDwgIigiIDw8IG5vZGUt
PmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIilcbiI7CiB9CiAKIGJvb2wgVE91dHB1dFRyYXZlcnNl
cjo6dmlzaXRCaW5hcnkoVmlzaXQgdmlzaXQsIFRJbnRlcm1CaW5hcnkqIG5vZGUpCiB7Ci0gICAg
VEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5r
OwogCiAgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CiAKICAgICBzd2l0Y2gg
KG5vZGUtPmdldE9wKCkpIHsKLSAgICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAgICAgICAg
ICAgIG91dC5kZWJ1ZyA8PCAibW92ZSBzZWNvbmQgY2hpbGQgdG8gZmlyc3QgY2hpbGQiOyAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZTogICAgICAgICAgICAgICBv
dXQuZGVidWcgPDwgImluaXRpYWxpemUgZmlyc3QgY2hpbGQgd2l0aCBzZWNvbmQgY2hpbGQiOyAg
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogICAgICAgICAgICAgICAgb3V0LmRl
YnVnIDw8ICJhZGQgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BTdWJBc3NpZ246ICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8
PCAic3VidHJhY3Qgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wTXVsQXNzaWduOiAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgIm11
bHRpcGx5IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOiAgb3V0LmRlYnVnIDw8ICJtYXRyaXgg
bXVsdCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICBicmVhazsKLSAgICAgICAgY2Fz
ZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjogIG91dC5kZWJ1ZyA8PCAidmVjdG9yIHNjYWxl
IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
TWF0cml4VGltZXNTY2FsYXJBc3NpZ246ICBvdXQuZGVidWcgPDwgIm1hdHJpeCBzY2FsZSBzZWNv
bmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcE1hdHJp
eFRpbWVzTWF0cml4QXNzaWduOiAgb3V0LmRlYnVnIDw8ICJtYXRyaXggbXVsdCBzZWNvbmQgY2hp
bGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcERpdkFzc2lnbjog
ICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJkaXZpZGUgc2Vjb25kIGNoaWxkIGludG8gZmly
c3QgY2hpbGQiOyAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDogICBv
dXQuZGVidWcgPDwgImRpcmVjdCBpbmRleCI7ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wSW5k
ZXhJbmRpcmVjdDogb3V0LmRlYnVnIDw8ICJpbmRpcmVjdCBpbmRleCI7IGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcEluZGV4RGlyZWN0U3RydWN0OiAgIG91dC5kZWJ1ZyA8PCAiZGlyZWN0IGluZGV4
IGZvciBzdHJ1Y3R1cmUiOyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6
IG91dC5kZWJ1ZyA8PCAidmVjdG9yIHN3aXp6bGUiOyBicmVhazsKLQotICAgICAgICBjYXNlIEVP
cEFkZDogICAgb3V0LmRlYnVnIDw8ICJhZGQiOyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcFN1YjogICAgb3V0LmRlYnVnIDw8ICJzdWJ0cmFjdCI7ICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE11bDogICAgb3V0LmRlYnVnIDw8ICJjb21w
b25lbnQtd2lzZSBtdWx0aXBseSI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcERpdjogICAgb3V0
LmRlYnVnIDw8ICJkaXZpZGUiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcEVxdWFsOiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBFcXVhbCI7ICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDogICAgICAgICBvdXQu
ZGVidWcgPDwgIkNvbXBhcmUgTm90IEVxdWFsIjsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIExlc3MgVGhh
biI7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAg
IG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4iOyAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiAgICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgTGVz
cyBUaGFuIG9yIEVxdWFsIjsgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5F
cXVhbDogb3V0LmRlYnVnIDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiBvciBFcXVhbCI7IGJyZWFr
OwotCi0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6IG91dC5kZWJ1ZyA8PCAidmVj
dG9yLXNjYWxlIjsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNN
YXRyaXg6IG91dC5kZWJ1ZyA8PCAidmVjdG9yLXRpbWVzLW1hdHJpeCI7ICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6IG91dC5kZWJ1ZyA8PCAibWF0cml4LXRpbWVz
LXZlY3RvciI7ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6IG91
dC5kZWJ1ZyA8PCAibWF0cml4LXNjYWxlIjsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wTWF0cml4VGltZXNNYXRyaXg6IG91dC5kZWJ1ZyA8PCAibWF0cml4LW11bHRpcGx5IjsgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6ICBvdXQuZGVidWcgPDwgImxv
Z2ljYWwtb3IiOyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6IG91dC5kZWJ1
ZyA8PCAibG9naWNhbC14b3IiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBv
dXQuZGVidWcgPDwgImxvZ2ljYWwtYW5kIjsgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6IG91dC5k
ZWJ1ZyA8PCAiPHVua25vd24gb3A+IjsKKyAgICAgICAgY2FzZSBFT3BBc3NpZ246ICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAibW92ZSBzZWNvbmQgY2hpbGQgdG8gZmlyc3QgY2hpbGQiOyAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5pdGlhbGl6ZTogICAgICAgICAgICAgICBv
dXQgPDwgImluaXRpYWxpemUgZmlyc3QgY2hpbGQgd2l0aCBzZWNvbmQgY2hpbGQiOyAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjogICAgICAgICAgICAgICAgb3V0IDw8ICJhZGQg
c2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BTdWJBc3NpZ246ICAgICAgICAgICAgICAgIG91dCA8PCAic3VidHJhY3Qgc2Vjb25k
IGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTXVs
QXNzaWduOiAgICAgICAgICAgICAgICBvdXQgPDwgIm11bHRpcGx5IHNlY29uZCBjaGlsZCBpbnRv
IGZpcnN0IGNoaWxkIjsgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0
cml4QXNzaWduOiAgb3V0IDw8ICJtYXRyaXggbXVsdCBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBj
aGlsZCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjog
IG91dCA8PCAidmVjdG9yIHNjYWxlIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXJBc3NpZ246ICBvdXQgPDwgIm1h
dHJpeCBzY2FsZSBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOiAgb3V0IDw8ICJtYXRyaXggbXVsdCBz
ZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcERp
dkFzc2lnbjogICAgICAgICAgICAgICAgb3V0IDw8ICJkaXZpZGUgc2Vjb25kIGNoaWxkIGludG8g
Zmlyc3QgY2hpbGQiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRleERpcmVjdDog
ICBvdXQgPDwgImRpcmVjdCBpbmRleCI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5kZXhJ
bmRpcmVjdDogb3V0IDw8ICJpbmRpcmVjdCBpbmRleCI7IGJyZWFrOworICAgICAgICBjYXNlIEVP
cEluZGV4RGlyZWN0U3RydWN0OiAgIG91dCA8PCAiZGlyZWN0IGluZGV4IGZvciBzdHJ1Y3R1cmUi
OyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclN3aXp6bGU6IG91dCA8PCAidmVjdG9y
IHN3aXp6bGUiOyBicmVhazsKKworICAgICAgICBjYXNlIEVPcEFkZDogICAgb3V0IDw8ICJhZGQi
OyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFN1YjogICAgb3V0
IDw8ICJzdWJ0cmFjdCI7ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE11
bDogICAgb3V0IDw8ICJjb21wb25lbnQtd2lzZSBtdWx0aXBseSI7IGJyZWFrOworICAgICAgICBj
YXNlIEVPcERpdjogICAgb3V0IDw8ICJkaXZpZGUiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcEVxdWFsOiAgICAgICAgICAgIG91dCA8PCAiQ29tcGFyZSBFcXVhbCI7
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOb3RFcXVhbDogICAgICAg
ICBvdXQgPDwgIkNvbXBhcmUgTm90IEVxdWFsIjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTGVzc1RoYW46ICAgICAgICAgb3V0IDw8ICJDb21wYXJlIExlc3MgVGhhbiI7ICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dCA8
PCAiQ29tcGFyZSBHcmVhdGVyIFRoYW4iOyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BMZXNzVGhhbkVxdWFsOiAgICBvdXQgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIG9yIEVxdWFsIjsg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogb3V0IDw8ICJDb21w
YXJlIEdyZWF0ZXIgVGhhbiBvciBFcXVhbCI7IGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wVmVj
dG9yVGltZXNTY2FsYXI6IG91dCA8PCAidmVjdG9yLXNjYWxlIjsgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXg6IG91dCA8PCAidmVjdG9yLXRpbWVzLW1h
dHJpeCI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNWZWN0b3I6IG91dCA8
PCAibWF0cml4LXRpbWVzLXZlY3RvciI7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF0cml4
VGltZXNTY2FsYXI6IG91dCA8PCAibWF0cml4LXNjYWxlIjsgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXg6IG91dCA8PCAibWF0cml4LW11bHRpcGx5Ijsg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsT3I6ICBvdXQgPDwgImxvZ2lj
YWwtb3IiOyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6IG91dCA8PCAibG9n
aWNhbC14b3IiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dpY2FsQW5kOiBvdXQgPDwgImxv
Z2ljYWwtYW5kIjsgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6IG91dCA8PCAiPHVua25vd24gb3A+
IjsKICAgICB9CiAKLSAgICBvdXQuZGVidWcgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0
cmluZygpIDw8ICIpIjsKKyAgICBvdXQgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmlu
ZygpIDw8ICIpIjsKIAotICAgIG91dC5kZWJ1ZyA8PCAiXG4iOworICAgIG91dCA8PCAiXG4iOwog
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRVbmFy
eShWaXNpdCB2aXNpdCwgVEludGVybVVuYXJ5KiBub2RlKQogewotICAgIFRJbmZvU2luayYgb3V0
ID0gaW5mb1Npbms7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2luazsKIAogICAgIE91dHB1
dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOwogCiAgICAgc3dpdGNoIChub2RlLT5nZXRPcCgp
KSB7Ci0gICAgICAgIGNhc2UgRU9wTmVnYXRpdmU6ICAgICAgIG91dC5kZWJ1ZyA8PCAiTmVnYXRl
IHZhbHVlIjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOZWdhdGl2ZTogICAgICAg
b3V0IDw8ICJOZWdhdGUgdmFsdWUiOyAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcFZl
Y3RvckxvZ2ljYWxOb3Q6Ci0gICAgICAgIGNhc2UgRU9wTG9naWNhbE5vdDogICAgIG91dC5kZWJ1
ZyA8PCAiTmVnYXRlIGNvbmRpdGlvbmFsIjsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2dp
Y2FsTm90OiAgICAgb3V0IDw8ICJOZWdhdGUgY29uZGl0aW9uYWwiOyAgIGJyZWFrOwogCi0gICAg
ICAgIGNhc2UgRU9wUG9zdEluY3JlbWVudDogIG91dC5kZWJ1ZyA8PCAiUG9zdC1JbmNyZW1lbnQi
OyAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OiAgb3V0LmRlYnVn
IDw8ICJQb3N0LURlY3JlbWVudCI7ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFByZUlu
Y3JlbWVudDogICBvdXQuZGVidWcgPDwgIlByZS1JbmNyZW1lbnQiOyAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wUHJlRGVjcmVtZW50OiAgIG91dC5kZWJ1ZyA8PCAiUHJlLURlY3JlbWVu
dCI7ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Jvb2w6ICBvdXQu
ZGVidWcgPDwgIkNvbnZlcnQgaW50IHRvIGJvb2wiOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
Q29udkZsb2F0VG9Cb29sOm91dC5kZWJ1ZyA8PCAiQ29udmVydCBmbG9hdCB0byBib29sIjticmVh
azsKLSAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvRmxvYXQ6b3V0LmRlYnVnIDw8ICJDb252ZXJ0
IGJvb2wgdG8gZmxvYXQiO2JyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnZJbnRUb0Zsb2F0OiBv
dXQuZGVidWcgPDwgIkNvbnZlcnQgaW50IHRvIGZsb2F0IjsgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wQ29udkZsb2F0VG9JbnQ6IG91dC5kZWJ1ZyA8PCAiQ29udmVydCBmbG9hdCB0byBpbnQiOyBi
cmVhazsKLSAgICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiAgb3V0LmRlYnVnIDw8ICJDb252
ZXJ0IGJvb2wgdG8gaW50IjsgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wUmFkaWFuczogICAg
ICAgIG91dC5kZWJ1ZyA8PCAicmFkaWFucyI7ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BEZWdyZWVzOiAgICAgICAgb3V0LmRlYnVnIDw8ICJkZWdyZWVzIjsgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFNpbjogICAgICAgICAgICBvdXQuZGVidWcgPDwg
InNpbmUiOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29zOiAgICAg
ICAgICAgIG91dC5kZWJ1ZyA8PCAiY29zaW5lIjsgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BUYW46ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJ0YW5nZW50IjsgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFzaW46ICAgICAgICAgICBvdXQuZGVidWcg
PDwgImFyYyBzaW5lIjsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQWNvczog
ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYXJjIGNvc2luZSI7ICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBFT3BBdGFuOiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJhcmMgdGFuZ2VudCI7
ICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wRXhwOiAgICAgICAgICAgIG91dC5k
ZWJ1ZyA8PCAiZXhwIjsgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BM
b2c6ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJsb2ciOyAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEVPcEV4cDI6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImV4cDIiOyAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTG9nMjogICAgICAgICAgIG91
dC5kZWJ1ZyA8PCAibG9nMiI7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BTcXJ0OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJzcXJ0IjsgICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcEludmVyc2VTcXJ0OiAgICBvdXQuZGVidWcgPDwgImludmVy
c2Ugc3FydCI7ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BBYnM6ICAgICAgICAg
ICAgb3V0LmRlYnVnIDw8ICJBYnNvbHV0ZSB2YWx1ZSI7ICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEVPcFNpZ246ICAgICAgICAgICBvdXQuZGVidWcgPDwgIlNpZ24iOyAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRmxvb3I6ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAi
Rmxvb3IiOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BDZWlsOiAgICAg
ICAgICAgb3V0LmRlYnVnIDw8ICJDZWlsaW5nIjsgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcEZyYWN0OiAgICAgICAgICBvdXQuZGVidWcgPDwgIkZyYWN0aW9uIjsgICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAgb3V0LmRlYnVn
IDw8ICJsZW5ndGgiOyAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE5vcm1h
bGl6ZTogICAgICBvdXQuZGVidWcgPDwgIm5vcm1hbGl6ZSI7ICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAvLwljYXNlIEVPcERQZHg6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImRQZHgi
OyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAvLwlj
YXNlIEVPcERQZHk6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImRQZHkiOyAgICAgICAgICAgICAg
ICAgYnJlYWs7ICAgCi0gICAgICAgICAgICAvLwljYXNlIEVPcEZ3aWR0aDogICAgICAgICBvdXQu
ZGVidWcgPDwgImZ3aWR0aCI7ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAg
IAorICAgICAgICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6ICBvdXQgPDwgIlBvc3QtSW5jcmVtZW50
IjsgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDogIG91dCA8PCAi
UG9zdC1EZWNyZW1lbnQiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1l
bnQ6ICAgb3V0IDw8ICJQcmUtSW5jcmVtZW50IjsgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcFByZURlY3JlbWVudDogICBvdXQgPDwgIlByZS1EZWNyZW1lbnQiOyAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29sOiAgb3V0IDw8ICJDb252ZXJ0IGludCB0
byBib29sIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDpvdXQgPDwg
IkNvbnZlcnQgZmxvYXQgdG8gYm9vbCI7YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkJvb2xU
b0Zsb2F0Om91dCA8PCAiQ29udmVydCBib29sIHRvIGZsb2F0IjticmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BDb252SW50VG9GbG9hdDogb3V0IDw8ICJDb252ZXJ0IGludCB0byBmbG9hdCI7IGJyZWFr
OworICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvSW50OiBvdXQgPDwgIkNvbnZlcnQgZmxvYXQg
dG8gaW50IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0ludDogIG91dCA8PCAi
Q29udmVydCBib29sIHRvIGludCI7ICBicmVhazsKKworICAgICAgICBjYXNlIEVPcFJhZGlhbnM6
ICAgICAgICBvdXQgPDwgInJhZGlhbnMiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wRGVncmVlczogICAgICAgIG91dCA8PCAiZGVncmVlcyI7ICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BTaW46ICAgICAgICAgICAgb3V0IDw8ICJzaW5lIjsgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvczogICAgICAgICAgICBvdXQgPDwg
ImNvc2luZSI7ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVGFuOiAgICAg
ICAgICAgIG91dCA8PCAidGFuZ2VudCI7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BBc2luOiAgICAgICAgICAgb3V0IDw8ICJhcmMgc2luZSI7ICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcEFjb3M6ICAgICAgICAgICBvdXQgPDwgImFyYyBjb3NpbmUiOyAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXRhbjogICAgICAgICAgIG91dCA8PCAi
YXJjIHRhbmdlbnQiOyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcEV4cDogICAg
ICAgICAgICBvdXQgPDwgImV4cCI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wTG9nOiAgICAgICAgICAgIG91dCA8PCAibG9nIjsgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BFeHAyOiAgICAgICAgICAgb3V0IDw8ICJleHAyIjsgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZzI6ICAgICAgICAgICBvdXQgPDwg
ImxvZzIiOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3FydDogICAg
ICAgICAgIG91dCA8PCAic3FydCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BJbnZlcnNlU3FydDogICAgb3V0IDw8ICJpbnZlcnNlIHNxcnQiOyAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgRU9wQWJzOiAgICAgICAgICAgIG91dCA8PCAiQWJzb2x1dGUgdmFs
dWUiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTaWduOiAgICAgICAgICAgb3V0IDw8
ICJTaWduIjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEZsb29yOiAg
ICAgICAgICBvdXQgPDwgIkZsb29yIjsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wQ2VpbDogICAgICAgICAgIG91dCA8PCAiQ2VpbGluZyI7ICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BGcmFjdDogICAgICAgICAgb3V0IDw8ICJGcmFjdGlvbiI7ICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRU9wTGVuZ3RoOiAgICAgICAgIG91dCA8
PCAibGVuZ3RoIjsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BOb3JtYWxp
emU6ICAgICAgb3V0IDw8ICJub3JtYWxpemUiOyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgLy8JY2FzZSBFT3BEUGR4OiAgICAgICAgICAgb3V0IDw8ICJkUGR4IjsgICAgICAgICAgICAg
ICAgIGJyZWFrOyAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8JY2FzZSBFT3BEUGR5OiAg
ICAgICAgICAgb3V0IDw8ICJkUGR5IjsgICAgICAgICAgICAgICAgIGJyZWFrOyAgIAorICAgICAg
ICAgICAgLy8JY2FzZSBFT3BGd2lkdGg6ICAgICAgICAgb3V0IDw8ICJmd2lkdGgiOyAgICAgICAg
ICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAKIAotICAgICAgICBjYXNlIEVPcEFueTog
ICAgICAgICAgICBvdXQuZGVidWcgPDwgImFueSI7ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wQWxsOiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYWxsIjsgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgb3V0IDw8
ICJhbnkiOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFsbDogICAg
ICAgICAgICBvdXQgPDwgImFsbCI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAg
ZGVmYXVsdDogb3V0LmRlYnVnLm1lc3NhZ2UoRVByZWZpeEVycm9yLCAiQmFkIHVuYXJ5IG9wIik7
CisgICAgICAgIGRlZmF1bHQ6IG91dC5tZXNzYWdlKEVQcmVmaXhFcnJvciwgIkJhZCB1bmFyeSBv
cCIpOwogICAgIH0KIAotICAgIG91dC5kZWJ1ZyA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBsZXRl
U3RyaW5nKCkgPDwgIikiOworICAgIG91dCA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBsZXRlU3Ry
aW5nKCkgPDwgIikiOwogCi0gICAgb3V0LmRlYnVnIDw8ICJcbiI7CisgICAgb3V0IDw8ICJcbiI7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKIHsKLSAgICBUSW5m
b1NpbmsmIG91dCA9IGluZm9TaW5rOworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CiAK
ICAgICBpZiAobm9kZS0+Z2V0T3AoKSA9PSBFT3BOdWxsKSB7Ci0gICAgICAgIG91dC5kZWJ1Zy5t
ZXNzYWdlKEVQcmVmaXhFcnJvciwgIm5vZGUgaXMgc3RpbGwgRU9wTnVsbCEiKTsKKyAgICAgICAg
b3V0Lm1lc3NhZ2UoRVByZWZpeEVycm9yLCAibm9kZSBpcyBzdGlsbCBFT3BOdWxsISIpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUs
IGRlcHRoKTsKIAogICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgewotICAgICAgICBjYXNlIEVP
cFNlcXVlbmNlOiAgICAgIG91dC5kZWJ1ZyA8PCAiU2VxdWVuY2VcbiI7IHJldHVybiB0cnVlOwot
ICAgICAgICBjYXNlIEVPcENvbW1hOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tbWFcbiI7IHJl
dHVybiB0cnVlOwotICAgICAgICBjYXNlIEVPcEZ1bmN0aW9uOiAgICAgIG91dC5kZWJ1ZyA8PCAi
RnVuY3Rpb24gRGVmaW5pdGlvbjogIiA8PCBub2RlLT5nZXROYW1lKCk7IGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcEZ1bmN0aW9uQ2FsbDogIG91dC5kZWJ1ZyA8PCAiRnVuY3Rpb24gQ2FsbDogIiA8
PCBub2RlLT5nZXROYW1lKCk7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFBhcmFtZXRlcnM6ICAg
IG91dC5kZWJ1ZyA8PCAiRnVuY3Rpb24gUGFyYW1ldGVyczogIjsgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0RmxvYXQ6IG91dC5kZWJ1ZyA8PCAiQ29uc3Ry
dWN0IGZsb2F0IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0VmVjMjogIG91dC5k
ZWJ1ZyA8PCAiQ29uc3RydWN0IHZlYzIiOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3Ry
dWN0VmVjMzogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IHZlYzMiOyAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wQ29uc3RydWN0VmVjNDogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IHZlYzQiOyAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0Qm9vbDogIG91dC5kZWJ1ZyA8PCAiQ29u
c3RydWN0IGJvb2wiOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzI6IG91
dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGJ2ZWMyIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29u
c3RydWN0QlZlYzM6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGJ2ZWMzIjsgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wQ29uc3RydWN0QlZlYzQ6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGJ2ZWM0
IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SW50OiAgIG91dC5kZWJ1ZyA8PCAi
Q29uc3RydWN0IGludCI7ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzI6
IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGl2ZWMyIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
Q29uc3RydWN0SVZlYzM6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGl2ZWMzIjsgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wQ29uc3RydWN0SVZlYzQ6IG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IGl2
ZWM0IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0MjogIG91dC5kZWJ1ZyA8
PCAiQ29uc3RydWN0IG1hdDIiOyAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0TWF0
MzogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IG1hdDMiOyAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wQ29uc3RydWN0TWF0NDogIG91dC5kZWJ1ZyA8PCAiQ29uc3RydWN0IG1hdDQiOyAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wQ29uc3RydWN0U3RydWN0OiAgb3V0LmRlYnVnIDw8ICJDb25zdHJ1
Y3Qgc3RydWN0dXJlIjsgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wTGVzc1RoYW46ICAgICAg
ICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIExlc3MgVGhhbiI7ICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBH
cmVhdGVyIFRoYW4iOyAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMZXNzVGhhbkVx
dWFsOiAgICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIG9yIEVxdWFsIjsgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDogb3V0LmRlYnVnIDw8ICJDb21w
YXJlIEdyZWF0ZXIgVGhhbiBvciBFcXVhbCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcFZlY3Rv
ckVxdWFsOiAgICAgIG91dC5kZWJ1ZyA8PCAiRXF1YWwiOyAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JOb3RFcXVhbDogICBvdXQuZGVidWcgPDwg
Ik5vdEVxdWFsIjsgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBF
T3BNb2Q6ICAgICAgICAgICBvdXQuZGVidWcgPDwgIm1vZCI7ICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wUG93OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJwb3ciOyAgICAgICAgIGJy
ZWFrOwotCi0gICAgICAgIGNhc2UgRU9wQXRhbjogICAgICAgICAgb3V0LmRlYnVnIDw8ICJhcmMg
dGFuZ2VudCI7IGJyZWFrOwotCi0gICAgICAgIGNhc2UgRU9wTWluOiAgICAgICAgICAgb3V0LmRl
YnVnIDw8ICJtaW4iOyAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE1heDogICAgICAg
ICAgIG91dC5kZWJ1ZyA8PCAibWF4IjsgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BD
bGFtcDogICAgICAgICBvdXQuZGVidWcgPDwgImNsYW1wIjsgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wTWl4OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJtaXgiOyAgICAgICAgIGJyZWFr
OwotICAgICAgICBjYXNlIEVPcFN0ZXA6ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAic3RlcCI7ICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTbW9vdGhTdGVwOiAgICBvdXQuZGVidWcgPDwg
InNtb290aHN0ZXAiOyAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBFT3BEaXN0YW5jZTogICAgICBv
dXQuZGVidWcgPDwgImRpc3RhbmNlIjsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wRG90OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJkb3QtcHJvZHVjdCI7ICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENyb3NzOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAi
Y3Jvc3MtcHJvZHVjdCI7ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BGYWNlRm9y
d2FyZDogICBvdXQuZGVidWcgPDwgImZhY2UtZm9yd2FyZCI7ICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wUmVmbGVjdDogICAgICAgb3V0LmRlYnVnIDw8ICJyZWZsZWN0IjsgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFJlZnJhY3Q6ICAgICAgIG91dC5k
ZWJ1ZyA8PCAicmVmcmFjdCI7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BNdWw6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImNvbXBvbmVudC13aXNlIG11bHRpcGx5Ijsg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wU2VxdWVuY2U6ICAgICAgb3V0IDw8ICJTZXF1ZW5jZVxu
IjsgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRU9wQ29tbWE6ICAgICAgICAgb3V0IDw8ICJD
b21tYVxuIjsgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRU9wRnVuY3Rpb246ICAgICAgb3V0
IDw8ICJGdW5jdGlvbiBEZWZpbml0aW9uOiAiIDw8IG5vZGUtPmdldE5hbWUoKTsgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOiAgb3V0IDw8ICJGdW5jdGlvbiBDYWxsOiAiIDw8
IG5vZGUtPmdldE5hbWUoKTsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUGFyYW1ldGVyczogICAg
b3V0IDw8ICJGdW5jdGlvbiBQYXJhbWV0ZXJzOiAiOyAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RGbG9hdDogb3V0IDw8ICJDb25zdHJ1Y3QgZmxvYXQiOyBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMyOiAgb3V0IDw8ICJDb25zdHJ1Y3Qg
dmVjMiI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOiAgb3V0IDw8ICJD
b25zdHJ1Y3QgdmVjMyI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OiAg
b3V0IDw8ICJDb25zdHJ1Y3QgdmVjNCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RCb29sOiAgb3V0IDw8ICJDb25zdHJ1Y3QgYm9vbCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RCVmVjMjogb3V0IDw8ICJDb25zdHJ1Y3QgYnZlYzIiOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMzogb3V0IDw8ICJDb25zdHJ1Y3QgYnZlYzMiOyBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjNDogb3V0IDw8ICJDb25zdHJ1Y3QgYnZl
YzQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJbnQ6ICAgb3V0IDw8ICJDb25z
dHJ1Y3QgaW50IjsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjogb3V0
IDw8ICJDb25zdHJ1Y3QgaXZlYzIiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJ
VmVjMzogb3V0IDw8ICJDb25zdHJ1Y3QgaXZlYzMiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RJVmVjNDogb3V0IDw8ICJDb25zdHJ1Y3QgaXZlYzQiOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RNYXQyOiAgb3V0IDw8ICJDb25zdHJ1Y3QgbWF0MiI7ICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQzOiAgb3V0IDw8ICJDb25zdHJ1Y3QgbWF0MyI7
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQ0OiAgb3V0IDw8ICJDb25zdHJ1
Y3QgbWF0NCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6ICBvdXQg
PDwgIkNvbnN0cnVjdCBzdHJ1Y3R1cmUiOyAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BMZXNz
VGhhbjogICAgICAgICBvdXQgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIjsgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46ICAgICAgb3V0IDw8ICJDb21wYXJlIEdy
ZWF0ZXIgVGhhbiI7ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1
YWw6ICAgIG91dCA8PCAiQ29tcGFyZSBMZXNzIFRoYW4gb3IgRXF1YWwiOyAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBvdXQgPDwgIkNvbXBhcmUgR3JlYXRlciBU
aGFuIG9yIEVxdWFsIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yRXF1YWw6ICAgICAg
b3V0IDw8ICJFcXVhbCI7ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEVPcFZlY3Rvck5vdEVxdWFsOiAgIG91dCA8PCAiTm90RXF1YWwiOyAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEVPcE1vZDogICAgICAgICAgIG91dCA8PCAi
bW9kIjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQb3c6ICAgICAgICAgICBvdXQg
PDwgInBvdyI7ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BBdGFuOiAgICAgICAg
ICBvdXQgPDwgImFyYyB0YW5nZW50IjsgYnJlYWs7CisKKyAgICAgICAgY2FzZSBFT3BNaW46ICAg
ICAgICAgICBvdXQgPDwgIm1pbiI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF4
OiAgICAgICAgICAgb3V0IDw8ICJtYXgiOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cENsYW1wOiAgICAgICAgIG91dCA8PCAiY2xhbXAiOyAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BNaXg6ICAgICAgICAgICBvdXQgPDwgIm1peCI7ICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wU3RlcDogICAgICAgICAgb3V0IDw8ICJzdGVwIjsgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVPcFNtb290aFN0ZXA6ICAgIG91dCA8PCAic21vb3Roc3RlcCI7ICBicmVhazsK
KworICAgICAgICBjYXNlIEVPcERpc3RhbmNlOiAgICAgIG91dCA8PCAiZGlzdGFuY2UiOyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEb3Q6ICAgICAgICAgICBvdXQgPDwg
ImRvdC1wcm9kdWN0IjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ3Jvc3M6
ICAgICAgICAgb3V0IDw8ICJjcm9zcy1wcm9kdWN0IjsgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcEZhY2VGb3J3YXJkOiAgIG91dCA8PCAiZmFjZS1mb3J3YXJkIjsgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BSZWZsZWN0OiAgICAgICBvdXQgPDwgInJlZmxlY3Qi
OyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmVmcmFjdDogICAgICAg
b3V0IDw8ICJyZWZyYWN0IjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cE11bDogICAgICAgICAgIG91dCA8PCAiY29tcG9uZW50LXdpc2UgbXVsdGlwbHkiOyBicmVhazsK
IAotICAgICAgICBkZWZhdWx0OiBvdXQuZGVidWcubWVzc2FnZShFUHJlZml4RXJyb3IsICJCYWQg
YWdncmVnYXRpb24gb3AiKTsKKyAgICAgICAgZGVmYXVsdDogb3V0Lm1lc3NhZ2UoRVByZWZpeEVy
cm9yLCAiQmFkIGFnZ3JlZ2F0aW9uIG9wIik7CiAgICAgfQogCiAgICAgaWYgKG5vZGUtPmdldE9w
KCkgIT0gRU9wU2VxdWVuY2UgJiYgbm9kZS0+Z2V0T3AoKSAhPSBFT3BQYXJhbWV0ZXJzKQotICAg
ICAgICBvdXQuZGVidWcgPDwgIiAoIiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIp
IjsKKyAgICAgICAgb3V0IDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAi
KSI7CiAKLSAgICBvdXQuZGVidWcgPDwgIlxuIjsKKyAgICBvdXQgPDwgIlxuIjsKIAogICAgIHJl
dHVybiB0cnVlOwogfQogCiBib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0U2VsZWN0aW9uKFZp
c2l0IHZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKiBub2RlKQogewotICAgIFRJbmZvU2luayYgb3V0
ID0gaW5mb1Npbms7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2luazsKIAogICAgIE91dHB1
dFRyZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOwogCi0gICAgb3V0LmRlYnVnIDw8ICJUZXN0IGNv
bmRpdGlvbiBhbmQgc2VsZWN0IjsKLSAgICBvdXQuZGVidWcgPDwgIiAoIiA8PCBub2RlLT5nZXRD
b21wbGV0ZVN0cmluZygpIDw8ICIpXG4iOworICAgIG91dCA8PCAiVGVzdCBjb25kaXRpb24gYW5k
IHNlbGVjdCI7CisgICAgb3V0IDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8
PCAiKVxuIjsKIAogICAgICsrZGVwdGg7CiAKLSAgICBPdXRwdXRUcmVlVGV4dChpbmZvU2luaywg
bm9kZSwgZGVwdGgpOwotICAgIG91dC5kZWJ1ZyA8PCAiQ29uZGl0aW9uXG4iOworICAgIE91dHB1
dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBvdXQgPDwgIkNvbmRpdGlvblxuIjsK
ICAgICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CiAKLSAgICBPdXRwdXRU
cmVlVGV4dChpbmZvU2luaywgbm9kZSwgZGVwdGgpOworICAgIE91dHB1dFRyZWVUZXh0KHNpbmss
IG5vZGUsIGRlcHRoKTsKICAgICBpZiAobm9kZS0+Z2V0VHJ1ZUJsb2NrKCkpIHsKLSAgICAgICAg
b3V0LmRlYnVnIDw8ICJ0cnVlIGNhc2VcbiI7CisgICAgICAgIG91dCA8PCAidHJ1ZSBjYXNlXG4i
OwogICAgICAgICBub2RlLT5nZXRUcnVlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CiAgICAgfSBl
bHNlCi0gICAgICAgIG91dC5kZWJ1ZyA8PCAidHJ1ZSBjYXNlIGlzIG51bGxcbiI7CisgICAgICAg
IG91dCA8PCAidHJ1ZSBjYXNlIGlzIG51bGxcbiI7CiAKICAgICBpZiAobm9kZS0+Z2V0RmFsc2VC
bG9jaygpKSB7Ci0gICAgICAgIE91dHB1dFRyZWVUZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7
Ci0gICAgICAgIG91dC5kZWJ1ZyA8PCAiZmFsc2UgY2FzZVxuIjsKKyAgICAgICAgT3V0cHV0VHJl
ZVRleHQoc2luaywgbm9kZSwgZGVwdGgpOworICAgICAgICBvdXQgPDwgImZhbHNlIGNhc2VcbiI7
CiAgICAgICAgIG5vZGUtPmdldEZhbHNlQmxvY2soKS0+dHJhdmVyc2UodGhpcyk7CiAgICAgfQog
CkBAIC0zMDcsNyArMzA3LDcgQEAgYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlv
bihWaQogCiB2b2lkIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJt
Q29uc3RhbnRVbmlvbiogbm9kZSkKIHsKLSAgICBUSW5mb1NpbmsmIG91dCA9IGluZm9TaW5rOwor
ICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CiAKICAgICBpbnQgc2l6ZSA9IG5vZGUtPmdl
dFR5cGUoKS5nZXRPYmplY3RTaXplKCk7CiAKQEAgLTMxNiwyMyArMzE2LDIzIEBAIHZvaWQgVE91
dHB1dFRyYXZlcnNlcjo6dmlzaXRDb25zdGFudFVuaW8KICAgICAgICAgc3dpdGNoIChub2RlLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldFR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBF
YnRCb29sOgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
W2ldLmdldEJDb25zdCgpKQotICAgICAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgInRydWUi
OworICAgICAgICAgICAgICAgICAgICBvdXQgPDwgInRydWUiOwogICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJmYWxzZSI7CisgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiZmFsc2UiOwogCi0gICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8
ICIgKCIgPDwgImNvbnN0IGJvb2wiIDw8ICIpIjsKLSAgICAgICAgICAgICAgICBvdXQuZGVidWcg
PDwgIlxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgIiAoIiA8PCAiY29uc3QgYm9vbCIgPDwg
IikiOworICAgICAgICAgICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICBvdXQuZGVidWcg
PDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRGQ29uc3QoKTsKLSAgICAgICAg
ICAgICAgICBvdXQuZGVidWcgPDwgIiAoY29uc3QgZmxvYXQpXG4iOworICAgICAgICAgICAgICAg
IG91dCA8PCBub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldEZDb25zdCgpOworICAg
ICAgICAgICAgICAgIG91dCA8PCAiIChjb25zdCBmbG9hdClcbiI7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBvdXQuZGVi
dWcgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRJQ29uc3QoKTsKLSAgICAg
ICAgICAgICAgICBvdXQuZGVidWcgPDwgIiAoY29uc3QgaW50KVxuIjsKKyAgICAgICAgICAgICAg
ICBvdXQgPDwgbm9kZS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRJQ29uc3QoKTsKKyAg
ICAgICAgICAgICAgICBvdXQgPDwgIiAoY29uc3QgaW50KVxuIjsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgb3V0LmluZm8ubWVz
c2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIlVua25vd24gY29uc3RhbnQiLCBub2RlLT5nZXRM
aW5lKCkpOworICAgICAgICAgICAgICAgIG91dC5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9y
LCAiVW5rbm93biBjb25zdGFudCIsIG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICB9CkBAIC0zNDAsMzUgKzM0MCwzNSBAQCB2b2lkIFRPdXRw
dXRUcmF2ZXJzZXI6OnZpc2l0Q29uc3RhbnRVbmlvCiAKIGJvb2wgVE91dHB1dFRyYXZlcnNlcjo6
dmlzaXRMb29wKFZpc2l0IHZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKIHsKLSAgICBUSW5mb1Np
bmsmIG91dCA9IGluZm9TaW5rOworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CiAKICAg
ICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKIAotICAgIG91dC5kZWJ1ZyA8PCAi
TG9vcCB3aXRoIGNvbmRpdGlvbiAiOwotICAgIGlmICghIG5vZGUtPnRlc3RGaXJzdCgpKQotICAg
ICAgICBvdXQuZGVidWcgPDwgIm5vdCAiOwotICAgIG91dC5kZWJ1ZyA8PCAidGVzdGVkIGZpcnN0
XG4iOworICAgIG91dCA8PCAiTG9vcCB3aXRoIGNvbmRpdGlvbiAiOworICAgIGlmIChub2RlLT5n
ZXRUeXBlKCkgPT0gRUxvb3BEb1doaWxlKQorICAgICAgICBvdXQgPDwgIm5vdCAiOworICAgIG91
dCA8PCAidGVzdGVkIGZpcnN0XG4iOwogCiAgICAgKytkZXB0aDsKIAotICAgIE91dHB1dFRyZWVU
ZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7Ci0gICAgaWYgKG5vZGUtPmdldFRlc3QoKSkgewot
ICAgICAgICBvdXQuZGVidWcgPDwgIkxvb3AgQ29uZGl0aW9uXG4iOwotICAgICAgICBub2RlLT5n
ZXRUZXN0KCktPnRyYXZlcnNlKHRoaXMpOworICAgIE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUs
IGRlcHRoKTsKKyAgICBpZiAobm9kZS0+Z2V0Q29uZGl0aW9uKCkpIHsKKyAgICAgICAgb3V0IDw8
ICJMb29wIENvbmRpdGlvblxuIjsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZl
cnNlKHRoaXMpOwogICAgIH0gZWxzZQotICAgICAgICBvdXQuZGVidWcgPDwgIk5vIGxvb3AgY29u
ZGl0aW9uXG4iOworICAgICAgICBvdXQgPDwgIk5vIGxvb3AgY29uZGl0aW9uXG4iOwogCi0gICAg
T3V0cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBPdXRwdXRUcmVlVGV4
dChzaW5rLCBub2RlLCBkZXB0aCk7CiAgICAgaWYgKG5vZGUtPmdldEJvZHkoKSkgewotICAgICAg
ICBvdXQuZGVidWcgPDwgIkxvb3AgQm9keVxuIjsKKyAgICAgICAgb3V0IDw8ICJMb29wIEJvZHlc
biI7CiAgICAgICAgIG5vZGUtPmdldEJvZHkoKS0+dHJhdmVyc2UodGhpcyk7CiAgICAgfSBlbHNl
Ci0gICAgICAgIG91dC5kZWJ1ZyA8PCAiTm8gbG9vcCBib2R5XG4iOworICAgICAgICBvdXQgPDwg
Ik5vIGxvb3AgYm9keVxuIjsKIAotICAgIGlmIChub2RlLT5nZXRUZXJtaW5hbCgpKSB7Ci0gICAg
ICAgIE91dHB1dFRyZWVUZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7Ci0gICAgICAgIG91dC5k
ZWJ1ZyA8PCAiTG9vcCBUZXJtaW5hbCBFeHByZXNzaW9uXG4iOwotICAgICAgICBub2RlLT5nZXRU
ZXJtaW5hbCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICBpZiAobm9kZS0+Z2V0RXhwcmVzc2lvbigp
KSB7CisgICAgICAgIE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKKyAgICAgICAg
b3V0IDw8ICJMb29wIFRlcm1pbmFsIEV4cHJlc3Npb25cbiI7CisgICAgICAgIG5vZGUtPmdldEV4
cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CiAgICAgfQogCiAgICAgLS1kZXB0aDsKQEAgLTM3
OCwyNSArMzc4LDI1IEBAIGJvb2wgVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRMb29wKFZpc2l0IHYK
IAogYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEJyYW5jaChWaXNpdCB2aXNpdCwgVEludGVy
bUJyYW5jaCogbm9kZSkKIHsKLSAgICBUSW5mb1NpbmsmIG91dCA9IGluZm9TaW5rOworICAgIFRJ
bmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CiAKICAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUs
IGRlcHRoKTsKIAogICAgIHN3aXRjaCAobm9kZS0+Z2V0Rmxvd09wKCkpIHsKLSAgICAgICAgY2Fz
ZSBFT3BLaWxsOiAgICAgIG91dC5kZWJ1ZyA8PCAiQnJhbmNoOiBLaWxsIjsgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcEJyZWFrOiAgICAgb3V0LmRlYnVnIDw8ICJCcmFuY2g6IEJy
ZWFrIjsgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29udGludWU6ICBvdXQuZGVi
dWcgPDwgIkJyYW5jaDogQ29udGludWUiOyAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BS
ZXR1cm46ICAgIG91dC5kZWJ1ZyA8PCAiQnJhbmNoOiBSZXR1cm4iOyAgICAgICAgIGJyZWFrOwot
ICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJCcmFuY2g6IFVua25vd24g
QnJhbmNoIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wS2lsbDogICAgICBvdXQgPDwgIkJyYW5j
aDogS2lsbCI7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BCcmVhazogICAgIG91
dCA8PCAiQnJhbmNoOiBCcmVhayI7ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENv
bnRpbnVlOiAgb3V0IDw8ICJCcmFuY2g6IENvbnRpbnVlIjsgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wUmV0dXJuOiAgICBvdXQgPDwgIkJyYW5jaDogUmV0dXJuIjsgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDogICAgICAgICAgIG91dCA8PCAiQnJhbmNoOiBVbmtub3duIEJy
YW5jaCI7IGJyZWFrOwogICAgIH0KIAogICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpIHsK
LSAgICAgICAgb3V0LmRlYnVnIDw8ICIgd2l0aCBleHByZXNzaW9uXG4iOworICAgICAgICBvdXQg
PDwgIiB3aXRoIGV4cHJlc3Npb25cbiI7CiAgICAgICAgICsrZGVwdGg7CiAgICAgICAgIG5vZGUt
PmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CiAgICAgICAgIC0tZGVwdGg7CiAgICAg
fSBlbHNlCi0gICAgICAgIG91dC5kZWJ1ZyA8PCAiXG4iOworICAgICAgICBvdXQgPDwgIlxuIjsK
IAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTQxMSw3ICs0MTEsNyBAQCB2b2lkIFRJbnRlcm1l
ZGlhdGU6Om91dHB1dFRyZWUoVEludGVybU5vCiAgICAgaWYgKHJvb3QgPT0gMCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgVE91dHB1dFRyYXZlcnNlciBpdChpbmZvU2luayk7CisgICAgVE91dHB1
dFRyYXZlcnNlciBpdChpbmZvU2luay5pbmZvKTsKIAogICAgIHJvb3QtPnRyYXZlcnNlKCZpdCk7
CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRp
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2ludGVybWVkaWF0ZS5oCShyZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDkg
KzEyOSw5IEBAIGVudW0gVE9wZXJhdG9yIHsKICAgICBFT3BSZWZsZWN0LAogICAgIEVPcFJlZnJh
Y3QsCiAKLSAgICAvL0VPcERQZHgsICAgICAgICAgICAgLy8gRnJhZ21lbnQgb25seSwgT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lvbgotICAgIC8vRU9wRFBkeSwgICAgICAgICAgICAv
LyBGcmFnbWVudCBvbmx5LCBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCi0gICAg
Ly9FT3BGd2lkdGgsICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9FU19zdGFuZGFyZF9kZXJp
dmF0aXZlcyBleHRlbnNpb24KKyAgICBFT3BERmR4LCAgICAgICAgICAgIC8vIEZyYWdtZW50IG9u
bHksIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KKyAgICBFT3BERmR5LCAgICAg
ICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNp
b24KKyAgICBFT3BGd2lkdGgsICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9FU19zdGFuZGFy
ZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KIAogICAgIEVPcE1hdHJpeFRpbWVzTWF0cml4LAogCkBA
IC0xODQsNiArMTg0LDggQEAgZW51bSBUT3BlcmF0b3IgewogICAgIEVPcERpdkFzc2lnbiwKIH07
CiAKK2V4dGVybiBjb25zdCBjaGFyKiBnZXRPcGVyYXRvclN0cmluZyhUT3BlcmF0b3Igb3ApOwor
CiBjbGFzcyBUSW50ZXJtVHJhdmVyc2VyOwogY2xhc3MgVEludGVybUFnZ3JlZ2F0ZTsKIGNsYXNz
IFRJbnRlcm1CaW5hcnk7CkBAIC0yNjIsMzAgKzI2NCwzOCBAQCBwcm90ZWN0ZWQ6CiAvLwogLy8g
SGFuZGxlIGZvciwgZG8td2hpbGUsIGFuZCB3aGlsZSBsb29wcy4KIC8vCitlbnVtIFRMb29wVHlw
ZSB7CisgICAgRUxvb3BGb3IsCisgICAgRUxvb3BXaGlsZSwKKyAgICBFTG9vcERvV2hpbGUsCit9
OworCiBjbGFzcyBUSW50ZXJtTG9vcCA6IHB1YmxpYyBUSW50ZXJtTm9kZSB7CiBwdWJsaWM6Ci0g
ICAgVEludGVybUxvb3AoVEludGVybU5vZGUgKmluaXQsIFRJbnRlcm1Ob2RlKiBhQm9keSwgVElu
dGVybVR5cGVkKiBhVGVzdCwgVEludGVybVR5cGVkKiBhVGVybWluYWwsIGJvb2wgdGVzdEZpcnN0
KSA6IAotICAgICAgICAgICAgaW5pdChpbml0KSwKLSAgICAgICAgICAgIGJvZHkoYUJvZHkpLAot
ICAgICAgICAgICAgdGVzdChhVGVzdCksCi0gICAgICAgICAgICB0ZXJtaW5hbChhVGVybWluYWwp
LAotICAgICAgICAgICAgZmlyc3QodGVzdEZpcnN0KSB7IH0KKyAgICBUSW50ZXJtTG9vcChUTG9v
cFR5cGUgYVR5cGUsCisgICAgICAgICAgICAgICAgVEludGVybU5vZGUgKmFJbml0LCBUSW50ZXJt
VHlwZWQqIGFDb25kLCBUSW50ZXJtVHlwZWQqIGFFeHByLAorICAgICAgICAgICAgICAgIFRJbnRl
cm1Ob2RlKiBhQm9keSkgOgorICAgICAgICAgICAgdHlwZShhVHlwZSksCisgICAgICAgICAgICBp
bml0KGFJbml0KSwKKyAgICAgICAgICAgIGNvbmQoYUNvbmQpLAorICAgICAgICAgICAgZXhwcihh
RXhwciksCisgICAgICAgICAgICBib2R5KGFCb2R5KSB7IH0KIAogICAgIHZpcnR1YWwgVEludGVy
bUxvb3AqIGdldEFzTG9vcE5vZGUoKSB7IHJldHVybiB0aGlzOyB9CiAgICAgdmlydHVhbCB2b2lk
IHRyYXZlcnNlKFRJbnRlcm1UcmF2ZXJzZXIqKTsKIAotICAgIFRJbnRlcm1Ob2RlICpnZXRJbml0
KCkgeyByZXR1cm4gaW5pdDsgfQotICAgIFRJbnRlcm1Ob2RlICpnZXRCb2R5KCkgeyByZXR1cm4g
Ym9keTsgfQotICAgIFRJbnRlcm1UeXBlZCAqZ2V0VGVzdCgpIHsgcmV0dXJuIHRlc3Q7IH0KLSAg
ICBUSW50ZXJtVHlwZWQgKmdldFRlcm1pbmFsKCkgeyByZXR1cm4gdGVybWluYWw7IH0KLSAgICBi
b29sIHRlc3RGaXJzdCgpIHsgcmV0dXJuIGZpcnN0OyB9CisgICAgVExvb3BUeXBlIGdldFR5cGUo
KSBjb25zdCB7IHJldHVybiB0eXBlOyB9CisgICAgVEludGVybU5vZGUqIGdldEluaXQoKSB7IHJl
dHVybiBpbml0OyB9CisgICAgVEludGVybVR5cGVkKiBnZXRDb25kaXRpb24oKSB7IHJldHVybiBj
b25kOyB9CisgICAgVEludGVybVR5cGVkKiBnZXRFeHByZXNzaW9uKCkgeyByZXR1cm4gZXhwcjsg
fQorICAgIFRJbnRlcm1Ob2RlKiBnZXRCb2R5KCkgeyByZXR1cm4gYm9keTsgfQogCiBwcm90ZWN0
ZWQ6Ci0gICAgVEludGVybU5vZGUgKmluaXQ7Ci0gICAgVEludGVybU5vZGUgKmJvZHk7ICAgICAg
IC8vIGNvZGUgdG8gbG9vcCBvdmVyCi0gICAgVEludGVybVR5cGVkICp0ZXN0OyAgICAgIC8vIGV4
aXQgY29uZGl0aW9uIGFzc29jaWF0ZWQgd2l0aCBsb29wLCBjb3VsZCBiZSAwIGZvciAnZm9yJyBs
b29wcwotICAgIFRJbnRlcm1UeXBlZCAqdGVybWluYWw7ICAvLyBleGlzdHMgZm9yIGZvci1sb29w
cwotICAgIGJvb2wgZmlyc3Q7ICAgICAgICAgICAgICAvLyB0cnVlIGZvciB3aGlsZSBhbmQgZm9y
LCBub3QgZm9yIGRvLXdoaWxlCisgICAgVExvb3BUeXBlIHR5cGU7CisgICAgVEludGVybU5vZGUq
IGluaXQ7ICAvLyBmb3ItbG9vcCBpbml0aWFsaXphdGlvbgorICAgIFRJbnRlcm1UeXBlZCogY29u
ZDsgLy8gbG9vcCBleGl0IGNvbmRpdGlvbgorICAgIFRJbnRlcm1UeXBlZCogZXhwcjsgLy8gZm9y
LWxvb3AgZXhwcmVzc2lvbgorICAgIFRJbnRlcm1Ob2RlKiBib2R5OyAgLy8gbG9vcCBib2R5CiB9
OwogCiAvLwpAQCAtNDA0LDYgKzQxNCw3IEBAIHByb3RlY3RlZDoKIAogdHlwZWRlZiBUVmVjdG9y
PFRJbnRlcm1Ob2RlKj4gVEludGVybVNlcXVlbmNlOwogdHlwZWRlZiBUVmVjdG9yPGludD4gVFF1
YWxpZmllckxpc3Q7Cit0eXBlZGVmIFRNYXA8VFN0cmluZywgVFN0cmluZz4gVFByYWdtYVRhYmxl
OwogLy8KIC8vIE5vZGVzIHRoYXQgb3BlcmF0ZSBvbiBhbiBhcmJpdHJhcnkgc2l6ZWQgc2V0IG9m
IGNoaWxkcmVuLgogLy8KQEAgLTQxNywxMiArNDI4LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwogCiAgICAgVEludGVybVNlcXVlbmNl
JiBnZXRTZXF1ZW5jZSgpIHsgcmV0dXJuIHNlcXVlbmNlOyB9CisKICAgICB2b2lkIHNldE5hbWUo
Y29uc3QgVFN0cmluZyYgbikgeyBuYW1lID0gbjsgfQogICAgIGNvbnN0IFRTdHJpbmcmIGdldE5h
bWUoKSBjb25zdCB7IHJldHVybiBuYW1lOyB9CiAKICAgICB2b2lkIHNldFVzZXJEZWZpbmVkKCkg
eyB1c2VyRGVmaW5lZCA9IHRydWU7IH0KICAgICBib29sIGlzVXNlckRlZmluZWQoKSB7IHJldHVy
biB1c2VyRGVmaW5lZDsgfQotICAgIFRRdWFsaWZpZXJMaXN0JiBnZXRRdWFsaWZpZXIoKSB7IHJl
dHVybiBxdWFsaWZpZXI7IH0KKwogICAgIHZvaWQgc2V0T3B0aW1pemUoYm9vbCBvKSB7IG9wdGlt
aXplID0gbzsgfQogICAgIGJvb2wgZ2V0T3B0aW1pemUoKSB7IHJldHVybiBvcHRpbWl6ZTsgfQog
ICAgIHZvaWQgc2V0RGVidWcoYm9vbCBkKSB7IGRlYnVnID0gZDsgfQpAQCAtNDM0LDkgKzQ0Niw5
IEBAIHByb3RlY3RlZDoKICAgICBUSW50ZXJtQWdncmVnYXRlKGNvbnN0IFRJbnRlcm1BZ2dyZWdh
dGUmKTsgLy8gZGlzYWxsb3cgY29weSBjb25zdHJ1Y3RvcgogICAgIFRJbnRlcm1BZ2dyZWdhdGUm
IG9wZXJhdG9yPShjb25zdCBUSW50ZXJtQWdncmVnYXRlJik7IC8vIGRpc2FsbG93IGFzc2lnbm1l
bnQgb3BlcmF0b3IKICAgICBUSW50ZXJtU2VxdWVuY2Ugc2VxdWVuY2U7Ci0gICAgVFF1YWxpZmll
ckxpc3QgcXVhbGlmaWVyOwogICAgIFRTdHJpbmcgbmFtZTsKICAgICBib29sIHVzZXJEZWZpbmVk
OyAvLyB1c2VkIGZvciB1c2VyIGRlZmluZWQgZnVuY3Rpb24gbmFtZXMKKwogICAgIGJvb2wgb3B0
aW1pemU7CiAgICAgYm9vbCBkZWJ1ZzsKICAgICBUUHJhZ21hVGFibGUgKnByYWdtYVRhYmxlOwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRp
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2xvY2FsaW50ZXJtZWRpYXRlLmgJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQwLDExICs0MCwxMSBAQCBwdWJsaWM6ICAgIAogICAgIFRJbnRlcm1Db25zdGFudFVuaW9u
KiBhZGRDb25zdGFudFVuaW9uKENvbnN0YW50VW5pb24qLCBjb25zdCBUVHlwZSYsIFRTb3VyY2VM
b2MpOwogICAgIFRJbnRlcm1UeXBlZCogcHJvbW90ZUNvbnN0YW50VW5pb24oVEJhc2ljVHlwZSwg
VEludGVybUNvbnN0YW50VW5pb24qKSA7CiAgICAgYm9vbCBwYXJzZUNvbnN0VHJlZShUU291cmNl
TG9jLCBUSW50ZXJtTm9kZSosIENvbnN0YW50VW5pb24qLCBUT3BlcmF0b3IsIFRTeW1ib2xUYWJs
ZSYsIFRUeXBlLCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZSk7ICAgICAgICAKLSAg
ICBUSW50ZXJtTm9kZSogYWRkTG9vcChUSW50ZXJtTm9kZSosIFRJbnRlcm1Ob2RlKiwgVEludGVy
bVR5cGVkKiwgVEludGVybVR5cGVkKiwgYm9vbCB0ZXN0Rmlyc3QsIFRTb3VyY2VMb2MpOworICAg
IFRJbnRlcm1Ob2RlKiBhZGRMb29wKFRMb29wVHlwZSwgVEludGVybU5vZGUqLCBUSW50ZXJtVHlw
ZWQqLCBUSW50ZXJtVHlwZWQqLCBUSW50ZXJtTm9kZSosIFRTb3VyY2VMb2MpOwogICAgIFRJbnRl
cm1CcmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3IsIFRTb3VyY2VMb2MpOwogICAgIFRJbnRlcm1C
cmFuY2gqIGFkZEJyYW5jaChUT3BlcmF0b3IsIFRJbnRlcm1UeXBlZCosIFRTb3VyY2VMb2MpOwog
ICAgIFRJbnRlcm1UeXBlZCogYWRkU3dpenpsZShUVmVjdG9yRmllbGRzJiwgVFNvdXJjZUxvYyk7
Ci0gICAgYm9vbCBwb3N0UHJvY2VzcyhUSW50ZXJtTm9kZSosIEVTaExhbmd1YWdlKTsKKyAgICBi
b29sIHBvc3RQcm9jZXNzKFRJbnRlcm1Ob2RlKik7CiAJdm9pZCByZW1vdmUoVEludGVybU5vZGUq
KTsKICAgICB2b2lkIG91dHB1dFRyZWUoVEludGVybU5vZGUqKTsKICAgICAKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgJKHJldmlz
aW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5j
bHVkZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04LDggKzgsOCBAQAogI2RlZmluZSBfX09TSU5DTFVE
RV9ICiAKIC8vCi0vLyBUaGlzIGZpbGUgY29udGFpbnMgY29udGFpbnMgdGhlIHdpbmRvdydzIHNw
ZWNpZmljIGRhdGF0eXBlcyBhbmQKLS8vIGRlY2xhcmVzIGFueSB3aW5kb3dzIHNwZWNpZmljIGZ1
bmN0aW9ucy4KKy8vIFRoaXMgZmlsZSBjb250YWlucyBjb250YWlucyBvcy1zcGVjaWZpYyBkYXRh
dHlwZXMgYW5kCisvLyBkZWNsYXJlcyBhbnkgb3Mtc3BlY2lmaWMgZnVuY3Rpb25zLgogLy8KIAog
I2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU42NCkKQEAgLTIyLDcgKzIyLDkgQEAK
ICNlcnJvciBVbnN1cHBvcnRlZCBwbGF0Zm9ybS4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChBTkdM
RV9PU19XSU4pCisjaWYgZGVmaW5lZChBTkdMRV9VU0VfTlNQUikKKyNpbmNsdWRlICJwcnRocmVh
ZC5oIgorI2VsaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCiAjZGVmaW5lIFNUUklDVAogI2RlZmlu
ZSBWQ19FWFRSQUxFQU4gMQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTMwLDIwICszMiwyNCBA
QAogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KICNpbmNsdWRl
IDxlcnJuby5oPgotI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KKyNlbmRpZiAgLy8gQU5HTEVfVVNF
X05TUFIKKwogCiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKIAogLy8KIC8vIFRocmVhZCBM
b2NhbCBTdG9yYWdlIE9wZXJhdGlvbnMKIC8vCi0jaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCisj
aWYgZGVmaW5lZChBTkdMRV9VU0VfTlNQUikKK3R5cGVkZWYgUFJVaW50biBPU19UTFNJbmRleDsK
KyNkZWZpbmUgT1NfSU5WQUxJRF9UTFNfSU5ERVggMHhGRkZGRkZGRgorI2VsaWYgZGVmaW5lZChB
TkdMRV9PU19XSU4pCiB0eXBlZGVmIERXT1JEIE9TX1RMU0luZGV4OwogI2RlZmluZSBPU19JTlZB
TElEX1RMU19JTkRFWCAoVExTX09VVF9PRl9JTkRFWEVTKQogI2VsaWYgZGVmaW5lZChBTkdMRV9P
U19QT1NJWCkKIHR5cGVkZWYgdW5zaWduZWQgaW50IE9TX1RMU0luZGV4OwogI2RlZmluZSBPU19J
TlZBTElEX1RMU19JTkRFWCAweEZGRkZGRkZGCi0jZW5kaWYgIC8vIEFOR0xFX09TX1dJTgorI2Vu
ZGlmICAvLyBBTkdMRV9VU0VfTlNQUgogCiBPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCk7
CiBib29sIE9TX1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUp
OwpAQCAtNTEsOCArNTcsMTAgQEAgYm9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbklu
ZGV4KQogCiBpbmxpbmUgdm9pZCogT1NfR2V0VExTVmFsdWUoT1NfVExTSW5kZXggbkluZGV4KQog
ewotICAgIGFzc2VydChuSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5ERVgpOwotI2lmIGRlZmlu
ZWQoQU5HTEVfT1NfV0lOKQorICAgIEFTU0VSVChuSW5kZXggIT0gT1NfSU5WQUxJRF9UTFNfSU5E
RVgpOworI2lmIGRlZmluZWQoQU5HTEVfVVNFX05TUFIpCisgICAgcmV0dXJuIFBSX0dldFRocmVh
ZFByaXZhdGUobkluZGV4KTsKKyNlbGlmIGRlZmluZWQoQU5HTEVfT1NfV0lOKQogICAgIHJldHVy
biBUbHNHZXRWYWx1ZShuSW5kZXgpOwogI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkKICAg
ICByZXR1cm4gcHRocmVhZF9nZXRzcGVjaWZpYyhuSW5kZXgpOwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zc291cmNlX25zcHIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3NvdXJjZV9uc3ByLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9vc3Nv
dXJjZV9uc3ByLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLy8KKy8vIENvcHly
aWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8KKy8vIFRoaXMgZmlsZSBjb250YWlucyB0aGUgbnNwciBzcGVjaWZpYyBmdW5j
dGlvbnMKKy8vCisjaW5jbHVkZSAiY29tcGlsZXIvb3NpbmNsdWRlLmgiCisKKy8vCisvLyBUaHJl
YWQgTG9jYWwgU3RvcmFnZSBPcGVyYXRpb25zCisvLworT1NfVExTSW5kZXggT1NfQWxsb2NUTFNJ
bmRleCgpCit7CisgICAgUFJVaW50biBpbmRleDsKKyAgICBQUlN0YXR1cyBzdGF0dXMgPSBQUl9O
ZXdUaHJlYWRQcml2YXRlSW5kZXgoJmluZGV4LCBOVUxMKTsKKworICAgIGlmIChzdGF0dXMpIHsK
KyAgICAgICAgYXNzZXJ0KDAgJiYgIk9TX0FsbG9jVExTSW5kZXgoKTogVW5hYmxlIHRvIGFsbG9j
YXRlIFRocmVhZCBMb2NhbCBTdG9yYWdlIik7CisgICAgICAgIHJldHVybiBPU19JTlZBTElEX1RM
U19JTkRFWDsKKyAgICB9CisKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK2Jvb2wgT1NfU2V0VExT
VmFsdWUoT1NfVExTSW5kZXggbkluZGV4LCB2b2lkICpscHZWYWx1ZSkKK3sKKyAgICBpZiAobklu
ZGV4ID09IE9TX0lOVkFMSURfVExTX0lOREVYKSB7CisgICAgICAgIGFzc2VydCgwICYmICJPU19T
ZXRUTFNWYWx1ZSgpOiBJbnZhbGlkIFRMUyBJbmRleCIpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIFBSX1NldFRocmVhZFByaXZhdGUobkluZGV4LCBscHZWYWx1
ZSkgPT0gMDsKK30KKworYm9vbCBPU19GcmVlVExTSW5kZXgoT1NfVExTSW5kZXggbkluZGV4KQor
eworICAgIC8vIENhbid0IGRlbGV0ZSBUTFMga2V5cyB3aXRoIG5zcHIKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3VuaXN0
ZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91
bmlzdGQuaAkocmV2aXNpb24gNzU4MDEpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvdW5pc3RkLmgJKHdvcmtpbmcgY29weSkKQEAgLTEgKzAsMCBAQAotLy8gVGhpcyBp
cyBhIE5VTEwgZmlsZSBhbmQgaXMgbWVhbnQgdG8gYmUgZW1wdHkKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFOR0xFIFBy
b2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJj
ZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8v
IGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAidXRpbC5oIgorCisjaWZkZWYgX01TQ19WRVIK
KyAgICAjaW5jbHVkZSA8bG9jYWxlLmg+CisjZWxzZQorICAgICNpbmNsdWRlIDxzc3RyZWFtPgor
I2VuZGlmCisKK2RvdWJsZSBhdG9mX2RvdChjb25zdCBjaGFyICpzdHIpCit7CisjaWZkZWYgX01T
Q19WRVIKKyAgICBfbG9jYWxlX3QgbCA9IF9jcmVhdGVfbG9jYWxlKExDX05VTUVSSUMsICJDIik7
CisgICAgZG91YmxlIHJlc3VsdCA9IF9hdG9mX2woc3RyLCBsKTsKKyAgICBfZnJlZV9sb2NhbGUo
bCk7CisgICAgcmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgZG91YmxlIHJlc3VsdDsKKyAgICBz
dGQ6OmlzdHJpbmdzdHJlYW0gcyhzdHIpOworICAgIHN0ZDo6bG9jYWxlIGwoIkMiKTsKKyAgICBz
LmltYnVlKGwpOworICAgIHMgPj4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7CisjZW5kaWYK
K30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGlsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3V0aWwuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91dGls
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIw
MDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
Ly8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGlj
ZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNp
Zm5kZWYgQ09NUElMRVJfVVRJTF9ICisjZGVmaW5lIENPTVBJTEVSX1VUSUxfSAorCisjaWZkZWYg
X19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8vIGF0b2ZfZG90IGlzIGxpa2Ug
YXRvZiBidXQgZm9yY2luZyBDIGxvY2FsZSwgaS5lLiBmb3JjaW5nICcuJyBhcyBkZWNpbWFsIHBv
aW50LgorZG91YmxlIGF0b2ZfZG90KGNvbnN0IGNoYXIgKnN0cik7CisKKyNpZmRlZiBfX2NwbHVz
cGx1cworfSAvLyBlbmQgZXh0ZXJuICJDIgorI2VuZGlmCisKKyNlbmRpZiAvLyBDT01QSUxFUl9V
VElMX0gKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvY29tcGlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oCShyZXZpc2lvbiA3NTgwMSkKKysrIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC04OSwxMCArODksMTAgQEAgc3RydWN0IENQUFN0cnVjdF9SZWMg
ewogICAgIC8vIEdsb2JhbHMgdXNlZCB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuIFBhUGFyc2VTdHJp
bmdzKCkgYW5kIHl5X2lucHV0KClhbmQgCiAgICAgLy8gYWxzbyBhY3Jvc3MgdGhlIGZpbGVzLihn
ZW5fZ2xzbGFuZy5jcHAgYW5kIHNjYW5uZXIuYykKICAgICAvLwotICAgIGludCAgICBQYVdoaWNo
U3RyOyAgICAgICAgICAgIC8vIHdoaWNoIHN0cmluZyB3ZSdyZSBwYXJzaW5nCi0gICAgaW50KiAg
IFBhU3RyTGVuOyAgICAgICAgICAgICAgLy8gYXJyYXkgb2YgbGVuZ3RocyBvZiB0aGUgUGFBcmd2
IHN0cmluZ3MKLSAgICBpbnQgICAgUGFBcmdjOyAgICAgICAgICAgICAgICAvLyBjb3VudCBvZiBz
dHJpbmdzIGluIHRoZSBhcnJheQotICAgIGNoYXIqKiBQYUFyZ3Y7ICAgICAgICAgICAgICAgIC8v
IG91ciBhcnJheSBvZiBzdHJpbmdzIHRvIHBhcnNlICAgIAorICAgIGludCBQYVdoaWNoU3RyOyAg
ICAgICAgICAgICAvLyB3aGljaCBzdHJpbmcgd2UncmUgcGFyc2luZworICAgIGNvbnN0IGludCog
UGFTdHJMZW47ICAgICAgICAvLyBhcnJheSBvZiBsZW5ndGhzIG9mIHRoZSBQYUFyZ3Ygc3RyaW5n
cworICAgIGludCBQYUFyZ2M7ICAgICAgICAgICAgICAgICAvLyBjb3VudCBvZiBzdHJpbmdzIGlu
IHRoZSBhcnJheQorICAgIGNvbnN0IGNoYXIqIGNvbnN0KiBQYUFyZ3Y7ICAvLyBvdXIgYXJyYXkg
b2Ygc3RyaW5ncyB0byBwYXJzZSAgICAKICAgICB1bnNpZ25lZCBpbnQgdG9rZW5zQmVmb3JlRU9G
IDogMTsKIH07CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9w
cmVwcm9jZXNzb3IvY3BwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9jcHAuYwkocmV2aXNpb24gNzU4MDEpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTEsNiArMTkxLDkgQEAgc3RhdGljIGludCBDUFBkZWZpbmUoeXlzdHlw
ZXBwICogeXlsdmFscAogICAgICAgICBpZiAodG9rZW4gPT0gJ1xcJykgewogICAgICAgICAgICAg
Q1BQRXJyb3JUb0luZm9Mb2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgKFxcKSBp
cyBub3QgcGFydCBvZiB0aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UiKTsKICAgICAgICAg
ICAgIHJldHVybiB0b2tlbjsKKyAgICAgICAgfSBlbHNlIGlmICh0b2tlbiA8PSAwKSB7IC8vIEVP
RiBvciBlcnJvcgorICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coInVuZXhwZWN0ZWQgZW5k
IG9mIGlucHV0IGluICNkZWZpbmUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEg
bmV3bGluZSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgUmVj
b3JkVG9rZW4obWFjLmJvZHksIHRva2VuLCB5eWx2YWxwcCk7CiAgICAgICAgIHRva2VuID0gY3Bw
LT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKQEAgLTI2
Nyw5ICsyNzAsMTMgQEAgc3RhdGljIGludCBDUFBlbHNlKGludCBtYXRjaGVsc2UsIHl5c3R5cAog
CQogCXdoaWxlICh0b2tlbiA+IDApIHsKICAgICAgICAgaWYgKHRva2VuICE9ICcjJykgewotCQkg
ICAgd2hpbGUgKHRva2VuICE9ICdcbicpCisgICAgICAgICAgICB3aGlsZSAodG9rZW4gIT0gJ1xu
JykgewogICAgICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmICh0b2tlbiA8PSAwKSB7IC8vIEVPRiBvciBlcnJvcgorICAgICAgICAgICAgICAgICAgICBD
UFBFcnJvclRvSW5mb0xvZygidW5leHBlY3RlZCBlbmQgb2YgaW5wdXQgaW4gI2Vsc2UgcHJlcHJv
Y2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5
eWx2YWxwcCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtMjk1LDggKzMw
MiwxMyBAQCBzdGF0aWMgaW50IENQUGVsc2UoaW50IG1hdGNoZWxzZSwgeXlzdHlwCiAgICAgICAg
ICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOwogICAgICAgICAgICAgICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7CiAgICAg
ICAgICAgICAgICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5zIGZv
bGxvd2luZyAjZWxzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5l
Iik7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKQorICAgICAgICAg
ICAgICAgICAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykgewogICAgICAgICAgICAgICAgICAgICAg
ICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9G
IG9yIGVycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2co
InVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGZvbGxvd2luZyAjZWxzZSBwcmVwcm9jZXNzb3IgZGly
ZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICB9IAogCQkJCWJyZWFrOwogCQkJfSAKQEAgLTQ2Nyw5ICs0
NzksMTQgQEAgc3RhdGljIGludCBDUFBpZih5eXN0eXBlcHAgKiB5eWx2YWxwcCkgewogCX0KIAl0
b2tlbiA9IGV2YWwodG9rZW4sIE1JTl9QUkVDLCAmcmVzLCAmZXJyLCB5eWx2YWxwcCk7CiAgICAg
aWYgKHRva2VuICE9ICdcbicpIHsKLSAgICAgICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5leHBl
Y3RlZCB0b2tlbnMgZm9sbG93aW5nIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0
ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKQorICAgICAgICBD
UFBXYXJuaW5nVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIHRva2VucyBmb2xsb3dpbmcgI2lmIHByZXBy
b2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKKyAgICAgICAgd2hpbGUg
KHRva2VuICE9ICdcbicpIHsKICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQt
PnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgIGlmICh0b2tl
biA8PSAwKSB7IC8vIEVPRiBvciBlcnJvcgorICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZv
TG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBpbiAjaWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2
ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CiAgICAgfSAKICAgICBpZiAoIXJlcyAmJiAhZXJyKSB7CiAg
ICAgICAgIHRva2VuID0gQ1BQZWxzZSgxLCB5eWx2YWxwcCk7CkBAIC00OTUsOCArNTEyLDEzIEBA
IHN0YXRpYyBpbnQgQ1BQaWZkZWYoaW50IGRlZmluZWQsIHl5c3R5cGUKICAgICAgICAgdG9rZW4g
PSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwog
ICAgICAgICBpZiAodG9rZW4gIT0gJ1xuJykgewogICAgICAgICAgICAgQ1BQV2FybmluZ1RvSW5m
b0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNpZmRlZiBwcmVwcm9jZXNzb3IgZGly
ZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgICAgICB3aGlsZSAodG9rZW4g
IT0gJ1xuJykKKyAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKSB7CiAgICAgICAgICAg
ICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwg
eXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA8PSAwKSB7IC8vIEVPRiBvciBl
cnJvcgorICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygidW5leHBlY3RlZCBl
bmQgb2YgaW5wdXQgaW4gI2lmZGVmIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBh
IG5ld2xpbmUiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICgoKHMgJiYgIXMtPmRl
dGFpbHMubWFjLnVuZGVmKSA/IDEgOiAwKSAhPSBkZWZpbmVkKQogICAgICAgICAgICAgdG9rZW4g
PSBDUFBlbHNlKDEsIHl5bHZhbHBwKTsKQEAgLTU0NCw3ICs1NjYsMTAgQEAgc3RhdGljIGludCBD
UFBlcnJvcih5eXN0eXBlcHAgKiB5eWx2YWxwcAogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2U7CiAJ
CiAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLQkJaWYgKHRva2VuID09IENQUF9GTE9BVENP
TlNUQU5UIHx8IHRva2VuID09IENQUF9JTlRDT05TVEFOVCl7CisgICAgICAgIGlmICh0b2tlbiA8
PSAwKXsKKyAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBp
bnB1dCBpbiAjZXJyb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGlu
ZSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH1lbHNlIGlmICh0b2tlbiA9PSBD
UFBfRkxPQVRDT05TVEFOVCB8fCB0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpewogICAgICAgICAg
ICAgU3RvcmVTdHIoeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKIAkJfWVsc2UgaWYodG9rZW4gPT0g
Q1BQX0lERU5USUZJRVIgfHwgdG9rZW4gPT0gQ1BQX1NUUkNPTlNUQU5UKXsKIAkJCVN0b3JlU3Ry
KEdldFN0cmluZ09mQXRvbShhdGFibGUseXlsdmFscHAtPnNjX2lkZW50KSk7CkBAIC02NzAsNyAr
Njk1LDcgQEAgc3RhdGljIGludCBDUFBleHRlbnNpb24oeXlzdHlwZXBwICogeXlsdgogewogCiAg
ICAgaW50IHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKLSAgICBjaGFyIGV4dGVuc2lvbk5hbWVbODBdOworICAgIGNoYXIgZXh0ZW5z
aW9uTmFtZVtNQVhfU1lNQk9MX05BTUVfTEVOICsgMV07CiAKICAgICBpZih0b2tlbj09J1xuJyl7
CiAJCURlY0xpbmVOdW1iZXIoKTsKQEAgLTY4Miw3ICs3MDcsOCBAQCBzdGF0aWMgaW50IENQUGV4
dGVuc2lvbih5eXN0eXBlcHAgKiB5eWx2CiAgICAgaWYgKHRva2VuICE9IENQUF9JREVOVElGSUVS
KQogICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiI2V4dGVuc2lvbiIpOwogICAgIAotICAgIHN0
cmNweShleHRlbnNpb25OYW1lLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwgeXlsdmFscHAtPnNjX2lk
ZW50KSk7CisgICAgc3RybmNweShleHRlbnNpb25OYW1lLCBHZXRBdG9tU3RyaW5nKGF0YWJsZSwg
eXlsdmFscHAtPnNjX2lkZW50KSwgTUFYX1NZTUJPTF9OQU1FX0xFTik7CisgICAgZXh0ZW5zaW9u
TmFtZVtNQVhfU1lNQk9MX05BTUVfTEVOXSA9ICdcMCc7CiAJICAgIAogICAgIHRva2VuID0gY3Bw
LT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKICAgICBp
ZiAodG9rZW4gIT0gJzonKSB7CkBAIC03MjYsOCArNzUyLDEzIEBAIGludCByZWFkQ1BQbGluZSh5
eXN0eXBlcHAgKiB5eWx2YWxwcCkKICAgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogICAgICAgICAgICAg
ICAgICBpZiAodG9rZW4gIT0gJ1xuJykgewogICAgICAgICAgICAgICAgICAgICAgQ1BQV2Fybmlu
Z1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNlbHNlIHByZXByb2Nlc3Nv
ciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAgICAgICAgICAgICAg
IHdoaWxlICh0b2tlbiAhPSAnXG4nKQorICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHRva2Vu
ICE9ICdcbicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVu
dElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9GIG9yIGVycm9yCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBp
bnB1dCBpbiAjaWZkZWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGlu
ZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
IH0KIAkJCSAgICAgdG9rZW4gPSBDUFBlbHNlKDAsIHl5bHZhbHBwKTsKICAgICAgICAgICAgICB9
ZWxzZXsKQEAgLTc0Myw4ICs3NzQsMTQgQEAgaW50IHJlYWRDUFBsaW5lKHl5c3R5cGVwcCAqIHl5
bHZhbHBwKQogICAgICAgICAgICAgfSAKICAgICAgICAgICAgIC8vIHRoaXMgdG9rZW4gaXMgcmVh
bGx5IGEgZG9udCBjYXJlLCBidXQgd2Ugc3RpbGwgbmVlZCB0byBlYXQgdGhlIHRva2VucwogICAg
ICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOyAKLSAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKQorICAgICAg
ICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKICAgICAgICAgICAgICAgICB0b2tlbiA9IGNw
cC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAg
ICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9GIG9yIGVycm9yCisgICAgICAgICAg
ICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdCB0b2tlbnMgZm9sbG93aW5nICNl
bGlmIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKKyAgICAg
ICAgICAgICAgICAgICAgY3BwLT5Db21waWxlRXJyb3IgPSAxOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAJCSAgICB0b2tlbiA9
IENQUGVsc2UoMCwgeXlsdmFscHApOwogICAgICAgICB9IGVsc2UgaWYgKHl5bHZhbHBwLT5zY19p
ZGVudCA9PSBlbmRpZkF0b20pIHsKIAkJICAgICAtLWNwcC0+ZWxzZXRyYWNrZXI7CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nl
c3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
cHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAkocmV2aXNpb24gNzU4MDEpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaAkod29y
a2luZyBjb3B5KQpAQCAtNDIsMTAgKzQyLDEwIEBAIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
KSwgU1RSSUNUIExJQUIKIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KIFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jIGluY2x1ZGUgImNv
bXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVw
cm9jZXNzb3Ivc2xnbG9iYWxzLmgiCiBleHRlcm4gQ1BQU3RydWN0ICpjcHA7CiBpbnQgSW5pdENQ
UFN0cnVjdCh2b2lkKTsKIGludCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7CiBpbnQgSW5p
dEF0b21UYWJsZShBdG9tVGFibGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7Ci1pbnQgU2NhbkZyb21T
dHJpbmcoY2hhciAqcyk7CitpbnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hhciAqcyk7CiBjaGFy
KiBHZXRTdHJpbmdPZkF0b20oQXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5j
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3Ivc2Nhbm5lci5jCShyZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5jCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw2ICs0NSw3IEBAIE5WSURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TEkKIC8vIHNjYW5uZXIuYwogLy8KIAorI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHN0
ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC01Miwx
MyArNTMsMTMgQEAgTlZJRElBIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSQogCiAj
aWYgMAogICAgICNpbmNsdWRlIDxpZWVlZnAuaD4KLSAgICAjZWxzZQorI2Vsc2UKICAgICAjZGVm
aW5lIGlzaW5mZih4KSAoKCgqKGludCAqKSYoeCkgJiAweDdmODAwMDAwTCk9PTB4N2Y4MDAwMDBM
KSAmJiBcCiAgICAgICAgICAgICAgICAgICAgICAgICgoKihpbnQgKikmKHgpICYgMHgwMDdmZmZm
ZkwpPT0wMDAwMDAwMDAwTCkpCiAjZW5kaWYKIAogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nl
c3Nvci9zbGdsb2JhbHMuaCIKLQorI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwuaCIKIAogdHlwZWRl
ZiBzdHJ1Y3QgU3RyaW5nSW5wdXRTcmMgewogICAgIElucHV0U3JjIGJhc2U7CkBAIC0xMzMsNDkg
KzEzNCw0OSBAQCBpbnQgRnJlZVNjYW5uZXIodm9pZCkKICAqLwogc3RhdGljIGludCBzdHJfZ2V0
Y2goU3RyaW5nSW5wdXRTcmMgKmluKQogewotCWZvcig7Oyl7Ci0JICAgaWYgKCppbi0+cCl7Ci0J
ICAgICAgaWYgKCppbi0+cCA9PSAnXG4nKSB7CisgICAgZm9yKDs7KXsKKyAgICAgICBpZiAoKmlu
LT5wKXsKKyAgICAgICAgICBpZiAoKmluLT5wID09ICdcbicpIHsKICAgICAgICAgICAgICBpbi0+
YmFzZS5saW5lKys7CiAgICAgICAgICAgICAgSW5jTGluZU51bWJlcigpOwogICAgICAgICAgIH0K
ICAgICAgICAgICByZXR1cm4gKmluLT5wKys7Ci0JICAgfQotCSAgIGlmKCsrKGNwcC0+UGFXaGlj
aFN0cikgPCBjcHAtPlBhQXJnYyl7Ci0JCSAgZnJlZShpbik7Ci0JCSAgU2V0U3RyaW5nTnVtYmVy
KGNwcC0+UGFXaGljaFN0cik7Ci0gICAgCSAgU2V0TGluZU51bWJlcigxKTsKLQkJICBTY2FuRnJv
bVN0cmluZyhjcHAtPlBhQXJndltjcHAtPlBhV2hpY2hTdHJdKTsKLQkJICBpbj0oU3RyaW5nSW5w
dXRTcmMqKWNwcC0+Y3VycmVudElucHV0OwotCSAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAK
LQkgICB9Ci0JICAgZWxzZXsKLQkgICAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluLT5iYXNlLnBy
ZXY7Ci0JICAgICAgY3BwLT5QYVdoaWNoU3RyPTA7CisgICAgICAgfQorICAgICAgIGlmKCsrKGNw
cC0+UGFXaGljaFN0cikgPCBjcHAtPlBhQXJnYyl7CisgICAgICAgICAgZnJlZShpbik7CisgICAg
ICAgICAgU2V0U3RyaW5nTnVtYmVyKGNwcC0+UGFXaGljaFN0cik7CisgICAgICAgICAgU2V0TGlu
ZU51bWJlcigxKTsKKyAgICAgICAgICBTY2FuRnJvbVN0cmluZyhjcHAtPlBhQXJndltjcHAtPlBh
V2hpY2hTdHJdKTsKKyAgICAgICAgICBpbj0oU3RyaW5nSW5wdXRTcmMqKWNwcC0+Y3VycmVudElu
cHV0OworICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgICAKKyAgICAgICB9CisgICAgICAg
ZWxzZXsKKyAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dCA9IGluLT5iYXNlLnByZXY7CisgICAg
ICAgICAgY3BwLT5QYVdoaWNoU3RyPTA7CiAgICAgICAgICAgZnJlZShpbik7CiAgICAgICAgICAg
cmV0dXJuIEVPRjsKICAgICAgICB9ICAKLQl9CisgICAgfQogfSAvLyBzdHJfZ2V0Y2gKIAogc3Rh
dGljIHZvaWQgc3RyX3VuZ2V0Y2goU3RyaW5nSW5wdXRTcmMgKmluLCBpbnQgY2gsIHl5c3R5cGVw
cCAqdHlwZSkgewogICAgIGlmIChpbi0+cFstMV0gPT0gY2gpaW4tPnAtLTsKLQllbHNlIHsKLQkJ
Kihpbi0+cCk9J1wwJzsgLy90aGlzIHdvdWxkIHRha2UgY2FyZSBvZiBzaGlmdGluZyB0byB0aGUg
cHJldmlvdXMgc3RyaW5nLgotCSAgICBjcHAtPlBhV2hpY2hTdHItLTsKLQl9ICAKLQlpZiAoY2gg
PT0gJ1xuJykgeworICAgIGVsc2UgeworICAgICAgICAqKGluLT5wKT0nXDAnOyAvL3RoaXMgd291
bGQgdGFrZSBjYXJlIG9mIHNoaWZ0aW5nIHRvIHRoZSBwcmV2aW91cyBzdHJpbmcuCisgICAgICAg
IGNwcC0+UGFXaGljaFN0ci0tOworICAgIH0gIAorICAgIGlmIChjaCA9PSAnXG4nKSB7CiAgICAg
ICAgIGluLT5iYXNlLmxpbmUtLTsKICAgICAgICAgRGVjTGluZU51bWJlcigpOwogICAgIH0KIH0g
Ly8gc3RyX3VuZ2V0Y2gKIAotaW50IFNjYW5Gcm9tU3RyaW5nKGNoYXIgKnMpCitpbnQgU2NhbkZy
b21TdHJpbmcoY29uc3QgY2hhciAqcykKIHsKICAgICAKLQlTdHJpbmdJbnB1dFNyYyAqaW4gPSBt
YWxsb2Moc2l6ZW9mKFN0cmluZ0lucHV0U3JjKSk7CisgICAgU3RyaW5nSW5wdXRTcmMgKmluID0g
bWFsbG9jKHNpemVvZihTdHJpbmdJbnB1dFNyYykpOwogICAgIG1lbXNldChpbiwgMCwgc2l6ZW9m
KFN0cmluZ0lucHV0U3JjKSk7Ci0JaW4tPnAgPSBzOworICAgIGluLT5wID0gczsKICAgICBpbi0+
YmFzZS5saW5lID0gMTsKICAgICBpbi0+YmFzZS5zY2FuID0gYnl0ZV9zY2FuOwogICAgIGluLT5i
YXNlLmdldGNoID0gKGludCAoKikoSW5wdXRTcmMgKiwgeXlzdHlwZXBwICopKXN0cl9nZXRjaDsK
QEAgLTE5MCwxMTkgKzE5MSw2MyBAQCBpbnQgU2NhbkZyb21TdHJpbmcoY2hhciAqcykKIC8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLyBGbG9hdGluZyBwb2ludCBjb25zdGFudHM6IC8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
LS8qCi0gKiBsQnVpbGRGbG9hdFZhbHVlKCkgLSBRdWljayBhbmQgZGlydHkgY29udmVyc2lvbiB0
byBmbG9hdGluZyBwb2ludC4gIFNpbmNlIGFsbAotICogICAgICAgICB3ZSBuZWVkIGlzIHNpbmds
ZSBwcmVjaXNpb24gdGhpcyBzaG91bGQgYmUgcXVpdGUgcHJlY2lzZS4KLSAqLwotCi1zdGF0aWMg
ZmxvYXQgbEJ1aWxkRmxvYXRWYWx1ZShjb25zdCBjaGFyICpzdHIsIGludCBsZW4sIGludCBleHAp
Ci17Ci0gICAgZG91YmxlIHZhbCwgZXhwdmFsLCB0ZW47Ci0gICAgaW50IGlpLCBsbGVuLCBhYnNl
eHA7Ci0gICAgZmxvYXQgcnY7Ci0KLSAgICB2YWwgPSAwLjA7Ci0gICAgbGxlbiA9IGxlbjsKLSAg
ICBmb3IgKGlpID0gMDsgaWkgPCBsZW47IGlpKyspCi0gICAgICAgIHZhbCA9IHZhbCoxMC4wICsg
KHN0cltpaV0gLSAnMCcpOwotICAgIGlmIChleHAgIT0gMCkgewotICAgICAgICBhYnNleHAgPSBl
eHAgPiAwID8gZXhwIDogLWV4cDsKLSAgICAgICAgZXhwdmFsID0gMS4wZjsKLSAgICAgICAgdGVu
ID0gMTAuMDsKLSAgICAgICAgd2hpbGUgKGFic2V4cCkgewotICAgICAgICAgICAgaWYgKGFic2V4
cCAmIDEpCi0gICAgICAgICAgICAgICAgZXhwdmFsICo9IHRlbjsKLSAgICAgICAgICAgIHRlbiAq
PSB0ZW47Ci0gICAgICAgICAgICBhYnNleHAgPj49IDE7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KGV4cCA+PSAwKSB7Ci0gICAgICAgICAgICB2YWwgKj0gZXhwdmFsOwotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgdmFsIC89IGV4cHZhbDsKLSAgICAgICAgfQotICAgIH0KLSAgICBydiA9
IChmbG9hdCl2YWw7Ci0gICAgaWYgKGlzaW5mZihydikpIHsKLQkJQ1BQRXJyb3JUb0luZm9Mb2co
IiBFUlJPUl9fX0ZQX0NPTlNUX09WRVJGTE9XIik7Ci0gICAgfQotICAgIHJldHVybiBydjsKLX0g
Ly8gbEJ1aWxkRmxvYXRWYWx1ZQogCisjZGVmaW5lIEFQUEVORF9DSEFSX1MoY2gsIHN0ciwgbGVu
LCBtYXhfbGVuKSBcCisgICAgICBpZiAobGVuIDwgbWF4X2xlbikgeyBcCisgICAgICAgICAgc3Ry
W2xlbisrXSA9IGNoOyBcCisgICAgICB9IGVsc2UgaWYgKCFhbHJlYWR5Q29tcGxhaW5lZCkgeyBc
CisgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkJVRkZFUiBPVkVSRkxPVyIpOyBcCisgICAg
ICAgICAgYWxyZWFkeUNvbXBsYWluZWQgPSAxOyBcCisgICAgICB9CiAKIC8qCiAgKiBsRmxvYXRD
b25zdCgpIC0gU2NhbiBhIGZsb2F0aW5nIHBvaW50IGNvbnN0YW50LiAgQXNzdW1lcyB0aGF0IHRo
ZSBzY2FubmVyCiAgKiAgICAgICAgIGhhcyBzZWVuIGF0IGxlYXN0IG9uZSBkaWdpdCwgZm9sbG93
ZWQgYnkgZWl0aGVyIGEgZGVjaW1hbCAnLicgb3IgdGhlCiAgKiAgICAgICAgIGxldHRlciAnZScu
CisgKiBjaCAtICcuJyBvciAnZScKKyAqIGxlbiAtIGxlbmd0aCBvZiBzdHJpbmcgYWxyZWFkeSBj
b3BpZWQgaW50byB5eWx2YWxwcC0+c3ltYm9sX25hbWUuCiAgKi8KIAotc3RhdGljIGludCBsRmxv
YXRDb25zdChjaGFyICpzdHIsIGludCBsZW4sIGludCBjaCwgeXlzdHlwZXBwICogeXlsdmFscHAp
CitzdGF0aWMgaW50IGxGbG9hdENvbnN0KGludCBjaCwgaW50IGxlbiwgeXlzdHlwZXBwICogeXls
dmFscHApCiB7Ci0gICAgaW50IEhhc0RlY2ltYWwsIGRlY2xlbiwgZXhwLCBFeHBTaWduOwotICAg
IGludCBzdHJfbGVuOwotICAgIGZsb2F0IGx2YWw7Ci0gICAgCi0gICAgSGFzRGVjaW1hbCA9IDA7
Ci0gICAgZGVjbGVuID0gMDsKLSAgICBleHAgPSAwOwotCQotICAgIHN0cl9sZW49bGVuOworICAg
IGludCBhbHJlYWR5Q29tcGxhaW5lZCA9IDA7CisgICAgYXNzZXJ0KChjaCA9PSAnLicpIHx8IChj
aCA9PSAnZScpIHx8IChjaCA9PSAnRScpKTsKKwogICAgIGlmIChjaCA9PSAnLicpIHsKLQkJc3Ry
W2xlbisrXT1jaDsKLSAgICAgICAgSGFzRGVjaW1hbCA9IDE7Ci0gICAgICAgIGNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAg
IHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7Ci0gICAgICAgICAgICBpZiAobGVuIDwg
TUFYX1NZTUJPTF9OQU1FX0xFTikgewotICAgICAgICAgICAgICAgIGRlY2xlbisrOwotICAgICAg
ICAgICAgICAgIGlmIChsZW4gPiAwIHx8IGNoICE9ICcwJykgewotICAgICAgICAgICAgICAgICAg
ICBzdHJbbGVuXSA9IGNoOwotICAgICAgICAgICAgICAgICAgICBsZW4rKztzdHJfbGVuKys7Ci0g
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQt
PmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0ZQX0NPTlNUX1RP
T19MT05HIik7Ci0gICAgICAgICAgICAgICAgbGVuID0gMSxzdHJfbGVuPTE7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KKyAgICAgICAgZG8geworICAgICAgICAgICAgQVBQRU5EX0NIQVJfUyhj
aCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1CT0xfTkFNRV9MRU4pOworICAg
ICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKKyAgICAgICAgfSB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jyk7CiAg
ICAgfQogCiAgICAgLy8gRXhwb25lbnQ6Ci0KICAgICBpZiAoY2ggPT0gJ2UnIHx8IGNoID09ICdF
JykgewotICAgICAgICBFeHBTaWduID0gMTsKLQkJc3RyW2xlbisrXT1jaDsKKyAgICAgICAgQVBQ
RU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1CT0xfTkFN
RV9MRU4pOwogICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOwogICAgICAgICBpZiAoY2ggPT0gJysnKSB7Ci0gICAgICAgICAg
ICBzdHJbbGVuKytdPWNoOyAgCi0JCQljaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgQVBQRU5EX0NIQVJfUyhjaCwg
eXlsdmFscHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1CT0xfTkFNRV9MRU4pOworICAgICAg
ICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnLScpIHsKLSAgICAgICAgICAgIEV4
cFNpZ24gPSAtMTsKLQkJCXN0cltsZW4rK109Y2g7CisgICAgICAgICAgICBBUFBFTkRfQ0hBUl9T
KGNoLCB5eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgTUFYX1NZTUJPTF9OQU1FX0xFTik7CiAg
ICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOwogICAgICAgICB9CiAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0g
JzknKSB7CiAgICAgICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgewotICAg
ICAgICAgICAgICAgIGV4cCA9IGV4cCoxMCArIGNoIC0gJzAnOwotCQkJCXN0cltsZW4rK109Y2g7
CisgICAgICAgICAgICAgICAgQVBQRU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1l
LCBsZW4sIE1BWF9TWU1CT0xfTkFNRV9MRU4pOwogICAgICAgICAgICAgICAgIGNoID0gY3BwLT5j
dXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygi
RVJST1JfX19FUlJPUl9JTl9FWFBPTkVOVCIpOworICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9M
b2coIkVYUE9ORU5UIElOVkFMSUQiKTsKICAgICAgICAgfQotICAgICAgICBleHAgKj0gRXhwU2ln
bjsKICAgICB9Ci0gICAgICAKLSAgICBpZiAobGVuID09IDApIHsKLSAgICAgICAgbHZhbCA9IDAu
MGY7Ci0JCXN0cmNweShzdHIsIjAuMCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN0cltsZW5d
PSdcMCc7ICAgICAgCi0gICAgICAgIGx2YWwgPSBsQnVpbGRGbG9hdFZhbHVlKHN0ciwgc3RyX2xl
biwgZXhwIC0gZGVjbGVuKTsKKyAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1
cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKworICAgIGFzc2VydChsZW4gPD0gTUFYX1NZTUJP
TF9OQU1FX0xFTik7CisgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOworICAg
IHl5bHZhbHBwLT5zY19mdmFsID0gKGZsb2F0KSBhdG9mX2RvdCh5eWx2YWxwcC0+c3ltYm9sX25h
bWUpOworICAgIGlmIChpc2luZmYoeXlsdmFscHAtPnNjX2Z2YWwpKSB7CisgICAgICAgIENQUEVy
cm9yVG9JbmZvTG9nKCJGTE9BVCBDT05TVEFOVCBPVkVSRkxPVyIpOwogICAgIH0KLSAgICAvLyBT
dWZmaXg6Ci0gICAgCi0gICAgeXlsdmFscHAtPnNjX2Z2YWwgPSBsdmFsOwotICAgIHN0cmNweSh5
eWx2YWxwcC0+c3ltYm9sX25hbWUsc3RyKTsKLSAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsgICAgICAgICAgICAKICAgICByZXR1
cm4gQ1BQX0ZMT0FUQ09OU1RBTlQ7CiB9IC8vIGxGbG9hdENvbnN0CiAKQEAgLTMxMiwyOSArMjU3
LDI5IEBAIHN0YXRpYyBpbnQgbEZsb2F0Q29uc3QoY2hhciAqc3RyLCBpbnQgbGUKICAgICAKIHN0
YXRpYyBpbnQgYnl0ZV9zY2FuKElucHV0U3JjICppbiwgeXlzdHlwZXBwICogeXlsdmFscHApCiB7
Ci0gICAgY2hhciBzeW1ib2xfbmFtZVtNQVhfU1lNQk9MX05BTUVfTEVOICsgMV07CiAgICAgY2hh
ciBzdHJpbmdfdmFsW01BWF9TVFJJTkdfTEVOICsgMV07Ci0gICAgaW50IEFscmVhZHlDb21wbGFp
bmVkOworICAgIGludCBhbHJlYWR5Q29tcGxhaW5lZCA9IDA7CiAgICAgaW50IGxlbiwgY2gsIGlp
LCBpdmFsID0gMDsKIAogICAgIGZvciAoOzspIHsKICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9
IDA7CiAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7Ci0JCQorIAogICAgICAgICB3aGlsZSAoY2ggPT0gJyAnIHx8IGNoID09
ICdcdCcgfHwgY2ggPT0gJ1xyJykgewogICAgICAgICAgICAgeXlsdmFscHAtPnNjX2ludCA9IDE7
CiAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwogICAgICAgICB9Ci0JCQorICAgICAgICAKICAgICAgICAgY3BwLT5s
dG9rZW5Mb2MuZmlsZSA9IGNwcC0+Y3VycmVudElucHV0LT5uYW1lOwogICAgICAgICBjcHAtPmx0
b2tlbkxvYy5saW5lID0gY3BwLT5jdXJyZW50SW5wdXQtPmxpbmU7CisgICAgICAgIGFscmVhZHlD
b21wbGFpbmVkID0gMDsKICAgICAgICAgbGVuID0gMDsKICAgICAgICAgc3dpdGNoIChjaCkgewog
ICAgICAgICBkZWZhdWx0OgotCQkJcmV0dXJuIGNoOyAvLyBTaW5nbGUgY2hhcmFjdGVyIHRva2Vu
CisgICAgICAgICAgICByZXR1cm4gY2g7IC8vIFNpbmdsZSBjaGFyYWN0ZXIgdG9rZW4KICAgICAg
ICAgY2FzZSBFT0Y6CiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0JCWNhc2UgJ0EnOiBjYXNlICdC
JzogY2FzZSAnQyc6IGNhc2UgJ0QnOiBjYXNlICdFJzoKKyAgICAgICAgY2FzZSAnQSc6IGNhc2Ug
J0InOiBjYXNlICdDJzogY2FzZSAnRCc6IGNhc2UgJ0UnOgogICAgICAgICBjYXNlICdGJzogY2Fz
ZSAnRyc6IGNhc2UgJ0gnOiBjYXNlICdJJzogY2FzZSAnSic6CiAgICAgICAgIGNhc2UgJ0snOiBj
YXNlICdMJzogY2FzZSAnTSc6IGNhc2UgJ04nOiBjYXNlICdPJzoKICAgICAgICAgY2FzZSAnUCc6
IGNhc2UgJ1EnOiBjYXNlICdSJzogY2FzZSAnUyc6IGNhc2UgJ1QnOgpAQCAtMzQ3LDM5ICsyOTIs
MzIgQEAgc3RhdGljIGludCBieXRlX3NjYW4oSW5wdXRTcmMgKmluLCB5eXN0eQogICAgICAgICBj
YXNlICd1JzogY2FzZSAndic6IGNhc2UgJ3cnOiBjYXNlICd4JzogY2FzZSAneSc6CiAgICAgICAg
IGNhc2UgJ3onOiAgICAgICAgICAgIAogICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAg
IGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5
bWJvbF9uYW1lW2xlbl0gPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgbGVuKys7Ci0gICAgICAg
ICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCB5eWx2YWxwcCk7CQkJCQkKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBUFBFTkRf
Q0hBUl9TKGNoLCB5eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgTUFYX1NZTUJPTF9OQU1FX0xF
Tik7CisgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5j
dXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKICAgICAgICAgICAgIH0gd2hpbGUgKChjaCA+PSAnYScg
JiYgY2ggPD0gJ3onKSB8fAogICAgICAgICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8
PSAnWicpIHx8CiAgICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykg
fHwKICAgICAgICAgICAgICAgICAgICAgIGNoID09ICdfJyk7Ci0gICAgICAgICAgICBpZiAobGVu
ID49IE1BWF9TWU1CT0xfTkFNRV9MRU4pCi0gICAgICAgICAgICAgICAgbGVuID0gTUFYX1NZTUJP
TF9OQU1FX0xFTiAtIDE7Ci0gICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKKyAg
ICAgICAgICAgIGFzc2VydChsZW4gPD0gTUFYX1NZTUJPTF9OQU1FX0xFTik7CisgICAgICAgICAg
ICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7CiAgICAgICAgICAgICBjcHAtPmN1
cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAg
ICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHN5
bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0
cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CiAgICAgICAgICAgICByZXR1cm4g
Q1BQX0lERU5USUZJRVI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAnMCc6Ci0g
ICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAgICAg
ICBBUFBFTkRfQ0hBUl9TKGNoLCB5eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgTUFYX1NZTUJP
TF9OQU1FX0xFTik7CiAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChj
cHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09ICd4JyB8
fCBjaCA9PSAnWCcpIHsKLQkJCQl5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuKytdID0gY2g7Cisg
ICAgICAgICAgICBpZiAoY2ggPT0gJ3gnIHx8IGNoID09ICdYJykgeyAgLy8gaGV4YWRlY2ltYWwg
aW50ZWdlciBjb25zdGFudHMKKyAgICAgICAgICAgICAgICBBUFBFTkRfQ0hBUl9TKGNoLCB5eWx2
YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgTUFYX1NZTUJPTF9OQU1FX0xFTik7CiAgICAgICAgICAg
ICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5
bHZhbHBwKTsKICAgICAgICAgICAgICAgICBpZiAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHx8
CiAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSB8fAogICAgICAg
ICAgICAgICAgICAgICAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykpCiAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxhaW5lZCA9IDA7CiAgICAgICAgICAg
ICAgICAgICAgIGl2YWwgPSAwOwogICAgICAgICAgICAgICAgICAgICBkbyB7Ci0JCQkJCQl5eWx2
YWxwcC0+c3ltYm9sX25hbWVbbGVuKytdID0gY2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaXZhbCA8PSAweDBmZmZmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGl2
YWwgPD0gMHgwZmZmZmZmZikgJiYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbisrXSA9IGNo
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzkn
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gY2ggLSAnMCc7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAnQScgJiYgY2ggPD0gJ0Yn
KSB7CkBAIC0zODgsNzQgKzMyNiw2NyBAQCBzdGF0aWMgaW50IGJ5dGVfc2NhbihJbnB1dFNyYyAq
aW4sIHl5c3R5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gY2ggLSAnYScg
KyAxMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaXZhbCA9IChpdmFsIDw8IDQpIHwgaWk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQWxyZWFkeUNvbXBs
YWluZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9n
KCJFUlJPUl9fX0hFWF9DT05TVF9PVkVSRkxPVyIpOwotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFscmVhZHlDb21wbGFpbmVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoIWFscmVhZHlDb21wbGFpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q1BQRXJyb3JUb0luZm9Mb2coIkhFWCBDT05TVEFOVCBPVkVSRkxPVyIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFscmVhZHlDb21wbGFpbmVkID0gMTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQt
PmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CiAgICAgICAgICAgICAgICAgICAg
IH0gd2hpbGUgKChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB8fAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoY2ggPj0gJ0EnICYmIGNoIDw9ICdGJykgfHwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGNoID49ICdhJyAmJiBjaCA8PSAnZicpKTsKICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19F
UlJPUl9JTl9IRVhfQ09OU1RBTlQiKTsKKyAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0lu
Zm9Mb2coIkhFWCBDT05TVEFOVCBJTlZBTElEIik7CiAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGFzc2VydChsZW4gPD0gTUFYX1NZTUJPTF9OQU1FX0xFTik7CiAgICAgICAgICAg
ICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbl0gPSAnXDAnOwotCQkJCWNwcC0+Y3VycmVu
dElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwotCQkJCXl5
bHZhbHBwLT5zY19pbnQgPSBpdmFsOworICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0
LT51bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAg
ICAgIHl5bHZhbHBwLT5zY19pbnQgPSBpdmFsOwogICAgICAgICAgICAgICAgIHJldHVybiBDUFBf
SU5UQ09OU1RBTlQ7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAn
NycpIHsgLy8gb2N0YWwgaW50ZWdlciBjb25zdGFudHMKLSAgICAgICAgICAgICAgICBBbHJlYWR5
Q29tcGxhaW5lZCA9IDA7CiAgICAgICAgICAgICAgICAgaXZhbCA9IDA7CiAgICAgICAgICAgICAg
ICAgZG8gewotICAgICAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuKytd
ID0gY2g7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpdmFsIDw9IDB4MWZmZmZmZmYpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKChpdmFsIDw9IDB4MWZmZmZmZmYpICYmIChsZW4gPCBNQVhf
U1lNQk9MX05BTUVfTEVOKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5
bWJvbF9uYW1lW2xlbisrXSA9IGNoOwogICAgICAgICAgICAgICAgICAgICAgICAgaWkgPSBjaCAt
ICcwJzsKICAgICAgICAgICAgICAgICAgICAgICAgIGl2YWwgPSAoaXZhbCA8PCAzKSB8IGlpOwot
ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KCFBbHJlYWR5Q29tcGxhaW5lZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9y
VG9JbmZvTG9nKCJFUlJPUl9fX09DVF9DT05TVF9PVkVSRkxPVyIpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgQWxyZWFkeUNvbXBsYWluZWQgPSAxOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKCFhbHJlYWR5Q29tcGxhaW5lZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgQ1BQ
RXJyb3JUb0luZm9Mb2coIk9DVCBDT05TVEFOVCBPVkVSRkxPVyIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYWxyZWFkeUNvbXBsYWluZWQgPSAxOwogICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7CiAgICAgICAgICAgICAgICAgfSB3aGlsZSAoY2ggPj0gJzAn
ICYmIGNoIDw9ICc3Jyk7CiAgICAgICAgICAgICAgICAgaWYgKGNoID09ICcuJyB8fCBjaCA9PSAn
ZScgfHwgY2ggPT0gJ2YnIHx8IGNoID09ICdoJyB8fCBjaCA9PSAneCd8fCBjaCA9PSAnRScpIAot
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxGbG9hdENvbnN0KHl5bHZhbHBwLT5zeW1ib2xf
bmFtZSwgbGVuLCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxG
bG9hdENvbnN0KGNoLCBsZW4sIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQobGVu
IDw9IE1BWF9TWU1CT0xfTkFNRV9MRU4pOwogICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1i
b2xfbmFtZVtsZW5dID0gJ1wwJzsKLQkJCQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAt
PmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLQkJCQl5eWx2YWxwcC0+c2NfaW50ID0gaXZh
bDsKKyAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50
ID0gaXZhbDsKICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX0lOVENPTlNUQU5UOwogICAgICAg
ICAgICAgfSBlbHNlIHsKLQkJCQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsKLQkJCQljaCA9ICcwJzsKKyAgICAgICAgICAgICAgICBj
cHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBw
KTsKKyAgICAgICAgICAgICAgICBjaCA9ICcwJzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IC8vIEZhbGwgdGhyb3VnaC4uLgogICAgICAgICBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMn
OiBjYXNlICc0JzoKICAgICAgICAgY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzogY2FzZSAn
OCc6IGNhc2UgJzknOgogICAgICAgICAgICAgZG8gewotICAgICAgICAgICAgICAgIGlmIChsZW4g
PCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPiAw
IHx8IGNoICE9ICcwJykgewotICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJv
bF9uYW1lW2xlbl0gPSBjaDsKLSAgICAgICAgICAgICAgICAgICBsZW4rKzsKLSAgICAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5n
ZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBBUFBFTkRfQ0hBUl9TKGNoLCB5eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxl
biwgTUFYX1NZTUJPTF9OQU1FX0xFTik7CisgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJl
bnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKICAgICAgICAgICAg
IH0gd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpOwogICAgICAgICAgICAgaWYgKGNoID09
ICcuJyB8fCBjaCA9PSAnZScgfHwgY2ggPT0gJ2YnIHx8IGNoID09ICdoJyB8fCBjaCA9PSAneCd8
fCBjaCA9PSAnRScpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbEZsb2F0Q29uc3QoeXlsdmFs
cHAtPnN5bWJvbF9uYW1lLCBsZW4sIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGxGbG9hdENvbnN0KGNoLCBsZW4sIHl5bHZhbHBwKTsKICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgYXNzZXJ0KGxlbiA8PSBNQVhfU1lNQk9MX05BTUVfTEVOKTsKICAg
ICAgICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0JCQkJY3Bw
LT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7
CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIGNoLCB5eWx2YWxwcCk7CiAgICAgICAgICAgICAgICAgaXZhbCA9IDA7Ci0gICAgICAg
ICAgICAgICAgQWxyZWFkeUNvbXBsYWluZWQgPSAwOwogICAgICAgICAgICAgICAgIGZvciAoaWkg
PSAwOyBpaSA8IGxlbjsgaWkrKykgewogICAgICAgICAgICAgICAgICAgICBjaCA9IHl5bHZhbHBw
LT5zeW1ib2xfbmFtZVtpaV0gLSAnMCc7CisgICAgICAgICAgICAgICAgICAgIGl2YWwgPSBpdmFs
KjEwICsgY2g7CiAgICAgICAgICAgICAgICAgICAgIGlmICgoaXZhbCA+IDIxNDc0ODM2NCkgfHwg
KGl2YWwgPT0gMjE0NzQ4MzY0ICYmIGNoID49IDgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIUFscmVhZHlDb21wbGFpbmVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BQ
RXJyb3JUb0luZm9Mb2coIkVSUk9SX19fSU5URUdFUl9DT05TVF9PVkVSRkxPVyIpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgQWxyZWFkeUNvbXBsYWluZWQgPSAxOworICAgICAgICAgICAgICAg
ICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIklOVEVHRVIgQ09OU1RBTlQgT1ZFUkZMT1ciKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgICAgIGl2YWwgPSBpdmFsKjEwICsgY2g7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pbnQgPSBpdmFsOwogICAgICAgICAgICAg
ICAgIGlmKGl2YWw9PTApCkBAIC02MDgsNyArNTM5LDcgQEAgc3RhdGljIGludCBieXRlX3NjYW4o
SW5wdXRTcmMgKmluLCB5eXN0eQogICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+
Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKICAgICAgICAgICAgIGlmIChjaCA+
PSAnMCcgJiYgY2ggPD0gJzknKSB7CiAgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQt
PnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIGxGbG9hdENvbnN0KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgMCwgJy4nLCB5eWx2
YWxwcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxGbG9hdENvbnN0KCcuJywgMCwgeXlsdmFs
cHApOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJy4n
KSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsgLy8gU3BlY2lhbCBFT0YgaGFjawpA
QCAtNjMzLDE0ICs1NjQsMTQgQEAgc3RhdGljIGludCBieXRlX3NjYW4oSW5wdXRTcmMgKmluLCB5
eXN0eQogICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2ggIT0gJyonKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoY2ggPT0gJ1xuJykgbmxjb3VudCsrOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoID09IEVPRikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQ
UEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0VPRl9JTl9DT01NRU5UIik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVPRiBJTiBDT01NRU5UIik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0
Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1
cnJlbnRJbnB1dCwgeXlsdmFscHApOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gRU9G
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19F
T0ZfSU5fQ09NTUVOVCIpOworICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9M
b2coIkVPRiBJTiBDT01NRU5UIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7
CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IHdoaWxlIChjaCAhPSAn
LycpOwpAQCAtNjYyLDQxICs1OTMsNDAgQEAgc3RhdGljIGludCBieXRlX3NjYW4oSW5wdXRTcmMg
KmluLCB5eXN0eQogICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiVGhlIGxp
bmUgY29udGludWF0aW9uIGNoYXJhY3RlciAoXFwpIGlzIG5vdCBwYXJ0IG9mIHRoZSBPcGVuR0wg
RVMgU2hhZGluZyBMYW5ndWFnZSIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1RSSU5HX0xF
TikgewotICAgICAgICAgICAgICAgICAgICBzdHJpbmdfdmFsW2xlbl0gPSBjaDsKLSAgICAgICAg
ICAgICAgICAgICAgbGVuKys7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50
SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHN0cmluZ192YWwsIGxlbiwg
TUFYX1NUUklOR19MRU4pOworICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQt
PmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CiAgICAgICAgICAgICB9OworICAg
ICAgICAgICAgYXNzZXJ0KGxlbiA8PSBNQVhfU1RSSU5HX0xFTik7CiAgICAgICAgICAgICBzdHJp
bmdfdmFsW2xlbl0gPSAnXDAnOwogICAgICAgICAgICAgaWYgKGNoID09ICciJykgewogICAgICAg
ICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUsIHN0
cmluZ192YWwpOwogICAgICAgICAgICAgICAgIHJldHVybiBDUFBfU1RSQ09OU1RBTlQ7CiAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJP
Ul9fX0NQUF9FT0xfSU5fU1RSSU5HIik7CisgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9M
b2coIkVPTCBJTiBTVFJJTkciKTsKICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JfU1k7CiAg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIH0gLy8g
Ynl0ZV9zY2FuCiAKIGludCB5eWxleF9DUFAoY2hhciogYnVmLCBpbnQgbWF4U2l6ZSkKIHsgICAg
Ci0JeXlzdHlwZXBwIHl5bHZhbHBwOworICAgIHl5c3R5cGVwcCB5eWx2YWxwcDsKICAgICBpbnQg
dG9rZW4gPSAnXG4nOyAgIAogCiAgICAgZm9yKDs7KSB7CiAKICAgICAgICAgY2hhciogdG9rZW5T
dHJpbmcgPSAwOwogICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+
Y3VycmVudElucHV0LCAmeXlsdmFscHApOwotCQlpZihjaGVja19FT0YodG9rZW4pKQotCQkgICAg
cmV0dXJuIDA7CisgICAgICAgIGlmKGNoZWNrX0VPRih0b2tlbikpCisgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgaWYgKHRva2VuID09ICcjJykgewogICAgICAgICAgICAgaWYgKGNwcC0+
cHJldmlvdXNfdG9rZW4gPT0gJ1xuJ3x8IGNwcC0+cHJldmlvdXNfdG9rZW4gPT0gMCkgewotCQkJ
ICAgIHRva2VuID0gcmVhZENQUGxpbmUoJnl5bHZhbHBwKTsKKyAgICAgICAgICAgICAgICB0b2tl
biA9IHJlYWRDUFBsaW5lKCZ5eWx2YWxwcCk7CiAgICAgICAgICAgICAgICAgaWYoY2hlY2tfRU9G
KHRva2VuKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0JCQkgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJwcmVwcm9jZXNzb3IgY29tbWFuZCBtdXN0IG5v
dCBiZSBwcmVjZWRlZCBieSBhbnkgb3RoZXIgc3RhdGVtZW50IGluIHRoYXQgbGluZSIpOwogICAg
ICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtNzA4LDMwICs2MzgsMjggQEAgaW50IHl5bGV4X0NQ
UChjaGFyKiBidWYsIGludCBtYXhTaXplKQogICAgICAgICAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0
ZW1lbnQgPSAxOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgCisK
ICAgICAgICAgaWYgKHRva2VuID09ICdcbicpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAKLSAgICAgICAgaWYgKHRva2VuID09IENQUF9JREVOVElGSUVSKSB7ICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOworICAgICAgICBj
cHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7CisKKyAgICAgICAgaWYgKHRva2VuID09IENQUF9J
REVOVElGSUVSKSB7CiAgICAgICAgICAgICB0b2tlblN0cmluZyA9IEdldFN0cmluZ09mQXRvbShh
dGFibGUseXlsdmFscHAuc2NfaWRlbnQpOwotICAgICAgICB9IGVsc2UgaWYgKHRva2VuID09IENQ
UF9GTE9BVENPTlNUQU5UfHx0b2tlbiA9PSBDUFBfSU5UQ09OU1RBTlQpeyAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsgICAgICAgICAgICAKKyAg
ICAgICAgfSBlbHNlIGlmICh0b2tlbiA9PSBDUFBfRkxPQVRDT05TVEFOVCB8fCB0b2tlbiA9PSBD
UFBfSU5UQ09OU1RBTlQpewogICAgICAgICAgICAgdG9rZW5TdHJpbmcgPSB5eWx2YWxwcC5zeW1i
b2xfbmFtZTsKLQkJfSBlbHNlIHsgICAgICAgICAgICAKLSAgICAgICAgICAgIGNwcC0+cGFzdEZp
cnN0U3RhdGVtZW50ID0gMTsgICAgICAgICAgICAKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgIHRva2VuU3RyaW5nID0gR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSx0b2tlbik7Ci0JICAgIH0K
KyAgICAgICAgfQogCiAgICAgICAgIGlmICh0b2tlblN0cmluZykgewotICAgICAgICAgICAgaWYg
KChzaWduZWQpc3RybGVuKHRva2VuU3RyaW5nKSA+PSBtYXhTaXplKSB7Ci0gICAgICAgICAgICAg
ICAgY3BwLT50b2tlbnNCZWZvcmVFT0YgPSAxOwotICAgICAgICAgICAgICAgIHJldHVybiBtYXhT
aXplOyAgICAgICAgICAgICAgIAotICAgICAgICAgICAgfSBlbHNlICBpZiAoc3RybGVuKHRva2Vu
U3RyaW5nKSA+IDApIHsKLQkJCSAgICBzdHJjcHkoYnVmLCB0b2tlblN0cmluZyk7Ci0gICAgICAg
ICAgICAgICAgY3BwLT50b2tlbnNCZWZvcmVFT0YgPSAxOwotICAgICAgICAgICAgICAgIHJldHVy
biAoaW50KXN0cmxlbih0b2tlblN0cmluZyk7Ci0gICAgICAgICAgICB9ICAKKyAgICAgICAgICAg
IGludCBsZW4gPSBzdHJsZW4odG9rZW5TdHJpbmcpOworICAgICAgICAgICAgY3BwLT50b2tlbnNC
ZWZvcmVFT0YgPSAxOworICAgICAgICAgICAgaWYgKGxlbiA+PSBtYXhTaXplKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1heFNpemU7CisgICAgICAgICAgICB9IGVsc2UgIGlmIChsZW4gPiAw
KSB7CisgICAgICAgICAgICAgICAgc3RyY3B5KGJ1ZiwgdG9rZW5TdHJpbmcpOworICAgICAgICAg
ICAgICAgIHJldHVybiBsZW47CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIHJldHVybiAw
OwogICAgICAgICB9CkBAIC03NDUsNyArNjczLDcgQEAgaW50IGNoZWNrX0VPRihpbnQgdG9rZW4p
CiB7CiAgICBpZih0b2tlbj09LTEpewogICAgICAgIGlmKGNwcC0+aWZkZXB0aCA+MCl7Ci0JCUNQ
UEVycm9yVG9JbmZvTG9nKCIjZW5kaWYgbWlzc2luZyEhIENvbXBpbGF0aW9uIHN0b3BwZWQiKTsK
KyAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIiNlbmRpZiBtaXNzaW5nISEgQ29tcGlsYXRpb24g
c3RvcHBlZCIpOwogICAgICAgICBjcHAtPkNvbXBpbGVFcnJvcj0xOwogICAgICAgIH0KICAgICAg
IHJldHVybiAxOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3By
ZXByb2Nlc3Nvci9zY2FubmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmgJKHJldmlzaW9uIDc1ODAxKQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2Fu
bmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDggKzQ4LDkgQEAgTlZJRElBIEhBUyBCRUVOIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSQogI2lmICFkZWZpbmVkKF9fU0NBTk5FUl9IKQogI2RlZmlu
ZSBfX1NDQU5ORVJfSCAxCiAKLSNkZWZpbmUgTUFYX1NZTUJPTF9OQU1FX0xFTiAxMjgKLSNkZWZp
bmUgTUFYX1NUUklOR19MRU4gNTEyCisvLyBUaGVzZSBsZW5ndGhzIGRvIG5vdCBpbmNsdWRlIHRo
ZSBOVUxMIHRlcm1pbmF0b3IuCisjZGVmaW5lIE1BWF9TWU1CT0xfTkFNRV9MRU4gMTI3CisjZGVm
aW5lIE1BWF9TVFJJTkdfTEVOIDUxMQogCiAjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29y
L3BhcnNlci5oIgogCkBAIC01OSw4ICs2MCw2IEBAIHR5cGVkZWYgc3RydWN0IFNvdXJjZUxvY19S
ZWMgewogICAgIHVuc2lnbmVkIHNob3J0IGZpbGUsIGxpbmU7CiB9IFNvdXJjZUxvYzsKIAotaW50
IHl5cGFyc2UgKHZvaWQpOwotCiBpbnQgeXlsZXhfQ1BQKGNoYXIqIGJ1ZiwgaW50IG1heFNpemUp
OwogCiB0eXBlZGVmIHN0cnVjdCBJbnB1dFNyYyB7CkBAIC03Myw3ICs3Miw3IEBAIHR5cGVkZWYg
c3RydWN0IElucHV0U3JjIHsKIH0gSW5wdXRTcmM7CiAKIGludCBJbml0U2Nhbm5lcihDUFBTdHJ1
Y3QgKmNwcCk7ICAgLy8gSW50aWFsaXNlIHRoZSBjcHAgc2Nhbm5lci4gCi1pbnQgU2NhbkZyb21T
dHJpbmcoY2hhciAqKTsgICAgICAvLyBTdGFydCBzY2FubmluZyB0aGUgaW5wdXQgZnJvbSB0aGUg
c3RyaW5nIG1lbnRpb25lZC4KK2ludCBTY2FuRnJvbVN0cmluZyhjb25zdCBjaGFyICopOyAgICAg
IC8vIFN0YXJ0IHNjYW5uaW5nIHRoZSBpbnB1dCBmcm9tIHRoZSBzdHJpbmcgbWVudGlvbmVkLgog
aW50IGNoZWNrX0VPRihpbnQpOyAgICAgICAgICAgICAgLy8gY2hlY2sgaWYgd2UgaGl0IGEgRU9G
IGFicnVwdGx5IAogdm9pZCBDUFBFcnJvclRvSW5mb0xvZyhjaGFyICopOyAgIC8vIHN0aWNraW5n
IHRoZSBtc2csbGluZSBpbnRvIHRoZSBTaGFkZXIncy5JbmZvLmxvZwogdm9pZCBTZXRMaW5lTnVt
YmVyKGludCk7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL3Rva2Vucy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvdG9rZW5zLmMJKHJldmlzaW9uIDc1ODAxKQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMu
Ywkod29ya2luZyBjb3B5KQpAQCAtNTIsNiArNTIsNyBAQCBOVklESUEgSEFTIEJFRU4gQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJCiAKICNpbmNsdWRlICJjb21waWxlci9kZWJ1Zy5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKKyNpbmNsdWRlICJjb21waWxl
ci91dGlsLmgiCiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8gUHJlcHJvY2Vzc29yIGFuZCBUb2tlbiBSZWNvcmRlciBhbmQg
UGxheWJhY2s6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMjI0LDggKzIyNSw3IEBAIHZv
aWQgUmVjb3JkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIGludCAKICAgICBjYXNlIENQUF9JTlRD
T05TVEFOVDoKICAgICAgICAgIHN0cj15eWx2YWxwcC0+c3ltYm9sX25hbWU7CiAgICAgICAgICB3
aGlsZSAoKnN0cil7Ci0gICAgICAgICAgICBsQWRkQnl0ZShwVG9rLCh1bnNpZ25lZCBjaGFyKSAq
c3RyKTsKLSAgICAgICAgICAgICpzdHIrKzsKKyAgICAgICAgICAgIGxBZGRCeXRlKHBUb2ssICh1
bnNpZ25lZCBjaGFyKSAqc3RyKyspOwogICAgICAgICAgfQogICAgICAgICAgbEFkZEJ5dGUocFRv
aywgMCk7CiAgICAgICAgICBicmVhazsKQEAgLTI3Niw4ICsyNzYsNyBAQCBpbnQgUmVhZFRva2Vu
KFRva2VuU3RyZWFtICpwVG9rLCB5eXN0eXBlCiAgICAgICAgICAgICAgICAgICAgICBjaCA9PSAn
XycpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xf
TkFNRV9MRU4pIHsKLSAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9IGNoOwot
ICAgICAgICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25h
bWVbbGVuKytdID0gY2g7CiAgICAgICAgICAgICAgICAgICAgIGNoID0gbFJlYWRCeXRlKHBUb2sp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI5MSw3ICsyOTAsNyBAQCBp
bnQgUmVhZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0eXBlCiAgICAgICAgICAgICB3aGls
ZSAoKGNoID0gbFJlYWRCeXRlKHBUb2spKSAhPSAwKQogICAgICAgICAgICAgICAgIGlmIChsZW4g
PCBNQVhfU1RSSU5HX0xFTikKICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3ZhbFtsZW4rK10g
PSBjaDsKLSAgICAgICAgICAgIHN0cmluZ192YWxbbGVuXSA9IDA7CisgICAgICAgICAgICBzdHJp
bmdfdmFsW2xlbl0gPSAnXDAnOwogICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lkZW50ID0gTG9v
a1VwQWRkU3RyaW5nKGF0YWJsZSwgc3RyaW5nX3ZhbCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDUFBfRkxPQVRDT05TVEFOVDoKQEAgLTMwMCwxNSArMjk5LDE0IEBAIGludCBS
ZWFkVG9rZW4oVG9rZW5TdHJlYW0gKnBUb2ssIHl5c3R5cGUKICAgICAgICAgICAgIHdoaWxlICgo
Y2ggPj0gJzAnICYmIGNoIDw9ICc5Jyl8fChjaD09J2UnfHxjaD09J0UnfHxjaD09Jy4nKXx8KGNo
PT0nKyd8fGNoPT0nLScpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGlmIChsZW4g
PCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1l
W2xlbl0gPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgbGVuKys7CisgICAgICAgICAgICAgICAg
ICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOwogICAgICAgICAgICAgICAgICAgICBjaCA9IGxS
ZWFkQnl0ZShwVG9rKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKICAgICAgICAgICAgIGFzc2VydChjaCA9PSAn
XDAnKTsKICAgICAgICAgICAgIHN0cmNweSh5eWx2YWxwcC0+c3ltYm9sX25hbWUsc3ltYm9sX25h
bWUpOwotICAgICAgICAgICAgeXlsdmFscHAtPnNjX2Z2YWw9KGZsb2F0KWF0b2YoeXlsdmFscHAt
PnN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19mdmFsPShmbG9hdClhdG9m
X2RvdCh5eWx2YWxwcC0+c3ltYm9sX25hbWUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IGNhc2UgQ1BQX0lOVENPTlNUQU5UOgogICAgICAgICAgICAgbGVuID0gMDsKQEAgLTMxNiw4ICsz
MTQsNyBAQCBpbnQgUmVhZFRva2VuKFRva2VuU3RyZWFtICpwVG9rLCB5eXN0eXBlCiAgICAgICAg
ICAgICB3aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpKQogICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbl0gPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgbGVu
Kys7CisgICAgICAgICAgICAgICAgICAgIHN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOwogICAgICAg
ICAgICAgICAgICAgICBjaCA9IGxSZWFkQnl0ZShwVG9rKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Nv
bmZpZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9Db25maWcuY3BwCShyZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJFR0wvQ29uZmlnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTMgKzk0LDYgQEAg
dm9pZCBDb25maWc6OnNldChEM0RESVNQTEFZTU9ERSBkaXNwbGF5TQogICAgICAgICBtQmx1ZVNp
emUgPSA1OwogICAgICAgICBtQWxwaGFTaXplID0gMDsKICAgICAgICAgYnJlYWs7Ci0gICAgICBj
YXNlIEQzREZNVF9YMVI1RzVCNToKLSAgICAgICAgbUJ1ZmZlclNpemUgPSAxNjsKLSAgICAgICAg
bVJlZFNpemUgPSA1OwotICAgICAgICBtR3JlZW5TaXplID0gNTsKLSAgICAgICAgbUJsdWVTaXpl
ID0gNTsKLSAgICAgICAgbUFscGhhU2l6ZSA9IDA7Ci0gICAgICAgIGJyZWFrOwogICAgICAgY2Fz
ZSBEM0RGTVRfWDhSOEc4Qjg6CiAgICAgICAgIG1CdWZmZXJTaXplID0gMzI7CiAgICAgICAgIG1S
ZWRTaXplID0gODsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlz
cGxheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9EaXNwbGF5LmNwcAkocmV2aXNpb24gNzU4MDEpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML0Rpc3BsYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNyw3ICsxNyw4IEBA
CiAKICNpbmNsdWRlICJsaWJFR0wvbWFpbi5oIgogCi0jZGVmaW5lIFJFRl9SQVNUIDAgICAvLyBD
YW4gYWxzbyBiZSBlbmFibGVkIGJ5IGRlZmluaW5nIEZPUkNFX1JFRl9SQVNUIGluIHRoZSBwcm9q
ZWN0J3MgcHJlZGVmaW5lZCBtYWNyb3MKKyNkZWZpbmUgUkVGX1JBU1QgMCAgICAgICAgLy8gQ2Fu
IGFsc28gYmUgZW5hYmxlZCBieSBkZWZpbmluZyBGT1JDRV9SRUZfUkFTVCBpbiB0aGUgcHJvamVj
dCdzIHByZWRlZmluZWQgbWFjcm9zCisjZGVmaW5lIEVOQUJMRV9EM0Q5RVggMSAgIC8vIEVuYWJs
ZXMgdXNlIG9mIHRoZSBJRGlyZWN0M0Q5RXggaW50ZXJmYWNlLCB3aGVuIGF2YWlsYWJsZQogCiBu
YW1lc3BhY2UgZWdsCiB7CkBAIC00MCw3ICs0MSw2IEBAIERpc3BsYXk6OkRpc3BsYXkoSERDIGRl
dmljZUNvbnRleHQpIDogbUQKIAogICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSAxOwogICAgIG1NYXhT
d2FwSW50ZXJ2YWwgPSAxOwotICAgIHNldFN3YXBJbnRlcnZhbCgxKTsKIH0KIAogRGlzcGxheTo6
fkRpc3BsYXkoKQpAQCAtNzcsNyArNzcsNyBAQCBib29sIERpc3BsYXk6OmluaXRpYWxpemUoKQog
ICAgIC8vIFVzZSBEaXJlY3QzRDlFeCBpZiBhdmFpbGFibGUuIEFtb25nIG90aGVyIHRoaW5ncywg
dGhpcyB2ZXJzaW9uIGlzIGxlc3MKICAgICAvLyBpbmNsaW5lZCB0byByZXBvcnQgYSBsb3N0IGNv
bnRleHQsIGZvciBleGFtcGxlIHdoZW4gdGhlIHVzZXIgc3dpdGNoZXMKICAgICAvLyBkZXNrdG9w
LiBEaXJlY3QzRDlFeCBpcyBhdmFpbGFibGUgaW4gV2luZG93cyBWaXN0YSBhbmQgbGF0ZXIgaWYg
c3VpdGFibGUgZHJpdmVycyBhcmUgYXZhaWxhYmxlLgotICAgIGlmIChEaXJlY3QzRENyZWF0ZTlF
eFB0ciAmJiBTVUNDRUVERUQoRGlyZWN0M0RDcmVhdGU5RXhQdHIoRDNEX1NES19WRVJTSU9OLCAm
bUQzZDlleCkpKQorICAgIGlmIChFTkFCTEVfRDNEOUVYICYmIERpcmVjdDNEQ3JlYXRlOUV4UHRy
ICYmIFNVQ0NFRURFRChEaXJlY3QzRENyZWF0ZTlFeFB0cihEM0RfU0RLX1ZFUlNJT04sICZtRDNk
OWV4KSkpCiAgICAgewogICAgICAgICBBU1NFUlQobUQzZDlleCk7CiAgICAgICAgIG1EM2Q5ZXgt
PlF1ZXJ5SW50ZXJmYWNlKElJRF9JRGlyZWN0M0Q5LCByZWludGVycHJldF9jYXN0PHZvaWQqKj4o
Jm1EM2Q5KSk7CkBAIC05NSwxMSArOTUsMjYgQEAgYm9vbCBEaXNwbGF5Ojppbml0aWFsaXplKCkK
ICAgICAgICAgLy8gIFVOSU1QTEVNRU5URUQoKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIHdoaWNo
IGFkYXB0ZXIgaW5kZXggdGhlIGRldmljZSBjb250ZXh0IGNvcnJlc3BvbmRzIHRvCiAgICAgICAg
IH0KIAotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5HZXREZXZpY2VDYXBzKG1BZGFw
dGVyLCBtRGV2aWNlVHlwZSwgJm1EZXZpY2VDYXBzKTsKLQotICAgICAgICBpZiAocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAg
ICAgICBIUkVTVUxUIHJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIC8vIEdpdmUgdXAgb24gZ2V0
dGluZyBkZXZpY2UgY2FwcyBhZnRlciBhYm91dCBvbmUgc2Vjb25kLgorICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IDEwOyArK2kpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBlcnJv
cihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7CisgICAgICAgICAgICByZXN1bHQgPSBtRDNkOS0+R2V0
RGV2aWNlQ2FwcyhtQWRhcHRlciwgbURldmljZVR5cGUsICZtRGV2aWNlQ2Fwcyk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
aWYgKHJlc3VsdCA9PSBEM0RFUlJfTk9UQVZBSUxBQkxFKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIFNsZWVwKDEwMCk7ICAgLy8gR2l2ZSB0aGUgZHJpdmVyIHNvbWUgdGltZSB0byBp
bml0aWFsaXplL3JlY292ZXIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKEZB
SUxFRChyZXN1bHQpKSAgIC8vIEQzREVSUl9PVVRPRlZJREVPTUVNT1JZLCBFX09VVE9GTUVNT1JZ
LCBEM0RFUlJfSU5WQUxJRERFVklDRSwgb3IgYW5vdGhlciBlcnJvciB3ZSBjYW4ndCByZWNvdmVy
IGZyb20KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ZXJtaW5hdGUoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVy
c2lvbiA8IEQzRFBTX1ZFUlNJT04oMiwgMCkpCkBAIC0xMDgsNiArMTIzLDE0IEBAIGJvb2wgRGlz
cGxheTo6aW5pdGlhbGl6ZSgpCiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX05PVF9JTklU
SUFMSVpFRCwgZmFsc2UpOwogICAgICAgICB9CiAKKyAgICAgICAgLy8gV2hlbiBEaXJlY3RYOSBp
cyBydW5uaW5nIHdpdGggYW4gb2xkZXIgRGlyZWN0WDggZHJpdmVyLCBhIFN0cmV0Y2hSZWN0IGZy
b20gYSByZWd1bGFyIHRleHR1cmUgdG8gYSByZW5kZXIgdGFyZ2V0IHRleHR1cmUgaXMgbm90IHN1
cHBvcnRlZC4KKyAgICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCBieSBUZXh0dXJlMkQ6OmNvbnZl
cnRUb1JlbmRlclRhcmdldC4KKyAgICAgICAgaWYgKChtRGV2aWNlQ2Fwcy5EZXZDYXBzMiAmIEQz
RERFVkNBUFMyX0NBTl9TVFJFVENIUkVDVF9GUk9NX1RFWFRVUkVTKSA9PSAwKQorICAgICAgICB7
CisgICAgICAgICAgICB0ZXJtaW5hdGUoKTsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
Tk9UX0lOSVRJQUxJWkVELCBmYWxzZSk7CisgICAgICAgIH0KKwogICAgICAgICBtTWluU3dhcElu
dGVydmFsID0gNDsKICAgICAgICAgbU1heFN3YXBJbnRlcnZhbCA9IDA7CiAKQEAgLTEyMyw3ICsx
NDYsNyBAQCBib29sIERpc3BsYXk6OmluaXRpYWxpemUoKQogICAgICAgICAvLyAgRDNERk1UX0Ey
UjEwRzEwQjEwLCAgIC8vIFRoZSBjb2xvcl9yYW1wIGNvbmZvcm1hbmNlIHRlc3QgdXNlcyBSZWFk
UGl4ZWxzIHdpdGggVU5TSUdORURfQllURSBjYXVzaW5nIGl0IHRvIHRoaW5rIHRoYXQgcmVuZGVy
aW5nIHNraXBwZWQgYSBjb2xvdXIgdmFsdWUuCiAgICAgICAgICAgICBEM0RGTVRfQThSOEc4Qjgs
CiAgICAgICAgICAgICBEM0RGTVRfUjVHNkI1LAotICAgICAgICAgICAgRDNERk1UX1gxUjVHNUI1
LAorICAgICAgICAvLyAgRDNERk1UX1gxUjVHNUI1LCAgICAgIC8vIEhhcyBubyBjb21wYXRpYmxl
IE9wZW5HTCBFUyByZW5kZXJidWZmZXIgZm9ybWF0CiAgICAgICAgICAgICBEM0RGTVRfWDhSOEc4
QjgKICAgICAgICAgfTsKIApAQCAtMTgzLDEzICsyMDYsNiBAQCBib29sIERpc3BsYXk6OmluaXRp
YWxpemUoKQogCiAgICAgICAgICAgICBtQ29uZmlnU2V0Lm1TZXQuaW5zZXJ0KGNvbmZpZ3VyYXRp
b24pOwogICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFjcmVhdGVEZXZpY2UoKSkKLSAgICAgICAg
ewotICAgICAgICAgICAgdGVybWluYXRlKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgICAgfQogICAgIH0KIAogICAgIGlmICghaXNJbml0aWFsaXplZCgpKQpAQCAtMTk5LDIz
ICsyMTUsMzQgQEAgYm9vbCBEaXNwbGF5Ojppbml0aWFsaXplKCkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KIAorICAgIHN0YXRpYyBjb25zdCBUQ0hBUiB3aW5kb3dOYW1lW10gPSBURVhU
KCJBbmdsZUhpZGRlbldpbmRvdyIpOworICAgIHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFzc05hbWVb
XSA9IFRFWFQoIlNUQVRJQyIpOworCisgICAgbURldmljZVdpbmRvdyA9IENyZWF0ZVdpbmRvd0V4
KFdTX0VYX05PQUNUSVZBVEUsIGNsYXNzTmFtZSwgd2luZG93TmFtZSwgV1NfRElTQUJMRUQgfCBX
U19QT1BVUCwgMCwgMCwgMSwgMSwgSFdORF9NRVNTQUdFLCBOVUxMLCBHZXRNb2R1bGVIYW5kbGUo
TlVMTCksIE5VTEwpOworCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZvaWQgRGlzcGxheTo6dGVy
bWluYXRlKCkKIHsKLSAgICBmb3IgKFN1cmZhY2VTZXQ6Oml0ZXJhdG9yIHN1cmZhY2UgPSBtU3Vy
ZmFjZVNldC5iZWdpbigpOyBzdXJmYWNlICE9IG1TdXJmYWNlU2V0LmVuZCgpOyBzdXJmYWNlKysp
CisgICAgd2hpbGUgKCFtU3VyZmFjZVNldC5lbXB0eSgpKQogICAgIHsKLSAgICAgICAgZGVsZXRl
ICpzdXJmYWNlOworICAgICAgICBkZXN0cm95U3VyZmFjZSgqbVN1cmZhY2VTZXQuYmVnaW4oKSk7
CiAgICAgfQogCi0gICAgZm9yIChDb250ZXh0U2V0OjppdGVyYXRvciBjb250ZXh0ID0gbUNvbnRl
eHRTZXQuYmVnaW4oKTsgY29udGV4dCAhPSBtQ29udGV4dFNldC5lbmQoKTsgY29udGV4dCsrKQor
ICAgIHdoaWxlICghbUNvbnRleHRTZXQuZW1wdHkoKSkKICAgICB7Ci0gICAgICAgIGdsRGVzdHJv
eUNvbnRleHQoKmNvbnRleHQpOworICAgICAgICBkZXN0cm95Q29udGV4dCgqbUNvbnRleHRTZXQu
YmVnaW4oKSk7CiAgICAgfQogCiAgICAgaWYgKG1EZXZpY2UpCiAgICAgeworICAgICAgICAvLyBJ
ZiB0aGUgZGV2aWNlIGlzIGxvc3QsIHJlc2V0IGl0IGZpcnN0IHRvIHByZXZlbnQgbGVhdmluZyB0
aGUgZHJpdmVyIGluIGFuIHVuc3RhYmxlIHN0YXRlCisgICAgICAgIGlmIChGQUlMRUQobURldmlj
ZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwoKSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc2V0
RGV2aWNlKCk7CisgICAgICAgIH0KKwogICAgICAgICBtRGV2aWNlLT5SZWxlYXNlKCk7CiAgICAg
ICAgIG1EZXZpY2UgPSBOVUxMOwogICAgIH0KQEAgLTMxNCwzMyArMzQxLDEyIEBAIGJvb2wgRGlz
cGxheTo6Z2V0Q29uZmlnQXR0cmliKEVHTENvbmZpZyAKIAogYm9vbCBEaXNwbGF5OjpjcmVhdGVE
ZXZpY2UoKQogewotICAgIHN0YXRpYyBjb25zdCBUQ0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJB
bmdsZUhpZGRlbldpbmRvdyIpOwotICAgIHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9
IFRFWFQoIlNUQVRJQyIpOwotCi0gICAgbURldmljZVdpbmRvdyA9IENyZWF0ZVdpbmRvd0V4KFdT
X0VYX05PQUNUSVZBVEUsIGNsYXNzTmFtZSwgd2luZG93TmFtZSwgV1NfRElTQUJMRUQgfCBXU19Q
T1BVUCwgMCwgMCwgMSwgMSwgSFdORF9NRVNTQUdFLCBOVUxMLCBHZXRNb2R1bGVIYW5kbGUoTlVM
TCksIE5VTEwpOwotCi0gICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJz
ID0gezB9OwotCi0gICAgLy8gVGhlIGRlZmF1bHQgc3dhcCBjaGFpbiBpcyBuZXZlciBhY3R1YWxs
eSB1c2VkLiBTdXJmYWNlIHdpbGwgY3JlYXRlIGEgbmV3IHN3YXAgY2hhaW4gd2l0aCB0aGUgcHJv
cGVyIHBhcmFtZXRlcnMuCi0gICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZv
cm1hdCA9IEQzREZNVF9VTktOT1dOOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJD
b3VudCA9IDE7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IEQzREZN
VF9VTktOT1dOOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IDE7Ci0g
ICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IDE7Ci0gICAgcHJlc2VudFBh
cmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNFOwotICAgIHByZXNlbnRQYXJh
bWV0ZXJzLkZsYWdzID0gMDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0g
bURldmljZVdpbmRvdzsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxpdHkg
PSAwOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FN
UExFX05PTkU7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBj
b252ZXJ0SW50ZXJ2YWwobU1pblN3YXBJbnRlcnZhbCk7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMu
U3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKLSAgICBwcmVzZW50UGFyYW1ldGVy
cy5XaW5kb3dlZCA9IFRSVUU7Ci0KKyAgICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBh
cmFtZXRlcnMgPSBnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMoKTsKICAgICBEV09SRCBiZWhh
dmlvckZsYWdzID0gRDNEQ1JFQVRFX0ZQVV9QUkVTRVJWRSB8IEQzRENSRUFURV9OT1dJTkRPV0NI
QU5HRVM7CiAKICAgICBIUkVTVUxUIHJlc3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBtRGV2aWNlV2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRF
X0hBUkRXQVJFX1ZFUlRFWFBST0NFU1NJTkcgfCBEM0RDUkVBVEVfUFVSRURFVklDRSwgJnByZXNl
bnRQYXJhbWV0ZXJzLCAmbURldmljZSk7CiAKLSAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgIGlmIChyZXN1bHQg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwg
cmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKICAgICB9CkBAIC0zNDksMTQgKzM1NSwxMyBAQCBib29s
IERpc3BsYXk6OmNyZWF0ZURldmljZSgpCiAgICAgewogICAgICAgICByZXN1bHQgPSBtRDNkOS0+
Q3JlYXRlRGV2aWNlKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgbURldmljZVdpbmRvdywgYmVoYXZp
b3JGbGFncyB8IEQzRENSRUFURV9TT0ZUV0FSRV9WRVJURVhQUk9DRVNTSU5HLCAmcHJlc2VudFBh
cmFtZXRlcnMsICZtRGV2aWNlKTsKIAotICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRP
RlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKQorICAgICAgICBpZiAoRkFJ
TEVEKHJlc3VsdCkpCiAgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNE
RVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0
ID09IEQzREVSUl9OT1RBVkFJTEFCTEUgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NUKTsK
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwotCiAgICAgLy8gUGVy
bWFuZW50IG5vbi1kZWZhdWx0IHN0YXRlcwogICAgIG1EZXZpY2UtPlNldFJlbmRlclN0YXRlKEQz
RFJTX1BPSU5UU1BSSVRFRU5BQkxFLCBUUlVFKTsKIApAQCAtMzY1LDYgKzM3MCwyOSBAQCBib29s
IERpc3BsYXk6OmNyZWF0ZURldmljZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgRGlz
cGxheTo6cmVzZXREZXZpY2UoKQoreworICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBwcmVzZW50
UGFyYW1ldGVycyA9IGdldERlZmF1bHRQcmVzZW50UGFyYW1ldGVycygpOworICAgIEhSRVNVTFQg
cmVzdWx0OworICAgIAorICAgIGRvCisgICAgeworICAgICAgICBTbGVlcCgwKTsgICAvLyBHaXZl
IHRoZSBncmFwaGljcyBkcml2ZXIgc29tZSBDUFUgdGltZQorCisgICAgICAgIHJlc3VsdCA9IG1E
ZXZpY2UtPlJlc2V0KCZwcmVzZW50UGFyYW1ldGVycyk7CisgICAgfQorICAgIHdoaWxlIChyZXN1
bHQgPT0gRDNERVJSX0RFVklDRUxPU1QpOworCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICB9CisK
KyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
IFN1cmZhY2UgKkRpc3BsYXk6OmNyZWF0ZVdpbmRvd1N1cmZhY2UoSFdORCB3aW5kb3csIEVHTENv
bmZpZyBjb25maWcpCiB7CiAgICAgY29uc3QgQ29uZmlnICpjb25maWd1cmF0aW9uID0gbUNvbmZp
Z1NldC5nZXQoY29uZmlnKTsKQEAgLTM3Nyw2ICs0MDUsMjcgQEAgU3VyZmFjZSAqRGlzcGxheTo6
Y3JlYXRlV2luZG93U3VyZmFjZShIVwogCiBFR0xDb250ZXh0IERpc3BsYXk6OmNyZWF0ZUNvbnRl
eHQoRUdMQ29uZmlnIGNvbmZpZ0hhbmRsZSwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4
dCkKIHsKKyAgICBpZiAoIW1EZXZpY2UpCisgICAgeworICAgICAgICBpZiAoIWNyZWF0ZURldmlj
ZSgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAg
IH0KKyAgICBlbHNlIGlmIChGQUlMRUQobURldmljZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwoKSkp
ICAgLy8gTG9zdCBkZXZpY2UKKyAgICB7CisgICAgICAgIGlmICghcmVzZXREZXZpY2UoKSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAv
LyBSZXN0b3JlIGFueSBzdXJmYWNlcyB0aGF0IG1heSBoYXZlIGJlZW4gbG9zdAorICAgICAgICBm
b3IgKFN1cmZhY2VTZXQ6Oml0ZXJhdG9yIHN1cmZhY2UgPSBtU3VyZmFjZVNldC5iZWdpbigpOyBz
dXJmYWNlICE9IG1TdXJmYWNlU2V0LmVuZCgpOyBzdXJmYWNlKyspCisgICAgICAgIHsKKyAgICAg
ICAgICAgICgqc3VyZmFjZSktPnJlc2V0U3dhcENoYWluKCk7CisgICAgICAgIH0KKyAgICB9CisK
ICAgICBjb25zdCBlZ2w6OkNvbmZpZyAqY29uZmlnID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnSGFu
ZGxlKTsKIAogICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2xDcmVhdGVDb250ZXh0KGNvbmZp
Zywgc2hhcmVDb250ZXh0KTsKQEAgLTM5NSw2ICs0NDQsMTQgQEAgdm9pZCBEaXNwbGF5OjpkZXN0
cm95Q29udGV4dChnbDo6Q29udGV4dAogewogICAgIGdsRGVzdHJveUNvbnRleHQoY29udGV4dCk7
CiAgICAgbUNvbnRleHRTZXQuZXJhc2UoY29udGV4dCk7CisKKyAgICBpZiAobUNvbnRleHRTZXQu
ZW1wdHkoKSAmJiBtRGV2aWNlICYmIEZBSUxFRChtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZl
bCgpKSkgICAvLyBMYXN0IGNvbnRleHQgb2YgYSBsb3N0IGRldmljZQorICAgIHsKKyAgICAgICAg
Zm9yIChTdXJmYWNlU2V0OjppdGVyYXRvciBzdXJmYWNlID0gbVN1cmZhY2VTZXQuYmVnaW4oKTsg
c3VyZmFjZSAhPSBtU3VyZmFjZVNldC5lbmQoKTsgc3VyZmFjZSsrKQorICAgICAgICB7CisgICAg
ICAgICAgICAoKnN1cmZhY2UpLT5yZWxlYXNlKCk7CisgICAgICAgIH0JCisgICAgfQogfQogCiBi
b29sIERpc3BsYXk6OmlzSW5pdGlhbGl6ZWQoKQpAQCAtNDMwLDM3ICs0ODcsMjYgQEAgYm9vbCBE
aXNwbGF5OjpoYXNFeGlzdGluZ1dpbmRvd1N1cmZhY2UoSAogICAgIHJldHVybiBmYWxzZTsKIH0K
IAotdm9pZCBEaXNwbGF5OjpzZXRTd2FwSW50ZXJ2YWwoR0xpbnQgaW50ZXJ2YWwpCitFR0xpbnQg
RGlzcGxheTo6Z2V0TWluU3dhcEludGVydmFsKCkKIHsKLSAgICBtU3dhcEludGVydmFsID0gaW50
ZXJ2YWw7Ci0gICAgbVN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1Td2FwSW50ZXJ2YWwsIG1NaW5T
d2FwSW50ZXJ2YWwpOwotICAgIG1Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtU3dhcEludGVydmFs
LCBtTWF4U3dhcEludGVydmFsKTsKLQotICAgIG1QcmVzZW50SW50ZXJ2YWwgPSBjb252ZXJ0SW50
ZXJ2YWwobVN3YXBJbnRlcnZhbCk7CisgICAgcmV0dXJuIG1NaW5Td2FwSW50ZXJ2YWw7CiB9CiAK
LURXT1JEIERpc3BsYXk6OmdldFByZXNlbnRJbnRlcnZhbCgpCitFR0xpbnQgRGlzcGxheTo6Z2V0
TWF4U3dhcEludGVydmFsKCkKIHsKLSAgICByZXR1cm4gbVByZXNlbnRJbnRlcnZhbDsKKyAgICBy
ZXR1cm4gbU1heFN3YXBJbnRlcnZhbDsKIH0KIAotRFdPUkQgRGlzcGxheTo6Y29udmVydEludGVy
dmFsKEdMaW50IGludGVydmFsKQorSURpcmVjdDNERGV2aWNlOSAqRGlzcGxheTo6Z2V0RGV2aWNl
KCkKIHsKLSAgICBzd2l0Y2goaW50ZXJ2YWwpCisgICAgaWYgKCFtRGV2aWNlKQogICAgIHsKLSAg
ICAgIGNhc2UgMDogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfSU1NRURJQVRFOwotICAgICAg
Y2FzZSAxOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9PTkU7Ci0gICAgICBjYXNlIDI6IHJl
dHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RXTzsKLSAgICAgIGNhc2UgMzogcmV0dXJuIEQzRFBS
RVNFTlRfSU5URVJWQUxfVEhSRUU7Ci0gICAgICBjYXNlIDQ6IHJldHVybiBEM0RQUkVTRU5UX0lO
VEVSVkFMX0ZPVVI7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICBpZiAo
IWNyZWF0ZURldmljZSgpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAg
ICAgICAgfQogICAgIH0KIAotICAgIHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0RFRkFVTFQ7
Ci19Ci0KLUlEaXJlY3QzRERldmljZTkgKkRpc3BsYXk6OmdldERldmljZSgpCi17CiAgICAgcmV0
dXJuIG1EZXZpY2U7CiB9CiAKQEAgLTQ4Nyw0ICs1MzMsMTI3IEBAIGJvb2wgRGlzcGxheTo6Z2V0
Q29tcHJlc3NlZFRleHR1cmVTdXBwb3IKIAogICAgIHJldHVybiBTVUNDRUVERUQobUQzZDktPkNo
ZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2Rl
LkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0RYVDEpKTsKIH0KKworYm9vbCBE
aXNwbGF5OjpnZXRGbG9hdFRleHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVu
ZGVyYWJsZSkKK3sKKyAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAg
bUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9k
ZSk7CisKKyAgICAqZmlsdGVyaW5nID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1h
dChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVT
QUdFX1FVRVJZX0ZJTFRFUiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSAm
JgorICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1B
ZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0Vf
UVVFUllfRklMVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOwor
ICAgIAorICAgICpyZW5kZXJhYmxlID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1h
dChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVT
QUdFX1JFTkRFUlRBUkdFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSYm
CisgICAgICAgICAgICAgICAgICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1B
ZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0Vf
UkVOREVSVEFSR0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKTsK
KworICAgIGlmICghZmlsdGVyaW5nICYmICFyZW5kZXJhYmxlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLCAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0Ez
MkIzMkczMlIzMkYpKSAmJgorICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0Rl
dmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3Jt
YXQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEQzRFJUWVBFX0NVQkVURVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOworICAgIH0KKyAg
ICBlbHNlCisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9CisKK2Jvb2wgRGlz
cGxheTo6Z2V0SGFsZkZsb2F0VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpy
ZW5kZXJhYmxlKQoreworICAgIEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKKyAg
ICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlN
b2RlKTsKKworICAgICpmaWx0ZXJpbmcgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9y
bWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNE
VVNBR0VfUVVFUllfRklMVEVSLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2Rikp
ICYmCisgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQo
bUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FH
RV9RVUVSWV9GSUxURVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSk7
CisgICAgCisgICAgKnJlbmRlcmFibGUgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9y
bWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNE
VVNBR0VfUkVOREVSVEFSR0VULCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBEM0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2Rikp
ICYmCisgICAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQo
bUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FH
RV9SRU5ERVJUQVJHRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRDNEUlRZUEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSk7
CisKKyAgICBpZiAoIWZpbHRlcmluZyAmJiAhcmVuZGVyYWJsZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNl
VHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9B
MTZCMTZHMTZSMTZGKSkgJiYKKyAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tE
ZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9y
bWF0LCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBEM0RSVFlQRV9DVUJFVEVYVFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKKyAgICB9Cisg
ICAgZWxzZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitib29sIERp
c3BsYXk6OmdldEx1bWluYW5jZVRleHR1cmVTdXBwb3J0KCkKK3sKKyAgICBEM0RESVNQTEFZTU9E
RSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZSht
QWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7CisKKyAgICByZXR1cm4gU1VDQ0VFREVEKG1E
M2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNw
bGF5TW9kZS5Gb3JtYXQsIDAsIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9MOCkpOworfQorCiti
b29sIERpc3BsYXk6OmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKQoreworICAgIEQz
RERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKKyAgICBtRDNkOS0+R2V0QWRhcHRlckRp
c3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKKworICAgIHJldHVybiBT
VUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwg
Y3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0E4
TDgpKTsKK30KKworRDNEUE9PTCBEaXNwbGF5OjpnZXRCdWZmZXJQb29sKERXT1JEIHVzYWdlKSBj
b25zdAoreworICAgIGlmIChtRDNkOWV4ICE9IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4g
RDNEUE9PTF9ERUZBVUxUOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoISh1
c2FnZSAmIEQzRFVTQUdFX0RZTkFNSUMpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
RDNEUE9PTF9NQU5BR0VEOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEQzRFBPT0xf
REVGQVVMVDsKK30KKworYm9vbCBEaXNwbGF5OjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCit7Cisg
ICAgSURpcmVjdDNEUXVlcnk5ICpxdWVyeTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2Ut
PkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZVFlQRV9FVkVOVCwgJnF1ZXJ5KTsKKyAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBxdWVyeS0+UmVsZWFzZSgpOworICAgIH0KKwor
ICAgIHJldHVybiByZXN1bHQgIT0gRDNERVJSX05PVEFWQUlMQUJMRTsKK30KKworRDNEUFJFU0VO
VF9QQVJBTUVURVJTIERpc3BsYXk6OmdldERlZmF1bHRQcmVzZW50UGFyYW1ldGVycygpCit7Cisg
ICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gezB9OworCisgICAg
Ly8gVGhlIGRlZmF1bHQgc3dhcCBjaGFpbiBpcyBuZXZlciBhY3R1YWxseSB1c2VkLiBTdXJmYWNl
IHdpbGwgY3JlYXRlIGEgbmV3IHN3YXAgY2hhaW4gd2l0aCB0aGUgcHJvcGVyIHBhcmFtZXRlcnMu
CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IEQzREZNVF9V
TktOT1dOOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7CisgICAg
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IEQzREZNVF9VTktOT1dOOworICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IDE7CisgICAgcHJlc2VudFBhcmFt
ZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxl
QXV0b0RlcHRoU3RlbmNpbCA9IEZBTFNFOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0g
MDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0gbURldmljZVdpbmRvdzsK
KyAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxpdHkgPSAwOworICAgIHByZXNl
bnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7CisgICAg
cHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBEM0RQUkVTRU5UX0lOVEVS
VkFMX0RFRkFVTFQ7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBF
RkZFQ1RfRElTQ0FSRDsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7CisK
KyAgICByZXR1cm4gcHJlc2VudFBhcmFtZXRlcnM7CiB9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQg
b2YgZmlsZQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNwbGF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9EaXNw
bGF5LmgJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkVHTC9EaXNwbGF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDE3ICs1NCwyNSBAQCBjbGFzcyBE
aXNwbGF5CiAgICAgYm9vbCBpc1ZhbGlkU3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2UpOwog
ICAgIGJvb2wgaGFzRXhpc3RpbmdXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93KTsKIAotICAgIHZv
aWQgc2V0U3dhcEludGVydmFsKEdMaW50IGludGVydmFsKTsKLSAgICBEV09SRCBnZXRQcmVzZW50
SW50ZXJ2YWwoKTsKLSAgICBzdGF0aWMgRFdPUkQgY29udmVydEludGVydmFsKEdMaW50IGludGVy
dmFsKTsKKyAgICBFR0xpbnQgZ2V0TWluU3dhcEludGVydmFsKCk7CisgICAgRUdMaW50IGdldE1h
eFN3YXBJbnRlcnZhbCgpOwogCiAgICAgdmlydHVhbCBJRGlyZWN0M0REZXZpY2U5ICpnZXREZXZp
Y2UoKTsKICAgICB2aXJ0dWFsIEQzRENBUFM5IGdldERldmljZUNhcHMoKTsKICAgICB2aXJ0dWFs
IHZvaWQgZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQzREZPUk1BVCBmb3JtYXQsIGJvb2wgKm11bHRp
U2FtcGxlQXJyYXkpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRDb21wcmVzc2VkVGV4dHVyZVN1cHBv
cnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQoKTsKKyAgICB2aXJ0
dWFsIGJvb2wgZ2V0RmxvYXRUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJl
bmRlcmFibGUpOworICAgIHZpcnR1YWwgYm9vbCBnZXRIYWxmRmxvYXRUZXh0dXJlU3VwcG9ydChi
b29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOworICAgIHZpcnR1YWwgYm9vbCBnZXRM
dW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFuY2VB
bHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCBEM0RQT09MIGdldEJ1ZmZlclBvb2wo
RFdPUkQgdXNhZ2UpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRf
QVNTSUdOKERpc3BsYXkpOworCisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIGdldERlZmF1bHRQ
cmVzZW50UGFyYW1ldGVycygpOworCiAgICAgY29uc3QgSERDIG1EYzsKIAogICAgIEhNT0RVTEUg
bUQzZDlNb2R1bGU7CkBAIC03OCwxMSArODYsOSBAQCBjbGFzcyBEaXNwbGF5CiAgICAgSFdORCBt
RGV2aWNlV2luZG93OwogCiAgICAgYm9vbCBtU2NlbmVTdGFydGVkOwotICAgIEdMaW50IG1Td2Fw
SW50ZXJ2YWw7CiAgICAgRUdMaW50IG1NYXhTd2FwSW50ZXJ2YWw7CiAgICAgRUdMaW50IG1NaW5T
d2FwSW50ZXJ2YWw7Ci0gICAgRFdPUkQgbVByZXNlbnRJbnRlcnZhbDsKLQorICAgIAogICAgIHR5
cGVkZWYgc3RkOjpzZXQ8U3VyZmFjZSo+IFN1cmZhY2VTZXQ7CiAgICAgU3VyZmFjZVNldCBtU3Vy
ZmFjZVNldDsKIApAQCAtOTIsNiArOTgsNyBAQCBjbGFzcyBEaXNwbGF5CiAgICAgQ29udGV4dFNl
dCBtQ29udGV4dFNldDsKIAogICAgIGJvb2wgY3JlYXRlRGV2aWNlKCk7CisgICAgYm9vbCByZXNl
dERldmljZSgpOwogfTsKIH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkVHTC9TdXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML1N1cmZhY2UuY3BwCShyZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgsNiAr
OCw4IEBACiAvLyBzdWNoIGFzIHRoZSBjbGllbnQgYXJlYSBvZiBhIHdpbmRvdywgaW5jbHVkaW5n
IGFueSBiYWNrIGJ1ZmZlcnMuCiAvLyBJbXBsZW1lbnRzIEVHTFN1cmZhY2UgYW5kIHJlbGF0ZWQg
ZnVuY3Rpb25hbGl0eS4gW0VHTCAxLjRdIHNlY3Rpb24gMi4yIHBhZ2UgMy4KIAorI2luY2x1ZGUg
PHRjaGFyLmg+CisKICNpbmNsdWRlICJsaWJFR0wvU3VyZmFjZS5oIgogCiAjaW5jbHVkZSAiY29t
bW9uL2RlYnVnLmgiCkBAIC0yMyw3ICsyNSw2IEBAIFN1cmZhY2U6OlN1cmZhY2UoRGlzcGxheSAq
ZGlzcGxheSwgY29uc3QKICAgICBtU3dhcENoYWluID0gTlVMTDsKICAgICBtRGVwdGhTdGVuY2ls
ID0gTlVMTDsKICAgICBtQmFja0J1ZmZlciA9IE5VTEw7Ci0gICAgbVJlbmRlclRhcmdldCA9IE5V
TEw7CiAgICAgbUZsaXBUZXh0dXJlID0gTlVMTDsKICAgICBtRmxpcFN0YXRlID0gTlVMTDsKICAg
ICBtUHJlRmxpcFN0YXRlID0gTlVMTDsKQEAgLTMxLDUyICszMiw4NiBAQCBTdXJmYWNlOjpTdXJm
YWNlKERpc3BsYXkgKmRpc3BsYXksIGNvbnN0CiAgICAgbVBpeGVsQXNwZWN0UmF0aW8gPSAoRUdM
aW50KSgxLjAgKiBFR0xfRElTUExBWV9TQ0FMSU5HKTsgICAvLyBGSVhNRTogRGV0ZXJtaW5lIGFj
dHVhbCBwaXhlbCBhc3BlY3QgcmF0aW8KICAgICBtUmVuZGVyQnVmZmVyID0gRUdMX0JBQ0tfQlVG
RkVSOwogICAgIG1Td2FwQmVoYXZpb3IgPSBFR0xfQlVGRkVSX1BSRVNFUlZFRDsKKyAgICBtU3dh
cEludGVydmFsID0gLTE7CisgICAgc2V0U3dhcEludGVydmFsKDEpOwogCisgICAgc3ViY2xhc3NX
aW5kb3coKTsKICAgICByZXNldFN3YXBDaGFpbigpOwogfQogCiBTdXJmYWNlOjp+U3VyZmFjZSgp
CiB7CisgICAgdW5zdWJjbGFzc1dpbmRvdygpOworICAgIHJlbGVhc2UoKTsKK30KKwordm9pZCBT
dXJmYWNlOjpyZWxlYXNlKCkKK3sKICAgICBpZiAobVN3YXBDaGFpbikKICAgICB7CiAgICAgICAg
IG1Td2FwQ2hhaW4tPlJlbGVhc2UoKTsKKyAgICAgICAgbVN3YXBDaGFpbiA9IE5VTEw7CiAgICAg
fQogCiAgICAgaWYgKG1CYWNrQnVmZmVyKQogICAgIHsKICAgICAgICAgbUJhY2tCdWZmZXItPlJl
bGVhc2UoKTsKLSAgICB9Ci0KLSAgICBpZiAobVJlbmRlclRhcmdldCkKLSAgICB7Ci0gICAgICAg
IG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICAgICAgbUJhY2tCdWZmZXIgPSBOVUxMOwog
ICAgIH0KIAogICAgIGlmIChtRGVwdGhTdGVuY2lsKQogICAgIHsKICAgICAgICAgbURlcHRoU3Rl
bmNpbC0+UmVsZWFzZSgpOworICAgICAgICBtRGVwdGhTdGVuY2lsID0gTlVMTDsKICAgICB9CiAK
ICAgICBpZiAobUZsaXBUZXh0dXJlKQogICAgIHsKICAgICAgICAgbUZsaXBUZXh0dXJlLT5SZWxl
YXNlKCk7CisgICAgICAgIG1GbGlwVGV4dHVyZSA9IE5VTEw7CiAgICAgfQogCiAgICAgaWYgKG1G
bGlwU3RhdGUpCiAgICAgewogICAgICAgICBtRmxpcFN0YXRlLT5SZWxlYXNlKCk7CisgICAgICAg
IG1GbGlwU3RhdGUgPSBOVUxMOwogICAgIH0KIAogICAgIGlmIChtUHJlRmxpcFN0YXRlKQogICAg
IHsKICAgICAgICAgbVByZUZsaXBTdGF0ZS0+UmVsZWFzZSgpOworICAgICAgICBtUHJlRmxpcFN0
YXRlID0gTlVMTDsKICAgICB9CiB9CiAKIHZvaWQgU3VyZmFjZTo6cmVzZXRTd2FwQ2hhaW4oKQog
eworICAgIFJFQ1Qgd2luZG93UmVjdDsKKyAgICBpZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93
SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkKKyAgICB7CisgICAgICAgIEFTU0VSVChmYWxzZSk7CisK
KyAgICAgICAgRVJSKCJDb3VsZCBub3QgcmV0cmlldmUgdGhlIHdpbmRvdyBkaW1lbnNpb25zIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZXNldFN3YXBDaGFpbih3aW5kb3dSZWN0
LnJpZ2h0IC0gd2luZG93UmVjdC5sZWZ0LCB3aW5kb3dSZWN0LmJvdHRvbSAtIHdpbmRvd1JlY3Qu
dG9wKTsKK30KKwordm9pZCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbihpbnQgYmFja2J1ZmZlcldp
ZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCkKK3sKICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UgPSBtRGlzcGxheS0+Z2V0RGV2aWNlKCk7CiAKKyAgICBpZiAoZGV2aWNlID09IE5VTEwpCisg
ICAgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRXZpY3QgYWxsIG5vbi1yZW5k
ZXIgdGFyZ2V0IHRleHR1cmVzIHRvIHN5c3RlbSBtZW1vcnkgYW5kIHJlbGVhc2UgYWxsIHJlc291
cmNlcworICAgIC8vIGJlZm9yZSByZWFsbG9jYXRpbmcgdGhlbSB0byBmcmVlIHVwIGFzIG11Y2gg
dmlkZW8gbWVtb3J5IGFzIHBvc3NpYmxlLgorICAgIGRldmljZS0+RXZpY3RNYW5hZ2VkUmVzb3Vy
Y2VzKCk7CisgICAgcmVsZWFzZSgpOworICAgIAogICAgIEQzRFBSRVNFTlRfUEFSQU1FVEVSUyBw
cmVzZW50UGFyYW1ldGVycyA9IHswfTsKIAogICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0
aFN0ZW5jaWxGb3JtYXQgPSBtQ29uZmlnLT5tRGVwdGhTdGVuY2lsRm9ybWF0OwpAQCAtODcsOTYg
KzEyMiw1NyBAQCB2b2lkIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKCkKICAgICBwcmVzZW50UGFy
YW1ldGVycy5oRGV2aWNlV2luZG93ID0gZ2V0V2luZG93SGFuZGxlKCk7CiAgICAgcHJlc2VudFBh
cmFtZXRlcnMuTXVsdGlTYW1wbGVRdWFsaXR5ID0gMDsgICAgICAgICAgICAgICAgICAvLyBGSVhN
RTogVW5pbXBsZW1lbnRlZAogICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSA9
IEQzRE1VTFRJU0FNUExFX05PTkU7ICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKLSAgICBwcmVz
ZW50UGFyYW1ldGVycy5QcmVzZW50YXRpb25JbnRlcnZhbCA9IERpc3BsYXk6OmNvbnZlcnRJbnRl
cnZhbChtQ29uZmlnLT5tTWluU3dhcEludGVydmFsKTsKKyAgICBwcmVzZW50UGFyYW1ldGVycy5Q
cmVzZW50YXRpb25JbnRlcnZhbCA9IG1QcmVzZW50SW50ZXJ2YWw7CiAgICAgcHJlc2VudFBhcmFt
ZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKICAgICBwcmVzZW50UGFy
YW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZl
cldpZHRoID0gYmFja2J1ZmZlcldpZHRoOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZm
ZXJIZWlnaHQgPSBiYWNrYnVmZmVySGVpZ2h0OwogCi0gICAgUkVDVCB3aW5kb3dSZWN0OwotICAg
IGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5kb3dIYW5kbGUoKSwgJndpbmRvd1JlY3QpKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKGZhbHNlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IHdpbmRvd1JlY3QucmlnaHQgLSB3
aW5kb3dSZWN0LmxlZnQ7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCA9
IHdpbmRvd1JlY3QuYm90dG9tIC0gd2luZG93UmVjdC50b3A7Ci0KLSAgICBJRGlyZWN0M0RTd2Fw
Q2hhaW45ICpzd2FwQ2hhaW4gPSBOVUxMOwotICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5D
cmVhdGVBZGRpdGlvbmFsU3dhcENoYWluKCZwcmVzZW50UGFyYW1ldGVycywgJnN3YXBDaGFpbik7
CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUFkZGl0aW9uYWxTd2FwQ2hhaW4o
JnByZXNlbnRQYXJhbWV0ZXJzLCAmbVN3YXBDaGFpbik7CiAKICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCiAgICAgewogICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKIAogICAgICAgICBFUlIoIkNvdWxkIG5v
dCBjcmVhdGUgYWRkaXRpb25hbCBzd2FwIGNoYWluczogJTA4bFgiLCByZXN1bHQpOworICAgICAg
ICByZWxlYXNlKCk7CiAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DKTsKICAgICB9
CiAKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsU3VyZmFjZSA9IE5VTEw7CiAg
ICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVEZXB0aFN0ZW5jaWxTdXJmYWNlKHByZXNlbnRQYXJh
bWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdo
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2Vu
dFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCwgcHJlc2VudFBhcmFtZXRlcnMuTXVs
dGlTYW1wbGVUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxpdHksIEZBTFNFLCAmZGVwdGhT
dGVuY2lsU3VyZmFjZSwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0Us
ICZtRGVwdGhTdGVuY2lsLCBOVUxMKTsKIAogICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICB7
CiAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVz
dWx0ID09IEVfT1VUT0ZNRU1PUlkpOwogCi0gICAgICAgIHN3YXBDaGFpbi0+UmVsZWFzZSgpOwot
CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBkZXB0aHN0ZW5jaWwgc3VyZmFjZSBmb3Ig
bmV3IHN3YXAgY2hhaW46ICUwOGxYIiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIGVycm9yKEVH
TF9CQURfQUxMT0MpOwotICAgIH0KLQotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJn
ZXQgPSBOVUxMOwotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0KHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZl
ckhlaWdodCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBs
ZVR5cGUsIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZyZW5k
ZXJUYXJnZXQsIE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0g
RV9PVVRPRk1FTU9SWSk7Ci0KLSAgICAgICAgc3dhcENoYWluLT5SZWxlYXNlKCk7Ci0gICAgICAg
IGRlcHRoU3RlbmNpbFN1cmZhY2UtPlJlbGVhc2UoKTsKLQotICAgICAgICBFUlIoIkNvdWxkIG5v
dCBjcmVhdGUgcmVuZGVyIHRhcmdldCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFpbjogJTA4bFgi
LCByZXN1bHQpOworICAgICAgICByZWxlYXNlKCk7CiAgICAgICAgIHJldHVybiBlcnJvcihFR0xf
QkFEX0FMTE9DKTsKICAgICB9CiAKICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCi0g
ICAgSURpcmVjdDNEVGV4dHVyZTkgKmZsaXBUZXh0dXJlID0gTlVMTDsKICAgICByZXN1bHQgPSBk
ZXZpY2UtPkNyZWF0ZVRleHR1cmUocHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoLCBw
cmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0LCAxLCBEM0RVU0FHRV9SRU5ERVJUQVJH
RVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJz
LkJhY2tCdWZmZXJGb3JtYXQsIEQzRFBPT0xfREVGQVVMVCwgJmZsaXBUZXh0dXJlLCBOVUxMKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFj
a0J1ZmZlckZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmbUZsaXBUZXh0dXJlLCBOVUxMKTsKIAog
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICB7CiAgICAgICAgIEFTU0VSVChyZXN1bHQgPT0g
RDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkpOwogCi0g
ICAgICAgIHN3YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgICAgICBkZXB0aFN0ZW5jaWxTdXJmYWNl
LT5SZWxlYXNlKCk7Ci0gICAgICAgIHJlbmRlclRhcmdldC0+UmVsZWFzZSgpOwotCiAgICAgICAg
IEVSUigiQ291bGQgbm90IGNyZWF0ZSBmbGlwIHRleHR1cmUgZm9yIG5ldyBzd2FwIGNoYWluOiAl
MDhsWCIsIHJlc3VsdCk7CisgICAgICAgIHJlbGVhc2UoKTsKICAgICAgICAgcmV0dXJuIGVycm9y
KEVHTF9CQURfQUxMT0MpOwogICAgIH0KIAotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpiYWNrQnVm
ZmVyID0gTlVMTDsKLSAgICBzd2FwQ2hhaW4tPkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZF
Ul9UWVBFX01PTk8sICZiYWNrQnVmZmVyKTsKLQotICAgIGlmIChtU3dhcENoYWluKSBtU3dhcENo
YWluLT5SZWxlYXNlKCk7Ci0gICAgaWYgKG1EZXB0aFN0ZW5jaWwpIG1EZXB0aFN0ZW5jaWwtPlJl
bGVhc2UoKTsKLSAgICBpZiAobUJhY2tCdWZmZXIpIG1CYWNrQnVmZmVyLT5SZWxlYXNlKCk7Ci0g
ICAgaWYgKG1SZW5kZXJUYXJnZXQpIG1SZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLSAgICBpZiAo
bUZsaXBUZXh0dXJlKSBtRmxpcFRleHR1cmUtPlJlbGVhc2UoKTsKLQorICAgIG1Td2FwQ2hhaW4t
PkdldEJhY2tCdWZmZXIoMCwgRDNEQkFDS0JVRkZFUl9UWVBFX01PTk8sICZtQmFja0J1ZmZlcik7
CiAgICAgbVdpZHRoID0gcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlcldpZHRoOwogICAgIG1I
ZWlnaHQgPSBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0OwogCi0gICAgbVN3YXBD
aGFpbiA9IHN3YXBDaGFpbjsKLSAgICBtRGVwdGhTdGVuY2lsID0gZGVwdGhTdGVuY2lsU3VyZmFj
ZTsKLSAgICBtQmFja0J1ZmZlciA9IGJhY2tCdWZmZXI7Ci0gICAgbVJlbmRlclRhcmdldCA9IHJl
bmRlclRhcmdldDsKLSAgICBtRmxpcFRleHR1cmUgPSBmbGlwVGV4dHVyZTsKKyAgICBtUHJlc2Vu
dEludGVydmFsRGlydHkgPSBmYWxzZTsKKworICAgIEludmFsaWRhdGVSZWN0KG1XaW5kb3csIE5V
TEwsIEZBTFNFKTsKIAogICAgIC8vIFRoZSBmbGlwIHN0YXRlIGJsb2NrIHJlY29yZGVkIG1GbGlw
VGV4dHVyZSBzbyBpdCBpcyBub3cgaW52YWxpZC4KICAgICByZWxlYXNlUmVjb3JkZWRTdGF0ZShk
ZXZpY2UpOwpAQCAtMTk5LDYgKzE5NSw3IEBAIHZvaWQgU3VyZmFjZTo6d3JpdGVSZWNvcmRhYmxl
RmxpcFN0YXRlKEkKICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NMSVBQTEFORUVO
QUJMRSwgMCk7CiAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19DT0xPUldSSVRFRU5B
QkxFLCBEM0RDT0xPUldSSVRFRU5BQkxFX0FMUEhBIHwgRDNEQ09MT1JXUklURUVOQUJMRV9CTFVF
IHwgRDNEQ09MT1JXUklURUVOQUJMRV9HUkVFTiB8IEQzRENPTE9SV1JJVEVFTkFCTEVfUkVEKTsK
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX1NSR0JXUklURUVOQUJMRSwgRkFMU0Up
OworICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU0NJU1NPUlRFU1RFTkFCTEUsIEZB
TFNFKTsKICAgICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOwogICAgIGRldmljZS0+U2V0
VmVydGV4U2hhZGVyKE5VTEwpOwogCkBAIC0yMDYsNyArMjAzLDcgQEAgdm9pZCBTdXJmYWNlOjp3
cml0ZVJlY29yZGFibGVGbGlwU3RhdGUoSQogICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3Rh
dGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsKICAgICBkZXZpY2UtPlNl
dFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RFWFRVUkUpOwog
ICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMSwgRDNEVFNTX0NPTE9ST1AsIEQzRFRP
UF9ESVNBQkxFKTsKLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7IC8vIFRoZSBhY3R1
YWwgdGV4dHVyZSB3aWxsIGNoYW5nZSBhZnRlciByZXNpemluZy4gQnV0IHRoZSBwcmUtZmxpcCBz
dGF0ZSBibG9jayBtdXN0IHNhdmUvcmVzdG9yZSB0aGUgdGV4dHVyZS4KKyAgICBkZXZpY2UtPlNl
dFRleHR1cmUoMCwgTlVMTCk7ICAgLy8gVGhlIGFjdHVhbCB0ZXh0dXJlIHdpbGwgY2hhbmdlIGFm
dGVyIHJlc2l6aW5nLiBCdXQgdGhlIHByZS1mbGlwIHN0YXRlIGJsb2NrIG11c3Qgc2F2ZS9yZXN0
b3JlIHRoZSB0ZXh0dXJlLgogICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBf
TUFHRklMVEVSLCBEM0RURVhGX1BPSU5UKTsKICAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgw
LCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7CiAgICAgZGV2aWNlLT5TZXRTYW1w
bGVyU3RhdGUoMCwgRDNEU0FNUF9TUkdCVEVYVFVSRSwgRkFMU0UpOwpAQCAtMjE0LDcgKzIxMSwx
MCBAQCB2b2lkIFN1cmZhY2U6OndyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZShJCiAgICAgZGV2aWNl
LT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVAp
OwogICAgIGRldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfVEVYMSk7CiAKLSAg
ICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoMCwgMSk7IC8vIERyYXdQcmltaXRpdmVVUCBv
bmx5IGNhcmVzIGFib3V0IHN0cmVhbSAwLCBub3QgdGhlIHJlc3QuCisgICAgUkVDVCBzY2lzc29y
UmVjdCA9IHswfTsgICAvLyBTY2lzc29yaW5nIGlzIGRpc2FibGVkIGZvciBmbGlwcGluZywgYnV0
IHdlIG5lZWQgdGhpcyB0byBjYXB0dXJlIGFuZCByZXN0b3JlIHRoZSBvbGQgcmVjdGFuZ2xlCisg
ICAgZGV2aWNlLT5TZXRTY2lzc29yUmVjdCgmc2Npc3NvclJlY3QpOworICAgIEQzRFZJRVdQT1JU
OSB2aWV3cG9ydCA9IHswLCAwLCBtV2lkdGgsIG1IZWlnaHQsIDAuMGYsIDEuMGZ9OworICAgIGRl
dmljZS0+U2V0Vmlld3BvcnQoJnZpZXdwb3J0KTsKIH0KIAogdm9pZCBTdXJmYWNlOjphcHBseUZs
aXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpCkBAIC0yNzUsOCArMjc1LDYgQEAgdm9p
ZCBTdXJmYWNlOjphcHBseUZsaXBTdGF0ZShJRGlyZWN0M0REZQogCiB2b2lkIFN1cmZhY2U6OnJl
c3RvcmVTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpCiB7Ci0gICAgbVByZUZsaXBTdGF0
ZS0+QXBwbHkoKTsKLQogICAgIGRldmljZS0+U2V0UmVuZGVyVGFyZ2V0KDAsIG1QcmVGbGlwQmFj
a0J1ZmZlcik7CiAgICAgZGV2aWNlLT5TZXREZXB0aFN0ZW5jaWxTdXJmYWNlKG1QcmVGbGlwRGVw
dGhTdGVuY2lsKTsKIApAQCAtMjkxLDYgKzI4OSw4IEBAIHZvaWQgU3VyZmFjZTo6cmVzdG9yZVN0
YXRlKElEaXJlY3QzRERldmkKICAgICAgICAgbVByZUZsaXBEZXB0aFN0ZW5jaWwtPlJlbGVhc2Uo
KTsKICAgICAgICAgbVByZUZsaXBEZXB0aFN0ZW5jaWwgPSBOVUxMOwogICAgIH0KKworICAgIG1Q
cmVGbGlwU3RhdGUtPkFwcGx5KCk7CiB9CiAKIC8vIE9uIHRoZSBuZXh0IGZsaXAsIHRoaXMgd2ls
bCBjYXVzZSB0aGUgc3RhdGUgdG8gYmUgcmVjb3JkZWQgZnJvbSBzY3JhdGNoLgpAQCAtMzA5LDgg
KzMwOSw1OCBAQCB2b2lkIFN1cmZhY2U6OnJlbGVhc2VSZWNvcmRlZFN0YXRlKElEaXJlCiAgICAg
ICAgIG1QcmVGbGlwU3RhdGUgPSBOVUxMOwogICAgIH0KIH0KKyNkZWZpbmUga1N1cmZhY2VQcm9w
ZXJ0eSBfVEVYVCgiRWdsOjpTdXJmYWNlT3duZXIiKQorI2RlZmluZSBrUGFyZW50V25kUHJvYyBf
VEVYVCgiRWdsOjpTdXJmYWNlUGFyZW50V25kUHJvYyIpCiAKLWJvb2wgU3VyZmFjZTo6Y2hlY2tG
b3JXaW5kb3dSZXNpemUoKQorc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgU3VyZmFjZVdpbmRvd1By
b2MoSFdORCBod25kLCBVSU5UIG1lc3NhZ2UsIFdQQVJBTSB3cGFyYW0sIExQQVJBTSBscGFyYW0p
IHsKKyAgaWYgKG1lc3NhZ2UgPT0gV01fU0laRSkgeworICAgICAgU3VyZmFjZSogc3VyZiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8U3VyZmFjZSo+KEdldFByb3AoaHduZCwga1N1cmZhY2VQcm9wZXJ0eSkp
OworICAgICAgaWYoc3VyZikgeworICAgICAgICBzdXJmLT5jaGVja0Zvck91dE9mRGF0ZVN3YXBD
aGFpbigpOworICAgICAgfQorICB9CisgIFdORFBST0MgcHJldlduZEZ1bmMgPSByZWludGVycHJl
dF9jYXN0PFdORFBST0MgPihHZXRQcm9wKGh3bmQsIGtQYXJlbnRXbmRQcm9jKSk7CisgIHJldHVy
biBDYWxsV2luZG93UHJvYyhwcmV2V25kRnVuYywgaHduZCwgbWVzc2FnZSwgd3BhcmFtLCBscGFy
YW0pOworfQorCit2b2lkIFN1cmZhY2U6OnN1YmNsYXNzV2luZG93KCkKK3sKKyAgU2V0TGFzdEVy
cm9yKDApOworICBMT05HIG9sZFduZFByb2MgPSBTZXRXaW5kb3dMb25nKG1XaW5kb3csIEdXTF9X
TkRQUk9DLCByZWludGVycHJldF9jYXN0PExPTkc+KFN1cmZhY2VXaW5kb3dQcm9jKSk7CisgIGlm
KG9sZFduZFByb2MgPT0gMCAmJiBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9TVUNDRVNTKSB7Cisg
ICAgbVdpbmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsKKyAgICByZXR1cm47CisgIH0KKworICBTZXRQ
cm9wKG1XaW5kb3csIGtTdXJmYWNlUHJvcGVydHksIHJlaW50ZXJwcmV0X2Nhc3Q8SEFORExFPih0
aGlzKSk7CisgIFNldFByb3AobVdpbmRvdywga1BhcmVudFduZFByb2MsIHJlaW50ZXJwcmV0X2Nh
c3Q8SEFORExFPihvbGRXbmRQcm9jKSk7CisgIG1XaW5kb3dTdWJjbGFzc2VkID0gdHJ1ZTsKK30K
Kwordm9pZCBTdXJmYWNlOjp1bnN1YmNsYXNzV2luZG93KCkKK3sKKyAgaWYoIW1XaW5kb3dTdWJj
bGFzc2VkKQorICAgIHJldHVybjsKKworICAvLyB1bi1zdWJjbGFzcworICBMT05HIHBhcmVudFdu
ZEZ1bmMgPSByZWludGVycHJldF9jYXN0PExPTkc+KEdldFByb3AobVdpbmRvdywga1BhcmVudFdu
ZFByb2MpKTsKKworICAvLyBDaGVjayB0aGUgd2luZG93cHJvYyBpcyBzdGlsbCBTdXJmYWNlV2lu
ZG93UHJvYy4KKyAgLy8gSWYgdGhpcyBhc3NlcnQgZmFpbHMsIHRoZW4gaXQgaXMgbGlrZWx5IHRo
ZSBhcHBsaWNhdGlvbiBoYXMgc3ViY2xhc3NlZCB0aGUKKyAgLy8gaHduZCBhcyB3ZWxsIGFuZCBk
aWQgbm90IHVuc3ViY2xhc3MgYmVmb3JlIGRlc3Ryb3lpbmcgaXRzIEVHTCBjb250ZXh0LiBUaGUK
KyAgLy8gYXBwbGljYXRpb24gc2hvdWxkIGJlIG1vZGlmaWVkIHRvIGVpdGhlciBzdWJjbGFzcyBi
ZWZvcmUgaW5pdGlhbGl6aW5nIHRoZQorICAvLyBFR0wgY29udGV4dCwgb3IgdG8gdW5zdWJjbGFz
cyBiZWZvcmUgZGVzdHJveWluZyB0aGUgRUdMIGNvbnRleHQuCisgIGlmKHBhcmVudFduZEZ1bmMp
IHsKKyAgICBMT05HIHByZXZXbmRGdW5jID0gU2V0V2luZG93TG9uZyhtV2luZG93LCBHV0xfV05E
UFJPQywgcGFyZW50V25kRnVuYyk7CisgICAgQVNTRVJUKHByZXZXbmRGdW5jID09IHJlaW50ZXJw
cmV0X2Nhc3Q8TE9ORz4oU3VyZmFjZVdpbmRvd1Byb2MpKTsKKyAgfQorCisgIFJlbW92ZVByb3Ao
bVdpbmRvdywga1N1cmZhY2VQcm9wZXJ0eSk7CisgIFJlbW92ZVByb3AobVdpbmRvdywga1BhcmVu
dFduZFByb2MpOworICBtV2luZG93U3ViY2xhc3NlZCA9IGZhbHNlOworfQorCitib29sIFN1cmZh
Y2U6OmNoZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCkKIHsKICAgICBSRUNUIGNsaWVudDsKICAg
ICBpZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93SGFuZGxlKCksICZjbGllbnQpKQpAQCAtMzE5
LDEwICszNjksMTQgQEAgYm9vbCBTdXJmYWNlOjpjaGVja0ZvcldpbmRvd1Jlc2l6ZSgpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoZ2V0V2lkdGgoKSAhPSBjbGllbnQu
cmlnaHQgLSBjbGllbnQubGVmdCB8fCBnZXRIZWlnaHQoKSAhPSBjbGllbnQuYm90dG9tIC0gY2xp
ZW50LnRvcCkKLSAgICB7Ci0gICAgICAgIHJlc2V0U3dhcENoYWluKCk7CisgICAgLy8gR3JvdyB0
aGUgYnVmZmVyIG5vdywgaWYgdGhlIHdpbmRvdyBoYXMgZ3Jvd24uIFdlIG5lZWQgdG8gZ3JvdyBu
b3cgdG8gYXZvaWQgbG9zaW5nIGluZm9ybWF0aW9uLgorICAgIGludCBjbGllbnRXaWR0aCA9IGNs
aWVudC5yaWdodCAtIGNsaWVudC5sZWZ0OworICAgIGludCBjbGllbnRIZWlnaHQgPSBjbGllbnQu
Ym90dG9tIC0gY2xpZW50LnRvcDsKKyAgICBib29sIHNpemVEaXJ0eSA9IGNsaWVudFdpZHRoICE9
IGdldFdpZHRoKCkgfHwgY2xpZW50SGVpZ2h0ICE9IGdldEhlaWdodCgpOwogCisgICAgaWYgKHNp
emVEaXJ0eSB8fCBtUHJlc2VudEludGVydmFsRGlydHkpCisgICAgeworICAgICAgICByZXNldFN3
YXBDaGFpbihjbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0KTsKICAgICAgICAgaWYgKHN0YXRpY19j
YXN0PGVnbDo6U3VyZmFjZSo+KGdldEN1cnJlbnREcmF3U3VyZmFjZSgpKSA9PSB0aGlzKQogICAg
ICAgICB7CiAgICAgICAgICAgICBnbE1ha2VDdXJyZW50KGdsR2V0Q3VycmVudENvbnRleHQoKSwg
c3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5Kj4oZ2V0Q3VycmVudERpc3BsYXkoKSksIHRoaXMpOwpA
QCAtMzMwLDU3ICszODQsNTEgQEAgYm9vbCBTdXJmYWNlOjpjaGVja0ZvcldpbmRvd1Jlc2l6ZSgp
CiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotCiAgICAgcmV0dXJuIGZhbHNlOwogfQog
Ci1ib29sIFN1cmZhY2U6OnN3YXAoKQorRFdPUkQgU3VyZmFjZTo6Y29udmVydEludGVydmFsKEVH
TGludCBpbnRlcnZhbCkKIHsKLSAgICBpZiAobVN3YXBDaGFpbikKKyAgICBzd2l0Y2goaW50ZXJ2
YWwpCiAgICAgewotICAgICAgICBJRGlyZWN0M0RUZXh0dXJlOSAqZmxpcFRleHR1cmUgPSBtRmxp
cFRleHR1cmU7Ci0gICAgICAgIGZsaXBUZXh0dXJlLT5BZGRSZWYoKTsKLQotICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gbVJlbmRlclRhcmdldDsKLSAgICAgICAgcmVu
ZGVyVGFyZ2V0LT5BZGRSZWYoKTsKKyAgICAgIGNhc2UgMDogcmV0dXJuIEQzRFBSRVNFTlRfSU5U
RVJWQUxfSU1NRURJQVRFOworICAgICAgY2FzZSAxOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZB
TF9PTkU7CisgICAgICBjYXNlIDI6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX1RXTzsKKyAg
ICAgIGNhc2UgMzogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVEhSRUU7CisgICAgICBjYXNl
IDQ6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0ZPVVI7CisgICAgICBkZWZhdWx0OiBVTlJF
QUNIQUJMRSgpOworICAgIH0KIAotICAgICAgICBFR0xpbnQgb2xkV2lkdGggPSBtV2lkdGg7Ci0g
ICAgICAgIEVHTGludCBvbGRIZWlnaHQgPSBtSGVpZ2h0OworICAgIHJldHVybiBEM0RQUkVTRU5U
X0lOVEVSVkFMX0RFRkFVTFQ7Cit9CiAKLSAgICAgICAgY2hlY2tGb3JXaW5kb3dSZXNpemUoKTsK
IAorYm9vbCBTdXJmYWNlOjpzd2FwKCkKK3sKKyAgICBpZiAobVN3YXBDaGFpbikKKyAgICB7CiAg
ICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsK
IAotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdGV4dHVyZVN1cmZhY2U7Ci0gICAgICAgIGZs
aXBUZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJnRleHR1cmVTdXJmYWNlKTsKLQotICAgICAg
ICBtRGlzcGxheS0+ZW5kU2NlbmUoKTsKLSAgICAgICAgZGV2aWNlLT5TdHJldGNoUmVjdChyZW5k
ZXJUYXJnZXQsIE5VTEwsIHRleHR1cmVTdXJmYWNlLCBOVUxMLCBEM0RURVhGX05PTkUpOwotICAg
ICAgICByZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKLQogICAgICAgICBhcHBseUZsaXBTdGF0ZShk
ZXZpY2UpOwotICAgICAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgZmxpcFRleHR1cmUpOwotCi0g
ICAgICAgIGZsb2F0IHhzY2FsZSA9IChmbG9hdCltV2lkdGggLyBvbGRXaWR0aDsKLSAgICAgICAg
ZmxvYXQgeXNjYWxlID0gKGZsb2F0KW1IZWlnaHQgLyBvbGRIZWlnaHQ7CisgICAgICAgIGRldmlj
ZS0+U2V0VGV4dHVyZSgwLCBtRmxpcFRleHR1cmUpOwogCiAgICAgICAgIC8vIFJlbmRlciB0aGUg
dGV4dHVyZSB1cHNpZGUgZG93biBpbnRvIHRoZSBiYWNrIGJ1ZmZlcgotICAgICAgICAvLyBUZXhj
b29yZHMgYXJlIGNob3NlbiB0byBwaW4gYSBwb3RlbnRpYWxseSByZXNpemVkIGltYWdlIGludG8g
dGhlIHVwcGVyLWxlZnQgY29ybmVyIHdpdGhvdXQgc2NhbGluZy4KLSAgICAgICAgZmxvYXQgcXVh
ZFs0XVs2XSA9IHt7ICAgICAwIC0gMC41ZiwgICAgICAgMCAtIDAuNWYsIDAuMGYsIDEuMGYsIDAu
MGYsICAgMS4wZiAgICAgICB9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttV2lkdGgg
LSAwLjVmLCAgICAgICAwIC0gMC41ZiwgMC4wZiwgMS4wZiwgeHNjYWxlLCAxLjBmICAgICAgIH0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAge21XaWR0aCAtIDAuNWYsIG1IZWlnaHQgLSAw
LjVmLCAwLjBmLCAxLjBmLCB4c2NhbGUsIDEuMGYteXNjYWxlfSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7ICAgICAwIC0gMC41ZiwgbUhlaWdodCAtIDAuNWYsIDAuMGYsIDEuMGYsIDAu
MGYsICAgMS4wZi15c2NhbGV9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYKKyAgICAgICAgLy8g
VGV4Y29vcmRzIGFyZSBjaG9zZW4gdG8gZmxpcCB0aGUgcmVuZGVyVGFyZ2V0IGFib3V0IGl0cyBZ
IGF4aXMuCisgICAgICAgIGZsb2F0IHcgPSBzdGF0aWNfY2FzdDxmbG9hdD4oZ2V0V2lkdGgoKSk7
CisgICAgICAgIGZsb2F0IGggPSBzdGF0aWNfY2FzdDxmbG9hdD4oZ2V0SGVpZ2h0KCkpOworICAg
ICAgICBmbG9hdCBxdWFkWzRdWzZdID0ge3swIC0gMC41ZiwgMCAtIDAuNWYsIDAuMGYsIDEuMGYs
IDAuMGYsIDEuMGZ9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt3IC0gMC41ZiwgMCAt
IDAuNWYsIDAuMGYsIDEuMGYsIDEuMGYsIDEuMGZ9LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHt3IC0gMC41ZiwgaCAtIDAuNWYsIDAuMGYsIDEuMGYsIDEuMGYsIDAuMGZ9LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHswIC0gMC41ZiwgaCAtIDAuNWYsIDAuMGYsIDEuMGYsIDAu
MGYsIDAuMGZ9fTsgICAvLyB4LCB5LCB6LCByaHcsIHUsIHYKIAogICAgICAgICBtRGlzcGxheS0+
c3RhcnRTY2VuZSgpOwogICAgICAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmVVUChEM0RQVF9UUklB
TkdMRUZBTiwgMiwgcXVhZCwgNiAqIHNpemVvZihmbG9hdCkpOwogCi0gICAgICAgIGZsaXBUZXh0
dXJlLT5SZWxlYXNlKCk7Ci0gICAgICAgIHRleHR1cmVTdXJmYWNlLT5SZWxlYXNlKCk7Ci0KICAg
ICAgICAgcmVzdG9yZVN0YXRlKGRldmljZSk7CiAKICAgICAgICAgbURpc3BsYXktPmVuZFNjZW5l
KCk7Ci0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFpbi0+UHJlc2VudChOVUxMLCBO
VUxMLCBOVUxMLCBOVUxMLCBtRGlzcGxheS0+Z2V0UHJlc2VudEludGVydmFsKCkpOworCisgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gbVN3YXBDaGFpbi0+UHJlc2VudChOVUxMLCBOVUxMLCBOVUxM
LCBOVUxMLCAwKTsKIAogICAgICAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVN
T1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJlc3VsdCA9PSBEM0RFUlJfRFJJVkVS
SU5URVJOQUxFUlJPUikKICAgICAgICAgewpAQCAtMzk0LDYgKzQ0Miw3IEBAIGJvb2wgU3VyZmFj
ZTo6c3dhcCgpCiAKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAorICAgICAg
ICBjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpOwogICAgIH0KIAogICAgIHJldHVybiB0cnVl
OwpAQCAtNDExLDEyICs0NjAsMTQgQEAgRUdMaW50IFN1cmZhY2U6OmdldEhlaWdodCgpIGNvbnN0
CiAKIElEaXJlY3QzRFN1cmZhY2U5ICpTdXJmYWNlOjpnZXRSZW5kZXJUYXJnZXQoKQogewotICAg
IGlmIChtUmVuZGVyVGFyZ2V0KQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICp0ZXh0dXJlU3VyZmFj
ZSA9IE5VTEw7CisKKyAgICBpZiAobUZsaXBUZXh0dXJlKQogICAgIHsKLSAgICAgICAgbVJlbmRl
clRhcmdldC0+QWRkUmVmKCk7CisgICAgICAgIG1GbGlwVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVs
KDAsICZ0ZXh0dXJlU3VyZmFjZSk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1SZW5kZXJUYXJnZXQ7
CisgICAgcmV0dXJuIHRleHR1cmVTdXJmYWNlOwogfQogCiBJRGlyZWN0M0RTdXJmYWNlOSAqU3Vy
ZmFjZTo6Z2V0RGVwdGhTdGVuY2lsKCkKQEAgLTQyOCw0ICs0NzksMTkgQEAgSURpcmVjdDNEU3Vy
ZmFjZTkgKlN1cmZhY2U6OmdldERlcHRoU3RlbgogCiAgICAgcmV0dXJuIG1EZXB0aFN0ZW5jaWw7
CiB9CisKK3ZvaWQgU3VyZmFjZTo6c2V0U3dhcEludGVydmFsKEVHTGludCBpbnRlcnZhbCkKK3sK
KyAgICBpZiAobVN3YXBJbnRlcnZhbCA9PSBpbnRlcnZhbCkKKyAgICB7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgbVN3YXBJbnRlcnZhbCA9IGludGVydmFsOworICAgIG1Td2Fw
SW50ZXJ2YWwgPSBzdGQ6Om1heChtU3dhcEludGVydmFsLCBtRGlzcGxheS0+Z2V0TWluU3dhcElu
dGVydmFsKCkpOworICAgIG1Td2FwSW50ZXJ2YWwgPSBzdGQ6Om1pbihtU3dhcEludGVydmFsLCBt
RGlzcGxheS0+Z2V0TWF4U3dhcEludGVydmFsKCkpOworCisgICAgbVByZXNlbnRJbnRlcnZhbCA9
IGNvbnZlcnRJbnRlcnZhbChtU3dhcEludGVydmFsKTsKKyAgICBtUHJlc2VudEludGVydmFsRGly
dHkgPSB0cnVlOworfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVH
TC9TdXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkVHTC9TdXJmYWNlLmgJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkVHTC9TdXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDkgQEAg
Y2xhc3MgU3VyZmFjZQogCiAgICAgflN1cmZhY2UoKTsKIAorICAgIHZvaWQgcmVsZWFzZSgpOwor
ICAgIHZvaWQgcmVzZXRTd2FwQ2hhaW4oKTsKKwogICAgIEhXTkQgZ2V0V2luZG93SGFuZGxlKCk7
CiAgICAgYm9vbCBzd2FwKCk7CiAKQEAgLTM4LDE4ICs0MSwyMiBAQCBjbGFzcyBTdXJmYWNlCiAg
ICAgdmlydHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0UmVuZGVyVGFyZ2V0KCk7CiAgICAgdmly
dHVhbCBJRGlyZWN0M0RTdXJmYWNlOSAqZ2V0RGVwdGhTdGVuY2lsKCk7CiAKLSAgcHJpdmF0ZToK
KyAgICB2b2lkIHNldFN3YXBJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpOworICAgIGJvb2wgY2hl
Y2tGb3JPdXRPZkRhdGVTd2FwQ2hhaW4oKTsgICAvLyBSZXR1cm5zIHRydWUgaWYgc3dhcGNoYWlu
IGNoYW5nZWQgZHVlIHRvIHJlc2l6ZSBvciBpbnRlcnZhbCB1cGRhdGUKKworcHJpdmF0ZToKICAg
ICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oU3VyZmFjZSk7CiAKICAgICBEaXNwbGF5ICpjb25z
dCBtRGlzcGxheTsKICAgICBJRGlyZWN0M0RTd2FwQ2hhaW45ICptU3dhcENoYWluOwogICAgIElE
aXJlY3QzRFN1cmZhY2U5ICptQmFja0J1ZmZlcjsKLSAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVJl
bmRlclRhcmdldDsKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbURlcHRoU3RlbmNpbDsKICAgICBJ
RGlyZWN0M0RUZXh0dXJlOSAqbUZsaXBUZXh0dXJlOwogCi0gICAgdm9pZCByZXNldFN3YXBDaGFp
bigpOwotICAgIGJvb2wgY2hlY2tGb3JXaW5kb3dSZXNpemUoKTsKKyAgICB2b2lkIHN1YmNsYXNz
V2luZG93KCk7CisgICAgdm9pZCB1bnN1YmNsYXNzV2luZG93KCk7CisgICAgdm9pZCByZXNldFN3
YXBDaGFpbihpbnQgYmFja2J1ZmZlcldpZHRoLCBpbnQgYmFja2J1ZmZlckhlaWdodCk7CisgICAg
c3RhdGljIERXT1JEIGNvbnZlcnRJbnRlcnZhbChFR0xpbnQgaW50ZXJ2YWwpOwogCiAgICAgdm9p
ZCBhcHBseUZsaXBTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpOwogICAgIHZvaWQgcmVz
dG9yZVN0YXRlKElEaXJlY3QzRERldmljZTkgKmRldmljZSk7CkBAIC02MSw2ICs2OCw3IEBAIGNs
YXNzIFN1cmZhY2UKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbVByZUZsaXBEZXB0aFN0ZW5jaWw7
CiAKICAgICBjb25zdCBIV05EIG1XaW5kb3c7ICAgICAgICAgICAgLy8gV2luZG93IHRoYXQgdGhl
IHN1cmZhY2UgaXMgY3JlYXRlZCBmb3IuCisgICAgYm9vbCBtV2luZG93U3ViY2xhc3NlZDsgICAg
ICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIHdlIHN1Y2Nlc3NmdWxseSBzdWJjbGFzc2VkIG1XaW5k
b3cgZm9yIFdNX1JFU0laRSBob29raW5nCiAgICAgY29uc3QgZWdsOjpDb25maWcgKm1Db25maWc7
ICAgIC8vIEVHTCBjb25maWcgc3VyZmFjZSB3YXMgY3JlYXRlZCB3aXRoCiAgICAgRUdMaW50IG1I
ZWlnaHQ7ICAgICAgICAgICAgICAgIC8vIEhlaWdodCBvZiBzdXJmYWNlCiAgICAgRUdMaW50IG1X
aWR0aDsgICAgICAgICAgICAgICAgIC8vIFdpZHRoIG9mIHN1cmZhY2UKQEAgLTc3LDYgKzg1LDkg
QEAgY2xhc3MgU3VyZmFjZQogLy8gIEVHTGVudW0gdGV4dHVyZVRhcmdldDsgICAgICAgICAvLyBU
eXBlIG9mIHRleHR1cmU6IDJEIG9yIG5vIHRleHR1cmUKIC8vICBFR0xlbnVtIHZnQWxwaGFGb3Jt
YXQ7ICAgICAgICAgLy8gQWxwaGEgZm9ybWF0IGZvciBPcGVuVkcKIC8vICBFR0xlbnVtIHZnQ29s
b3JTcGFjZTsgICAgICAgICAgLy8gQ29sb3Igc3BhY2UgZm9yIE9wZW5WRworICAgIEVHTGludCBt
U3dhcEludGVydmFsOworICAgIERXT1JEIG1QcmVzZW50SW50ZXJ2YWw7CisgICAgYm9vbCBtUHJl
c2VudEludGVydmFsRGlydHk7CiB9OwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML2xpYkVHTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCShyZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYwLDYgKzM2MCw4IEBAIEVHTFN1cmZhY2UgX19zdGRjYWxsIGVnbENyZWF0ZVdpbmRvd1N1cmYK
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQkFEX0FUVFJJQlVURSwgRUdMX05PX1NVUkZBQ0UpOwogICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIGF0dHJpYl9saXN0ICs9IDI7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KIApAQCAtNzQ2LDcgKzc0OCwxNCBAQCBFR0xCb29sZWFuIF9fc3RkY2FsbCBlZ2xT
d2FwSW50ZXJ2YWwoRUdMCiAgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwogICAgICAgICB9
CiAKLSAgICAgICAgZGlzcGxheS0+c2V0U3dhcEludGVydmFsKGludGVydmFsKTsKKyAgICAgICAg
ZWdsOjpTdXJmYWNlICpkcmF3X3N1cmZhY2UgPSBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihl
Z2w6OmdldEN1cnJlbnREcmF3U3VyZmFjZSgpKTsKKworICAgICAgICBpZiAoZHJhd19zdXJmYWNl
ID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1NV
UkZBQ0UsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRyYXdfc3Vy
ZmFjZS0+c2V0U3dhcEludGVydmFsKGludGVydmFsKTsKIAogICAgICAgICByZXR1cm4gc3VjY2Vz
cyhFR0xfVFJVRSk7CiAgICAgfQpAQCAtNzY1LDYgKzc3NCwyOCBAQCBFR0xDb250ZXh0IF9fc3Rk
Y2FsbCBlZ2xDcmVhdGVDb250ZXh0KEVHCiAKICAgICB0cnkKICAgICB7CisgICAgICAgIC8vIEdl
dCB0aGUgcmVxdWVzdGVkIGNsaWVudCB2ZXJzaW9uIChkZWZhdWx0IGlzIDEpIGFuZCBjaGVjayBp
dCBpcyB0d28uCisgICAgICAgIEVHTGludCBjbGllbnRfdmVyc2lvbiA9IDE7CisgICAgICAgIGlm
IChhdHRyaWJfbGlzdCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChjb25zdCBFR0xpbnQq
IGF0dHJpYnV0ZSA9IGF0dHJpYl9saXN0OyBhdHRyaWJ1dGVbMF0gIT0gRUdMX05PTkU7IGF0dHJp
YnV0ZSArPSAyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVb
MF0gPT0gRUdMX0NPTlRFWFRfQ0xJRU5UX1ZFUlNJT04pCisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICBjbGllbnRfdmVyc2lvbiA9IGF0dHJpYnV0ZVsxXTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklCVVRFLCBFR0xfTk9fQ09O
VEVYVCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGNsaWVudF92ZXJzaW9uICE9IDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihFR0xfQkFEX0NPTkZJRywgRUdMX05PX0NPTlRFWFQpOworICAgICAgICB9CisK
ICAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0gc3RhdGljX2Nhc3Q8ZWdsOjpEaXNwbGF5
Kj4oZHB5KTsKIAogICAgICAgICBpZiAoIXZhbGlkYXRlKGRpc3BsYXksIGNvbmZpZykpCkBAIC04
MjUsNyArODU2LDcgQEAgRUdMQm9vbGVhbiBfX3N0ZGNhbGwgZWdsTWFrZUN1cnJlbnQoRUdMRAog
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4o
Y3R4KTsKICAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZGlzcGxheS0+Z2V0RGV2
aWNlKCk7CiAKLSAgICAgICAgaWYgKCFkZXZpY2UgfHwgZGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVM
ZXZlbCgpICE9IEQzRF9PSykKKyAgICAgICAgaWYgKCFkZXZpY2UgfHwgRkFJTEVEKGRldmljZS0+
VGVzdENvb3BlcmF0aXZlTGV2ZWwoKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfRkFMU0UpOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0JsaXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQmxpdC5jcHAJKHJldmlzaW9u
IDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CbGl0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzgyLDYgKzM4MiwxMSBAQCBib29sIEJsaXQ6OnNldEZvcm1h
dENvbnZlcnRTaGFkZXJzKEdMZW51CiAKIElEaXJlY3QzRFRleHR1cmU5ICpCbGl0Ojpjb3B5U3Vy
ZmFjZVRvVGV4dHVyZShJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSwgY29uc3QgUkVDVCAmc291
cmNlUmVjdCkKIHsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgeworICAgICAgICByZXR1cm4gTlVM
TDsKKyAgICB9CisKICAgICBlZ2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7CiAg
ICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CiAKQEAgLTQwOCwxNCAr
NDEzLDggQEAgSURpcmVjdDNEVGV4dHVyZTkgKkJsaXQ6OmNvcHlTdXJmYWNlVG9UZQogICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgKElEaXJlY3QzRFRleHR1cmU5KilOVUxM
KTsKICAgICB9CiAKLSAgICBSRUNUIGQzZFNvdXJjZVJlY3Q7Ci0gICAgZDNkU291cmNlUmVjdC5s
ZWZ0ID0gc291cmNlUmVjdC5sZWZ0OwotICAgIGQzZFNvdXJjZVJlY3QucmlnaHQgPSBzb3VyY2VS
ZWN0LnJpZ2h0OwotICAgIGQzZFNvdXJjZVJlY3QudG9wID0gc291cmNlUmVjdC50b3A7Ci0gICAg
ZDNkU291cmNlUmVjdC5ib3R0b20gPSBzb3VyY2VSZWN0LmJvdHRvbTsKLQogICAgIGRpc3BsYXkt
PmVuZFNjZW5lKCk7Ci0gICAgcmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzdXJmYWNlLCAm
ZDNkU291cmNlUmVjdCwgdGV4dHVyZVN1cmZhY2UsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CisgICAg
cmVzdWx0ID0gZGV2aWNlLT5TdHJldGNoUmVjdChzdXJmYWNlLCAmc291cmNlUmVjdCwgdGV4dHVy
ZVN1cmZhY2UsIE5VTEwsIEQzRFRFWEZfTk9ORSk7CiAKICAgICB0ZXh0dXJlU3VyZmFjZS0+UmVs
ZWFzZSgpOwogCkBAIC00NjcsMTAgKzQ2Niw4IEBAIHZvaWQgQmxpdDo6c2V0Q29tbW9uQmxpdFN0
YXRlKCkKICAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgwLCBEM0RTQU1QX0FERFJFU1NVLCBE
M0RUQUREUkVTU19DTEFNUCk7CiAgICAgZGV2aWNlLT5TZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FN
UF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOwogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBNQVhfVkVSVEVYX0FUVFJJQlMrMTsgaSsrKQotICAgIHsKLSAgICAgICAgZGV2aWNlLT5TZXRT
dHJlYW1Tb3VyY2VGcmVxKGksIDEpOwotICAgIH0KKyAgICBSRUNUIHNjaXNzb3JSZWN0ID0gezB9
OyAgIC8vIFNjaXNzb3JpbmcgaXMgZGlzYWJsZWQgZm9yIGZsaXBwaW5nLCBidXQgd2UgbmVlZCB0
aGlzIHRvIGNhcHR1cmUgYW5kIHJlc3RvcmUgdGhlIG9sZCByZWN0YW5nbGUKKyAgICBkZXZpY2Ut
PlNldFNjaXNzb3JSZWN0KCZzY2lzc29yUmVjdCk7CiB9CiAKIHZvaWQgQmxpdDo6cmVuZGVyKCkK
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZl
ci5jcHAJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9CdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw2ICsxMCwxMCBAQAogCiAj
aW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4u
aCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5oIgorCiBuYW1lc3Bh
Y2UgZ2wKIHsKIApAQCAtMTgsMTEgKzIyLDE2IEBAIEJ1ZmZlcjo6QnVmZmVyKEdMdWludCBpZCkg
OiBSZWZDb3VudE9iamUKICAgICBtQ29udGVudHMgPSBOVUxMOwogICAgIG1TaXplID0gMDsKICAg
ICBtVXNhZ2UgPSBHTF9EWU5BTUlDX0RSQVc7CisKKyAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsK
KyAgICBtSW5kZXhCdWZmZXIgPSBOVUxMOwogfQogCiBCdWZmZXI6On5CdWZmZXIoKQogewogICAg
IGRlbGV0ZVtdIG1Db250ZW50czsKKyAgICBkZWxldGUgbVZlcnRleEJ1ZmZlcjsKKyAgICBkZWxl
dGUgbUluZGV4QnVmZmVyOwogfQogCiB2b2lkIEJ1ZmZlcjo6YnVmZmVyRGF0YShjb25zdCB2b2lk
ICpkYXRhLCBHTHNpemVpcHRyIHNpemUsIEdMZW51bSB1c2FnZSkKQEAgLTQ2LDExICs1NSw1MiBA
QCB2b2lkIEJ1ZmZlcjo6YnVmZmVyRGF0YShjb25zdCB2b2lkICpkYXRhCiAKICAgICBtU2l6ZSA9
IHNpemU7CiAgICAgbVVzYWdlID0gdXNhZ2U7CisKKyAgICBpbnZhbGlkYXRlU3RhdGljRGF0YSgp
OworCisgICAgaWYgKHVzYWdlID09IEdMX1NUQVRJQ19EUkFXKQorICAgIHsKKyAgICAgICAgbVZl
cnRleEJ1ZmZlciA9IG5ldyBTdGF0aWNWZXJ0ZXhCdWZmZXIoZ2V0RGV2aWNlKCkpOworICAgICAg
ICBtSW5kZXhCdWZmZXIgPSBuZXcgU3RhdGljSW5kZXhCdWZmZXIoZ2V0RGV2aWNlKCkpOworICAg
IH0KIH0KIAogdm9pZCBCdWZmZXI6OmJ1ZmZlclN1YkRhdGEoY29uc3Qgdm9pZCAqZGF0YSwgR0xz
aXplaXB0ciBzaXplLCBHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgbWVtY3B5KG1Db250ZW50cyAr
IG9mZnNldCwgZGF0YSwgc2l6ZSk7CisKKyAgICBpZiAoKG1WZXJ0ZXhCdWZmZXIgJiYgbVZlcnRl
eEJ1ZmZlci0+c2l6ZSgpICE9IDApIHx8IChtSW5kZXhCdWZmZXIgJiYgbUluZGV4QnVmZmVyLT5z
aXplKCkgIT0gMCkpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlU3RhdGljRGF0YSgpOworCisg
ICAgICAgIGlmIChtVXNhZ2UgPT0gR0xfU1RBVElDX0RSQVcpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIElmIGFwcGxpY2F0aW9ucyB1cGRhdGUgdGhlIGJ1ZmZlciBkYXRhIGFmdGVyIGl0IGhh
cyBhbHJlYWR5IGJlZW4gdXNlZCBpbiBhIGRyYXcgY2FsbCwKKyAgICAgICAgICAgIC8vIGl0IG1v
c3QgbGlrZWx5IGlzbid0IHVzZWQgYXMgYSBzdGF0aWMgYnVmZmVyIHNvIHdlIHNob3VsZCBmYWxs
IGJhY2sgdG8gc3RyZWFtaW5nIHVzYWdlCisgICAgICAgICAgICAvLyBmb3IgYmVzdCBwZXJmb3Jt
YW5jZS4gU28gaWdub3JlIHRoZSB1c2FnZSBoaW50IGFuZCBkb24ndCBjcmVhdGUgbmV3IHN0YXRp
YyBidWZmZXJzLgorICAgICAgICAvLyAgbVZlcnRleEJ1ZmZlciA9IG5ldyBTdGF0aWNWZXJ0ZXhC
dWZmZXIoZ2V0RGV2aWNlKCkpOworICAgICAgICAvLyAgbUluZGV4QnVmZmVyID0gbmV3IFN0YXRp
Y0luZGV4QnVmZmVyKGdldERldmljZSgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworU3RhdGlj
VmVydGV4QnVmZmVyICpCdWZmZXI6OmdldFZlcnRleEJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1W
ZXJ0ZXhCdWZmZXI7Cit9CisKK1N0YXRpY0luZGV4QnVmZmVyICpCdWZmZXI6OmdldEluZGV4QnVm
ZmVyKCkKK3sKKyAgICByZXR1cm4gbUluZGV4QnVmZmVyOworfQorCit2b2lkIEJ1ZmZlcjo6aW52
YWxpZGF0ZVN0YXRpY0RhdGEoKQoreworICAgIGRlbGV0ZSBtVmVydGV4QnVmZmVyOworICAgIG1W
ZXJ0ZXhCdWZmZXIgPSBOVUxMOworCisgICAgZGVsZXRlIG1JbmRleEJ1ZmZlcjsKKyAgICBtSW5k
ZXhCdWZmZXIgPSBOVUxMOwogfQogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MjIsNiArMjIsOCBAQAogCiBuYW1lc3BhY2UgZ2wKIHsKK2NsYXNzIFN0YXRpY1ZlcnRleEJ1ZmZl
cjsKK2NsYXNzIFN0YXRpY0luZGV4QnVmZmVyOwogCiBjbGFzcyBCdWZmZXIgOiBwdWJsaWMgUmVm
Q291bnRPYmplY3QKIHsKQEAgLTM3LDEyICszOSwxOSBAQCBjbGFzcyBCdWZmZXIgOiBwdWJsaWMg
UmVmQ291bnRPYmplY3QKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1TaXplOyB9
CiAgICAgR0xlbnVtIHVzYWdlKCkgY29uc3QgeyByZXR1cm4gbVVzYWdlOyB9CiAKKyAgICBTdGF0
aWNWZXJ0ZXhCdWZmZXIgKmdldFZlcnRleEJ1ZmZlcigpOworICAgIFN0YXRpY0luZGV4QnVmZmVy
ICpnZXRJbmRleEJ1ZmZlcigpOworICAgIHZvaWQgaW52YWxpZGF0ZVN0YXRpY0RhdGEoKTsKKwog
ICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihCdWZmZXIpOwogCiAgICAg
R0x1Ynl0ZSAqbUNvbnRlbnRzOwogICAgIHNpemVfdCBtU2l6ZTsKICAgICBHTGVudW0gbVVzYWdl
OworCisgICAgU3RhdGljVmVydGV4QnVmZmVyICptVmVydGV4QnVmZmVyOworICAgIFN0YXRpY0lu
ZGV4QnVmZmVyICptSW5kZXhCdWZmZXI7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5jcHAJKHJldmlzaW9uIDc1ODAx
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTksMTUgKzE5LDE0IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL0Js
aXQuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVzb3VyY2VNYW5hZ2VyLmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL0J1ZmZlci5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1
ZGUgImxpYkdMRVN2Mi9GcmFtZUJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFt
LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1JlbmRlckJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdM
RVN2Mi9TaGFkZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgotI2luY2x1ZGUg
ImxpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL2dlb21l
dHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L0lu
ZGV4RGF0YU1hbmFnZXIuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmgiCiAK
ICN1bmRlZiBuZWFyCiAjdW5kZWYgZmFyCkBAIC04Myw2ICs4Miw3IEBAIENvbnRleHQ6OkNvbnRl
eHQoY29uc3QgZWdsOjpDb25maWcgKmNvbmYKICAgICBtU3RhdGUuc2Npc3NvclRlc3QgPSBmYWxz
ZTsKICAgICBtU3RhdGUuZGl0aGVyID0gdHJ1ZTsKICAgICBtU3RhdGUuZ2VuZXJhdGVNaXBtYXBI
aW50ID0gR0xfRE9OVF9DQVJFOworICAgIG1TdGF0ZS5mcmFnbWVudFNoYWRlckRlcml2YXRpdmVI
aW50ID0gR0xfRE9OVF9DQVJFOwogCiAgICAgbVN0YXRlLmxpbmVXaWR0aCA9IDEuMGY7CiAKQEAg
LTEyMCwxMSArMTIwLDggQEAgQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAqY29u
ZgogICAgIC8vIEluIG9yZGVyIHRoYXQgYWNjZXNzIHRvIHRoZXNlIGluaXRpYWwgdGV4dHVyZXMg
bm90IGJlIGxvc3QsIHRoZXkgYXJlIHRyZWF0ZWQgYXMgdGV4dHVyZQogICAgIC8vIG9iamVjdHMg
YWxsIG9mIHdob3NlIG5hbWVzIGFyZSAwLgogCi0gICAgbVRleHR1cmUyRFplcm8gPSBuZXcgVGV4
dHVyZTJEKDApOwotICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8gPSBuZXcgVGV4dHVyZUN1YmVNYXAo
MCk7Ci0KLSAgICBtQ29sb3JidWZmZXJaZXJvID0gTlVMTDsKLSAgICBtRGVwdGhTdGVuY2lsYnVm
ZmVyWmVybyA9IE5VTEw7CisgICAgbVRleHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQoMCkp
OworICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8uc2V0KG5ldyBUZXh0dXJlQ3ViZU1hcCgwKSk7CiAK
ICAgICBtU3RhdGUuYWN0aXZlU2FtcGxlciA9IDA7CiAgICAgYmluZEFycmF5QnVmZmVyKDApOwpA
QCAtMTM1LDE3ICsxMzIsMTEgQEAgQ29udGV4dDo6Q29udGV4dChjb25zdCBlZ2w6OkNvbmZpZyAq
Y29uZgogICAgIGJpbmREcmF3RnJhbWVidWZmZXIoMCk7CiAgICAgYmluZFJlbmRlcmJ1ZmZlcigw
KTsKIAotICAgIGZvciAoaW50IHR5cGUgPSAwOyB0eXBlIDwgU0FNUExFUl9UWVBFX0NPVU5UOyB0
eXBlKyspCi0gICAgewotICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdID0gTlVMTDsK
LSAgICB9Ci0KICAgICBtU3RhdGUuY3VycmVudFByb2dyYW0gPSAwOwogCiAgICAgbVN0YXRlLnBh
Y2tBbGlnbm1lbnQgPSA0OwogICAgIG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSA0OwogCi0gICAg
bUJ1ZmZlckJhY2tFbmQgPSBOVUxMOwogICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IE5VTEw7CiAg
ICAgbUluZGV4RGF0YU1hbmFnZXIgPSBOVUxMOwogICAgIG1CbGl0ID0gTlVMTDsKQEAgLTE1OCw2
ICsxNDksOCBAQCBDb250ZXh0OjpDb250ZXh0KGNvbnN0IGVnbDo6Q29uZmlnICpjb25mCiAKICAg
ICBtSGFzQmVlbkN1cnJlbnQgPSBmYWxzZTsKIAorICAgIG1TdXBwb3J0c0NvbXByZXNzZWRUZXh0
dXJlcyA9IGZhbHNlOworICAgIG1TdXBwb3J0c0V2ZW50UXVlcmllcyA9IGZhbHNlOwogICAgIG1N
YXhTdXBwb3J0ZWRTYW1wbGVzID0gMDsKICAgICBtTWFza2VkQ2xlYXJTYXZlZFN0YXRlID0gTlVM
TDsKICAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwpAQCAtMTgwLDYgKzE3MywxMSBAQCBDb250ZXh0
Ojp+Q29udGV4dCgpCiAgICAgICAgIGRlbGV0ZUZyYW1lYnVmZmVyKG1GcmFtZWJ1ZmZlck1hcC5i
ZWdpbigpLT5maXJzdCk7CiAgICAgfQogCisgICAgd2hpbGUgKCFtRmVuY2VNYXAuZW1wdHkoKSkK
KyAgICB7CisgICAgICAgIGRlbGV0ZUZlbmNlKG1GZW5jZU1hcC5iZWdpbigpLT5maXJzdCk7Cisg
ICAgfQorCiAgICAgd2hpbGUgKCFtTXVsdGlTYW1wbGVTdXBwb3J0LmVtcHR5KCkpCiAgICAgewog
ICAgICAgICBkZWxldGUgW10gbU11bHRpU2FtcGxlU3VwcG9ydC5iZWdpbigpLT5zZWNvbmQ7CkBA
IC0xOTYsNyArMTk0LDcgQEAgQ29udGV4dDo6fkNvbnRleHQoKQogCiAgICAgZm9yIChpbnQgdHlw
ZSA9IDA7IHR5cGUgPCBTQU1QTEVSX1RZUEVfQ09VTlQ7IHR5cGUrKykKICAgICB7Ci0gICAgICAg
IGRlbGV0ZSBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdOworICAgICAgICBtSW5jb21wbGV0ZVRl
eHR1cmVzW3R5cGVdLnNldChOVUxMKTsKICAgICB9CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQpAQCAtMjA2LDE0ICsyMDQsMTEgQEAgQ29udGV4dDo6
fkNvbnRleHQoKQogCiAgICAgbVN0YXRlLmFycmF5QnVmZmVyLnNldChOVUxMKTsKICAgICBtU3Rh
dGUuZWxlbWVudEFycmF5QnVmZmVyLnNldChOVUxMKTsKLSAgICBtU3RhdGUudGV4dHVyZTJELnNl
dChOVUxMKTsKLSAgICBtU3RhdGUudGV4dHVyZUN1YmVNYXAuc2V0KE5VTEwpOwogICAgIG1TdGF0
ZS5yZW5kZXJidWZmZXIuc2V0KE5VTEwpOwogCi0gICAgZGVsZXRlIG1UZXh0dXJlMkRaZXJvOwot
ICAgIGRlbGV0ZSBtVGV4dHVyZUN1YmVNYXBaZXJvOworICAgIG1UZXh0dXJlMkRaZXJvLnNldChO
VUxMKTsKKyAgICBtVGV4dHVyZUN1YmVNYXBaZXJvLnNldChOVUxMKTsKIAotICAgIGRlbGV0ZSBt
QnVmZmVyQmFja0VuZDsKICAgICBkZWxldGUgbVZlcnRleERhdGFNYW5hZ2VyOwogICAgIGRlbGV0
ZSBtSW5kZXhEYXRhTWFuYWdlcjsKICAgICBkZWxldGUgbUJsaXQ7CkBAIC0yMzQsMTEgKzIyOSwy
MCBAQCB2b2lkIENvbnRleHQ6Om1ha2VDdXJyZW50KGVnbDo6RGlzcGxheSAqCiAgICAgewogICAg
ICAgICBtRGV2aWNlQ2FwcyA9IGRpc3BsYXktPmdldERldmljZUNhcHMoKTsKIAotICAgICAgICBt
QnVmZmVyQmFja0VuZCA9IG5ldyBEeDlCYWNrRW5kKHRoaXMsIGRldmljZSk7Ci0gICAgICAgIG1W
ZXJ0ZXhEYXRhTWFuYWdlciA9IG5ldyBWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzLCBtQnVmZmVyQmFj
a0VuZCk7Ci0gICAgICAgIG1JbmRleERhdGFNYW5hZ2VyID0gbmV3IEluZGV4RGF0YU1hbmFnZXIo
dGhpcywgbUJ1ZmZlckJhY2tFbmQpOworICAgICAgICBtVmVydGV4RGF0YU1hbmFnZXIgPSBuZXcg
VmVydGV4RGF0YU1hbmFnZXIodGhpcywgZGV2aWNlKTsKKyAgICAgICAgbUluZGV4RGF0YU1hbmFn
ZXIgPSBuZXcgSW5kZXhEYXRhTWFuYWdlcih0aGlzLCBkZXZpY2UpOwogICAgICAgICBtQmxpdCA9
IG5ldyBCbGl0KHRoaXMpOwogCisgICAgICAgIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA9IG1EZXZp
Y2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA9PSBEM0RQU19WRVJTSU9OKDMsIDApOworCisgICAg
ICAgIG1NYXhUZXh0dXJlRGltZW5zaW9uID0gc3RkOjptaW4oc3RkOjptaW4oKGludCltRGV2aWNl
Q2Fwcy5NYXhUZXh0dXJlV2lkdGgsIChpbnQpbURldmljZUNhcHMuTWF4VGV4dHVyZUhlaWdodCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClnbDo6SU1QTEVN
RU5UQVRJT05fTUFYX1RFWFRVUkVfU0laRSk7CisgICAgICAgIG1NYXhDdWJlVGV4dHVyZURpbWVu
c2lvbiA9IHN0ZDo6bWluKG1NYXhUZXh0dXJlRGltZW5zaW9uLCAoaW50KWdsOjpJTVBMRU1FTlRB
VElPTl9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgbU1heFJlbmRlcmJ1ZmZl
ckRpbWVuc2lvbiA9IG1NYXhUZXh0dXJlRGltZW5zaW9uOworICAgICAgICBtTWF4VGV4dHVyZUxl
dmVsID0gbG9nMihtTWF4VGV4dHVyZURpbWVuc2lvbikgKyAxOworICAgICAgICBUUkFDRSgiTWF4
VGV4dHVyZURpbWVuc2lvbj0lZCwgTWF4Q3ViZVRleHR1cmVEaW1lbnNpb249JWQsIE1heFJlbmRl
cmJ1ZmZlckRpbWVuc2lvbj0lZCwgTWF4VGV4dHVyZUxldmVsPSVkIiwKKyAgICAgICAgICAgICAg
bU1heFRleHR1cmVEaW1lbnNpb24sIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbiwgbU1heFJlbmRl
cmJ1ZmZlckRpbWVuc2lvbiwgbU1heFRleHR1cmVMZXZlbCk7CisKICAgICAgICAgY29uc3QgRDNE
Rk9STUFUIHJlbmRlckJ1ZmZlckZvcm1hdHNbXSA9CiAgICAgICAgIHsKICAgICAgICAgICAgIEQz
REZNVF9BOFI4RzhCOCwKQEAgLTI2NSw3ICsyNjksMTQgQEAgdm9pZCBDb250ZXh0OjptYWtlQ3Vy
cmVudChlZ2w6OkRpc3BsYXkgKgogCiAgICAgICAgIG1NYXhTdXBwb3J0ZWRTYW1wbGVzID0gbWF4
OwogCisgICAgICAgIG1TdXBwb3J0c0V2ZW50UXVlcmllcyA9IGRpc3BsYXktPmdldEV2ZW50UXVl
cnlTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcyA9IGRpc3Bs
YXktPmdldENvbXByZXNzZWRUZXh0dXJlU3VwcG9ydCgpOworICAgICAgICBtU3VwcG9ydHNGbG9h
dFRleHR1cmVzID0gZGlzcGxheS0+Z2V0RmxvYXRUZXh0dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxv
YXRMaW5lYXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdFJlbmRlcmFibGVUZXh0dXJlcyk7CisgICAg
ICAgIG1TdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzID0gZGlzcGxheS0+Z2V0SGFsZkZsb2F0VGV4
dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0hhbGZGbG9hdExpbmVhckZpbHRlciwgJm1TdXBwb3J0c0hh
bGZGbG9hdFJlbmRlcmFibGVUZXh0dXJlcyk7CisgICAgICAgIG1TdXBwb3J0c0x1bWluYW5jZVRl
eHR1cmVzID0gZGlzcGxheS0+Z2V0THVtaW5hbmNlVGV4dHVyZVN1cHBvcnQoKTsKKyAgICAgICAg
bVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyA9IGRpc3BsYXktPmdldEx1bWluYW5jZUFs
cGhhVGV4dHVyZVN1cHBvcnQoKTsKKworICAgICAgICBtU3VwcG9ydHMzMmJpdEluZGljZXMgPSBt
RGV2aWNlQ2Fwcy5NYXhWZXJ0ZXhJbmRleCA+PSAoMSA8PCAxNik7CiAKICAgICAgICAgaW5pdEV4
dGVuc2lvblN0cmluZygpOwogCkBAIC0yOTIsMTUgKzMwMywxNiBAQCB2b2lkIENvbnRleHQ6Om1h
a2VDdXJyZW50KGVnbDo6RGlzcGxheSAqCiAKICAgICBzZXRGcmFtZWJ1ZmZlclplcm8oZnJhbWVi
dWZmZXJaZXJvKTsKIAotICAgIGRlZmF1bHRSZW5kZXJUYXJnZXQtPlJlbGVhc2UoKTsKKyAgICBp
ZiAoZGVmYXVsdFJlbmRlclRhcmdldCkKKyAgICB7CisgICAgICAgIGRlZmF1bHRSZW5kZXJUYXJn
ZXQtPlJlbGVhc2UoKTsKKyAgICB9CiAKICAgICBpZiAoZGVwdGhTdGVuY2lsKQogICAgIHsKICAg
ICAgICAgZGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7CiAgICAgfQogICAgIAotICAgIG1TdXBwb3J0
c1NoYWRlck1vZGVsMyA9IG1EZXZpY2VDYXBzLlBpeGVsU2hhZGVyVmVyc2lvbiA9PSBEM0RQU19W
RVJTSU9OKDMsIDApOwotCiAgICAgbWFya0FsbFN0YXRlRGlydHkoKTsKIH0KIApAQCAtMzA5LDYg
KzMyMSw4IEBAIHZvaWQgQ29udGV4dDo6bWFya0FsbFN0YXRlRGlydHkoKQogewogICAgIG1BcHBs
aWVkUmVuZGVyVGFyZ2V0U2VyaWFsID0gMDsKICAgICBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFs
ID0gMDsKKyAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSAwOworICAgIG1EZXB0aFN0
ZW5jaWxJbml0aWFsaXplZCA9IGZhbHNlOwogICAgIG1BcHBsaWVkUHJvZ3JhbSA9IDA7CiAKICAg
ICBtQ2xlYXJTdGF0ZURpcnR5ID0gdHJ1ZTsKQEAgLTMyMiwxMSArMzM2LDYgQEAgdm9pZCBDb250
ZXh0OjptYXJrQWxsU3RhdGVEaXJ0eSgpCiAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVlOwog
ICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gdHJ1ZTsKICAgICBtRnJvbnRGYWNlRGlydHkgPSB0cnVl
OwotCi0gICAgaWYgKG1CdWZmZXJCYWNrRW5kICE9IE5VTEwpCi0gICAgewotICAgICAgICBtQnVm
ZmVyQmFja0VuZC0+aW52YWxpZGF0ZSgpOwotICAgIH0KIH0KIAogdm9pZCBDb250ZXh0OjpzZXRD
bGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFscGhh
KQpAQCAtNjUwLDYgKzY1OSwxNCBAQCB2b2lkIENvbnRleHQ6OnNldEdlbmVyYXRlTWlwbWFwSGlu
dChHTGVuCiAgICAgbVN0YXRlLmdlbmVyYXRlTWlwbWFwSGludCA9IGhpbnQ7CiB9CiAKK3ZvaWQg
Q29udGV4dDo6c2V0RnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludChHTGVudW0gaGludCkKK3sK
KyAgICBtU3RhdGUuZnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludCA9IGhpbnQ7CisgICAgLy8g
VE9ETzogUHJvcGFnYXRlIHRoZSBoaW50IHRvIHNoYWRlciB0cmFuc2xhdG9yIHNvIHdlIGNhbiB3
cml0ZQorICAgIC8vIGRkeCwgZGR4X2NvYXJzZSwgb3IgZGR4X2ZpbmUgZGVwZW5kaW5nIG9uIHRo
ZSBoaW50LgorICAgIC8vIElnbm9yZSBmb3Igbm93LiBJdCBpcyB2YWxpZCBmb3IgaW1wbGVtZW50
YXRpb25zIHRvIGlnbm9yZSBoaW50LgorfQorCiB2b2lkIENvbnRleHQ6OnNldFZpZXdwb3J0UGFy
YW1zKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQogewog
ICAgIG1TdGF0ZS52aWV3cG9ydFggPSB4OwpAQCAtNzE4LDEyICs3MzUsMTIgQEAgR0x1aW50IENv
bnRleHQ6OmdldEFycmF5QnVmZmVySGFuZGxlKCkgYwogICAgIHJldHVybiBtU3RhdGUuYXJyYXlC
dWZmZXIuaWQoKTsKIH0KIAotdm9pZCBDb250ZXh0OjpzZXRWZXJ0ZXhBdHRyaWJFbmFibGVkKHVu
c2lnbmVkIGludCBhdHRyaWJOdW0sIGJvb2wgZW5hYmxlZCkKK3ZvaWQgQ29udGV4dDo6c2V0RW5h
YmxlVmVydGV4QXR0cmliQXJyYXkodW5zaWduZWQgaW50IGF0dHJpYk51bSwgYm9vbCBlbmFibGVk
KQogewotICAgIG1TdGF0ZS52ZXJ0ZXhBdHRyaWJ1dGVbYXR0cmliTnVtXS5tRW5hYmxlZCA9IGVu
YWJsZWQ7CisgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1BcnJheUVuYWJs
ZWQgPSBlbmFibGVkOwogfQogCi1jb25zdCBBdHRyaWJ1dGVTdGF0ZSAmQ29udGV4dDo6Z2V0VmVy
dGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSkKK2NvbnN0IFZlcnRleEF0dHJp
YnV0ZSAmQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51
bSkKIHsKICAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dOwogfQpA
QCAtNzQ0LDggKzc2MSw3IEBAIGNvbnN0IHZvaWQgKkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlBv
aW4KICAgICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVy
OwogfQogCi0vLyByZXR1cm5zIGVudGlyZSBzZXQgb2YgYXR0cmlidXRlcyBhcyBhIGJsb2NrCi1j
b25zdCBBdHRyaWJ1dGVTdGF0ZSAqQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliQmxvY2soKQorY29u
c3QgVmVydGV4QXR0cmlidXRlQXJyYXkgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYnV0ZXMoKQog
ewogICAgIHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlOwogfQpAQCAtODEwLDYgKzgyNiwy
MCBAQCBHTHVpbnQgQ29udGV4dDo6Y3JlYXRlRnJhbWVidWZmZXIoKQogICAgIHJldHVybiBoYW5k
bGU7CiB9CiAKK0dMdWludCBDb250ZXh0OjpjcmVhdGVGZW5jZSgpCit7CisgICAgdW5zaWduZWQg
aW50IGhhbmRsZSA9IDA7CisKKyAgICB3aGlsZSAobUZlbmNlTWFwLmZpbmQoaGFuZGxlKSAhPSBt
RmVuY2VNYXAuZW5kKCkpCisgICAgeworICAgICAgICBoYW5kbGUrKzsKKyAgICB9CisKKyAgICBt
RmVuY2VNYXBbaGFuZGxlXSA9IG5ldyBGZW5jZTsKKworICAgIHJldHVybiBoYW5kbGU7Cit9CisK
IHZvaWQgQ29udGV4dDo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIpCiB7CiAgICAgaWYgKG1S
ZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZlcihidWZmZXIpKQpAQCAtODYzLDYgKzg5MywxNyBAQCB2
b2lkIENvbnRleHQ6OmRlbGV0ZUZyYW1lYnVmZmVyKEdMdWludCBmCiAgICAgfQogfQogCit2b2lk
IENvbnRleHQ6OmRlbGV0ZUZlbmNlKEdMdWludCBmZW5jZSkKK3sKKyAgICBGZW5jZU1hcDo6aXRl
cmF0b3IgZmVuY2VPYmplY3QgPSBtRmVuY2VNYXAuZmluZChmZW5jZSk7CisKKyAgICBpZiAoZmVu
Y2VPYmplY3QgIT0gbUZlbmNlTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlIGZlbmNl
T2JqZWN0LT5zZWNvbmQ7CisgICAgICAgIG1GZW5jZU1hcC5lcmFzZShmZW5jZU9iamVjdCk7Cisg
ICAgfQorfQorCiBCdWZmZXIgKkNvbnRleHQ6OmdldEJ1ZmZlcihHTHVpbnQgaGFuZGxlKQogewog
ICAgIHJldHVybiBtUmVzb3VyY2VNYW5hZ2VyLT5nZXRCdWZmZXIoaGFuZGxlKTsKQEAgLTkxNiwx
OCArOTU3LDE0IEBAIHZvaWQgQ29udGV4dDo6YmluZFRleHR1cmUyRChHTHVpbnQgdGV4dHUKIHsK
ICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUsIFNB
TVBMRVJfMkQpOwogCi0gICAgbVN0YXRlLnRleHR1cmUyRC5zZXQoZ2V0VGV4dHVyZSh0ZXh0dXJl
KSk7Ci0KLSAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl8yRF1bbVN0YXRlLmFjdGl2
ZVNhbXBsZXJdLnNldChtU3RhdGUudGV4dHVyZTJELmdldCgpKTsKKyAgICBtU3RhdGUuc2FtcGxl
clRleHR1cmVbU0FNUExFUl8yRF1bbVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChnZXRUZXh0dXJl
KHRleHR1cmUpKTsKIH0KIAogdm9pZCBDb250ZXh0OjpiaW5kVGV4dHVyZUN1YmVNYXAoR0x1aW50
IHRleHR1cmUpCiB7CiAgICAgbVJlc291cmNlTWFuYWdlci0+Y2hlY2tUZXh0dXJlQWxsb2NhdGlv
bih0ZXh0dXJlLCBTQU1QTEVSX0NVQkUpOwogCi0gICAgbVN0YXRlLnRleHR1cmVDdWJlTWFwLnNl
dChnZXRUZXh0dXJlKHRleHR1cmUpKTsKLQotICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtTQU1Q
TEVSX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1wbGVyXS5zZXQobVN0YXRlLnRleHR1cmVDdWJlTWFw
LmdldCgpKTsKKyAgICBtU3RhdGUuc2FtcGxlclRleHR1cmVbU0FNUExFUl9DVUJFXVttU3RhdGUu
YWN0aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVyZSkpOwogfQogCiB2b2lkIENvbnRl
eHQ6OmJpbmRSZWFkRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQpAQCAtMTAwNSw2ICsx
MDQyLDIwIEBAIEZyYW1lYnVmZmVyICpDb250ZXh0OjpnZXRGcmFtZWJ1ZmZlcih1bnMKICAgICB9
CiB9CiAKK0ZlbmNlICpDb250ZXh0OjpnZXRGZW5jZSh1bnNpZ25lZCBpbnQgaGFuZGxlKQorewor
ICAgIEZlbmNlTWFwOjppdGVyYXRvciBmZW5jZSA9IG1GZW5jZU1hcC5maW5kKGhhbmRsZSk7CisK
KyAgICBpZiAoZmVuY2UgPT0gbUZlbmNlTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmZW5jZS0+c2Vj
b25kOworICAgIH0KK30KKwogQnVmZmVyICpDb250ZXh0OjpnZXRBcnJheUJ1ZmZlcigpCiB7CiAg
ICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsKQEAgLTEwMjIsMzUgKzEwNzMsMjUg
QEAgUHJvZ3JhbSAqQ29udGV4dDo6Z2V0Q3VycmVudFByb2dyYW0oKQogCiBUZXh0dXJlMkQgKkNv
bnRleHQ6OmdldFRleHR1cmUyRCgpCiB7Ci0gICAgaWYgKG1TdGF0ZS50ZXh0dXJlMkQuaWQoKSA9
PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGluaXRpYWwgdGV4
dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1UZXh0dXJl
MkRaZXJvOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlMkQqPihtU3Rh
dGUudGV4dHVyZTJELmdldCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZTJEKj4o
Z2V0U2FtcGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFNBTVBMRVJfMkQpKTsKIH0K
IAogVGV4dHVyZUN1YmVNYXAgKkNvbnRleHQ6OmdldFRleHR1cmVDdWJlTWFwKCkKIHsKLSAgICBp
ZiAobVN0YXRlLnRleHR1cmVDdWJlTWFwLmlkKCkgPT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6IDAg
cmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtVGV4dHVyZUN1YmVNYXBaZXJvOwotICAgIH0KLQotICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUZXh0dXJlQ3ViZU1hcCo+KG1TdGF0ZS50ZXh0dXJlQ3ViZU1h
cC5nZXQoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHR1cmVDdWJlTWFwKj4oZ2V0U2Ft
cGxlclRleHR1cmUobVN0YXRlLmFjdGl2ZVNhbXBsZXIsIFNBTVBMRVJfQ1VCRSkpOwogfQogCiBU
ZXh0dXJlICpDb250ZXh0OjpnZXRTYW1wbGVyVGV4dHVyZSh1bnNpZ25lZCBpbnQgc2FtcGxlciwg
U2FtcGxlclR5cGUgdHlwZSkKIHsKICAgICBHTHVpbnQgdGV4aWQgPSBtU3RhdGUuc2FtcGxlclRl
eHR1cmVbdHlwZV1bc2FtcGxlcl0uaWQoKTsKIAotICAgIGlmICh0ZXhpZCA9PSAwKQorICAgIGlm
ICh0ZXhpZCA9PSAwKSAgIC8vIFNwZWNpYWwgY2FzZTogMCByZWZlcnMgdG8gZGlmZmVyZW50IGlu
aXRpYWwgdGV4dHVyZXMgYmFzZWQgb24gdGhlIHRhcmdldAogICAgIHsKICAgICAgICAgc3dpdGNo
ICh0eXBlKQogICAgICAgICB7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKLSAg
ICAgICAgICBjYXNlIFNBTVBMRVJfMkQ6IHJldHVybiBtVGV4dHVyZTJEWmVybzsKLSAgICAgICAg
ICBjYXNlIFNBTVBMRVJfQ1VCRTogcmV0dXJuIG1UZXh0dXJlQ3ViZU1hcFplcm87CisgICAgICAg
ICAgY2FzZSBTQU1QTEVSXzJEOiByZXR1cm4gbVRleHR1cmUyRFplcm8uZ2V0KCk7CisgICAgICAg
ICAgY2FzZSBTQU1QTEVSX0NVQkU6IHJldHVybiBtVGV4dHVyZUN1YmVNYXBaZXJvLmdldCgpOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC0xMDcwLDE1ICsxMTExLDE1IEBAIGJvb2wgQ29udGV4dDo6
Z2V0Qm9vbGVhbnYoR0xlbnVtIHBuYW1lLCAKICAgICAgICAgcGFyYW1zWzJdID0gbVN0YXRlLmNv
bG9yTWFza0JsdWU7CiAgICAgICAgIHBhcmFtc1szXSA9IG1TdGF0ZS5jb2xvck1hc2tBbHBoYTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0NVTExfRkFDRTogICAgICAgICAgICAgICAg
KnBhcmFtcyA9IG1TdGF0ZS5jdWxsRmFjZTsKLSAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRf
RklMTDogICAgICAqcGFyYW1zID0gbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsOwotICAgICAgY2Fz
ZSBHTF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlQWxw
aGFUb0NvdmVyYWdlOwotICAgICAgY2FzZSBHTF9TQU1QTEVfQ09WRVJBR0U6ICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuc2FtcGxlQ292ZXJhZ2U7Ci0gICAgICBjYXNlIEdMX1NDSVNTT1JfVEVT
VDogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zY2lzc29yVGVzdDsKLSAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9URVNUOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxUZXN0
OwotICAgICAgY2FzZSBHTF9ERVBUSF9URVNUOiAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3Rh
dGUuZGVwdGhUZXN0OwotICAgICAgY2FzZSBHTF9CTEVORDogICAgICAgICAgICAgICAgICAgICpw
YXJhbXMgPSBtU3RhdGUuYmxlbmQ7Ci0gICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kaXRoZXI7CisgICAgICBjYXNlIEdMX0NVTExfRkFDRTog
ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5jdWxsRmFjZTsgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgIGNhc2UgR0xfUE9MWUdPTl9PRkZTRVRfRklMTDogICAgICAqcGFyYW1z
ID0gbVN0YXRlLnBvbHlnb25PZmZzZXRGaWxsOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBH
TF9TQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0U6ICpwYXJhbXMgPSBtU3RhdGUuc2FtcGxlQWxwaGFU
b0NvdmVyYWdlOyAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAg
ICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZTsgICAgICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LnNjaXNzb3JUZXN0OyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9TVEVOQ0lM
X1RFU1Q6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFRlc3Q7ICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgKnBh
cmFtcyA9IG1TdGF0ZS5kZXB0aFRlc3Q7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfQkxFTkQ6ICAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmJsZW5kOyAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9ESVRIRVI6ICAgICAgICAg
ICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuZGl0aGVyOyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtMTE0
MSwyNCArMTE4MiwyNSBAQCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBwbmFtZSwg
CiAgICAgewogICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6ICAgICAgICAgICAgICAg
KnBhcmFtcyA9IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7ICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOiAgICAgICAqcGFyYW1zID0g
Z2w6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOyAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfTUFYX1ZBUllJTkdfVkVDVE9SUzogICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZB
UllJTkdfVkVDVE9SUzsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkFS
WUlOR19WRUNUT1JTOiAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1WYXJ5aW5nVmVj
dG9ycygpOyAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTOiAqcGFyYW1zID0gZ2w6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdF
X1VOSVRTOyBicmVhazsKICAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTOiAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOyAgIGJy
ZWFrOwogICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAgICAgICAgKnBh
cmFtcyA9IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAqcGFyYW1zID0gZ2w6
Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM7ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
TUFYX1JFTkRFUkJVRkZFUl9TSVpFOiAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1JFTkRF
UkJVRkZFUl9TSVpFOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRlJBR01F
TlRfVU5JRk9STV9WRUNUT1JTOiAgICAgKnBhcmFtcyA9IGdldE1heGltdW1GcmFnbWVudFVuaWZv
cm1WZWN0b3JzKCk7ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0la
RTogICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigp
OyAgICBicmVhazsKICAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAg
ICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgLyogbm8gc2hhZGVy
IGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAgICAgYnJlYWs7CiAgICAgICBj
YXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfRUxF
TUVOVF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICpwYXJhbXMgPSBtU3RhdGUuZWxlbWVudEFy
cmF5QnVmZmVyLmlkKCk7ICAgICAgIGJyZWFrOwotICAgICAgLy9jYXNlIEdMX0ZSQU1FQlVGRkVS
X0JJTkRJTkc6ICAgICAgICAgICAgICAvLyBub3cgZXF1aXZhbGVudCB0byBHTF9EUkFXX0ZSQU1F
QlVGRkVSX0JJTkRJTkdfQU5HTEUKLSAgICAgIGNhc2UgR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5E
SU5HX0FOR0xFOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdM
RTogICAgICpwYXJhbXMgPSBtU3RhdGUucmVhZEZyYW1lYnVmZmVyOyAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgLy9jYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgLy8g
bm93IGVxdWl2YWxlbnQgdG8gR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCisgICAg
ICBjYXNlIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAqcGFyYW1zID0gbVN0
YXRlLmRyYXdGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
UkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICpwYXJhbXMgPSBtU3RhdGUucmVhZEZy
YW1lYnVmZmVyOyAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9SRU5ERVJCVUZG
RVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQo
KTsgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBj
YXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlJB
R01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6ICpwYXJhbXMgPSBtU3RhdGUuZnJhZ21l
bnRTaGFkZXJEZXJpdmF0aXZlSGludDsgYnJlYWs7CiAgICAgICBjYXNlIEdMX0FDVElWRV9URVhU
VVJFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1wbGVyICsg
R0xfVEVYVFVSRTApOyBicmVhazsKICAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEZ1bmM7ICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9TVEVOQ0lMX1JFRjogICAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUmVmOyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0xMTgzLDggKzEyMjUsOCBAQCBib29sIENvbnRleHQ6OmdldEludGVnZXJ2KEdMZW51bSBw
bmFtZSwgCiAgICAgICBjYXNlIEdMX1NURU5DSUxfQkFDS19XUklURU1BU0s6ICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxCYWNrV3JpdGVtYXNrOyAgICAgICAgICBicmVhazsKICAg
ICAgIGNhc2UgR0xfU1RFTkNJTF9DTEVBUl9WQUxVRTogICAgICAgICAgICAgICpwYXJhbXMgPSBt
U3RhdGUuc3RlbmNpbENsZWFyVmFsdWU7ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBH
TF9TVUJQSVhFTF9CSVRTOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IDQ7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01BWF9URVhU
VVJFX1NJWkU6ICAgICAgICAgICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9URVhUVVJFX1NJWkU7
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xfTUFYX0NVQkVfTUFQX1RFWFRV
UkVfU0laRTogICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRTsg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOiAgICAgICAgICAg
ICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCk7ICAgICAgICAgYnJl
YWs7CisgICAgICBjYXNlIEdMX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkU6ICAgICAgICAqcGFy
YW1zID0gZ2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCk7ICAgICBicmVhazsKICAgICAg
IGNhc2UgR0xfTlVNX0NPTVBSRVNTRURfVEVYVFVSRV9GT1JNQVRTOiAgIAogICAgICAgICB7CiAg
ICAgICAgICAgICBpZiAoc3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZXMoKSkKQEAgLTEyNDYsNyAr
MTI4OCw3IEBAIGJvb2wgQ29udGV4dDo6Z2V0SW50ZWdlcnYoR0xlbnVtIHBuYW1lLCAKICAgICAg
IGNhc2UgR0xfSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6ICpwYXJhbXMgPSBnbDo6
SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ7IGJyZWFrOwogICAgICAgY2FzZSBHTF9N
QVhfVklFV1BPUlRfRElNUzoKICAgICAgICAgewotICAgICAgICAgICAgaW50IG1heERpbWVuc2lv
biA9IHN0ZDo6bWF4KChpbnQpZ2w6Ok1BWF9SRU5ERVJCVUZGRVJfU0laRSwgKGludClnbDo6TUFY
X1RFWFRVUkVfU0laRSk7CisgICAgICAgICAgICBpbnQgbWF4RGltZW5zaW9uID0gc3RkOjptYXgo
Z2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigpLCBnZXRNYXhpbXVtVGV4dHVyZURpbWVu
c2lvbigpKTsKICAgICAgICAgICAgIHBhcmFtc1swXSA9IG1heERpbWVuc2lvbjsKICAgICAgICAg
ICAgIHBhcmFtc1sxXSA9IG1heERpbWVuc2lvbjsKICAgICAgICAgfQpAQCAtMTM5Miw2ICsxNDM0
LDcgQEAgYm9vbCBDb250ZXh0OjpnZXRRdWVyeVBhcmFtZXRlckluZm8oR0xlbgogICAgICAgY2Fz
ZSBHTF9QQUNLX0FMSUdOTUVOVDoKICAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDoKICAg
ICAgIGNhc2UgR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAgICBjYXNlIEdMX0ZSQUdNRU5U
X1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOgogICAgICAgY2FzZSBHTF9SRURfQklUUzoKICAg
ICAgIGNhc2UgR0xfR1JFRU5fQklUUzoKICAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOgpAQCAtMTUz
NSw2ICsxNTc4LDEyIEBAIGJvb2wgQ29udGV4dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ24K
ICAgICB9CiAKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZm
ZXJPYmplY3QtPmdldFJlbmRlclRhcmdldCgpOworCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpCisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QKKyAg
ICB9CisKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVwdGhTdGVuY2lsID0gTlVMTDsKIAogICAg
IHVuc2lnbmVkIGludCByZW5kZXJUYXJnZXRTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0
UmVuZGVyVGFyZ2V0U2VyaWFsKCk7CkBAIC0xNTUwLDI2ICsxNTk5LDQzIEBAIGJvb2wgQ29udGV4
dDo6YXBwbHlSZW5kZXJUYXJnZXQoYm9vbCBpZ24KICAgICBpZiAoZnJhbWVidWZmZXJPYmplY3Qt
PmdldERlcHRoYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgewogICAgICAgICBkZXB0aFN0
ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0RGVwdGhTdGVu
Y2lsKCk7CisgICAgICAgIGlmICghZGVwdGhTdGVuY2lsKQorICAgICAgICB7CisgICAgICAgICAg
ICBFUlIoIkRlcHRoIHN0ZW5jaWwgcG9pbnRlciB1bmV4cGVjdGVkbHkgbnVsbC4iKTsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgZGVwdGhi
dWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXIoKS0+Z2V0U2Vy
aWFsKCk7CiAgICAgfQogICAgIGVsc2UgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2ls
YnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgewogICAgICAgICBkZXB0aFN0ZW5jaWwgPSBm
cmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3RlbmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsK
KyAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigi
RGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBzdGVuY2lsYnVmZmVy
U2VyaWFsID0gZnJhbWVidWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXIoKS0+Z2V0U2VyaWFs
KCk7CiAgICAgfQogCiAgICAgaWYgKGRlcHRoYnVmZmVyU2VyaWFsICE9IG1BcHBsaWVkRGVwdGhi
dWZmZXJTZXJpYWwgfHwKLSAgICAgICAgc3RlbmNpbGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZFN0
ZW5jaWxidWZmZXJTZXJpYWwpCisgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgIT0gbUFwcGxp
ZWRTdGVuY2lsYnVmZmVyU2VyaWFsIHx8CisgICAgICAgICFtRGVwdGhTdGVuY2lsSW5pdGlhbGl6
ZWQpCiAgICAgewogICAgICAgICBkZXZpY2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UoZGVwdGhT
dGVuY2lsKTsKICAgICAgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IGRlcHRoYnVmZmVy
U2VyaWFsOwogICAgICAgICBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgPSBzdGVuY2lsYnVm
ZmVyU2VyaWFsOworICAgICAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSB0cnVlOwogICAg
IH0KIAogICAgIEQzRFZJRVdQT1JUOSB2aWV3cG9ydDsKICAgICBEM0RTVVJGQUNFX0RFU0MgZGVz
YzsKICAgICByZW5kZXJUYXJnZXQtPkdldERlc2MoJmRlc2MpOwogCisgICAgZmxvYXQgek5lYXIg
PSBjbGFtcDAxKG1TdGF0ZS56TmVhcik7CisgICAgZmxvYXQgekZhciA9IGNsYW1wMDEobVN0YXRl
LnpGYXIpOworCiAgICAgaWYgKGlnbm9yZVZpZXdwb3J0KQogICAgIHsKICAgICAgICAgdmlld3Bv
cnQuWCA9IDA7CkBAIC0xNTg1LDggKzE2NTEsOCBAQCBib29sIENvbnRleHQ6OmFwcGx5UmVuZGVy
VGFyZ2V0KGJvb2wgaWduCiAgICAgICAgIHZpZXdwb3J0LlkgPSBzdGQ6Om1heChtU3RhdGUudmll
d3BvcnRZLCAwKTsKICAgICAgICAgdmlld3BvcnQuV2lkdGggPSBzdGQ6Om1pbihtU3RhdGUudmll
d3BvcnRXaWR0aCwgKGludClkZXNjLldpZHRoIC0gKGludCl2aWV3cG9ydC5YKTsKICAgICAgICAg
dmlld3BvcnQuSGVpZ2h0ID0gc3RkOjptaW4obVN0YXRlLnZpZXdwb3J0SGVpZ2h0LCAoaW50KWRl
c2MuSGVpZ2h0IC0gKGludCl2aWV3cG9ydC5ZKTsKLSAgICAgICAgdmlld3BvcnQuTWluWiA9IGNs
YW1wMDEobVN0YXRlLnpOZWFyKTsKLSAgICAgICAgdmlld3BvcnQuTWF4WiA9IGNsYW1wMDEobVN0
YXRlLnpGYXIpOworICAgICAgICB2aWV3cG9ydC5NaW5aID0gek5lYXI7CisgICAgICAgIHZpZXdw
b3J0Lk1heFogPSB6RmFyOwogICAgIH0KIAogICAgIGlmICh2aWV3cG9ydC5XaWR0aCA8PSAwIHx8
IHZpZXdwb3J0LkhlaWdodCA8PSAwKQpAQCAtMTYyMywyNyArMTY4OSwyMSBAQCBib29sIENvbnRl
eHQ6OmFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWduCiAKICAgICAgICAgR0xpbnQgaGFsZlBpeGVs
U2l6ZSA9IHByb2dyYW1PYmplY3QtPmdldER4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uKCk7CiAgICAg
ICAgIEdMZmxvYXQgeHlbMl0gPSB7MS4wZiAvIHZpZXdwb3J0LldpZHRoLCAxLjBmIC8gdmlld3Bv
cnQuSGVpZ2h0fTsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTJmdihoYWxmUGl4
ZWxTaXplLCAxLCAoR0xmbG9hdCopJnh5KTsKKyAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5p
Zm9ybTJmdihoYWxmUGl4ZWxTaXplLCAxLCB4eSk7CiAKLSAgICAgICAgR0xpbnQgd2luZG93ID0g
cHJvZ3JhbU9iamVjdC0+Z2V0RHhWaWV3cG9ydExvY2F0aW9uKCk7CisgICAgICAgIEdMaW50IHZp
ZXdwb3J0ID0gcHJvZ3JhbU9iamVjdC0+Z2V0RHhWaWV3cG9ydExvY2F0aW9uKCk7CiAgICAgICAg
IEdMZmxvYXQgd2h4eVs0XSA9IHttU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIG1TdGF0ZS52
aWV3cG9ydEhlaWdodCAvIDIuMGYsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQp
bVN0YXRlLnZpZXdwb3J0WCArIG1TdGF0ZS52aWV3cG9ydFdpZHRoIC8gMi4wZiwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChmbG9hdCltU3RhdGUudmlld3BvcnRZICsgbVN0YXRlLnZpZXdw
b3J0SGVpZ2h0IC8gMi4wZn07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm00ZnYo
d2luZG93LCAxLCAoR0xmbG9hdCopJndoeHkpOworICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRV
bmlmb3JtNGZ2KHZpZXdwb3J0LCAxLCB3aHh5KTsKIAogICAgICAgICBHTGludCBkZXB0aCA9IHBy
b2dyYW1PYmplY3QtPmdldER4RGVwdGhMb2NhdGlvbigpOwotICAgICAgICBHTGZsb2F0IGR6WzJd
ID0geyhtU3RhdGUuekZhciAtIG1TdGF0ZS56TmVhcikgLyAyLjBmLCAobVN0YXRlLnpOZWFyICsg
bVN0YXRlLnpGYXIpIC8gMi4wZn07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0y
ZnYoZGVwdGgsIDEsIChHTGZsb2F0KikmZHopOworICAgICAgICBHTGZsb2F0IGR6WzJdID0geyh6
RmFyIC0gek5lYXIpIC8gMi4wZiwgKHpOZWFyICsgekZhcikgLyAyLjBmfTsKKyAgICAgICAgcHJv
Z3JhbU9iamVjdC0+c2V0VW5pZm9ybTJmdihkZXB0aCwgMSwgZHopOwogCi0gICAgICAgIEdMaW50
IG5lYXIgPSBwcm9ncmFtT2JqZWN0LT5nZXREZXB0aFJhbmdlTmVhckxvY2F0aW9uKCk7Ci0gICAg
ICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0xZnYobmVhciwgMSwgJm1TdGF0ZS56TmVhcik7
Ci0KLSAgICAgICAgR0xpbnQgZmFyID0gcHJvZ3JhbU9iamVjdC0+Z2V0RGVwdGhSYW5nZUZhckxv
Y2F0aW9uKCk7Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0xZnYoZmFyLCAxLCAm
bVN0YXRlLnpGYXIpOwotCi0gICAgICAgIEdMaW50IGRpZmYgPSBwcm9ncmFtT2JqZWN0LT5nZXRE
ZXB0aFJhbmdlRGlmZkxvY2F0aW9uKCk7Ci0gICAgICAgIEdMZmxvYXQgekRpZmYgPSBtU3RhdGUu
ekZhciAtIG1TdGF0ZS56TmVhcjsKLSAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5pZm9ybTFm
dihkaWZmLCAxLCAmekRpZmYpOworICAgICAgICBHTGludCBkZXB0aFJhbmdlID0gcHJvZ3JhbU9i
amVjdC0+Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKTsKKyAgICAgICAgR0xmbG9hdCBuZWFyRmFy
RGlmZlszXSA9IHt6TmVhciwgekZhciwgekZhciAtIHpOZWFyfTsKKyAgICAgICAgcHJvZ3JhbU9i
amVjdC0+c2V0VW5pZm9ybTNmdihkZXB0aFJhbmdlLCAxLCBuZWFyRmFyRGlmZik7CiAgICAgfQog
CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xODMwLDM5ICsxODkwLDQ2IEBAIHZvaWQgQ29udGV4dDo6
YXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUKICAgICAgICAgbVBvbHlnb25PZmZzZXRTdGF0ZURp
cnR5ID0gZmFsc2U7CiAgICAgfQogCi0gICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5pc011bHRp
c2FtcGxlKCkgJiYgbVNhbXBsZVN0YXRlRGlydHkpCisgICAgaWYgKG1TYW1wbGVTdGF0ZURpcnR5
KQogICAgIHsKLSAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2UpCisgICAg
ICAgIGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+aXNNdWx0aXNhbXBsZSgpKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBGSVhNRSgiU2FtcGxlIGFscGhhIHRvIGNvdmVyYWdlIGlzIHVuaW1wbGVtZW50
ZWQuIik7Ci0gICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQWxwaGFUb0Nv
dmVyYWdlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEZJWE1FKCJTYW1wbGUgYWxw
aGEgdG8gY292ZXJhZ2UgaXMgdW5pbXBsZW1lbnRlZC4iKTsKKyAgICAgICAgICAgIH0KIAotICAg
ICAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlKQotICAgICAgICB7CiAgICAgICAgICAgICBk
ZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFQU5USUFMSUFTLCBUUlVFKTsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGludCBtYXNrID0gMDsKLSAgICAgICAgICAgIGlmIChtU3Rh
dGUuc2FtcGxlQ292ZXJhZ2VWYWx1ZSAhPSAwKQorICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1w
bGVDb3ZlcmFnZSkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbG9hdCB0aHJlc2hv
bGQgPSAwLjVmOwotCi0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcmFtZWJ1
ZmZlck9iamVjdC0+Z2V0U2FtcGxlcygpOyArK2kpCisgICAgICAgICAgICAgICAgdW5zaWduZWQg
aW50IG1hc2sgPSAwOworICAgICAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VW
YWx1ZSAhPSAwKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbWFzayA8
PD0gMTsKKyAgICAgICAgICAgICAgICAgICAgZmxvYXQgdGhyZXNob2xkID0gMC41ZjsKIAotICAg
ICAgICAgICAgICAgICAgICBpZiAoKGkgKyAxKSAqIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVl
ID49IHRocmVzaG9sZCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBm
cmFtZWJ1ZmZlck9iamVjdC0+Z2V0U2FtcGxlcygpOyArK2kpCiAgICAgICAgICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocmVzaG9sZCArPSAxLjBmOwotICAgICAgICAg
ICAgICAgICAgICAgICAgbWFzayB8PSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbWFzayA8
PD0gMTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChpICsgMSkgKiBtU3RhdGUuc2Ft
cGxlQ292ZXJhZ2VWYWx1ZSA+PSB0aHJlc2hvbGQpCisgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkICs9IDEuMGY7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWFzayB8PSAxOworICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZlcnQpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtYXNrID0gfm1hc2s7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShE
M0RSU19NVUxUSVNBTVBMRU1BU0ssIG1hc2spOwogICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlSW52ZXJ0KQorICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1hc2sgPSB+bWFzazsKKyAg
ICAgICAgICAgICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFT
SywgMHhGRkZGRkZGRik7CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRldmljZS0+U2V0
UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVNQVNLLCBtYXNrKTsKICAgICAgICAgfQogICAg
ICAgICBlbHNlCiAgICAgICAgIHsKQEAgLTE4ODcsMTggKzE5NTQsMTggQEAgdm9pZCBDb250ZXh0
Ojpsb29rdXBBdHRyaWJ1dGVNYXBwaW5nKFRyYQogewogICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
TUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAgICAgewotICAgICAgICBpZiAoYXR0cmlidXRlc1tp
XS5lbmFibGVkKQorICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGF0dHJpYnV0ZXNbaV0uc2VtYW50aWNJbmRleCA9IGdldEN1cnJlbnRQcm9n
cmFtKCktPmdldFNlbWFudGljSW5kZXgoaSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLUdMZW51
bSBDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcihHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdM
c2l6ZWkgY291bnQsIGJvb2wgKnVzZUluZGV4aW5nLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRl
eEluZm8pCitHTGVudW0gQ29udGV4dDo6YXBwbHlWZXJ0ZXhCdWZmZXIoR0xpbnQgZmlyc3QsIEdM
c2l6ZWkgY291bnQpCiB7CiAgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSB0cmFuc2xhdGVkW01BWF9W
RVJURVhfQVRUUklCU107CiAKLSAgICBHTGVudW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5w
cmVSZW5kZXJWYWxpZGF0ZShmaXJzdCwgY291bnQsIHRyYW5zbGF0ZWQpOworICAgIEdMZW51bSBl
cnIgPSBtVmVydGV4RGF0YU1hbmFnZXItPnByZXBhcmVWZXJ0ZXhEYXRhKGZpcnN0LCBjb3VudCwg
dHJhbnNsYXRlZCk7CiAgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKICAgICB7CiAgICAgICAg
IHJldHVybiBlcnI7CkBAIC0xOTA2LDUzICsxOTczLDIwIEBAIEdMZW51bSBDb250ZXh0OjphcHBs
eVZlcnRleEJ1ZmZlcihHTGVudW0KIAogICAgIGxvb2t1cEF0dHJpYnV0ZU1hcHBpbmcodHJhbnNs
YXRlZCk7CiAKLSAgICBtQnVmZmVyQmFja0VuZC0+c2V0dXBBdHRyaWJ1dGVzUHJlRHJhdyh0cmFu
c2xhdGVkKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBp
KyspCi0gICAgewotICAgICAgICBpZiAodHJhbnNsYXRlZFtpXS5lbmFibGVkICYmIHRyYW5zbGF0
ZWRbaV0ubm9uQXJyYXkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVyciA9IG1JbmRleERhdGFN
YW5hZ2VyLT5wcmVSZW5kZXJWYWxpZGF0ZVVuaW5kZXhlZChtb2RlLCBjb3VudCwgaW5kZXhJbmZv
KTsKLSAgICAgICAgICAgIGlmIChlcnIgIT0gR0xfTk9fRVJST1IpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKLSAgICAgICAgICAgIH0KKyAgICBtVmVydGV4RGF0
YU1hbmFnZXItPnNldHVwQXR0cmlidXRlcyh0cmFuc2xhdGVkKTsKIAotICAgICAgICAgICAgbUJ1
ZmZlckJhY2tFbmQtPnNldHVwSW5kaWNlc1ByZURyYXcoKmluZGV4SW5mbyk7Ci0KLSAgICAgICAg
ICAgICp1c2VJbmRleGluZyA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gR0xfTk9fRVJST1I7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAqdXNlSW5kZXhpbmcgPSBmYWxzZTsKICAgICByZXR1
cm4gR0xfTk9fRVJST1I7CiB9CiAKLUdMZW51bSBDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZlcihj
b25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8pCi17Ci0gICAgVHJhbnNsYXRlZEF0
dHJpYnV0ZSB0cmFuc2xhdGVkW01BWF9WRVJURVhfQVRUUklCU107Ci0KLSAgICBHTGVudW0gZXJy
ID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVSZW5kZXJWYWxpZGF0ZShpbmRleEluZm8ubWluSW5k
ZXgsIGluZGV4SW5mby5tYXhJbmRleC1pbmRleEluZm8ubWluSW5kZXgrMSwgdHJhbnNsYXRlZCk7
Ci0KLSAgICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQotICAgIHsKLSAgICAgICAgbG9va3VwQXR0
cmlidXRlTWFwcGluZyh0cmFuc2xhdGVkKTsKLQotICAgICAgICBtQnVmZmVyQmFja0VuZC0+c2V0
dXBBdHRyaWJ1dGVzUHJlRHJhdyh0cmFuc2xhdGVkKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZXJy
OwotfQotCiAvLyBBcHBsaWVzIHRoZSBpbmRpY2VzIGFuZCBlbGVtZW50IGFycmF5IGJpbmRpbmdz
IHRvIHRoZSBEaXJlY3QzRCA5IGRldmljZQogR0xlbnVtIENvbnRleHQ6OmFwcGx5SW5kZXhCdWZm
ZXIoY29uc3Qgdm9pZCAqaW5kaWNlcywgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51
bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pCiB7Ci0gICAgR0xlbnVtIGVy
ciA9IG1JbmRleERhdGFNYW5hZ2VyLT5wcmVSZW5kZXJWYWxpZGF0ZShtb2RlLCB0eXBlLCBjb3Vu
dCwgbVN0YXRlLmVsZW1lbnRBcnJheUJ1ZmZlci5nZXQoKSwgaW5kaWNlcywgaW5kZXhJbmZvKTsK
KyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICBHTGVudW0g
ZXJyID0gbUluZGV4RGF0YU1hbmFnZXItPnByZXBhcmVJbmRleERhdGEodHlwZSwgY291bnQsIG1T
dGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGluZGljZXMsIGluZGV4SW5mbyk7CiAKICAg
ICBpZiAoZXJyID09IEdMX05PX0VSUk9SKQogICAgIHsKLSAgICAgICAgbUJ1ZmZlckJhY2tFbmQt
PnNldHVwSW5kaWNlc1ByZURyYXcoKmluZGV4SW5mbyk7CisgICAgICAgIGRldmljZS0+U2V0SW5k
aWNlcyhpbmRleEluZm8tPmluZGV4QnVmZmVyKTsKICAgICB9CiAKICAgICByZXR1cm4gZXJyOwpA
QCAtMjA0OCw2ICsyMDgyLDEyIEBAIHZvaWQgQ29udGV4dDo6cmVhZFBpeGVscyhHTGludCB4LCBH
TGludCAKICAgICB9CiAKICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJh
bWVidWZmZXItPmdldFJlbmRlclRhcmdldCgpOworCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpCisg
ICAgeworICAgICAgICByZXR1cm47ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QsIHJldHVybiBz
aWxlbnRseQorICAgIH0KKwogICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmlj
ZSgpOwogCiAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CkBAIC0yMTQxLDE2ICsyMTgxLDYgQEAg
dm9pZCBDb250ZXh0OjpyZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IAogICAgICAgICAgICAgICAg
ICAgICByID0gKHJnYiAmIDB4RjgwMCkgKiAoMS4wZiAvIDB4RjgwMCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlIEQzREZNVF9Y
MVI1RzVCNToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IHNob3J0IHhyZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogbG9j
ay5QaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9IDEuMGY7Ci0gICAgICAgICAgICAg
ICAgICAgIGIgPSAoeHJnYiAmIDB4MDAxRikgKiAoMS4wZiAvIDB4MDAxRik7Ci0gICAgICAgICAg
ICAgICAgICAgIGcgPSAoeHJnYiAmIDB4MDNFMCkgKiAoMS4wZiAvIDB4MDNFMCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHIgPSAoeHJnYiAmIDB4N0MwMCkgKiAoMS4wZiAvIDB4N0MwMCk7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNl
IEQzREZNVF9BMVI1RzVCNToKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291cmNlICsgMiAqIGkg
KyBqICogbG9jay5QaXRjaCk7CkBAIC0yMTkxLDYgKzIyMjEsMjggQEAgdm9pZCBDb250ZXh0Ojpy
ZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IAogICAgICAgICAgICAgICAgICAgICByID0gKGFyZ2Ig
JiAweDNGRjAwMDAwKSAqICgxLjBmIC8gMHgzRkYwMDAwMCk7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMzJCMzJH
MzJSMzJGOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZmxvYXQg
Zm9ybWF0cyBpbiBEM0QgYXJlIHN0b3JlZCByZ2JhLCByYXRoZXIgdGhhbiB0aGUgb3RoZXIgd2F5
IHJvdW5kCisgICAgICAgICAgICAgICAgICAgIHIgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICog
aSArIGogKiBsb2NrLlBpdGNoKSArIDApOworICAgICAgICAgICAgICAgICAgICBnID0gKigoZmxv
YXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogbG9jay5QaXRjaCkgKyAxKTsKKyAgICAgICAgICAg
ICAgICAgICAgYiA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBpICsgaiAqIGxvY2suUGl0Y2gp
ICsgMik7CisgICAgICAgICAgICAgICAgICAgIGEgPSAqKChmbG9hdCopKHNvdXJjZSArIDE2ICog
aSArIGogKiBsb2NrLlBpdGNoKSArIDMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4g
RDNEIGFyZSBzdG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAorICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBhYmdyWzRdOworCisgICAgICAgICAgICAgICAgICAgIEQz
RFhGbG9hdDE2VG8zMkFycmF5KGFiZ3IsIChEM0RYRkxPQVQxNiopKHNvdXJjZSArIDggKiBpICsg
aiAqIGxvY2suUGl0Y2gpLCA0KTsKKworICAgICAgICAgICAgICAgICAgICBhID0gYWJnclszXTsK
KyAgICAgICAgICAgICAgICAgICAgYiA9IGFiZ3JbMl07CisgICAgICAgICAgICAgICAgICAgIGcg
PSBhYmdyWzFdOworICAgICAgICAgICAgICAgICAgICByID0gYWJnclswXTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FCiAgICAgICAgICAgICAg
ICAgVU5SRUFDSEFCTEUoKTsKQEAgLTIzMTQsNiArMjM2NiwxMiBAQCB2b2lkIENvbnRleHQ6OmNs
ZWFyKEdMYml0ZmllbGQgbWFzaykKICAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRT
dGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3Rl
bmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICAgICAgICAgIGlmICghZGVwdGhT
dGVuY2lsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNp
bCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVND
IGRlc2M7CiAgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOwogCkBAIC0y
MzQ2LDYgKzI0MDQsMTEgQEAgdm9pZCBDb250ZXh0OjpjbGVhcihHTGJpdGZpZWxkIG1hc2spCiAK
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gZnJhbWVidWZmZXJPYmplY3Qt
PmdldFJlbmRlclRhcmdldCgpOwogCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpCisgICAgeworICAg
ICAgICByZXR1cm47ICAgLy8gQ29udGV4dCBtdXN0IGJlIGxvc3QsIHJldHVybiBzaWxlbnRseQor
ICAgIH0KKwogICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwogICAgIHJlbmRlclRhcmdldC0+R2V0
RGVzYygmZGVzYyk7CiAKQEAgLTIzODEsNyArMjQ0NCw3IEBAIHZvaWQgQ29udGV4dDo6Y2xlYXIo
R0xiaXRmaWVsZCBtYXNrKQogICAgICAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxM
KTsKICAgICAgICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwpOwogICAgICAgICAg
ICAgZGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyB8IEQzREZWRl9ESUZGVVNFKTsKLSAgICAg
ICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcSgwLCAxKTsKKyAgICAgICAgICAgIGRl
dmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9ESVNB
QkxFKTsKIAogICAgICAgICAgICAgaHIgPSBkZXZpY2UtPkVuZFN0YXRlQmxvY2soJm1NYXNrZWRD
bGVhclNhdmVkU3RhdGUpOwogICAgICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChocikgfHwgaHIg
PT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgaHIgPT0gRV9PVVRPRk1FTU9SWSk7CkBAIC0y
NDM2LDcgKzI0OTksNyBAQCB2b2lkIENvbnRleHQ6OmNsZWFyKEdMYml0ZmllbGQgbWFzaykKICAg
ICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKICAgICAgICAgZGV2aWNlLT5TZXRW
ZXJ0ZXhTaGFkZXIoTlVMTCk7CiAgICAgICAgIGRldmljZS0+U2V0RlZGKEQzREZWRl9YWVpSSFcg
fCBEM0RGVkZfRElGRlVTRSk7Ci0gICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcSgw
LCAxKTsKKyAgICAgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1NfQ09M
T1JPUCwgRDNEVE9QX0RJU0FCTEUpOwogCiAgICAgICAgIHN0cnVjdCBWZXJ0ZXgKICAgICAgICAg
ewpAQCAtMjUxNyw5ICsyNTgwLDcgQEAgdm9pZCBDb250ZXh0OjpkcmF3QXJyYXlzKEdMZW51bSBt
b2RlLCBHTAogCiAgICAgYXBwbHlTdGF0ZShtb2RlKTsKIAotICAgIFRyYW5zbGF0ZWRJbmRleERh
dGEgaW5kZXhJbmZvOwotICAgIGJvb2wgdXNlSW5kZXhpbmc7Ci0gICAgR0xlbnVtIGVyciA9IGFw
cGx5VmVydGV4QnVmZmVyKG1vZGUsIGZpcnN0LCBjb3VudCwgJnVzZUluZGV4aW5nLCAmaW5kZXhJ
bmZvKTsKKyAgICBHTGVudW0gZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoZmlyc3QsIGNvdW50KTsK
ICAgICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9y
KGVycik7CkBAIC0yNTM2LDE4ICsyNTk3LDE3IEBAIHZvaWQgQ29udGV4dDo6ZHJhd0FycmF5cyhH
TGVudW0gbW9kZSwgR0wKICAgICBpZiAoIWN1bGxTa2lwc0RyYXcobW9kZSkpCiAgICAgewogICAg
ICAgICBkaXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0gICAgICAgIGlmICh1c2VJbmRleGluZykKLSAg
ICAgICAgewotICAgICAgICAgICAgZGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShwcmltaXRp
dmVUeXBlLCAtKElOVClpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5mby5taW5JbmRleCwgaW5k
ZXhJbmZvLm1heEluZGV4LWluZGV4SW5mby5taW5JbmRleCsxLCBpbmRleEluZm8ub2Zmc2V0L2lu
ZGV4SW5mby5pbmRleFNpemUsIHByaW1pdGl2ZUNvdW50KTsKLSAgICAgICAgfQotICAgICAgICBl
bHNlCisgICAgICAgIAorICAgICAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmUocHJpbWl0aXZlVHlw
ZSwgMCwgcHJpbWl0aXZlQ291bnQpOworCisgICAgICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9P
UCkgICAvLyBEcmF3IHRoZSBsYXN0IHNlZ21lbnQgc2VwYXJhdGVseQogICAgICAgICB7Ci0gICAg
ICAgICAgICBkZXZpY2UtPkRyYXdQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgMCwgcHJpbWl0aXZl
Q291bnQpOworICAgICAgICAgICAgZHJhd0Nsb3NpbmdMaW5lKGZpcnN0LCBmaXJzdCArIGNvdW50
IC0gMSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQ29udGV4dDo6ZHJhd0VsZW1lbnRz
KEdMZW51bSBtb2RlLCBHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCogaW5k
aWNlcykKK3ZvaWQgQ29udGV4dDo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCBHTHNpemVpIGNv
dW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5kaWNlcykKIHsKICAgICBpZiAoIW1TdGF0
ZS5jdXJyZW50UHJvZ3JhbSkKICAgICB7CkBAIC0yNTg2LDcgKzI2NDYsOCBAQCB2b2lkIENvbnRl
eHQ6OmRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgCiAgICAgICAgIHJldHVybiBlcnJvcihlcnIp
OwogICAgIH0KIAotICAgIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGluZGV4SW5mbyk7CisgICAg
R0xzaXplaSB2ZXJ0ZXhDb3VudCA9IGluZGV4SW5mby5tYXhJbmRleCAtIGluZGV4SW5mby5taW5J
bmRleCArIDE7CisgICAgZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoaW5kZXhJbmZvLm1pbkluZGV4
LCB2ZXJ0ZXhDb3VudCk7CiAgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKICAgICB7CiAgICAg
ICAgIHJldHVybiBlcnJvcihlcnIpOwpAQCAtMjYwMyw3ICsyNjY0LDEzIEBAIHZvaWQgQ29udGV4
dDo6ZHJhd0VsZW1lbnRzKEdMZW51bSBtb2RlLCAKICAgICBpZiAoIWN1bGxTa2lwc0RyYXcobW9k
ZSkpCiAgICAgewogICAgICAgICBkaXNwbGF5LT5zdGFydFNjZW5lKCk7Ci0gICAgICAgIGRldmlj
ZS0+RHJhd0luZGV4ZWRQcmltaXRpdmUocHJpbWl0aXZlVHlwZSwgLShJTlQpaW5kZXhJbmZvLm1p
bkluZGV4LCBpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5mby5tYXhJbmRleC1pbmRleEluZm8u
bWluSW5kZXgrMSwgaW5kZXhJbmZvLm9mZnNldC9pbmRleEluZm8uaW5kZXhTaXplLCBwcmltaXRp
dmVDb3VudCk7CisKKyAgICAgICAgZGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShwcmltaXRp
dmVUeXBlLCAtKElOVClpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5mby5taW5JbmRleCwgdmVy
dGV4Q291bnQsIGluZGV4SW5mby5zdGFydEluZGV4LCBwcmltaXRpdmVDb3VudCk7CisKKyAgICAg
ICAgaWYgKG1vZGUgPT0gR0xfTElORV9MT09QKSAgIC8vIERyYXcgdGhlIGxhc3Qgc2VnbWVudCBz
ZXBhcmF0ZWx5CisgICAgICAgIHsKKyAgICAgICAgICAgIGRyYXdDbG9zaW5nTGluZShjb3VudCwg
dHlwZSwgaW5kaWNlcyk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTI2MzEsNyArMjY5OCw2
IEBAIHZvaWQgQ29udGV4dDo6ZmluaXNoKCkKICAgICAgICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1
bHQpKTsKIAogICAgICAgICAvLyBSZW5kZXIgc29tZXRoaW5nIG91dHNpZGUgdGhlIHJlbmRlciB0
YXJnZXQKLSAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKDAsIDEpOwogICAgICAg
ICBkZXZpY2UtPlNldFBpeGVsU2hhZGVyKE5VTEwpOwogICAgICAgICBkZXZpY2UtPlNldFZlcnRl
eFNoYWRlcihOVUxMKTsKICAgICAgICAgZGV2aWNlLT5TZXRGVkYoRDNERlZGX1hZWlJIVyk7CkBA
IC0yNjg3LDYgKzI3NTMsOTMgQEAgdm9pZCBDb250ZXh0OjpmbHVzaCgpCiAgICAgfQogfQogCit2
b2lkIENvbnRleHQ6OmRyYXdDbG9zaW5nTGluZSh1bnNpZ25lZCBpbnQgZmlyc3QsIHVuc2lnbmVk
IGludCBsYXN0KQoreworICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgp
OworICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqaW5kZXhCdWZmZXIgPSBOVUxMOworICAgIEhS
RVNVTFQgcmVzdWx0ID0gRDNERVJSX0lOVkFMSURDQUxMOworCisgICAgaWYgKHN1cHBvcnRzMzJi
aXRJbmRpY2VzKCkpCisgICAgeworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUluZGV4
QnVmZmVyKDgsIEQzRFVTQUdFX1dSSVRFT05MWSwgRDNERk1UX0lOREVYMzIsIEQzRFBPT0xfREVG
QVVMVCwgJmluZGV4QnVmZmVyLCAwKTsKKworICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCAqZGF0YTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IGluZGV4QnVmZmVyLT5Mb2NrKDAsIDAsICh2b2lkKiopJmRhdGEsIDApOworCisg
ICAgICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgZGF0YVswXSA9IGxhc3Q7CisgICAgICAgICAgICAgICAgZGF0YVsxXSA9IGZpcnN0
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlSW5kZXhCdWZmZXIoNCwgRDNEVVNBR0VfV1JJVEVP
TkxZLCBEM0RGTVRfSU5ERVgxNiwgRDNEUE9PTF9ERUZBVUxULCAmaW5kZXhCdWZmZXIsIDApOwor
CisgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAg
dW5zaWduZWQgc2hvcnQgKmRhdGE7CisgICAgICAgICAgICByZXN1bHQgPSBpbmRleEJ1ZmZlci0+
TG9jaygwLCAwLCAodm9pZCoqKSZkYXRhLCAwKTsKKworICAgICAgICAgICAgaWYgKFNVQ0NFRURF
RChyZXN1bHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFbMF0gPSBsYXN0
OworICAgICAgICAgICAgICAgIGRhdGFbMV0gPSBmaXJzdDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgeworICAg
ICAgICBpbmRleEJ1ZmZlci0+VW5sb2NrKCk7CisgICAgICAgIGRldmljZS0+U2V0SW5kaWNlcyhp
bmRleEJ1ZmZlcik7CisKKyAgICAgICAgZGV2aWNlLT5EcmF3SW5kZXhlZFByaW1pdGl2ZShEM0RQ
VF9MSU5FTElTVCwgMCwgMCwgMiwgMCwgMSk7CisKKyAgICAgICAgaW5kZXhCdWZmZXItPlJlbGVh
c2UoKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgRVJSKCJDb3VsZCBub3QgY3Jl
YXRlIGFuIGluZGV4IGJ1ZmZlciBmb3IgY2xvc2luZyBhIGxpbmUgbG9vcC4iKTsKKyAgICAgICAg
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCit2b2lkIENvbnRleHQ6OmRyYXdD
bG9zaW5nTGluZShHTHNpemVpIGNvdW50LCBHTGVudW0gdHlwZSwgY29uc3Qgdm9pZCAqaW5kaWNl
cykKK3sKKyAgICB1bnNpZ25lZCBpbnQgZmlyc3QgPSAwOworICAgIHVuc2lnbmVkIGludCBsYXN0
ID0gMDsKKworICAgIGlmIChtU3RhdGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpKQorICAgIHsK
KyAgICAgICAgQnVmZmVyICppbmRleEJ1ZmZlciA9IG1TdGF0ZS5lbGVtZW50QXJyYXlCdWZmZXIu
Z2V0KCk7CisgICAgICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KGluZGljZXMpOworICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0
ZSo+KGluZGV4QnVmZmVyLT5kYXRhKCkpICsgb2Zmc2V0OworICAgIH0KKworICAgIHN3aXRjaCAo
dHlwZSkKKyAgICB7CisgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgIGZpcnN0
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpWzBdOworICAgICAgICBsYXN0
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpW2NvdW50IC0gMV07CisgICAg
ICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgICAgZmlyc3Qg
PSBzdGF0aWNfY2FzdDxjb25zdCBHTHVzaG9ydCo+KGluZGljZXMpWzBdOworICAgICAgICBsYXN0
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRpY2VzKVtjb3VudCAtIDFdOworICAg
ICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICBmaXJzdCA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpWzBdOworICAgICAgICBsYXN0ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcylbY291bnQgLSAxXTsKKyAgICAgICAg
YnJlYWs7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIGRyYXdD
bG9zaW5nTGluZShmaXJzdCwgbGFzdCk7Cit9CisKIHZvaWQgQ29udGV4dDo6cmVjb3JkSW52YWxp
ZEVudW0oKQogewogICAgIG1JbnZhbGlkRW51bSA9IHRydWU7CkBAIC0yNzU5LDYgKzI5MTIsMTYg
QEAgYm9vbCBDb250ZXh0OjpzdXBwb3J0c1NoYWRlck1vZGVsMygpIGNvbgogICAgIHJldHVybiBt
U3VwcG9ydHNTaGFkZXJNb2RlbDM7CiB9CiAKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtVmFyeWlu
Z1ZlY3RvcnMoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPyBN
QVhfVkFSWUlOR19WRUNUT1JTX1NNMyA6IE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00yOworfQorCitp
bnQgQ29udGV4dDo6Z2V0TWF4aW11bUZyYWdtZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdAorewor
ICAgIHJldHVybiBtU3VwcG9ydHNTaGFkZXJNb2RlbDMgPyBNQVhfRlJBR01FTlRfVU5JRk9STV9W
RUNUT1JTX1NNMyA6IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00yOworfQorCiBpbnQg
Q29udGV4dDo6Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1N
YXhTdXBwb3J0ZWRTYW1wbGVzOwpAQCAtMjc4OCwxMSArMjk1MSw4MSBAQCBpbnQgQ29udGV4dDo6
Z2V0TmVhcmVzdFN1cHBvcnRlZFNhbXBsZXMoCiAgICAgcmV0dXJuIC0xOwogfQogCitib29sIENv
bnRleHQ6OnN1cHBvcnRzRXZlbnRRdWVyaWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBv
cnRzRXZlbnRRdWVyaWVzOworfQorCiBib29sIENvbnRleHQ6OnN1cHBvcnRzQ29tcHJlc3NlZFRl
eHR1cmVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVz
OwogfQogCitib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0VGV4dHVyZXM7Cit9CisKK2Jvb2wgQ29udGV4dDo6c3Vw
cG9ydHNGbG9hdExpbmVhckZpbHRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdXBwb3J0c0Zs
b2F0TGluZWFyRmlsdGVyOworfQorCitib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXRSZW5kZXJh
YmxlVGV4dHVyZXMoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdFJlbmRlcmFi
bGVUZXh0dXJlczsKK30KKworYm9vbCBDb250ZXh0OjpzdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXM7Cit9CisK
K2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNIYWxmRmxvYXRMaW5lYXJGaWx0ZXIoKSBjb25zdAorewor
ICAgIHJldHVybiBtU3VwcG9ydHNIYWxmRmxvYXRMaW5lYXJGaWx0ZXI7Cit9CisKK2Jvb2wgQ29u
dGV4dDo6c3VwcG9ydHNIYWxmRmxvYXRSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdAoreworICAg
IHJldHVybiBtU3VwcG9ydHNIYWxmRmxvYXRSZW5kZXJhYmxlVGV4dHVyZXM7Cit9CisKK2ludCBD
b250ZXh0OjpnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbjsKK30KKworaW50IENvbnRleHQ6OmdldE1h
eGltdW1UZXh0dXJlRGltZW5zaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1heFRleHR1cmVE
aW1lbnNpb247Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNp
b24oKSBjb25zdAoreworICAgIHJldHVybiBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb247Cit9CisK
K2ludCBDb250ZXh0OjpnZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbU1heFRleHR1cmVMZXZlbDsKK30KKworYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5j
ZVRleHR1cmVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVy
ZXM7Cit9CisKK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKK30K
KworYm9vbCBDb250ZXh0OjpzdXBwb3J0czMyYml0SW5kaWNlcygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1TdXBwb3J0czMyYml0SW5kaWNlczsKK30KKwogdm9pZCBDb250ZXh0OjpkZXRhY2hCdWZm
ZXIoR0x1aW50IGJ1ZmZlcikKIHsKICAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAy
LjkgcGFnZSAyMjoKQEAgLTI5MDMsNyArMzEzNiw3IEBAIHZvaWQgQ29udGV4dDo6ZGV0YWNoUmVu
ZGVyYnVmZmVyKEdMdWludCAKIAogVGV4dHVyZSAqQ29udGV4dDo6Z2V0SW5jb21wbGV0ZVRleHR1
cmUoU2FtcGxlclR5cGUgdHlwZSkKIHsKLSAgICBUZXh0dXJlICp0ID0gbUluY29tcGxldGVUZXh0
dXJlc1t0eXBlXTsKKyAgICBUZXh0dXJlICp0ID0gbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5n
ZXQoKTsKIAogICAgIGlmICh0ID09IE5VTEwpCiAgICAgewpAQCAtMjkzOSw3ICszMTcyLDcgQEAg
VGV4dHVyZSAqQ29udGV4dDo6Z2V0SW5jb21wbGV0ZVRleHR1cmUoUwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KIAotICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdID0gdDsK
KyAgICAgICAgbUluY29tcGxldGVUZXh0dXJlc1t0eXBlXS5zZXQodCk7CiAgICAgfQogCiAgICAg
cmV0dXJuIHQ7CkBAIC0yOTc4LDcgKzMyMTEsNyBAQCB2b2lkIENvbnRleHQ6OnNldFZlcnRleEF0
dHJpYihHTHVpbnQgaW5kCiAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJl
bnRWYWx1ZVsyXSA9IHZhbHVlc1syXTsKICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4
XS5tQ3VycmVudFZhbHVlWzNdID0gdmFsdWVzWzNdOwogCi0gICAgbVZlcnRleERhdGFNYW5hZ2Vy
LT5kaXJ0eUN1cnJlbnRWYWx1ZXMoKTsKKyAgICBtVmVydGV4RGF0YU1hbmFnZXItPmRpcnR5Q3Vy
cmVudFZhbHVlKGluZGV4KTsKIH0KIAogdm9pZCBDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5n
KCkKQEAgLTI5ODgsMTggKzMyMjEsNDQgQEAgdm9pZCBDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3Ry
aW5nKCkKICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSAi
OwogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQgIjsK
ICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfcmdiOF9yZ2JhOCAiOworICAgIG1FeHRl
bnNpb25TdHJpbmcgKz0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyAiOworCisgICAgaWYg
KHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkpCisgICAgeworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5n
ICs9ICJHTF9OVl9mZW5jZSAiOworICAgIH0KIAogICAgIGlmIChzdXBwb3J0c0NvbXByZXNzZWRU
ZXh0dXJlcygpKQogICAgIHsKICAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfRVhUX3Rl
eHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOwogICAgIH0KIAorICAgIGlmIChzdXBwb3J0c0Zsb2F0
VGV4dHVyZXMoKSkKKyAgICB7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190
ZXh0dXJlX2Zsb2F0ICI7CisgICAgfQorCisgICAgaWYgKHN1cHBvcnRzSGFsZkZsb2F0VGV4dHVy
ZXMoKSkKKyAgICB7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU190ZXh0dXJl
X2hhbGZfZmxvYXQgIjsKKyAgICB9CisKKyAgICBpZiAoc3VwcG9ydHNGbG9hdExpbmVhckZpbHRl
cigpKQorICAgIHsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX3RleHR1cmVf
ZmxvYXRfbGluZWFyICI7CisgICAgfQorCisgICAgaWYgKHN1cHBvcnRzSGFsZkZsb2F0TGluZWFy
RmlsdGVyKCkpCisgICAgeworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfdGV4
dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAiOworICAgIH0KKwogICAgIGlmIChnZXRNYXhTdXBwb3J0
ZWRTYW1wbGVzKCkgIT0gMCkKICAgICB7CiAgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdM
X0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICI7CiAgICAgfQogCi0gICAgaWYgKG1CdWZm
ZXJCYWNrRW5kLT5zdXBwb3J0SW50SW5kaWNlcygpKQorICAgIGlmIChzdXBwb3J0czMyYml0SW5k
aWNlcygpKQogICAgIHsKICAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VTX2VsZW1l
bnRfaW5kZXhfdWludCAiOwogICAgIH0KQEAgLTMxNzgsMTAgKzM0MzcsMTAgQEAgdm9pZCBDb250
ZXh0OjpibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWAogICAgIH0KIAogICAgIGJvb2wgcGFydGlh
bEJ1ZmZlckNvcHkgPSBmYWxzZTsKLSAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC0g
c291cmNlVHJpbW1lZFJlY3QudG9wIDwgcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigp
LT5nZXRIZWlnaHQoKSB8fAotICAgICAgICBzb3VyY2VUcmltbWVkUmVjdC5yaWdodCAtIHNvdXJj
ZVRyaW1tZWRSZWN0LmxlZnQgPCByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCktPmdl
dFdpZHRoKCkgfHwgCi0gICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkZXN0VHJpbW1l
ZFJlY3QudG9wIDwgZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRIZWlnaHQo
KSB8fAotICAgICAgICBkZXN0VHJpbW1lZFJlY3QucmlnaHQgLSBkZXN0VHJpbW1lZFJlY3QubGVm
dCA8IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0V2lkdGgoKSB8fAorICAg
IGlmIChzb3VyY2VUcmltbWVkUmVjdC5ib3R0b20gLSBzb3VyY2VUcmltbWVkUmVjdC50b3AgPCBy
ZWFkQnVmZmVySGVpZ2h0IHx8CisgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnJpZ2h0IC0gc291
cmNlVHJpbW1lZFJlY3QubGVmdCA8IHJlYWRCdWZmZXJXaWR0aCB8fCAKKyAgICAgICAgZGVzdFRy
aW1tZWRSZWN0LmJvdHRvbSAtIGRlc3RUcmltbWVkUmVjdC50b3AgPCBkcmF3QnVmZmVySGVpZ2h0
IHx8CisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5yaWdodCAtIGRlc3RUcmltbWVkUmVjdC5sZWZ0
IDwgZHJhd0J1ZmZlcldpZHRoIHx8CiAgICAgICAgIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCAhPSAw
IHx8IGRlc3RUcmltbWVkUmVjdC50b3AgIT0gMCB8fCBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0ICE9
IDAgfHwgZGVzdFRyaW1tZWRSZWN0LmxlZnQgIT0gMCkKICAgICB7CiAgICAgICAgIHBhcnRpYWxC
dWZmZXJDb3B5ID0gdHJ1ZTsKQEAgLTMxODksNyArMzQ0OCwxMSBAQCB2b2lkIENvbnRleHQ6OmJs
aXRGcmFtZWJ1ZmZlcihHTGludCBzcmNYCiAKICAgICBpZiAobWFzayAmIEdMX0NPTE9SX0JVRkZF
Ul9CSVQpCiAgICAgewotICAgICAgICBpZiAocmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZl
clR5cGUoKSAhPSBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpIHx8CisgICAg
ICAgIGNvbnN0IGJvb2wgdmFsaWRSZWFkVHlwZSA9IHJlYWRGcmFtZWJ1ZmZlci0+Z2V0Q29sb3Ji
dWZmZXJUeXBlKCkgPT0gR0xfVEVYVFVSRV8yRCB8fAorICAgICAgICAgICAgcmVhZEZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9SRU5ERVJCVUZGRVI7CisgICAgICAgIGNv
bnN0IGJvb2wgdmFsaWREcmF3VHlwZSA9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJU
eXBlKCkgPT0gR0xfVEVYVFVSRV8yRCB8fAorICAgICAgICAgICAgZHJhd0ZyYW1lYnVmZmVyLT5n
ZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9SRU5ERVJCVUZGRVI7CisgICAgICAgIGlmICghdmFs
aWRSZWFkVHlwZSB8fCAhdmFsaWREcmF3VHlwZSB8fAogICAgICAgICAgICAgcmVhZEZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXREM0RGb3JtYXQoKSAhPSBkcmF3RnJhbWVidWZmZXIt
PmdldENvbG9yYnVmZmVyKCktPmdldEQzREZvcm1hdCgpKQogICAgICAgICB7CiAgICAgICAgICAg
ICBFUlIoIkNvbG9yIGJ1ZmZlciBmb3JtYXQgY29udmVyc2lvbiBpbiBCbGl0RnJhbWVidWZmZXJB
TkdMRSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24iKTsKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4dC5oCShyZXZpc2lv
biA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQ29udGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMiw2ICsxMiw3IEBACiAKICNkZWZpbmUgR0xfQVBJQ0FM
TAogI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPEdMRVMyL2dsMmV4dC5oPgogI2Rl
ZmluZSBFR0xBUEkKICNpbmNsdWRlIDxFR0wvZWdsLmg+CiAjaW5jbHVkZSA8ZDNkOS5oPgpAQCAt
NDksMTkgKzUwLDIwIEBAIGNsYXNzIFN0ZW5jaWxidWZmZXI7CiBjbGFzcyBEZXB0aFN0ZW5jaWxi
dWZmZXI7CiBjbGFzcyBWZXJ0ZXhEYXRhTWFuYWdlcjsKIGNsYXNzIEluZGV4RGF0YU1hbmFnZXI7
Ci1jbGFzcyBCdWZmZXJCYWNrRW5kOwogY2xhc3MgQmxpdDsKK2NsYXNzIEZlbmNlOwogCiBlbnVt
CiB7Ci0gICAgTUFYX1ZFUlRFWF9BVFRSSUJTID0gMTIsCi0gICAgTUFYX1ZFUlRFWF9VTklGT1JN
X1ZFQ1RPUlMgPSAxMjgsCi0gICAgTUFYX1ZBUllJTkdfVkVDVE9SUyA9IDgsCisgICAgTUFYX1ZF
UlRFWF9BVFRSSUJTID0gMTYsCisgICAgTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMgPSAyNTYg
LSAyLCAgIC8vIDI1NiBpcyB0aGUgbWluaW11bSBmb3IgU00yLCBhbmQgaW4gcHJhY3RpY2UgdGhl
IG1heGltdW0gZm9yIERYOS4gUmVzZXJ2ZSBzcGFjZSBmb3IgZHhfSGFsZlBpeGVsU2l6ZSBhbmQg
ZHhfRGVwdGhSYW5nZS4KKyAgICBNQVhfVkFSWUlOR19WRUNUT1JTX1NNMiA9IDgsCisgICAgTUFY
X1ZBUllJTkdfVkVDVE9SU19TTTMgPSAxMCwKICAgICBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFH
RV9VTklUUyA9IDE2LAogICAgIE1BWF9WRVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUyA9IDAsCiAg
ICAgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKLSAgICBNQVhfRlJBR01FTlRfVU5JRk9S
TV9WRUNUT1JTID0gMTYsCi0gICAgTUFYX1JFTkRFUkJVRkZFUl9TSVpFID0gNDA5NiwgICAvLyBG
SVhNRTogVmVyaWZ5CisgICAgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SU19TTTIgPSAzMiAt
IDMsICAgIC8vIFJlc2VydmUgc3BhY2UgZm9yIGR4X1ZpZXdwb3J0LCBkeF9EZXB0aCwgYW5kIGR4
X0RlcHRoUmFuZ2UuIGR4X1BvaW50T3JMaW5lcyBhbmQgZHhfRnJvbnRDQ1cgdXNlIHNlcGFyYXRl
IGJvb2wgcmVnaXN0ZXJzLgorICAgIE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00zID0g
MjI0IC0gMywKICAgICBNQVhfRFJBV19CVUZGRVJTID0gMSwKIAogICAgIElNUExFTUVOVEFUSU9O
X0NPTE9SX1JFQURfRk9STUFUID0gR0xfUkdCLApAQCAtODMsMzIgKzg1LDU2IEBAIHN0cnVjdCBD
b2xvcgogfTsKIAogLy8gSGVscGVyIHN0cnVjdHVyZSBkZXNjcmliaW5nIGEgc2luZ2xlIHZlcnRl
eCBhdHRyaWJ1dGUKLWNsYXNzIEF0dHJpYnV0ZVN0YXRlCitjbGFzcyBWZXJ0ZXhBdHRyaWJ1dGUK
IHsKICAgcHVibGljOgotICAgIEF0dHJpYnV0ZVN0YXRlKCkKLSAgICAgICAgOiBtVHlwZShHTF9G
TE9BVCksIG1TaXplKDApLCBtTm9ybWFsaXplZChmYWxzZSksIG1TdHJpZGUoMCksIG1Qb2ludGVy
KE5VTEwpLCBtRW5hYmxlZChmYWxzZSkKKyAgICBWZXJ0ZXhBdHRyaWJ1dGUoKSA6IG1UeXBlKEdM
X0ZMT0FUKSwgbVNpemUoMCksIG1Ob3JtYWxpemVkKGZhbHNlKSwgbVN0cmlkZSgwKSwgbVBvaW50
ZXIoTlVMTCksIG1BcnJheUVuYWJsZWQoZmFsc2UpCiAgICAgewotICAgICAgICBtQ3VycmVudFZh
bHVlWzBdID0gMDsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVsxXSA9IDA7Ci0gICAgICAgIG1DdXJy
ZW50VmFsdWVbMl0gPSAwOwotICAgICAgICBtQ3VycmVudFZhbHVlWzNdID0gMTsKKyAgICAgICAg
bUN1cnJlbnRWYWx1ZVswXSA9IDAuMGY7CisgICAgICAgIG1DdXJyZW50VmFsdWVbMV0gPSAwLjBm
OworICAgICAgICBtQ3VycmVudFZhbHVlWzJdID0gMC4wZjsKKyAgICAgICAgbUN1cnJlbnRWYWx1
ZVszXSA9IDEuMGY7CiAgICAgfQogCi0gICAgLy8gRnJvbSBWZXJ0ZXhBcnJheVBvaW50ZXIKKyAg
ICBpbnQgdHlwZVNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChtVHlwZSkKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgR0xfQllURTogICAgICAgICAgIHJldHVybiBtU2l6ZSAq
IHNpemVvZihHTGJ5dGUpOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogIHJldHVy
biBtU2l6ZSAqIHNpemVvZihHTHVieXRlKTsKKyAgICAgICAgICBjYXNlIEdMX1NIT1JUOiAgICAg
ICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xzaG9ydCk7CisgICAgICAgICAgY2FzZSBHTF9V
TlNJR05FRF9TSE9SVDogcmV0dXJuIG1TaXplICogc2l6ZW9mKEdMdXNob3J0KTsKKyAgICAgICAg
ICBjYXNlIEdMX0ZJWEVEOiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xmaXhlZCk7
CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgICAgcmV0dXJuIG1TaXplICogc2l6ZW9m
KEdMZmxvYXQpOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBtU2l6
ZSAqIHNpemVvZihHTGZsb2F0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdMc2l6ZWkgc3Ry
aWRlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtU3RyaWRlID8gbVN0cmlkZSA6IHR5
cGVTaXplKCk7CisgICAgfQorCisgICAgLy8gRnJvbSBnbFZlcnRleEF0dHJpYlBvaW50ZXIKICAg
ICBHTGVudW0gbVR5cGU7CiAgICAgR0xpbnQgbVNpemU7CiAgICAgYm9vbCBtTm9ybWFsaXplZDsK
LSAgICBHTHNpemVpIG1TdHJpZGU7IC8vIDAgbWVhbnMgbmF0dXJhbCBzdHJpZGUKLSAgICBjb25z
dCB2b2lkICptUG9pbnRlcjsKKyAgICBHTHNpemVpIG1TdHJpZGU7ICAgLy8gMCBtZWFucyBuYXR1
cmFsIHN0cmlkZQogCi0gICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBtQm91bmRCdWZmZXI7IC8v
IENhcHR1cmVkIHdoZW4gVmVydGV4QXJyYXlQb2ludGVyIGlzIGNhbGxlZC4KKyAgICB1bmlvbgor
ICAgIHsKKyAgICAgICAgY29uc3Qgdm9pZCAqbVBvaW50ZXI7CisgICAgICAgIGludHB0cl90IG1P
ZmZzZXQ7CisgICAgfTsKIAotICAgIGJvb2wgbUVuYWJsZWQ7IC8vIEZyb20gRW5hYmxlL0Rpc2Fi
bGVWZXJ0ZXhBdHRyaWJBcnJheQorICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gbUJvdW5kQnVm
ZmVyOyAgIC8vIENhcHR1cmVkIHdoZW4gZ2xWZXJ0ZXhBdHRyaWJQb2ludGVyIGlzIGNhbGxlZC4K
IAotICAgIGZsb2F0IG1DdXJyZW50VmFsdWVbNF07IC8vIEZyb20gVmVydGV4QXR0cmliNGYKKyAg
ICBib29sIG1BcnJheUVuYWJsZWQ7ICAgLy8gRnJvbSBnbEVuYWJsZS9EaXNhYmxlVmVydGV4QXR0
cmliQXJyYXkKKyAgICBmbG9hdCBtQ3VycmVudFZhbHVlWzRdOyAgIC8vIEZyb20gZ2xWZXJ0ZXhB
dHRyaWIKIH07CiAKK3R5cGVkZWYgVmVydGV4QXR0cmlidXRlIFZlcnRleEF0dHJpYnV0ZUFycmF5
W01BWF9WRVJURVhfQVRUUklCU107CisKIC8vIEhlbHBlciBzdHJ1Y3R1cmUgdG8gc3RvcmUgYWxs
IHJhdyBzdGF0ZQogc3RydWN0IFN0YXRlCiB7CkBAIC0xNTcsNiArMTgzLDcgQEAgc3RydWN0IFN0
YXRlCiAgICAgR0xmbG9hdCBsaW5lV2lkdGg7CiAKICAgICBHTGVudW0gZ2VuZXJhdGVNaXBtYXBI
aW50OworICAgIEdMZW51bSBmcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50OwogCiAgICAgR0xp
bnQgdmlld3BvcnRYOwogICAgIEdMaW50IHZpZXdwb3J0WTsKQEAgLTE3OSwxNCArMjA2LDEyIEBA
IHN0cnVjdCBTdGF0ZQogICAgIGludCBhY3RpdmVTYW1wbGVyOyAgIC8vIEFjdGl2ZSB0ZXh0dXJl
IHVuaXQgc2VsZWN0b3IgLSBHTF9URVhUVVJFMAogICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4g
YXJyYXlCdWZmZXI7CiAgICAgQmluZGluZ1BvaW50ZXI8QnVmZmVyPiBlbGVtZW50QXJyYXlCdWZm
ZXI7Ci0gICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZT4gdGV4dHVyZTJEOwotICAgIEJpbmRpbmdQ
b2ludGVyPFRleHR1cmU+IHRleHR1cmVDdWJlTWFwOwogICAgIEdMdWludCByZWFkRnJhbWVidWZm
ZXI7CiAgICAgR0x1aW50IGRyYXdGcmFtZWJ1ZmZlcjsKICAgICBCaW5kaW5nUG9pbnRlcjxSZW5k
ZXJidWZmZXI+IHJlbmRlcmJ1ZmZlcjsKICAgICBHTHVpbnQgY3VycmVudFByb2dyYW07CiAKLSAg
ICBBdHRyaWJ1dGVTdGF0ZSB2ZXJ0ZXhBdHRyaWJ1dGVbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKyAg
ICBWZXJ0ZXhBdHRyaWJ1dGUgdmVydGV4QXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107CiAg
ICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZT4gc2FtcGxlclRleHR1cmVbU0FNUExFUl9UWVBFX0NP
VU5UXVtNQVhfVEVYVFVSRV9JTUFHRV9VTklUU107CiAKICAgICBHTGludCB1bnBhY2tBbGlnbm1l
bnQ7CkBAIC0yNjQsNiArMjg5LDcgQEAgY2xhc3MgQ29udGV4dAogICAgIHZvaWQgc2V0TGluZVdp
ZHRoKEdMZmxvYXQgd2lkdGgpOwogCiAgICAgdm9pZCBzZXRHZW5lcmF0ZU1pcG1hcEhpbnQoR0xl
bnVtIGhpbnQpOworICAgIHZvaWQgc2V0RnJhZ21lbnRTaGFkZXJEZXJpdmF0aXZlSGludChHTGVu
dW0gaGludCk7CiAKICAgICB2b2lkIHNldFZpZXdwb3J0UGFyYW1zKEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIApAQCAtMjgwLDEzICszMDYsMTMgQEAg
Y2xhc3MgQ29udGV4dAogCiAgICAgR0x1aW50IGdldEFycmF5QnVmZmVySGFuZGxlKCkgY29uc3Q7
CiAKLSAgICB2b2lkIHNldFZlcnRleEF0dHJpYkVuYWJsZWQodW5zaWduZWQgaW50IGF0dHJpYk51
bSwgYm9vbCBlbmFibGVkKTsKLSAgICBjb25zdCBBdHRyaWJ1dGVTdGF0ZSAmZ2V0VmVydGV4QXR0
cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSk7CisgICAgdm9pZCBzZXRFbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpOworICAg
IGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmZ2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50
IGF0dHJpYk51bSk7CiAgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQg
YXR0cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVmZmVyLCBHTGludCBzaXplLCBHTGVudW0gdHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbm9ybWFsaXplZCwgR0xzaXplaSBz
dHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpOwogICAgIGNvbnN0IHZvaWQgKmdldFZlcnRleEF0
dHJpYlBvaW50ZXIodW5zaWduZWQgaW50IGF0dHJpYk51bSkgY29uc3Q7CiAKLSAgICBjb25zdCBB
dHRyaWJ1dGVTdGF0ZSAqZ2V0VmVydGV4QXR0cmliQmxvY2soKTsKKyAgICBjb25zdCBWZXJ0ZXhB
dHRyaWJ1dGVBcnJheSAmZ2V0VmVydGV4QXR0cmlidXRlcygpOwogCiAgICAgdm9pZCBzZXRVbnBh
Y2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKICAgICBHTGludCBnZXRVbnBhY2tBbGlnbm1l
bnQoKSBjb25zdDsKQEAgLTMxMiw2ICszMzgsMTAgQEAgY2xhc3MgQ29udGV4dAogICAgIEdMdWlu
dCBjcmVhdGVGcmFtZWJ1ZmZlcigpOwogICAgIHZvaWQgZGVsZXRlRnJhbWVidWZmZXIoR0x1aW50
IGZyYW1lYnVmZmVyKTsKIAorICAgIC8vIEZlbmNlcyBhcmUgb3duZWQgYnkgdGhlIENvbnRleHQu
CisgICAgR0x1aW50IGNyZWF0ZUZlbmNlKCk7CisgICAgdm9pZCBkZWxldGVGZW5jZShHTHVpbnQg
ZmVuY2UpOworCiAgICAgdm9pZCBiaW5kQXJyYXlCdWZmZXIoR0x1aW50IGJ1ZmZlcik7CiAgICAg
dm9pZCBiaW5kRWxlbWVudEFycmF5QnVmZmVyKEdMdWludCBidWZmZXIpOwogICAgIHZvaWQgYmlu
ZFRleHR1cmUyRChHTHVpbnQgdGV4dHVyZSk7CkBAIC0zMjgsNiArMzU4LDcgQEAgY2xhc3MgQ29u
dGV4dAogICAgIHZvaWQgc2V0VmVydGV4QXR0cmliKEdMdWludCBpbmRleCwgY29uc3QgR0xmbG9h
dCAqdmFsdWVzKTsKIAogICAgIEJ1ZmZlciAqZ2V0QnVmZmVyKEdMdWludCBoYW5kbGUpOworICAg
IEZlbmNlICpnZXRGZW5jZShHTHVpbnQgaGFuZGxlKTsKICAgICBTaGFkZXIgKmdldFNoYWRlcihH
THVpbnQgaGFuZGxlKTsKICAgICBQcm9ncmFtICpnZXRQcm9ncmFtKEdMdWludCBoYW5kbGUpOwog
ICAgIFRleHR1cmUgKmdldFRleHR1cmUoR0x1aW50IGhhbmRsZSk7CkBAIC0zNTEsMjAgKzM4Miwy
MiBAQCBjbGFzcyBDb250ZXh0CiAKICAgICBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdu
b3JlVmlld3BvcnQpOwogICAgIHZvaWQgYXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUpOwotICAg
IEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6
ZWkgY291bnQsIGJvb2wgKnVzZUluZGV4aW5nLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleElu
Zm8pOwotICAgIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihjb25zdCBUcmFuc2xhdGVkSW5kZXhE
YXRhICZpbmRleEluZm8pOworICAgIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihHTGludCBmaXJz
dCwgR0xzaXplaSBjb3VudCk7CiAgICAgR0xlbnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3Qgdm9p
ZCAqaW5kaWNlcywgR0xzaXplaSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFu
c2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOwotICAgIEdMZW51bSBhcHBseUNvdW50aW5nSW5k
ZXhCdWZmZXIoR0xlbnVtIG1vZGUsIEdMZW51bSBjb3VudCwgVHJhbnNsYXRlZEluZGV4RGF0YSAq
aW5kZXhJbmZvKTsKICAgICB2b2lkIGFwcGx5U2hhZGVycygpOwogICAgIHZvaWQgYXBwbHlUZXh0
dXJlcygpOwogCiAgICAgdm9pZCByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgdm9pZCog
cGl4ZWxzKTsKICAgICB2b2lkIGNsZWFyKEdMYml0ZmllbGQgbWFzayk7CiAgICAgdm9pZCBkcmF3
QXJyYXlzKEdMZW51bSBtb2RlLCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCk7Ci0gICAgdm9p
ZCBkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBj
b25zdCB2b2lkKiBpbmRpY2VzKTsKKyAgICB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwg
R0xzaXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMpOwogICAgIHZv
aWQgZmluaXNoKCk7CiAgICAgdm9pZCBmbHVzaCgpOwogCisJLy8gRHJhdyB0aGUgbGFzdCBzZWdt
ZW50IG9mIGEgbGluZSBsb29wCisgICAgdm9pZCBkcmF3Q2xvc2luZ0xpbmUodW5zaWduZWQgaW50
IGZpcnN0LCB1bnNpZ25lZCBpbnQgbGFzdCk7CisgICAgdm9pZCBkcmF3Q2xvc2luZ0xpbmUoR0xz
aXplaSBjb3VudCwgR0xlbnVtIHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMpOworCiAgICAgdm9p
ZCByZWNvcmRJbnZhbGlkRW51bSgpOwogICAgIHZvaWQgcmVjb3JkSW52YWxpZFZhbHVlKCk7CiAg
ICAgdm9pZCByZWNvcmRJbnZhbGlkT3BlcmF0aW9uKCk7CkBAIC0zNzQsMTAgKzQwNywyNiBAQCBj
bGFzcyBDb250ZXh0CiAgICAgR0xlbnVtIGdldEVycm9yKCk7CiAKICAgICBib29sIHN1cHBvcnRz
U2hhZGVyTW9kZWwzKCkgY29uc3Q7CisgICAgaW50IGdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygp
IGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtRnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0
OworICAgIGludCBnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgY29uc3Q7CisgICAg
aW50IGdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgY29uc3Q7CisgICAgaW50IGdldE1heGlt
dW1DdWJlVGV4dHVyZURpbWVuc2lvbigpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtVGV4dHVy
ZUxldmVsKCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkgY29u
c3Q7CiAgICAgaW50IGdldE5lYXJlc3RTdXBwb3J0ZWRTYW1wbGVzKEQzREZPUk1BVCBmb3JtYXQs
IGludCByZXF1ZXN0ZWQpIGNvbnN0OwogICAgIGNvbnN0IGNoYXIgKmdldEV4dGVuc2lvblN0cmlu
ZygpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNFdmVudFF1ZXJpZXMoKSBjb25zdDsKICAgICBi
b29sIHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0
c0Zsb2F0VGV4dHVyZXMoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzRmxvYXRMaW5lYXJGaWx0
ZXIoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzRmxvYXRSZW5kZXJhYmxlVGV4dHVyZXMoKSBj
b25zdDsKKyAgICBib29sIHN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSBjb25zdDsKKyAgICBi
b29sIHN1cHBvcnRzSGFsZkZsb2F0TGluZWFyRmlsdGVyKCkgY29uc3Q7CisgICAgYm9vbCBzdXBw
b3J0c0hhbGZGbG9hdFJlbmRlcmFibGVUZXh0dXJlcygpIGNvbnN0OworICAgIGJvb2wgc3VwcG9y
dHNMdW1pbmFuY2VUZXh0dXJlcygpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNMdW1pbmFuY2VB
bHBoYVRleHR1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0czMyYml0SW5kaWNlcygpIGNv
bnN0OwogCiAgICAgdm9pZCBibGl0RnJhbWVidWZmZXIoR0xpbnQgc3JjWDAsIEdMaW50IHNyY1kw
LCBHTGludCBzcmNYMSwgR0xpbnQgc3JjWTEsIAogICAgICAgICAgICAgICAgICAgICAgICAgIEdM
aW50IGRzdFgwLCBHTGludCBkc3RZMCwgR0xpbnQgZHN0WDEsIEdMaW50IGRzdFkxLApAQCAtNDA2
LDI1ICs0NTUsMjQgQEAgY2xhc3MgQ29udGV4dAogCiAgICAgU3RhdGUgICBtU3RhdGU7CiAKLSAg
ICBUZXh0dXJlMkQgKm1UZXh0dXJlMkRaZXJvOwotICAgIFRleHR1cmVDdWJlTWFwICptVGV4dHVy
ZUN1YmVNYXBaZXJvOwotCi0gICAgQ29sb3JidWZmZXIgKm1Db2xvcmJ1ZmZlclplcm87Ci0gICAg
RGVwdGhTdGVuY2lsYnVmZmVyICptRGVwdGhTdGVuY2lsYnVmZmVyWmVybzsKKyAgICBCaW5kaW5n
UG9pbnRlcjxUZXh0dXJlMkQ+IG1UZXh0dXJlMkRaZXJvOworICAgIEJpbmRpbmdQb2ludGVyPFRl
eHR1cmVDdWJlTWFwPiBtVGV4dHVyZUN1YmVNYXBaZXJvOwogCiAgICAgdHlwZWRlZiBzdGQ6Om1h
cDxHTHVpbnQsIEZyYW1lYnVmZmVyKj4gRnJhbWVidWZmZXJNYXA7CiAgICAgRnJhbWVidWZmZXJN
YXAgbUZyYW1lYnVmZmVyTWFwOwogCisgICAgdHlwZWRlZiBzdGQ6Om1hcDxHTHVpbnQsIEZlbmNl
Kj4gRmVuY2VNYXA7CisgICAgRmVuY2VNYXAgbUZlbmNlTWFwOworCiAgICAgdm9pZCBpbml0RXh0
ZW5zaW9uU3RyaW5nKCk7CiAgICAgc3RkOjpzdHJpbmcgbUV4dGVuc2lvblN0cmluZzsKIAotICAg
IEJ1ZmZlckJhY2tFbmQgKm1CdWZmZXJCYWNrRW5kOwogICAgIFZlcnRleERhdGFNYW5hZ2VyICpt
VmVydGV4RGF0YU1hbmFnZXI7CiAgICAgSW5kZXhEYXRhTWFuYWdlciAqbUluZGV4RGF0YU1hbmFn
ZXI7CiAKICAgICBCbGl0ICptQmxpdDsKICAgICAKLSAgICBUZXh0dXJlICptSW5jb21wbGV0ZVRl
eHR1cmVzW1NBTVBMRVJfVFlQRV9DT1VOVF07CisgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZT4g
bUluY29tcGxldGVUZXh0dXJlc1tTQU1QTEVSX1RZUEVfQ09VTlRdOwogCiAgICAgLy8gUmVjb3Jk
ZWQgZXJyb3JzCiAgICAgYm9vbCBtSW52YWxpZEVudW07CkBAIC00MzksMTEgKzQ4NywyNiBAQCBj
bGFzcyBDb250ZXh0CiAgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFs
OwogICAgIHVuc2lnbmVkIGludCBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsOwogICAgIHVuc2ln
bmVkIGludCBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWw7CisgICAgYm9vbCBtRGVwdGhTdGVu
Y2lsSW5pdGlhbGl6ZWQ7CiAKICAgICBib29sIG1TdXBwb3J0c1NoYWRlck1vZGVsMzsKKyAgICBp
bnQgIG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb247CisgICAgaW50ICBtTWF4VGV4dHVyZURpbWVu
c2lvbjsKKyAgICBpbnQgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsKKyAgICBpbnQgIG1NYXhU
ZXh0dXJlTGV2ZWw7CiAgICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+IG1NdWx0aVNhbXBs
ZVN1cHBvcnQ7CiAgICAgR0xzaXplaSBtTWF4U3VwcG9ydGVkU2FtcGxlczsKKyAgICBib29sIG1T
dXBwb3J0c0V2ZW50UXVlcmllczsKICAgICBib29sIG1TdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJl
czsKKyAgICBib29sIG1TdXBwb3J0c0Zsb2F0VGV4dHVyZXM7CisgICAgYm9vbCBtU3VwcG9ydHNG
bG9hdExpbmVhckZpbHRlcjsKKyAgICBib29sIG1TdXBwb3J0c0Zsb2F0UmVuZGVyYWJsZVRleHR1
cmVzOworICAgIGJvb2wgbVN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXM7CisgICAgYm9vbCBtU3Vw
cG9ydHNIYWxmRmxvYXRMaW5lYXJGaWx0ZXI7CisgICAgYm9vbCBtU3VwcG9ydHNIYWxmRmxvYXRS
ZW5kZXJhYmxlVGV4dHVyZXM7CisgICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlczsK
KyAgICBib29sIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7CisgICAgYm9vbCBtU3Vw
cG9ydHMzMmJpdEluZGljZXM7CiAKICAgICAvLyBzdGF0ZSBjYWNoaW5nIGZsYWdzCiAgICAgYm9v
bCBtQ2xlYXJTdGF0ZURpcnR5OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9GZW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9GZW5jZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL0ZlbmNlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
MzQgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUg
aXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQg
aW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vIEZlbmNlLmNwcDogSW1wbGVtZW50cyB0aGUg
Z2w6OkZlbmNlIGNsYXNzLCB3aGljaCBzdXBwb3J0cyB0aGUgR0xfTlZfZmVuY2UgZXh0ZW5zaW9u
LgorCisjaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCisKKyNpbmNsdWRlICJsaWJHTEVTdjIv
bWFpbi5oIgorCituYW1lc3BhY2UgZ2wKK3sKKworRmVuY2U6OkZlbmNlKCkKK3sgCisgICAgbVF1
ZXJ5ID0gTlVMTDsKKyAgICBtQ29uZGl0aW9uID0gR0xfTk9ORTsKKyAgICBtU3RhdHVzID0gR0xf
RkFMU0U7Cit9CisKK0ZlbmNlOjp+RmVuY2UoKQoreworICAgIGlmIChtUXVlcnkgIT0gTlVMTCkK
KyAgICB7CisgICAgICAgIG1RdWVyeS0+UmVsZWFzZSgpOworICAgICAgICBtUXVlcnkgPSBOVUxM
OworICAgIH0KK30KKworR0xib29sZWFuIEZlbmNlOjppc0ZlbmNlKCkKK3sKKyAgICAvLyBHTF9O
Vl9mZW5jZSBzcGVjOgorICAgIC8vIEEgbmFtZSByZXR1cm5lZCBieSBHZW5GZW5jZXNOViwgYnV0
IG5vdCB5ZXQgc2V0IHZpYSBTZXRGZW5jZU5WLCBpcyBub3QgdGhlIG5hbWUgb2YgYW4gZXhpc3Rp
bmcgZmVuY2UuCisgICAgcmV0dXJuIG1RdWVyeSAhPSBOVUxMOworfQorCit2b2lkIEZlbmNlOjpz
ZXRGZW5jZShHTGVudW0gY29uZGl0aW9uKQoreworICAgIGlmIChtUXVlcnkgIT0gTlVMTCkKKyAg
ICB7CisgICAgICAgIG1RdWVyeS0+UmVsZWFzZSgpOworICAgICAgICBtUXVlcnkgPSBOVUxMOwor
ICAgIH0KKworICAgIGlmIChGQUlMRUQoZ2V0RGV2aWNlKCktPkNyZWF0ZVF1ZXJ5KEQzRFFVRVJZ
VFlQRV9FVkVOVCwgJm1RdWVyeSkpKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09V
VF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIEhSRVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5Jc3N1
ZShEM0RJU1NVRV9FTkQpOworICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICBt
Q29uZGl0aW9uID0gY29uZGl0aW9uOworICAgIG1TdGF0dXMgPSBHTF9GQUxTRTsKK30KKworR0xi
b29sZWFuIEZlbmNlOjp0ZXN0RmVuY2UoKQoreworICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTiwgR0xfVFJVRSk7
CisgICAgfQorCisgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVlcnktPkdldERhdGEoTlVMTCwgMCwg
RDNER0VUREFUQV9GTFVTSCk7CisKKyAgICBpZiAocmVzdWx0ID09IEQzREVSUl9ERVZJQ0VMT1NU
KQorICAgIHsKKyAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xfVFJVRSk7
CisgICAgfQorCisgICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNF
KTsKKyAgICBtU3RhdHVzID0gcmVzdWx0ID09IFNfT0s7CisgICAgcmV0dXJuIG1TdGF0dXM7Cit9
CisKK3ZvaWQgRmVuY2U6OmZpbmlzaEZlbmNlKCkKK3sKKyAgICBpZiAobVF1ZXJ5ID09IE5VTEwp
CisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAg
IH0KKworICAgIHdoaWxlICghdGVzdEZlbmNlKCkpCisgICAgeworICAgICAgICBTbGVlcCgwKTsK
KyAgICB9Cit9CisKK3ZvaWQgRmVuY2U6OmdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGludCAq
cGFyYW1zKQoreworICAgIGlmIChtUXVlcnkgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgfQorCisgICAgc3dpdGNoIChwbmFt
ZSkKKyAgICB7CisgICAgICAgIGNhc2UgR0xfRkVOQ0VfU1RBVFVTX05WOgorICAgICAgICB7Cisg
ICAgICAgICAgICAvLyBHTF9OVl9mZW5jZSBzcGVjOgorICAgICAgICAgICAgLy8gT25jZSB0aGUg
c3RhdHVzIG9mIGEgZmVuY2UgaGFzIGJlZW4gZmluaXNoZWQgKHZpYSBGaW5pc2hGZW5jZU5WKSBv
ciB0ZXN0ZWQgYW5kIHRoZSByZXR1cm5lZCBzdGF0dXMgaXMgVFJVRSAodmlhIGVpdGhlciBUZXN0
RmVuY2VOVgorICAgICAgICAgICAgLy8gb3IgR2V0RmVuY2Vpdk5WIHF1ZXJ5aW5nIHRoZSBGRU5D
RV9TVEFUVVNfTlYpLCB0aGUgc3RhdHVzIHJlbWFpbnMgVFJVRSB1bnRpbCB0aGUgbmV4dCBTZXRG
ZW5jZU5WIG9mIHRoZSBmZW5jZS4KKyAgICAgICAgICAgIGlmIChtU3RhdHVzKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHBhcmFtc1swXSA9IEdMX1RSVUU7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1RdWVyeS0+R2V0RGF0YShOVUxMLCAwLCAwKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOworICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSBTX09LIHx8IHJlc3VsdCA9PSBTX0ZBTFNFKTsKKyAgICAg
ICAgICAgIG1TdGF0dXMgPSByZXN1bHQgPT0gU19PSzsKKyAgICAgICAgICAgIHBhcmFtc1swXSA9
IG1TdGF0dXM7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgR0xfRkVOQ0VfQ09ORElUSU9OX05WOgorICAgICAgICAgICAgcGFyYW1zWzBd
ID0gbUNvbmRpdGlvbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICB9Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvRmVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL0ZlbmNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL0ZlbmNlLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKy8v
CisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJ
Q0VOU0UgZmlsZS4KKy8vCisKKy8vIEZlbmNlLmg6IERlZmluZXMgdGhlIGdsOjpGZW5jZSBjbGFz
cywgd2hpY2ggc3VwcG9ydHMgdGhlIEdMX05WX2ZlbmNlIGV4dGVuc2lvbi4KKworI2lmbmRlZiBM
SUJHTEVTVjJfRkVOQ0VfSF8KKyNkZWZpbmUgTElCR0xFU1YyX0ZFTkNFX0hfCisKKyNkZWZpbmUg
R0xfQVBJQ0FMTAorI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgorI2luY2x1ZGUgPGQzZDkuaD4KKwor
I2luY2x1ZGUgImNvbW1vbi9hbmdsZXV0aWxzLmgiCisKK25hbWVzcGFjZSBnbAoreworCitjbGFz
cyBGZW5jZQoreworICBwdWJsaWM6CisgICAgRmVuY2UoKTsKKyAgICB2aXJ0dWFsIH5GZW5jZSgp
OworCisgICAgR0xib29sZWFuIGlzRmVuY2UoKTsKKyAgICB2b2lkIHNldEZlbmNlKEdMZW51bSBj
b25kaXRpb24pOworICAgIEdMYm9vbGVhbiB0ZXN0RmVuY2UoKTsKKyAgICB2b2lkIGZpbmlzaEZl
bmNlKCk7CisgICAgdm9pZCBnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcyk7
CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oRmVuY2UpOworCisg
ICAgSURpcmVjdDNEUXVlcnk5KiBtUXVlcnk7CisgICAgR0xlbnVtIG1Db25kaXRpb247CisgICAg
R0xib29sZWFuIG1TdGF0dXM7Cit9OworCit9CisKKyNlbmRpZiAgIC8vIExJQkdMRVNWMl9GRU5D
RV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1
ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9GcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwNSwxMyArMzA1LDMyIEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkKICAg
ICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQ7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoSXNUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUp
KQorICAgICAgICBpZiAobUNvbG9yYnVmZmVyVHlwZSA9PSBHTF9SRU5ERVJCVUZGRVIpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmICghZ2w6OklzQ29sb3JSZW5kZXJhYmxlKGNvbG9yYnVmZmVy
LT5nZXRGb3JtYXQoKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEdM
X0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVDsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlIGlmIChJc1RleHR1cmVUYXJnZXQobUNvbG9yYnVmZmVyVHlwZSkp
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQoY29sb3JidWZmZXItPmdl
dEZvcm1hdCgpKSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJB
TUVCVUZGRVJfVU5TVVBQT1JURUQ7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChj
b2xvcmJ1ZmZlci0+aXNGbG9hdGluZ1BvaW50KCkgJiYgKCFnZXRDb250ZXh0KCktPnN1cHBvcnRz
RmxvYXRSZW5kZXJhYmxlVGV4dHVyZXMoKSB8fCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICFnZXRDb250ZXh0KCktPnN1cHBvcnRzSGFsZkZsb2F0
UmVuZGVyYWJsZVRleHR1cmVzKCkpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKGNvbG9yYnVmZmVyLT5nZXRGb3JtYXQoKSA9PSBHTF9MVU1JTkFOQ0UgfHwgY29s
b3JidWZmZXItPmdldEZvcm1hdCgpID09IEdMX0xVTUlOQU5DRV9BTFBIQSkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCiAg
ICAgICAgIHdpZHRoID0gY29sb3JidWZmZXItPmdldFdpZHRoKCk7CiAgICAgICAgIGhlaWdodCA9
IGNvbG9yYnVmZmVyLT5nZXRIZWlnaHQoKTsKQEAgLTMyNyw2ICszNDYsMTEgQEAgR0xlbnVtIEZy
YW1lYnVmZmVyOjpjb21wbGV0ZW5lc3MoKQogCiAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgIT0g
R0xfTk9ORSkKICAgICB7CisgICAgICAgIGlmIChtRGVwdGhidWZmZXJUeXBlICE9IEdMX1JFTkRF
UkJVRkZFUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VO
U1VQUE9SVEVEOyAgIC8vIFJlcXVpcmVzIEdMX09FU19kZXB0aF90ZXh0dXJlCisgICAgICAgIH0K
KwogICAgICAgICBkZXB0aGJ1ZmZlciA9IGdldERlcHRoYnVmZmVyKCk7CiAKICAgICAgICAgaWYg
KCFkZXB0aGJ1ZmZlcikKQEAgLTM1NywxOCArMzgxLDE1IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6
Y29tcGxldGVuZXNzKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVfQU5HTEU7CiAgICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGlmIChJc1RleHR1cmVUYXJnZXQobURlcHRoYnVmZmVyVHlwZSkpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQoZGVwdGhidWZmZXItPmdldEZvcm1hdCgpKSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5T
VVBQT1JURUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobVN0
ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCiAgICAgeworICAgICAgICBpZiAobVN0ZW5jaWxi
dWZmZXJUeXBlICE9IEdMX1JFTkRFUkJVRkZFUikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICB9CisKICAgICAgICAgc3Rl
bmNpbGJ1ZmZlciA9IGdldFN0ZW5jaWxidWZmZXIoKTsKIAogICAgICAgICBpZiAoIXN0ZW5jaWxi
dWZmZXIpCkBAIC0zOTksMTQgKzQyMCw2IEBAIEdMZW51bSBGcmFtZWJ1ZmZlcjo6Y29tcGxldGVu
ZXNzKCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09N
UExFVEVfTVVMVElTQU1QTEVfQU5HTEU7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlm
IChJc1RleHR1cmVUYXJnZXQobVN0ZW5jaWxidWZmZXJUeXBlKSkKLSAgICAgICAgewotICAgICAg
ICAgICAgaWYgKElzQ29tcHJlc3NlZChzdGVuY2lsYnVmZmVyLT5nZXRGb3JtYXQoKSkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9S
VEVEOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG1EZXB0aGJ1
ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSICYmIG1TdGVuY2lsYnVmZmVyVHlwZSA9PSBHTF9S
RU5ERVJCVUZGRVIpCkBAIC00MjUsOCArNDM4LDggQEAgR0xlbnVtIEZyYW1lYnVmZmVyOjpjb21w
bGV0ZW5lc3MoKQogRGVmYXVsdEZyYW1lYnVmZmVyOjpEZWZhdWx0RnJhbWVidWZmZXIoQ29sb3Ji
dWZmZXIgKmNvbG9yLCBEZXB0aFN0ZW5jaWxidWZmZXIgKmRlcHRoU3RlbmNpbCkKIHsKICAgICBt
Q29sb3JidWZmZXJUeXBlID0gR0xfUkVOREVSQlVGRkVSOwotICAgIG1EZXB0aGJ1ZmZlclR5cGUg
PSBHTF9SRU5ERVJCVUZGRVI7Ci0gICAgbVN0ZW5jaWxidWZmZXJUeXBlID0gR0xfUkVOREVSQlVG
RkVSOworICAgIG1EZXB0aGJ1ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2lsLT5nZXREZXB0aFNpemUo
KSAhPSAwKSA/IEdMX1JFTkRFUkJVRkZFUiA6IEdMX05PTkU7CisgICAgbVN0ZW5jaWxidWZmZXJU
eXBlID0gKGRlcHRoU3RlbmNpbC0+Z2V0U3RlbmNpbFNpemUoKSAhPSAwKSA/IEdMX1JFTkRFUkJV
RkZFUiA6IEdMX05PTkU7CiAKICAgICBtQ29sb3JidWZmZXJQb2ludGVyLnNldChuZXcgUmVuZGVy
YnVmZmVyKDAsIGNvbG9yKSk7CiAKQEAgLTQ0OSw2ICs0NjIsOSBAQCBpbnQgRnJhbWVidWZmZXI6
OmdldFNhbXBsZXMoKQogCiBHTGVudW0gRGVmYXVsdEZyYW1lYnVmZmVyOjpjb21wbGV0ZW5lc3Mo
KQogeworICAgIC8vIFRoZSBkZWZhdWx0IGZyYW1lYnVmZmVyIHNob3VsZCBhbHdheXMgYmUgY29t
cGxldGUKKyAgICBBU1NFUlQoRnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpID09IEdMX0ZSQU1F
QlVGRkVSX0NPTVBMRVRFKTsKKwogICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9DT01QTEVURTsK
IH0KIApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1Byb2dyYW0uY3BwCShyZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAgVW5pZm9ybUxvY2F0aW9uOjpVbmlmb3JtTG9jYXRpb24oY29uc3QgcwogewogfQogCi1Qcm9n
cmFtOjpQcm9ncmFtKFJlc291cmNlTWFuYWdlciAqbWFuYWdlciwgR0x1aW50IGhhbmRsZSkgOiBt
UmVzb3VyY2VNYW5hZ2VyKG1hbmFnZXIpLCBtSGFuZGxlKGhhbmRsZSkKK1Byb2dyYW06OlByb2dy
YW0oUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVpbnQgaGFuZGxlKSA6IG1SZXNvdXJjZU1h
bmFnZXIobWFuYWdlciksIG1IYW5kbGUoaGFuZGxlKSwgbVNlcmlhbChpc3N1ZVNlcmlhbCgpKQog
ewogICAgIG1GcmFnbWVudFNoYWRlciA9IE5VTEw7CiAgICAgbVZlcnRleFNoYWRlciA9IE5VTEw7
CkBAIC02Myw4ICs2Myw2IEBAIFByb2dyYW06OlByb2dyYW0oUmVzb3VyY2VNYW5hZ2VyICptYW5h
Z2UKICAgICBtRGVsZXRlU3RhdHVzID0gZmFsc2U7CiAKICAgICBtUmVmQ291bnQgPSAwOwotCi0g
ICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFsKCk7CiB9CiAKIFByb2dyYW06On5Qcm9ncmFtKCkKQEAg
LTIwNSw3ICsyMDMsNyBAQCBHTGludCBQcm9ncmFtOjpnZXRTYW1wbGVyTWFwcGluZyh1bnNpZ25l
CiAgICAgICAgIGxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmxv
Z2ljYWxUZXh0dXJlVW5pdDsKICAgICB9CiAKLSAgICBpZiAobG9naWNhbFRleHR1cmVVbml0IDwg
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCisgICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA+PSAw
ICYmIGxvZ2ljYWxUZXh0dXJlVW5pdCA8IE1BWF9URVhUVVJFX0lNQUdFX1VOSVRTKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIGxvZ2ljYWxUZXh0dXJlVW5pdDsKICAgICB9CkBAIC0yNDMsMjYgKzI0
MSwyMiBAQCB2b2lkIFByb2dyYW06OnNldFNhbXBsZXJEaXJ0eSh1bnNpZ25lZCBpCiAKIEdMaW50
IFByb2dyYW06OmdldFVuaWZvcm1Mb2NhdGlvbihjb25zdCBjaGFyICpuYW1lLCBib29sIGRlY29y
YXRlZCkKIHsKLSAgICBzdGQ6OnN0cmluZyBuYW1lU3RyKG5hbWUpOworICAgIHN0ZDo6c3RyaW5n
IF9uYW1lID0gZGVjb3JhdGVkID8gbmFtZSA6IGRlY29yYXRlKG5hbWUpOwogICAgIGludCBzdWJz
Y3JpcHQgPSAwOwotICAgIHNpemVfdCBiZWdpbkIgPSBuYW1lU3RyLmZpbmQoJ1snKTsKLSAgICBz
aXplX3QgZW5kQiA9IG5hbWVTdHIuZmluZCgnXScpOwotICAgIGlmIChiZWdpbkIgIT0gc3RkOjpz
dHJpbmc6Om5wb3MgJiYgZW5kQiAhPSBzdGQ6OnN0cmluZzo6bnBvcykKLSAgICB7Ci0gICAgICAg
IHN0ZDo6c3RyaW5nIHN1YnNjclN0ciA9IG5hbWVTdHIuc3Vic3RyKGJlZ2luQiArIDEsIGJlZ2lu
QiAtIGVuZEIgLSAxKTsKLSAgICAgICAgbmFtZVN0ci5lcmFzZShiZWdpbkIpOwotICAgICAgICBz
dWJzY3JpcHQgPSBhdG9pKHN1YnNjclN0ci5jX3N0cigpKTsKLSAgICB9CiAKLSAgICBpZiAoIWRl
Y29yYXRlZCkKKyAgICAvLyBTdHJpcCBhbnkgdHJhaWxpbmcgYXJyYXkgb3BlcmF0b3IgYW5kIHJl
dHJpZXZlIHRoZSBzdWJzY3JpcHQKKyAgICBzaXplX3Qgb3BlbiA9IF9uYW1lLmZpbmRfbGFzdF9v
ZignWycpOworICAgIHNpemVfdCBjbG9zZSA9IF9uYW1lLmZpbmRfbGFzdF9vZignXScpOworICAg
IGlmIChvcGVuICE9IHN0ZDo6c3RyaW5nOjpucG9zICYmIGNsb3NlID09IF9uYW1lLmxlbmd0aCgp
IC0gMSkKICAgICB7Ci0gICAgICAgIG5hbWVTdHIgPSBkZWNvcmF0ZShuYW1lU3RyKTsKKyAgICAg
ICAgc3Vic2NyaXB0ID0gYXRvaShfbmFtZS5zdWJzdHIob3BlbiArIDEpLmNfc3RyKCkpOworICAg
ICAgICBfbmFtZS5lcmFzZShvcGVuKTsKICAgICB9CiAKICAgICB1bnNpZ25lZCBpbnQgbnVtVW5p
Zm9ybXMgPSBtVW5pZm9ybUluZGV4LnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBsb2Nh
dGlvbiA9IDA7IGxvY2F0aW9uIDwgbnVtVW5pZm9ybXM7IGxvY2F0aW9uKyspCiAgICAgewotICAg
ICAgICBpZiAobVVuaWZvcm1JbmRleFtsb2NhdGlvbl0ubmFtZSA9PSBuYW1lU3RyICYmCisgICAg
ICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09IF9uYW1lICYmCiAgICAgICAg
ICAgICBtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5lbGVtZW50ID09IHN1YnNjcmlwdCkKICAgICAg
ICAgewogICAgICAgICAgICAgcmV0dXJuIGxvY2F0aW9uOwpAQCAtNTk1LDcgKzU4OSw5IEBAIGJv
b2wgUHJvZ3JhbTo6c2V0VW5pZm9ybTFpdihHTGludCBsb2NhdGkKICAgICBVbmlmb3JtICp0YXJn
ZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmluZGV4XTsKICAg
ICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CiAKLSAgICBpZiAodGFyZ2V0VW5pZm9ybS0+
dHlwZSA9PSBHTF9JTlQpCisgICAgaWYgKHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfSU5UIHx8
CisgICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xfU0FNUExFUl8yRCB8fAorICAgICAg
ICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJfQ1VCRSkKICAgICB7CiAgICAgICAg
IGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJheVNpemU7CiAKQEAgLTk0OSw2ICs5
NDUsOCBAQCB2b2lkIFByb2dyYW06OmFwcGx5VW5pZm9ybXMoKQogICAgICAgICAgICAgICBjYXNl
IEdMX0ZMT0FUX01BVDI6IGFwcGx5VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgYXJyYXlTaXpl
LCBmKTsgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogYXBwbHlVbmlm
b3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyBicmVhazsKICAgICAgICAgICAg
ICAgY2FzZSBHTF9GTE9BVF9NQVQ0OiBhcHBseVVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGFy
cmF5U2l6ZSwgZik7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgogICAgICAgICAgICAgICBjYXNlIEdM
X0lOVDogICAgICAgIGFwcGx5VW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXlTaXplLCBpKTsgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3Jt
Mml2KGxvY2F0aW9uLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
Y2FzZSBHTF9JTlRfVkVDMzogICBhcHBseVVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5U2l6ZSwg
aSk7ICAgICAgIGJyZWFrOwpAQCAtMTAwMSw2ICs5OTksOSBAQCBJRDNEWEJ1ZmZlciAqUHJvZ3Jh
bTo6Y29tcGlsZVRvQmluYXJ5KGNvCiAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdXNlZCB2YXJ5
aW5nIHJlZ2lzdGVycywgb3IgLTEgaWYgdW5zdWNjZXNmdWwKIGludCBQcm9ncmFtOjpwYWNrVmFy
eWluZ3MoY29uc3QgVmFyeWluZyAqcGFja2luZ1tdWzRdKQogeworICAgIENvbnRleHQgKmNvbnRl
eHQgPSBnZXRDb250ZXh0KCk7CisgICAgY29uc3QgaW50IG1heFZhcnlpbmdWZWN0b3JzID0gY29u
dGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKCk7CisKICAgICBmb3IgKFZhcnlpbmdMaXN0
OjppdGVyYXRvciB2YXJ5aW5nID0gbUZyYWdtZW50U2hhZGVyLT52YXJ5aW5ncy5iZWdpbigpOyB2
YXJ5aW5nICE9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuZW5kKCk7IHZhcnlpbmcrKykKICAg
ICB7CiAgICAgICAgIGludCBuID0gVmFyaWFibGVSb3dDb3VudCh2YXJ5aW5nLT50eXBlKSAqIHZh
cnlpbmctPnNpemU7CkBAIC0xMDA5LDcgKzEwMTAsNyBAQCBpbnQgUHJvZ3JhbTo6cGFja1Zhcnlp
bmdzKGNvbnN0IFZhcnlpbmcgCiAKICAgICAgICAgaWYgKG0gPT0gMiB8fCBtID09IDMgfHwgbSA9
PSA0KQogICAgICAgICB7Ci0gICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8PSBNQVhfVkFS
WUlOR19WRUNUT1JTIC0gbiAmJiAhc3VjY2VzczsgcisrKQorICAgICAgICAgICAgZm9yIChpbnQg
ciA9IDA7IHIgPD0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuICYmICFzdWNjZXNzOyByKyspCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgYm9vbCBhdmFpbGFibGUgPSB0cnVlOwogCkBAIC0x
MDQzLDcgKzEwNDQsNyBAQCBpbnQgUHJvZ3JhbTo6cGFja1ZhcnlpbmdzKGNvbnN0IFZhcnlpbmcg
CiAKICAgICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBtID09IDIpCiAgICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgciA9IE1BWF9WQVJZSU5HX1ZFQ1RPUlMgLSBuOyByID49
IDAgJiYgIXN1Y2Nlc3M7IHItLSkKKyAgICAgICAgICAgICAgICBmb3IgKGludCByID0gbWF4VmFy
eWluZ1ZlY3RvcnMgLSBuOyByID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKIApAQCAtMTA4
MCw3ICsxMDgxLDcgQEAgaW50IFByb2dyYW06OnBhY2tWYXJ5aW5ncyhjb25zdCBWYXJ5aW5nIAog
ICAgICAgICB7CiAgICAgICAgICAgICBpbnQgc3BhY2VbNF0gPSB7MH07CiAKLSAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgTUFYX1ZBUllJTkdfVkVDVE9SUzsgeSsrKQorICAgICAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtYXhWYXJ5aW5nVmVjdG9yczsgeSsrKQogICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgNDsgeCsrKQogICAgICAg
ICAgICAgICAgIHsKQEAgLTExMDAsNyArMTEwMSw3IEBAIGludCBQcm9ncmFtOjpwYWNrVmFyeWlu
Z3MoY29uc3QgVmFyeWluZyAKIAogICAgICAgICAgICAgaWYgKHNwYWNlW2NvbHVtbl0gPiBuKQog
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwgTUFYX1ZB
UllJTkdfVkVDVE9SUzsgcisrKQorICAgICAgICAgICAgICAgIGZvciAoaW50IHIgPSAwOyByIDwg
bWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghcGFja2luZ1tyXVtjb2x1bW5dKQogICAgICAgICAgICAgICAgICAgICB7CkBA
IC0xMTMzLDcgKzExMzQsNyBAQCBpbnQgUHJvZ3JhbTo6cGFja1ZhcnlpbmdzKGNvbnN0IFZhcnlp
bmcgCiAgICAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgdXNlZCByZWdpc3RlcnMKICAgICBpbnQg
cmVnaXN0ZXJzID0gMDsKIAotICAgIGZvciAoaW50IHIgPSAwOyByIDwgTUFYX1ZBUllJTkdfVkVD
VE9SUzsgcisrKQorICAgIGZvciAoaW50IHIgPSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIr
KykKICAgICB7CiAgICAgICAgIGlmIChwYWNraW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0gfHwg
cGFja2luZ1tyXVsyXSB8fCBwYWNraW5nW3JdWzNdKQogICAgICAgICB7CkBAIC0xMTUxLDcgKzEx
NTIsNyBAQCBib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICB9CiAKLSAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5HX1ZFQ1RP
UlNdWzRdID0ge05VTEx9OworICAgIGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbTUFYX1ZBUllJTkdf
VkVDVE9SU19TTTNdWzRdID0ge05VTEx9OwogICAgIGludCByZWdpc3RlcnMgPSBwYWNrVmFyeWlu
Z3MocGFja2luZyk7CiAKICAgICBpZiAocmVnaXN0ZXJzIDwgMCkKQEAgLTExNTksNyArMTE2MCwx
MSBAQCBib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKLSAgICBpZiAocmVnaXN0ZXJzID09IE1BWF9WQVJZSU5HX1ZFQ1RPUlMgJiYgbUZy
YWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKKyAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0
Q29udGV4dCgpOworICAgIGNvbnN0IGJvb2wgc20zID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJN
b2RlbDMoKTsKKyAgICBjb25zdCBpbnQgbWF4VmFyeWluZ1ZlY3RvcnMgPSBjb250ZXh0LT5nZXRN
YXhpbXVtVmFyeWluZ1ZlY3RvcnMoKTsKKworICAgIGlmIChyZWdpc3RlcnMgPT0gbWF4VmFyeWlu
Z1ZlY3RvcnMgJiYgbUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKICAgICB7CiAgICAg
ICAgIGFwcGVuZFRvSW5mb0xvZygiTm8gdmFyeWluZyByZWdpc3RlcnMgbGVmdCB0byBzdXBwb3J0
IGdsX0ZyYWdDb29yZCIpOwogCkBAIC0xMTk3LDggKzEyMDIsNiBAQCBib29sIFByb2dyYW06Omxp
bmtWYXJ5aW5ncygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBDb250ZXh0ICpjb250ZXh0ID0g
Z2V0Q29udGV4dCgpOwotICAgIGJvb2wgc20zID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2Rl
bDMoKTsKICAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAoc20zID8gIkNPTE9SIiA6
ICJURVhDT09SRCIpOwogCiAgICAgbVZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgpA
QCAtMTM3MSw2ICsxMzc0LDkgQEAgYm9vbCBQcm9ncmFtOjpsaW5rVmFyeWluZ3MoKQogICAgIGlm
IChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQogICAgIHsKICAgICAgICAgbVBpeGVs
SExTTCArPSAiICAgIGZsb2F0NCBnbF9GcmFnQ29vcmQgOiAiICsgdmFyeWluZ1NlbWFudGljICsg
c3RyKHJlZ2lzdGVycykgKyAiO1xuIjsKKyAgICAgICAgaWYgKHNtMykgeworICAgICAgICAgICAg
bVBpeGVsSExTTCArPSAiICAgIGZsb2F0MiBkeF9WUG9zIDogVlBPUztcbiI7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc1BvaW50Q29vcmQgJiYgc20z
KQpAQCAtMTM5NSwxMCArMTQwMSwxNSBAQCBib29sIFByb2dyYW06OmxpbmtWYXJ5aW5ncygpCiAK
ICAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdDb29yZCkKICAgICB7Ci0gICAgICAg
IG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdCByaHcgPSAxLjAgLyBpbnB1dC5nbF9GcmFnQ29vcmQu
dztcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC54ID0gKGlucHV0
LmdsX0ZyYWdDb29yZC54ICogcmh3KSAqIGR4X1ZpZXdwb3J0LnggKyBkeF9WaWV3cG9ydC56O1xu
IgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSAoaW5wdXQuZ2xf
RnJhZ0Nvb3JkLnkgKiByaHcpICogZHhfVmlld3BvcnQueSArIGR4X1ZpZXdwb3J0Lnc7XG4iCi0g
ICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueiA9IChpbnB1dC5nbF9GcmFn
Q29vcmQueiAqIHJodykgKiBkeF9EZXB0aC54ICsgZHhfRGVwdGgueTtcbiIKKyAgICAgICAgbVBp
eGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdDb29yZC53O1xu
IjsKKyAgICAgICAgaWYgKHNtMykgeworICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGds
X0ZyYWdDb29yZC54ID0gaW5wdXQuZHhfVlBvcy54O1xuIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0gaW5wdXQuZHhfVlBvcy55O1xuIjsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBnbF9GcmFnQ29vcmQueCA9
IChpbnB1dC5nbF9GcmFnQ29vcmQueCAqIHJodykgKiBkeF9WaWV3cG9ydC54ICsgZHhfVmlld3Bv
cnQuejtcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9
IChpbnB1dC5nbF9GcmFnQ29vcmQueSAqIHJodykgKiBkeF9WaWV3cG9ydC55ICsgZHhfVmlld3Bv
cnQudztcbiI7CisgICAgICAgIH0KKyAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdD
b29yZC56ID0gKGlucHV0LmdsX0ZyYWdDb29yZC56ICogcmh3KSAqIGR4X0RlcHRoLnggKyBkeF9E
ZXB0aC55O1xuIgogICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLncgPSBy
aHc7XG4iOwogICAgIH0KIApAQCAtMTUyNSw5ICsxNTM2LDcgQEAgdm9pZCBQcm9ncmFtOjpsaW5r
KCkKIAogICAgICAgICAgICAgLy8gdGhlc2UgdW5pZm9ybXMgYXJlIHNlYXJjaGVkIGFzIGFscmVh
ZHktZGVjb3JhdGVkIGJlY2F1c2UgZ2xfIGFuZCBkeF8KICAgICAgICAgICAgIC8vIGFyZSByZXNl
cnZlZCBwcmVmaXhlcywgYW5kIGRvIG5vdCByZWNlaXZlIGFkZGl0aW9uYWwgZGVjb3JhdGlvbgot
ICAgICAgICAgICAgbURlcHRoUmFuZ2VOZWFyTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24o
ImdsX0RlcHRoUmFuZ2UubmVhciIsIHRydWUpOwotICAgICAgICAgICAgbURlcHRoUmFuZ2VGYXJM
b2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZ2xfRGVwdGhSYW5nZS5mYXIiLCB0cnVlKTsK
LSAgICAgICAgICAgIG1EZXB0aFJhbmdlRGlmZkxvY2F0aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9u
KCJnbF9EZXB0aFJhbmdlLmRpZmYiLCB0cnVlKTsKKyAgICAgICAgICAgIG1EeERlcHRoUmFuZ2VM
b2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGhSYW5nZSIsIHRydWUpOwogICAg
ICAgICAgICAgbUR4RGVwdGhMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfRGVwdGgi
LCB0cnVlKTsKICAgICAgICAgICAgIG1EeFZpZXdwb3J0TG9jYXRpb24gPSBnZXRVbmlmb3JtTG9j
YXRpb24oImR4X1ZpZXdwb3J0IiwgdHJ1ZSk7CiAgICAgICAgICAgICBtRHhIYWxmUGl4ZWxTaXpl
TG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImR4X0hhbGZQaXhlbFNpemUiLCB0cnVlKTsK
QEAgLTE2NTAsMzIgKzE2NTksMzggQEAgYm9vbCBQcm9ncmFtOjpkZWZpbmVVbmlmb3JtKGNvbnN0
IEQzRFhIQQogewogICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQz
RFhSU19TQU1QTEVSKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9
IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsKLQotICAgICAgICBhc3NlcnQoc2Ft
cGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVycykvc2l6ZW9mKG1TYW1wbGVyc1swXSkpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBjb25zdGFudERlc2NyaXB0aW9u
LlJlZ2lzdGVySW5kZXg7IHNhbXBsZXJJbmRleCA8IGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0
ZXJJbmRleCArIGNvbnN0YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJDb3VudDsgc2FtcGxlckluZGV4
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChzYW1wbGVySW5kZXggPCBzaXplb2Yo
bVNhbXBsZXJzKS9zaXplb2YobVNhbXBsZXJzWzBdKSk7CiAKLSAgICAgICAgbVNhbXBsZXJzW3Nh
bXBsZXJJbmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgbVNhbXBsZXJzW3NhbXBsZXJJbmRl
eF0udHlwZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJF
KSA/IFNBTVBMRVJfQ1VCRSA6IFNBTVBMRVJfMkQ7Ci0gICAgICAgIG1TYW1wbGVyc1tzYW1wbGVy
SW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7Ci0gICAgICAgIG1TYW1wbGVyc1tzYW1wbGVy
SW5kZXhdLmRpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhd
LmFjdGl2ZSA9IHRydWU7CisgICAgICAgICAgICBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS50eXBl
ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gU0FN
UExFUl9DVUJFIDogU0FNUExFUl8yRDsKKyAgICAgICAgICAgIG1TYW1wbGVyc1tzYW1wbGVySW5k
ZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7CisgICAgICAgICAgICBtU2FtcGxlcnNbc2FtcGxl
ckluZGV4XS5kaXJ0eSA9IHRydWU7CisgICAgICAgIH0KICAgICB9CiAKICAgICBzd2l0Y2goY29u
c3RhbnREZXNjcmlwdGlvbi5DbGFzcykKICAgICB7CiAgICAgICBjYXNlIEQzRFhQQ19TVFJVQ1Q6
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkID0gMDsgZmll
bGQgPCBjb25zdGFudERlc2NyaXB0aW9uLlN0cnVjdE1lbWJlcnM7IGZpZWxkKyspCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBhcnJheUluZGV4ID0gMDsgYXJyYXlJbmRleCA8IGNvbnN0
YW50RGVzY3JpcHRpb24uRWxlbWVudHM7IGFycmF5SW5kZXgrKykKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBEM0RYSEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+
R2V0Q29uc3RhbnQoY29uc3RhbnRIYW5kbGUsIGZpZWxkKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBmaWVsZCA9IDA7IGZpZWxkIDwgY29uc3RhbnREZXNjcmlwdGlvbi5TdHJ1
Y3RNZW1iZXJzOyBmaWVsZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgRDNEWEhBTkRMRSBmaWVsZEhhbmRsZSA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50
KGNvbnN0YW50SGFuZGxlLCBmaWVsZCk7CiAKLSAgICAgICAgICAgICAgICBEM0RYQ09OU1RBTlRf
REVTQyBmaWVsZERlc2NyaXB0aW9uOwotICAgICAgICAgICAgICAgIFVJTlQgZGVzY3JpcHRpb25D
b3VudCA9IDE7CisgICAgICAgICAgICAgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGZpZWxkRGVz
Y3JpcHRpb247CisgICAgICAgICAgICAgICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7
CiAKLSAgICAgICAgICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudERlc2MoZmll
bGRIYW5kbGUsICZmaWVsZERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7CisgICAgICAg
ICAgICAgICAgICAgIG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50RGVzYyhmaWVsZEhhbmRs
ZSwgJmZpZWxkRGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKIAotICAgICAgICAgICAg
ICAgIGlmICghZGVmaW5lVW5pZm9ybShmaWVsZEhhbmRsZSwgZmllbGREZXNjcmlwdGlvbiwgbmFt
ZSArIGNvbnN0YW50RGVzY3JpcHRpb24uTmFtZSArICIuIikpCi0gICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHN0
ZDo6c3RyaW5nIHN0cnVjdEluZGV4ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMgPiAx
KSA/ICgiWyIgKyBzdHIoYXJyYXlJbmRleCkgKyAiXSIpIDogIiI7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFkZWZpbmVVbmlmb3JtKGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBu
YW1lICsgY29uc3RhbnREZXNjcmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAiLiIpKQorICAg
ICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAKQEAgLTE3MzcsMTAgKzE3NTIsMTYgQEAgVW5pZm9ybSAqUHJvZ3JhbTo6Y3JlYXRlVW5pZm9y
bShjb25zdCBEMwogICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uVHlwZSkKICAg
ICAgICAgewogICAgICAgICAgIGNhc2UgRDNEWFBUX1NBTVBMRVIyRDoKKyAgICAgICAgICAgIHN3
aXRjaCAoY29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9TQU1QTEVSXzJELCBuYW1lLCBj
b25zdGFudERlc2NyaXB0aW9uLkVsZW1lbnRzKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDogVU5S
RUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
IGNhc2UgRDNEWFBUX1NBTVBMRVJDVUJFOgogICAgICAgICAgICAgc3dpdGNoIChjb25zdGFudERl
c2NyaXB0aW9uLkNvbHVtbnMpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIGNhc2UgMTog
cmV0dXJuIG5ldyBVbmlmb3JtKEdMX0lOVCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVt
ZW50cyk7CisgICAgICAgICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBVbmlmb3JtKEdMX1NBTVBM
RVJfQ1VCRSwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CiAgICAgICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTIyMDUsMTQgKzIyMjYsMTQgQEAgYm9vbCBQcm9ncmFtOjphcHBseVVuaWZvcm0x
aXYoR0xpbnQgbG9jYQogICAgICAgICB7CiAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmlyc3RJ
bmRleCA9IG1Db25zdGFudFRhYmxlUFMtPkdldFNhbXBsZXJJbmRleChjb25zdGFudFBTKTsKIAot
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleDsg
c2FtcGxlckluZGV4IDwgZmlyc3RJbmRleCArIGNvdW50OyBzYW1wbGVySW5kZXgrKykKKyAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBHTGludCBtYXBwZWRTYW1wbGVyID0gdlswXTsKKyAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBpbnQgc2FtcGxlckluZGV4ID0gZmlyc3RJbmRleCArIGk7CiAKLSAgICAgICAg
ICAgICAgICBpZiAoc2FtcGxlckluZGV4ID49IDAgJiYgc2FtcGxlckluZGV4IDwgTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFMpCisgICAgICAgICAgICAgICAgaWYgKHNhbXBsZXJJbmRleCA8IE1BWF9U
RVhUVVJFX0lNQUdFX1VOSVRTKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmFjdGl2ZSk7Ci0gICAgICAgICAgICAg
ICAgICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmxvZ2ljYWxUZXh0dXJlVW5pdCA9IG1hcHBl
ZFNhbXBsZXI7CisgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmxv
Z2ljYWxUZXh0dXJlVW5pdCA9IHZbaV07CiAgICAgICAgICAgICAgICAgICAgIG1TYW1wbGVyc1tz
YW1wbGVySW5kZXhdLmRpcnR5ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CkBAIC0yMzcxLDYgKzIzOTIsNyBAQCB2b2lkIFByb2dyYW06OnJlc2V0SW5mb0xvZygpCiAg
ICAgaWYgKG1JbmZvTG9nKQogICAgIHsKICAgICAgICAgZGVsZXRlIFtdIG1JbmZvTG9nOworICAg
ICAgICBtSW5mb0xvZyA9IE5VTEw7CiAgICAgfQogfQogCkBAIC0yNDM0LDkgKzI0NTYsNyBAQCB2
b2lkIFByb2dyYW06OnVubGluayhib29sIGRlc3Ryb3kpCiAgICAgICAgIG1Vbmlmb3Jtcy5wb3Bf
YmFjaygpOwogICAgIH0KIAotICAgIG1EZXB0aFJhbmdlRGlmZkxvY2F0aW9uID0gLTE7Ci0gICAg
bURlcHRoUmFuZ2VOZWFyTG9jYXRpb24gPSAtMTsKLSAgICBtRGVwdGhSYW5nZUZhckxvY2F0aW9u
ID0gLTE7CisgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gLTE7CiAgICAgbUR4RGVwdGhMb2Nh
dGlvbiA9IC0xOwogICAgIG1EeFZpZXdwb3J0TG9jYXRpb24gPSAtMTsKICAgICBtRHhIYWxmUGl4
ZWxTaXplTG9jYXRpb24gPSAtMTsKQEAgLTI1NjIsMTYgKzI1ODIsMjIgQEAgdm9pZCBQcm9ncmFt
OjpnZXRBdHRhY2hlZFNoYWRlcnMoR0xzaXplaQogCiB2b2lkIFByb2dyYW06OmdldEFjdGl2ZUF0
dHJpYnV0ZShHTHVpbnQgaW5kZXgsIEdMc2l6ZWkgYnVmc2l6ZSwgR0xzaXplaSAqbGVuZ3RoLCBH
TGludCAqc2l6ZSwgR0xlbnVtICp0eXBlLCBHTGNoYXIgKm5hbWUpCiB7Ci0gICAgdW5zaWduZWQg
aW50IGF0dHJpYnV0ZSA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpbmRl
eDsgaSsrKQorICAgIC8vIFNraXAgb3ZlciBpbmFjdGl2ZSBhdHRyaWJ1dGVzCisgICAgdW5zaWdu
ZWQgaW50IGFjdGl2ZUF0dHJpYnV0ZSA9IDA7CisgICAgdW5zaWduZWQgaW50IGF0dHJpYnV0ZTsK
KyAgICBmb3IgKGF0dHJpYnV0ZSA9IDA7IGF0dHJpYnV0ZSA8IE1BWF9WRVJURVhfQVRUUklCUzsg
YXR0cmlidXRlKyspCiAgICAgewotICAgICAgICBkbworICAgICAgICBpZiAobUxpbmtlZEF0dHJp
YnV0ZVthdHRyaWJ1dGVdLm5hbWUuZW1wdHkoKSkKICAgICAgICAgewotICAgICAgICAgICAgYXR0
cmlidXRlKys7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCi0gICAgICAgICAg
ICBBU1NFUlQoYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTKTsgICAvLyBpbmRleCBtdXN0
IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVBdHRyaWJ1dGVDb3VudCgpCisgICAgICAgIGlmIChh
Y3RpdmVBdHRyaWJ1dGUgPT0gaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFt
ZS5lbXB0eSgpKTsKKworICAgICAgICBhY3RpdmVBdHRyaWJ1dGUrKzsKICAgICB9CiAKICAgICBp
ZiAoYnVmc2l6ZSA+IDApCkBAIC0yNjI0LDE4ICsyNjUwLDI2IEBAIEdMaW50IFByb2dyYW06Omdl
dEFjdGl2ZUF0dHJpYnV0ZU1heExlbmcKIAogdm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3Jt
KEdMdWludCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpz
aXplLCBHTGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgdW5p
Zm9ybSA9IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKQor
ICAgIC8vIFNraXAgb3ZlciBpbnRlcm5hbCB1bmlmb3JtcworICAgIHVuc2lnbmVkIGludCBhY3Rp
dmVVbmlmb3JtID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybTsKKyAgICBmb3IgKHVuaWZv
cm0gPSAwOyB1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybSsrKQogICAgIHsKLSAg
ICAgICAgZG8KKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5zdWJzdHIoMCwg
MykgPT0gImR4XyIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuaWZvcm0rKzsKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICB9CiAKLSAgICAgICAgICAgIEFTU0VSVCh1bmlmb3JtIDwg
bVVuaWZvcm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0
aXZlVW5pZm9ybUNvdW50KCkKKyAgICAgICAgaWYgKGFjdGl2ZVVuaWZvcm0gPT0gaW5kZXgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHdoaWxlICht
VW5pZm9ybXNbdW5pZm9ybV0tPm5hbWUuc3Vic3RyKDAsIDMpID09ICJkeF8iKTsKKworICAgICAg
ICBhY3RpdmVVbmlmb3JtKys7CiAgICAgfQogCisgICAgQVNTRVJUKHVuaWZvcm0gPCBtVW5pZm9y
bXMuc2l6ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlm
b3JtQ291bnQoKQorCiAgICAgaWYgKGJ1ZnNpemUgPiAwKQogICAgIHsKICAgICAgICAgc3RkOjpz
dHJpbmcgc3RyaW5nID0gdW5kZWNvcmF0ZShtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWUpOwpAQCAt
Mjc2MywxOSArMjc5Nyw5IEBAIHZvaWQgUHJvZ3JhbTo6Z2V0Q29uc3RhbnRIYW5kbGVzKFVuaWZv
cm0KICAgICAqY29uc3RhbnRWUyA9IHRhcmdldFVuaWZvcm0tPnZzSGFuZGxlOwogfQogCi1HTGlu
dCBQcm9ncmFtOjpnZXREZXB0aFJhbmdlRGlmZkxvY2F0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbURlcHRoUmFuZ2VEaWZmTG9jYXRpb247Ci19Ci0KLUdMaW50IFByb2dyYW06OmdldERlcHRo
UmFuZ2VOZWFyTG9jYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtRGVwdGhSYW5nZU5lYXJM
b2NhdGlvbjsKLX0KLQotR0xpbnQgUHJvZ3JhbTo6Z2V0RGVwdGhSYW5nZUZhckxvY2F0aW9uKCkg
Y29uc3QKK0dMaW50IFByb2dyYW06OmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbURlcHRoUmFuZ2VGYXJMb2NhdGlvbjsKKyAgICByZXR1cm4gbUR4RGVwdGhS
YW5nZUxvY2F0aW9uOwogfQogCiBHTGludCBQcm9ncmFtOjpnZXREeERlcHRoTG9jYXRpb24oKSBj
b25zdApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Qcm9ncmFt
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Q
cm9ncmFtLmgJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9Qcm9ncmFtLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDkgKzk0LDcgQEAgY2xh
c3MgUHJvZ3JhbQogICAgIGJvb2wgZ2V0VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0
ICpwYXJhbXMpOwogICAgIGJvb2wgZ2V0VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTGludCAq
cGFyYW1zKTsKIAotICAgIEdMaW50IGdldERlcHRoUmFuZ2VEaWZmTG9jYXRpb24oKSBjb25zdDsK
LSAgICBHTGludCBnZXREZXB0aFJhbmdlTmVhckxvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQg
Z2V0RGVwdGhSYW5nZUZhckxvY2F0aW9uKCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhEZXB0aFJh
bmdlTG9jYXRpb24oKSBjb25zdDsKICAgICBHTGludCBnZXREeERlcHRoTG9jYXRpb24oKSBjb25z
dDsKICAgICBHTGludCBnZXREeFZpZXdwb3J0TG9jYXRpb24oKSBjb25zdDsKICAgICBHTGludCBn
ZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpIGNvbnN0OwpAQCAtMjA0LDkgKzIwMiw3IEBAIGNs
YXNzIFByb2dyYW0KICAgICB0eXBlZGVmIHN0ZDo6dmVjdG9yPFVuaWZvcm1Mb2NhdGlvbj4gVW5p
Zm9ybUluZGV4OwogICAgIFVuaWZvcm1JbmRleCBtVW5pZm9ybUluZGV4OwogCi0gICAgR0xpbnQg
bURlcHRoUmFuZ2VEaWZmTG9jYXRpb247Ci0gICAgR0xpbnQgbURlcHRoUmFuZ2VOZWFyTG9jYXRp
b247Ci0gICAgR0xpbnQgbURlcHRoUmFuZ2VGYXJMb2NhdGlvbjsKKyAgICBHTGludCBtRHhEZXB0
aFJhbmdlTG9jYXRpb247CiAgICAgR0xpbnQgbUR4RGVwdGhMb2NhdGlvbjsKICAgICBHTGludCBt
RHhWaWV3cG9ydExvY2F0aW9uOwogICAgIEdMaW50IG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbjsK
QEAgLTIyMCw3ICsyMTYsNyBAQCBjbGFzcyBQcm9ncmFtCiAKICAgICB1bnNpZ25lZCBpbnQgbVJl
ZkNvdW50OwogCi0gICAgdW5zaWduZWQgaW50IG1TZXJpYWw7CisgICAgY29uc3QgdW5zaWduZWQg
aW50IG1TZXJpYWw7CiAKICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1DdXJyZW50U2VyaWFsOwog
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlZkNvdW50T2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL1JlZkNvdW50T2JqZWN0LmNwcAkocmV2aXNpb24gNzU4MDEpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlZkNvdW50T2JqZWN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjIsNiArMjIsNyBAQCBSZWZDb3VudE9iamVjdDo6UmVmQ291bnRPYmplY3QoR0x1aW50
IGlkCiAKIFJlZkNvdW50T2JqZWN0Ojp+UmVmQ291bnRPYmplY3QoKQogeworICAgIEFTU0VSVCht
UmVmQ291bnQgPT0gMCk7CiB9CiAKIHZvaWQgUmVmQ291bnRPYmplY3Q6OmFkZFJlZigpIGNvbnN0
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9SZW5kZXJidWZmZXIuY3BwCShyZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTEsNiArMTEsNyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKIAogI2lu
Y2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIK
ICNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCiAKIG5hbWVzcGFjZSBnbApAQCAtODYs
OSArODcsMTMgQEAgdm9pZCBSZW5kZXJidWZmZXI6OnNldFN0b3JhZ2UoUmVuZGVyYnVmZgogICAg
IG1TdG9yYWdlID0gbmV3U3RvcmFnZTsKIH0KIAotUmVuZGVyYnVmZmVyU3RvcmFnZTo6UmVuZGVy
YnVmZmVyU3RvcmFnZSgpCitSZW5kZXJidWZmZXJTdG9yYWdlOjpSZW5kZXJidWZmZXJTdG9yYWdl
KCkgOiBtU2VyaWFsKGlzc3VlU2VyaWFsKCkpCiB7Ci0gICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFs
KCk7CisgICAgbVdpZHRoID0gMDsKKyAgICBtSGVpZ2h0ID0gMDsKKyAgICBtRm9ybWF0ID0gR0xf
UkdCQTQ7CisgICAgbUQzREZvcm1hdCA9IEQzREZNVF9BOFI4RzhCODsKKyAgICBtU2FtcGxlcyA9
IDA7CiB9CiAKIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6On5SZW5kZXJidWZmZXJTdG9yYWdlKCkKQEAg
LTE0MSw2ICsxNDYsMTEgQEAgR0xlbnVtIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6OmdldEZvcm1hdCgp
IAogICAgIHJldHVybiBtRm9ybWF0OwogfQogCitib29sIFJlbmRlcmJ1ZmZlclN0b3JhZ2U6Omlz
RmxvYXRpbmdQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOyAvLyBubyBmbG9hdGlu
ZyBwb2ludCByZW5kZXJidWZmZXJzIAorfQorCiBEM0RGT1JNQVQgUmVuZGVyYnVmZmVyU3RvcmFn
ZTo6Z2V0RDNERm9ybWF0KCkgY29uc3QKIHsKICAgICByZXR1cm4gbUQzREZvcm1hdDsKQEAgLTE3
MSwxNCArMTgxLDE3IEBAIENvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWMK
ICAgICAgICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7CiAKICAgICAgICAg
c2V0U2l6ZShkZXNjcmlwdGlvbi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0KTsKKyAgICAgICAg
bUZvcm1hdCA9IGR4MmVzOjpDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChkZXNjcmlwdGlvbi5Gb3Jt
YXQpOwogICAgICAgICBtRDNERm9ybWF0ID0gZGVzY3JpcHRpb24uRm9ybWF0OwogICAgICAgICBt
U2FtcGxlcyA9IGVzMmR4OjpHZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlv
bi5NdWx0aVNhbXBsZVR5cGUpOwogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtRDNE
Rm9ybWF0ID0gRDNERk1UX1VOS05PV047Ci0gICAgICAgIG1TYW1wbGVzID0gMDsKLSAgICB9Cit9
CisKK0NvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihjb25zdCBUZXh0dXJlKiB0ZXh0dXJlKSA6IG1S
ZW5kZXJUYXJnZXQoTlVMTCkKK3sKKyAgICBzZXRTaXplKHRleHR1cmUtPmdldFdpZHRoKCksIHRl
eHR1cmUtPmdldEhlaWdodCgpKTsKKyAgICBtRDNERm9ybWF0ID0gdGV4dHVyZS0+Z2V0RDNERm9y
bWF0KCk7CisgICAgbVNhbXBsZXMgPSAwOwogfQogCiBDb2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCkBA
IC0yMTgsMTMgKzIzMSw2IEBAIENvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcihpbnQgd2lkdGgsIGlu
dCAKICAgICAgICAgbUQzREZvcm1hdCA9IHJlcXVlc3RlZEZvcm1hdDsKICAgICAgICAgbVNhbXBs
ZXMgPSBzdXBwb3J0ZWRTYW1wbGVzOwogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBz
ZXRTaXplKDAsIDApOwotICAgICAgICBtRm9ybWF0ID0gR0xfUkdCQTQ7Ci0gICAgICAgIG1EM0RG
b3JtYXQgPSBEM0RGTVRfVU5LTk9XTjsKLSAgICAgICAgbVNhbXBsZXMgPSAwOwotICAgIH0KIH0K
IAogQ29sb3JidWZmZXI6On5Db2xvcmJ1ZmZlcigpCkBAIC0zMDcsMTUgKzMxMywxMCBAQCBEZXB0
aFN0ZW5jaWxidWZmZXI6OkRlcHRoU3RlbmNpbGJ1ZmZlcihJCiAgICAgICAgIGRlcHRoU3RlbmNp
bC0+R2V0RGVzYygmZGVzY3JpcHRpb24pOwogCiAgICAgICAgIHNldFNpemUoZGVzY3JpcHRpb24u
V2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdodCk7Ci0gICAgICAgIG1Gb3JtYXQgPSAoZGVzY3JpcHRp
b24uRm9ybWF0ID09IEQzREZNVF9EMTYgPyBHTF9ERVBUSF9DT01QT05FTlQxNiA6IEdMX0RFUFRI
MjRfU1RFTkNJTDhfT0VTKTsKKyAgICAgICAgbUZvcm1hdCA9IGR4MmVzOjpDb252ZXJ0RGVwdGhT
dGVuY2lsRm9ybWF0KGRlc2NyaXB0aW9uLkZvcm1hdCk7CiAgICAgICAgIG1TYW1wbGVzID0gZXMy
ZHg6OkdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKGRlc2NyaXB0aW9uLk11bHRpU2FtcGxl
VHlwZSk7IAogICAgICAgICBtRDNERm9ybWF0ID0gZGVzY3JpcHRpb24uRm9ybWF0OwogICAgIH0K
LSAgICBlbHNlCi0gICAgewotICAgICAgICBtRDNERm9ybWF0ID0gRDNERk1UX1VOS05PV047IAot
ICAgICAgICBtU2FtcGxlcyA9IDA7Ci0gICAgfQogfQogCiBEZXB0aFN0ZW5jaWxidWZmZXI6OkRl
cHRoU3RlbmNpbGJ1ZmZlcihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMc2l6ZWkgc2FtcGxlcykK
QEAgLTM1MiwxMyArMzUzLDYgQEAgRGVwdGhTdGVuY2lsYnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZm
ZXIoaQogICAgICAgICBtRDNERm9ybWF0ID0gRDNERk1UX0QyNFM4OwogICAgICAgICBtU2FtcGxl
cyA9IHN1cHBvcnRlZFNhbXBsZXM7CiAgICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIHNl
dFNpemUoMCwgMCk7Ci0gICAgICAgIG1Gb3JtYXQgPSBHTF9SR0JBNDsgLy9kZWZhdWx0IGZvcm1h
dAotICAgICAgICBtRDNERm9ybWF0ID0gRDNERk1UX1VOS05PV047Ci0gICAgICAgIG1TYW1wbGVz
ID0gMDsKLSAgICB9CiB9CiAKIERlcHRoU3RlbmNpbGJ1ZmZlcjo6fkRlcHRoU3RlbmNpbGJ1ZmZl
cigpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvUmVuZGVyYnVmZmVyLmgJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjEs
NiArMjEsNyBAQAogCiBuYW1lc3BhY2UgZ2wKIHsKKyAgICBjbGFzcyBUZXh0dXJlOwogCiAvLyBB
IGNsYXNzIGRlcml2ZWQgZnJvbSBSZW5kZXJidWZmZXJTdG9yYWdlIGlzIGNyZWF0ZWQgd2hlbmV2
ZXIgZ2xSZW5kZXJidWZmZXJTdG9yYWdlCiAvLyBpcyBjYWxsZWQuIFRoZSBzcGVjaWZpYyBjb25j
cmV0ZSB0eXBlIGRlcGVuZHMgb24gd2hldGhlciB0aGUgaW50ZXJuYWwgZm9ybWF0IGlzCkBAIC00
Miw2ICs0Myw3IEBAIGNsYXNzIFJlbmRlcmJ1ZmZlclN0b3JhZ2UKICAgICB2aXJ0dWFsIGludCBn
ZXRXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldEhlaWdodCgpIGNvbnN0OwogICAg
IHZpcnR1YWwgR0xlbnVtIGdldEZvcm1hdCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0Zs
b2F0aW5nUG9pbnQoKSBjb25zdDsKICAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7
CiAgICAgR0xzaXplaSBnZXRTYW1wbGVzKCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50IGdldFNl
cmlhbCgpIGNvbnN0OwpAQCAtNTMsNyArNTUsNyBAQCBjbGFzcyBSZW5kZXJidWZmZXJTdG9yYWdl
CiAgICAgR0xlbnVtIG1Gb3JtYXQ7CiAgICAgRDNERk9STUFUIG1EM0RGb3JtYXQ7CiAgICAgR0xz
aXplaSBtU2FtcGxlczsKLSAgICB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKKyAgICBjb25zdCB1bnNp
Z25lZCBpbnQgbVNlcmlhbDsKIAogICBwcml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FT
U0lHTihSZW5kZXJidWZmZXJTdG9yYWdlKTsKQEAgLTEwMCw2ICsxMDIsNyBAQCBjbGFzcyBDb2xv
cmJ1ZmZlciA6IHB1YmxpYyBSZW5kZXJidWZmZXJTCiB7CiAgIHB1YmxpYzoKICAgICBleHBsaWNp
dCBDb2xvcmJ1ZmZlcihJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsKKyAgICBleHBs
aWNpdCBDb2xvcmJ1ZmZlcihjb25zdCBUZXh0dXJlKiB0ZXh0dXJlKTsKICAgICBDb2xvcmJ1ZmZl
cihpbnQgd2lkdGgsIGludCBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgc2FtcGxlcyk7
CiAKICAgICB+Q29sb3JidWZmZXIoKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvU2hhZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL1NoYWRlci5jcHAJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxOSArMzQsMjIgQEAgU2hhZGVyOjpTaGFkZXIoUmVzb3VyY2VNYW5hZ2VyICptYW5h
Z2VyLAogCiAgICAgICAgIGlmIChyZXN1bHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFRCdWls
dEluUmVzb3VyY2UgcmVzb3VyY2VzOwotICAgICAgICAgICAgU2hJbml0QnVpbHRJblJlc291cmNl
KCZyZXNvdXJjZXMpOworICAgICAgICAgICAgU2hCdWlsdEluUmVzb3VyY2VzIHJlc291cmNlczsK
KyAgICAgICAgICAgIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoJnJlc291cmNlcyk7CisgICAgICAg
ICAgICBDb250ZXh0ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOyAgICAgICAgICAgIAorCiAgICAg
ICAgICAgICByZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyA9IE1BWF9WRVJURVhfQVRUUklCUzsK
ICAgICAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyA9IE1BWF9WRVJU
RVhfVU5JRk9STV9WRUNUT1JTOwotICAgICAgICAgICAgcmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0
b3JzID0gTUFYX1ZBUllJTkdfVkVDVE9SUzsKKyAgICAgICAgICAgIHJlc291cmNlcy5NYXhWYXJ5
aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOwogICAgICAg
ICAgICAgcmVzb3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gTUFYX1ZFUlRFWF9U
RVhUVVJFX0lNQUdFX1VOSVRTOwogICAgICAgICAgICAgcmVzb3VyY2VzLk1heENvbWJpbmVkVGV4
dHVyZUltYWdlVW5pdHMgPSBNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUzsKICAgICAg
ICAgICAgIHJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0cyA9IE1BWF9URVhUVVJFX0lNQUdF
X1VOSVRTOwotICAgICAgICAgICAgcmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMg
PSBNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTOworICAgICAgICAgICAgcmVzb3VyY2VzLk1h
eEZyYWdtZW50VW5pZm9ybVZlY3RvcnMgPSBjb250ZXh0LT5nZXRNYXhpbXVtRnJhZ21lbnRVbmlm
b3JtVmVjdG9ycygpOwogICAgICAgICAgICAgcmVzb3VyY2VzLk1heERyYXdCdWZmZXJzID0gTUFY
X0RSQVdfQlVGRkVSUzsKKyAgICAgICAgICAgIHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMgPSAxOwogCi0gICAgICAgICAgICBtRnJhZ21lbnRDb21waWxlciA9IFNoQ29uc3RydWN0
Q29tcGlsZXIoRVNoTGFuZ0ZyYWdtZW50LCBFU2hTcGVjR0xFUzIsICZyZXNvdXJjZXMpOwotICAg
ICAgICAgICAgbVZlcnRleENvbXBpbGVyID0gU2hDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5nVmVy
dGV4LCBFU2hTcGVjR0xFUzIsICZyZXNvdXJjZXMpOworICAgICAgICAgICAgbUZyYWdtZW50Q29t
cGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKFNIX0ZSQUdNRU5UX1NIQURFUiwgU0hfR0xFUzJf
U1BFQywgJnJlc291cmNlcyk7CisgICAgICAgICAgICBtVmVydGV4Q29tcGlsZXIgPSBTaENvbnN0
cnVjdENvbXBpbGVyKFNIX1ZFUlRFWF9TSEFERVIsIFNIX0dMRVMyX1NQRUMsICZyZXNvdXJjZXMp
OwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNDAsNyArMjQzLDcgQEAgdm9pZCBTaGFkZXI6OnBh
cnNlVmFyeWluZ3MoKQogICAgICAgICAgICAgY2hhciB2YXJ5aW5nVHlwZVsyNTZdOwogICAgICAg
ICAgICAgY2hhciB2YXJ5aW5nTmFtZVsyNTZdOwogCi0gICAgICAgICAgICBpbnQgbWF0Y2hlcyA9
IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlcyAlcyIsIHZhcnlpbmdUeXBlLCB2YXJ5aW5nTmFtZSk7
CisgICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlMjU1cyAl
MjU1cyIsIHZhcnlpbmdUeXBlLCB2YXJ5aW5nTmFtZSk7CiAKICAgICAgICAgICAgIGlmIChtYXRj
aGVzICE9IDIpCiAgICAgICAgICAgICB7CkBAIC0yODAsMjEgKzI4MywyMyBAQCB2b2lkIFNoYWRl
cjo6Y29tcGlsZVRvSExTTCh2b2lkICpjb21waWxlCiAgICAgZGVsZXRlW10gbUluZm9Mb2c7CiAg
ICAgbUluZm9Mb2cgPSBOVUxMOwogCi0gICAgaW50IHJlc3VsdCA9IFNoQ29tcGlsZShjb21waWxl
ciwgJm1Tb3VyY2UsIDEsIEVTaE9wdE5vbmUsIEVEZWJ1Z09wTm9uZSk7Ci0gICAgY29uc3QgY2hh
ciAqb2JqID0gU2hHZXRPYmplY3RDb2RlKGNvbXBpbGVyKTsKLSAgICBjb25zdCBjaGFyICppbmZv
ID0gU2hHZXRJbmZvTG9nKGNvbXBpbGVyKTsKKyAgICBpbnQgcmVzdWx0ID0gU2hDb21waWxlKGNv
bXBpbGVyLCAmbVNvdXJjZSwgMSwgU0hfT0JKRUNUX0NPREUpOwogCiAgICAgaWYgKHJlc3VsdCkK
ICAgICB7Ci0gICAgICAgIG1IbHNsID0gbmV3IGNoYXJbc3RybGVuKG9iaikgKyAxXTsKLSAgICAg
ICAgc3RyY3B5KG1IbHNsLCBvYmopOworICAgICAgICBpbnQgb2JqQ29kZUxlbiA9IDA7CisgICAg
ICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hfT0JKRUNUX0NPREVfTEVOR1RILCAmb2JqQ29kZUxl
bik7CisgICAgICAgIG1IbHNsID0gbmV3IGNoYXJbb2JqQ29kZUxlbl07CisgICAgICAgIFNoR2V0
T2JqZWN0Q29kZShjb21waWxlciwgbUhsc2wpOwogCiAgICAgICAgIFRSQUNFKCJcbiVzIiwgbUhs
c2wpOwogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBtSW5mb0xvZyA9IG5ldyBjaGFy
W3N0cmxlbihpbmZvKSArIDFdOwotICAgICAgICBzdHJjcHkobUluZm9Mb2csIGluZm8pOworICAg
ICAgICBpbnQgaW5mb0xvZ0xlbiA9IDA7CisgICAgICAgIFNoR2V0SW5mbyhjb21waWxlciwgU0hf
SU5GT19MT0dfTEVOR1RILCAmaW5mb0xvZ0xlbik7CisgICAgICAgIG1JbmZvTG9nID0gbmV3IGNo
YXJbaW5mb0xvZ0xlbl07CisgICAgICAgIFNoR2V0SW5mb0xvZyhjb21waWxlciwgbUluZm9Mb2cp
OwogCiAgICAgICAgIFRSQUNFKCJcbiVzIiwgbUluZm9Mb2cpOwogICAgIH0KQEAgLTQ2OCw3ICs0
NzMsNyBAQCB2b2lkIFZlcnRleFNoYWRlcjo6cGFyc2VBdHRyaWJ1dGVzKCkKICAgICAgICAgICAg
IGNoYXIgYXR0cmlidXRlVHlwZVsyNTZdOwogICAgICAgICAgICAgY2hhciBhdHRyaWJ1dGVOYW1l
WzI1Nl07CiAKLSAgICAgICAgICAgIGludCBtYXRjaGVzID0gc3NjYW5mKGlucHV0LCAic3RhdGlj
ICVzIF8lcyIsIGF0dHJpYnV0ZVR5cGUsIGF0dHJpYnV0ZU5hbWUpOworICAgICAgICAgICAgaW50
IG1hdGNoZXMgPSBzc2NhbmYoaW5wdXQsICJzdGF0aWMgJTI1NXMgXyUyNTVzIiwgYXR0cmlidXRl
VHlwZSwgYXR0cmlidXRlTmFtZSk7CiAKICAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IDIpCiAg
ICAgICAgICAgICB7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1RleHR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvVGV4dHVyZS5jcHAJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAs
NiArMTAsOCBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKIAorI2luY2x1ZGUg
PGQzZHg5dGV4Lmg+CisKICNpbmNsdWRlIDxhbGdvcml0aG0+CiAKICNpbmNsdWRlICJjb21tb24v
ZGVidWcuaCIKQEAgLTQ1LDYgKzQ3LDcgQEAgVGV4dHVyZTo6VGV4dHVyZShHTHVpbnQgaWQpIDog
UmVmQ291bnRPYgogICAgIG1EaXJ0eU1ldGFEYXRhID0gdHJ1ZTsKICAgICBtRGlydHkgPSB0cnVl
OwogICAgIG1Jc1JlbmRlcmFibGUgPSBmYWxzZTsKKyAgICBtVHlwZSA9IEdMX1VOU0lHTkVEX0JZ
VEU7CiAgICAgbUJhc2VUZXh0dXJlID0gTlVMTDsKIH0KIApAQCAtMTc0LDg2ICsxNzcsMTcxIEBA
IEdMdWludCBUZXh0dXJlOjpnZXRIZWlnaHQoKSBjb25zdAogICAgIHJldHVybiBtSGVpZ2h0Owog
fQogCitib29sIFRleHR1cmU6OmlzRmxvYXRpbmdQb2ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IChtVHlwZSA9PSBHTF9GTE9BVCB8fCBtVHlwZSA9PSBHTF9IQUxGX0ZMT0FUX09FUyk7Cit9CisK
K2Jvb2wgVGV4dHVyZTo6aXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3QKK3sKKyAgICBEM0RGT1JN
QVQgZm9ybWF0ID0gZ2V0RDNERm9ybWF0KCk7CisgICAgCisgICAgc3dpdGNoKGZvcm1hdCkKKyAg
ICB7CisgICAgICBjYXNlIEQzREZNVF9MODoKKyAgICAgIGNhc2UgRDNERk1UX0E4TDg6CisgICAg
ICBjYXNlIEQzREZNVF9EWFQxOgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBjYXNlIEQz
REZNVF9BOFI4RzhCODoKKyAgICAgIGNhc2UgRDNERk1UX1g4UjhHOEI4OgorICAgICAgY2FzZSBE
M0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIC8vIFNlbGVjdHMgYW4gaW50ZXJu
YWwgRGlyZWN0M0QgOSBmb3JtYXQgZm9yIHN0b3JpbmcgYW4gSW1hZ2UKLUQzREZPUk1BVCBUZXh0
dXJlOjpzZWxlY3RGb3JtYXQoR0xlbnVtIGZvcm1hdCkKK0QzREZPUk1BVCBUZXh0dXJlOjpzZWxl
Y3RGb3JtYXQoR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpCiB7CiAgICAgaWYgKGZvcm1hdCA9
PSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUIHx8CiAgICAgICAgIGZvcm1hdCA9PSBH
TF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVCkKICAgICB7CiAgICAgICAgIHJldHVybiBE
M0RGTVRfRFhUMTsKICAgICB9Ci0gICAgZWxzZQorICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfRkxP
QVQpCisgICAgeworICAgICAgICByZXR1cm4gRDNERk1UX0EzMkIzMkczMlIzMkY7CisgICAgfQor
ICAgIGVsc2UgaWYgKHR5cGUgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCiAgICAgeworICAgICAgICBy
ZXR1cm4gRDNERk1UX0ExNkIxNkcxNlIxNkY7CisgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0g
R0xfVU5TSUdORURfQllURSkKKyAgICB7CisgICAgICAgIGlmIChmb3JtYXQgPT0gR0xfTFVNSU5B
TkNFICYmIGdldENvbnRleHQoKS0+c3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlcygpKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gRDNERk1UX0w4OworICAgICAgICB9CisgICAgICAgIGVs
c2UgaWYgKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0VfQUxQSEEgJiYgZ2V0Q29udGV4dCgpLT5zdXBw
b3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMoKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIEQzREZNVF9BOEw4OworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBH
TF9SR0IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBEM0RGTVRfWDhSOEc4Qjg7Cisg
ICAgICAgIH0KKwogICAgICAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwogICAgIH0KLX0KIAot
aW50IFRleHR1cmU6OmltYWdlUGl0Y2goY29uc3QgSW1hZ2UgJmltZykgY29uc3QKLXsKLSAgICBy
ZXR1cm4gaW1nLndpZHRoICogNDsKKyAgICByZXR1cm4gRDNERk1UX0E4UjhHOEI4OwogfQogCiAv
LyBTdG9yZSB0aGUgcGl4ZWwgcmVjdGFuZ2xlIGRlc2lnbmF0ZWQgYnkgeG9mZnNldCx5b2Zmc2V0
LHdpZHRoLGhlaWdodCB3aXRoIHBpeGVscyBzdG9yZWQgYXMgZm9ybWF0L3R5cGUgYXQgaW5wdXQK
LS8vIGludG8gdGhlIEJHUkE4IHBpeGVsIHJlY3RhbmdsZSBhdCBvdXRwdXQgd2l0aCBvdXRwdXRQ
aXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVhY2ggbGluZS4KKy8vIGludG8gdGhlIHRhcmdldCBwaXhl
bCByZWN0YW5nbGUgYXQgb3V0cHV0IHdpdGggb3V0cHV0UGl0Y2ggYnl0ZXMgaW4gYmV0d2VlbiBl
YWNoIGxpbmUuCiB2b2lkIFRleHR1cmU6OmxvYWRJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMZW51bSB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0
cHV0KSBjb25zdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
LCBEM0RTVVJGQUNFX0RFU0MgKmRlc2NyaXB0aW9uKSBjb25zdAogewogICAgIEdMc2l6ZWkgaW5w
dXRQaXRjaCA9IENvbXB1dGVQaXRjaCh3aWR0aCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1l
bnQpOwogCi0gICAgc3dpdGNoIChmb3JtYXQpCisgICAgc3dpdGNoICh0eXBlKQogICAgIHsKLSAg
ICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgIGxvYWRBbHBoYUltYWdlRGF0YSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91
dHB1dCk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAg
ICAgbG9hZEx1bWluYW5jZUltYWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Ci0gICAgICAgIGJyZWFr
OwotCi0gICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgbG9hZEx1bWluYW5j
ZUFscGhhSW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAg
IGNhc2UgR0xfUkdCOgotICAgICAgICBzd2l0Y2ggKHR5cGUpCisgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQogICAgICAgICB7Ci0gICAgICAgICAg
Y2FzZSBHTF9VTlNJR05FRF9CWVRFOgorICAgICAgICAgIGNhc2UgR0xfQUxQSEE6CisgICAgICAg
ICAgICBsb2FkQWxwaGFJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwg
aW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6CisgICAgICAgICAgICBsb2FkTHVtaW5h
bmNlSW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBkZXNjcmlwdGlvbi0+Rm9ybWF0ID09IEQzREZN
VF9MOCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9B
TFBIQToKKyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VBbHBoYUltYWdlRGF0YSh4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91
dHB1dCwgZGVzY3JpcHRpb24tPkZvcm1hdCA9PSBEM0RGTVRfQThMOCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICBjYXNlIEdMX1JHQjoKICAgICAgICAgICAgIGxvYWRSR0JVQnl0ZUlt
YWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CiAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAg
IGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV82XzU6Ci0gICAgICAgICAgICBsb2FkUkdCNTY1SW1h
Z2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAg
ICAgICBsb2FkUkdCQVVCeXRlSW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAgICBsb2FkQkdS
QUltYWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CiAgICAgICAgICAgICBicmVhazsKLQogICAgICAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7Ci0K
LSAgICAgIGNhc2UgR0xfUkdCQToKLSAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCiAgICAgICAg
IHsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBsb2FkUkdC
QVVCeXRlSW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0
Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICBjYXNlIEdMX1JHQjoK
KyAgICAgICAgICAgIGxvYWRSR0I1NjVJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgs
IGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwogICAgICAg
ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6
CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgc3dp
dGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CiAgICAgICAg
ICAgICBsb2FkUkdCQTQ0NDRJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwogICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAg
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgc3dpdGNoIChm
b3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CiAgICAgICAgICAgICBs
b2FkUkdCQTU1NTFJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5w
dXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwogICAgICAgICAgICAgYnJlYWs7
Ci0KICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwotICAgICAgY2FzZSBHTF9CR1JBX0VYVDoKLSAgICAgICAgc3dpdGNoICh0eXBlKQor
ICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCiAgICAgICAgIHsK
LSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBsb2FkQkdSQUlt
YWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1
dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgLy8gZmxvYXQgdGV4dHVyZXMgYXJl
IGNvbnZlcnRlZCB0byBSR0JBLCBub3QgQkdSQSwgYXMgdGhleSdyZSBzdG9yZWQgdGhhdCB3YXkg
aW4gRDNECisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICAgIGxvYWRBbHBoYUZs
b2F0SW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAgICAgbG9hZEx1bWluYW5jZUZsb2F0SW1h
Z2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0
LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgbG9hZEx1bWluYW5jZUFscGhhRmxv
YXRJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwg
aW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgICBsb2FkUkdCRmxvYXRJbWFnZURhdGEoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNo
LCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOgor
ICAgICAgICAgICAgbG9hZFJHQkFGbG9hdEltYWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAg
ICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICAvLyBmbG9hdCB0ZXh0dXJl
cyBhcmUgY29udmVydGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0b3JlZCB0aGF0
IHdheSBpbiBEM0QKKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICAgICAgbG9hZEFs
cGhhSGFsZkZsb2F0SW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAgICAgbG9hZEx1bWluYW5j
ZUhhbGZGbG9hdEltYWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1
dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIGxvYWRMdW1p
bmFuY2VBbHBoYUhhbGZGbG9hdEltYWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVp
Z2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICAgIGxvYWRSR0JIYWxm
RmxvYXRJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRj
aCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgICAgbG9hZFJHQkFIYWxmRmxvYXRJbWFnZURh
dGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91
dHB1dFBpdGNoLCBvdXRwdXQpOwogICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMjgxLDM2
ICszNjksMTc0IEBAIHZvaWQgVGV4dHVyZTo6bG9hZEFscGhhSW1hZ2VEYXRhKEdMaW50IHgKICAg
ICB9CiB9CiAKK3ZvaWQgVGV4dHVyZTo6bG9hZEFscGhhRmxvYXRJbWFnZURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cit7
CisgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7CisgICAgZmxvYXQgKmRlc3QgPSBOVUxM
OworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAg
IHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOworICAgICAgICBkZXN0
ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7Cisg
ICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAg
ICAgICAgZGVzdFs0ICogeCArIDBdID0gMDsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9
IDA7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSAwOworICAgICAgICAgICAgZGVzdFs0
ICogeCArIDNdID0gc291cmNlW3hdOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1
cmU6OmxvYWRBbHBoYUhhbGZGbG9hdEltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zm
c2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgY29uc3Qg
dW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9IE5VTEw7CisgICAgdW5zaWduZWQgc2hvcnQgKmRlc3Qg
PSBOVUxMOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7Cisg
ICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihz
dGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gp
OworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBp
dGNoICsgeG9mZnNldCAqIDgpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IDA7CisgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgMV0gPSAwOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0g
MDsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVt4XTsKKyAgICAgICAgfQor
ICAgIH0KK30KKwogdm9pZCBUZXh0dXJlOjpsb2FkTHVtaW5hbmNlSW1hZ2VEYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCwgYm9vbCBu
YXRpdmUpIGNvbnN0CiB7CisgICAgY29uc3QgaW50IGRlc3RCeXRlc1BlclBpeGVsID0gbmF0aXZl
PyAxOiA0OwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9IE5VTEw7CiAgICAgdW5z
aWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdo
dDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWdu
ZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAgICBkZXN0ID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0
Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIGRl
c3RCeXRlc1BlclBpeGVsOworCisgICAgICAgIGlmICghbmF0aXZlKSAgIC8vIEJHUkE4IGRlc3Rp
bmF0aW9uIGZvcm1hdAorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDBdID0gc291cmNlW3hdOworICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJj
ZVt4XTsKKyAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeF07CisgICAg
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gMHhGRjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBlbHNlICAgLy8gTDggZGVzdGluYXRpb24gZm9ybWF0CisgICAgICAgIHsK
KyAgICAgICAgICAgIG1lbWNweShkZXN0LCBzb3VyY2UsIHdpZHRoKTsKKyAgICAgICAgfQorICAg
IH0KK30KKwordm9pZCBUZXh0dXJlOjpsb2FkTHVtaW5hbmNlRmxvYXRJbWFnZURhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAoreworICAgIGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOworICAgIGZsb2F0ICpkZXN0
ID0gTlVMTDsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgewor
ICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKKyAgICAg
ICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBj
aGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICog
MTYpOwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsK
ICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKICAgICAgICAgICAgIGRl
c3RbNCAqIHggKyAxXSA9IHNvdXJjZVt4XTsKICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9
IHNvdXJjZVt4XTsKLSAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4RkY7CisgICAgICAg
ICAgICBkZXN0WzQgKiB4ICsgM10gPSAxLjBmOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IFRleHR1cmU6OmxvYWRMdW1pbmFuY2VIYWxmRmxvYXRJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRj
aCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBj
b25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0ICpzb3VyY2UgPSBOVUxMOworICAgIHVu
c2lnbmVkIHNob3J0ICpkZXN0ID0gTlVMTDsKKworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVp
Z2h0OyB5KyspCisgICAgeworICAgICAgICBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0
IHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0
KSArIHkgKiBpbnB1dFBpdGNoKTsKKyAgICAgICAgZGVzdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5z
aWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsg
eW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA4KTsKKyAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSBzb3VyY2VbeF07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2Vb
eF07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbeF07CisgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgM10gPSAweDNDMDA7IC8vIFNFRUVFRU1NTU1NTU1NTU0sIFMgPSAwLCBF
ID0gMTUsIE0gPSAwOiAxNmJpdCBmbHB0IHJlcHJlc2VudGF0aW9uIG9mIDEKICAgICAgICAgfQog
ICAgIH0KIH0KIAogdm9pZCBUZXh0dXJlOjpsb2FkTHVtaW5hbmNlQWxwaGFJbWFnZURhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCwgYm9vbCBuYXRpdmUpIGNvbnN0CiB7CisgICAgY29uc3QgaW50IGRlc3RCeXRlc1Bl
clBpeGVsID0gbmF0aXZlPyAyOiA0OwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSA9
IE5VTEw7CiAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CiAKICAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQogICAgIHsKICAgICAgICAgc291cmNlID0gc3RhdGljX2Nh
c3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoOwotICAgICAg
ICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZz
ZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogNDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNo
ICsgeG9mZnNldCAqIGRlc3RCeXRlc1BlclBpeGVsOworICAgICAgICAKKyAgICAgICAgaWYgKCFu
YXRpdmUpICAgLy8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbMip4KzBdOworICAgICAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAxXSA9IHNvdXJjZVsyKngrMF07CisgICAgICAgICAgICAgICAgZGVz
dFs0ICogeCArIDJdID0gc291cmNlWzIqeCswXTsKKyAgICAgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgM10gPSBzb3VyY2VbMip4KzFdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgg
KiAyKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUZXh0dXJlOjpsb2FkTHVtaW5hbmNl
QWxwaGFGbG9hdEltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXpl
X3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCBmbG9hdCAq
c291cmNlID0gTlVMTDsKKyAgICBmbG9hdCAqZGVzdCA9IE5VTEw7CisKKyAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZz
ZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
MF0gPSBzb3VyY2VbMip4KzBdOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNl
WzIqeCswXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVsyKngrMF07Cisg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbMip4KzFdOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIFRleHR1cmU6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdEltYWdl
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNv
dXJjZSA9IE5VTEw7CisgICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOworCisgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOworICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDgp
OwogICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07CkBAIC0zNjIsNiArNTg4
LDQ2IEBAIHZvaWQgVGV4dHVyZTo6bG9hZFJHQjU2NUltYWdlRGF0YShHTGludCAKICAgICB9CiB9
CiAKK3ZvaWQgVGV4dHVyZTo6bG9hZFJHQkZsb2F0SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25z
dCBmbG9hdCAqc291cmNlID0gTlVMTDsKKyAgICBmbG9hdCAqZGVzdCA9IE5VTEw7CisKKyAgICBm
b3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0g
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVk
IGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7CisgICAgICAgIGRlc3QgPSByZWludGVy
cHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAo
eSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZm9y
IChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAxXSA9IHNvdXJjZVt4ICogMyArIDFdOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0g
c291cmNlW3ggKiAzICsgMl07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAxLjBmOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmU6OmxvYWRSR0JIYWxmRmxvYXRJbWFn
ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVM
TDsKKyAgICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7CisKKyAgICBmb3IgKGludCB5ID0g
MDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNo
YXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJl
dF9jYXN0PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1
dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDgpOworICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOworICAgICAgICAgICAgZGVzdFs0
ICogeCArIDFdID0gc291cmNlW3ggKiAzICsgMV07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsg
Ml0gPSBzb3VyY2VbeCAqIDMgKyAyXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4
M0MwMDsgLy8gU0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2Yml0IGZs
cHQgcmVwcmVzZW50YXRpb24gb2YgMQorICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIFRleHR1
cmU6OmxvYWRSR0JBVUJ5dGVJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKQEAgLTQyNCw2ICs2OTAsMzQgQEAg
dm9pZCBUZXh0dXJlOjpsb2FkUkdCQTU1NTFJbWFnZURhdGEoR0xpbgogICAgIH0KIH0KIAordm9p
ZCBUZXh0dXJlOjpsb2FkUkdCQUZsb2F0SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwg
c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgY29uc3QgZmxv
YXQgKnNvdXJjZSA9IE5VTEw7CisgICAgZmxvYXQgKmRlc3QgPSBOVUxMOworCisgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxvYXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRf
Y2FzdDxmbG9hdCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5
b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiAxNik7CisgICAgICAgIG1lbWNweShk
ZXN0LCBzb3VyY2UsIHdpZHRoICogMTYpOworICAgIH0KK30KKwordm9pZCBUZXh0dXJlOjpsb2Fk
UkdCQUhhbGZGbG9hdEltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNp
emVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAgIGNvbnN0IHVuc2lnbmVkIGNo
YXIgKnNvdXJjZSA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IE5VTEw7CisKKyAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNl
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBp
dGNoOworICAgICAgICBkZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkg
KyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDg7CisgICAgICAgIG1l
bWNweShkZXN0LCBzb3VyY2UsIHdpZHRoICogOCk7CisgICAgfQorfQorCiB2b2lkIFRleHR1cmU6
OmxvYWRCR1JBSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwg
dm9pZCAqb3V0cHV0KSBjb25zdAogewpAQCAtNDM4LDcgKzczMiw3IEBAIHZvaWQgVGV4dHVyZTo6
bG9hZEJHUkFJbWFnZURhdGEoR0xpbnQgeG8KICAgICB9CiB9CiAKLXZvaWQgVGV4dHVyZTo6Y3Jl
YXRlU3VyZmFjZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
SW1hZ2UgKmltZykKK3ZvaWQgVGV4dHVyZTo6Y3JlYXRlU3VyZmFjZShHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEltYWdlICppbWcpCiB7
CiAgICAgSURpcmVjdDNEVGV4dHVyZTkgKm5ld1RleHR1cmUgPSBOVUxMOwogICAgIElEaXJlY3Qz
RFN1cmZhY2U5ICpuZXdTdXJmYWNlID0gTlVMTDsKQEAgLTQ2NSw3ICs3NTksNyBAQCB2b2lkIFRl
eHR1cmU6OmNyZWF0ZVN1cmZhY2UoR0xzaXplaSB3aWR0CiAgICAgICAgICAgICBsZXZlbFRvRmV0
Y2ggPSB1cHNhbXBsZUNvdW50OwogICAgICAgICB9CiAKLSAgICAgICAgSFJFU1VMVCByZXN1bHQg
PSBnZXREZXZpY2UoKS0+Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lkdGgsIHJlcXVlc3RIZWlnaHQs
IGxldmVsVG9GZXRjaCArIDEsIE5VTEwsIHNlbGVjdEZvcm1hdChmb3JtYXQpLAorICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGdldERldmljZSgpLT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwg
cmVxdWVzdEhlaWdodCwgbGV2ZWxUb0ZldGNoICsgMSwgTlVMTCwgc2VsZWN0Rm9ybWF0KGZvcm1h
dCwgdHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRDNEUE9PTF9TWVNURU1NRU0sICZuZXdUZXh0dXJlLCBOVUxMKTsKIAogICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCkBAIC00ODgsMTAgKzc4MiwxMyBAQCB2b2lkIFRleHR1cmU6OmNy
ZWF0ZVN1cmZhY2UoR0xzaXplaSB3aWR0CiAKIHZvaWQgVGV4dHVyZTo6c2V0SW1hZ2UoR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZykKIHsKLSAg
ICBjcmVhdGVTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1nKTsKKyAgICBjcmVhdGVT
dXJmYWNlKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgaW1nKTsKIAogICAgIGlmIChwaXhl
bHMgIT0gTlVMTCAmJiBpbWctPnN1cmZhY2UgIT0gTlVMTCkKICAgICB7CisgICAgICAgIEQzRFNV
UkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAgICAgaW1nLT5zdXJmYWNlLT5HZXREZXNjKCZk
ZXNjcmlwdGlvbik7CisKICAgICAgICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwogICAgICAgICBI
UkVTVUxUIHJlc3VsdCA9IGltZy0+c3VyZmFjZS0+TG9ja1JlY3QoJmxvY2tlZCwgTlVMTCwgMCk7
CiAKQEAgLTQ5OSw3ICs3OTYsNyBAQCB2b2lkIFRleHR1cmU6OnNldEltYWdlKEdMc2l6ZWkgd2lk
dGgsIEdMCiAKICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQogICAgICAgICB7Ci0gICAg
ICAgICAgICBsb2FkSW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
dW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKKyAg
ICAgICAgICAgIGxvYWRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBl
LCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgbG9ja2VkLlBpdGNoLCBsb2NrZWQucEJpdHMsICZk
ZXNjcmlwdGlvbik7CiAgICAgICAgICAgICBpbWctPnN1cmZhY2UtPlVubG9ja1JlY3QoKTsKICAg
ICAgICAgfQogCkBAIC01MTEsNyArODA4LDcgQEAgdm9pZCBUZXh0dXJlOjpzZXRJbWFnZShHTHNp
emVpIHdpZHRoLCBHTAogCiB2b2lkIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUs
IGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZykKIHsKLSAgICBjcmVhdGVTdXJmYWNlKHdp
ZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1nKTsKKyAgICBjcmVhdGVTdXJmYWNlKHdpZHRoLCBoZWln
aHQsIGZvcm1hdCwgR0xfVU5TSUdORURfQllURSwgaW1nKTsKIAogICAgIGlmIChwaXhlbHMgIT0g
TlVMTCAmJiBpbWctPnN1cmZhY2UgIT0gTlVMTCkKICAgICB7CkBAIC01NDAsMTggKzgzNywzMCBA
QCBib29sIFRleHR1cmU6OnN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMCiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiAKLSAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7Ci0gICAgSFJFU1VM
VCByZXN1bHQgPSBpbWctPnN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrZWQsIE5VTEwsIDApOwotCi0g
ICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKKyAgICBpZiAoIWltZy0+c3VyZmFjZSkKKyAg
ICB7CisgICAgICAgIGNyZWF0ZVN1cmZhY2UoaW1nLT53aWR0aCwgaW1nLT5oZWlnaHQsIGZvcm1h
dCwgdHlwZSwgaW1nKTsKKyAgICB9CiAKLSAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAg
aWYgKHBpeGVscyAhPSBOVUxMICYmIGltZy0+c3VyZmFjZSAhPSBOVUxMKQogICAgIHsKLSAgICAg
ICAgbG9hZEltYWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gsIGxvY2tlZC5wQml0
cyk7Ci0gICAgICAgIGltZy0+c3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgICAgICBEM0RTVVJG
QUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIGltZy0+c3VyZmFjZS0+R2V0RGVzYygmZGVz
Y3JpcHRpb24pOworCisgICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKKyAgICAgICAgSFJF
U1VMVCByZXN1bHQgPSBpbWctPnN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrZWQsIE5VTEwsIDApOwor
CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgaWYgKFNVQ0NF
RURFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBsb2FkSW1hZ2VEYXRhKHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50
LCBwaXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCAmZGVzY3JpcHRpb24pOworICAg
ICAgICAgICAgaW1nLT5zdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgICAgIH0KKworICAgICAg
ICBpbWctPmRpcnR5ID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpbWctPmRpcnR5ID0gdHJ1ZTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTY5LDMyICs4NzgsMjE1IEBAIGJvb2wgVGV4dHVyZTo6
c3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IHgKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0K
IAotICAgIFJFQ1QgdXBkYXRlUmVnaW9uOwotICAgIHVwZGF0ZVJlZ2lvbi5sZWZ0ID0geG9mZnNl
dDsKLSAgICB1cGRhdGVSZWdpb24ucmlnaHQgPSB4b2Zmc2V0ICsgd2lkdGg7Ci0gICAgdXBkYXRl
UmVnaW9uLmJvdHRvbSA9IHlvZmZzZXQgKyBoZWlnaHQ7Ci0gICAgdXBkYXRlUmVnaW9uLnRvcCA9
IHlvZmZzZXQ7CisgICAgaWYgKCFpbWctPnN1cmZhY2UpCisgICAgeworICAgICAgICBjcmVhdGVT
dXJmYWNlKGltZy0+d2lkdGgsIGltZy0+aGVpZ2h0LCBmb3JtYXQsIEdMX1VOU0lHTkVEX0JZVEUs
IGltZyk7CisgICAgfQorCisgICAgaWYgKHBpeGVscyAhPSBOVUxMICYmIGltZy0+c3VyZmFjZSAh
PSBOVUxMKQorICAgIHsKKyAgICAgICAgUkVDVCB1cGRhdGVSZWdpb247CisgICAgICAgIHVwZGF0
ZVJlZ2lvbi5sZWZ0ID0geG9mZnNldDsKKyAgICAgICAgdXBkYXRlUmVnaW9uLnJpZ2h0ID0geG9m
ZnNldCArIHdpZHRoOworICAgICAgICB1cGRhdGVSZWdpb24uYm90dG9tID0geW9mZnNldCArIGhl
aWdodDsKKyAgICAgICAgdXBkYXRlUmVnaW9uLnRvcCA9IHlvZmZzZXQ7CiAKLSAgICBEM0RMT0NL
RURfUkVDVCBsb2NrZWQ7Ci0gICAgSFJFU1VMVCByZXN1bHQgPSBpbWctPnN1cmZhY2UtPkxvY2tS
ZWN0KCZsb2NrZWQsICZ1cGRhdGVSZWdpb24sIDApOworICAgICAgICBEM0RMT0NLRURfUkVDVCBs
b2NrZWQ7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1nLT5zdXJmYWNlLT5Mb2NrUmVjdCgm
bG9ja2VkLCAmdXBkYXRlUmVnaW9uLCAwKTsKIAotICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0
KSk7CisgICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CiAKLSAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBDb21wdXRl
Q29tcHJlc3NlZFBpdGNoKHdpZHRoLCBmb3JtYXQpOwotICAgICAgICBpbnQgcm93cyA9IGltYWdl
U2l6ZSAvIGlucHV0UGl0Y2g7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcm93czsgKytp
KQorICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCiAgICAgICAgIHsKLSAgICAgICAgICAg
IG1lbWNweSgodm9pZCopKChCWVRFKilsb2NrZWQucEJpdHMgKyBpICogbG9ja2VkLlBpdGNoKSwg
KHZvaWQqKSgoQllURSopcGl4ZWxzICsgaSAqIGlucHV0UGl0Y2gpLCBpbnB1dFBpdGNoKTsKKyAg
ICAgICAgICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IENvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lk
dGgsIGZvcm1hdCk7CisgICAgICAgICAgICBpbnQgcm93cyA9IGltYWdlU2l6ZSAvIGlucHV0UGl0
Y2g7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJvd3M7ICsraSkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopbG9ja2VkLnBCaXRz
ICsgaSAqIGxvY2tlZC5QaXRjaCksICh2b2lkKikoKEJZVEUqKXBpeGVscyArIGkgKiBpbnB1dFBp
dGNoKSwgaW5wdXRQaXRjaCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbWctPnN1cmZh
Y2UtPlVubG9ja1JlY3QoKTsKICAgICAgICAgfQotICAgICAgICBpbWctPnN1cmZhY2UtPlVubG9j
a1JlY3QoKTsKKworICAgICAgICBpbWctPmRpcnR5ID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpbWct
PmRpcnR5ID0gdHJ1ZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorLy8gVGhpcyBpbXBsZW1lbnRz
IGdsQ29weVRleFtTdWJdSW1hZ2UyRCBmb3Igbm9uLXJlbmRlcmFibGUgaW50ZXJuYWwgdGV4dHVy
ZSBmb3JtYXRzCit2b2lkIFRleHR1cmU6OmNvcHlOb25SZW5kZXJhYmxlKEltYWdlICppbWFnZSwg
R0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgSURpcmVjdDNEU3Vy
ZmFjZTkgKnJlbmRlclRhcmdldCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBn
ZXREZXZpY2UoKTsKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZSA9IE5VTEw7CisgICAg
RDNEU1VSRkFDRV9ERVNDIGRlc2NyaXB0aW9uOworICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygm
ZGVzY3JpcHRpb24pOworICAgIAorICAgIEhSRVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVP
ZmZzY3JlZW5QbGFpblN1cmZhY2UoZGVzY3JpcHRpb24uV2lkdGgsIGRlc2NyaXB0aW9uLkhlaWdo
dCwgZGVzY3JpcHRpb24uRm9ybWF0LCBEM0RQT09MX1NZU1RFTU1FTSwgJnN1cmZhY2UsIE5VTEwp
OworCisgICAgaWYgKCFTVUNDRUVERUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiQ291
bGQgbm90IGNyZWF0ZSBtYXRjaGluZyBkZXN0aW5hdGlvbiBzdXJmYWNlLiIpOworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgcmVzdWx0ID0gZGV2
aWNlLT5HZXRSZW5kZXJUYXJnZXREYXRhKHJlbmRlclRhcmdldCwgc3VyZmFjZSk7CisKKyAgICBp
ZiAoIVNVQ0NFRURFRChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgRVJSKCJHZXRSZW5kZXJUYXJn
ZXREYXRhIHVuZXhwZWN0ZWRseSBmYWlsZWQuIik7CisgICAgICAgIHN1cmZhY2UtPlJlbGVhc2Uo
KTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAg
IEQzRExPQ0tFRF9SRUNUIHNvdXJjZUxvY2sgPSB7MH07CisgICAgUkVDVCBzb3VyY2VSZWN0ID0g
e3gsIHksIHggKyB3aWR0aCwgeSArIGhlaWdodH07CisgICAgcmVzdWx0ID0gc3VyZmFjZS0+TG9j
a1JlY3QoJnNvdXJjZUxvY2ssICZzb3VyY2VSZWN0LCAwKTsKKworICAgIGlmIChGQUlMRUQocmVz
dWx0KSkKKyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIHNvdXJjZSBzdXJm
YWNlIChyZWN0YW5nbGUgbWlnaHQgYmUgaW52YWxpZCkuIik7CisgICAgICAgIHN1cmZhY2UtPlVu
bG9ja1JlY3QoKTsKKyAgICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorCisgICAgaWYgKCFpbWFnZS0+c3VyZmFj
ZSkKKyAgICB7CisgICAgICAgIGNyZWF0ZVN1cmZhY2Uod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxG
b3JtYXQsIG1UeXBlLCBpbWFnZSk7CisgICAgfQorCisgICAgaWYgKGltYWdlLT5zdXJmYWNlID09
IE5VTEwpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byBjcmVhdGUgYW4gaW1hZ2Ugc3Vy
ZmFjZS4iKTsKKyAgICAgICAgc3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgICAgICBzdXJmYWNl
LT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsgCisg
ICAgfQorCisgICAgRDNETE9DS0VEX1JFQ1QgZGVzdExvY2sgPSB7MH07CisgICAgUkVDVCBkZXN0
UmVjdCA9IHt4b2Zmc2V0LCB5b2Zmc2V0LCB4b2Zmc2V0ICsgd2lkdGgsIHlvZmZzZXQgKyBoZWln
aHR9OworICAgIHJlc3VsdCA9IGltYWdlLT5zdXJmYWNlLT5Mb2NrUmVjdCgmZGVzdExvY2ssICZk
ZXN0UmVjdCwgMCk7CisgICAgCisgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgIHsKKyAgICAg
ICAgRVJSKCJGYWlsZWQgdG8gbG9jayB0aGUgZGVzdGluYXRpb24gc3VyZmFjZSAocmVjdGFuZ2xl
IG1pZ2h0IGJlIGludmFsaWQpLiIpOworICAgICAgICBzdXJmYWNlLT5VbmxvY2tSZWN0KCk7Cisg
ICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9P
Rl9NRU1PUlkpOworICAgIH0KKworICAgIGlmIChkZXN0TG9jay5wQml0cyAmJiBzb3VyY2VMb2Nr
LnBCaXRzKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqc291cmNlID0gKHVuc2lnbmVk
IGNoYXIqKXNvdXJjZUxvY2sucEJpdHM7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSAo
dW5zaWduZWQgY2hhciopZGVzdExvY2sucEJpdHM7CisKKyAgICAgICAgc3dpdGNoIChkZXNjcmlw
dGlvbi5Gb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoK
KyAgICAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKKyAgICAgICAgICAgIHN3aXRjaChnZXRE
M0RGb3JtYXQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfTDg6
CisgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl
c3RbeF0gPSBzb3VyY2VbeCAqIDQgKyAyXTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAgICAgICAg
ICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQThMODoKKyAgICAg
ICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykK
KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICog
MiArIDBdID0gc291cmNlW3ggKiA0ICsgMl07CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0
W3ggKiAyICsgMV0gPSBzb3VyY2VbeCAqIDQgKyAzXTsKKyAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOworICAgICAg
ICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgorICAgICAgICAgICAgc3dpdGNoKGdldEQz
REZvcm1hdCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBjYXNlIEQzREZNVF9MODoK
KyAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IoaW50IHggPSAwOyB4IDwgd2lkdGg7
IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdW5z
aWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAmIDB4Rjg7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0W3hdID0gcmVkIHwgKHJlZCA+PiA1KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3VyY2VMb2NrLlBpdGNoOwor
ICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNoOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CisgICAgICAgICAgICBzd2l0
Y2goZ2V0RDNERm9ybWF0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgRDNE
Rk1UX0w4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykK
KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9IDA7IHgg
PCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBjaGFyIHJlZCA9IHNvdXJjZVt4ICogMiArIDFdICYgMHg3QzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RbeF0gPSAocmVkIDw8IDEpIHwgKHJlZCA+PiA0KTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3Vy
Y2VMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNo
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgY2FzZSBEM0RGTVRfQThMODoKKyAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3Io
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAm
IDB4N0M7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3ggKiAyICsgMF0gPSAocmVkIDw8
IDEpIHwgKHJlZCA+PiA0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RbeCAqIDIgKyAx
XSA9IChzaWduZWQgY2hhcilzb3VyY2VbeCAqIDIgKyAxXSA+PiA3OworICAgICAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgc291cmNlICs9IHNvdXJjZUxvY2suUGl0Y2g7
CisgICAgICAgICAgICAgICAgICAgIGRlc3QgKz0gZGVzdExvY2suUGl0Y2g7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGltYWdlLT5kaXJ0eSA9IHRydWU7CisgICAgICAgIG1EaXJ0
eU1ldGFEYXRhID0gdHJ1ZTsgICAgCisgICAgfQorCisgICAgaW1hZ2UtPnN1cmZhY2UtPlVubG9j
a1JlY3QoKTsKKyAgICBzdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgc3VyZmFjZS0+UmVsZWFz
ZSgpOworfQorCitEM0RGT1JNQVQgVGV4dHVyZTo6Z2V0RDNERm9ybWF0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc2VsZWN0Rm9ybWF0KGdldEZvcm1hdCgpLCBtVHlwZSk7Cit9CisKIElEaXJlY3Qz
REJhc2VUZXh0dXJlOSAqVGV4dHVyZTo6Z2V0VGV4dHVyZSgpCiB7CiAgICAgaWYgKCFpc0NvbXBs
ZXRlKCkpCkBAIC02ODMsMTUgKzExNzUsMTkgQEAgaW50IFRleHR1cmU6OmxldmVsQ291bnQoKSBj
b25zdAogICAgIHJldHVybiBtQmFzZVRleHR1cmUgPyBtQmFzZVRleHR1cmUtPkdldExldmVsQ291
bnQoKSA6IDA7CiB9CiAKK2Jvb2wgVGV4dHVyZTo6aXNSZW5kZXJhYmxlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbUlzUmVuZGVyYWJsZTsKK30KKwogVGV4dHVyZTJEOjpUZXh0dXJlMkQoR0x1aW50
IGlkKSA6IFRleHR1cmUoaWQpCiB7CiAgICAgbVRleHR1cmUgPSBOVUxMOwotICAgIG1Db2xvcmJ1
ZmZlclByb3h5ID0gTlVMTDsKIH0KIAogVGV4dHVyZTJEOjp+VGV4dHVyZTJEKCkKIHsKLSAgICBk
ZWxldGUgbUNvbG9yYnVmZmVyUHJveHk7CisgICAgbUNvbG9yYnVmZmVyUHJveHkuc2V0KE5VTEwp
OwogCiAgICAgaWYgKG1UZXh0dXJlKQogICAgIHsKQEAgLTcxNCw5ICsxMjEwLDkgQEAgR0xlbnVt
IFRleHR1cmUyRDo6Z2V0Rm9ybWF0KCkgY29uc3QKIC8vIGZvciByZW5kZXItdG8tdGV4dHVyZSAo
c3VjaCBhcyBDb3B5VGV4SW1hZ2UpLiBXZSBoYXZlIG5vIHdheSBvZiBrZWVwaW5nIGluZGl2aWR1
YWwgaW5jb25zaXN0ZW50IGxldmVscy4KIC8vIENhbGwgdGhpcyB3aGVuIGEgcGFydGljdWxhciBs
ZXZlbCBvZiB0aGUgdGV4dHVyZSBtdXN0IGJlIGRlZmluZWQgd2l0aCBhIHNwZWNpZmljIGZvcm1h
dCwgd2lkdGggYW5kIGhlaWdodC4KIC8vCi0vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV4aXN0aW5n
IHRleHR1cmUgd2FzIHVuc3VpdGFibGUgaGFkIHRvIGJlIGRlc3Ryb3llZC4gSWYgc28sIGl0IHdp
bGwgYWxzbyBzZXQKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXhpc3RpbmcgdGV4dHVyZSB3YXMg
dW5zdWl0YWJsZSBhbmQgaGFkIHRvIGJlIGRlc3Ryb3llZC4gSWYgc28sIGl0IHdpbGwgYWxzbyBz
ZXQKIC8vIGEgbmV3IGhlaWdodCBhbmQgd2lkdGggZm9yIHRoZSB0ZXh0dXJlIGJ5IHdvcmtpbmcg
YmFja3dhcmRzIGZyb20gdGhlIGdpdmVuIHdpZHRoIGFuZCBoZWlnaHQuCi1ib29sIFRleHR1cmUy
RDo6cmVkZWZpbmVUZXh0dXJlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KQorYm9vbCBUZXh0dXJlMkQ6OnJlZGVmaW5lVGV4
dHVyZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIHR5cGUpCiB7CiAgICAgYm9vbCB3aWR0aE9rYXkgPSAobVdp
ZHRoID4+IGxldmVsID09IHdpZHRoKTsKICAgICBib29sIGhlaWdodE9rYXkgPSAobUhlaWdodCA+
PiBsZXZlbCA9PSBoZWlnaHQpOwpAQCAtNzI1LDcgKzEyMjEsOSBAQCBib29sIFRleHR1cmUyRDo6
cmVkZWZpbmVUZXh0dXJlKEdMaW50IGxlCiAgICAgICAgICAgICAgICAgICAgICB8fCAod2lkdGhP
a2F5ICYmIG1IZWlnaHQgPj4gbGV2ZWwgPT0gMCAmJiBoZWlnaHQgPT0gMSkKICAgICAgICAgICAg
ICAgICAgICAgIHx8IChoZWlnaHRPa2F5ICYmIG1XaWR0aCA+PiBsZXZlbCA9PSAwICYmIHdpZHRo
ID09IDEpKTsKIAotICAgIGJvb2wgdGV4dHVyZU9rYXkgPSAoc2l6ZU9rYXkgJiYgaW50ZXJuYWxG
b3JtYXQgPT0gbUltYWdlQXJyYXlbMF0uZm9ybWF0KTsKKyAgICBib29sIHR5cGVPa2F5ID0gKHR5
cGUgPT0gbVR5cGUpOworCisgICAgYm9vbCB0ZXh0dXJlT2theSA9IChzaXplT2theSAmJiB0eXBl
T2theSAmJiBpbnRlcm5hbEZvcm1hdCA9PSBtSW1hZ2VBcnJheVswXS5mb3JtYXQpOwogCiAgICAg
aWYgKCF0ZXh0dXJlT2theSkKICAgICB7CkBAIC03MzUsNyArMTIzMyw3IEBAIGJvb2wgVGV4dHVy
ZTJEOjpyZWRlZmluZVRleHR1cmUoR0xpbnQgbGUKIAogICAgICAgICAvLyBQdXJnZSBhbGwgdGhl
IGxldmVscyBhbmQgdGhlIHRleHR1cmUuCiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBN
QVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBJTVBM
RU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFM7IGkrKykKICAgICAgICAgewogICAgICAgICAg
ICAgaWYgKG1JbWFnZUFycmF5W2ldLnN1cmZhY2UgIT0gTlVMTCkKICAgICAgICAgICAgIHsKQEAg
LTc1Niw2ICsxMjU0LDcgQEAgYm9vbCBUZXh0dXJlMkQ6OnJlZGVmaW5lVGV4dHVyZShHTGludCBs
ZQogICAgICAgICBtV2lkdGggPSB3aWR0aCA8PCBsZXZlbDsKICAgICAgICAgbUhlaWdodCA9IGhl
aWdodCA8PCBsZXZlbDsKICAgICAgICAgbUltYWdlQXJyYXlbMF0uZm9ybWF0ID0gaW50ZXJuYWxG
b3JtYXQ7CisgICAgICAgIG1UeXBlID0gdHlwZTsKICAgICB9CiAKICAgICByZXR1cm4gIXRleHR1
cmVPa2F5OwpAQCAtNzYzLDE0ICsxMjYyLDE0IEBAIGJvb2wgVGV4dHVyZTJEOjpyZWRlZmluZVRl
eHR1cmUoR0xpbnQgbGUKIAogdm9pZCBUZXh0dXJlMkQ6OnNldEltYWdlKEdMaW50IGxldmVsLCBH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lk
ICpwaXhlbHMpCiB7Ci0gICAgcmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5hbEZvcm1hdCwg
d2lkdGgsIGhlaWdodCk7CisgICAgcmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5hbEZvcm1h
dCwgd2lkdGgsIGhlaWdodCwgdHlwZSk7CiAKICAgICBUZXh0dXJlOjpzZXRJbWFnZSh3aWR0aCwg
aGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCAmbUltYWdlQXJy
YXlbbGV2ZWxdKTsKIH0KIAogdm9pZCBUZXh0dXJlMkQ6OnNldENvbXByZXNzZWRJbWFnZShHTGlu
dCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscykKIHsKLSAgICByZWRl
ZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBy
ZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBHTF9V
TlNJR05FRF9CWVRFKTsKIAogICAgIFRleHR1cmU6OnNldENvbXByZXNzZWRJbWFnZSh3aWR0aCwg
aGVpZ2h0LCBpbnRlcm5hbEZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsICZtSW1hZ2VBcnJheVts
ZXZlbF0pOwogfQpAQCAtODI4LDI5ICsxMzI3LDQ2IEBAIHZvaWQgVGV4dHVyZTJEOjpzdWJJbWFn
ZUNvbXByZXNzZWQoR0xpbnQKIAogdm9pZCBUZXh0dXJlMkQ6OmNvcHlJbWFnZShHTGludCBsZXZl
bCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyU3RvcmFnZSAqc291cmNlKQogewotICAgIGlm
IChyZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCwgaGVpZ2h0KSkK
KyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0ID0gc291cmNlLT5nZXRSZW5kZXJU
YXJnZXQoKTsKKworICAgIGlmICghcmVuZGVyVGFyZ2V0KQogICAgIHsKLSAgICAgICAgY29udmVy
dFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIHB1c2hUZXh0dXJlKG1UZXh0dXJlLCB0cnVlKTsK
KyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7Cisg
ICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9Ci0gICAgZWxzZQor
CisgICAgYm9vbCByZWRlZmluZWQgPSByZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBtVHlwZSk7CisgICAKKyAgICBpZiAoIWlzUmVuZGVyYWJsZUZv
cm1hdCgpKQogICAgIHsKLSAgICAgICAgbmVlZFJlbmRlclRhcmdldCgpOworICAgICAgICBjb3B5
Tm9uUmVuZGVyYWJsZSgmbUltYWdlQXJyYXlbbGV2ZWxdLCBpbnRlcm5hbEZvcm1hdCwgMCwgMCwg
eCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKICAgICB9Ci0KLSAgICBpZiAod2lk
dGggIT0gMCAmJiBoZWlnaHQgIT0gMCAmJiBsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICBlbHNl
CiAgICAgewotICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7Ci0gICAgICAgIHNvdXJjZVJlY3QubGVm
dCA9IHg7Ci0gICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7Ci0gICAgICAgIHNv
dXJjZVJlY3QudG9wID0geTsKLSAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0
OworICAgICAgICBpZiAocmVkZWZpbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBjb252ZXJ0
VG9SZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgICAgIHB1c2hUZXh0dXJlKG1UZXh0dXJlLCB0cnVl
KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRS
ZW5kZXJUYXJnZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhl
aWdodCAhPSAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgICAgICB7CisgICAgICAgICAg
ICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OworICAg
ICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJj
ZVJlY3QudG9wID0geTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdo
dDsKIAotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdDsKLSAgICAgICAgSFJFU1VMVCBo
ciA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZkZXN0KTsKKyAgICAgICAgICAg
IElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0OworICAgICAgICAgICAgSFJFU1VMVCBociA9IG1UZXh0
dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZkZXN0KTsKIAotICAgICAgICBnZXRCbGl0dGVy
KCktPmZvcm1hdENvbnZlcnQoc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKSwgc291cmNlUmVjdCwg
aW50ZXJuYWxGb3JtYXQsIDAsIDAsIGRlc3QpOwotICAgICAgICBkZXN0LT5SZWxlYXNlKCk7Cisg
ICAgICAgICAgICBnZXRCbGl0dGVyKCktPmZvcm1hdENvbnZlcnQoc291cmNlLT5nZXRSZW5kZXJU
YXJnZXQoKSwgc291cmNlUmVjdCwgaW50ZXJuYWxGb3JtYXQsIDAsIDAsIGRlc3QpOworICAgICAg
ICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgbUltYWdlQXJy
YXlbbGV2ZWxdLndpZHRoID0gd2lkdGg7CkBAIC04NTgsMzYgKzEzNzQsNTMgQEAgdm9pZCBUZXh0
dXJlMkQ6OmNvcHlJbWFnZShHTGludCBsZXZlbCwgRwogICAgIG1JbWFnZUFycmF5W2xldmVsXS5m
b3JtYXQgPSBpbnRlcm5hbEZvcm1hdDsKIH0KIAotdm9pZCBUZXh0dXJlMkQ6OmNvcHlTdWJJbWFn
ZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2Ug
KnNvdXJjZSkKK3ZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xp
bnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHks
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJTdG9yYWdlICpzb3Vy
Y2UpCiB7CiAgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFycmF5W2xldmVsXS53aWR0
aCB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxdLmhlaWdodCkKICAgICB7
CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICB9CiAKLSAgICBp
ZiAocmVkZWZpbmVUZXh0dXJlKDAsIG1JbWFnZUFycmF5WzBdLmZvcm1hdCwgbUltYWdlQXJyYXlb
MF0ud2lkdGgsIG1JbWFnZUFycmF5WzBdLmhlaWdodCkpCisgICAgSURpcmVjdDNEU3VyZmFjZTkg
KnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisKKyAgICBpZiAoIXJl
bmRlclRhcmdldCkKICAgICB7Ci0gICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAg
ICAgICBwdXNoVGV4dHVyZShtVGV4dHVyZSwgdHJ1ZSk7CisgICAgICAgIEVSUigiRmFpbGVkIHRv
IHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CiAgICAgfQotICAgIGVsc2UKKworICAgIGJvb2wgcmVkZWZpbmVkID0g
cmVkZWZpbmVUZXh0dXJlKDAsIG1JbWFnZUFycmF5WzBdLmZvcm1hdCwgbUltYWdlQXJyYXlbMF0u
d2lkdGgsIG1JbWFnZUFycmF5WzBdLmhlaWdodCwgbVR5cGUpOworICAgCisgICAgaWYgKCFpc1Jl
bmRlcmFibGVGb3JtYXQoKSkKICAgICB7Ci0gICAgICAgIG5lZWRSZW5kZXJUYXJnZXQoKTsKKyAg
ICAgICAgY29weU5vblJlbmRlcmFibGUoJm1JbWFnZUFycmF5W2xldmVsXSwgZ2V0Rm9ybWF0KCks
IHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJlbmRlclRhcmdldCk7CiAg
ICAgfQotCi0gICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgIGVsc2UKICAgICB7Ci0g
ICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKLSAgICAgICAgc291cmNlUmVjdC5sZWZ0ID0geDsKLSAg
ICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKLSAgICAgICAgc291cmNlUmVjdC50
b3AgPSB5OwotICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7CisgICAgICAg
IGlmIChyZWRlZmluZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnZlcnRUb1JlbmRlclRh
cmdldCgpOworICAgICAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUpOworICAgICAg
ICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbmVlZFJlbmRlclRhcmdl
dCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAg
ICAgICB7CisgICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBzb3VyY2VS
ZWN0LmxlZnQgPSB4OworICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsK
KyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3Qu
Ym90dG9tID0geSArIGhlaWdodDsKIAotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdDsK
LSAgICAgICAgSFJFU1VMVCBociA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZk
ZXN0KTsKKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0OworICAgICAgICAgICAg
SFJFU1VMVCBociA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZkZXN0KTsKIAot
ICAgICAgICBnZXRCbGl0dGVyKCktPmZvcm1hdENvbnZlcnQoc291cmNlLT5nZXRSZW5kZXJUYXJn
ZXQoKSwgc291cmNlUmVjdCwgbUltYWdlQXJyYXlbMF0uZm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0
LCBkZXN0KTsKLSAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgZ2V0QmxpdHRl
cigpLT5mb3JtYXRDb252ZXJ0KHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCksIHNvdXJjZVJlY3Qs
IG1JbWFnZUFycmF5WzBdLmZvcm1hdCwgeG9mZnNldCwgeW9mZnNldCwgZGVzdCk7CisgICAgICAg
ICAgICBkZXN0LT5SZWxlYXNlKCk7CisgICAgICAgIH0KICAgICB9CiB9CiAKQEAgLTkxOSw2ICsx
NDUyLDE2IEBAIGJvb2wgVGV4dHVyZTJEOjppc0NvbXBsZXRlKCkgY29uc3QKICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKKyAgICBpZiAoKGdldEZvcm1hdCgpID09IEdMX0ZM
T0FUICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzRmxvYXRMaW5lYXJGaWx0ZXIoKSkgfHwKKyAg
ICAgICAgKGdldEZvcm1hdCgpID09IEdMX0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCkt
PnN1cHBvcnRzSGFsZkZsb2F0TGluZWFyRmlsdGVyKCkpKQorICAgIHsKKyAgICAgICAgaWYgKG1N
YWdGaWx0ZXIgIT0gR0xfTkVBUkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1N
aW5GaWx0ZXIgIT0gR0xfTkVBUkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworCiAgICAgaWYgKChnZXRX
cmFwUygpICE9IEdMX0NMQU1QX1RPX0VER0UgJiYgIWlzUG93Mih3aWR0aCkpCiAgICAgICAgIHx8
IChnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RPX0VER0UgJiYgIWlzUG93MihoZWlnaHQpKSkKICAg
ICB7CkBAIC05NjcsNyArMTUxMCw3IEBAIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZTJE
OjpjcmVhdGUKICAgICBJRGlyZWN0M0RUZXh0dXJlOSAqdGV4dHVyZTsKIAogICAgIElEaXJlY3Qz
RERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotICAgIEQzREZPUk1BVCBmb3JtYXQgPSBz
ZWxlY3RGb3JtYXQobUltYWdlQXJyYXlbMF0uZm9ybWF0KTsKKyAgICBEM0RGT1JNQVQgZm9ybWF0
ID0gc2VsZWN0Rm9ybWF0KG1JbWFnZUFycmF5WzBdLmZvcm1hdCwgbVR5cGUpOwogCiAgICAgSFJF
U1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUobVdpZHRoLCBtSGVpZ2h0LCBjcmVh
dGlvbkxldmVscyhtV2lkdGgsIG1IZWlnaHQsIDApLCAwLCBmb3JtYXQsIEQzRFBPT0xfREVGQVVM
VCwgJnRleHR1cmUsIE5VTEwpOwogCkBAIC0xMDE4LDcgKzE1NjEsNyBAQCBJRGlyZWN0M0RCYXNl
VGV4dHVyZTkgKlRleHR1cmUyRDo6Y29udmVyCiAgICAgewogICAgICAgICBlZ2w6OkRpc3BsYXkg
KmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7CiAgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRldmlj
ZSA9IGdldERldmljZSgpOwotICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gc2VsZWN0Rm9ybWF0
KG1JbWFnZUFycmF5WzBdLmZvcm1hdCk7CisgICAgICAgIEQzREZPUk1BVCBmb3JtYXQgPSBzZWxl
Y3RGb3JtYXQobUltYWdlQXJyYXlbMF0uZm9ybWF0LCBtVHlwZSk7CiAKICAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUobVdpZHRoLCBtSGVpZ2h0LCBjcmVhdGlv
bkxldmVscyhtV2lkdGgsIG1IZWlnaHQsIDApLCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsIGZvcm1h
dCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CiAKQEAgLTExMjMsMjMgKzE2NjYs
NTAgQEAgdm9pZCBUZXh0dXJlMkQ6OmdlbmVyYXRlTWlwbWFwcygpCiAgICAgICAgIG1JbWFnZUFy
cmF5W2ldLmhlaWdodCA9IHN0ZDo6bWF4KG1JbWFnZUFycmF5WzBdLmhlaWdodCA+PiBpLCAxKTsK
ICAgICB9CiAKLSAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgaWYgKGlzUmVuZGVyYWJsZSgpKQogICAgIHsKLSAg
ICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gTlVMTDsKLSAgICAgICAgSURpcmVjdDNE
U3VyZmFjZTkgKmxvd2VyID0gTlVMTDsKKyAgICAgICAgaWYgKG1UZXh0dXJlID09IE5VTEwpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiIGZhaWxlZCBiZWNhdXNlIG1UZXh0dXJlIHdhcyBu
dWxsLiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICAgICAgbVRleHR1
cmUtPkdldFN1cmZhY2VMZXZlbChpLTEsICZ1cHBlcik7Ci0gICAgICAgIG1UZXh0dXJlLT5HZXRT
dXJmYWNlTGV2ZWwoaSwgJmxvd2VyKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7
IGkgPD0gcTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAq
dXBwZXIgPSBOVUxMOworICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gTlVM
TDsKKworICAgICAgICAgICAgbVRleHR1cmUtPkdldFN1cmZhY2VMZXZlbChpLTEsICZ1cHBlcik7
CisgICAgICAgICAgICBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGksICZsb3dlcik7CisKKyAg
ICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2Vy
KTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCAmJiBsb3dlciAh
PSBOVUxMKQorICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7
CisgICAgICAgICAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMTsgaSA8PSBxOyBpKyspCiAgICAgICAgIHsKLSAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+
Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7CisgICAgICAgICAgICBjcmVhdGVTdXJmYWNlKG1JbWFn
ZUFycmF5W2ldLndpZHRoLCBtSW1hZ2VBcnJheVtpXS5oZWlnaHQsIG1JbWFnZUFycmF5W2ldLmZv
cm1hdCwgbVR5cGUsICZtSW1hZ2VBcnJheVtpXSk7CisgICAgICAgICAgICBpZiAobUltYWdlQXJy
YXlbaV0uc3VyZmFjZSA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKEZBSUxFRChEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShtSW1hZ2VBcnJheVtpXS5z
dXJmYWNlLCBOVUxMLCBOVUxMLCBtSW1hZ2VBcnJheVtpIC0gMV0uc3VyZmFjZSwgTlVMTCwgTlVM
TCwgRDNEWF9GSUxURVJfQk9YLCAwKSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
RVJSKCIgZmFpbGVkIHRvIGxvYWQgZmlsdGVyICVkIHRvICVkLiIsIGkgLSAxLCBpKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbUltYWdlQXJyYXlbaV0uZGlydHkgPSB0cnVlOwogICAg
ICAgICB9CiAKLSAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0g
ICAgICAgIGlmIChsb3dlciAhPSBOVUxMKSBsb3dlci0+UmVsZWFzZSgpOworICAgICAgICBtRGly
dHlNZXRhRGF0YSA9IHRydWU7CiAgICAgfQogfQogCkBAIC0xMTUwLDEzICsxNzIwLDEyIEBAIFJl
bmRlcmJ1ZmZlciAqVGV4dHVyZTJEOjpnZXRDb2xvcmJ1ZmZlcigKICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoUmVuZGVyYnVmZmVyICopTlVMTCk7CiAgICAgfQog
Ci0gICAgaWYgKG1Db2xvcmJ1ZmZlclByb3h5ID09IE5VTEwpCisgICAgaWYgKG1Db2xvcmJ1ZmZl
clByb3h5LmdldCgpID09IE5VTEwpCiAgICAgewotICAgICAgICBtQ29sb3JidWZmZXJQcm94eSA9
IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KHRoaXMs
IHRhcmdldCkpOwotICAgICAgICBtQ29sb3JidWZmZXJQcm94eS0+YWRkUmVmKCk7CisgICAgICAg
IG1Db2xvcmJ1ZmZlclByb3h5LnNldChuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBUZXh0dXJl
Q29sb3JidWZmZXJQcm94eSh0aGlzLCB0YXJnZXQpKSk7CiAgICAgfQogCi0gICAgcmV0dXJuIG1D
b2xvcmJ1ZmZlclByb3h5OworICAgIHJldHVybiBtQ29sb3JidWZmZXJQcm94eS5nZXQoKTsKIH0K
IAogSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0
YXJnZXQpCkBAIC0xMTY1LDYgKzE3MzQsMTEgQEAgSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUy
RDo6Z2V0UmVuZGVyVAogCiAgICAgbmVlZFJlbmRlclRhcmdldCgpOwogCisgICAgaWYgKG1UZXh0
dXJlID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgCiAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IE5VTEw7CiAgICAgbVRleHR1cmUt
PkdldFN1cmZhY2VMZXZlbCgwLCAmcmVuZGVyVGFyZ2V0KTsKIApAQCAtMTE3NCwxOCArMTc0OCwx
MyBAQCBJRGlyZWN0M0RTdXJmYWNlOSAqVGV4dHVyZTJEOjpnZXRSZW5kZXJUCiBUZXh0dXJlQ3Vi
ZU1hcDo6VGV4dHVyZUN1YmVNYXAoR0x1aW50IGlkKSA6IFRleHR1cmUoaWQpCiB7CiAgICAgbVRl
eHR1cmUgPSBOVUxMOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKyspCi0gICAgewot
ICAgICAgICBtRmFjZVByb3hpZXNbaV0gPSBOVUxMOwotICAgIH0KIH0KIAogVGV4dHVyZUN1YmVN
YXA6On5UZXh0dXJlQ3ViZU1hcCgpCiB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA2OyBpKysp
CiAgICAgewotICAgICAgICBkZWxldGUgbUZhY2VQcm94aWVzW2ldOworICAgICAgICBtRmFjZVBy
b3hpZXNbaV0uc2V0KE5VTEwpOwogICAgIH0KIAogICAgIGlmIChtVGV4dHVyZSkKQEAgLTEyNzcs
MTkgKzE4NDYsMTkgQEAgdm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29tbWl0UmVjdChHTGVudW0gZgog
ICAgIH0KIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xlbnVtIGZhY2UsIEdM
aW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0Fs
aWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1h
Z2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0g
dHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAg
aWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZv
cm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5k
ZXgoZmFjZSldW2xldmVsXSkpCisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhl
bHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdKSkKICAgICB7Ci0gICAg
ICAgIGNvbW1pdFJlY3QoZmFjZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQpOworICAgICAgICBjb21taXRSZWN0KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQpOwogICAgIH0KIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1h
Z2VDb21wcmVzc2VkKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xp
bnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQs
IEdMc2l6ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJl
TWFwOjpzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewot
ICAgIGlmIChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJ
bmRleChmYWNlKV1bbGV2ZWxdKSkKKyAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2Vk
KHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhl
bHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdKSkKICAgICB7Ci0gICAg
ICAgIGNvbW1pdFJlY3QoZmFjZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQpOworICAgICAgICBjb21taXRSZWN0KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQpOwogICAgIH0KIH0KIApAQCAtMTMyOCw2ICsxODk3LDE1IEBAIGJvb2wg
VGV4dHVyZUN1YmVNYXA6OmlzQ29tcGxldGUoKSBjb25zdAogICAgICAgICB9CiAgICAgfQogCisg
ICAgaWYgKChnZXRGb3JtYXQoKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0
c0Zsb2F0TGluZWFyRmlsdGVyKCkpIHx8CisgICAgICAgIChnZXRGb3JtYXQoKSA9PSBHTF9IQUxG
X0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0hhbGZGbG9hdExpbmVhckZpbHRl
cigpKSkKKyAgICB7CisgICAgICAgIGlmIChtTWFnRmlsdGVyICE9IEdMX05FQVJFU1QgfHwgKG1N
aW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtTWluRmlsdGVyICE9IEdMX05FQVJFU1RfTUlQTUFQ
X05FQVJFU1QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisKICAgICBpZiAobWlwbWFwcGluZykKICAgICB7CiAgICAgICAgIGlmICghaXNQ
b3cyKHNpemUpICYmIChnZXRXcmFwUygpICE9IEdMX0NMQU1QX1RPX0VER0UgfHwgZ2V0V3JhcFQo
KSAhPSBHTF9DTEFNUF9UT19FREdFKSkKQEAgLTEzNjgsNyArMTk0Niw3IEBAIGJvb2wgVGV4dHVy
ZUN1YmVNYXA6OmlzQ29tcHJlc3NlZCgpIGNvbnMKIElEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4
dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQogewogICAgIElEaXJlY3QzRERldmljZTkgKmRl
dmljZSA9IGdldERldmljZSgpOwotICAgIEQzREZPUk1BVCBmb3JtYXQgPSBzZWxlY3RGb3JtYXQo
bUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0KTsKKyAgICBEM0RGT1JNQVQgZm9ybWF0ID0gc2VsZWN0
Rm9ybWF0KG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCwgbVR5cGUpOwogCiAgICAgSURpcmVjdDNE
Q3ViZVRleHR1cmU5ICp0ZXh0dXJlOwogCkBAIC0xNDI0LDcgKzIwMDIsNyBAQCBJRGlyZWN0M0RC
YXNlVGV4dHVyZTkgKlRleHR1cmVDdWJlTWFwOjpjCiAgICAgewogICAgICAgICBlZ2w6OkRpc3Bs
YXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7CiAgICAgICAgIElEaXJlY3QzRERldmljZTkgKmRl
dmljZSA9IGdldERldmljZSgpOwotICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gc2VsZWN0Rm9y
bWF0KG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCk7CisgICAgICAgIEQzREZPUk1BVCBmb3JtYXQg
PSBzZWxlY3RGb3JtYXQobUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0LCBtVHlwZSk7CiAKICAgICAg
ICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUN1YmVUZXh0dXJlKG1XaWR0aCwgY3Jl
YXRpb25MZXZlbHMobVdpZHRoLCAwKSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULCBmb3JtYXQsIEQz
RFBPT0xfREVGQVVMVCwgJnRleHR1cmUsIE5VTEwpOwogCkBAIC0xNTQ2LDcgKzIxMjQsNyBAQCBi
b29sIFRleHR1cmVDdWJlTWFwOjpyZWRlZmluZVRleHR1cmUoR0xpCiAgICAgICAgICAgICAgIGlu
dGVybmFsRm9ybWF0LCB3aWR0aCk7CiAKICAgICAgICAgLy8gUHVyZ2UgYWxsIHRoZSBsZXZlbHMg
YW5kIHRoZSB0ZXh0dXJlLgotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9URVhUVVJF
X0xFVkVMUzsgaSsrKQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IElNUExFTUVOVEFUSU9O
X01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQogICAgICAgICB7CiAgICAgICAgICAgICBmb3IgKGlu
dCBmID0gMDsgZiA8IDY7IGYrKykKICAgICAgICAgICAgIHsKQEAgLTE1NzgsMzQgKzIxNTYsNTAg
QEAgYm9vbCBUZXh0dXJlQ3ViZU1hcDo6cmVkZWZpbmVUZXh0dXJlKEdMaQogICAgIHJldHVybiAh
dGV4dHVyZU9rYXk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0g
ZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwgR0xpbnQg
eSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnNv
dXJjZSkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGlu
dCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyU3RvcmFnZSAqc291cmNlKQogewot
ICAgIHVuc2lnbmVkIGludCBmYWNlaW5kZXggPSBmYWNlSW5kZXgoZmFjZSk7CisgICAgSURpcmVj
dDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAK
LSAgICBpZiAocmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgpKQor
ICAgIGlmICghcmVuZGVyVGFyZ2V0KQogICAgIHsKLSAgICAgICAgY29udmVydFRvUmVuZGVyVGFy
Z2V0KCk7Ci0gICAgICAgIHB1c2hUZXh0dXJlKG1UZXh0dXJlLCB0cnVlKTsKKyAgICAgICAgRVJS
KCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQuIik7CisgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9Ci0gICAgZWxzZQorCisgICAgdW5zaWdu
ZWQgaW50IGZhY2VpbmRleCA9IGZhY2VJbmRleCh0YXJnZXQpOworICAgIGJvb2wgcmVkZWZpbmVk
ID0gcmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgpOworCisgICAg
aWYgKCFpc1JlbmRlcmFibGVGb3JtYXQoKSkKICAgICB7Ci0gICAgICAgIG5lZWRSZW5kZXJUYXJn
ZXQoKTsKKyAgICAgICAgY29weU5vblJlbmRlcmFibGUoJm1JbWFnZUFycmF5W2ZhY2VpbmRleF1b
bGV2ZWxdLCBpbnRlcm5hbEZvcm1hdCwgMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVy
VGFyZ2V0KTsKICAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKHJlZGVmaW5lZCkK
KyAgICAgICAgeworICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFyZ2V0KCk7CisgICAgICAg
ICAgICBwdXNoVGV4dHVyZShtVGV4dHVyZSwgdHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICB7CisgICAgICAgICAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7CisgICAgICAgIH0K
IAotICAgIEFTU0VSVCh3aWR0aCA9PSBoZWlnaHQpOworICAgICAgICBBU1NFUlQod2lkdGggPT0g
aGVpZ2h0KTsKIAotICAgIGlmICh3aWR0aCA+IDAgJiYgbGV2ZWwgPCBsZXZlbENvdW50KCkpCi0g
ICAgewotICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7Ci0gICAgICAgIHNvdXJjZVJlY3QubGVmdCA9
IHg7Ci0gICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7Ci0gICAgICAgIHNvdXJj
ZVJlY3QudG9wID0geTsKLSAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0Owor
ICAgICAgICBpZiAod2lkdGggPiAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgICAgICB7
CisgICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgICAgICBzb3VyY2VSZWN0Lmxl
ZnQgPSB4OworICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAg
ICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9t
ID0geSArIGhlaWdodDsKIAotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IGdldEN1
YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsKTsKKyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5
ICpkZXN0ID0gZ2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCk7CiAKLSAgICAgICAgZ2V0
QmxpdHRlcigpLT5mb3JtYXRDb252ZXJ0KHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCksIHNvdXJj
ZVJlY3QsIGludGVybmFsRm9ybWF0LCAwLCAwLCBkZXN0KTsKLSAgICAgICAgZGVzdC0+UmVsZWFz
ZSgpOworICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5mb3JtYXRDb252ZXJ0KHNvdXJjZS0+Z2V0
UmVuZGVyVGFyZ2V0KCksIHNvdXJjZVJlY3QsIGludGVybmFsRm9ybWF0LCAwLCAwLCBkZXN0KTsK
KyAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIG1J
bWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLndpZHRoID0gd2lkdGg7CkBAIC0xNjQ0LDM3ICsy
MjM4LDU1IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0Q3UKICAgICBy
ZXR1cm4gKFNVQ0NFRURFRChocikpID8gc3VyZmFjZSA6IE5VTEw7CiB9CiAKLXZvaWQgVGV4dHVy
ZUN1YmVNYXA6OmNvcHlTdWJJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJTdG9yYWdlICpzb3VyY2UpCit2b2lkIFRleHR1cmVD
dWJlTWFwOjpjb3B5U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJTdG9yYWdlICpzb3VyY2UpCiB7Ci0gICAgR0xzaXpl
aSBzaXplID0gbUltYWdlQXJyYXlbZmFjZUluZGV4KGZhY2UpXVtsZXZlbF0ud2lkdGg7CisgICAg
R0xzaXplaSBzaXplID0gbUltYWdlQXJyYXlbZmFjZUluZGV4KHRhcmdldCldW2xldmVsXS53aWR0
aDsKIAogICAgIGlmICh4b2Zmc2V0ICsgd2lkdGggPiBzaXplIHx8IHlvZmZzZXQgKyBoZWlnaHQg
PiBzaXplKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwog
ICAgIH0KIAotICAgIGlmIChyZWRlZmluZVRleHR1cmUoMCwgbUltYWdlQXJyYXlbMF1bMF0uZm9y
bWF0LCBtSW1hZ2VBcnJheVswXVswXS53aWR0aCkpCisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJl
bmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisKKyAgICBpZiAoIXJlbmRl
clRhcmdldCkKICAgICB7Ci0gICAgICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOwotICAgICAg
ICBwdXNoVGV4dHVyZShtVGV4dHVyZSwgdHJ1ZSk7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIHJl
dHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VU
X09GX01FTU9SWSk7CiAgICAgfQotICAgIGVsc2UKKworICAgIHVuc2lnbmVkIGludCBmYWNlaW5k
ZXggPSBmYWNlSW5kZXgodGFyZ2V0KTsKKyAgICBib29sIHJlZGVmaW5lZCA9IHJlZGVmaW5lVGV4
dHVyZSgwLCBtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQsIG1JbWFnZUFycmF5WzBdWzBdLndpZHRo
KTsKKyAgIAorICAgIGlmICghaXNSZW5kZXJhYmxlRm9ybWF0KCkpCiAgICAgewotICAgICAgICBu
ZWVkUmVuZGVyVGFyZ2V0KCk7CisgICAgICAgIGNvcHlOb25SZW5kZXJhYmxlKCZtSW1hZ2VBcnJh
eVtmYWNlaW5kZXhdW2xldmVsXSwgZ2V0Rm9ybWF0KCksIDAsIDAsIHgsIHksIHdpZHRoLCBoZWln
aHQsIHJlbmRlclRhcmdldCk7CiAgICAgfQotCi0gICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgp
KQorICAgIGVsc2UKICAgICB7Ci0gICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKLSAgICAgICAgc291
cmNlUmVjdC5sZWZ0ID0geDsKLSAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsK
LSAgICAgICAgc291cmNlUmVjdC50b3AgPSB5OwotICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9
IHkgKyBoZWlnaHQ7CisgICAgICAgIGlmIChyZWRlZmluZWQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGNvbnZlcnRUb1JlbmRlclRhcmdldCgpOworICAgICAgICAgICAgcHVzaFRleHR1cmUobVRl
eHR1cmUsIHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAg
ICAgICAgbmVlZFJlbmRlclRhcmdldCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGxldmVs
IDwgbGV2ZWxDb3VudCgpKQorICAgICAgICB7CisgICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7
CisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OworICAgICAgICAgICAgc291cmNlUmVj
dC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKKyAg
ICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKIAotICAgICAgICBJRGly
ZWN0M0RTdXJmYWNlOSAqZGVzdCA9IGdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsKTsKKyAg
ICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gZ2V0Q3ViZU1hcFN1cmZhY2UodGFy
Z2V0LCBsZXZlbCk7CiAKLSAgICAgICAgZ2V0QmxpdHRlcigpLT5mb3JtYXRDb252ZXJ0KHNvdXJj
ZS0+Z2V0UmVuZGVyVGFyZ2V0KCksIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdWzBdLmZvcm1h
dCwgeG9mZnNldCwgeW9mZnNldCwgZGVzdCk7Ci0gICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAg
ICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Zm9ybWF0Q29udmVydChzb3VyY2UtPmdldFJlbmRlclRh
cmdldCgpLCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJheVswXVswXS5mb3JtYXQsIHhvZmZzZXQsIHlv
ZmZzZXQsIGRlc3QpOworICAgICAgICAgICAgZGVzdC0+UmVsZWFzZSgpOworICAgICAgICB9CiAg
ICAgfQogfQogCkBAIC0xNzI0LDIzICsyMzM2LDUyIEBAIHZvaWQgVGV4dHVyZUN1YmVNYXA6Omdl
bmVyYXRlTWlwbWFwcygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBuZWVkUmVuZGVyVGFyZ2V0
KCk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAgICBpZiAo
aXNSZW5kZXJhYmxlKCkpCiAgICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsg
aSA8PSBxOyBpKyspCisgICAgICAgIGlmIChtVGV4dHVyZSA9PSBOVUxMKQogICAgICAgICB7Ci0g
ICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShm
LCBpLTEpOwotICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gZ2V0Q3ViZU1h
cFN1cmZhY2UoZiwgaSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KIAotICAgICAg
ICAgICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIgIT0gTlVMTCkKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBnZXRCbGl0dGVyKCktPmJveEZpbHRlcih1cHBlciwgbG93ZXIpOworICAgICAg
ICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICp1cHBlciA9IGdldEN1YmVNYXBTdXJmYWNlKGYs
IGktMSk7CisgICAgICAgICAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmxvd2VyID0gZ2V0Q3Vi
ZU1hcFN1cmZhY2UoZiwgaSk7CisKKyAgICAgICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCAm
JiBsb3dlciAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Z2V0QmxpdHRlcigpLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgICAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKICAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBmID0gMDsgZiA8IDY7IGYrKykKKyAgICAgICAgeworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNyZWF0ZVN1cmZhY2UobUltYWdlQXJyYXlbZl1baV0ud2lkdGgsIG1J
bWFnZUFycmF5W2ZdW2ldLmhlaWdodCwgbUltYWdlQXJyYXlbZl1baV0uZm9ybWF0LCBtVHlwZSwg
Jm1JbWFnZUFycmF5W2ZdW2ldKTsKKyAgICAgICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbZl1b
aV0uc3VyZmFjZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7Ci0gICAgICAg
ICAgICBpZiAobG93ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoRkFJTEVEKEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKG1JbWFnZUFycmF5W2ZdW2ld
LnN1cmZhY2UsIE5VTEwsIE5VTEwsIG1JbWFnZUFycmF5W2ZdW2kgLSAxXS5zdXJmYWNlLCBOVUxM
LCBOVUxMLCBEM0RYX0ZJTFRFUl9CT1gsIDApKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIEVSUigiIGZhaWxlZCB0byBsb2FkIGZpbHRlciAlZCB0byAlZC4iLCBpIC0g
MSwgaSk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgbUltYWdlQXJyYXlb
Zl1baV0uZGlydHkgPSB0cnVlOworICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAg
bURpcnR5TWV0YURhdGEgPSB0cnVlOwogICAgIH0KIH0KIApAQCAtMTc1MywxMyArMjM5NCwxMiBA
QCBSZW5kZXJidWZmZXIgKlRleHR1cmVDdWJlTWFwOjpnZXRDb2xvcmJ1CiAKICAgICB1bnNpZ25l
ZCBpbnQgZmFjZSA9IGZhY2VJbmRleCh0YXJnZXQpOwogCi0gICAgaWYgKG1GYWNlUHJveGllc1tm
YWNlXSA9PSBOVUxMKQorICAgIGlmIChtRmFjZVByb3hpZXNbZmFjZV0uZ2V0KCkgPT0gTlVMTCkK
ICAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tmYWNlXSA9IG5ldyBSZW5kZXJidWZmZXIoaWQo
KSwgbmV3IFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KHRoaXMsIHRhcmdldCkpOwotICAgICAgICBt
RmFjZVByb3hpZXNbZmFjZV0tPmFkZFJlZigpOworICAgICAgICBtRmFjZVByb3hpZXNbZmFjZV0u
c2V0KG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KHRo
aXMsIHRhcmdldCkpKTsKICAgICB9CiAKLSAgICByZXR1cm4gbUZhY2VQcm94aWVzW2ZhY2VdOwor
ICAgIHJldHVybiBtRmFjZVByb3hpZXNbZmFjZV0uZ2V0KCk7CiB9CiAKIElEaXJlY3QzRFN1cmZh
Y2U5ICpUZXh0dXJlQ3ViZU1hcDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51bSB0YXJnZXQpCkBAIC0x
NzY3LDcgKzI0MDcsMTIgQEAgSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRS
ZQogICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOwogCiAgICAgbmVl
ZFJlbmRlclRhcmdldCgpOwotCisgICAgCisgICAgaWYgKG1UZXh0dXJlID09IE5VTEwpCisgICAg
eworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgCiAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKnJlbmRlclRhcmdldCA9IE5VTEw7CiAgICAgbVRleHR1cmUtPkdldEN1YmVNYXBTdXJmYWNl
KHN0YXRpY19jYXN0PEQzRENVQkVNQVBfRkFDRVM+KGZhY2VJbmRleCh0YXJnZXQpKSwgMCwgJnJl
bmRlclRhcmdldCk7CiAKQEAgLTE3NzUsOSArMjQyMCw5IEBAIElEaXJlY3QzRFN1cmZhY2U5ICpU
ZXh0dXJlQ3ViZU1hcDo6Z2V0UmUKIH0KIAogVGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJv
eHk6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KFRleHR1cmUgKnRleHR1cmUsIEdMZW51bSB0YXJn
ZXQpCi0gIDogQ29sb3JidWZmZXIoTlVMTCksIG1UZXh0dXJlKHRleHR1cmUpLCBtVGFyZ2V0KHRh
cmdldCkKKyAgOiBDb2xvcmJ1ZmZlcih0ZXh0dXJlKSwgbVRleHR1cmUodGV4dHVyZSksIG1UYXJn
ZXQodGFyZ2V0KQogewotICAgIEFTU0VSVCh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCB8fCBJc0N1
YmVtYXBUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOworICAgIEFTU0VSVChJc1RleHR1cmVUYXJnZXQo
dGFyZ2V0KSk7CiB9CiAKIHZvaWQgVGV4dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmFk
ZFJlZigpIGNvbnN0CkBAIC0xODE0LDQgKzI0NTksOSBAQCBHTGVudW0gVGV4dHVyZTo6VGV4dHVy
ZUNvbG9yYnVmZmVyUHJveHk6CiAgICAgcmV0dXJuIG1UZXh0dXJlLT5nZXRGb3JtYXQoKTsKIH0K
IAorYm9vbCBUZXh0dXJlOjpUZXh0dXJlQ29sb3JidWZmZXJQcm94eTo6aXNGbG9hdGluZ1BvaW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVRleHR1cmUtPmlzRmxvYXRpbmdQb2ludCgpOworfQor
CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Rl
eHR1cmUuaAkocmV2aXNpb24gNzU4MDEpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL1RleHR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTgsNiArMTgsNyBAQAogI2lu
Y2x1ZGUgPGQzZDkuaD4KIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKKyNp
bmNsdWRlICJsaWJHTEVTdjIvUmVmQ291bnRPYmplY3QuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIv
dXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCiAKQEAgLTI3LDEwICsyOCwx
MyBAQCBjbGFzcyBCbGl0OwogCiBlbnVtCiB7Ci0gICAgTUFYX1RFWFRVUkVfU0laRSA9IDIwNDgs
Ci0gICAgTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSA9IDIwNDgsCisgICAgLy8gVGhlc2UgYXJl
IHRoZSBtYXhpbXVtcyB0aGUgaW1wbGVtZW50YXRpb24gY2FuIHN1cHBvcnQKKyAgICAvLyBUaGUg
YWN0dWFsIEdMIGNhcHMgYXJlIGxpbWl0ZWQgYnkgdGhlIGRldmljZSBjYXBzCisgICAgLy8gYW5k
IHNob3VsZCBiZSBxdWVyaWVkIGZyb20gdGhlIENvbnRleHQKKyAgICBJTVBMRU1FTlRBVElPTl9N
QVhfVEVYVFVSRV9TSVpFID0gMTYzODQsCisgICAgSU1QTEVNRU5UQVRJT05fTUFYX0NVQkVfTUFQ
X1RFWFRVUkVfU0laRSA9IDE2Mzg0LAogCi0gICAgTUFYX1RFWFRVUkVfTEVWRUxTID0gMTIgICAv
LyAxK2xvZzIgb2YgTUFYX1RFWFRVUkVfU0laRQorICAgIElNUExFTUVOVEFUSU9OX01BWF9URVhU
VVJFX0xFVkVMUyA9IDE1ICAgLy8gMStsb2cyIG9mIE1BWF9URVhUVVJFX1NJWkUKIH07CiAKIGNs
YXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKQEAgLTU4LDExICs2MiwxNSBAQCBj
bGFzcyBUZXh0dXJlIDogcHVibGljIFJlZkNvdW50T2JqZWN0CiAgICAgdmlydHVhbCBHTGVudW0g
Z2V0Rm9ybWF0KCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbXBsZXRlKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25zdCA9IDA7CisgICAg
Ym9vbCBpc0Zsb2F0aW5nUG9pbnQoKSBjb25zdDsKKyAgICBib29sIGlzUmVuZGVyYWJsZUZvcm1h
dCgpIGNvbnN0OwogCisgICAgRDNERk9STUFUIGdldEQzREZvcm1hdCgpIGNvbnN0OwogICAgIElE
aXJlY3QzREJhc2VUZXh0dXJlOSAqZ2V0VGV4dHVyZSgpOwogICAgIHZpcnR1YWwgUmVuZGVyYnVm
ZmVyICpnZXRDb2xvcmJ1ZmZlcihHTGVudW0gdGFyZ2V0KSA9IDA7CiAKICAgICB2aXJ0dWFsIHZv
aWQgZ2VuZXJhdGVNaXBtYXBzKCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb3B5U3ViSW1hZ2Uo
R0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJi
dWZmZXJTdG9yYWdlICpzb3VyY2UpID0gMDsKIAogICAgIGJvb2wgaXNEaXJ0eSgpIGNvbnN0Owog
CkBAIC04NSw2ICs5Myw3IEBAIGNsYXNzIFRleHR1cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QK
ICAgICAgICAgdmlydHVhbCBpbnQgZ2V0V2lkdGgoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBp
bnQgZ2V0SGVpZ2h0KCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgR0xlbnVtIGdldEZvcm1hdCgp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNGbG9hdGluZ1BvaW50KCkgY29uc3Q7CiAK
ICAgICAgIHByaXZhdGU6CiAgICAgICAgIFRleHR1cmUgKm1UZXh0dXJlOwpAQCAtMTA2LDEzICsx
MTUsMTMgQEAgY2xhc3MgVGV4dHVyZSA6IHB1YmxpYyBSZWZDb3VudE9iamVjdAogICAgICAgICBJ
RGlyZWN0M0RTdXJmYWNlOSAqc3VyZmFjZTsKICAgICB9OwogCi0gICAgc3RhdGljIEQzREZPUk1B
VCBzZWxlY3RGb3JtYXQoR0xlbnVtIGZvcm1hdCk7Ci0gICAgaW50IGltYWdlUGl0Y2goY29uc3Qg
SW1hZ2UmIGltZykgY29uc3Q7CisgICAgc3RhdGljIEQzREZPUk1BVCBzZWxlY3RGb3JtYXQoR0xl
bnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUpOwogCiAgICAgdm9pZCBzZXRJbWFnZShHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVu
cGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKTsKICAgICBib29s
IHN1YkltYWdlKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxp
Z25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpOwogICAgIHZvaWQgc2V0Q29t
cHJlc3NlZEltYWdlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKTsKICAg
ICBib29sIHN1YkltYWdlQ29tcHJlc3NlZChHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFn
ZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZyk7CisgICAgdm9pZCBjb3B5Tm9u
UmVuZGVyYWJsZShJbWFnZSAqaW1hZ2UsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQpOwogCiAgICAgdm9p
ZCBuZWVkUmVuZGVyVGFyZ2V0KCk7CiAKQEAgLTEyOSw1MCArMTM4LDczIEBAIGNsYXNzIFRleHR1
cmUgOiBwdWJsaWMgUmVmQ291bnRPYmplY3QKIAogICAgIHZvaWQgZHJvcFRleHR1cmUoKTsKICAg
ICB2b2lkIHB1c2hUZXh0dXJlKElEaXJlY3QzREJhc2VUZXh0dXJlOSAqbmV3VGV4dHVyZSwgYm9v
bCByZW5kZXJhYmxlKTsKKyAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBJbWFnZSAqaW1nKTsKIAog
ICAgIEJsaXQgKmdldEJsaXR0ZXIoKTsKIAogICAgIGludCBsZXZlbENvdW50KCkgY29uc3Q7CiAK
KyAgICBib29sIGlzUmVuZGVyYWJsZSgpIGNvbnN0OworCiAgICAgdW5zaWduZWQgaW50IG1XaWR0
aDsKICAgICB1bnNpZ25lZCBpbnQgbUhlaWdodDsKICAgICBHTGVudW0gbU1pbkZpbHRlcjsKICAg
ICBHTGVudW0gbU1hZ0ZpbHRlcjsKICAgICBHTGVudW0gbVdyYXBTOwogICAgIEdMZW51bSBtV3Jh
cFQ7CisgICAgR0xlbnVtIG1UeXBlOworCisgICAgYm9vbCBtRGlydHlNZXRhRGF0YTsKIAogICBw
cml2YXRlOgogICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUZXh0dXJlKTsKIAogICAgIHZv
aWQgbG9hZEltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqaW5wdXQs
IHN0ZDo6c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgICAgICAg
ICAgICAgICAgICAgICBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKmlucHV0LCBz
dGQ6OnNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBEM0RTVVJGQUNFX0RFU0MgKmRl
c2NyaXB0aW9uKSBjb25zdDsKIAogICAgIHZvaWQgbG9hZEFscGhhSW1hZ2VEYXRhKEdMaW50IHhv
ZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICpp
bnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQg
bG9hZEFscGhhRmxvYXRJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQ
aXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2b2lkIGxvYWRBbHBoYUhhbGZGbG9hdElt
YWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0KSBjb25zdDsKICAgICB2b2lkIGxvYWRMdW1pbmFuY2VJbWFnZURhdGEoR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwotICAgIHZv
aWQgbG9hZEx1bWluYW5jZUFscGhhSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7CisgICAgdm9pZCBs
b2FkTHVtaW5hbmNlRmxvYXRJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qg
b3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkTHVtaW5hbmNl
SGFsZkZsb2F0SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBo
YUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3Q7CisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxw
aGFGbG9hdEltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdp
ZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1
dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhh
SGFsZkZsb2F0SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwogICAgIHZvaWQgbG9hZFJHQlVCeXRl
SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0OwogICAgIHZvaWQgbG9hZFJHQjU2NUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkUkdC
RmxvYXRJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQg
Km91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkUkdCSGFsZkZsb2F0SW1hZ2VEYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsK
ICAgICB2b2lkIGxvYWRSR0JBVUJ5dGVJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwogICAgIHZvaWQgbG9hZFJHQkE0NDQ0
SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0OwogICAgIHZvaWQgbG9hZFJHQkE1NTUxSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQgbG9h
ZFJHQkFGbG9hdEltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkUkdCQUhhbGZGbG9hdEltYWdlRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQp
IGNvbnN0OwogICAgIHZvaWQgbG9hZEJHUkFJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBv
dXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKIAogICAgIElEaXJlY3QzREJhc2VUZXh0
dXJlOSAqbUJhc2VUZXh0dXJlOyAvLyBUaGlzIGlzIGEgd2VhayBwb2ludGVyLiBUaGUgZGVyaXZl
ZCBjbGFzcyBpcyBhc3N1bWVkIHRvIG93biBhIHN0cm9uZyBwb2ludGVyLgogCiAgICAgYm9vbCBt
RGlydHk7Ci0gICAgYm9vbCBtRGlydHlNZXRhRGF0YTsKICAgICBib29sIG1Jc1JlbmRlcmFibGU7
Ci0KLSAgICB2b2lkIGNyZWF0ZVN1cmZhY2UoR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IEdMZW51bSBmb3JtYXQsIEltYWdlICppbWcpOwogfTsKIAogY2xhc3MgVGV4dHVyZTJEIDogcHVi
bGljIFRleHR1cmUKQEAgLTE5MCw3ICsyMjIsNyBAQCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMg
VGV4dHVyZQogICAgIHZvaWQgc3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTGVudW0gdHlwZSwgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMp
OwogICAgIHZvaWQgc3ViSW1hZ2VDb21wcmVzc2VkKEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7CiAgICAgdm9pZCBj
b3B5SW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2Ug
KnNvdXJjZSk7Ci0gICAgdm9pZCBjb3B5U3ViSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJTdG9yYWdlICpzb3VyY2UpOworICAgIHZvaWQgY29weVN1
YkltYWdlKEdMZW51bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
UmVuZGVyYnVmZmVyU3RvcmFnZSAqc291cmNlKTsKIAogICAgIGJvb2wgaXNDb21wbGV0ZSgpIGNv
bnN0OwogICAgIGJvb2wgaXNDb21wcmVzc2VkKCkgY29uc3Q7CkBAIC0yMDksMTQgKzI0MSwxNCBA
QCBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQogCiAgICAgdmlydHVhbCBib29sIGRp
cnR5SW1hZ2VEYXRhKCkgY29uc3Q7CiAKLSAgICBib29sIHJlZGVmaW5lVGV4dHVyZShHTGludCBs
ZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCk7CisgICAgYm9vbCByZWRlZmluZVRleHR1cmUoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5h
bEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSB0eXBlKTsKICAg
ICB2b2lkIGNvbW1pdFJlY3QoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZz
ZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKIAotICAgIEltYWdlIG1JbWFnZUFy
cmF5W01BWF9URVhUVVJFX0xFVkVMU107CisgICAgSW1hZ2UgbUltYWdlQXJyYXlbSU1QTEVNRU5U
QVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKIAogICAgIElEaXJlY3QzRFRleHR1cmU5ICptVGV4
dHVyZTsKIAotICAgIFJlbmRlcmJ1ZmZlciAqbUNvbG9yYnVmZmVyUHJveHk7CisgICAgQmluZGlu
Z1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBtQ29sb3JidWZmZXJQcm94eTsKIH07CiAKIGNsYXNzIFRl
eHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKQEAgLTIzOCwxMCArMjcwLDEwIEBAIGNsYXNz
IFRleHR1cmVDdWJlTWFwIDogcHVibGljIFRleHR1cmUKIAogICAgIHZvaWQgc2V0Q29tcHJlc3Nl
ZEltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZv
aWQgKnBpeGVscyk7CiAKLSAgICB2b2lkIHN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZl
bCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBo
ZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQs
IGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVt
IGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVp
IHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUs
IGNvbnN0IHZvaWQgKnBpeGVscyk7Ci0gICAgdm9pZCBjb3B5SW1hZ2UoR0xlbnVtIGZhY2UsIEdM
aW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJTdG9yYWdlICpzb3VyY2UpOwot
ICAgIHZvaWQgY29weVN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnNvdXJjZSk7CisgICAgdm9pZCBzdWJJ
bWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51
bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAg
dm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBH
TGVudW0gZm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAg
ICB2b2lkIGNvcHlJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVy
bmFsRm9ybWF0LCBHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwgUmVuZGVyYnVmZmVyU3RvcmFnZSAqc291cmNlKTsKKyAgICB2b2lkIGNvcHlTdWJJbWFnZShH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwg
R0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1
ZmZlclN0b3JhZ2UgKnNvdXJjZSk7CiAKICAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdDsKICAg
ICBib29sIGlzQ29tcHJlc3NlZCgpIGNvbnN0OwpAQCAtMjcyLDExICszMDQsMTEgQEAgY2xhc3Mg
VGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQogICAgIHZvaWQgY29tbWl0UmVjdChHTGVu
dW0gZmFjZVRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQs
IEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKICAgICBib29sIHJlZGVmaW5lVGV4dHVy
ZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoKTsKIAot
ICAgIEltYWdlIG1JbWFnZUFycmF5WzZdW01BWF9URVhUVVJFX0xFVkVMU107CisgICAgSW1hZ2Ug
bUltYWdlQXJyYXlbNl1bSU1QTEVNRU5UQVRJT05fTUFYX1RFWFRVUkVfTEVWRUxTXTsKIAogICAg
IElEaXJlY3QzREN1YmVUZXh0dXJlOSAqbVRleHR1cmU7CiAKLSAgICBSZW5kZXJidWZmZXIgKm1G
YWNlUHJveGllc1s2XTsKKyAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1GYWNlUHJv
eGllc1s2XTsKIH07CiB9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvbGliR0xFU3YyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAibGliR0xFU3YyL3V0aWxpdGllcy5oIgog
I2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4
dC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9GZW5jZS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9G
cmFtZWJ1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Qcm9ncmFtLmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oIgpAQCAtNzM2LDcgKzczNyw3IEBAIHZvaWQgX19zdGRj
YWxsIGdsQ29tcHJlc3NlZFRleEltYWdlMkQoR0wKIAogICAgIHRyeQogICAgIHsKLSAgICAgICAg
aWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAg
IGlmIChsZXZlbCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQpAQCAtNzQ2LDM0ICs3NDcsNiBAQCB2b2lkIF9fc3Rk
Y2FsbCBnbENvbXByZXNzZWRUZXhJbWFnZTJEKEdMCiAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBzd2l0Y2ggKHRhcmdldCkK
LSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgIGlm
ICh3aWR0aCA+IChnbDo6TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkgfHwgaGVpZ2h0ID4gKGds
OjpNQVhfVEVYVFVSRV9TSVpFID4+IGxldmVsKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWDoKLSAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgICBj
YXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VC
RV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgIGlmICh3aWR0aCAhPSBoZWlnaHQpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6Ok1BWF9DVUJF
X01BUF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFYX0NVQkVfTUFQ
X1RFWFRVUkVfU0laRSA+PiBsZXZlbCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihH
TF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZv
cm1hdCkKICAgICAgICAgewogICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19E
WFQxX0VYVDoKQEAgLTc5Miw2ICs3NjUsNDEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb21wcmVzc2Vk
VGV4SW1hZ2UyRChHTAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAgICAg
ICAgICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAgICAgICAg
IGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigpID4+IGxl
dmVsKSB8fAorICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11
bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1RF
WFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJF
X0NVQkVfTUFQX05FR0FUSVZFX1g6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9ZOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWToKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1o6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9a
OgorICAgICAgICAgICAgICAgIGlmICh3aWR0aCAhPSBoZWlnaHQpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRleHQt
PmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSB8fAorICAgICAgICAg
ICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5z
aW9uKCkgPj4gbGV2ZWwpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKwogICAgICAg
ICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygpKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAv
LyBpbiB0aGlzIGNhc2UsIGl0J3MgYXMgdGhvdWdoIHRoZSBpbnRlcm5hbCBmb3JtYXQgc3dpdGNo
IGZhaWxlZApAQCAtODU5LDcgKzg2Nyw3IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29tcHJlc3NlZFRl
eFN1YkltYWdlMkQKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+IGdsOjpNQVhfVEVY
VFVSRV9MRVZFTFMpCisgICAgICAgIGlmIChsZXZlbCA8IDApCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQpAQCAtODg4LDYg
Kzg5NiwxMSBAQCB2b2lkIF9fc3RkY2FsbCBnbENvbXByZXNzZWRUZXhTdWJJbWFnZTJECiAKICAg
ICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsZXZlbCA+IGNv
bnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisK
ICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZXMoKSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsgLy8gaW4gdGhpcyBjYXNlLCBpdCdzIGFzIHRob3VnaCB0aGUgZm9ybWF0IHN3aXRjaCBo
YXMgZmFpbGVkLgpAQCAtOTc4LDQ4ICs5OTEsNiBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJ
bWFnZTJEKEdMZW51bSB0CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxV
RSk7CiAgICAgICAgIH0KIAotICAgICAgICBzd2l0Y2ggKHRhcmdldCkKLSAgICAgICAgewotICAg
ICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoKLSAgICAgICAgICAgIGlmICh3aWR0aCA+IChnbDo6
TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkgfHwgaGVpZ2h0ID4gKGdsOjpNQVhfVEVYVFVSRV9T
SVpFID4+IGxldmVsKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWDoKLSAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKLSAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWjoKLSAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WjoKLSAgICAgICAgICAgIGlmICh3aWR0aCAhPSBoZWlnaHQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJ
WkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSA+
PiBsZXZlbCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKLSAgICAgICAg
ewotICAgICAgICAgIGNhc2UgR0xfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0U6
Ci0gICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6Ci0gICAgICAgICAgY2FzZSBHTF9S
R0I6Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOgotICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVDogIC8vIENvbXByZXNzZWQgdGV4dHVyZXMgYXJlIG5vdCBzdXBw
b3J0ZWQgaGVyZSwgYnV0IGlmIHRoZXkgYXJlIHVuc3VwcG9ydGVkIGFsdG9nZXRoZXIsCi0gICAg
ICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDogLy8gYSBkaWZmZXJl
bnQgZXJyb3IgaXMgZ2VuZXJhdGVkIHRoYW4gb3RoZXJ3aXNlLiBUaGF0IGlzIGhhbmRsZWQgYmVs
b3cuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICB9Ci0KICAgICAgICAgaWYg
KGJvcmRlciAhPSAwKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CkBAIC0xMDI5LDIwICsxMDAwLDM4IEBAIHZvaWQgX19zdGRjYWxsIGdsQ29w
eVRleEltYWdlMkQoR0xlbnVtIHQKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgaWYgKGludGVybmFsZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENf
RFhUMV9FWFQgfHwgCi0gICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUMV9FWFQpCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNDb21wcmVz
c2VkVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAg
ICAgICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lv
bigpID4+IGxldmVsKSB8fAorICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+
Z2V0TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCiAgICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04p
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6
CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgICAgICAgICBpZiAod2lk
dGggIT0gaGVpZ2h0KQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9u
KCkgPj4gbGV2ZWwpIHx8CisgICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5n
ZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0p
OwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVm
ZmVyID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisKICAgICAgICAgICAgIGlmIChm
cmFtZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJB
TUVCVUZGRVJfT1BFUkFUSU9OKTsKQEAgLTEwNTQsNiArMTA0Myw1OSBAQCB2b2lkIF9fc3RkY2Fs
bCBnbENvcHlUZXhJbWFnZTJEKEdMZW51bSB0CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAg
IGdsOjpDb2xvcmJ1ZmZlciAqc291cmNlID0gZnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyKCk7
CisgICAgICAgICAgICBHTGVudW0gY29sb3JidWZmZXJGb3JtYXQgPSBzb3VyY2UtPmdldEZvcm1h
dCgpOworCisgICAgICAgICAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gdGFibGUgMy45CisgICAg
ICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1h
dCAhPSBHTF9BTFBIQSAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAh
PSBHTF9SR0JBICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdM
X1JHQkE0ICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JH
QjVfQTEgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdC
QThfT0VTKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAg
ICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQg
IT0gR0xfUkdCICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdM
X1JHQjU2NSAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9S
R0I4X09FUyAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9S
R0JBICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0
ICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEg
JiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VT
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAg
ICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0
ICE9IEdMX1JHQkEgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0g
R0xfUkdCQTQgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xf
UkdCNV9BMSAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9S
R0JBOF9PRVMpCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0Jf
UzNUQ19EWFQxX0VYVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNU
Q19EWFQxX0VYVDoKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNDb21wcmVz
c2VkVGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAgIH0KKwogICAgICAg
ICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQo
KTsKQEAgLTEwNjIsMTEgKzExMDQsNiBAQCB2b2lkIF9fc3RkY2FsbCBnbENvcHlUZXhJbWFnZTJE
KEdMZW51bSB0CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAodGV4dHVyZS0+aXNDb21wcmVzc2VkKCkpCi0g
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9PUEVSQVRJT04pOwotICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIHRl
eHR1cmUtPmNvcHlJbWFnZShsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWln
aHQsIHNvdXJjZSk7CiAgICAgICAgICAgICB9CkBAIC0xMDc5LDE3ICsxMTE2LDkgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xDb3B5VGV4SW1hZ2UyRChHTGVudW0gdAogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJB
VElPTik7Ci0gICAgICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29w
eUltYWdlKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBzb3VyY2UpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9CisgICAgICAg
ICAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3Rk
OjpiYWRfYWxsb2MmKQpAQCAtMTExMSw3ICsxMTQwLDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5
VGV4U3ViSW1hZ2UyRChHTGVudQogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gZ2w6
Ok1BWF9URVhUVVJFX0xFVkVMUyB8fCB4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0
aCA8IDAgfHwgaGVpZ2h0IDwgMCkKKyAgICAgICAgaWYgKGxldmVsIDwgMCB8fCB4b2Zmc2V0IDwg
MCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKICAgICAgICAgewog
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CkBA
IC0xMTMwLDcgKzExNTksMTMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5VGV4U3ViSW1hZ2UyRChH
TGVudQogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAo
bGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAg
ICAgICAgfQorCiAgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVyID0gY29u
dGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisKICAgICAgICAgICAgIGlmIChmcmFtZWJ1ZmZl
ci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCiAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVCVUZGRVJf
T1BFUkFUSU9OKTsKQEAgLTExNDIsNDIgKzExNzcsNzAgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xDb3B5
VGV4U3ViSW1hZ2UyRChHTGVudQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBnbDo6Q29s
b3JidWZmZXIgKnNvdXJjZSA9IGZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpOworICAgICAg
ICAgICAgR0xlbnVtIGNvbG9yYnVmZmVyRm9ybWF0ID0gc291cmNlLT5nZXRGb3JtYXQoKTsKKyAg
ICAgICAgICAgIGdsOjpUZXh0dXJlICp0ZXh0dXJlID0gTlVMTDsKKwogICAgICAgICAgICAgaWYg
KHRhcmdldCA9PSBHTF9URVhUVVJFXzJEKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGdsOjpUZXh0dXJlMkQgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAg
ICAgICAgICAgICB0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbHNlIGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJn
ZXQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5n
ZXRUZXh0dXJlQ3ViZU1hcCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJF
QUNIQUJMRSgpOwogCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFU
SU9OKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0Nv
bXByZXNzZWQoKSkKKyAgICAgICAgICAgIEdMZW51bSB0ZXh0dXJlRm9ybWF0ID0gdGV4dHVyZS0+
Z2V0Rm9ybWF0KCk7CisKKyAgICAgICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAz
LjkKKyAgICAgICAgICAgIHN3aXRjaCAodGV4dHVyZUZvcm1hdCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZm
ZXJGb3JtYXQgIT0gR0xfQUxQSEEgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJG
b3JtYXQgIT0gR0xfUkdCQSAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1h
dCAhPSBHTF9SR0JBNCAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAh
PSBHTF9SR0I1X0ExICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9
IEdMX1JHQkE4X09FUykKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZSBpZiAoZ2w6OklzQ3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBj
b250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0
dXJlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlO
QU5DRToKKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgICAgICAgaWYgKGNv
bG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQiAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1
ZmZlckZvcm1hdCAhPSBHTF9SR0I1NjUgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZm
ZXJGb3JtYXQgIT0gR0xfUkdCOF9PRVMgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZm
ZXJGb3JtYXQgIT0gR0xfUkdCQSAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZv
cm1hdCAhPSBHTF9SR0JBNCAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1h
dCAhPSBHTF9SR0I1X0ExICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0
ICE9IEdMX1JHQkE4X09FUykKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICAgICAgaWYgKHRleHR1cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0JBICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9y
bWF0ICE9IEdMX1JHQkE0ICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0
ICE9IEdMX1JHQjVfQTEgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQg
IT0gR0xfUkdCQThfT0VTKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBVTlJF
QUNIQUJMRSgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdM
X0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09N
UFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9m
ZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKICAgICAgICAgfQog
ICAgIH0KIApAQCAtMTI5Myw2ICsxMzU2LDMzIEBAIHZvaWQgX19zdGRjYWxsIGdsRGVsZXRlQnVm
ZmVycyhHTHNpemVpIG4KICAgICB9CiB9CiAKK3ZvaWQgX19zdGRjYWxsIGdsRGVsZXRlRmVuY2Vz
TlYoR0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGZlbmNlcykKK3sKKyAgICBUUkFDRSgiKEdMc2l6
ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGZlbmNlcyA9IDB4JTAuOHApIiwgbiwgZmVuY2VzKTsK
KworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKG4gPCAwKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgIH0KKworICAgICAg
ICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYg
KGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsg
aSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmRlbGV0ZUZlbmNl
KGZlbmNlc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9N
RU1PUlkpOworICAgIH0KK30KKwogdm9pZCBfX3N0ZGNhbGwgZ2xEZWxldGVGcmFtZWJ1ZmZlcnMo
R0xzaXplaSBuLCBjb25zdCBHTHVpbnQqIGZyYW1lYnVmZmVycykKIHsKICAgICBUUkFDRSgiKEdM
c2l6ZWkgbiA9ICVkLCBjb25zdCBHTHVpbnQqIGZyYW1lYnVmZmVycyA9IDB4JTAuOHApIiwgbiwg
ZnJhbWVidWZmZXJzKTsKQEAgLTE2MjQsNyArMTcxNCw3IEBAIHZvaWQgX19zdGRjYWxsIGdsRGlz
YWJsZVZlcnRleEF0dHJpYkFycmEKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewot
ICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0cmliRW5hYmxlZChpbmRleCwgZmFsc2Up
OworICAgICAgICAgICAgY29udGV4dC0+c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgs
IGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBA
IC0xNjY5LDIwICsxNzU5LDI1IEBAIHZvaWQgX19zdGRjYWxsIGdsRHJhd0VsZW1lbnRzKEdMZW51
bSBtb2QKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHN3aXRjaCAodHlwZSkKLSAgICAgICAgewotICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURToKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOgotICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwot
ICAgICAgICB9Ci0KICAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOwogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBzd2l0
Y2ggKHR5cGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURf
QllURToKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6CisgICAgICAg
ICAgICAgICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0czMyYml0SW5kaWNlcygpKQorICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7ICAgIAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9FTlVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgICAgICBjb250ZXh0LT5k
cmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIGluZGljZXMpOwogICAgICAgICB9CiAgICAg
fQpAQCAtMTczOSw3ICsxODM0LDMzIEBAIHZvaWQgX19zdGRjYWxsIGdsRW5hYmxlVmVydGV4QXR0
cmliQXJyYXkKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAg
Y29udGV4dC0+c2V0VmVydGV4QXR0cmliRW5hYmxlZChpbmRleCwgdHJ1ZSk7CisgICAgICAgICAg
ICBjb250ZXh0LT5zZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRleCwgdHJ1ZSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30KKwordm9pZCBfX3N0ZGNh
bGwgZ2xGaW5pc2hGZW5jZU5WKEdMdWludCBmZW5jZSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBm
ZW5jZSA9ICVkKSIsIGZlbmNlKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRl
eHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQor
ICAgICAgICB7CisgICAgICAgICAgICBnbDo6RmVuY2UqIGZlbmNlT2JqZWN0ID0gY29udGV4dC0+
Z2V0RmVuY2UoZmVuY2UpOworCisgICAgICAgICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9P
UEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmZW5jZU9iamVjdC0+Zmlu
aXNoRmVuY2UoKTsKICAgICAgICAgfQogICAgIH0KICAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYp
CkBAIC0yMDQ2LDYgKzIxNjcsMzMgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZW5lcmF0ZU1pcG1hcChH
TGVudW0gdAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNhbGwgZ2xHZW5GZW5jZXNOVihHTHNpemVp
IG4sIEdMdWludCogZmVuY2VzKQoreworICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIEdMdWlu
dCogZmVuY2VzID0gMHglMC44cCkiLCBuLCBmZW5jZXMpOworCisgICAgdHJ5CisgICAgeworICAg
ICAgICBpZiAobiA8IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0
ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgZmVuY2VzW2ldID0gY29udGV4dC0+Y3JlYXRlRmVuY2UoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQor
CiB2b2lkIF9fc3RkY2FsbCBnbEdlbkZyYW1lYnVmZmVycyhHTHNpemVpIG4sIEdMdWludCogZnJh
bWVidWZmZXJzKQogewogICAgIFRSQUNFKCIoR0xzaXplaSBuID0gJWQsIEdMdWludCogZnJhbWVi
dWZmZXJzID0gMHglMC44cCkiLCBuLCBmcmFtZWJ1ZmZlcnMpOwpAQCAtMjQyMSw2ICsyNTY5LDMz
IEBAIEdMZW51bSBfX3N0ZGNhbGwgZ2xHZXRFcnJvcih2b2lkKQogICAgIHJldHVybiBHTF9OT19F
UlJPUjsKIH0KIAordm9pZCBfX3N0ZGNhbGwgZ2xHZXRGZW5jZWl2TlYoR0x1aW50IGZlbmNlLCBH
TGVudW0gcG5hbWUsIEdMaW50ICpwYXJhbXMpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgZmVuY2Ug
PSAlZCwgR0xlbnVtIHBuYW1lID0gMHglWCwgR0xpbnQgKnBhcmFtcyA9IDB4JTAuOHApIiwgZmVu
Y2UsIHBuYW1lLCBwYXJhbXMpOworCisgICAgdHJ5CisgICAgeworICAgIAorICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpGZW5jZSAqZmVuY2VPYmplY3QgPSBjb250
ZXh0LT5nZXRGZW5jZShmZW5jZSk7CisKKyAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBO
VUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZlbmNlT2JqZWN0
LT5nZXRGZW5jZWl2KHBuYW1lLCBwYXJhbXMpOworICAgICAgICB9CisgICAgfQorICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0Zf
TUVNT1JZKTsKKyAgICB9Cit9CisKIHZvaWQgX19zdGRjYWxsIGdsR2V0RmxvYXR2KEdMZW51bSBw
bmFtZSwgR0xmbG9hdCogcGFyYW1zKQogewogICAgIFRSQUNFKCIoR0xlbnVtIHBuYW1lID0gMHgl
WCwgR0xmbG9hdCogcGFyYW1zID0gMHglMC44cCkiLCBwbmFtZSwgcGFyYW1zKTsKQEAgLTMyODcs
MTIgKzM0NjIsMTIgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xHZXRWZXJ0ZXhBdHRyaWJmdihHTHVpbgog
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgY29uc3QgZ2w6OkF0dHJpYnV0ZVN0YXRlICZhdHRyaWJTdGF0
ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKKyAgICAgICAgICAgIGNv
bnN0IGdsOjpWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4
QXR0cmliU3RhdGUoaW5kZXgpOwogCiAgICAgICAgICAgICBzd2l0Y2ggKHBuYW1lKQogICAgICAg
ICAgICAgewogICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxF
RDoKLSAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpKGF0dHJpYlN0YXRlLm1FbmFi
bGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKKyAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdM
ZmxvYXQpKGF0dHJpYlN0YXRlLm1BcnJheUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICBjYXNlIEdMX1ZFUlRFWF9BVFRS
SUJfQVJSQVlfU0laRToKICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKEdMZmxvYXQpYXR0cmli
U3RhdGUubVNpemU7CkBAIC0zMzQwLDEyICszNTE1LDEyIEBAIHZvaWQgX19zdGRjYWxsIGdsR2V0
VmVydGV4QXR0cmliaXYoR0x1aW4KICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbnN0IGdsOjpBdHRy
aWJ1dGVTdGF0ZSAmYXR0cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShp
bmRleCk7CisgICAgICAgICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0
ZSA9IGNvbnRleHQtPmdldFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKIAogICAgICAgICAgICAg
c3dpdGNoIChwbmFtZSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9WRVJU
RVhfQVRUUklCX0FSUkFZX0VOQUJMRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChhdHRy
aWJTdGF0ZS5tRW5hYmxlZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgICAgICAgICAg
KnBhcmFtcyA9IChhdHRyaWJTdGF0ZS5tQXJyYXlFbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNF
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhf
QVRUUklCX0FSUkFZX1NJWkU6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRl
Lm1TaXplOwpAQCAtMzQxNCwyOCArMzU4OSwyNyBAQCB2b2lkIF9fc3RkY2FsbCBnbEhpbnQoR0xl
bnVtIHRhcmdldCwgR0xlCiAKICAgICB0cnkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAodGFyZ2V0
KQorICAgICAgICBzd2l0Y2ggKG1vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX0dF
TkVSQVRFX01JUE1BUF9ISU5UOgotICAgICAgICAgICAgc3dpdGNoIChtb2RlKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICBjYXNlIEdMX0ZBU1RFU1Q6Ci0gICAgICAgICAgICAgIGNhc2Ug
R0xfTklDRVNUOgotICAgICAgICAgICAgICBjYXNlIEdMX0RPTlRfQ0FSRToKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgCi0gICAgICAgICAgICB9CisgICAgICAgICAgY2Fz
ZSBHTF9GQVNURVNUOgorICAgICAgICAgIGNhc2UgR0xfTklDRVNUOgorICAgICAgICAgIGNhc2Ug
R0xfRE9OVF9DQVJFOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsgCiAgICAgICAgIH0KIAogICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7Ci0gICAgICAgIGlmIChjb250ZXh0
KQorICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRh
cmdldCA9PSBHTF9HRU5FUkFURV9NSVBNQVBfSElOVCkKLSAgICAgICAgICAgICAgICBjb250ZXh0
LT5zZXRHZW5lcmF0ZU1pcG1hcEhpbnQobW9kZSk7CisgICAgICAgICAgY2FzZSBHTF9HRU5FUkFU
RV9NSVBNQVBfSElOVDoKKyAgICAgICAgICAgIGlmIChjb250ZXh0KSBjb250ZXh0LT5zZXRHZW5l
cmF0ZU1pcG1hcEhpbnQobW9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNl
IEdMX0ZSQUdNRU5UX1NIQURFUl9ERVJJVkFUSVZFX0hJTlRfT0VTOgorICAgICAgICAgICAgaWYg
KGNvbnRleHQpIGNvbnRleHQtPnNldEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQobW9kZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2go
c3RkOjpiYWRfYWxsb2MmKQpAQCAtMzUwNCw2ICszNjc4LDM0IEBAIEdMYm9vbGVhbiBfX3N0ZGNh
bGwgZ2xJc0VuYWJsZWQoR0xlbnVtIGMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0dMYm9vbGVh
biBfX3N0ZGNhbGwgZ2xJc0ZlbmNlTlYoR0x1aW50IGZlbmNlKQoreworICAgIFRSQUNFKCIoR0x1
aW50IGZlbmNlID0gJWQpIiwgZmVuY2UpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBnbDo6
Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRDb250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGdsOjpGZW5jZSAqZmVuY2VPYmplY3QgPSBjb250
ZXh0LT5nZXRGZW5jZShmZW5jZSk7CisKKyAgICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBO
VUxMKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GQUxTRTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZlbmNlT2JqZWN0LT5pc0ZlbmNlKCk7
CisgICAgICAgIH0KKyAgICB9CisgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2MmKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX0ZBTFNFKTsKKyAgICB9CisK
KyAgICByZXR1cm4gR0xfRkFMU0U7Cit9CisKIEdMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xJc0ZyYW1l
YnVmZmVyKEdMdWludCBmcmFtZWJ1ZmZlcikKIHsKICAgICBUUkFDRSgiKEdMdWludCBmcmFtZWJ1
ZmZlciA9ICVkKSIsIGZyYW1lYnVmZmVyKTsKQEAgLTM4NDEsMjIgKzQwNDMsMTIgQEAgdm9pZCBf
X3N0ZGNhbGwgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdAogICAgICAgICAgICAgcmV0dXJuIGVy
cm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KIAotICAgICAgICBzd2l0Y2ggKGludGVy
bmFsZm9ybWF0KQorICAgICAgICBpZiAoIWdsOjpJc0NvbG9yUmVuZGVyYWJsZShpbnRlcm5hbGZv
cm1hdCkgJiYgIWdsOjpJc0RlcHRoUmVuZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkgJiYgIWdsOjpJ
c1N0ZW5jaWxSZW5kZXJhYmxlKGludGVybmFsZm9ybWF0KSkKICAgICAgICAgewotICAgICAgICAg
IGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBNDoKLSAg
ICAgICAgICBjYXNlIEdMX1JHQjVfQTE6Ci0gICAgICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAg
ICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lOREVYODoKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRf
U1RFTkNJTDhfT0VTOgotICAgICAgICAgIGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICAgICAgY2Fz
ZSBHTF9SR0JBOF9PRVM6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAod2lkdGggPCAwIHx8IGhlaWdodCA8IDAgfHwgd2lkdGggPiBnbDo6TUFYX1JF
TkRFUkJVRkZFUl9TSVpFIHx8IGhlaWdodCA+IGdsOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUgfHwg
c2FtcGxlcyA8IDApCisgICAgICAgIGlmICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCBzYW1w
bGVzIDwgMCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
VkFMVUUpOwogICAgICAgICB9CkBAIC0zODY1LDcgKzQwNTcsOSBAQCB2b2lkIF9fc3RkY2FsbCBn
bFJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0CiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChzYW1wbGVzID4gY29udGV4dC0+Z2V0TWF4U3VwcG9ydGVkU2Ft
cGxlcygpKQorICAgICAgICAgICAgaWYgKHdpZHRoID4gY29udGV4dC0+Z2V0TWF4aW11bVJlbmRl
cmJ1ZmZlckRpbWVuc2lvbigpIHx8IAorICAgICAgICAgICAgICAgIGhlaWdodCA+IGNvbnRleHQt
PmdldE1heGltdW1SZW5kZXJidWZmZXJEaW1lbnNpb24oKSB8fAorICAgICAgICAgICAgICAgIHNh
bXBsZXMgPiBjb250ZXh0LT5nZXRNYXhTdXBwb3J0ZWRTYW1wbGVzKCkpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAg
ICAgICAgfQpAQCAtMzkyOSw2ICs0MTIzLDM3IEBAIHZvaWQgX19zdGRjYWxsIGdsU2FtcGxlQ292
ZXJhZ2UoR0xjbGFtcGYKICAgICB9CiB9CiAKK3ZvaWQgX19zdGRjYWxsIGdsU2V0RmVuY2VOVihH
THVpbnQgZmVuY2UsIEdMZW51bSBjb25kaXRpb24pCit7CisgICAgVFJBQ0UoIihHTHVpbnQgZmVu
Y2UgPSAlZCwgR0xlbnVtIGNvbmRpdGlvbiA9IDB4JVgpIiwgZmVuY2UsIGNvbmRpdGlvbik7CisK
KyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChjb25kaXRpb24gIT0gR0xfQUxMX0NPTVBMRVRF
RF9OVikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgIH0KKworICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IGdsOjpnZXRD
b250ZXh0KCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGdsOjpGZW5jZSAqZmVuY2VPYmplY3QgPSBjb250ZXh0LT5nZXRGZW5jZShmZW5jZSk7CisKKyAg
ICAgICAgICAgIGlmIChmZW5jZU9iamVjdCA9PSBOVUxMKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGZlbmNlT2JqZWN0LT5zZXRGZW5jZShjb25kaXRpb24pOyAgICAK
KyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCiB2b2lkIF9f
c3RkY2FsbCBnbFNjaXNzb3IoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQpCiB7CiAgICAgVFJBQ0UoIihHTGludCB4ID0gJWQsIEdMaW50IHkgPSAlZCwgR0xz
aXplaSB3aWR0aCA9ICVkLCBHTHNpemVpIGhlaWdodCA9ICVkKSIsIHgsIHksIHdpZHRoLCBoZWln
aHQpOwpAQCAtNDE5Niw2ICs0NDIxLDM0IEBAIHZvaWQgX19zdGRjYWxsIGdsU3RlbmNpbE9wU2Vw
YXJhdGUoR0xlbnUKICAgICB9CiB9CiAKK0dMYm9vbGVhbiBfX3N0ZGNhbGwgZ2xUZXN0RmVuY2VO
VihHTHVpbnQgZmVuY2UpCit7CisgICAgVFJBQ0UoIihHTHVpbnQgZmVuY2UgPSAlZCkiLCBmZW5j
ZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6
OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsK
KworICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09IE5VTEwpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCBHTF9UUlVF
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIGZlbmNlT2JqZWN0LT50ZXN0
RmVuY2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisg
ICAgeworICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisgICAgCisgICAg
cmV0dXJuIEdMX1RSVUU7Cit9CisKIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJuYWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IGJvcmRl
ciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNvbnN0IEdMdm9pZCogcGl4ZWxzKQogewpA
QCAtNDIxNSwzNCArNDQ2OCw2IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0g
dGFyZ2UKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAg
ICAgfQogCi0gICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgY2Fz
ZSBHTF9URVhUVVJFXzJEOgotICAgICAgICAgICAgaWYgKHdpZHRoID4gKGdsOjpNQVhfVEVYVFVS
RV9TSVpFID4+IGxldmVsKSB8fCBoZWlnaHQgPiAoZ2w6Ok1BWF9URVhUVVJFX1NJWkUgPj4gbGV2
ZWwpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
IGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9QT1NJVElWRV9ZOgotICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9ZOgotICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9a
OgotICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAg
ICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGlmICh3aWR0aCA+IChnbDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSA+PiBsZXZl
bCkgfHwgaGVpZ2h0ID4gKGdsOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID4+IGxldmVsKSkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9W
QUxVRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAg
IH0KLQogICAgICAgICBpZiAoaW50ZXJuYWxmb3JtYXQgIT0gZm9ybWF0KQogICAgICAgICB7CiAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwpAQCAtNDI1Niw2
ICs0NDgxLDggQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhJbWFnZTJEKEdMZW51bSB0YXJnZQogICAg
ICAgICAgICAgc3dpdGNoICh0eXBlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICBjYXNl
IEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAg
ICAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CkBAIC00MjY2LDYgKzQ0OTMsOCBAQCB2b2lkIF9fc3RkY2FsbCBnbFRleElt
YWdlMkQoR0xlbnVtIHRhcmdlCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURToKICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZf
NToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9I
QUxGX0ZMT0FUX09FUzoKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKQEAg
LTQyNzcsNiArNDUwNiw4IEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFy
Z2UKICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOgogICAgICAgICAgICAgICBj
YXNlIEdMX1VOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CiAgICAgICAgICAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAg
ICAgICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9FTlVNKTsKQEAgLTQzMDcsNiArNDUzOCwzNiBAQCB2b2lkIF9fc3RkY2FsbCBnbFRl
eEltYWdlMkQoR0xlbnVtIHRhcmdlCiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKGNvbnRl
eHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8CisgICAgICAgICAg
ICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigp
ID4+IGxldmVsKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJ
VElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVf
WDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1k6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9ZOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAgICAgICAgICAg
aWYgKHdpZHRoICE9IGhlaWdodCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0
dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8CisgICAgICAgICAgICAgICAgICAgIGhlaWdodCA+
IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9J
TlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoaW50ZXJuYWxm
b3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVCB8fAogICAgICAgICAgICAg
ICAgIGludGVybmFsZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUKQog
ICAgICAgICAgICAgewpAQCAtNDMyMCw2ICs0NTgxLDIxIEBAIHZvaWQgX19zdGRjYWxsIGdsVGV4
SW1hZ2UyRChHTGVudW0gdGFyZ2UKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAK
KyAgICAgICAgICAgIGlmICh0eXBlID09IEdMX0ZMT0FUKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdFRleHR1cmVzKCkpCisgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9F
TlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmICh0eXBlID09IEdMX0hBTEZfRkxPQVRfT0VTKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcygpKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURf
RU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBp
ZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgpOwpAQCAt
NDQ2Miw3ICs0NzM4LDcgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0
YQogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAobGV2ZWwgPCAwIHx8IGxldmVsID4gZ2w6Ok1BWF9URVhUVVJFX0xFVkVM
UyB8fCB4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwg
MCkKKyAgICAgICAgaWYgKGxldmVsIDwgMCB8fCB4b2Zmc2V0IDwgMCB8fCB5b2Zmc2V0IDwgMCB8
fCB3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CkBAIC00NDg2LDYgKzQ3NjIsMjYg
QEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YQogCiAgICAgICAgIGlm
IChjb250ZXh0KQogICAgICAgICB7CisgICAgICAgICAgICBpZiAobGV2ZWwgPiBjb250ZXh0LT5n
ZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoZm9ybWF0ID09IEdMX0ZMT0FUKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdFRleHR1cmVzKCkpCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChm
b3JtYXQgPT0gR0xfSEFMRl9GTE9BVF9PRVMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgaWYgKCFjb250ZXh0LT5zdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzKCkpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVN
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmICh0
YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBn
bDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CkBAIC00NTAw
LDYgKzQ3OTYsMTEgQEAgdm9pZCBfX3N0ZGNhbGwgZ2xUZXhTdWJJbWFnZTJEKEdMZW51bSB0YQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwog
ICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmIChmb3JtYXQgIT0gdGV4dHVy
ZS0+Z2V0Rm9ybWF0KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKwog
ICAgICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVu
dCgpLCBwaXhlbHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6Oklz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKQEAgLTQ1MTYsNiArNDgxNywxMSBAQCB2b2lk
IF9fc3RkY2FsbCBnbFRleFN1YkltYWdlMkQoR0xlbnVtIHRhCiAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQog
CisgICAgICAgICAgICAgICAgaWYgKGZvcm1hdCAhPSB0ZXh0dXJlLT5nZXRGb3JtYXQoKSkKKyAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgdGV4
dHVyZS0+c3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBjb250ZXh0LT5nZXRVbnBhY2tBbGlnbm1lbnQoKSwgcGl4ZWxz
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKQEAgLTU0MzUsNiArNTc0MSwxNCBA
QCBfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlCiAgICAgewogICAgICAg
ICB7ImdsVGV4SW1hZ2UzRE9FUyIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50
ZXJUeXBlKWdsVGV4SW1hZ2UzRE9FU30sCiAgICAgICAgIHsiZ2xCbGl0RnJhbWVidWZmZXJBTkdM
RSIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsQmxpdEZyYW1l
YnVmZmVyQU5HTEV9LAorICAgICAgICB7ImdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxl
QU5HTEUiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVuY3Rpb25Qb2ludGVyVHlwZSlnbFJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZUFOR0xFfSwKKyAgICAgICAgeyJnbERlbGV0ZUZlbmNl
c05WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xEZWxldGVG
ZW5jZXNOVn0sCisgICAgICAgIHsiZ2xHZW5GZW5jZXNOViIsIChfX2VnbE11c3RDYXN0VG9Qcm9w
ZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2VuRmVuY2VzTlZ9LAorICAgICAgICB7ImdsSXNGZW5j
ZU5WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xJc0ZlbmNl
TlZ9LAorICAgICAgICB7ImdsVGVzdEZlbmNlTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVyRnVu
Y3Rpb25Qb2ludGVyVHlwZSlnbFRlc3RGZW5jZU5WfSwKKyAgICAgICAgeyJnbEdldEZlbmNlaXZO
ViIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsR2V0RmVuY2Vp
dk5WfSwKKyAgICAgICAgeyJnbEZpbmlzaEZlbmNlTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVy
RnVuY3Rpb25Qb2ludGVyVHlwZSlnbEZpbmlzaEZlbmNlTlZ9LAorICAgICAgICB7ImdsU2V0RmVu
Y2VOViIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsU2V0RmVu
Y2VOVn0sCiAgICAgfTsKIAogICAgIGZvciAoaW50IGV4dCA9IDA7IGV4dCA8IHNpemVvZihnbEV4
dGVuc2lvbnMpIC8gc2l6ZW9mKEV4dGVuc2lvbik7IGV4dCsrKQpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmRlZgkocmV2aXNp
b24gNzU4MDEpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdM
RVN2Mi5kZWYJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw3ICsxNDcsMTQgQEAgRVhQT1JUUwogICAg
IGdsVGV4SW1hZ2UzRE9FUyAgICAgICAgICAgICAgICAgQDE0MwogICAgIGdsQmxpdEZyYW1lYnVm
ZmVyQU5HTEUgICAgICAgICAgQDE0OQogICAgIGdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2Ft
cGxlQU5HTEUgQDE1MAotICAgIAorICAgIGdsRGVsZXRlRmVuY2VzTlYgICAgICAgICAgICAgICAg
QDE1MQorICAgIGdsRmluaXNoRmVuY2VOViAgICAgICAgICAgICAgICAgQDE1MgorICAgIGdsR2Vu
RmVuY2VzTlYgICAgICAgICAgICAgICAgICAgQDE1MworICAgIGdsR2V0RmVuY2Vpdk5WICAgICAg
ICAgICAgICAgICAgQDE1NAorICAgIGdsSXNGZW5jZU5WICAgICAgICAgICAgICAgICAgICAgQDE1
NQorICAgIGdsU2V0RmVuY2VOViAgICAgICAgICAgICAgICAgICAgQDE1NgorICAgIGdsVGVzdEZl
bmNlTlYgICAgICAgICAgICAgICAgICAgQDE1NworCiAgICAgOyBFR0wgZGVwZW5kZW5jaWVzCiAg
ICAgZ2xDcmVhdGVDb250ZXh0ICAgICAgICAgICAgICAgICBAMTQ0IE5PTkFNRQogICAgIGdsRGVz
dHJveUNvbnRleHQgICAgICAgICAgICAgICAgQDE0NSBOT05BTUUKSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZjcHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oJ
KHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9saWJHTEVTdjIudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNiArMjAxLDEwIEBACiAJ
CQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRmVuY2UuY3Bw
IgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuXEZyYW1l
YnVmZmVyLmNwcCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC0yNDQsMTQgKzI0OCw2IEBACiAJCQkJ
TmFtZT0iR2VvbWV0cnkiCiAJCQkJPgogCQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLlxn
ZW9tZXRyeVxiYWNrZW5kLmNwcCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQotCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcZHg5LmNwcCIKLQkJCQkJPgotCQkJCTwvRmlsZT4K
LQkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcSW5kZXhEYXRhTWFuYWdl
ci5jcHAiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+CkBAIC0yNzksNiArMjc1LDEwIEBACiAJCQkJPgog
CQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii5cRmVuY2UuaCIKKwkJCQk+
CisJCQk8L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLlxGcmFtZWJ1ZmZlci5o
IgogCQkJCT4KIAkJCTwvRmlsZT4KQEAgLTMzNCwxNCArMzM0LDYgQEAKIAkJCQlOYW1lPSJHZW9t
ZXRyeSIKIAkJCQk+CiAJCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XGJh
Y2tlbmQuaCIKLQkJCQkJPgotCQkJCTwvRmlsZT4KLQkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBh
dGg9Ii5cZ2VvbWV0cnlcZHg5LmgiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKIAkJ
CQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XEluZGV4RGF0YU1hbmFnZXIuaCIKIAkJCQkJPgog
CQkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
dXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL3V0aWxpdGllcy5jcHAJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw2ICsyNSw4IEBAIGludCBVbmlmb3JtQ29tcG9uZW50Q291bnQoR0xlbnVtIHR5cGUpCiAg
ICAgICBjYXNlIEdMX0JPT0w6CiAgICAgICBjYXNlIEdMX0ZMT0FUOgogICAgICAgY2FzZSBHTF9J
TlQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VC
RToKICAgICAgICAgICByZXR1cm4gMTsKICAgICAgIGNhc2UgR0xfQk9PTF9WRUMyOgogICAgICAg
Y2FzZSBHTF9GTE9BVF9WRUMyOgpAQCAtNjgsNiArNzAsOCBAQCBHTGVudW0gVW5pZm9ybUNvbXBv
bmVudFR5cGUoR0xlbnVtIHR5cGUpCiAgICAgICBjYXNlIEdMX0ZMT0FUX01BVDQ6CiAgICAgICAg
ICAgcmV0dXJuIEdMX0ZMT0FUOwogICAgICAgY2FzZSBHTF9JTlQ6CisgICAgICBjYXNlIEdMX1NB
TVBMRVJfMkQ6CisgICAgICBjYXNlIEdMX1NBTVBMRVJfQ1VCRToKICAgICAgIGNhc2UgR0xfSU5U
X1ZFQzI6CiAgICAgICBjYXNlIEdMX0lOVF9WRUMzOgogICAgICAgY2FzZSBHTF9JTlRfVkVDNDoK
QEAgLTI0Nyw2ICsyNTEsMjggQEAgaW50IENvbXB1dGVQaXhlbFNpemUoR0xlbnVtIGZvcm1hdCwg
R0xlbgogICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgogICAgICAgY2FzZSBH
TF9VTlNJR05FRF9TSE9SVF81XzZfNToKICAgICAgICAgcmV0dXJuIHNpemVvZih1bnNpZ25lZCBz
aG9ydCk7CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAg
ICAgICAgeworICAgICAgICAgIGNhc2UgR0xfQUxQSEE6ICAgICAgICAgICByZXR1cm4gc2l6ZW9m
KGZsb2F0KTsKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTogICAgICAgcmV0dXJuIHNpemVv
ZihmbG9hdCk7CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6IHJldHVybiBzaXpl
b2YoZmxvYXQpICogMjsKKyAgICAgICAgICBjYXNlIEdMX1JHQjogICAgICAgICAgICAgcmV0dXJu
IHNpemVvZihmbG9hdCkgKiAzOworICAgICAgICAgIGNhc2UgR0xfUkdCQTogICAgICAgICAgICBy
ZXR1cm4gc2l6ZW9mKGZsb2F0KSAqIDQ7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfSEFMRl9GTE9BVF9P
RVM6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBH
TF9BTFBIQTogICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQpOworICAgICAg
ICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0
KTsKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTogcmV0dXJuIHNpemVvZih1bnNp
Z25lZCBzaG9ydCkgKiAyOworICAgICAgICAgIGNhc2UgR0xfUkdCOiAgICAgICAgICAgICByZXR1
cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDM7CisgICAgICAgICAgY2FzZSBHTF9SR0JBOiAg
ICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQpICogNDsKKyAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwogICAgICAg
ZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKQEAgLTI4Myw2ICszMDksMjEgQEAgYm9v
bCBDaGVja1RleHR1cmVGb3JtYXRUeXBlKEdMZW51bSBmb3JtYQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICB9CiAKKyAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICBjYXNlIEdM
X0hBTEZfRkxPQVRfT0VTOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAg
ICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICBjYXNlIEdMX1JHQjoKKyAgICAgICAgICBj
YXNlIEdMX0FMUEhBOgorICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgorICAgICAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRfNF80XzRfNDoKICAgICAgIGNhc2UgR0xfVU5TSUdO
RURfU0hPUlRfNV81XzVfMToKICAgICAgICAgcmV0dXJuIChmb3JtYXQgPT0gR0xfUkdCQSk7CkBA
IC0yOTUsNiArMzM2LDY5IEBAIGJvb2wgQ2hlY2tUZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9y
bWEKICAgICB9CiB9CiAKK2Jvb2wgSXNDb2xvclJlbmRlcmFibGUoR0xlbnVtIGludGVybmFsZm9y
bWF0KQoreworICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgeworICAgICAgY2FzZSBH
TF9SR0JBNDoKKyAgICAgIGNhc2UgR0xfUkdCNV9BMToKKyAgICAgIGNhc2UgR0xfUkdCNTY1Ogor
ICAgICAgY2FzZSBHTF9SR0I4X09FUzoKKyAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICBj
YXNlIEdMX1NURU5DSUxfSU5ERVg4OgorICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09F
UzoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5JTVBM
RU1FTlRFRCgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBJc0RlcHRo
UmVuZGVyYWJsZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpCit7CisgICAgc3dpdGNoIChpbnRlcm5h
bGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2OgorICAgICAg
Y2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICBjYXNlIEdMX1NURU5DSUxfSU5ERVg4OgorICAgICAgY2FzZSBHTF9SR0JBNDoKKyAgICAgIGNh
c2UgR0xfUkdCNV9BMToKKyAgICAgIGNhc2UgR0xfUkdCNTY1OgorICAgICAgY2FzZSBHTF9SR0I4
X09FUzoKKyAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICBkZWZhdWx0OgorICAgICAgICBVTklNUExFTUVOVEVEKCk7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCitib29sIElzU3RlbmNpbFJlbmRlcmFibGUoR0xlbnVtIGludGVybmFs
Zm9ybWF0KQoreworICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCisgICAgeworICAgICAgY2Fz
ZSBHTF9TVEVOQ0lMX0lOREVYODoKKyAgICAgIGNhc2UgR0xfREVQVEgyNF9TVEVOQ0lMOF9PRVM6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgY2FzZSBHTF9SR0JBNDoKKyAgICAgIGNhc2Ug
R0xfUkdCNV9BMToKKyAgICAgIGNhc2UgR0xfUkdCNTY1OgorICAgICAgY2FzZSBHTF9SR0I4X09F
UzoKKyAgICAgIGNhc2UgR0xfUkdCQThfT0VTOgorICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05F
TlQxNjoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgZGVmYXVsdDoKKyAgICAgICAgVU5J
TVBMRU1FTlRFRCgpOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKwogfQogCiBuYW1l
c3BhY2UgZXMyZHgKQEAgLTUwOCw2ICs2MTIsMTAgQEAgdW5zaWduZWQgaW50IEdldEFscGhhU2l6
ZShEM0RGT1JNQVQgY29sbwogewogICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCiAgICAgeworICAg
ICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAgICAgICAgcmV0dXJuIDE2OworICAgICAg
Y2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAgICAgcmV0dXJuIDMyOwogICAgICAgY2Fz
ZSBEM0RGTVRfQTJSMTBHMTBCMTA6CiAgICAgICAgIHJldHVybiAyOwogICAgICAgY2FzZSBEM0RG
TVRfQThSOEc4Qjg6CkBAIC01MTUsNyArNjIzLDYgQEAgdW5zaWduZWQgaW50IEdldEFscGhhU2l6
ZShEM0RGT1JNQVQgY29sbwogICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CiAgICAgICAgIHJl
dHVybiAxOwogICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9Y
MVI1RzVCNToKICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwpAQCAtNTI3LDYgKzYzNCwxMCBAQCB1bnNpZ25l
ZCBpbnQgR2V0UmVkU2l6ZShEM0RGT1JNQVQgY29sb3JGCiB7CiAgICAgc3dpdGNoIChjb2xvckZv
cm1hdCkKICAgICB7CisgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgorICAgICAgICBy
ZXR1cm4gMTY7CisgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgorICAgICAgICByZXR1
cm4gMzI7CiAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKICAgICAgICAgcmV0dXJuIDEw
OwogICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CkBAIC01MzQsNyArNjQ1LDYgQEAgdW5zaWdu
ZWQgaW50IEdldFJlZFNpemUoRDNERk9STUFUIGNvbG9yRgogICAgICAgICByZXR1cm4gODsKICAg
ICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgogICAgICAgY2FzZSBEM0RGTVRfUjVHNkI1OgotICAg
ICAgY2FzZSBEM0RGTVRfWDFSNUc1QjU6CiAgICAgICAgIHJldHVybiA1OwogICAgICAgZGVmYXVs
dDogVU5SRUFDSEFCTEUoKTsKICAgICB9CkBAIC01NDUsMTMgKzY1NSwxNiBAQCB1bnNpZ25lZCBp
bnQgR2V0R3JlZW5TaXplKEQzREZPUk1BVCBjb2xvCiB7CiAgICAgc3dpdGNoIChjb2xvckZvcm1h
dCkKICAgICB7CisgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgorICAgICAgICByZXR1
cm4gMTY7CisgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgorICAgICAgICByZXR1cm4g
MzI7CiAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKICAgICAgICAgcmV0dXJuIDEwOwog
ICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CiAgICAgICBjYXNlIEQzREZNVF9YOFI4RzhCODoK
ICAgICAgICAgcmV0dXJuIDg7CiAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKLSAgICAgIGNh
c2UgRDNERk1UX1gxUjVHNUI1OgogICAgICAgICByZXR1cm4gNTsKICAgICAgIGNhc2UgRDNERk1U
X1I1RzZCNToKICAgICAgICAgcmV0dXJuIDY7CkBAIC01NjQsNiArNjc3LDEwIEBAIHVuc2lnbmVk
IGludCBHZXRCbHVlU2l6ZShEM0RGT1JNQVQgY29sb3IKIHsKICAgICBzd2l0Y2ggKGNvbG9yRm9y
bWF0KQogICAgIHsKKyAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6CisgICAgICAgIHJl
dHVybiAxNjsKKyAgICAgIGNhc2UgRDNERk1UX0EzMkIzMkczMlIzMkY6CisgICAgICAgIHJldHVy
biAzMjsKICAgICAgIGNhc2UgRDNERk1UX0EyUjEwRzEwQjEwOgogICAgICAgICByZXR1cm4gMTA7
CiAgICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKQEAgLTU3MSw3ICs2ODgsNiBAQCB1bnNpZ25l
ZCBpbnQgR2V0Qmx1ZVNpemUoRDNERk9STUFUIGNvbG9yCiAgICAgICAgIHJldHVybiA4OwogICAg
ICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CiAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6Ci0gICAg
ICBjYXNlIEQzREZNVF9YMVI1RzVCNToKICAgICAgICAgcmV0dXJuIDU7CiAgICAgICBkZWZhdWx0
OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KQEAgLTU5MSw0NiArNzA3LDQ2IEBAIHVuc2lnbmVkIGlu
dCBHZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHQKICAgICAgIGNhc2UgRDNERk1UX0QxNjogICAg
ICAgICAgIHJldHVybiAxNjsKICAgICAgIGNhc2UgRDNERk1UX0QzMkZfTE9DS0FCTEU6IHJldHVy
biAzMjsKICAgICAgIGNhc2UgRDNERk1UX0QyNEZTODogICAgICAgIHJldHVybiAyNDsKLS8vICAg
ICAgY2FzZSBEM0RGTVRfRDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDMyOyAgIC8vIEQzRDlFeCBvbmx5
Ci0vLyAgICAgIGNhc2UgRDNERk1UX1M4X0xPQ0tBQkxFOiAgIHJldHVybiAwOyAgICAvLyBEM0Q5
RXggb25seQorICAgIC8vY2FzZSBEM0RGTVRfRDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDMyOyAgIC8v
IEQzRDlFeCBvbmx5CisgICAgLy9jYXNlIEQzREZNVF9TOF9MT0NLQUJMRTogICByZXR1cm4gMDsg
ICAgLy8gRDNEOUV4IG9ubHkKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIFVOUkVBQ0hBQkxFKCk7
CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi1ib29sIENvbnZlcnRQcmltaXRpdmVUeXBlKEdM
ZW51bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIHByaW1pdGl2ZUNvdW50LAorYm9vbCBDb252ZXJ0
UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBlbGVtZW50Q291bnQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBSSU1JVElWRVRZUEUgKmQzZFByaW1pdGl2
ZVR5cGUsIGludCAqZDNkUHJpbWl0aXZlQ291bnQpCiB7CiAgICAgc3dpdGNoIChwcmltaXRpdmVU
eXBlKQogICAgIHsKICAgICAgIGNhc2UgR0xfUE9JTlRTOgogICAgICAgICAqZDNkUHJpbWl0aXZl
VHlwZSA9IEQzRFBUX1BPSU5UTElTVDsKLSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gcHJp
bWl0aXZlQ291bnQ7CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVsZW1lbnRDb3VudDsK
ICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0xJTkVTOgogICAgICAgICAqZDNkUHJpbWl0
aXZlVHlwZSA9IEQzRFBUX0xJTkVMSVNUOwotICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBw
cmltaXRpdmVDb3VudCAvIDI7CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVsZW1lbnRD
b3VudCAvIDI7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9MSU5FX0xPT1A6CiAgICAg
ICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfTElORVNUUklQOwotICAgICAgICAqZDNkUHJp
bWl0aXZlQ291bnQgPSBwcmltaXRpdmVDb3VudDsKKyAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50
ID0gZWxlbWVudENvdW50IC0gMTsgICAvLyBEM0QgZG9lc24ndCBzdXBwb3J0IGxpbmUgbG9vcHMs
IHNvIHdlIGRyYXcgdGhlIGxhc3QgbGluZSBzZXBhcmF0ZWx5CiAgICAgICAgIGJyZWFrOwogICAg
ICAgY2FzZSBHTF9MSU5FX1NUUklQOgogICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBU
X0xJTkVTVFJJUDsKLSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gcHJpbWl0aXZlQ291bnQg
LSAxOworICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBlbGVtZW50Q291bnQgLSAxOwogICAg
ICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfVFJJQU5HTEVTOgogICAgICAgICAqZDNkUHJpbWl0
aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFTElTVDsKLSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50
ID0gcHJpbWl0aXZlQ291bnQgLyAzOworICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBlbGVt
ZW50Q291bnQgLyAzOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfVFJJQU5HTEVfU1RS
SVA6CiAgICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5HTEVTVFJJUDsKLSAg
ICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gcHJpbWl0aXZlQ291bnQgLSAyOworICAgICAgICAq
ZDNkUHJpbWl0aXZlQ291bnQgPSBlbGVtZW50Q291bnQgLSAyOwogICAgICAgICBicmVhazsKICAg
ICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOgogICAgICAgICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQz
RFBUX1RSSUFOR0xFRkFOOwotICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBwcmltaXRpdmVD
b3VudCAtIDI7CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVsZW1lbnRDb3VudCAtIDI7
CiAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtNjcyLDMgKzc4OCw0MCBAQCBEM0RNVUxUSVNBTVBMRV9UWVBFIEdldE11bHRpc2FtcGxlVHlw
ZUZyCiB9CiAKIH0KKworbmFtZXNwYWNlIGR4MmVzCit7CisKK0dMZW51bSBDb252ZXJ0QmFja0J1
ZmZlckZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAg
IHsKKyAgICAgIGNhc2UgRDNERk1UX0E0UjRHNEI0OiByZXR1cm4gR0xfUkdCQTQ7CisgICAgICBj
YXNlIEQzREZNVF9BOFI4RzhCODogcmV0dXJuIEdMX1JHQkE4X09FUzsKKyAgICAgIGNhc2UgRDNE
Rk1UX0ExUjVHNUI1OiByZXR1cm4gR0xfUkdCNV9BMTsKKyAgICAgIGNhc2UgRDNERk1UX1I1RzZC
NTogICByZXR1cm4gR0xfUkdCNTY1OworICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6IHJldHVy
biBHTF9SR0I4X09FUzsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIEdMX1JHQkE0OworfQorCitHTGVudW0gQ29udmVydERlcHRoU3Rl
bmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KQorICAg
IHsKKyAgICAgIGNhc2UgRDNERk1UX0QxNjoKKyAgICAgIGNhc2UgRDNERk1UX0QyNFg4OgorICAg
ICAgICByZXR1cm4gR0xfREVQVEhfQ09NUE9ORU5UMTY7CisgICAgICBjYXNlIEQzREZNVF9EMjRT
ODoKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOworICAgICAgZGVmYXVs
dDoKKyAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICB9CisKKyAgICByZXR1cm4gR0xfREVQVEgy
NF9TVEVOQ0lMOF9PRVM7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvdXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuaAkocmV2aXNpb24gNzU4MDEpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw2ICszNiwxMCBAQCBib29sIElzQ3ViZW1hcFRleHR1cmVUYXJnZXQoR0xlbnVt
IHRhcmdlCiBib29sIElzVGV4dHVyZVRhcmdldChHTGVudW0gdGFyZ2V0KTsKIGJvb2wgQ2hlY2tU
ZXh0dXJlRm9ybWF0VHlwZShHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSk7CiAKK2Jvb2wgSXND
b2xvclJlbmRlcmFibGUoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKK2Jvb2wgSXNEZXB0aFJlbmRl
cmFibGUoR0xlbnVtIGludGVybmFsZm9ybWF0KTsKK2Jvb2wgSXNTdGVuY2lsUmVuZGVyYWJsZShH
TGVudW0gaW50ZXJuYWxmb3JtYXQpOworCiB9CiAKIG5hbWVzcGFjZSBlczJkeApAQCAtNTcsNyAr
NjEsNyBAQCB1bnNpZ25lZCBpbnQgR2V0R3JlZW5TaXplKEQzREZPUk1BVCBjb2xvCiB1bnNpZ25l
ZCBpbnQgR2V0Qmx1ZVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKIHVuc2lnbmVkIGludCBH
ZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWF0KTsKIHVuc2lnbmVkIGludCBHZXRTdGVu
Y2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCk7Ci1ib29sIENvbnZlcnRQcmltaXRpdmVU
eXBlKEdMZW51bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIHByaW1pdGl2ZUNvdW50LAorYm9vbCBD
b252ZXJ0UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBlbGVtZW50
Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBSSU1JVElWRVRZUEUgKmQzZFBy
aW1pdGl2ZVR5cGUsIGludCAqZDNkUHJpbWl0aXZlQ291bnQpOwogRDNERk9STUFUIENvbnZlcnRS
ZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCk7CiBEM0RNVUxUSVNBTVBMRV9UWVBFIEdl
dE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcyk7CkBAIC02NSw0ICs2
OSwxMiBAQCBHTHNpemVpIEdldFNhbXBsZXNGcm9tTXVsdGlzYW1wbGVUeXBlKEQzCiAKIH0KIAor
bmFtZXNwYWNlIGR4MmVzCit7CisKK0dMZW51bSBDb252ZXJ0QmFja0J1ZmZlckZvcm1hdChEM0RG
T1JNQVQgZm9ybWF0KTsKK0dMZW51bSBDb252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KEQzREZPUk1B
VCBmb3JtYXQpOworCit9CisKICNlbmRpZiAgLy8gTElCR0xFU1YyX1VUSUxJVElFU19ICkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0
YU1hbmFnZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5jcHAJKHJldmlzaW9uIDc1ODAxKQor
KysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9JbmRleERh
dGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMsNyArMTMsNyBAQAogCiAjaW5jbHVk
ZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9tYXRodXRpbC5oIgot
I2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL21haW4uaCIKIAogbmFtZXNwYWNlCiB7CkBAIC0yMywyMzkgKzIzLDM2MCBAQCBuYW1lc3Bh
Y2UKIG5hbWVzcGFjZSBnbAogewogCi1JbmRleERhdGFNYW5hZ2VyOjpJbmRleERhdGFNYW5hZ2Vy
KENvbnRleHQgKmNvbnRleHQsIEJ1ZmZlckJhY2tFbmQgKmJhY2tlbmQpCi0gIDogbUNvbnRleHQo
Y29udGV4dCksIG1CYWNrZW5kKGJhY2tlbmQpLCBtSW50SW5kaWNlc1N1cHBvcnRlZChiYWNrZW5k
LT5zdXBwb3J0SW50SW5kaWNlcygpKQorSW5kZXhEYXRhTWFuYWdlcjo6SW5kZXhEYXRhTWFuYWdl
cihDb250ZXh0ICpjb250ZXh0LCBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpIDogbURldmljZShk
ZXZpY2UpCiB7Ci0gICAgbUNvdW50aW5nQnVmZmVyID0gTlVMTDsKLSAgICBtQ291bnRpbmdCdWZm
ZXJTaXplID0gMDsKKyAgICBtU3RyZWFtaW5nQnVmZmVyU2hvcnQgPSBuZXcgU3RyZWFtaW5nSW5k
ZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1UX0lOREVY
MTYpOwogCi0gICAgbUxpbmVMb29wQnVmZmVyID0gTlVMTDsKLQotICAgIG1TdHJlYW1CdWZmZXJT
aG9ydCA9IG1CYWNrZW5kLT5jcmVhdGVJbmRleEJ1ZmZlcihJTklUSUFMX0lOREVYX0JVRkZFUl9T
SVpFLCBHTF9VTlNJR05FRF9TSE9SVCk7Ci0KLSAgICBpZiAobUludEluZGljZXNTdXBwb3J0ZWQp
CisgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCiAgICAgewotICAgICAg
ICBtU3RyZWFtQnVmZmVySW50ID0gbUJhY2tlbmQtPmNyZWF0ZUluZGV4QnVmZmVyKElOSVRJQUxf
SU5ERVhfQlVGRkVSX1NJWkUsIEdMX1VOU0lHTkVEX0lOVCk7CisgICAgICAgIG1TdHJlYW1pbmdC
dWZmZXJJbnQgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9JTkRF
WF9CVUZGRVJfU0laRSwgRDNERk1UX0lOREVYMzIpOwogICAgIH0KICAgICBlbHNlCiAgICAgewot
ICAgICAgICBtU3RyZWFtQnVmZmVySW50ID0gTlVMTDsKKyAgICAgICAgbVN0cmVhbWluZ0J1ZmZl
ckludCA9IE5VTEw7CiAgICAgfQogfQogCiBJbmRleERhdGFNYW5hZ2VyOjp+SW5kZXhEYXRhTWFu
YWdlcigpCiB7Ci0gICAgZGVsZXRlIG1TdHJlYW1CdWZmZXJTaG9ydDsKLSAgICBkZWxldGUgbVN0
cmVhbUJ1ZmZlckludDsKLSAgICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOwotICAgIGRlbGV0ZSBt
TGluZUxvb3BCdWZmZXI7CisgICAgZGVsZXRlIG1TdHJlYW1pbmdCdWZmZXJTaG9ydDsKKyAgICBk
ZWxldGUgbVN0cmVhbWluZ0J1ZmZlckludDsKIH0KIAotbmFtZXNwYWNlCit2b2lkIGNvbnZlcnRJ
bmRpY2VzKEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbnB1dCwgR0xzaXplaSBjb3VudCwgdm9p
ZCAqb3V0cHV0KQogeworICAgIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgewor
ICAgICAgICBjb25zdCBHTHVieXRlICppbiA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihp
bnB1dCk7CisgICAgICAgIEdMdXNob3J0ICpvdXQgPSBzdGF0aWNfY2FzdDxHTHVzaG9ydCo+KG91
dHB1dCk7CisKKyAgICAgICAgZm9yIChHTHNpemVpIGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg
ICAgICAgeworICAgICAgICAgICAgb3V0W2ldID0gaW5baV07CisgICAgICAgIH0KKyAgICB9Cisg
ICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpCisgICAgeworICAgICAgICBtZW1j
cHkob3V0cHV0LCBpbnB1dCwgY291bnQgKiBzaXplb2YoR0x1aW50KSk7CisgICAgfQorICAgIGVs
c2UgaWYgKHR5cGUgPT0gR0xfVU5TSUdORURfU0hPUlQpCisgICAgeworICAgICAgICBtZW1jcHko
b3V0cHV0LCBpbnB1dCwgY291bnQgKiBzaXplb2YoR0x1c2hvcnQpKTsKKyAgICB9CisgICAgZWxz
ZSBVTlJFQUNIQUJMRSgpOworfQogCi10ZW1wbGF0ZSA8Y2xhc3MgSW5wdXRJbmRleFR5cGUsIGNs
YXNzIE91dHB1dEluZGV4VHlwZT4KLXZvaWQgY29weUluZGljZXMoY29uc3QgSW5wdXRJbmRleFR5
cGUgKmluLCBHTHNpemVpIGNvdW50LCBPdXRwdXRJbmRleFR5cGUgKm91dCwgR0x1aW50ICptaW5J
bmRleCwgR0x1aW50ICptYXhJbmRleCkKK3RlbXBsYXRlIDxjbGFzcyBJbmRleFR5cGU+Cit2b2lk
IGNvbXB1dGVSYW5nZShjb25zdCBJbmRleFR5cGUgKmluZGljZXMsIEdMc2l6ZWkgY291bnQsIEdM
dWludCAqbWluSW5kZXgsIEdMdWludCAqbWF4SW5kZXgpCiB7Ci0gICAgSW5wdXRJbmRleFR5cGUg
Zmlyc3QgPSAqaW47Ci0gICAgR0x1aW50IG1pbkluZGV4U29GYXIgPSBmaXJzdDsKLSAgICBHTHVp
bnQgbWF4SW5kZXhTb0ZhciA9IGZpcnN0OworICAgICptaW5JbmRleCA9IGluZGljZXNbMF07Cisg
ICAgKm1heEluZGV4ID0gaW5kaWNlc1swXTsKIAogICAgIGZvciAoR0xzaXplaSBpID0gMDsgaSA8
IGNvdW50OyBpKyspCiAgICAgewotICAgICAgICBpZiAobWluSW5kZXhTb0ZhciA+ICppbikgbWlu
SW5kZXhTb0ZhciA9ICppbjsKLSAgICAgICAgaWYgKG1heEluZGV4U29GYXIgPCAqaW4pIG1heElu
ZGV4U29GYXIgPSAqaW47Ci0KLSAgICAgICAgKm91dCsrID0gKmluKys7CisgICAgICAgIGlmICgq
bWluSW5kZXggPiBpbmRpY2VzW2ldKSAqbWluSW5kZXggPSBpbmRpY2VzW2ldOworICAgICAgICBp
ZiAoKm1heEluZGV4IDwgaW5kaWNlc1tpXSkgKm1heEluZGV4ID0gaW5kaWNlc1tpXTsKICAgICB9
Ci0KLSAgICAvLyBJdCBtaWdodCBiZSBhIGxpbmUgbG9vcCwgc28gY29weSB0aGUgbG9vcCBpbmRl
eC4KLSAgICAqb3V0ID0gZmlyc3Q7Ci0KLSAgICAqbWluSW5kZXggPSBtaW5JbmRleFNvRmFyOwot
ICAgICptYXhJbmRleCA9IG1heEluZGV4U29GYXI7CiB9CiAKK3ZvaWQgY29tcHV0ZVJhbmdlKEdM
ZW51bSB0eXBlLCBjb25zdCB2b2lkICppbmRpY2VzLCBHTHNpemVpIGNvdW50LCBHTHVpbnQgKm1p
bkluZGV4LCBHTHVpbnQgKm1heEluZGV4KQoreworICAgIGlmICh0eXBlID09IEdMX1VOU0lHTkVE
X0JZVEUpCisgICAgeworICAgICAgICBjb21wdXRlUmFuZ2Uoc3RhdGljX2Nhc3Q8Y29uc3QgR0x1
Ynl0ZSo+KGluZGljZXMpLCBjb3VudCwgbWluSW5kZXgsIG1heEluZGV4KTsKKyAgICB9CisgICAg
ZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpCisgICAgeworICAgICAgICBjb21wdXRl
UmFuZ2Uoc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcyksIGNvdW50LCBtaW5JbmRl
eCwgbWF4SW5kZXgpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX1NI
T1JUKQorICAgIHsKKyAgICAgICAgY29tcHV0ZVJhbmdlKHN0YXRpY19jYXN0PGNvbnN0IEdMdXNo
b3J0Kj4oaW5kaWNlcyksIGNvdW50LCBtaW5JbmRleCwgbWF4SW5kZXgpOworICAgIH0KKyAgICBl
bHNlIFVOUkVBQ0hBQkxFKCk7CiB9CiAKLUdMZW51bSBJbmRleERhdGFNYW5hZ2VyOjpwcmVSZW5k
ZXJWYWxpZGF0ZShHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgY291bnQsIEJ1ZmZl
ciAqYXJyYXlFbGVtZW50QnVmZmVyLCBjb25zdCB2b2lkICppbmRpY2VzLCBUcmFuc2xhdGVkSW5k
ZXhEYXRhICp0cmFuc2xhdGVkKQorR0xlbnVtIEluZGV4RGF0YU1hbmFnZXI6OnByZXBhcmVJbmRl
eERhdGEoR0xlbnVtIHR5cGUsIEdMc2l6ZWkgY291bnQsIEJ1ZmZlciAqYnVmZmVyLCBjb25zdCB2
b2lkICppbmRpY2VzLCBUcmFuc2xhdGVkSW5kZXhEYXRhICp0cmFuc2xhdGVkKQogewotICAgIEFT
U0VSVCh0eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUIHx8IHR5cGUgPT0gR0xfVU5TSUdORURfQllU
RSB8fCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVCk7Ci0gICAgQVNTRVJUKGNvdW50ID4gMCk7Cisg
ICAgRDNERk9STUFUIGZvcm1hdCA9ICh0eXBlID09IEdMX1VOU0lHTkVEX0lOVCkgPyBEM0RGTVRf
SU5ERVgzMiA6IEQzREZNVF9JTkRFWDE2OworICAgIGludHB0cl90IG9mZnNldCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOworICAgIGJvb2wgYWxpZ25lZE9mZnNldCA9IGZh
bHNlOwogCi0gICAgaWYgKGFycmF5RWxlbWVudEJ1ZmZlciAhPSBOVUxMKQorICAgIGlmIChidWZm
ZXIgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIEdMc2l6ZWkgb2Zmc2V0ID0gcmVpbnRlcnByZXRf
Y2FzdDxHTHNpemVpPihpbmRpY2VzKTsKKyAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgYWxpZ25lZE9mZnNldCA9IChvZmZz
ZXQgJSBzaXplb2YoR0x1Ynl0ZSkgPT0gMCk7ICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX1NIT1JUOiBhbGlnbmVkT2Zmc2V0ID0gKG9mZnNldCAlIHNpemVvZihHTHVzaG9ydCkg
PT0gMCk7IGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOiAgIGFsaWduZWRP
ZmZzZXQgPSAob2Zmc2V0ICUgc2l6ZW9mKEdMdWludCkgPT0gMCk7ICAgYnJlYWs7CisgICAgICAg
ICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYWxpZ25lZE9mZnNldCA9IGZhbHNlOworICAgICAg
ICB9CiAKLSAgICAgICAgaWYgKHR5cGVTaXplKHR5cGUpICogY291bnQgKyBvZmZzZXQgPiBzdGF0
aWNfY2FzdDxzdGQ6OnNpemVfdD4oYXJyYXlFbGVtZW50QnVmZmVyLT5zaXplKCkpKQorICAgICAg
ICBpZiAodHlwZVNpemUodHlwZSkgKiBjb3VudCArIG9mZnNldCA+IHN0YXRpY19jYXN0PHN0ZDo6
c2l6ZV90PihidWZmZXItPnNpemUoKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBH
TF9JTlZBTElEX09QRVJBVElPTjsKICAgICAgICAgfQogCi0gICAgICAgIGluZGljZXMgPSBzdGF0
aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oYXJyYXlFbGVtZW50QnVmZmVyLT5kYXRhKCkpICsgb2Zm
c2V0OworICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1Ynl0ZSo+KGJ1ZmZl
ci0+ZGF0YSgpKSArIG9mZnNldDsKICAgICB9CiAKLSAgICB0cmFuc2xhdGVkLT5jb3VudCA9IGNv
dW50OwotCi0gICAgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSA9IHNwYWNlUmVxdWlyZWQodHlw
ZSwgY291bnQpOwotCi0gICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpzdHJlYW1JYiA9IHByZXBh
cmVJbmRleEJ1ZmZlcih0eXBlLCByZXF1aXJlZFNwYWNlKTsKKyAgICBTdHJlYW1pbmdJbmRleEJ1
ZmZlciAqc3RyZWFtaW5nQnVmZmVyID0gKHR5cGUgPT0gR0xfVU5TSUdORURfSU5UKSA/IG1TdHJl
YW1pbmdCdWZmZXJJbnQgOiBtU3RyZWFtaW5nQnVmZmVyU2hvcnQ7CiAKLSAgICBzaXplX3Qgb2Zm
c2V0OwotICAgIHZvaWQgKm91dHB1dCA9IHN0cmVhbUliLT5tYXAocmVxdWlyZWRTcGFjZSwgJm9m
ZnNldCk7CisgICAgU3RhdGljSW5kZXhCdWZmZXIgKnN0YXRpY0J1ZmZlciA9IGJ1ZmZlciA/IGJ1
ZmZlci0+Z2V0SW5kZXhCdWZmZXIoKSA6IE5VTEw7CisgICAgSW5kZXhCdWZmZXIgKmluZGV4QnVm
ZmVyID0gc3RyZWFtaW5nQnVmZmVyOworICAgIFVJTlQgc3RyZWFtT2Zmc2V0ID0gMDsKIAotICAg
IHRyYW5zbGF0ZWQtPmJ1ZmZlciA9IHN0cmVhbUliOwotICAgIHRyYW5zbGF0ZWQtPm9mZnNldCA9
IG9mZnNldDsKLSAgICB0cmFuc2xhdGVkLT5pbmRleFNpemUgPSBpbmRleFNpemUodHlwZSk7Ci0K
LSAgICBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAgIGlmIChzdGF0aWNCdWZmZXIg
JiYgc3RhdGljQnVmZmVyLT5sb29rdXBUeXBlKHR5cGUpICYmIGFsaWduZWRPZmZzZXQpCiAgICAg
ewotICAgICAgICBjb25zdCBHTHVieXRlICppbiA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUq
PihpbmRpY2VzKTsKLSAgICAgICAgR0x1c2hvcnQgKm91dCA9IHN0YXRpY19jYXN0PEdMdXNob3J0
Kj4ob3V0cHV0KTsKKyAgICAgICAgaW5kZXhCdWZmZXIgPSBzdGF0aWNCdWZmZXI7CisgICAgICAg
IHN0cmVhbU9mZnNldCA9IHN0YXRpY0J1ZmZlci0+bG9va3VwUmFuZ2Uob2Zmc2V0LCBjb3VudCwg
JnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJhbnNsYXRlZC0+bWF4SW5kZXgpOwogCi0gICAgICAg
IGNvcHlJbmRpY2VzKGluLCBjb3VudCwgb3V0LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsICZ0cmFu
c2xhdGVkLT5tYXhJbmRleCk7CisgICAgICAgIGlmIChzdHJlYW1PZmZzZXQgPT0gLTEpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9IChvZmZzZXQgLyB0eXBlU2l6ZSh0eXBl
KSkgKiBpbmRleFNpemUoZm9ybWF0KTsKKyAgICAgICAgICAgIGNvbXB1dGVSYW5nZSh0eXBlLCBp
bmRpY2VzLCBjb3VudCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJhbnNsYXRlZC0+bWF4SW5k
ZXgpOworICAgICAgICAgICAgc3RhdGljQnVmZmVyLT5hZGRSYW5nZShvZmZzZXQsIGNvdW50LCB0
cmFuc2xhdGVkLT5taW5JbmRleCwgdHJhbnNsYXRlZC0+bWF4SW5kZXgsIHN0cmVhbU9mZnNldCk7
CisgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9JTlQp
CisgICAgZWxzZQogICAgIHsKLSAgICAgICAgY29uc3QgR0x1aW50ICppbiA9IHN0YXRpY19jYXN0
PGNvbnN0IEdMdWludCo+KGluZGljZXMpOworICAgICAgICBpbnQgY29udmVydENvdW50ID0gY291
bnQ7CiAKLSAgICAgICAgaWYgKG1JbnRJbmRpY2VzU3VwcG9ydGVkKQorICAgICAgICBpZiAoc3Rh
dGljQnVmZmVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBHTHVpbnQgKm91dCA9IHN0YXRpY19j
YXN0PEdMdWludCo+KG91dHB1dCk7CisgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyLT5zaXpl
KCkgPT0gMCAmJiBhbGlnbmVkT2Zmc2V0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGluZGV4QnVmZmVyID0gc3RhdGljQnVmZmVyOworICAgICAgICAgICAgICAgIGNvbnZlcnRDb3Vu
dCA9IGJ1ZmZlci0+c2l6ZSgpIC8gdHlwZVNpemUodHlwZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYnVmZmVyLT5pbnZh
bGlkYXRlU3RhdGljRGF0YSgpOworICAgICAgICAgICAgICAgIHN0YXRpY0J1ZmZlciA9IE5VTEw7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICAgICAgY29weUluZGljZXMoaW4s
IGNvdW50LCBvdXQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0ZWQtPm1heEluZGV4
KTsKKyAgICAgICAgdm9pZCAqb3V0cHV0ID0gTlVMTDsKKyAgICAgICAgCisgICAgICAgIGlmIChp
bmRleEJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXhCdWZmZXItPnJlc2VydmVT
cGFjZShjb252ZXJ0Q291bnQgKiBpbmRleFNpemUoZm9ybWF0KSwgdHlwZSk7CisgICAgICAgICAg
ICBvdXRwdXQgPSBpbmRleEJ1ZmZlci0+bWFwKGluZGV4U2l6ZShmb3JtYXQpICogY29udmVydENv
dW50LCAmc3RyZWFtT2Zmc2V0KTsKICAgICAgICAgfQotICAgICAgICBlbHNlCisgICAgICAgIAor
ICAgICAgICBpZiAob3V0cHV0ID09IE5VTEwpCiAgICAgICAgIHsKLSAgICAgICAgICAgIC8vIFdo
ZW4gMzItYml0IGluZGljZXMgYXJlIHVuc3VwcG9ydGVkLCBmYWtlIHRoZW0gYnkgdHJ1bmNhdGlu
ZyB0byAxNi1iaXQuCisgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgaW5kZXggYnVmZmVy
LiIpOworICAgICAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7CisgICAgICAgIH0KIAot
ICAgICAgICAgICAgR0x1c2hvcnQgKm91dCA9IHN0YXRpY19jYXN0PEdMdXNob3J0Kj4ob3V0cHV0
KTsKKyAgICAgICAgY29udmVydEluZGljZXModHlwZSwgc3RhdGljQnVmZmVyID8gYnVmZmVyLT5k
YXRhKCkgOiBpbmRpY2VzLCBjb252ZXJ0Q291bnQsIG91dHB1dCk7CisgICAgICAgIGluZGV4QnVm
ZmVyLT51bm1hcCgpOwogCi0gICAgICAgICAgICBjb3B5SW5kaWNlcyhpbiwgY291bnQsIG91dCwg
JnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJhbnNsYXRlZC0+bWF4SW5kZXgpOwotICAgICAgICB9
Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIGNvbnN0IEdMdXNob3J0ICppbiA9IHN0
YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcyk7Ci0gICAgICAgIEdMdXNob3J0ICpv
dXQgPSBzdGF0aWNfY2FzdDxHTHVzaG9ydCo+KG91dHB1dCk7CisgICAgICAgIGNvbXB1dGVSYW5n
ZSh0eXBlLCBpbmRpY2VzLCBjb3VudCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJhbnNsYXRl
ZC0+bWF4SW5kZXgpOwogCi0gICAgICAgIGNvcHlJbmRpY2VzKGluLCBjb3VudCwgb3V0LCAmdHJh
bnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7CisgICAgICAgIGlmIChz
dGF0aWNCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9IChvZmZz
ZXQgLyB0eXBlU2l6ZSh0eXBlKSkgKiBpbmRleFNpemUoZm9ybWF0KTsKKyAgICAgICAgICAgIHN0
YXRpY0J1ZmZlci0+YWRkUmFuZ2Uob2Zmc2V0LCBjb3VudCwgdHJhbnNsYXRlZC0+bWluSW5kZXgs
IHRyYW5zbGF0ZWQtPm1heEluZGV4LCBzdHJlYW1PZmZzZXQpOworICAgICAgICB9CiAgICAgfQog
Ci0gICAgc3RyZWFtSWItPnVubWFwKCk7CisgICAgdHJhbnNsYXRlZC0+aW5kZXhCdWZmZXIgPSBp
bmRleEJ1ZmZlci0+Z2V0QnVmZmVyKCk7CisgICAgdHJhbnNsYXRlZC0+c3RhcnRJbmRleCA9IHN0
cmVhbU9mZnNldCAvIGluZGV4U2l6ZShmb3JtYXQpOwogCiAgICAgcmV0dXJuIEdMX05PX0VSUk9S
OwogfQogCi1zdGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjppbmRleFNpemUoR0xlbnVtIHR5
cGUpIGNvbnN0CitzdGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjppbmRleFNpemUoRDNERk9S
TUFUIGZvcm1hdCkgY29uc3QKIHsKLSAgICByZXR1cm4gKHR5cGUgPT0gR0xfVU5TSUdORURfSU5U
ICYmIG1JbnRJbmRpY2VzU3VwcG9ydGVkKSA/IHNpemVvZihHTHVpbnQpIDogc2l6ZW9mKEdMdXNo
b3J0KTsKKyAgICByZXR1cm4gKGZvcm1hdCA9PSBEM0RGTVRfSU5ERVgzMikgPyBzaXplb2YodW5z
aWduZWQgaW50KSA6IHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CiB9CiAKIHN0ZDo6c2l6ZV90IElu
ZGV4RGF0YU1hbmFnZXI6OnR5cGVTaXplKEdMZW51bSB0eXBlKSBjb25zdAogewogICAgIHN3aXRj
aCAodHlwZSkKICAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogcmV0dXJuIHNpemVv
ZihHTHVpbnQpOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6ICAgcmV0dXJuIHNpemVvZihH
THVpbnQpOwogICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIHNpemVvZihHTHVz
aG9ydCk7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOiByZXR1cm4gc2l6ZW9mKEdMdWJ5dGUpOworICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOiAgcmV0dXJuIHNpemVvZihHTHVieXRlKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hB
QkxFKCk7IHJldHVybiBzaXplb2YoR0x1c2hvcnQpOwogICAgIH0KIH0KIAotc3RkOjpzaXplX3Qg
SW5kZXhEYXRhTWFuYWdlcjo6c3BhY2VSZXF1aXJlZChHTGVudW0gdHlwZSwgR0xzaXplaSBjb3Vu
dCkgY29uc3QKK0luZGV4QnVmZmVyOjpJbmRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZp
Y2UsIFVJTlQgc2l6ZSwgRDNERk9STUFUIGZvcm1hdCkgOiBtRGV2aWNlKGRldmljZSksIG1CdWZm
ZXJTaXplKHNpemUpLCBtSW5kZXhCdWZmZXIoTlVMTCkKIHsKLSAgICByZXR1cm4gKGNvdW50ICsg
MSkgKiBpbmRleFNpemUodHlwZSk7IC8vICsxIGJlY2F1c2Ugd2UgYWx3YXlzIGxlYXZlIGFuIGV4
dHJhIGZvciBsaW5lIGxvb3BzCisgICAgaWYgKHNpemUgPiAwKQorICAgIHsKKyAgICAgICAgRDNE
UE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKEQzRFVTQUdFX0RZTkFNSUMg
fCBEM0RVU0FHRV9XUklURU9OTFkpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmljZS0+
Q3JlYXRlSW5kZXhCdWZmZXIoc2l6ZSwgRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRF
T05MWSwgZm9ybWF0LCBwb29sLCAmbUluZGV4QnVmZmVyLCBOVUxMKTsKKworICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiT3V0IG9mIG1lbW9y
eSBhbGxvY2F0aW5nIGFuIGluZGV4IGJ1ZmZlciBvZiBzaXplICVsdS4iLCBzaXplKTsKKyAgICAg
ICAgfQorICAgIH0KIH0KIAotVHJhbnNsYXRlZEluZGV4QnVmZmVyICpJbmRleERhdGFNYW5hZ2Vy
OjpwcmVwYXJlSW5kZXhCdWZmZXIoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3Bh
Y2UpCitJbmRleEJ1ZmZlcjo6fkluZGV4QnVmZmVyKCkKIHsKLSAgICBib29sIHVzZTMyID0gKHR5
cGUgPT0gR0xfVU5TSUdORURfSU5UICYmIG1JbnRJbmRpY2VzU3VwcG9ydGVkKTsKKyAgICBpZiAo
bUluZGV4QnVmZmVyKQorICAgIHsKKyAgICAgICAgbUluZGV4QnVmZmVyLT5SZWxlYXNlKCk7Cisg
ICAgfQorfQogCi0gICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpzdHJlYW1JYiA9IHVzZTMyID8g
bVN0cmVhbUJ1ZmZlckludCA6IG1TdHJlYW1CdWZmZXJTaG9ydDsKK0lEaXJlY3QzREluZGV4QnVm
ZmVyOSAqSW5kZXhCdWZmZXI6OmdldEJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1JbmRl
eEJ1ZmZlcjsKK30KIAotICAgIGlmIChyZXF1aXJlZFNwYWNlID4gc3RyZWFtSWItPnNpemUoKSkK
K3ZvaWQgSW5kZXhCdWZmZXI6OnVubWFwKCkKK3sKKyAgICBpZiAobUluZGV4QnVmZmVyKQogICAg
IHsKLSAgICAgICAgc3RkOjpzaXplX3QgbmV3U2l6ZSA9IHN0ZDo6bWF4KHJlcXVpcmVkU3BhY2Us
IDIgKiBzdHJlYW1JYi0+c2l6ZSgpKTsKKyAgICAgICAgbUluZGV4QnVmZmVyLT5VbmxvY2soKTsK
KyAgICB9Cit9CiAKLSAgICAgICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpuZXdTdHJlYW1CdWZm
ZXIgPSBtQmFja2VuZC0+Y3JlYXRlSW5kZXhCdWZmZXIobmV3U2l6ZSwgdXNlMzIgPyBHTF9VTlNJ
R05FRF9JTlQgOiBHTF9VTlNJR05FRF9TSE9SVCk7CitTdHJlYW1pbmdJbmRleEJ1ZmZlcjo6U3Ry
ZWFtaW5nSW5kZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBVSU5UIGluaXRpYWxT
aXplLCBEM0RGT1JNQVQgZm9ybWF0KSA6IEluZGV4QnVmZmVyKGRldmljZSwgaW5pdGlhbFNpemUs
IGZvcm1hdCkKK3sKKyAgICBtV3JpdGVQb3NpdGlvbiA9IDA7Cit9CiAKLSAgICAgICAgZGVsZXRl
IHN0cmVhbUliOworU3RyZWFtaW5nSW5kZXhCdWZmZXI6On5TdHJlYW1pbmdJbmRleEJ1ZmZlcigp
Cit7Cit9CiAKLSAgICAgICAgc3RyZWFtSWIgPSBuZXdTdHJlYW1CdWZmZXI7Cit2b2lkICpTdHJl
YW1pbmdJbmRleEJ1ZmZlcjo6bWFwKFVJTlQgcmVxdWlyZWRTcGFjZSwgVUlOVCAqb2Zmc2V0KQor
eworICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7CiAKLSAgICAgICAgaWYgKHVzZTMyKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBtU3RyZWFtQnVmZmVySW50ID0gc3RyZWFtSWI7Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQorICAgIGlmIChtSW5kZXhCdWZmZXIpCisgICAgeworICAgICAgICBIUkVT
VUxUIHJlc3VsdCA9IG1JbmRleEJ1ZmZlci0+TG9jayhtV3JpdGVQb3NpdGlvbiwgcmVxdWlyZWRT
cGFjZSwgJm1hcFB0ciwgRDNETE9DS19OT09WRVJXUklURSk7CisgICAgIAorICAgICAgICBpZiAo
RkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG1TdHJlYW1CdWZmZXJTaG9y
dCA9IHN0cmVhbUliOworICAgICAgICAgICAgRVJSKCIgTG9jayBmYWlsZWQgd2l0aCBlcnJvciAw
eCUwOHgiLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAg
ICB9CiAKLSAgICBzdHJlYW1JYi0+cmVzZXJ2ZVNwYWNlKHJlcXVpcmVkU3BhY2UpOworICAgICAg
ICAqb2Zmc2V0ID0gbVdyaXRlUG9zaXRpb247CisgICAgICAgIG1Xcml0ZVBvc2l0aW9uICs9IHJl
cXVpcmVkU3BhY2U7CisgICAgfQogCi0gICAgcmV0dXJuIHN0cmVhbUliOworICAgIHJldHVybiBt
YXBQdHI7CiB9CiAKLUdMZW51bSBJbmRleERhdGFNYW5hZ2VyOjpwcmVSZW5kZXJWYWxpZGF0ZVVu
aW5kZXhlZChHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEluZGV4RGF0YSAq
aW5kZXhJbmZvKQordm9pZCBTdHJlYW1pbmdJbmRleEJ1ZmZlcjo6cmVzZXJ2ZVNwYWNlKFVJTlQg
cmVxdWlyZWRTcGFjZSwgR0xlbnVtIHR5cGUpCiB7Ci0gICAgaWYgKGNvdW50ID49IDY1NTM1KSBy
ZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKLQotICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkK
KyAgICBpZiAocmVxdWlyZWRTcGFjZSA+IG1CdWZmZXJTaXplKQogICAgIHsKLSAgICAgICAgLy8g
Rm9yIGxpbmUgbG9vcHMsIGNyZWF0ZSBhIHNpbmdsZS11c2UgYnVmZmVyIHRoYXQgcnVucyAwIC0g
Y291bnQtMSwgMC4KLSAgICAgICAgZGVsZXRlIG1MaW5lTG9vcEJ1ZmZlcjsKLSAgICAgICAgbUxp
bmVMb29wQnVmZmVyID0gbUJhY2tlbmQtPmNyZWF0ZUluZGV4QnVmZmVyKChjb3VudCsxKSAqIHNp
emVvZih1bnNpZ25lZCBzaG9ydCksIEdMX1VOU0lHTkVEX1NIT1JUKTsKLQotICAgICAgICB1bnNp
Z25lZCBzaG9ydCAqaW5kaWNlcyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0ICo+KG1MaW5l
TG9vcEJ1ZmZlci0+bWFwKCkpOwotCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICAgICAgaWYgKG1JbmRleEJ1ZmZlcikKICAgICAgICAgewotICAgICAgICAgICAg
aW5kaWNlc1tpXSA9IGk7CisgICAgICAgICAgICBtSW5kZXhCdWZmZXItPlJlbGVhc2UoKTsKKyAg
ICAgICAgICAgIG1JbmRleEJ1ZmZlciA9IE5VTEw7CiAgICAgICAgIH0KIAotICAgICAgICBpbmRp
Y2VzW2NvdW50XSA9IDA7CisgICAgICAgIG1CdWZmZXJTaXplID0gc3RkOjptYXgocmVxdWlyZWRT
cGFjZSwgMiAqIG1CdWZmZXJTaXplKTsKIAotICAgICAgICBtTGluZUxvb3BCdWZmZXItPnVubWFw
KCk7CisgICAgICAgIEQzRFBPT0wgcG9vbCA9IGdldERpc3BsYXkoKS0+Z2V0QnVmZmVyUG9vbChE
M0RVU0FHRV9EWU5BTUlDIHwgRDNEVVNBR0VfV1JJVEVPTkxZKTsKKyAgICAgICAgSFJFU1VMVCBy
ZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbmRleEJ1ZmZlcihtQnVmZmVyU2l6ZSwgRDNEVVNBR0Vf
RFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRFT05MWSwgdHlwZSA9PSBHTF9VTlNJR05FRF9JTlQgPyBE
M0RGTVRfSU5ERVgzMiA6IEQzREZNVF9JTkRFWDE2LCBwb29sLCAmbUluZGV4QnVmZmVyLCBOVUxM
KTsKKyAgICAKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAg
ICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6
ZSAlbHUuIiwgbUJ1ZmZlclNpemUpOworICAgICAgICB9CiAKLSAgICAgICAgaW5kZXhJbmZvLT5i
dWZmZXIgPSBtTGluZUxvb3BCdWZmZXI7Ci0gICAgICAgIGluZGV4SW5mby0+Y291bnQgPSBjb3Vu
dCArIDE7Ci0gICAgICAgIGluZGV4SW5mby0+bWF4SW5kZXggPSBjb3VudCAtIDE7CisgICAgICAg
IG1Xcml0ZVBvc2l0aW9uID0gMDsKICAgICB9Ci0gICAgZWxzZSBpZiAobUNvdW50aW5nQnVmZmVy
U2l6ZSA8IGNvdW50KQorICAgIGVsc2UgaWYgKG1Xcml0ZVBvc2l0aW9uICsgcmVxdWlyZWRTcGFj
ZSA+IG1CdWZmZXJTaXplKSAgIC8vIFJlY3ljbGUKICAgICB7Ci0gICAgICAgIG1Db3VudGluZ0J1
ZmZlclNpemUgPSBzdGQ6Om1heChzdGF0aWNfY2FzdDxHTHNpemVpPihjZWlsUG93Mihjb3VudCkp
LCBtQ291bnRpbmdCdWZmZXJTaXplKjIpOworICAgICAgICB2b2lkICpkdW1teTsKKyAgICAgICAg
bUluZGV4QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19ESVNDQVJEKTsKKyAgICAg
ICAgbUluZGV4QnVmZmVyLT5VbmxvY2soKTsKIAotICAgICAgICBkZWxldGUgbUNvdW50aW5nQnVm
ZmVyOwotICAgICAgICBtQ291bnRpbmdCdWZmZXIgPSBtQmFja2VuZC0+Y3JlYXRlSW5kZXhCdWZm
ZXIoY291bnQgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpLCBHTF9VTlNJR05FRF9TSE9SVCk7Cisg
ICAgICAgIG1Xcml0ZVBvc2l0aW9uID0gMDsKKyAgICB9Cit9CiAKLSAgICAgICAgdW5zaWduZWQg
c2hvcnQgKmluZGljZXMgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydCAqPihtQ291bnRpbmdC
dWZmZXItPm1hcCgpKTsKK1N0YXRpY0luZGV4QnVmZmVyOjpTdGF0aWNJbmRleEJ1ZmZlcihJRGly
ZWN0M0REZXZpY2U5ICpkZXZpY2UpIDogSW5kZXhCdWZmZXIoZGV2aWNlLCAwLCBEM0RGTVRfVU5L
Tk9XTikKK3sKKyAgICBtQ2FjaGVUeXBlID0gR0xfTk9ORTsKK30KIAotICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGNvdW50OyBpKyspCitTdGF0aWNJbmRleEJ1ZmZlcjo6flN0YXRpY0luZGV4
QnVmZmVyKCkKK3sKK30KKwordm9pZCAqU3RhdGljSW5kZXhCdWZmZXI6Om1hcChVSU5UIHJlcXVp
cmVkU3BhY2UsIFVJTlQgKm9mZnNldCkKK3sKKyAgICB2b2lkICptYXBQdHIgPSBOVUxMOworCisg
ICAgaWYgKG1JbmRleEJ1ZmZlcikKKyAgICB7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUlu
ZGV4QnVmZmVyLT5Mb2NrKDAsIHJlcXVpcmVkU3BhY2UsICZtYXBQdHIsIDApOworICAgICAKKyAg
ICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7Ci0gICAgICAgICAgICBpbmRpY2Vz
W2ldID0gaTsKKyAgICAgICAgICAgIEVSUigiIExvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4
IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKLSAgICAg
ICAgbUNvdW50aW5nQnVmZmVyLT51bm1hcCgpOworICAgICAgICAqb2Zmc2V0ID0gMDsKKyAgICB9
CisKKyAgICByZXR1cm4gbWFwUHRyOworfQorCit2b2lkIFN0YXRpY0luZGV4QnVmZmVyOjpyZXNl
cnZlU3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlLCBHTGVudW0gdHlwZSkKK3sKKyAgICBpZiAoIW1J
bmRleEJ1ZmZlciAmJiBtQnVmZmVyU2l6ZSA9PSAwKQorICAgIHsKKyAgICAgICAgRDNEUE9PTCBw
b29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKEQzRFVTQUdFX1dSSVRFT05MWSk7Cisg
ICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlSW5kZXhCdWZmZXIocmVxdWly
ZWRTcGFjZSwgRDNEVVNBR0VfV1JJVEVPTkxZLCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVCA/IEQz
REZNVF9JTkRFWDMyIDogRDNERk1UX0lOREVYMTYsIHBvb2wsICZtSW5kZXhCdWZmZXIsIE5VTEwp
OworICAgIAorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBvZiBzaXpl
ICVsdS4iLCBtQnVmZmVyU2l6ZSk7CisgICAgICAgIH0KIAotICAgICAgICBpbmRleEluZm8tPmJ1
ZmZlciA9IG1Db3VudGluZ0J1ZmZlcjsKLSAgICAgICAgaW5kZXhJbmZvLT5jb3VudCA9IGNvdW50
OwotICAgICAgICBpbmRleEluZm8tPm1heEluZGV4ID0gY291bnQgLSAxOworICAgICAgICBtQnVm
ZmVyU2l6ZSA9IHJlcXVpcmVkU3BhY2U7CisgICAgICAgIG1DYWNoZVR5cGUgPSB0eXBlOwogICAg
IH0KLSAgICBlbHNlCisgICAgZWxzZSBpZiAobUluZGV4QnVmZmVyICYmIG1CdWZmZXJTaXplID49
IHJlcXVpcmVkU3BhY2UgJiYgbUNhY2hlVHlwZSA9PSB0eXBlKQogICAgIHsKLSAgICAgICAgaW5k
ZXhJbmZvLT5idWZmZXIgPSBtQ291bnRpbmdCdWZmZXI7Ci0gICAgICAgIGluZGV4SW5mby0+Y291
bnQgPSBjb3VudDsKLSAgICAgICAgaW5kZXhJbmZvLT5tYXhJbmRleCA9IGNvdW50IC0gMTsKKyAg
ICAgICAgLy8gQWxyZWFkeSBhbGxvY2F0ZWQKICAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJMRSgp
OyAgIC8vIFN0YXRpYyBpbmRleCBidWZmZXJzIGNhbid0IGJlIHJlc2l6ZWQKK30KIAotICAgIGlu
ZGV4SW5mby0+aW5kZXhTaXplID0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKLSAgICBpbmRleElu
Zm8tPm1pbkluZGV4ID0gMDsKLSAgICBpbmRleEluZm8tPm9mZnNldCA9IDA7Citib29sIFN0YXRp
Y0luZGV4QnVmZmVyOjpsb29rdXBUeXBlKEdMZW51bSB0eXBlKQoreworICAgIHJldHVybiBtQ2Fj
aGVUeXBlID09IHR5cGU7Cit9CiAKLSAgICByZXR1cm4gR0xfTk9fRVJST1I7CitVSU5UIFN0YXRp
Y0luZGV4QnVmZmVyOjpsb29rdXBSYW5nZShpbnRwdHJfdCBvZmZzZXQsIEdMc2l6ZWkgY291bnQs
IFVJTlQgKm1pbkluZGV4LCBVSU5UICptYXhJbmRleCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCByYW5nZSA9IDA7IHJhbmdlIDwgbUNhY2hlLnNpemUoKTsgcmFuZ2UrKykKKyAgICB7CisgICAg
ICAgIGlmIChtQ2FjaGVbcmFuZ2VdLm9mZnNldCA9PSBvZmZzZXQgJiYgbUNhY2hlW3JhbmdlXS5j
b3VudCA9PSBjb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgKm1pbkluZGV4ID0gbUNhY2hl
W3JhbmdlXS5taW5JbmRleDsKKyAgICAgICAgICAgICptYXhJbmRleCA9IG1DYWNoZVtyYW5nZV0u
bWF4SW5kZXg7CisKKyAgICAgICAgICAgIHJldHVybiBtQ2FjaGVbcmFuZ2VdLnN0cmVhbU9mZnNl
dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKwordm9pZCBTdGF0aWNJ
bmRleEJ1ZmZlcjo6YWRkUmFuZ2UoaW50cHRyX3Qgb2Zmc2V0LCBHTHNpemVpIGNvdW50LCBVSU5U
IG1pbkluZGV4LCBVSU5UIG1heEluZGV4LCBVSU5UIHN0cmVhbU9mZnNldCkKK3sKKyAgICBJbmRl
eFJhbmdlIGluZGV4UmFuZ2UgPSB7b2Zmc2V0LCBjb3VudCwgbWluSW5kZXgsIG1heEluZGV4LCBz
dHJlYW1PZmZzZXR9OworICAgIG1DYWNoZS5wdXNoX2JhY2soaW5kZXhSYW5nZSk7CiB9CiAKIH0K
SW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvSW5k
ZXhEYXRhTWFuYWdlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5oCShyZXZpc2lvbiA3NTgwMSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhE
YXRhTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw3ICsxMCw3IEBACiAjaWZuZGVmIExJ
QkdMRVNWMl9HRU9NRVRSWV9JTkRFWERBVEFNQU5BR0VSX0hfCiAjZGVmaW5lIExJQkdMRVNWMl9H
RU9NRVRSWV9JTkRFWERBVEFNQU5BR0VSX0hfCiAKLSNpbmNsdWRlIDxiaXRzZXQ+CisjaW5jbHVk
ZSA8dmVjdG9yPgogI2luY2x1ZGUgPGNzdGRkZWY+CiAKICNkZWZpbmUgR0xfQVBJQ0FMTApAQCAt
MjEsNDkgKzIxLDk4IEBACiBuYW1lc3BhY2UgZ2wKIHsKIAotY2xhc3MgQnVmZmVyOwotY2xhc3Mg
QnVmZmVyQmFja0VuZDsKLWNsYXNzIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlcjsKLXN0cnVjdCBGb3Jt
YXRDb252ZXJ0ZXI7Ci0KIHN0cnVjdCBUcmFuc2xhdGVkSW5kZXhEYXRhCiB7Ci0gICAgR0x1aW50
IG1pbkluZGV4OwotICAgIEdMdWludCBtYXhJbmRleDsKLSAgICBHTHVpbnQgY291bnQ7Ci0gICAg
R0x1aW50IGluZGV4U2l6ZTsKKyAgICBVSU5UIG1pbkluZGV4OworICAgIFVJTlQgbWF4SW5kZXg7
CisgICAgVUlOVCBzdGFydEluZGV4OwogCi0gICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpidWZm
ZXI7Ci0gICAgR0xzaXplaSBvZmZzZXQ7CisgICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICppbmRl
eEJ1ZmZlcjsKIH07CiAKLWNsYXNzIEluZGV4RGF0YU1hbmFnZXIKK2NsYXNzIEluZGV4QnVmZmVy
CiB7CiAgIHB1YmxpYzoKLSAgICBJbmRleERhdGFNYW5hZ2VyKENvbnRleHQgKmNvbnRleHQsIEJ1
ZmZlckJhY2tFbmQgKmJhY2tlbmQpOwotICAgIH5JbmRleERhdGFNYW5hZ2VyKCk7CisgICAgSW5k
ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBVSU5UIHNpemUsIEQzREZPUk1BVCBm
b3JtYXQpOworICAgIHZpcnR1YWwgfkluZGV4QnVmZmVyKCk7CisKKyAgICBVSU5UIHNpemUoKSBj
b25zdCB7IHJldHVybiBtQnVmZmVyU2l6ZTsgfQorICAgIHZpcnR1YWwgdm9pZCAqbWFwKFVJTlQg
cmVxdWlyZWRTcGFjZSwgVUlOVCAqb2Zmc2V0KSA9IDA7CisgICAgdm9pZCB1bm1hcCgpOworICAg
IHZpcnR1YWwgdm9pZCByZXNlcnZlU3BhY2UoVUlOVCByZXF1aXJlZFNwYWNlLCBHTGVudW0gdHlw
ZSkgPSAwOworCisgICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICpnZXRCdWZmZXIoKSBjb25zdDsK
IAotICAgIEdMZW51bSBwcmVSZW5kZXJWYWxpZGF0ZShHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUs
IEdMc2l6ZWkgY291bnQsIEJ1ZmZlciAqYXJyYXlFbGVtZW50QnVmZmVyLCBjb25zdCB2b2lkICpp
bmRpY2VzLCBUcmFuc2xhdGVkSW5kZXhEYXRhICp0cmFuc2xhdGVkKTsKLSAgICBHTGVudW0gcHJl
UmVuZGVyVmFsaWRhdGVVbmluZGV4ZWQoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIFRyYW5z
bGF0ZWRJbmRleERhdGEgKmluZGV4SW5mbyk7CisgIHByb3RlY3RlZDoKKyAgICBJRGlyZWN0M0RE
ZXZpY2U5ICpjb25zdCBtRGV2aWNlOworCisgICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICptSW5k
ZXhCdWZmZXI7CisgICAgVUlOVCBtQnVmZmVyU2l6ZTsKIAogICBwcml2YXRlOgotICAgIHN0ZDo6
c2l6ZV90IEluZGV4RGF0YU1hbmFnZXI6OnR5cGVTaXplKEdMZW51bSB0eXBlKSBjb25zdDsKLSAg
ICBzdGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjppbmRleFNpemUoR0xlbnVtIHR5cGUpIGNv
bnN0OwotICAgIHN0ZDo6c2l6ZV90IHNwYWNlUmVxdWlyZWQoR0xlbnVtIHR5cGUsIEdMc2l6ZWkg
Y291bnQpIGNvbnN0OwotICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqcHJlcGFyZUluZGV4QnVm
ZmVyKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlKTsKKyAgICBESVNBTExP
V19DT1BZX0FORF9BU1NJR04oSW5kZXhCdWZmZXIpOworfTsKKworY2xhc3MgU3RyZWFtaW5nSW5k
ZXhCdWZmZXIgOiBwdWJsaWMgSW5kZXhCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIFN0cmVhbWlu
Z0luZGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgVUlOVCBpbml0aWFsU2l6ZSwg
RDNERk9STUFUIGZvcm1hdCk7CisgICAgflN0cmVhbWluZ0luZGV4QnVmZmVyKCk7CiAKLSAgICBD
b250ZXh0ICptQ29udGV4dDsKLSAgICBCdWZmZXJCYWNrRW5kICptQmFja2VuZDsKKyAgICB2b2lk
ICptYXAoVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZzZXQpOworICAgIHZvaWQgcmVzZXJ2
ZVNwYWNlKFVJTlQgcmVxdWlyZWRTcGFjZSwgR0xlbnVtIHR5cGUpOwogCi0gICAgYm9vbCBtSW50
SW5kaWNlc1N1cHBvcnRlZDsKKyAgcHJpdmF0ZToKKyAgICBVSU5UIG1Xcml0ZVBvc2l0aW9uOwor
fTsKKworY2xhc3MgU3RhdGljSW5kZXhCdWZmZXIgOiBwdWJsaWMgSW5kZXhCdWZmZXIKK3sKKyAg
cHVibGljOgorICAgIGV4cGxpY2l0IFN0YXRpY0luZGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkg
KmRldmljZSk7CisgICAgflN0YXRpY0luZGV4QnVmZmVyKCk7CisKKyAgICB2b2lkICptYXAoVUlO
VCByZXF1aXJlZFNwYWNlLCBVSU5UICpvZmZzZXQpOworICAgIHZvaWQgcmVzZXJ2ZVNwYWNlKFVJ
TlQgcmVxdWlyZWRTcGFjZSwgR0xlbnVtIHR5cGUpOworCisgICAgYm9vbCBsb29rdXBUeXBlKEdM
ZW51bSB0eXBlKTsKKyAgICBVSU5UIGxvb2t1cFJhbmdlKGludHB0cl90IG9mZnNldCwgR0xzaXpl
aSBjb3VudCwgVUlOVCAqbWluSW5kZXgsIFVJTlQgKm1heEluZGV4KTsgICAvLyBSZXR1cm5zIHRo
ZSBvZmZzZXQgaW50byB0aGUgaW5kZXggYnVmZmVyLCBvciAtMSBpZiBub3QgZm91bmQKKyAgICB2
b2lkIGFkZFJhbmdlKGludHB0cl90IG9mZnNldCwgR0xzaXplaSBjb3VudCwgVUlOVCBtaW5JbmRl
eCwgVUlOVCBtYXhJbmRleCwgVUlOVCBzdHJlYW1PZmZzZXQpOworCisgIHByaXZhdGU6CisgICAg
R0xlbnVtIG1DYWNoZVR5cGU7CisgICAgCisgICAgc3RydWN0IEluZGV4UmFuZ2UKKyAgICB7Cisg
ICAgICAgIGludHB0cl90IG9mZnNldDsKKyAgICAgICAgR0xzaXplaSBjb3VudDsKKworICAgICAg
ICBVSU5UIG1pbkluZGV4OworICAgICAgICBVSU5UIG1heEluZGV4OworICAgICAgICBVSU5UIHN0
cmVhbU9mZnNldDsKKyAgICB9OworCisgICAgc3RkOjp2ZWN0b3I8SW5kZXhSYW5nZT4gbUNhY2hl
OworfTsKKworY2xhc3MgSW5kZXhEYXRhTWFuYWdlcgoreworICBwdWJsaWM6CisgICAgSW5kZXhE
YXRhTWFuYWdlcihDb250ZXh0ICpjb250ZXh0LCBJRGlyZWN0M0REZXZpY2U5ICpldmljZSk7Cisg
ICAgdmlydHVhbCB+SW5kZXhEYXRhTWFuYWdlcigpOworCisgICAgR0xlbnVtIHByZXBhcmVJbmRl
eERhdGEoR0xlbnVtIHR5cGUsIEdMc2l6ZWkgY291bnQsIEJ1ZmZlciAqYXJyYXlFbGVtZW50QnVm
ZmVyLCBjb25zdCB2b2lkICppbmRpY2VzLCBUcmFuc2xhdGVkSW5kZXhEYXRhICp0cmFuc2xhdGVk
KTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihJbmRleERhdGFN
YW5hZ2VyKTsKIAotICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqbVN0cmVhbUJ1ZmZlclNob3J0
OwotICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqbVN0cmVhbUJ1ZmZlckludDsKKyAgICBzdGQ6
OnNpemVfdCB0eXBlU2l6ZShHTGVudW0gdHlwZSkgY29uc3Q7CisgICAgc3RkOjpzaXplX3QgaW5k
ZXhTaXplKEQzREZPUk1BVCBmb3JtYXQpIGNvbnN0OwogCi0gICAgVHJhbnNsYXRlZEluZGV4QnVm
ZmVyICptQ291bnRpbmdCdWZmZXI7Ci0gICAgR0xzaXplaSBtQ291bnRpbmdCdWZmZXJTaXplOwor
ICAgIElEaXJlY3QzRERldmljZTkgKmNvbnN0IG1EZXZpY2U7CiAKLSAgICBUcmFuc2xhdGVkSW5k
ZXhCdWZmZXIgKm1MaW5lTG9vcEJ1ZmZlcjsKKyAgICBTdHJlYW1pbmdJbmRleEJ1ZmZlciAqbVN0
cmVhbWluZ0J1ZmZlclNob3J0OworICAgIFN0cmVhbWluZ0luZGV4QnVmZmVyICptU3RyZWFtaW5n
QnVmZmVySW50OwogfTsKIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFu
YWdlci5jcHAJKHJldmlzaW9uIDc1ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTksMTQgKzksMTMgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhE
YXRhTWFuYWdlci5oIgogCi0jaW5jbHVkZSA8bGltaXRzPgotCiAjaW5jbHVkZSAiY29tbW9uL2Rl
YnVnLmgiCiAKICNpbmNsdWRlICJsaWJHTEVTdjIvQnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xF
U3YyL1Byb2dyYW0uaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvbWFpbi5oIgogCi0jaW5jbHVkZSAi
bGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0
cnkvdmVydGV4Y29udmVyc2lvbi5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9JbmRl
eERhdGFNYW5hZ2VyLmgiCiAKIG5hbWVzcGFjZQpAQCAtMjcsMjQ1ICsyNiw3NDQgQEAgbmFtZXNw
YWNlCiBuYW1lc3BhY2UgZ2wKIHsKIAotVmVydGV4RGF0YU1hbmFnZXI6OlZlcnRleERhdGFNYW5h
Z2VyKENvbnRleHQgKmNvbnRleHQsIEJ1ZmZlckJhY2tFbmQgKmJhY2tlbmQpCi0gICAgOiBtQ29u
dGV4dChjb250ZXh0KSwgbUJhY2tlbmQoYmFja2VuZCksIG1EaXJ0eUN1cnJlbnRWYWx1ZXModHJ1
ZSksIG1DdXJyZW50VmFsdWVPZmZzZXQoMCkKK1ZlcnRleERhdGFNYW5hZ2VyOjpWZXJ0ZXhEYXRh
TWFuYWdlcihDb250ZXh0ICpjb250ZXh0LCBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpIDogbUNv
bnRleHQoY29udGV4dCksIG1EZXZpY2UoZGV2aWNlKQogewotICAgIG1TdHJlYW1CdWZmZXIgPSBt
QmFja2VuZC0+Y3JlYXRlVmVydGV4QnVmZmVyKElOSVRJQUxfU1RSRUFNX0JVRkZFUl9TSVpFKTsK
LSAgICB0cnkKLSAgICB7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVCdWZmZXIgPSBtQmFja2VuZC0+
Y3JlYXRlVmVydGV4QnVmZmVyRm9yU3RyaWRlWmVybyg0ICogc2l6ZW9mKGZsb2F0KSAqIE1BWF9W
RVJURVhfQVRUUklCUyk7Ci0gICAgfQotICAgIGNhdGNoICguLi4pCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7Ci0gICAgICAgIGRlbGV0ZSBt
U3RyZWFtQnVmZmVyOwotICAgICAgICB0aHJvdzsKKyAgICAgICAgbURpcnR5Q3VycmVudFZhbHVl
W2ldID0gdHJ1ZTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZUJ1ZmZlcltpXSA9IE5VTEw7CiAgICAg
fQorCisgICAgY29uc3QgRDNEQ0FQUzkgJmNhcHMgPSBjb250ZXh0LT5nZXREZXZpY2VDYXBzKCk7
CisgICAgY2hlY2tWZXJ0ZXhDYXBzKGNhcHMuRGVjbFR5cGVzKTsKKworICAgIG1TdHJlYW1pbmdC
dWZmZXIgPSBuZXcgU3RyZWFtaW5nVmVydGV4QnVmZmVyKG1EZXZpY2UsIElOSVRJQUxfU1RSRUFN
X0JVRkZFUl9TSVpFKTsKIH0KIAogVmVydGV4RGF0YU1hbmFnZXI6On5WZXJ0ZXhEYXRhTWFuYWdl
cigpCiB7Ci0gICAgZGVsZXRlIG1TdHJlYW1CdWZmZXI7Ci0gICAgZGVsZXRlIG1DdXJyZW50VmFs
dWVCdWZmZXI7CisgICAgZGVsZXRlIG1TdHJlYW1pbmdCdWZmZXI7CisKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAgICAgZGVsZXRl
IG1DdXJyZW50VmFsdWVCdWZmZXJbaV07CisgICAgfQogfQogCi1zdGQ6OmJpdHNldDxNQVhfVkVS
VEVYX0FUVFJJQlM+IFZlcnRleERhdGFNYW5hZ2VyOjpnZXRBY3RpdmVBdHRyaWJzKCkgY29uc3QK
K1VJTlQgVmVydGV4RGF0YU1hbmFnZXI6OndyaXRlQXR0cmlidXRlRGF0YShBcnJheVZlcnRleEJ1
ZmZlciAqdmVydGV4QnVmZmVyLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgY29uc3QgVmVy
dGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpCiB7Ci0gICAgc3RkOjpiaXRzZXQ8TUFYX1ZFUlRFWF9B
VFRSSUJTPiBhY3RpdmU7CisgICAgQnVmZmVyICpidWZmZXIgPSBhdHRyaWJ1dGUubUJvdW5kQnVm
ZmVyLmdldCgpOwogCi0gICAgUHJvZ3JhbSAqcHJvZ3JhbSA9IG1Db250ZXh0LT5nZXRDdXJyZW50
UHJvZ3JhbSgpOworICAgIGludCBpbnB1dFN0cmlkZSA9IGF0dHJpYnV0ZS5zdHJpZGUoKTsKKyAg
ICBpbnQgZWxlbWVudFNpemUgPSBhdHRyaWJ1dGUudHlwZVNpemUoKTsKKyAgICBjb25zdCBGb3Jt
YXRDb252ZXJ0ZXIgJmNvbnZlcnRlciA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWJ1dGUpOworICAg
IFVJTlQgc3RyZWFtT2Zmc2V0ID0gMDsKIAotICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4ID0g
MDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4Kysp
CisgICAgdm9pZCAqb3V0cHV0ID0gTlVMTDsKKyAgICAKKyAgICBpZiAodmVydGV4QnVmZmVyKQog
ICAgIHsKLSAgICAgICAgYWN0aXZlW2F0dHJpYnV0ZUluZGV4XSA9IChwcm9ncmFtLT5nZXRTZW1h
bnRpY0luZGV4KGF0dHJpYnV0ZUluZGV4KSAhPSAtMSk7CisgICAgICAgIG91dHB1dCA9IHZlcnRl
eEJ1ZmZlci0+bWFwKGF0dHJpYnV0ZSwgc3BhY2VSZXF1aXJlZChhdHRyaWJ1dGUsIGNvdW50KSwg
JnN0cmVhbU9mZnNldCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGFjdGl2ZTsKLX0KKyAgICBpZiAo
b3V0cHV0ID09IE5VTEwpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAgdmVydGV4
IGJ1ZmZlci4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAotR0xlbnVtIFZlcnRleERh
dGFNYW5hZ2VyOjpwcmVSZW5kZXJWYWxpZGF0ZShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlZEF0
dHJpYnV0ZSAqdHJhbnNsYXRlZCkKLXsKLSAgICBjb25zdCBBdHRyaWJ1dGVTdGF0ZSAqYXR0cmli
cyA9IG1Db250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJCbG9jaygpOwotICAgIGNvbnN0IHN0ZDo6Yml0
c2V0PE1BWF9WRVJURVhfQVRUUklCUz4gYWN0aXZlQXR0cmlicyA9IGdldEFjdGl2ZUF0dHJpYnMo
KTsKKyAgICBjb25zdCBjaGFyICppbnB1dCA9IE5VTEw7CiAKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIGlmIChidWZmZXIpCisgICAgeworICAg
ICAgICBpbnQgb2Zmc2V0ID0gYXR0cmlidXRlLm1PZmZzZXQ7CisKKyAgICAgICAgaW5wdXQgPSBz
dGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oYnVmZmVyLT5kYXRhKCkpICsgb2Zmc2V0OworICAgIH0K
KyAgICBlbHNlCiAgICAgewotICAgICAgICBpZiAoIWFjdGl2ZUF0dHJpYnNbaV0gJiYgYXR0cmli
c1tpXS5tRW5hYmxlZCAmJiBhdHRyaWJzW2ldLm1Cb3VuZEJ1ZmZlciAhPSAwICYmICFtQ29udGV4
dC0+Z2V0QnVmZmVyKGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVyKSkKLSAgICAgICAgICAgIHJldHVy
biBHTF9JTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oYXR0cmlidXRlLm1Qb2ludGVyKTsKICAgICB9CiAKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIGlucHV0ICs9IGlucHV0U3RyaWRl
ICogc3RhcnQ7CisKKyAgICBpZiAoY29udmVydGVyLmlkZW50aXR5ICYmIGlucHV0U3RyaWRlID09
IGVsZW1lbnRTaXplKQogICAgIHsKLSAgICAgICAgdHJhbnNsYXRlZFtpXS5lbmFibGVkID0gYWN0
aXZlQXR0cmlic1tpXTsKKyAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNvdW50ICogaW5w
dXRTdHJpZGUpOwogICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBjb252ZXJ0ZXIuY29u
dmVydEFycmF5KGlucHV0LCBpbnB1dFN0cmlkZSwgY291bnQsIG91dHB1dCk7CisgICAgfQorCisg
ICAgdmVydGV4QnVmZmVyLT51bm1hcCgpOworCisgICAgcmV0dXJuIHN0cmVhbU9mZnNldDsKK30K
KworR0xlbnVtIFZlcnRleERhdGFNYW5hZ2VyOjpwcmVwYXJlVmVydGV4RGF0YShHTGludCBzdGFy
dCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqdHJhbnNsYXRlZCkKK3sKKyAg
ICBHTGVudW0gZXJyb3IgPSBHTF9OT19FUlJPUjsKKyAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGVB
cnJheSAmYXR0cmlicyA9IG1Db250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJ1dGVzKCk7CisgICAgUHJv
Z3JhbSAqcHJvZ3JhbSA9IG1Db250ZXh0LT5nZXRDdXJyZW50UHJvZ3JhbSgpOwogCi0gICAgYm9v
bCB1c2VzQ3VycmVudFZhbHVlcyA9IGZhbHNlOworICAgIGZvciAoaW50IGF0dHJpYnV0ZUluZGV4
ID0gMDsgYXR0cmlidXRlSW5kZXggPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGF0dHJpYnV0ZUluZGV4
KyspCisgICAgeworICAgICAgICB0cmFuc2xhdGVkW2F0dHJpYnV0ZUluZGV4XS5hY3RpdmUgPSAo
cHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRleChhdHRyaWJ1dGVJbmRleCkgIT0gLTEpOworICAgIH0K
IAorICAgIC8vIERldGVybWluZSB0aGUgcmVxdWlyZWQgc3RvcmFnZSBzaXplIHBlciB1c2VkIGJ1
ZmZlcgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAg
ICAgewotICAgICAgICBpZiAoYWN0aXZlQXR0cmlic1tpXSAmJiAhYXR0cmlic1tpXS5tRW5hYmxl
ZCkKKyAgICAgICAgQnVmZmVyICpidWZmZXIgPSBhdHRyaWJzW2ldLm1Cb3VuZEJ1ZmZlci5nZXQo
KTsKKworICAgICAgICBpZiAodHJhbnNsYXRlZFtpXS5hY3RpdmUgJiYgYXR0cmlic1tpXS5tQXJy
YXlFbmFibGVkICYmIChidWZmZXIgfHwgYXR0cmlic1tpXS5tUG9pbnRlcikpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHVzZXNDdXJyZW50VmFsdWVzID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgU3RhdGljVmVydGV4QnVmZmVyICpzdGF0aWNCdWZmZXIgPSBidWZmZXIg
PyBidWZmZXItPmdldFZlcnRleEJ1ZmZlcigpIDogTlVMTDsKKworICAgICAgICAgICAgaWYgKHN0
YXRpY0J1ZmZlciAmJiBzdGF0aWNCdWZmZXItPnNpemUoKSA9PSAwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGludCB0b3RhbENvdW50ID0gYnVmZmVyLT5zaXplKCkgLyBhdHRyaWJz
W2ldLnN0cmlkZSgpOworICAgICAgICAgICAgICAgIHN0YXRpY0J1ZmZlci0+YWRkUmVxdWlyZWRT
cGFjZShzcGFjZVJlcXVpcmVkKGF0dHJpYnNbaV0sIHRvdGFsQ291bnQpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCFzdGF0aWNCdWZmZXIgfHwgc3RhdGljQnVmZmVyLT5s
b29rdXBBdHRyaWJ1dGUoYXR0cmlic1tpXSkgPT0gLTEpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgaWYgKG1TdHJlYW1pbmdCdWZmZXIpCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBtU3RyZWFtaW5nQnVmZmVyLT5hZGRSZXF1aXJlZFNwYWNlKHNwYWNlUmVx
dWlyZWQoYXR0cmlic1tpXSwgY291bnQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBIYW5kbGUgdGhlIGlkZW50aXR5LW1hcHBl
ZCBhdHRyaWJ1dGVzLgotICAgIC8vIFByb2Nlc3MgYXJyYXkgYXR0cmlidXRlcy4KLQotICAgIHN0
ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UgPSAwOwotCisgICAgLy8gSW52YWxpZGF0ZSBzdGF0aWMg
YnVmZmVycyBpZiB0aGUgYXR0cmlidXRlIGZvcm1hdHMgbm8gbG9uZ2VyIG1hdGNoCiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7Ci0gICAgICAg
IGlmIChhY3RpdmVBdHRyaWJzW2ldICYmIGF0dHJpYnNbaV0ubUVuYWJsZWQpCisgICAgICAgIEJ1
ZmZlciAqYnVmZmVyID0gYXR0cmlic1tpXS5tQm91bmRCdWZmZXIuZ2V0KCk7CisKKyAgICAgICAg
aWYgKHRyYW5zbGF0ZWRbaV0uYWN0aXZlICYmIGF0dHJpYnNbaV0ubUFycmF5RW5hYmxlZCAmJiBi
dWZmZXIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJlcXVpcmVkU3BhY2UgKz0gc3BhY2VSZXF1
aXJlZChhdHRyaWJzW2ldLCBjb3VudCk7CisgICAgICAgICAgICBTdGF0aWNWZXJ0ZXhCdWZmZXIg
KnN0YXRpY0J1ZmZlciA9IGJ1ZmZlci0+Z2V0VmVydGV4QnVmZmVyKCk7CisKKyAgICAgICAgICAg
IGlmIChzdGF0aWNCdWZmZXIgJiYgc3RhdGljQnVmZmVyLT5zaXplKCkgIT0gMCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBib29sIG1hdGNoaW5nQXR0cmlidXRlcyA9IHRydWU7CisK
KyAgICAgICAgICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IE1BWF9WRVJURVhfQVRUUklCUzsg
aisrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0
ZWRbal0uYWN0aXZlICYmIGF0dHJpYnNbal0ubUFycmF5RW5hYmxlZCAmJiBhdHRyaWJzW2pdLm1C
b3VuZEJ1ZmZlci5nZXQoKSA9PSBidWZmZXIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChzdGF0aWNCdWZmZXItPmxvb2t1cEF0dHJpYnV0ZShhdHRy
aWJzW2pdKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRjaGluZ0F0dHJpYnV0ZXMgPSBmYWxzZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICgh
bWF0Y2hpbmdBdHRyaWJ1dGVzICYmIG1TdHJlYW1pbmdCdWZmZXIpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBtU3RyZWFtaW5nQnVmZmVyLT5hZGRSZXF1aXJlZFNwYWNl
Rm9yKHN0YXRpY0J1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+aW52YWxpZGF0
ZVN0YXRpY0RhdGEoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAocmVxdWlyZWRTcGFjZSA+IG1TdHJlYW1CdWZmZXItPnNpemUo
KSkKKyAgICAvLyBSZXNlcnZlIHRoZSByZXF1aXJlZCBzcGFjZSBwZXIgdXNlZCBidWZmZXIKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAg
ICAgICAgc3RkOjpzaXplX3QgbmV3U2l6ZSA9IHN0ZDo6bWF4KHJlcXVpcmVkU3BhY2UsIDMgKiBt
U3RyZWFtQnVmZmVyLT5zaXplKCkgLyAyKTsgLy8gMS41IHggbVN0cmVhbUJ1ZmZlci0+c2l6ZSgp
IGlzIGFyYml0cmFyeSBhbmQgc2hvdWxkIGJlIGNoZWNrZWQgdG8gc2VlIHdlIGRvbid0IGhhdmUg
dG9vIG1hbnkgcmVhbGxvY2F0aW9ucy4KKyAgICAgICAgQnVmZmVyICpidWZmZXIgPSBhdHRyaWJz
W2ldLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKIAotICAgICAgICBUcmFuc2xhdGVkVmVydGV4QnVmZmVy
ICpuZXdTdHJlYW1CdWZmZXIgPSBtQmFja2VuZC0+Y3JlYXRlVmVydGV4QnVmZmVyKG5ld1NpemUp
OworICAgICAgICBpZiAodHJhbnNsYXRlZFtpXS5hY3RpdmUgJiYgYXR0cmlic1tpXS5tQXJyYXlF
bmFibGVkICYmIChidWZmZXIgfHwgYXR0cmlic1tpXS5tUG9pbnRlcikpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFycmF5VmVydGV4QnVmZmVyICpzdGF0aWNCdWZmZXIgPSBidWZmZXIgPyBidWZm
ZXItPmdldFZlcnRleEJ1ZmZlcigpIDogTlVMTDsKKyAgICAgICAgICAgIEFycmF5VmVydGV4QnVm
ZmVyICp2ZXJ0ZXhCdWZmZXIgPSBzdGF0aWNCdWZmZXIgPyBzdGF0aWNCdWZmZXIgOiBtU3RyZWFt
aW5nQnVmZmVyOwogCi0gICAgICAgIGRlbGV0ZSBtU3RyZWFtQnVmZmVyOwotICAgICAgICBtU3Ry
ZWFtQnVmZmVyID0gbmV3U3RyZWFtQnVmZmVyOworICAgICAgICAgICAgaWYgKHZlcnRleEJ1ZmZl
cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXItPnJlc2VydmVS
ZXF1aXJlZFNwYWNlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKLSAgICBt
U3RyZWFtQnVmZmVyLT5yZXNlcnZlU3BhY2UocmVxdWlyZWRTcGFjZSk7Ci0KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIC8vIFBlcmZvcm0g
dGhlIHZlcnRleCBkYXRhIHRyYW5zbGF0aW9ucworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFY
X1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAgICAgewotICAgICAgICBpZiAoYWN0aXZlQXR0cmlic1tp
XSAmJiBhdHRyaWJzW2ldLm1FbmFibGVkKQorICAgICAgICBpZiAodHJhbnNsYXRlZFtpXS5hY3Rp
dmUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIEZvcm1hdENvbnZlcnRlciBmb3JtYXRDb252ZXJ0
ZXIgPSBtQmFja2VuZC0+Z2V0Rm9ybWF0Q29udmVydGVyKGF0dHJpYnNbaV0ubVR5cGUsIGF0dHJp
YnNbaV0ubVNpemUsIGF0dHJpYnNbaV0ubU5vcm1hbGl6ZWQpOworICAgICAgICAgICAgQnVmZmVy
ICpidWZmZXIgPSBhdHRyaWJzW2ldLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKIAotICAgICAgICAgICAg
dHJhbnNsYXRlZFtpXS5ub25BcnJheSA9IGZhbHNlOwotICAgICAgICAgICAgdHJhbnNsYXRlZFtp
XS50eXBlID0gYXR0cmlic1tpXS5tVHlwZTsKLSAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc2l6
ZSA9IGF0dHJpYnNbaV0ubVNpemU7Ci0gICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm5vcm1hbGl6
ZWQgPSBhdHRyaWJzW2ldLm1Ob3JtYWxpemVkOwotICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5z
dHJpZGUgPSBmb3JtYXRDb252ZXJ0ZXIub3V0cHV0VmVydGV4U2l6ZTsKLSAgICAgICAgICAgIHRy
YW5zbGF0ZWRbaV0uYnVmZmVyID0gbVN0cmVhbUJ1ZmZlcjsKKyAgICAgICAgICAgIGlmIChhdHRy
aWJzW2ldLm1BcnJheUVuYWJsZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYg
KCFidWZmZXIgJiYgYXR0cmlic1tpXS5tUG9pbnRlciA9PSBOVUxMKQorICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhcHBsaWNhdGlvbiBlcnJvciB0
aGF0IHdvdWxkIG5vcm1hbGx5IHJlc3VsdCBpbiBhIGNyYXNoLCBidXQgd2UgY2F0Y2ggaXQgYW5k
IHJldHVybiBhbiBlcnJvcgorICAgICAgICAgICAgICAgICAgICBFUlIoIkFuIGVuYWJsZWQgdmVy
dGV4IGFycmF5IGhhcyBubyBidWZmZXIgYW5kIG5vIHBvaW50ZXIuIik7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKKyAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIHNpemVfdCBpbnB1dFN0cmlkZSA9IGludGVycHJldEdsU3RyaWRlKGF0dHJp
YnNbaV0pOwotICAgICAgICAgICAgc2l6ZV90IGVsZW1lbnRTaXplID0gdHlwZVNpemUoYXR0cmli
c1tpXS5tVHlwZSkgKiBhdHRyaWJzW2ldLm1TaXplOworICAgICAgICAgICAgICAgIGNvbnN0IEZv
cm1hdENvbnZlcnRlciAmY29udmVydGVyID0gZm9ybWF0Q29udmVydGVyKGF0dHJpYnNbaV0pOwog
Ci0gICAgICAgICAgICB2b2lkICpvdXRwdXQgPSBtU3RyZWFtQnVmZmVyLT5tYXAoc3BhY2VSZXF1
aXJlZChhdHRyaWJzW2ldLCBjb3VudCksICZ0cmFuc2xhdGVkW2ldLm9mZnNldCk7CisgICAgICAg
ICAgICAgICAgU3RhdGljVmVydGV4QnVmZmVyICpzdGF0aWNCdWZmZXIgPSBidWZmZXIgPyBidWZm
ZXItPmdldFZlcnRleEJ1ZmZlcigpIDogTlVMTDsKKyAgICAgICAgICAgICAgICBBcnJheVZlcnRl
eEJ1ZmZlciAqdmVydGV4QnVmZmVyID0gc3RhdGljQnVmZmVyID8gc3RhdGljQnVmZmVyIDogc3Rh
dGljX2Nhc3Q8QXJyYXlWZXJ0ZXhCdWZmZXIqPihtU3RyZWFtaW5nQnVmZmVyKTsKIAotICAgICAg
ICAgICAgY29uc3Qgdm9pZCAqaW5wdXQ7Ci0gICAgICAgICAgICBpZiAoYXR0cmlic1tpXS5tQm91
bmRCdWZmZXIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQnVmZmVyICpidWZmZXIg
PSBtQ29udGV4dC0+Z2V0QnVmZmVyKGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVyKTsKKyAgICAgICAg
ICAgICAgICBVSU5UIHN0cmVhbU9mZnNldCA9IC0xOwogCi0gICAgICAgICAgICAgICAgc2l6ZV90
IG9mZnNldCA9IHJlaW50ZXJwcmV0X2Nhc3Q8c2l6ZV90PihhdHRyaWJzW2ldLm1Qb2ludGVyKTsK
KyAgICAgICAgICAgICAgICBpZiAoc3RhdGljQnVmZmVyKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3RyZWFtT2Zmc2V0ID0gc3RhdGljQnVmZmVyLT5sb29rdXBBdHRy
aWJ1dGUoYXR0cmlic1tpXSk7CiAKLSAgICAgICAgICAgICAgICAvLyBCZWZvcmUgd2UgY2FsY3Vs
YXRlIHRoZSByZXF1aXJlZCBzaXplIGJlbG93LCBtYWtlIHN1cmUgaXQgY2FuIGJlIGNvbXB1dGVk
IHdpdGhvdXQgaW50ZWdlciBvdmVyZmxvdy4KLSAgICAgICAgICAgICAgICBpZiAoc3RkOjpudW1l
cmljX2xpbWl0czxzdGQ6OnNpemVfdD46Om1heCgpIC0gc3RhcnQgPCBzdGF0aWNfY2FzdDxzdGQ6
OnNpemVfdD4oY291bnQpCi0gICAgICAgICAgICAgICAgICAgIHx8IHN0ZDo6bnVtZXJpY19saW1p
dHM8c3RkOjpzaXplX3Q+OjptYXgoKSAvIGlucHV0U3RyaWRlIDwgc3RhdGljX2Nhc3Q8c3RkOjpz
aXplX3Q+KHN0YXJ0ICsgY291bnQgLSAxKSAvLyBpdCdzIGEgcHJlcmVxdWlzaXRlIHRoYXQgY291
bnQgPj0gMSwgc28gc3RhcnQrY291bnQtMSA+PSAwLgotICAgICAgICAgICAgICAgICAgICB8fCBz
dGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6c2l6ZV90Pjo6bWF4KCkgLSBvZmZzZXQgPCBpbnB1dFN0
cmlkZSAqIChzdGFydCArIGNvdW50IC0gMSkKLSAgICAgICAgICAgICAgICAgICAgfHwgc3RkOjpu
dW1lcmljX2xpbWl0czxzdGQ6OnNpemVfdD46Om1heCgpIC0gZWxlbWVudFNpemUgPCBvZmZzZXQg
KyBpbnB1dFN0cmlkZSAqIChzdGFydCArIGNvdW50IC0gMSkgKyBlbGVtZW50U2l6ZSkKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHN0cmVhbU9mZnNldCA9PSAtMSkKKyAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgZW50aXJlIGJ1ZmZl
cgorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRvdGFsQ291bnQgPSBidWZmZXItPnNpemUo
KSAvIGF0dHJpYnNbaV0uc3RyaWRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3Rh
cnRJbmRleCA9IGF0dHJpYnNbaV0ubU9mZnNldCAvIGF0dHJpYnNbaV0uc3RyaWRlKCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9IHdyaXRlQXR0cmlidXRlRGF0YShz
dGF0aWNCdWZmZXIsIC1zdGFydEluZGV4LCB0b3RhbENvdW50LCBhdHRyaWJzW2ldKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW1PZmZzZXQg
IT0gLTEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
cmVhbU9mZnNldCArPSAoc3RhcnQgKyBhdHRyaWJzW2ldLm1PZmZzZXQgLyBhdHRyaWJzW2ldLnN0
cmlkZSgpKSAqIGNvbnZlcnRlci5vdXRwdXRFbGVtZW50U2l6ZTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgICAgICBtU3RyZWFtQnVmZmVyLT51bm1hcCgpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgICAg
ICAgICAgICAgIHN0cmVhbU9mZnNldCA9IHdyaXRlQXR0cmlidXRlRGF0YShtU3RyZWFtaW5nQnVm
ZmVyLCBzdGFydCwgY291bnQsIGF0dHJpYnNbaV0pOwogICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIGlmIChvZmZzZXQgKyBpbnB1dFN0cmlkZSAqIChzdGFydCArIGNvdW50IC0g
MSkgKyBlbGVtZW50U2l6ZSA+IGJ1ZmZlci0+c2l6ZSgpKQorICAgICAgICAgICAgICAgIGlmIChz
dHJlYW1PZmZzZXQgPT0gLTEpCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBtU3RyZWFtQnVmZmVyLT51bm1hcCgpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xf
SU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBHTF9PVVRfT0Zf
TUVNT1JZOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlucHV0ID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgY2hhcio+KGJ1ZmZlci0+ZGF0YSgpKSArIG9mZnNldDsKKyAgICAgICAg
ICAgICAgICB0cmFuc2xhdGVkW2ldLnZlcnRleEJ1ZmZlciA9IHZlcnRleEJ1ZmZlci0+Z2V0QnVm
ZmVyKCk7CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS50eXBlID0gY29udmVydGVyLmQz
ZERlY2xUeXBlOworICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRlID0gY29udmVy
dGVyLm91dHB1dEVsZW1lbnRTaXplOworICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0ub2Zm
c2V0ID0gc3RyZWFtT2Zmc2V0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGlucHV0ID0gYXR0cmlic1tpXS5tUG9pbnRlcjsK
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobURpcnR5Q3VycmVudFZhbHVlW2ld
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG1DdXJyZW50
VmFsdWVCdWZmZXJbaV07CisgICAgICAgICAgICAgICAgICAgIG1DdXJyZW50VmFsdWVCdWZmZXJb
aV0gPSBuZXcgQ29uc3RhbnRWZXJ0ZXhCdWZmZXIobURldmljZSwgYXR0cmlic1tpXS5tQ3VycmVu
dFZhbHVlWzBdLCBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMV0sIGF0dHJpYnNbaV0ubUN1cnJl
bnRWYWx1ZVsyXSwgYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzNdKTsKKyAgICAgICAgICAgICAg
ICAgICAgbURpcnR5Q3VycmVudFZhbHVlW2ldID0gZmFsc2U7CisgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihpbnB1dCkgKyBp
bnB1dFN0cmlkZSAqIHN0YXJ0OworICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0udmVydGV4
QnVmZmVyID0gbUN1cnJlbnRWYWx1ZUJ1ZmZlcltpXS0+Z2V0QnVmZmVyKCk7CiAKLSAgICAgICAg
ICAgIGlmIChmb3JtYXRDb252ZXJ0ZXIuaWRlbnRpdHkgJiYgaW5wdXRTdHJpZGUgPT0gZWxlbWVu
dFNpemUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5w
dXQsIGNvdW50ICogaW5wdXRTdHJpZGUpOworICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0u
dHlwZSA9IEQzRERFQ0xUWVBFX0ZMT0FUNDsKKyAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ld
LnN0cmlkZSA9IDA7CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5vZmZzZXQgPSAwOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQorICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIEdMX05PX0VSUk9SOworfQorCitzdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6
c3BhY2VSZXF1aXJlZChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgc3RkOjpzaXplX3Qg
Y291bnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLm91dHB1
dEVsZW1lbnRTaXplICogY291bnQ7Cit9CisKKy8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVy
dGV4IGF0dHJpYiB0eXBlIHRvIEQzRCBkZWNsIHR5cGU6CisvLworLy8gQllURSAgICAgICAgICAg
ICAgICAgU0hPUlQgKENhc3QpCisvLyBCWVRFLW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFs
aXplKSAoY2FuJ3QgYmUgZXhhY3RseSByZXByZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQorLy8gVU5T
SUdORURfQllURSAgICAgICAgVUJZVEU0IChJZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCisvLyBV
TlNJR05FRF9CWVRFLW5vcm0gICBVQllURTROIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6
ZSkKKy8vIFNIT1JUICAgICAgICAgICAgICAgIFNIT1JUIChJZGVudGl0eSkKKy8vIFNIT1JULW5v
cm0gICAgICAgICAgIFNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQor
Ly8gVU5TSUdORURfU0hPUlQgICAgICAgRkxPQVQgKENhc3QpCisvLyBVTlNJR05FRF9TSE9SVC1u
b3JtICBVU0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCisvLyBGSVhF
RCAobm90IGluIFdlYkdMKSBGTE9BVCAoRml4ZWRUb0Zsb2F0KQorLy8gRkxPQVQgICAgICAgICAg
ICAgICAgRkxPQVQgKElkZW50aXR5KQorCisvLyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUg
KGFzIEdMZW51bSkgdG8gdGhlIEMgdHlwZWRlZi4gCit0ZW1wbGF0ZSA8R0xlbnVtIEdMVHlwZT4g
c3RydWN0IEdMVG9DVHlwZSB7IH07CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xf
QllURT4geyB0eXBlZGVmIEdMYnl0ZSB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9D
VHlwZTxHTF9VTlNJR05FRF9CWVRFPiB7IHR5cGVkZWYgR0x1Ynl0ZSB0eXBlOyB9OwordGVtcGxh
dGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9TSE9SVD4geyB0eXBlZGVmIEdMc2hvcnQgdHlwZTsg
fTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfVU5TSUdORURfU0hPUlQ+IHsgdHlw
ZWRlZiBHTHVzaG9ydCB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9G
SVhFRD4geyB0eXBlZGVmIEdMdWludCB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9D
VHlwZTxHTF9GTE9BVD4geyB0eXBlZGVmIEdMZmxvYXQgdHlwZTsgfTsKKworLy8gVGhpcyBkaWZm
ZXJzIGZyb20gRDNEREVDTFRZUEUgaW4gdGhhdCBpdCBpcyB1bnNpemVkLiAoU2l6ZSBleHBhbnNp
b24gaXMgYXBwbGllZCBsYXN0LikKK2VudW0gRDNEVmVydGV4VHlwZQoreworICAgIEQzRFZUX0ZM
T0FULAorICAgIEQzRFZUX1NIT1JULAorICAgIEQzRFZUX1NIT1JUX05PUk0sCisgICAgRDNEVlRf
VUJZVEUsCisgICAgRDNEVlRfVUJZVEVfTk9STSwKKyAgICBEM0RWVF9VU0hPUlRfTk9STQorfTsK
KworLy8gRDNEVG9DVHlwZSBtYXBzIGZyb20gRDNEIHZlcnRleCB0eXBlIChhcyBlbnVtIEQzRFZl
cnRleFR5cGUpIHRvIHRoZSBjb3JyZXNwb25kaW5nIEMgdHlwZS4KK3RlbXBsYXRlIDx1bnNpZ25l
ZCBpbnQgRDNEVHlwZT4gc3RydWN0IEQzRFRvQ1R5cGUgeyB9OworCit0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgRDNEVG9DVHlwZTxEM0RWVF9GTE9BVD4geyB0eXBlZGVmIGZsb2F0IHR5cGU7IH07Cit0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9SVD4geyB0eXBlZGVmIHNob3J0IHR5
cGU7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9SVF9OT1JNPiB7
IHR5cGVkZWYgc2hvcnQgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQz
RFZUX1VCWVRFPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9OwordGVtcGxhdGUgPD4g
c3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEVfTk9STT4geyB0eXBlZGVmIHVuc2lnbmVkIGNo
YXIgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VTSE9SVF9O
T1JNPiB7IHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdHlwZTsgfTsKKworLy8gRW5jb2RlIHRoZSB0
eXBlL3NpemUgY29tYmluYXRpb25zIHRoYXQgRDNEIHBlcm1pdHMuIEZvciBlYWNoIHR5cGUvc2l6
ZSBpdCBleHBhbmRzIHRvIGEgd2lkZW5lciB0aGF0IHdpbGwgcHJvdmlkZSB0aGUgYXBwcm9wcmlh
dGUgZmluYWwgc2l6ZS4KK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgdHlwZSwgaW50IHNpemU+Citz
dHJ1Y3QgV2lkZW5SdWxlCit7Cit9OworCit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRl
blJ1bGU8RDNEVlRfRkxPQVQsIHNpemU+ICAgICAgICAgIDogZ2w6Ok5vV2lkZW48c2l6ZT4geyB9
OwordGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JULCBzaXpl
PiAgICAgICAgICA6IGdsOjpXaWRlblRvRXZlbjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNp
emU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfU0hPUlRfTk9STSwgc2l6ZT4gICAgIDogZ2w6Oldp
ZGVuVG9FdmVuPHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVs
ZTxEM0RWVF9VQllURSwgc2l6ZT4gICAgICAgICAgOiBnbDo6V2lkZW5Ub0ZvdXI8c2l6ZT4geyB9
OwordGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFX05PUk0s
IHNpemU+ICAgICA6IGdsOjpXaWRlblRvRm91cjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNp
emU+IHN0cnVjdCBXaWRlblJ1bGU8RDNEVlRfVVNIT1JUX05PUk0sIHNpemU+ICAgIDogZ2w6Oldp
ZGVuVG9FdmVuPHNpemU+IHsgfTsKKworLy8gVmVydGV4VHlwZUZsYWdzIGVuY29kZXMgdGhlIEQz
RENBUFM5OjpEZWNsVHlwZSBmbGFnIGFuZCB2ZXJ0ZXggZGVjbGFyYXRpb24gZmxhZyBmb3IgZWFj
aCBEM0QgdmVydGV4IHR5cGUgJiBzaXplIGNvbWJpbmF0aW9uLgordGVtcGxhdGUgPHVuc2lnbmVk
IGludCBkM2R0eXBlLCBpbnQgc2l6ZT4KK3N0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3MKK3sKK307CisK
K3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgY2FwZmxhZywgdW5zaWduZWQgaW50IGRlY2xmbGFnPgor
c3RydWN0IFZlcnRleFR5cGVGbGFnc0hlbHBlcgoreworICAgIGVudW0geyBjYXBmbGFnID0gY2Fw
ZmxhZyB9OworICAgIGVudW0geyBkZWNsZmxhZyA9IGRlY2xmbGFnIH07Cit9OworCit0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAxPiA6IFZlcnRleFR5cGVG
bGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDE+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVj
dCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVy
PDAsIEQzRERFQ0xUWVBFX0ZMT0FUMj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5
cGVGbGFnczxEM0RWVF9GTE9BVCwgMz4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVD
TFRZUEVfRkxPQVQzPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQz
RFZUX0ZMT0FULCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9B
VDQ+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQs
IDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUMj4geyB9Owor
dGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgND4gOiBWZXJ0
ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQ0PiB7IH07Cit0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDI+IDogVmVydGV4VHlw
ZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9SVDJOLCBEM0RERUNMVFlQRV9TSE9SVDJOPiB7IH07
Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDQ+
IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9SVDROLCBEM0RERUNMVFlQRV9T
SE9SVDROPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VC
WVRFLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0LCBEM0RERUNM
VFlQRV9VQllURTQ+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNE
VlRfVUJZVEVfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRF
NE4sIEQzRERFQ0xUWVBFX1VCWVRFNE4+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhU
eXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQz
RERUQ0FQU19VU0hPUlQyTiwgRDNEREVDTFRZUEVfVVNIT1JUMk4+IHsgfTsKK3RlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlw
ZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VU0hPUlQ0TiwgRDNEREVDTFRZUEVfVVNIT1JUNE4+IHsg
fTsKKworCisvLyBWZXJ0ZXhUeXBlTWFwcGluZyBtYXBzIEdMIHR5cGUgJiBub3JtYWxpemVkIGZs
YWcgdG8gcHJlZmVycmVkIGFuZCBmYWxsYmFjayBEM0QgdmVydGV4IHR5cGVzIChhcyBEM0RWZXJ0
ZXhUeXBlIGVudW1zKS4KK3RlbXBsYXRlIDxHTGVudW0gR0x0eXBlLCBib29sIG5vcm1hbGl6ZWQ+
CitzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmcKK3sKK307CisKK3RlbXBsYXRlIDxEM0RWZXJ0ZXhU
eXBlIFByZWZlcnJlZCwgRDNEVmVydGV4VHlwZSBGYWxsYmFjayA9IFByZWZlcnJlZD4KK3N0cnVj
dCBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2UKK3sKKyAgICBlbnVtIHsgcHJlZmVycmVkID0gUHJlZmVy
cmVkIH07CisgICAgZW51bSB7IGZhbGxiYWNrID0gRmFsbGJhY2sgfTsKK307CisKK3RlbXBsYXRl
IDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAg
ICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAg
ICAgICAgICAgICAgICAgICAgLy8gQ2FzdAordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVN
YXBwaW5nPEdMX0JZVEUsIHRydWU+ICAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlw
ZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBO
b3JtYWxpemUKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05F
RF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RW
VF9VQllURSwgRDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgLy8gSWRlbnRpdHksIENhc3QKK3Rl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCB0cnVl
PiAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURV9OT1JN
LCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8gSWRlbnRpdHksIE5vcm1hbGl6ZQordGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCBmYWxzZT4gICAgICAgICAgICAg
ICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZGVudGl0eQordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5
cGVNYXBwaW5nPEdMX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4
VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAv
LyBDYXN0LCBOb3JtYWxpemUKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxH
TF9VTlNJR05FRF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5n
QmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAordGVt
cGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCB0cnVl
PiAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VTSE9SVF9OT1JN
LCBEM0RWVF9GTE9BVD4geyB9OyAgICAvLyBDYXN0LCBOb3JtYWxpemUKK3RlbXBsYXRlIDxib29s
IG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9GSVhFRCwgbm9ybWFsaXpl
ZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAg
ICAgICAgICAgICAgLy8gRml4ZWRUb0Zsb2F0Cit0ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBz
dHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRkxPQVQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhU
eXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8v
IElkZW50aXR5CisKKworLy8gR2l2ZW4gYSBHTCB0eXBlICYgbm9ybSBmbGFnIGFuZCBhIEQzRCB0
eXBlLCBDb252ZXJzaW9uUnVsZSBwcm92aWRlcyB0aGUgdHlwZSBjb252ZXJzaW9uIHJ1bGUgKENh
c3QsIE5vcm1hbGl6ZSwgSWRlbnRpdHksIEZpeGVkVG9GbG9hdCkuCisvLyBUaGUgY29udmVyc2lv
biBydWxlcyB0aGVtc2VsdmVzIGFyZSBkZWZpbmVkIGluIHZlcnRleGNvbnZlcnNpb24uaC4KKwor
Ly8gQWxtb3N0IGFsbCBjYXNlcyBhcmUgY292ZXJlZCBieSBDYXN0IChpbmNsdWRpbmcgdGhvc2Ug
dGhhdCBhcmUgYWN0dWFsbHkgSWRlbnRpdHkgc2luY2UgQ2FzdDxULFQ+IGtub3dzIGl0J3MgYW4g
aWRlbnRpdHkgbWFwcGluZykuCit0ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1h
bGl6ZWQsIHVuc2lnbmVkIGludCB0b1R5cGU+CitzdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBnbDo6
Q2FzdDx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEM0RUb0NU
eXBlPHRvVHlwZT46OnR5cGU+Cit7Cit9OworCisvLyBBbGwgY29udmVyc2lvbnMgZnJvbSBub3Jt
YWxpemVkIHR5cGVzIHRvIGZsb2F0IHVzZSB0aGUgTm9ybWFsaXplIG9wZXJhdG9yLgordGVtcGxh
dGUgPEdMZW51bSBmcm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVl
LCBEM0RWVF9GTE9BVD4gOiBnbDo6Tm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlw
ZT46OnR5cGU+IHsgfTsKKworLy8gVXNlIGEgZnVsbCBzcGVjaWFsaXNhdGlvbiBmb3IgdGhpcyBz
byB0aGF0IGl0IHByZWZlcmVudGlhbGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9y
bWFsaXplLXRvLWZsb2F0IHJ1bGVzLgordGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxl
PEdMX0ZJWEVELCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwg
MTY+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFs
c2UsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OworCisv
LyBBIDItc3RhZ2UgY29uc3RydWN0aW9uIGlzIHVzZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMg
YmVjYXVzZSBmbG9hdCBtdXN0IHVzZSBTaW1wbGVEZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkKKy8v
IHdoZXRoZXIgaXQgaXMgbm9ybWFsaXplZCBvciBub3QuCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9v
bCBub3JtYWxpemVkPgorc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTIKK3sKK307CisK
K3RlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCB0
cnVlPiAgOiBnbDo6Tm9ybWFsaXplZERlZmF1bHRWYWx1ZXM8VD4geyB9OwordGVtcGxhdGUgPGNs
YXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIGZhbHNlPiA6IGdsOjpT
aW1wbGVEZWZhdWx0VmFsdWVzPFQ+IHsgfTsKKworLy8gV29yayBvdXQgdGhlIGRlZmF1bHQgdmFs
dWUgcnVsZSBmb3IgYSBEM0QgdHlwZSAoZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZCAKK3Rl
bXBsYXRlIDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+CitzdHJ1Y3QgRGVmYXVsdFZlcnRleFZh
bHVlcyA6IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgbm9ybWFsaXplZD4KK3sKK307CisK
K3RlbXBsYXRlIDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZs
b2F0LCBub3JtYWxpemVkPiA6IGdsOjpTaW1wbGVEZWZhdWx0VmFsdWVzPGZsb2F0PiB7IH07CisK
Ky8vIFBvbGljeSBydWxlcyBmb3IgdXNlIHdpdGggQ29udmVydGVyLCB0byBjaG9vc2Ugd2hldGhl
ciB0byB1c2UgdGhlIHByZWZlcnJlZCBvciBmYWxsYmFjayBjb252ZXJzaW9uLgorLy8gVGhlIGZh
bGxiYWNrIGNvbnZlcnNpb24gcHJvZHVjZXMgYW4gb3V0cHV0IHRoYXQgYWxsIEQzRDkgZGV2aWNl
cyBtdXN0IHN1cHBvcnQuCit0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZVByZWZlcnJlZCB7
IGVudW0geyB0eXBlID0gVDo6cHJlZmVycmVkIH07IH07Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3Ry
dWN0IFVzZUZhbGxiYWNrIHsgZW51bSB7IHR5cGUgPSBUOjpmYWxsYmFjayB9OyB9OworCisvLyBD
b252ZXJ0ZXIgdGllcyBpdCBhbGwgdG9nZXRoZXIuIEdpdmVuIGFuIE9wZW5HTCB0eXBlL25vcm0v
c2l6ZSBhbmQgY2hvaWNlIG9mIHByZWZlcnJlZC9mYWxsYmFjayBjb252ZXJzaW9uLAorLy8gaXQg
cHJvdmlkZXMgYWxsIHRoZSBtZW1iZXJzIG9mIHRoZSBhcHByb3ByaWF0ZSBWZXJ0ZXhEYXRhQ29u
dmVydGVyLCB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlcyBmbGFnIGluIGNhcCBmbGFnCisvLyBhbmQg
dGhlIEQzRERFQ0xUWVBFIG1lbWJlciBuZWVkZWQgZm9yIHRoZSB2ZXJ0ZXggZGVjbGFyYXRpb24g
aW4gZGVjbGZsYWcuCit0ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQs
IGludCBzaXplLCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUHJlZmVyZW5jZVJ1bGU+CitzdHJ1
Y3QgQ29udmVydGVyCisgICAgOiBnbDo6VmVydGV4RGF0YUNvbnZlcnRlcjx0eXBlbmFtZSBHTFRv
Q1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lk
ZW5SdWxlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFs
aXplZD4gPjo6dHlwZSwgc2l6ZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252
ZXJzaW9uUnVsZTxmcm9tVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5v
cm1hbGl6ZWQ+ID46OnR5cGU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVs
dFZlcnRleFZhbHVlczx0eXBlbmFtZSBEM0RUb0NUeXBlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhU
eXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT46OnR5cGUsIG5vcm1hbGl6
ZWQgPiA+Cit7Citwcml2YXRlOgorICAgIGVudW0geyBkM2R0eXBlID0gUHJlZmVyZW5jZVJ1bGU8
IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlIH07CisgICAg
ZW51bSB7IGQzZHNpemUgPSBXaWRlblJ1bGU8ZDNkdHlwZSwgc2l6ZT46OmZpbmFsV2lkdGggfTsK
KworcHVibGljOgorICAgIGVudW0geyBjYXBmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUs
IGQzZHNpemU+OjpjYXBmbGFnIH07CisgICAgZW51bSB7IGRlY2xmbGFnID0gVmVydGV4VHlwZUZs
YWdzPGQzZHR5cGUsIGQzZHNpemU+OjpkZWNsZmxhZyB9OworfTsKKworLy8gSW5pdGlhbGlzZSBh
IFRyYW5zbGF0aW9uSW5mbworI2RlZmluZSBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBw
cmVmZXJyZWQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwg
cHJlZmVycmVkPjo6aWRlbnRpdHksICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXplLCAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6
ZSwgcHJlZmVycmVkPjo6Y29udmVydEFycmF5LCAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBzdGF0aWNfY2FzdDxEM0RERUNMVFlQRT4oQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUs
IHByZWZlcnJlZD46OmRlY2xmbGFnKSAgXAorICAgIH0KKworI2RlZmluZSBUUkFOU0xBVElPTl9G
T1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgbm9ybSwgc2l6ZSkgICAgXAorICAgIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBD
b252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgVXNlUHJlZmVycmVkPjo6Y2FwZmxhZywgXAorICAg
ICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQpLCAgICAgICAg
XAorICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VGYWxsYmFjaykgICAg
ICAgICAgXAorICAgIH0KKworI2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEUodHlwZSkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7IFRSQU5TTEFUSU9OX0ZP
Ul9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05P
Uk1fU0laRSh0eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxz
ZSwgNCkgfSwgXAorICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBl
LCB0cnVlLCAxKSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDIp
LCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMyksIFRSQU5TTEFU
SU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCA0KSB9LCAgICAgXAorICAgIH0KKwor
Y29uc3QgVmVydGV4RGF0YU1hbmFnZXI6OlRyYW5zbGF0aW9uRGVzY3JpcHRpb24gVmVydGV4RGF0
YU1hbmFnZXI6Om1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBF
U11bMl1bNF0gPSAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9y
bWFsaXplZF1bc2l6ZS0xXQoreworICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwK
KyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfQllURSksCisgICAgVFJBTlNM
QVRJT05TX0ZPUl9UWVBFKEdMX1NIT1JUKSwKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xf
VU5TSUdORURfU0hPUlQpLAorICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9GSVhFRCksCisg
ICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX0ZMT0FUKQorfTsKKwordm9pZCBWZXJ0ZXhEYXRh
TWFuYWdlcjo6Y2hlY2tWZXJ0ZXhDYXBzKERXT1JEIGRlY2xUeXBlcykKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTOyBpKyspCisg
ICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IDI7IGorKykKKyAgICAg
ICAgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgayA9IDA7IGsgPCA0OyBrKyspCiAg
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9ybWF0Q29udmVydGVyLmNvbnZlcnRBcnJh
eShpbnB1dCwgaW5wdXRTdHJpZGUsIGNvdW50LCBvdXRwdXQpOworICAgICAgICAgICAgICAgIGlm
IChtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5
cGVzICYgbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnKSAhPSAwKQorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbUF0dHJpYnV0ZVR5cGVzW2ldW2pd
W2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLnByZWZlcnJlZENvbnZlcnNpb247
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIG1BdHRyaWJ1dGVUeXBlc1tpXVtqXVtrXSA9IG1Qb3Nz
aWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5mYWxsYmFja0NvbnZlcnNpb247CisgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCisvLyBUaGlzIGlz
IHVzZWQgdG8gaW5kZXggbUF0dHJpYnV0ZVR5cGVzIGFuZCBtUG9zc2libGVUcmFuc2xhdGlvbnMu
Cit1bnNpZ25lZCBpbnQgVmVydGV4RGF0YU1hbmFnZXI6OnR5cGVJbmRleChHTGVudW0gdHlwZSkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9CWVRFOiBy
ZXR1cm4gMDsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogcmV0dXJuIDE7CisgICAgICBj
YXNlIEdMX1NIT1JUOiByZXR1cm4gMjsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJl
dHVybiAzOworICAgICAgY2FzZSBHTF9GSVhFRDogcmV0dXJuIDQ7CisgICAgICBjYXNlIEdMX0ZM
T0FUOiByZXR1cm4gNTsKIAotICAgICAgICAgICAgbVN0cmVhbUJ1ZmZlci0+dW5tYXAoKTsKKyAg
ICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiA1OworICAgIH0KK30KKwordm9pZCBW
ZXJ0ZXhEYXRhTWFuYWdlcjo6c2V0dXBBdHRyaWJ1dGVzKGNvbnN0IFRyYW5zbGF0ZWRBdHRyaWJ1
dGUgKmF0dHJpYnV0ZXMpCit7CisgICAgRDNEVkVSVEVYRUxFTUVOVDkgZWxlbWVudHNbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKKyAgICBEM0RWRVJURVhFTEVNRU5UOSAqZWxlbWVudCA9ICZlbGVtZW50
c1swXTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKysp
CisgICAgeworICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5hY3RpdmUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZShpLCBhdHRyaWJ1dGVzW2ldLnZlcnRl
eEJ1ZmZlciwgYXR0cmlidXRlc1tpXS5vZmZzZXQsIGF0dHJpYnV0ZXNbaV0uc3RyaWRlKTsKKwor
ICAgICAgICAgICAgZWxlbWVudC0+U3RyZWFtID0gaTsKKyAgICAgICAgICAgIGVsZW1lbnQtPk9m
ZnNldCA9IDA7CisgICAgICAgICAgICBlbGVtZW50LT5UeXBlID0gYXR0cmlidXRlc1tpXS50eXBl
OworICAgICAgICAgICAgZWxlbWVudC0+TWV0aG9kID0gRDNEREVDTE1FVEhPRF9ERUZBVUxUOwor
ICAgICAgICAgICAgZWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09PUkQ7CisgICAg
ICAgICAgICBlbGVtZW50LT5Vc2FnZUluZGV4ID0gYXR0cmlidXRlc1tpXS5zZW1hbnRpY0luZGV4
OworICAgICAgICAgICAgZWxlbWVudCsrOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHVz
ZXNDdXJyZW50VmFsdWVzKQorICAgIHN0YXRpYyBjb25zdCBEM0RWRVJURVhFTEVNRU5UOSBlbmQg
PSBEM0RERUNMX0VORCgpOworICAgICplbGVtZW50ID0gZW5kOworCisgICAgSURpcmVjdDNEVmVy
dGV4RGVjbGFyYXRpb245ICp2ZXJ0ZXhEZWNsYXJhdGlvbjsKKyAgICBtRGV2aWNlLT5DcmVhdGVW
ZXJ0ZXhEZWNsYXJhdGlvbihlbGVtZW50cywgJnZlcnRleERlY2xhcmF0aW9uKTsKKyAgICBtRGV2
aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbih2ZXJ0ZXhEZWNsYXJhdGlvbik7CisgICAgdmVydGV4
RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKK30KKworVmVydGV4QnVmZmVyOjpWZXJ0ZXhCdWZmZXIo
SURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBEV09SRCB1c2FnZUZs
YWdzKSA6IG1EZXZpY2UoZGV2aWNlKSwgbVZlcnRleEJ1ZmZlcihOVUxMKQoreworICAgIGlmIChz
aXplID4gMCkKICAgICB7Ci0gICAgICAgIHByb2Nlc3NOb25BcnJheUF0dHJpYnV0ZXMoYXR0cmli
cywgYWN0aXZlQXR0cmlicywgdHJhbnNsYXRlZCwgY291bnQpOworICAgICAgICBEM0RQT09MIHBv
b2wgPSBnZXREaXNwbGF5KCktPmdldEJ1ZmZlclBvb2wodXNhZ2VGbGFncyk7CisgICAgICAgIEhS
RVNVTFQgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIoc2l6ZSwgdXNhZ2VGbGFn
cywgMCwgcG9vbCwgJm1WZXJ0ZXhCdWZmZXIsIE5VTEwpOworICAgICAgICAKKyAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIk91dCBvZiBtZW1v
cnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7CisgICAg
ICAgIH0KICAgICB9Cit9CiAKLSAgICByZXR1cm4gR0xfTk9fRVJST1I7CitWZXJ0ZXhCdWZmZXI6
On5WZXJ0ZXhCdWZmZXIoKQoreworICAgIGlmIChtVmVydGV4QnVmZmVyKQorICAgIHsKKyAgICAg
ICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOworICAgIH0KIH0KIAotc3RkOjpzaXplX3QgVmVy
dGV4RGF0YU1hbmFnZXI6OnR5cGVTaXplKEdMZW51bSB0eXBlKSBjb25zdAordm9pZCBWZXJ0ZXhC
dWZmZXI6OnVubWFwKCkKIHsKLSAgICBzd2l0Y2ggKHR5cGUpCisgICAgaWYgKG1WZXJ0ZXhCdWZm
ZXIpCiAgICAgewotICAgICAgY2FzZSBHTF9CWVRFOiBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6IHJl
dHVybiBzaXplb2YoR0xieXRlKTsKLSAgICAgIGNhc2UgR0xfU0hPUlQ6IGNhc2UgR0xfVU5TSUdO
RURfU0hPUlQ6IHJldHVybiBzaXplb2YoR0xzaG9ydCk7Ci0gICAgICBjYXNlIEdMX0ZJWEVEOiBy
ZXR1cm4gc2l6ZW9mKEdMZml4ZWQpOwotICAgICAgY2FzZSBHTF9GTE9BVDogcmV0dXJuIHNpemVv
ZihHTGZsb2F0KTsKLSAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7IHJldHVybiBzaXplb2Yo
R0xmbG9hdCk7CisgICAgICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOwogICAgIH0KIH0KIAot
c3RkOjpzaXplX3QgVmVydGV4RGF0YU1hbmFnZXI6OmludGVycHJldEdsU3RyaWRlKGNvbnN0IEF0
dHJpYnV0ZVN0YXRlICZhdHRyaWIpIGNvbnN0CitJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICpWZXJ0
ZXhCdWZmZXI6OmdldEJ1ZmZlcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGF0dHJpYi5tU3RyaWRl
ID8gYXR0cmliLm1TdHJpZGUgOiB0eXBlU2l6ZShhdHRyaWIubVR5cGUpICogYXR0cmliLm1TaXpl
OworICAgIHJldHVybiBtVmVydGV4QnVmZmVyOwogfQogCi0vLyBSb3VuZCB1cCB4ICg+PTApIHRv
IHRoZSBuZXh0IG11bHRpcGxlIG9mIG11bHRpcGxlICg+MCkuCi0vLyAwIHJvdW5kcyB1cCB0byAw
Lgotc3RkOjpzaXplX3QgVmVydGV4RGF0YU1hbmFnZXI6OnJvdW5kVXAoc3RkOjpzaXplX3QgeCwg
c3RkOjpzaXplX3QgbXVsdGlwbGUpIGNvbnN0CitDb25zdGFudFZlcnRleEJ1ZmZlcjo6Q29uc3Rh
bnRWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB6LCBmbG9hdCB3KSA6IFZlcnRleEJ1ZmZlcihkZXZpY2UsIDQgKiBzaXplb2YoZmxv
YXQpLCBEM0RVU0FHRV9XUklURU9OTFkpCiB7Ci0gICAgQVNTRVJUKHggPj0gMCk7Ci0gICAgQVNT
RVJUKG11bHRpcGxlID4gMCk7CisgICAgdm9pZCAqYnVmZmVyID0gTlVMTDsKIAotICAgIHN0ZDo6
c2l6ZV90IHJlbWFpbmRlciA9IHggJSBtdWx0aXBsZTsKLSAgICBpZiAocmVtYWluZGVyICE9IDAp
CisgICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCiAgICAgewotICAgICAgICByZXR1cm4geCArIG11bHRp
cGxlIC0gcmVtYWluZGVyOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXIt
PkxvY2soMCwgMCwgJmJ1ZmZlciwgMCk7CisgICAgIAorICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiTG9jayBmYWlsZWQgd2l0aCBlcnJvciAw
eCUwOHgiLCByZXN1bHQpOworICAgICAgICB9CiAgICAgfQotICAgIGVsc2UKKworICAgIGlmIChi
dWZmZXIpCiAgICAgewotICAgICAgICByZXR1cm4geDsKKyAgICAgICAgZmxvYXQgKnZlY3RvciA9
IChmbG9hdCopYnVmZmVyOworCisgICAgICAgIHZlY3RvclswXSA9IHg7CisgICAgICAgIHZlY3Rv
clsxXSA9IHk7CisgICAgICAgIHZlY3RvclsyXSA9IHo7CisgICAgICAgIHZlY3RvclszXSA9IHc7
CisKKyAgICAgICAgbVZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7CiAgICAgfQogfQogCi1zdGQ6OnNp
emVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6c3BhY2VSZXF1aXJlZChjb25zdCBBdHRyaWJ1dGVTdGF0
ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBtYXhWZXJ0ZXgpIGNvbnN0CitDb25zdGFudFZlcnRleEJ1
ZmZlcjo6fkNvbnN0YW50VmVydGV4QnVmZmVyKCkKK3sKK30KKworQXJyYXlWZXJ0ZXhCdWZmZXI6
OkFycmF5VmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qg
c2l6ZSwgRFdPUkQgdXNhZ2VGbGFncykgOiBWZXJ0ZXhCdWZmZXIoZGV2aWNlLCBzaXplLCB1c2Fn
ZUZsYWdzKQoreworICAgIG1CdWZmZXJTaXplID0gc2l6ZTsKKyAgICBtV3JpdGVQb3NpdGlvbiA9
IDA7CisgICAgbVJlcXVpcmVkU3BhY2UgPSAwOworfQorCitBcnJheVZlcnRleEJ1ZmZlcjo6fkFy
cmF5VmVydGV4QnVmZmVyKCkKK3sKK30KKwordm9pZCBBcnJheVZlcnRleEJ1ZmZlcjo6YWRkUmVx
dWlyZWRTcGFjZShVSU5UIHJlcXVpcmVkU3BhY2UpCit7CisgICAgbVJlcXVpcmVkU3BhY2UgKz0g
cmVxdWlyZWRTcGFjZTsKK30KKwordm9pZCBBcnJheVZlcnRleEJ1ZmZlcjo6YWRkUmVxdWlyZWRT
cGFjZUZvcihBcnJheVZlcnRleEJ1ZmZlciAqYnVmZmVyKQoreworICAgIG1SZXF1aXJlZFNwYWNl
ICs9IGJ1ZmZlci0+bVJlcXVpcmVkU3BhY2U7Cit9CisKK1N0cmVhbWluZ1ZlcnRleEJ1ZmZlcjo6
U3RyZWFtaW5nVmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXpl
X3QgaW5pdGlhbFNpemUpIDogQXJyYXlWZXJ0ZXhCdWZmZXIoZGV2aWNlLCBpbml0aWFsU2l6ZSwg
RDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRFT05MWSkKIHsKLSAgICBzdGQ6OnNpemVf
dCBzaXplID0gbUJhY2tlbmQtPmdldEZvcm1hdENvbnZlcnRlcihhdHRyaWIubVR5cGUsIGF0dHJp
Yi5tU2l6ZSwgYXR0cmliLm1Ob3JtYWxpemVkKS5vdXRwdXRWZXJ0ZXhTaXplOwotICAgIHNpemUg
Kj0gbWF4VmVydGV4OworfQogCi0gICAgcmV0dXJuIHJvdW5kVXAoc2l6ZSwgNCAqIHNpemVvZihH
TGZsb2F0KSk7CitTdHJlYW1pbmdWZXJ0ZXhCdWZmZXI6On5TdHJlYW1pbmdWZXJ0ZXhCdWZmZXIo
KQorewogfQogCi12b2lkIFZlcnRleERhdGFNYW5hZ2VyOjpwcm9jZXNzTm9uQXJyYXlBdHRyaWJ1
dGVzKGNvbnN0IEF0dHJpYnV0ZVN0YXRlICphdHRyaWJzLCBjb25zdCBzdGQ6OmJpdHNldDxNQVhf
VkVSVEVYX0FUVFJJQlM+ICZhY3RpdmVBdHRyaWJzLCBUcmFuc2xhdGVkQXR0cmlidXRlICp0cmFu
c2xhdGVkLCBzdGQ6OnNpemVfdCBjb3VudCkKK3ZvaWQgKlN0cmVhbWluZ1ZlcnRleEJ1ZmZlcjo6
bWFwKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlLCBzdGQ6OnNpemVfdCByZXF1aXJl
ZFNwYWNlLCBzdGQ6OnNpemVfdCAqb2Zmc2V0KQogewotICAgIGlmIChtRGlydHlDdXJyZW50VmFs
dWVzKQorICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7CisKKyAgICBpZiAobVZlcnRleEJ1ZmZlcikK
ICAgICB7Ci0gICAgICAgIHN0ZDo6c2l6ZV90IHRvdGFsU2l6ZSA9IDQgKiBzaXplb2YoZmxvYXQp
ICogTUFYX1ZFUlRFWF9BVFRSSUJTOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1WZXJ0ZXhC
dWZmZXItPkxvY2sobVdyaXRlUG9zaXRpb24sIHJlcXVpcmVkU3BhY2UsICZtYXBQdHIsIEQzRExP
Q0tfTk9PVkVSV1JJVEUpOworICAgICAgICAKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQor
ICAgICAgICB7CisgICAgICAgICAgICBFUlIoIkxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4
IiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAg
ICAgKm9mZnNldCA9IG1Xcml0ZVBvc2l0aW9uOworICAgICAgICBtV3JpdGVQb3NpdGlvbiArPSBy
ZXF1aXJlZFNwYWNlOworICAgIH0KKworICAgIHJldHVybiBtYXBQdHI7Cit9CisKK3ZvaWQgU3Ry
ZWFtaW5nVmVydGV4QnVmZmVyOjpyZXNlcnZlUmVxdWlyZWRTcGFjZSgpCit7CisgICAgaWYgKG1S
ZXF1aXJlZFNwYWNlID4gbUJ1ZmZlclNpemUpCisgICAgeworICAgICAgICBpZiAobVZlcnRleEJ1
ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgbVZlcnRleEJ1ZmZlci0+UmVsZWFzZSgpOwor
ICAgICAgICAgICAgbVZlcnRleEJ1ZmZlciA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBt
QnVmZmVyU2l6ZSA9IHN0ZDo6bWF4KG1SZXF1aXJlZFNwYWNlLCAzICogbUJ1ZmZlclNpemUgLyAy
KTsgICAvLyAxLjUgeCBtQnVmZmVyU2l6ZSBpcyBhcmJpdHJhcnkgYW5kIHNob3VsZCBiZSBjaGVj
a2VkIHRvIHNlZSB3ZSBkb24ndCBoYXZlIHRvbyBtYW55IHJlYWxsb2NhdGlvbnMuCisKKyAgICAg
ICAgRDNEUE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKEQzRFVTQUdFX0RZ
TkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFkpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1E
ZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihtQnVmZmVyU2l6ZSwgRDNEVVNBR0VfRFlOQU1JQyB8
IEQzRFVTQUdFX1dSSVRFT05MWSwgMCwgcG9vbCwgJm1WZXJ0ZXhCdWZmZXIsIE5VTEwpOworICAg
IAorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVS
UigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBvZiBzaXplICVsdS4i
LCBtQnVmZmVyU2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICBtV3JpdGVQb3NpdGlvbiA9IDA7
CisgICAgfQorICAgIGVsc2UgaWYgKG1Xcml0ZVBvc2l0aW9uICsgbVJlcXVpcmVkU3BhY2UgPiBt
QnVmZmVyU2l6ZSkgICAvLyBSZWN5Y2xlCisgICAgeworICAgICAgICBpZiAobVZlcnRleEJ1ZmZl
cikKKyAgICAgICAgeworICAgICAgICAgICAgdm9pZCAqZHVtbXk7CisgICAgICAgICAgICBtVmVy
dGV4QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19ESVNDQVJEKTsKKyAgICAgICAg
ICAgIG1WZXJ0ZXhCdWZmZXItPlVubG9jaygpOworICAgICAgICB9CisKKyAgICAgICAgbVdyaXRl
UG9zaXRpb24gPSAwOworICAgIH0KKworICAgIG1SZXF1aXJlZFNwYWNlID0gMDsKK30KKworU3Rh
dGljVmVydGV4QnVmZmVyOjpTdGF0aWNWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2
aWNlKSA6IEFycmF5VmVydGV4QnVmZmVyKGRldmljZSwgMCwgRDNEVVNBR0VfV1JJVEVPTkxZKQor
eworfQogCi0gICAgICAgIG1DdXJyZW50VmFsdWVCdWZmZXItPnJlc2VydmVTcGFjZSh0b3RhbFNp
emUpOworU3RhdGljVmVydGV4QnVmZmVyOjp+U3RhdGljVmVydGV4QnVmZmVyKCkKK3sKK30KIAot
ICAgICAgICBmbG9hdCogY3VycmVudFZhbHVlcyA9IHN0YXRpY19jYXN0PGZsb2F0Kj4obUN1cnJl
bnRWYWx1ZUJ1ZmZlci0+bWFwKHRvdGFsU2l6ZSwgJm1DdXJyZW50VmFsdWVPZmZzZXQpKTsKK3Zv
aWQgKlN0YXRpY1ZlcnRleEJ1ZmZlcjo6bWFwKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
dXRlLCBzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBVSU5UICpzdHJlYW1PZmZzZXQpCit7Cisg
ICAgdm9pZCAqbWFwUHRyID0gTlVMTDsKIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE1B
WF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIGlmIChtVmVydGV4QnVmZmVyKQorICAgIHsKKyAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVmVydGV4QnVmZmVyLT5Mb2NrKG1Xcml0ZVBvc2l0aW9u
LCByZXF1aXJlZFNwYWNlLCAmbWFwUHRyLCAwKTsKKyAgICAgICAgCisgICAgICAgIGlmIChGQUlM
RUQocmVzdWx0KSkKICAgICAgICAgewotICAgICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQg
dGhlIEdMX0ZMT0FUeDQgaXMgc3VwcG9ydGVkIGJ5IHRoZSBiYWNrLWVuZC4gKEZvciBEM0Q5LCBp
dCBpcyBhIG1hbmRhdG9yeSBmb3JtYXQuKQotICAgICAgICAgICAgY3VycmVudFZhbHVlc1tpKjQr
MF0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMF07Ci0gICAgICAgICAgICBjdXJyZW50VmFs
dWVzW2kqNCsxXSA9IGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVsxXTsKLSAgICAgICAgICAgIGN1
cnJlbnRWYWx1ZXNbaSo0KzJdID0gYXR0cmlic1tpXS5tQ3VycmVudFZhbHVlWzJdOwotICAgICAg
ICAgICAgY3VycmVudFZhbHVlc1tpKjQrM10gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbM107
CisgICAgICAgICAgICBFUlIoIkxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0
KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKLSAgICAgICAgbUN1cnJl
bnRWYWx1ZUJ1ZmZlci0+dW5tYXAoKTsKKyAgICAgICAgaW50IGF0dHJpYnV0ZU9mZnNldCA9IGF0
dHJpYnV0ZS5tT2Zmc2V0ICUgYXR0cmlidXRlLnN0cmlkZSgpOworICAgICAgICBWZXJ0ZXhFbGVt
ZW50IGVsZW1lbnQgPSB7YXR0cmlidXRlLm1UeXBlLCBhdHRyaWJ1dGUubVNpemUsIGF0dHJpYnV0
ZS5tTm9ybWFsaXplZCwgYXR0cmlidXRlT2Zmc2V0LCBtV3JpdGVQb3NpdGlvbn07CisgICAgICAg
IG1DYWNoZS5wdXNoX2JhY2soZWxlbWVudCk7CisKKyAgICAgICAgKnN0cmVhbU9mZnNldCA9IG1X
cml0ZVBvc2l0aW9uOworICAgICAgICBtV3JpdGVQb3NpdGlvbiArPSByZXF1aXJlZFNwYWNlOwog
ICAgIH0KIAotICAgIGZvciAoc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7IGkrKykKKyAgICByZXR1cm4gbWFwUHRyOworfQorCit2b2lkIFN0YXRpY1ZlcnRleEJ1ZmZl
cjo6cmVzZXJ2ZVJlcXVpcmVkU3BhY2UoKQoreworICAgIGlmICghbVZlcnRleEJ1ZmZlciAmJiBt
QnVmZmVyU2l6ZSA9PSAwKQogICAgIHsKLSAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnNbaV0gJiYg
IWF0dHJpYnNbaV0ubUVuYWJsZWQpCisgICAgICAgIEQzRFBPT0wgcG9vbCA9IGdldERpc3BsYXko
KS0+Z2V0QnVmZmVyUG9vbChEM0RVU0FHRV9XUklURU9OTFkpOworICAgICAgICBIUkVTVUxUIHJl
c3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVZlcnRleEJ1ZmZlcihtUmVxdWlyZWRTcGFjZSwgRDNEVVNB
R0VfV1JJVEVPTkxZLCAwLCBwb29sLCAmbVZlcnRleEJ1ZmZlciwgTlVMTCk7CisgICAgCisgICAg
ICAgIGlmIChGQUlMRUQocmVzdWx0KSkKICAgICAgICAgewotICAgICAgICAgICAgdHJhbnNsYXRl
ZFtpXS5ub25BcnJheSA9IHRydWU7CisgICAgICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkgYWxs
b2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgbVJlcXVpcmVkU3BhY2UpOwor
ICAgICAgICB9CisKKyAgICAgICAgbUJ1ZmZlclNpemUgPSBtUmVxdWlyZWRTcGFjZTsKKyAgICB9
CisgICAgZWxzZSBpZiAobVZlcnRleEJ1ZmZlciAmJiBtQnVmZmVyU2l6ZSA+PSBtUmVxdWlyZWRT
cGFjZSkKKyAgICB7CisgICAgICAgIC8vIEFscmVhZHkgYWxsb2NhdGVkCisgICAgfQorICAgIGVs
c2UgVU5SRUFDSEFCTEUoKTsgICAvLyBTdGF0aWMgdmVydGV4IGJ1ZmZlcnMgY2FuJ3QgYmUgcmVz
aXplZAogCi0gICAgICAgICAgICB0cmFuc2xhdGVkW2ldLmJ1ZmZlciA9IG1DdXJyZW50VmFsdWVC
dWZmZXI7CisgICAgbVJlcXVpcmVkU3BhY2UgPSAwOworfQogCi0gICAgICAgICAgICB0cmFuc2xh
dGVkW2ldLnR5cGUgPSBHTF9GTE9BVDsKLSAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc2l6ZSA9
IDQ7Ci0gICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm5vcm1hbGl6ZWQgPSBmYWxzZTsKLSAgICAg
ICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRlID0gMDsKLSAgICAgICAgICAgIHRyYW5zbGF0ZWRb
aV0ub2Zmc2V0ID0gbUN1cnJlbnRWYWx1ZU9mZnNldCArIDQgKiBzaXplb2YoZmxvYXQpICogaTsK
K1VJTlQgU3RhdGljVmVydGV4QnVmZmVyOjpsb29rdXBBdHRyaWJ1dGUoY29uc3QgVmVydGV4QXR0
cmlidXRlICZhdHRyaWJ1dGUpCit7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgZWxlbWVudCA9IDA7
IGVsZW1lbnQgPCBtQ2FjaGUuc2l6ZSgpOyBlbGVtZW50KyspCisgICAgeworICAgICAgICBpZiAo
bUNhY2hlW2VsZW1lbnRdLnR5cGUgPT0gYXR0cmlidXRlLm1UeXBlICYmICBtQ2FjaGVbZWxlbWVu
dF0uc2l6ZSA9PSBhdHRyaWJ1dGUubVNpemUgJiYgbUNhY2hlW2VsZW1lbnRdLm5vcm1hbGl6ZWQg
PT0gYXR0cmlidXRlLm1Ob3JtYWxpemVkKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobUNh
Y2hlW2VsZW1lbnRdLmF0dHJpYnV0ZU9mZnNldCA9PSBhdHRyaWJ1dGUubU9mZnNldCAlIGF0dHJp
YnV0ZS5zdHJpZGUoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbUNh
Y2hlW2VsZW1lbnRdLnN0cmVhbU9mZnNldDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0KKworICAgIHJldHVybiAtMTsKIH0KIAorY29uc3QgVmVydGV4RGF0YU1hbmFnZXI6OkZvcm1h
dENvbnZlcnRlciAmVmVydGV4RGF0YU1hbmFnZXI6OmZvcm1hdENvbnZlcnRlcihjb25zdCBWZXJ0
ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbUF0dHJpYnV0ZVR5
cGVzW3R5cGVJbmRleChhdHRyaWJ1dGUubVR5cGUpXVthdHRyaWJ1dGUubU5vcm1hbGl6ZWRdW2F0
dHJpYnV0ZS5tU2l6ZSAtIDFdOworfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvVmVydGV4RGF0
YU1hbmFnZXIuaAkocmV2aXNpb24gNzU4MDEpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwLDcgKzEwLDcgQEAKICNpZm5kZWYgTElCR0xFU1YyX0dFT01FVFJZX1ZFUlRFWERBVEFN
QU5BR0VSX0hfCiAjZGVmaW5lIExJQkdMRVNWMl9HRU9NRVRSWV9WRVJURVhEQVRBTUFOQUdFUl9I
XwogCi0jaW5jbHVkZSA8Yml0c2V0PgorI2luY2x1ZGUgPHZlY3Rvcj4KICNpbmNsdWRlIDxjc3Rk
ZGVmPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKQEAgLTIxLDQ0ICsyMSwxNDggQEAKIG5hbWVzcGFj
ZSBnbAogewogCi1jbGFzcyBCdWZmZXI7Ci1jbGFzcyBCdWZmZXJCYWNrRW5kOwotY2xhc3MgVHJh
bnNsYXRlZFZlcnRleEJ1ZmZlcjsKLXN0cnVjdCBUcmFuc2xhdGVkQXR0cmlidXRlOwotc3RydWN0
IEZvcm1hdENvbnZlcnRlcjsKLXN0cnVjdCBUcmFuc2xhdGVkSW5kZXhEYXRhOworc3RydWN0IFRy
YW5zbGF0ZWRBdHRyaWJ1dGUKK3sKKyAgICBib29sIGFjdGl2ZTsKKworICAgIEQzRERFQ0xUWVBF
IHR5cGU7CisgICAgVUlOVCBvZmZzZXQ7CisgICAgVUlOVCBzdHJpZGU7ICAgLy8gMCBtZWFucyBu
b3QgdG8gYWR2YW5jZSB0aGUgcmVhZCBwb2ludGVyIGF0IGFsbAorICAgIFVJTlQgc2VtYW50aWNJ
bmRleDsKKworICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKnZlcnRleEJ1ZmZlcjsKK307CisK
K2NsYXNzIFZlcnRleEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgVmVydGV4QnVmZmVyKElEaXJl
Y3QzRERldmljZTkgKmRldmljZSwgVUlOVCBzaXplLCBEV09SRCB1c2FnZUZsYWdzKTsKKyAgICB2
aXJ0dWFsIH5WZXJ0ZXhCdWZmZXIoKTsKKworICAgIHZvaWQgdW5tYXAoKTsKKworICAgIElEaXJl
Y3QzRFZlcnRleEJ1ZmZlcjkgKmdldEJ1ZmZlcigpIGNvbnN0OworCisgIHByb3RlY3RlZDoKKyAg
ICBJRGlyZWN0M0REZXZpY2U5ICpjb25zdCBtRGV2aWNlOworICAgIElEaXJlY3QzRFZlcnRleEJ1
ZmZlcjkgKm1WZXJ0ZXhCdWZmZXI7CisKKyAgcHJpdmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FO
RF9BU1NJR04oVmVydGV4QnVmZmVyKTsKK307CisKK2NsYXNzIENvbnN0YW50VmVydGV4QnVmZmVy
IDogcHVibGljIFZlcnRleEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgQ29uc3RhbnRWZXJ0ZXhC
dWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB6
LCBmbG9hdCB3KTsKKyAgICB+Q29uc3RhbnRWZXJ0ZXhCdWZmZXIoKTsKK307CisKK2NsYXNzIEFy
cmF5VmVydGV4QnVmZmVyIDogcHVibGljIFZlcnRleEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAg
QXJyYXlWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBVSU5UIHNpemUsIERX
T1JEIHVzYWdlRmxhZ3MpOworICAgIH5BcnJheVZlcnRleEJ1ZmZlcigpOworCisgICAgVUlOVCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlclNpemU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgKm1h
cChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgVUlOVCByZXF1aXJlZFNwYWNlLCBV
SU5UICpzdHJlYW1PZmZzZXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXJ2ZVJlcXVpcmVk
U3BhY2UoKSA9IDA7CisgICAgdm9pZCBhZGRSZXF1aXJlZFNwYWNlKFVJTlQgcmVxdWlyZWRTcGFj
ZSk7CisgICAgdm9pZCBhZGRSZXF1aXJlZFNwYWNlRm9yKEFycmF5VmVydGV4QnVmZmVyICpidWZm
ZXIpOworCisgIHByb3RlY3RlZDoKKyAgICBVSU5UIG1CdWZmZXJTaXplOworICAgIFVJTlQgbVdy
aXRlUG9zaXRpb247CisgICAgVUlOVCBtUmVxdWlyZWRTcGFjZTsKK307CisKK2NsYXNzIFN0cmVh
bWluZ1ZlcnRleEJ1ZmZlciA6IHB1YmxpYyBBcnJheVZlcnRleEJ1ZmZlcgoreworICBwdWJsaWM6
CisgICAgU3RyZWFtaW5nVmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgVUlO
VCBpbml0aWFsU2l6ZSk7CisgICAgflN0cmVhbWluZ1ZlcnRleEJ1ZmZlcigpOworCisgICAgdm9p
ZCAqbWFwKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlLCBVSU5UIHJlcXVpcmVkU3Bh
Y2UsIFVJTlQgKnN0cmVhbU9mZnNldCk7CisgICAgdm9pZCByZXNlcnZlUmVxdWlyZWRTcGFjZSgp
OworfTsKKworY2xhc3MgU3RhdGljVmVydGV4QnVmZmVyIDogcHVibGljIEFycmF5VmVydGV4QnVm
ZmVyCit7CisgIHB1YmxpYzoKKyAgICBleHBsaWNpdCBTdGF0aWNWZXJ0ZXhCdWZmZXIoSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlKTsKKyAgICB+U3RhdGljVmVydGV4QnVmZmVyKCk7CisKKyAgICB2
b2lkICptYXAoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIFVJTlQgcmVxdWlyZWRT
cGFjZSwgVUlOVCAqc3RyZWFtT2Zmc2V0KTsKKyAgICB2b2lkIHJlc2VydmVSZXF1aXJlZFNwYWNl
KCk7CisKKyAgICBVSU5UIGxvb2t1cEF0dHJpYnV0ZShjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0
dHJpYnV0ZSk7ICAgLy8gUmV0dXJucyB0aGUgb2Zmc2V0IGludG8gdGhlIHZlcnRleCBidWZmZXIs
IG9yIC0xIGlmIG5vdCBmb3VuZAorCisgIHByaXZhdGU6CisgICAgc3RydWN0IFZlcnRleEVsZW1l
bnQKKyAgICB7CisgICAgICAgIEdMZW51bSB0eXBlOworICAgICAgICBHTGludCBzaXplOworICAg
ICAgICBib29sIG5vcm1hbGl6ZWQ7CisgICAgICAgIGludCBhdHRyaWJ1dGVPZmZzZXQ7CisKKyAg
ICAgICAgVUlOVCBzdHJlYW1PZmZzZXQ7CisgICAgfTsKKworICAgIHN0ZDo6dmVjdG9yPFZlcnRl
eEVsZW1lbnQ+IG1DYWNoZTsKK307CiAKIGNsYXNzIFZlcnRleERhdGFNYW5hZ2VyCiB7CiAgIHB1
YmxpYzoKLSAgICBWZXJ0ZXhEYXRhTWFuYWdlcihDb250ZXh0ICpjb250ZXh0LCBCdWZmZXJCYWNr
RW5kICpiYWNrZW5kKTsKLSAgICB+VmVydGV4RGF0YU1hbmFnZXIoKTsKKyAgICBWZXJ0ZXhEYXRh
TWFuYWdlcihDb250ZXh0ICpjb250ZXh0LCBJRGlyZWN0M0REZXZpY2U5ICpiYWNrZW5kKTsKKyAg
ICB2aXJ0dWFsIH5WZXJ0ZXhEYXRhTWFuYWdlcigpOwogCi0gICAgdm9pZCBkaXJ0eUN1cnJlbnRW
YWx1ZXMoKSB7IG1EaXJ0eUN1cnJlbnRWYWx1ZXMgPSB0cnVlOyB9CisgICAgdm9pZCBkaXJ0eUN1
cnJlbnRWYWx1ZShpbnQgaW5kZXgpIHsgbURpcnR5Q3VycmVudFZhbHVlW2luZGV4XSA9IHRydWU7
IH0KIAotICAgIEdMZW51bSBwcmVSZW5kZXJWYWxpZGF0ZShHTGludCBzdGFydCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgR0xzaXplaSBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqb3V0QXR0cmlicyk7CisgICAgdm9pZCBzZXR1
cEF0dHJpYnV0ZXMoY29uc3QgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqYXR0cmlidXRlcyk7CisgICAg
R0xlbnVtIHByZXBhcmVWZXJ0ZXhEYXRhKEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFu
c2xhdGVkQXR0cmlidXRlICpvdXRBdHRyaWJzKTsKIAogICBwcml2YXRlOgotICAgIHN0ZDo6Yml0
c2V0PE1BWF9WRVJURVhfQVRUUklCUz4gZ2V0QWN0aXZlQXR0cmlicygpIGNvbnN0OworICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihWZXJ0ZXhEYXRhTWFuYWdlcik7CisKKyAgICBVSU5UIHNw
YWNlUmVxdWlyZWQoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWIsIHN0ZDo6c2l6ZV90IGNv
dW50KSBjb25zdDsKKyAgICBVSU5UIHdyaXRlQXR0cmlidXRlRGF0YShBcnJheVZlcnRleEJ1ZmZl
ciAqdmVydGV4QnVmZmVyLCBHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgY29uc3QgVmVydGV4
QXR0cmlidXRlICZhdHRyaWJ1dGUpOworCisgICAgQ29udGV4dCAqY29uc3QgbUNvbnRleHQ7Cisg
ICAgSURpcmVjdDNERGV2aWNlOSAqY29uc3QgbURldmljZTsKKworICAgIFN0cmVhbWluZ1ZlcnRl
eEJ1ZmZlciAqbVN0cmVhbWluZ0J1ZmZlcjsKKworICAgIGJvb2wgbURpcnR5Q3VycmVudFZhbHVl
W01BWF9WRVJURVhfQVRUUklCU107CisgICAgQ29uc3RhbnRWZXJ0ZXhCdWZmZXIgKm1DdXJyZW50
VmFsdWVCdWZmZXJbTUFYX1ZFUlRFWF9BVFRSSUJTXTsKKworICAgIC8vIEF0dHJpYnV0ZSBmb3Jt
YXQgY29udmVyc2lvbgorICAgIHN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKKyAgICB7CisgICAgICAg
IGJvb2wgaWRlbnRpdHk7CisgICAgICAgIHN0ZDo6c2l6ZV90IG91dHB1dEVsZW1lbnRTaXplOwor
ICAgICAgICB2b2lkICgqY29udmVydEFycmF5KShjb25zdCB2b2lkICppbiwgc3RkOjpzaXplX3Qg
c3RyaWRlLCBzdGQ6OnNpemVfdCBuLCB2b2lkICpvdXQpOworICAgICAgICBEM0RERUNMVFlQRSBk
M2REZWNsVHlwZTsKKyAgICB9OwogCi0gICAgdm9pZCBwcm9jZXNzTm9uQXJyYXlBdHRyaWJ1dGVz
KGNvbnN0IEF0dHJpYnV0ZVN0YXRlICphdHRyaWJzLCBjb25zdCBzdGQ6OmJpdHNldDxNQVhfVkVS
VEVYX0FUVFJJQlM+ICZhY3RpdmVBdHRyaWJzLCBUcmFuc2xhdGVkQXR0cmlidXRlICp0cmFuc2xh
dGVkLCBzdGQ6OnNpemVfdCBjb3VudCk7CisgICAgZW51bSB7IE5VTV9HTF9WRVJURVhfQVRUUklC
X1RZUEVTID0gNiB9OwogCi0gICAgc3RkOjpzaXplX3QgdHlwZVNpemUoR0xlbnVtIHR5cGUpIGNv
bnN0OwotICAgIHN0ZDo6c2l6ZV90IGludGVycHJldEdsU3RyaWRlKGNvbnN0IEF0dHJpYnV0ZVN0
YXRlICZhdHRyaWIpIGNvbnN0OworICAgIEZvcm1hdENvbnZlcnRlciBtQXR0cmlidXRlVHlwZXNb
TlVNX0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdOyAgIC8vIFtHTCB0eXBlcyBhcyBlbnVt
ZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplIC0gMV0KIAotICAgIHN0ZDo6
c2l6ZV90IHJvdW5kVXAoc3RkOjpzaXplX3QgeCwgc3RkOjpzaXplX3QgbXVsdGlwbGUpIGNvbnN0
OwotICAgIHN0ZDo6c2l6ZV90IHNwYWNlUmVxdWlyZWQoY29uc3QgQXR0cmlidXRlU3RhdGUgJmF0
dHJpYiwgc3RkOjpzaXplX3QgbWF4VmVydGV4KSBjb25zdDsKKyAgICBzdHJ1Y3QgVHJhbnNsYXRp
b25EZXNjcmlwdGlvbgorICAgIHsKKyAgICAgICAgRFdPUkQgY2Fwc0ZsYWc7CisgICAgICAgIEZv
cm1hdENvbnZlcnRlciBwcmVmZXJyZWRDb252ZXJzaW9uOworICAgICAgICBGb3JtYXRDb252ZXJ0
ZXIgZmFsbGJhY2tDb252ZXJzaW9uOworICAgIH07CiAKLSAgICBDb250ZXh0ICptQ29udGV4dDsK
LSAgICBCdWZmZXJCYWNrRW5kICptQmFja2VuZDsKKyAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQg
dG8gZ2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVzLgorICAgIHN0YXRpYyBjb25zdCBUcmFuc2xhdGlv
bkRlc2NyaXB0aW9uIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9U
WVBFU11bMl1bNF07IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtu
b3JtYWxpemVkXVtzaXplIC0gMV0KIAotICAgIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKm1TdHJl
YW1CdWZmZXI7CisgICAgdm9pZCBjaGVja1ZlcnRleENhcHMoRFdPUkQgZGVjbFR5cGVzKTsKIAot
ICAgIGJvb2wgbURpcnR5Q3VycmVudFZhbHVlczsKLSAgICBzdGQ6OnNpemVfdCBtQ3VycmVudFZh
bHVlT2Zmc2V0OyAgICAgICAgICAgIC8vIE9mZnNldCB3aXRoaW4gbUN1cnJlbnRWYWx1ZUJ1ZmZl
ciB0aGF0IHRoZSBjdXJyZW50IGF0dHJpYnV0ZSB2YWx1ZXMgd2VyZSBsYXN0IGxvYWRlZCBhdC4K
LSAgICBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICptQ3VycmVudFZhbHVlQnVmZmVyOworICAgIHVu
c2lnbmVkIGludCB0eXBlSW5kZXgoR0xlbnVtIHR5cGUpIGNvbnN0OworICAgIGNvbnN0IEZvcm1h
dENvbnZlcnRlciAmZm9ybWF0Q29udmVydGVyKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
dXRlKSBjb25zdDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmNwcAkocmV2aXNpb24g
NzU4MDEpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5
L2JhY2tlbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDM4ICswLDAgQEAKLS8vCi0vLyBDb3B5
cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBC
U0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmls
ZS4KLS8vCi0KLS8vIGdlb21ldHJ5L2JhY2tlbmQuaDogQWJzdHJhY3QgY2xhc3NlcyBCdWZmZXJC
YWNrRW5kLCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyIGFuZCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIK
LS8vIHRoYXQgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBhbnkgQVBJLXNwZWNpZmljIGltcGxlbWVu
dGF0aW9uIG9mIEFOR0xFLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQu
aCIKLQotI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQotdm9p
ZCAqVHJhbnNsYXRlZEJ1ZmZlcjo6bWFwKHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UsIHN0ZDo6
c2l6ZV90ICpvZmZzZXQpCi17Ci0gICAgQVNTRVJUKHJlcXVpcmVkU3BhY2UgPD0gbUJ1ZmZlclNp
emUpOwotCi0gICAgcmVzZXJ2ZVNwYWNlKHJlcXVpcmVkU3BhY2UpOwotCi0gICAgKm9mZnNldCA9
IG1DdXJyZW50UG9pbnQ7Ci0gICAgbUN1cnJlbnRQb2ludCArPSByZXF1aXJlZFNwYWNlOwotCi0g
ICAgcmV0dXJuIHN0cmVhbWluZ01hcCgqb2Zmc2V0LCByZXF1aXJlZFNwYWNlKTsKLX0KLQotdm9p
ZCBUcmFuc2xhdGVkQnVmZmVyOjpyZXNlcnZlU3BhY2Uoc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFj
ZSkKLXsKLSAgICBpZiAobUN1cnJlbnRQb2ludCArIHJlcXVpcmVkU3BhY2UgPiBtQnVmZmVyU2l6
ZSkKLSAgICB7Ci0gICAgICAgIHJlY3ljbGUoKTsKLSAgICAgICAgbUN1cnJlbnRQb2ludCA9IDA7
Ci0gICAgfQotfQotCi19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2dlb21ldHJ5L2JhY2tlbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQuaAkocmV2aXNpb24gNzU4MDEpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2JhY2tlbmQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTAgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAoYykg
MjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8KLQot
Ly8gZ2VvbWV0cnkvYmFja2VuZC5oOiBBYnN0cmFjdCBjbGFzc2VzIEJ1ZmZlckJhY2tFbmQsIFRy
YW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgYW5kIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlcgotLy8gdGhhdCBt
dXN0IGJlIGltcGxlbWVudGVkIGJ5IGFueSBBUEktc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2Yg
QU5HTEUuCi0KLSNpZm5kZWYgTElCR0xFU1YyX0dFT01FVFJZX0JBQ0tFTkRfSF8KLSNkZWZpbmUg
TElCR0xFU1YyX0dFT01FVFJZX0JBQ0tFTkRfSF8KLQotI2luY2x1ZGUgPGNzdGRkZWY+Ci0KLSNk
ZWZpbmUgR0xfQVBJQ0FMTAotI2luY2x1ZGUgPEdMRVMyL2dsMi5oPgotCi0jaW5jbHVkZSAibGli
R0xFU3YyL0NvbnRleHQuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci1jbGFzcyBUcmFuc2xhdGVkVmVy
dGV4QnVmZmVyOwotY2xhc3MgVHJhbnNsYXRlZEluZGV4QnVmZmVyOwotCi1zdHJ1Y3QgRm9ybWF0
Q29udmVydGVyCi17Ci0gICAgYm9vbCBpZGVudGl0eTsKLSAgICBzdGQ6OnNpemVfdCBvdXRwdXRW
ZXJ0ZXhTaXplOwotICAgIHZvaWQgKCpjb252ZXJ0QXJyYXkpKGNvbnN0IHZvaWQgKmluLCBzdGQ6
OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91dCk7Ci19OwotCi1zdHJ1Y3Qg
VHJhbnNsYXRlZEF0dHJpYnV0ZQotewotICAgIGJvb2wgZW5hYmxlZDsKLSAgICBib29sIG5vbkFy
cmF5OwotCi0gICAgLy8gVGhlc2UgYXJlIHRoZSBvcmlnaW5hbCB1bnRyYW5zbGF0ZWQgdmFsdWVz
LiAoT3IganVzdCBoYXZlIHNvbWUgc29ydCBvZiBCdWZmZXJCYWNrRW5kOjpUcmFuc2xhdGVkVHlw
ZUtleS4pCi0gICAgR0xlbnVtIHR5cGU7Ci0gICAgc3RkOjpzaXplX3Qgc2l6ZTsKLSAgICBib29s
IG5vcm1hbGl6ZWQ7Ci0KLSAgICBzdGQ6OnNpemVfdCBvZmZzZXQ7Ci0KLSAgICBzdGQ6OnNpemVf
dCBzdHJpZGU7IC8vIDAgbWVhbnMgbm90IHRvIGFkdmFuY2UgdGhlIHJlYWQgcG9pbnRlciBhdCBh
bGwKLQotICAgIHN0ZDo6c2l6ZV90IHNlbWFudGljSW5kZXg7Ci0KLSAgICBUcmFuc2xhdGVkVmVy
dGV4QnVmZmVyICpidWZmZXI7Ci19OwotCi1jbGFzcyBCdWZmZXJCYWNrRW5kCi17Ci0gIHB1Ymxp
YzoKLSAgICB2aXJ0dWFsIH5CdWZmZXJCYWNrRW5kKCkgeyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wg
c3VwcG9ydEludEluZGljZXMoKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRWZXJ0ZXhC
dWZmZXIgKmNyZWF0ZVZlcnRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplKSA9IDA7Ci0gICAgdmly
dHVhbCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXJGb3JTdHJpZGVa
ZXJvKHN0ZDo6c2l6ZV90IHNpemUpID0gMDsKLSAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRJbmRleEJ1
ZmZlciAqY3JlYXRlSW5kZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSwgR0xlbnVtIHR5cGUpID0g
MDsKLSAgICB2aXJ0dWFsIEZvcm1hdENvbnZlcnRlciBnZXRGb3JtYXRDb252ZXJ0ZXIoR0xlbnVt
IHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUsIGJvb2wgbm9ybWFsaXplKSA9IDA7Ci0KLSAgICAvLyBG
b3IgYW4gaWRlbnRpdHktbWFwcGFibGUgc3RyZWFtLCB2ZXJpZnkgdGhhdCB0aGUgc3RyaWRlIGFu
ZCBvZmZzZXQgYXJlIG9rYXkuCi0gICAgdmlydHVhbCBib29sIHZhbGlkYXRlU3RyZWFtKEdMZW51
bSB0eXBlLCBzdGQ6OnNpemVfdCBzaXplLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90
IG9mZnNldCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBHTGVudW0gc2V0dXBJbmRpY2VzUHJl
RHJhdyhjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8pID0gMDsKLSAgICB2aXJ0
dWFsIEdMZW51bSBzZXR1cEF0dHJpYnV0ZXNQcmVEcmF3KGNvbnN0IFRyYW5zbGF0ZWRBdHRyaWJ1
dGUgKmF0dHJpYnV0ZXMpID0gMDsKLX07Ci0KLWNsYXNzIFRyYW5zbGF0ZWRCdWZmZXIKLXsKLSAg
cHVibGljOgotICAgIGV4cGxpY2l0IFRyYW5zbGF0ZWRCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSkg
OiBtQnVmZmVyU2l6ZShzaXplKSwgbUN1cnJlbnRQb2ludCgwKSB7IH0KLSAgICB2aXJ0dWFsIH5U
cmFuc2xhdGVkQnVmZmVyKCkgeyB9Ci0KLSAgICBzdGQ6OnNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbUJ1ZmZlclNpemU7IH0KLQotICAgIHZpcnR1YWwgdm9pZCAqbWFwKCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCB1bm1hcCgpID0gMDsKLQotICAgIHZvaWQgcmVzZXJ2ZVNwYWNlKHN0ZDo6
c2l6ZV90IHJlcXVpcmVkU3BhY2UpOwotCi0gICAgdm9pZCAqbWFwKHN0ZDo6c2l6ZV90IHJlcXVp
cmVkU3BhY2UsIHN0ZDo6c2l6ZV90ICpvZmZzZXQpOwotCi0gIHByb3RlY3RlZDoKLSAgICB2aXJ0
dWFsIHZvaWQgcmVjeWNsZSgpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgKnN0cmVhbWluZ01hcChz
dGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNpemUpID0gMDsKLQotICBwcml2YXRlOgot
ICAgIHN0ZDo6c2l6ZV90IG1CdWZmZXJTaXplOwotICAgIHN0ZDo6c2l6ZV90IG1DdXJyZW50UG9p
bnQ7Ci0KLSAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oVHJhbnNsYXRlZEJ1ZmZlcik7Ci19
OwotCi1jbGFzcyBUcmFuc2xhdGVkVmVydGV4QnVmZmVyIDogcHVibGljIFRyYW5zbGF0ZWRCdWZm
ZXIKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIoc3Rk
OjpzaXplX3Qgc2l6ZSkgOiBUcmFuc2xhdGVkQnVmZmVyKHNpemUpIHsgfQotfTsKLQotY2xhc3Mg
VHJhbnNsYXRlZEluZGV4QnVmZmVyIDogcHVibGljIFRyYW5zbGF0ZWRCdWZmZXIKLXsKLSAgcHVi
bGljOgotICAgIGV4cGxpY2l0IFRyYW5zbGF0ZWRJbmRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXpl
KSA6IFRyYW5zbGF0ZWRCdWZmZXIoc2l6ZSkgeyB9Ci19OwotCi19Ci0KLSNlbmRpZiAgIC8vIExJ
QkdMRVNWMl9HRU9NRVRSWV9CQUNLRU5EX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuY3BwCShyZXZpc2lvbiA3
NTgwMSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkv
ZHg5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2MTMgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdo
dCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1z
dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgot
Ly8KLQotLy8gZ2VvbWV0cnkvZHg5Lmg6IERpcmVjdDNEIDktYmFzZWQgaW1wbGVtZW50YXRpb24g
b2YgQnVmZmVyQmFja0VuZCwgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciBhbmQgVHJhbnNsYXRlZElu
ZGV4QnVmZmVyLgotCi0jaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L2R4OS5oIgotCi0jaW5j
bHVkZSA8Y3N0ZGRlZj4KLQotI2RlZmluZSBHTF9BUElDQUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wy
Lmg+Ci0KLSNpbmNsdWRlICJjb21tb24vZGVidWcuaCIKLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9D
b250ZXh0LmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKLSNpbmNsdWRlICJsaWJHTEVT
djIvZ2VvbWV0cnkvdmVydGV4Y29udmVyc2lvbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9t
ZXRyeS9JbmRleERhdGFNYW5hZ2VyLmgiCi0KLW5hbWVzcGFjZQotewotLy8gTWFwcGluZyBmcm9t
IE9wZW5HTC1FUyB2ZXJ0ZXggYXR0cmliIHR5cGUgdG8gRDNEIGRlY2wgdHlwZToKLS8vCi0vLyBC
WVRFICAgICAgICAgICAgICAgICBTSE9SVCAoQ2FzdCkKLS8vIEJZVEUtbm9ybSAgICAgICAgICAg
IEZMT0FUIChOb3JtYWxpemUpIChjYW4ndCBiZSBleGFjdGx5IHJlcHJlc2VudGVkIGFzIFNIT1JU
LW5vcm0pCi0vLyBVTlNJR05FRF9CWVRFICAgICAgICBVQllURTQgKElkZW50aXR5KSBvciBTSE9S
VCAoQ2FzdCkKLS8vIFVOU0lHTkVEX0JZVEUtbm9ybSAgIFVCWVRFNE4gKElkZW50aXR5KSBvciBG
TE9BVCAoTm9ybWFsaXplKQotLy8gU0hPUlQgICAgICAgICAgICAgICAgU0hPUlQgKElkZW50aXR5
KQotLy8gU0hPUlQtbm9ybSAgICAgICAgICAgU0hPUlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FU
IChOb3JtYWxpemUpCi0vLyBVTlNJR05FRF9TSE9SVCAgICAgICBGTE9BVCAoQ2FzdCkKLS8vIFVO
U0lHTkVEX1NIT1JULW5vcm0gIFVTSE9SVC1ub3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1h
bGl6ZSkKLS8vIEZJWEVEIChub3QgaW4gV2ViR0wpIEZMT0FUIChGaXhlZFRvRmxvYXQpCi0vLyBG
TE9BVCAgICAgICAgICAgICAgICBGTE9BVCAoSWRlbnRpdHkpCi0KLS8vIEdMVG9DVHlwZSBtYXBz
IGZyb20gR0wgdHlwZSAoYXMgR0xlbnVtKSB0byB0aGUgQyB0eXBlZGVmLiAKLXRlbXBsYXRlIDxH
TGVudW0gR0xUeXBlPiBzdHJ1Y3QgR0xUb0NUeXBlIHsgfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0
IEdMVG9DVHlwZTxHTF9CWVRFPiB7IHR5cGVkZWYgR0xieXRlIHR5cGU7IH07Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1VOU0lHTkVEX0JZVEU+IHsgdHlwZWRlZiBHTHVieXRlIHR5
cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1NIT1JUPiB7IHR5cGVkZWYg
R0xzaG9ydCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9VTlNJR05F
RF9TSE9SVD4geyB0eXBlZGVmIEdMdXNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
R0xUb0NUeXBlPEdMX0ZJWEVEPiB7IHR5cGVkZWYgR0x1aW50IHR5cGU7IH07Ci10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0ZMT0FUPiB7IHR5cGVkZWYgR0xmbG9hdCB0eXBlOyB9Owot
Ci0vLyBUaGlzIGRpZmZlcnMgZnJvbSBEM0RERUNMVFlQRSBpbiB0aGF0IGl0IGlzIHVuc2l6ZWQu
IChTaXplIGV4cGFuc2lvbiBpcyBhcHBsaWVkIGxhc3QuKQotZW51bSBEM0RWZXJ0ZXhUeXBlCi17
Ci0gICAgRDNEVlRfRkxPQVQsCi0gICAgRDNEVlRfU0hPUlQsCi0gICAgRDNEVlRfU0hPUlRfTk9S
TSwKLSAgICBEM0RWVF9VQllURSwKLSAgICBEM0RWVF9VQllURV9OT1JNLAotICAgIEQzRFZUX1VT
SE9SVF9OT1JNCi19OwotCi0vLyBEM0RUb0NUeXBlIG1hcHMgZnJvbSBEM0QgdmVydGV4IHR5cGUg
KGFzIGVudW0gRDNEVmVydGV4VHlwZSkgdG8gdGhlIGNvcnJlc3BvbmRpbmcgQyB0eXBlLgotdGVt
cGxhdGUgPHVuc2lnbmVkIGludCBEM0RUeXBlPiBzdHJ1Y3QgRDNEVG9DVHlwZSB7IH07Ci0KLXRl
bXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX0ZMT0FUPiB7IHR5cGVkZWYgZmxvYXQg
dHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1NIT1JUPiB7IHR5
cGVkZWYgc2hvcnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZU
X1NIT1JUX05PUk0+IHsgdHlwZWRlZiBzaG9ydCB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0
IEQzRFRvQ1R5cGU8RDNEVlRfVUJZVEU+IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHR5cGU7IH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VQllURV9OT1JNPiB7IHR5cGVk
ZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8
RDNEVlRfVVNIT1JUX05PUk0+IHsgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB0eXBlOyB9OwotCi0v
LyBFbmNvZGUgdGhlIHR5cGUvc2l6ZSBjb21iaW5hdGlvbnMgdGhhdCBEM0QgcGVybWl0cy4gRm9y
IGVhY2ggdHlwZS9zaXplIGl0IGV4cGFuZHMgdG8gYSB3aWRlbmVyIHRoYXQgd2lsbCBwcm92aWRl
IHRoZSBhcHByb3ByaWF0ZSBmaW5hbCBzaXplLgotdGVtcGxhdGUgPHVuc2lnbmVkIGludCB0eXBl
LCBpbnQgc2l6ZT4KLXN0cnVjdCBXaWRlblJ1bGUKLXsKLX07Ci0KLXRlbXBsYXRlIDxpbnQgc2l6
ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9GTE9BVCwgc2l6ZT4gICAgICAgICAgOiBnbDo6Tm9X
aWRlbjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNE
VlRfU0hPUlQsIHNpemU+ICAgICAgICAgIDogZ2w6OldpZGVuVG9FdmVuPHNpemU+IHsgfTsKLXRl
bXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVF9OT1JNLCBzaXpl
PiAgICAgOiBnbDo6V2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXplPiBz
dHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFLCBzaXplPiAgICAgICAgICA6IGdsOjpXaWRlblRv
Rm91cjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNE
VlRfVUJZVEVfTk9STSwgc2l6ZT4gICAgIDogZ2w6OldpZGVuVG9Gb3VyPHNpemU+IHsgfTsKLXRl
bXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VU0hPUlRfTk9STSwgc2l6
ZT4gICAgOiBnbDo6V2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotCi0vLyBWZXJ0ZXhUeXBlRmxhZ3Mg
ZW5jb2RlcyB0aGUgRDNEQ0FQUzk6OkRlY2xUeXBlIGZsYWcgYW5kIHZlcnRleCBkZWNsYXJhdGlv
biBmbGFnIGZvciBlYWNoIEQzRCB2ZXJ0ZXggdHlwZSAmIHNpemUgY29tYmluYXRpb24uCi10ZW1w
bGF0ZSA8dW5zaWduZWQgaW50IGQzZHR5cGUsIGludCBzaXplPgotc3RydWN0IFZlcnRleFR5cGVG
bGFncwotewotfTsKLQotdGVtcGxhdGUgPHVuc2lnbmVkIGludCBjYXBmbGFnLCB1bnNpZ25lZCBp
bnQgZGVjbGZsYWc+Ci1zdHJ1Y3QgVmVydGV4VHlwZUZsYWdzSGVscGVyCi17Ci0gICAgZW51bSB7
IGNhcGZsYWcgPSBjYXBmbGFnIH07Ci0gICAgZW51bSB7IGRlY2xmbGFnID0gZGVjbGZsYWcgfTsK
LX07Ci0KLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDE+
IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX0ZMT0FUMT4geyB9OwotdGVt
cGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMj4gOiBWZXJ0ZXhU
eXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQyPiB7IH07Ci10ZW1wbGF0ZSA8PiBz
dHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAzPiA6IFZlcnRleFR5cGVGbGFnc0hl
bHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDM+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0
ZXhUeXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQz
RERFQ0xUWVBFX0ZMT0FUND4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFn
czxEM0RWVF9TSE9SVCwgMj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVf
U0hPUlQyPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NI
T1JULCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9TSE9SVDQ+IHsg
fTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlRfTk9STSwg
Mj4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1NIT1JUMk4sIEQzRERFQ0xUWVBF
X1NIT1JUMk4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRf
U0hPUlRfTk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1NIT1JUNE4s
IEQzRERFQ0xUWVBFX1NIT1JUNE4+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
RmxhZ3M8RDNEVlRfVUJZVEUsIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19V
QllURTQsIEQzRERFQ0xUWVBFX1VCWVRFND4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRl
eFR5cGVGbGFnczxEM0RWVF9VQllURV9OT1JNLCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxE
M0REVENBUFNfVUJZVEU0TiwgRDNEREVDTFRZUEVfVUJZVEU0Tj4geyB9OwotdGVtcGxhdGUgPD4g
c3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VU0hPUlRfTk9STSwgMj4gOiBWZXJ0ZXhUeXBl
RmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VTSE9SVDJOLCBEM0RERUNMVFlQRV9VU0hPUlQyTj4geyB9
OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VU0hPUlRfTk9STSwg
ND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VTSE9SVDROLCBEM0RERUNMVFlQ
RV9VU0hPUlQ0Tj4geyB9OwotCi0KLS8vIFZlcnRleFR5cGVNYXBwaW5nIG1hcHMgR0wgdHlwZSAm
IG5vcm1hbGl6ZWQgZmxhZyB0byBwcmVmZXJyZWQgYW5kIGZhbGxiYWNrIEQzRCB2ZXJ0ZXggdHlw
ZXMgKGFzIEQzRFZlcnRleFR5cGUgZW51bXMpLgotdGVtcGxhdGUgPEdMZW51bSBHTHR5cGUsIGJv
b2wgbm9ybWFsaXplZD4KLXN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZwotewotfTsKLQotdGVtcGxh
dGUgPEQzRFZlcnRleFR5cGUgUHJlZmVycmVkLCBEM0RWZXJ0ZXhUeXBlIEZhbGxiYWNrID0gUHJl
ZmVycmVkPgotc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nQmFzZQotewotICAgIGVudW0geyBwcmVm
ZXJyZWQgPSBQcmVmZXJyZWQgfTsKLSAgICBlbnVtIHsgZmFsbGJhY2sgPSBGYWxsYmFjayB9Owot
fTsKLQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0JZVEUsIGZhbHNl
PiAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NI
T1JUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1
Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfQllURSwgdHJ1ZT4gICAgICAgICAgICAgICAgICAgICAg
ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAg
ICAgICAgICAgIC8vIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBw
aW5nPEdMX1VOU0lHTkVEX0JZVEUsIGZhbHNlPiAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1h
cHBpbmdCYXNlPEQzRFZUX1VCWVRFLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAvLyBJZGVu
dGl0eSwgQ2FzdAotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lH
TkVEX0JZVEUsIHRydWU+ICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQz
RFZUX1VCWVRFX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBJZGVudGl0eSwgTm9ybWFs
aXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfU0hPUlQsIGZhbHNl
PiAgICAgICAgICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hP
UlQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5Ci10ZW1wbGF0ZSA8PiBz
dHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfU0hPUlQsIHRydWU+ICAgICAgICAgICAgICAgICAg
ICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlRfTk9STSwgRDNEVlRfRkxP
QVQ+IHsgfTsgICAgIC8vIENhc3QsIE5vcm1hbGl6ZQotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRl
eFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCBmYWxzZT4gICAgICAgICAgICAgIDogVmVy
dGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAg
ICAvLyBDYXN0Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdO
RURfU0hPUlQsIHRydWU+ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNE
VlRfVVNIT1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgIC8vIENhc3QsIE5vcm1hbGl6ZQot
dGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0ZJ
WEVELCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7
IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBGaXhlZFRvRmxvYXQKLXRlbXBsYXRlIDxib29s
IG5vcm1hbGl6ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9GTE9BVCwgbm9ybWFsaXpl
ZD4gICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAg
ICAgICAgICAgICAgLy8gSWRlbnRpdHkKLQotCi0vLyBHaXZlbiBhIEdMIHR5cGUgJiBub3JtIGZs
YWcgYW5kIGEgRDNEIHR5cGUsIENvbnZlcnNpb25SdWxlIHByb3ZpZGVzIHRoZSB0eXBlIGNvbnZl
cnNpb24gcnVsZSAoQ2FzdCwgTm9ybWFsaXplLCBJZGVudGl0eSwgRml4ZWRUb0Zsb2F0KS4KLS8v
IFRoZSBjb252ZXJzaW9uIHJ1bGVzIHRoZW1zZWx2ZXMgYXJlIGRlZmluZWQgaW4gdmVydGV4Y29u
dmVyc2lvbi5oLgotCi0vLyBBbG1vc3QgYWxsIGNhc2VzIGFyZSBjb3ZlcmVkIGJ5IENhc3QgKGlu
Y2x1ZGluZyB0aG9zZSB0aGF0IGFyZSBhY3R1YWxseSBJZGVudGl0eSBzaW5jZSBDYXN0PFQsVD4g
a25vd3MgaXQncyBhbiBpZGVudGl0eSBtYXBwaW5nKS4KLXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5
cGUsIGJvb2wgbm9ybWFsaXplZCwgdW5zaWduZWQgaW50IHRvVHlwZT4KLXN0cnVjdCBDb252ZXJz
aW9uUnVsZSA6IGdsOjpDYXN0PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsIHR5
cGVuYW1lIEQzRFRvQ1R5cGU8dG9UeXBlPjo6dHlwZT4KLXsKLX07Ci0KLS8vIEFsbCBjb252ZXJz
aW9ucyBmcm9tIG5vcm1hbGl6ZWQgdHlwZXMgdG8gZmxvYXQgdXNlIHRoZSBOb3JtYWxpemUgb3Bl
cmF0b3IuCi10ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlPiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8
ZnJvbVR5cGUsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpOb3JtYWxpemU8dHlwZW5hbWUgR0xU
b0NUeXBlPGZyb21UeXBlPjo6dHlwZT4geyB9OwotCi0vLyBVc2UgYSBmdWxsIHNwZWNpYWxpc2F0
aW9uIGZvciB0aGlzIHNvIHRoYXQgaXQgcHJlZmVyZW50aWFsbHkgbWF0Y2hlcyBhaGVhZCBvZiB0
aGUgZ2VuZXJpYyBub3JtYWxpemUtdG8tZmxvYXQgcnVsZXMuCi10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
Q29udmVyc2lvblJ1bGU8R0xfRklYRUQsIHRydWUsIEQzRFZUX0ZMT0FUPiA6IGdsOjpGaXhlZFRv
RmxvYXQ8R0x1aW50LCAxNj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxl
PEdMX0ZJWEVELCBmYWxzZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTHVpbnQs
IDE2PiB7IH07Ci0KLS8vIEEgMi1zdGFnZSBjb25zdHJ1Y3Rpb24gaXMgdXNlZCBmb3IgRGVmYXVs
dFZlcnRleFZhbHVlcyBiZWNhdXNlIGZsb2F0IG11c3QgdXNlIFNpbXBsZURlZmF1bHRWYWx1ZXMg
KGkuZS4gMC8xKQotLy8gd2hldGhlciBpdCBpcyBub3JtYWxpemVkIG9yIG5vdC4KLXRlbXBsYXRl
IDxjbGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+Ci1zdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0
YWdlMgotewotfTsKLQotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFs
dWVzU3RhZ2UyPFQsIHRydWU+ICA6IGdsOjpOb3JtYWxpemVkRGVmYXVsdFZhbHVlczxUPiB7IH07
Ci10ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwg
ZmFsc2U+IDogZ2w6OlNpbXBsZURlZmF1bHRWYWx1ZXM8VD4geyB9OwotCi0vLyBXb3JrIG91dCB0
aGUgZGVmYXVsdCB2YWx1ZSBydWxlIGZvciBhIEQzRCB0eXBlIChleHByZXNzZWQgYXMgdGhlIEMg
dHlwZSkgYW5kIAotdGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wgbm9ybWFsaXplZD4KLXN0cnVjdCBE
ZWZhdWx0VmVydGV4VmFsdWVzIDogRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBub3JtYWxp
emVkPgotewotfTsKLQotdGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3RydWN0IERlZmF1bHRW
ZXJ0ZXhWYWx1ZXM8ZmxvYXQsIG5vcm1hbGl6ZWQ+IDogZ2w6OlNpbXBsZURlZmF1bHRWYWx1ZXM8
ZmxvYXQ+IHsgfTsKLQotLy8gUG9saWN5IHJ1bGVzIGZvciB1c2Ugd2l0aCBDb252ZXJ0ZXIsIHRv
IGNob29zZSB3aGV0aGVyIHRvIHVzZSB0aGUgcHJlZmVycmVkIG9yIGZhbGxiYWNrIGNvbnZlcnNp
b24uCi0vLyBUaGUgZmFsbGJhY2sgY29udmVyc2lvbiBwcm9kdWNlcyBhbiBvdXRwdXQgdGhhdCBh
bGwgRDNEOSBkZXZpY2VzIG11c3Qgc3VwcG9ydC4KLXRlbXBsYXRlIDxjbGFzcyBUPiBzdHJ1Y3Qg
VXNlUHJlZmVycmVkIHsgZW51bSB7IHR5cGUgPSBUOjpwcmVmZXJyZWQgfTsgfTsKLXRlbXBsYXRl
IDxjbGFzcyBUPiBzdHJ1Y3QgVXNlRmFsbGJhY2sgeyBlbnVtIHsgdHlwZSA9IFQ6OmZhbGxiYWNr
IH07IH07Ci0KLS8vIENvbnZlcnRlciB0aWVzIGl0IGFsbCB0b2dldGhlci4gR2l2ZW4gYW4gT3Bl
bkdMIHR5cGUvbm9ybS9zaXplIGFuZCBjaG9pY2Ugb2YgcHJlZmVycmVkL2ZhbGxiYWNrIGNvbnZl
cnNpb24sCi0vLyBpdCBwcm92aWRlcyBhbGwgdGhlIG1lbWJlcnMgb2YgdGhlIGFwcHJvcHJpYXRl
IFZlcnRleERhdGFDb252ZXJ0ZXIsIHRoZSBEM0RDQVBTOTo6RGVjbFR5cGVzIGZsYWcgaW4gY2Fw
IGZsYWcKLS8vIGFuZCB0aGUgRDNEREVDTFRZUEUgbWVtYmVyIG5lZWRlZCBmb3IgdGhlIHZlcnRl
eCBkZWNsYXJhdGlvbiBpbiBkZWNsZmxhZy4KLXRlbXBsYXRlIDxHTGVudW0gZnJvbVR5cGUsIGJv
b2wgbm9ybWFsaXplZCwgaW50IHNpemUsIHRlbXBsYXRlIDxjbGFzcyBUPiBjbGFzcyBQcmVmZXJl
bmNlUnVsZT4KLXN0cnVjdCBDb252ZXJ0ZXIKLSAgICA6IGdsOjpWZXJ0ZXhEYXRhQ29udmVydGVy
PHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBXaWRlblJ1bGU8UHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZy
b21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlLCBzaXplPiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIENvbnZlcnNpb25SdWxlPGZyb21UeXBlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGlu
Zzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT4sCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBEZWZhdWx0VmVydGV4VmFsdWVzPHR5cGVuYW1lIEQzRFRvQ1R5cGU8UHJlZmVyZW5j
ZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlPjo6
dHlwZSwgbm9ybWFsaXplZCA+ID4KLXsKLXByaXZhdGU6Ci0gICAgZW51bSB7IGQzZHR5cGUgPSBQ
cmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46
OnR5cGUgfTsKLSAgICBlbnVtIHsgZDNkc2l6ZSA9IFdpZGVuUnVsZTxkM2R0eXBlLCBzaXplPjo6
ZmluYWxXaWR0aCB9OwotCi1wdWJsaWM6Ci0gICAgZW51bSB7IGNhcGZsYWcgPSBWZXJ0ZXhUeXBl
RmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmNhcGZsYWcgfTsKLSAgICBlbnVtIHsgZGVjbGZsYWcg
PSBWZXJ0ZXhUeXBlRmxhZ3M8ZDNkdHlwZSwgZDNkc2l6ZT46OmRlY2xmbGFnIH07Ci19OwotCi19
Ci0KLW5hbWVzcGFjZSBnbAotewotRHg5QmFja0VuZDo6RHg5QmFja0VuZChDb250ZXh0ICpjb250
ZXh0LCBJRGlyZWN0M0REZXZpY2U5ICpkM2RkZXZpY2UpCi0gICAgOiBtRGV2aWNlKGQzZGRldmlj
ZSkKLXsKLSAgICBtRGV2aWNlLT5BZGRSZWYoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
TUFYX1ZFUlRFWF9BVFRSSUJTOyArK2kpCi0gICAgewotICAgICAgICBtQXBwbGllZEF0dHJpYkVu
YWJsZWRbaV0gPSB0cnVlOwotICAgICAgICBtU3RyZWFtRnJlcXVlbmN5W2ldID0gU1RSRUFNX0ZS
RVFVRU5DWV9VTklOU1RBTkNFRDsKLSAgICB9Ci0KLSAgICBtU3RyZWFtRnJlcXVlbmN5W01BWF9W
RVJURVhfQVRUUklCU10gPSBTVFJFQU1fRlJFUVVFTkNZX1VOSU5TVEFOQ0VEOwotCi0gICAgRDNE
Q0FQUzkgY2FwcyA9IGNvbnRleHQtPmdldERldmljZUNhcHMoKTsKLQotICAgIElEaXJlY3QzRDkg
KmQzZE9iamVjdDsKLSAgICBtRGV2aWNlLT5HZXREaXJlY3QzRCgmZDNkT2JqZWN0KTsKLQotICAg
IEQzREFEQVBURVJfSURFTlRJRklFUjkgaWRlbnQ7Ci0gICAgZDNkT2JqZWN0LT5HZXRBZGFwdGVy
SWRlbnRpZmllcihjYXBzLkFkYXB0ZXJPcmRpbmFsLCAwLCAmaWRlbnQpOwotICAgIGQzZE9iamVj
dC0+UmVsZWFzZSgpOwotCi0gICAgLy8gSW5zdGFuY2luZyBpcyBtYW5kYXRvcnkgZm9yIGFsbCBI
VyB3aXRoIFNNMyB2ZXJ0ZXggc2hhZGVycywgYnV0IGF2b2lkIGhhcmR3YXJlIHdoZXJlIGl0IGRv
ZXMgbm90IHdvcmsuCi0gICAgbVVzZUluc3RhbmNpbmdGb3JTdHJpZGVaZXJvID0gKGNhcHMuVmVy
dGV4U2hhZGVyVmVyc2lvbiA+PSBEM0RWU19WRVJTSU9OKDMsIDApICYmIGlkZW50LlZlbmRvcklk
ICE9IDB4ODA4Nik7Ci0gICAgbVN1cHBvcnRJbnRJbmRpY2VzID0gKGNhcHMuTWF4VmVydGV4SW5k
ZXggPj0gKDEgPDwgMTYpKTsKLQotICAgIGNoZWNrVmVydGV4Q2FwcyhjYXBzLkRlY2xUeXBlcyk7
Ci19Ci0KLUR4OUJhY2tFbmQ6On5EeDlCYWNrRW5kKCkKLXsKLSAgICBtRGV2aWNlLT5SZWxlYXNl
KCk7Ci19Ci0KLWJvb2wgRHg5QmFja0VuZDo6c3VwcG9ydEludEluZGljZXMoKQotewotICAgIHJl
dHVybiBtU3VwcG9ydEludEluZGljZXM7Ci19Ci0KLS8vIEluaXRpYWxpc2UgYSBUcmFuc2xhdGlv
bkluZm8KLSNkZWZpbmUgVFJBTlNMQVRJT04odHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIENvbnZl
cnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+OjppZGVudGl0eSwgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgICAgIENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVm
ZXJyZWQ+OjpmaW5hbFNpemUsICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIENv
bnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQ+Ojpjb252ZXJ0QXJyYXksICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgc3Rh
dGljX2Nhc3Q8RDNEREVDTFRZUEU+KENvbnZlcnRlcjx0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJy
ZWQ+OjpkZWNsZmxhZykgIFwKLSAgICB9Ci0KLSNkZWZpbmUgVFJBTlNMQVRJT05fRk9SX1RZUEVf
Tk9STV9TSVpFKHR5cGUsIG5vcm0sIHNpemUpICAgIFwKLSAgICB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgQ29udmVydGVy
PHR5cGUsIG5vcm0sIHNpemUsIFVzZVByZWZlcnJlZD46OmNhcGZsYWcsIFwKLSAgICAgICAgVFJB
TlNMQVRJT04odHlwZSwgbm9ybSwgc2l6ZSwgVXNlUHJlZmVycmVkKSwgICAgICAgIFwKLSAgICAg
ICAgVFJBTlNMQVRJT04odHlwZSwgbm9ybSwgc2l6ZSwgVXNlRmFsbGJhY2spICAgICAgICAgIFwK
LSAgICB9Ci0KLSNkZWZpbmUgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKHR5cGUpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQRV9O
T1JNX1NJWkUodHlwZSwgZmFsc2UsIDEpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUo
dHlwZSwgZmFsc2UsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFs
c2UsIDMpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgZmFsc2UsIDQpIH0s
IFwKLSAgICAgICAgeyBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwg
MSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAyKSwgVFJBTlNM
QVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDMpLCBUUkFOU0xBVElPTl9GT1Jf
VFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgNCkgfSwgICAgIFwKLSAgICB9Ci0KLWNvbnN0IER4
OUJhY2tFbmQ6OlRyYW5zbGF0aW9uRGVzY3JpcHRpb24gRHg5QmFja0VuZDo6bVBvc3NpYmxlVHJh
bnNsYXRpb25zW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XSA9IC8vIFtHTCB0eXBl
cyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplLTFdCi17Ci0g
ICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX0JZVEUpLAotICAgIFRSQU5TTEFUSU9OU19GT1Jf
VFlQRShHTF9VTlNJR05FRF9CWVRFKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfU0hP
UlQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9VTlNJR05FRF9TSE9SVCksCi0gICAg
VFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX0ZJWEVEKSwKLSAgICBUUkFOU0xBVElPTlNfRk9SX1RZ
UEUoR0xfRkxPQVQpCi19OwotCi12b2lkIER4OUJhY2tFbmQ6OmNoZWNrVmVydGV4Q2FwcyhEV09S
RCBkZWNsVHlwZXMpCi17Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBOVU1fR0xf
VkVSVEVYX0FUVFJJQl9UWVBFUzsgaSsrKQotICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaiA9IDA7IGogPCAyOyBqKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGsgPSAwOyBrIDwgNDsgaysrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGlmIChtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1ba10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVj
bFR5cGVzICYgbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLmNhcHNGbGFnKSAhPSAwKQot
ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbUF0dHJpYnV0ZVR5cGVzW2ld
W2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ldW2pdW2tdLnByZWZlcnJlZENvbnZlcnNp
b247Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG1BdHRyaWJ1dGVUeXBlc1tpXVtqXVtrXSA9IG1Q
b3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5mYWxsYmFja0NvbnZlcnNpb247Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1UcmFuc2xh
dGVkVmVydGV4QnVmZmVyICpEeDlCYWNrRW5kOjpjcmVhdGVWZXJ0ZXhCdWZmZXIoc3RkOjpzaXpl
X3Qgc2l6ZSkKLXsKLSAgICByZXR1cm4gbmV3IER4OVZlcnRleEJ1ZmZlcihtRGV2aWNlLCBzaXpl
KTsKLX0KLQotVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqRHg5QmFja0VuZDo6Y3JlYXRlVmVydGV4
QnVmZmVyRm9yU3RyaWRlWmVybyhzdGQ6OnNpemVfdCBzaXplKQotewotICAgIGlmIChtVXNlSW5z
dGFuY2luZ0ZvclN0cmlkZVplcm8pCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IER4OVZlcnRl
eEJ1ZmZlcihtRGV2aWNlLCBzaXplKTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG5ldyBEeDlWZXJ0ZXhCdWZmZXJaZXJvU3RyaWRlV29ya2Fyb3VuZChtRGV2aWNlLCBz
aXplKTsKLSAgICB9Ci19Ci0KLVRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqRHg5QmFja0VuZDo6Y3Jl
YXRlSW5kZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSwgR0xlbnVtIHR5cGUpCi17Ci0gICAgcmV0
dXJuIG5ldyBEeDlJbmRleEJ1ZmZlcihtRGV2aWNlLCBzaXplLCB0eXBlKTsKLX0KLQotLy8gVGhp
cyBpcyB1c2VkIHRvIGluZGV4IG1BdHRyaWJ1dGVUeXBlcyBhbmQgbVBvc3NpYmxlVHJhbnNsYXRp
b25zLgotdW5zaWduZWQgaW50IER4OUJhY2tFbmQ6OnR5cGVJbmRleChHTGVudW0gdHlwZSkgY29u
c3QKLXsKLSAgICBzd2l0Y2ggKHR5cGUpCi0gICAgewotICAgICAgY2FzZSBHTF9CWVRFOiByZXR1
cm4gMDsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURTogcmV0dXJuIDE7Ci0gICAgICBjYXNl
IEdMX1NIT1JUOiByZXR1cm4gMjsKLSAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6IHJldHVy
biAzOwotICAgICAgY2FzZSBHTF9GSVhFRDogcmV0dXJuIDQ7Ci0gICAgICBjYXNlIEdMX0ZMT0FU
OiByZXR1cm4gNTsKLQotICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgcmV0dXJuIDU7Ci0g
ICAgfQotfQotCi1Gb3JtYXRDb252ZXJ0ZXIgRHg5QmFja0VuZDo6Z2V0Rm9ybWF0Q29udmVydGVy
KEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCBzaXplLCBib29sIG5vcm1hbGl6ZSkKLXsKLSAgICBy
ZXR1cm4gbUF0dHJpYnV0ZVR5cGVzW3R5cGVJbmRleCh0eXBlKV1bbm9ybWFsaXplXVtzaXplLTFd
LmZvcm1hdENvbnZlcnRlcjsKLX0KLQotRDNEREVDTFRZUEUgRHg5QmFja0VuZDo6bWFwQXR0cmli
dXRlVHlwZShHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwgYm9vbCBub3JtYWxpemUpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1BdHRyaWJ1dGVUeXBlc1t0eXBlSW5kZXgodHlwZSldW25vcm1h
bGl6ZV1bc2l6ZS0xXS5kM2REZWNsVHlwZTsKLX0KLQotYm9vbCBEeDlCYWNrRW5kOjp2YWxpZGF0
ZVN0cmVhbShHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwgc3RkOjpzaXplX3Qgc3RyaWRl
LCBzdGQ6OnNpemVfdCBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgLy8gRDNEOSByZXF1aXJlcyB0aGUg
c3RyZWFtIG9mZnNldCBhbmQgc3RyaWRlIHRvIGJlIGEgbXVsdGlwbGUgb2YgRFdPUkQuCi0gICAg
cmV0dXJuIChzdHJpZGUgJSBzaXplb2YoRFdPUkQpID09IDAgJiYgb2Zmc2V0ICUgc2l6ZW9mKERX
T1JEKSA9PSAwKTsKLX0KLQotSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqRHg5QmFja0VuZDo6Z2V0
RHhCdWZmZXIoVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqdmIpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IHZiID8gc3RhdGljX2Nhc3Q8RHg5VmVydGV4QnVmZmVyKj4odmIpLT5nZXRCdWZmZXIoKSA6IE5V
TEw7Ci19Ci0KLUlEaXJlY3QzREluZGV4QnVmZmVyOSAqRHg5QmFja0VuZDo6Z2V0RHhCdWZmZXIo
VHJhbnNsYXRlZEluZGV4QnVmZmVyICppYikgY29uc3QKLXsKLSAgICByZXR1cm4gaWIgPyBzdGF0
aWNfY2FzdDxEeDlJbmRleEJ1ZmZlcio+KGliKS0+Z2V0QnVmZmVyKCkgOiBOVUxMOwotfQotCi1H
TGVudW0gRHg5QmFja0VuZDo6c2V0dXBJbmRpY2VzUHJlRHJhdyhjb25zdCBUcmFuc2xhdGVkSW5k
ZXhEYXRhICZpbmRleEluZm8pCi17Ci0gICAgbURldmljZS0+U2V0SW5kaWNlcyhnZXREeEJ1ZmZl
cihpbmRleEluZm8uYnVmZmVyKSk7Ci0gICAgcmV0dXJuIEdMX05PX0VSUk9SOwotfQotCi1HTGVu
dW0gRHg5QmFja0VuZDo6c2V0dXBBdHRyaWJ1dGVzUHJlRHJhdyhjb25zdCBUcmFuc2xhdGVkQXR0
cmlidXRlICphdHRyaWJ1dGVzKQotewotICAgIEhSRVNVTFQgaHI7Ci0KLSAgICBEM0RWRVJURVhF
TEVNRU5UOSBlbGVtZW50c1tNQVhfVkVSVEVYX0FUVFJJQlMrMV07Ci0KLSAgICBEM0RWRVJURVhF
TEVNRU5UOSAqbmV4dEVsZW1lbnQgPSAmZWxlbWVudHNbMF07Ci0KLSAgICBmb3IgKEJZVEUgaSA9
IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChhdHRy
aWJ1dGVzW2ldLmVuYWJsZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5leHRFbGVtZW50LT5T
dHJlYW0gPSBpICsgMTsgICAgLy8gU3RyZWFtIDAgaXMgc2tpcHBlZCBiZWNhdXNlIEQzRCBkb2Vz
IG5vdCBwZXJtaXQgaXQgdG8gYmUgYW4gaW5zdGFuY2VkIHN0cmVhbS4KLSAgICAgICAgICAgIG5l
eHRFbGVtZW50LT5PZmZzZXQgPSAwOwotICAgICAgICAgICAgbmV4dEVsZW1lbnQtPlR5cGUgPSBz
dGF0aWNfY2FzdDxCWVRFPihtYXBBdHRyaWJ1dGVUeXBlKGF0dHJpYnV0ZXNbaV0udHlwZSwgYXR0
cmlidXRlc1tpXS5zaXplLCBhdHRyaWJ1dGVzW2ldLm5vcm1hbGl6ZWQpKTsKLSAgICAgICAgICAg
IG5leHRFbGVtZW50LT5NZXRob2QgPSBEM0RERUNMTUVUSE9EX0RFRkFVTFQ7Ci0gICAgICAgICAg
ICBuZXh0RWxlbWVudC0+VXNhZ2UgPSBEM0RERUNMVVNBR0VfVEVYQ09PUkQ7Ci0gICAgICAgICAg
ICBuZXh0RWxlbWVudC0+VXNhZ2VJbmRleCA9IGF0dHJpYnV0ZXNbaV0uc2VtYW50aWNJbmRleDsK
LSAgICAgICAgICAgIG5leHRFbGVtZW50Kys7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzdGF0
aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkgZW5kID0gRDNEREVDTF9FTkQoKTsKLSAgICAqbmV4
dEVsZW1lbnQgPSBlbmQ7Ci0KLSAgICBJRGlyZWN0M0RWZXJ0ZXhEZWNsYXJhdGlvbjkqIHZlcnRl
eERlY2xhcmF0aW9uOwotICAgIGhyID0gbURldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRpb24o
ZWxlbWVudHMsICZ2ZXJ0ZXhEZWNsYXJhdGlvbik7Ci0gICAgbURldmljZS0+U2V0VmVydGV4RGVj
bGFyYXRpb24odmVydGV4RGVjbGFyYXRpb24pOwotICAgIHZlcnRleERlY2xhcmF0aW9uLT5SZWxl
YXNlKCk7Ci0KLSAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoMCwgTlVMTCwgMCwgMCk7Ci0K
LSAgICBib29sIG5vbkFycmF5QXR0cmlidXRlcyA9IGZhbHNlOwotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKLSAgICB7Ci0gICAgICAgIGlmIChh
dHRyaWJ1dGVzW2ldLmVuYWJsZWQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1
dGVzW2ldLm5vbkFycmF5KSBub25BcnJheUF0dHJpYnV0ZXMgPSB0cnVlOwotCi0gICAgICAgICAg
ICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2UoaSArIDEsIGdldER4QnVmZmVyKGF0dHJpYnV0ZXNb
aV0uYnVmZmVyKSwgYXR0cmlidXRlc1tpXS5vZmZzZXQsIGF0dHJpYnV0ZXNbaV0uc3RyaWRlKTsK
LSAgICAgICAgICAgIGlmICghbUFwcGxpZWRBdHRyaWJFbmFibGVkW2ldKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIG1BcHBsaWVkQXR0cmliRW5hYmxlZFtpXSA9IHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAg
ICBpZiAobUFwcGxpZWRBdHRyaWJFbmFibGVkW2ldKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZShpICsgMSwgMCwgMCwgMCk7Ci0gICAgICAg
ICAgICAgICAgbUFwcGxpZWRBdHRyaWJFbmFibGVkW2ldID0gZmFsc2U7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobVVzZUluc3RhbmNpbmdGb3JTdHJpZGVaZXJv
KQotICAgIHsKLSAgICAgICAgLy8gV2hlbiB0aGVyZSBhcmUgbm8gc3RyaWRlIHplcm8gYXR0cmli
dXRlcywgd2UgZGlzYWJsZSBpbnN0YW5jaW5nIHNvIHRoYXQgRHJhd1ByaW1pdGl2ZSBjYW4gYmUg
dXNlZC4KLQotICAgICAgICBpZiAobm9uQXJyYXlBdHRyaWJ1dGVzKQotICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAobVN0cmVhbUZyZXF1ZW5jeVswXSAhPSBTVFJFQU1fRlJFUVVFTkNZX0lOREVY
RUQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbVN0cmVhbUZyZXF1ZW5jeVswXSA9
IFNUUkVBTV9GUkVRVUVOQ1lfSU5ERVhFRDsKLSAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRT
dHJlYW1Tb3VyY2VGcmVxKDAsIEQzRFNUUkVBTVNPVVJDRV9JTkRFWEVEREFUQSB8IDEpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmIChhdHRy
aWJ1dGVzW2ldLmVuYWJsZWQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoYXR0cmlidXRlc1tpXS5ub25BcnJheSkKLSAgICAgICAgICAgICAgICAgICAgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKG1TdHJlYW1GcmVxdWVuY3lbaSsxXSAhPSBTVFJFQU1f
RlJFUVVFTkNZX0lOU1RBTkNFRCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtU3RyZWFtRnJlcXVlbmN5W2krMV0gPSBTVFJFQU1fRlJFUVVF
TkNZX0lOU1RBTkNFRDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRT
dHJlYW1Tb3VyY2VGcmVxKGkgKyAxLCBEM0RTVFJFQU1TT1VSQ0VfSU5TVEFOQ0VEQVRBIHwgMSk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZiAobVN0cmVhbUZyZXF1ZW5jeVtpKzFdICE9IFNUUkVBTV9GUkVRVUVOQ1lf
SU5ERVhFRCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtU3RyZWFtRnJlcXVlbmN5W2krMV0gPSBTVFJFQU1fRlJFUVVFTkNZX0lOREVYRUQ7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJl
cShpICsgMSwgRDNEU1RSRUFNU09VUkNFX0lOREVYRUREQVRBIHwgMSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUyArIDE7IGkrKykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAobVN0cmVhbUZyZXF1ZW5jeVtpXSAh
PSBTVFJFQU1fRlJFUVVFTkNZX1VOSU5TVEFOQ0VEKQotICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgbVN0cmVhbUZyZXF1ZW5jeVtpXSA9IFNUUkVBTV9GUkVRVUVOQ1lfVU5J
TlNUQU5DRUQ7Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgbm90IGJlIG5l
ZWRlZCwgYnV0IG90aGVyd2lzZSB0aGVyZSBpcyBhIGJ1Z2d5IGRyaXZlciB0aGF0IHdpbGwgbGVh
dmUgaW5zdGFuY2luZwotICAgICAgICAgICAgICAgICAgICAvLyBlbmFibGVkIGZvciB0aGUgZmly
c3QgZHJhdyBhZnRlciBpdCBoYXMgYmVlbiB0dXJuZWQgb2ZmLgotICAgICAgICAgICAgICAgICAg
ICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIEQzRFNUUkVBTVNPVVJDRV9JTkRFWEVE
REFUQSB8IDEpOwotCi0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJj
ZUZyZXEoaSwgMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIEdMX05PX0VSUk9SOwotfQotCi1EeDlCYWNrRW5kOjpEeDlW
ZXJ0ZXhCdWZmZXI6OkR4OVZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0
ZDo6c2l6ZV90IHNpemUpCi0gICAgOiBUcmFuc2xhdGVkVmVydGV4QnVmZmVyKHNpemUpCi17Ci0g
ICAgSFJFU1VMVCBociA9IGRldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVyKHNpemUsIEQzRFVTQUdF
X0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFksIDAsIEQzRFBPT0xfREVGQVVMVCwgJm1WZXJ0
ZXhCdWZmZXIsIE5VTEwpOwotICAgIGlmIChociAhPSBTX09LKQotICAgIHsKLSAgICAgICAgRVJS
KCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIs
IHNpemUpOwotICAgICAgICB0aHJvdyBzdGQ6OmJhZF9hbGxvYygpOwotICAgIH0KLX0KLQotRHg5
QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyOjpEeDlWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplLCBEV09SRCB1c2FnZUZsYWdzKQotICAgIDogVHJh
bnNsYXRlZFZlcnRleEJ1ZmZlcihzaXplKQotewotICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPkNy
ZWF0ZVZlcnRleEJ1ZmZlcihzaXplLCB1c2FnZUZsYWdzLCAwLCBEM0RQT09MX0RFRkFVTFQsICZt
VmVydGV4QnVmZmVyLCBOVUxMKTsKLSAgICBpZiAoaHIgIT0gU19PSykKLSAgICB7Ci0gICAgICAg
IEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBvZiBzaXplICVs
dS4iLCBzaXplKTsKLSAgICAgICAgdGhyb3cgc3RkOjpiYWRfYWxsb2MoKTsKLSAgICB9Ci19Ci0K
LQotRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyOjp+RHg5VmVydGV4QnVmZmVyKCkKLXsKLSAg
ICBtVmVydGV4QnVmZmVyLT5SZWxlYXNlKCk7Ci19Ci0KLUlEaXJlY3QzRFZlcnRleEJ1ZmZlcjkg
KkR4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6Z2V0QnVmZmVyKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbVZlcnRleEJ1ZmZlcjsKLX0KLQotdm9pZCAqRHg5QmFja0VuZDo6RHg5VmVydGV4QnVm
ZmVyOjptYXAoKQotewotICAgIHZvaWQgKm1hcFB0cjsKLQotICAgIG1WZXJ0ZXhCdWZmZXItPkxv
Y2soMCwgMCwgJm1hcFB0ciwgMCk7Ci0KLSAgICByZXR1cm4gbWFwUHRyOwotfQotCi12b2lkIER4
OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6dW5tYXAoKQotewotICAgIG1WZXJ0ZXhCdWZmZXIt
PlVubG9jaygpOwotfQotCi12b2lkIER4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6cmVjeWNs
ZSgpCi17Ci0gICAgdm9pZCAqZHVtbXk7Ci0gICAgbVZlcnRleEJ1ZmZlci0+TG9jaygwLCAxLCAm
ZHVtbXksIEQzRExPQ0tfRElTQ0FSRCk7Ci0gICAgbVZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7Ci19
Ci0KLXZvaWQgKkR4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6c3RyZWFtaW5nTWFwKHN0ZDo6
c2l6ZV90IG9mZnNldCwgc3RkOjpzaXplX3Qgc2l6ZSkKLXsKLSAgICB2b2lkICptYXBQdHI7Ci0K
LSAgICBtVmVydGV4QnVmZmVyLT5Mb2NrKG9mZnNldCwgc2l6ZSwgJm1hcFB0ciwgRDNETE9DS19O
T09WRVJXUklURSk7Ci0KLSAgICByZXR1cm4gbWFwUHRyOwotfQotCi0vLyBOb3JtYWxseSBWQnMg
YXJlIGNyZWF0ZWQgd2l0aCBEM0RVU0FHRV9XUklURU9OTFkgfCBEM0RVU0FHRV9EWU5BTUlDLCBi
dXQgc29tZSBoYXJkd2FyZSAmIGRyaXZlcnMgd29uJ3QgcmVuZGVyCi0vLyBpZiBhbnkgc3RyaWRl
LXplcm8gc3RyZWFtcyBhcmUgaW4gRDNEVVNBR0VfRFlOQU1JQyBWQnMsIHNvIHRoaXMgcHJvdmlk
ZXMgYSB3YXkgdG8gY3JlYXRlIHN1Y2ggVkJzIHdpdGggb25seSBEM0RVU0FHRV9XUklURU9OTFkg
c2V0LgotLy8gRDNETE9DS19ESVNDQVJEIGFuZCBEM0RMT0NLX05PT1ZFUldSSVRFIGFyZSBvbmx5
IGF2YWlsYWJsZSBvbiBEM0RVU0FHRV9EWU5BTUlDIFZCcywgc28gd2Ugb3ZlcnJpZGUgbWV0aG9k
cyB0byBhdm9pZCB1c2luZyB0aGVzZSBmbGFncy4KLUR4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZl
clplcm9TdHJpZGVXb3JrYXJvdW5kOjpEeDlWZXJ0ZXhCdWZmZXJaZXJvU3RyaWRlV29ya2Fyb3Vu
ZChJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUpCi0gICAgOiBEeDlW
ZXJ0ZXhCdWZmZXIoZGV2aWNlLCBzaXplLCBEM0RVU0FHRV9XUklURU9OTFkpCi17Ci19Ci0KLXZv
aWQgRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdvcmthcm91bmQ6OnJlY3lj
bGUoKQotewotfQotCi12b2lkICpEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXJaZXJvU3RyaWRl
V29ya2Fyb3VuZDo6c3RyZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXplX3Qg
c2l6ZSkKLXsKLSAgICB2b2lkICptYXBQdHI7Ci0KLSAgICBnZXRCdWZmZXIoKS0+TG9jayhvZmZz
ZXQsIHNpemUsICZtYXBQdHIsIDApOwotCi0gICAgcmV0dXJuIG1hcFB0cjsKLX0KLQotRHg5QmFj
a0VuZDo6RHg5SW5kZXhCdWZmZXI6OkR4OUluZGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRl
dmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgR0xlbnVtIHR5cGUpCi0gICAgOiBUcmFuc2xhdGVkSW5k
ZXhCdWZmZXIoc2l6ZSkKLXsKLSAgICBBU1NFUlQodHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVCB8
fCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVCk7Ci0KLSAgICBEM0RGT1JNQVQgZm9ybWF0ID0gKHR5
cGUgPT0gR0xfVU5TSUdORURfU0hPUlQpID8gRDNERk1UX0lOREVYMTYgOiBEM0RGTVRfSU5ERVgz
MjsKLQotICAgIEhSRVNVTFQgaHIgPSBkZXZpY2UtPkNyZWF0ZUluZGV4QnVmZmVyKHNpemUsIEQz
RFVTQUdFX0RZTkFNSUMgfCBEM0RVU0FHRV9XUklURU9OTFksIGZvcm1hdCwgRDNEUE9PTF9ERUZB
VUxULCAmbUluZGV4QnVmZmVyLCBOVUxMKTsKLSAgICBpZiAoaHIgIT0gU19PSykKLSAgICB7Ci0g
ICAgICAgIEVSUigiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGFuIGluZGV4IGJ1ZmZlciBvZiBz
aXplICVsdS4iLCBzaXplKTsKLSAgICAgICAgdGhyb3cgc3RkOjpiYWRfYWxsb2MoKTsKLSAgICB9
Ci19Ci0KLUR4OUJhY2tFbmQ6OkR4OUluZGV4QnVmZmVyOjp+RHg5SW5kZXhCdWZmZXIoKQotewot
ICAgIG1JbmRleEJ1ZmZlci0+UmVsZWFzZSgpOwotfQotCi1JRGlyZWN0M0RJbmRleEJ1ZmZlcjkq
RHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6OmdldEJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1JbmRleEJ1ZmZlcjsKLX0KLQotdm9pZCAqRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6
Om1hcCgpCi17Ci0gICAgdm9pZCAqbWFwUHRyOwotCi0gICAgbUluZGV4QnVmZmVyLT5Mb2NrKDAs
IDAsICZtYXBQdHIsIDApOwotCi0gICAgcmV0dXJuIG1hcFB0cjsKLX0KLQotdm9pZCBEeDlCYWNr
RW5kOjpEeDlJbmRleEJ1ZmZlcjo6dW5tYXAoKQotewotICAgIG1JbmRleEJ1ZmZlci0+VW5sb2Nr
KCk7Ci19Ci0KLXZvaWQgRHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6OnJlY3ljbGUoKQotewot
ICAgIHZvaWQgKmR1bW15OwotICAgIG1JbmRleEJ1ZmZlci0+TG9jaygwLCAxLCAmZHVtbXksIEQz
RExPQ0tfRElTQ0FSRCk7Ci0gICAgbUluZGV4QnVmZmVyLT5VbmxvY2soKTsKLX0KLQotdm9pZCAq
RHg5QmFja0VuZDo6RHg5SW5kZXhCdWZmZXI6OnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZz
ZXQsIHN0ZDo6c2l6ZV90IHNpemUpCi17Ci0gICAgdm9pZCAqbWFwUHRyOwotCi0gICAgbUluZGV4
QnVmZmVyLT5Mb2NrKG9mZnNldCwgc2l6ZSwgJm1hcFB0ciwgRDNETE9DS19OT09WRVJXUklURSk7
Ci0KLSAgICByZXR1cm4gbWFwUHRyOwotfQotCi19CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmgJKHJldmlzaW9uIDc1
ODAxKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9k
eDkuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMzcgKzAsMCBAQAotLy8KLS8vIENvcHlyaWdodCAo
YykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0vLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCi0vLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgotLy8K
LQotLy8gZ2VvbWV0cnkvZHg5Lmg6IERpcmVjdDNEIDktYmFzZWQgaW1wbGVtZW50YXRpb24gb2Yg
QnVmZmVyQmFja0VuZCwgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciBhbmQgVHJhbnNsYXRlZEluZGV4
QnVmZmVyLgotCi0jaWZuZGVmIExJQkdMRVNWMl9HRU9NRVRSWV9EWDlfSF8KLSNkZWZpbmUgTElC
R0xFU1YyX0dFT01FVFJZX0RYOV9IXwotCi0jaW5jbHVkZSA8ZDNkOS5oPgotCi0jaW5jbHVkZSAi
bGliR0xFU3YyL0J1ZmZlci5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5k
LmgiCi0KLW5hbWVzcGFjZSBnbAotewotCi1jbGFzcyBEeDlCYWNrRW5kIDogcHVibGljIEJ1ZmZl
ckJhY2tFbmQKLXsKLSAgcHVibGljOgotICAgIGV4cGxpY2l0IER4OUJhY2tFbmQoQ29udGV4dCAq
Y29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAqZDNkZGV2aWNlKTsKLSAgICB+RHg5QmFja0VuZCgp
OwotCi0gICAgdmlydHVhbCBib29sIHN1cHBvcnRJbnRJbmRpY2VzKCk7Ci0KLSAgICB2aXJ0dWFs
IFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZlcnRleEJ1ZmZlcihzdGQ6OnNpemVfdCBz
aXplKTsKLSAgICB2aXJ0dWFsIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZlcnRleEJ1
ZmZlckZvclN0cmlkZVplcm8oc3RkOjpzaXplX3Qgc2l6ZSk7Ci0gICAgdmlydHVhbCBUcmFuc2xh
dGVkSW5kZXhCdWZmZXIgKmNyZWF0ZUluZGV4QnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUsIEdMZW51
bSB0eXBlKTsKLSAgICB2aXJ0dWFsIEZvcm1hdENvbnZlcnRlciBnZXRGb3JtYXRDb252ZXJ0ZXIo
R0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUsIGJvb2wgbm9ybWFsaXplKTsKLQotICAgIHZp
cnR1YWwgYm9vbCB2YWxpZGF0ZVN0cmVhbShHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwg
c3RkOjpzaXplX3Qgc3RyaWRlLCBzdGQ6OnNpemVfdCBvZmZzZXQpIGNvbnN0OwotCi0gICAgdmly
dHVhbCBHTGVudW0gc2V0dXBJbmRpY2VzUHJlRHJhdyhjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRh
ICZpbmRleEluZm8pOwotICAgIHZpcnR1YWwgR0xlbnVtIHNldHVwQXR0cmlidXRlc1ByZURyYXco
Y29uc3QgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqYXR0cmlidXRlcyk7Ci0KLSAgcHJpdmF0ZToKLSAg
ICBJRGlyZWN0M0REZXZpY2U5ICptRGV2aWNlOwotCi0gICAgYm9vbCBtVXNlSW5zdGFuY2luZ0Zv
clN0cmlkZVplcm87Ci0gICAgYm9vbCBtU3VwcG9ydEludEluZGljZXM7Ci0KLSAgICBib29sIG1B
cHBsaWVkQXR0cmliRW5hYmxlZFtNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAgZW51bSBTdHJl
YW1GcmVxdWVuY3kKLSAgICB7Ci0gICAgICAgIFNUUkVBTV9GUkVRVUVOQ1lfVU5JTlNUQU5DRUQg
PSAwLAotICAgICAgICBTVFJFQU1fRlJFUVVFTkNZX0lOREVYRUQsCi0gICAgICAgIFNUUkVBTV9G
UkVRVUVOQ1lfSU5TVEFOQ0VECi0gICAgfTsKLQotICAgIFN0cmVhbUZyZXF1ZW5jeSBtU3RyZWFt
RnJlcXVlbmN5W01BWF9WRVJURVhfQVRUUklCUysxXTsKLQotICAgIHN0cnVjdCBUcmFuc2xhdGlv
bkluZm8KLSAgICB7Ci0gICAgICAgIEZvcm1hdENvbnZlcnRlciBmb3JtYXRDb252ZXJ0ZXI7Ci0g
ICAgICAgIEQzRERFQ0xUWVBFIGQzZERlY2xUeXBlOwotICAgIH07Ci0KLSAgICBlbnVtIHsgTlVN
X0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07Ci0KLSAgICBUcmFuc2xhdGlvbkluZm8gbUF0
dHJpYnV0ZVR5cGVzW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsgLy8gW0dMIHR5
cGVzIGFzIGVudW1lcmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUtMV0KLQot
ICAgIHN0cnVjdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uCi0gICAgewotICAgICAgICBEV09SRCBj
YXBzRmxhZzsKLSAgICAgICAgVHJhbnNsYXRpb25JbmZvIHByZWZlcnJlZENvbnZlcnNpb247Ci0g
ICAgICAgIFRyYW5zbGF0aW9uSW5mbyBmYWxsYmFja0NvbnZlcnNpb247Ci0gICAgfTsKLQotICAg
IC8vIFRoaXMgdGFibGUgaXMgdXNlZCB0byBnZW5lcmF0ZSBtQXR0cmlidXRlVHlwZXMuCi0gICAg
c3RhdGljIGNvbnN0IFRyYW5zbGF0aW9uRGVzY3JpcHRpb24gbVBvc3NpYmxlVHJhbnNsYXRpb25z
W05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsgLy8gW0dMIHR5cGVzIGFzIGVudW1l
cmF0ZWQgYnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUtMV0KLQotICAgIHZvaWQgY2hl
Y2tWZXJ0ZXhDYXBzKERXT1JEIGRlY2xUeXBlcyk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgdHlwZUlu
ZGV4KEdMZW51bSB0eXBlKSBjb25zdDsKLQotICAgIGNsYXNzIER4OVZlcnRleEJ1ZmZlciA6IHB1
YmxpYyBUcmFuc2xhdGVkVmVydGV4QnVmZmVyCi0gICAgewotICAgICAgcHVibGljOgotICAgICAg
ICBEeDlWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBz
aXplKTsKLSAgICAgICAgdmlydHVhbCB+RHg5VmVydGV4QnVmZmVyKCk7Ci0KLSAgICAgICAgSURp
cmVjdDNEVmVydGV4QnVmZmVyOSAqZ2V0QnVmZmVyKCkgY29uc3Q7Ci0KLSAgICAgIHByb3RlY3Rl
ZDoKLSAgICAgICAgRHg5VmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3Rk
OjpzaXplX3Qgc2l6ZSwgRFdPUkQgdXNhZ2VGbGFncyk7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lk
ICptYXAoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVubWFwKCk7Ci0KLSAgICAgICAgdmlydHVh
bCB2b2lkIHJlY3ljbGUoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkICpzdHJlYW1pbmdNYXAoc3Rk
OjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXplKTsKLQotICAgICAgcHJpdmF0ZToKLSAg
ICAgICAgSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqbVZlcnRleEJ1ZmZlcjsKLSAgICB9OwotCi0g
ICAgY2xhc3MgRHg5VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdvcmthcm91bmQgOiBwdWJsaWMgRHg5
VmVydGV4QnVmZmVyCi0gICAgewotICAgICAgcHVibGljOgotICAgICAgICBEeDlWZXJ0ZXhCdWZm
ZXJaZXJvU3RyaWRlV29ya2Fyb3VuZChJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6
ZV90IHNpemUpOwotCi0gICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCByZWN5
Y2xlKCk7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCAqc3RyZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9m
ZnNldCwgc3RkOjpzaXplX3Qgc2l6ZSk7Ci0gICAgfTsKLQotICAgIGNsYXNzIER4OUluZGV4QnVm
ZmVyIDogcHVibGljIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlcgotICAgIHsKLSAgICAgIHB1YmxpYzoK
LSAgICAgICAgRHg5SW5kZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNp
emVfdCBzaXplLCBHTGVudW0gdHlwZSk7Ci0gICAgICAgIHZpcnR1YWwgfkR4OUluZGV4QnVmZmVy
KCk7Ci0KLSAgICAgICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICpnZXRCdWZmZXIoKSBjb25zdDsK
LQotICAgICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIHZvaWQgKm1hcCgpOwotICAgICAg
ICB2aXJ0dWFsIHZvaWQgdW5tYXAoKTsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjeWNsZSgp
OwotICAgICAgICB2aXJ0dWFsIHZvaWQgKnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQs
IHN0ZDo6c2l6ZV90IHNpemUpOwotCi0gICAgICBwcml2YXRlOgotICAgICAgICBJRGlyZWN0M0RJ
bmRleEJ1ZmZlcjkgKm1JbmRleEJ1ZmZlcjsKLSAgICB9OwotCi0gICAgSURpcmVjdDNEVmVydGV4
QnVmZmVyOSAqZ2V0RHhCdWZmZXIoVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqdmIpIGNvbnN0Owot
ICAgIElEaXJlY3QzREluZGV4QnVmZmVyOSAqZ2V0RHhCdWZmZXIoVHJhbnNsYXRlZEluZGV4QnVm
ZmVyICppYikgY29uc3Q7Ci0KLSAgICBEM0RERUNMVFlQRSBtYXBBdHRyaWJ1dGVUeXBlKEdMZW51
bSB0eXBlLCBzdGQ6OnNpemVfdCBzaXplLCBib29sIG5vcm1hbGl6ZWQpIGNvbnN0OwotfTsKLQot
fQotCi0jZW5kaWYgICAvLyBMSUJHTEVTVjJfR0VPTUVUUllfRFg5X0hfCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3NTg3MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIyIEBACisyMDExLTAxLTE0ICBCZW4gVmFuaWsgIDxiZW4udmFuaWtA
Z21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFVwZGF0aW5nIEFOR0xFIGluIFdlYktpdCB0byByNTMzLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDcxOTQKKworICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFOR0xF
V2ViS2l0QnJpZGdlOjpBTkdMRVdlYktpdEJyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpBTkdM
RVdlYktpdEJyaWRnZTo6fkFOR0xFV2ViS2l0QnJpZGdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFO
R0xFV2ViS2l0QnJpZGdlOjp2YWxpZGF0ZVNoYWRlclNvdXJjZSk6CisgICAgICAgIFVwZGF0ZSB0
byBuZXcgQU5HTEUgQVBJIGZvciBzaGFkZXIgdmFsaWRhdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5oOgorICAgICAgICAoV2ViQ29yZTo6QU5HTEVX
ZWJLaXRCcmlkZ2U6OnNldFJlc291cmNlcyk6IAorICAgICAgICBSZW5hbWluZyB0eXBlcyB0byBu
ZXcgbmFtZXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4
dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNz
Q29udGV4dDNEKToKKyAgICAgICAgSW5pdGlhbGl6ZSBBTkdMRVJlc291cmNlcyB3aXRoIEFOR0xF
IGluaXQgY2FsbCB0byBwcmV2ZW50IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLgorCiAyMDExLTAx
LTE0ICBTYW0gTWFnbnVzb24gIDxzbWFnbnVzb0BnbWFpbC5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwCShyZXZp
c2lvbiA3NTgwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2Vi
S2l0QnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMjQgKzMzLDM3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogCiBBTkdMRVdlYktpdEJyaWRnZTo6QU5HTEVXZWJLaXRCcmlkZ2UoKSA6
Ci0gICAgYnVpbHRDb21waWxlcnMoZmFsc2UpCisgICAgYnVpbHRDb21waWxlcnMoZmFsc2UpLAor
ICAgIG1fZnJhZ21lbnRDb21waWxlcigwKSwKKyAgICBtX3ZlcnRleENvbXBpbGVyKDApCiB7CiAg
ICAgU2hJbml0aWFsaXplKCk7CiB9CiAKIEFOR0xFV2ViS2l0QnJpZGdlOjp+QU5HTEVXZWJLaXRC
cmlkZ2UoKQogewotICAgIGlmIChidWlsdENvbXBpbGVycykgeworICAgIGlmIChtX2ZyYWdtZW50
Q29tcGlsZXIpCiAgICAgICAgIFNoRGVzdHJ1Y3QobV9mcmFnbWVudENvbXBpbGVyKTsKKyAgICBt
X2ZyYWdtZW50Q29tcGlsZXIgPSAwOworICAgIGlmIChtX3ZlcnRleENvbXBpbGVyKQogICAgICAg
ICBTaERlc3RydWN0KG1fdmVydGV4Q29tcGlsZXIpOwotICAgIH0KKyAgICBtX3ZlcnRleENvbXBp
bGVyID0gMDsKIH0KIAogYm9vbCBBTkdMRVdlYktpdEJyaWRnZTo6dmFsaWRhdGVTaGFkZXJTb3Vy
Y2UoY29uc3QgY2hhciogc2hhZGVyU291cmNlLCBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZSwg
U3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVyU291cmNlLCBTdHJpbmcmIHNoYWRlclZhbGlkYXRpb25M
b2cpCiB7CiAgICAgaWYgKCFidWlsdENvbXBpbGVycykgewotICAgICAgICBtX2ZyYWdtZW50Q29t
cGlsZXIgPSBTaENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmdGcmFnbWVudCwgRVNoU3BlY1dlYkdM
LCAmbV9yZXNvdXJjZXMpOwotICAgICAgICBtX3ZlcnRleENvbXBpbGVyID0gU2hDb25zdHJ1Y3RD
b21waWxlcihFU2hMYW5nVmVydGV4LCBFU2hTcGVjV2ViR0wsICZtX3Jlc291cmNlcyk7CisgICAg
ICAgIG1fZnJhZ21lbnRDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoU0hfRlJBR01FTlRf
U0hBREVSLCBTSF9XRUJHTF9TUEVDLCAmbV9yZXNvdXJjZXMpOworICAgICAgICBtX3ZlcnRleENv
bXBpbGVyID0gU2hDb25zdHJ1Y3RDb21waWxlcihTSF9WRVJURVhfU0hBREVSLCBTSF9XRUJHTF9T
UEVDLCAmbV9yZXNvdXJjZXMpOworICAgICAgICBpZiAoIW1fZnJhZ21lbnRDb21waWxlciB8fCAh
bV92ZXJ0ZXhDb21waWxlcikgeworICAgICAgICAgICAgaWYgKG1fZnJhZ21lbnRDb21waWxlcikK
KyAgICAgICAgICAgICAgICBTaERlc3RydWN0KG1fZnJhZ21lbnRDb21waWxlcik7CisgICAgICAg
ICAgICBtX2ZyYWdtZW50Q29tcGlsZXIgPSAwOworICAgICAgICAgICAgaWYgKG1fdmVydGV4Q29t
cGlsZXIpCisgICAgICAgICAgICAgICAgU2hEZXN0cnVjdChtX3ZlcnRleENvbXBpbGVyKTsKKyAg
ICAgICAgICAgIG1fdmVydGV4Q29tcGlsZXIgPSAwOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CiAKICAgICAgICAgYnVpbHRDb21waWxlcnMgPSB0cnVlOwogICAgIH0KQEAg
LTY0LDEyICs3NywzMyBAQCBib29sIEFOR0xFV2ViS2l0QnJpZGdlOjp2YWxpZGF0ZVNoYWRlclNv
CiAKICAgICBjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTb3VyY2VTdHJpbmdzW10gPSB7IHNoYWRl
clNvdXJjZSB9OwogCi0gICAgYm9vbCB2YWxpZGF0ZVN1Y2Nlc3MgPSBTaENvbXBpbGUoY29tcGls
ZXIsIHNoYWRlclNvdXJjZVN0cmluZ3MsIDEsIEVTaE9wdE5vbmUsIEVEZWJ1Z09wSW50ZXJtZWRp
YXRlKTsKKyAgICBib29sIHZhbGlkYXRlU3VjY2VzcyA9IFNoQ29tcGlsZShjb21waWxlciwgc2hh
ZGVyU291cmNlU3RyaW5ncywgMSwgU0hfT0JKRUNUX0NPREUpOworICAgIGlmICghdmFsaWRhdGVT
dWNjZXNzKSB7CisgICAgICAgIGludCBsb2dTaXplID0gMDsKKyAgICAgICAgU2hHZXRJbmZvKGNv
bXBpbGVyLCBTSF9JTkZPX0xPR19MRU5HVEgsICZsb2dTaXplKTsKKyAgICAgICAgaWYgKGxvZ1Np
emUgPiAxKSB7CisgICAgICAgICAgICBjaGFyKiBsb2dCdWZmZXIgPSBuZXcgY2hhcltsb2dTaXpl
XTsKKyAgICAgICAgICAgIGlmIChsb2dCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBTaEdldElu
Zm9Mb2coY29tcGlsZXIsIGxvZ0J1ZmZlcik7CisgICAgICAgICAgICAgICAgc2hhZGVyVmFsaWRh
dGlvbkxvZyA9IGxvZ0J1ZmZlcjsKKyAgICAgICAgICAgICAgICBkZWxldGVbXSBsb2dCdWZmZXI7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
IAotICAgIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSBTaEdldE9iamVjdENvZGUoY29tcGlsZXIp
OwotICAgIHNoYWRlclZhbGlkYXRpb25Mb2cgPSBTaEdldEluZm9Mb2coY29tcGlsZXIpOworICAg
IGludCB0cmFuc2xhdGlvbkxlbmd0aCA9IDA7CisgICAgU2hHZXRJbmZvKGNvbXBpbGVyLCBTSF9P
QkpFQ1RfQ09ERV9MRU5HVEgsICZ0cmFuc2xhdGlvbkxlbmd0aCk7CisgICAgaWYgKHRyYW5zbGF0
aW9uTGVuZ3RoID4gMSkgeworICAgICAgICBjaGFyKiB0cmFuc2xhdGlvbkJ1ZmZlciA9IG5ldyBj
aGFyW3RyYW5zbGF0aW9uTGVuZ3RoXTsKKyAgICAgICAgaWYgKHRyYW5zbGF0aW9uQnVmZmVyKSB7
CisgICAgICAgICAgICBTaEdldE9iamVjdENvZGUoY29tcGlsZXIsIHRyYW5zbGF0aW9uQnVmZmVy
KTsKKyAgICAgICAgICAgIHRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UgPSB0cmFuc2xhdGlvbkJ1ZmZl
cjsKKyAgICAgICAgICAgIGRlbGV0ZVtdIHRyYW5zbGF0aW9uQnVmZmVyOworICAgICAgICB9Cisg
ICAgfQogCi0gICAgcmV0dXJuIHZhbGlkYXRlU3VjY2VzczsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRC
cmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9B
TkdMRVdlYktpdEJyaWRnZS5oCShyZXZpc2lvbiA3NTgwMSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDggKzM0LDggQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogZW51bSBBTkdMRVNoYWRlclR5cGUg
ewotICAgIFNIQURFUl9UWVBFX1ZFUlRFWCA9IEVTaExhbmdWZXJ0ZXgsCi0gICAgU0hBREVSX1RZ
UEVfRlJBR01FTlQgPSBFU2hMYW5nRnJhZ21lbnQKKyAgICBTSEFERVJfVFlQRV9WRVJURVggPSBT
SF9WRVJURVhfU0hBREVSLAorICAgIFNIQURFUl9UWVBFX0ZSQUdNRU5UID0gU0hfRlJBR01FTlRf
U0hBREVSLAogfTsKIAogY2xhc3MgQU5HTEVXZWJLaXRCcmlkZ2UgewpAQCAtNDQsMTggKzQ0LDE4
IEBAIHB1YmxpYzoKICAgICBBTkdMRVdlYktpdEJyaWRnZSgpOwogICAgIH5BTkdMRVdlYktpdEJy
aWRnZSgpOwogICAgIAotICAgIHZvaWQgc2V0UmVzb3VyY2VzKFRCdWlsdEluUmVzb3VyY2UgcmVz
b3VyY2VzKSB7IG1fcmVzb3VyY2VzID0gcmVzb3VyY2VzOyB9CisgICAgdm9pZCBzZXRSZXNvdXJj
ZXMoU2hCdWlsdEluUmVzb3VyY2VzIHJlc291cmNlcykgeyBtX3Jlc291cmNlcyA9IHJlc291cmNl
czsgfQogICAgIAogICAgIGJvb2wgdmFsaWRhdGVTaGFkZXJTb3VyY2UoY29uc3QgY2hhciogc2hh
ZGVyU291cmNlLCBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZSwgU3RyaW5nJiB0cmFuc2xhdGVk
U2hhZGVyU291cmNlLCBTdHJpbmcmIHNoYWRlclZhbGlkYXRpb25Mb2cpOwogCiBwcml2YXRlOgog
CisgICAgYm9vbCBidWlsdENvbXBpbGVyczsKKyAgICAKICAgICBTaEhhbmRsZSBtX2ZyYWdtZW50
Q29tcGlsZXI7CiAgICAgU2hIYW5kbGUgbV92ZXJ0ZXhDb21waWxlcjsKIAotICAgIGJvb2wgYnVp
bHRDb21waWxlcnM7Ci0KLSAgICBUQnVpbHRJblJlc291cmNlIG1fcmVzb3VyY2VzOworICAgIFNo
QnVpbHRJblJlc291cmNlcyBtX3Jlc291cmNlczsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0Nv
bnRleHQzRE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0JKHJldmlzaW9uIDc1ODAxKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xODgsMjEgKzE4OCwxNSBAQCBHcmFwaGljc0NvbnRleHQzRDo6
R3JhcGhpY3NDb250ZXh0M0QoR3JhCiAgICAgCiAgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24u
CiAKLSAgICBUQnVpbHRJblJlc291cmNlIEFOR0xFUmVzb3VyY2VzOworICAgIFNoQnVpbHRJblJl
c291cmNlcyBBTkdMRVJlc291cmNlczsKKyAgICBTaEluaXRCdWlsdEluUmVzb3VyY2VzKCZBTkdM
RVJlc291cmNlcyk7CiAKLSAgICBBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzID0gMDsK
ICAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTLCAm
QU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4
VmVydGV4VW5pZm9ybVZlY3RvcnMgPSAwOwogICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfVkVSVEVYX1VOSUZPUk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRl
eFVuaWZvcm1WZWN0b3JzKTsKLSAgICBBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyA9
IDA7CiAgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RP
UlMsICZBTkdMRVJlc291cmNlcy5NYXhWYXJ5aW5nVmVjdG9ycyk7Ci0gICAgQU5HTEVSZXNvdXJj
ZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPSAwOwogICAgIGdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291
cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IDA7CiAgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3ND
b250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJj
ZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4
VGV4dHVyZUltYWdlVW5pdHMgPSAwOwogICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNE
OjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFRleHR1cmVJbWFn
ZVVuaXRzKTsKLSAgICBBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzID0g
MDsKICAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZSQUdNRU5UX1VOSUZP
Uk1fVkVDVE9SUywgJkFOR0xFUmVzb3VyY2VzLk1heEZyYWdtZW50VW5pZm9ybVZlY3RvcnMpOwog
CiAgICAgLy8gQWx3YXlzIHNldCB0byAxIGZvciBPcGVuR0wgRVMuCg==
</data>
<flag name="review"
          id="70711"
          type_id="1"
          status="-"
          setter="kbr"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79343</attachid>
            <date>2011-01-18 15:25:22 -0800</date>
            <delta_ts>2011-01-18 18:04:14 -0800</delta_ts>
            <desc>ANGLE r533 - revised patch</desc>
            <filename>ANGLE_update_bug47194-r1.patch</filename>
            <type>text/plain</type>
            <size>1015778</size>
            <attacher name="Ben Vanik">ben.vanik</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MDI1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDEtMTggIEJlbiBWYW5p
ayAgPGJlbi52YW5pa0BnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXBkYXRpbmcgQU5HTEUgaW4gV2ViS2l0IHRvIHI1MzMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzE5NAorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QU5HTEVXZWJLaXRCcmlkZ2U6OkFOR0xFV2ViS2l0QnJpZGdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkFOR0xFV2ViS2l0QnJpZGdlOjp+QU5HTEVXZWJLaXRCcmlkZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6QU5HTEVXZWJLaXRCcmlkZ2U6OnZhbGlkYXRlU2hhZGVyU291cmNlKToKKyAg
ICAgICAgVXBkYXRlIHRvIG5ldyBBTkdMRSBBUEkgZm9yIHNoYWRlciB2YWxpZGF0aW9uLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpBTkdMRVdlYktpdEJyaWRnZTo6c2V0UmVzb3VyY2VzKTogCisgICAgICAgIFJlbmFt
aW5nIHR5cGVzIHRvIG5ldyBuYW1lcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NDb250ZXh0M0RNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICBJbml0aWFsaXplIEFOR0xFUmVzb3Vy
Y2VzIHdpdGggQU5HTEUgaW5pdCBjYWxsIHRvIHByZXZlbnQgdW5pbml0aWFsaXplZCB2YXJpYWJs
ZXMuCisKIDIwMTEtMDEtMTggIFpvbHRhbiBIZXJjemVnICA8emhlcmN6ZWdAd2Via2l0Lm9yZz4K
IAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBDc2FiYSBPc3p0cm9nb27DoWMKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0M0RNYWMubW0JKHJldmlzaW9uIDc2MDI1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0xODgsMjEgKzE4OCwxNSBAQAogICAgIAogICAgIC8vIEFOR0xFIGluaXRpYWxpemF0
aW9uLgogCi0gICAgVEJ1aWx0SW5SZXNvdXJjZSBBTkdMRVJlc291cmNlczsKKyAgICBTaEJ1aWx0
SW5SZXNvdXJjZXMgQU5HTEVSZXNvdXJjZXM7CisgICAgU2hJbml0QnVpbHRJblJlc291cmNlcygm
QU5HTEVSZXNvdXJjZXMpOwogCi0gICAgQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyA9
IDA7CiAgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfQVRUUklC
UywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleEF0dHJpYnMpOwotICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heFZlcnRleFVuaWZvcm1WZWN0b3JzID0gMDsKICAgICBnZXRJbnRlZ2VydihHcmFwaGljc0Nv
bnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhW
ZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3Rv
cnMgPSAwOwogICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19W
RUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwotICAgIEFOR0xFUmVz
b3VyY2VzLk1heFZlcnRleFRleHR1cmVJbWFnZVVuaXRzID0gMDsKICAgICBnZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVS
ZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMgPSAwOwogICAgIGdldEludGVnZXJ2KEdyYXBo
aWNzQ29udGV4dDNEOjpNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVz
b3VyY2VzLk1heENvbWJpbmVkVGV4dHVyZUltYWdlVW5pdHMpOwotICAgIEFOR0xFUmVzb3VyY2Vz
Lk1heFRleHR1cmVJbWFnZVVuaXRzID0gMDsKICAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJl
SW1hZ2VVbml0cyk7Ci0gICAgQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9y
cyA9IDA7CiAgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9V
TklGT1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3Jz
KTsKIAogICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5o
CShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FO
R0xFV2ViS2l0QnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogZW51bSBBTkdMRVNoYWRlclR5cGUgewotICAgIFNIQURFUl9UWVBF
X1ZFUlRFWCA9IEVTaExhbmdWZXJ0ZXgsCi0gICAgU0hBREVSX1RZUEVfRlJBR01FTlQgPSBFU2hM
YW5nRnJhZ21lbnQKKyAgICBTSEFERVJfVFlQRV9WRVJURVggPSBTSF9WRVJURVhfU0hBREVSLAor
ICAgIFNIQURFUl9UWVBFX0ZSQUdNRU5UID0gU0hfRlJBR01FTlRfU0hBREVSLAogfTsKIAogY2xh
c3MgQU5HTEVXZWJLaXRCcmlkZ2UgewpAQCAtNDQsMTggKzQ0LDE4IEBACiAgICAgQU5HTEVXZWJL
aXRCcmlkZ2UoKTsKICAgICB+QU5HTEVXZWJLaXRCcmlkZ2UoKTsKICAgICAKLSAgICB2b2lkIHNl
dFJlc291cmNlcyhUQnVpbHRJblJlc291cmNlIHJlc291cmNlcykgeyBtX3Jlc291cmNlcyA9IHJl
c291cmNlczsgfQorICAgIHZvaWQgc2V0UmVzb3VyY2VzKFNoQnVpbHRJblJlc291cmNlcyByZXNv
dXJjZXMpIHsgbV9yZXNvdXJjZXMgPSByZXNvdXJjZXM7IH0KICAgICAKICAgICBib29sIHZhbGlk
YXRlU2hhZGVyU291cmNlKGNvbnN0IGNoYXIqIHNoYWRlclNvdXJjZSwgQU5HTEVTaGFkZXJUeXBl
IHNoYWRlclR5cGUsIFN0cmluZyYgdHJhbnNsYXRlZFNoYWRlclNvdXJjZSwgU3RyaW5nJiBzaGFk
ZXJWYWxpZGF0aW9uTG9nKTsKIAogcHJpdmF0ZToKIAorICAgIGJvb2wgYnVpbHRDb21waWxlcnM7
CisgICAgCiAgICAgU2hIYW5kbGUgbV9mcmFnbWVudENvbXBpbGVyOwogICAgIFNoSGFuZGxlIG1f
dmVydGV4Q29tcGlsZXI7CiAKLSAgICBib29sIGJ1aWx0Q29tcGlsZXJzOwotCi0gICAgVEJ1aWx0
SW5SZXNvdXJjZSBtX3Jlc291cmNlczsKKyAgICBTaEJ1aWx0SW5SZXNvdXJjZXMgbV9yZXNvdXJj
ZXM7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9BTkdMRVdlYktpdEJyaWRnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuY3BwCShyZXZp
c2lvbiA3NjAyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0FOR0xFV2Vi
S2l0QnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMjkgKzI4LDQzIEBACiAjaWYgRU5B
QkxFKDNEX0NBTlZBUykKIAogI2luY2x1ZGUgIkFOR0xFV2ViS2l0QnJpZGdlLmgiCisjaW5jbHVk
ZSA8d3RmL093bkFycmF5UHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogCiBBTkdMRVdl
YktpdEJyaWRnZTo6QU5HTEVXZWJLaXRCcmlkZ2UoKSA6Ci0gICAgYnVpbHRDb21waWxlcnMoZmFs
c2UpCisgICAgYnVpbHRDb21waWxlcnMoZmFsc2UpLAorICAgIG1fZnJhZ21lbnRDb21waWxlcigw
KSwKKyAgICBtX3ZlcnRleENvbXBpbGVyKDApCiB7CiAgICAgU2hJbml0aWFsaXplKCk7CiB9CiAK
IEFOR0xFV2ViS2l0QnJpZGdlOjp+QU5HTEVXZWJLaXRCcmlkZ2UoKQogewotICAgIGlmIChidWls
dENvbXBpbGVycykgeworICAgIGlmIChtX2ZyYWdtZW50Q29tcGlsZXIpCiAgICAgICAgIFNoRGVz
dHJ1Y3QobV9mcmFnbWVudENvbXBpbGVyKTsKKyAgICBtX2ZyYWdtZW50Q29tcGlsZXIgPSAwOwor
ICAgIGlmIChtX3ZlcnRleENvbXBpbGVyKQogICAgICAgICBTaERlc3RydWN0KG1fdmVydGV4Q29t
cGlsZXIpOwotICAgIH0KKyAgICBtX3ZlcnRleENvbXBpbGVyID0gMDsKIH0KIAogYm9vbCBBTkdM
RVdlYktpdEJyaWRnZTo6dmFsaWRhdGVTaGFkZXJTb3VyY2UoY29uc3QgY2hhciogc2hhZGVyU291
cmNlLCBBTkdMRVNoYWRlclR5cGUgc2hhZGVyVHlwZSwgU3RyaW5nJiB0cmFuc2xhdGVkU2hhZGVy
U291cmNlLCBTdHJpbmcmIHNoYWRlclZhbGlkYXRpb25Mb2cpCiB7CiAgICAgaWYgKCFidWlsdENv
bXBpbGVycykgewotICAgICAgICBtX2ZyYWdtZW50Q29tcGlsZXIgPSBTaENvbnN0cnVjdENvbXBp
bGVyKEVTaExhbmdGcmFnbWVudCwgRVNoU3BlY1dlYkdMLCAmbV9yZXNvdXJjZXMpOwotICAgICAg
ICBtX3ZlcnRleENvbXBpbGVyID0gU2hDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5nVmVydGV4LCBF
U2hTcGVjV2ViR0wsICZtX3Jlc291cmNlcyk7CisgICAgICAgIG1fZnJhZ21lbnRDb21waWxlciA9
IFNoQ29uc3RydWN0Q29tcGlsZXIoU0hfRlJBR01FTlRfU0hBREVSLCBTSF9XRUJHTF9TUEVDLCAm
bV9yZXNvdXJjZXMpOworICAgICAgICBtX3ZlcnRleENvbXBpbGVyID0gU2hDb25zdHJ1Y3RDb21w
aWxlcihTSF9WRVJURVhfU0hBREVSLCBTSF9XRUJHTF9TUEVDLCAmbV9yZXNvdXJjZXMpOworICAg
ICAgICBpZiAoIW1fZnJhZ21lbnRDb21waWxlciB8fCAhbV92ZXJ0ZXhDb21waWxlcikgeworICAg
ICAgICAgICAgaWYgKG1fZnJhZ21lbnRDb21waWxlcikKKyAgICAgICAgICAgICAgICBTaERlc3Ry
dWN0KG1fZnJhZ21lbnRDb21waWxlcik7CisgICAgICAgICAgICBtX2ZyYWdtZW50Q29tcGlsZXIg
PSAwOworICAgICAgICAgICAgaWYgKG1fdmVydGV4Q29tcGlsZXIpCisgICAgICAgICAgICAgICAg
U2hEZXN0cnVjdChtX3ZlcnRleENvbXBpbGVyKTsKKyAgICAgICAgICAgIG1fdmVydGV4Q29tcGls
ZXIgPSAwOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CiAKICAgICAgICAg
YnVpbHRDb21waWxlcnMgPSB0cnVlOwogICAgIH0KQEAgLTY0LDEyICs3OCwzMSBAQAogCiAgICAg
Y29uc3QgY2hhciogY29uc3Qgc2hhZGVyU291cmNlU3RyaW5nc1tdID0geyBzaGFkZXJTb3VyY2Ug
fTsKIAotICAgIGJvb2wgdmFsaWRhdGVTdWNjZXNzID0gU2hDb21waWxlKGNvbXBpbGVyLCBzaGFk
ZXJTb3VyY2VTdHJpbmdzLCAxLCBFU2hPcHROb25lLCBFRGVidWdPcEludGVybWVkaWF0ZSk7Cisg
ICAgYm9vbCB2YWxpZGF0ZVN1Y2Nlc3MgPSBTaENvbXBpbGUoY29tcGlsZXIsIHNoYWRlclNvdXJj
ZVN0cmluZ3MsIDEsIFNIX09CSkVDVF9DT0RFKTsKKyAgICBpZiAoIXZhbGlkYXRlU3VjY2Vzcykg
eworICAgICAgICBpbnQgbG9nU2l6ZSA9IDA7CisgICAgICAgIFNoR2V0SW5mbyhjb21waWxlciwg
U0hfSU5GT19MT0dfTEVOR1RILCAmbG9nU2l6ZSk7CisgICAgICAgIGlmIChsb2dTaXplID4gMSkg
eworICAgICAgICAgICAgT3duQXJyYXlQdHI8Y2hhcj4gbG9nQnVmZmVyKG5ldyBjaGFyW2xvZ1Np
emVdKTsKKyAgICAgICAgICAgIGlmIChsb2dCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBTaEdl
dEluZm9Mb2coY29tcGlsZXIsIGxvZ0J1ZmZlci5nZXQoKSk7CisgICAgICAgICAgICAgICAgc2hh
ZGVyVmFsaWRhdGlvbkxvZyA9IGxvZ0J1ZmZlci5nZXQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCi0gICAgdHJhbnNsYXRlZFNoYWRl
clNvdXJjZSA9IFNoR2V0T2JqZWN0Q29kZShjb21waWxlcik7Ci0gICAgc2hhZGVyVmFsaWRhdGlv
bkxvZyA9IFNoR2V0SW5mb0xvZyhjb21waWxlcik7CisgICAgaW50IHRyYW5zbGF0aW9uTGVuZ3Ro
ID0gMDsKKyAgICBTaEdldEluZm8oY29tcGlsZXIsIFNIX09CSkVDVF9DT0RFX0xFTkdUSCwgJnRy
YW5zbGF0aW9uTGVuZ3RoKTsKKyAgICBpZiAodHJhbnNsYXRpb25MZW5ndGggPiAxKSB7CisgICAg
ICAgIE93bkFycmF5UHRyPGNoYXI+IHRyYW5zbGF0aW9uQnVmZmVyKG5ldyBjaGFyW3RyYW5zbGF0
aW9uTGVuZ3RoXSk7CisgICAgICAgIGlmICghdHJhbnNsYXRpb25CdWZmZXIpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNoR2V0T2JqZWN0Q29kZShjb21waWxlciwgdHJhbnNs
YXRpb25CdWZmZXIuZ2V0KCkpOworICAgICAgICB0cmFuc2xhdGVkU2hhZGVyU291cmNlID0gdHJh
bnNsYXRpb25CdWZmZXIuZ2V0KCk7CisgICAgfQogCi0gICAgcmV0dXJuIHZhbGlkYXRlU3VjY2Vz
czsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvQU5HTEUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9BTkdMRS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0FOR0xFLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTcsNiArNywyMiBAQAogCW9iamVjdHMgPSB7
CiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCisJCTkwRDlCMTAyMTJFMTFEQ0Iw
MDJENDI1NSAvKiBDb21waWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA5MEQ5QjBGOTEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3BwICov
OyB9OworCQk5MEQ5QjEwMzEyRTExRENCMDAyRDQyNTUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMEZBMTJF
MTFEQ0IwMDJENDI1NSAvKiBFeHRlbnNpb25CZWhhdmlvci5oICovOyB9OworCQk5MEQ5QjEwNDEy
RTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ19sZXguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIwRkIxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xh
bmdfbGV4LmNwcCAqLzsgfTsKKwkJOTBEOUIxMDUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdf
dGFiLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkw
RDlCMEZDMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5jcHAgKi87IH07CisJCTkwRDlC
MTA2MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIwRkQxMkUxMURDQjAwMkQ0MjU1IC8qIGds
c2xhbmdfdGFiLmggKi87IH07CisJCTkwRDlCMTA3MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5n
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjBG
RTEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZy5oICovOyB9OworCQk5MEQ5QjEwOTEyRTExRENC
MDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTAwMTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1i
b2wuY3BwICovOyB9OworCQk5MEQ5QjEwQTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9s
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MEQ5QjEw
MTEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggKi87IH07CisJCTkwRDlCMTEzMTJF
MTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDkwRDlCMTBCMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmNwcCAqLzsg
fTsKKwkJOTBEOUIxMTQxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTBDMTJFMTFERDYwMDJENDI1NSAv
KiB1dGlsLmggKi87IH07CisJCTkwRDlCMTE1MTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxp
bWl0YXRpb25zLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkwRDlCMTBEMTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmNwcCAq
LzsgfTsKKwkJOTBEOUIxMTYxMkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTBF
MTJFMTFERDYwMDJENDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi87IH07CisJCTkwRDlC
MTE3MTJFMTFERDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8uY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTBEOUIxMEYxMkUxMURENjAwMkQ0MjU1IC8q
IFZhcmlhYmxlSW5mby5jcHAgKi87IH07CisJCTkwRDlCMTE4MTJFMTFERDYwMDJENDI1NSAvKiBW
YXJpYWJsZUluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDkwRDlCMTEwMTJFMTFERDYwMDJENDI1NSAvKiBWYXJpYWJsZUluZm8uaCAqLzsgfTsKKwkJ
OTBEOUIxMTkxMkUxMURENjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkwRDlCMTExMTJFMTFERDYwMDJENDI1
NSAvKiBWZXJzaW9uR0xTTC5jcHAgKi87IH07CisJCTkwRDlCMTFBMTJFMTFERDYwMDJENDI1NSAv
KiBWZXJzaW9uR0xTTC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTBEOUIxMTIxMkUxMURENjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmggKi87IH07CiAJ
CUZCMzlEMjcxMTIwMEYzNUEwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQjM5RDIyMjEyMDBGMzVBMDAwODhF
NjkgLyogQ29kZUdlbkdMU0wuY3BwICovOyB9OwogCQlGQjM5RDI3NTEyMDBGMzVBMDAwODhFNjkg
LyogZGVidWcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRkIzOUQyMjYxMjAwRjM1QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLzsgfTsKIAkJRkIzOUQy
NzkxMjAwRjM1QTAwMDg4RTY5IC8qIEluZm9TaW5rLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZCMzlEMjJBMTIwMEYzNUEwMDA4OEU2OSAvKiBJbmZv
U2luay5jcHAgKi87IH07CkBAIC00Miw2ICs1OCwyMyBAQAogCQk1RDdDNTlDNTEyMDhDNjhCMDAx
Qzg3M0UgLyogQU5HTEUueGNjb25maWcgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0g
QU5HTEUueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1OUM2MTIw
OEM2OEIwMDFDODczRSAvKiBCYXNlLnhjY29uZmlnICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC54Y2NvbmZpZzsg
cGF0aCA9IEJhc2UueGNjb25maWc7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVEN0M1
OUM3MTIwOEM2OEIwMDFDODczRSAvKiBEZWJ1Z1JlbGVhc2UueGNjb25maWcgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0LnhjY29uZmlnOyBwYXRoID0gRGVidWdSZWxlYXNlLnhjY29uZmlnOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk5MEQ5QjBGOTEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGlsZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MEQ5QjBGQTEyRTExRENCMDAyRDQyNTUgLyogRXh0
ZW5zaW9uQmVoYXZpb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRXh0ZW5z
aW9uQmVoYXZpb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTBEOUIwRkIxMkUx
MURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfbGV4LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IGdsc2xhbmdfbGV4LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTBEOUIwRkMxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IGdsc2xhbmdfdGFiLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJOTBEOUIwRkQxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfdGFi
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGdsc2xhbmdfdGFiLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkwRDlCMEZFMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNs
YW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGdsc2xhbmcuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTBEOUIwRkYxMkUxMURDQjAwMkQ0MjU1IC8qIG9zc291
cmNlX25zcHIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gb3Nzb3Vy
Y2VfbnNwci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkwRDlCMTAwMTJFMTFE
Q0IwMDJENDI1NSAvKiBTZWFyY2hTeW1ib2wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2VhcmNoU3ltYm9sLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTBEOUIxMDExMkUxMURDQjAwMkQ0MjU1IC8qIFNlYXJjaFN5bWJvbC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTZWFyY2hTeW1ib2wuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJOTBEOUIxMEIxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gdXRpbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTkwRDlCMTBDMTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHV0aWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJOTBEOUIxMEQxMkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFsaWRhdGVMaW1pdGF0aW9u
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTkwRDlCMTBFMTJFMTFERDYwMDJE
NDI1NSAvKiBWYWxpZGF0ZUxpbWl0YXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZhbGlkYXRlTGltaXRhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJOTBEOUIxMEYxMkUxMURENjAwMkQ0MjU1IC8qIFZhcmlhYmxlSW5mby5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBWYXJpYWJsZUluZm8uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk5MEQ5QjExMDEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJ
bmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlhYmxlSW5mby5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MEQ5QjExMTEyRTExREQ2MDAyRDQyNTUgLyog
VmVyc2lvbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmVy
c2lvbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5MEQ5QjExMjEyRTEx
REQ2MDAyRDQyNTUgLyogVmVyc2lvbkdMU0wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmVyc2lvbkdMU0wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQw
RDExMjAwRjBFMzAwMDg4RTY5IC8qIGxpYkFOR0xFLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsg
cGF0aCA9IGxpYkFOR0xFLmE7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJ
CUZCMzlEMTg2MTIwMEYyNjIwMDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQmFzZVR5cGVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUZCMzlEMTg3MTIwMEYyNjIwMDA4OEU2OSAvKiBDb2RlR2VuR0xTTC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVHZW5H
TFNMLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTExMiw3ICsxNDUsNiBAQAog
CQlGQjM5RDFEMTEyMDBGMjYyMDAwODhFNjkgLyogVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVHlwZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIz
OUQxRDIxMjAwRjI2MjAwMDg4RTY5IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5jbHVkZUluSW5kZXggPSAwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFVuZm9sZFNlbGVjdC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMUQzMTIwMEYyNjIwMDA4OEU2
OSAvKiBVbmZvbGRTZWxlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5m
b2xkU2VsZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMUQ0MTIwMEYy
NjIwMDA4OEU2OSAvKiB1bmlzdGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
dW5pc3RkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMjIxMTIwMEYzNUEw
MDA4OEU2OSAvKiBCYXNlVHlwZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBs
aWNpdEZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9
IEJhc2VUeXBlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGQjM5RDIyMjEyMDBG
MzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ29kZUdlbkdMU0wuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlGQjM5RDIyNDEyMDBGMzVBMDAwODhFNjkgLyogQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNv
ZGluZyA9IDQ7IHBhdGggPSBDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTE3NSw3ICsyMDcsNiBAQAogCQlGQjM5RDI2QzEyMDBGMzVBMDAwODhFNjkgLyogVHlwZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuaDsgZmlsZUVuY29kaW5nID0gNDsgcGF0aCA9IFR5cGVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUZCMzlEMjZEMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3Qu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVW5mb2xkU2VsZWN0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5
IC8qIFVuZm9sZFNlbGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5oOyBmaWxlRW5jb2RpbmcgPSA0OyBwYXRoID0gVW5m
b2xkU2VsZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZCMzlEMjZGMTIwMEYz
NUEwMDA4OEU2OSAvKiB1bmlzdGQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
dW5pc3RkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlEMkJGMTIwMEYzRTYw
MDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmg7IGZpbGVFbmNvZGluZyA9IDQ7IHBhdGgg
PSBTaGFkZXJMYW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZCMzlENzIwMTIw
MTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IGdsc2xhbmcuY3BwOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvQU5HTEUvZ2xzbGFu
Zy5jcHA7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCUZCMzlENzIxMTIw
MTAzMjAwMDA4OEU2OSAvKiBnbHNsYW5nX3RhYi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBnbHNsYW5nX3RhYi5oOyBwYXRoID0gRGVyaXZlZFNvdXJjZXMvQU5HTEUvZ2xzbGFu
Z190YWIuaDsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKQEAgLTI5Nyw3ICsz
MjgsNiBAQAogCQkJCUZCMzlEMUQxMTIwMEYyNjIwMDA4OEU2OSAvKiBUeXBlcy5oICovLAogCQkJ
CUZCMzlEMUQyMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuY3BwICovLAogCQkJCUZC
MzlEMUQzMTIwMEYyNjIwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3QuaCAqLywKLQkJCQlGQjM5RDFE
NDEyMDBGMjYyMDAwODhFNjkgLyogdW5pc3RkLmggKi8sCiAJCQkpOwogCQkJaW5jbHVkZUluSW5k
ZXggPSAwOwogCQkJbmFtZSA9IGNvbXBpbGVyOwpAQCAtMzMyLDEyICszNjIsMTkgQEAKIAkJRkIz
OUQyMjAxMjAwRjM1QTAwMDg4RTY5IC8qIGNvbXBpbGVyICovID0gewogCQkJaXNhID0gUEJYR3Jv
dXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlGQjM5RDI0NDEyMDBGMzVBMDAwODhFNjkgLyogcHJl
cHJvY2Vzc29yICovLAogCQkJCUZCMzlEMjIxMTIwMEYzNUEwMDA4OEU2OSAvKiBCYXNlVHlwZXMu
aCAqLywKIAkJCQlGQjM5RDIyMjEyMDBGMzVBMDAwODhFNjkgLyogQ29kZUdlbkdMU0wuY3BwICov
LAogCQkJCUZCMzlEMjI0MTIwMEYzNUEwMDA4OEU2OSAvKiBDb21tb24uaCAqLywKKwkJCQk5MEQ5
QjBGOTEyRTExRENCMDAyRDQyNTUgLyogQ29tcGlsZXIuY3BwICovLAogCQkJCUZCMzlEMjI1MTIw
MEYzNUEwMDA4OEU2OSAvKiBDb25zdGFudFVuaW9uLmggKi8sCiAJCQkJRkIzOUQyMjYxMjAwRjM1
QTAwMDg4RTY5IC8qIGRlYnVnLmNwcCAqLywKIAkJCQlGQjM5RDIyNzEyMDBGMzVBMDAwODhFNjkg
LyogZGVidWcuaCAqLywKKwkJCQk5MEQ5QjBGQTEyRTExRENCMDAyRDQyNTUgLyogRXh0ZW5zaW9u
QmVoYXZpb3IuaCAqLywKKwkJCQk5MEQ5QjBGQjEyRTExRENCMDAyRDQyNTUgLyogZ2xzbGFuZ19s
ZXguY3BwICovLAorCQkJCTkwRDlCMEZDMTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5j
cHAgKi8sCisJCQkJOTBEOUIwRkQxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmdfdGFiLmggKi8s
CisJCQkJOTBEOUIwRkUxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCAqLywKIAkJCQlGQjM5
RDIyODEyMDBGMzVBMDAwODhFNjkgLyogZ2xzbGFuZy5sICovLAogCQkJCUZCMzlEMjI5MTIwMEYz
NUEwMDA4OEU2OSAvKiBnbHNsYW5nLnkgKi8sCiAJCQkJRkIzOUQyMkExMjAwRjM1QTAwMDg4RTY5
IC8qIEluZm9TaW5rLmNwcCAqLywKQEAgLTM1NSw2ICszOTIsNyBAQAogCQkJCUZCMzlEMjM2MTIw
MEYzNUEwMDA4OEU2OSAvKiBsb2NhbGludGVybWVkaWF0ZS5oICovLAogCQkJCUZCMzlEMjM3MTIw
MEYzNUEwMDA4OEU2OSAvKiBNTWFwLmggKi8sCiAJCQkJRkIzOUQyMzgxMjAwRjM1QTAwMDg4RTY5
IC8qIG9zaW5jbHVkZS5oICovLAorCQkJCTkwRDlCMEZGMTJFMTFEQ0IwMDJENDI1NSAvKiBvc3Nv
dXJjZV9uc3ByLmNwcCAqLywKIAkJCQlGQjM5RDIzOTEyMDBGMzVBMDAwODhFNjkgLyogb3Nzb3Vy
Y2VfcG9zaXguY3BwICovLAogCQkJCUZCMzlEMjNBMTIwMEYzNUEwMDA4OEU2OSAvKiBvc3NvdXJj
ZV93aW4uY3BwICovLAogCQkJCUZCMzlEMjNCMTIwMEYzNUEwMDA4OEU2OSAvKiBPdXRwdXRHTFNM
LmNwcCAqLywKQEAgLTM2NCwxMSArNDAyLDEyIEBACiAJCQkJRkIzOUQyNDExMjAwRjM1QTAwMDg4
RTY5IC8qIFBhcnNlSGVscGVyLmggKi8sCiAJCQkJRkIzOUQyNDIxMjAwRjM1QTAwMDg4RTY5IC8q
IFBvb2xBbGxvYy5jcHAgKi8sCiAJCQkJRkIzOUQyNDMxMjAwRjM1QTAwMDg4RTY5IC8qIFBvb2xB
bGxvYy5oICovLAotCQkJCUZCMzlEMjQ0MTIwMEYzNUEwMDA4OEU2OSAvKiBwcmVwcm9jZXNzb3Ig
Ki8sCiAJCQkJRkIzOUQyNTYxMjAwRjM1QTAwMDg4RTY5IC8qIFF1YWxpZmllckFsaXZlLmNwcCAq
LywKIAkJCQlGQjM5RDI1NzEyMDBGMzVBMDAwODhFNjkgLyogUXVhbGlmaWVyQWxpdmUuaCAqLywK
IAkJCQlGQjM5RDI1ODEyMDBGMzVBMDAwODhFNjkgLyogUmVtb3ZlVHJlZS5jcHAgKi8sCiAJCQkJ
RkIzOUQyNTkxMjAwRjM1QTAwMDg4RTY5IC8qIFJlbW92ZVRyZWUuaCAqLywKKwkJCQk5MEQ5QjEw
MDEyRTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmNwcCAqLywKKwkJCQk5MEQ5QjEwMTEy
RTExRENCMDAyRDQyNTUgLyogU2VhcmNoU3ltYm9sLmggKi8sCiAJCQkJRkIzOUQyNUExMjAwRjM1
QTAwMDg4RTY5IC8qIFNoYWRlckxhbmcuY3BwICovLAogCQkJCUZCMzlEMjVCMTIwMEYzNUEwMDA4
OEU2OSAvKiBTaEhhbmRsZS5oICovLAogCQkJCUZCMzlEMjVDMTIwMEYzNUEwMDA4OEU2OSAvKiBT
eW1ib2xUYWJsZS5jcHAgKi8sCkBAIC0zNzgsNyArNDE3LDE0IEBACiAJCQkJRkIzOUQyNkMxMjAw
RjM1QTAwMDg4RTY5IC8qIFR5cGVzLmggKi8sCiAJCQkJRkIzOUQyNkQxMjAwRjM1QTAwMDg4RTY5
IC8qIFVuZm9sZFNlbGVjdC5jcHAgKi8sCiAJCQkJRkIzOUQyNkUxMjAwRjM1QTAwMDg4RTY5IC8q
IFVuZm9sZFNlbGVjdC5oICovLAotCQkJCUZCMzlEMjZGMTIwMEYzNUEwMDA4OEU2OSAvKiB1bmlz
dGQuaCAqLywKKwkJCQk5MEQ5QjEwQjEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5jcHAgKi8sCisJ
CQkJOTBEOUIxMEMxMkUxMURENjAwMkQ0MjU1IC8qIHV0aWwuaCAqLywKKwkJCQk5MEQ5QjEwRDEy
RTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgKi8sCisJCQkJOTBEOUIx
MEUxMkUxMURENjAwMkQ0MjU1IC8qIFZhbGlkYXRlTGltaXRhdGlvbnMuaCAqLywKKwkJCQk5MEQ5
QjEwRjEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJbmZvLmNwcCAqLywKKwkJCQk5MEQ5QjEx
MDEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJbmZvLmggKi8sCisJCQkJOTBEOUIxMTExMkUx
MURENjAwMkQ0MjU1IC8qIFZlcnNpb25HTFNMLmNwcCAqLywKKwkJCQk5MEQ5QjExMjEyRTExREQ2
MDAyRDQyNTUgLyogVmVyc2lvbkdMU0wuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gY29tcGlsZXI7
CiAJCQlwYXRoID0gc3JjL2NvbXBpbGVyOwpAQCAtNDI1LDYgKzQ3MSwxNCBAQAogCQkJYnVpbGRB
Y3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJCUZCMzlENzZFMTIwMTEw
RkMwMDA4OEU2OSAvKiBTaGFkZXJMYW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQk5MEQ5QjEwMzEy
RTExRENCMDAyRDQyNTUgLyogRXh0ZW5zaW9uQmVoYXZpb3IuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTkwRDlCMTA2MTJFMTFEQ0IwMDJENDI1NSAvKiBnbHNsYW5nX3RhYi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJOTBEOUIxMDcxMkUxMURDQjAwMkQ0MjU1IC8qIGdsc2xhbmcuaCBpbiBIZWFkZXJzICov
LAorCQkJCTkwRDlCMTBBMTJFMTFEQ0IwMDJENDI1NSAvKiBTZWFyY2hTeW1ib2wuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTkwRDlCMTE0MTJFMTFERDYwMDJENDI1NSAvKiB1dGlsLmggaW4gSGVhZGVy
cyAqLywKKwkJCQk5MEQ5QjExNjEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9u
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTBEOUIxMTgxMkUxMURENjAwMkQ0MjU1IC8qIFZhcmlh
YmxlSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJOTBEOUIxMUExMkUxMURENjAwMkQ0MjU1IC8q
IFZlcnNpb25HTFNMLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTU0Myw2ICs1OTcsMTQgQEAKIAkJCQlG
QjM5RDJBQTEyMDBGMzVBMDAwODhFNjkgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkIzOUQyQUMxMjAwRjM1QTAwMDg4RTY5IC8qIFRyYW5zbGF0b3JHTFNMLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUZCMzlEMkIxMTIwMEYzNUEwMDA4OEU2OSAvKiBVbmZvbGRTZWxlY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTBEOUIxMDIxMkUxMURDQjAwMkQ0MjU1IC8qIENvbXBp
bGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTkwRDlCMTA0MTJFMTFEQ0IwMDJENDI1NSAvKiBn
bHNsYW5nX2xleC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5MEQ5QjEwNTEyRTExRENCMDAyRDQy
NTUgLyogZ2xzbGFuZ190YWIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTBEOUIxMDkxMkUxMURD
QjAwMkQ0MjU1IC8qIFNlYXJjaFN5bWJvbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5MEQ5QjEx
MzEyRTExREQ2MDAyRDQyNTUgLyogdXRpbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk5MEQ5QjEx
NTEyRTExREQ2MDAyRDQyNTUgLyogVmFsaWRhdGVMaW1pdGF0aW9ucy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk5MEQ5QjExNzEyRTExREQ2MDAyRDQyNTUgLyogVmFyaWFibGVJbmZvLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTkwRDlCMTE5MTJFMTFERDYwMDJENDI1NSAvKiBWZXJzaW9uR0xTTC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL2luY2x1ZGUv
R0xTTEFORy9TaGFkZXJMYW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvaW5jbHVkZS9HTFNMQU5HL1NoYWRlckxhbmcuaAkocmV2aXNpb24gNzYwMjUpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9pbmNsdWRlL0dMU0xBTkcvU2hhZGVyTGFuZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNCw3ICsxNCw2NyBAQAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMi
IHsKICNlbmRpZgorCisvLyBWZXJzaW9uIG51bWJlciBmb3Igc2hhZGVyIHRyYW5zbGF0aW9uIEFQ
SS4KKy8vIEl0IGlzIGluY3JlbWVudGVkIGV2ZXJ5dGltZSB0aGUgQVBJIGNoYW5nZXMuCisjZGVm
aW5lIFNIX1ZFUlNJT04gMTAzCisKIC8vCisvLyBUaGUgbmFtZXMgb2YgdGhlIGZvbGxvd2luZyBl
bnVtcyBoYXZlIGJlZW4gZGVyaXZlZCBieSByZXBsYWNpbmcgR0wgcHJlZml4CisvLyB3aXRoIFNI
LiBGb3IgZXhhbXBsZSwgU0hfSU5GT19MT0dfTEVOR1RIIGlzIGVxdWl2YWxlbnQgdG8gR0xfSU5G
T19MT0dfTEVOR1RILgorLy8gVGhlIGVudW0gdmFsdWVzIGFyZSBhbHNvIGVxdWFsIHRvIHRoZSB2
YWx1ZXMgb2YgdGhlaXIgR0wgY291bnRlcnBhcnQuIFRoaXMKKy8vIGlzIGRvbmUgdG8gbWFrZSBp
dCBlYXNpZXIgZm9yIGFwcGxpY2F0aW9ucyB0byB1c2UgdGhlIHNoYWRlciBsaWJyYXJ5LgorLy8K
K3R5cGVkZWYgZW51bSB7CisgIFNIX0ZSQUdNRU5UX1NIQURFUiA9IDB4OEIzMCwKKyAgU0hfVkVS
VEVYX1NIQURFUiAgID0gMHg4QjMxCit9IFNoU2hhZGVyVHlwZTsKKwordHlwZWRlZiBlbnVtIHsK
KyAgU0hfR0xFUzJfU1BFQyA9IDB4OEI0MCwKKyAgU0hfV0VCR0xfU1BFQyA9IDB4OEI0MQorfSBT
aFNoYWRlclNwZWM7CisKK3R5cGVkZWYgZW51bSB7CisgIFNIX05PTkUgICAgICAgICAgID0gMCwK
KyAgU0hfSU5UICAgICAgICAgICAgPSAweDE0MDQsCisgIFNIX0ZMT0FUICAgICAgICAgID0gMHgx
NDA2LAorICBTSF9GTE9BVF9WRUMyICAgICA9IDB4OEI1MCwKKyAgU0hfRkxPQVRfVkVDMyAgICAg
PSAweDhCNTEsCisgIFNIX0ZMT0FUX1ZFQzQgICAgID0gMHg4QjUyLAorICBTSF9JTlRfVkVDMiAg
ICAgICA9IDB4OEI1MywKKyAgU0hfSU5UX1ZFQzMgICAgICAgPSAweDhCNTQsCisgIFNIX0lOVF9W
RUM0ICAgICAgID0gMHg4QjU1LAorICBTSF9CT09MICAgICAgICAgICA9IDB4OEI1NiwKKyAgU0hf
Qk9PTF9WRUMyICAgICAgPSAweDhCNTcsCisgIFNIX0JPT0xfVkVDMyAgICAgID0gMHg4QjU4LAor
ICBTSF9CT09MX1ZFQzQgICAgICA9IDB4OEI1OSwKKyAgU0hfRkxPQVRfTUFUMiAgICAgPSAweDhC
NUEsCisgIFNIX0ZMT0FUX01BVDMgICAgID0gMHg4QjVCLAorICBTSF9GTE9BVF9NQVQ0ICAgICA9
IDB4OEI1QywKKyAgU0hfU0FNUExFUl8yRCAgICAgPSAweDhCNUUsCisgIFNIX1NBTVBMRVJfQ1VC
RSAgID0gMHg4QjYwCit9IFNoRGF0YVR5cGU7CisKK3R5cGVkZWYgZW51bSB7CisgIFNIX0lORk9f
TE9HX0xFTkdUSCAgICAgICAgICAgICA9ICAweDhCODQsCisgIFNIX09CSkVDVF9DT0RFX0xFTkdU
SCAgICAgICAgICA9ICAweDhCODgsICAvLyBHTF9TSEFERVJfU09VUkNFX0xFTkdUSAorICBTSF9B
Q1RJVkVfVU5JRk9STVMgICAgICAgICAgICAgPSAgMHg4Qjg2LAorICBTSF9BQ1RJVkVfVU5JRk9S
TV9NQVhfTEVOR1RIICAgPSAgMHg4Qjg3LAorICBTSF9BQ1RJVkVfQVRUUklCVVRFUyAgICAgICAg
ICAgPSAgMHg4Qjg5LAorICBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEggPSAgMHg4QjhB
Cit9IFNoU2hhZGVySW5mbzsKKworLy8gQ29tcGlsZSBvcHRpb25zLgordHlwZWRlZiBlbnVtIHsK
KyAgU0hfVkFMSURBVEUgICAgICAgICAgICAgICA9IDAsCisgIFNIX1ZBTElEQVRFX0xPT1BfSU5E
RVhJTkcgPSAweDAwMDEsCisgIFNIX0lOVEVSTUVESUFURV9UUkVFICAgICAgPSAweDAwMDIsCisg
IFNIX09CSkVDVF9DT0RFICAgICAgICAgICAgPSAweDAwMDQsCisgIFNIX0FUVFJJQlVURVNfVU5J
Rk9STVMgICAgPSAweDAwMDgKK30gU2hDb21waWxlT3B0aW9uczsKKworLy8KIC8vIERyaXZlciBt
dXN0IGNhbGwgdGhpcyBmaXJzdCwgb25jZSwgYmVmb3JlIGRvaW5nIGFueSBvdGhlcgogLy8gY29t
cGlsZXIgb3BlcmF0aW9ucy4KIC8vIElmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcywgdGhlIHJldHVy
biB2YWx1ZSBpcyBub256ZXJvLCBlbHNlIHplcm8uCkBAIC0yNSwyNSArODUsOCBAQAogLy8gSWYg
dGhlIGZ1bmN0aW9uIHN1Y2NlZWRzLCB0aGUgcmV0dXJuIHZhbHVlIGlzIG5vbnplcm8sIGVsc2Ug
emVyby4KIC8vCiBpbnQgU2hGaW5hbGl6ZSgpOwotLy8KLS8vIFR5cGVzIG9mIGxhbmd1YWdlcyB0
aGUgY29tcGlsZXIgY2FuIGNvbnN1bWUuCi0vLwotdHlwZWRlZiBlbnVtIHsKLSAgICBFU2hMYW5n
VmVydGV4LAotICAgIEVTaExhbmdGcmFnbWVudCwKLSAgICBFU2hMYW5nQ291bnQsCi19IEVTaExh
bmd1YWdlOwogCiAvLwotLy8gVGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gY29tcGlsZXIgY29u
Zm9ybXMgdG8uCi0vLyBJdCBjdXJyZW50bHkgc3VwcG9ydHMgT3BlbkdMIEVTIGFuZCBXZWJHTCBz
cGVjaWZpY2F0aW9ucy4KLS8vCi10eXBlZGVmIGVudW0gewotICAgIEVTaFNwZWNHTEVTMiwKLSAg
ICBFU2hTcGVjV2ViR0wsCi19IEVTaFNwZWM7Ci0KLS8vCiAvLyBJbXBsZW1lbnRhdGlvbiBkZXBl
bmRlbnQgYnVpbHQtaW4gcmVzb3VyY2VzIChjb25zdGFudHMgYW5kIGV4dGVuc2lvbnMpLgogLy8g
VGhlIG5hbWVzIGZvciB0aGVzZSByZXNvdXJjZXMgaGFzIGJlZW4gb2J0YWluZWQgYnkgc3RyaXBw
aW5nIGdsXy9HTF8uCiAvLwpAQCAtNjIsMjkgKzEwNSwxNCBAQAogICAgIC8vIEV4dGVuc2lvbnMu
CiAgICAgLy8gU2V0IHRvIDEgdG8gZW5hYmxlIHRoZSBleHRlbnNpb24sIGVsc2UgMC4KICAgICBp
bnQgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzOwotfSBUQnVpbHRJblJlc291cmNlOworfSBTaEJ1
aWx0SW5SZXNvdXJjZXM7CiAKIC8vCiAvLyBJbml0aWFsaXplIGJ1aWx0LWluIHJlc291cmNlcyB3
aXRoIG1pbmltdW0gZXhwZWN0ZWQgdmFsdWVzLgogLy8KLXZvaWQgU2hJbml0QnVpbHRJblJlc291
cmNlKFRCdWlsdEluUmVzb3VyY2UqIHJlc291cmNlcyk7Cit2b2lkIFNoSW5pdEJ1aWx0SW5SZXNv
dXJjZXMoU2hCdWlsdEluUmVzb3VyY2VzKiByZXNvdXJjZXMpOwogCiAvLwotLy8gT3B0aW1pemF0
aW9uIGxldmVsIGZvciB0aGUgY29tcGlsZXIuCi0vLwotdHlwZWRlZiBlbnVtIHsKLSAgICBFU2hP
cHROb0dlbmVyYXRpb24sCi0gICAgRVNoT3B0Tm9uZSwKLSAgICBFU2hPcHRTaW1wbGUsICAgICAg
IC8vIE9wdGltaXphdGlvbnMgdGhhdCBjYW4gYmUgZG9uZSBxdWlja2x5Ci0gICAgRVNoT3B0RnVs
bCwgICAgICAgICAvLyBPcHRpbWl6YXRpb25zIHRoYXQgd2lsbCB0YWtlIG1vcmUgdGltZQotfSBF
U2hPcHRpbWl6YXRpb25MZXZlbDsKLQotZW51bSBURGVidWdPcHRpb25zIHsKLSAgICBFRGVidWdP
cE5vbmUgICAgICAgICAgICAgICA9IDB4MDAwLAotICAgIEVEZWJ1Z09wSW50ZXJtZWRpYXRlICAg
ICAgID0gMHgwMDEsICAvLyBXcml0ZXMgaW50ZXJtZWRpYXRlIHRyZWUgaW50byBpbmZvLWxvZy4K
LX07Ci0KLS8vCiAvLyBTaEhhbmRsZSBoZWxkIGJ5IGJ1dCBvcGFxdWUgdG8gdGhlIGRyaXZlci4g
IEl0IGlzIGFsbG9jYXRlZCwKIC8vIG1hbmFnZWQsIGFuZCBkZS1hbGxvY2F0ZWQgYnkgdGhlIGNv
bXBpbGVyLiBJdCdzIGNvbnRlbnRzIAogLy8gYXJlIGRlZmluZWQgYnkgYW5kIHVzZWQgYnkgdGhl
IGNvbXBpbGVyLgpAQCAtOTYsMzEgKzEyNCwxMzEgQEAKIC8vCiAvLyBEcml2ZXIgY2FsbHMgdGhl
c2UgdG8gY3JlYXRlIGFuZCBkZXN0cm95IGNvbXBpbGVyIG9iamVjdHMuCiAvLwotU2hIYW5kbGUg
U2hDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5ndWFnZSwgRVNoU3BlYywgY29uc3QgVEJ1aWx0SW5S
ZXNvdXJjZSopOwotdm9pZCBTaERlc3RydWN0KFNoSGFuZGxlKTsKKy8vIFJldHVybnMgdGhlIGhh
bmRsZSBvZiBjb25zdHJ1Y3RlZCBjb21waWxlci4KKy8vIFBhcmFtZXRlcnM6CisvLyB0eXBlOiBT
cGVjaWZpZXMgdGhlIHR5cGUgb2Ygc2hhZGVyIC0gU0hfRlJBR01FTlRfU0hBREVSIG9yIFNIX1ZF
UlRFWF9TSEFERVIuCisvLyBzcGVjOiBTcGVjaWZpZXMgdGhlIGxhbmd1YWdlIHNwZWMgdGhlIGNv
bXBpbGVyIG11c3QgY29uZm9ybSB0byAtCisvLyAgICAgICBTSF9HTEVTMl9TUEVDIG9yIFNIX1dF
QkdMX1NQRUMuCisvLyByZXNvdXJjZXM6IFNwZWNpZmllcyB0aGUgYnVpbHQtaW4gcmVzb3VyY2Vz
LgorU2hIYW5kbGUgU2hDb25zdHJ1Y3RDb21waWxlcihTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoQnVpbHRJ
blJlc291cmNlcyogcmVzb3VyY2VzKTsKK3ZvaWQgU2hEZXN0cnVjdChTaEhhbmRsZSBoYW5kbGUp
OwogCiAvLwotLy8gVGhlIHJldHVybiB2YWx1ZSBvZiBTaENvbXBpbGUgaXMgYm9vbGVhbiwgaW5k
aWNhdGluZwotLy8gc3VjY2VzcyBvciBmYWlsdXJlLgorLy8gQ29tcGlsZXMgdGhlIGdpdmVuIHNo
YWRlciBzb3VyY2UuCisvLyBJZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMsIHRoZSByZXR1cm4gdmFs
dWUgaXMgbm9uemVybywgZWxzZSB6ZXJvLgorLy8gUGFyYW1ldGVyczoKKy8vIGhhbmRsZTogU3Bl
Y2lmaWVzIHRoZSBoYW5kbGUgb2YgY29tcGlsZXIgdG8gYmUgdXNlZC4KKy8vIHNoYWRlclN0cmlu
Z3M6IFNwZWNpZmllcyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBudWxsLXRlcm1pbmF0ZWQgc3Ry
aW5ncworLy8gICAgICAgICAgICAgICAgY29udGFpbmluZyB0aGUgc2hhZGVyIHNvdXJjZSBjb2Rl
LgorLy8gbnVtU3RyaW5nczogU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gc2hh
ZGVyU3RyaW5ncyBhcnJheS4KKy8vIGNvbXBpbGVPcHRpb25zOiBBIG1hc2sgY29udGFpbmluZyB0
aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6CisvLyBTSF9WQUxJREFURTogVmFsaWRhdGVzIHNoYWRl
ciB0byBlbnN1cmUgdGhhdCBpdCBjb25mb3JtcyB0byB0aGUgc3BlYworLy8gICAgICAgICAgICAg
IHNwZWNpZmllZCBkdXJpbmcgY29tcGlsZXIgY29uc3RydWN0aW9uLgorLy8gU0hfVkFMSURBVEVf
TE9PUF9JTkRFWElORzogVmFsaWRhdGVzIGxvb3AgYW5kIGluZGV4aW5nIGluIHRoZSBzaGFkZXIg
dG8KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuc3VyZSB0aGF0IHRoZXkgZG8gbm90
IGV4Y2VlZCB0aGUgbWluaW11bQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rp
b25hbGl0eSBtYW5kYXRlZCBpbiBHTFNMIDEuMCBzcGVjLAorLy8gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXBwZW5kaXggQSwgU2VjdGlvbiA0IGFuZCA1LgorLy8gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVGhlcmUgaXMgbm8gbmVlZCB0byBzcGVjaWZ5IHRoaXMgcGFyYW1ldGVyIHdo
ZW4KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGluZyBmb3IgV2ViR0wgLSBp
dCBpcyBpbXBsaWVkLgorLy8gU0hfSU5URVJNRURJQVRFX1RSRUU6IFdyaXRlcyBpbnRlcm1lZGlh
dGUgdHJlZSB0byBpbmZvIGxvZy4KKy8vICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgcXVl
cmllZCBieSBjYWxsaW5nIFNoR2V0SW5mb0xvZygpLgorLy8gU0hfT0JKRUNUX0NPREU6IFRyYW5z
bGF0ZXMgaW50ZXJtZWRpYXRlIHRyZWUgdG8gZ2xzbCBvciBobHNsIHNoYWRlci4KKy8vICAgICAg
ICAgICAgICAgICBDYW4gYmUgcXVlcmllZCBieSBjYWxsaW5nIFNoR2V0T2JqZWN0Q29kZSgpLgor
Ly8gU0hfQVRUUklCVVRFU19VTklGT1JNUzogRXh0cmFjdHMgYXR0cmlidXRlcyBhbmQgdW5pZm9y
bXMuCisvLyAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgcXVlcmllZCBieSBjYWxsaW5n
IFNoR2V0QWN0aXZlQXR0cmliKCkgYW5kCisvLyAgICAgICAgICAgICAgICAgICAgICAgICBTaEdl
dEFjdGl2ZVVuaWZvcm0oKS4KIC8vCi0vLyBUaGUgaW5mby1sb2cgc2hvdWxkIGJlIHdyaXR0ZW4g
YnkgU2hDb21waWxlIGludG8gCi0vLyBTaEhhbmRsZSwgc28gaXQgY2FuIGFuc3dlciBmdXR1cmUg
cXVlcmllcy4KLS8vCiBpbnQgU2hDb21waWxlKAotICAgIGNvbnN0IFNoSGFuZGxlLAorICAgIGNv
bnN0IFNoSGFuZGxlIGhhbmRsZSwKICAgICBjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJTdHJpbmdz
W10sCiAgICAgY29uc3QgaW50IG51bVN0cmluZ3MsCi0gICAgY29uc3QgRVNoT3B0aW1pemF0aW9u
TGV2ZWwsCi0gICAgaW50IGRlYnVnT3B0aW9ucworICAgIGludCBjb21waWxlT3B0aW9ucwogICAg
ICk7CiAKLS8vCi0vLyBBbGwgdGhlIGZvbGxvd2luZyByZXR1cm4gMCBpZiB0aGUgaW5mb3JtYXRp
b24gaXMgbm90Ci0vLyBhdmFpbGFibGUgaW4gdGhlIG9iamVjdCBwYXNzZWQgZG93biwgb3IgdGhl
IG9iamVjdCBpcyBiYWQuCi0vLwotY29uc3QgY2hhciogU2hHZXRJbmZvTG9nKGNvbnN0IFNoSGFu
ZGxlKTsKLWNvbnN0IGNoYXIqIFNoR2V0T2JqZWN0Q29kZShjb25zdCBTaEhhbmRsZSk7CisvLyBS
ZXR1cm5zIGEgcGFyYW1ldGVyIGZyb20gYSBjb21waWxlZCBzaGFkZXIuCisvLyBQYXJhbWV0ZXJz
OgorLy8gaGFuZGxlOiBTcGVjaWZpZXMgdGhlIGNvbXBpbGVyCisvLyBwbmFtZTogU3BlY2lmaWVz
IHRoZSBwYXJhbWV0ZXIgdG8gcXVlcnkuCisvLyBUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJl
IGRlZmluZWQ6CisvLyBTSF9JTkZPX0xPR19MRU5HVEg6IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVy
cyBpbiB0aGUgaW5mb3JtYXRpb24gbG9nCisvLyAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGlu
ZyB0aGUgbnVsbCB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIuCisvLyBTSF9PQkpFQ1RfQ09ERV9MRU5H
VEg6IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBpbiB0aGUgb2JqZWN0IGNvZGUKKy8vICAgICAg
ICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHRoZSBudWxsIHRlcm1pbmF0aW9uIGNoYXJhY3Rl
ci4KKy8vIFNIX0FDVElWRV9BVFRSSUJVVEVTOiB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBhdHRyaWJ1
dGUgdmFyaWFibGVzLgorLy8gU0hfQUNUSVZFX0FUVFJJQlVURV9NQVhfTEVOR1RIOiB0aGUgbGVu
Z3RoIG9mIHRoZSBsb25nZXN0IGFjdGl2ZSBhdHRyaWJ1dGUKKy8vICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyaWFibGUgbmFtZSBpbmNsdWRpbmcgdGhlIG51bGwKKy8vICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVybWluYXRpb24gY2hhcmFjdGVyLgorLy8gU0hf
QUNUSVZFX1VOSUZPUk1TOiB0aGUgbnVtYmVyIG9mIGFjdGl2ZSB1bmlmb3JtIHZhcmlhYmxlcy4K
Ky8vIFNIX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEg6IHRoZSBsZW5ndGggb2YgdGhlIGxvbmdl
c3QgYWN0aXZlIHVuaWZvcm0KKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlh
YmxlIG5hbWUgaW5jbHVkaW5nIHRoZSBudWxsCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXJtaW5hdGlvbiBjaGFyYWN0ZXIuCisvLyAKKy8vIHBhcmFtczogUmVxdWVzdGVkIHBh
cmFtZXRlcgordm9pZCBTaEdldEluZm8oY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBTaFNoYWRlcklu
Zm8gcG5hbWUsIGludCogcGFyYW1zKTsKIAorLy8gUmV0dXJucyBudWwtdGVybWluYXRlZCBpbmZv
cm1hdGlvbiBsb2cgZm9yIGEgY29tcGlsZWQgc2hhZGVyLgorLy8gUGFyYW1ldGVyczoKKy8vIGhh
bmRsZTogU3BlY2lmaWVzIHRoZSBjb21waWxlcgorLy8gaW5mb0xvZzogU3BlY2lmaWVzIGFuIGFy
cmF5IG9mIGNoYXJhY3RlcnMgdGhhdCBpcyB1c2VkIHRvIHJldHVybgorLy8gICAgICAgICAgdGhl
IGluZm9ybWF0aW9uIGxvZy4gSXQgaXMgYXNzdW1lZCB0aGF0IGluZm9Mb2cgaGFzIGVub3VnaCBt
ZW1vcnkKKy8vICAgICAgICAgIHRvIGFjY29tb2RhdGUgdGhlIGluZm9ybWF0aW9uIGxvZy4gVGhl
IHNpemUgb2YgdGhlIGJ1ZmZlciByZXF1aXJlZAorLy8gICAgICAgICAgdG8gc3RvcmUgdGhlIHJl
dHVybmVkIGluZm9ybWF0aW9uIGxvZyBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZworLy8gICAg
ICAgICAgU2hHZXRJbmZvIHdpdGggU0hfSU5GT19MT0dfTEVOR1RILgordm9pZCBTaEdldEluZm9M
b2coY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBjaGFyKiBpbmZvTG9nKTsKKworLy8gUmV0dXJucyBu
dWxsLXRlcm1pbmF0ZWQgb2JqZWN0IGNvZGUgZm9yIGEgY29tcGlsZWQgc2hhZGVyLgorLy8gUGFy
YW1ldGVyczoKKy8vIGhhbmRsZTogU3BlY2lmaWVzIHRoZSBjb21waWxlcgorLy8gaW5mb0xvZzog
U3BlY2lmaWVzIGFuIGFycmF5IG9mIGNoYXJhY3RlcnMgdGhhdCBpcyB1c2VkIHRvIHJldHVybgor
Ly8gICAgICAgICAgdGhlIG9iamVjdCBjb2RlLiBJdCBpcyBhc3N1bWVkIHRoYXQgaW5mb0xvZyBo
YXMgZW5vdWdoIG1lbW9yeSB0bworLy8gICAgICAgICAgYWNjb21vZGF0ZSB0aGUgb2JqZWN0IGNv
ZGUuIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgcmVxdWlyZWQgdG8KKy8vICAgICAgICAgIHN0b3Jl
IHRoZSByZXR1cm5lZCBvYmplY3QgY29kZSBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZworLy8g
ICAgICAgICAgU2hHZXRJbmZvIHdpdGggU0hfT0JKRUNUX0NPREVfTEVOR1RILgordm9pZCBTaEdl
dE9iamVjdENvZGUoY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBjaGFyKiBvYmpDb2RlKTsKKworLy8g
UmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhbiBhY3RpdmUgYXR0cmlidXRlIHZhcmlhYmxlLgor
Ly8gUGFyYW1ldGVyczoKKy8vIGhhbmRsZTogU3BlY2lmaWVzIHRoZSBjb21waWxlcgorLy8gaW5k
ZXg6IFNwZWNpZmllcyB0aGUgaW5kZXggb2YgdGhlIGF0dHJpYnV0ZSB2YXJpYWJsZSB0byBiZSBx
dWVyaWVkLgorLy8gbGVuZ3RoOiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBhY3R1
YWxseSB3cml0dGVuIGluIHRoZSBzdHJpbmcKKy8vICAgICAgICAgaW5kaWNhdGVkIGJ5IG5hbWUg
KGV4Y2x1ZGluZyB0aGUgbnVsbCB0ZXJtaW5hdG9yKSBpZiBhIHZhbHVlIG90aGVyCisvLyAgICAg
ICAgIHRoYW4gTlVMTCBpcyBwYXNzZWQuCisvLyBzaXplOiBSZXR1cm5zIHRoZSBzaXplIG9mIHRo
ZSBhdHRyaWJ1dGUgdmFyaWFibGUuCisvLyB0eXBlOiBSZXR1cm5zIHRoZSBkYXRhIHR5cGUgb2Yg
dGhlIGF0dHJpYnV0ZSB2YXJpYWJsZS4KKy8vIG5hbWU6IFJldHVybnMgYSBudWxsIHRlcm1pbmF0
ZWQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG5hbWUgb2YgdGhlCisvLyAgICAgICBhdHRyaWJ1dGUg
dmFyaWFibGUuIEl0IGlzIGFzc3VtZWQgdGhhdCBuYW1lIGhhcyBlbm91Z2ggbWVtb3J5IHRvCisv
LyAgICAgICBhY2NvbW9kYXRlIHRoZSBhdHRyaWJ1dGUgdmFyaWFibGUgbmFtZS4gVGhlIHNpemUg
b2YgdGhlIGJ1ZmZlcgorLy8gICAgICAgcmVxdWlyZWQgdG8gc3RvcmUgdGhlIGF0dHJpYnV0ZSB2
YXJpYWJsZSBuYW1lIGNhbiBiZSBvYnRhaW5lZCBieQorLy8gICAgICAgY2FsbGluZyBTaEdldElu
Zm8gd2l0aCBTSF9BQ1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEguCit2b2lkIFNoR2V0QWN0aXZl
QXR0cmliKGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50
IGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgaW50KiBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICBTaERhdGFUeXBl
KiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICBjaGFyKiBuYW1lKTsKKworLy8gUmV0dXJu
cyBpbmZvcm1hdGlvbiBhYm91dCBhbiBhY3RpdmUgdW5pZm9ybSB2YXJpYWJsZS4KKy8vIFBhcmFt
ZXRlcnM6CisvLyBoYW5kbGU6IFNwZWNpZmllcyB0aGUgY29tcGlsZXIKKy8vIGluZGV4OiBTcGVj
aWZpZXMgdGhlIGluZGV4IG9mIHRoZSB1bmlmb3JtIHZhcmlhYmxlIHRvIGJlIHF1ZXJpZWQuCisv
LyBsZW5ndGg6IFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGFjdHVhbGx5IHdyaXR0
ZW4gaW4gdGhlIHN0cmluZworLy8gICAgICAgICBpbmRpY2F0ZWQgYnkgbmFtZSAoZXhjbHVkaW5n
IHRoZSBudWxsIHRlcm1pbmF0b3IpIGlmIGEgdmFsdWUKKy8vICAgICAgICAgb3RoZXIgdGhhbiBO
VUxMIGlzIHBhc3NlZC4KKy8vIHNpemU6IFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHVuaWZvcm0g
dmFyaWFibGUuCisvLyB0eXBlOiBSZXR1cm5zIHRoZSBkYXRhIHR5cGUgb2YgdGhlIHVuaWZvcm0g
dmFyaWFibGUuCisvLyBuYW1lOiBSZXR1cm5zIGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBjb250
YWluaW5nIHRoZSBuYW1lIG9mIHRoZQorLy8gICAgICAgdW5pZm9ybSB2YXJpYWJsZS4gSXQgaXMg
YXNzdW1lZCB0aGF0IG5hbWUgaGFzIGVub3VnaCBtZW1vcnkgdG8KKy8vICAgICAgIGFjY29tb2Rh
dGUgdGhlIHVuaWZvcm0gdmFyaWFibGUgbmFtZS4gVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciByZXF1
aXJlZAorLy8gICAgICAgdG8gc3RvcmUgdGhlIHVuaWZvcm0gdmFyaWFibGUgbmFtZSBjYW4gYmUg
b2J0YWluZWQgYnkgY2FsbGluZworLy8gICAgICAgU2hHZXRJbmZvIHdpdGggU0hfQUNUSVZFX1VO
SUZPUk1TX01BWF9MRU5HVEguCit2b2lkIFNoR2V0QWN0aXZlVW5pZm9ybShjb25zdCBTaEhhbmRs
ZSBoYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXgsCisgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCog
c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNoRGF0YVR5cGUqIHR5cGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyKiBuYW1lKTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21tb24vZGVidWcu
Y3BwCShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21t
b24vZGVidWcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMSwxNyArMTEsMjIgQEAKICNpbmNsdWRl
IDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgogCisjaWZuZGVmIFRSQUNFX09VVFBVVF9G
SUxFCisjZGVmaW5lIFRSQUNFX09VVFBVVF9GSUxFICJkZWJ1Zy50eHQiCisjZW5kaWYKKwogc3Rh
dGljIGJvb2wgdHJhY2Vfb24gPSB0cnVlOwogCiBuYW1lc3BhY2UgZ2wKIHsKIHZvaWQgdHJhY2Uo
Y29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CisjaWYgIWRlZmluZWQoQU5HTEVfRElTQUJMRV9U
UkFDRSkgCiAgICAgaWYgKHRyYWNlX29uKQogICAgIHsKICAgICAgICAgaWYgKGZvcm1hdCkKICAg
ICAgICAgewotICAgICAgICAgICAgRklMRSAqZmlsZSA9IGZvcGVuKCJkZWJ1Zy50eHQiLCAiYSIp
OworICAgICAgICAgICAgRklMRSAqZmlsZSA9IGZvcGVuKFRSQUNFX09VVFBVVF9GSUxFLCAiYSIp
OwogCiAgICAgICAgICAgICBpZiAoZmlsZSkKICAgICAgICAgICAgIHsKQEAgLTM0LDUgKzM5LDYg
QEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KKyNlbmRpZiAvLyAhZGVmaW5lZChB
TkdMRV9ESVNBQkxFX1RSQUNFKQogfQogfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbW1vbi9kZWJ1Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21tb24vZGVidWcuaAkocmV2aXNpb24gNzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tbW9uL2RlYnVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5LDcgKzE5LDcg
QEAKIH0KIAogLy8gQSBtYWNybyB0byBvdXRwdXQgYSB0cmFjZSBvZiBhIGZ1bmN0aW9uIGNhbGwg
YW5kIGl0cyBhcmd1bWVudHMgdG8gdGhlIGRlYnVnZ2luZyBsb2cKLSNpZm5kZWYgTkRFQlVHCisj
aWYgIWRlZmluZWQoTkRFQlVHKSAmJiAhZGVmaW5lZChBTkdMRV9ESVNBQkxFX1RSQUNFKSAKICAg
ICAjZGVmaW5lIFRSQUNFKG1lc3NhZ2UsIC4uLikgZ2w6OnRyYWNlKCJ0cmFjZTogJXMibWVzc2Fn
ZSJcbiIsIF9fRlVOQ1RJT05fXywgX19WQV9BUkdTX18pCiAjZWxzZQogICAgICNkZWZpbmUgVFJB
Q0UoLi4uKSAoKHZvaWQpMCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvVGV4dHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmNwcAkocmV2aXNpb24gNzYwMjUpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1RleHR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMCw2ICsxMCw4IEBACiAKICNpbmNsdWRlICJsaWJHTEVTdjIvVGV4dHVyZS5oIgogCisjaW5j
bHVkZSA8ZDNkeDl0ZXguaD4KKwogI2luY2x1ZGUgPGFsZ29yaXRobT4KIAogI2luY2x1ZGUgImNv
bW1vbi9kZWJ1Zy5oIgpAQCAtNDUsNiArNDcsNyBAQAogICAgIG1EaXJ0eU1ldGFEYXRhID0gdHJ1
ZTsKICAgICBtRGlydHkgPSB0cnVlOwogICAgIG1Jc1JlbmRlcmFibGUgPSBmYWxzZTsKKyAgICBt
VHlwZSA9IEdMX1VOU0lHTkVEX0JZVEU7CiAgICAgbUJhc2VUZXh0dXJlID0gTlVMTDsKIH0KIApA
QCAtMTc0LDg5ICsxNzcsMTc0IEBACiAgICAgcmV0dXJuIG1IZWlnaHQ7CiB9CiAKK2Jvb2wgVGV4
dHVyZTo6aXNGbG9hdGluZ1BvaW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1UeXBlID09IEdM
X0ZMT0FUIHx8IG1UeXBlID09IEdMX0hBTEZfRkxPQVRfT0VTKTsKK30KKworYm9vbCBUZXh0dXJl
Ojppc1JlbmRlcmFibGVGb3JtYXQoKSBjb25zdAoreworICAgIEQzREZPUk1BVCBmb3JtYXQgPSBn
ZXREM0RGb3JtYXQoKTsKKyAgICAKKyAgICBzd2l0Y2goZm9ybWF0KQorICAgIHsKKyAgICAgIGNh
c2UgRDNERk1UX0w4OgorICAgICAgY2FzZSBEM0RGTVRfQThMODoKKyAgICAgIGNhc2UgRDNERk1U
X0RYVDE6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGNhc2UgRDNERk1UX0E4UjhHOEI4
OgorICAgICAgY2FzZSBEM0RGTVRfWDhSOEc4Qjg6CisgICAgICBjYXNlIEQzREZNVF9BMTZCMTZH
MTZSMTZGOgorICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKwogLy8gU2VsZWN0cyBhbiBpbnRlcm5hbCBEaXJlY3QzRCA5
IGZvcm1hdCBmb3Igc3RvcmluZyBhbiBJbWFnZQotRDNERk9STUFUIFRleHR1cmU6OnNlbGVjdEZv
cm1hdChHTGVudW0gZm9ybWF0KQorRDNERk9STUFUIFRleHR1cmU6OnNlbGVjdEZvcm1hdChHTGVu
dW0gZm9ybWF0LCBHTGVudW0gdHlwZSkKIHsKICAgICBpZiAoZm9ybWF0ID09IEdMX0NPTVBSRVNT
RURfUkdCX1MzVENfRFhUMV9FWFQgfHwKICAgICAgICAgZm9ybWF0ID09IEdMX0NPTVBSRVNTRURf
UkdCQV9TM1RDX0RYVDFfRVhUKQogICAgIHsKICAgICAgICAgcmV0dXJuIEQzREZNVF9EWFQxOwog
ICAgIH0KLSAgICBlbHNlCisgICAgZWxzZSBpZiAodHlwZSA9PSBHTF9GTE9BVCkKICAgICB7Cisg
ICAgICAgIHJldHVybiBEM0RGTVRfQTMyQjMyRzMyUjMyRjsKKyAgICB9CisgICAgZWxzZSBpZiAo
dHlwZSA9PSBHTF9IQUxGX0ZMT0FUX09FUykKKyAgICB7CisgICAgICAgIHJldHVybiBEM0RGTVRf
QTE2QjE2RzE2UjE2RjsKKyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9C
WVRFKQorICAgIHsKKyAgICAgICAgaWYgKGZvcm1hdCA9PSBHTF9MVU1JTkFOQ0UgJiYgZ2V0Q29u
dGV4dCgpLT5zdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKCkpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBEM0RGTVRfTDg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZm9ybWF0
ID09IEdMX0xVTUlOQU5DRV9BTFBIQSAmJiBnZXRDb250ZXh0KCktPnN1cHBvcnRzTHVtaW5hbmNl
QWxwaGFUZXh0dXJlcygpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRDNERk1UX0E4
TDg7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZm9ybWF0ID09IEdMX1JHQikKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIEQzREZNVF9YOFI4RzhCODsKKyAgICAgICAgfQorCiAg
ICAgICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7CiAgICAgfQotfQogCi1pbnQgVGV4dHVyZTo6
aW1hZ2VQaXRjaChjb25zdCBJbWFnZSAmaW1nKSBjb25zdAotewotICAgIHJldHVybiBpbWcud2lk
dGggKiA0OworICAgIHJldHVybiBEM0RGTVRfQThSOEc4Qjg7CiB9CiAKIC8vIFN0b3JlIHRoZSBw
aXhlbCByZWN0YW5nbGUgZGVzaWduYXRlZCBieSB4b2Zmc2V0LHlvZmZzZXQsd2lkdGgsaGVpZ2h0
IHdpdGggcGl4ZWxzIHN0b3JlZCBhcyBmb3JtYXQvdHlwZSBhdCBpbnB1dAotLy8gaW50byB0aGUg
QkdSQTggcGl4ZWwgcmVjdGFuZ2xlIGF0IG91dHB1dCB3aXRoIG91dHB1dFBpdGNoIGJ5dGVzIGlu
IGJldHdlZW4gZWFjaCBsaW5lLgorLy8gaW50byB0aGUgdGFyZ2V0IHBpeGVsIHJlY3RhbmdsZSBh
dCBvdXRwdXQgd2l0aCBvdXRwdXRQaXRjaCBieXRlcyBpbiBiZXR3ZWVuIGVhY2ggbGluZS4KIHZv
aWQgVGV4dHVyZTo6bG9hZEltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25z
dCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIEQzRFNVUkZBQ0Vf
REVTQyAqZGVzY3JpcHRpb24pIGNvbnN0CiB7CiAgICAgR0xzaXplaSBpbnB1dFBpdGNoID0gQ29t
cHV0ZVBpdGNoKHdpZHRoLCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCk7CiAKLSAgICBz
d2l0Y2ggKGZvcm1hdCkKKyAgICBzd2l0Y2ggKHR5cGUpCiAgICAgewotICAgICAgY2FzZSBHTF9B
TFBIQToKLSAgICAgICAgbG9hZEFscGhhSW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOgotICAgICAgICBsb2FkTHVtaW5h
bmNlSW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAgIGNh
c2UgR0xfTFVNSU5BTkNFX0FMUEhBOgotICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFJbWFnZURh
dGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91
dHB1dFBpdGNoLCBvdXRwdXQpOwotICAgICAgICBicmVhazsKLQotICAgICAgY2FzZSBHTF9SR0I6
Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKKyAg
ICAgICAgc3dpdGNoIChmb3JtYXQpCiAgICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lH
TkVEX0JZVEU6CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICAgIGxvYWRBbHBo
YUltYWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBp
bnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgICAgIGxvYWRMdW1pbmFuY2VJbWFnZURhdGEo
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1
dFBpdGNoLCBvdXRwdXQsIGRlc2NyaXB0aW9uLT5Gb3JtYXQgPT0gRDNERk1UX0w4KTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFX0FMUEhBOgorICAgICAg
ICAgICAgbG9hZEx1bWluYW5jZUFscGhhSW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0LCBkZXNjcmlw
dGlvbi0+Rm9ybWF0ID09IEQzREZNVF9BOEw4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgIGNhc2UgR0xfUkdCOgogICAgICAgICAgICAgbG9hZFJHQlVCeXRlSW1hZ2VEYXRhKHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRj
aCwgb3V0cHV0KTsKICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6CisgICAgICAgICAgICBs
b2FkUkdCQVVCeXRlSW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgIGNhc2UgR0xfQkdSQV9FWFQ6CisgICAgICAgICAgICBsb2FkQkdSQUltYWdl
RGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwg
b3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCisgICAg
ICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQjoKICAgICAgICAgICAgIGxvYWRSR0I1NjVJbWFn
ZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQs
IG91dHB1dFBpdGNoLCBvdXRwdXQpOwogICAgICAgICAgICAgYnJlYWs7Ci0KICAgICAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotCi0gICAg
ICBjYXNlIEdMX1JHQkE6Ci0gICAgICAgIHN3aXRjaCAodHlwZSkKKyAgICAgIGNhc2UgR0xfVU5T
SUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpCiAgICAgICAgIHsK
LSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6Ci0gICAgICAgICAgICBsb2FkUkdCQVVC
eXRlSW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gs
IGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAg
ICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgICAgIGNhc2UgR0xf
UkdCQToKICAgICAgICAgICAgIGxvYWRSR0JBNDQ0NEltYWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0
LCB3aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7
CiAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlRf
NV81XzVfMToKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9Cisg
ICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAg
ICAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfUkdCQToK
ICAgICAgICAgICAgIGxvYWRSR0JBNTU1MUltYWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0
aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CiAgICAg
ICAgICAgICBicmVhazsKLQogICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAgICAg
ICAgIH0KICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX0JHUkFfRVhUOgotICAgICAgICBz
d2l0Y2ggKHR5cGUpCisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICBzd2l0Y2ggKGZvcm1h
dCkKICAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKLSAgICAgICAg
ICAgIGxvYWRCR1JBSW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlu
cHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAvLyBmbG9h
dCB0ZXh0dXJlcyBhcmUgY29udmVydGVkIHRvIFJHQkEsIG5vdCBCR1JBLCBhcyB0aGV5J3JlIHN0
b3JlZCB0aGF0IHdheSBpbiBEM0QKKyAgICAgICAgICBjYXNlIEdMX0FMUEhBOgorICAgICAgICAg
ICAgbG9hZEFscGhhRmxvYXRJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdo
dCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOwogICAgICAgICAgICAg
YnJlYWs7Ci0KKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgICAgIGxvYWRM
dW1pbmFuY2VGbG9hdEltYWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBp
bnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgIGxvYWRM
dW1pbmFuY2VBbHBoYUZsb2F0SW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWln
aHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfUkdCOgorICAgICAgICAgICAgbG9hZFJHQkZsb2F0
SW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0UGl0Y2gsIGlu
cHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
IGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAgIGxvYWRSR0JBRmxvYXRJbWFnZURhdGEoeG9mZnNl
dCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNo
LCBvdXRwdXQpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgZGVmYXVsdDogVU5SRUFD
SEFCTEUoKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfSEFMRl9G
TE9BVF9PRVM6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAg
Ly8gZmxvYXQgdGV4dHVyZXMgYXJlIGNvbnZlcnRlZCB0byBSR0JBLCBub3QgQkdSQSwgYXMgdGhl
eSdyZSBzdG9yZWQgdGhhdCB3YXkgaW4gRDNECisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAg
ICAgICAgICAgIGxvYWRBbHBoYUhhbGZGbG9hdEltYWdlRGF0YSh4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBpbnB1dFBpdGNoLCBpbnB1dCwgb3V0cHV0UGl0Y2gsIG91dHB1dCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAg
ICAgIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXRJbWFnZURhdGEoeG9mZnNldCwgeW9mZnNldCwgd2lk
dGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRwdXQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0VfQUxQSEE6CisgICAg
ICAgICAgICBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXRJbWFnZURhdGEoeG9mZnNldCwgeW9m
ZnNldCwgd2lkdGgsIGhlaWdodCwgaW5wdXRQaXRjaCwgaW5wdXQsIG91dHB1dFBpdGNoLCBvdXRw
dXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAg
ICAgICBsb2FkUkdCSGFsZkZsb2F0SW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBo
ZWlnaHQsIGlucHV0UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfUkdCQToKKyAgICAgICAgICAgIGxvYWRSR0JB
SGFsZkZsb2F0SW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGlucHV0
UGl0Y2gsIGlucHV0LCBvdXRwdXRQaXRjaCwgb3V0cHV0KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKyAgICAgICAgYnJl
YWs7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KIH0KQEAgLTI4MSwzNiAr
MzY5LDE1NCBAQAogICAgIH0KIH0KIAordm9pZCBUZXh0dXJlOjpsb2FkQWxwaGFGbG9hdEltYWdl
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCBmbG9hdCAqc291cmNlID0gTlVMTDsKKyAgICBmbG9h
dCAqZGVzdCA9IE5VTEw7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQor
ICAgIHsKKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0
YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7
CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9m
ZnNldCAqIDE2KTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAg
ICAgICB7CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMF0gPSAwOworICAgICAgICAgICAgZGVz
dFs0ICogeCArIDFdID0gMDsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IDA7CisgICAg
ICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSBzb3VyY2VbeF07CisgICAgICAgIH0KKyAgICB9Cit9
CisKK3ZvaWQgVGV4dHVyZTo6bG9hZEFscGhhSGFsZkZsb2F0SW1hZ2VEYXRhKEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNv
bnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QK
K3sKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKKyAgICB1bnNpZ25l
ZCBzaG9ydCAqZGVzdCA9IE5VTEw7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1bnNp
Z25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5
ICogaW5wdXRQaXRjaCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZz
ZXQpICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogOCk7CisgICAgICAgIGZvciAoaW50IHggPSAw
OyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgeworICAgICAgICAgICAgZGVzdFs0ICogeCArIDBd
ID0gMDsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9IDA7CisgICAgICAgICAgICBkZXN0
WzQgKiB4ICsgMl0gPSAwOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0gc291cmNlW3hd
OworICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIFRleHR1cmU6OmxvYWRMdW1pbmFuY2VJbWFn
ZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg
aW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAq
b3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3QKIHsKKyAgICBjb25zdCBpbnQgZGVzdEJ5dGVzUGVy
UGl4ZWwgPSBuYXRpdmU/IDE6IDQ7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqc291cmNlID0g
TlVMTDsKICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKIAogICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3VyY2UgPSBzdGF0aWNfY2Fz
dDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2g7Ci0gICAgICAg
IGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0KSArICh5ICsgeW9mZnNl
dCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBkZXN0ID0gc3RhdGljX2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2gg
KyB4b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7CisKKyAgICAgICAgaWYgKCFuYXRpdmUpICAg
Ly8gQkdSQTggZGVzdGluYXRpb24gZm9ybWF0CisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBkZXN0WzQgKiB4ICsgMF0gPSBzb3VyY2VbeF07CisgICAgICAgICAgICAgICAgZGVzdFs0ICog
eCArIDFdID0gc291cmNlW3hdOworICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNv
dXJjZVt4XTsKKyAgICAgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAweEZGOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgICAvLyBMOCBkZXN0aW5hdGlvbiBmb3Jt
YXQKKyAgICAgICAgeworICAgICAgICAgICAgbWVtY3B5KGRlc3QsIHNvdXJjZSwgd2lkdGgpOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmU6OmxvYWRMdW1pbmFuY2VGbG9hdElt
YWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgY29uc3QgZmxvYXQgKnNvdXJjZSA9IE5VTEw7Cisg
ICAgZmxvYXQgKmRlc3QgPSBOVUxMOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZmxv
YXQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2gpOworICAgICAgICBkZXN0ID0gcmVpbnRlcnByZXRfY2FzdDxmbG9hdCo+KHN0YXRpY19j
YXN0PHVuc2lnbmVkIGNoYXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNo
ICArIHhvZmZzZXQgKiAxNik7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgr
KykKICAgICAgICAgewogICAgICAgICAgICAgZGVzdFs0ICogeCArIDBdID0gc291cmNlW3hdOwog
ICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlW3hdOwogICAgICAgICAgICAgZGVz
dFs0ICogeCArIDJdID0gc291cmNlW3hdOwotICAgICAgICAgICAgZGVzdFs0ICogeCArIDNdID0g
MHhGRjsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDEuMGY7CiAgICAgICAgIH0KICAg
ICB9CiB9CiAKK3ZvaWQgVGV4dHVyZTo6bG9hZEx1bWluYW5jZUhhbGZGbG9hdEltYWdlRGF0YShH
TGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdo
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2
b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNvdXJjZSA9
IE5VTEw7CisgICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOworCisgICAgZm9yIChpbnQg
eSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25l
ZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOworICAgICAgICBkZXN0ID0gcmVpbnRl
cnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihv
dXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDgpOworICAg
ICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVt4XTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHgg
KyAxXSA9IHNvdXJjZVt4XTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAyXSA9IHNvdXJjZVt4
XTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4M0MwMDsgLy8gU0VFRUVFTU1NTU1N
TU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2Yml0IGZscHQgcmVwcmVzZW50YXRpb24gb2Yg
MQorICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIFRleHR1cmU6OmxvYWRMdW1pbmFuY2VBbHBo
YUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNo
LCB2b2lkICpvdXRwdXQpIGNvbnN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRw
dXRQaXRjaCwgdm9pZCAqb3V0cHV0LCBib29sIG5hdGl2ZSkgY29uc3QKIHsKKyAgICBjb25zdCBp
bnQgZGVzdEJ5dGVzUGVyUGl4ZWwgPSBuYXRpdmU/IDI6IDQ7CiAgICAgY29uc3QgdW5zaWduZWQg
Y2hhciAqc291cmNlID0gTlVMTDsKICAgICB1bnNpZ25lZCBjaGFyICpkZXN0ID0gTlVMTDsKIAog
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCiAgICAgewogICAgICAgICBzb3Vy
Y2UgPSBzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0
UGl0Y2g7Ci0gICAgICAgIGRlc3QgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCArIHhvZmZzZXQgKiA0OworICAgICAgICBk
ZXN0ID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlvZmZzZXQp
ICogb3V0cHV0UGl0Y2ggKyB4b2Zmc2V0ICogZGVzdEJ5dGVzUGVyUGl4ZWw7CisgICAgICAgIAor
ICAgICAgICBpZiAoIW5hdGl2ZSkgICAvLyBCR1JBOCBkZXN0aW5hdGlvbiBmb3JtYXQKKyAgICAg
ICAgeworICAgICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07
CisgICAgICAgICAgICAgICAgZGVzdFs0ICogeCArIDFdID0gc291cmNlWzIqeCswXTsKKyAgICAg
ICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBzb3VyY2VbMip4KzBdOworICAgICAgICAgICAg
ICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJjZVsyKngrMV07CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtZW1jcHkoZGVzdCwg
c291cmNlLCB3aWR0aCAqIDIpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmU6
OmxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAg
IGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOworICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKKwor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBzb3Vy
Y2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKKyAgICAgICAgZGVzdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOwogICAgICAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCiAgICAgICAgIHsKICAgICAgICAgICAg
IGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07CkBAIC0zMjEsNiArNTI3LDI2IEBACiAg
ICAgfQogfQogCit2b2lkIFRleHR1cmU6OmxvYWRMdW1pbmFuY2VBbHBoYUhhbGZGbG9hdEltYWdl
RGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBp
dGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0Cit7CisgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgKnNv
dXJjZSA9IE5VTEw7CisgICAgdW5zaWduZWQgc2hvcnQgKmRlc3QgPSBOVUxMOworCisgICAgZm9y
IChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAgICAgIHNvdXJjZSA9IHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgc2hvcnQqPihzdGF0aWNfY2FzdDxjb25zdCB1
bnNpZ25lZCBjaGFyKj4oaW5wdXQpICsgeSAqIGlucHV0UGl0Y2gpOworICAgICAgICBkZXN0ID0g
cmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXIqPihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICsgeG9mZnNldCAqIDgp
OworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGRlc3RbNCAqIHggKyAwXSA9IHNvdXJjZVsyKngrMF07CisgICAgICAgICAgICBk
ZXN0WzQgKiB4ICsgMV0gPSBzb3VyY2VbMip4KzBdOworICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDJdID0gc291cmNlWzIqeCswXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IHNvdXJj
ZVsyKngrMV07CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgVGV4dHVyZTo6bG9hZFJHQlVC
eXRlSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZv
aWQgKm91dHB1dCkgY29uc3QKIHsKQEAgLTM2Miw2ICs1ODgsNDYgQEAKICAgICB9CiB9CiAKK3Zv
aWQgVGV4dHVyZTo6bG9hZFJHQkZsb2F0SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBz
aXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCBmbG9h
dCAqc291cmNlID0gTlVMTDsKKyAgICBmbG9hdCAqZGVzdCA9IE5VTEw7CisKKyAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBmbG9hdCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIq
PihpbnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9j
YXN0PGZsb2F0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAoeSArIHlv
ZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDE2KTsKKyAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICB7CisgICAgICAgICAgICBkZXN0WzQgKiB4
ICsgMF0gPSBzb3VyY2VbeCAqIDMgKyAwXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAxXSA9
IHNvdXJjZVt4ICogMyArIDFdOworICAgICAgICAgICAgZGVzdFs0ICogeCArIDJdID0gc291cmNl
W3ggKiAzICsgMl07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgM10gPSAxLjBmOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIFRleHR1cmU6OmxvYWRSR0JIYWxmRmxvYXRJbWFnZURhdGEo
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3QKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBzaG9ydCAqc291cmNlID0gTlVMTDsKKyAg
ICB1bnNpZ25lZCBzaG9ydCAqZGVzdCA9IE5VTEw7CisKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8
IGhlaWdodDsgeSsrKQorICAgIHsKKyAgICAgICAgc291cmNlID0gcmVpbnRlcnByZXRfY2FzdDxj
b25zdCB1bnNpZ25lZCBzaG9ydCo+KHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihp
bnB1dCkgKyB5ICogaW5wdXRQaXRjaCk7CisgICAgICAgIGRlc3QgPSByZWludGVycHJldF9jYXN0
PHVuc2lnbmVkIHNob3J0Kj4oc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcio+KG91dHB1dCkgKyAo
eSArIHlvZmZzZXQpICogb3V0cHV0UGl0Y2ggICsgeG9mZnNldCAqIDgpOworICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlc3Rb
NCAqIHggKyAwXSA9IHNvdXJjZVt4ICogMyArIDBdOworICAgICAgICAgICAgZGVzdFs0ICogeCAr
IDFdID0gc291cmNlW3ggKiAzICsgMV07CisgICAgICAgICAgICBkZXN0WzQgKiB4ICsgMl0gPSBz
b3VyY2VbeCAqIDMgKyAyXTsKKyAgICAgICAgICAgIGRlc3RbNCAqIHggKyAzXSA9IDB4M0MwMDsg
Ly8gU0VFRUVFTU1NTU1NTU1NTSwgUyA9IDAsIEUgPSAxNSwgTSA9IDA6IDE2Yml0IGZscHQgcmVw
cmVzZW50YXRpb24gb2YgMQorICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIFRleHR1cmU6Omxv
YWRSR0JBVUJ5dGVJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0
UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKQEAgLTQyNCw2ICs2OTAsMzQgQEAKICAgICB9
CiB9CiAKK3ZvaWQgVGV4dHVyZTo6bG9hZFJHQkFGbG9hdEltYWdlRGF0YShHTGludCB4b2Zmc2V0
LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdAoreworICAg
IGNvbnN0IGZsb2F0ICpzb3VyY2UgPSBOVUxMOworICAgIGZsb2F0ICpkZXN0ID0gTlVMTDsKKwor
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspCisgICAgeworICAgICAgICBzb3Vy
Y2UgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGZsb2F0Kj4oc3RhdGljX2Nhc3Q8Y29uc3QgdW5z
aWduZWQgY2hhcio+KGlucHV0KSArIHkgKiBpbnB1dFBpdGNoKTsKKyAgICAgICAgZGVzdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8ZmxvYXQqPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4ob3V0cHV0
KSArICh5ICsgeW9mZnNldCkgKiBvdXRwdXRQaXRjaCAgKyB4b2Zmc2V0ICogMTYpOworICAgICAg
ICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDE2KTsKKyAgICB9Cit9CisKK3ZvaWQgVGV4
dHVyZTo6bG9hZFJHQkFIYWxmRmxvYXRJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKK3sKKyAgICBjb25zdCB1
bnNpZ25lZCBjaGFyICpzb3VyY2UgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmRlc3QgPSBO
VUxMOworCisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykKKyAgICB7CisgICAg
ICAgIHNvdXJjZSA9IHN0YXRpY19jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPihpbnB1dCkgKyB5
ICogaW5wdXRQaXRjaDsKKyAgICAgICAgZGVzdCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIq
PihvdXRwdXQpICsgKHkgKyB5b2Zmc2V0KSAqIG91dHB1dFBpdGNoICArIHhvZmZzZXQgKiA4Owor
ICAgICAgICBtZW1jcHkoZGVzdCwgc291cmNlLCB3aWR0aCAqIDgpOworICAgIH0KK30KKwogdm9p
ZCBUZXh0dXJlOjpsb2FkQkdSQUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0
LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0
cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3QKIHsKQEAgLTQzOCw3ICs3MzIsNyBAQAogICAg
IH0KIH0KIAotdm9pZCBUZXh0dXJlOjpjcmVhdGVTdXJmYWNlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBJbWFnZSAqaW1nKQordm9pZCBUZXh0dXJlOjpjcmVh
dGVTdXJmYWNlKEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBH
TGVudW0gdHlwZSwgSW1hZ2UgKmltZykKIHsKICAgICBJRGlyZWN0M0RUZXh0dXJlOSAqbmV3VGV4
dHVyZSA9IE5VTEw7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKm5ld1N1cmZhY2UgPSBOVUxMOwpA
QCAtNDY1LDcgKzc1OSw3IEBACiAgICAgICAgICAgICBsZXZlbFRvRmV0Y2ggPSB1cHNhbXBsZUNv
dW50OwogICAgICAgICB9CiAKLSAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBnZXREZXZpY2UoKS0+
Q3JlYXRlVGV4dHVyZShyZXF1ZXN0V2lkdGgsIHJlcXVlc3RIZWlnaHQsIGxldmVsVG9GZXRjaCAr
IDEsIE5VTEwsIHNlbGVjdEZvcm1hdChmb3JtYXQpLAorICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGdldERldmljZSgpLT5DcmVhdGVUZXh0dXJlKHJlcXVlc3RXaWR0aCwgcmVxdWVzdEhlaWdodCwg
bGV2ZWxUb0ZldGNoICsgMSwgTlVMTCwgc2VsZWN0Rm9ybWF0KGZvcm1hdCwgdHlwZSksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUE9PTF9T
WVNURU1NRU0sICZuZXdUZXh0dXJlLCBOVUxMKTsKIAogICAgICAgICBpZiAoRkFJTEVEKHJlc3Vs
dCkpCkBAIC00ODgsMTAgKzc4MiwxMyBAQAogCiB2b2lkIFRleHR1cmU6OnNldEltYWdlKEdMc2l6
ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgR0xp
bnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpCiB7Ci0g
ICAgY3JlYXRlU3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGltZyk7CisgICAgY3JlYXRl
U3VyZmFjZSh3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGltZyk7CiAKICAgICBpZiAocGl4
ZWxzICE9IE5VTEwgJiYgaW1nLT5zdXJmYWNlICE9IE5VTEwpCiAgICAgeworICAgICAgICBEM0RT
VVJGQUNFX0RFU0MgZGVzY3JpcHRpb247CisgICAgICAgIGltZy0+c3VyZmFjZS0+R2V0RGVzYygm
ZGVzY3JpcHRpb24pOworCiAgICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKICAgICAgICAg
SFJFU1VMVCByZXN1bHQgPSBpbWctPnN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrZWQsIE5VTEwsIDAp
OwogCkBAIC00OTksNyArNzk2LDcgQEAKIAogICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIGxvYWRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgbG9ja2VkLlBpdGNoLCBs
b2NrZWQucEJpdHMpOworICAgICAgICAgICAgbG9hZEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVp
Z2h0LCBmb3JtYXQsIHR5cGUsIHVucGFja0FsaWdubWVudCwgcGl4ZWxzLCBsb2NrZWQuUGl0Y2gs
IGxvY2tlZC5wQml0cywgJmRlc2NyaXB0aW9uKTsKICAgICAgICAgICAgIGltZy0+c3VyZmFjZS0+
VW5sb2NrUmVjdCgpOwogICAgICAgICB9CiAKQEAgLTUxMSw3ICs4MDgsNyBAQAogCiB2b2lkIFRl
eHR1cmU6OnNldENvbXByZXNzZWRJbWFnZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwg
R0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1h
Z2UgKmltZykKIHsKLSAgICBjcmVhdGVTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1n
KTsKKyAgICBjcmVhdGVTdXJmYWNlKHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgR0xfVU5TSUdORURf
QllURSwgaW1nKTsKIAogICAgIGlmIChwaXhlbHMgIT0gTlVMTCAmJiBpbWctPnN1cmZhY2UgIT0g
TlVMTCkKICAgICB7CkBAIC01NDAsMTggKzgzNywzMCBAQAogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgRDNETE9DS0VEX1JFQ1QgbG9ja2VkOwotICAgIEhSRVNVTFQgcmVzdWx0
ID0gaW1nLT5zdXJmYWNlLT5Mb2NrUmVjdCgmbG9ja2VkLCBOVUxMLCAwKTsKKyAgICBpZiAoIWlt
Zy0+c3VyZmFjZSkKKyAgICB7CisgICAgICAgIGNyZWF0ZVN1cmZhY2UoaW1nLT53aWR0aCwgaW1n
LT5oZWlnaHQsIGZvcm1hdCwgdHlwZSwgaW1nKTsKKyAgICB9CiAKLSAgICBBU1NFUlQoU1VDQ0VF
REVEKHJlc3VsdCkpOworICAgIGlmIChwaXhlbHMgIT0gTlVMTCAmJiBpbWctPnN1cmZhY2UgIT0g
TlVMTCkKKyAgICB7CisgICAgICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICAg
ICAgaW1nLT5zdXJmYWNlLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7CiAKLSAgICBpZiAoU1VDQ0VF
REVEKHJlc3VsdCkpCi0gICAgewotICAgICAgICBsb2FkSW1hZ2VEYXRhKHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMs
IGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzKTsKLSAgICAgICAgaW1nLT5zdXJmYWNlLT5Vbmxv
Y2tSZWN0KCk7CisgICAgICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsKKyAgICAgICAgSFJFU1VM
VCByZXN1bHQgPSBpbWctPnN1cmZhY2UtPkxvY2tSZWN0KCZsb2NrZWQsIE5VTEwsIDApOworCisg
ICAgICAgIEFTU0VSVChTVUNDRUVERUQocmVzdWx0KSk7CisKKyAgICAgICAgaWYgKFNVQ0NFRURF
RChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBsb2FkSW1hZ2VEYXRhKHhvZmZzZXQs
IHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBw
aXhlbHMsIGxvY2tlZC5QaXRjaCwgbG9ja2VkLnBCaXRzLCAmZGVzY3JpcHRpb24pOworICAgICAg
ICAgICAgaW1nLT5zdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgICAgIH0KKworICAgICAgICBp
bWctPmRpcnR5ID0gdHJ1ZTsKICAgICB9CiAKLSAgICBpbWctPmRpcnR5ID0gdHJ1ZTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTY5LDMyICs4NzgsMjE1IEBACiAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICB9CiAKLSAgICBSRUNUIHVwZGF0ZVJlZ2lvbjsKLSAgICB1cGRhdGVSZWdpb24u
bGVmdCA9IHhvZmZzZXQ7Ci0gICAgdXBkYXRlUmVnaW9uLnJpZ2h0ID0geG9mZnNldCArIHdpZHRo
OwotICAgIHVwZGF0ZVJlZ2lvbi5ib3R0b20gPSB5b2Zmc2V0ICsgaGVpZ2h0OwotICAgIHVwZGF0
ZVJlZ2lvbi50b3AgPSB5b2Zmc2V0OworICAgIGlmICghaW1nLT5zdXJmYWNlKQorICAgIHsKKyAg
ICAgICAgY3JlYXRlU3VyZmFjZShpbWctPndpZHRoLCBpbWctPmhlaWdodCwgZm9ybWF0LCBHTF9V
TlNJR05FRF9CWVRFLCBpbWcpOworICAgIH0KIAotICAgIEQzRExPQ0tFRF9SRUNUIGxvY2tlZDsK
LSAgICBIUkVTVUxUIHJlc3VsdCA9IGltZy0+c3VyZmFjZS0+TG9ja1JlY3QoJmxvY2tlZCwgJnVw
ZGF0ZVJlZ2lvbiwgMCk7CisgICAgaWYgKHBpeGVscyAhPSBOVUxMICYmIGltZy0+c3VyZmFjZSAh
PSBOVUxMKQorICAgIHsKKyAgICAgICAgUkVDVCB1cGRhdGVSZWdpb247CisgICAgICAgIHVwZGF0
ZVJlZ2lvbi5sZWZ0ID0geG9mZnNldDsKKyAgICAgICAgdXBkYXRlUmVnaW9uLnJpZ2h0ID0geG9m
ZnNldCArIHdpZHRoOworICAgICAgICB1cGRhdGVSZWdpb24uYm90dG9tID0geW9mZnNldCArIGhl
aWdodDsKKyAgICAgICAgdXBkYXRlUmVnaW9uLnRvcCA9IHlvZmZzZXQ7CiAKLSAgICBBU1NFUlQo
U1VDQ0VFREVEKHJlc3VsdCkpOworICAgICAgICBEM0RMT0NLRURfUkVDVCBsb2NrZWQ7CisgICAg
ICAgIEhSRVNVTFQgcmVzdWx0ID0gaW1nLT5zdXJmYWNlLT5Mb2NrUmVjdCgmbG9ja2VkLCAmdXBk
YXRlUmVnaW9uLCAwKTsKIAotICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKLSAgICB7Ci0gICAg
ICAgIEdMc2l6ZWkgaW5wdXRQaXRjaCA9IENvbXB1dGVDb21wcmVzc2VkUGl0Y2god2lkdGgsIGZv
cm1hdCk7Ci0gICAgICAgIGludCByb3dzID0gaW1hZ2VTaXplIC8gaW5wdXRQaXRjaDsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyArK2kpCisgICAgICAgIEFTU0VSVChTVUNDRUVE
RUQocmVzdWx0KSk7CisKKyAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQogICAgICAgICB7
Ci0gICAgICAgICAgICBtZW1jcHkoKHZvaWQqKSgoQllURSopbG9ja2VkLnBCaXRzICsgaSAqIGxv
Y2tlZC5QaXRjaCksICh2b2lkKikoKEJZVEUqKXBpeGVscyArIGkgKiBpbnB1dFBpdGNoKSwgaW5w
dXRQaXRjaCk7CisgICAgICAgICAgICBHTHNpemVpIGlucHV0UGl0Y2ggPSBDb21wdXRlQ29tcHJl
c3NlZFBpdGNoKHdpZHRoLCBmb3JtYXQpOworICAgICAgICAgICAgaW50IHJvd3MgPSBpbWFnZVNp
emUgLyBpbnB1dFBpdGNoOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByb3dzOyAr
K2kpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbWVtY3B5KCh2b2lkKikoKEJZVEUq
KWxvY2tlZC5wQml0cyArIGkgKiBsb2NrZWQuUGl0Y2gpLCAodm9pZCopKChCWVRFKilwaXhlbHMg
KyBpICogaW5wdXRQaXRjaCksIGlucHV0UGl0Y2gpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaW1nLT5zdXJmYWNlLT5VbmxvY2tSZWN0KCk7CiAgICAgICAgIH0KLSAgICAgICAgaW1nLT5z
dXJmYWNlLT5VbmxvY2tSZWN0KCk7CisKKyAgICAgICAgaW1nLT5kaXJ0eSA9IHRydWU7CiAgICAg
fQogCi0gICAgaW1nLT5kaXJ0eSA9IHRydWU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKKy8vIFRo
aXMgaW1wbGVtZW50cyBnbENvcHlUZXhbU3ViXUltYWdlMkQgZm9yIG5vbi1yZW5kZXJhYmxlIGlu
dGVybmFsIHRleHR1cmUgZm9ybWF0cwordm9pZCBUZXh0dXJlOjpjb3B5Tm9uUmVuZGVyYWJsZShJ
bWFnZSAqaW1hZ2UsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQpCit7CisgICAgSURpcmVjdDNERGV2aWNl
OSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnN1cmZhY2Ug
PSBOVUxMOworICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjcmlwdGlvbjsKKyAgICByZW5kZXJUYXJn
ZXQtPkdldERlc2MoJmRlc2NyaXB0aW9uKTsKKyAgICAKKyAgICBIUkVTVUxUIHJlc3VsdCA9IGRl
dmljZS0+Q3JlYXRlT2Zmc2NyZWVuUGxhaW5TdXJmYWNlKGRlc2NyaXB0aW9uLldpZHRoLCBkZXNj
cmlwdGlvbi5IZWlnaHQsIGRlc2NyaXB0aW9uLkZvcm1hdCwgRDNEUE9PTF9TWVNURU1NRU0sICZz
dXJmYWNlLCBOVUxMKTsKKworICAgIGlmICghU1VDQ0VFREVEKHJlc3VsdCkpCisgICAgeworICAg
ICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgbWF0Y2hpbmcgZGVzdGluYXRpb24gc3VyZmFjZS4i
KTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAg
IHJlc3VsdCA9IGRldmljZS0+R2V0UmVuZGVyVGFyZ2V0RGF0YShyZW5kZXJUYXJnZXQsIHN1cmZh
Y2UpOworCisgICAgaWYgKCFTVUNDRUVERUQocmVzdWx0KSkKKyAgICB7CisgICAgICAgIEVSUigi
R2V0UmVuZGVyVGFyZ2V0RGF0YSB1bmV4cGVjdGVkbHkgZmFpbGVkLiIpOworICAgICAgICBzdXJm
YWNlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsK
KyAgICB9CisKKyAgICBEM0RMT0NLRURfUkVDVCBzb3VyY2VMb2NrID0gezB9OworICAgIFJFQ1Qg
c291cmNlUmVjdCA9IHt4LCB5LCB4ICsgd2lkdGgsIHkgKyBoZWlnaHR9OworICAgIHJlc3VsdCA9
IHN1cmZhY2UtPkxvY2tSZWN0KCZzb3VyY2VMb2NrLCAmc291cmNlUmVjdCwgMCk7CisKKyAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICBFUlIoIkZhaWxlZCB0byBsb2NrIHRo
ZSBzb3VyY2Ugc3VyZmFjZSAocmVjdGFuZ2xlIG1pZ2h0IGJlIGludmFsaWQpLiIpOworICAgICAg
ICBzdXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgICAgIHN1cmZhY2UtPlJlbGVhc2UoKTsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KKworICAgIGlmICgh
aW1hZ2UtPnN1cmZhY2UpCisgICAgeworICAgICAgICBjcmVhdGVTdXJmYWNlKHdpZHRoLCBoZWln
aHQsIGludGVybmFsRm9ybWF0LCBtVHlwZSwgaW1hZ2UpOworICAgIH0KKworICAgIGlmIChpbWFn
ZS0+c3VyZmFjZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gY3JlYXRl
IGFuIGltYWdlIHN1cmZhY2UuIik7CisgICAgICAgIHN1cmZhY2UtPlVubG9ja1JlY3QoKTsKKyAg
ICAgICAgc3VyZmFjZS0+UmVsZWFzZSgpOworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09G
X01FTU9SWSk7IAorICAgIH0KKworICAgIEQzRExPQ0tFRF9SRUNUIGRlc3RMb2NrID0gezB9Owor
ICAgIFJFQ1QgZGVzdFJlY3QgPSB7eG9mZnNldCwgeW9mZnNldCwgeG9mZnNldCArIHdpZHRoLCB5
b2Zmc2V0ICsgaGVpZ2h0fTsKKyAgICByZXN1bHQgPSBpbWFnZS0+c3VyZmFjZS0+TG9ja1JlY3Qo
JmRlc3RMb2NrLCAmZGVzdFJlY3QsIDApOworICAgIAorICAgIGlmIChGQUlMRUQocmVzdWx0KSkK
KyAgICB7CisgICAgICAgIEVSUigiRmFpbGVkIHRvIGxvY2sgdGhlIGRlc3RpbmF0aW9uIHN1cmZh
Y2UgKHJlY3RhbmdsZSBtaWdodCBiZSBpbnZhbGlkKS4iKTsKKyAgICAgICAgc3VyZmFjZS0+VW5s
b2NrUmVjdCgpOworICAgICAgICBzdXJmYWNlLT5SZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBl
cnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9CisKKyAgICBpZiAoZGVzdExvY2sucEJpdHMg
JiYgc291cmNlTG9jay5wQml0cykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKnNvdXJj
ZSA9ICh1bnNpZ25lZCBjaGFyKilzb3VyY2VMb2NrLnBCaXRzOworICAgICAgICB1bnNpZ25lZCBj
aGFyICpkZXN0ID0gKHVuc2lnbmVkIGNoYXIqKWRlc3RMb2NrLnBCaXRzOworCisgICAgICAgIHN3
aXRjaCAoZGVzY3JpcHRpb24uRm9ybWF0KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBEM0RG
TVRfWDhSOEc4Qjg6CisgICAgICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CisgICAgICAgICAg
ICBzd2l0Y2goZ2V0RDNERm9ybWF0KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNh
c2UgRDNERk1UX0w4OgorICAgICAgICAgICAgICAgIGZvcihpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7
IHkrKykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgeCA9
IDA7IHggPCB3aWR0aDsgeCsrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBkZXN0W3hdID0gc291cmNlW3ggKiA0ICsgMl07CisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsK
KyAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgRDNERk1U
X0E4TDg6CisgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8
IHdpZHRoOyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRlc3RbeCAqIDIgKyAwXSA9IHNvdXJjZVt4ICogNCArIDJdOworICAgICAgICAgICAgICAg
ICAgICAgICAgZGVzdFt4ICogMiArIDFdID0gc291cmNlW3ggKiA0ICsgM107CisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNlTG9jay5Q
aXRjaDsKKyAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKKyAgICAgICAgICAg
IHN3aXRjaChnZXREM0RGb3JtYXQoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2Fz
ZSBEM0RGTVRfTDg6CisgICAgICAgICAgICAgICAgZm9yKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
eSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yKGludCB4ID0g
MDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNlW3ggKiAyICsgMV0gJiAweEY4Owor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4XSA9IHJlZCB8IChyZWQgPj4gNSk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBzb3VyY2UgKz0gc291cmNl
TG9jay5QaXRjaDsKKyAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBkZXN0TG9jay5QaXRjaDsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGNhc2UgRDNERk1UX0ExUjVHNUI1OgorICAg
ICAgICAgICAgc3dpdGNoKGdldEQzREZvcm1hdCgpKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICBjYXNlIEQzREZNVF9MODoKKyAgICAgICAgICAgICAgICBmb3IoaW50IHkgPSAwOyB5IDwg
aGVpZ2h0OyB5KyspCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3Io
aW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciByZWQgPSBzb3VyY2VbeCAqIDIgKyAxXSAm
IDB4N0M7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXN0W3hdID0gKHJlZCA8PCAxKSB8IChy
ZWQgPj4gNCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBz
b3VyY2UgKz0gc291cmNlTG9jay5QaXRjaDsKKyAgICAgICAgICAgICAgICAgICAgZGVzdCArPSBk
ZXN0TG9jay5QaXRjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgRDNERk1UX0E4TDg6CisgICAgICAgICAgICAgICAgZm9yKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspCisgICAgICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgcmVkID0gc291cmNl
W3ggKiAyICsgMV0gJiAweDdDOworICAgICAgICAgICAgICAgICAgICAgICAgZGVzdFt4ICogMiAr
IDBdID0gKHJlZCA8PCAxKSB8IChyZWQgPj4gNCk7CisgICAgICAgICAgICAgICAgICAgICAgICBk
ZXN0W3ggKiAyICsgMV0gPSAoc2lnbmVkIGNoYXIpc291cmNlW3ggKiAyICsgMV0gPj4gNzsKKyAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHNvdXJjZSArPSBzb3Vy
Y2VMb2NrLlBpdGNoOworICAgICAgICAgICAgICAgICAgICBkZXN0ICs9IGRlc3RMb2NrLlBpdGNo
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CisgICAgICAgIH0KKworICAgICAgICBpbWFnZS0+ZGlydHkgPSB0cnVlOwor
ICAgICAgICBtRGlydHlNZXRhRGF0YSA9IHRydWU7ICAgIAorICAgIH0KKworICAgIGltYWdlLT5z
dXJmYWNlLT5VbmxvY2tSZWN0KCk7CisgICAgc3VyZmFjZS0+VW5sb2NrUmVjdCgpOworICAgIHN1
cmZhY2UtPlJlbGVhc2UoKTsKK30KKworRDNERk9STUFUIFRleHR1cmU6OmdldEQzREZvcm1hdCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHNlbGVjdEZvcm1hdChnZXRGb3JtYXQoKSwgbVR5cGUpOwor
fQorCiBJRGlyZWN0M0RCYXNlVGV4dHVyZTkgKlRleHR1cmU6OmdldFRleHR1cmUoKQogewogICAg
IGlmICghaXNDb21wbGV0ZSgpKQpAQCAtNjgzLDE1ICsxMTc1LDE5IEBACiAgICAgcmV0dXJuIG1C
YXNlVGV4dHVyZSA/IG1CYXNlVGV4dHVyZS0+R2V0TGV2ZWxDb3VudCgpIDogMDsKIH0KIAorYm9v
bCBUZXh0dXJlOjppc1JlbmRlcmFibGUoKSBjb25zdAoreworICAgIHJldHVybiBtSXNSZW5kZXJh
YmxlOworfQorCiBUZXh0dXJlMkQ6OlRleHR1cmUyRChHTHVpbnQgaWQpIDogVGV4dHVyZShpZCkK
IHsKICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0gICAgbUNvbG9yYnVmZmVyUHJveHkgPSBOVUxMOwog
fQogCiBUZXh0dXJlMkQ6On5UZXh0dXJlMkQoKQogewotICAgIGRlbGV0ZSBtQ29sb3JidWZmZXJQ
cm94eTsKKyAgICBtQ29sb3JidWZmZXJQcm94eS5zZXQoTlVMTCk7CiAKICAgICBpZiAobVRleHR1
cmUpCiAgICAgewpAQCAtNzE0LDkgKzEyMTAsOSBAQAogLy8gZm9yIHJlbmRlci10by10ZXh0dXJl
IChzdWNoIGFzIENvcHlUZXhJbWFnZSkuIFdlIGhhdmUgbm8gd2F5IG9mIGtlZXBpbmcgaW5kaXZp
ZHVhbCBpbmNvbnNpc3RlbnQgbGV2ZWxzLgogLy8gQ2FsbCB0aGlzIHdoZW4gYSBwYXJ0aWN1bGFy
IGxldmVsIG9mIHRoZSB0ZXh0dXJlIG11c3QgYmUgZGVmaW5lZCB3aXRoIGEgc3BlY2lmaWMgZm9y
bWF0LCB3aWR0aCBhbmQgaGVpZ2h0LgogLy8KLS8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXhpc3Rp
bmcgdGV4dHVyZSB3YXMgdW5zdWl0YWJsZSBoYWQgdG8gYmUgZGVzdHJveWVkLiBJZiBzbywgaXQg
d2lsbCBhbHNvIHNldAorLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBleGlzdGluZyB0ZXh0dXJlIHdh
cyB1bnN1aXRhYmxlIGFuZCBoYWQgdG8gYmUgZGVzdHJveWVkLiBJZiBzbywgaXQgd2lsbCBhbHNv
IHNldAogLy8gYSBuZXcgaGVpZ2h0IGFuZCB3aWR0aCBmb3IgdGhlIHRleHR1cmUgYnkgd29ya2lu
ZyBiYWNrd2FyZHMgZnJvbSB0aGUgZ2l2ZW4gd2lkdGggYW5kIGhlaWdodC4KLWJvb2wgVGV4dHVy
ZTJEOjpyZWRlZmluZVRleHR1cmUoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwg
R0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQpCitib29sIFRleHR1cmUyRDo6cmVkZWZpbmVU
ZXh0dXJlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gdHlwZSkKIHsKICAgICBib29sIHdpZHRoT2theSA9ICht
V2lkdGggPj4gbGV2ZWwgPT0gd2lkdGgpOwogICAgIGJvb2wgaGVpZ2h0T2theSA9IChtSGVpZ2h0
ID4+IGxldmVsID09IGhlaWdodCk7CkBAIC03MjUsOCArMTIyMSwxMCBAQAogICAgICAgICAgICAg
ICAgICAgICAgfHwgKHdpZHRoT2theSAmJiBtSGVpZ2h0ID4+IGxldmVsID09IDAgJiYgaGVpZ2h0
ID09IDEpCiAgICAgICAgICAgICAgICAgICAgICB8fCAoaGVpZ2h0T2theSAmJiBtV2lkdGggPj4g
bGV2ZWwgPT0gMCAmJiB3aWR0aCA9PSAxKSk7CiAKLSAgICBib29sIHRleHR1cmVPa2F5ID0gKHNp
emVPa2F5ICYmIGludGVybmFsRm9ybWF0ID09IG1JbWFnZUFycmF5WzBdLmZvcm1hdCk7CisgICAg
Ym9vbCB0eXBlT2theSA9ICh0eXBlID09IG1UeXBlKTsKIAorICAgIGJvb2wgdGV4dHVyZU9rYXkg
PSAoc2l6ZU9rYXkgJiYgdHlwZU9rYXkgJiYgaW50ZXJuYWxGb3JtYXQgPT0gbUltYWdlQXJyYXlb
MF0uZm9ybWF0KTsKKwogICAgIGlmICghdGV4dHVyZU9rYXkpCiAgICAgewogICAgICAgICBUUkFD
RSgiUmVkZWZpbmluZyAyRCB0ZXh0dXJlICglZCwgMHglMDRYLCAlZCwgJWQgPT4gMHglMDRYLCAl
ZCwgJWQpLiIsIGxldmVsLApAQCAtNzM1LDcgKzEyMzMsNyBAQAogCiAgICAgICAgIC8vIFB1cmdl
IGFsbCB0aGUgbGV2ZWxzIGFuZCB0aGUgdGV4dHVyZS4KIAotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IE1BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQorICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IElNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMUzsgaSsrKQogICAgICAgICB7CiAg
ICAgICAgICAgICBpZiAobUltYWdlQXJyYXlbaV0uc3VyZmFjZSAhPSBOVUxMKQogICAgICAgICAg
ICAgewpAQCAtNzU2LDYgKzEyNTQsNyBAQAogICAgICAgICBtV2lkdGggPSB3aWR0aCA8PCBsZXZl
bDsKICAgICAgICAgbUhlaWdodCA9IGhlaWdodCA8PCBsZXZlbDsKICAgICAgICAgbUltYWdlQXJy
YXlbMF0uZm9ybWF0ID0gaW50ZXJuYWxGb3JtYXQ7CisgICAgICAgIG1UeXBlID0gdHlwZTsKICAg
ICB9CiAKICAgICByZXR1cm4gIXRleHR1cmVPa2F5OwpAQCAtNzYzLDE0ICsxMjYyLDE0IEBACiAK
IHZvaWQgVGV4dHVyZTJEOjpzZXRJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9y
bWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVt
IHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAg
IHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwor
ICAgIHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQs
IHR5cGUpOwogCiAgICAgVGV4dHVyZTo6c2V0SW1hZ2Uod2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlLCB1bnBhY2tBbGlnbm1lbnQsIHBpeGVscywgJm1JbWFnZUFycmF5W2xldmVsXSk7CiB9CiAK
IHZvaWQgVGV4dHVyZTJEOjpzZXRDb21wcmVzc2VkSW1hZ2UoR0xpbnQgbGV2ZWwsIEdMZW51bSBp
bnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMc2l6ZWkgaW1h
Z2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgcmVkZWZpbmVUZXh0dXJlKGxldmVs
LCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCk7CisgICAgcmVkZWZpbmVUZXh0dXJlKGxl
dmVsLCBpbnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgR0xfVU5TSUdORURfQllURSk7CiAK
ICAgICBUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2Uod2lkdGgsIGhlaWdodCwgaW50ZXJuYWxG
b3JtYXQsIGltYWdlU2l6ZSwgcGl4ZWxzLCAmbUltYWdlQXJyYXlbbGV2ZWxdKTsKIH0KQEAgLTgy
OCwyOSArMTMyNyw0NiBAQAogCiB2b2lkIFRleHR1cmUyRDo6Y29weUltYWdlKEdMaW50IGxldmVs
LCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgs
IEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJTdG9yYWdlICpzb3VyY2UpCiB7Ci0gICAgaWYg
KHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQpKQor
ICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBzb3VyY2UtPmdldFJlbmRlclRh
cmdldCgpOworCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpCiAgICAgewotICAgICAgICBjb252ZXJ0
VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUpOwor
ICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4iKTsKKyAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KLSAgICBlbHNlCisK
KyAgICBib29sIHJlZGVmaW5lZCA9IHJlZGVmaW5lVGV4dHVyZShsZXZlbCwgaW50ZXJuYWxGb3Jt
YXQsIHdpZHRoLCBoZWlnaHQsIG1UeXBlKTsKKyAgIAorICAgIGlmICghaXNSZW5kZXJhYmxlRm9y
bWF0KCkpCiAgICAgewotICAgICAgICBuZWVkUmVuZGVyVGFyZ2V0KCk7CisgICAgICAgIGNvcHlO
b25SZW5kZXJhYmxlKCZtSW1hZ2VBcnJheVtsZXZlbF0sIGludGVybmFsRm9ybWF0LCAwLCAwLCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwogICAgIH0KLQotICAgIGlmICh3aWR0
aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAgIGVsc2UK
ICAgICB7Ci0gICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKLSAgICAgICAgc291cmNlUmVjdC5sZWZ0
ID0geDsKLSAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKLSAgICAgICAgc291
cmNlUmVjdC50b3AgPSB5OwotICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBoZWlnaHQ7
CisgICAgICAgIGlmIChyZWRlZmluZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnZlcnRU
b1JlbmRlclRhcmdldCgpOworICAgICAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRydWUp
OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbmVlZFJl
bmRlclRhcmdldCgpOworICAgICAgICB9CiAKLSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRl
c3Q7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVs
LCAmZGVzdCk7CisgICAgICAgIGlmICh3aWR0aCAhPSAwICYmIGhlaWdodCAhPSAwICYmIGxldmVs
IDwgbGV2ZWxDb3VudCgpKQorICAgICAgICB7CisgICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7
CisgICAgICAgICAgICBzb3VyY2VSZWN0LmxlZnQgPSB4OworICAgICAgICAgICAgc291cmNlUmVj
dC5yaWdodCA9IHggKyB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKKyAg
ICAgICAgICAgIHNvdXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKIAotICAgICAgICBnZXRC
bGl0dGVyKCktPmZvcm1hdENvbnZlcnQoc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKSwgc291cmNl
UmVjdCwgaW50ZXJuYWxGb3JtYXQsIDAsIDAsIGRlc3QpOwotICAgICAgICBkZXN0LT5SZWxlYXNl
KCk7CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdDsKKyAgICAgICAgICAgIEhS
RVNVTFQgaHIgPSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGxldmVsLCAmZGVzdCk7CisKKyAg
ICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Zm9ybWF0Q29udmVydChzb3VyY2UtPmdldFJlbmRlclRh
cmdldCgpLCBzb3VyY2VSZWN0LCBpbnRlcm5hbEZvcm1hdCwgMCwgMCwgZGVzdCk7CisgICAgICAg
ICAgICBkZXN0LT5SZWxlYXNlKCk7CisgICAgICAgIH0KICAgICB9CiAKICAgICBtSW1hZ2VBcnJh
eVtsZXZlbF0ud2lkdGggPSB3aWR0aDsKQEAgLTg1OCwzNiArMTM3NCw1MyBAQAogICAgIG1JbWFn
ZUFycmF5W2xldmVsXS5mb3JtYXQgPSBpbnRlcm5hbEZvcm1hdDsKIH0KIAotdm9pZCBUZXh0dXJl
MkQ6OmNvcHlTdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRl
cmJ1ZmZlclN0b3JhZ2UgKnNvdXJjZSkKK3ZvaWQgVGV4dHVyZTJEOjpjb3B5U3ViSW1hZ2UoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
aW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZm
ZXJTdG9yYWdlICpzb3VyY2UpCiB7CiAgICAgaWYgKHhvZmZzZXQgKyB3aWR0aCA+IG1JbWFnZUFy
cmF5W2xldmVsXS53aWR0aCB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gbUltYWdlQXJyYXlbbGV2ZWxd
LmhlaWdodCkKICAgICB7CiAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsK
ICAgICB9CiAKLSAgICBpZiAocmVkZWZpbmVUZXh0dXJlKDAsIG1JbWFnZUFycmF5WzBdLmZvcm1h
dCwgbUltYWdlQXJyYXlbMF0ud2lkdGgsIG1JbWFnZUFycmF5WzBdLmhlaWdodCkpCisgICAgSURp
cmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCk7
CisKKyAgICBpZiAoIXJlbmRlclRhcmdldCkKICAgICB7Ci0gICAgICAgIGNvbnZlcnRUb1JlbmRl
clRhcmdldCgpOwotICAgICAgICBwdXNoVGV4dHVyZShtVGV4dHVyZSwgdHJ1ZSk7CisgICAgICAg
IEVSUigiRmFpbGVkIHRvIHJldHJpZXZlIHRoZSByZW5kZXIgdGFyZ2V0LiIpOworICAgICAgICBy
ZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSk7CiAgICAgfQotICAgIGVsc2UKKworICAgIGJv
b2wgcmVkZWZpbmVkID0gcmVkZWZpbmVUZXh0dXJlKDAsIG1JbWFnZUFycmF5WzBdLmZvcm1hdCwg
bUltYWdlQXJyYXlbMF0ud2lkdGgsIG1JbWFnZUFycmF5WzBdLmhlaWdodCwgbVR5cGUpOworICAg
CisgICAgaWYgKCFpc1JlbmRlcmFibGVGb3JtYXQoKSkKICAgICB7Ci0gICAgICAgIG5lZWRSZW5k
ZXJUYXJnZXQoKTsKKyAgICAgICAgY29weU5vblJlbmRlcmFibGUoJm1JbWFnZUFycmF5W2xldmVs
XSwgZ2V0Rm9ybWF0KCksIHhvZmZzZXQsIHlvZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHJl
bmRlclRhcmdldCk7CiAgICAgfQotCi0gICAgaWYgKGxldmVsIDwgbGV2ZWxDb3VudCgpKQorICAg
IGVsc2UKICAgICB7Ci0gICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKLSAgICAgICAgc291cmNlUmVj
dC5sZWZ0ID0geDsKLSAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHggKyB3aWR0aDsKLSAgICAg
ICAgc291cmNlUmVjdC50b3AgPSB5OwotICAgICAgICBzb3VyY2VSZWN0LmJvdHRvbSA9IHkgKyBo
ZWlnaHQ7CisgICAgICAgIGlmIChyZWRlZmluZWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNv
bnZlcnRUb1JlbmRlclRhcmdldCgpOworICAgICAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUs
IHRydWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAg
bmVlZFJlbmRlclRhcmdldCgpOworICAgICAgICB9CiAKLSAgICAgICAgSURpcmVjdDNEU3VyZmFj
ZTkgKmRlc3Q7Ci0gICAgICAgIEhSRVNVTFQgaHIgPSBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVs
KGxldmVsLCAmZGVzdCk7CisgICAgICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICAg
ICAgeworICAgICAgICAgICAgUkVDVCBzb3VyY2VSZWN0OworICAgICAgICAgICAgc291cmNlUmVj
dC5sZWZ0ID0geDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7Cisg
ICAgICAgICAgICBzb3VyY2VSZWN0LnRvcCA9IHk7CisgICAgICAgICAgICBzb3VyY2VSZWN0LmJv
dHRvbSA9IHkgKyBoZWlnaHQ7CiAKLSAgICAgICAgZ2V0QmxpdHRlcigpLT5mb3JtYXRDb252ZXJ0
KHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCksIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdLmZv
cm1hdCwgeG9mZnNldCwgeW9mZnNldCwgZGVzdCk7Ci0gICAgICAgIGRlc3QtPlJlbGVhc2UoKTsK
KyAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0OworICAgICAgICAgICAgSFJFU1VM
VCBociA9IG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwobGV2ZWwsICZkZXN0KTsKKworICAgICAg
ICAgICAgZ2V0QmxpdHRlcigpLT5mb3JtYXRDb252ZXJ0KHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0
KCksIHNvdXJjZVJlY3QsIG1JbWFnZUFycmF5WzBdLmZvcm1hdCwgeG9mZnNldCwgeW9mZnNldCwg
ZGVzdCk7CisgICAgICAgICAgICBkZXN0LT5SZWxlYXNlKCk7CisgICAgICAgIH0KICAgICB9CiB9
CiAKQEAgLTkxOSw2ICsxNDUyLDE2IEBACiAgICAgIGRlZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CiAg
ICAgfQogCisgICAgaWYgKChnZXRGb3JtYXQoKSA9PSBHTF9GTE9BVCAmJiAhZ2V0Q29udGV4dCgp
LT5zdXBwb3J0c0Zsb2F0TGluZWFyRmlsdGVyKCkpIHx8CisgICAgICAgIChnZXRGb3JtYXQoKSA9
PSBHTF9IQUxGX0ZMT0FUX09FUyAmJiAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0hhbGZGbG9hdExp
bmVhckZpbHRlcigpKSkKKyAgICB7CisgICAgICAgIGlmIChtTWFnRmlsdGVyICE9IEdMX05FQVJF
U1QgfHwgKG1NaW5GaWx0ZXIgIT0gR0xfTkVBUkVTVCAmJiBtTWluRmlsdGVyICE9IEdMX05FQVJF
U1RfTUlQTUFQX05FQVJFU1QpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKwogICAgIGlmICgoZ2V0V3JhcFMoKSAhPSBHTF9DTEFNUF9U
T19FREdFICYmICFpc1BvdzIod2lkdGgpKQogICAgICAgICB8fCAoZ2V0V3JhcFQoKSAhPSBHTF9D
TEFNUF9UT19FREdFICYmICFpc1BvdzIoaGVpZ2h0KSkpCiAgICAgewpAQCAtOTY3LDcgKzE1MTAs
NyBAQAogICAgIElEaXJlY3QzRFRleHR1cmU5ICp0ZXh0dXJlOwogCiAgICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7Ci0gICAgRDNERk9STUFUIGZvcm1hdCA9IHNlbGVj
dEZvcm1hdChtSW1hZ2VBcnJheVswXS5mb3JtYXQpOworICAgIEQzREZPUk1BVCBmb3JtYXQgPSBz
ZWxlY3RGb3JtYXQobUltYWdlQXJyYXlbMF0uZm9ybWF0LCBtVHlwZSk7CiAKICAgICBIUkVTVUxU
IHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlVGV4dHVyZShtV2lkdGgsIG1IZWlnaHQsIGNyZWF0aW9u
TGV2ZWxzKG1XaWR0aCwgbUhlaWdodCwgMCksIDAsIGZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAm
dGV4dHVyZSwgTlVMTCk7CiAKQEAgLTEwMTgsNyArMTU2MSw3IEBACiAgICAgewogICAgICAgICBl
Z2w6OkRpc3BsYXkgKmRpc3BsYXkgPSBnZXREaXNwbGF5KCk7CiAgICAgICAgIElEaXJlY3QzRERl
dmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0g
c2VsZWN0Rm9ybWF0KG1JbWFnZUFycmF5WzBdLmZvcm1hdCk7CisgICAgICAgIEQzREZPUk1BVCBm
b3JtYXQgPSBzZWxlY3RGb3JtYXQobUltYWdlQXJyYXlbMF0uZm9ybWF0LCBtVHlwZSk7CiAKICAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZVRleHR1cmUobVdpZHRoLCBtSGVp
Z2h0LCBjcmVhdGlvbkxldmVscyhtV2lkdGgsIG1IZWlnaHQsIDApLCBEM0RVU0FHRV9SRU5ERVJU
QVJHRVQsIGZvcm1hdCwgRDNEUE9PTF9ERUZBVUxULCAmdGV4dHVyZSwgTlVMTCk7CiAKQEAgLTEx
MjMsMjMgKzE2NjYsNTAgQEAKICAgICAgICAgbUltYWdlQXJyYXlbaV0uaGVpZ2h0ID0gc3RkOjpt
YXgobUltYWdlQXJyYXlbMF0uaGVpZ2h0ID4+IGksIDEpOwogICAgIH0KIAotICAgIG5lZWRSZW5k
ZXJUYXJnZXQoKTsKKyAgICBpZiAoaXNSZW5kZXJhYmxlKCkpCisgICAgeworICAgICAgICBpZiAo
bVRleHR1cmUgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCIgZmFpbGVkIGJl
Y2F1c2UgbVRleHR1cmUgd2FzIG51bGwuIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KIAotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBOVUxMOworICAgICAgICAgICAgSURpcmVj
dDNEU3VyZmFjZTkgKmxvd2VyID0gTlVMTDsKKworICAgICAgICAgICAgbVRleHR1cmUtPkdldFN1
cmZhY2VMZXZlbChpLTEsICZ1cHBlcik7CisgICAgICAgICAgICBtVGV4dHVyZS0+R2V0U3VyZmFj
ZUxldmVsKGksICZsb3dlcik7CisKKyAgICAgICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxv
d2VyICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2V0QmxpdHRlcigp
LT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7CisgICAgICAgICAgICBpZiAobG93
ZXIgIT0gTlVMTCkgbG93ZXItPlJlbGVhc2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNl
CiAgICAgewotICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBOVUxMOwotICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqbG93ZXIgPSBOVUxMOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMTsgaSA8PSBxOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGNyZWF0ZVN1
cmZhY2UobUltYWdlQXJyYXlbaV0ud2lkdGgsIG1JbWFnZUFycmF5W2ldLmhlaWdodCwgbUltYWdl
QXJyYXlbaV0uZm9ybWF0LCBtVHlwZSwgJm1JbWFnZUFycmF5W2ldKTsKKyAgICAgICAgICAgIGlm
IChtSW1hZ2VBcnJheVtpXS5zdXJmYWNlID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgICAgICAgICAgfQog
Ci0gICAgICAgIG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoaS0xLCAmdXBwZXIpOwotICAgICAg
ICBtVGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKGksICZsb3dlcik7CisgICAgICAgICAgICBpZiAo
RkFJTEVEKEQzRFhMb2FkU3VyZmFjZUZyb21TdXJmYWNlKG1JbWFnZUFycmF5W2ldLnN1cmZhY2Us
IE5VTEwsIE5VTEwsIG1JbWFnZUFycmF5W2kgLSAxXS5zdXJmYWNlLCBOVUxMLCBOVUxMLCBEM0RY
X0ZJTFRFUl9CT1gsIDApKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBFUlIoIiBm
YWlsZWQgdG8gbG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkpOworICAgICAgICAgICAg
fQogCi0gICAgICAgIGlmICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGdldEJsaXR0ZXIoKS0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7Cisg
ICAgICAgICAgICBtSW1hZ2VBcnJheVtpXS5kaXJ0eSA9IHRydWU7CiAgICAgICAgIH0KIAotICAg
ICAgICBpZiAodXBwZXIgIT0gTlVMTCkgdXBwZXItPlJlbGVhc2UoKTsKLSAgICAgICAgaWYgKGxv
d2VyICE9IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7CisgICAgICAgIG1EaXJ0eU1ldGFEYXRhID0g
dHJ1ZTsKICAgICB9CiB9CiAKQEAgLTExNTAsMTMgKzE3MjAsMTIgQEAKICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OLCAoUmVuZGVyYnVmZmVyICopTlVMTCk7CiAgICAg
fQogCi0gICAgaWYgKG1Db2xvcmJ1ZmZlclByb3h5ID09IE5VTEwpCisgICAgaWYgKG1Db2xvcmJ1
ZmZlclByb3h5LmdldCgpID09IE5VTEwpCiAgICAgewotICAgICAgICBtQ29sb3JidWZmZXJQcm94
eSA9IG5ldyBSZW5kZXJidWZmZXIoaWQoKSwgbmV3IFRleHR1cmVDb2xvcmJ1ZmZlclByb3h5KHRo
aXMsIHRhcmdldCkpOwotICAgICAgICBtQ29sb3JidWZmZXJQcm94eS0+YWRkUmVmKCk7CisgICAg
ICAgIG1Db2xvcmJ1ZmZlclByb3h5LnNldChuZXcgUmVuZGVyYnVmZmVyKGlkKCksIG5ldyBUZXh0
dXJlQ29sb3JidWZmZXJQcm94eSh0aGlzLCB0YXJnZXQpKSk7CiAgICAgfQogCi0gICAgcmV0dXJu
IG1Db2xvcmJ1ZmZlclByb3h5OworICAgIHJldHVybiBtQ29sb3JidWZmZXJQcm94eS5nZXQoKTsK
IH0KIAogSURpcmVjdDNEU3VyZmFjZTkgKlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KEdMZW51
bSB0YXJnZXQpCkBAIC0xMTY1LDYgKzE3MzQsMTEgQEAKIAogICAgIG5lZWRSZW5kZXJUYXJnZXQo
KTsKIAorICAgIGlmIChtVGV4dHVyZSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5V
TEw7CisgICAgfQorICAgIAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBO
VUxMOwogICAgIG1UZXh0dXJlLT5HZXRTdXJmYWNlTGV2ZWwoMCwgJnJlbmRlclRhcmdldCk7CiAK
QEAgLTExNzQsMTggKzE3NDgsMTMgQEAKIFRleHR1cmVDdWJlTWFwOjpUZXh0dXJlQ3ViZU1hcChH
THVpbnQgaWQpIDogVGV4dHVyZShpZCkKIHsKICAgICBtVGV4dHVyZSA9IE5VTEw7Ci0KLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKLSAgICB7Ci0gICAgICAgIG1GYWNlUHJveGllc1tp
XSA9IE5VTEw7Ci0gICAgfQogfQogCiBUZXh0dXJlQ3ViZU1hcDo6flRleHR1cmVDdWJlTWFwKCkK
IHsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykKICAgICB7Ci0gICAgICAgIGRlbGV0
ZSBtRmFjZVByb3hpZXNbaV07CisgICAgICAgIG1GYWNlUHJveGllc1tpXS5zZXQoTlVMTCk7CiAg
ICAgfQogCiAgICAgaWYgKG1UZXh0dXJlKQpAQCAtMTI3NywxOSArMTg0NiwxOSBAQAogICAgIH0K
IH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxl
dmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdubWVu
dCwgY29uc3Qgdm9pZCAqcGl4ZWxzKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2UoR0xl
bnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwg
R0xpbnQgdW5wYWNrQWxpZ25tZW50LCBjb25zdCB2b2lkICpwaXhlbHMpCiB7Ci0gICAgaWYgKFRl
eHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwg
dHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZtSW1hZ2VBcnJheVtmYWNlSW5kZXgoZmFj
ZSldW2xldmVsXSkpCisgICAgaWYgKFRleHR1cmU6OnN1YkltYWdlKHhvZmZzZXQsIHlvZmZzZXQs
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgdW5wYWNrQWxpZ25tZW50LCBwaXhlbHMsICZt
SW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdKSkKICAgICB7Ci0gICAgICAgIGNv
bW1pdFJlY3QoZmFjZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwor
ICAgICAgICBjb21taXRSZWN0KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQpOwogICAgIH0KIH0KIAotdm9pZCBUZXh0dXJlQ3ViZU1hcDo6c3ViSW1hZ2VDb21w
cmVzc2VkKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9m
ZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6
ZWkgaW1hZ2VTaXplLCBjb25zdCB2b2lkICpwaXhlbHMpCit2b2lkIFRleHR1cmVDdWJlTWFwOjpz
dWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKQogewotICAgIGlm
IChUZXh0dXJlOjpzdWJJbWFnZUNvbXByZXNzZWQoeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCBpbWFnZVNpemUsIHBpeGVscywgJm1JbWFnZUFycmF5W2ZhY2VJbmRleChm
YWNlKV1bbGV2ZWxdKSkKKyAgICBpZiAoVGV4dHVyZTo6c3ViSW1hZ2VDb21wcmVzc2VkKHhvZmZz
ZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaW1hZ2VTaXplLCBwaXhlbHMsICZt
SW1hZ2VBcnJheVtmYWNlSW5kZXgodGFyZ2V0KV1bbGV2ZWxdKSkKICAgICB7Ci0gICAgICAgIGNv
bW1pdFJlY3QoZmFjZSwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRoLCBoZWlnaHQpOwor
ICAgICAgICBjb21taXRSZWN0KHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIHdpZHRo
LCBoZWlnaHQpOwogICAgIH0KIH0KIApAQCAtMTMyOCw2ICsxODk3LDE1IEBACiAgICAgICAgIH0K
ICAgICB9CiAKKyAgICBpZiAoKGdldEZvcm1hdCgpID09IEdMX0ZMT0FUICYmICFnZXRDb250ZXh0
KCktPnN1cHBvcnRzRmxvYXRMaW5lYXJGaWx0ZXIoKSkgfHwKKyAgICAgICAgKGdldEZvcm1hdCgp
ID09IEdMX0hBTEZfRkxPQVRfT0VTICYmICFnZXRDb250ZXh0KCktPnN1cHBvcnRzSGFsZkZsb2F0
TGluZWFyRmlsdGVyKCkpKQorICAgIHsKKyAgICAgICAgaWYgKG1NYWdGaWx0ZXIgIT0gR0xfTkVB
UkVTVCB8fCAobU1pbkZpbHRlciAhPSBHTF9ORUFSRVNUICYmIG1NaW5GaWx0ZXIgIT0gR0xfTkVB
UkVTVF9NSVBNQVBfTkVBUkVTVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGlmIChtaXBtYXBwaW5nKQogICAgIHsKICAgICAg
ICAgaWYgKCFpc1BvdzIoc2l6ZSkgJiYgKGdldFdyYXBTKCkgIT0gR0xfQ0xBTVBfVE9fRURHRSB8
fCBnZXRXcmFwVCgpICE9IEdMX0NMQU1QX1RPX0VER0UpKQpAQCAtMTM2OCw3ICsxOTQ2LDcgQEAK
IElEaXJlY3QzREJhc2VUZXh0dXJlOSAqVGV4dHVyZUN1YmVNYXA6OmNyZWF0ZVRleHR1cmUoKQog
ewogICAgIElEaXJlY3QzRERldmljZTkgKmRldmljZSA9IGdldERldmljZSgpOwotICAgIEQzREZP
Uk1BVCBmb3JtYXQgPSBzZWxlY3RGb3JtYXQobUltYWdlQXJyYXlbMF1bMF0uZm9ybWF0KTsKKyAg
ICBEM0RGT1JNQVQgZm9ybWF0ID0gc2VsZWN0Rm9ybWF0KG1JbWFnZUFycmF5WzBdWzBdLmZvcm1h
dCwgbVR5cGUpOwogCiAgICAgSURpcmVjdDNEQ3ViZVRleHR1cmU5ICp0ZXh0dXJlOwogCkBAIC0x
NDI0LDcgKzIwMDIsNyBAQAogICAgIHsKICAgICAgICAgZWdsOjpEaXNwbGF5ICpkaXNwbGF5ID0g
Z2V0RGlzcGxheSgpOwogICAgICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBnZXREZXZp
Y2UoKTsKLSAgICAgICAgRDNERk9STUFUIGZvcm1hdCA9IHNlbGVjdEZvcm1hdChtSW1hZ2VBcnJh
eVswXVswXS5mb3JtYXQpOworICAgICAgICBEM0RGT1JNQVQgZm9ybWF0ID0gc2VsZWN0Rm9ybWF0
KG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCwgbVR5cGUpOwogCiAgICAgICAgIEhSRVNVTFQgcmVz
dWx0ID0gZGV2aWNlLT5DcmVhdGVDdWJlVGV4dHVyZShtV2lkdGgsIGNyZWF0aW9uTGV2ZWxzKG1X
aWR0aCwgMCksIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwgZm9ybWF0LCBEM0RQT09MX0RFRkFVTFQs
ICZ0ZXh0dXJlLCBOVUxMKTsKIApAQCAtMTU0Niw3ICsyMTI0LDcgQEAKICAgICAgICAgICAgICAg
aW50ZXJuYWxGb3JtYXQsIHdpZHRoKTsKIAogICAgICAgICAvLyBQdXJnZSBhbGwgdGhlIGxldmVs
cyBhbmQgdGhlIHRleHR1cmUuCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1RFWFRV
UkVfTEVWRUxTOyBpKyspCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgSU1QTEVNRU5UQVRJ
T05fTUFYX1RFWFRVUkVfTEVWRUxTOyBpKyspCiAgICAgICAgIHsKICAgICAgICAgICAgIGZvciAo
aW50IGYgPSAwOyBmIDwgNjsgZisrKQogICAgICAgICAgICAgewpAQCAtMTU3OCwzNCArMjE1Niw1
MCBAQAogICAgIHJldHVybiAhdGV4dHVyZU9rYXk7CiB9CiAKLXZvaWQgVGV4dHVyZUN1YmVNYXA6
OmNvcHlJbWFnZShHTGVudW0gZmFjZSwgR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1h
dCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRl
cmJ1ZmZlclN0b3JhZ2UgKnNvdXJjZSkKK3ZvaWQgVGV4dHVyZUN1YmVNYXA6OmNvcHlJbWFnZShH
TGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4
LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyU3Rv
cmFnZSAqc291cmNlKQogewotICAgIHVuc2lnbmVkIGludCBmYWNlaW5kZXggPSBmYWNlSW5kZXgo
ZmFjZSk7CisgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IHNvdXJjZS0+Z2V0
UmVuZGVyVGFyZ2V0KCk7CiAKLSAgICBpZiAocmVkZWZpbmVUZXh0dXJlKGxldmVsLCBpbnRlcm5h
bEZvcm1hdCwgd2lkdGgpKQorICAgIGlmICghcmVuZGVyVGFyZ2V0KQogICAgIHsKLSAgICAgICAg
Y29udmVydFRvUmVuZGVyVGFyZ2V0KCk7Ci0gICAgICAgIHB1c2hUZXh0dXJlKG1UZXh0dXJlLCB0
cnVlKTsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gcmV0cmlldmUgdGhlIHJlbmRlciB0YXJnZXQu
Iik7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKICAgICB9CisKKyAg
ICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KHRhcmdldCk7CisgICAgYm9vbCBy
ZWRlZmluZWQgPSByZWRlZmluZVRleHR1cmUobGV2ZWwsIGludGVybmFsRm9ybWF0LCB3aWR0aCk7
CisKKyAgICBpZiAoIWlzUmVuZGVyYWJsZUZvcm1hdCgpKQorICAgIHsKKyAgICAgICAgY29weU5v
blJlbmRlcmFibGUoJm1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLCBpbnRlcm5hbEZvcm1h
dCwgMCwgMCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVuZGVyVGFyZ2V0KTsKKyAgICB9CiAgICAg
ZWxzZQogICAgIHsKLSAgICAgICAgbmVlZFJlbmRlclRhcmdldCgpOwotICAgIH0KKyAgICAgICAg
aWYgKHJlZGVmaW5lZCkKKyAgICAgICAgeworICAgICAgICAgICAgY29udmVydFRvUmVuZGVyVGFy
Z2V0KCk7CisgICAgICAgICAgICBwdXNoVGV4dHVyZShtVGV4dHVyZSwgdHJ1ZSk7CisgICAgICAg
IH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBuZWVkUmVuZGVyVGFyZ2V0
KCk7CisgICAgICAgIH0KIAotICAgIEFTU0VSVCh3aWR0aCA9PSBoZWlnaHQpOworICAgICAgICBB
U1NFUlQod2lkdGggPT0gaGVpZ2h0KTsKIAotICAgIGlmICh3aWR0aCA+IDAgJiYgbGV2ZWwgPCBs
ZXZlbENvdW50KCkpCi0gICAgewotICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7Ci0gICAgICAgIHNv
dXJjZVJlY3QubGVmdCA9IHg7Ci0gICAgICAgIHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7
Ci0gICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKLSAgICAgICAgc291cmNlUmVjdC5ib3R0b20g
PSB5ICsgaGVpZ2h0OworICAgICAgICBpZiAod2lkdGggPiAwICYmIGxldmVsIDwgbGV2ZWxDb3Vu
dCgpKQorICAgICAgICB7CisgICAgICAgICAgICBSRUNUIHNvdXJjZVJlY3Q7CisgICAgICAgICAg
ICBzb3VyY2VSZWN0LmxlZnQgPSB4OworICAgICAgICAgICAgc291cmNlUmVjdC5yaWdodCA9IHgg
KyB3aWR0aDsKKyAgICAgICAgICAgIHNvdXJjZVJlY3QudG9wID0geTsKKyAgICAgICAgICAgIHNv
dXJjZVJlY3QuYm90dG9tID0geSArIGhlaWdodDsKIAotICAgICAgICBJRGlyZWN0M0RTdXJmYWNl
OSAqZGVzdCA9IGdldEN1YmVNYXBTdXJmYWNlKGZhY2UsIGxldmVsKTsKKyAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gZ2V0Q3ViZU1hcFN1cmZhY2UodGFyZ2V0LCBsZXZlbCk7
CiAKLSAgICAgICAgZ2V0QmxpdHRlcigpLT5mb3JtYXRDb252ZXJ0KHNvdXJjZS0+Z2V0UmVuZGVy
VGFyZ2V0KCksIHNvdXJjZVJlY3QsIGludGVybmFsRm9ybWF0LCAwLCAwLCBkZXN0KTsKLSAgICAg
ICAgZGVzdC0+UmVsZWFzZSgpOworICAgICAgICAgICAgZ2V0QmxpdHRlcigpLT5mb3JtYXRDb252
ZXJ0KHNvdXJjZS0+Z2V0UmVuZGVyVGFyZ2V0KCksIHNvdXJjZVJlY3QsIGludGVybmFsRm9ybWF0
LCAwLCAwLCBkZXN0KTsKKyAgICAgICAgICAgIGRlc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIG1JbWFnZUFycmF5W2ZhY2VpbmRleF1bbGV2ZWxdLndpZHRoID0gd2lkdGg7
CkBAIC0xNjQ0LDM3ICsyMjM4LDU1IEBACiAgICAgcmV0dXJuIChTVUNDRUVERUQoaHIpKSA/IHN1
cmZhY2UgOiBOVUxMOwogfQogCi12b2lkIFRleHR1cmVDdWJlTWFwOjpjb3B5U3ViSW1hZ2UoR0xl
bnVtIGZhY2UsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVy
U3RvcmFnZSAqc291cmNlKQordm9pZCBUZXh0dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdlKEdMZW51
bSB0YXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTGlu
dCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVy
U3RvcmFnZSAqc291cmNlKQogewotICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5W2ZhY2VJ
bmRleChmYWNlKV1bbGV2ZWxdLndpZHRoOworICAgIEdMc2l6ZWkgc2l6ZSA9IG1JbWFnZUFycmF5
W2ZhY2VJbmRleCh0YXJnZXQpXVtsZXZlbF0ud2lkdGg7CiAKICAgICBpZiAoeG9mZnNldCArIHdp
ZHRoID4gc2l6ZSB8fCB5b2Zmc2V0ICsgaGVpZ2h0ID4gc2l6ZSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICB9CiAKLSAgICBpZiAocmVkZWZpbmVU
ZXh0dXJlKDAsIG1JbWFnZUFycmF5WzBdWzBdLmZvcm1hdCwgbUltYWdlQXJyYXlbMF1bMF0ud2lk
dGgpKQorICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBzb3VyY2UtPmdldFJl
bmRlclRhcmdldCgpOworCisgICAgaWYgKCFyZW5kZXJUYXJnZXQpCiAgICAgewotICAgICAgICBj
b252ZXJ0VG9SZW5kZXJUYXJnZXQoKTsKLSAgICAgICAgcHVzaFRleHR1cmUobVRleHR1cmUsIHRy
dWUpOworICAgICAgICBFUlIoIkZhaWxlZCB0byByZXRyaWV2ZSB0aGUgcmVuZGVyIHRhcmdldC4i
KTsKKyAgICAgICAgcmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOwogICAgIH0KLSAgICBl
bHNlCisKKyAgICB1bnNpZ25lZCBpbnQgZmFjZWluZGV4ID0gZmFjZUluZGV4KHRhcmdldCk7Cisg
ICAgYm9vbCByZWRlZmluZWQgPSByZWRlZmluZVRleHR1cmUoMCwgbUltYWdlQXJyYXlbMF1bMF0u
Zm9ybWF0LCBtSW1hZ2VBcnJheVswXVswXS53aWR0aCk7CisgICAKKyAgICBpZiAoIWlzUmVuZGVy
YWJsZUZvcm1hdCgpKQogICAgIHsKLSAgICAgICAgbmVlZFJlbmRlclRhcmdldCgpOworICAgICAg
ICBjb3B5Tm9uUmVuZGVyYWJsZSgmbUltYWdlQXJyYXlbZmFjZWluZGV4XVtsZXZlbF0sIGdldEZv
cm1hdCgpLCAwLCAwLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZW5kZXJUYXJnZXQpOwogICAgIH0K
LQotICAgIGlmIChsZXZlbCA8IGxldmVsQ291bnQoKSkKKyAgICBlbHNlCiAgICAgewotICAgICAg
ICBSRUNUIHNvdXJjZVJlY3Q7Ci0gICAgICAgIHNvdXJjZVJlY3QubGVmdCA9IHg7Ci0gICAgICAg
IHNvdXJjZVJlY3QucmlnaHQgPSB4ICsgd2lkdGg7Ci0gICAgICAgIHNvdXJjZVJlY3QudG9wID0g
eTsKLSAgICAgICAgc291cmNlUmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OworICAgICAgICBpZiAo
cmVkZWZpbmVkKQorICAgICAgICB7CisgICAgICAgICAgICBjb252ZXJ0VG9SZW5kZXJUYXJnZXQo
KTsKKyAgICAgICAgICAgIHB1c2hUZXh0dXJlKG1UZXh0dXJlLCB0cnVlKTsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG5lZWRSZW5kZXJUYXJnZXQoKTsK
KyAgICAgICAgfQogCi0gICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpkZXN0ID0gZ2V0Q3ViZU1h
cFN1cmZhY2UoZmFjZSwgbGV2ZWwpOworICAgICAgICBpZiAobGV2ZWwgPCBsZXZlbENvdW50KCkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIFJFQ1Qgc291cmNlUmVjdDsKKyAgICAgICAgICAgIHNv
dXJjZVJlY3QubGVmdCA9IHg7CisgICAgICAgICAgICBzb3VyY2VSZWN0LnJpZ2h0ID0geCArIHdp
ZHRoOworICAgICAgICAgICAgc291cmNlUmVjdC50b3AgPSB5OworICAgICAgICAgICAgc291cmNl
UmVjdC5ib3R0b20gPSB5ICsgaGVpZ2h0OwogCi0gICAgICAgIGdldEJsaXR0ZXIoKS0+Zm9ybWF0
Q29udmVydChzb3VyY2UtPmdldFJlbmRlclRhcmdldCgpLCBzb3VyY2VSZWN0LCBtSW1hZ2VBcnJh
eVswXVswXS5mb3JtYXQsIHhvZmZzZXQsIHlvZmZzZXQsIGRlc3QpOwotICAgICAgICBkZXN0LT5S
ZWxlYXNlKCk7CisgICAgICAgICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqZGVzdCA9IGdldEN1YmVN
YXBTdXJmYWNlKHRhcmdldCwgbGV2ZWwpOworCisgICAgICAgICAgICBnZXRCbGl0dGVyKCktPmZv
cm1hdENvbnZlcnQoc291cmNlLT5nZXRSZW5kZXJUYXJnZXQoKSwgc291cmNlUmVjdCwgbUltYWdl
QXJyYXlbMF1bMF0uZm9ybWF0LCB4b2Zmc2V0LCB5b2Zmc2V0LCBkZXN0KTsKKyAgICAgICAgICAg
IGRlc3QtPlJlbGVhc2UoKTsKKyAgICAgICAgfQogICAgIH0KIH0KIApAQCAtMTcyNCwyMyArMjMz
Niw1MiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgbmVlZFJlbmRlclRhcmdldCgpOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgaWYgKGlzUmVuZGVy
YWJsZSgpKQogICAgIHsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPD0gcTsg
aSsrKQorICAgICAgICBpZiAobVRleHR1cmUgPT0gTlVMTCkKICAgICAgICAgewotICAgICAgICAg
ICAgSURpcmVjdDNEU3VyZmFjZTkgKnVwcGVyID0gZ2V0Q3ViZU1hcFN1cmZhY2UoZiwgaS0xKTsK
LSAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IGdldEN1YmVNYXBTdXJmYWNl
KGYsIGkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAKLSAgICAgICAgICAgIGlm
ICh1cHBlciAhPSBOVUxMICYmIGxvd2VyICE9IE5VTEwpCisgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGYgPSAwOyBmIDwgNjsgZisrKQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMTsgaSA8PSBxOyBpKyspCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZ2V0QmxpdHRlcigpLT5ib3hGaWx0ZXIodXBwZXIsIGxvd2VyKTsKKyAgICAgICAgICAgICAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqdXBwZXIgPSBnZXRDdWJlTWFwU3VyZmFjZShmLCBpLTEpOwor
ICAgICAgICAgICAgICAgIElEaXJlY3QzRFN1cmZhY2U5ICpsb3dlciA9IGdldEN1YmVNYXBTdXJm
YWNlKGYsIGkpOworCisgICAgICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwgJiYgbG93ZXIg
IT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGdldEJsaXR0
ZXIoKS0+Ym94RmlsdGVyKHVwcGVyLCBsb3dlcik7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgaWYgKHVwcGVyICE9IE5VTEwpIHVwcGVyLT5SZWxlYXNlKCk7CisgICAgICAg
ICAgICAgICAgaWYgKGxvd2VyICE9IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7CiAgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgZiA9IDA7IGYgPCA2OyBmKyspCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IHE7IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBjcmVhdGVTdXJmYWNlKG1JbWFnZUFycmF5W2ZdW2ldLndpZHRoLCBtSW1hZ2VBcnJh
eVtmXVtpXS5oZWlnaHQsIG1JbWFnZUFycmF5W2ZdW2ldLmZvcm1hdCwgbVR5cGUsICZtSW1hZ2VB
cnJheVtmXVtpXSk7CisgICAgICAgICAgICAgICAgaWYgKG1JbWFnZUFycmF5W2ZdW2ldLnN1cmZh
Y2UgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmICh1cHBlciAhPSBOVUxMKSB1cHBlci0+UmVsZWFzZSgpOwotICAgICAgICAgICAgaWYg
KGxvd2VyICE9IE5VTEwpIGxvd2VyLT5SZWxlYXNlKCk7CisgICAgICAgICAgICAgICAgaWYgKEZB
SUxFRChEM0RYTG9hZFN1cmZhY2VGcm9tU3VyZmFjZShtSW1hZ2VBcnJheVtmXVtpXS5zdXJmYWNl
LCBOVUxMLCBOVUxMLCBtSW1hZ2VBcnJheVtmXVtpIC0gMV0uc3VyZmFjZSwgTlVMTCwgTlVMTCwg
RDNEWF9GSUxURVJfQk9YLCAwKSkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
ICAgICBFUlIoIiBmYWlsZWQgdG8gbG9hZCBmaWx0ZXIgJWQgdG8gJWQuIiwgaSAtIDEsIGkpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIG1JbWFnZUFycmF5W2ZdW2ldLmRp
cnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorCisgICAgICAgIG1EaXJ0eU1l
dGFEYXRhID0gdHJ1ZTsKICAgICB9CiB9CiAKQEAgLTE3NTMsMTMgKzIzOTQsMTIgQEAKIAogICAg
IHVuc2lnbmVkIGludCBmYWNlID0gZmFjZUluZGV4KHRhcmdldCk7CiAKLSAgICBpZiAobUZhY2VQ
cm94aWVzW2ZhY2VdID09IE5VTEwpCisgICAgaWYgKG1GYWNlUHJveGllc1tmYWNlXS5nZXQoKSA9
PSBOVUxMKQogICAgIHsKLSAgICAgICAgbUZhY2VQcm94aWVzW2ZhY2VdID0gbmV3IFJlbmRlcmJ1
ZmZlcihpZCgpLCBuZXcgVGV4dHVyZUNvbG9yYnVmZmVyUHJveHkodGhpcywgdGFyZ2V0KSk7Ci0g
ICAgICAgIG1GYWNlUHJveGllc1tmYWNlXS0+YWRkUmVmKCk7CisgICAgICAgIG1GYWNlUHJveGll
c1tmYWNlXS5zZXQobmV3IFJlbmRlcmJ1ZmZlcihpZCgpLCBuZXcgVGV4dHVyZUNvbG9yYnVmZmVy
UHJveHkodGhpcywgdGFyZ2V0KSkpOwogICAgIH0KIAotICAgIHJldHVybiBtRmFjZVByb3hpZXNb
ZmFjZV07CisgICAgcmV0dXJuIG1GYWNlUHJveGllc1tmYWNlXS5nZXQoKTsKIH0KIAogSURpcmVj
dDNEU3VyZmFjZTkgKlRleHR1cmVDdWJlTWFwOjpnZXRSZW5kZXJUYXJnZXQoR0xlbnVtIHRhcmdl
dCkKQEAgLTE3NjcsNyArMjQwNywxMiBAQAogICAgIEFTU0VSVChJc0N1YmVtYXBUZXh0dXJlVGFy
Z2V0KHRhcmdldCkpOwogCiAgICAgbmVlZFJlbmRlclRhcmdldCgpOwotCisgICAgCisgICAgaWYg
KG1UZXh0dXJlID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cisg
ICAgCiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IE5VTEw7CiAgICAgbVRl
eHR1cmUtPkdldEN1YmVNYXBTdXJmYWNlKHN0YXRpY19jYXN0PEQzRENVQkVNQVBfRkFDRVM+KGZh
Y2VJbmRleCh0YXJnZXQpKSwgMCwgJnJlbmRlclRhcmdldCk7CiAKQEAgLTE3NzUsOSArMjQyMCw5
IEBACiB9CiAKIFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjpUZXh0dXJlQ29sb3Ji
dWZmZXJQcm94eShUZXh0dXJlICp0ZXh0dXJlLCBHTGVudW0gdGFyZ2V0KQotICA6IENvbG9yYnVm
ZmVyKE5VTEwpLCBtVGV4dHVyZSh0ZXh0dXJlKSwgbVRhcmdldCh0YXJnZXQpCisgIDogQ29sb3Ji
dWZmZXIodGV4dHVyZSksIG1UZXh0dXJlKHRleHR1cmUpLCBtVGFyZ2V0KHRhcmdldCkKIHsKLSAg
ICBBU1NFUlQodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQgfHwgSXNDdWJlbWFwVGV4dHVyZVRhcmdl
dCh0YXJnZXQpKTsKKyAgICBBU1NFUlQoSXNUZXh0dXJlVGFyZ2V0KHRhcmdldCkpOwogfQogCiB2
b2lkIFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5OjphZGRSZWYoKSBjb25zdApAQCAt
MTgxNCw0ICsyNDU5LDkgQEAKICAgICByZXR1cm4gbVRleHR1cmUtPmdldEZvcm1hdCgpOwogfQog
Citib29sIFRleHR1cmU6OlRleHR1cmVDb2xvcmJ1ZmZlclByb3h5Ojppc0Zsb2F0aW5nUG9pbnQo
KSBjb25zdAoreworICAgIHJldHVybiBtVGV4dHVyZS0+aXNGbG9hdGluZ1BvaW50KCk7CiB9CisK
K30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUHJvZ3JhbS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Q
cm9ncmFtLmNwcAkocmV2aXNpb24gNzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1Byb2dyYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw3IEBA
CiB7CiB9CiAKLVByb2dyYW06OlByb2dyYW0oUmVzb3VyY2VNYW5hZ2VyICptYW5hZ2VyLCBHTHVp
bnQgaGFuZGxlKSA6IG1SZXNvdXJjZU1hbmFnZXIobWFuYWdlciksIG1IYW5kbGUoaGFuZGxlKQor
UHJvZ3JhbTo6UHJvZ3JhbShSZXNvdXJjZU1hbmFnZXIgKm1hbmFnZXIsIEdMdWludCBoYW5kbGUp
IDogbVJlc291cmNlTWFuYWdlcihtYW5hZ2VyKSwgbUhhbmRsZShoYW5kbGUpLCBtU2VyaWFsKGlz
c3VlU2VyaWFsKCkpCiB7CiAgICAgbUZyYWdtZW50U2hhZGVyID0gTlVMTDsKICAgICBtVmVydGV4
U2hhZGVyID0gTlVMTDsKQEAgLTYzLDggKzYzLDYgQEAKICAgICBtRGVsZXRlU3RhdHVzID0gZmFs
c2U7CiAKICAgICBtUmVmQ291bnQgPSAwOwotCi0gICAgbVNlcmlhbCA9IGlzc3VlU2VyaWFsKCk7
CiB9CiAKIFByb2dyYW06On5Qcm9ncmFtKCkKQEAgLTIwNSw3ICsyMDMsNyBAQAogICAgICAgICBs
b2dpY2FsVGV4dHVyZVVuaXQgPSBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS5sb2dpY2FsVGV4dHVy
ZVVuaXQ7CiAgICAgfQogCi0gICAgaWYgKGxvZ2ljYWxUZXh0dXJlVW5pdCA8IE1BWF9URVhUVVJF
X0lNQUdFX1VOSVRTKQorICAgIGlmIChsb2dpY2FsVGV4dHVyZVVuaXQgPj0gMCAmJiBsb2dpY2Fs
VGV4dHVyZVVuaXQgPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKICAgICB7CiAgICAgICAgIHJl
dHVybiBsb2dpY2FsVGV4dHVyZVVuaXQ7CiAgICAgfQpAQCAtMjQzLDI2ICsyNDEsMjIgQEAKIAog
R0xpbnQgUHJvZ3JhbTo6Z2V0VW5pZm9ybUxvY2F0aW9uKGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wg
ZGVjb3JhdGVkKQogewotICAgIHN0ZDo6c3RyaW5nIG5hbWVTdHIobmFtZSk7CisgICAgc3RkOjpz
dHJpbmcgX25hbWUgPSBkZWNvcmF0ZWQgPyBuYW1lIDogZGVjb3JhdGUobmFtZSk7CiAgICAgaW50
IHN1YnNjcmlwdCA9IDA7Ci0gICAgc2l6ZV90IGJlZ2luQiA9IG5hbWVTdHIuZmluZCgnWycpOwot
ICAgIHNpemVfdCBlbmRCID0gbmFtZVN0ci5maW5kKCddJyk7Ci0gICAgaWYgKGJlZ2luQiAhPSBz
dGQ6OnN0cmluZzo6bnBvcyAmJiBlbmRCICE9IHN0ZDo6c3RyaW5nOjpucG9zKQotICAgIHsKLSAg
ICAgICAgc3RkOjpzdHJpbmcgc3Vic2NyU3RyID0gbmFtZVN0ci5zdWJzdHIoYmVnaW5CICsgMSwg
YmVnaW5CIC0gZW5kQiAtIDEpOwotICAgICAgICBuYW1lU3RyLmVyYXNlKGJlZ2luQik7Ci0gICAg
ICAgIHN1YnNjcmlwdCA9IGF0b2koc3Vic2NyU3RyLmNfc3RyKCkpOwotICAgIH0KIAotICAgIGlm
ICghZGVjb3JhdGVkKQorICAgIC8vIFN0cmlwIGFueSB0cmFpbGluZyBhcnJheSBvcGVyYXRvciBh
bmQgcmV0cmlldmUgdGhlIHN1YnNjcmlwdAorICAgIHNpemVfdCBvcGVuID0gX25hbWUuZmluZF9s
YXN0X29mKCdbJyk7CisgICAgc2l6ZV90IGNsb3NlID0gX25hbWUuZmluZF9sYXN0X29mKCddJyk7
CisgICAgaWYgKG9wZW4gIT0gc3RkOjpzdHJpbmc6Om5wb3MgJiYgY2xvc2UgPT0gX25hbWUubGVu
Z3RoKCkgLSAxKQogICAgIHsKLSAgICAgICAgbmFtZVN0ciA9IGRlY29yYXRlKG5hbWVTdHIpOwor
ICAgICAgICBzdWJzY3JpcHQgPSBhdG9pKF9uYW1lLnN1YnN0cihvcGVuICsgMSkuY19zdHIoKSk7
CisgICAgICAgIF9uYW1lLmVyYXNlKG9wZW4pOwogICAgIH0KIAogICAgIHVuc2lnbmVkIGludCBu
dW1Vbmlmb3JtcyA9IG1Vbmlmb3JtSW5kZXguc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgaW50
IGxvY2F0aW9uID0gMDsgbG9jYXRpb24gPCBudW1Vbmlmb3JtczsgbG9jYXRpb24rKykKICAgICB7
Ci0gICAgICAgIGlmIChtVW5pZm9ybUluZGV4W2xvY2F0aW9uXS5uYW1lID09IG5hbWVTdHIgJiYK
KyAgICAgICAgaWYgKG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLm5hbWUgPT0gX25hbWUgJiYKICAg
ICAgICAgICAgIG1Vbmlmb3JtSW5kZXhbbG9jYXRpb25dLmVsZW1lbnQgPT0gc3Vic2NyaXB0KQog
ICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gbG9jYXRpb247CkBAIC01OTUsNyArNTg5LDkg
QEAKICAgICBVbmlmb3JtICp0YXJnZXRVbmlmb3JtID0gbVVuaWZvcm1zW21Vbmlmb3JtSW5kZXhb
bG9jYXRpb25dLmluZGV4XTsKICAgICB0YXJnZXRVbmlmb3JtLT5kaXJ0eSA9IHRydWU7CiAKLSAg
ICBpZiAodGFyZ2V0VW5pZm9ybS0+dHlwZSA9PSBHTF9JTlQpCisgICAgaWYgKHRhcmdldFVuaWZv
cm0tPnR5cGUgPT0gR0xfSU5UIHx8CisgICAgICAgIHRhcmdldFVuaWZvcm0tPnR5cGUgPT0gR0xf
U0FNUExFUl8yRCB8fAorICAgICAgICB0YXJnZXRVbmlmb3JtLT50eXBlID09IEdMX1NBTVBMRVJf
Q1VCRSkKICAgICB7CiAgICAgICAgIGludCBhcnJheVNpemUgPSB0YXJnZXRVbmlmb3JtLT5hcnJh
eVNpemU7CiAKQEAgLTk0OSw2ICs5NDUsOCBAQAogICAgICAgICAgICAgICBjYXNlIEdMX0ZMT0FU
X01BVDI6IGFwcGx5VW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwgYXJyYXlTaXplLCBmKTsgYnJl
YWs7CiAgICAgICAgICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUMzogYXBwbHlVbmlmb3JtTWF0cml4
M2Z2KGxvY2F0aW9uLCBhcnJheVNpemUsIGYpOyBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBH
TF9GTE9BVF9NQVQ0OiBhcHBseVVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIGFycmF5U2l6ZSwg
Zik7IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX1NBTVBMRVJfMkQ6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgogICAgICAgICAgICAgICBjYXNlIEdMX0lOVDogICAg
ICAgIGFwcGx5VW5pZm9ybTFpdihsb2NhdGlvbiwgYXJyYXlTaXplLCBpKTsgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgIGNhc2UgR0xfSU5UX1ZFQzI6ICAgYXBwbHlVbmlmb3JtMml2KGxvY2F0
aW9uLCBhcnJheVNpemUsIGkpOyAgICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBHTF9J
TlRfVkVDMzogICBhcHBseVVuaWZvcm0zaXYobG9jYXRpb24sIGFycmF5U2l6ZSwgaSk7ICAgICAg
IGJyZWFrOwpAQCAtMTAwMSw2ICs5OTksOSBAQAogLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIHVz
ZWQgdmFyeWluZyByZWdpc3RlcnMsIG9yIC0xIGlmIHVuc3VjY2VzZnVsCiBpbnQgUHJvZ3JhbTo6
cGFja1ZhcnlpbmdzKGNvbnN0IFZhcnlpbmcgKnBhY2tpbmdbXVs0XSkKIHsKKyAgICBDb250ZXh0
ICpjb250ZXh0ID0gZ2V0Q29udGV4dCgpOworICAgIGNvbnN0IGludCBtYXhWYXJ5aW5nVmVjdG9y
cyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOworCiAgICAgZm9yIChWYXJ5
aW5nTGlzdDo6aXRlcmF0b3IgdmFyeWluZyA9IG1GcmFnbWVudFNoYWRlci0+dmFyeWluZ3MuYmVn
aW4oKTsgdmFyeWluZyAhPSBtRnJhZ21lbnRTaGFkZXItPnZhcnlpbmdzLmVuZCgpOyB2YXJ5aW5n
KyspCiAgICAgewogICAgICAgICBpbnQgbiA9IFZhcmlhYmxlUm93Q291bnQodmFyeWluZy0+dHlw
ZSkgKiB2YXJ5aW5nLT5zaXplOwpAQCAtMTAwOSw3ICsxMDEwLDcgQEAKIAogICAgICAgICBpZiAo
bSA9PSAyIHx8IG0gPT0gMyB8fCBtID09IDQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGZvciAo
aW50IHIgPSAwOyByIDw9IE1BWF9WQVJZSU5HX1ZFQ1RPUlMgLSBuICYmICFzdWNjZXNzOyByKysp
CisgICAgICAgICAgICBmb3IgKGludCByID0gMDsgciA8PSBtYXhWYXJ5aW5nVmVjdG9ycyAtIG4g
JiYgIXN1Y2Nlc3M7IHIrKykKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBib29sIGF2
YWlsYWJsZSA9IHRydWU7CiAKQEAgLTEwNDMsNyArMTA0NCw3IEBACiAKICAgICAgICAgICAgIGlm
ICghc3VjY2VzcyAmJiBtID09IDIpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9y
IChpbnQgciA9IE1BWF9WQVJZSU5HX1ZFQ1RPUlMgLSBuOyByID49IDAgJiYgIXN1Y2Nlc3M7IHIt
LSkKKyAgICAgICAgICAgICAgICBmb3IgKGludCByID0gbWF4VmFyeWluZ1ZlY3RvcnMgLSBuOyBy
ID49IDAgJiYgIXN1Y2Nlc3M7IHItLSkKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgYXZhaWxhYmxlID0gdHJ1ZTsKIApAQCAtMTA4MCw3ICsxMDgxLDcgQEAKICAg
ICAgICAgewogICAgICAgICAgICAgaW50IHNwYWNlWzRdID0gezB9OwogCi0gICAgICAgICAgICBm
b3IgKGludCB5ID0gMDsgeSA8IE1BWF9WQVJZSU5HX1ZFQ1RPUlM7IHkrKykKKyAgICAgICAgICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHkrKykKICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IDQ7IHgrKykKICAgICAgICAg
ICAgICAgICB7CkBAIC0xMTAwLDcgKzExMDEsNyBAQAogCiAgICAgICAgICAgICBpZiAoc3BhY2Vb
Y29sdW1uXSA+IG4pCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgciA9
IDA7IHIgPCBNQVhfVkFSWUlOR19WRUNUT1JTOyByKyspCisgICAgICAgICAgICAgICAgZm9yIChp
bnQgciA9IDA7IHIgPCBtYXhWYXJ5aW5nVmVjdG9yczsgcisrKQogICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFwYWNraW5nW3JdW2NvbHVtbl0pCiAgICAgICAgICAg
ICAgICAgICAgIHsKQEAgLTExMzMsNyArMTEzNCw3IEBACiAgICAgLy8gUmV0dXJuIHRoZSBudW1i
ZXIgb2YgdXNlZCByZWdpc3RlcnMKICAgICBpbnQgcmVnaXN0ZXJzID0gMDsKIAotICAgIGZvciAo
aW50IHIgPSAwOyByIDwgTUFYX1ZBUllJTkdfVkVDVE9SUzsgcisrKQorICAgIGZvciAoaW50IHIg
PSAwOyByIDwgbWF4VmFyeWluZ1ZlY3RvcnM7IHIrKykKICAgICB7CiAgICAgICAgIGlmIChwYWNr
aW5nW3JdWzBdIHx8IHBhY2tpbmdbcl1bMV0gfHwgcGFja2luZ1tyXVsyXSB8fCBwYWNraW5nW3Jd
WzNdKQogICAgICAgICB7CkBAIC0xMTUxLDcgKzExNTIsNyBAQAogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQogCi0gICAgY29uc3QgVmFyeWluZyAqcGFja2luZ1tNQVhfVkFSWUlOR19WRUNU
T1JTXVs0XSA9IHtOVUxMfTsKKyAgICBjb25zdCBWYXJ5aW5nICpwYWNraW5nW01BWF9WQVJZSU5H
X1ZFQ1RPUlNfU00zXVs0XSA9IHtOVUxMfTsKICAgICBpbnQgcmVnaXN0ZXJzID0gcGFja1Zhcnlp
bmdzKHBhY2tpbmcpOwogCiAgICAgaWYgKHJlZ2lzdGVycyA8IDApCkBAIC0xMTU5LDcgKzExNjAs
MTEgQEAKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGlmIChyZWdpc3RlcnMg
PT0gTUFYX1ZBUllJTkdfVkVDVE9SUyAmJiBtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3Jk
KQorICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7CisgICAgY29uc3QgYm9vbCBz
bTMgPSBjb250ZXh0LT5zdXBwb3J0c1NoYWRlck1vZGVsMygpOworICAgIGNvbnN0IGludCBtYXhW
YXJ5aW5nVmVjdG9ycyA9IGNvbnRleHQtPmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpOworCisg
ICAgaWYgKHJlZ2lzdGVycyA9PSBtYXhWYXJ5aW5nVmVjdG9ycyAmJiBtRnJhZ21lbnRTaGFkZXIt
Pm1Vc2VzRnJhZ0Nvb3JkKQogICAgIHsKICAgICAgICAgYXBwZW5kVG9JbmZvTG9nKCJObyB2YXJ5
aW5nIHJlZ2lzdGVycyBsZWZ0IHRvIHN1cHBvcnQgZ2xfRnJhZ0Nvb3JkIik7CiAKQEAgLTExOTcs
OCArMTIwMiw2IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBDb250ZXh0ICpjb250ZXh0ID0g
Z2V0Q29udGV4dCgpOwotICAgIGJvb2wgc20zID0gY29udGV4dC0+c3VwcG9ydHNTaGFkZXJNb2Rl
bDMoKTsKICAgICBzdGQ6OnN0cmluZyB2YXJ5aW5nU2VtYW50aWMgPSAoc20zID8gIkNPTE9SIiA6
ICJURVhDT09SRCIpOwogCiAgICAgbVZlcnRleEhMU0wgKz0gInN0cnVjdCBWU19JTlBVVFxuIgpA
QCAtMTM3MSw2ICsxMzc0LDkgQEAKICAgICBpZiAobUZyYWdtZW50U2hhZGVyLT5tVXNlc0ZyYWdD
b29yZCkKICAgICB7CiAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDQgZ2xfRnJhZ0Nv
b3JkIDogIiArIHZhcnlpbmdTZW1hbnRpYyArIHN0cihyZWdpc3RlcnMpICsgIjtcbiI7CisgICAg
ICAgIGlmIChzbTMpIHsKKyAgICAgICAgICAgIG1QaXhlbEhMU0wgKz0gIiAgICBmbG9hdDIgZHhf
VlBvcyA6IFZQT1M7XG4iOworICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKG1GcmFnbWVudFNo
YWRlci0+bVVzZXNQb2ludENvb3JkICYmIHNtMykKQEAgLTEzOTUsMTAgKzE0MDEsMTUgQEAKIAog
ICAgIGlmIChtRnJhZ21lbnRTaGFkZXItPm1Vc2VzRnJhZ0Nvb3JkKQogICAgIHsKLSAgICAgICAg
bVBpeGVsSExTTCArPSAiICAgIGZsb2F0IHJodyA9IDEuMCAvIGlucHV0LmdsX0ZyYWdDb29yZC53
O1xuIgotICAgICAgICAgICAgICAgICAgICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnggPSAoaW5wdXQu
Z2xfRnJhZ0Nvb3JkLnggKiByaHcpICogZHhfVmlld3BvcnQueCArIGR4X1ZpZXdwb3J0Lno7XG4i
Ci0gICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQueSA9IChpbnB1dC5nbF9G
cmFnQ29vcmQueSAqIHJodykgKiBkeF9WaWV3cG9ydC55ICsgZHhfVmlld3BvcnQudztcbiIKLSAg
ICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC56ID0gKGlucHV0LmdsX0ZyYWdD
b29yZC56ICogcmh3KSAqIGR4X0RlcHRoLnggKyBkeF9EZXB0aC55O1xuIgorICAgICAgICBtUGl4
ZWxITFNMICs9ICIgICAgZmxvYXQgcmh3ID0gMS4wIC8gaW5wdXQuZ2xfRnJhZ0Nvb3JkLnc7XG4i
OworICAgICAgICBpZiAoc20zKSB7CisgICAgICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xf
RnJhZ0Nvb3JkLnggPSBpbnB1dC5keF9WUG9zLng7XG4iCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICIgICAgZ2xfRnJhZ0Nvb3JkLnkgPSBpbnB1dC5keF9WUG9zLnk7XG4iOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbVBpeGVsSExTTCArPSAiICAgIGdsX0ZyYWdDb29yZC54ID0g
KGlucHV0LmdsX0ZyYWdDb29yZC54ICogcmh3KSAqIGR4X1ZpZXdwb3J0LnggKyBkeF9WaWV3cG9y
dC56O1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGdsX0ZyYWdDb29yZC55ID0g
KGlucHV0LmdsX0ZyYWdDb29yZC55ICogcmh3KSAqIGR4X1ZpZXdwb3J0LnkgKyBkeF9WaWV3cG9y
dC53O1xuIjsKKyAgICAgICAgfQorICAgICAgICBtUGl4ZWxITFNMICs9ICIgICAgZ2xfRnJhZ0Nv
b3JkLnogPSAoaW5wdXQuZ2xfRnJhZ0Nvb3JkLnogKiByaHcpICogZHhfRGVwdGgueCArIGR4X0Rl
cHRoLnk7XG4iCiAgICAgICAgICAgICAgICAgICAgICAgIiAgICBnbF9GcmFnQ29vcmQudyA9IHJo
dztcbiI7CiAgICAgfQogCkBAIC0xNTI1LDkgKzE1MzYsNyBAQAogCiAgICAgICAgICAgICAvLyB0
aGVzZSB1bmlmb3JtcyBhcmUgc2VhcmNoZWQgYXMgYWxyZWFkeS1kZWNvcmF0ZWQgYmVjYXVzZSBn
bF8gYW5kIGR4XwogICAgICAgICAgICAgLy8gYXJlIHJlc2VydmVkIHByZWZpeGVzLCBhbmQgZG8g
bm90IHJlY2VpdmUgYWRkaXRpb25hbCBkZWNvcmF0aW9uCi0gICAgICAgICAgICBtRGVwdGhSYW5n
ZU5lYXJMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZ2xfRGVwdGhSYW5nZS5uZWFyIiwg
dHJ1ZSk7Ci0gICAgICAgICAgICBtRGVwdGhSYW5nZUZhckxvY2F0aW9uID0gZ2V0VW5pZm9ybUxv
Y2F0aW9uKCJnbF9EZXB0aFJhbmdlLmZhciIsIHRydWUpOwotICAgICAgICAgICAgbURlcHRoUmFu
Z2VEaWZmTG9jYXRpb24gPSBnZXRVbmlmb3JtTG9jYXRpb24oImdsX0RlcHRoUmFuZ2UuZGlmZiIs
IHRydWUpOworICAgICAgICAgICAgbUR4RGVwdGhSYW5nZUxvY2F0aW9uID0gZ2V0VW5pZm9ybUxv
Y2F0aW9uKCJkeF9EZXB0aFJhbmdlIiwgdHJ1ZSk7CiAgICAgICAgICAgICBtRHhEZXB0aExvY2F0
aW9uID0gZ2V0VW5pZm9ybUxvY2F0aW9uKCJkeF9EZXB0aCIsIHRydWUpOwogICAgICAgICAgICAg
bUR4Vmlld3BvcnRMb2NhdGlvbiA9IGdldFVuaWZvcm1Mb2NhdGlvbigiZHhfVmlld3BvcnQiLCB0
cnVlKTsKICAgICAgICAgICAgIG1EeEhhbGZQaXhlbFNpemVMb2NhdGlvbiA9IGdldFVuaWZvcm1M
b2NhdGlvbigiZHhfSGFsZlBpeGVsU2l6ZSIsIHRydWUpOwpAQCAtMTY1MCwzMiArMTY1OSwzOCBA
QAogewogICAgIGlmIChjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVyU2V0ID09IEQzRFhSU19T
QU1QTEVSKQogICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW50IHNhbXBsZXJJbmRleCA9IGNvbnN0
YW50RGVzY3JpcHRpb24uUmVnaXN0ZXJJbmRleDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
c2FtcGxlckluZGV4ID0gY29uc3RhbnREZXNjcmlwdGlvbi5SZWdpc3RlckluZGV4OyBzYW1wbGVy
SW5kZXggPCBjb25zdGFudERlc2NyaXB0aW9uLlJlZ2lzdGVySW5kZXggKyBjb25zdGFudERlc2Ny
aXB0aW9uLlJlZ2lzdGVyQ291bnQ7IHNhbXBsZXJJbmRleCsrKQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoc2FtcGxlckluZGV4IDwgc2l6ZW9mKG1TYW1wbGVycykvc2l6ZW9mKG1TYW1w
bGVyc1swXSkpOwogCi0gICAgICAgIGFzc2VydChzYW1wbGVySW5kZXggPCBzaXplb2YobVNhbXBs
ZXJzKS9zaXplb2YobVNhbXBsZXJzWzBdKSk7Ci0KLSAgICAgICAgbVNhbXBsZXJzW3NhbXBsZXJJ
bmRleF0uYWN0aXZlID0gdHJ1ZTsKLSAgICAgICAgbVNhbXBsZXJzW3NhbXBsZXJJbmRleF0udHlw
ZSA9IChjb25zdGFudERlc2NyaXB0aW9uLlR5cGUgPT0gRDNEWFBUX1NBTVBMRVJDVUJFKSA/IFNB
TVBMRVJfQ1VCRSA6IFNBTVBMRVJfMkQ7Ci0gICAgICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhd
LmxvZ2ljYWxUZXh0dXJlVW5pdCA9IDA7Ci0gICAgICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhd
LmRpcnR5ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmFjdGl2
ZSA9IHRydWU7CisgICAgICAgICAgICBtU2FtcGxlcnNbc2FtcGxlckluZGV4XS50eXBlID0gKGNv
bnN0YW50RGVzY3JpcHRpb24uVHlwZSA9PSBEM0RYUFRfU0FNUExFUkNVQkUpID8gU0FNUExFUl9D
VUJFIDogU0FNUExFUl8yRDsKKyAgICAgICAgICAgIG1TYW1wbGVyc1tzYW1wbGVySW5kZXhdLmxv
Z2ljYWxUZXh0dXJlVW5pdCA9IDA7CisgICAgICAgICAgICBtU2FtcGxlcnNbc2FtcGxlckluZGV4
XS5kaXJ0eSA9IHRydWU7CisgICAgICAgIH0KICAgICB9CiAKICAgICBzd2l0Y2goY29uc3RhbnRE
ZXNjcmlwdGlvbi5DbGFzcykKICAgICB7CiAgICAgICBjYXNlIEQzRFhQQ19TVFJVQ1Q6CiAgICAg
ICAgIHsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGZpZWxkID0gMDsgZmllbGQgPCBj
b25zdGFudERlc2NyaXB0aW9uLlN0cnVjdE1lbWJlcnM7IGZpZWxkKyspCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBhcnJheUluZGV4ID0gMDsgYXJyYXlJbmRleCA8IGNvbnN0YW50RGVz
Y3JpcHRpb24uRWxlbWVudHM7IGFycmF5SW5kZXgrKykKICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBEM0RYSEFORExFIGZpZWxkSGFuZGxlID0gbUNvbnN0YW50VGFibGVQUy0+R2V0Q29u
c3RhbnQoY29uc3RhbnRIYW5kbGUsIGZpZWxkKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBmaWVsZCA9IDA7IGZpZWxkIDwgY29uc3RhbnREZXNjcmlwdGlvbi5TdHJ1Y3RNZW1i
ZXJzOyBmaWVsZCsrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgRDNE
WEhBTkRMRSBmaWVsZEhhbmRsZSA9IG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50KGNvbnN0
YW50SGFuZGxlLCBmaWVsZCk7CiAKLSAgICAgICAgICAgICAgICBEM0RYQ09OU1RBTlRfREVTQyBm
aWVsZERlc2NyaXB0aW9uOwotICAgICAgICAgICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9
IDE7CisgICAgICAgICAgICAgICAgICAgIEQzRFhDT05TVEFOVF9ERVNDIGZpZWxkRGVzY3JpcHRp
b247CisgICAgICAgICAgICAgICAgICAgIFVJTlQgZGVzY3JpcHRpb25Db3VudCA9IDE7CiAKLSAg
ICAgICAgICAgICAgICBtQ29uc3RhbnRUYWJsZVBTLT5HZXRDb25zdGFudERlc2MoZmllbGRIYW5k
bGUsICZmaWVsZERlc2NyaXB0aW9uLCAmZGVzY3JpcHRpb25Db3VudCk7CisgICAgICAgICAgICAg
ICAgICAgIG1Db25zdGFudFRhYmxlUFMtPkdldENvbnN0YW50RGVzYyhmaWVsZEhhbmRsZSwgJmZp
ZWxkRGVzY3JpcHRpb24sICZkZXNjcmlwdGlvbkNvdW50KTsKIAotICAgICAgICAgICAgICAgIGlm
ICghZGVmaW5lVW5pZm9ybShmaWVsZEhhbmRsZSwgZmllbGREZXNjcmlwdGlvbiwgbmFtZSArIGNv
bnN0YW50RGVzY3JpcHRpb24uTmFtZSArICIuIikpCi0gICAgICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3Ry
aW5nIHN0cnVjdEluZGV4ID0gKGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMgPiAxKSA/ICgi
WyIgKyBzdHIoYXJyYXlJbmRleCkgKyAiXSIpIDogIiI7CisKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFkZWZpbmVVbmlmb3JtKGZpZWxkSGFuZGxlLCBmaWVsZERlc2NyaXB0aW9uLCBuYW1lICsg
Y29uc3RhbnREZXNjcmlwdGlvbi5OYW1lICsgc3RydWN0SW5kZXggKyAiLiIpKQorICAgICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAg
LTE3MzcsMTAgKzE3NTIsMTYgQEAKICAgICAgICAgc3dpdGNoIChjb25zdGFudERlc2NyaXB0aW9u
LlR5cGUpCiAgICAgICAgIHsKICAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSMkQ6CisgICAg
ICAgICAgICBzd2l0Y2ggKGNvbnN0YW50RGVzY3JpcHRpb24uQ29sdW1ucykKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFVuaWZvcm0oR0xfU0FNUExFUl8y
RCwgbmFtZSwgY29uc3RhbnREZXNjcmlwdGlvbi5FbGVtZW50cyk7CisgICAgICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICBjYXNlIEQzRFhQVF9TQU1QTEVSQ1VCRToKICAgICAgICAgICAgIHN3aXRjaCAo
Y29uc3RhbnREZXNjcmlwdGlvbi5Db2x1bW5zKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9ybShHTF9JTlQsIG5hbWUsIGNvbnN0YW50RGVzY3Jp
cHRpb24uRWxlbWVudHMpOworICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVW5pZm9y
bShHTF9TQU1QTEVSX0NVQkUsIG5hbWUsIGNvbnN0YW50RGVzY3JpcHRpb24uRWxlbWVudHMpOwog
ICAgICAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CkBAIC0yMjA1LDE0ICsyMjI2LDE0IEBACiAgICAgICAgIHsKICAgICAg
ICAgICAgIHVuc2lnbmVkIGludCBmaXJzdEluZGV4ID0gbUNvbnN0YW50VGFibGVQUy0+R2V0U2Ft
cGxlckluZGV4KGNvbnN0YW50UFMpOwogCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBz
YW1wbGVySW5kZXggPSBmaXJzdEluZGV4OyBzYW1wbGVySW5kZXggPCBmaXJzdEluZGV4ICsgY291
bnQ7IHNhbXBsZXJJbmRleCsrKQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEdMaW50IG1hcHBlZFNhbXBs
ZXIgPSB2WzBdOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzYW1wbGVySW5kZXggPSBm
aXJzdEluZGV4ICsgaTsKIAotICAgICAgICAgICAgICAgIGlmIChzYW1wbGVySW5kZXggPj0gMCAm
JiBzYW1wbGVySW5kZXggPCBNQVhfVEVYVFVSRV9JTUFHRV9VTklUUykKKyAgICAgICAgICAgICAg
ICBpZiAoc2FtcGxlckluZGV4IDwgTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMpCiAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICBBU1NFUlQobVNhbXBsZXJzW3NhbXBsZXJJbmRl
eF0uYWN0aXZlKTsKLSAgICAgICAgICAgICAgICAgICAgbVNhbXBsZXJzW3NhbXBsZXJJbmRleF0u
bG9naWNhbFRleHR1cmVVbml0ID0gbWFwcGVkU2FtcGxlcjsKKyAgICAgICAgICAgICAgICAgICAg
bVNhbXBsZXJzW3NhbXBsZXJJbmRleF0ubG9naWNhbFRleHR1cmVVbml0ID0gdltpXTsKICAgICAg
ICAgICAgICAgICAgICAgbVNhbXBsZXJzW3NhbXBsZXJJbmRleF0uZGlydHkgPSB0cnVlOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTIzNzEsNiArMjM5Miw3IEBACiAgICAg
aWYgKG1JbmZvTG9nKQogICAgIHsKICAgICAgICAgZGVsZXRlIFtdIG1JbmZvTG9nOworICAgICAg
ICBtSW5mb0xvZyA9IE5VTEw7CiAgICAgfQogfQogCkBAIC0yNDM0LDkgKzI0NTYsNyBAQAogICAg
ICAgICBtVW5pZm9ybXMucG9wX2JhY2soKTsKICAgICB9CiAKLSAgICBtRGVwdGhSYW5nZURpZmZM
b2NhdGlvbiA9IC0xOwotICAgIG1EZXB0aFJhbmdlTmVhckxvY2F0aW9uID0gLTE7Ci0gICAgbURl
cHRoUmFuZ2VGYXJMb2NhdGlvbiA9IC0xOworICAgIG1EeERlcHRoUmFuZ2VMb2NhdGlvbiA9IC0x
OwogICAgIG1EeERlcHRoTG9jYXRpb24gPSAtMTsKICAgICBtRHhWaWV3cG9ydExvY2F0aW9uID0g
LTE7CiAgICAgbUR4SGFsZlBpeGVsU2l6ZUxvY2F0aW9uID0gLTE7CkBAIC0yNTYyLDE2ICsyNTgy
LDIyIEBACiAKIHZvaWQgUHJvZ3JhbTo6Z2V0QWN0aXZlQXR0cmlidXRlKEdMdWludCBpbmRleCwg
R0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBHTGVudW0gKnR5
cGUsIEdMY2hhciAqbmFtZSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgYXR0cmlidXRlID0gMDsKLSAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGluZGV4OyBpKyspCisgICAgLy8gU2tpcCBv
dmVyIGluYWN0aXZlIGF0dHJpYnV0ZXMKKyAgICB1bnNpZ25lZCBpbnQgYWN0aXZlQXR0cmlidXRl
ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgYXR0cmlidXRlOworICAgIGZvciAoYXR0cmlidXRlID0g
MDsgYXR0cmlidXRlIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGUrKykKICAgICB7Ci0g
ICAgICAgIGRvCisgICAgICAgIGlmIChtTGlua2VkQXR0cmlidXRlW2F0dHJpYnV0ZV0ubmFtZS5l
bXB0eSgpKQogICAgICAgICB7Ci0gICAgICAgICAgICBhdHRyaWJ1dGUrKzsKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CiAKLSAgICAgICAgICAgIEFTU0VSVChhdHRyaWJ1dGUgPCBN
QVhfVkVSVEVYX0FUVFJJQlMpOyAgIC8vIGluZGV4IG11c3QgYmUgc21hbGxlciB0aGFuIGdldEFj
dGl2ZUF0dHJpYnV0ZUNvdW50KCkKKyAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnV0ZSA9PSBpbmRl
eCkKKyAgICAgICAgeworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgd2hp
bGUgKG1MaW5rZWRBdHRyaWJ1dGVbYXR0cmlidXRlXS5uYW1lLmVtcHR5KCkpOworCisgICAgICAg
IGFjdGl2ZUF0dHJpYnV0ZSsrOwogICAgIH0KIAogICAgIGlmIChidWZzaXplID4gMCkKQEAgLTI2
MjQsMTggKzI2NTAsMjYgQEAKIAogdm9pZCBQcm9ncmFtOjpnZXRBY3RpdmVVbmlmb3JtKEdMdWlu
dCBpbmRleCwgR0xzaXplaSBidWZzaXplLCBHTHNpemVpICpsZW5ndGgsIEdMaW50ICpzaXplLCBH
TGVudW0gKnR5cGUsIEdMY2hhciAqbmFtZSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybSA9
IDA7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBpbmRleDsgaSsrKQorICAgIC8v
IFNraXAgb3ZlciBpbnRlcm5hbCB1bmlmb3JtcworICAgIHVuc2lnbmVkIGludCBhY3RpdmVVbmlm
b3JtID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgdW5pZm9ybTsKKyAgICBmb3IgKHVuaWZvcm0gPSAw
OyB1bmlmb3JtIDwgbVVuaWZvcm1zLnNpemUoKTsgdW5pZm9ybSsrKQogICAgIHsKLSAgICAgICAg
ZG8KKyAgICAgICAgaWYgKG1Vbmlmb3Jtc1t1bmlmb3JtXS0+bmFtZS5zdWJzdHIoMCwgMykgPT0g
ImR4XyIpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVuaWZvcm0rKzsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CiAKLSAgICAgICAgICAgIEFTU0VSVCh1bmlmb3JtIDwgbVVuaWZv
cm1zLnNpemUoKSk7ICAgLy8gaW5kZXggbXVzdCBiZSBzbWFsbGVyIHRoYW4gZ2V0QWN0aXZlVW5p
Zm9ybUNvdW50KCkKKyAgICAgICAgaWYgKGFjdGl2ZVVuaWZvcm0gPT0gaW5kZXgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChtVW5pZm9y
bXNbdW5pZm9ybV0tPm5hbWUuc3Vic3RyKDAsIDMpID09ICJkeF8iKTsKKworICAgICAgICBhY3Rp
dmVVbmlmb3JtKys7CiAgICAgfQogCisgICAgQVNTRVJUKHVuaWZvcm0gPCBtVW5pZm9ybXMuc2l6
ZSgpKTsgICAvLyBpbmRleCBtdXN0IGJlIHNtYWxsZXIgdGhhbiBnZXRBY3RpdmVVbmlmb3JtQ291
bnQoKQorCiAgICAgaWYgKGJ1ZnNpemUgPiAwKQogICAgIHsKICAgICAgICAgc3RkOjpzdHJpbmcg
c3RyaW5nID0gdW5kZWNvcmF0ZShtVW5pZm9ybXNbdW5pZm9ybV0tPm5hbWUpOwpAQCAtMjc2Mywy
MSArMjc5NywxMSBAQAogICAgICpjb25zdGFudFZTID0gdGFyZ2V0VW5pZm9ybS0+dnNIYW5kbGU7
CiB9CiAKLUdMaW50IFByb2dyYW06OmdldERlcHRoUmFuZ2VEaWZmTG9jYXRpb24oKSBjb25zdAor
R0xpbnQgUHJvZ3JhbTo6Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdAogewotICAgIHJl
dHVybiBtRGVwdGhSYW5nZURpZmZMb2NhdGlvbjsKKyAgICByZXR1cm4gbUR4RGVwdGhSYW5nZUxv
Y2F0aW9uOwogfQogCi1HTGludCBQcm9ncmFtOjpnZXREZXB0aFJhbmdlTmVhckxvY2F0aW9uKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbURlcHRoUmFuZ2VOZWFyTG9jYXRpb247Ci19Ci0KLUdMaW50
IFByb2dyYW06OmdldERlcHRoUmFuZ2VGYXJMb2NhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1EZXB0aFJhbmdlRmFyTG9jYXRpb247Ci19Ci0KIEdMaW50IFByb2dyYW06OmdldER4RGVwdGhM
b2NhdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1EeERlcHRoTG9jYXRpb247CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9SZW5kZXJi
dWZmZXIuY3BwCShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEsNiArMTEs
NyBAQAogI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJidWZmZXIuaCIKIAogI2luY2x1ZGUgImxp
YkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUuaCIKICNpbmNsdWRl
ICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCiAKIG5hbWVzcGFjZSBnbApAQCAtODYsOSArODcsMTMg
QEAKICAgICBtU3RvcmFnZSA9IG5ld1N0b3JhZ2U7CiB9CiAKLVJlbmRlcmJ1ZmZlclN0b3JhZ2U6
OlJlbmRlcmJ1ZmZlclN0b3JhZ2UoKQorUmVuZGVyYnVmZmVyU3RvcmFnZTo6UmVuZGVyYnVmZmVy
U3RvcmFnZSgpIDogbVNlcmlhbChpc3N1ZVNlcmlhbCgpKQogewotICAgIG1TZXJpYWwgPSBpc3N1
ZVNlcmlhbCgpOworICAgIG1XaWR0aCA9IDA7CisgICAgbUhlaWdodCA9IDA7CisgICAgbUZvcm1h
dCA9IEdMX1JHQkE0OworICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfQThSOEc4Qjg7CisgICAgbVNh
bXBsZXMgPSAwOwogfQogCiBSZW5kZXJidWZmZXJTdG9yYWdlOjp+UmVuZGVyYnVmZmVyU3RvcmFn
ZSgpCkBAIC0xNDEsNiArMTQ2LDExIEBACiAgICAgcmV0dXJuIG1Gb3JtYXQ7CiB9CiAKK2Jvb2wg
UmVuZGVyYnVmZmVyU3RvcmFnZTo6aXNGbG9hdGluZ1BvaW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZmFsc2U7IC8vIG5vIGZsb2F0aW5nIHBvaW50IHJlbmRlcmJ1ZmZlcnMgCit9CisKIEQzREZP
Uk1BVCBSZW5kZXJidWZmZXJTdG9yYWdlOjpnZXREM0RGb3JtYXQoKSBjb25zdAogewogICAgIHJl
dHVybiBtRDNERm9ybWF0OwpAQCAtMTcxLDE2ICsxODEsMTkgQEAKICAgICAgICAgcmVuZGVyVGFy
Z2V0LT5HZXREZXNjKCZkZXNjcmlwdGlvbik7CiAKICAgICAgICAgc2V0U2l6ZShkZXNjcmlwdGlv
bi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0KTsKKyAgICAgICAgbUZvcm1hdCA9IGR4MmVzOjpD
b252ZXJ0QmFja0J1ZmZlckZvcm1hdChkZXNjcmlwdGlvbi5Gb3JtYXQpOwogICAgICAgICBtRDNE
Rm9ybWF0ID0gZGVzY3JpcHRpb24uRm9ybWF0OwogICAgICAgICBtU2FtcGxlcyA9IGVzMmR4OjpH
ZXRTYW1wbGVzRnJvbU11bHRpc2FtcGxlVHlwZShkZXNjcmlwdGlvbi5NdWx0aVNhbXBsZVR5cGUp
OwogICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICBtRDNERm9ybWF0ID0gRDNERk1UX1VO
S05PV047Ci0gICAgICAgIG1TYW1wbGVzID0gMDsKLSAgICB9CiB9CiAKK0NvbG9yYnVmZmVyOjpD
b2xvcmJ1ZmZlcihjb25zdCBUZXh0dXJlKiB0ZXh0dXJlKSA6IG1SZW5kZXJUYXJnZXQoTlVMTCkK
K3sKKyAgICBzZXRTaXplKHRleHR1cmUtPmdldFdpZHRoKCksIHRleHR1cmUtPmdldEhlaWdodCgp
KTsKKyAgICBtRDNERm9ybWF0ID0gdGV4dHVyZS0+Z2V0RDNERm9ybWF0KCk7CisgICAgbVNhbXBs
ZXMgPSAwOworfQorCiBDb2xvcmJ1ZmZlcjo6Q29sb3JidWZmZXIoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTHNpemVpIHNhbXBsZXMpCiB7CiAgICAgSURpcmVjdDNERGV2
aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CkBAIC0yMTgsMTMgKzIzMSw2IEBACiAgICAgICAg
IG1EM0RGb3JtYXQgPSByZXF1ZXN0ZWRGb3JtYXQ7CiAgICAgICAgIG1TYW1wbGVzID0gc3VwcG9y
dGVkU2FtcGxlczsKICAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc2V0U2l6ZSgwLCAw
KTsKLSAgICAgICAgbUZvcm1hdCA9IEdMX1JHQkE0OwotICAgICAgICBtRDNERm9ybWF0ID0gRDNE
Rk1UX1VOS05PV047Ci0gICAgICAgIG1TYW1wbGVzID0gMDsKLSAgICB9CiB9CiAKIENvbG9yYnVm
ZmVyOjp+Q29sb3JidWZmZXIoKQpAQCAtMzA3LDE1ICszMTMsMTAgQEAKICAgICAgICAgZGVwdGhT
dGVuY2lsLT5HZXREZXNjKCZkZXNjcmlwdGlvbik7CiAKICAgICAgICAgc2V0U2l6ZShkZXNjcmlw
dGlvbi5XaWR0aCwgZGVzY3JpcHRpb24uSGVpZ2h0KTsKLSAgICAgICAgbUZvcm1hdCA9IChkZXNj
cmlwdGlvbi5Gb3JtYXQgPT0gRDNERk1UX0QxNiA/IEdMX0RFUFRIX0NPTVBPTkVOVDE2IDogR0xf
REVQVEgyNF9TVEVOQ0lMOF9PRVMpOworICAgICAgICBtRm9ybWF0ID0gZHgyZXM6OkNvbnZlcnRE
ZXB0aFN0ZW5jaWxGb3JtYXQoZGVzY3JpcHRpb24uRm9ybWF0KTsKICAgICAgICAgbVNhbXBsZXMg
PSBlczJkeDo6R2V0U2FtcGxlc0Zyb21NdWx0aXNhbXBsZVR5cGUoZGVzY3JpcHRpb24uTXVsdGlT
YW1wbGVUeXBlKTsgCiAgICAgICAgIG1EM0RGb3JtYXQgPSBkZXNjcmlwdGlvbi5Gb3JtYXQ7CiAg
ICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIG1EM0RGb3JtYXQgPSBEM0RGTVRfVU5LTk9X
TjsgCi0gICAgICAgIG1TYW1wbGVzID0gMDsKLSAgICB9CiB9CiAKIERlcHRoU3RlbmNpbGJ1ZmZl
cjo6RGVwdGhTdGVuY2lsYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xzaXplaSBzYW1w
bGVzKQpAQCAtMzUyLDEzICszNTMsNiBAQAogICAgICAgICBtRDNERm9ybWF0ID0gRDNERk1UX0Qy
NFM4OwogICAgICAgICBtU2FtcGxlcyA9IHN1cHBvcnRlZFNhbXBsZXM7CiAgICAgfQotICAgIGVs
c2UKLSAgICB7Ci0gICAgICAgIHNldFNpemUoMCwgMCk7Ci0gICAgICAgIG1Gb3JtYXQgPSBHTF9S
R0JBNDsgLy9kZWZhdWx0IGZvcm1hdAotICAgICAgICBtRDNERm9ybWF0ID0gRDNERk1UX1VOS05P
V047Ci0gICAgICAgIG1TYW1wbGVzID0gMDsKLSAgICB9CiB9CiAKIERlcHRoU3RlbmNpbGJ1ZmZl
cjo6fkRlcHRoU3RlbmNpbGJ1ZmZlcigpCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL2xpYkdMRVN2Mi52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIudmNwcm9qCShyZXZpc2lvbiA3NjAy
NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLnZj
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjAxLDYgKzIwMSwxMCBAQAogCQkJCT4KIAkJCTwvRmls
ZT4KIAkJCTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXEZlbmNlLmNwcCIKKwkJCQk+CisJCQk8
L0ZpbGU+CisJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLlxGcmFtZWJ1ZmZlci5jcHAiCiAJ
CQkJPgogCQkJPC9GaWxlPgpAQCAtMjQ0LDE0ICsyNDgsNiBAQAogCQkJCU5hbWU9Ikdlb21ldHJ5
IgogCQkJCT4KIAkJCQk8RmlsZQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii5cZ2VvbWV0cnlcYmFja2Vu
ZC5jcHAiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRo
PSIuXGdlb21ldHJ5XGR4OS5jcHAiCi0JCQkJCT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKIAkJ
CQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5XEluZGV4RGF0YU1hbmFnZXIuY3BwIgogCQkJCQk+
CiAJCQkJPC9GaWxlPgpAQCAtMjc5LDYgKzI3NSwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJ
CTxGaWxlCisJCQkJUmVsYXRpdmVQYXRoPSIuXEZlbmNlLmgiCisJCQkJPgorCQkJPC9GaWxlPgor
CQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii5cRnJhbWVidWZmZXIuaCIKIAkJCQk+CiAJCQk8
L0ZpbGU+CkBAIC0zMzQsMTQgKzMzNCw2IEBACiAJCQkJTmFtZT0iR2VvbWV0cnkiCiAJCQkJPgog
CQkJCTxGaWxlCi0JCQkJCVJlbGF0aXZlUGF0aD0iLlxnZW9tZXRyeVxiYWNrZW5kLmgiCi0JCQkJ
CT4KLQkJCQk8L0ZpbGU+Ci0JCQkJPEZpbGUKLQkJCQkJUmVsYXRpdmVQYXRoPSIuXGdlb21ldHJ5
XGR4OS5oIgotCQkJCQk+Ci0JCQkJPC9GaWxlPgotCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0
aD0iLlxnZW9tZXRyeVxJbmRleERhdGFNYW5hZ2VyLmgiCiAJCQkJCT4KIAkJCQk8L0ZpbGU+Cklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4
RGF0YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaAkocmV2aXNpb24gNzYwMjUpCisr
KyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0
YU1hbmFnZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTAsNyArMTAsNyBAQAogI2lmbmRlZiBMSUJH
TEVTVjJfR0VPTUVUUllfSU5ERVhEQVRBTUFOQUdFUl9IXwogI2RlZmluZSBMSUJHTEVTVjJfR0VP
TUVUUllfSU5ERVhEQVRBTUFOQUdFUl9IXwogCi0jaW5jbHVkZSA8Yml0c2V0PgorI2luY2x1ZGUg
PHZlY3Rvcj4KICNpbmNsdWRlIDxjc3RkZGVmPgogCiAjZGVmaW5lIEdMX0FQSUNBTEwKQEAgLTIx
LDUxICsyMSwxMDAgQEAKIG5hbWVzcGFjZSBnbAogewogCi1jbGFzcyBCdWZmZXI7Ci1jbGFzcyBC
dWZmZXJCYWNrRW5kOwotY2xhc3MgVHJhbnNsYXRlZEluZGV4QnVmZmVyOwotc3RydWN0IEZvcm1h
dENvbnZlcnRlcjsKLQogc3RydWN0IFRyYW5zbGF0ZWRJbmRleERhdGEKIHsKLSAgICBHTHVpbnQg
bWluSW5kZXg7Ci0gICAgR0x1aW50IG1heEluZGV4OwotICAgIEdMdWludCBjb3VudDsKLSAgICBH
THVpbnQgaW5kZXhTaXplOworICAgIFVJTlQgbWluSW5kZXg7CisgICAgVUlOVCBtYXhJbmRleDsK
KyAgICBVSU5UIHN0YXJ0SW5kZXg7CiAKLSAgICBUcmFuc2xhdGVkSW5kZXhCdWZmZXIgKmJ1ZmZl
cjsKLSAgICBHTHNpemVpIG9mZnNldDsKKyAgICBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKmluZGV4
QnVmZmVyOwogfTsKIAotY2xhc3MgSW5kZXhEYXRhTWFuYWdlcgorY2xhc3MgSW5kZXhCdWZmZXIK
IHsKICAgcHVibGljOgotICAgIEluZGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwgQnVm
ZmVyQmFja0VuZCAqYmFja2VuZCk7Ci0gICAgfkluZGV4RGF0YU1hbmFnZXIoKTsKKyAgICBJbmRl
eEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFVJTlQgc2l6ZSwgRDNERk9STUFUIGZv
cm1hdCk7CisgICAgdmlydHVhbCB+SW5kZXhCdWZmZXIoKTsKIAotICAgIEdMZW51bSBwcmVSZW5k
ZXJWYWxpZGF0ZShHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkgY291bnQsIEJ1ZmZl
ciAqYXJyYXlFbGVtZW50QnVmZmVyLCBjb25zdCB2b2lkICppbmRpY2VzLCBUcmFuc2xhdGVkSW5k
ZXhEYXRhICp0cmFuc2xhdGVkKTsKLSAgICBHTGVudW0gcHJlUmVuZGVyVmFsaWRhdGVVbmluZGV4
ZWQoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmluZGV4
SW5mbyk7CisgICAgVUlOVCBzaXplKCkgY29uc3QgeyByZXR1cm4gbUJ1ZmZlclNpemU7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgKm1hcChVSU5UIHJlcXVpcmVkU3BhY2UsIFVJTlQgKm9mZnNldCkgPSAw
OworICAgIHZvaWQgdW5tYXAoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVzZXJ2ZVNwYWNlKFVJTlQg
cmVxdWlyZWRTcGFjZSwgR0xlbnVtIHR5cGUpID0gMDsKIAorICAgIElEaXJlY3QzREluZGV4QnVm
ZmVyOSAqZ2V0QnVmZmVyKCkgY29uc3Q7CisKKyAgcHJvdGVjdGVkOgorICAgIElEaXJlY3QzRERl
dmljZTkgKmNvbnN0IG1EZXZpY2U7CisKKyAgICBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKm1JbmRl
eEJ1ZmZlcjsKKyAgICBVSU5UIG1CdWZmZXJTaXplOworCiAgIHByaXZhdGU6Ci0gICAgc3RkOjpz
aXplX3QgSW5kZXhEYXRhTWFuYWdlcjo6dHlwZVNpemUoR0xlbnVtIHR5cGUpIGNvbnN0OwotICAg
IHN0ZDo6c2l6ZV90IEluZGV4RGF0YU1hbmFnZXI6OmluZGV4U2l6ZShHTGVudW0gdHlwZSkgY29u
c3Q7Ci0gICAgc3RkOjpzaXplX3Qgc3BhY2VSZXF1aXJlZChHTGVudW0gdHlwZSwgR0xzaXplaSBj
b3VudCkgY29uc3Q7Ci0gICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpwcmVwYXJlSW5kZXhCdWZm
ZXIoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UpOworICAgIERJU0FMTE9X
X0NPUFlfQU5EX0FTU0lHTihJbmRleEJ1ZmZlcik7Cit9OwogCi0gICAgQ29udGV4dCAqbUNvbnRl
eHQ7Ci0gICAgQnVmZmVyQmFja0VuZCAqbUJhY2tlbmQ7CitjbGFzcyBTdHJlYW1pbmdJbmRleEJ1
ZmZlciA6IHB1YmxpYyBJbmRleEJ1ZmZlcgoreworICBwdWJsaWM6CisgICAgU3RyZWFtaW5nSW5k
ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBVSU5UIGluaXRpYWxTaXplLCBEM0RG
T1JNQVQgZm9ybWF0KTsKKyAgICB+U3RyZWFtaW5nSW5kZXhCdWZmZXIoKTsKIAotICAgIGJvb2wg
bUludEluZGljZXNTdXBwb3J0ZWQ7CisgICAgdm9pZCAqbWFwKFVJTlQgcmVxdWlyZWRTcGFjZSwg
VUlOVCAqb2Zmc2V0KTsKKyAgICB2b2lkIHJlc2VydmVTcGFjZShVSU5UIHJlcXVpcmVkU3BhY2Us
IEdMZW51bSB0eXBlKTsKIAotICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqbVN0cmVhbUJ1ZmZl
clNob3J0OwotICAgIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqbVN0cmVhbUJ1ZmZlckludDsKKyAg
cHJpdmF0ZToKKyAgICBVSU5UIG1Xcml0ZVBvc2l0aW9uOworfTsKIAotICAgIFRyYW5zbGF0ZWRJ
bmRleEJ1ZmZlciAqbUNvdW50aW5nQnVmZmVyOwotICAgIEdMc2l6ZWkgbUNvdW50aW5nQnVmZmVy
U2l6ZTsKK2NsYXNzIFN0YXRpY0luZGV4QnVmZmVyIDogcHVibGljIEluZGV4QnVmZmVyCit7Cisg
IHB1YmxpYzoKKyAgICBleHBsaWNpdCBTdGF0aWNJbmRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UpOworICAgIH5TdGF0aWNJbmRleEJ1ZmZlcigpOwogCi0gICAgVHJhbnNsYXRlZElu
ZGV4QnVmZmVyICptTGluZUxvb3BCdWZmZXI7CisgICAgdm9pZCAqbWFwKFVJTlQgcmVxdWlyZWRT
cGFjZSwgVUlOVCAqb2Zmc2V0KTsKKyAgICB2b2lkIHJlc2VydmVTcGFjZShVSU5UIHJlcXVpcmVk
U3BhY2UsIEdMZW51bSB0eXBlKTsKKworICAgIGJvb2wgbG9va3VwVHlwZShHTGVudW0gdHlwZSk7
CisgICAgVUlOVCBsb29rdXBSYW5nZShpbnRwdHJfdCBvZmZzZXQsIEdMc2l6ZWkgY291bnQsIFVJ
TlQgKm1pbkluZGV4LCBVSU5UICptYXhJbmRleCk7ICAgLy8gUmV0dXJucyB0aGUgb2Zmc2V0IGlu
dG8gdGhlIGluZGV4IGJ1ZmZlciwgb3IgLTEgaWYgbm90IGZvdW5kCisgICAgdm9pZCBhZGRSYW5n
ZShpbnRwdHJfdCBvZmZzZXQsIEdMc2l6ZWkgY291bnQsIFVJTlQgbWluSW5kZXgsIFVJTlQgbWF4
SW5kZXgsIFVJTlQgc3RyZWFtT2Zmc2V0KTsKKworICBwcml2YXRlOgorICAgIEdMZW51bSBtQ2Fj
aGVUeXBlOworICAgIAorICAgIHN0cnVjdCBJbmRleFJhbmdlCisgICAgeworICAgICAgICBpbnRw
dHJfdCBvZmZzZXQ7CisgICAgICAgIEdMc2l6ZWkgY291bnQ7CisKKyAgICAgICAgVUlOVCBtaW5J
bmRleDsKKyAgICAgICAgVUlOVCBtYXhJbmRleDsKKyAgICAgICAgVUlOVCBzdHJlYW1PZmZzZXQ7
CisgICAgfTsKKworICAgIHN0ZDo6dmVjdG9yPEluZGV4UmFuZ2U+IG1DYWNoZTsKIH07CiAKK2Ns
YXNzIEluZGV4RGF0YU1hbmFnZXIKK3sKKyAgcHVibGljOgorICAgIEluZGV4RGF0YU1hbmFnZXIo
Q29udGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAqZXZpY2UpOworICAgIHZpcnR1YWwg
fkluZGV4RGF0YU1hbmFnZXIoKTsKKworICAgIEdMZW51bSBwcmVwYXJlSW5kZXhEYXRhKEdMZW51
bSB0eXBlLCBHTHNpemVpIGNvdW50LCBCdWZmZXIgKmFycmF5RWxlbWVudEJ1ZmZlciwgY29uc3Qg
dm9pZCAqaW5kaWNlcywgVHJhbnNsYXRlZEluZGV4RGF0YSAqdHJhbnNsYXRlZCk7CisKKyAgcHJp
dmF0ZToKKyAgICBESVNBTExPV19DT1BZX0FORF9BU1NJR04oSW5kZXhEYXRhTWFuYWdlcik7CisK
KyAgICBzdGQ6OnNpemVfdCB0eXBlU2l6ZShHTGVudW0gdHlwZSkgY29uc3Q7CisgICAgc3RkOjpz
aXplX3QgaW5kZXhTaXplKEQzREZPUk1BVCBmb3JtYXQpIGNvbnN0OworCisgICAgSURpcmVjdDNE
RGV2aWNlOSAqY29uc3QgbURldmljZTsKKworICAgIFN0cmVhbWluZ0luZGV4QnVmZmVyICptU3Ry
ZWFtaW5nQnVmZmVyU2hvcnQ7CisgICAgU3RyZWFtaW5nSW5kZXhCdWZmZXIgKm1TdHJlYW1pbmdC
dWZmZXJJbnQ7Cit9OworCiB9CiAKICNlbmRpZiAgIC8vIExJQkdMRVNWMl9HRU9NRVRSWV9JTkRF
WERBVEFNQU5BR0VSX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2Vy
LmNwcAkocmV2aXNpb24gNzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGli
R0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OSwxNCArOSwxMyBAQAogCiAjaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFN
YW5hZ2VyLmgiCiAKLSNpbmNsdWRlIDxsaW1pdHM+Ci0KICNpbmNsdWRlICJjb21tb24vZGVidWcu
aCIKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIv
UHJvZ3JhbS5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAKLSNpbmNsdWRlICJsaWJH
TEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS92
ZXJ0ZXhjb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0
YU1hbmFnZXIuaCIKIAogbmFtZXNwYWNlCkBAIC0yNywyNDUgKzI2LDc0NCBAQAogbmFtZXNwYWNl
IGdsCiB7CiAKLVZlcnRleERhdGFNYW5hZ2VyOjpWZXJ0ZXhEYXRhTWFuYWdlcihDb250ZXh0ICpj
b250ZXh0LCBCdWZmZXJCYWNrRW5kICpiYWNrZW5kKQotICAgIDogbUNvbnRleHQoY29udGV4dCks
IG1CYWNrZW5kKGJhY2tlbmQpLCBtRGlydHlDdXJyZW50VmFsdWVzKHRydWUpLCBtQ3VycmVudFZh
bHVlT2Zmc2V0KDApCitWZXJ0ZXhEYXRhTWFuYWdlcjo6VmVydGV4RGF0YU1hbmFnZXIoQ29udGV4
dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlKSA6IG1Db250ZXh0KGNvbnRleHQp
LCBtRGV2aWNlKGRldmljZSkKIHsKLSAgICBtU3RyZWFtQnVmZmVyID0gbUJhY2tlbmQtPmNyZWF0
ZVZlcnRleEJ1ZmZlcihJTklUSUFMX1NUUkVBTV9CVUZGRVJfU0laRSk7Ci0gICAgdHJ5CisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7Ci0gICAg
ICAgIG1DdXJyZW50VmFsdWVCdWZmZXIgPSBtQmFja2VuZC0+Y3JlYXRlVmVydGV4QnVmZmVyRm9y
U3RyaWRlWmVybyg0ICogc2l6ZW9mKGZsb2F0KSAqIE1BWF9WRVJURVhfQVRUUklCUyk7CisgICAg
ICAgIG1EaXJ0eUN1cnJlbnRWYWx1ZVtpXSA9IHRydWU7CisgICAgICAgIG1DdXJyZW50VmFsdWVC
dWZmZXJbaV0gPSBOVUxMOwogICAgIH0KLSAgICBjYXRjaCAoLi4uKQotICAgIHsKLSAgICAgICAg
ZGVsZXRlIG1TdHJlYW1CdWZmZXI7Ci0gICAgICAgIHRocm93OwotICAgIH0KKworICAgIGNvbnN0
IEQzRENBUFM5ICZjYXBzID0gY29udGV4dC0+Z2V0RGV2aWNlQ2FwcygpOworICAgIGNoZWNrVmVy
dGV4Q2FwcyhjYXBzLkRlY2xUeXBlcyk7CisKKyAgICBtU3RyZWFtaW5nQnVmZmVyID0gbmV3IFN0
cmVhbWluZ1ZlcnRleEJ1ZmZlcihtRGV2aWNlLCBJTklUSUFMX1NUUkVBTV9CVUZGRVJfU0laRSk7
CiB9CiAKIFZlcnRleERhdGFNYW5hZ2VyOjp+VmVydGV4RGF0YU1hbmFnZXIoKQogewotICAgIGRl
bGV0ZSBtU3RyZWFtQnVmZmVyOwotICAgIGRlbGV0ZSBtQ3VycmVudFZhbHVlQnVmZmVyOworICAg
IGRlbGV0ZSBtU3RyZWFtaW5nQnVmZmVyOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhf
VkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICB7CisgICAgICAgIGRlbGV0ZSBtQ3VycmVudFZhbHVl
QnVmZmVyW2ldOworICAgIH0KIH0KIAotc3RkOjpiaXRzZXQ8TUFYX1ZFUlRFWF9BVFRSSUJTPiBW
ZXJ0ZXhEYXRhTWFuYWdlcjo6Z2V0QWN0aXZlQXR0cmlicygpIGNvbnN0CitVSU5UIFZlcnRleERh
dGFNYW5hZ2VyOjp3cml0ZUF0dHJpYnV0ZURhdGEoQXJyYXlWZXJ0ZXhCdWZmZXIgKnZlcnRleEJ1
ZmZlciwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAm
YXR0cmlidXRlKQogewotICAgIHN0ZDo6Yml0c2V0PE1BWF9WRVJURVhfQVRUUklCUz4gYWN0aXZl
OworICAgIEJ1ZmZlciAqYnVmZmVyID0gYXR0cmlidXRlLm1Cb3VuZEJ1ZmZlci5nZXQoKTsKIAot
ICAgIFByb2dyYW0gKnByb2dyYW0gPSBtQ29udGV4dC0+Z2V0Q3VycmVudFByb2dyYW0oKTsKKyAg
ICBpbnQgaW5wdXRTdHJpZGUgPSBhdHRyaWJ1dGUuc3RyaWRlKCk7CisgICAgaW50IGVsZW1lbnRT
aXplID0gYXR0cmlidXRlLnR5cGVTaXplKCk7CisgICAgY29uc3QgRm9ybWF0Q29udmVydGVyICZj
b252ZXJ0ZXIgPSBmb3JtYXRDb252ZXJ0ZXIoYXR0cmlidXRlKTsKKyAgICBVSU5UIHN0cmVhbU9m
ZnNldCA9IDA7CiAKLSAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0ZUlu
ZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHZvaWQgKm91
dHB1dCA9IE5VTEw7CisgICAgCisgICAgaWYgKHZlcnRleEJ1ZmZlcikKICAgICB7Ci0gICAgICAg
IGFjdGl2ZVthdHRyaWJ1dGVJbmRleF0gPSAocHJvZ3JhbS0+Z2V0U2VtYW50aWNJbmRleChhdHRy
aWJ1dGVJbmRleCkgIT0gLTEpOworICAgICAgICBvdXRwdXQgPSB2ZXJ0ZXhCdWZmZXItPm1hcChh
dHRyaWJ1dGUsIHNwYWNlUmVxdWlyZWQoYXR0cmlidXRlLCBjb3VudCksICZzdHJlYW1PZmZzZXQp
OwogICAgIH0KIAotICAgIHJldHVybiBhY3RpdmU7Ci19CisgICAgaWYgKG91dHB1dCA9PSBOVUxM
KQorICAgIHsKKyAgICAgICAgRVJSKCJGYWlsZWQgdG8gbWFwIHZlcnRleCBidWZmZXIuIik7Cisg
ICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKLUdMZW51bSBWZXJ0ZXhEYXRhTWFuYWdlcjo6cHJl
UmVuZGVyVmFsaWRhdGUoR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKnRyYW5z
bGF0ZWQpCi17Ci0gICAgY29uc3QgQXR0cmlidXRlU3RhdGUgKmF0dHJpYnMgPSBtQ29udGV4dC0+
Z2V0VmVydGV4QXR0cmliQmxvY2soKTsKLSAgICBjb25zdCBzdGQ6OmJpdHNldDxNQVhfVkVSVEVY
X0FUVFJJQlM+IGFjdGl2ZUF0dHJpYnMgPSBnZXRBY3RpdmVBdHRyaWJzKCk7CisgICAgY29uc3Qg
Y2hhciAqaW5wdXQgPSBOVUxMOwogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVY
X0FUVFJJQlM7IGkrKykKKyAgICBpZiAoYnVmZmVyKQogICAgIHsKLSAgICAgICAgaWYgKCFhY3Rp
dmVBdHRyaWJzW2ldICYmIGF0dHJpYnNbaV0ubUVuYWJsZWQgJiYgYXR0cmlic1tpXS5tQm91bmRC
dWZmZXIgIT0gMCAmJiAhbUNvbnRleHQtPmdldEJ1ZmZlcihhdHRyaWJzW2ldLm1Cb3VuZEJ1ZmZl
cikpCi0gICAgICAgICAgICByZXR1cm4gR0xfSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgIGlu
dCBvZmZzZXQgPSBhdHRyaWJ1dGUubU9mZnNldDsKKworICAgICAgICBpbnB1dCA9IHN0YXRpY19j
YXN0PGNvbnN0IGNoYXIqPihidWZmZXItPmRhdGEoKSkgKyBvZmZzZXQ7CiAgICAgfQorICAgIGVs
c2UKKyAgICB7CisgICAgICAgIGlucHV0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcio+KGF0dHJp
YnV0ZS5tUG9pbnRlcik7CisgICAgfQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVS
VEVYX0FUVFJJQlM7IGkrKykKKyAgICBpbnB1dCArPSBpbnB1dFN0cmlkZSAqIHN0YXJ0OworCisg
ICAgaWYgKGNvbnZlcnRlci5pZGVudGl0eSAmJiBpbnB1dFN0cmlkZSA9PSBlbGVtZW50U2l6ZSkK
ICAgICB7Ci0gICAgICAgIHRyYW5zbGF0ZWRbaV0uZW5hYmxlZCA9IGFjdGl2ZUF0dHJpYnNbaV07
CisgICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIGlucHV0U3RyaWRlKTsKICAg
ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgY29udmVydGVyLmNvbnZlcnRBcnJheShpbnB1
dCwgaW5wdXRTdHJpZGUsIGNvdW50LCBvdXRwdXQpOworICAgIH0KIAotICAgIGJvb2wgdXNlc0N1
cnJlbnRWYWx1ZXMgPSBmYWxzZTsKKyAgICB2ZXJ0ZXhCdWZmZXItPnVubWFwKCk7CiAKKyAgICBy
ZXR1cm4gc3RyZWFtT2Zmc2V0OworfQorCitHTGVudW0gVmVydGV4RGF0YU1hbmFnZXI6OnByZXBh
cmVWZXJ0ZXhEYXRhKEdMaW50IHN0YXJ0LCBHTHNpemVpIGNvdW50LCBUcmFuc2xhdGVkQXR0cmli
dXRlICp0cmFuc2xhdGVkKQoreworICAgIEdMZW51bSBlcnJvciA9IEdMX05PX0VSUk9SOworICAg
IGNvbnN0IFZlcnRleEF0dHJpYnV0ZUFycmF5ICZhdHRyaWJzID0gbUNvbnRleHQtPmdldFZlcnRl
eEF0dHJpYnV0ZXMoKTsKKyAgICBQcm9ncmFtICpwcm9ncmFtID0gbUNvbnRleHQtPmdldEN1cnJl
bnRQcm9ncmFtKCk7CisKKyAgICBmb3IgKGludCBhdHRyaWJ1dGVJbmRleCA9IDA7IGF0dHJpYnV0
ZUluZGV4IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBhdHRyaWJ1dGVJbmRleCsrKQorICAgIHsKKyAg
ICAgICAgdHJhbnNsYXRlZFthdHRyaWJ1dGVJbmRleF0uYWN0aXZlID0gKHByb2dyYW0tPmdldFNl
bWFudGljSW5kZXgoYXR0cmlidXRlSW5kZXgpICE9IC0xKTsKKyAgICB9CisKKyAgICAvLyBEZXRl
cm1pbmUgdGhlIHJlcXVpcmVkIHN0b3JhZ2Ugc2l6ZSBwZXIgdXNlZCBidWZmZXIKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQogICAgIHsKLSAgICAgICAg
aWYgKGFjdGl2ZUF0dHJpYnNbaV0gJiYgIWF0dHJpYnNbaV0ubUVuYWJsZWQpCisgICAgICAgIEJ1
ZmZlciAqYnVmZmVyID0gYXR0cmlic1tpXS5tQm91bmRCdWZmZXIuZ2V0KCk7CisKKyAgICAgICAg
aWYgKHRyYW5zbGF0ZWRbaV0uYWN0aXZlICYmIGF0dHJpYnNbaV0ubUFycmF5RW5hYmxlZCAmJiAo
YnVmZmVyIHx8IGF0dHJpYnNbaV0ubVBvaW50ZXIpKQogICAgICAgICB7Ci0gICAgICAgICAgICB1
c2VzQ3VycmVudFZhbHVlcyA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IFN0YXRpY1ZlcnRleEJ1ZmZlciAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRW
ZXJ0ZXhCdWZmZXIoKSA6IE5VTEw7CisKKyAgICAgICAgICAgIGlmIChzdGF0aWNCdWZmZXIgJiYg
c3RhdGljQnVmZmVyLT5zaXplKCkgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBpbnQgdG90YWxDb3VudCA9IGJ1ZmZlci0+c2l6ZSgpIC8gYXR0cmlic1tpXS5zdHJpZGUoKTsK
KyAgICAgICAgICAgICAgICBzdGF0aWNCdWZmZXItPmFkZFJlcXVpcmVkU3BhY2Uoc3BhY2VSZXF1
aXJlZChhdHRyaWJzW2ldLCB0b3RhbENvdW50KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmICghc3RhdGljQnVmZmVyIHx8IHN0YXRpY0J1ZmZlci0+bG9va3VwQXR0cmlidXRl
KGF0dHJpYnNbaV0pID09IC0xKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICht
U3RyZWFtaW5nQnVmZmVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
bVN0cmVhbWluZ0J1ZmZlci0+YWRkUmVxdWlyZWRTcGFjZShzcGFjZVJlcXVpcmVkKGF0dHJpYnNb
aV0sIGNvdW50KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQogCi0gICAgLy8gSGFuZGxlIHRoZSBpZGVudGl0eS1tYXBwZWQgYXR0cmlidXRlcy4K
LSAgICAvLyBQcm9jZXNzIGFycmF5IGF0dHJpYnV0ZXMuCi0KLSAgICBzdGQ6OnNpemVfdCByZXF1
aXJlZFNwYWNlID0gMDsKLQorICAgIC8vIEludmFsaWRhdGUgc3RhdGljIGJ1ZmZlcnMgaWYgdGhl
IGF0dHJpYnV0ZSBmb3JtYXRzIG5vIGxvbmdlciBtYXRjaAogICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAgICAgewotICAgICAgICBpZiAoYWN0aXZlQXR0
cmlic1tpXSAmJiBhdHRyaWJzW2ldLm1FbmFibGVkKQorICAgICAgICBCdWZmZXIgKmJ1ZmZlciA9
IGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVyLmdldCgpOworCisgICAgICAgIGlmICh0cmFuc2xhdGVk
W2ldLmFjdGl2ZSAmJiBhdHRyaWJzW2ldLm1BcnJheUVuYWJsZWQgJiYgYnVmZmVyKQogICAgICAg
ICB7Ci0gICAgICAgICAgICByZXF1aXJlZFNwYWNlICs9IHNwYWNlUmVxdWlyZWQoYXR0cmlic1tp
XSwgY291bnQpOworICAgICAgICAgICAgU3RhdGljVmVydGV4QnVmZmVyICpzdGF0aWNCdWZmZXIg
PSBidWZmZXItPmdldFZlcnRleEJ1ZmZlcigpOworCisgICAgICAgICAgICBpZiAoc3RhdGljQnVm
ZmVyICYmIHN0YXRpY0J1ZmZlci0+c2l6ZSgpICE9IDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgYm9vbCBtYXRjaGluZ0F0dHJpYnV0ZXMgPSB0cnVlOworCisgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaiA9IDA7IGogPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGorKykKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGVkW2pdLmFjdGl2ZSAm
JiBhdHRyaWJzW2pdLm1BcnJheUVuYWJsZWQgJiYgYXR0cmlic1tqXS5tQm91bmRCdWZmZXIuZ2V0
KCkgPT0gYnVmZmVyKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoc3RhdGljQnVmZmVyLT5sb29rdXBBdHRyaWJ1dGUoYXR0cmlic1tqXSkgPT0gLTEp
CisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWF0Y2hpbmdBdHRyaWJ1dGVzID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIW1hdGNoaW5nQXR0cmli
dXRlcyAmJiBtU3RyZWFtaW5nQnVmZmVyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgbVN0cmVhbWluZ0J1ZmZlci0+YWRkUmVxdWlyZWRTcGFjZUZvcihzdGF0aWNCdWZm
ZXIpOworICAgICAgICAgICAgICAgICAgICBidWZmZXItPmludmFsaWRhdGVTdGF0aWNEYXRhKCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKHJlcXVpcmVkU3BhY2UgPiBtU3RyZWFtQnVmZmVyLT5zaXplKCkpCisgICAgLy8gUmVz
ZXJ2ZSB0aGUgcmVxdWlyZWQgc3BhY2UgcGVyIHVzZWQgYnVmZmVyCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKICAgICB7Ci0gICAgICAgIHN0ZDo6c2l6
ZV90IG5ld1NpemUgPSBzdGQ6Om1heChyZXF1aXJlZFNwYWNlLCAzICogbVN0cmVhbUJ1ZmZlci0+
c2l6ZSgpIC8gMik7IC8vIDEuNSB4IG1TdHJlYW1CdWZmZXItPnNpemUoKSBpcyBhcmJpdHJhcnkg
YW5kIHNob3VsZCBiZSBjaGVja2VkIHRvIHNlZSB3ZSBkb24ndCBoYXZlIHRvbyBtYW55IHJlYWxs
b2NhdGlvbnMuCisgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gYXR0cmlic1tpXS5tQm91bmRCdWZm
ZXIuZ2V0KCk7CiAKLSAgICAgICAgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqbmV3U3RyZWFtQnVm
ZmVyID0gbUJhY2tlbmQtPmNyZWF0ZVZlcnRleEJ1ZmZlcihuZXdTaXplKTsKKyAgICAgICAgaWYg
KHRyYW5zbGF0ZWRbaV0uYWN0aXZlICYmIGF0dHJpYnNbaV0ubUFycmF5RW5hYmxlZCAmJiAoYnVm
ZmVyIHx8IGF0dHJpYnNbaV0ubVBvaW50ZXIpKQorICAgICAgICB7CisgICAgICAgICAgICBBcnJh
eVZlcnRleEJ1ZmZlciAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRWZXJ0ZXhC
dWZmZXIoKSA6IE5VTEw7CisgICAgICAgICAgICBBcnJheVZlcnRleEJ1ZmZlciAqdmVydGV4QnVm
ZmVyID0gc3RhdGljQnVmZmVyID8gc3RhdGljQnVmZmVyIDogbVN0cmVhbWluZ0J1ZmZlcjsKIAot
ICAgICAgICBkZWxldGUgbVN0cmVhbUJ1ZmZlcjsKLSAgICAgICAgbVN0cmVhbUJ1ZmZlciA9IG5l
d1N0cmVhbUJ1ZmZlcjsKKyAgICAgICAgICAgIGlmICh2ZXJ0ZXhCdWZmZXIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgdmVydGV4QnVmZmVyLT5yZXNlcnZlUmVxdWlyZWRTcGFjZSgp
OworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCi0gICAgbVN0cmVhbUJ1ZmZlci0+
cmVzZXJ2ZVNwYWNlKHJlcXVpcmVkU3BhY2UpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICAvLyBQZXJmb3JtIHRoZSB2ZXJ0ZXggZGF0
YSB0cmFuc2xhdGlvbnMKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklC
UzsgaSsrKQogICAgIHsKLSAgICAgICAgaWYgKGFjdGl2ZUF0dHJpYnNbaV0gJiYgYXR0cmlic1tp
XS5tRW5hYmxlZCkKKyAgICAgICAgaWYgKHRyYW5zbGF0ZWRbaV0uYWN0aXZlKQogICAgICAgICB7
Ci0gICAgICAgICAgICBGb3JtYXRDb252ZXJ0ZXIgZm9ybWF0Q29udmVydGVyID0gbUJhY2tlbmQt
PmdldEZvcm1hdENvbnZlcnRlcihhdHRyaWJzW2ldLm1UeXBlLCBhdHRyaWJzW2ldLm1TaXplLCBh
dHRyaWJzW2ldLm1Ob3JtYWxpemVkKTsKKyAgICAgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gYXR0
cmlic1tpXS5tQm91bmRCdWZmZXIuZ2V0KCk7CiAKLSAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0u
bm9uQXJyYXkgPSBmYWxzZTsKLSAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0udHlwZSA9IGF0dHJp
YnNbaV0ubVR5cGU7Ci0gICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnNpemUgPSBhdHRyaWJzW2ld
Lm1TaXplOwotICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5ub3JtYWxpemVkID0gYXR0cmlic1tp
XS5tTm9ybWFsaXplZDsKLSAgICAgICAgICAgIHRyYW5zbGF0ZWRbaV0uc3RyaWRlID0gZm9ybWF0
Q29udmVydGVyLm91dHB1dFZlcnRleFNpemU7Ci0gICAgICAgICAgICB0cmFuc2xhdGVkW2ldLmJ1
ZmZlciA9IG1TdHJlYW1CdWZmZXI7CisgICAgICAgICAgICBpZiAoYXR0cmlic1tpXS5tQXJyYXlF
bmFibGVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghYnVmZmVyICYmIGF0
dHJpYnNbaV0ubVBvaW50ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIFRoaXMgaXMgYW4gYXBwbGljYXRpb24gZXJyb3IgdGhhdCB3b3VsZCBub3Jt
YWxseSByZXN1bHQgaW4gYSBjcmFzaCwgYnV0IHdlIGNhdGNoIGl0IGFuZCByZXR1cm4gYW4gZXJy
b3IKKyAgICAgICAgICAgICAgICAgICAgRVJSKCJBbiBlbmFibGVkIHZlcnRleCBhcnJheSBoYXMg
bm8gYnVmZmVyIGFuZCBubyBwb2ludGVyLiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
R0xfSU5WQUxJRF9PUEVSQVRJT047CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBz
aXplX3QgaW5wdXRTdHJpZGUgPSBpbnRlcnByZXRHbFN0cmlkZShhdHRyaWJzW2ldKTsKLSAgICAg
ICAgICAgIHNpemVfdCBlbGVtZW50U2l6ZSA9IHR5cGVTaXplKGF0dHJpYnNbaV0ubVR5cGUpICog
YXR0cmlic1tpXS5tU2l6ZTsKKyAgICAgICAgICAgICAgICBjb25zdCBGb3JtYXRDb252ZXJ0ZXIg
JmNvbnZlcnRlciA9IGZvcm1hdENvbnZlcnRlcihhdHRyaWJzW2ldKTsKIAotICAgICAgICAgICAg
dm9pZCAqb3V0cHV0ID0gbVN0cmVhbUJ1ZmZlci0+bWFwKHNwYWNlUmVxdWlyZWQoYXR0cmlic1tp
XSwgY291bnQpLCAmdHJhbnNsYXRlZFtpXS5vZmZzZXQpOworICAgICAgICAgICAgICAgIFN0YXRp
Y1ZlcnRleEJ1ZmZlciAqc3RhdGljQnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRWZXJ0ZXhC
dWZmZXIoKSA6IE5VTEw7CisgICAgICAgICAgICAgICAgQXJyYXlWZXJ0ZXhCdWZmZXIgKnZlcnRl
eEJ1ZmZlciA9IHN0YXRpY0J1ZmZlciA/IHN0YXRpY0J1ZmZlciA6IHN0YXRpY19jYXN0PEFycmF5
VmVydGV4QnVmZmVyKj4obVN0cmVhbWluZ0J1ZmZlcik7CiAKLSAgICAgICAgICAgIGNvbnN0IHZv
aWQgKmlucHV0OwotICAgICAgICAgICAgaWYgKGF0dHJpYnNbaV0ubUJvdW5kQnVmZmVyKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIEJ1ZmZlciAqYnVmZmVyID0gbUNvbnRleHQtPmdl
dEJ1ZmZlcihhdHRyaWJzW2ldLm1Cb3VuZEJ1ZmZlcik7CisgICAgICAgICAgICAgICAgVUlOVCBz
dHJlYW1PZmZzZXQgPSAtMTsKIAotICAgICAgICAgICAgICAgIHNpemVfdCBvZmZzZXQgPSByZWlu
dGVycHJldF9jYXN0PHNpemVfdD4oYXR0cmlic1tpXS5tUG9pbnRlcik7CisgICAgICAgICAgICAg
ICAgaWYgKHN0YXRpY0J1ZmZlcikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHN0cmVhbU9mZnNldCA9IHN0YXRpY0J1ZmZlci0+bG9va3VwQXR0cmlidXRlKGF0dHJpYnNb
aV0pOwogCi0gICAgICAgICAgICAgICAgLy8gQmVmb3JlIHdlIGNhbGN1bGF0ZSB0aGUgcmVxdWly
ZWQgc2l6ZSBiZWxvdywgbWFrZSBzdXJlIGl0IGNhbiBiZSBjb21wdXRlZCB3aXRob3V0IGludGVn
ZXIgb3ZlcmZsb3cuCi0gICAgICAgICAgICAgICAgaWYgKHN0ZDo6bnVtZXJpY19saW1pdHM8c3Rk
OjpzaXplX3Q+OjptYXgoKSAtIHN0YXJ0IDwgc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KGNvdW50
KQotICAgICAgICAgICAgICAgICAgICB8fCBzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6c2l6ZV90
Pjo6bWF4KCkgLyBpbnB1dFN0cmlkZSA8IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihzdGFydCAr
IGNvdW50IC0gMSkgLy8gaXQncyBhIHByZXJlcXVpc2l0ZSB0aGF0IGNvdW50ID49IDEsIHNvIHN0
YXJ0K2NvdW50LTEgPj0gMC4KLSAgICAgICAgICAgICAgICAgICAgfHwgc3RkOjpudW1lcmljX2xp
bWl0czxzdGQ6OnNpemVfdD46Om1heCgpIC0gb2Zmc2V0IDwgaW5wdXRTdHJpZGUgKiAoc3RhcnQg
KyBjb3VudCAtIDEpCi0gICAgICAgICAgICAgICAgICAgIHx8IHN0ZDo6bnVtZXJpY19saW1pdHM8
c3RkOjpzaXplX3Q+OjptYXgoKSAtIGVsZW1lbnRTaXplIDwgb2Zmc2V0ICsgaW5wdXRTdHJpZGUg
KiAoc3RhcnQgKyBjb3VudCAtIDEpICsgZWxlbWVudFNpemUpCisgICAgICAgICAgICAgICAgICAg
IGlmIChzdHJlYW1PZmZzZXQgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGVudGlyZSBidWZmZXIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGludCB0b3RhbENvdW50ID0gYnVmZmVyLT5zaXplKCkgLyBhdHRyaWJzW2ld
LnN0cmlkZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0SW5kZXggPSBhdHRy
aWJzW2ldLm1PZmZzZXQgLyBhdHRyaWJzW2ldLnN0cmlkZSgpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJlYW1PZmZzZXQgPSB3cml0ZUF0dHJpYnV0ZURhdGEoc3RhdGljQnVmZmVyLCAt
c3RhcnRJbmRleCwgdG90YWxDb3VudCwgYXR0cmlic1tpXSk7CisgICAgICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtT2Zmc2V0ICE9IC0xKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1PZmZzZXQgKz0g
KHN0YXJ0ICsgYXR0cmlic1tpXS5tT2Zmc2V0IC8gYXR0cmlic1tpXS5zdHJpZGUoKSkgKiBjb252
ZXJ0ZXIub3V0cHV0RWxlbWVudFNpemU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAgICAgbVN0cmVhbUJ1ZmZlci0+dW5tYXAoKTsKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFUSU9OOworICAgICAgICAgICAgICAgICAgICBzdHJl
YW1PZmZzZXQgPSB3cml0ZUF0dHJpYnV0ZURhdGEobVN0cmVhbWluZ0J1ZmZlciwgc3RhcnQsIGNv
dW50LCBhdHRyaWJzW2ldKTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBp
ZiAob2Zmc2V0ICsgaW5wdXRTdHJpZGUgKiAoc3RhcnQgKyBjb3VudCAtIDEpICsgZWxlbWVudFNp
emUgPiBidWZmZXItPnNpemUoKSkKKyAgICAgICAgICAgICAgICBpZiAoc3RyZWFtT2Zmc2V0ID09
IC0xKQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgbVN0cmVhbUJ1ZmZl
ci0+dW5tYXAoKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0lOVkFMSURfT1BFUkFU
SU9OOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gR0xfT1VUX09GX01FTU9SWTsKICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpbnB1dCA9IHN0YXRpY19jYXN0PGNvbnN0
IGNoYXIqPihidWZmZXItPmRhdGEoKSkgKyBvZmZzZXQ7CisgICAgICAgICAgICAgICAgdHJhbnNs
YXRlZFtpXS52ZXJ0ZXhCdWZmZXIgPSB2ZXJ0ZXhCdWZmZXItPmdldEJ1ZmZlcigpOworICAgICAg
ICAgICAgICAgIHRyYW5zbGF0ZWRbaV0udHlwZSA9IGNvbnZlcnRlci5kM2REZWNsVHlwZTsKKyAg
ICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnN0cmlkZSA9IGNvbnZlcnRlci5vdXRwdXRFbGVt
ZW50U2l6ZTsKKyAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm9mZnNldCA9IHN0cmVhbU9m
ZnNldDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBpbnB1dCA9IGF0dHJpYnNbaV0ubVBvaW50ZXI7CisgICAgICAgICAgICAg
ICAgaWYgKG1EaXJ0eUN1cnJlbnRWYWx1ZVtpXSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIGRlbGV0ZSBtQ3VycmVudFZhbHVlQnVmZmVyW2ldOworICAgICAgICAgICAg
ICAgICAgICBtQ3VycmVudFZhbHVlQnVmZmVyW2ldID0gbmV3IENvbnN0YW50VmVydGV4QnVmZmVy
KG1EZXZpY2UsIGF0dHJpYnNbaV0ubUN1cnJlbnRWYWx1ZVswXSwgYXR0cmlic1tpXS5tQ3VycmVu
dFZhbHVlWzFdLCBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbMl0sIGF0dHJpYnNbaV0ubUN1cnJl
bnRWYWx1ZVszXSk7CisgICAgICAgICAgICAgICAgICAgIG1EaXJ0eUN1cnJlbnRWYWx1ZVtpXSA9
IGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWRb
aV0udmVydGV4QnVmZmVyID0gbUN1cnJlbnRWYWx1ZUJ1ZmZlcltpXS0+Z2V0QnVmZmVyKCk7CisK
KyAgICAgICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnR5cGUgPSBEM0RERUNMVFlQRV9GTE9BVDQ7
CisgICAgICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5zdHJpZGUgPSAwOworICAgICAgICAgICAg
ICAgIHRyYW5zbGF0ZWRbaV0ub2Zmc2V0ID0gMDsKICAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KIAotICAgICAgICAgICAgaW5wdXQgPSBzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4oaW5w
dXQpICsgaW5wdXRTdHJpZGUgKiBzdGFydDsKKyAgICByZXR1cm4gR0xfTk9fRVJST1I7Cit9CiAK
LSAgICAgICAgICAgIGlmIChmb3JtYXRDb252ZXJ0ZXIuaWRlbnRpdHkgJiYgaW5wdXRTdHJpZGUg
PT0gZWxlbWVudFNpemUpCitzdGQ6OnNpemVfdCBWZXJ0ZXhEYXRhTWFuYWdlcjo6c3BhY2VSZXF1
aXJlZChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYiwgc3RkOjpzaXplX3QgY291bnQpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGZvcm1hdENvbnZlcnRlcihhdHRyaWIpLm91dHB1dEVsZW1lbnRT
aXplICogY291bnQ7Cit9CisKKy8vIE1hcHBpbmcgZnJvbSBPcGVuR0wtRVMgdmVydGV4IGF0dHJp
YiB0eXBlIHRvIEQzRCBkZWNsIHR5cGU6CisvLworLy8gQllURSAgICAgICAgICAgICAgICAgU0hP
UlQgKENhc3QpCisvLyBCWVRFLW5vcm0gICAgICAgICAgICBGTE9BVCAoTm9ybWFsaXplKSAoY2Fu
J3QgYmUgZXhhY3RseSByZXByZXNlbnRlZCBhcyBTSE9SVC1ub3JtKQorLy8gVU5TSUdORURfQllU
RSAgICAgICAgVUJZVEU0IChJZGVudGl0eSkgb3IgU0hPUlQgKENhc3QpCisvLyBVTlNJR05FRF9C
WVRFLW5vcm0gICBVQllURTROIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKKy8vIFNI
T1JUICAgICAgICAgICAgICAgIFNIT1JUIChJZGVudGl0eSkKKy8vIFNIT1JULW5vcm0gICAgICAg
ICAgIFNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQorLy8gVU5TSUdO
RURfU0hPUlQgICAgICAgRkxPQVQgKENhc3QpCisvLyBVTlNJR05FRF9TSE9SVC1ub3JtICBVU0hP
UlQtbm9ybSAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUpCisvLyBGSVhFRCAobm90IGlu
IFdlYkdMKSBGTE9BVCAoRml4ZWRUb0Zsb2F0KQorLy8gRkxPQVQgICAgICAgICAgICAgICAgRkxP
QVQgKElkZW50aXR5KQorCisvLyBHTFRvQ1R5cGUgbWFwcyBmcm9tIEdMIHR5cGUgKGFzIEdMZW51
bSkgdG8gdGhlIEMgdHlwZWRlZi4gCit0ZW1wbGF0ZSA8R0xlbnVtIEdMVHlwZT4gc3RydWN0IEdM
VG9DVHlwZSB7IH07CisKK3RlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfQllURT4geyB0
eXBlZGVmIEdMYnl0ZSB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9V
TlNJR05FRF9CWVRFPiB7IHR5cGVkZWYgR0x1Ynl0ZSB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3Ry
dWN0IEdMVG9DVHlwZTxHTF9TSE9SVD4geyB0eXBlZGVmIEdMc2hvcnQgdHlwZTsgfTsKK3RlbXBs
YXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfVU5TSUdORURfU0hPUlQ+IHsgdHlwZWRlZiBHTHVz
aG9ydCB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9GSVhFRD4geyB0
eXBlZGVmIEdMdWludCB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEdMVG9DVHlwZTxHTF9G
TE9BVD4geyB0eXBlZGVmIEdMZmxvYXQgdHlwZTsgfTsKKworLy8gVGhpcyBkaWZmZXJzIGZyb20g
RDNEREVDTFRZUEUgaW4gdGhhdCBpdCBpcyB1bnNpemVkLiAoU2l6ZSBleHBhbnNpb24gaXMgYXBw
bGllZCBsYXN0LikKK2VudW0gRDNEVmVydGV4VHlwZQoreworICAgIEQzRFZUX0ZMT0FULAorICAg
IEQzRFZUX1NIT1JULAorICAgIEQzRFZUX1NIT1JUX05PUk0sCisgICAgRDNEVlRfVUJZVEUsCisg
ICAgRDNEVlRfVUJZVEVfTk9STSwKKyAgICBEM0RWVF9VU0hPUlRfTk9STQorfTsKKworLy8gRDNE
VG9DVHlwZSBtYXBzIGZyb20gRDNEIHZlcnRleCB0eXBlIChhcyBlbnVtIEQzRFZlcnRleFR5cGUp
IHRvIHRoZSBjb3JyZXNwb25kaW5nIEMgdHlwZS4KK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgRDNE
VHlwZT4gc3RydWN0IEQzRFRvQ1R5cGUgeyB9OworCit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9D
VHlwZTxEM0RWVF9GTE9BVD4geyB0eXBlZGVmIGZsb2F0IHR5cGU7IH07Cit0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9SVD4geyB0eXBlZGVmIHNob3J0IHR5cGU7IH07Cit0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9TSE9SVF9OT1JNPiB7IHR5cGVkZWYg
c2hvcnQgdHlwZTsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VCWVRF
PiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9OwordGVtcGxhdGUgPD4gc3RydWN0IEQz
RFRvQ1R5cGU8RDNEVlRfVUJZVEVfTk9STT4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsg
fTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VTSE9SVF9OT1JNPiB7IHR5
cGVkZWYgdW5zaWduZWQgc2hvcnQgdHlwZTsgfTsKKworLy8gRW5jb2RlIHRoZSB0eXBlL3NpemUg
Y29tYmluYXRpb25zIHRoYXQgRDNEIHBlcm1pdHMuIEZvciBlYWNoIHR5cGUvc2l6ZSBpdCBleHBh
bmRzIHRvIGEgd2lkZW5lciB0aGF0IHdpbGwgcHJvdmlkZSB0aGUgYXBwcm9wcmlhdGUgZmluYWwg
c2l6ZS4KK3RlbXBsYXRlIDx1bnNpZ25lZCBpbnQgdHlwZSwgaW50IHNpemU+CitzdHJ1Y3QgV2lk
ZW5SdWxlCit7Cit9OworCit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8RDNE
VlRfRkxPQVQsIHNpemU+ICAgICAgICAgIDogZ2w6Ok5vV2lkZW48c2l6ZT4geyB9OwordGVtcGxh
dGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JULCBzaXplPiAgICAgICAg
ICA6IGdsOjpXaWRlblRvRXZlbjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVj
dCBXaWRlblJ1bGU8RDNEVlRfU0hPUlRfTk9STSwgc2l6ZT4gICAgIDogZ2w6OldpZGVuVG9FdmVu
PHNpemU+IHsgfTsKK3RlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9V
QllURSwgc2l6ZT4gICAgICAgICAgOiBnbDo6V2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwordGVtcGxh
dGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VCWVRFX05PUk0sIHNpemU+ICAg
ICA6IGdsOjpXaWRlblRvRm91cjxzaXplPiB7IH07Cit0ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVj
dCBXaWRlblJ1bGU8RDNEVlRfVVNIT1JUX05PUk0sIHNpemU+ICAgIDogZ2w6OldpZGVuVG9FdmVu
PHNpemU+IHsgfTsKKworLy8gVmVydGV4VHlwZUZsYWdzIGVuY29kZXMgdGhlIEQzRENBUFM5OjpE
ZWNsVHlwZSBmbGFnIGFuZCB2ZXJ0ZXggZGVjbGFyYXRpb24gZmxhZyBmb3IgZWFjaCBEM0QgdmVy
dGV4IHR5cGUgJiBzaXplIGNvbWJpbmF0aW9uLgordGVtcGxhdGUgPHVuc2lnbmVkIGludCBkM2R0
eXBlLCBpbnQgc2l6ZT4KK3N0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3MKK3sKK307CisKK3RlbXBsYXRl
IDx1bnNpZ25lZCBpbnQgY2FwZmxhZywgdW5zaWduZWQgaW50IGRlY2xmbGFnPgorc3RydWN0IFZl
cnRleFR5cGVGbGFnc0hlbHBlcgoreworICAgIGVudW0geyBjYXBmbGFnID0gY2FwZmxhZyB9Owor
ICAgIGVudW0geyBkZWNsZmxhZyA9IGRlY2xmbGFnIH07Cit9OworCit0ZW1wbGF0ZSA8PiBzdHJ1
Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAxPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBl
cjwwLCBEM0RERUNMVFlQRV9GTE9BVDE+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhU
eXBlRmxhZ3M8RDNEVlRfRkxPQVQsIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERF
Q0xUWVBFX0ZMT0FUMj4geyB9OwordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxE
M0RWVF9GTE9BVCwgMz4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxP
QVQzPiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FU
LCA0PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9GTE9BVDQ+IHsgfTsK
K3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDI+IDogVmVy
dGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUMj4geyB9OwordGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVCwgND4gOiBWZXJ0ZXhUeXBlRmxh
Z3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfU0hPUlQ0PiB7IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVs
cGVyPEQzRERUQ0FQU19TSE9SVDJOLCBEM0RERUNMVFlQRV9TSE9SVDJOPiB7IH07Cit0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JUX05PUk0sIDQ+IDogVmVydGV4
VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19TSE9SVDROLCBEM0RERUNMVFlQRV9TSE9SVDROPiB7
IH07Cit0ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VCWVRFLCA0PiA6
IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfVUJZVEU0LCBEM0RERUNMVFlQRV9VQllU
RTQ+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVUJZVEVf
Tk9STSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNE4sIEQzRERF
Q0xUWVBFX1VCWVRFNE4+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8
RDNEVlRfVVNIT1JUX05PUk0sIDI+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19V
U0hPUlQyTiwgRDNEREVDTFRZUEVfVVNIT1JUMk4+IHsgfTsKK3RlbXBsYXRlIDw+IHN0cnVjdCBW
ZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfVVNIT1JUX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVs
cGVyPEQzRERUQ0FQU19VU0hPUlQ0TiwgRDNEREVDTFRZUEVfVVNIT1JUNE4+IHsgfTsKKworCisv
LyBWZXJ0ZXhUeXBlTWFwcGluZyBtYXBzIEdMIHR5cGUgJiBub3JtYWxpemVkIGZsYWcgdG8gcHJl
ZmVycmVkIGFuZCBmYWxsYmFjayBEM0QgdmVydGV4IHR5cGVzIChhcyBEM0RWZXJ0ZXhUeXBlIGVu
dW1zKS4KK3RlbXBsYXRlIDxHTGVudW0gR0x0eXBlLCBib29sIG5vcm1hbGl6ZWQ+CitzdHJ1Y3Qg
VmVydGV4VHlwZU1hcHBpbmcKK3sKK307CisKK3RlbXBsYXRlIDxEM0RWZXJ0ZXhUeXBlIFByZWZl
cnJlZCwgRDNEVmVydGV4VHlwZSBGYWxsYmFjayA9IFByZWZlcnJlZD4KK3N0cnVjdCBWZXJ0ZXhU
eXBlTWFwcGluZ0Jhc2UKK3sKKyAgICBlbnVtIHsgcHJlZmVycmVkID0gUHJlZmVycmVkIH07Cisg
ICAgZW51bSB7IGZhbGxiYWNrID0gRmFsbGJhY2sgfTsKK307CisKK3RlbXBsYXRlIDw+IHN0cnVj
dCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9CWVRFLCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAg
ICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQ2FzdAordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdM
X0JZVEUsIHRydWU+ICAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdC
YXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3JtYWxpemUK
K3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCBm
YWxzZT4gICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURSwg
RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgLy8gSWRlbnRpdHksIENhc3QKK3RlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9CWVRFLCB0cnVlPiAgICAgICAg
ICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VQllURV9OT1JNLCBEM0RWVF9G
TE9BVD4geyB9OyAgICAgLy8gSWRlbnRpdHksIE5vcm1hbGl6ZQordGVtcGxhdGUgPD4gc3RydWN0
IFZlcnRleFR5cGVNYXBwaW5nPEdMX1NIT1JULCBmYWxzZT4gICAgICAgICAgICAgICAgICAgICAg
IDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1NIT1JUPiB7IH07ICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJZGVudGl0eQordGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVNYXBwaW5n
PEdMX1NIT1JULCB0cnVlPiAgICAgICAgICAgICAgICAgICAgICAgIDogVmVydGV4VHlwZU1hcHBp
bmdCYXNlPEQzRFZUX1NIT1JUX05PUk0sIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAvLyBDYXN0LCBO
b3JtYWxpemUKK3RlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05F
RF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RW
VF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2FzdAordGVtcGxhdGUgPD4g
c3RydWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX1VOU0lHTkVEX1NIT1JULCB0cnVlPiAgICAgICAg
ICAgICAgIDogVmVydGV4VHlwZU1hcHBpbmdCYXNlPEQzRFZUX1VTSE9SVF9OT1JNLCBEM0RWVF9G
TE9BVD4geyB9OyAgICAvLyBDYXN0LCBOb3JtYWxpemUKK3RlbXBsYXRlIDxib29sIG5vcm1hbGl6
ZWQ+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9GSVhFRCwgbm9ybWFsaXplZD4gICA6IFZl
cnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRml4ZWRUb0Zsb2F0Cit0ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgVmVy
dGV4VHlwZU1hcHBpbmc8R0xfRkxPQVQsIG5vcm1hbGl6ZWQ+ICAgOiBWZXJ0ZXhUeXBlTWFwcGlu
Z0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIElkZW50aXR5
CisKKworLy8gR2l2ZW4gYSBHTCB0eXBlICYgbm9ybSBmbGFnIGFuZCBhIEQzRCB0eXBlLCBDb252
ZXJzaW9uUnVsZSBwcm92aWRlcyB0aGUgdHlwZSBjb252ZXJzaW9uIHJ1bGUgKENhc3QsIE5vcm1h
bGl6ZSwgSWRlbnRpdHksIEZpeGVkVG9GbG9hdCkuCisvLyBUaGUgY29udmVyc2lvbiBydWxlcyB0
aGVtc2VsdmVzIGFyZSBkZWZpbmVkIGluIHZlcnRleGNvbnZlcnNpb24uaC4KKworLy8gQWxtb3N0
IGFsbCBjYXNlcyBhcmUgY292ZXJlZCBieSBDYXN0IChpbmNsdWRpbmcgdGhvc2UgdGhhdCBhcmUg
YWN0dWFsbHkgSWRlbnRpdHkgc2luY2UgQ2FzdDxULFQ+IGtub3dzIGl0J3MgYW4gaWRlbnRpdHkg
bWFwcGluZykuCit0ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIHVu
c2lnbmVkIGludCB0b1R5cGU+CitzdHJ1Y3QgQ29udmVyc2lvblJ1bGUgOiBnbDo6Q2FzdDx0eXBl
bmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+Ojp0eXBlLCB0eXBlbmFtZSBEM0RUb0NUeXBlPHRvVHlw
ZT46OnR5cGU+Cit7Cit9OworCisvLyBBbGwgY29udmVyc2lvbnMgZnJvbSBub3JtYWxpemVkIHR5
cGVzIHRvIGZsb2F0IHVzZSB0aGUgTm9ybWFsaXplIG9wZXJhdG9yLgordGVtcGxhdGUgPEdMZW51
bSBmcm9tVHlwZT4gc3RydWN0IENvbnZlcnNpb25SdWxlPGZyb21UeXBlLCB0cnVlLCBEM0RWVF9G
TE9BVD4gOiBnbDo6Tm9ybWFsaXplPHR5cGVuYW1lIEdMVG9DVHlwZTxmcm9tVHlwZT46OnR5cGU+
IHsgfTsKKworLy8gVXNlIGEgZnVsbCBzcGVjaWFsaXNhdGlvbiBmb3IgdGhpcyBzbyB0aGF0IGl0
IHByZWZlcmVudGlhbGx5IG1hdGNoZXMgYWhlYWQgb2YgdGhlIGdlbmVyaWMgbm9ybWFsaXplLXRv
LWZsb2F0IHJ1bGVzLgordGVtcGxhdGUgPD4gc3RydWN0IENvbnZlcnNpb25SdWxlPEdMX0ZJWEVE
LCB0cnVlLCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsgfTsK
K3RlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxHTF9GSVhFRCwgZmFsc2UsIEQzRFZU
X0ZMT0FUPiA6IGdsOjpGaXhlZFRvRmxvYXQ8R0x1aW50LCAxNj4geyB9OworCisvLyBBIDItc3Rh
Z2UgY29uc3RydWN0aW9uIGlzIHVzZWQgZm9yIERlZmF1bHRWZXJ0ZXhWYWx1ZXMgYmVjYXVzZSBm
bG9hdCBtdXN0IHVzZSBTaW1wbGVEZWZhdWx0VmFsdWVzIChpLmUuIDAvMSkKKy8vIHdoZXRoZXIg
aXQgaXMgbm9ybWFsaXplZCBvciBub3QuCit0ZW1wbGF0ZSA8Y2xhc3MgVCwgYm9vbCBub3JtYWxp
emVkPgorc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTIKK3sKK307CisKK3RlbXBsYXRl
IDxjbGFzcyBUPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCB0cnVlPiAgOiBn
bDo6Tm9ybWFsaXplZERlZmF1bHRWYWx1ZXM8VD4geyB9OwordGVtcGxhdGUgPGNsYXNzIFQ+IHN0
cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIGZhbHNlPiA6IGdsOjpTaW1wbGVEZWZh
dWx0VmFsdWVzPFQ+IHsgfTsKKworLy8gV29yayBvdXQgdGhlIGRlZmF1bHQgdmFsdWUgcnVsZSBm
b3IgYSBEM0QgdHlwZSAoZXhwcmVzc2VkIGFzIHRoZSBDIHR5cGUpIGFuZCAKK3RlbXBsYXRlIDxj
bGFzcyBULCBib29sIG5vcm1hbGl6ZWQ+CitzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlcyA6IERl
ZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgbm9ybWFsaXplZD4KK3sKK307CisKK3RlbXBsYXRl
IDxib29sIG5vcm1hbGl6ZWQ+IHN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzPGZsb2F0LCBub3Jt
YWxpemVkPiA6IGdsOjpTaW1wbGVEZWZhdWx0VmFsdWVzPGZsb2F0PiB7IH07CisKKy8vIFBvbGlj
eSBydWxlcyBmb3IgdXNlIHdpdGggQ29udmVydGVyLCB0byBjaG9vc2Ugd2hldGhlciB0byB1c2Ug
dGhlIHByZWZlcnJlZCBvciBmYWxsYmFjayBjb252ZXJzaW9uLgorLy8gVGhlIGZhbGxiYWNrIGNv
bnZlcnNpb24gcHJvZHVjZXMgYW4gb3V0cHV0IHRoYXQgYWxsIEQzRDkgZGV2aWNlcyBtdXN0IHN1
cHBvcnQuCit0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZVByZWZlcnJlZCB7IGVudW0geyB0
eXBlID0gVDo6cHJlZmVycmVkIH07IH07Cit0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IFVzZUZh
bGxiYWNrIHsgZW51bSB7IHR5cGUgPSBUOjpmYWxsYmFjayB9OyB9OworCisvLyBDb252ZXJ0ZXIg
dGllcyBpdCBhbGwgdG9nZXRoZXIuIEdpdmVuIGFuIE9wZW5HTCB0eXBlL25vcm0vc2l6ZSBhbmQg
Y2hvaWNlIG9mIHByZWZlcnJlZC9mYWxsYmFjayBjb252ZXJzaW9uLAorLy8gaXQgcHJvdmlkZXMg
YWxsIHRoZSBtZW1iZXJzIG9mIHRoZSBhcHByb3ByaWF0ZSBWZXJ0ZXhEYXRhQ29udmVydGVyLCB0
aGUgRDNEQ0FQUzk6OkRlY2xUeXBlcyBmbGFnIGluIGNhcCBmbGFnCisvLyBhbmQgdGhlIEQzRERF
Q0xUWVBFIG1lbWJlciBuZWVkZWQgZm9yIHRoZSB2ZXJ0ZXggZGVjbGFyYXRpb24gaW4gZGVjbGZs
YWcuCit0ZW1wbGF0ZSA8R0xlbnVtIGZyb21UeXBlLCBib29sIG5vcm1hbGl6ZWQsIGludCBzaXpl
LCB0ZW1wbGF0ZSA8Y2xhc3MgVD4gY2xhc3MgUHJlZmVyZW5jZVJ1bGU+CitzdHJ1Y3QgQ29udmVy
dGVyCisgICAgOiBnbDo6VmVydGV4RGF0YUNvbnZlcnRlcjx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJv
bVR5cGU+Ojp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2lkZW5SdWxlPFBy
ZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6
dHlwZSwgc2l6ZT4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJzaW9uUnVs
ZTxmcm9tVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vcm1hbGl6ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+
ID46OnR5cGU+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdFZlcnRleFZh
bHVlczx0eXBlbmFtZSBEM0RUb0NUeXBlPFByZWZlcmVuY2VSdWxlPCBWZXJ0ZXhUeXBlTWFwcGlu
Zzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZT46OnR5cGUsIG5vcm1hbGl6ZWQgPiA+Cit7
Citwcml2YXRlOgorICAgIGVudW0geyBkM2R0eXBlID0gUHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5
cGVNYXBwaW5nPGZyb21UeXBlLCBub3JtYWxpemVkPiA+Ojp0eXBlIH07CisgICAgZW51bSB7IGQz
ZHNpemUgPSBXaWRlblJ1bGU8ZDNkdHlwZSwgc2l6ZT46OmZpbmFsV2lkdGggfTsKKworcHVibGlj
OgorICAgIGVudW0geyBjYXBmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5cGUsIGQzZHNpemU+
OjpjYXBmbGFnIH07CisgICAgZW51bSB7IGRlY2xmbGFnID0gVmVydGV4VHlwZUZsYWdzPGQzZHR5
cGUsIGQzZHNpemU+OjpkZWNsZmxhZyB9OworfTsKKworLy8gSW5pdGlhbGlzZSBhIFRyYW5zbGF0
aW9uSW5mbworI2RlZmluZSBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVk
Pjo6aWRlbnRpdHksICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDb252ZXJ0
ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVycmVkPjo6ZmluYWxTaXplLCAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6ZSwgcHJlZmVy
cmVkPjo6Y29udmVydEFycmF5LCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdGF0
aWNfY2FzdDxEM0RERUNMVFlQRT4oQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJl
ZD46OmRlY2xmbGFnKSAgXAorICAgIH0KKworI2RlZmluZSBUUkFOU0xBVElPTl9GT1JfVFlQRV9O
T1JNX1NJWkUodHlwZSwgbm9ybSwgc2l6ZSkgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBDb252ZXJ0ZXI8
dHlwZSwgbm9ybSwgc2l6ZSwgVXNlUHJlZmVycmVkPjo6Y2FwZmxhZywgXAorICAgICAgICBUUkFO
U0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VQcmVmZXJyZWQpLCAgICAgICAgXAorICAgICAg
ICBUUkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBVc2VGYWxsYmFjaykgICAgICAgICAgXAor
ICAgIH0KKworI2RlZmluZSBUUkFOU0xBVElPTlNfRk9SX1RZUEUodHlwZSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05P
Uk1fU0laRSh0eXBlLCBmYWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCBmYWxzZSwgMiksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxz
ZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwg
XAorICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAx
KSwgVFJBTlNMQVRJT05fRk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDIpLCBUUkFOU0xB
VElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwgdHJ1ZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9U
WVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCA0KSB9LCAgICAgXAorICAgIH0KKworY29uc3QgVmVy
dGV4RGF0YU1hbmFnZXI6OlRyYW5zbGF0aW9uRGVzY3JpcHRpb24gVmVydGV4RGF0YU1hbmFnZXI6
Om1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF0g
PSAvLyBbR0wgdHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1b
c2l6ZS0xXQoreworICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9CWVRFKSwKKyAgICBUUkFO
U0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURfQllURSksCisgICAgVFJBTlNMQVRJT05TX0ZP
Ul9UWVBFKEdMX1NIT1JUKSwKKyAgICBUUkFOU0xBVElPTlNfRk9SX1RZUEUoR0xfVU5TSUdORURf
U0hPUlQpLAorICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9GSVhFRCksCisgICAgVFJBTlNM
QVRJT05TX0ZPUl9UWVBFKEdMX0ZMT0FUKQorfTsKKwordm9pZCBWZXJ0ZXhEYXRhTWFuYWdlcjo6
Y2hlY2tWZXJ0ZXhDYXBzKERXT1JEIGRlY2xUeXBlcykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTOyBpKyspCisgICAgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IDI7IGorKykKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgayA9IDA7IGsgPCA0OyBrKyspCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KG91dHB1dCwgaW5wdXQsIGNvdW50ICogaW5wdXRT
dHJpZGUpOworICAgICAgICAgICAgICAgIGlmIChtUG9zc2libGVUcmFuc2xhdGlvbnNbaV1bal1b
a10uY2Fwc0ZsYWcgPT0gMCB8fCAoZGVjbFR5cGVzICYgbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ld
W2pdW2tdLmNhcHNGbGFnKSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgbUF0dHJpYnV0ZVR5cGVzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRpb25zW2ld
W2pdW2tdLnByZWZlcnJlZENvbnZlcnNpb247CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1BdHRy
aWJ1dGVUeXBlc1tpXVtqXVtrXSA9IG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tpXVtqXVtrXS5mYWxs
YmFja0NvbnZlcnNpb247CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZvcm1hdENvbnZlcnRl
ci5jb252ZXJ0QXJyYXkoaW5wdXQsIGlucHV0U3RyaWRlLCBjb3VudCwgb3V0cHV0KTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KIAotICAgICAgICAgICAgbVN0cmVhbUJ1ZmZl
ci0+dW5tYXAoKTsKKy8vIFRoaXMgaXMgdXNlZCB0byBpbmRleCBtQXR0cmlidXRlVHlwZXMgYW5k
IG1Qb3NzaWJsZVRyYW5zbGF0aW9ucy4KK3Vuc2lnbmVkIGludCBWZXJ0ZXhEYXRhTWFuYWdlcjo6
dHlwZUluZGV4KEdMZW51bSB0eXBlKSBjb25zdAoreworICAgIHN3aXRjaCAodHlwZSkKKyAgICB7
CisgICAgICBjYXNlIEdMX0JZVEU6IHJldHVybiAwOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9C
WVRFOiByZXR1cm4gMTsKKyAgICAgIGNhc2UgR0xfU0hPUlQ6IHJldHVybiAyOworICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIDM7CisgICAgICBjYXNlIEdMX0ZJWEVEOiByZXR1
cm4gNDsKKyAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiA1OworCisgICAgICBkZWZhdWx0OiBV
TlJFQUNIQUJMRSgpOyByZXR1cm4gNTsKKyAgICB9Cit9CisKK3ZvaWQgVmVydGV4RGF0YU1hbmFn
ZXI6OnNldHVwQXR0cmlidXRlcyhjb25zdCBUcmFuc2xhdGVkQXR0cmlidXRlICphdHRyaWJ1dGVz
KQoreworICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1lbnRzW01BWF9WRVJURVhfQVRUUklCU107
CisgICAgRDNEVkVSVEVYRUxFTUVOVDkgKmVsZW1lbnQgPSAmZWxlbWVudHNbMF07CisKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQorICAgIHsKKyAgICAg
ICAgaWYgKGF0dHJpYnV0ZXNbaV0uYWN0aXZlKQorICAgICAgICB7CisgICAgICAgICAgICBtRGV2
aWNlLT5TZXRTdHJlYW1Tb3VyY2UoaSwgYXR0cmlidXRlc1tpXS52ZXJ0ZXhCdWZmZXIsIGF0dHJp
YnV0ZXNbaV0ub2Zmc2V0LCBhdHRyaWJ1dGVzW2ldLnN0cmlkZSk7CisKKyAgICAgICAgICAgIGVs
ZW1lbnQtPlN0cmVhbSA9IGk7CisgICAgICAgICAgICBlbGVtZW50LT5PZmZzZXQgPSAwOworICAg
ICAgICAgICAgZWxlbWVudC0+VHlwZSA9IGF0dHJpYnV0ZXNbaV0udHlwZTsKKyAgICAgICAgICAg
IGVsZW1lbnQtPk1ldGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsKKyAgICAgICAgICAgIGVs
ZW1lbnQtPlVzYWdlID0gRDNEREVDTFVTQUdFX1RFWENPT1JEOworICAgICAgICAgICAgZWxlbWVu
dC0+VXNhZ2VJbmRleCA9IGF0dHJpYnV0ZXNbaV0uc2VtYW50aWNJbmRleDsKKyAgICAgICAgICAg
IGVsZW1lbnQrKzsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICh1c2VzQ3VycmVudFZhbHVl
cykKKyAgICBzdGF0aWMgY29uc3QgRDNEVkVSVEVYRUxFTUVOVDkgZW5kID0gRDNEREVDTF9FTkQo
KTsKKyAgICAqZWxlbWVudCA9IGVuZDsKKworICAgIElEaXJlY3QzRFZlcnRleERlY2xhcmF0aW9u
OSAqdmVydGV4RGVjbGFyYXRpb247CisgICAgbURldmljZS0+Q3JlYXRlVmVydGV4RGVjbGFyYXRp
b24oZWxlbWVudHMsICZ2ZXJ0ZXhEZWNsYXJhdGlvbik7CisgICAgbURldmljZS0+U2V0VmVydGV4
RGVjbGFyYXRpb24odmVydGV4RGVjbGFyYXRpb24pOworICAgIHZlcnRleERlY2xhcmF0aW9uLT5S
ZWxlYXNlKCk7Cit9CisKK1ZlcnRleEJ1ZmZlcjo6VmVydGV4QnVmZmVyKElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgRFdPUkQgdXNhZ2VGbGFncykgOiBtRGV2aWNl
KGRldmljZSksIG1WZXJ0ZXhCdWZmZXIoTlVMTCkKK3sKKyAgICBpZiAoc2l6ZSA+IDApCiAgICAg
ewotICAgICAgICBwcm9jZXNzTm9uQXJyYXlBdHRyaWJ1dGVzKGF0dHJpYnMsIGFjdGl2ZUF0dHJp
YnMsIHRyYW5zbGF0ZWQsIGNvdW50KTsKKyAgICAgICAgRDNEUE9PTCBwb29sID0gZ2V0RGlzcGxh
eSgpLT5nZXRCdWZmZXJQb29sKHVzYWdlRmxhZ3MpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9
IGRldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVyKHNpemUsIHVzYWdlRmxhZ3MsIDAsIHBvb2wsICZt
VmVydGV4QnVmZmVyLCBOVUxMKTsKKyAgICAgICAgCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0
KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcg
YSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIHNpemUpOworICAgICAgICB9CiAgICAgfQor
fQogCi0gICAgcmV0dXJuIEdMX05PX0VSUk9SOworVmVydGV4QnVmZmVyOjp+VmVydGV4QnVmZmVy
KCkKK3sKKyAgICBpZiAobVZlcnRleEJ1ZmZlcikKKyAgICB7CisgICAgICAgIG1WZXJ0ZXhCdWZm
ZXItPlJlbGVhc2UoKTsKKyAgICB9CiB9CiAKLXN0ZDo6c2l6ZV90IFZlcnRleERhdGFNYW5hZ2Vy
Ojp0eXBlU2l6ZShHTGVudW0gdHlwZSkgY29uc3QKK3ZvaWQgVmVydGV4QnVmZmVyOjp1bm1hcCgp
CiB7Ci0gICAgc3dpdGNoICh0eXBlKQorICAgIGlmIChtVmVydGV4QnVmZmVyKQogICAgIHsKLSAg
ICAgIGNhc2UgR0xfQllURTogY2FzZSBHTF9VTlNJR05FRF9CWVRFOiByZXR1cm4gc2l6ZW9mKEdM
Ynl0ZSk7Ci0gICAgICBjYXNlIEdMX1NIT1JUOiBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiByZXR1
cm4gc2l6ZW9mKEdMc2hvcnQpOwotICAgICAgY2FzZSBHTF9GSVhFRDogcmV0dXJuIHNpemVvZihH
TGZpeGVkKTsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiBzaXplb2YoR0xmbG9hdCk7Ci0g
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gc2l6ZW9mKEdMZmxvYXQpOworICAg
ICAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKICAgICB9CiB9CiAKLXN0ZDo6c2l6ZV90IFZl
cnRleERhdGFNYW5hZ2VyOjppbnRlcnByZXRHbFN0cmlkZShjb25zdCBBdHRyaWJ1dGVTdGF0ZSAm
YXR0cmliKSBjb25zdAorSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqVmVydGV4QnVmZmVyOjpnZXRC
dWZmZXIoKSBjb25zdAogewotICAgIHJldHVybiBhdHRyaWIubVN0cmlkZSA/IGF0dHJpYi5tU3Ry
aWRlIDogdHlwZVNpemUoYXR0cmliLm1UeXBlKSAqIGF0dHJpYi5tU2l6ZTsKKyAgICByZXR1cm4g
bVZlcnRleEJ1ZmZlcjsKIH0KIAotLy8gUm91bmQgdXAgeCAoPj0wKSB0byB0aGUgbmV4dCBtdWx0
aXBsZSBvZiBtdWx0aXBsZSAoPjApLgotLy8gMCByb3VuZHMgdXAgdG8gMC4KLXN0ZDo6c2l6ZV90
IFZlcnRleERhdGFNYW5hZ2VyOjpyb3VuZFVwKHN0ZDo6c2l6ZV90IHgsIHN0ZDo6c2l6ZV90IG11
bHRpcGxlKSBjb25zdAorQ29uc3RhbnRWZXJ0ZXhCdWZmZXI6OkNvbnN0YW50VmVydGV4QnVmZmVy
KElEaXJlY3QzRERldmljZTkgKmRldmljZSwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxv
YXQgdykgOiBWZXJ0ZXhCdWZmZXIoZGV2aWNlLCA0ICogc2l6ZW9mKGZsb2F0KSwgRDNEVVNBR0Vf
V1JJVEVPTkxZKQogewotICAgIEFTU0VSVCh4ID49IDApOwotICAgIEFTU0VSVChtdWx0aXBsZSA+
IDApOworICAgIHZvaWQgKmJ1ZmZlciA9IE5VTEw7CiAKLSAgICBzdGQ6OnNpemVfdCByZW1haW5k
ZXIgPSB4ICUgbXVsdGlwbGU7Ci0gICAgaWYgKHJlbWFpbmRlciAhPSAwKQorICAgIGlmIChtVmVy
dGV4QnVmZmVyKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHggKyBtdWx0aXBsZSAtIHJlbWFpbmRl
cjsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDAsICZi
dWZmZXIsIDApOworICAgICAKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7
CisgICAgICAgICAgICBFUlIoIkxvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0
KTsKKyAgICAgICAgfQogICAgIH0KLSAgICBlbHNlCisKKyAgICBpZiAoYnVmZmVyKQogICAgIHsK
LSAgICAgICAgcmV0dXJuIHg7CisgICAgICAgIGZsb2F0ICp2ZWN0b3IgPSAoZmxvYXQqKWJ1ZmZl
cjsKKworICAgICAgICB2ZWN0b3JbMF0gPSB4OworICAgICAgICB2ZWN0b3JbMV0gPSB5OworICAg
ICAgICB2ZWN0b3JbMl0gPSB6OworICAgICAgICB2ZWN0b3JbM10gPSB3OworCisgICAgICAgIG1W
ZXJ0ZXhCdWZmZXItPlVubG9jaygpOwogICAgIH0KIH0KIAotc3RkOjpzaXplX3QgVmVydGV4RGF0
YU1hbmFnZXI6OnNwYWNlUmVxdWlyZWQoY29uc3QgQXR0cmlidXRlU3RhdGUgJmF0dHJpYiwgc3Rk
OjpzaXplX3QgbWF4VmVydGV4KSBjb25zdAorQ29uc3RhbnRWZXJ0ZXhCdWZmZXI6On5Db25zdGFu
dFZlcnRleEJ1ZmZlcigpCiB7Ci0gICAgc3RkOjpzaXplX3Qgc2l6ZSA9IG1CYWNrZW5kLT5nZXRG
b3JtYXRDb252ZXJ0ZXIoYXR0cmliLm1UeXBlLCBhdHRyaWIubVNpemUsIGF0dHJpYi5tTm9ybWFs
aXplZCkub3V0cHV0VmVydGV4U2l6ZTsKLSAgICBzaXplICo9IG1heFZlcnRleDsKK30KIAotICAg
IHJldHVybiByb3VuZFVwKHNpemUsIDQgKiBzaXplb2YoR0xmbG9hdCkpOworQXJyYXlWZXJ0ZXhC
dWZmZXI6OkFycmF5VmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpz
aXplX3Qgc2l6ZSwgRFdPUkQgdXNhZ2VGbGFncykgOiBWZXJ0ZXhCdWZmZXIoZGV2aWNlLCBzaXpl
LCB1c2FnZUZsYWdzKQoreworICAgIG1CdWZmZXJTaXplID0gc2l6ZTsKKyAgICBtV3JpdGVQb3Np
dGlvbiA9IDA7CisgICAgbVJlcXVpcmVkU3BhY2UgPSAwOwogfQogCi12b2lkIFZlcnRleERhdGFN
YW5hZ2VyOjpwcm9jZXNzTm9uQXJyYXlBdHRyaWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZVN0YXRlICph
dHRyaWJzLCBjb25zdCBzdGQ6OmJpdHNldDxNQVhfVkVSVEVYX0FUVFJJQlM+ICZhY3RpdmVBdHRy
aWJzLCBUcmFuc2xhdGVkQXR0cmlidXRlICp0cmFuc2xhdGVkLCBzdGQ6OnNpemVfdCBjb3VudCkK
K0FycmF5VmVydGV4QnVmZmVyOjp+QXJyYXlWZXJ0ZXhCdWZmZXIoKQogewotICAgIGlmIChtRGly
dHlDdXJyZW50VmFsdWVzKQorfQorCit2b2lkIEFycmF5VmVydGV4QnVmZmVyOjphZGRSZXF1aXJl
ZFNwYWNlKFVJTlQgcmVxdWlyZWRTcGFjZSkKK3sKKyAgICBtUmVxdWlyZWRTcGFjZSArPSByZXF1
aXJlZFNwYWNlOworfQorCit2b2lkIEFycmF5VmVydGV4QnVmZmVyOjphZGRSZXF1aXJlZFNwYWNl
Rm9yKEFycmF5VmVydGV4QnVmZmVyICpidWZmZXIpCit7CisgICAgbVJlcXVpcmVkU3BhY2UgKz0g
YnVmZmVyLT5tUmVxdWlyZWRTcGFjZTsKK30KKworU3RyZWFtaW5nVmVydGV4QnVmZmVyOjpTdHJl
YW1pbmdWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBp
bml0aWFsU2l6ZSkgOiBBcnJheVZlcnRleEJ1ZmZlcihkZXZpY2UsIGluaXRpYWxTaXplLCBEM0RV
U0FHRV9EWU5BTUlDIHwgRDNEVVNBR0VfV1JJVEVPTkxZKQoreworfQorCitTdHJlYW1pbmdWZXJ0
ZXhCdWZmZXI6On5TdHJlYW1pbmdWZXJ0ZXhCdWZmZXIoKQoreworfQorCit2b2lkICpTdHJlYW1p
bmdWZXJ0ZXhCdWZmZXI6Om1hcChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgc3Rk
OjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgc3RkOjpzaXplX3QgKm9mZnNldCkKK3sKKyAgICB2b2lk
ICptYXBQdHIgPSBOVUxMOworCisgICAgaWYgKG1WZXJ0ZXhCdWZmZXIpCiAgICAgewotICAgICAg
ICBzdGQ6OnNpemVfdCB0b3RhbFNpemUgPSA0ICogc2l6ZW9mKGZsb2F0KSAqIE1BWF9WRVJURVhf
QVRUUklCUzsKKyAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtVmVydGV4QnVmZmVyLT5Mb2NrKG1X
cml0ZVBvc2l0aW9uLCByZXF1aXJlZFNwYWNlLCAmbWFwUHRyLCBEM0RMT0NLX05PT1ZFUldSSVRF
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAg
ICAgICAgICAgRVJSKCJMb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Cisg
ICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogCi0gICAgICAgIG1DdXJyZW50VmFs
dWVCdWZmZXItPnJlc2VydmVTcGFjZSh0b3RhbFNpemUpOworICAgICAgICAqb2Zmc2V0ID0gbVdy
aXRlUG9zaXRpb247CisgICAgICAgIG1Xcml0ZVBvc2l0aW9uICs9IHJlcXVpcmVkU3BhY2U7Cisg
ICAgfQogCi0gICAgICAgIGZsb2F0KiBjdXJyZW50VmFsdWVzID0gc3RhdGljX2Nhc3Q8ZmxvYXQq
PihtQ3VycmVudFZhbHVlQnVmZmVyLT5tYXAodG90YWxTaXplLCAmbUN1cnJlbnRWYWx1ZU9mZnNl
dCkpOworICAgIHJldHVybiBtYXBQdHI7Cit9CiAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKK3ZvaWQgU3RyZWFtaW5nVmVydGV4QnVmZmVyOjpy
ZXNlcnZlUmVxdWlyZWRTcGFjZSgpCit7CisgICAgaWYgKG1SZXF1aXJlZFNwYWNlID4gbUJ1ZmZl
clNpemUpCisgICAgeworICAgICAgICBpZiAobVZlcnRleEJ1ZmZlcikKICAgICAgICAgewotICAg
ICAgICAgICAgLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIEdMX0ZMT0FUeDQgaXMgc3VwcG9ydGVk
IGJ5IHRoZSBiYWNrLWVuZC4gKEZvciBEM0Q5LCBpdCBpcyBhIG1hbmRhdG9yeSBmb3JtYXQuKQot
ICAgICAgICAgICAgY3VycmVudFZhbHVlc1tpKjQrMF0gPSBhdHRyaWJzW2ldLm1DdXJyZW50VmFs
dWVbMF07Ci0gICAgICAgICAgICBjdXJyZW50VmFsdWVzW2kqNCsxXSA9IGF0dHJpYnNbaV0ubUN1
cnJlbnRWYWx1ZVsxXTsKLSAgICAgICAgICAgIGN1cnJlbnRWYWx1ZXNbaSo0KzJdID0gYXR0cmli
c1tpXS5tQ3VycmVudFZhbHVlWzJdOwotICAgICAgICAgICAgY3VycmVudFZhbHVlc1tpKjQrM10g
PSBhdHRyaWJzW2ldLm1DdXJyZW50VmFsdWVbM107CisgICAgICAgICAgICBtVmVydGV4QnVmZmVy
LT5SZWxlYXNlKCk7CisgICAgICAgICAgICBtVmVydGV4QnVmZmVyID0gTlVMTDsKICAgICAgICAg
fQogCi0gICAgICAgIG1DdXJyZW50VmFsdWVCdWZmZXItPnVubWFwKCk7CisgICAgICAgIG1CdWZm
ZXJTaXplID0gc3RkOjptYXgobVJlcXVpcmVkU3BhY2UsIDMgKiBtQnVmZmVyU2l6ZSAvIDIpOyAg
IC8vIDEuNSB4IG1CdWZmZXJTaXplIGlzIGFyYml0cmFyeSBhbmQgc2hvdWxkIGJlIGNoZWNrZWQg
dG8gc2VlIHdlIGRvbid0IGhhdmUgdG9vIG1hbnkgcmVhbGxvY2F0aW9ucy4KKworICAgICAgICBE
M0RQT09MIHBvb2wgPSBnZXREaXNwbGF5KCktPmdldEJ1ZmZlclBvb2woRDNEVVNBR0VfRFlOQU1J
QyB8IEQzRFVTQUdFX1dSSVRFT05MWSk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbURldmlj
ZS0+Q3JlYXRlVmVydGV4QnVmZmVyKG1CdWZmZXJTaXplLCBEM0RVU0FHRV9EWU5BTUlDIHwgRDNE
VVNBR0VfV1JJVEVPTkxZLCAwLCBwb29sLCAmbVZlcnRleEJ1ZmZlciwgTlVMTCk7CisgICAgCisg
ICAgICAgIGlmIChGQUlMRUQocmVzdWx0KSkKKyAgICAgICAgeworICAgICAgICAgICAgRVJSKCJP
dXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIG1C
dWZmZXJTaXplKTsKKyAgICAgICAgfQorCisgICAgICAgIG1Xcml0ZVBvc2l0aW9uID0gMDsKICAg
ICB9CisgICAgZWxzZSBpZiAobVdyaXRlUG9zaXRpb24gKyBtUmVxdWlyZWRTcGFjZSA+IG1CdWZm
ZXJTaXplKSAgIC8vIFJlY3ljbGUKKyAgICB7CisgICAgICAgIGlmIChtVmVydGV4QnVmZmVyKQor
ICAgICAgICB7CisgICAgICAgICAgICB2b2lkICpkdW1teTsKKyAgICAgICAgICAgIG1WZXJ0ZXhC
dWZmZXItPkxvY2soMCwgMSwgJmR1bW15LCBEM0RMT0NLX0RJU0NBUkQpOworICAgICAgICAgICAg
bVZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7CisgICAgICAgIH0KIAotICAgIGZvciAoc3RkOjpzaXpl
X3QgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlM7IGkrKykKKyAgICAgICAgbVdyaXRlUG9z
aXRpb24gPSAwOworICAgIH0KKworICAgIG1SZXF1aXJlZFNwYWNlID0gMDsKK30KKworU3RhdGlj
VmVydGV4QnVmZmVyOjpTdGF0aWNWZXJ0ZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNl
KSA6IEFycmF5VmVydGV4QnVmZmVyKGRldmljZSwgMCwgRDNEVVNBR0VfV1JJVEVPTkxZKQorewor
fQorCitTdGF0aWNWZXJ0ZXhCdWZmZXI6On5TdGF0aWNWZXJ0ZXhCdWZmZXIoKQoreworfQorCit2
b2lkICpTdGF0aWNWZXJ0ZXhCdWZmZXI6Om1hcChjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJp
YnV0ZSwgc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgVUlOVCAqc3RyZWFtT2Zmc2V0KQorewor
ICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7CisKKyAgICBpZiAobVZlcnRleEJ1ZmZlcikKICAgICB7
Ci0gICAgICAgIGlmIChhY3RpdmVBdHRyaWJzW2ldICYmICFhdHRyaWJzW2ldLm1FbmFibGVkKQor
ICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1WZXJ0ZXhCdWZmZXItPkxvY2sobVdyaXRlUG9zaXRp
b24sIHJlcXVpcmVkU3BhY2UsICZtYXBQdHIsIDApOworICAgICAgICAKKyAgICAgICAgaWYgKEZB
SUxFRChyZXN1bHQpKQogICAgICAgICB7Ci0gICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm5vbkFy
cmF5ID0gdHJ1ZTsKKyAgICAgICAgICAgIEVSUigiTG9jayBmYWlsZWQgd2l0aCBlcnJvciAweCUw
OHgiLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KIAotICAg
ICAgICAgICAgdHJhbnNsYXRlZFtpXS5idWZmZXIgPSBtQ3VycmVudFZhbHVlQnVmZmVyOworICAg
ICAgICBpbnQgYXR0cmlidXRlT2Zmc2V0ID0gYXR0cmlidXRlLm1PZmZzZXQgJSBhdHRyaWJ1dGUu
c3RyaWRlKCk7CisgICAgICAgIFZlcnRleEVsZW1lbnQgZWxlbWVudCA9IHthdHRyaWJ1dGUubVR5
cGUsIGF0dHJpYnV0ZS5tU2l6ZSwgYXR0cmlidXRlLm1Ob3JtYWxpemVkLCBhdHRyaWJ1dGVPZmZz
ZXQsIG1Xcml0ZVBvc2l0aW9ufTsKKyAgICAgICAgbUNhY2hlLnB1c2hfYmFjayhlbGVtZW50KTsK
IAotICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS50eXBlID0gR0xfRkxPQVQ7Ci0gICAgICAgICAg
ICB0cmFuc2xhdGVkW2ldLnNpemUgPSA0OwotICAgICAgICAgICAgdHJhbnNsYXRlZFtpXS5ub3Jt
YWxpemVkID0gZmFsc2U7Ci0gICAgICAgICAgICB0cmFuc2xhdGVkW2ldLnN0cmlkZSA9IDA7Ci0g
ICAgICAgICAgICB0cmFuc2xhdGVkW2ldLm9mZnNldCA9IG1DdXJyZW50VmFsdWVPZmZzZXQgKyA0
ICogc2l6ZW9mKGZsb2F0KSAqIGk7CisgICAgICAgICpzdHJlYW1PZmZzZXQgPSBtV3JpdGVQb3Np
dGlvbjsKKyAgICAgICAgbVdyaXRlUG9zaXRpb24gKz0gcmVxdWlyZWRTcGFjZTsKKyAgICB9CisK
KyAgICByZXR1cm4gbWFwUHRyOworfQorCit2b2lkIFN0YXRpY1ZlcnRleEJ1ZmZlcjo6cmVzZXJ2
ZVJlcXVpcmVkU3BhY2UoKQoreworICAgIGlmICghbVZlcnRleEJ1ZmZlciAmJiBtQnVmZmVyU2l6
ZSA9PSAwKQorICAgIHsKKyAgICAgICAgRDNEUE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRC
dWZmZXJQb29sKEQzRFVTQUdFX1dSSVRFT05MWSk7CisgICAgICAgIEhSRVNVTFQgcmVzdWx0ID0g
bURldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVyKG1SZXF1aXJlZFNwYWNlLCBEM0RVU0FHRV9XUklU
RU9OTFksIDAsIHBvb2wsICZtVmVydGV4QnVmZmVyLCBOVUxMKTsKKyAgICAKKyAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICBFUlIoIk91dCBvZiBtZW1v
cnkgYWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgbVJlcXVpcmVkU3Bh
Y2UpOwogICAgICAgICB9CisKKyAgICAgICAgbUJ1ZmZlclNpemUgPSBtUmVxdWlyZWRTcGFjZTsK
ICAgICB9CisgICAgZWxzZSBpZiAobVZlcnRleEJ1ZmZlciAmJiBtQnVmZmVyU2l6ZSA+PSBtUmVx
dWlyZWRTcGFjZSkKKyAgICB7CisgICAgICAgIC8vIEFscmVhZHkgYWxsb2NhdGVkCisgICAgfQor
ICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsgICAvLyBTdGF0aWMgdmVydGV4IGJ1ZmZlcnMgY2FuJ3Qg
YmUgcmVzaXplZAorCisgICAgbVJlcXVpcmVkU3BhY2UgPSAwOwogfQogCitVSU5UIFN0YXRpY1Zl
cnRleEJ1ZmZlcjo6bG9va3VwQXR0cmlidXRlKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
dXRlKQoreworICAgIGZvciAodW5zaWduZWQgaW50IGVsZW1lbnQgPSAwOyBlbGVtZW50IDwgbUNh
Y2hlLnNpemUoKTsgZWxlbWVudCsrKQorICAgIHsKKyAgICAgICAgaWYgKG1DYWNoZVtlbGVtZW50
XS50eXBlID09IGF0dHJpYnV0ZS5tVHlwZSAmJiAgbUNhY2hlW2VsZW1lbnRdLnNpemUgPT0gYXR0
cmlidXRlLm1TaXplICYmIG1DYWNoZVtlbGVtZW50XS5ub3JtYWxpemVkID09IGF0dHJpYnV0ZS5t
Tm9ybWFsaXplZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1DYWNoZVtlbGVtZW50XS5h
dHRyaWJ1dGVPZmZzZXQgPT0gYXR0cmlidXRlLm1PZmZzZXQgJSBhdHRyaWJ1dGUuc3RyaWRlKCkp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1DYWNoZVtlbGVtZW50XS5z
dHJlYW1PZmZzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gLTE7CiB9CisKK2NvbnN0IFZlcnRleERhdGFNYW5hZ2VyOjpGb3JtYXRDb252ZXJ0ZXIgJlZl
cnRleERhdGFNYW5hZ2VyOjpmb3JtYXRDb252ZXJ0ZXIoY29uc3QgVmVydGV4QXR0cmlidXRlICZh
dHRyaWJ1dGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1BdHRyaWJ1dGVUeXBlc1t0eXBlSW5kZXgo
YXR0cmlidXRlLm1UeXBlKV1bYXR0cmlidXRlLm1Ob3JtYWxpemVkXVthdHRyaWJ1dGUubVNpemUg
LSAxXTsKK30KK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
Z2VvbWV0cnkvZHg5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL2dlb21ldHJ5L2R4OS5jcHAJKHJldmlzaW9uIDc2MDI1KQorKysgU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9keDkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYxMyArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAg
VGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBv
ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhh
dCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBnZW9tZXRy
eS9keDkuaDogRGlyZWN0M0QgOS1iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBCdWZmZXJCYWNrRW5k
LCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyIGFuZCBUcmFuc2xhdGVkSW5kZXhCdWZmZXIuCi0KLSNp
bmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmgiCi0KLSNpbmNsdWRlIDxjc3RkZGVmPgot
Ci0jZGVmaW5lIEdMX0FQSUNBTEwKLSNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KLQotI2luY2x1ZGUg
ImNvbW1vbi9kZWJ1Zy5oIgotCi0jaW5jbHVkZSAibGliR0xFU3YyL0NvbnRleHQuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvbWFpbi5oIgotI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS92ZXJ0
ZXhjb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1h
bmFnZXIuaCIKLQotbmFtZXNwYWNlCi17Ci0vLyBNYXBwaW5nIGZyb20gT3BlbkdMLUVTIHZlcnRl
eCBhdHRyaWIgdHlwZSB0byBEM0QgZGVjbCB0eXBlOgotLy8KLS8vIEJZVEUgICAgICAgICAgICAg
ICAgIFNIT1JUIChDYXN0KQotLy8gQllURS1ub3JtICAgICAgICAgICAgRkxPQVQgKE5vcm1hbGl6
ZSkgKGNhbid0IGJlIGV4YWN0bHkgcmVwcmVzZW50ZWQgYXMgU0hPUlQtbm9ybSkKLS8vIFVOU0lH
TkVEX0JZVEUgICAgICAgIFVCWVRFNCAoSWRlbnRpdHkpIG9yIFNIT1JUIChDYXN0KQotLy8gVU5T
SUdORURfQllURS1ub3JtICAgVUJZVEU0TiAoSWRlbnRpdHkpIG9yIEZMT0FUIChOb3JtYWxpemUp
Ci0vLyBTSE9SVCAgICAgICAgICAgICAgICBTSE9SVCAoSWRlbnRpdHkpCi0vLyBTSE9SVC1ub3Jt
ICAgICAgICAgICBTSE9SVC1ub3JtIChJZGVudGl0eSkgb3IgRkxPQVQgKE5vcm1hbGl6ZSkKLS8v
IFVOU0lHTkVEX1NIT1JUICAgICAgIEZMT0FUIChDYXN0KQotLy8gVU5TSUdORURfU0hPUlQtbm9y
bSAgVVNIT1JULW5vcm0gKElkZW50aXR5KSBvciBGTE9BVCAoTm9ybWFsaXplKQotLy8gRklYRUQg
KG5vdCBpbiBXZWJHTCkgRkxPQVQgKEZpeGVkVG9GbG9hdCkKLS8vIEZMT0FUICAgICAgICAgICAg
ICAgIEZMT0FUIChJZGVudGl0eSkKLQotLy8gR0xUb0NUeXBlIG1hcHMgZnJvbSBHTCB0eXBlIChh
cyBHTGVudW0pIHRvIHRoZSBDIHR5cGVkZWYuIAotdGVtcGxhdGUgPEdMZW51bSBHTFR5cGU+IHN0
cnVjdCBHTFRvQ1R5cGUgeyB9OwotCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX0JZ
VEU+IHsgdHlwZWRlZiBHTGJ5dGUgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5
cGU8R0xfVU5TSUdORURfQllURT4geyB0eXBlZGVmIEdMdWJ5dGUgdHlwZTsgfTsKLXRlbXBsYXRl
IDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfU0hPUlQ+IHsgdHlwZWRlZiBHTHNob3J0IHR5cGU7IH07
Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgR0xUb0NUeXBlPEdMX1VOU0lHTkVEX1NIT1JUPiB7IHR5cGVk
ZWYgR0x1c2hvcnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5cGU8R0xfRklY
RUQ+IHsgdHlwZWRlZiBHTHVpbnQgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBHTFRvQ1R5
cGU8R0xfRkxPQVQ+IHsgdHlwZWRlZiBHTGZsb2F0IHR5cGU7IH07Ci0KLS8vIFRoaXMgZGlmZmVy
cyBmcm9tIEQzRERFQ0xUWVBFIGluIHRoYXQgaXQgaXMgdW5zaXplZC4gKFNpemUgZXhwYW5zaW9u
IGlzIGFwcGxpZWQgbGFzdC4pCi1lbnVtIEQzRFZlcnRleFR5cGUKLXsKLSAgICBEM0RWVF9GTE9B
VCwKLSAgICBEM0RWVF9TSE9SVCwKLSAgICBEM0RWVF9TSE9SVF9OT1JNLAotICAgIEQzRFZUX1VC
WVRFLAotICAgIEQzRFZUX1VCWVRFX05PUk0sCi0gICAgRDNEVlRfVVNIT1JUX05PUk0KLX07Ci0K
LS8vIEQzRFRvQ1R5cGUgbWFwcyBmcm9tIEQzRCB2ZXJ0ZXggdHlwZSAoYXMgZW51bSBEM0RWZXJ0
ZXhUeXBlKSB0byB0aGUgY29ycmVzcG9uZGluZyBDIHR5cGUuCi10ZW1wbGF0ZSA8dW5zaWduZWQg
aW50IEQzRFR5cGU+IHN0cnVjdCBEM0RUb0NUeXBlIHsgfTsKLQotdGVtcGxhdGUgPD4gc3RydWN0
IEQzRFRvQ1R5cGU8RDNEVlRfRkxPQVQ+IHsgdHlwZWRlZiBmbG9hdCB0eXBlOyB9OwotdGVtcGxh
dGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfU0hPUlQ+IHsgdHlwZWRlZiBzaG9ydCB0eXBl
OyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IEQzRFRvQ1R5cGU8RDNEVlRfU0hPUlRfTk9STT4geyB0
eXBlZGVmIHNob3J0IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RW
VF9VQllURT4geyB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdHlwZTsgfTsKLXRlbXBsYXRlIDw+IHN0
cnVjdCBEM0RUb0NUeXBlPEQzRFZUX1VCWVRFX05PUk0+IHsgdHlwZWRlZiB1bnNpZ25lZCBjaGFy
IHR5cGU7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgRDNEVG9DVHlwZTxEM0RWVF9VU0hPUlRfTk9S
TT4geyB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHR5cGU7IH07Ci0KLS8vIEVuY29kZSB0aGUgdHlw
ZS9zaXplIGNvbWJpbmF0aW9ucyB0aGF0IEQzRCBwZXJtaXRzLiBGb3IgZWFjaCB0eXBlL3NpemUg
aXQgZXhwYW5kcyB0byBhIHdpZGVuZXIgdGhhdCB3aWxsIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRl
IGZpbmFsIHNpemUuCi10ZW1wbGF0ZSA8dW5zaWduZWQgaW50IHR5cGUsIGludCBzaXplPgotc3Ry
dWN0IFdpZGVuUnVsZQotewotfTsKLQotdGVtcGxhdGUgPGludCBzaXplPiBzdHJ1Y3QgV2lkZW5S
dWxlPEQzRFZUX0ZMT0FULCBzaXplPiAgICAgICAgICA6IGdsOjpOb1dpZGVuPHNpemU+IHsgfTsK
LXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9TSE9SVCwgc2l6ZT4g
ICAgICAgICAgOiBnbDo6V2lkZW5Ub0V2ZW48c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXpl
PiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1NIT1JUX05PUk0sIHNpemU+ICAgICA6IGdsOjpXaWRl
blRvRXZlbjxzaXplPiB7IH07Ci10ZW1wbGF0ZSA8aW50IHNpemU+IHN0cnVjdCBXaWRlblJ1bGU8
RDNEVlRfVUJZVEUsIHNpemU+ICAgICAgICAgIDogZ2w6OldpZGVuVG9Gb3VyPHNpemU+IHsgfTsK
LXRlbXBsYXRlIDxpbnQgc2l6ZT4gc3RydWN0IFdpZGVuUnVsZTxEM0RWVF9VQllURV9OT1JNLCBz
aXplPiAgICAgOiBnbDo6V2lkZW5Ub0ZvdXI8c2l6ZT4geyB9OwotdGVtcGxhdGUgPGludCBzaXpl
PiBzdHJ1Y3QgV2lkZW5SdWxlPEQzRFZUX1VTSE9SVF9OT1JNLCBzaXplPiAgICA6IGdsOjpXaWRl
blRvRXZlbjxzaXplPiB7IH07Ci0KLS8vIFZlcnRleFR5cGVGbGFncyBlbmNvZGVzIHRoZSBEM0RD
QVBTOTo6RGVjbFR5cGUgZmxhZyBhbmQgdmVydGV4IGRlY2xhcmF0aW9uIGZsYWcgZm9yIGVhY2gg
RDNEIHZlcnRleCB0eXBlICYgc2l6ZSBjb21iaW5hdGlvbi4KLXRlbXBsYXRlIDx1bnNpZ25lZCBp
bnQgZDNkdHlwZSwgaW50IHNpemU+Ci1zdHJ1Y3QgVmVydGV4VHlwZUZsYWdzCi17Ci19OwotCi10
ZW1wbGF0ZSA8dW5zaWduZWQgaW50IGNhcGZsYWcsIHVuc2lnbmVkIGludCBkZWNsZmxhZz4KLXN0
cnVjdCBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXIKLXsKLSAgICBlbnVtIHsgY2FwZmxhZyA9IGNhcGZs
YWcgfTsKLSAgICBlbnVtIHsgZGVjbGZsYWcgPSBkZWNsZmxhZyB9OwotfTsKLQotdGVtcGxhdGUg
PD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9GTE9BVCwgMT4gOiBWZXJ0ZXhUeXBlRmxh
Z3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQxPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3Qg
VmVydGV4VHlwZUZsYWdzPEQzRFZUX0ZMT0FULCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjww
LCBEM0RERUNMVFlQRV9GTE9BVDI+IHsgfTsKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
RmxhZ3M8RDNEVlRfRkxPQVQsIDM+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xU
WVBFX0ZMT0FUMz4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RW
VF9GTE9BVCwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8MCwgRDNEREVDTFRZUEVfRkxPQVQ0
PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1NIT1JULCAy
PiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjwwLCBEM0RERUNMVFlQRV9TSE9SVDI+IHsgfTsKLXRl
bXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlRmxhZ3M8RDNEVlRfU0hPUlQsIDQ+IDogVmVydGV4
VHlwZUZsYWdzSGVscGVyPDAsIEQzRERFQ0xUWVBFX1NIT1JUND4geyB9OwotdGVtcGxhdGUgPD4g
c3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVG
bGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQyTiwgRDNEREVDTFRZUEVfU0hPUlQyTj4geyB9Owot
dGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9TSE9SVF9OT1JNLCA0PiA6
IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0REVENBUFNfU0hPUlQ0TiwgRDNEREVDTFRZUEVfU0hP
UlQ0Tj4geyB9OwotdGVtcGxhdGUgPD4gc3RydWN0IFZlcnRleFR5cGVGbGFnczxEM0RWVF9VQllU
RSwgND4gOiBWZXJ0ZXhUeXBlRmxhZ3NIZWxwZXI8RDNERFRDQVBTX1VCWVRFNCwgRDNEREVDTFRZ
UEVfVUJZVEU0PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZU
X1VCWVRFX05PUk0sIDQ+IDogVmVydGV4VHlwZUZsYWdzSGVscGVyPEQzRERUQ0FQU19VQllURTRO
LCBEM0RERUNMVFlQRV9VQllURTROPiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlw
ZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCAyPiA6IFZlcnRleFR5cGVGbGFnc0hlbHBlcjxEM0RE
VENBUFNfVVNIT1JUMk4sIEQzRERFQ0xUWVBFX1VTSE9SVDJOPiB7IH07Ci10ZW1wbGF0ZSA8PiBz
dHJ1Y3QgVmVydGV4VHlwZUZsYWdzPEQzRFZUX1VTSE9SVF9OT1JNLCA0PiA6IFZlcnRleFR5cGVG
bGFnc0hlbHBlcjxEM0REVENBUFNfVVNIT1JUNE4sIEQzRERFQ0xUWVBFX1VTSE9SVDROPiB7IH07
Ci0KLQotLy8gVmVydGV4VHlwZU1hcHBpbmcgbWFwcyBHTCB0eXBlICYgbm9ybWFsaXplZCBmbGFn
IHRvIHByZWZlcnJlZCBhbmQgZmFsbGJhY2sgRDNEIHZlcnRleCB0eXBlcyAoYXMgRDNEVmVydGV4
VHlwZSBlbnVtcykuCi10ZW1wbGF0ZSA8R0xlbnVtIEdMdHlwZSwgYm9vbCBub3JtYWxpemVkPgot
c3RydWN0IFZlcnRleFR5cGVNYXBwaW5nCi17Ci19OwotCi10ZW1wbGF0ZSA8RDNEVmVydGV4VHlw
ZSBQcmVmZXJyZWQsIEQzRFZlcnRleFR5cGUgRmFsbGJhY2sgPSBQcmVmZXJyZWQ+Ci1zdHJ1Y3Qg
VmVydGV4VHlwZU1hcHBpbmdCYXNlCi17Ci0gICAgZW51bSB7IHByZWZlcnJlZCA9IFByZWZlcnJl
ZCB9OwotICAgIGVudW0geyBmYWxsYmFjayA9IEZhbGxiYWNrIH07Ci19OwotCi10ZW1wbGF0ZSA8
PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfQllURSwgZmFsc2U+ICAgICAgICAgICAgICAg
ICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfU0hPUlQ+IHsgfTsgICAgICAg
ICAgICAgICAgICAgICAgIC8vIENhc3QKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFw
cGluZzxHTF9CWVRFLCB0cnVlPiAgICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5cGVN
YXBwaW5nQmFzZTxEM0RWVF9GTE9BVD4geyB9OyAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9y
bWFsaXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURf
QllURSwgZmFsc2U+ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRf
VUJZVEUsIEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgIC8vIElkZW50aXR5LCBDYXN0Ci10ZW1w
bGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfVU5TSUdORURfQllURSwgdHJ1ZT4g
ICAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfVUJZVEVfTk9STSwg
RDNEVlRfRkxPQVQ+IHsgfTsgICAgIC8vIElkZW50aXR5LCBOb3JtYWxpemUKLXRlbXBsYXRlIDw+
IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9TSE9SVCwgZmFsc2U+ICAgICAgICAgICAgICAg
ICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVD4geyB9OyAgICAgICAg
ICAgICAgICAgICAgICAgLy8gSWRlbnRpdHkKLXRlbXBsYXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBl
TWFwcGluZzxHTF9TSE9SVCwgdHJ1ZT4gICAgICAgICAgICAgICAgICAgICAgICA6IFZlcnRleFR5
cGVNYXBwaW5nQmFzZTxEM0RWVF9TSE9SVF9OT1JNLCBEM0RWVF9GTE9BVD4geyB9OyAgICAgLy8g
Q2FzdCwgTm9ybWFsaXplCi10ZW1wbGF0ZSA8PiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xf
VU5TSUdORURfU0hPUlQsIGZhbHNlPiAgICAgICAgICAgICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jh
c2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc3QKLXRlbXBs
YXRlIDw+IHN0cnVjdCBWZXJ0ZXhUeXBlTWFwcGluZzxHTF9VTlNJR05FRF9TSE9SVCwgdHJ1ZT4g
ICAgICAgICAgICAgICA6IFZlcnRleFR5cGVNYXBwaW5nQmFzZTxEM0RWVF9VU0hPUlRfTk9STSwg
RDNEVlRfRkxPQVQ+IHsgfTsgICAgLy8gQ2FzdCwgTm9ybWFsaXplCi10ZW1wbGF0ZSA8Ym9vbCBu
b3JtYWxpemVkPiBzdHJ1Y3QgVmVydGV4VHlwZU1hcHBpbmc8R0xfRklYRUQsIG5vcm1hbGl6ZWQ+
ICAgOiBWZXJ0ZXhUeXBlTWFwcGluZ0Jhc2U8RDNEVlRfRkxPQVQ+IHsgfTsgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZpeGVkVG9GbG9hdAotdGVtcGxhdGUgPGJvb2wgbm9ybWFsaXplZD4gc3Ry
dWN0IFZlcnRleFR5cGVNYXBwaW5nPEdMX0ZMT0FULCBub3JtYWxpemVkPiAgIDogVmVydGV4VHlw
ZU1hcHBpbmdCYXNlPEQzRFZUX0ZMT0FUPiB7IH07ICAgICAgICAgICAgICAgICAgICAgICAvLyBJ
ZGVudGl0eQotCi0KLS8vIEdpdmVuIGEgR0wgdHlwZSAmIG5vcm0gZmxhZyBhbmQgYSBEM0QgdHlw
ZSwgQ29udmVyc2lvblJ1bGUgcHJvdmlkZXMgdGhlIHR5cGUgY29udmVyc2lvbiBydWxlIChDYXN0
LCBOb3JtYWxpemUsIElkZW50aXR5LCBGaXhlZFRvRmxvYXQpLgotLy8gVGhlIGNvbnZlcnNpb24g
cnVsZXMgdGhlbXNlbHZlcyBhcmUgZGVmaW5lZCBpbiB2ZXJ0ZXhjb252ZXJzaW9uLmguCi0KLS8v
IEFsbW9zdCBhbGwgY2FzZXMgYXJlIGNvdmVyZWQgYnkgQ2FzdCAoaW5jbHVkaW5nIHRob3NlIHRo
YXQgYXJlIGFjdHVhbGx5IElkZW50aXR5IHNpbmNlIENhc3Q8VCxUPiBrbm93cyBpdCdzIGFuIGlk
ZW50aXR5IG1hcHBpbmcpLgotdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxp
emVkLCB1bnNpZ25lZCBpbnQgdG9UeXBlPgotc3RydWN0IENvbnZlcnNpb25SdWxlIDogZ2w6OkNh
c3Q8dHlwZW5hbWUgR0xUb0NUeXBlPGZyb21UeXBlPjo6dHlwZSwgdHlwZW5hbWUgRDNEVG9DVHlw
ZTx0b1R5cGU+Ojp0eXBlPgotewotfTsKLQotLy8gQWxsIGNvbnZlcnNpb25zIGZyb20gbm9ybWFs
aXplZCB0eXBlcyB0byBmbG9hdCB1c2UgdGhlIE5vcm1hbGl6ZSBvcGVyYXRvci4KLXRlbXBsYXRl
IDxHTGVudW0gZnJvbVR5cGU+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxmcm9tVHlwZSwgdHJ1ZSwg
RDNEVlRfRkxPQVQ+IDogZ2w6Ok5vcm1hbGl6ZTx0eXBlbmFtZSBHTFRvQ1R5cGU8ZnJvbVR5cGU+
Ojp0eXBlPiB7IH07Ci0KLS8vIFVzZSBhIGZ1bGwgc3BlY2lhbGlzYXRpb24gZm9yIHRoaXMgc28g
dGhhdCBpdCBwcmVmZXJlbnRpYWxseSBtYXRjaGVzIGFoZWFkIG9mIHRoZSBnZW5lcmljIG5vcm1h
bGl6ZS10by1mbG9hdCBydWxlcy4KLXRlbXBsYXRlIDw+IHN0cnVjdCBDb252ZXJzaW9uUnVsZTxH
TF9GSVhFRCwgdHJ1ZSwgRDNEVlRfRkxPQVQ+IDogZ2w6OkZpeGVkVG9GbG9hdDxHTHVpbnQsIDE2
PiB7IH07Ci10ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ29udmVyc2lvblJ1bGU8R0xfRklYRUQsIGZhbHNl
LCBEM0RWVF9GTE9BVD4gOiBnbDo6Rml4ZWRUb0Zsb2F0PEdMdWludCwgMTY+IHsgfTsKLQotLy8g
QSAyLXN0YWdlIGNvbnN0cnVjdGlvbiBpcyB1c2VkIGZvciBEZWZhdWx0VmVydGV4VmFsdWVzIGJl
Y2F1c2UgZmxvYXQgbXVzdCB1c2UgU2ltcGxlRGVmYXVsdFZhbHVlcyAoaS5lLiAwLzEpCi0vLyB3
aGV0aGVyIGl0IGlzIG5vcm1hbGl6ZWQgb3Igbm90LgotdGVtcGxhdGUgPGNsYXNzIFQsIGJvb2wg
bm9ybWFsaXplZD4KLXN0cnVjdCBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyCi17Ci19OwotCi10
ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1ZXNTdGFnZTI8VCwgdHJ1
ZT4gIDogZ2w6Ok5vcm1hbGl6ZWREZWZhdWx0VmFsdWVzPFQ+IHsgfTsKLXRlbXBsYXRlIDxjbGFz
cyBUPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlc1N0YWdlMjxULCBmYWxzZT4gOiBnbDo6U2lt
cGxlRGVmYXVsdFZhbHVlczxUPiB7IH07Ci0KLS8vIFdvcmsgb3V0IHRoZSBkZWZhdWx0IHZhbHVl
IHJ1bGUgZm9yIGEgRDNEIHR5cGUgKGV4cHJlc3NlZCBhcyB0aGUgQyB0eXBlKSBhbmQgCi10ZW1w
bGF0ZSA8Y2xhc3MgVCwgYm9vbCBub3JtYWxpemVkPgotc3RydWN0IERlZmF1bHRWZXJ0ZXhWYWx1
ZXMgOiBEZWZhdWx0VmVydGV4VmFsdWVzU3RhZ2UyPFQsIG5vcm1hbGl6ZWQ+Ci17Ci19OwotCi10
ZW1wbGF0ZSA8Ym9vbCBub3JtYWxpemVkPiBzdHJ1Y3QgRGVmYXVsdFZlcnRleFZhbHVlczxmbG9h
dCwgbm9ybWFsaXplZD4gOiBnbDo6U2ltcGxlRGVmYXVsdFZhbHVlczxmbG9hdD4geyB9OwotCi0v
LyBQb2xpY3kgcnVsZXMgZm9yIHVzZSB3aXRoIENvbnZlcnRlciwgdG8gY2hvb3NlIHdoZXRoZXIg
dG8gdXNlIHRoZSBwcmVmZXJyZWQgb3IgZmFsbGJhY2sgY29udmVyc2lvbi4KLS8vIFRoZSBmYWxs
YmFjayBjb252ZXJzaW9uIHByb2R1Y2VzIGFuIG91dHB1dCB0aGF0IGFsbCBEM0Q5IGRldmljZXMg
bXVzdCBzdXBwb3J0LgotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBVc2VQcmVmZXJyZWQgeyBl
bnVtIHsgdHlwZSA9IFQ6OnByZWZlcnJlZCB9OyB9OwotdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVj
dCBVc2VGYWxsYmFjayB7IGVudW0geyB0eXBlID0gVDo6ZmFsbGJhY2sgfTsgfTsKLQotLy8gQ29u
dmVydGVyIHRpZXMgaXQgYWxsIHRvZ2V0aGVyLiBHaXZlbiBhbiBPcGVuR0wgdHlwZS9ub3JtL3Np
emUgYW5kIGNob2ljZSBvZiBwcmVmZXJyZWQvZmFsbGJhY2sgY29udmVyc2lvbiwKLS8vIGl0IHBy
b3ZpZGVzIGFsbCB0aGUgbWVtYmVycyBvZiB0aGUgYXBwcm9wcmlhdGUgVmVydGV4RGF0YUNvbnZl
cnRlciwgdGhlIEQzRENBUFM5OjpEZWNsVHlwZXMgZmxhZyBpbiBjYXAgZmxhZwotLy8gYW5kIHRo
ZSBEM0RERUNMVFlQRSBtZW1iZXIgbmVlZGVkIGZvciB0aGUgdmVydGV4IGRlY2xhcmF0aW9uIGlu
IGRlY2xmbGFnLgotdGVtcGxhdGUgPEdMZW51bSBmcm9tVHlwZSwgYm9vbCBub3JtYWxpemVkLCBp
bnQgc2l6ZSwgdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIFByZWZlcmVuY2VSdWxlPgotc3RydWN0
IENvbnZlcnRlcgotICAgIDogZ2w6OlZlcnRleERhdGFDb252ZXJ0ZXI8dHlwZW5hbWUgR0xUb0NU
eXBlPGZyb21UeXBlPjo6dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdpZGVu
UnVsZTxQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlwZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6
ZWQ+ID46OnR5cGUsIHNpemU+LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVy
c2lvblJ1bGU8ZnJvbVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub3JtYWxpemVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUHJlZmVyZW5jZVJ1bGU8IFZlcnRleFR5cGVNYXBwaW5nPGZyb21UeXBlLCBub3Jt
YWxpemVkPiA+Ojp0eXBlPiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHRW
ZXJ0ZXhWYWx1ZXM8dHlwZW5hbWUgRDNEVG9DVHlwZTxQcmVmZXJlbmNlUnVsZTwgVmVydGV4VHlw
ZU1hcHBpbmc8ZnJvbVR5cGUsIG5vcm1hbGl6ZWQ+ID46OnR5cGU+Ojp0eXBlLCBub3JtYWxpemVk
ID4gPgotewotcHJpdmF0ZToKLSAgICBlbnVtIHsgZDNkdHlwZSA9IFByZWZlcmVuY2VSdWxlPCBW
ZXJ0ZXhUeXBlTWFwcGluZzxmcm9tVHlwZSwgbm9ybWFsaXplZD4gPjo6dHlwZSB9OwotICAgIGVu
dW0geyBkM2RzaXplID0gV2lkZW5SdWxlPGQzZHR5cGUsIHNpemU+OjpmaW5hbFdpZHRoIH07Ci0K
LXB1YmxpYzoKLSAgICBlbnVtIHsgY2FwZmxhZyA9IFZlcnRleFR5cGVGbGFnczxkM2R0eXBlLCBk
M2RzaXplPjo6Y2FwZmxhZyB9OwotICAgIGVudW0geyBkZWNsZmxhZyA9IFZlcnRleFR5cGVGbGFn
czxkM2R0eXBlLCBkM2RzaXplPjo6ZGVjbGZsYWcgfTsKLX07Ci0KLX0KLQotbmFtZXNwYWNlIGds
Ci17Ci1EeDlCYWNrRW5kOjpEeDlCYWNrRW5kKENvbnRleHQgKmNvbnRleHQsIElEaXJlY3QzRERl
dmljZTkgKmQzZGRldmljZSkKLSAgICA6IG1EZXZpY2UoZDNkZGV2aWNlKQotewotICAgIG1EZXZp
Y2UtPkFkZFJlZigpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJ
QlM7ICsraSkKLSAgICB7Ci0gICAgICAgIG1BcHBsaWVkQXR0cmliRW5hYmxlZFtpXSA9IHRydWU7
Ci0gICAgICAgIG1TdHJlYW1GcmVxdWVuY3lbaV0gPSBTVFJFQU1fRlJFUVVFTkNZX1VOSU5TVEFO
Q0VEOwotICAgIH0KLQotICAgIG1TdHJlYW1GcmVxdWVuY3lbTUFYX1ZFUlRFWF9BVFRSSUJTXSA9
IFNUUkVBTV9GUkVRVUVOQ1lfVU5JTlNUQU5DRUQ7Ci0KLSAgICBEM0RDQVBTOSBjYXBzID0gY29u
dGV4dC0+Z2V0RGV2aWNlQ2FwcygpOwotCi0gICAgSURpcmVjdDNEOSAqZDNkT2JqZWN0OwotICAg
IG1EZXZpY2UtPkdldERpcmVjdDNEKCZkM2RPYmplY3QpOwotCi0gICAgRDNEQURBUFRFUl9JREVO
VElGSUVSOSBpZGVudDsKLSAgICBkM2RPYmplY3QtPkdldEFkYXB0ZXJJZGVudGlmaWVyKGNhcHMu
QWRhcHRlck9yZGluYWwsIDAsICZpZGVudCk7Ci0gICAgZDNkT2JqZWN0LT5SZWxlYXNlKCk7Ci0K
LSAgICAvLyBJbnN0YW5jaW5nIGlzIG1hbmRhdG9yeSBmb3IgYWxsIEhXIHdpdGggU00zIHZlcnRl
eCBzaGFkZXJzLCBidXQgYXZvaWQgaGFyZHdhcmUgd2hlcmUgaXQgZG9lcyBub3Qgd29yay4KLSAg
ICBtVXNlSW5zdGFuY2luZ0ZvclN0cmlkZVplcm8gPSAoY2Fwcy5WZXJ0ZXhTaGFkZXJWZXJzaW9u
ID49IEQzRFZTX1ZFUlNJT04oMywgMCkgJiYgaWRlbnQuVmVuZG9ySWQgIT0gMHg4MDg2KTsKLSAg
ICBtU3VwcG9ydEludEluZGljZXMgPSAoY2Fwcy5NYXhWZXJ0ZXhJbmRleCA+PSAoMSA8PCAxNikp
OwotCi0gICAgY2hlY2tWZXJ0ZXhDYXBzKGNhcHMuRGVjbFR5cGVzKTsKLX0KLQotRHg5QmFja0Vu
ZDo6fkR4OUJhY2tFbmQoKQotewotICAgIG1EZXZpY2UtPlJlbGVhc2UoKTsKLX0KLQotYm9vbCBE
eDlCYWNrRW5kOjpzdXBwb3J0SW50SW5kaWNlcygpCi17Ci0gICAgcmV0dXJuIG1TdXBwb3J0SW50
SW5kaWNlczsKLX0KLQotLy8gSW5pdGlhbGlzZSBhIFRyYW5zbGF0aW9uSW5mbwotI2RlZmluZSBU
UkFOU0xBVElPTih0eXBlLCBub3JtLCBzaXplLCBwcmVmZXJyZWQpICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0s
IHNpemUsIHByZWZlcnJlZD46OmlkZW50aXR5LCAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
ICAgICAgICAgQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmZpbmFsU2l6
ZSwgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgQ29udmVydGVyPHR5cGUsIG5v
cm0sIHNpemUsIHByZWZlcnJlZD46OmNvbnZlcnRBcnJheSwgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBzdGF0aWNfY2FzdDxEM0RERUNM
VFlQRT4oQ29udmVydGVyPHR5cGUsIG5vcm0sIHNpemUsIHByZWZlcnJlZD46OmRlY2xmbGFnKSAg
XAotICAgIH0KLQotI2RlZmluZSBUUkFOU0xBVElPTl9GT1JfVFlQRV9OT1JNX1NJWkUodHlwZSwg
bm9ybSwgc2l6ZSkgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBDb252ZXJ0ZXI8dHlwZSwgbm9ybSwgc2l6
ZSwgVXNlUHJlZmVycmVkPjo6Y2FwZmxhZywgXAotICAgICAgICBUUkFOU0xBVElPTih0eXBlLCBu
b3JtLCBzaXplLCBVc2VQcmVmZXJyZWQpLCAgICAgICAgXAotICAgICAgICBUUkFOU0xBVElPTih0
eXBlLCBub3JtLCBzaXplLCBVc2VGYWxsYmFjaykgICAgICAgICAgXAotICAgIH0KLQotI2RlZmlu
ZSBUUkFOU0xBVElPTlNfRk9SX1RZUEUodHlwZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICB7IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBm
YWxzZSwgMSksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMiks
IFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgMyksIFRSQU5TTEFU
SU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCBmYWxzZSwgNCkgfSwgXAotICAgICAgICB7IFRS
QU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0eXBlLCB0cnVlLCAxKSwgVFJBTlNMQVRJT05f
Rk9SX1RZUEVfTk9STV9TSVpFKHR5cGUsIHRydWUsIDIpLCBUUkFOU0xBVElPTl9GT1JfVFlQRV9O
T1JNX1NJWkUodHlwZSwgdHJ1ZSwgMyksIFRSQU5TTEFUSU9OX0ZPUl9UWVBFX05PUk1fU0laRSh0
eXBlLCB0cnVlLCA0KSB9LCAgICAgXAotICAgIH0KLQotY29uc3QgRHg5QmFja0VuZDo6VHJhbnNs
YXRpb25EZXNjcmlwdGlvbiBEeDlCYWNrRW5kOjptUG9zc2libGVUcmFuc2xhdGlvbnNbTlVNX0dM
X1ZFUlRFWF9BVFRSSUJfVFlQRVNdWzJdWzRdID0gLy8gW0dMIHR5cGVzIGFzIGVudW1lcmF0ZWQg
YnkgdHlwZUluZGV4KCldW25vcm1hbGl6ZWRdW3NpemUtMV0KLXsKLSAgICBUUkFOU0xBVElPTlNf
Rk9SX1RZUEUoR0xfQllURSksCi0gICAgVFJBTlNMQVRJT05TX0ZPUl9UWVBFKEdMX1VOU0lHTkVE
X0JZVEUpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9TSE9SVCksCi0gICAgVFJBTlNM
QVRJT05TX0ZPUl9UWVBFKEdMX1VOU0lHTkVEX1NIT1JUKSwKLSAgICBUUkFOU0xBVElPTlNfRk9S
X1RZUEUoR0xfRklYRUQpLAotICAgIFRSQU5TTEFUSU9OU19GT1JfVFlQRShHTF9GTE9BVCkKLX07
Ci0KLXZvaWQgRHg5QmFja0VuZDo6Y2hlY2tWZXJ0ZXhDYXBzKERXT1JEIGRlY2xUeXBlcykKLXsK
LSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZ
UEVTOyBpKyspCi0gICAgewotICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqID0gMDsgaiA8IDI7
IGorKykKLSAgICAgICAgewotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgayA9IDA7IGsg
PCA0OyBrKyspCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKG1Qb3NzaWJsZVRy
YW5zbGF0aW9uc1tpXVtqXVtrXS5jYXBzRmxhZyA9PSAwIHx8IChkZWNsVHlwZXMgJiBtUG9zc2li
bGVUcmFuc2xhdGlvbnNbaV1bal1ba10uY2Fwc0ZsYWcpICE9IDApCi0gICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgICBtQXR0cmlidXRlVHlwZXNbaV1bal1ba10gPSBtUG9zc2li
bGVUcmFuc2xhdGlvbnNbaV1bal1ba10ucHJlZmVycmVkQ29udmVyc2lvbjsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICAgICAgbUF0dHJpYnV0ZVR5cGVzW2ldW2pdW2tdID0gbVBvc3NpYmxlVHJhbnNsYXRp
b25zW2ldW2pdW2tdLmZhbGxiYWNrQ29udmVyc2lvbjsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLVRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIg
KkR4OUJhY2tFbmQ6OmNyZWF0ZVZlcnRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplKQotewotICAg
IHJldHVybiBuZXcgRHg5VmVydGV4QnVmZmVyKG1EZXZpY2UsIHNpemUpOwotfQotCi1UcmFuc2xh
dGVkVmVydGV4QnVmZmVyICpEeDlCYWNrRW5kOjpjcmVhdGVWZXJ0ZXhCdWZmZXJGb3JTdHJpZGVa
ZXJvKHN0ZDo6c2l6ZV90IHNpemUpCi17Ci0gICAgaWYgKG1Vc2VJbnN0YW5jaW5nRm9yU3RyaWRl
WmVybykKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgRHg5VmVydGV4QnVmZmVyKG1EZXZpY2Us
IHNpemUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IER4OVZl
cnRleEJ1ZmZlclplcm9TdHJpZGVXb3JrYXJvdW5kKG1EZXZpY2UsIHNpemUpOwotICAgIH0KLX0K
LQotVHJhbnNsYXRlZEluZGV4QnVmZmVyICpEeDlCYWNrRW5kOjpjcmVhdGVJbmRleEJ1ZmZlcihz
dGQ6OnNpemVfdCBzaXplLCBHTGVudW0gdHlwZSkKLXsKLSAgICByZXR1cm4gbmV3IER4OUluZGV4
QnVmZmVyKG1EZXZpY2UsIHNpemUsIHR5cGUpOwotfQotCi0vLyBUaGlzIGlzIHVzZWQgdG8gaW5k
ZXggbUF0dHJpYnV0ZVR5cGVzIGFuZCBtUG9zc2libGVUcmFuc2xhdGlvbnMuCi11bnNpZ25lZCBp
bnQgRHg5QmFja0VuZDo6dHlwZUluZGV4KEdMZW51bSB0eXBlKSBjb25zdAotewotICAgIHN3aXRj
aCAodHlwZSkKLSAgICB7Ci0gICAgICBjYXNlIEdMX0JZVEU6IHJldHVybiAwOwotICAgICAgY2Fz
ZSBHTF9VTlNJR05FRF9CWVRFOiByZXR1cm4gMTsKLSAgICAgIGNhc2UgR0xfU0hPUlQ6IHJldHVy
biAyOwotICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIDM7Ci0gICAgICBjYXNl
IEdMX0ZJWEVEOiByZXR1cm4gNDsKLSAgICAgIGNhc2UgR0xfRkxPQVQ6IHJldHVybiA1OwotCi0g
ICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOyByZXR1cm4gNTsKLSAgICB9Ci19Ci0KLUZvcm1h
dENvbnZlcnRlciBEeDlCYWNrRW5kOjpnZXRGb3JtYXRDb252ZXJ0ZXIoR0xlbnVtIHR5cGUsIHN0
ZDo6c2l6ZV90IHNpemUsIGJvb2wgbm9ybWFsaXplKQotewotICAgIHJldHVybiBtQXR0cmlidXRl
VHlwZXNbdHlwZUluZGV4KHR5cGUpXVtub3JtYWxpemVdW3NpemUtMV0uZm9ybWF0Q29udmVydGVy
OwotfQotCi1EM0RERUNMVFlQRSBEeDlCYWNrRW5kOjptYXBBdHRyaWJ1dGVUeXBlKEdMZW51bSB0
eXBlLCBzdGQ6OnNpemVfdCBzaXplLCBib29sIG5vcm1hbGl6ZSkgY29uc3QKLXsKLSAgICByZXR1
cm4gbUF0dHJpYnV0ZVR5cGVzW3R5cGVJbmRleCh0eXBlKV1bbm9ybWFsaXplXVtzaXplLTFdLmQz
ZERlY2xUeXBlOwotfQotCi1ib29sIER4OUJhY2tFbmQ6OnZhbGlkYXRlU3RyZWFtKEdMZW51bSB0
eXBlLCBzdGQ6OnNpemVfdCBzaXplLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG9m
ZnNldCkgY29uc3QKLXsKLSAgICAvLyBEM0Q5IHJlcXVpcmVzIHRoZSBzdHJlYW0gb2Zmc2V0IGFu
ZCBzdHJpZGUgdG8gYmUgYSBtdWx0aXBsZSBvZiBEV09SRC4KLSAgICByZXR1cm4gKHN0cmlkZSAl
IHNpemVvZihEV09SRCkgPT0gMCAmJiBvZmZzZXQgJSBzaXplb2YoRFdPUkQpID09IDApOwotfQot
Ci1JRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICpEeDlCYWNrRW5kOjpnZXREeEJ1ZmZlcihUcmFuc2xh
dGVkVmVydGV4QnVmZmVyICp2YikgY29uc3QKLXsKLSAgICByZXR1cm4gdmIgPyBzdGF0aWNfY2Fz
dDxEeDlWZXJ0ZXhCdWZmZXIqPih2YiktPmdldEJ1ZmZlcigpIDogTlVMTDsKLX0KLQotSURpcmVj
dDNESW5kZXhCdWZmZXI5ICpEeDlCYWNrRW5kOjpnZXREeEJ1ZmZlcihUcmFuc2xhdGVkSW5kZXhC
dWZmZXIgKmliKSBjb25zdAotewotICAgIHJldHVybiBpYiA/IHN0YXRpY19jYXN0PER4OUluZGV4
QnVmZmVyKj4oaWIpLT5nZXRCdWZmZXIoKSA6IE5VTEw7Ci19Ci0KLUdMZW51bSBEeDlCYWNrRW5k
OjpzZXR1cEluZGljZXNQcmVEcmF3KGNvbnN0IFRyYW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5m
bykKLXsKLSAgICBtRGV2aWNlLT5TZXRJbmRpY2VzKGdldER4QnVmZmVyKGluZGV4SW5mby5idWZm
ZXIpKTsKLSAgICByZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLUdMZW51bSBEeDlCYWNrRW5kOjpz
ZXR1cEF0dHJpYnV0ZXNQcmVEcmF3KGNvbnN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKmF0dHJpYnV0
ZXMpCi17Ci0gICAgSFJFU1VMVCBocjsKLQotICAgIEQzRFZFUlRFWEVMRU1FTlQ5IGVsZW1lbnRz
W01BWF9WRVJURVhfQVRUUklCUysxXTsKLQotICAgIEQzRFZFUlRFWEVMRU1FTlQ5ICpuZXh0RWxl
bWVudCA9ICZlbGVtZW50c1swXTsKLQotICAgIGZvciAoQllURSBpID0gMDsgaSA8IE1BWF9WRVJU
RVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZW5hYmxl
ZCkKLSAgICAgICAgewotICAgICAgICAgICAgbmV4dEVsZW1lbnQtPlN0cmVhbSA9IGkgKyAxOyAg
ICAvLyBTdHJlYW0gMCBpcyBza2lwcGVkIGJlY2F1c2UgRDNEIGRvZXMgbm90IHBlcm1pdCBpdCB0
byBiZSBhbiBpbnN0YW5jZWQgc3RyZWFtLgotICAgICAgICAgICAgbmV4dEVsZW1lbnQtPk9mZnNl
dCA9IDA7Ci0gICAgICAgICAgICBuZXh0RWxlbWVudC0+VHlwZSA9IHN0YXRpY19jYXN0PEJZVEU+
KG1hcEF0dHJpYnV0ZVR5cGUoYXR0cmlidXRlc1tpXS50eXBlLCBhdHRyaWJ1dGVzW2ldLnNpemUs
IGF0dHJpYnV0ZXNbaV0ubm9ybWFsaXplZCkpOwotICAgICAgICAgICAgbmV4dEVsZW1lbnQtPk1l
dGhvZCA9IEQzRERFQ0xNRVRIT0RfREVGQVVMVDsKLSAgICAgICAgICAgIG5leHRFbGVtZW50LT5V
c2FnZSA9IEQzRERFQ0xVU0FHRV9URVhDT09SRDsKLSAgICAgICAgICAgIG5leHRFbGVtZW50LT5V
c2FnZUluZGV4ID0gYXR0cmlidXRlc1tpXS5zZW1hbnRpY0luZGV4OwotICAgICAgICAgICAgbmV4
dEVsZW1lbnQrKzsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBEM0RWRVJU
RVhFTEVNRU5UOSBlbmQgPSBEM0RERUNMX0VORCgpOwotICAgICpuZXh0RWxlbWVudCA9IGVuZDsK
LQotICAgIElEaXJlY3QzRFZlcnRleERlY2xhcmF0aW9uOSogdmVydGV4RGVjbGFyYXRpb247Ci0g
ICAgaHIgPSBtRGV2aWNlLT5DcmVhdGVWZXJ0ZXhEZWNsYXJhdGlvbihlbGVtZW50cywgJnZlcnRl
eERlY2xhcmF0aW9uKTsKLSAgICBtRGV2aWNlLT5TZXRWZXJ0ZXhEZWNsYXJhdGlvbih2ZXJ0ZXhE
ZWNsYXJhdGlvbik7Ci0gICAgdmVydGV4RGVjbGFyYXRpb24tPlJlbGVhc2UoKTsKLQotICAgIG1E
ZXZpY2UtPlNldFN0cmVhbVNvdXJjZSgwLCBOVUxMLCAwLCAwKTsKLQotICAgIGJvb2wgbm9uQXJy
YXlBdHRyaWJ1dGVzID0gZmFsc2U7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IE1BWF9W
RVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZW5h
YmxlZCkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0ubm9uQXJyYXkp
IG5vbkFycmF5QXR0cmlidXRlcyA9IHRydWU7Ci0KLSAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0
cmVhbVNvdXJjZShpICsgMSwgZ2V0RHhCdWZmZXIoYXR0cmlidXRlc1tpXS5idWZmZXIpLCBhdHRy
aWJ1dGVzW2ldLm9mZnNldCwgYXR0cmlidXRlc1tpXS5zdHJpZGUpOwotICAgICAgICAgICAgaWYg
KCFtQXBwbGllZEF0dHJpYkVuYWJsZWRbaV0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgbUFwcGxpZWRBdHRyaWJFbmFibGVkW2ldID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtQXBwbGllZEF0
dHJpYkVuYWJsZWRbaV0pCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbURldmljZS0+
U2V0U3RyZWFtU291cmNlKGkgKyAxLCAwLCAwLCAwKTsKLSAgICAgICAgICAgICAgICBtQXBwbGll
ZEF0dHJpYkVuYWJsZWRbaV0gPSBmYWxzZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChtVXNlSW5zdGFuY2luZ0ZvclN0cmlkZVplcm8pCi0gICAgewotICAgICAg
ICAvLyBXaGVuIHRoZXJlIGFyZSBubyBzdHJpZGUgemVybyBhdHRyaWJ1dGVzLCB3ZSBkaXNhYmxl
IGluc3RhbmNpbmcgc28gdGhhdCBEcmF3UHJpbWl0aXZlIGNhbiBiZSB1c2VkLgotCi0gICAgICAg
IGlmIChub25BcnJheUF0dHJpYnV0ZXMpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtU3Ry
ZWFtRnJlcXVlbmN5WzBdICE9IFNUUkVBTV9GUkVRVUVOQ1lfSU5ERVhFRCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICBtU3RyZWFtRnJlcXVlbmN5WzBdID0gU1RSRUFNX0ZSRVFVRU5D
WV9JTkRFWEVEOwotICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEo
MCwgRDNEU1RSRUFNU09VUkNFX0lOREVYRUREQVRBIHwgMSk7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKysp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXNbaV0uZW5hYmxl
ZCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVz
W2ldLm5vbkFycmF5KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiAobVN0cmVhbUZyZXF1ZW5jeVtpKzFdICE9IFNUUkVBTV9GUkVRVUVOQ1lfSU5TVEFO
Q0VEKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1TdHJlYW1GcmVxdWVuY3lbaSsxXSA9IFNUUkVBTV9GUkVRVUVOQ1lfSU5TVEFOQ0VEOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEo
aSArIDEsIEQzRFNUUkVBTVNPVVJDRV9JTlNUQU5DRURBVEEgfCAxKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
U3RyZWFtRnJlcXVlbmN5W2krMV0gIT0gU1RSRUFNX0ZSRVFVRU5DWV9JTkRFWEVEKQotICAgICAg
ICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1TdHJlYW1G
cmVxdWVuY3lbaSsxXSA9IFNUUkVBTV9GUkVRVUVOQ1lfSU5ERVhFRDsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtRGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGkgKyAxLCBEM0RTVFJF
QU1TT1VSQ0VfSU5ERVhFRERBVEEgfCAxKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTICsgMTsgaSsrKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIGlmIChtU3RyZWFtRnJlcXVlbmN5W2ldICE9IFNUUkVBTV9GUkVRVUVO
Q1lfVU5JTlNUQU5DRUQpCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBt
U3RyZWFtRnJlcXVlbmN5W2ldID0gU1RSRUFNX0ZSRVFVRU5DWV9VTklOU1RBTkNFRDsKLQotICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgYmUgbmVlZGVkLCBidXQgb3RoZXJ3
aXNlIHRoZXJlIGlzIGEgYnVnZ3kgZHJpdmVyIHRoYXQgd2lsbCBsZWF2ZSBpbnN0YW5jaW5nCi0g
ICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZWQgZm9yIHRoZSBmaXJzdCBkcmF3IGFmdGVyIGl0
IGhhcyBiZWVuIHR1cm5lZCBvZmYuCi0gICAgICAgICAgICAgICAgICAgIG1EZXZpY2UtPlNldFN0
cmVhbVNvdXJjZUZyZXEoaSwgRDNEU1RSRUFNU09VUkNFX0lOREVYRUREQVRBIHwgMSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgbURldmljZS0+U2V0U3RyZWFtU291cmNlRnJlcShpLCAxKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gR0xfTk9fRVJST1I7Ci19Ci0KLUR4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlcjo6RHg5
VmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSkK
LSAgICA6IFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIoc2l6ZSkKLXsKLSAgICBIUkVTVUxUIGhyID0g
ZGV2aWNlLT5DcmVhdGVWZXJ0ZXhCdWZmZXIoc2l6ZSwgRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVT
QUdFX1dSSVRFT05MWSwgMCwgRDNEUE9PTF9ERUZBVUxULCAmbVZlcnRleEJ1ZmZlciwgTlVMTCk7
Ci0gICAgaWYgKGhyICE9IFNfT0spCi0gICAgewotICAgICAgICBFUlIoIk91dCBvZiBtZW1vcnkg
YWxsb2NhdGluZyBhIHZlcnRleCBidWZmZXIgb2Ygc2l6ZSAlbHUuIiwgc2l6ZSk7Ci0gICAgICAg
IHRocm93IHN0ZDo6YmFkX2FsbG9jKCk7Ci0gICAgfQotfQotCi1EeDlCYWNrRW5kOjpEeDlWZXJ0
ZXhCdWZmZXI6OkR4OVZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6
c2l6ZV90IHNpemUsIERXT1JEIHVzYWdlRmxhZ3MpCi0gICAgOiBUcmFuc2xhdGVkVmVydGV4QnVm
ZmVyKHNpemUpCi17Ci0gICAgSFJFU1VMVCBociA9IGRldmljZS0+Q3JlYXRlVmVydGV4QnVmZmVy
KHNpemUsIHVzYWdlRmxhZ3MsIDAsIEQzRFBPT0xfREVGQVVMVCwgJm1WZXJ0ZXhCdWZmZXIsIE5V
TEwpOwotICAgIGlmIChociAhPSBTX09LKQotICAgIHsKLSAgICAgICAgRVJSKCJPdXQgb2YgbWVt
b3J5IGFsbG9jYXRpbmcgYSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIHNpemUpOwotICAg
ICAgICB0aHJvdyBzdGQ6OmJhZF9hbGxvYygpOwotICAgIH0KLX0KLQotCi1EeDlCYWNrRW5kOjpE
eDlWZXJ0ZXhCdWZmZXI6On5EeDlWZXJ0ZXhCdWZmZXIoKQotewotICAgIG1WZXJ0ZXhCdWZmZXIt
PlJlbGVhc2UoKTsKLX0KLQotSURpcmVjdDNEVmVydGV4QnVmZmVyOSAqRHg5QmFja0VuZDo6RHg5
VmVydGV4QnVmZmVyOjpnZXRCdWZmZXIoKSBjb25zdAotewotICAgIHJldHVybiBtVmVydGV4QnVm
ZmVyOwotfQotCi12b2lkICpEeDlCYWNrRW5kOjpEeDlWZXJ0ZXhCdWZmZXI6Om1hcCgpCi17Ci0g
ICAgdm9pZCAqbWFwUHRyOwotCi0gICAgbVZlcnRleEJ1ZmZlci0+TG9jaygwLCAwLCAmbWFwUHRy
LCAwKTsKLQotICAgIHJldHVybiBtYXBQdHI7Ci19Ci0KLXZvaWQgRHg5QmFja0VuZDo6RHg5VmVy
dGV4QnVmZmVyOjp1bm1hcCgpCi17Ci0gICAgbVZlcnRleEJ1ZmZlci0+VW5sb2NrKCk7Ci19Ci0K
LXZvaWQgRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyOjpyZWN5Y2xlKCkKLXsKLSAgICB2b2lk
ICpkdW1teTsKLSAgICBtVmVydGV4QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19E
SVNDQVJEKTsKLSAgICBtVmVydGV4QnVmZmVyLT5VbmxvY2soKTsKLX0KLQotdm9pZCAqRHg5QmFj
a0VuZDo6RHg5VmVydGV4QnVmZmVyOjpzdHJlYW1pbmdNYXAoc3RkOjpzaXplX3Qgb2Zmc2V0LCBz
dGQ6OnNpemVfdCBzaXplKQotewotICAgIHZvaWQgKm1hcFB0cjsKLQotICAgIG1WZXJ0ZXhCdWZm
ZXItPkxvY2sob2Zmc2V0LCBzaXplLCAmbWFwUHRyLCBEM0RMT0NLX05PT1ZFUldSSVRFKTsKLQot
ICAgIHJldHVybiBtYXBQdHI7Ci19Ci0KLS8vIE5vcm1hbGx5IFZCcyBhcmUgY3JlYXRlZCB3aXRo
IEQzRFVTQUdFX1dSSVRFT05MWSB8IEQzRFVTQUdFX0RZTkFNSUMsIGJ1dCBzb21lIGhhcmR3YXJl
ICYgZHJpdmVycyB3b24ndCByZW5kZXIKLS8vIGlmIGFueSBzdHJpZGUtemVybyBzdHJlYW1zIGFy
ZSBpbiBEM0RVU0FHRV9EWU5BTUlDIFZCcywgc28gdGhpcyBwcm92aWRlcyBhIHdheSB0byBjcmVh
dGUgc3VjaCBWQnMgd2l0aCBvbmx5IEQzRFVTQUdFX1dSSVRFT05MWSBzZXQuCi0vLyBEM0RMT0NL
X0RJU0NBUkQgYW5kIEQzRExPQ0tfTk9PVkVSV1JJVEUgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIEQz
RFVTQUdFX0RZTkFNSUMgVkJzLCBzbyB3ZSBvdmVycmlkZSBtZXRob2RzIHRvIGF2b2lkIHVzaW5n
IHRoZXNlIGZsYWdzLgotRHg5QmFja0VuZDo6RHg5VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdvcmth
cm91bmQ6OkR4OVZlcnRleEJ1ZmZlclplcm9TdHJpZGVXb3JrYXJvdW5kKElEaXJlY3QzRERldmlj
ZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSkKLSAgICA6IER4OVZlcnRleEJ1ZmZlcihkZXZp
Y2UsIHNpemUsIEQzRFVTQUdFX1dSSVRFT05MWSkKLXsKLX0KLQotdm9pZCBEeDlCYWNrRW5kOjpE
eDlWZXJ0ZXhCdWZmZXJaZXJvU3RyaWRlV29ya2Fyb3VuZDo6cmVjeWNsZSgpCi17Ci19Ci0KLXZv
aWQgKkR4OUJhY2tFbmQ6OkR4OVZlcnRleEJ1ZmZlclplcm9TdHJpZGVXb3JrYXJvdW5kOjpzdHJl
YW1pbmdNYXAoc3RkOjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXplKQotewotICAgIHZv
aWQgKm1hcFB0cjsKLQotICAgIGdldEJ1ZmZlcigpLT5Mb2NrKG9mZnNldCwgc2l6ZSwgJm1hcFB0
ciwgMCk7Ci0KLSAgICByZXR1cm4gbWFwUHRyOwotfQotCi1EeDlCYWNrRW5kOjpEeDlJbmRleEJ1
ZmZlcjo6RHg5SW5kZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVf
dCBzaXplLCBHTGVudW0gdHlwZSkKLSAgICA6IFRyYW5zbGF0ZWRJbmRleEJ1ZmZlcihzaXplKQot
ewotICAgIEFTU0VSVCh0eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUIHx8IHR5cGUgPT0gR0xfVU5T
SUdORURfSU5UKTsKLQotICAgIEQzREZPUk1BVCBmb3JtYXQgPSAodHlwZSA9PSBHTF9VTlNJR05F
RF9TSE9SVCkgPyBEM0RGTVRfSU5ERVgxNiA6IEQzREZNVF9JTkRFWDMyOwotCi0gICAgSFJFU1VM
VCBociA9IGRldmljZS0+Q3JlYXRlSW5kZXhCdWZmZXIoc2l6ZSwgRDNEVVNBR0VfRFlOQU1JQyB8
IEQzRFVTQUdFX1dSSVRFT05MWSwgZm9ybWF0LCBEM0RQT09MX0RFRkFVTFQsICZtSW5kZXhCdWZm
ZXIsIE5VTEwpOwotICAgIGlmIChociAhPSBTX09LKQotICAgIHsKLSAgICAgICAgRVJSKCJPdXQg
b2YgbWVtb3J5IGFsbG9jYXRpbmcgYW4gaW5kZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIHNpemUp
OwotICAgICAgICB0aHJvdyBzdGQ6OmJhZF9hbGxvYygpOwotICAgIH0KLX0KLQotRHg5QmFja0Vu
ZDo6RHg5SW5kZXhCdWZmZXI6On5EeDlJbmRleEJ1ZmZlcigpCi17Ci0gICAgbUluZGV4QnVmZmVy
LT5SZWxlYXNlKCk7Ci19Ci0KLUlEaXJlY3QzREluZGV4QnVmZmVyOSpEeDlCYWNrRW5kOjpEeDlJ
bmRleEJ1ZmZlcjo6Z2V0QnVmZmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbUluZGV4QnVmZmVy
OwotfQotCi12b2lkICpEeDlCYWNrRW5kOjpEeDlJbmRleEJ1ZmZlcjo6bWFwKCkKLXsKLSAgICB2
b2lkICptYXBQdHI7Ci0KLSAgICBtSW5kZXhCdWZmZXItPkxvY2soMCwgMCwgJm1hcFB0ciwgMCk7
Ci0KLSAgICByZXR1cm4gbWFwUHRyOwotfQotCi12b2lkIER4OUJhY2tFbmQ6OkR4OUluZGV4QnVm
ZmVyOjp1bm1hcCgpCi17Ci0gICAgbUluZGV4QnVmZmVyLT5VbmxvY2soKTsKLX0KLQotdm9pZCBE
eDlCYWNrRW5kOjpEeDlJbmRleEJ1ZmZlcjo6cmVjeWNsZSgpCi17Ci0gICAgdm9pZCAqZHVtbXk7
Ci0gICAgbUluZGV4QnVmZmVyLT5Mb2NrKDAsIDEsICZkdW1teSwgRDNETE9DS19ESVNDQVJEKTsK
LSAgICBtSW5kZXhCdWZmZXItPlVubG9jaygpOwotfQotCi12b2lkICpEeDlCYWNrRW5kOjpEeDlJ
bmRleEJ1ZmZlcjo6c3RyZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXplX3Qg
c2l6ZSkKLXsKLSAgICB2b2lkICptYXBQdHI7Ci0KLSAgICBtSW5kZXhCdWZmZXItPkxvY2sob2Zm
c2V0LCBzaXplLCAmbWFwUHRyLCBEM0RMT0NLX05PT1ZFUldSSVRFKTsKLQotICAgIHJldHVybiBt
YXBQdHI7Ci19Ci0KLX0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvZ2VvbWV0cnkvVmVydGV4RGF0YU1hbmFnZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgJ
KHJldmlzaW9uIDc2MDI1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMCw3ICsx
MCw3IEBACiAjaWZuZGVmIExJQkdMRVNWMl9HRU9NRVRSWV9WRVJURVhEQVRBTUFOQUdFUl9IXwog
I2RlZmluZSBMSUJHTEVTVjJfR0VPTUVUUllfVkVSVEVYREFUQU1BTkFHRVJfSF8KIAotI2luY2x1
ZGUgPGJpdHNldD4KKyNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVkZSA8Y3N0ZGRlZj4KIAogI2Rl
ZmluZSBHTF9BUElDQUxMCkBAIC0yMSw0NCArMjEsMTQ4IEBACiBuYW1lc3BhY2UgZ2wKIHsKIAot
Y2xhc3MgQnVmZmVyOwotY2xhc3MgQnVmZmVyQmFja0VuZDsKLWNsYXNzIFRyYW5zbGF0ZWRWZXJ0
ZXhCdWZmZXI7Ci1zdHJ1Y3QgVHJhbnNsYXRlZEF0dHJpYnV0ZTsKLXN0cnVjdCBGb3JtYXRDb252
ZXJ0ZXI7Ci1zdHJ1Y3QgVHJhbnNsYXRlZEluZGV4RGF0YTsKK3N0cnVjdCBUcmFuc2xhdGVkQXR0
cmlidXRlCit7CisgICAgYm9vbCBhY3RpdmU7CiAKKyAgICBEM0RERUNMVFlQRSB0eXBlOworICAg
IFVJTlQgb2Zmc2V0OworICAgIFVJTlQgc3RyaWRlOyAgIC8vIDAgbWVhbnMgbm90IHRvIGFkdmFu
Y2UgdGhlIHJlYWQgcG9pbnRlciBhdCBhbGwKKyAgICBVSU5UIHNlbWFudGljSW5kZXg7CisKKyAg
ICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICp2ZXJ0ZXhCdWZmZXI7Cit9OworCitjbGFzcyBWZXJ0
ZXhCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIFZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UsIFVJTlQgc2l6ZSwgRFdPUkQgdXNhZ2VGbGFncyk7CisgICAgdmlydHVhbCB+VmVy
dGV4QnVmZmVyKCk7CisKKyAgICB2b2lkIHVubWFwKCk7CisKKyAgICBJRGlyZWN0M0RWZXJ0ZXhC
dWZmZXI5ICpnZXRCdWZmZXIoKSBjb25zdDsKKworICBwcm90ZWN0ZWQ6CisgICAgSURpcmVjdDNE
RGV2aWNlOSAqY29uc3QgbURldmljZTsKKyAgICBJRGlyZWN0M0RWZXJ0ZXhCdWZmZXI5ICptVmVy
dGV4QnVmZmVyOworCisgIHByaXZhdGU6CisgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFZl
cnRleEJ1ZmZlcik7Cit9OworCitjbGFzcyBDb25zdGFudFZlcnRleEJ1ZmZlciA6IHB1YmxpYyBW
ZXJ0ZXhCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIENvbnN0YW50VmVydGV4QnVmZmVyKElEaXJl
Y3QzRERldmljZTkgKmRldmljZSwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeiwgZmxvYXQgdyk7
CisgICAgfkNvbnN0YW50VmVydGV4QnVmZmVyKCk7Cit9OworCitjbGFzcyBBcnJheVZlcnRleEJ1
ZmZlciA6IHB1YmxpYyBWZXJ0ZXhCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIEFycmF5VmVydGV4
QnVmZmVyKElEaXJlY3QzRERldmljZTkgKmRldmljZSwgVUlOVCBzaXplLCBEV09SRCB1c2FnZUZs
YWdzKTsKKyAgICB+QXJyYXlWZXJ0ZXhCdWZmZXIoKTsKKworICAgIFVJTlQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1CdWZmZXJTaXplOyB9CisgICAgdmlydHVhbCB2b2lkICptYXAoY29uc3QgVmVy
dGV4QXR0cmlidXRlICZhdHRyaWJ1dGUsIFVJTlQgcmVxdWlyZWRTcGFjZSwgVUlOVCAqc3RyZWFt
T2Zmc2V0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHJlc2VydmVSZXF1aXJlZFNwYWNlKCkgPSAw
OworICAgIHZvaWQgYWRkUmVxdWlyZWRTcGFjZShVSU5UIHJlcXVpcmVkU3BhY2UpOworICAgIHZv
aWQgYWRkUmVxdWlyZWRTcGFjZUZvcihBcnJheVZlcnRleEJ1ZmZlciAqYnVmZmVyKTsKKworICBw
cm90ZWN0ZWQ6CisgICAgVUlOVCBtQnVmZmVyU2l6ZTsKKyAgICBVSU5UIG1Xcml0ZVBvc2l0aW9u
OworICAgIFVJTlQgbVJlcXVpcmVkU3BhY2U7Cit9OworCitjbGFzcyBTdHJlYW1pbmdWZXJ0ZXhC
dWZmZXIgOiBwdWJsaWMgQXJyYXlWZXJ0ZXhCdWZmZXIKK3sKKyAgcHVibGljOgorICAgIFN0cmVh
bWluZ1ZlcnRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIFVJTlQgaW5pdGlhbFNp
emUpOworICAgIH5TdHJlYW1pbmdWZXJ0ZXhCdWZmZXIoKTsKKworICAgIHZvaWQgKm1hcChjb25z
dCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSwgVUlOVCByZXF1aXJlZFNwYWNlLCBVSU5UICpz
dHJlYW1PZmZzZXQpOworICAgIHZvaWQgcmVzZXJ2ZVJlcXVpcmVkU3BhY2UoKTsKK307CisKK2Ns
YXNzIFN0YXRpY1ZlcnRleEJ1ZmZlciA6IHB1YmxpYyBBcnJheVZlcnRleEJ1ZmZlcgoreworICBw
dWJsaWM6CisgICAgZXhwbGljaXQgU3RhdGljVmVydGV4QnVmZmVyKElEaXJlY3QzRERldmljZTkg
KmRldmljZSk7CisgICAgflN0YXRpY1ZlcnRleEJ1ZmZlcigpOworCisgICAgdm9pZCAqbWFwKGNv
bnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmlidXRlLCBVSU5UIHJlcXVpcmVkU3BhY2UsIFVJTlQg
KnN0cmVhbU9mZnNldCk7CisgICAgdm9pZCByZXNlcnZlUmVxdWlyZWRTcGFjZSgpOworCisgICAg
VUlOVCBsb29rdXBBdHRyaWJ1dGUoY29uc3QgVmVydGV4QXR0cmlidXRlICZhdHRyaWJ1dGUpOyAg
IC8vIFJldHVybnMgdGhlIG9mZnNldCBpbnRvIHRoZSB2ZXJ0ZXggYnVmZmVyLCBvciAtMSBpZiBu
b3QgZm91bmQKKworICBwcml2YXRlOgorICAgIHN0cnVjdCBWZXJ0ZXhFbGVtZW50CisgICAgewor
ICAgICAgICBHTGVudW0gdHlwZTsKKyAgICAgICAgR0xpbnQgc2l6ZTsKKyAgICAgICAgYm9vbCBu
b3JtYWxpemVkOworICAgICAgICBpbnQgYXR0cmlidXRlT2Zmc2V0OworCisgICAgICAgIFVJTlQg
c3RyZWFtT2Zmc2V0OworICAgIH07CisKKyAgICBzdGQ6OnZlY3RvcjxWZXJ0ZXhFbGVtZW50PiBt
Q2FjaGU7Cit9OworCiBjbGFzcyBWZXJ0ZXhEYXRhTWFuYWdlcgogewogICBwdWJsaWM6Ci0gICAg
VmVydGV4RGF0YU1hbmFnZXIoQ29udGV4dCAqY29udGV4dCwgQnVmZmVyQmFja0VuZCAqYmFja2Vu
ZCk7Ci0gICAgflZlcnRleERhdGFNYW5hZ2VyKCk7CisgICAgVmVydGV4RGF0YU1hbmFnZXIoQ29u
dGV4dCAqY29udGV4dCwgSURpcmVjdDNERGV2aWNlOSAqYmFja2VuZCk7CisgICAgdmlydHVhbCB+
VmVydGV4RGF0YU1hbmFnZXIoKTsKIAotICAgIHZvaWQgZGlydHlDdXJyZW50VmFsdWVzKCkgeyBt
RGlydHlDdXJyZW50VmFsdWVzID0gdHJ1ZTsgfQorICAgIHZvaWQgZGlydHlDdXJyZW50VmFsdWUo
aW50IGluZGV4KSB7IG1EaXJ0eUN1cnJlbnRWYWx1ZVtpbmRleF0gPSB0cnVlOyB9CiAKLSAgICBH
TGVudW0gcHJlUmVuZGVyVmFsaWRhdGUoR0xpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdMc2l6ZWkgY291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRy
YW5zbGF0ZWRBdHRyaWJ1dGUgKm91dEF0dHJpYnMpOworICAgIHZvaWQgc2V0dXBBdHRyaWJ1dGVz
KGNvbnN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUgKmF0dHJpYnV0ZXMpOworICAgIEdMZW51bSBwcmVw
YXJlVmVydGV4RGF0YShHTGludCBzdGFydCwgR0xzaXplaSBjb3VudCwgVHJhbnNsYXRlZEF0dHJp
YnV0ZSAqb3V0QXR0cmlicyk7CiAKICAgcHJpdmF0ZToKLSAgICBzdGQ6OmJpdHNldDxNQVhfVkVS
VEVYX0FUVFJJQlM+IGdldEFjdGl2ZUF0dHJpYnMoKSBjb25zdDsKKyAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oVmVydGV4RGF0YU1hbmFnZXIpOwogCi0gICAgdm9pZCBwcm9jZXNzTm9uQXJy
YXlBdHRyaWJ1dGVzKGNvbnN0IEF0dHJpYnV0ZVN0YXRlICphdHRyaWJzLCBjb25zdCBzdGQ6OmJp
dHNldDxNQVhfVkVSVEVYX0FUVFJJQlM+ICZhY3RpdmVBdHRyaWJzLCBUcmFuc2xhdGVkQXR0cmli
dXRlICp0cmFuc2xhdGVkLCBzdGQ6OnNpemVfdCBjb3VudCk7CisgICAgVUlOVCBzcGFjZVJlcXVp
cmVkKGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmYXR0cmliLCBzdGQ6OnNpemVfdCBjb3VudCkgY29u
c3Q7CisgICAgVUlOVCB3cml0ZUF0dHJpYnV0ZURhdGEoQXJyYXlWZXJ0ZXhCdWZmZXIgKnZlcnRl
eEJ1ZmZlciwgR0xpbnQgc3RhcnQsIEdMc2l6ZWkgY291bnQsIGNvbnN0IFZlcnRleEF0dHJpYnV0
ZSAmYXR0cmlidXRlKTsKIAotICAgIHN0ZDo6c2l6ZV90IHR5cGVTaXplKEdMZW51bSB0eXBlKSBj
b25zdDsKLSAgICBzdGQ6OnNpemVfdCBpbnRlcnByZXRHbFN0cmlkZShjb25zdCBBdHRyaWJ1dGVT
dGF0ZSAmYXR0cmliKSBjb25zdDsKKyAgICBDb250ZXh0ICpjb25zdCBtQ29udGV4dDsKKyAgICBJ
RGlyZWN0M0REZXZpY2U5ICpjb25zdCBtRGV2aWNlOwogCi0gICAgc3RkOjpzaXplX3Qgcm91bmRV
cChzdGQ6OnNpemVfdCB4LCBzdGQ6OnNpemVfdCBtdWx0aXBsZSkgY29uc3Q7Ci0gICAgc3RkOjpz
aXplX3Qgc3BhY2VSZXF1aXJlZChjb25zdCBBdHRyaWJ1dGVTdGF0ZSAmYXR0cmliLCBzdGQ6OnNp
emVfdCBtYXhWZXJ0ZXgpIGNvbnN0OworICAgIFN0cmVhbWluZ1ZlcnRleEJ1ZmZlciAqbVN0cmVh
bWluZ0J1ZmZlcjsKIAotICAgIENvbnRleHQgKm1Db250ZXh0OwotICAgIEJ1ZmZlckJhY2tFbmQg
Km1CYWNrZW5kOworICAgIGJvb2wgbURpcnR5Q3VycmVudFZhbHVlW01BWF9WRVJURVhfQVRUUklC
U107CisgICAgQ29uc3RhbnRWZXJ0ZXhCdWZmZXIgKm1DdXJyZW50VmFsdWVCdWZmZXJbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKIAotICAgIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKm1TdHJlYW1CdWZm
ZXI7CisgICAgLy8gQXR0cmlidXRlIGZvcm1hdCBjb252ZXJzaW9uCisgICAgc3RydWN0IEZvcm1h
dENvbnZlcnRlcgorICAgIHsKKyAgICAgICAgYm9vbCBpZGVudGl0eTsKKyAgICAgICAgc3RkOjpz
aXplX3Qgb3V0cHV0RWxlbWVudFNpemU7CisgICAgICAgIHZvaWQgKCpjb252ZXJ0QXJyYXkpKGNv
bnN0IHZvaWQgKmluLCBzdGQ6OnNpemVfdCBzdHJpZGUsIHN0ZDo6c2l6ZV90IG4sIHZvaWQgKm91
dCk7CisgICAgICAgIEQzRERFQ0xUWVBFIGQzZERlY2xUeXBlOworICAgIH07CiAKLSAgICBib29s
IG1EaXJ0eUN1cnJlbnRWYWx1ZXM7Ci0gICAgc3RkOjpzaXplX3QgbUN1cnJlbnRWYWx1ZU9mZnNl
dDsgICAgICAgICAgICAvLyBPZmZzZXQgd2l0aGluIG1DdXJyZW50VmFsdWVCdWZmZXIgdGhhdCB0
aGUgY3VycmVudCBhdHRyaWJ1dGUgdmFsdWVzIHdlcmUgbGFzdCBsb2FkZWQgYXQuCi0gICAgVHJh
bnNsYXRlZFZlcnRleEJ1ZmZlciAqbUN1cnJlbnRWYWx1ZUJ1ZmZlcjsKKyAgICBlbnVtIHsgTlVN
X0dMX1ZFUlRFWF9BVFRSSUJfVFlQRVMgPSA2IH07CisKKyAgICBGb3JtYXRDb252ZXJ0ZXIgbUF0
dHJpYnV0ZVR5cGVzW05VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTXVsyXVs0XTsgICAvLyBbR0wg
dHlwZXMgYXMgZW51bWVyYXRlZCBieSB0eXBlSW5kZXgoKV1bbm9ybWFsaXplZF1bc2l6ZSAtIDFd
CisKKyAgICBzdHJ1Y3QgVHJhbnNsYXRpb25EZXNjcmlwdGlvbgorICAgIHsKKyAgICAgICAgRFdP
UkQgY2Fwc0ZsYWc7CisgICAgICAgIEZvcm1hdENvbnZlcnRlciBwcmVmZXJyZWRDb252ZXJzaW9u
OworICAgICAgICBGb3JtYXRDb252ZXJ0ZXIgZmFsbGJhY2tDb252ZXJzaW9uOworICAgIH07CisK
KyAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8gZ2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVzLgor
ICAgIHN0YXRpYyBjb25zdCBUcmFuc2xhdGlvbkRlc2NyaXB0aW9uIG1Qb3NzaWJsZVRyYW5zbGF0
aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBFU11bMl1bNF07IC8vIFtHTCB0eXBlcyBhcyBl
bnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3JtYWxpemVkXVtzaXplIC0gMV0KKworICAgIHZv
aWQgY2hlY2tWZXJ0ZXhDYXBzKERXT1JEIGRlY2xUeXBlcyk7CisKKyAgICB1bnNpZ25lZCBpbnQg
dHlwZUluZGV4KEdMZW51bSB0eXBlKSBjb25zdDsKKyAgICBjb25zdCBGb3JtYXRDb252ZXJ0ZXIg
JmZvcm1hdENvbnZlcnRlcihjb25zdCBWZXJ0ZXhBdHRyaWJ1dGUgJmF0dHJpYnV0ZSkgY29uc3Q7
CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2dl
b21ldHJ5L2JhY2tlbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5jcHAJKHJldmlzaW9uIDc2MDI1KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSwzOCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LS8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0v
LyBnZW9tZXRyeS9iYWNrZW5kLmg6IEFic3RyYWN0IGNsYXNzZXMgQnVmZmVyQmFja0VuZCwgVHJh
bnNsYXRlZFZlcnRleEJ1ZmZlciBhbmQgVHJhbnNsYXRlZEluZGV4QnVmZmVyCi0vLyB0aGF0IG11
c3QgYmUgaW1wbGVtZW50ZWQgYnkgYW55IEFQSS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBB
TkdMRS4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9nZW9tZXRyeS9iYWNrZW5kLmgiCi0KLSNpbmNs
dWRlICJjb21tb24vZGVidWcuaCIKLQotbmFtZXNwYWNlIGdsCi17Ci0KLXZvaWQgKlRyYW5zbGF0
ZWRCdWZmZXI6Om1hcChzdGQ6OnNpemVfdCByZXF1aXJlZFNwYWNlLCBzdGQ6OnNpemVfdCAqb2Zm
c2V0KQotewotICAgIEFTU0VSVChyZXF1aXJlZFNwYWNlIDw9IG1CdWZmZXJTaXplKTsKLQotICAg
IHJlc2VydmVTcGFjZShyZXF1aXJlZFNwYWNlKTsKLQotICAgICpvZmZzZXQgPSBtQ3VycmVudFBv
aW50OwotICAgIG1DdXJyZW50UG9pbnQgKz0gcmVxdWlyZWRTcGFjZTsKLQotICAgIHJldHVybiBz
dHJlYW1pbmdNYXAoKm9mZnNldCwgcmVxdWlyZWRTcGFjZSk7Ci19Ci0KLXZvaWQgVHJhbnNsYXRl
ZEJ1ZmZlcjo6cmVzZXJ2ZVNwYWNlKHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UpCi17Ci0gICAg
aWYgKG1DdXJyZW50UG9pbnQgKyByZXF1aXJlZFNwYWNlID4gbUJ1ZmZlclNpemUpCi0gICAgewot
ICAgICAgICByZWN5Y2xlKCk7Ci0gICAgICAgIG1DdXJyZW50UG9pbnQgPSAwOwotICAgIH0KLX0K
LQotfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9nZW9tZXRy
eS9keDkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xF
U3YyL2dlb21ldHJ5L2R4OS5oCShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvZHg5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
MTM3ICswLDAgQEAKLS8vCi0vLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQotLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLS8vCi0KLS8vIGdlb21ldHJ5L2R4OS5oOiBEaXJl
Y3QzRCA5LWJhc2VkIGltcGxlbWVudGF0aW9uIG9mIEJ1ZmZlckJhY2tFbmQsIFRyYW5zbGF0ZWRW
ZXJ0ZXhCdWZmZXIgYW5kIFRyYW5zbGF0ZWRJbmRleEJ1ZmZlci4KLQotI2lmbmRlZiBMSUJHTEVT
VjJfR0VPTUVUUllfRFg5X0hfCi0jZGVmaW5lIExJQkdMRVNWMl9HRU9NRVRSWV9EWDlfSF8KLQot
I2luY2x1ZGUgPGQzZDkuaD4KLQotI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKLSNpbmNs
dWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLQot
Y2xhc3MgRHg5QmFja0VuZCA6IHB1YmxpYyBCdWZmZXJCYWNrRW5kCi17Ci0gIHB1YmxpYzoKLSAg
ICBleHBsaWNpdCBEeDlCYWNrRW5kKENvbnRleHQgKmNvbnRleHQsIElEaXJlY3QzRERldmljZTkg
KmQzZGRldmljZSk7Ci0gICAgfkR4OUJhY2tFbmQoKTsKLQotICAgIHZpcnR1YWwgYm9vbCBzdXBw
b3J0SW50SW5kaWNlcygpOwotCi0gICAgdmlydHVhbCBUcmFuc2xhdGVkVmVydGV4QnVmZmVyICpj
cmVhdGVWZXJ0ZXhCdWZmZXIoc3RkOjpzaXplX3Qgc2l6ZSk7Ci0gICAgdmlydHVhbCBUcmFuc2xh
dGVkVmVydGV4QnVmZmVyICpjcmVhdGVWZXJ0ZXhCdWZmZXJGb3JTdHJpZGVaZXJvKHN0ZDo6c2l6
ZV90IHNpemUpOwotICAgIHZpcnR1YWwgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpjcmVhdGVJbmRl
eEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplLCBHTGVudW0gdHlwZSk7Ci0gICAgdmlydHVhbCBGb3Jt
YXRDb252ZXJ0ZXIgZ2V0Rm9ybWF0Q29udmVydGVyKEdMZW51bSB0eXBlLCBzdGQ6OnNpemVfdCBz
aXplLCBib29sIG5vcm1hbGl6ZSk7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGVTdHJlYW0o
R0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHNpemUsIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpz
aXplX3Qgb2Zmc2V0KSBjb25zdDsKLQotICAgIHZpcnR1YWwgR0xlbnVtIHNldHVwSW5kaWNlc1By
ZURyYXcoY29uc3QgVHJhbnNsYXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvKTsKLSAgICB2aXJ0dWFs
IEdMZW51bSBzZXR1cEF0dHJpYnV0ZXNQcmVEcmF3KGNvbnN0IFRyYW5zbGF0ZWRBdHRyaWJ1dGUg
KmF0dHJpYnV0ZXMpOwotCi0gIHByaXZhdGU6Ci0gICAgSURpcmVjdDNERGV2aWNlOSAqbURldmlj
ZTsKLQotICAgIGJvb2wgbVVzZUluc3RhbmNpbmdGb3JTdHJpZGVaZXJvOwotICAgIGJvb2wgbVN1
cHBvcnRJbnRJbmRpY2VzOwotCi0gICAgYm9vbCBtQXBwbGllZEF0dHJpYkVuYWJsZWRbTUFYX1ZF
UlRFWF9BVFRSSUJTXTsKLQotICAgIGVudW0gU3RyZWFtRnJlcXVlbmN5Ci0gICAgewotICAgICAg
ICBTVFJFQU1fRlJFUVVFTkNZX1VOSU5TVEFOQ0VEID0gMCwKLSAgICAgICAgU1RSRUFNX0ZSRVFV
RU5DWV9JTkRFWEVELAotICAgICAgICBTVFJFQU1fRlJFUVVFTkNZX0lOU1RBTkNFRAotICAgIH07
Ci0KLSAgICBTdHJlYW1GcmVxdWVuY3kgbVN0cmVhbUZyZXF1ZW5jeVtNQVhfVkVSVEVYX0FUVFJJ
QlMrMV07Ci0KLSAgICBzdHJ1Y3QgVHJhbnNsYXRpb25JbmZvCi0gICAgewotICAgICAgICBGb3Jt
YXRDb252ZXJ0ZXIgZm9ybWF0Q29udmVydGVyOwotICAgICAgICBEM0RERUNMVFlQRSBkM2REZWNs
VHlwZTsKLSAgICB9OwotCi0gICAgZW51bSB7IE5VTV9HTF9WRVJURVhfQVRUUklCX1RZUEVTID0g
NiB9OwotCi0gICAgVHJhbnNsYXRpb25JbmZvIG1BdHRyaWJ1dGVUeXBlc1tOVU1fR0xfVkVSVEVY
X0FUVFJJQl9UWVBFU11bMl1bNF07IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJ
bmRleCgpXVtub3JtYWxpemVkXVtzaXplLTFdCi0KLSAgICBzdHJ1Y3QgVHJhbnNsYXRpb25EZXNj
cmlwdGlvbgotICAgIHsKLSAgICAgICAgRFdPUkQgY2Fwc0ZsYWc7Ci0gICAgICAgIFRyYW5zbGF0
aW9uSW5mbyBwcmVmZXJyZWRDb252ZXJzaW9uOwotICAgICAgICBUcmFuc2xhdGlvbkluZm8gZmFs
bGJhY2tDb252ZXJzaW9uOwotICAgIH07Ci0KLSAgICAvLyBUaGlzIHRhYmxlIGlzIHVzZWQgdG8g
Z2VuZXJhdGUgbUF0dHJpYnV0ZVR5cGVzLgotICAgIHN0YXRpYyBjb25zdCBUcmFuc2xhdGlvbkRl
c2NyaXB0aW9uIG1Qb3NzaWJsZVRyYW5zbGF0aW9uc1tOVU1fR0xfVkVSVEVYX0FUVFJJQl9UWVBF
U11bMl1bNF07IC8vIFtHTCB0eXBlcyBhcyBlbnVtZXJhdGVkIGJ5IHR5cGVJbmRleCgpXVtub3Jt
YWxpemVkXVtzaXplLTFdCi0KLSAgICB2b2lkIGNoZWNrVmVydGV4Q2FwcyhEV09SRCBkZWNsVHlw
ZXMpOwotCi0gICAgdW5zaWduZWQgaW50IHR5cGVJbmRleChHTGVudW0gdHlwZSkgY29uc3Q7Ci0K
LSAgICBjbGFzcyBEeDlWZXJ0ZXhCdWZmZXIgOiBwdWJsaWMgVHJhbnNsYXRlZFZlcnRleEJ1ZmZl
cgotICAgIHsKLSAgICAgIHB1YmxpYzoKLSAgICAgICAgRHg5VmVydGV4QnVmZmVyKElEaXJlY3Qz
RERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSk7Ci0gICAgICAgIHZpcnR1YWwgfkR4
OVZlcnRleEJ1ZmZlcigpOwotCi0gICAgICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKmdldEJ1
ZmZlcigpIGNvbnN0OwotCi0gICAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIER4OVZlcnRleEJ1ZmZl
cihJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UsIHN0ZDo6c2l6ZV90IHNpemUsIERXT1JEIHVzYWdl
RmxhZ3MpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCAqbWFwKCk7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCB1bm1hcCgpOwotCi0gICAgICAgIHZpcnR1YWwgdm9pZCByZWN5Y2xlKCk7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCAqc3RyZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9mZnNldCwgc3RkOjpzaXpl
X3Qgc2l6ZSk7Ci0KLSAgICAgIHByaXZhdGU6Ci0gICAgICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZl
cjkgKm1WZXJ0ZXhCdWZmZXI7Ci0gICAgfTsKLQotICAgIGNsYXNzIER4OVZlcnRleEJ1ZmZlclpl
cm9TdHJpZGVXb3JrYXJvdW5kIDogcHVibGljIER4OVZlcnRleEJ1ZmZlcgotICAgIHsKLSAgICAg
IHB1YmxpYzoKLSAgICAgICAgRHg5VmVydGV4QnVmZmVyWmVyb1N0cmlkZVdvcmthcm91bmQoSURp
cmVjdDNERGV2aWNlOSAqZGV2aWNlLCBzdGQ6OnNpemVfdCBzaXplKTsKLQotICAgICAgcHJvdGVj
dGVkOgotICAgICAgICB2aXJ0dWFsIHZvaWQgcmVjeWNsZSgpOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgKnN0cmVhbWluZ01hcChzdGQ6OnNpemVfdCBvZmZzZXQsIHN0ZDo6c2l6ZV90IHNpemUpOwot
ICAgIH07Ci0KLSAgICBjbGFzcyBEeDlJbmRleEJ1ZmZlciA6IHB1YmxpYyBUcmFuc2xhdGVkSW5k
ZXhCdWZmZXIKLSAgICB7Ci0gICAgICBwdWJsaWM6Ci0gICAgICAgIER4OUluZGV4QnVmZmVyKElE
aXJlY3QzRERldmljZTkgKmRldmljZSwgc3RkOjpzaXplX3Qgc2l6ZSwgR0xlbnVtIHR5cGUpOwot
ICAgICAgICB2aXJ0dWFsIH5EeDlJbmRleEJ1ZmZlcigpOwotCi0gICAgICAgIElEaXJlY3QzRElu
ZGV4QnVmZmVyOSAqZ2V0QnVmZmVyKCkgY29uc3Q7Ci0KLSAgICAgIHByb3RlY3RlZDoKLSAgICAg
ICAgdmlydHVhbCB2b2lkICptYXAoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkIHVubWFwKCk7Ci0K
LSAgICAgICAgdmlydHVhbCB2b2lkIHJlY3ljbGUoKTsKLSAgICAgICAgdmlydHVhbCB2b2lkICpz
dHJlYW1pbmdNYXAoc3RkOjpzaXplX3Qgb2Zmc2V0LCBzdGQ6OnNpemVfdCBzaXplKTsKLQotICAg
ICAgcHJpdmF0ZToKLSAgICAgICAgSURpcmVjdDNESW5kZXhCdWZmZXI5ICptSW5kZXhCdWZmZXI7
Ci0gICAgfTsKLQotICAgIElEaXJlY3QzRFZlcnRleEJ1ZmZlcjkgKmdldER4QnVmZmVyKFRyYW5z
bGF0ZWRWZXJ0ZXhCdWZmZXIgKnZiKSBjb25zdDsKLSAgICBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkg
KmdldER4QnVmZmVyKFRyYW5zbGF0ZWRJbmRleEJ1ZmZlciAqaWIpIGNvbnN0OwotCi0gICAgRDNE
REVDTFRZUEUgbWFwQXR0cmlidXRlVHlwZShHTGVudW0gdHlwZSwgc3RkOjpzaXplX3Qgc2l6ZSwg
Ym9vbCBub3JtYWxpemVkKSBjb25zdDsKLX07Ci0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1Yy
X0dFT01FVFJZX0RYOV9IXwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2dlb21ldHJ5L0luZGV4RGF0YU1hbmFnZXIu
Y3BwCShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
LDcgKzEzLDcgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvbWF0aHV0aWwuaCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvYmFja2Vu
ZC5oIgorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCiAKIG5hbWVzcGFjZQogewpAQCAtMjMs
MjM5ICsyMywzNjAgQEAKIG5hbWVzcGFjZSBnbAogewogCi1JbmRleERhdGFNYW5hZ2VyOjpJbmRl
eERhdGFNYW5hZ2VyKENvbnRleHQgKmNvbnRleHQsIEJ1ZmZlckJhY2tFbmQgKmJhY2tlbmQpCi0g
IDogbUNvbnRleHQoY29udGV4dCksIG1CYWNrZW5kKGJhY2tlbmQpLCBtSW50SW5kaWNlc1N1cHBv
cnRlZChiYWNrZW5kLT5zdXBwb3J0SW50SW5kaWNlcygpKQorSW5kZXhEYXRhTWFuYWdlcjo6SW5k
ZXhEYXRhTWFuYWdlcihDb250ZXh0ICpjb250ZXh0LCBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2Up
IDogbURldmljZShkZXZpY2UpCiB7Ci0gICAgbUNvdW50aW5nQnVmZmVyID0gTlVMTDsKLSAgICBt
Q291bnRpbmdCdWZmZXJTaXplID0gMDsKKyAgICBtU3RyZWFtaW5nQnVmZmVyU2hvcnQgPSBuZXcg
U3RyZWFtaW5nSW5kZXhCdWZmZXIobURldmljZSwgSU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwg
RDNERk1UX0lOREVYMTYpOwogCi0gICAgbUxpbmVMb29wQnVmZmVyID0gTlVMTDsKLQotICAgIG1T
dHJlYW1CdWZmZXJTaG9ydCA9IG1CYWNrZW5kLT5jcmVhdGVJbmRleEJ1ZmZlcihJTklUSUFMX0lO
REVYX0JVRkZFUl9TSVpFLCBHTF9VTlNJR05FRF9TSE9SVCk7Ci0KLSAgICBpZiAobUludEluZGlj
ZXNTdXBwb3J0ZWQpCisgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzMzJiaXRJbmRpY2VzKCkpCiAg
ICAgewotICAgICAgICBtU3RyZWFtQnVmZmVySW50ID0gbUJhY2tlbmQtPmNyZWF0ZUluZGV4QnVm
ZmVyKElOSVRJQUxfSU5ERVhfQlVGRkVSX1NJWkUsIEdMX1VOU0lHTkVEX0lOVCk7CisgICAgICAg
IG1TdHJlYW1pbmdCdWZmZXJJbnQgPSBuZXcgU3RyZWFtaW5nSW5kZXhCdWZmZXIobURldmljZSwg
SU5JVElBTF9JTkRFWF9CVUZGRVJfU0laRSwgRDNERk1UX0lOREVYMzIpOwogICAgIH0KICAgICBl
bHNlCiAgICAgewotICAgICAgICBtU3RyZWFtQnVmZmVySW50ID0gTlVMTDsKKyAgICAgICAgbVN0
cmVhbWluZ0J1ZmZlckludCA9IE5VTEw7CiAgICAgfQogfQogCiBJbmRleERhdGFNYW5hZ2VyOjp+
SW5kZXhEYXRhTWFuYWdlcigpCiB7Ci0gICAgZGVsZXRlIG1TdHJlYW1CdWZmZXJTaG9ydDsKLSAg
ICBkZWxldGUgbVN0cmVhbUJ1ZmZlckludDsKLSAgICBkZWxldGUgbUNvdW50aW5nQnVmZmVyOwot
ICAgIGRlbGV0ZSBtTGluZUxvb3BCdWZmZXI7CisgICAgZGVsZXRlIG1TdHJlYW1pbmdCdWZmZXJT
aG9ydDsKKyAgICBkZWxldGUgbVN0cmVhbWluZ0J1ZmZlckludDsKIH0KIAotbmFtZXNwYWNlCit2
b2lkIGNvbnZlcnRJbmRpY2VzKEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbnB1dCwgR0xzaXpl
aSBjb3VudCwgdm9pZCAqb3V0cHV0KQogeworICAgIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0JZ
VEUpCisgICAgeworICAgICAgICBjb25zdCBHTHVieXRlICppbiA9IHN0YXRpY19jYXN0PGNvbnN0
IEdMdWJ5dGUqPihpbnB1dCk7CisgICAgICAgIEdMdXNob3J0ICpvdXQgPSBzdGF0aWNfY2FzdDxH
THVzaG9ydCo+KG91dHB1dCk7CiAKLXRlbXBsYXRlIDxjbGFzcyBJbnB1dEluZGV4VHlwZSwgY2xh
c3MgT3V0cHV0SW5kZXhUeXBlPgotdm9pZCBjb3B5SW5kaWNlcyhjb25zdCBJbnB1dEluZGV4VHlw
ZSAqaW4sIEdMc2l6ZWkgY291bnQsIE91dHB1dEluZGV4VHlwZSAqb3V0LCBHTHVpbnQgKm1pbklu
ZGV4LCBHTHVpbnQgKm1heEluZGV4KQorICAgICAgICBmb3IgKEdMc2l6ZWkgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBvdXRbaV0gPSBpbltpXTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IEdMX1VOU0lHTkVEX0lOVCkKKyAgICB7
CisgICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIHNpemVvZihHTHVpbnQpKTsK
KyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9TSE9SVCkKKyAgICB7Cisg
ICAgICAgIG1lbWNweShvdXRwdXQsIGlucHV0LCBjb3VudCAqIHNpemVvZihHTHVzaG9ydCkpOwor
ICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBJbmRl
eFR5cGU+Cit2b2lkIGNvbXB1dGVSYW5nZShjb25zdCBJbmRleFR5cGUgKmluZGljZXMsIEdMc2l6
ZWkgY291bnQsIEdMdWludCAqbWluSW5kZXgsIEdMdWludCAqbWF4SW5kZXgpCiB7Ci0gICAgSW5w
dXRJbmRleFR5cGUgZmlyc3QgPSAqaW47Ci0gICAgR0x1aW50IG1pbkluZGV4U29GYXIgPSBmaXJz
dDsKLSAgICBHTHVpbnQgbWF4SW5kZXhTb0ZhciA9IGZpcnN0OworICAgICptaW5JbmRleCA9IGlu
ZGljZXNbMF07CisgICAgKm1heEluZGV4ID0gaW5kaWNlc1swXTsKIAogICAgIGZvciAoR0xzaXpl
aSBpID0gMDsgaSA8IGNvdW50OyBpKyspCiAgICAgewotICAgICAgICBpZiAobWluSW5kZXhTb0Zh
ciA+ICppbikgbWluSW5kZXhTb0ZhciA9ICppbjsKLSAgICAgICAgaWYgKG1heEluZGV4U29GYXIg
PCAqaW4pIG1heEluZGV4U29GYXIgPSAqaW47Ci0KLSAgICAgICAgKm91dCsrID0gKmluKys7Cisg
ICAgICAgIGlmICgqbWluSW5kZXggPiBpbmRpY2VzW2ldKSAqbWluSW5kZXggPSBpbmRpY2VzW2ld
OworICAgICAgICBpZiAoKm1heEluZGV4IDwgaW5kaWNlc1tpXSkgKm1heEluZGV4ID0gaW5kaWNl
c1tpXTsKICAgICB9Ci0KLSAgICAvLyBJdCBtaWdodCBiZSBhIGxpbmUgbG9vcCwgc28gY29weSB0
aGUgbG9vcCBpbmRleC4KLSAgICAqb3V0ID0gZmlyc3Q7Ci0KLSAgICAqbWluSW5kZXggPSBtaW5J
bmRleFNvRmFyOwotICAgICptYXhJbmRleCA9IG1heEluZGV4U29GYXI7CiB9CiAKK3ZvaWQgY29t
cHV0ZVJhbmdlKEdMZW51bSB0eXBlLCBjb25zdCB2b2lkICppbmRpY2VzLCBHTHNpemVpIGNvdW50
LCBHTHVpbnQgKm1pbkluZGV4LCBHTHVpbnQgKm1heEluZGV4KQoreworICAgIGlmICh0eXBlID09
IEdMX1VOU0lHTkVEX0JZVEUpCisgICAgeworICAgICAgICBjb21wdXRlUmFuZ2Uoc3RhdGljX2Nh
c3Q8Y29uc3QgR0x1Ynl0ZSo+KGluZGljZXMpLCBjb3VudCwgbWluSW5kZXgsIG1heEluZGV4KTsK
KyAgICB9CisgICAgZWxzZSBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpCisgICAgeworICAg
ICAgICBjb21wdXRlUmFuZ2Uoc3RhdGljX2Nhc3Q8Y29uc3QgR0x1aW50Kj4oaW5kaWNlcyksIGNv
dW50LCBtaW5JbmRleCwgbWF4SW5kZXgpOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09IEdM
X1VOU0lHTkVEX1NIT1JUKQorICAgIHsKKyAgICAgICAgY29tcHV0ZVJhbmdlKHN0YXRpY19jYXN0
PGNvbnN0IEdMdXNob3J0Kj4oaW5kaWNlcyksIGNvdW50LCBtaW5JbmRleCwgbWF4SW5kZXgpOwor
ICAgIH0KKyAgICBlbHNlIFVOUkVBQ0hBQkxFKCk7CiB9CiAKLUdMZW51bSBJbmRleERhdGFNYW5h
Z2VyOjpwcmVSZW5kZXJWYWxpZGF0ZShHTGVudW0gbW9kZSwgR0xlbnVtIHR5cGUsIEdMc2l6ZWkg
Y291bnQsIEJ1ZmZlciAqYXJyYXlFbGVtZW50QnVmZmVyLCBjb25zdCB2b2lkICppbmRpY2VzLCBU
cmFuc2xhdGVkSW5kZXhEYXRhICp0cmFuc2xhdGVkKQorR0xlbnVtIEluZGV4RGF0YU1hbmFnZXI6
OnByZXBhcmVJbmRleERhdGEoR0xlbnVtIHR5cGUsIEdMc2l6ZWkgY291bnQsIEJ1ZmZlciAqYnVm
ZmVyLCBjb25zdCB2b2lkICppbmRpY2VzLCBUcmFuc2xhdGVkSW5kZXhEYXRhICp0cmFuc2xhdGVk
KQogewotICAgIEFTU0VSVCh0eXBlID09IEdMX1VOU0lHTkVEX1NIT1JUIHx8IHR5cGUgPT0gR0xf
VU5TSUdORURfQllURSB8fCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVCk7Ci0gICAgQVNTRVJUKGNv
dW50ID4gMCk7CisgICAgRDNERk9STUFUIGZvcm1hdCA9ICh0eXBlID09IEdMX1VOU0lHTkVEX0lO
VCkgPyBEM0RGTVRfSU5ERVgzMiA6IEQzREZNVF9JTkRFWDE2OworICAgIGludHB0cl90IG9mZnNl
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluZGljZXMpOworICAgIGJvb2wgYWxpZ25l
ZE9mZnNldCA9IGZhbHNlOwogCi0gICAgaWYgKGFycmF5RWxlbWVudEJ1ZmZlciAhPSBOVUxMKQor
ICAgIGlmIChidWZmZXIgIT0gTlVMTCkKICAgICB7Ci0gICAgICAgIEdMc2l6ZWkgb2Zmc2V0ID0g
cmVpbnRlcnByZXRfY2FzdDxHTHNpemVpPihpbmRpY2VzKTsKKyAgICAgICAgc3dpdGNoICh0eXBl
KQorICAgICAgICB7CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9CWVRFOiAgYWxpZ25lZE9m
ZnNldCA9IChvZmZzZXQgJSBzaXplb2YoR0x1Ynl0ZSkgPT0gMCk7ICBicmVhazsKKyAgICAgICAg
ICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUOiBhbGlnbmVkT2Zmc2V0ID0gKG9mZnNldCAlIHNpemVv
ZihHTHVzaG9ydCkgPT0gMCk7IGJyZWFrOworICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5U
OiAgIGFsaWduZWRPZmZzZXQgPSAob2Zmc2V0ICUgc2l6ZW9mKEdMdWludCkgPT0gMCk7ICAgYnJl
YWs7CisgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsgYWxpZ25lZE9mZnNldCA9IGZh
bHNlOworICAgICAgICB9CiAKLSAgICAgICAgaWYgKHR5cGVTaXplKHR5cGUpICogY291bnQgKyBv
ZmZzZXQgPiBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oYXJyYXlFbGVtZW50QnVmZmVyLT5zaXpl
KCkpKQorICAgICAgICBpZiAodHlwZVNpemUodHlwZSkgKiBjb3VudCArIG9mZnNldCA+IHN0YXRp
Y19jYXN0PHN0ZDo6c2l6ZV90PihidWZmZXItPnNpemUoKSkpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBHTF9JTlZBTElEX09QRVJBVElPTjsKICAgICAgICAgfQogCi0gICAgICAgIGlu
ZGljZXMgPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVieXRlKj4oYXJyYXlFbGVtZW50QnVmZmVyLT5k
YXRhKCkpICsgb2Zmc2V0OworICAgICAgICBpbmRpY2VzID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1
Ynl0ZSo+KGJ1ZmZlci0+ZGF0YSgpKSArIG9mZnNldDsKICAgICB9CiAKLSAgICB0cmFuc2xhdGVk
LT5jb3VudCA9IGNvdW50OworICAgIFN0cmVhbWluZ0luZGV4QnVmZmVyICpzdHJlYW1pbmdCdWZm
ZXIgPSAodHlwZSA9PSBHTF9VTlNJR05FRF9JTlQpID8gbVN0cmVhbWluZ0J1ZmZlckludCA6IG1T
dHJlYW1pbmdCdWZmZXJTaG9ydDsKIAotICAgIHN0ZDo6c2l6ZV90IHJlcXVpcmVkU3BhY2UgPSBz
cGFjZVJlcXVpcmVkKHR5cGUsIGNvdW50KTsKKyAgICBTdGF0aWNJbmRleEJ1ZmZlciAqc3RhdGlj
QnVmZmVyID0gYnVmZmVyID8gYnVmZmVyLT5nZXRJbmRleEJ1ZmZlcigpIDogTlVMTDsKKyAgICBJ
bmRleEJ1ZmZlciAqaW5kZXhCdWZmZXIgPSBzdHJlYW1pbmdCdWZmZXI7CisgICAgVUlOVCBzdHJl
YW1PZmZzZXQgPSAwOwogCi0gICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpzdHJlYW1JYiA9IHBy
ZXBhcmVJbmRleEJ1ZmZlcih0eXBlLCByZXF1aXJlZFNwYWNlKTsKLQotICAgIHNpemVfdCBvZmZz
ZXQ7Ci0gICAgdm9pZCAqb3V0cHV0ID0gc3RyZWFtSWItPm1hcChyZXF1aXJlZFNwYWNlLCAmb2Zm
c2V0KTsKLQotICAgIHRyYW5zbGF0ZWQtPmJ1ZmZlciA9IHN0cmVhbUliOwotICAgIHRyYW5zbGF0
ZWQtPm9mZnNldCA9IG9mZnNldDsKLSAgICB0cmFuc2xhdGVkLT5pbmRleFNpemUgPSBpbmRleFNp
emUodHlwZSk7Ci0KLSAgICBpZiAodHlwZSA9PSBHTF9VTlNJR05FRF9CWVRFKQorICAgIGlmIChz
dGF0aWNCdWZmZXIgJiYgc3RhdGljQnVmZmVyLT5sb29rdXBUeXBlKHR5cGUpICYmIGFsaWduZWRP
ZmZzZXQpCiAgICAgewotICAgICAgICBjb25zdCBHTHVieXRlICppbiA9IHN0YXRpY19jYXN0PGNv
bnN0IEdMdWJ5dGUqPihpbmRpY2VzKTsKLSAgICAgICAgR0x1c2hvcnQgKm91dCA9IHN0YXRpY19j
YXN0PEdMdXNob3J0Kj4ob3V0cHV0KTsKKyAgICAgICAgaW5kZXhCdWZmZXIgPSBzdGF0aWNCdWZm
ZXI7CisgICAgICAgIHN0cmVhbU9mZnNldCA9IHN0YXRpY0J1ZmZlci0+bG9va3VwUmFuZ2Uob2Zm
c2V0LCBjb3VudCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJhbnNsYXRlZC0+bWF4SW5kZXgp
OwogCi0gICAgICAgIGNvcHlJbmRpY2VzKGluLCBjb3VudCwgb3V0LCAmdHJhbnNsYXRlZC0+bWlu
SW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7CisgICAgICAgIGlmIChzdHJlYW1PZmZzZXQg
PT0gLTEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cmVhbU9mZnNldCA9IChvZmZzZXQgLyB0
eXBlU2l6ZSh0eXBlKSkgKiBpbmRleFNpemUoZm9ybWF0KTsKKyAgICAgICAgICAgIGNvbXB1dGVS
YW5nZSh0eXBlLCBpbmRpY2VzLCBjb3VudCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJhbnNs
YXRlZC0+bWF4SW5kZXgpOworICAgICAgICAgICAgc3RhdGljQnVmZmVyLT5hZGRSYW5nZShvZmZz
ZXQsIGNvdW50LCB0cmFuc2xhdGVkLT5taW5JbmRleCwgdHJhbnNsYXRlZC0+bWF4SW5kZXgsIHN0
cmVhbU9mZnNldCk7CisgICAgICAgIH0KICAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSBHTF9V
TlNJR05FRF9JTlQpCisgICAgZWxzZQogICAgIHsKLSAgICAgICAgY29uc3QgR0x1aW50ICppbiA9
IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMpOworICAgICAgICBpbnQgY29udmVy
dENvdW50ID0gY291bnQ7CiAKLSAgICAgICAgaWYgKG1JbnRJbmRpY2VzU3VwcG9ydGVkKQorICAg
ICAgICBpZiAoc3RhdGljQnVmZmVyKQogICAgICAgICB7Ci0gICAgICAgICAgICBHTHVpbnQgKm91
dCA9IHN0YXRpY19jYXN0PEdMdWludCo+KG91dHB1dCk7CisgICAgICAgICAgICBpZiAoc3RhdGlj
QnVmZmVyLT5zaXplKCkgPT0gMCAmJiBhbGlnbmVkT2Zmc2V0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGluZGV4QnVmZmVyID0gc3RhdGljQnVmZmVyOworICAgICAgICAgICAgICAg
IGNvbnZlcnRDb3VudCA9IGJ1ZmZlci0+c2l6ZSgpIC8gdHlwZVNpemUodHlwZSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
YnVmZmVyLT5pbnZhbGlkYXRlU3RhdGljRGF0YSgpOworICAgICAgICAgICAgICAgIHN0YXRpY0J1
ZmZlciA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAotICAgICAgICAgICAgY29w
eUluZGljZXMoaW4sIGNvdW50LCBvdXQsICZ0cmFuc2xhdGVkLT5taW5JbmRleCwgJnRyYW5zbGF0
ZWQtPm1heEluZGV4KTsKKyAgICAgICAgdm9pZCAqb3V0cHV0ID0gTlVMTDsKKyAgICAgICAgCisg
ICAgICAgIGlmIChpbmRleEJ1ZmZlcikKKyAgICAgICAgeworICAgICAgICAgICAgaW5kZXhCdWZm
ZXItPnJlc2VydmVTcGFjZShjb252ZXJ0Q291bnQgKiBpbmRleFNpemUoZm9ybWF0KSwgdHlwZSk7
CisgICAgICAgICAgICBvdXRwdXQgPSBpbmRleEJ1ZmZlci0+bWFwKGluZGV4U2l6ZShmb3JtYXQp
ICogY29udmVydENvdW50LCAmc3RyZWFtT2Zmc2V0KTsKICAgICAgICAgfQotICAgICAgICBlbHNl
CisgICAgICAgIAorICAgICAgICBpZiAob3V0cHV0ID09IE5VTEwpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIC8vIFdoZW4gMzItYml0IGluZGljZXMgYXJlIHVuc3VwcG9ydGVkLCBmYWtlIHRoZW0g
YnkgdHJ1bmNhdGluZyB0byAxNi1iaXQuCisgICAgICAgICAgICBFUlIoIkZhaWxlZCB0byBtYXAg
aW5kZXggYnVmZmVyLiIpOworICAgICAgICAgICAgcmV0dXJuIEdMX09VVF9PRl9NRU1PUlk7Cisg
ICAgICAgIH0KIAotICAgICAgICAgICAgR0x1c2hvcnQgKm91dCA9IHN0YXRpY19jYXN0PEdMdXNo
b3J0Kj4ob3V0cHV0KTsKKyAgICAgICAgY29udmVydEluZGljZXModHlwZSwgc3RhdGljQnVmZmVy
ID8gYnVmZmVyLT5kYXRhKCkgOiBpbmRpY2VzLCBjb252ZXJ0Q291bnQsIG91dHB1dCk7CisgICAg
ICAgIGluZGV4QnVmZmVyLT51bm1hcCgpOwogCi0gICAgICAgICAgICBjb3B5SW5kaWNlcyhpbiwg
Y291bnQsIG91dCwgJnRyYW5zbGF0ZWQtPm1pbkluZGV4LCAmdHJhbnNsYXRlZC0+bWF4SW5kZXgp
OworICAgICAgICBjb21wdXRlUmFuZ2UodHlwZSwgaW5kaWNlcywgY291bnQsICZ0cmFuc2xhdGVk
LT5taW5JbmRleCwgJnRyYW5zbGF0ZWQtPm1heEluZGV4KTsKKworICAgICAgICBpZiAoc3RhdGlj
QnVmZmVyKQorICAgICAgICB7CisgICAgICAgICAgICBzdHJlYW1PZmZzZXQgPSAob2Zmc2V0IC8g
dHlwZVNpemUodHlwZSkpICogaW5kZXhTaXplKGZvcm1hdCk7CisgICAgICAgICAgICBzdGF0aWNC
dWZmZXItPmFkZFJhbmdlKG9mZnNldCwgY291bnQsIHRyYW5zbGF0ZWQtPm1pbkluZGV4LCB0cmFu
c2xhdGVkLT5tYXhJbmRleCwgc3RyZWFtT2Zmc2V0KTsKICAgICAgICAgfQogICAgIH0KLSAgICBl
bHNlCi0gICAgewotICAgICAgICBjb25zdCBHTHVzaG9ydCAqaW4gPSBzdGF0aWNfY2FzdDxjb25z
dCBHTHVzaG9ydCo+KGluZGljZXMpOwotICAgICAgICBHTHVzaG9ydCAqb3V0ID0gc3RhdGljX2Nh
c3Q8R0x1c2hvcnQqPihvdXRwdXQpOwogCi0gICAgICAgIGNvcHlJbmRpY2VzKGluLCBjb3VudCwg
b3V0LCAmdHJhbnNsYXRlZC0+bWluSW5kZXgsICZ0cmFuc2xhdGVkLT5tYXhJbmRleCk7Ci0gICAg
fQorICAgIHRyYW5zbGF0ZWQtPmluZGV4QnVmZmVyID0gaW5kZXhCdWZmZXItPmdldEJ1ZmZlcigp
OworICAgIHRyYW5zbGF0ZWQtPnN0YXJ0SW5kZXggPSBzdHJlYW1PZmZzZXQgLyBpbmRleFNpemUo
Zm9ybWF0KTsKIAotICAgIHN0cmVhbUliLT51bm1hcCgpOwotCiAgICAgcmV0dXJuIEdMX05PX0VS
Uk9SOwogfQogCi1zdGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjppbmRleFNpemUoR0xlbnVt
IHR5cGUpIGNvbnN0CitzdGQ6OnNpemVfdCBJbmRleERhdGFNYW5hZ2VyOjppbmRleFNpemUoRDNE
Rk9STUFUIGZvcm1hdCkgY29uc3QKIHsKLSAgICByZXR1cm4gKHR5cGUgPT0gR0xfVU5TSUdORURf
SU5UICYmIG1JbnRJbmRpY2VzU3VwcG9ydGVkKSA/IHNpemVvZihHTHVpbnQpIDogc2l6ZW9mKEdM
dXNob3J0KTsKKyAgICByZXR1cm4gKGZvcm1hdCA9PSBEM0RGTVRfSU5ERVgzMikgPyBzaXplb2Yo
dW5zaWduZWQgaW50KSA6IHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CiB9CiAKIHN0ZDo6c2l6ZV90
IEluZGV4RGF0YU1hbmFnZXI6OnR5cGVTaXplKEdMZW51bSB0eXBlKSBjb25zdAogewogICAgIHN3
aXRjaCAodHlwZSkKICAgICB7Ci0gICAgICBjYXNlIEdMX1VOU0lHTkVEX0lOVDogcmV0dXJuIHNp
emVvZihHTHVpbnQpOworICAgICAgY2FzZSBHTF9VTlNJR05FRF9JTlQ6ICAgcmV0dXJuIHNpemVv
ZihHTHVpbnQpOwogICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIHNpemVvZihH
THVzaG9ydCk7Ci0gICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwotICAgICAgY2FzZSBHTF9V
TlNJR05FRF9CWVRFOiByZXR1cm4gc2l6ZW9mKEdMdWJ5dGUpOworICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9CWVRFOiAgcmV0dXJuIHNpemVvZihHTHVieXRlKTsKKyAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7IHJldHVybiBzaXplb2YoR0x1c2hvcnQpOwogICAgIH0KIH0KIAotc3RkOjpzaXpl
X3QgSW5kZXhEYXRhTWFuYWdlcjo6c3BhY2VSZXF1aXJlZChHTGVudW0gdHlwZSwgR0xzaXplaSBj
b3VudCkgY29uc3QKK0luZGV4QnVmZmVyOjpJbmRleEJ1ZmZlcihJRGlyZWN0M0REZXZpY2U5ICpk
ZXZpY2UsIFVJTlQgc2l6ZSwgRDNERk9STUFUIGZvcm1hdCkgOiBtRGV2aWNlKGRldmljZSksIG1C
dWZmZXJTaXplKHNpemUpLCBtSW5kZXhCdWZmZXIoTlVMTCkKIHsKLSAgICByZXR1cm4gKGNvdW50
ICsgMSkgKiBpbmRleFNpemUodHlwZSk7IC8vICsxIGJlY2F1c2Ugd2UgYWx3YXlzIGxlYXZlIGFu
IGV4dHJhIGZvciBsaW5lIGxvb3BzCisgICAgaWYgKHNpemUgPiAwKQorICAgIHsKKyAgICAgICAg
RDNEUE9PTCBwb29sID0gZ2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKEQzRFVTQUdFX0RZTkFN
SUMgfCBEM0RVU0FHRV9XUklURU9OTFkpOworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlSW5kZXhCdWZmZXIoc2l6ZSwgRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dS
SVRFT05MWSwgZm9ybWF0LCBwb29sLCAmbUluZGV4QnVmZmVyLCBOVUxMKTsKKworICAgICAgICBp
ZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiT3V0IG9mIG1l
bW9yeSBhbGxvY2F0aW5nIGFuIGluZGV4IGJ1ZmZlciBvZiBzaXplICVsdS4iLCBzaXplKTsKKyAg
ICAgICAgfQorICAgIH0KIH0KIAotVHJhbnNsYXRlZEluZGV4QnVmZmVyICpJbmRleERhdGFNYW5h
Z2VyOjpwcmVwYXJlSW5kZXhCdWZmZXIoR0xlbnVtIHR5cGUsIHN0ZDo6c2l6ZV90IHJlcXVpcmVk
U3BhY2UpCitJbmRleEJ1ZmZlcjo6fkluZGV4QnVmZmVyKCkKIHsKLSAgICBib29sIHVzZTMyID0g
KHR5cGUgPT0gR0xfVU5TSUdORURfSU5UICYmIG1JbnRJbmRpY2VzU3VwcG9ydGVkKTsKKyAgICBp
ZiAobUluZGV4QnVmZmVyKQorICAgIHsKKyAgICAgICAgbUluZGV4QnVmZmVyLT5SZWxlYXNlKCk7
CisgICAgfQorfQogCi0gICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpzdHJlYW1JYiA9IHVzZTMy
ID8gbVN0cmVhbUJ1ZmZlckludCA6IG1TdHJlYW1CdWZmZXJTaG9ydDsKK0lEaXJlY3QzREluZGV4
QnVmZmVyOSAqSW5kZXhCdWZmZXI6OmdldEJ1ZmZlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1J
bmRleEJ1ZmZlcjsKK30KIAotICAgIGlmIChyZXF1aXJlZFNwYWNlID4gc3RyZWFtSWItPnNpemUo
KSkKK3ZvaWQgSW5kZXhCdWZmZXI6OnVubWFwKCkKK3sKKyAgICBpZiAobUluZGV4QnVmZmVyKQog
ICAgIHsKLSAgICAgICAgc3RkOjpzaXplX3QgbmV3U2l6ZSA9IHN0ZDo6bWF4KHJlcXVpcmVkU3Bh
Y2UsIDIgKiBzdHJlYW1JYi0+c2l6ZSgpKTsKKyAgICAgICAgbUluZGV4QnVmZmVyLT5VbmxvY2so
KTsKKyAgICB9Cit9CiAKLSAgICAgICAgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpuZXdTdHJlYW1C
dWZmZXIgPSBtQmFja2VuZC0+Y3JlYXRlSW5kZXhCdWZmZXIobmV3U2l6ZSwgdXNlMzIgPyBHTF9V
TlNJR05FRF9JTlQgOiBHTF9VTlNJR05FRF9TSE9SVCk7CitTdHJlYW1pbmdJbmRleEJ1ZmZlcjo6
U3RyZWFtaW5nSW5kZXhCdWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlLCBVSU5UIGluaXRp
YWxTaXplLCBEM0RGT1JNQVQgZm9ybWF0KSA6IEluZGV4QnVmZmVyKGRldmljZSwgaW5pdGlhbFNp
emUsIGZvcm1hdCkKK3sKKyAgICBtV3JpdGVQb3NpdGlvbiA9IDA7Cit9CiAKLSAgICAgICAgZGVs
ZXRlIHN0cmVhbUliOworU3RyZWFtaW5nSW5kZXhCdWZmZXI6On5TdHJlYW1pbmdJbmRleEJ1ZmZl
cigpCit7Cit9CiAKLSAgICAgICAgc3RyZWFtSWIgPSBuZXdTdHJlYW1CdWZmZXI7Cit2b2lkICpT
dHJlYW1pbmdJbmRleEJ1ZmZlcjo6bWFwKFVJTlQgcmVxdWlyZWRTcGFjZSwgVUlOVCAqb2Zmc2V0
KQoreworICAgIHZvaWQgKm1hcFB0ciA9IE5VTEw7CiAKLSAgICAgICAgaWYgKHVzZTMyKQorICAg
IGlmIChtSW5kZXhCdWZmZXIpCisgICAgeworICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1JbmRl
eEJ1ZmZlci0+TG9jayhtV3JpdGVQb3NpdGlvbiwgcmVxdWlyZWRTcGFjZSwgJm1hcFB0ciwgRDNE
TE9DS19OT09WRVJXUklURSk7CisgICAgIAorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIG1TdHJlYW1CdWZmZXJJbnQgPSBzdHJlYW1JYjsKKyAgICAg
ICAgICAgIEVSUigiIExvY2sgZmFpbGVkIHdpdGggZXJyb3IgMHglMDh4IiwgcmVzdWx0KTsKKyAg
ICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ewotICAgICAgICAgICAgbVN0cmVhbUJ1ZmZlclNob3J0ID0gc3RyZWFtSWI7Ci0gICAgICAgIH0K
KworICAgICAgICAqb2Zmc2V0ID0gbVdyaXRlUG9zaXRpb247CisgICAgICAgIG1Xcml0ZVBvc2l0
aW9uICs9IHJlcXVpcmVkU3BhY2U7CiAgICAgfQogCi0gICAgc3RyZWFtSWItPnJlc2VydmVTcGFj
ZShyZXF1aXJlZFNwYWNlKTsKLQotICAgIHJldHVybiBzdHJlYW1JYjsKKyAgICByZXR1cm4gbWFw
UHRyOwogfQogCi1HTGVudW0gSW5kZXhEYXRhTWFuYWdlcjo6cHJlUmVuZGVyVmFsaWRhdGVVbmlu
ZGV4ZWQoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIFRyYW5zbGF0ZWRJbmRleERhdGEgKmlu
ZGV4SW5mbykKK3ZvaWQgU3RyZWFtaW5nSW5kZXhCdWZmZXI6OnJlc2VydmVTcGFjZShVSU5UIHJl
cXVpcmVkU3BhY2UsIEdMZW51bSB0eXBlKQogewotICAgIGlmIChjb3VudCA+PSA2NTUzNSkgcmV0
dXJuIEdMX09VVF9PRl9NRU1PUlk7Ci0KLSAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApCisg
ICAgaWYgKHJlcXVpcmVkU3BhY2UgPiBtQnVmZmVyU2l6ZSkKICAgICB7Ci0gICAgICAgIC8vIEZv
ciBsaW5lIGxvb3BzLCBjcmVhdGUgYSBzaW5nbGUtdXNlIGJ1ZmZlciB0aGF0IHJ1bnMgMCAtIGNv
dW50LTEsIDAuCi0gICAgICAgIGRlbGV0ZSBtTGluZUxvb3BCdWZmZXI7Ci0gICAgICAgIG1MaW5l
TG9vcEJ1ZmZlciA9IG1CYWNrZW5kLT5jcmVhdGVJbmRleEJ1ZmZlcigoY291bnQrMSkgKiBzaXpl
b2YodW5zaWduZWQgc2hvcnQpLCBHTF9VTlNJR05FRF9TSE9SVCk7CisgICAgICAgIGlmIChtSW5k
ZXhCdWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1JbmRleEJ1ZmZlci0+UmVsZWFzZSgp
OworICAgICAgICAgICAgbUluZGV4QnVmZmVyID0gTlVMTDsKKyAgICAgICAgfQogCi0gICAgICAg
IHVuc2lnbmVkIHNob3J0ICppbmRpY2VzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQgKj4o
bUxpbmVMb29wQnVmZmVyLT5tYXAoKSk7CisgICAgICAgIG1CdWZmZXJTaXplID0gc3RkOjptYXgo
cmVxdWlyZWRTcGFjZSwgMiAqIG1CdWZmZXJTaXplKTsKIAotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50OyBpKyspCisgICAgICAgIEQzRFBPT0wgcG9vbCA9IGdldERpc3BsYXkoKS0+
Z2V0QnVmZmVyUG9vbChEM0RVU0FHRV9EWU5BTUlDIHwgRDNEVVNBR0VfV1JJVEVPTkxZKTsKKyAg
ICAgICAgSFJFU1VMVCByZXN1bHQgPSBtRGV2aWNlLT5DcmVhdGVJbmRleEJ1ZmZlcihtQnVmZmVy
U2l6ZSwgRDNEVVNBR0VfRFlOQU1JQyB8IEQzRFVTQUdFX1dSSVRFT05MWSwgdHlwZSA9PSBHTF9V
TlNJR05FRF9JTlQgPyBEM0RGTVRfSU5ERVgzMiA6IEQzREZNVF9JTkRFWDE2LCBwb29sLCAmbUlu
ZGV4QnVmZmVyLCBOVUxMKTsKKyAgICAKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAg
ICAgICB7Ci0gICAgICAgICAgICBpbmRpY2VzW2ldID0gaTsKKyAgICAgICAgICAgIEVSUigiT3V0
IG9mIG1lbW9yeSBhbGxvY2F0aW5nIGEgdmVydGV4IGJ1ZmZlciBvZiBzaXplICVsdS4iLCBtQnVm
ZmVyU2l6ZSk7CiAgICAgICAgIH0KIAotICAgICAgICBpbmRpY2VzW2NvdW50XSA9IDA7CisgICAg
ICAgIG1Xcml0ZVBvc2l0aW9uID0gMDsKKyAgICB9CisgICAgZWxzZSBpZiAobVdyaXRlUG9zaXRp
b24gKyByZXF1aXJlZFNwYWNlID4gbUJ1ZmZlclNpemUpICAgLy8gUmVjeWNsZQorICAgIHsKKyAg
ICAgICAgdm9pZCAqZHVtbXk7CisgICAgICAgIG1JbmRleEJ1ZmZlci0+TG9jaygwLCAxLCAmZHVt
bXksIEQzRExPQ0tfRElTQ0FSRCk7CisgICAgICAgIG1JbmRleEJ1ZmZlci0+VW5sb2NrKCk7CiAK
LSAgICAgICAgbUxpbmVMb29wQnVmZmVyLT51bm1hcCgpOworICAgICAgICBtV3JpdGVQb3NpdGlv
biA9IDA7CisgICAgfQorfQogCi0gICAgICAgIGluZGV4SW5mby0+YnVmZmVyID0gbUxpbmVMb29w
QnVmZmVyOwotICAgICAgICBpbmRleEluZm8tPmNvdW50ID0gY291bnQgKyAxOwotICAgICAgICBp
bmRleEluZm8tPm1heEluZGV4ID0gY291bnQgLSAxOwotICAgIH0KLSAgICBlbHNlIGlmIChtQ291
bnRpbmdCdWZmZXJTaXplIDwgY291bnQpCitTdGF0aWNJbmRleEJ1ZmZlcjo6U3RhdGljSW5kZXhC
dWZmZXIoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlKSA6IEluZGV4QnVmZmVyKGRldmljZSwgMCwg
RDNERk1UX1VOS05PV04pCit7CisgICAgbUNhY2hlVHlwZSA9IEdMX05PTkU7Cit9CisKK1N0YXRp
Y0luZGV4QnVmZmVyOjp+U3RhdGljSW5kZXhCdWZmZXIoKQoreworfQorCit2b2lkICpTdGF0aWNJ
bmRleEJ1ZmZlcjo6bWFwKFVJTlQgcmVxdWlyZWRTcGFjZSwgVUlOVCAqb2Zmc2V0KQoreworICAg
IHZvaWQgKm1hcFB0ciA9IE5VTEw7CisKKyAgICBpZiAobUluZGV4QnVmZmVyKQogICAgIHsKLSAg
ICAgICAgbUNvdW50aW5nQnVmZmVyU2l6ZSA9IHN0ZDo6bWF4KHN0YXRpY19jYXN0PEdMc2l6ZWk+
KGNlaWxQb3cyKGNvdW50KSksIG1Db3VudGluZ0J1ZmZlclNpemUqMik7CisgICAgICAgIEhSRVNV
TFQgcmVzdWx0ID0gbUluZGV4QnVmZmVyLT5Mb2NrKDAsIHJlcXVpcmVkU3BhY2UsICZtYXBQdHIs
IDApOworICAgICAKKyAgICAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQorICAgICAgICB7CisgICAg
ICAgICAgICBFUlIoIiBMb2NrIGZhaWxlZCB3aXRoIGVycm9yIDB4JTA4eCIsIHJlc3VsdCk7Cisg
ICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogCi0gICAgICAgIGRlbGV0ZSBtQ291
bnRpbmdCdWZmZXI7Ci0gICAgICAgIG1Db3VudGluZ0J1ZmZlciA9IG1CYWNrZW5kLT5jcmVhdGVJ
bmRleEJ1ZmZlcihjb3VudCAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCksIEdMX1VOU0lHTkVEX1NI
T1JUKTsKKyAgICAgICAgKm9mZnNldCA9IDA7CisgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIHNo
b3J0ICppbmRpY2VzID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQgKj4obUNvdW50aW5nQnVm
ZmVyLT5tYXAoKSk7CisgICAgcmV0dXJuIG1hcFB0cjsKK30KIAotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyBpKyspCit2b2lkIFN0YXRpY0luZGV4QnVmZmVyOjpyZXNlcnZlU3Bh
Y2UoVUlOVCByZXF1aXJlZFNwYWNlLCBHTGVudW0gdHlwZSkKK3sKKyAgICBpZiAoIW1JbmRleEJ1
ZmZlciAmJiBtQnVmZmVyU2l6ZSA9PSAwKQorICAgIHsKKyAgICAgICAgRDNEUE9PTCBwb29sID0g
Z2V0RGlzcGxheSgpLT5nZXRCdWZmZXJQb29sKEQzRFVTQUdFX1dSSVRFT05MWSk7CisgICAgICAg
IEhSRVNVTFQgcmVzdWx0ID0gbURldmljZS0+Q3JlYXRlSW5kZXhCdWZmZXIocmVxdWlyZWRTcGFj
ZSwgRDNEVVNBR0VfV1JJVEVPTkxZLCB0eXBlID09IEdMX1VOU0lHTkVEX0lOVCA/IEQzREZNVF9J
TkRFWDMyIDogRDNERk1UX0lOREVYMTYsIHBvb2wsICZtSW5kZXhCdWZmZXIsIE5VTEwpOworICAg
IAorICAgICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlu
ZGljZXNbaV0gPSBpOworICAgICAgICAgICAgRVJSKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcg
YSB2ZXJ0ZXggYnVmZmVyIG9mIHNpemUgJWx1LiIsIG1CdWZmZXJTaXplKTsKICAgICAgICAgfQog
Ci0gICAgICAgIG1Db3VudGluZ0J1ZmZlci0+dW5tYXAoKTsKLQotICAgICAgICBpbmRleEluZm8t
PmJ1ZmZlciA9IG1Db3VudGluZ0J1ZmZlcjsKLSAgICAgICAgaW5kZXhJbmZvLT5jb3VudCA9IGNv
dW50OwotICAgICAgICBpbmRleEluZm8tPm1heEluZGV4ID0gY291bnQgLSAxOworICAgICAgICBt
QnVmZmVyU2l6ZSA9IHJlcXVpcmVkU3BhY2U7CisgICAgICAgIG1DYWNoZVR5cGUgPSB0eXBlOwog
ICAgIH0KLSAgICBlbHNlCisgICAgZWxzZSBpZiAobUluZGV4QnVmZmVyICYmIG1CdWZmZXJTaXpl
ID49IHJlcXVpcmVkU3BhY2UgJiYgbUNhY2hlVHlwZSA9PSB0eXBlKQogICAgIHsKLSAgICAgICAg
aW5kZXhJbmZvLT5idWZmZXIgPSBtQ291bnRpbmdCdWZmZXI7Ci0gICAgICAgIGluZGV4SW5mby0+
Y291bnQgPSBjb3VudDsKLSAgICAgICAgaW5kZXhJbmZvLT5tYXhJbmRleCA9IGNvdW50IC0gMTsK
KyAgICAgICAgLy8gQWxyZWFkeSBhbGxvY2F0ZWQKICAgICB9CisgICAgZWxzZSBVTlJFQUNIQUJM
RSgpOyAgIC8vIFN0YXRpYyBpbmRleCBidWZmZXJzIGNhbid0IGJlIHJlc2l6ZWQKK30KIAotICAg
IGluZGV4SW5mby0+aW5kZXhTaXplID0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKLSAgICBpbmRl
eEluZm8tPm1pbkluZGV4ID0gMDsKLSAgICBpbmRleEluZm8tPm9mZnNldCA9IDA7Citib29sIFN0
YXRpY0luZGV4QnVmZmVyOjpsb29rdXBUeXBlKEdMZW51bSB0eXBlKQoreworICAgIHJldHVybiBt
Q2FjaGVUeXBlID09IHR5cGU7Cit9CiAKLSAgICByZXR1cm4gR0xfTk9fRVJST1I7CitVSU5UIFN0
YXRpY0luZGV4QnVmZmVyOjpsb29rdXBSYW5nZShpbnRwdHJfdCBvZmZzZXQsIEdMc2l6ZWkgY291
bnQsIFVJTlQgKm1pbkluZGV4LCBVSU5UICptYXhJbmRleCkKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGludCByYW5nZSA9IDA7IHJhbmdlIDwgbUNhY2hlLnNpemUoKTsgcmFuZ2UrKykKKyAgICB7Cisg
ICAgICAgIGlmIChtQ2FjaGVbcmFuZ2VdLm9mZnNldCA9PSBvZmZzZXQgJiYgbUNhY2hlW3Jhbmdl
XS5jb3VudCA9PSBjb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgKm1pbkluZGV4ID0gbUNh
Y2hlW3JhbmdlXS5taW5JbmRleDsKKyAgICAgICAgICAgICptYXhJbmRleCA9IG1DYWNoZVtyYW5n
ZV0ubWF4SW5kZXg7CisKKyAgICAgICAgICAgIHJldHVybiBtQ2FjaGVbcmFuZ2VdLnN0cmVhbU9m
ZnNldDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAtMTsKIH0KIAordm9pZCBTdGF0
aWNJbmRleEJ1ZmZlcjo6YWRkUmFuZ2UoaW50cHRyX3Qgb2Zmc2V0LCBHTHNpemVpIGNvdW50LCBV
SU5UIG1pbkluZGV4LCBVSU5UIG1heEluZGV4LCBVSU5UIHN0cmVhbU9mZnNldCkKK3sKKyAgICBJ
bmRleFJhbmdlIGluZGV4UmFuZ2UgPSB7b2Zmc2V0LCBjb3VudCwgbWluSW5kZXgsIG1heEluZGV4
LCBzdHJlYW1PZmZzZXR9OworICAgIG1DYWNoZS5wdXNoX2JhY2soaW5kZXhSYW5nZSk7CiB9CisK
K30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkv
YmFja2VuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJH
TEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oCShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDExMCArMCwwIEBACi0vLwotLy8gQ29weXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhl
IEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLS8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKLS8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCi0vLwotCi0vLyBnZW9tZXRyeS9i
YWNrZW5kLmg6IEFic3RyYWN0IGNsYXNzZXMgQnVmZmVyQmFja0VuZCwgVHJhbnNsYXRlZFZlcnRl
eEJ1ZmZlciBhbmQgVHJhbnNsYXRlZEluZGV4QnVmZmVyCi0vLyB0aGF0IG11c3QgYmUgaW1wbGVt
ZW50ZWQgYnkgYW55IEFQSS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBBTkdMRS4KLQotI2lm
bmRlZiBMSUJHTEVTVjJfR0VPTUVUUllfQkFDS0VORF9IXwotI2RlZmluZSBMSUJHTEVTVjJfR0VP
TUVUUllfQkFDS0VORF9IXwotCi0jaW5jbHVkZSA8Y3N0ZGRlZj4KLQotI2RlZmluZSBHTF9BUElD
QUxMCi0jaW5jbHVkZSA8R0xFUzIvZ2wyLmg+Ci0KLSNpbmNsdWRlICJsaWJHTEVTdjIvQ29udGV4
dC5oIgotCi1uYW1lc3BhY2UgZ2wKLXsKLWNsYXNzIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXI7Ci1j
bGFzcyBUcmFuc2xhdGVkSW5kZXhCdWZmZXI7Ci0KLXN0cnVjdCBGb3JtYXRDb252ZXJ0ZXIKLXsK
LSAgICBib29sIGlkZW50aXR5OwotICAgIHN0ZDo6c2l6ZV90IG91dHB1dFZlcnRleFNpemU7Ci0g
ICAgdm9pZCAoKmNvbnZlcnRBcnJheSkoY29uc3Qgdm9pZCAqaW4sIHN0ZDo6c2l6ZV90IHN0cmlk
ZSwgc3RkOjpzaXplX3Qgbiwgdm9pZCAqb3V0KTsKLX07Ci0KLXN0cnVjdCBUcmFuc2xhdGVkQXR0
cmlidXRlCi17Ci0gICAgYm9vbCBlbmFibGVkOwotICAgIGJvb2wgbm9uQXJyYXk7Ci0KLSAgICAv
LyBUaGVzZSBhcmUgdGhlIG9yaWdpbmFsIHVudHJhbnNsYXRlZCB2YWx1ZXMuIChPciBqdXN0IGhh
dmUgc29tZSBzb3J0IG9mIEJ1ZmZlckJhY2tFbmQ6OlRyYW5zbGF0ZWRUeXBlS2V5LikKLSAgICBH
TGVudW0gdHlwZTsKLSAgICBzdGQ6OnNpemVfdCBzaXplOwotICAgIGJvb2wgbm9ybWFsaXplZDsK
LQotICAgIHN0ZDo6c2l6ZV90IG9mZnNldDsKLQotICAgIHN0ZDo6c2l6ZV90IHN0cmlkZTsgLy8g
MCBtZWFucyBub3QgdG8gYWR2YW5jZSB0aGUgcmVhZCBwb2ludGVyIGF0IGFsbAotCi0gICAgc3Rk
OjpzaXplX3Qgc2VtYW50aWNJbmRleDsKLQotICAgIFRyYW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgKmJ1
ZmZlcjsKLX07Ci0KLWNsYXNzIEJ1ZmZlckJhY2tFbmQKLXsKLSAgcHVibGljOgotICAgIHZpcnR1
YWwgfkJ1ZmZlckJhY2tFbmQoKSB7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0SW50SW5k
aWNlcygpID0gMDsKLQotICAgIHZpcnR1YWwgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlciAqY3JlYXRl
VmVydGV4QnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUpID0gMDsKLSAgICB2aXJ0dWFsIFRyYW5zbGF0
ZWRWZXJ0ZXhCdWZmZXIgKmNyZWF0ZVZlcnRleEJ1ZmZlckZvclN0cmlkZVplcm8oc3RkOjpzaXpl
X3Qgc2l6ZSkgPSAwOwotICAgIHZpcnR1YWwgVHJhbnNsYXRlZEluZGV4QnVmZmVyICpjcmVhdGVJ
bmRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplLCBHTGVudW0gdHlwZSkgPSAwOwotICAgIHZpcnR1
YWwgRm9ybWF0Q29udmVydGVyIGdldEZvcm1hdENvbnZlcnRlcihHTGVudW0gdHlwZSwgc3RkOjpz
aXplX3Qgc2l6ZSwgYm9vbCBub3JtYWxpemUpID0gMDsKLQotICAgIC8vIEZvciBhbiBpZGVudGl0
eS1tYXBwYWJsZSBzdHJlYW0sIHZlcmlmeSB0aGF0IHRoZSBzdHJpZGUgYW5kIG9mZnNldCBhcmUg
b2theS4KLSAgICB2aXJ0dWFsIGJvb2wgdmFsaWRhdGVTdHJlYW0oR0xlbnVtIHR5cGUsIHN0ZDo6
c2l6ZV90IHNpemUsIHN0ZDo6c2l6ZV90IHN0cmlkZSwgc3RkOjpzaXplX3Qgb2Zmc2V0KSBjb25z
dCA9IDA7Ci0KLSAgICB2aXJ0dWFsIEdMZW51bSBzZXR1cEluZGljZXNQcmVEcmF3KGNvbnN0IFRy
YW5zbGF0ZWRJbmRleERhdGEgJmluZGV4SW5mbykgPSAwOwotICAgIHZpcnR1YWwgR0xlbnVtIHNl
dHVwQXR0cmlidXRlc1ByZURyYXcoY29uc3QgVHJhbnNsYXRlZEF0dHJpYnV0ZSAqYXR0cmlidXRl
cykgPSAwOwotfTsKLQotY2xhc3MgVHJhbnNsYXRlZEJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAg
ZXhwbGljaXQgVHJhbnNsYXRlZEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXplKSA6IG1CdWZmZXJTaXpl
KHNpemUpLCBtQ3VycmVudFBvaW50KDApIHsgfQotICAgIHZpcnR1YWwgflRyYW5zbGF0ZWRCdWZm
ZXIoKSB7IH0KLQotICAgIHN0ZDo6c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtQnVmZmVy
U2l6ZTsgfQotCi0gICAgdmlydHVhbCB2b2lkICptYXAoKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lk
IHVubWFwKCkgPSAwOwotCi0gICAgdm9pZCByZXNlcnZlU3BhY2Uoc3RkOjpzaXplX3QgcmVxdWly
ZWRTcGFjZSk7Ci0KLSAgICB2b2lkICptYXAoc3RkOjpzaXplX3QgcmVxdWlyZWRTcGFjZSwgc3Rk
OjpzaXplX3QgKm9mZnNldCk7Ci0KLSAgcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCByZWN5
Y2xlKCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCAqc3RyZWFtaW5nTWFwKHN0ZDo6c2l6ZV90IG9m
ZnNldCwgc3RkOjpzaXplX3Qgc2l6ZSkgPSAwOwotCi0gIHByaXZhdGU6Ci0gICAgc3RkOjpzaXpl
X3QgbUJ1ZmZlclNpemU7Ci0gICAgc3RkOjpzaXplX3QgbUN1cnJlbnRQb2ludDsKLQotICAgIERJ
U0FMTE9XX0NPUFlfQU5EX0FTU0lHTihUcmFuc2xhdGVkQnVmZmVyKTsKLX07Ci0KLWNsYXNzIFRy
YW5zbGF0ZWRWZXJ0ZXhCdWZmZXIgOiBwdWJsaWMgVHJhbnNsYXRlZEJ1ZmZlcgotewotICBwdWJs
aWM6Ci0gICAgZXhwbGljaXQgVHJhbnNsYXRlZFZlcnRleEJ1ZmZlcihzdGQ6OnNpemVfdCBzaXpl
KSA6IFRyYW5zbGF0ZWRCdWZmZXIoc2l6ZSkgeyB9Ci19OwotCi1jbGFzcyBUcmFuc2xhdGVkSW5k
ZXhCdWZmZXIgOiBwdWJsaWMgVHJhbnNsYXRlZEJ1ZmZlcgotewotICBwdWJsaWM6Ci0gICAgZXhw
bGljaXQgVHJhbnNsYXRlZEluZGV4QnVmZmVyKHN0ZDo6c2l6ZV90IHNpemUpIDogVHJhbnNsYXRl
ZEJ1ZmZlcihzaXplKSB7IH0KLX07Ci0KLX0KLQotI2VuZGlmICAgLy8gTElCR0xFU1YyX0dFT01F
VFJZX0JBQ0tFTkRfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvUmVmQ291bnRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9saWJHTEVTdjIvUmVmQ291bnRPYmplY3QuY3BwCShyZXZpc2lvbiA3NjAyNSkKKysr
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVmQ291bnRPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw3IEBACiAKIFJlZkNvdW50T2JqZWN0Ojp+UmVm
Q291bnRPYmplY3QoKQogeworICAgIEFTU0VSVChtUmVmQ291bnQgPT0gMCk7CiB9CiAKIHZvaWQg
UmVmQ291bnRPYmplY3Q6OmFkZFJlZigpIGNvbnN0CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmgJKHJldmlzaW9uIDc2MDI1KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMjIsNiArMjIsOCBAQAogCiBuYW1lc3BhY2UgZ2wKIHsKK2NsYXNzIFN0YXRpY1ZlcnRl
eEJ1ZmZlcjsKK2NsYXNzIFN0YXRpY0luZGV4QnVmZmVyOwogCiBjbGFzcyBCdWZmZXIgOiBwdWJs
aWMgUmVmQ291bnRPYmplY3QKIHsKQEAgLTM3LDEyICszOSwxOSBAQAogICAgIHNpemVfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbVNpemU7IH0KICAgICBHTGVudW0gdXNhZ2UoKSBjb25zdCB7IHJl
dHVybiBtVXNhZ2U7IH0KIAorICAgIFN0YXRpY1ZlcnRleEJ1ZmZlciAqZ2V0VmVydGV4QnVmZmVy
KCk7CisgICAgU3RhdGljSW5kZXhCdWZmZXIgKmdldEluZGV4QnVmZmVyKCk7CisgICAgdm9pZCBp
bnZhbGlkYXRlU3RhdGljRGF0YSgpOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKEJ1ZmZlcik7CiAKICAgICBHTHVieXRlICptQ29udGVudHM7CiAgICAgc2l6ZV90
IG1TaXplOwogICAgIEdMZW51bSBtVXNhZ2U7CisKKyAgICBTdGF0aWNWZXJ0ZXhCdWZmZXIgKm1W
ZXJ0ZXhCdWZmZXI7CisgICAgU3RhdGljSW5kZXhCdWZmZXIgKm1JbmRleEJ1ZmZlcjsKIH07CiAK
IH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVu
Y2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9GZW5jZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM0IEBACisvLworLy8gQ29w
eXJpZ2h0IChjKSAyMDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEg
QlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZp
bGUuCisvLworCisvLyBGZW5jZS5jcHA6IEltcGxlbWVudHMgdGhlIGdsOjpGZW5jZSBjbGFzcywg
d2hpY2ggc3VwcG9ydHMgdGhlIEdMX05WX2ZlbmNlIGV4dGVuc2lvbi4KKworI2luY2x1ZGUgImxp
YkdMRVN2Mi9GZW5jZS5oIgorCisjaW5jbHVkZSAibGliR0xFU3YyL21haW4uaCIKKworbmFtZXNw
YWNlIGdsCit7CisKK0ZlbmNlOjpGZW5jZSgpCit7IAorICAgIG1RdWVyeSA9IE5VTEw7CisgICAg
bUNvbmRpdGlvbiA9IEdMX05PTkU7CisgICAgbVN0YXR1cyA9IEdMX0ZBTFNFOworfQorCitGZW5j
ZTo6fkZlbmNlKCkKK3sKKyAgICBpZiAobVF1ZXJ5ICE9IE5VTEwpCisgICAgeworICAgICAgICBt
UXVlcnktPlJlbGVhc2UoKTsKKyAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKKyAgICB9Cit9CisKK0dM
Ym9vbGVhbiBGZW5jZTo6aXNGZW5jZSgpCit7CisgICAgLy8gR0xfTlZfZmVuY2Ugc3BlYzoKKyAg
ICAvLyBBIG5hbWUgcmV0dXJuZWQgYnkgR2VuRmVuY2VzTlYsIGJ1dCBub3QgeWV0IHNldCB2aWEg
U2V0RmVuY2VOViwgaXMgbm90IHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGZlbmNlLgorICAgIHJl
dHVybiBtUXVlcnkgIT0gTlVMTDsKK30KKwordm9pZCBGZW5jZTo6c2V0RmVuY2UoR0xlbnVtIGNv
bmRpdGlvbikKK3sKKyAgICBpZiAobVF1ZXJ5ICE9IE5VTEwpCisgICAgeworICAgICAgICBtUXVl
cnktPlJlbGVhc2UoKTsKKyAgICAgICAgbVF1ZXJ5ID0gTlVMTDsKKyAgICB9CisKKyAgICBpZiAo
RkFJTEVEKGdldERldmljZSgpLT5DcmVhdGVRdWVyeShEM0RRVUVSWVRZUEVfRVZFTlQsICZtUXVl
cnkpKSkKKyAgICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAg
ICB9CisKKyAgICBIUkVTVUxUIHJlc3VsdCA9IG1RdWVyeS0+SXNzdWUoRDNESVNTVUVfRU5EKTsK
KyAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOworCisgICAgbUNvbmRpdGlvbiA9IGNvbmRp
dGlvbjsKKyAgICBtU3RhdHVzID0gR0xfRkFMU0U7Cit9CisKK0dMYm9vbGVhbiBGZW5jZTo6dGVz
dEZlbmNlKCkKK3sKKyAgICBpZiAobVF1ZXJ5ID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04sIEdMX1RSVUUpOworICAgIH0KKworICAgIEhS
RVNVTFQgcmVzdWx0ID0gbVF1ZXJ5LT5HZXREYXRhKE5VTEwsIDAsIEQzREdFVERBVEFfRkxVU0gp
OworCisgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCkKKyAgICB7CisgICAgICAg
cmV0dXJuIGVycm9yKEdMX09VVF9PRl9NRU1PUlksIEdMX1RSVUUpOworICAgIH0KKworICAgIEFT
U0VSVChyZXN1bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7CisgICAgbVN0YXR1cyA9
IHJlc3VsdCA9PSBTX09LOworICAgIHJldHVybiBtU3RhdHVzOworfQorCit2b2lkIEZlbmNlOjpm
aW5pc2hGZW5jZSgpCit7CisgICAgaWYgKG1RdWVyeSA9PSBOVUxMKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICB9CisKKyAgICB3aGlsZSAo
IXRlc3RGZW5jZSgpKQorICAgIHsKKyAgICAgICAgU2xlZXAoMCk7CisgICAgfQorfQorCit2b2lk
IEZlbmNlOjpnZXRGZW5jZWl2KEdMZW51bSBwbmFtZSwgR0xpbnQgKnBhcmFtcykKK3sKKyAgICBp
ZiAobVF1ZXJ5ID09IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJ
RF9PUEVSQVRJT04pOworICAgIH0KKworICAgIHN3aXRjaCAocG5hbWUpCisgICAgeworICAgICAg
ICBjYXNlIEdMX0ZFTkNFX1NUQVRVU19OVjoKKyAgICAgICAgeworICAgICAgICAgICAgLy8gR0xf
TlZfZmVuY2Ugc3BlYzoKKyAgICAgICAgICAgIC8vIE9uY2UgdGhlIHN0YXR1cyBvZiBhIGZlbmNl
IGhhcyBiZWVuIGZpbmlzaGVkICh2aWEgRmluaXNoRmVuY2VOVikgb3IgdGVzdGVkIGFuZCB0aGUg
cmV0dXJuZWQgc3RhdHVzIGlzIFRSVUUgKHZpYSBlaXRoZXIgVGVzdEZlbmNlTlYKKyAgICAgICAg
ICAgIC8vIG9yIEdldEZlbmNlaXZOViBxdWVyeWluZyB0aGUgRkVOQ0VfU1RBVFVTX05WKSwgdGhl
IHN0YXR1cyByZW1haW5zIFRSVUUgdW50aWwgdGhlIG5leHQgU2V0RmVuY2VOViBvZiB0aGUgZmVu
Y2UuCisgICAgICAgICAgICBpZiAobVN0YXR1cykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBwYXJhbXNbMF0gPSBHTF9UUlVFOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgSFJFU1VMVCByZXN1bHQgPSBtUXVl
cnktPkdldERhdGEoTlVMTCwgMCwgMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChy
ZXN1bHQgPT0gRDNERVJSX0RFVklDRUxPU1QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcGFyYW1zWzBdID0gR0xfVFJVRTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEFTU0VSVChyZXN1
bHQgPT0gU19PSyB8fCByZXN1bHQgPT0gU19GQUxTRSk7CisgICAgICAgICAgICBtU3RhdHVzID0g
cmVzdWx0ID09IFNfT0s7CisgICAgICAgICAgICBwYXJhbXNbMF0gPSBtU3RhdHVzOworICAgICAg
ICAgICAgCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjYXNlIEdMX0ZF
TkNFX0NPTkRJVElPTl9OVjoKKyAgICAgICAgICAgIHBhcmFtc1swXSA9IG1Db25kaXRpb247Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9
CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRp
bGl0aWVzLmgJKHJldmlzaW9uIDc2MDI1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkdMRVN2Mi91dGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsMTAgQEAK
IGJvb2wgSXNUZXh0dXJlVGFyZ2V0KEdMZW51bSB0YXJnZXQpOwogYm9vbCBDaGVja1RleHR1cmVG
b3JtYXRUeXBlKEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlKTsKIAorYm9vbCBJc0NvbG9yUmVu
ZGVyYWJsZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpOworYm9vbCBJc0RlcHRoUmVuZGVyYWJsZShH
TGVudW0gaW50ZXJuYWxmb3JtYXQpOworYm9vbCBJc1N0ZW5jaWxSZW5kZXJhYmxlKEdMZW51bSBp
bnRlcm5hbGZvcm1hdCk7CisKIH0KIAogbmFtZXNwYWNlIGVzMmR4CkBAIC01Nyw3ICs2MSw3IEBA
CiB1bnNpZ25lZCBpbnQgR2V0Qmx1ZVNpemUoRDNERk9STUFUIGNvbG9yRm9ybWF0KTsKIHVuc2ln
bmVkIGludCBHZXREZXB0aFNpemUoRDNERk9STUFUIGRlcHRoRm9ybWF0KTsKIHVuc2lnbmVkIGlu
dCBHZXRTdGVuY2lsU2l6ZShEM0RGT1JNQVQgc3RlbmNpbEZvcm1hdCk7Ci1ib29sIENvbnZlcnRQ
cmltaXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIHByaW1pdGl2ZUNvdW50
LAorYm9vbCBDb252ZXJ0UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXpl
aSBlbGVtZW50Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBSSU1JVElWRVRZ
UEUgKmQzZFByaW1pdGl2ZVR5cGUsIGludCAqZDNkUHJpbWl0aXZlQ291bnQpOwogRDNERk9STUFU
IENvbnZlcnRSZW5kZXJidWZmZXJGb3JtYXQoR0xlbnVtIGZvcm1hdCk7CiBEM0RNVUxUSVNBTVBM
RV9UWVBFIEdldE11bHRpc2FtcGxlVHlwZUZyb21TYW1wbGVzKEdMc2l6ZWkgc2FtcGxlcyk7CkBA
IC02NSw0ICs2OSwxMiBAQAogCiB9CiAKK25hbWVzcGFjZSBkeDJlcworeworCitHTGVudW0gQ29u
dmVydEJhY2tCdWZmZXJGb3JtYXQoRDNERk9STUFUIGZvcm1hdCk7CitHTGVudW0gQ29udmVydERl
cHRoU3RlbmNpbEZvcm1hdChEM0RGT1JNQVQgZm9ybWF0KTsKKworfQorCiAjZW5kaWYgIC8vIExJ
QkdMRVNWMl9VVElMSVRJRVNfSApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAJKHJldmlzaW9uIDc2MDI1KQorKysg
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9GcmFtZWJ1ZmZlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwNSwxMyArMzA1LDMyIEBACiAgICAgICAgICAgICByZXR1cm4gR0xf
RlJBTUVCVUZGRVJfSU5DT01QTEVURV9BVFRBQ0hNRU5UOwogICAgICAgICB9CiAKLSAgICAgICAg
aWYgKElzVGV4dHVyZVRhcmdldChtQ29sb3JidWZmZXJUeXBlKSkKKyAgICAgICAgaWYgKG1Db2xv
cmJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVSKQogICAgICAgICB7CisgICAgICAgICAgICBp
ZiAoIWdsOjpJc0NvbG9yUmVuZGVyYWJsZShjb2xvcmJ1ZmZlci0+Z2V0Rm9ybWF0KCkpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBM
RVRFX0FUVEFDSE1FTlQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZiAoSXNUZXh0dXJlVGFyZ2V0KG1Db2xvcmJ1ZmZlclR5cGUpKQorICAgICAgICB7CiAgICAgICAg
ICAgICBpZiAoSXNDb21wcmVzc2VkKGNvbG9yYnVmZmVyLT5nZXRGb3JtYXQoKSkpCiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVE
OwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY29sb3JidWZmZXItPmlzRmxvYXRp
bmdQb2ludCgpICYmICghZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0Zsb2F0UmVuZGVyYWJsZVRleHR1
cmVzKCkgfHwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAhZ2V0Q29udGV4dCgpLT5zdXBwb3J0c0hhbGZGbG9hdFJlbmRlcmFibGVUZXh0dXJlcygp
KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
VU5TVVBQT1JURUQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZl
ci0+Z2V0Rm9ybWF0KCkgPT0gR0xfTFVNSU5BTkNFIHx8IGNvbG9yYnVmZmVyLT5nZXRGb3JtYXQo
KSA9PSBHTF9MVU1JTkFOQ0VfQUxQSEEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOworICAgICAgICAgICAgfQogICAgICAg
ICB9CisgICAgICAgIGVsc2UgVU5SRUFDSEFCTEUoKTsKIAogICAgICAgICB3aWR0aCA9IGNvbG9y
YnVmZmVyLT5nZXRXaWR0aCgpOwogICAgICAgICBoZWlnaHQgPSBjb2xvcmJ1ZmZlci0+Z2V0SGVp
Z2h0KCk7CkBAIC0zMjcsNiArMzQ2LDExIEBACiAKICAgICBpZiAobURlcHRoYnVmZmVyVHlwZSAh
PSBHTF9OT05FKQogICAgIHsKKyAgICAgICAgaWYgKG1EZXB0aGJ1ZmZlclR5cGUgIT0gR0xfUkVO
REVSQlVGRkVSKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gR0xfRlJBTUVCVUZGRVJf
VU5TVVBQT1JURUQ7ICAgLy8gUmVxdWlyZXMgR0xfT0VTX2RlcHRoX3RleHR1cmUKKyAgICAgICAg
fQorCiAgICAgICAgIGRlcHRoYnVmZmVyID0gZ2V0RGVwdGhidWZmZXIoKTsKIAogICAgICAgICBp
ZiAoIWRlcHRoYnVmZmVyKQpAQCAtMzU3LDE4ICszODEsMTUgQEAKICAgICAgICAgewogICAgICAg
ICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfTVVMVElTQU1QTEVfQU5HTEU7
CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChJc1RleHR1cmVUYXJnZXQobURlcHRo
YnVmZmVyVHlwZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChJc0NvbXByZXNzZWQoZGVw
dGhidWZmZXItPmdldEZvcm1hdCgpKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gR0xfRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KICAgICB9CiAKICAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX05PTkUpCiAgICAg
eworICAgICAgICBpZiAobVN0ZW5jaWxidWZmZXJUeXBlICE9IEdMX1JFTkRFUkJVRkZFUikKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX1VOU1VQUE9SVEVEOwor
ICAgICAgICB9CisKICAgICAgICAgc3RlbmNpbGJ1ZmZlciA9IGdldFN0ZW5jaWxidWZmZXIoKTsK
IAogICAgICAgICBpZiAoIXN0ZW5jaWxidWZmZXIpCkBAIC0zOTksMTQgKzQyMCw2IEBACiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJ
U0FNUExFX0FOR0xFOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoSXNUZXh0dXJl
VGFyZ2V0KG1TdGVuY2lsYnVmZmVyVHlwZSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChJ
c0NvbXByZXNzZWQoc3RlbmNpbGJ1ZmZlci0+Z2V0Rm9ybWF0KCkpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiBHTF9GUkFNRUJVRkZFUl9VTlNVUFBPUlRFRDsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChtRGVwdGhidWZmZXJUeXBlID09
IEdMX1JFTkRFUkJVRkZFUiAmJiBtU3RlbmNpbGJ1ZmZlclR5cGUgPT0gR0xfUkVOREVSQlVGRkVS
KQpAQCAtNDI1LDggKzQzOCw4IEBACiBEZWZhdWx0RnJhbWVidWZmZXI6OkRlZmF1bHRGcmFtZWJ1
ZmZlcihDb2xvcmJ1ZmZlciAqY29sb3IsIERlcHRoU3RlbmNpbGJ1ZmZlciAqZGVwdGhTdGVuY2ls
KQogewogICAgIG1Db2xvcmJ1ZmZlclR5cGUgPSBHTF9SRU5ERVJCVUZGRVI7Ci0gICAgbURlcHRo
YnVmZmVyVHlwZSA9IEdMX1JFTkRFUkJVRkZFUjsKLSAgICBtU3RlbmNpbGJ1ZmZlclR5cGUgPSBH
TF9SRU5ERVJCVUZGRVI7CisgICAgbURlcHRoYnVmZmVyVHlwZSA9IChkZXB0aFN0ZW5jaWwtPmdl
dERlcHRoU2l6ZSgpICE9IDApID8gR0xfUkVOREVSQlVGRkVSIDogR0xfTk9ORTsKKyAgICBtU3Rl
bmNpbGJ1ZmZlclR5cGUgPSAoZGVwdGhTdGVuY2lsLT5nZXRTdGVuY2lsU2l6ZSgpICE9IDApID8g
R0xfUkVOREVSQlVGRkVSIDogR0xfTk9ORTsKIAogICAgIG1Db2xvcmJ1ZmZlclBvaW50ZXIuc2V0
KG5ldyBSZW5kZXJidWZmZXIoMCwgY29sb3IpKTsKIApAQCAtNDQ5LDYgKzQ2Miw5IEBACiAKIEdM
ZW51bSBEZWZhdWx0RnJhbWVidWZmZXI6OmNvbXBsZXRlbmVzcygpCiB7CisgICAgLy8gVGhlIGRl
ZmF1bHQgZnJhbWVidWZmZXIgc2hvdWxkIGFsd2F5cyBiZSBjb21wbGV0ZQorICAgIEFTU0VSVChG
cmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKCkgPT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpOwor
CiAgICAgcmV0dXJuIEdMX0ZSQU1FQlVGRkVSX0NPTVBMRVRFOwogfQogCkluZGV4OiBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuaAkocmV2aXNpb24g
NzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTIsNiArMTIsNyBAQAogCiAjZGVmaW5lIEdMX0FQSUNBTEwK
ICNpbmNsdWRlIDxHTEVTMi9nbDIuaD4KKyNpbmNsdWRlIDxHTEVTMi9nbDJleHQuaD4KICNkZWZp
bmUgRUdMQVBJCiAjaW5jbHVkZSA8RUdML2VnbC5oPgogI2luY2x1ZGUgPGQzZDkuaD4KQEAgLTQ5
LDE5ICs1MCwyMCBAQAogY2xhc3MgRGVwdGhTdGVuY2lsYnVmZmVyOwogY2xhc3MgVmVydGV4RGF0
YU1hbmFnZXI7CiBjbGFzcyBJbmRleERhdGFNYW5hZ2VyOwotY2xhc3MgQnVmZmVyQmFja0VuZDsK
IGNsYXNzIEJsaXQ7CitjbGFzcyBGZW5jZTsKIAogZW51bQogewotICAgIE1BWF9WRVJURVhfQVRU
UklCUyA9IDEyLAotICAgIE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTID0gMTI4LAotICAgIE1B
WF9WQVJZSU5HX1ZFQ1RPUlMgPSA4LAorICAgIE1BWF9WRVJURVhfQVRUUklCUyA9IDE2LAorICAg
IE1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTID0gMjU2IC0gMiwgICAvLyAyNTYgaXMgdGhlIG1p
bmltdW0gZm9yIFNNMiwgYW5kIGluIHByYWN0aWNlIHRoZSBtYXhpbXVtIGZvciBEWDkuIFJlc2Vy
dmUgc3BhY2UgZm9yIGR4X0hhbGZQaXhlbFNpemUgYW5kIGR4X0RlcHRoUmFuZ2UuCisgICAgTUFY
X1ZBUllJTkdfVkVDVE9SU19TTTIgPSA4LAorICAgIE1BWF9WQVJZSU5HX1ZFQ1RPUlNfU00zID0g
MTAsCiAgICAgTUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAxNiwKICAgICBNQVhf
VkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMgPSAwLAogICAgIE1BWF9URVhUVVJFX0lNQUdFX1VO
SVRTID0gMTYsCi0gICAgTUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUyA9IDE2LAotICAgIE1B
WF9SRU5ERVJCVUZGRVJfU0laRSA9IDQwOTYsICAgLy8gRklYTUU6IFZlcmlmeQorICAgIE1BWF9G
UkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00yID0gMzIgLSAzLCAgICAvLyBSZXNlcnZlIHNwYWNl
IGZvciBkeF9WaWV3cG9ydCwgZHhfRGVwdGgsIGFuZCBkeF9EZXB0aFJhbmdlLiBkeF9Qb2ludE9y
TGluZXMgYW5kIGR4X0Zyb250Q0NXIHVzZSBzZXBhcmF0ZSBib29sIHJlZ2lzdGVycy4KKyAgICBN
QVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTX1NNMyA9IDIyNCAtIDMsCiAgICAgTUFYX0RSQVdf
QlVGRkVSUyA9IDEsCiAKICAgICBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVCA9IEdM
X1JHQiwKQEAgLTgzLDMyICs4NSw1NiBAQAogfTsKIAogLy8gSGVscGVyIHN0cnVjdHVyZSBkZXNj
cmliaW5nIGEgc2luZ2xlIHZlcnRleCBhdHRyaWJ1dGUKLWNsYXNzIEF0dHJpYnV0ZVN0YXRlCitj
bGFzcyBWZXJ0ZXhBdHRyaWJ1dGUKIHsKICAgcHVibGljOgotICAgIEF0dHJpYnV0ZVN0YXRlKCkK
LSAgICAgICAgOiBtVHlwZShHTF9GTE9BVCksIG1TaXplKDApLCBtTm9ybWFsaXplZChmYWxzZSks
IG1TdHJpZGUoMCksIG1Qb2ludGVyKE5VTEwpLCBtRW5hYmxlZChmYWxzZSkKKyAgICBWZXJ0ZXhB
dHRyaWJ1dGUoKSA6IG1UeXBlKEdMX0ZMT0FUKSwgbVNpemUoMCksIG1Ob3JtYWxpemVkKGZhbHNl
KSwgbVN0cmlkZSgwKSwgbVBvaW50ZXIoTlVMTCksIG1BcnJheUVuYWJsZWQoZmFsc2UpCiAgICAg
ewotICAgICAgICBtQ3VycmVudFZhbHVlWzBdID0gMDsKLSAgICAgICAgbUN1cnJlbnRWYWx1ZVsx
XSA9IDA7Ci0gICAgICAgIG1DdXJyZW50VmFsdWVbMl0gPSAwOwotICAgICAgICBtQ3VycmVudFZh
bHVlWzNdID0gMTsKKyAgICAgICAgbUN1cnJlbnRWYWx1ZVswXSA9IDAuMGY7CisgICAgICAgIG1D
dXJyZW50VmFsdWVbMV0gPSAwLjBmOworICAgICAgICBtQ3VycmVudFZhbHVlWzJdID0gMC4wZjsK
KyAgICAgICAgbUN1cnJlbnRWYWx1ZVszXSA9IDEuMGY7CiAgICAgfQogCi0gICAgLy8gRnJvbSBW
ZXJ0ZXhBcnJheVBvaW50ZXIKKyAgICBpbnQgdHlwZVNpemUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChtVHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfQllURTogICAg
ICAgICAgIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGJ5dGUpOworICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURTogIHJldHVybiBtU2l6ZSAqIHNpemVvZihHTHVieXRlKTsKKyAgICAgICAg
ICBjYXNlIEdMX1NIT1JUOiAgICAgICAgICByZXR1cm4gbVNpemUgKiBzaXplb2YoR0xzaG9ydCk7
CisgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDogcmV0dXJuIG1TaXplICogc2l6ZW9m
KEdMdXNob3J0KTsKKyAgICAgICAgICBjYXNlIEdMX0ZJWEVEOiAgICAgICAgICByZXR1cm4gbVNp
emUgKiBzaXplb2YoR0xmaXhlZCk7CisgICAgICAgICAgY2FzZSBHTF9GTE9BVDogICAgICAgICAg
cmV0dXJuIG1TaXplICogc2l6ZW9mKEdMZmxvYXQpOworICAgICAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7IHJldHVybiBtU2l6ZSAqIHNpemVvZihHTGZsb2F0KTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEdMc2l6ZWkgc3RyaWRlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
U3RyaWRlID8gbVN0cmlkZSA6IHR5cGVTaXplKCk7CisgICAgfQorCisgICAgLy8gRnJvbSBnbFZl
cnRleEF0dHJpYlBvaW50ZXIKICAgICBHTGVudW0gbVR5cGU7CiAgICAgR0xpbnQgbVNpemU7CiAg
ICAgYm9vbCBtTm9ybWFsaXplZDsKLSAgICBHTHNpemVpIG1TdHJpZGU7IC8vIDAgbWVhbnMgbmF0
dXJhbCBzdHJpZGUKLSAgICBjb25zdCB2b2lkICptUG9pbnRlcjsKKyAgICBHTHNpemVpIG1TdHJp
ZGU7ICAgLy8gMCBtZWFucyBuYXR1cmFsIHN0cmlkZQogCi0gICAgQmluZGluZ1BvaW50ZXI8QnVm
ZmVyPiBtQm91bmRCdWZmZXI7IC8vIENhcHR1cmVkIHdoZW4gVmVydGV4QXJyYXlQb2ludGVyIGlz
IGNhbGxlZC4KKyAgICB1bmlvbgorICAgIHsKKyAgICAgICAgY29uc3Qgdm9pZCAqbVBvaW50ZXI7
CisgICAgICAgIGludHB0cl90IG1PZmZzZXQ7CisgICAgfTsKIAotICAgIGJvb2wgbUVuYWJsZWQ7
IC8vIEZyb20gRW5hYmxlL0Rpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheQorICAgIEJpbmRpbmdQb2lu
dGVyPEJ1ZmZlcj4gbUJvdW5kQnVmZmVyOyAgIC8vIENhcHR1cmVkIHdoZW4gZ2xWZXJ0ZXhBdHRy
aWJQb2ludGVyIGlzIGNhbGxlZC4KIAotICAgIGZsb2F0IG1DdXJyZW50VmFsdWVbNF07IC8vIEZy
b20gVmVydGV4QXR0cmliNGYKKyAgICBib29sIG1BcnJheUVuYWJsZWQ7ICAgLy8gRnJvbSBnbEVu
YWJsZS9EaXNhYmxlVmVydGV4QXR0cmliQXJyYXkKKyAgICBmbG9hdCBtQ3VycmVudFZhbHVlWzRd
OyAgIC8vIEZyb20gZ2xWZXJ0ZXhBdHRyaWIKIH07CiAKK3R5cGVkZWYgVmVydGV4QXR0cmlidXRl
IFZlcnRleEF0dHJpYnV0ZUFycmF5W01BWF9WRVJURVhfQVRUUklCU107CisKIC8vIEhlbHBlciBz
dHJ1Y3R1cmUgdG8gc3RvcmUgYWxsIHJhdyBzdGF0ZQogc3RydWN0IFN0YXRlCiB7CkBAIC0xNTcs
NiArMTgzLDcgQEAKICAgICBHTGZsb2F0IGxpbmVXaWR0aDsKIAogICAgIEdMZW51bSBnZW5lcmF0
ZU1pcG1hcEhpbnQ7CisgICAgR0xlbnVtIGZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQ7CiAK
ICAgICBHTGludCB2aWV3cG9ydFg7CiAgICAgR0xpbnQgdmlld3BvcnRZOwpAQCAtMTc5LDE0ICsy
MDYsMTIgQEAKICAgICBpbnQgYWN0aXZlU2FtcGxlcjsgICAvLyBBY3RpdmUgdGV4dHVyZSB1bml0
IHNlbGVjdG9yIC0gR0xfVEVYVFVSRTAKICAgICBCaW5kaW5nUG9pbnRlcjxCdWZmZXI+IGFycmF5
QnVmZmVyOwogICAgIEJpbmRpbmdQb2ludGVyPEJ1ZmZlcj4gZWxlbWVudEFycmF5QnVmZmVyOwot
ICAgIEJpbmRpbmdQb2ludGVyPFRleHR1cmU+IHRleHR1cmUyRDsKLSAgICBCaW5kaW5nUG9pbnRl
cjxUZXh0dXJlPiB0ZXh0dXJlQ3ViZU1hcDsKICAgICBHTHVpbnQgcmVhZEZyYW1lYnVmZmVyOwog
ICAgIEdMdWludCBkcmF3RnJhbWVidWZmZXI7CiAgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVm
ZmVyPiByZW5kZXJidWZmZXI7CiAgICAgR0x1aW50IGN1cnJlbnRQcm9ncmFtOwogCi0gICAgQXR0
cmlidXRlU3RhdGUgdmVydGV4QXR0cmlidXRlW01BWF9WRVJURVhfQVRUUklCU107CisgICAgVmVy
dGV4QXR0cmlidXRlIHZlcnRleEF0dHJpYnV0ZVtNQVhfVkVSVEVYX0FUVFJJQlNdOwogICAgIEJp
bmRpbmdQb2ludGVyPFRleHR1cmU+IHNhbXBsZXJUZXh0dXJlW1NBTVBMRVJfVFlQRV9DT1VOVF1b
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFNdOwogCiAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50OwpA
QCAtMjY0LDYgKzI4OSw3IEBACiAgICAgdm9pZCBzZXRMaW5lV2lkdGgoR0xmbG9hdCB3aWR0aCk7
CiAKICAgICB2b2lkIHNldEdlbmVyYXRlTWlwbWFwSGludChHTGVudW0gaGludCk7CisgICAgdm9p
ZCBzZXRGcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50KEdMZW51bSBoaW50KTsKIAogICAgIHZv
aWQgc2V0Vmlld3BvcnRQYXJhbXMoR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQpOwogCkBAIC0yODAsMTMgKzMwNiwxMyBAQAogCiAgICAgR0x1aW50IGdldEFy
cmF5QnVmZmVySGFuZGxlKCkgY29uc3Q7CiAKLSAgICB2b2lkIHNldFZlcnRleEF0dHJpYkVuYWJs
ZWQodW5zaWduZWQgaW50IGF0dHJpYk51bSwgYm9vbCBlbmFibGVkKTsKLSAgICBjb25zdCBBdHRy
aWJ1dGVTdGF0ZSAmZ2V0VmVydGV4QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSk7
CisgICAgdm9pZCBzZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1bnNpZ25lZCBpbnQgYXR0cmli
TnVtLCBib29sIGVuYWJsZWQpOworICAgIGNvbnN0IFZlcnRleEF0dHJpYnV0ZSAmZ2V0VmVydGV4
QXR0cmliU3RhdGUodW5zaWduZWQgaW50IGF0dHJpYk51bSk7CiAgICAgdm9pZCBzZXRWZXJ0ZXhB
dHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBCdWZmZXIgKmJvdW5kQnVmZmVyLCBH
TGludCBzaXplLCBHTGVudW0gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgbm9ybWFsaXplZCwgR0xzaXplaSBzdHJpZGUsIGNvbnN0IHZvaWQgKnBvaW50ZXIpOwogICAg
IGNvbnN0IHZvaWQgKmdldFZlcnRleEF0dHJpYlBvaW50ZXIodW5zaWduZWQgaW50IGF0dHJpYk51
bSkgY29uc3Q7CiAKLSAgICBjb25zdCBBdHRyaWJ1dGVTdGF0ZSAqZ2V0VmVydGV4QXR0cmliQmxv
Y2soKTsKKyAgICBjb25zdCBWZXJ0ZXhBdHRyaWJ1dGVBcnJheSAmZ2V0VmVydGV4QXR0cmlidXRl
cygpOwogCiAgICAgdm9pZCBzZXRVbnBhY2tBbGlnbm1lbnQoR0xpbnQgYWxpZ25tZW50KTsKICAg
ICBHTGludCBnZXRVbnBhY2tBbGlnbm1lbnQoKSBjb25zdDsKQEAgLTMxMiw2ICszMzgsMTAgQEAK
ICAgICBHTHVpbnQgY3JlYXRlRnJhbWVidWZmZXIoKTsKICAgICB2b2lkIGRlbGV0ZUZyYW1lYnVm
ZmVyKEdMdWludCBmcmFtZWJ1ZmZlcik7CiAKKyAgICAvLyBGZW5jZXMgYXJlIG93bmVkIGJ5IHRo
ZSBDb250ZXh0LgorICAgIEdMdWludCBjcmVhdGVGZW5jZSgpOworICAgIHZvaWQgZGVsZXRlRmVu
Y2UoR0x1aW50IGZlbmNlKTsKKwogICAgIHZvaWQgYmluZEFycmF5QnVmZmVyKEdMdWludCBidWZm
ZXIpOwogICAgIHZvaWQgYmluZEVsZW1lbnRBcnJheUJ1ZmZlcihHTHVpbnQgYnVmZmVyKTsKICAg
ICB2b2lkIGJpbmRUZXh0dXJlMkQoR0x1aW50IHRleHR1cmUpOwpAQCAtMzI4LDYgKzM1OCw3IEBA
CiAgICAgdm9pZCBzZXRWZXJ0ZXhBdHRyaWIoR0x1aW50IGluZGV4LCBjb25zdCBHTGZsb2F0ICp2
YWx1ZXMpOwogCiAgICAgQnVmZmVyICpnZXRCdWZmZXIoR0x1aW50IGhhbmRsZSk7CisgICAgRmVu
Y2UgKmdldEZlbmNlKEdMdWludCBoYW5kbGUpOwogICAgIFNoYWRlciAqZ2V0U2hhZGVyKEdMdWlu
dCBoYW5kbGUpOwogICAgIFByb2dyYW0gKmdldFByb2dyYW0oR0x1aW50IGhhbmRsZSk7CiAgICAg
VGV4dHVyZSAqZ2V0VGV4dHVyZShHTHVpbnQgaGFuZGxlKTsKQEAgLTM1MSwyMCArMzgyLDIyIEBA
CiAKICAgICBib29sIGFwcGx5UmVuZGVyVGFyZ2V0KGJvb2wgaWdub3JlVmlld3BvcnQpOwogICAg
IHZvaWQgYXBwbHlTdGF0ZShHTGVudW0gZHJhd01vZGUpOwotICAgIEdMZW51bSBhcHBseVZlcnRl
eEJ1ZmZlcihHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIGJvb2wgKnVz
ZUluZGV4aW5nLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pOwotICAgIEdMZW51bSBh
cHBseVZlcnRleEJ1ZmZlcihjb25zdCBUcmFuc2xhdGVkSW5kZXhEYXRhICZpbmRleEluZm8pOwor
ICAgIEdMZW51bSBhcHBseVZlcnRleEJ1ZmZlcihHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCk7
CiAgICAgR0xlbnVtIGFwcGx5SW5kZXhCdWZmZXIoY29uc3Qgdm9pZCAqaW5kaWNlcywgR0xzaXpl
aSBjb3VudCwgR0xlbnVtIG1vZGUsIEdMZW51bSB0eXBlLCBUcmFuc2xhdGVkSW5kZXhEYXRhICpp
bmRleEluZm8pOwotICAgIEdMZW51bSBhcHBseUNvdW50aW5nSW5kZXhCdWZmZXIoR0xlbnVtIG1v
ZGUsIEdMZW51bSBjb3VudCwgVHJhbnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKTsKICAgICB2
b2lkIGFwcGx5U2hhZGVycygpOwogICAgIHZvaWQgYXBwbHlUZXh0dXJlcygpOwogCiAgICAgdm9p
ZCByZWFkUGl4ZWxzKEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVp
Z2h0LCBHTGVudW0gZm9ybWF0LCBHTGVudW0gdHlwZSwgdm9pZCogcGl4ZWxzKTsKICAgICB2b2lk
IGNsZWFyKEdMYml0ZmllbGQgbWFzayk7CiAgICAgdm9pZCBkcmF3QXJyYXlzKEdMZW51bSBtb2Rl
LCBHTGludCBmaXJzdCwgR0xzaXplaSBjb3VudCk7Ci0gICAgdm9pZCBkcmF3RWxlbWVudHMoR0xl
bnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBpbmRpY2Vz
KTsKKyAgICB2b2lkIGRyYXdFbGVtZW50cyhHTGVudW0gbW9kZSwgR0xzaXplaSBjb3VudCwgR0xl
bnVtIHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMpOwogICAgIHZvaWQgZmluaXNoKCk7CiAgICAg
dm9pZCBmbHVzaCgpOwogCisJLy8gRHJhdyB0aGUgbGFzdCBzZWdtZW50IG9mIGEgbGluZSBsb29w
CisgICAgdm9pZCBkcmF3Q2xvc2luZ0xpbmUodW5zaWduZWQgaW50IGZpcnN0LCB1bnNpZ25lZCBp
bnQgbGFzdCk7CisgICAgdm9pZCBkcmF3Q2xvc2luZ0xpbmUoR0xzaXplaSBjb3VudCwgR0xlbnVt
IHR5cGUsIGNvbnN0IHZvaWQgKmluZGljZXMpOworCiAgICAgdm9pZCByZWNvcmRJbnZhbGlkRW51
bSgpOwogICAgIHZvaWQgcmVjb3JkSW52YWxpZFZhbHVlKCk7CiAgICAgdm9pZCByZWNvcmRJbnZh
bGlkT3BlcmF0aW9uKCk7CkBAIC0zNzQsMTAgKzQwNywyNiBAQAogICAgIEdMZW51bSBnZXRFcnJv
cigpOwogCiAgICAgYm9vbCBzdXBwb3J0c1NoYWRlck1vZGVsMygpIGNvbnN0OworICAgIGludCBn
ZXRNYXhpbXVtVmFyeWluZ1ZlY3RvcnMoKSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bUZyYWdt
ZW50VW5pZm9ybVZlY3RvcnMoKSBjb25zdDsKKyAgICBpbnQgZ2V0TWF4aW11bVJlbmRlcmJ1ZmZl
ckRpbWVuc2lvbigpIGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigp
IGNvbnN0OworICAgIGludCBnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSBjb25zdDsK
KyAgICBpbnQgZ2V0TWF4aW11bVRleHR1cmVMZXZlbCgpIGNvbnN0OwogICAgIEdMc2l6ZWkgZ2V0
TWF4U3VwcG9ydGVkU2FtcGxlcygpIGNvbnN0OwogICAgIGludCBnZXROZWFyZXN0U3VwcG9ydGVk
U2FtcGxlcyhEM0RGT1JNQVQgZm9ybWF0LCBpbnQgcmVxdWVzdGVkKSBjb25zdDsKICAgICBjb25z
dCBjaGFyICpnZXRFeHRlbnNpb25TdHJpbmcoKSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzRXZl
bnRRdWVyaWVzKCkgY29uc3Q7CiAgICAgYm9vbCBzdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlcygp
IGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNGbG9hdFRleHR1cmVzKCkgY29uc3Q7CisgICAgYm9v
bCBzdXBwb3J0c0Zsb2F0TGluZWFyRmlsdGVyKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0Zs
b2F0UmVuZGVyYWJsZVRleHR1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0hhbGZGbG9h
dFRleHR1cmVzKCkgY29uc3Q7CisgICAgYm9vbCBzdXBwb3J0c0hhbGZGbG9hdExpbmVhckZpbHRl
cigpIGNvbnN0OworICAgIGJvb2wgc3VwcG9ydHNIYWxmRmxvYXRSZW5kZXJhYmxlVGV4dHVyZXMo
KSBjb25zdDsKKyAgICBib29sIHN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXMoKSBjb25zdDsKKyAg
ICBib29sIHN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcygpIGNvbnN0OworICAgIGJvb2wg
c3VwcG9ydHMzMmJpdEluZGljZXMoKSBjb25zdDsKIAogICAgIHZvaWQgYmxpdEZyYW1lYnVmZmVy
KEdMaW50IHNyY1gwLCBHTGludCBzcmNZMCwgR0xpbnQgc3JjWDEsIEdMaW50IHNyY1kxLCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICBHTGludCBkc3RYMCwgR0xpbnQgZHN0WTAsIEdMaW50IGRz
dFgxLCBHTGludCBkc3RZMSwKQEAgLTQwNiwyNSArNDU1LDI0IEBACiAKICAgICBTdGF0ZSAgIG1T
dGF0ZTsKIAotICAgIFRleHR1cmUyRCAqbVRleHR1cmUyRFplcm87Ci0gICAgVGV4dHVyZUN1YmVN
YXAgKm1UZXh0dXJlQ3ViZU1hcFplcm87CisgICAgQmluZGluZ1BvaW50ZXI8VGV4dHVyZTJEPiBt
VGV4dHVyZTJEWmVybzsKKyAgICBCaW5kaW5nUG9pbnRlcjxUZXh0dXJlQ3ViZU1hcD4gbVRleHR1
cmVDdWJlTWFwWmVybzsKIAotICAgIENvbG9yYnVmZmVyICptQ29sb3JidWZmZXJaZXJvOwotICAg
IERlcHRoU3RlbmNpbGJ1ZmZlciAqbURlcHRoU3RlbmNpbGJ1ZmZlclplcm87Ci0KICAgICB0eXBl
ZGVmIHN0ZDo6bWFwPEdMdWludCwgRnJhbWVidWZmZXIqPiBGcmFtZWJ1ZmZlck1hcDsKICAgICBG
cmFtZWJ1ZmZlck1hcCBtRnJhbWVidWZmZXJNYXA7CiAKKyAgICB0eXBlZGVmIHN0ZDo6bWFwPEdM
dWludCwgRmVuY2UqPiBGZW5jZU1hcDsKKyAgICBGZW5jZU1hcCBtRmVuY2VNYXA7CisKICAgICB2
b2lkIGluaXRFeHRlbnNpb25TdHJpbmcoKTsKICAgICBzdGQ6OnN0cmluZyBtRXh0ZW5zaW9uU3Ry
aW5nOwogCi0gICAgQnVmZmVyQmFja0VuZCAqbUJ1ZmZlckJhY2tFbmQ7CiAgICAgVmVydGV4RGF0
YU1hbmFnZXIgKm1WZXJ0ZXhEYXRhTWFuYWdlcjsKICAgICBJbmRleERhdGFNYW5hZ2VyICptSW5k
ZXhEYXRhTWFuYWdlcjsKIAogICAgIEJsaXQgKm1CbGl0OwogICAgIAotICAgIFRleHR1cmUgKm1J
bmNvbXBsZXRlVGV4dHVyZXNbU0FNUExFUl9UWVBFX0NPVU5UXTsKKyAgICBCaW5kaW5nUG9pbnRl
cjxUZXh0dXJlPiBtSW5jb21wbGV0ZVRleHR1cmVzW1NBTVBMRVJfVFlQRV9DT1VOVF07CiAKICAg
ICAvLyBSZWNvcmRlZCBlcnJvcnMKICAgICBib29sIG1JbnZhbGlkRW51bTsKQEAgLTQzOSwxMSAr
NDg3LDI2IEBACiAgICAgdW5zaWduZWQgaW50IG1BcHBsaWVkUmVuZGVyVGFyZ2V0U2VyaWFsOwog
ICAgIHVuc2lnbmVkIGludCBtQXBwbGllZERlcHRoYnVmZmVyU2VyaWFsOwogICAgIHVuc2lnbmVk
IGludCBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWw7CisgICAgYm9vbCBtRGVwdGhTdGVuY2ls
SW5pdGlhbGl6ZWQ7CiAKICAgICBib29sIG1TdXBwb3J0c1NoYWRlck1vZGVsMzsKKyAgICBpbnQg
IG1NYXhSZW5kZXJidWZmZXJEaW1lbnNpb247CisgICAgaW50ICBtTWF4VGV4dHVyZURpbWVuc2lv
bjsKKyAgICBpbnQgIG1NYXhDdWJlVGV4dHVyZURpbWVuc2lvbjsKKyAgICBpbnQgIG1NYXhUZXh0
dXJlTGV2ZWw7CiAgICAgc3RkOjptYXA8RDNERk9STUFULCBib29sICo+IG1NdWx0aVNhbXBsZVN1
cHBvcnQ7CiAgICAgR0xzaXplaSBtTWF4U3VwcG9ydGVkU2FtcGxlczsKKyAgICBib29sIG1TdXBw
b3J0c0V2ZW50UXVlcmllczsKICAgICBib29sIG1TdXBwb3J0c0NvbXByZXNzZWRUZXh0dXJlczsK
KyAgICBib29sIG1TdXBwb3J0c0Zsb2F0VGV4dHVyZXM7CisgICAgYm9vbCBtU3VwcG9ydHNGbG9h
dExpbmVhckZpbHRlcjsKKyAgICBib29sIG1TdXBwb3J0c0Zsb2F0UmVuZGVyYWJsZVRleHR1cmVz
OworICAgIGJvb2wgbVN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXM7CisgICAgYm9vbCBtU3VwcG9y
dHNIYWxmRmxvYXRMaW5lYXJGaWx0ZXI7CisgICAgYm9vbCBtU3VwcG9ydHNIYWxmRmxvYXRSZW5k
ZXJhYmxlVGV4dHVyZXM7CisgICAgYm9vbCBtU3VwcG9ydHNMdW1pbmFuY2VUZXh0dXJlczsKKyAg
ICBib29sIG1TdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXM7CisgICAgYm9vbCBtU3VwcG9y
dHMzMmJpdEluZGljZXM7CiAKICAgICAvLyBzdGF0ZSBjYWNoaW5nIGZsYWdzCiAgICAgYm9vbCBt
Q2xlYXJTdGF0ZURpcnR5OwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9saWJHTEVTdjIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9saWJHTEVTdjIvbGliR0xFU3YyLmNwcAkocmV2aXNpb24gNzYwMjUpCisrKyBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJsaWJHTEVTdjIvdXRpbGl0aWVzLmgiCiAj
aW5jbHVkZSAibGliR0xFU3YyL0J1ZmZlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9Db250ZXh0
LmgiCisjaW5jbHVkZSAibGliR0xFU3YyL0ZlbmNlLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL0Zy
YW1lYnVmZmVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Byb2dyYW0uaCIKICNpbmNsdWRlICJs
aWJHTEVTdjIvUmVuZGVyYnVmZmVyLmgiCkBAIC03MzYsNyArNzM3LDcgQEAKIAogICAgIHRyeQog
ICAgIHsKLSAgICAgICAgaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+IGdsOjpNQVhfVEVYVFVSRV9M
RVZFTFMpCisgICAgICAgIGlmIChsZXZlbCA8IDApCiAgICAgICAgIHsKICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQpAQCAtNzQ2LDM0ICs3NDcs
NiBAQAogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAg
ICB9CiAKLSAgICAgICAgc3dpdGNoICh0YXJnZXQpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfMkQ6Ci0gICAgICAgICAgICBpZiAod2lkdGggPiAoZ2w6Ok1BWF9URVhUVVJF
X1NJWkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChnbDo6TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZl
bCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfVkFMVUUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
Y2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Ci0gICAgICAgICAgY2FzZSBHTF9U
RVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1g6Ci0gICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NV
QkVfTUFQX1BPU0lUSVZFX1k6Ci0gICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05F
R0FUSVZFX1k6Ci0gICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1o6
Ci0gICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6Ci0gICAgICAg
ICAgICBpZiAod2lkdGggIT0gaGVpZ2h0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgaWYgKHdpZHRoID4gKGdsOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID4+IGxldmVs
KSB8fCBoZWlnaHQgPiAoZ2w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZB
TFVFKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAg
fQotCiAgICAgICAgIHN3aXRjaCAoaW50ZXJuYWxmb3JtYXQpCiAgICAgICAgIHsKICAgICAgICAg
ICBjYXNlIEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CkBAIC03OTIsNiArNzY1LDQx
IEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChs
ZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2ZWwoKSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFyZ2V0KQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfMkQ6CisgICAgICAgICAgICAgICAgaWYgKHdpZHRo
ID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8Cisg
ICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURp
bWVuc2lvbigpID4+IGxldmVsKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJF
X01BUF9QT1NJVElWRV9YOgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWDoKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1k6CisgICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgorICAgICAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1o6CisgICAgICAg
ICAgICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11
bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwpIHx8CisgICAgICAgICAgICAgICAgICAg
IGhlaWdodCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBs
ZXZlbCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBl
cnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAo
IWNvbnRleHQtPnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzKCkpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMg
Y2FzZSwgaXQncyBhcyB0aG91Z2ggdGhlIGludGVybmFsIGZvcm1hdCBzd2l0Y2ggZmFpbGVkCkBA
IC04NTksNyArODY3LDcgQEAKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VO
VU0pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+IGdsOjpN
QVhfVEVYVFVSRV9MRVZFTFMpCisgICAgICAgIGlmIChsZXZlbCA8IDApCiAgICAgICAgIHsKICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQpAQCAt
ODg4LDYgKzg5NiwxMSBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7CisgICAg
ICAgICAgICBpZiAobGV2ZWwgPiBjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFM
VUUpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1cHBvcnRz
Q29tcHJlc3NlZFRleHR1cmVzKCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IC8vIGluIHRoaXMgY2FzZSwgaXQncyBhcyB0aG91
Z2ggdGhlIGZvcm1hdCBzd2l0Y2ggaGFzIGZhaWxlZC4KQEAgLTk3OCw0OCArOTkxLDYgQEAKICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgfQogCi0g
ICAgICAgIHN3aXRjaCAodGFyZ2V0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9URVhU
VVJFXzJEOgotICAgICAgICAgICAgaWYgKHdpZHRoID4gKGdsOjpNQVhfVEVYVFVSRV9TSVpFID4+
IGxldmVsKSB8fCBoZWlnaHQgPiAoZ2w6Ok1BWF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YOgotICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9D
VUJFX01BUF9ORUdBVElWRV9YOgotICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9Q
T1NJVElWRV9ZOgotICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9Z
OgotICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgotICAgICAg
ICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9aOgotICAgICAgICAgICAgaWYg
KHdpZHRoICE9IGhlaWdodCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlm
ICh3aWR0aCA+IChnbDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkgfHwgaGVp
Z2h0ID4gKGdsOjpNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFID4+IGxldmVsKSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQotICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBH
TF9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKLSAgICAgICAgICBjYXNlIEdM
X0xVTUlOQU5DRV9BTFBIQToKLSAgICAgICAgICBjYXNlIEdMX1JHQjoKLSAgICAgICAgICBjYXNl
IEdMX1JHQkE6Ci0gICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhU
OiAgLy8gQ29tcHJlc3NlZCB0ZXh0dXJlcyBhcmUgbm90IHN1cHBvcnRlZCBoZXJlLCBidXQgaWYg
dGhleSBhcmUgdW5zdXBwb3J0ZWQgYWx0b2dldGhlciwKLSAgICAgICAgICBjYXNlIEdMX0NPTVBS
RVNTRURfUkdCQV9TM1RDX0RYVDFfRVhUOiAvLyBhIGRpZmZlcmVudCBlcnJvciBpcyBnZW5lcmF0
ZWQgdGhhbiBvdGhlcndpc2UuIFRoYXQgaXMgaGFuZGxlZCBiZWxvdy4KLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7Ci0gICAgICAgIH0KLQogICAgICAgICBpZiAoYm9yZGVyICE9IDApCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKQEAgLTEw
MjksMjAgKzEwMDAsMzggQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgewotICAg
ICAgICAgICAgaWYgKGludGVybmFsZm9ybWF0ID09IEdMX0NPTVBSRVNTRURfUkdCX1MzVENfRFhU
MV9FWFQgfHwgCi0gICAgICAgICAgICAgICAgaW50ZXJuYWxmb3JtYXQgPT0gR0xfQ09NUFJFU1NF
RF9SR0JBX1MzVENfRFhUMV9FWFQpCisgICAgICAgICAgICBzd2l0Y2ggKHRhcmdldCkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNDb21wcmVzc2Vk
VGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFXzJEOgorICAgICAgICAg
ICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lvbigp
ID4+IGxldmVsKSB8fAorICAgICAgICAgICAgICAgICAgICBoZWlnaHQgPiAoY29udGV4dC0+Z2V0
TWF4aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCiAgICAgICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgICAgICAgICBpZiAod2lkdGgg
IT0gaGVpZ2h0KQogICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJv
cihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGltZW5zaW9uKCkg
Pj4gbGV2ZWwpIHx8CisgICAgICAgICAgICAgICAgICAgIGhlaWdodCA+IChjb250ZXh0LT5nZXRN
YXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkpCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBnbDo6RnJhbWVidWZmZXIgKmZyYW1lYnVmZmVy
ID0gY29udGV4dC0+Z2V0UmVhZEZyYW1lYnVmZmVyKCk7CisKICAgICAgICAgICAgIGlmIChmcmFt
ZWJ1ZmZlci0+Y29tcGxldGVuZXNzKCkgIT0gR0xfRlJBTUVCVUZGRVJfQ09NUExFVEUpCiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRlJBTUVC
VUZGRVJfT1BFUkFUSU9OKTsKQEAgLTEwNTQsNiArMTA0Myw1OSBAQAogICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICBnbDo6Q29sb3JidWZmZXIgKnNvdXJjZSA9IGZyYW1lYnVmZmVyLT5nZXRD
b2xvcmJ1ZmZlcigpOworICAgICAgICAgICAgR0xlbnVtIGNvbG9yYnVmZmVyRm9ybWF0ID0gc291
cmNlLT5nZXRGb3JtYXQoKTsKKworICAgICAgICAgICAgLy8gW09wZW5HTCBFUyAyLjAuMjRdIHRh
YmxlIDMuOQorICAgICAgICAgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAgICAgICAgICBpZiAoY29s
b3JidWZmZXJGb3JtYXQgIT0gR0xfQUxQSEEgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3Ji
dWZmZXJGb3JtYXQgIT0gR0xfUkdCQSAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0JBNCAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZv
cm1hdCAhPSBHTF9SR0I1X0ExICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9y
bWF0ICE9IEdMX1JHQkE4X09FUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5D
RToKKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgICAgICAgaWYgKGNvbG9y
YnVmZmVyRm9ybWF0ICE9IEdMX1JHQiAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZl
ckZvcm1hdCAhPSBHTF9SR0I1NjUgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJG
b3JtYXQgIT0gR0xfUkdCOF9PRVMgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJG
b3JtYXQgIT0gR0xfUkdCQSAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1h
dCAhPSBHTF9SR0JBNCAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAh
PSBHTF9SR0I1X0ExICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9
IEdMX1JHQkE4X09FUykKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBI
QToKKyAgICAgICAgICAgICAgY2FzZSBHTF9SR0JBOgorICAgICAgICAgICAgICAgIGlmIChjb2xv
cmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVm
ZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVy
Rm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJG
b3JtYXQgIT0gR0xfUkdCQThfT0VTKQorICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0NP
TVBSRVNTRURfUkdCX1MzVENfRFhUMV9FWFQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJF
U1NFRF9SR0JBX1MzVENfRFhUMV9FWFQ6CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPnN1
cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzKCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAgICAg
ICB9CisKICAgICAgICAgICAgIGlmICh0YXJnZXQgPT0gR0xfVEVYVFVSRV8yRCkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBnbDo6VGV4dHVyZTJEICp0ZXh0dXJlID0gY29udGV4dC0+
Z2V0VGV4dHVyZTJEKCk7CkBAIC0xMDYyLDExICsxMTA0LDYgQEAKICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7
CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlm
ICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAgICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weUltYWdlKGxldmVsLCBpbnRl
cm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgc291cmNlKTsKICAgICAgICAgICAgIH0K
QEAgLTEwNzksMTcgKzExMTYsOSBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3Io
R0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg
ICAgIGlmICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09QRVJBVElPTik7Ci0gICAg
ICAgICAgICAgICAgfQotCiAgICAgICAgICAgICAgICAgdGV4dHVyZS0+Y29weUltYWdlKHRhcmdl
dCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBzb3VyY2UpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIFVO
UkVBQ0hBQkxFKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgY2F0Y2goc3RkOjpiYWRfYWxsb2Mm
KQpAQCAtMTExMSw3ICsxMTQwLDcgQEAKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+
IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMgfHwgeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwg
d2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIGlmIChsZXZlbCA8IDAgfHwgeG9mZnNl
dCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAg
fQpAQCAtMTEzMCw3ICsxMTU5LDEzIEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2
ZWwoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGdsOjpGcmFtZWJ1ZmZl
ciAqZnJhbWVidWZmZXIgPSBjb250ZXh0LT5nZXRSZWFkRnJhbWVidWZmZXIoKTsKKwogICAgICAg
ICAgICAgaWYgKGZyYW1lYnVmZmVyLT5jb21wbGV0ZW5lc3MoKSAhPSBHTF9GUkFNRUJVRkZFUl9D
T01QTEVURSkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xf
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04pOwpAQCAtMTE0Miw0MiArMTE3Nyw3MCBAQAog
ICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBnbDo6Q29sb3JidWZmZXIgKnNvdXJjZSA9IGZy
YW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlcigpOworICAgICAgICAgICAgR0xlbnVtIGNvbG9yYnVm
ZmVyRm9ybWF0ID0gc291cmNlLT5nZXRGb3JtYXQoKTsKKyAgICAgICAgICAgIGdsOjpUZXh0dXJl
ICp0ZXh0dXJlID0gTlVMTDsKKwogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJF
XzJEKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKKyAgICAgICAgICAgICAgICB0ZXh0dXJlID0g
Y29udGV4dC0+Z2V0VGV4dHVyZTJEKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl
IGlmIChnbDo6SXNDdWJlbWFwVGV4dHVyZVRhcmdldCh0YXJnZXQpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3ViZU1hcCgpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBVTlJFQUNIQUJMRSgpOwogCi0gICAgICAg
ICAgICAgICAgaWYgKCF0ZXh0dXJlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKLSAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIXRleHR1cmUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAgICAgICAgICAgIH0K
IAotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJlLT5pc0NvbXByZXNzZWQoKSkKKyAgICAgICAg
ICAgIEdMZW51bSB0ZXh0dXJlRm9ybWF0ID0gdGV4dHVyZS0+Z2V0Rm9ybWF0KCk7CisKKyAgICAg
ICAgICAgIC8vIFtPcGVuR0wgRVMgMi4wLjI0XSB0YWJsZSAzLjkKKyAgICAgICAgICAgIHN3aXRj
aCAodGV4dHVyZUZvcm1hdCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgY2FzZSBHTF9B
TFBIQToKKyAgICAgICAgICAgICAgICBpZiAoY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfQUxQSEEg
JiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQSAmJgor
ICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgorICAg
ICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCisgICAg
ICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElE
X09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgdGV4dHVy
ZS0+Y29weVN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCBzb3VyY2UpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoZ2w6Oklz
Q3ViZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBnbDo6VGV4dHVyZUN1YmVNYXAgKnRleHR1cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlQ3Vi
ZU1hcCgpOwotCi0gICAgICAgICAgICAgICAgaWYgKCF0ZXh0dXJlKQorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgICAgICAg
Y2FzZSBHTF9SR0I6CisgICAgICAgICAgICAgICAgaWYgKGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdM
X1JHQiAmJgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1
NjUgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCOF9P
RVMgJiYKKyAgICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQSAm
JgorICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBNCAmJgor
ICAgICAgICAgICAgICAgICAgICBjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0I1X0ExICYmCisg
ICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE4X09FUykKICAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX09QRVJBVElPTik7CiAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYg
KHRleHR1cmUtPmlzQ29tcHJlc3NlZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToKKyAgICAgICAgICAgICAgY2FzZSBHTF9S
R0JBOgorICAgICAgICAgICAgICAgIGlmIChjb2xvcmJ1ZmZlckZvcm1hdCAhPSBHTF9SR0JBICYm
CisgICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQkE0ICYmCisg
ICAgICAgICAgICAgICAgICAgIGNvbG9yYnVmZmVyRm9ybWF0ICE9IEdMX1JHQjVfQTEgJiYKKyAg
ICAgICAgICAgICAgICAgICAgY29sb3JidWZmZXJGb3JtYXQgIT0gR0xfUkdCQThfT0VTKQogICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFM
SURfT1BFUkFUSU9OKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgIGNhc2UgR0xfQ09NUFJFU1NFRF9SR0JfUzNUQ19EWFQxX0VYVDoKKyAg
ICAgICAgICAgICAgY2FzZSBHTF9DT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQxX0VYVDoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX09Q
RVJBVElPTik7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICB0ZXh0dXJlLT5jb3B5
U3ViSW1hZ2UodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgc291cmNlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRSgpOwotICAgICAgICAgICAgfQorICAg
ICAgICAgICAgdGV4dHVyZS0+Y29weVN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNvdXJjZSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTEyOTMsNiArMTM1NiwzMyBAQAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNhbGwgZ2xEZWxl
dGVGZW5jZXNOVihHTHNpemVpIG4sIGNvbnN0IEdMdWludCogZmVuY2VzKQoreworICAgIFRSQUNF
KCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogZmVuY2VzID0gMHglMC44cCkiLCBuLCBm
ZW5jZXMpOworCisgICAgdHJ5CisgICAgeworICAgICAgICBpZiAobiA8IDApCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgfQor
CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAg
ICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBuOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZGVs
ZXRlRmVuY2UoZmVuY2VzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCiB2b2lkIF9fc3RkY2FsbCBnbERlbGV0ZUZyYW1l
YnVmZmVycyhHTHNpemVpIG4sIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzKQogewogICAgIFRS
QUNFKCIoR0xzaXplaSBuID0gJWQsIGNvbnN0IEdMdWludCogZnJhbWVidWZmZXJzID0gMHglMC44
cCkiLCBuLCBmcmFtZWJ1ZmZlcnMpOwpAQCAtMTYyNCw3ICsxNzE0LDcgQEAKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgewotICAgICAgICAgICAgY29udGV4dC0+c2V0VmVydGV4QXR0
cmliRW5hYmxlZChpbmRleCwgZmFsc2UpOworICAgICAgICAgICAgY29udGV4dC0+c2V0RW5hYmxl
VmVydGV4QXR0cmliQXJyYXkoaW5kZXgsIGZhbHNlKTsKICAgICAgICAgfQogICAgIH0KICAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCkBAIC0xNjY5LDIwICsxNzU5LDI1IEBACiAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBz
d2l0Y2ggKHR5cGUpCi0gICAgICAgIHsKLSAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6
Ci0gICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVDoKLSAgICAgICAgICBjYXNlIEdMX1VO
U0lHTkVEX0lOVDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgIGRlZmF1bHQ6Ci0gICAg
ICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9FTlVNKTsKLSAgICAgICAgfQotCiAgICAg
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKIAogICAgICAgICBp
ZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh0eXBlKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX0JZVEU6CisgICAgICAgICAg
ICAgIGNhc2UgR0xfVU5TSUdORURfU0hPUlQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgIGNhc2UgR0xfVU5TSUdORURfSU5UOgorICAgICAgICAgICAgICAgIGlmICghY29u
dGV4dC0+c3VwcG9ydHMzMmJpdEluZGljZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOyAgICAKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIAogICAgICAgICAgICAgY29udGV4dC0+ZHJhd0VsZW1lbnRzKG1vZGUs
IGNvdW50LCB0eXBlLCBpbmRpY2VzKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE3MzksNyArMTgz
NCw3IEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGNv
bnRleHQtPnNldFZlcnRleEF0dHJpYkVuYWJsZWQoaW5kZXgsIHRydWUpOworICAgICAgICAgICAg
Y29udGV4dC0+c2V0RW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaW5kZXgsIHRydWUpOwogICAgICAg
ICB9CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTE3NDgsNiArMTg0Mywz
MiBAQAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNhbGwgZ2xGaW5pc2hGZW5jZU5WKEdMdWludCBm
ZW5jZSkKK3sKKyAgICBUUkFDRSgiKEdMdWludCBmZW5jZSA9ICVkKSIsIGZlbmNlKTsKKworICAg
IHRyeQorICAgIHsKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4
dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6
RmVuY2UqIGZlbmNlT2JqZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworCisgICAgICAg
ICAgICBpZiAoZmVuY2VPYmplY3QgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmZW5jZU9iamVjdC0+ZmluaXNoRmVuY2UoKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJy
b3IoR0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCiB2b2lkIF9fc3RkY2FsbCBnbEZpbmlz
aCh2b2lkKQogewogICAgIFRSQUNFKCIoKSIpOwpAQCAtMjA0Niw2ICsyMTY3LDMzIEBACiAgICAg
fQogfQogCit2b2lkIF9fc3RkY2FsbCBnbEdlbkZlbmNlc05WKEdMc2l6ZWkgbiwgR0x1aW50KiBm
ZW5jZXMpCit7CisgICAgVFJBQ0UoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBmZW5jZXMgPSAw
eCUwLjhwKSIsIG4sIGZlbmNlcyk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGlmIChuIDwg
MCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUp
OworICAgICAgICB9CisKKyAgICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29u
dGV4dCgpOworCisgICAgICAgIGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBmZW5jZXNbaV0gPSBjb250ZXh0LT5jcmVhdGVGZW5jZSgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAgICB7CisgICAgICAg
IHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisKIHZvaWQgX19zdGRj
YWxsIGdsR2VuRnJhbWVidWZmZXJzKEdMc2l6ZWkgbiwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMpCiB7
CiAgICAgVFJBQ0UoIihHTHNpemVpIG4gPSAlZCwgR0x1aW50KiBmcmFtZWJ1ZmZlcnMgPSAweCUw
LjhwKSIsIG4sIGZyYW1lYnVmZmVycyk7CkBAIC0yNDIxLDYgKzI1NjksMzMgQEAKICAgICByZXR1
cm4gR0xfTk9fRVJST1I7CiB9CiAKK3ZvaWQgX19zdGRjYWxsIGdsR2V0RmVuY2Vpdk5WKEdMdWlu
dCBmZW5jZSwgR0xlbnVtIHBuYW1lLCBHTGludCAqcGFyYW1zKQoreworICAgIFRSQUNFKCIoR0x1
aW50IGZlbmNlID0gJWQsIEdMZW51bSBwbmFtZSA9IDB4JVgsIEdMaW50ICpwYXJhbXMgPSAweCUw
LjhwKSIsIGZlbmNlLCBwbmFtZSwgcGFyYW1zKTsKKworICAgIHRyeQorICAgIHsKKyAgICAKKyAg
ICAgICAgZ2w6OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOworCisgICAgICAg
IGlmIChjb250ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICBnbDo6RmVuY2UgKmZlbmNlT2Jq
ZWN0ID0gY29udGV4dC0+Z2V0RmVuY2UoZmVuY2UpOworCisgICAgICAgICAgICBpZiAoZmVuY2VP
YmplY3QgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy
b3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBm
ZW5jZU9iamVjdC0+Z2V0RmVuY2VpdihwbmFtZSwgcGFyYW1zKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBjYXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
R0xfT1VUX09GX01FTU9SWSk7CisgICAgfQorfQorCiB2b2lkIF9fc3RkY2FsbCBnbEdldEZsb2F0
dihHTGVudW0gcG5hbWUsIEdMZmxvYXQqIHBhcmFtcykKIHsKICAgICBUUkFDRSgiKEdMZW51bSBw
bmFtZSA9IDB4JVgsIEdMZmxvYXQqIHBhcmFtcyA9IDB4JTAuOHApIiwgcG5hbWUsIHBhcmFtcyk7
CkBAIC0zMjg3LDEyICszNDYyLDEyIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBjb25zdCBnbDo6
QXR0cmlidXRlU3RhdGUgJmF0dHJpYlN0YXRlID0gY29udGV4dC0+Z2V0VmVydGV4QXR0cmliU3Rh
dGUoaW5kZXgpOworICAgICAgICAgICAgY29uc3QgZ2w6OlZlcnRleEF0dHJpYnV0ZSAmYXR0cmli
U3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CiAKICAgICAgICAg
ICAgIHN3aXRjaCAocG5hbWUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2UgR0xf
VkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEOgotICAgICAgICAgICAgICAgICpwYXJhbXMgPSAo
R0xmbG9hdCkoYXR0cmliU3RhdGUubUVuYWJsZWQgPyBHTF9UUlVFIDogR0xfRkFMU0UpOworICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSAoR0xmbG9hdCkoYXR0cmliU3RhdGUubUFycmF5RW5hYmxl
ZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgIGNhc2UgR0xfVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFOgogICAgICAgICAgICAgICAg
ICpwYXJhbXMgPSAoR0xmbG9hdClhdHRyaWJTdGF0ZS5tU2l6ZTsKQEAgLTMzNDAsMTIgKzM1MTUs
MTIgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbnN0IGdsOjpBdHRyaWJ1dGVTdGF0ZSAmYXR0
cmliU3RhdGUgPSBjb250ZXh0LT5nZXRWZXJ0ZXhBdHRyaWJTdGF0ZShpbmRleCk7CisgICAgICAg
ICAgICBjb25zdCBnbDo6VmVydGV4QXR0cmlidXRlICZhdHRyaWJTdGF0ZSA9IGNvbnRleHQtPmdl
dFZlcnRleEF0dHJpYlN0YXRlKGluZGV4KTsKIAogICAgICAgICAgICAgc3dpdGNoIChwbmFtZSkK
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZ
X0VOQUJMRUQ6Ci0gICAgICAgICAgICAgICAgKnBhcmFtcyA9IChhdHRyaWJTdGF0ZS5tRW5hYmxl
ZCA/IEdMX1RSVUUgOiBHTF9GQUxTRSk7CisgICAgICAgICAgICAgICAgKnBhcmFtcyA9IChhdHRy
aWJTdGF0ZS5tQXJyYXlFbmFibGVkID8gR0xfVFJVRSA6IEdMX0ZBTFNFKTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgY2FzZSBHTF9WRVJURVhfQVRUUklCX0FSUkFZX1NJ
WkU6CiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGF0dHJpYlN0YXRlLm1TaXplOwpAQCAtMzQx
NCwyOCArMzU4OSwyNyBAQAogCiAgICAgdHJ5CiAgICAgewotICAgICAgICBzd2l0Y2ggKHRhcmdl
dCkKKyAgICAgICAgc3dpdGNoIChtb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgY2FzZSBHTF9H
RU5FUkFURV9NSVBNQVBfSElOVDoKLSAgICAgICAgICAgIHN3aXRjaCAobW9kZSkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgY2FzZSBHTF9GQVNURVNUOgotICAgICAgICAgICAgICBjYXNl
IEdMX05JQ0VTVDoKLSAgICAgICAgICAgICAgY2FzZSBHTF9ET05UX0NBUkU6Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IAotICAgICAgICAgICAgfQorICAgICAgICAgIGNh
c2UgR0xfRkFTVEVTVDoKKyAgICAgICAgICBjYXNlIEdMX05JQ0VTVDoKKyAgICAgICAgICBjYXNl
IEdMX0RPTlRfQ0FSRToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7IAogICAgICAgICB9CiAKICAgICAgICAgZ2w6
OkNvbnRleHQgKmNvbnRleHQgPSBnbDo6Z2V0Q29udGV4dCgpOwotICAgICAgICBpZiAoY29udGV4
dCkKKyAgICAgICAgc3dpdGNoICh0YXJnZXQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0
YXJnZXQgPT0gR0xfR0VORVJBVEVfTUlQTUFQX0hJTlQpCi0gICAgICAgICAgICAgICAgY29udGV4
dC0+c2V0R2VuZXJhdGVNaXBtYXBIaW50KG1vZGUpOworICAgICAgICAgIGNhc2UgR0xfR0VORVJB
VEVfTUlQTUFQX0hJTlQ6CisgICAgICAgICAgICBpZiAoY29udGV4dCkgY29udGV4dC0+c2V0R2Vu
ZXJhdGVNaXBtYXBIaW50KG1vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgY2Fz
ZSBHTF9GUkFHTUVOVF9TSEFERVJfREVSSVZBVElWRV9ISU5UX09FUzoKKyAgICAgICAgICAgIGlm
IChjb250ZXh0KSBjb250ZXh0LT5zZXRGcmFnbWVudFNoYWRlckRlcml2YXRpdmVIaW50KG1vZGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwogICAgICAgICB9CiAgICAgfQogICAgIGNhdGNo
KHN0ZDo6YmFkX2FsbG9jJikKQEAgLTM1MDQsNiArMzY3OCwzNCBAQAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAorR0xib29sZWFuIF9fc3RkY2FsbCBnbElzRmVuY2VOVihHTHVpbnQgZmVuY2UpCit7
CisgICAgVFJBQ0UoIihHTHVpbnQgZmVuY2UgPSAlZCkiLCBmZW5jZSk7CisKKyAgICB0cnkKKyAg
ICB7CisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKwor
ICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkZlbmNlICpm
ZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKworICAgICAgICAgICAgaWYg
KGZlbmNlT2JqZWN0ID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIEdMX0ZBTFNFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gZmVuY2VP
YmplY3QtPmlzRmVuY2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYXRjaChzdGQ6OmJhZF9h
bGxvYyYpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3IoR0xfT1VUX09GX01FTU9SWSwgR0xf
RkFMU0UpOworICAgIH0KKworICAgIHJldHVybiBHTF9GQUxTRTsKK30KKwogR0xib29sZWFuIF9f
c3RkY2FsbCBnbElzRnJhbWVidWZmZXIoR0x1aW50IGZyYW1lYnVmZmVyKQogewogICAgIFRSQUNF
KCIoR0x1aW50IGZyYW1lYnVmZmVyID0gJWQpIiwgZnJhbWVidWZmZXIpOwpAQCAtMzg0MSwyMiAr
NDA0MywxMiBAQAogICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CiAg
ICAgICAgIH0KIAotICAgICAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0KQorICAgICAgICBpZiAo
IWdsOjpJc0NvbG9yUmVuZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkgJiYgIWdsOjpJc0RlcHRoUmVu
ZGVyYWJsZShpbnRlcm5hbGZvcm1hdCkgJiYgIWdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKGludGVy
bmFsZm9ybWF0KSkKICAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5U
MTY6Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBNDoKLSAgICAgICAgICBjYXNlIEdMX1JHQjVfQTE6
Ci0gICAgICAgICAgY2FzZSBHTF9SR0I1NjU6Ci0gICAgICAgICAgY2FzZSBHTF9TVEVOQ0lMX0lO
REVYODoKLSAgICAgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgotICAgICAgICAg
IGNhc2UgR0xfUkdCOF9PRVM6Ci0gICAgICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0dXJuIGVycm9y
KEdMX0lOVkFMSURfRU5VTSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAod2lkdGggPCAwIHx8
IGhlaWdodCA8IDAgfHwgd2lkdGggPiBnbDo6TUFYX1JFTkRFUkJVRkZFUl9TSVpFIHx8IGhlaWdo
dCA+IGdsOjpNQVhfUkVOREVSQlVGRkVSX1NJWkUgfHwgc2FtcGxlcyA8IDApCisgICAgICAgIGlm
ICh3aWR0aCA8IDAgfHwgaGVpZ2h0IDwgMCB8fCBzYW1wbGVzIDwgMCkKICAgICAgICAgewogICAg
ICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwogICAgICAgICB9CkBAIC0z
ODY1LDcgKzQwNTcsOSBAQAogCiAgICAgICAgIGlmIChjb250ZXh0KQogICAgICAgICB7Ci0gICAg
ICAgICAgICBpZiAoc2FtcGxlcyA+IGNvbnRleHQtPmdldE1heFN1cHBvcnRlZFNhbXBsZXMoKSkK
KyAgICAgICAgICAgIGlmICh3aWR0aCA+IGNvbnRleHQtPmdldE1heGltdW1SZW5kZXJidWZmZXJE
aW1lbnNpb24oKSB8fCAKKyAgICAgICAgICAgICAgICBoZWlnaHQgPiBjb250ZXh0LT5nZXRNYXhp
bXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgfHwKKyAgICAgICAgICAgICAgICBzYW1wbGVzID4g
Y29udGV4dC0+Z2V0TWF4U3VwcG9ydGVkU2FtcGxlcygpKQogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAgICAgIH0K
QEAgLTM5MjksNiArNDEyMywzNyBAQAogICAgIH0KIH0KIAordm9pZCBfX3N0ZGNhbGwgZ2xTZXRG
ZW5jZU5WKEdMdWludCBmZW5jZSwgR0xlbnVtIGNvbmRpdGlvbikKK3sKKyAgICBUUkFDRSgiKEdM
dWludCBmZW5jZSA9ICVkLCBHTGVudW0gY29uZGl0aW9uID0gMHglWCkiLCBmZW5jZSwgY29uZGl0
aW9uKTsKKworICAgIHRyeQorICAgIHsKKyAgICAgICAgaWYgKGNvbmRpdGlvbiAhPSBHTF9BTExf
Q09NUExFVEVEX05WKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgfQorCisgICAgICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0g
Z2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29udGV4dCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVjdCA9IGNvbnRleHQtPmdldEZlbmNlKGZlbmNl
KTsKKworICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09IE5VTEwpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgZmVuY2VPYmplY3QtPnNldEZlbmNlKGNvbmRpdGlv
bik7ICAgIAorICAgICAgICB9CisgICAgfQorICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICB9Cit9CisK
IHZvaWQgX19zdGRjYWxsIGdsU2Npc3NvcihHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCkKIHsKICAgICBUUkFDRSgiKEdMaW50IHggPSAlZCwgR0xpbnQgeSA9
ICVkLCBHTHNpemVpIHdpZHRoID0gJWQsIEdMc2l6ZWkgaGVpZ2h0ID0gJWQpIiwgeCwgeSwgd2lk
dGgsIGhlaWdodCk7CkBAIC00MTk2LDYgKzQ0MjEsMzQgQEAKICAgICB9CiB9CiAKK0dMYm9vbGVh
biBfX3N0ZGNhbGwgZ2xUZXN0RmVuY2VOVihHTHVpbnQgZmVuY2UpCit7CisgICAgVFJBQ0UoIihH
THVpbnQgZmVuY2UgPSAlZCkiLCBmZW5jZSk7CisKKyAgICB0cnkKKyAgICB7CisgICAgICAgIGds
OjpDb250ZXh0ICpjb250ZXh0ID0gZ2w6OmdldENvbnRleHQoKTsKKworICAgICAgICBpZiAoY29u
dGV4dCkKKyAgICAgICAgeworICAgICAgICAgICAgZ2w6OkZlbmNlICpmZW5jZU9iamVjdCA9IGNv
bnRleHQtPmdldEZlbmNlKGZlbmNlKTsKKworICAgICAgICAgICAgaWYgKGZlbmNlT2JqZWN0ID09
IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfT1BFUkFUSU9OLCBHTF9UUlVFKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIGZlbmNlT2JqZWN0LT50ZXN0RmVuY2UoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBj
YXRjaChzdGQ6OmJhZF9hbGxvYyYpCisgICAgeworICAgICAgICBlcnJvcihHTF9PVVRfT0ZfTUVN
T1JZKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIEdMX1RSVUU7Cit9CisKIHZvaWQgX19zdGRj
YWxsIGdsVGV4SW1hZ2UyRChHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgaW50ZXJu
YWxmb3JtYXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdMaW50IGJvcmRlciwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIGNv
bnN0IEdMdm9pZCogcGl4ZWxzKQogewpAQCAtNDIxNSwzNCArNDQ2OCw2IEBACiAgICAgICAgICAg
ICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CiAgICAgICAgIH0KIAotICAgICAgICBz
d2l0Y2ggKHRhcmdldCkKLSAgICAgICAgewotICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV8yRDoK
LSAgICAgICAgICAgIGlmICh3aWR0aCA+IChnbDo6TUFYX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkg
fHwgaGVpZ2h0ID4gKGdsOjpNQVhfVEVYVFVSRV9TSVpFID4+IGxldmVsKSkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWDoKLSAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBf
TkVHQVRJVkVfWDoKLSAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WToKLSAgICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWToKLSAgICAg
ICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWjoKLSAgICAgICAgICBjYXNl
IEdMX1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKLSAgICAgICAgICAgIGlmICh3aWR0aCAh
PSBoZWlnaHQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAod2lkdGgg
PiAoZ2w6Ok1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPj4gbGV2ZWwpIHx8IGhlaWdodCA+IChn
bDo6TUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRSA+PiBsZXZlbCkpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOwotICAgICAgICB9Ci0KICAgICAgICAgaWYg
KGludGVybmFsZm9ybWF0ICE9IGZvcm1hdCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfT1BFUkFUSU9OKTsKQEAgLTQyNTYsNiArNDQ4MSw4IEBACiAgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGUpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgIGNhc2Ug
R0xfVU5TSUdORURfQllURToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKQEAgLTQyNjYsNiArNDQ5Myw4IEBACiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgIGNhc2UgR0xfVU5TSUdORURfQllURToKICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJ
R05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgICAgICAgY2FzZSBHTF9GTE9BVDoKKyAgICAgICAg
ICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKQEAgLTQyNzcsNiArNDUwNiw4IEBACiAgICAgICAgICAgICAgIGNhc2UgR0xf
VU5TSUdORURfQllURToKICAgICAgICAgICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF80XzRf
NF80OgogICAgICAgICAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAg
ICAgICAgICAgIGNhc2UgR0xfRkxPQVQ6CisgICAgICAgICAgICAgIGNhc2UgR0xfSEFMRl9GTE9B
VF9PRVM6CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5VTSk7CkBAIC00MzA3LDYg
KzQ1MzgsMzYgQEAKIAogICAgICAgICBpZiAoY29udGV4dCkKICAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoICh0YXJnZXQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIGNhc2UgR0xf
VEVYVFVSRV8yRDoKKyAgICAgICAgICAgICAgICBpZiAod2lkdGggPiAoY29udGV4dC0+Z2V0TWF4
aW11bVRleHR1cmVEaW1lbnNpb24oKSA+PiBsZXZlbCkgfHwKKyAgICAgICAgICAgICAgICAgICAg
aGVpZ2h0ID4gKGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkgPj4gbGV2ZWwp
KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdM
X0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1g6Cisg
ICAgICAgICAgICAgIGNhc2UgR0xfVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YOgorICAgICAg
ICAgICAgICBjYXNlIEdMX1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWToKKyAgICAgICAgICAg
ICAgY2FzZSBHTF9URVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1k6CisgICAgICAgICAgICAgIGNh
c2UgR0xfVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9aOgorICAgICAgICAgICAgICBjYXNlIEdM
X1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWjoKKyAgICAgICAgICAgICAgICBpZiAod2lkdGgg
IT0gaGVpZ2h0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGVycm9yKEdMX0lOVkFMSURfVkFMVUUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIGlmICh3aWR0aCA+IChjb250ZXh0LT5nZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNp
b24oKSA+PiBsZXZlbCkgfHwKKyAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ID4gKGNvbnRleHQt
PmdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpID4+IGxldmVsKSkKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVF
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lOVkFMSURfRU5V
TSk7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmIChpbnRlcm5hbGZvcm1hdCA9PSBH
TF9DT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhUIHx8CiAgICAgICAgICAgICAgICAgaW50ZXJu
YWxmb3JtYXQgPT0gR0xfQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQpCiAgICAgICAgICAg
ICB7CkBAIC00MzIwLDYgKzQ1ODEsMjEgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAKKyAgICAgICAgICAgIGlmICh0eXBlID09IEdMX0ZMT0FUKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNGbG9hdFRleHR1cmVzKCkpCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9FTlVNKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbHNlIGlmICh0eXBlID09IEdMX0hBTEZfRkxPQVRfT0VTKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGlmICghY29udGV4dC0+c3VwcG9ydHNIYWxmRmxvYXRUZXh0dXJlcygpKQor
ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEdMX0lO
VkFMSURfRU5VTSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAg
ICAgICBpZiAodGFyZ2V0ID09IEdMX1RFWFRVUkVfMkQpCiAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgZ2w6OlRleHR1cmUyRCAqdGV4dHVyZSA9IGNvbnRleHQtPmdldFRleHR1cmUyRCgp
OwpAQCAtNDQ2Miw3ICs0NzM4LDcgQEAKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZB
TElEX0VOVU0pOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxldmVsIDwgMCB8fCBsZXZlbCA+
IGdsOjpNQVhfVEVYVFVSRV9MRVZFTFMgfHwgeG9mZnNldCA8IDAgfHwgeW9mZnNldCA8IDAgfHwg
d2lkdGggPCAwIHx8IGhlaWdodCA8IDApCisgICAgICAgIGlmIChsZXZlbCA8IDAgfHwgeG9mZnNl
dCA8IDAgfHwgeW9mZnNldCA8IDAgfHwgd2lkdGggPCAwIHx8IGhlaWdodCA8IDApCiAgICAgICAg
IHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX1ZBTFVFKTsKICAgICAgICAg
fQpAQCAtNDQ4Niw2ICs0NzYyLDI2IEBACiAKICAgICAgICAgaWYgKGNvbnRleHQpCiAgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChsZXZlbCA+IGNvbnRleHQtPmdldE1heGltdW1UZXh0dXJlTGV2
ZWwoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5W
QUxJRF9WQUxVRSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChmb3JtYXQgPT0g
R0xfRkxPQVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCFjb250ZXh0LT5z
dXBwb3J0c0Zsb2F0VGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1hdCA9PSBHTF9IQUxGX0ZM
T0FUX09FUykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNvbnRleHQtPnN1
cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXMoKSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBlcnJvcihHTF9JTlZBTElEX0VOVU0pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgaWYgKHRhcmdldCA9PSBHTF9URVhUVVJF
XzJEKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGdsOjpUZXh0dXJlMkQgKnRleHR1
cmUgPSBjb250ZXh0LT5nZXRUZXh0dXJlMkQoKTsKQEAgLTQ1MDAsNiArNDc5NiwxMSBAQAogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAg
ICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmIChmb3JtYXQgIT0gdGV4dHVyZS0+
Z2V0Rm9ybWF0KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKwogICAg
ICAgICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3
aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGNvbnRleHQtPmdldFVucGFja0FsaWdubWVudCgp
LCBwaXhlbHMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoZ2w6OklzQ3Vi
ZW1hcFRleHR1cmVUYXJnZXQodGFyZ2V0KSkKQEAgLTQ1MTYsNiArNDgxNywxMSBAQAogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOwogICAgICAg
ICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgIGlmIChmb3JtYXQgIT0gdGV4dHVyZS0+Z2V0
Rm9ybWF0KCkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
ZXJyb3IoR0xfSU5WQUxJRF9PUEVSQVRJT04pOworICAgICAgICAgICAgICAgIH0KKwogICAgICAg
ICAgICAgICAgIHRleHR1cmUtPnN1YkltYWdlKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgY29udGV4dC0+Z2V0VW5wYWNrQWxpZ25t
ZW50KCksIHBpeGVscyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCkBAIC01NDM1
LDYgKzU3NDEsMTQgQEAKICAgICB7CiAgICAgICAgIHsiZ2xUZXhJbWFnZTNET0VTIiwgKF9fZWds
TXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xUZXhJbWFnZTNET0VTfSwKICAg
ICAgICAgeyJnbEJsaXRGcmFtZWJ1ZmZlckFOR0xFIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xCbGl0RnJhbWVidWZmZXJBTkdMRX0sCisgICAgICAgIHsiZ2xS
ZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRSIsIChfX2VnbE11c3RDYXN0VG9Qcm9w
ZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsUmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlQU5H
TEV9LAorICAgICAgICB7ImdsRGVsZXRlRmVuY2VzTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVy
RnVuY3Rpb25Qb2ludGVyVHlwZSlnbERlbGV0ZUZlbmNlc05WfSwKKyAgICAgICAgeyJnbEdlbkZl
bmNlc05WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xHZW5G
ZW5jZXNOVn0sCisgICAgICAgIHsiZ2xJc0ZlbmNlTlYiLCAoX19lZ2xNdXN0Q2FzdFRvUHJvcGVy
RnVuY3Rpb25Qb2ludGVyVHlwZSlnbElzRmVuY2VOVn0sCisgICAgICAgIHsiZ2xUZXN0RmVuY2VO
ViIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsVGVzdEZlbmNl
TlZ9LAorICAgICAgICB7ImdsR2V0RmVuY2Vpdk5WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3BlckZ1
bmN0aW9uUG9pbnRlclR5cGUpZ2xHZXRGZW5jZWl2TlZ9LAorICAgICAgICB7ImdsRmluaXNoRmVu
Y2VOViIsIChfX2VnbE11c3RDYXN0VG9Qcm9wZXJGdW5jdGlvblBvaW50ZXJUeXBlKWdsRmluaXNo
RmVuY2VOVn0sCisgICAgICAgIHsiZ2xTZXRGZW5jZU5WIiwgKF9fZWdsTXVzdENhc3RUb1Byb3Bl
ckZ1bmN0aW9uUG9pbnRlclR5cGUpZ2xTZXRGZW5jZU5WfSwKICAgICB9OwogCiAgICAgZm9yIChp
bnQgZXh0ID0gMDsgZXh0IDwgc2l6ZW9mKGdsRXh0ZW5zaW9ucykgLyBzaXplb2YoRXh0ZW5zaW9u
KTsgZXh0KyspCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0Js
aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVT
djIvQmxpdC5jcHAJKHJldmlzaW9uIDc2MDI1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2xpYkdMRVN2Mi9CbGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgyLDYgKzM4MiwxMSBA
QAogCiBJRGlyZWN0M0RUZXh0dXJlOSAqQmxpdDo6Y29weVN1cmZhY2VUb1RleHR1cmUoSURpcmVj
dDNEU3VyZmFjZTkgKnN1cmZhY2UsIGNvbnN0IFJFQ1QgJnNvdXJjZVJlY3QpCiB7CisgICAgaWYg
KCFzdXJmYWNlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCiAgICAgZWds
OjpEaXNwbGF5ICpkaXNwbGF5ID0gZ2V0RGlzcGxheSgpOwogICAgIElEaXJlY3QzRERldmljZTkg
KmRldmljZSA9IGdldERldmljZSgpOwogCkBAIC00MDgsMTQgKzQxMyw4IEBACiAgICAgICAgIHJl
dHVybiBlcnJvcihHTF9PVVRfT0ZfTUVNT1JZLCAoSURpcmVjdDNEVGV4dHVyZTkqKU5VTEwpOwog
ICAgIH0KIAotICAgIFJFQ1QgZDNkU291cmNlUmVjdDsKLSAgICBkM2RTb3VyY2VSZWN0LmxlZnQg
PSBzb3VyY2VSZWN0LmxlZnQ7Ci0gICAgZDNkU291cmNlUmVjdC5yaWdodCA9IHNvdXJjZVJlY3Qu
cmlnaHQ7Ci0gICAgZDNkU291cmNlUmVjdC50b3AgPSBzb3VyY2VSZWN0LnRvcDsKLSAgICBkM2RT
b3VyY2VSZWN0LmJvdHRvbSA9IHNvdXJjZVJlY3QuYm90dG9tOwotCiAgICAgZGlzcGxheS0+ZW5k
U2NlbmUoKTsKLSAgICByZXN1bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHN1cmZhY2UsICZkM2RT
b3VyY2VSZWN0LCB0ZXh0dXJlU3VyZmFjZSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKKyAgICByZXN1
bHQgPSBkZXZpY2UtPlN0cmV0Y2hSZWN0KHN1cmZhY2UsICZzb3VyY2VSZWN0LCB0ZXh0dXJlU3Vy
ZmFjZSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKIAogICAgIHRleHR1cmVTdXJmYWNlLT5SZWxlYXNl
KCk7CiAKQEAgLTQ2NywxMCArNDY2LDggQEAKICAgICBkZXZpY2UtPlNldFNhbXBsZXJTdGF0ZSgw
LCBEM0RTQU1QX0FERFJFU1NVLCBEM0RUQUREUkVTU19DTEFNUCk7CiAgICAgZGV2aWNlLT5TZXRT
YW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9BRERSRVNTViwgRDNEVEFERFJFU1NfQ0xBTVApOwogCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfVkVSVEVYX0FUVFJJQlMrMTsgaSsrKQotICAgIHsK
LSAgICAgICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKGksIDEpOwotICAgIH0KKyAgICBS
RUNUIHNjaXNzb3JSZWN0ID0gezB9OyAgIC8vIFNjaXNzb3JpbmcgaXMgZGlzYWJsZWQgZm9yIGZs
aXBwaW5nLCBidXQgd2UgbmVlZCB0aGlzIHRvIGNhcHR1cmUgYW5kIHJlc3RvcmUgdGhlIG9sZCBy
ZWN0YW5nbGUKKyAgICBkZXZpY2UtPlNldFNjaXNzb3JSZWN0KCZzY2lzc29yUmVjdCk7CiB9CiAK
IHZvaWQgQmxpdDo6cmVuZGVyKCkKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9s
aWJHTEVTdjIvbGliR0xFU3YyLmRlZgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5kZWYJKHJldmlzaW9uIDc2MDI1KQorKysgU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDcsNyArMTQ3LDE0IEBACiAgICAgZ2xUZXhJbWFnZTNET0VTICAgICAgICAg
ICAgICAgICBAMTQzCiAgICAgZ2xCbGl0RnJhbWVidWZmZXJBTkdMRSAgICAgICAgICBAMTQ5CiAg
ICAgZ2xSZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGVBTkdMRSBAMTUwCi0gICAgCisgICAg
Z2xEZWxldGVGZW5jZXNOViAgICAgICAgICAgICAgICBAMTUxCisgICAgZ2xGaW5pc2hGZW5jZU5W
ICAgICAgICAgICAgICAgICBAMTUyCisgICAgZ2xHZW5GZW5jZXNOViAgICAgICAgICAgICAgICAg
ICBAMTUzCisgICAgZ2xHZXRGZW5jZWl2TlYgICAgICAgICAgICAgICAgICBAMTU0CisgICAgZ2xJ
c0ZlbmNlTlYgICAgICAgICAgICAgICAgICAgICBAMTU1CisgICAgZ2xTZXRGZW5jZU5WICAgICAg
ICAgICAgICAgICAgICBAMTU2CisgICAgZ2xUZXN0RmVuY2VOViAgICAgICAgICAgICAgICAgICBA
MTU3CisKICAgICA7IEVHTCBkZXBlbmRlbmNpZXMKICAgICBnbENyZWF0ZUNvbnRleHQgICAgICAg
ICAgICAgICAgIEAxNDQgTk9OQU1FCiAgICAgZ2xEZXN0cm95Q29udGV4dCAgICAgICAgICAgICAg
ICBAMTQ1IE5PTkFNRQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2
Mi9UZXh0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkdMRVN2Mi9UZXh0dXJlLmgJKHJldmlzaW9uIDc2MDI1KQorKysgU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4LDYgKzE4
LDcgQEAKICNpbmNsdWRlIDxkM2Q5Lmg+CiAKICNpbmNsdWRlICJsaWJHTEVTdjIvUmVuZGVyYnVm
ZmVyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL1JlZkNvdW50T2JqZWN0LmgiCiAjaW5jbHVkZSAi
bGliR0xFU3YyL3V0aWxpdGllcy5oIgogI2luY2x1ZGUgImNvbW1vbi9kZWJ1Zy5oIgogCkBAIC0y
NywxMCArMjgsMTMgQEAKIAogZW51bQogewotICAgIE1BWF9URVhUVVJFX1NJWkUgPSAyMDQ4LAot
ICAgIE1BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUgPSAyMDQ4LAorICAgIC8vIFRoZXNlIGFyZSB0
aGUgbWF4aW11bXMgdGhlIGltcGxlbWVudGF0aW9uIGNhbiBzdXBwb3J0CisgICAgLy8gVGhlIGFj
dHVhbCBHTCBjYXBzIGFyZSBsaW1pdGVkIGJ5IHRoZSBkZXZpY2UgY2FwcworICAgIC8vIGFuZCBz
aG91bGQgYmUgcXVlcmllZCBmcm9tIHRoZSBDb250ZXh0CisgICAgSU1QTEVNRU5UQVRJT05fTUFY
X1RFWFRVUkVfU0laRSA9IDE2Mzg0LAorICAgIElNUExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9U
RVhUVVJFX1NJWkUgPSAxNjM4NCwKIAotICAgIE1BWF9URVhUVVJFX0xFVkVMUyA9IDEyICAgLy8g
MStsb2cyIG9mIE1BWF9URVhUVVJFX1NJWkUKKyAgICBJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVS
RV9MRVZFTFMgPSAxNSAgIC8vIDErbG9nMiBvZiBNQVhfVEVYVFVSRV9TSVpFCiB9OwogCiBjbGFz
cyBUZXh0dXJlIDogcHVibGljIFJlZkNvdW50T2JqZWN0CkBAIC01OCwxMSArNjIsMTUgQEAKICAg
ICB2aXJ0dWFsIEdMZW51bSBnZXRGb3JtYXQoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29s
IGlzQ29tcGxldGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIGlzQ29tcHJlc3NlZCgp
IGNvbnN0ID0gMDsKKyAgICBib29sIGlzRmxvYXRpbmdQb2ludCgpIGNvbnN0OworICAgIGJvb2wg
aXNSZW5kZXJhYmxlRm9ybWF0KCkgY29uc3Q7CiAKKyAgICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0
KCkgY29uc3Q7CiAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICpnZXRUZXh0dXJlKCk7CiAgICAg
dmlydHVhbCBSZW5kZXJidWZmZXIgKmdldENvbG9yYnVmZmVyKEdMZW51bSB0YXJnZXQpID0gMDsK
IAogICAgIHZpcnR1YWwgdm9pZCBnZW5lcmF0ZU1pcG1hcHMoKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXpl
aSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnNvdXJjZSkgPSAwOwogCiAgICAgYm9vbCBp
c0RpcnR5KCkgY29uc3Q7CiAKQEAgLTg1LDYgKzkzLDcgQEAKICAgICAgICAgdmlydHVhbCBpbnQg
Z2V0V2lkdGgoKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBpbnQgZ2V0SGVpZ2h0KCkgY29uc3Q7
CiAgICAgICAgIHZpcnR1YWwgR0xlbnVtIGdldEZvcm1hdCgpIGNvbnN0OworICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNGbG9hdGluZ1BvaW50KCkgY29uc3Q7CiAKICAgICAgIHByaXZhdGU6CiAgICAg
ICAgIFRleHR1cmUgKm1UZXh0dXJlOwpAQCAtMTA2LDEzICsxMTUsMTMgQEAKICAgICAgICAgSURp
cmVjdDNEU3VyZmFjZTkgKnN1cmZhY2U7CiAgICAgfTsKIAotICAgIHN0YXRpYyBEM0RGT1JNQVQg
c2VsZWN0Rm9ybWF0KEdMZW51bSBmb3JtYXQpOwotICAgIGludCBpbWFnZVBpdGNoKGNvbnN0IElt
YWdlJiBpbWcpIGNvbnN0OworICAgIHN0YXRpYyBEM0RGT1JNQVQgc2VsZWN0Rm9ybWF0KEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlKTsKIAogICAgIHZvaWQgc2V0SW1hZ2UoR0xzaXplaSB3aWR0
aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBh
Y2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZyk7CiAgICAgYm9vbCBz
dWJJbWFnZShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUsIEdMaW50IHVucGFja0FsaWdu
bWVudCwgY29uc3Qgdm9pZCAqcGl4ZWxzLCBJbWFnZSAqaW1nKTsKICAgICB2b2lkIHNldENvbXBy
ZXNzZWRJbWFnZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwg
R0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscywgSW1hZ2UgKmltZyk7CiAgICAg
Ym9vbCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xz
aXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMc2l6ZWkgaW1hZ2VT
aXplLCBjb25zdCB2b2lkICpwaXhlbHMsIEltYWdlICppbWcpOworICAgIHZvaWQgY29weU5vblJl
bmRlcmFibGUoSW1hZ2UgKmltYWdlLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6
ZWkgaGVpZ2h0LCBJRGlyZWN0M0RTdXJmYWNlOSAqcmVuZGVyVGFyZ2V0KTsKIAogICAgIHZvaWQg
bmVlZFJlbmRlclRhcmdldCgpOwogCkBAIC0xMjksNTAgKzEzOCw3MyBAQAogCiAgICAgdm9pZCBk
cm9wVGV4dHVyZSgpOwogICAgIHZvaWQgcHVzaFRleHR1cmUoSURpcmVjdDNEQmFzZVRleHR1cmU5
ICpuZXdUZXh0dXJlLCBib29sIHJlbmRlcmFibGUpOworICAgIHZvaWQgY3JlYXRlU3VyZmFjZShH
THNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xlbnVtIHR5cGUs
IEltYWdlICppbWcpOwogCiAgICAgQmxpdCAqZ2V0QmxpdHRlcigpOwogCiAgICAgaW50IGxldmVs
Q291bnQoKSBjb25zdDsKIAorICAgIGJvb2wgaXNSZW5kZXJhYmxlKCkgY29uc3Q7CisKICAgICB1
bnNpZ25lZCBpbnQgbVdpZHRoOwogICAgIHVuc2lnbmVkIGludCBtSGVpZ2h0OwogICAgIEdMZW51
bSBtTWluRmlsdGVyOwogICAgIEdMZW51bSBtTWFnRmlsdGVyOwogICAgIEdMZW51bSBtV3JhcFM7
CiAgICAgR0xlbnVtIG1XcmFwVDsKKyAgICBHTGVudW0gbVR5cGU7CiAKKyAgICBib29sIG1EaXJ0
eU1ldGFEYXRhOworCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFRl
eHR1cmUpOwogCiAgICAgdm9pZCBsb2FkSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlv
ZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0LCBHTGVu
dW0gdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgR0xpbnQgdW5wYWNrQWxpZ25tZW50LCBj
b25zdCB2b2lkICppbnB1dCwgc3RkOjpzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3Q7CisgICAgICAgICAgICAgICAgICAgICAgIEdMaW50IHVucGFja0FsaWdubWVudCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHN0ZDo6c2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIEQz
RFNVUkZBQ0VfREVTQyAqZGVzY3JpcHRpb24pIGNvbnN0OwogCiAgICAgdm9pZCBsb2FkQWxwaGFJ
bWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3Q7CisgICAgdm9pZCBsb2FkQWxwaGFGbG9hdEltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBH
TGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1
dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgIHZvaWQgbG9h
ZEFscGhhSGFsZkZsb2F0SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91
dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwogICAgIHZvaWQgbG9hZEx1bWluYW5jZUlt
YWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0
UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1
dCkgY29uc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBp
dGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQs
IGJvb2wgbmF0aXZlKSBjb25zdDsKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VGbG9hdEltYWdlRGF0
YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhl
aWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQ
aXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0
KSBjb25zdDsKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VIYWxmRmxvYXRJbWFnZURhdGEoR0xpbnQg
eG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNo
LCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNv
bnN0OwogICAgIHZvaWQgbG9hZEx1bWluYW5jZUFscGhhSW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQs
IEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lk
ICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2
b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQsIGJvb2wgbmF0aXZl
KSBjb25zdDsKKyAgICB2b2lkIGxvYWRMdW1pbmFuY2VBbHBoYUZsb2F0SW1hZ2VEYXRhKEdMaW50
IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0
Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkg
Y29uc3Q7CisgICAgdm9pZCBsb2FkTHVtaW5hbmNlQWxwaGFIYWxmRmxvYXRJbWFnZURhdGEoR0xp
bnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7CiAgICAgdm9pZCBsb2FkUkdCVUJ5dGVJbWFnZURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CiAgICAgdm9pZCBs
b2FkUkdCNTY1SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkg
d2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9p
ZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2b2lkIGxvYWRSR0JGbG9hdEltYWdlRGF0YShHTGludCB4
b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29uc3Qgdm9p
ZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsKKyAgICB2
b2lkIGxvYWRSR0JIYWxmRmxvYXRJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNl
dCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBpbnB1dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90
IG91dHB1dFBpdGNoLCB2b2lkICpvdXRwdXQpIGNvbnN0OwogICAgIHZvaWQgbG9hZFJHQkFVQnl0
ZUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlu
cHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91
dHB1dCkgY29uc3Q7CiAgICAgdm9pZCBsb2FkUkdCQTQ0NDRJbWFnZURhdGEoR0xpbnQgeG9mZnNl
dCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlu
cHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CiAgICAgdm9pZCBs
b2FkUkdCQTU1NTFJbWFnZURhdGEoR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0LCBzaXplX3Qgb3V0cHV0UGl0Y2gs
IHZvaWQgKm91dHB1dCkgY29uc3Q7CisgICAgdm9pZCBsb2FkUkdCQUZsb2F0SW1hZ2VEYXRhKEdM
aW50IHhvZmZzZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5wdXRQaXRjaCwgY29u
c3Qgdm9pZCAqaW5wdXQsIHNpemVfdCBvdXRwdXRQaXRjaCwgdm9pZCAqb3V0cHV0KSBjb25zdDsK
KyAgICB2b2lkIGxvYWRSR0JBSGFsZkZsb2F0SW1hZ2VEYXRhKEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlucHV0UGl0Y2gsIGNvbnN0IHZvaWQgKmlucHV0
LCBzaXplX3Qgb3V0cHV0UGl0Y2gsIHZvaWQgKm91dHB1dCkgY29uc3Q7CiAgICAgdm9pZCBsb2Fk
QkdSQUltYWdlRGF0YShHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBpbnB1
dFBpdGNoLCBjb25zdCB2b2lkICppbnB1dCwgc2l6ZV90IG91dHB1dFBpdGNoLCB2b2lkICpvdXRw
dXQpIGNvbnN0OwogCiAgICAgSURpcmVjdDNEQmFzZVRleHR1cmU5ICptQmFzZVRleHR1cmU7IC8v
IFRoaXMgaXMgYSB3ZWFrIHBvaW50ZXIuIFRoZSBkZXJpdmVkIGNsYXNzIGlzIGFzc3VtZWQgdG8g
b3duIGEgc3Ryb25nIHBvaW50ZXIuCiAKICAgICBib29sIG1EaXJ0eTsKLSAgICBib29sIG1EaXJ0
eU1ldGFEYXRhOwogICAgIGJvb2wgbUlzUmVuZGVyYWJsZTsKLQotICAgIHZvaWQgY3JlYXRlU3Vy
ZmFjZShHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgSW1hZ2Ug
KmltZyk7CiB9OwogCiBjbGFzcyBUZXh0dXJlMkQgOiBwdWJsaWMgVGV4dHVyZQpAQCAtMTkwLDcg
KzIyMiw3IEBACiAgICAgdm9pZCBzdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwg
R0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3Jt
YXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVs
cyk7CiAgICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZz
ZXQsIEdMaW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0g
Zm9ybWF0LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKICAgICB2b2lk
IGNvcHlJbWFnZShHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTGludCB4LCBH
TGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVmZmVyU3RvcmFn
ZSAqc291cmNlKTsKLSAgICB2b2lkIGNvcHlTdWJJbWFnZShHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xz
aXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnNvdXJjZSk7CisgICAgdm9pZCBjb3B5
U3ViSW1hZ2UoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdMaW50
IHlvZmZzZXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0
LCBSZW5kZXJidWZmZXJTdG9yYWdlICpzb3VyY2UpOwogCiAgICAgYm9vbCBpc0NvbXBsZXRlKCkg
Y29uc3Q7CiAgICAgYm9vbCBpc0NvbXByZXNzZWQoKSBjb25zdDsKQEAgLTIwOSwxNCArMjQxLDE0
IEBACiAKICAgICB2aXJ0dWFsIGJvb2wgZGlydHlJbWFnZURhdGEoKSBjb25zdDsKIAotICAgIGJv
b2wgcmVkZWZpbmVUZXh0dXJlKEdMaW50IGxldmVsLCBHTGVudW0gaW50ZXJuYWxGb3JtYXQsIEdM
c2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0KTsKKyAgICBib29sIHJlZGVmaW5lVGV4dHVyZShH
TGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVp
IGhlaWdodCwgR0xlbnVtIHR5cGUpOwogICAgIHZvaWQgY29tbWl0UmVjdChHTGludCBsZXZlbCwg
R0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWln
aHQpOwogCi0gICAgSW1hZ2UgbUltYWdlQXJyYXlbTUFYX1RFWFRVUkVfTEVWRUxTXTsKKyAgICBJ
bWFnZSBtSW1hZ2VBcnJheVtJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9MRVZFTFNdOwogCiAg
ICAgSURpcmVjdDNEVGV4dHVyZTkgKm1UZXh0dXJlOwogCi0gICAgUmVuZGVyYnVmZmVyICptQ29s
b3JidWZmZXJQcm94eTsKKyAgICBCaW5kaW5nUG9pbnRlcjxSZW5kZXJidWZmZXI+IG1Db2xvcmJ1
ZmZlclByb3h5OwogfTsKIAogY2xhc3MgVGV4dHVyZUN1YmVNYXAgOiBwdWJsaWMgVGV4dHVyZQpA
QCAtMjM4LDEwICsyNzAsMTAgQEAKIAogICAgIHZvaWQgc2V0Q29tcHJlc3NlZEltYWdlKEdMZW51
bSBmYWNlLCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBHTHNpemVpIHdpZHRo
LCBHTHNpemVpIGhlaWdodCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQgKnBpeGVscyk7
CiAKLSAgICB2b2lkIHN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9m
ZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51
bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGludCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQg
KnBpeGVscyk7Ci0gICAgdm9pZCBzdWJJbWFnZUNvbXByZXNzZWQoR0xlbnVtIGZhY2UsIEdMaW50
IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNp
emVpIGhlaWdodCwgR0xlbnVtIGZvcm1hdCwgR0xzaXplaSBpbWFnZVNpemUsIGNvbnN0IHZvaWQg
KnBpeGVscyk7Ci0gICAgdm9pZCBjb3B5SW1hZ2UoR0xlbnVtIGZhY2UsIEdMaW50IGxldmVsLCBH
TGVudW0gaW50ZXJuYWxGb3JtYXQsIEdMaW50IHgsIEdMaW50IHksIEdMc2l6ZWkgd2lkdGgsIEdM
c2l6ZWkgaGVpZ2h0LCBSZW5kZXJidWZmZXJTdG9yYWdlICpzb3VyY2UpOwotICAgIHZvaWQgY29w
eVN1YkltYWdlKEdMZW51bSBmYWNlLCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQg
eW9mZnNldCwgR0xpbnQgeCwgR0xpbnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQs
IFJlbmRlcmJ1ZmZlclN0b3JhZ2UgKnNvdXJjZSk7CisgICAgdm9pZCBzdWJJbWFnZShHTGVudW0g
dGFyZ2V0LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xzaXpl
aSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIEdMZW51bSBmb3JtYXQsIEdMZW51bSB0eXBlLCBHTGlu
dCB1bnBhY2tBbGlnbm1lbnQsIGNvbnN0IHZvaWQgKnBpeGVscyk7CisgICAgdm9pZCBzdWJJbWFn
ZUNvbXByZXNzZWQoR0xlbnVtIHRhcmdldCwgR0xpbnQgbGV2ZWwsIEdMaW50IHhvZmZzZXQsIEdM
aW50IHlvZmZzZXQsIEdMc2l6ZWkgd2lkdGgsIEdMc2l6ZWkgaGVpZ2h0LCBHTGVudW0gZm9ybWF0
LCBHTHNpemVpIGltYWdlU2l6ZSwgY29uc3Qgdm9pZCAqcGl4ZWxzKTsKKyAgICB2b2lkIGNvcHlJ
bWFnZShHTGVudW0gdGFyZ2V0LCBHTGludCBsZXZlbCwgR0xlbnVtIGludGVybmFsRm9ybWF0LCBH
TGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCwgUmVuZGVyYnVm
ZmVyU3RvcmFnZSAqc291cmNlKTsKKyAgICB2b2lkIGNvcHlTdWJJbWFnZShHTGVudW0gdGFyZ2V0
LCBHTGludCBsZXZlbCwgR0xpbnQgeG9mZnNldCwgR0xpbnQgeW9mZnNldCwgR0xpbnQgeCwgR0xp
bnQgeSwgR0xzaXplaSB3aWR0aCwgR0xzaXplaSBoZWlnaHQsIFJlbmRlcmJ1ZmZlclN0b3JhZ2Ug
KnNvdXJjZSk7CiAKICAgICBib29sIGlzQ29tcGxldGUoKSBjb25zdDsKICAgICBib29sIGlzQ29t
cHJlc3NlZCgpIGNvbnN0OwpAQCAtMjcyLDExICszMDQsMTEgQEAKICAgICB2b2lkIGNvbW1pdFJl
Y3QoR0xlbnVtIGZhY2VUYXJnZXQsIEdMaW50IGxldmVsLCBHTGludCB4b2Zmc2V0LCBHTGludCB5
b2Zmc2V0LCBHTHNpemVpIHdpZHRoLCBHTHNpemVpIGhlaWdodCk7CiAgICAgYm9vbCByZWRlZmlu
ZVRleHR1cmUoR0xpbnQgbGV2ZWwsIEdMZW51bSBpbnRlcm5hbEZvcm1hdCwgR0xzaXplaSB3aWR0
aCk7CiAKLSAgICBJbWFnZSBtSW1hZ2VBcnJheVs2XVtNQVhfVEVYVFVSRV9MRVZFTFNdOworICAg
IEltYWdlIG1JbWFnZUFycmF5WzZdW0lNUExFTUVOVEFUSU9OX01BWF9URVhUVVJFX0xFVkVMU107
CiAKICAgICBJRGlyZWN0M0RDdWJlVGV4dHVyZTkgKm1UZXh0dXJlOwogCi0gICAgUmVuZGVyYnVm
ZmVyICptRmFjZVByb3hpZXNbNl07CisgICAgQmluZGluZ1BvaW50ZXI8UmVuZGVyYnVmZmVyPiBt
RmFjZVByb3hpZXNbNl07CiB9OwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliR0xFU3YyL1NoYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3BwCShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvU2hhZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzQsMTkgKzM0LDIyIEBACiAKICAgICAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgewot
ICAgICAgICAgICAgVEJ1aWx0SW5SZXNvdXJjZSByZXNvdXJjZXM7Ci0gICAgICAgICAgICBTaElu
aXRCdWlsdEluUmVzb3VyY2UoJnJlc291cmNlcyk7CisgICAgICAgICAgICBTaEJ1aWx0SW5SZXNv
dXJjZXMgcmVzb3VyY2VzOworICAgICAgICAgICAgU2hJbml0QnVpbHRJblJlc291cmNlcygmcmVz
b3VyY2VzKTsKKyAgICAgICAgICAgIENvbnRleHQgKmNvbnRleHQgPSBnZXRDb250ZXh0KCk7ICAg
ICAgICAgICAgCisKICAgICAgICAgICAgIHJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzID0gTUFY
X1ZFUlRFWF9BVFRSSUJTOwogICAgICAgICAgICAgcmVzb3VyY2VzLk1heFZlcnRleFVuaWZvcm1W
ZWN0b3JzID0gTUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlM7Ci0gICAgICAgICAgICByZXNvdXJj
ZXMuTWF4VmFyeWluZ1ZlY3RvcnMgPSBNQVhfVkFSWUlOR19WRUNUT1JTOworICAgICAgICAgICAg
cmVzb3VyY2VzLk1heFZhcnlpbmdWZWN0b3JzID0gY29udGV4dC0+Z2V0TWF4aW11bVZhcnlpbmdW
ZWN0b3JzKCk7CiAgICAgICAgICAgICByZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5p
dHMgPSBNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFM7CiAgICAgICAgICAgICByZXNvdXJj
ZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyA9IE1BWF9DT01CSU5FRF9URVhUVVJFX0lN
QUdFX1VOSVRTOwogICAgICAgICAgICAgcmVzb3VyY2VzLk1heFRleHR1cmVJbWFnZVVuaXRzID0g
TUFYX1RFWFRVUkVfSU1BR0VfVU5JVFM7Ci0gICAgICAgICAgICByZXNvdXJjZXMuTWF4RnJhZ21l
bnRVbmlmb3JtVmVjdG9ycyA9IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM7CisgICAgICAg
ICAgICByZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3JtVmVjdG9ycyA9IGNvbnRleHQtPmdldE1h
eGltdW1GcmFnbWVudFVuaWZvcm1WZWN0b3JzKCk7CiAgICAgICAgICAgICByZXNvdXJjZXMuTWF4
RHJhd0J1ZmZlcnMgPSBNQVhfRFJBV19CVUZGRVJTOworICAgICAgICAgICAgcmVzb3VyY2VzLk9F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcyA9IDE7CiAKLSAgICAgICAgICAgIG1GcmFnbWVudENvbXBp
bGVyID0gU2hDb25zdHJ1Y3RDb21waWxlcihFU2hMYW5nRnJhZ21lbnQsIEVTaFNwZWNHTEVTMiwg
JnJlc291cmNlcyk7Ci0gICAgICAgICAgICBtVmVydGV4Q29tcGlsZXIgPSBTaENvbnN0cnVjdENv
bXBpbGVyKEVTaExhbmdWZXJ0ZXgsIEVTaFNwZWNHTEVTMiwgJnJlc291cmNlcyk7CisgICAgICAg
ICAgICBtRnJhZ21lbnRDb21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoU0hfRlJBR01FTlRf
U0hBREVSLCBTSF9HTEVTMl9TUEVDLCAmcmVzb3VyY2VzKTsKKyAgICAgICAgICAgIG1WZXJ0ZXhD
b21waWxlciA9IFNoQ29uc3RydWN0Q29tcGlsZXIoU0hfVkVSVEVYX1NIQURFUiwgU0hfR0xFUzJf
U1BFQywgJnJlc291cmNlcyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI0MCw3ICsyNDMsNyBA
QAogICAgICAgICAgICAgY2hhciB2YXJ5aW5nVHlwZVsyNTZdOwogICAgICAgICAgICAgY2hhciB2
YXJ5aW5nTmFtZVsyNTZdOwogCi0gICAgICAgICAgICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihpbnB1
dCwgInN0YXRpYyAlcyAlcyIsIHZhcnlpbmdUeXBlLCB2YXJ5aW5nTmFtZSk7CisgICAgICAgICAg
ICBpbnQgbWF0Y2hlcyA9IHNzY2FuZihpbnB1dCwgInN0YXRpYyAlMjU1cyAlMjU1cyIsIHZhcnlp
bmdUeXBlLCB2YXJ5aW5nTmFtZSk7CiAKICAgICAgICAgICAgIGlmIChtYXRjaGVzICE9IDIpCiAg
ICAgICAgICAgICB7CkBAIC0yODAsMjEgKzI4MywyMyBAQAogICAgIGRlbGV0ZVtdIG1JbmZvTG9n
OwogICAgIG1JbmZvTG9nID0gTlVMTDsKIAotICAgIGludCByZXN1bHQgPSBTaENvbXBpbGUoY29t
cGlsZXIsICZtU291cmNlLCAxLCBFU2hPcHROb25lLCBFRGVidWdPcE5vbmUpOwotICAgIGNvbnN0
IGNoYXIgKm9iaiA9IFNoR2V0T2JqZWN0Q29kZShjb21waWxlcik7Ci0gICAgY29uc3QgY2hhciAq
aW5mbyA9IFNoR2V0SW5mb0xvZyhjb21waWxlcik7CisgICAgaW50IHJlc3VsdCA9IFNoQ29tcGls
ZShjb21waWxlciwgJm1Tb3VyY2UsIDEsIFNIX09CSkVDVF9DT0RFKTsKIAogICAgIGlmIChyZXN1
bHQpCiAgICAgewotICAgICAgICBtSGxzbCA9IG5ldyBjaGFyW3N0cmxlbihvYmopICsgMV07Ci0g
ICAgICAgIHN0cmNweShtSGxzbCwgb2JqKTsKKyAgICAgICAgaW50IG9iakNvZGVMZW4gPSAwOwor
ICAgICAgICBTaEdldEluZm8oY29tcGlsZXIsIFNIX09CSkVDVF9DT0RFX0xFTkdUSCwgJm9iakNv
ZGVMZW4pOworICAgICAgICBtSGxzbCA9IG5ldyBjaGFyW29iakNvZGVMZW5dOworICAgICAgICBT
aEdldE9iamVjdENvZGUoY29tcGlsZXIsIG1IbHNsKTsKIAogICAgICAgICBUUkFDRSgiXG4lcyIs
IG1IbHNsKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgbUluZm9Mb2cgPSBuZXcg
Y2hhcltzdHJsZW4oaW5mbykgKyAxXTsKLSAgICAgICAgc3RyY3B5KG1JbmZvTG9nLCBpbmZvKTsK
KyAgICAgICAgaW50IGluZm9Mb2dMZW4gPSAwOworICAgICAgICBTaEdldEluZm8oY29tcGlsZXIs
IFNIX0lORk9fTE9HX0xFTkdUSCwgJmluZm9Mb2dMZW4pOworICAgICAgICBtSW5mb0xvZyA9IG5l
dyBjaGFyW2luZm9Mb2dMZW5dOworICAgICAgICBTaEdldEluZm9Mb2coY29tcGlsZXIsIG1JbmZv
TG9nKTsKIAogICAgICAgICBUUkFDRSgiXG4lcyIsIG1JbmZvTG9nKTsKICAgICB9CkBAIC00Njgs
NyArNDczLDcgQEAKICAgICAgICAgICAgIGNoYXIgYXR0cmlidXRlVHlwZVsyNTZdOwogICAgICAg
ICAgICAgY2hhciBhdHRyaWJ1dGVOYW1lWzI1Nl07CiAKLSAgICAgICAgICAgIGludCBtYXRjaGVz
ID0gc3NjYW5mKGlucHV0LCAic3RhdGljICVzIF8lcyIsIGF0dHJpYnV0ZVR5cGUsIGF0dHJpYnV0
ZU5hbWUpOworICAgICAgICAgICAgaW50IG1hdGNoZXMgPSBzc2NhbmYoaW5wdXQsICJzdGF0aWMg
JTI1NXMgXyUyNTVzIiwgYXR0cmlidXRlVHlwZSwgYXR0cmlidXRlTmFtZSk7CiAKICAgICAgICAg
ICAgIGlmIChtYXRjaGVzICE9IDIpCiAgICAgICAgICAgICB7CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9CdWZmZXIuY3BwCShyZXZpc2lvbiA3NjAy
NSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvQnVmZmVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTAsNiArMTAsMTAgQEAKIAogI2luY2x1ZGUgImxpYkdMRVN2Mi9C
dWZmZXIuaCIKIAorI2luY2x1ZGUgImxpYkdMRVN2Mi9tYWluLmgiCisjaW5jbHVkZSAibGliR0xF
U3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmgiCisjaW5jbHVkZSAibGliR0xFU3YyL2dl
b21ldHJ5L0luZGV4RGF0YU1hbmFnZXIuaCIKKwogbmFtZXNwYWNlIGdsCiB7CiAKQEAgLTE4LDEx
ICsyMiwxNiBAQAogICAgIG1Db250ZW50cyA9IE5VTEw7CiAgICAgbVNpemUgPSAwOwogICAgIG1V
c2FnZSA9IEdMX0RZTkFNSUNfRFJBVzsKKworICAgIG1WZXJ0ZXhCdWZmZXIgPSBOVUxMOworICAg
IG1JbmRleEJ1ZmZlciA9IE5VTEw7CiB9CiAKIEJ1ZmZlcjo6fkJ1ZmZlcigpCiB7CiAgICAgZGVs
ZXRlW10gbUNvbnRlbnRzOworICAgIGRlbGV0ZSBtVmVydGV4QnVmZmVyOworICAgIGRlbGV0ZSBt
SW5kZXhCdWZmZXI7CiB9CiAKIHZvaWQgQnVmZmVyOjpidWZmZXJEYXRhKGNvbnN0IHZvaWQgKmRh
dGEsIEdMc2l6ZWlwdHIgc2l6ZSwgR0xlbnVtIHVzYWdlKQpAQCAtNDYsMTEgKzU1LDUyIEBACiAK
ICAgICBtU2l6ZSA9IHNpemU7CiAgICAgbVVzYWdlID0gdXNhZ2U7CisKKyAgICBpbnZhbGlkYXRl
U3RhdGljRGF0YSgpOworCisgICAgaWYgKHVzYWdlID09IEdMX1NUQVRJQ19EUkFXKQorICAgIHsK
KyAgICAgICAgbVZlcnRleEJ1ZmZlciA9IG5ldyBTdGF0aWNWZXJ0ZXhCdWZmZXIoZ2V0RGV2aWNl
KCkpOworICAgICAgICBtSW5kZXhCdWZmZXIgPSBuZXcgU3RhdGljSW5kZXhCdWZmZXIoZ2V0RGV2
aWNlKCkpOworICAgIH0KIH0KIAogdm9pZCBCdWZmZXI6OmJ1ZmZlclN1YkRhdGEoY29uc3Qgdm9p
ZCAqZGF0YSwgR0xzaXplaXB0ciBzaXplLCBHTGludHB0ciBvZmZzZXQpCiB7CiAgICAgbWVtY3B5
KG1Db250ZW50cyArIG9mZnNldCwgZGF0YSwgc2l6ZSk7CisKKyAgICBpZiAoKG1WZXJ0ZXhCdWZm
ZXIgJiYgbVZlcnRleEJ1ZmZlci0+c2l6ZSgpICE9IDApIHx8IChtSW5kZXhCdWZmZXIgJiYgbUlu
ZGV4QnVmZmVyLT5zaXplKCkgIT0gMCkpCisgICAgeworICAgICAgICBpbnZhbGlkYXRlU3RhdGlj
RGF0YSgpOworCisgICAgICAgIGlmIChtVXNhZ2UgPT0gR0xfU1RBVElDX0RSQVcpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIElmIGFwcGxpY2F0aW9ucyB1cGRhdGUgdGhlIGJ1ZmZlciBkYXRh
IGFmdGVyIGl0IGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpbiBhIGRyYXcgY2FsbCwKKyAgICAgICAg
ICAgIC8vIGl0IG1vc3QgbGlrZWx5IGlzbid0IHVzZWQgYXMgYSBzdGF0aWMgYnVmZmVyIHNvIHdl
IHNob3VsZCBmYWxsIGJhY2sgdG8gc3RyZWFtaW5nIHVzYWdlCisgICAgICAgICAgICAvLyBmb3Ig
YmVzdCBwZXJmb3JtYW5jZS4gU28gaWdub3JlIHRoZSB1c2FnZSBoaW50IGFuZCBkb24ndCBjcmVh
dGUgbmV3IHN0YXRpYyBidWZmZXJzLgorICAgICAgICAvLyAgbVZlcnRleEJ1ZmZlciA9IG5ldyBT
dGF0aWNWZXJ0ZXhCdWZmZXIoZ2V0RGV2aWNlKCkpOworICAgICAgICAvLyAgbUluZGV4QnVmZmVy
ID0gbmV3IFN0YXRpY0luZGV4QnVmZmVyKGdldERldmljZSgpKTsKKyAgICAgICAgfQorICAgIH0K
IH0KIAorU3RhdGljVmVydGV4QnVmZmVyICpCdWZmZXI6OmdldFZlcnRleEJ1ZmZlcigpCit7Cisg
ICAgcmV0dXJuIG1WZXJ0ZXhCdWZmZXI7CiB9CisKK1N0YXRpY0luZGV4QnVmZmVyICpCdWZmZXI6
OmdldEluZGV4QnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbUluZGV4QnVmZmVyOworfQorCit2b2lk
IEJ1ZmZlcjo6aW52YWxpZGF0ZVN0YXRpY0RhdGEoKQoreworICAgIGRlbGV0ZSBtVmVydGV4QnVm
ZmVyOworICAgIG1WZXJ0ZXhCdWZmZXIgPSBOVUxMOworCisgICAgZGVsZXRlIG1JbmRleEJ1ZmZl
cjsKKyAgICBtSW5kZXhCdWZmZXIgPSBOVUxMOworfQorCit9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL3V0aWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi91dGlsaXRpZXMuY3BwCShyZXZpc2lv
biA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvdXRpbGl0
aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsOCBAQAogICAgICAgY2FzZSBHTF9C
T09MOgogICAgICAgY2FzZSBHTF9GTE9BVDoKICAgICAgIGNhc2UgR0xfSU5UOgorICAgICAgY2Fz
ZSBHTF9TQU1QTEVSXzJEOgorICAgICAgY2FzZSBHTF9TQU1QTEVSX0NVQkU6CiAgICAgICAgICAg
cmV0dXJuIDE7CiAgICAgICBjYXNlIEdMX0JPT0xfVkVDMjoKICAgICAgIGNhc2UgR0xfRkxPQVRf
VkVDMjoKQEAgLTY4LDYgKzcwLDggQEAKICAgICAgIGNhc2UgR0xfRkxPQVRfTUFUNDoKICAgICAg
ICAgICByZXR1cm4gR0xfRkxPQVQ7CiAgICAgICBjYXNlIEdMX0lOVDoKKyAgICAgIGNhc2UgR0xf
U0FNUExFUl8yRDoKKyAgICAgIGNhc2UgR0xfU0FNUExFUl9DVUJFOgogICAgICAgY2FzZSBHTF9J
TlRfVkVDMjoKICAgICAgIGNhc2UgR0xfSU5UX1ZFQzM6CiAgICAgICBjYXNlIEdMX0lOVF9WRUM0
OgpAQCAtMjQ3LDYgKzI1MSwyOCBAQAogICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzVf
NV8xOgogICAgICAgY2FzZSBHTF9VTlNJR05FRF9TSE9SVF81XzZfNToKICAgICAgICAgcmV0dXJu
IHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CisgICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgICBz
d2l0Y2ggKGZvcm1hdCkKKyAgICAgICAgeworICAgICAgICAgIGNhc2UgR0xfQUxQSEE6ICAgICAg
ICAgICByZXR1cm4gc2l6ZW9mKGZsb2F0KTsKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRTog
ICAgICAgcmV0dXJuIHNpemVvZihmbG9hdCk7CisgICAgICAgICAgY2FzZSBHTF9MVU1JTkFOQ0Vf
QUxQSEE6IHJldHVybiBzaXplb2YoZmxvYXQpICogMjsKKyAgICAgICAgICBjYXNlIEdMX1JHQjog
ICAgICAgICAgICAgcmV0dXJuIHNpemVvZihmbG9hdCkgKiAzOworICAgICAgICAgIGNhc2UgR0xf
UkdCQTogICAgICAgICAgICByZXR1cm4gc2l6ZW9mKGZsb2F0KSAqIDQ7CisgICAgICAgICAgZGVm
YXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgIGNh
c2UgR0xfSEFMRl9GTE9BVF9PRVM6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KQorICAgICAgICB7
CisgICAgICAgICAgY2FzZSBHTF9BTFBIQTogICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWdu
ZWQgc2hvcnQpOworICAgICAgICAgIGNhc2UgR0xfTFVNSU5BTkNFOiAgICAgICByZXR1cm4gc2l6
ZW9mKHVuc2lnbmVkIHNob3J0KTsKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQTog
cmV0dXJuIHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiAyOworICAgICAgICAgIGNhc2UgR0xfUkdC
OiAgICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDM7CisgICAgICAg
ICAgY2FzZSBHTF9SR0JBOiAgICAgICAgICAgIHJldHVybiBzaXplb2YodW5zaWduZWQgc2hvcnQp
ICogNDsKKyAgICAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9CiAKQEAgLTI4
Myw2ICszMDksMjEgQEAKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQogCisg
ICAgICBjYXNlIEdMX0ZMT0FUOgorICAgICAgY2FzZSBHTF9IQUxGX0ZMT0FUX09FUzoKKyAgICAg
ICAgc3dpdGNoIChmb3JtYXQpCisgICAgICAgIHsKKyAgICAgICAgICBjYXNlIEdMX1JHQkE6Cisg
ICAgICAgICAgY2FzZSBHTF9SR0I6CisgICAgICAgICAgY2FzZSBHTF9BTFBIQToKKyAgICAgICAg
ICBjYXNlIEdMX0xVTUlOQU5DRToKKyAgICAgICAgICBjYXNlIEdMX0xVTUlOQU5DRV9BTFBIQToK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NI
T1JUXzRfNF80XzQ6CiAgICAgICBjYXNlIEdMX1VOU0lHTkVEX1NIT1JUXzVfNV81XzE6CiAgICAg
ICAgIHJldHVybiAoZm9ybWF0ID09IEdMX1JHQkEpOwpAQCAtMjk1LDggKzMzNiw3MSBAQAogICAg
IH0KIH0KIAorYm9vbCBJc0NvbG9yUmVuZGVyYWJsZShHTGVudW0gaW50ZXJuYWxmb3JtYXQpCit7
CisgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX1JHQkE0
OgorICAgICAgY2FzZSBHTF9SR0I1X0ExOgorICAgICAgY2FzZSBHTF9SR0I1NjU6CisgICAgICBj
YXNlIEdMX1JHQjhfT0VTOgorICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6CisgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgY2FzZSBHTF9ERVBUSF9DT01QT05FTlQxNjoKKyAgICAgIGNhc2UgR0xf
U1RFTkNJTF9JTkRFWDg6CisgICAgICBjYXNlIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTklNUExFTUVOVEVE
KCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCitib29sIElzRGVwdGhSZW5kZXJh
YmxlKEdMZW51bSBpbnRlcm5hbGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGludGVybmFsZm9ybWF0
KQorICAgIHsKKyAgICAgIGNhc2UgR0xfREVQVEhfQ09NUE9ORU5UMTY6CisgICAgICBjYXNlIEdM
X0RFUFRIMjRfU1RFTkNJTDhfT0VTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIGNhc2Ug
R0xfU1RFTkNJTF9JTkRFWDg6CisgICAgICBjYXNlIEdMX1JHQkE0OgorICAgICAgY2FzZSBHTF9S
R0I1X0ExOgorICAgICAgY2FzZSBHTF9SR0I1NjU6CisgICAgICBjYXNlIEdMX1JHQjhfT0VTOgor
ICAgICAgY2FzZSBHTF9SR0JBOF9PRVM6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIGRl
ZmF1bHQ6CisgICAgICAgIFVOSU1QTEVNRU5URUQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2Jvb2wgSXNTdGVuY2lsUmVuZGVyYWJsZShHTGVudW0gaW50ZXJuYWxmb3JtYXQp
Cit7CisgICAgc3dpdGNoIChpbnRlcm5hbGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEdMX1NU
RU5DSUxfSU5ERVg4OgorICAgICAgY2FzZSBHTF9ERVBUSDI0X1NURU5DSUw4X09FUzoKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICBjYXNlIEdMX1JHQkE0OgorICAgICAgY2FzZSBHTF9SR0I1
X0ExOgorICAgICAgY2FzZSBHTF9SR0I1NjU6CisgICAgICBjYXNlIEdMX1JHQjhfT0VTOgorICAg
ICAgY2FzZSBHTF9SR0JBOF9PRVM6CisgICAgICBjYXNlIEdMX0RFUFRIX0NPTVBPTkVOVDE2Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICBkZWZhdWx0OgorICAgICAgICBVTklNUExFTUVO
VEVEKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9CisKIG5hbWVzcGFjZSBl
czJkeAogewogCkBAIC01MDgsNiArNjEyLDEwIEBACiB7CiAgICAgc3dpdGNoIChjb2xvckZvcm1h
dCkKICAgICB7CisgICAgICBjYXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgorICAgICAgICByZXR1
cm4gMTY7CisgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJSMzJGOgorICAgICAgICByZXR1cm4g
MzI7CiAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoKICAgICAgICAgcmV0dXJuIDI7CiAg
ICAgICBjYXNlIEQzREZNVF9BOFI4RzhCODoKQEAgLTUxNSw3ICs2MjMsNiBAQAogICAgICAgY2Fz
ZSBEM0RGTVRfQTFSNUc1QjU6CiAgICAgICAgIHJldHVybiAxOwogICAgICAgY2FzZSBEM0RGTVRf
WDhSOEc4Qjg6Ci0gICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKICAgICAgIGNhc2UgRDNERk1U
X1I1RzZCNToKICAgICAgICAgcmV0dXJuIDA7CiAgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgp
OwpAQCAtNTI3LDYgKzYzNCwxMCBAQAogewogICAgIHN3aXRjaCAoY29sb3JGb3JtYXQpCiAgICAg
eworICAgICAgY2FzZSBEM0RGTVRfQTE2QjE2RzE2UjE2RjoKKyAgICAgICAgcmV0dXJuIDE2Owor
ICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAgICAgcmV0dXJuIDMyOwogICAg
ICAgY2FzZSBEM0RGTVRfQTJSMTBHMTBCMTA6CiAgICAgICAgIHJldHVybiAxMDsKICAgICAgIGNh
c2UgRDNERk1UX0E4UjhHOEI4OgpAQCAtNTM0LDcgKzY0NSw2IEBACiAgICAgICAgIHJldHVybiA4
OwogICAgICAgY2FzZSBEM0RGTVRfQTFSNUc1QjU6CiAgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6
Ci0gICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKICAgICAgICAgcmV0dXJuIDU7CiAgICAgICBk
ZWZhdWx0OiBVTlJFQUNIQUJMRSgpOwogICAgIH0KQEAgLTU0NSwxMyArNjU1LDE2IEBACiB7CiAg
ICAgc3dpdGNoIChjb2xvckZvcm1hdCkKICAgICB7CisgICAgICBjYXNlIEQzREZNVF9BMTZCMTZH
MTZSMTZGOgorICAgICAgICByZXR1cm4gMTY7CisgICAgICBjYXNlIEQzREZNVF9BMzJCMzJHMzJS
MzJGOgorICAgICAgICByZXR1cm4gMzI7CiAgICAgICBjYXNlIEQzREZNVF9BMlIxMEcxMEIxMDoK
ICAgICAgICAgcmV0dXJuIDEwOwogICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6CiAgICAgICBj
YXNlIEQzREZNVF9YOFI4RzhCODoKICAgICAgICAgcmV0dXJuIDg7CiAgICAgICBjYXNlIEQzREZN
VF9BMVI1RzVCNToKLSAgICAgIGNhc2UgRDNERk1UX1gxUjVHNUI1OgogICAgICAgICByZXR1cm4g
NTsKICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKICAgICAgICAgcmV0dXJuIDY7CkBAIC01NjQs
NiArNjc3LDEwIEBACiB7CiAgICAgc3dpdGNoIChjb2xvckZvcm1hdCkKICAgICB7CisgICAgICBj
YXNlIEQzREZNVF9BMTZCMTZHMTZSMTZGOgorICAgICAgICByZXR1cm4gMTY7CisgICAgICBjYXNl
IEQzREZNVF9BMzJCMzJHMzJSMzJGOgorICAgICAgICByZXR1cm4gMzI7CiAgICAgICBjYXNlIEQz
REZNVF9BMlIxMEcxMEIxMDoKICAgICAgICAgcmV0dXJuIDEwOwogICAgICAgY2FzZSBEM0RGTVRf
QThSOEc4Qjg6CkBAIC01NzEsNyArNjg4LDYgQEAKICAgICAgICAgcmV0dXJuIDg7CiAgICAgICBj
YXNlIEQzREZNVF9BMVI1RzVCNToKICAgICAgIGNhc2UgRDNERk1UX1I1RzZCNToKLSAgICAgIGNh
c2UgRDNERk1UX1gxUjVHNUI1OgogICAgICAgICByZXR1cm4gNTsKICAgICAgIGRlZmF1bHQ6IFVO
UkVBQ0hBQkxFKCk7CiAgICAgfQpAQCAtNTkxLDQ2ICs3MDcsNDYgQEAKICAgICAgIGNhc2UgRDNE
Rk1UX0QxNjogICAgICAgICAgIHJldHVybiAxNjsKICAgICAgIGNhc2UgRDNERk1UX0QzMkZfTE9D
S0FCTEU6IHJldHVybiAzMjsKICAgICAgIGNhc2UgRDNERk1UX0QyNEZTODogICAgICAgIHJldHVy
biAyNDsKLS8vICAgICAgY2FzZSBEM0RGTVRfRDMyX0xPQ0tBQkxFOiAgcmV0dXJuIDMyOyAgIC8v
IEQzRDlFeCBvbmx5Ci0vLyAgICAgIGNhc2UgRDNERk1UX1M4X0xPQ0tBQkxFOiAgIHJldHVybiAw
OyAgICAvLyBEM0Q5RXggb25seQorICAgIC8vY2FzZSBEM0RGTVRfRDMyX0xPQ0tBQkxFOiAgcmV0
dXJuIDMyOyAgIC8vIEQzRDlFeCBvbmx5CisgICAgLy9jYXNlIEQzREZNVF9TOF9MT0NLQUJMRTog
ICByZXR1cm4gMDsgICAgLy8gRDNEOUV4IG9ubHkKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIFVO
UkVBQ0hBQkxFKCk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi1ib29sIENvbnZlcnRQcmlt
aXRpdmVUeXBlKEdMZW51bSBwcmltaXRpdmVUeXBlLCBHTHNpemVpIHByaW1pdGl2ZUNvdW50LAor
Ym9vbCBDb252ZXJ0UHJpbWl0aXZlVHlwZShHTGVudW0gcHJpbWl0aXZlVHlwZSwgR0xzaXplaSBl
bGVtZW50Q291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFBSSU1JVElWRVRZUEUg
KmQzZFByaW1pdGl2ZVR5cGUsIGludCAqZDNkUHJpbWl0aXZlQ291bnQpCiB7CiAgICAgc3dpdGNo
IChwcmltaXRpdmVUeXBlKQogICAgIHsKICAgICAgIGNhc2UgR0xfUE9JTlRTOgogICAgICAgICAq
ZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1BPSU5UTElTVDsKLSAgICAgICAgKmQzZFByaW1pdGl2
ZUNvdW50ID0gcHJpbWl0aXZlQ291bnQ7CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVs
ZW1lbnRDb3VudDsKICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0xJTkVTOgogICAgICAg
ICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX0xJTkVMSVNUOwotICAgICAgICAqZDNkUHJpbWl0
aXZlQ291bnQgPSBwcmltaXRpdmVDb3VudCAvIDI7CisgICAgICAgICpkM2RQcmltaXRpdmVDb3Vu
dCA9IGVsZW1lbnRDb3VudCAvIDI7CiAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9MSU5F
X0xPT1A6CiAgICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfTElORVNUUklQOwotICAg
ICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBwcmltaXRpdmVDb3VudDsKKyAgICAgICAgKmQzZFBy
aW1pdGl2ZUNvdW50ID0gZWxlbWVudENvdW50IC0gMTsgICAvLyBEM0QgZG9lc24ndCBzdXBwb3J0
IGxpbmUgbG9vcHMsIHNvIHdlIGRyYXcgdGhlIGxhc3QgbGluZSBzZXBhcmF0ZWx5CiAgICAgICAg
IGJyZWFrOwogICAgICAgY2FzZSBHTF9MSU5FX1NUUklQOgogICAgICAgICAqZDNkUHJpbWl0aXZl
VHlwZSA9IEQzRFBUX0xJTkVTVFJJUDsKLSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gcHJp
bWl0aXZlQ291bnQgLSAxOworICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBlbGVtZW50Q291
bnQgLSAxOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfVFJJQU5HTEVTOgogICAgICAg
ICAqZDNkUHJpbWl0aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFTElTVDsKLSAgICAgICAgKmQzZFBy
aW1pdGl2ZUNvdW50ID0gcHJpbWl0aXZlQ291bnQgLyAzOworICAgICAgICAqZDNkUHJpbWl0aXZl
Q291bnQgPSBlbGVtZW50Q291bnQgLyAzOwogICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xf
VFJJQU5HTEVfU1RSSVA6CiAgICAgICAgICpkM2RQcmltaXRpdmVUeXBlID0gRDNEUFRfVFJJQU5H
TEVTVFJJUDsKLSAgICAgICAgKmQzZFByaW1pdGl2ZUNvdW50ID0gcHJpbWl0aXZlQ291bnQgLSAy
OworICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQgPSBlbGVtZW50Q291bnQgLSAyOwogICAgICAg
ICBicmVhazsKICAgICAgIGNhc2UgR0xfVFJJQU5HTEVfRkFOOgogICAgICAgICAqZDNkUHJpbWl0
aXZlVHlwZSA9IEQzRFBUX1RSSUFOR0xFRkFOOwotICAgICAgICAqZDNkUHJpbWl0aXZlQ291bnQg
PSBwcmltaXRpdmVDb3VudCAtIDI7CisgICAgICAgICpkM2RQcmltaXRpdmVDb3VudCA9IGVsZW1l
bnRDb3VudCAtIDI7CiAgICAgICAgIGJyZWFrOwogICAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNjcyLDMgKzc4OCw0MCBAQAogfQogCiB9CisKK25hbWVzcGFjZSBkeDJl
cworeworCitHTGVudW0gQ29udmVydEJhY2tCdWZmZXJGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkK
K3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9BNFI0RzRC
NDogcmV0dXJuIEdMX1JHQkE0OworICAgICAgY2FzZSBEM0RGTVRfQThSOEc4Qjg6IHJldHVybiBH
TF9SR0JBOF9PRVM7CisgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNTogcmV0dXJuIEdMX1JHQjVf
QTE7CisgICAgICBjYXNlIEQzREZNVF9SNUc2QjU6ICAgcmV0dXJuIEdMX1JHQjU2NTsKKyAgICAg
IGNhc2UgRDNERk1UX1g4UjhHOEI4OiByZXR1cm4gR0xfUkdCOF9PRVM7CisgICAgICBkZWZhdWx0
OgorICAgICAgICBVTlJFQUNIQUJMRSgpOworICAgIH0KKworICAgIHJldHVybiBHTF9SR0JBNDsK
K30KKworR0xlbnVtIENvbnZlcnREZXB0aFN0ZW5jaWxGb3JtYXQoRDNERk9STUFUIGZvcm1hdCkK
K3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkKKyAgICB7CisgICAgICBjYXNlIEQzREZNVF9EMTY6Cisg
ICAgICBjYXNlIEQzREZNVF9EMjRYODoKKyAgICAgICAgcmV0dXJuIEdMX0RFUFRIX0NPTVBPTkVO
VDE2OworICAgICAgY2FzZSBEM0RGTVRfRDI0Uzg6CisgICAgICAgIHJldHVybiBHTF9ERVBUSDI0
X1NURU5DSUw4X09FUzsKKyAgICAgIGRlZmF1bHQ6CisgICAgICAgIFVOUkVBQ0hBQkxFKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIEdMX0RFUFRIMjRfU1RFTkNJTDhfT0VTOworfQorCit9CkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL1Byb2dyYW0uaAko
cmV2aXNpb24gNzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3Yy
L1Byb2dyYW0uaAkod29ya2luZyBjb3B5KQpAQCAtOTQsOSArOTQsNyBAQAogICAgIGJvb2wgZ2V0
VW5pZm9ybWZ2KEdMaW50IGxvY2F0aW9uLCBHTGZsb2F0ICpwYXJhbXMpOwogICAgIGJvb2wgZ2V0
VW5pZm9ybWl2KEdMaW50IGxvY2F0aW9uLCBHTGludCAqcGFyYW1zKTsKIAotICAgIEdMaW50IGdl
dERlcHRoUmFuZ2VEaWZmTG9jYXRpb24oKSBjb25zdDsKLSAgICBHTGludCBnZXREZXB0aFJhbmdl
TmVhckxvY2F0aW9uKCkgY29uc3Q7Ci0gICAgR0xpbnQgZ2V0RGVwdGhSYW5nZUZhckxvY2F0aW9u
KCkgY29uc3Q7CisgICAgR0xpbnQgZ2V0RHhEZXB0aFJhbmdlTG9jYXRpb24oKSBjb25zdDsKICAg
ICBHTGludCBnZXREeERlcHRoTG9jYXRpb24oKSBjb25zdDsKICAgICBHTGludCBnZXREeFZpZXdw
b3J0TG9jYXRpb24oKSBjb25zdDsKICAgICBHTGludCBnZXREeEhhbGZQaXhlbFNpemVMb2NhdGlv
bigpIGNvbnN0OwpAQCAtMjA0LDkgKzIwMiw3IEBACiAgICAgdHlwZWRlZiBzdGQ6OnZlY3RvcjxV
bmlmb3JtTG9jYXRpb24+IFVuaWZvcm1JbmRleDsKICAgICBVbmlmb3JtSW5kZXggbVVuaWZvcm1J
bmRleDsKIAotICAgIEdMaW50IG1EZXB0aFJhbmdlRGlmZkxvY2F0aW9uOwotICAgIEdMaW50IG1E
ZXB0aFJhbmdlTmVhckxvY2F0aW9uOwotICAgIEdMaW50IG1EZXB0aFJhbmdlRmFyTG9jYXRpb247
CisgICAgR0xpbnQgbUR4RGVwdGhSYW5nZUxvY2F0aW9uOwogICAgIEdMaW50IG1EeERlcHRoTG9j
YXRpb247CiAgICAgR0xpbnQgbUR4Vmlld3BvcnRMb2NhdGlvbjsKICAgICBHTGludCBtRHhIYWxm
UGl4ZWxTaXplTG9jYXRpb247CkBAIC0yMjAsNyArMjE2LDcgQEAKIAogICAgIHVuc2lnbmVkIGlu
dCBtUmVmQ291bnQ7CiAKLSAgICB1bnNpZ25lZCBpbnQgbVNlcmlhbDsKKyAgICBjb25zdCB1bnNp
Z25lZCBpbnQgbVNlcmlhbDsKIAogICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgbUN1cnJlbnRTZXJp
YWw7CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvUmVuZGVy
YnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdM
RVN2Mi9SZW5kZXJidWZmZXIuaAkocmV2aXNpb24gNzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvbGliR0xFU3YyL1JlbmRlcmJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
MSw2ICsyMSw3IEBACiAKIG5hbWVzcGFjZSBnbAogeworICAgIGNsYXNzIFRleHR1cmU7CiAKIC8v
IEEgY2xhc3MgZGVyaXZlZCBmcm9tIFJlbmRlcmJ1ZmZlclN0b3JhZ2UgaXMgY3JlYXRlZCB3aGVu
ZXZlciBnbFJlbmRlcmJ1ZmZlclN0b3JhZ2UKIC8vIGlzIGNhbGxlZC4gVGhlIHNwZWNpZmljIGNv
bmNyZXRlIHR5cGUgZGVwZW5kcyBvbiB3aGV0aGVyIHRoZSBpbnRlcm5hbCBmb3JtYXQgaXMKQEAg
LTQyLDYgKzQzLDcgQEAKICAgICB2aXJ0dWFsIGludCBnZXRXaWR0aCgpIGNvbnN0OwogICAgIHZp
cnR1YWwgaW50IGdldEhlaWdodCgpIGNvbnN0OwogICAgIHZpcnR1YWwgR0xlbnVtIGdldEZvcm1h
dCgpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0Zsb2F0aW5nUG9pbnQoKSBjb25zdDsKICAg
ICBEM0RGT1JNQVQgZ2V0RDNERm9ybWF0KCkgY29uc3Q7CiAgICAgR0xzaXplaSBnZXRTYW1wbGVz
KCkgY29uc3Q7CiAgICAgdW5zaWduZWQgaW50IGdldFNlcmlhbCgpIGNvbnN0OwpAQCAtNTMsNyAr
NTUsNyBAQAogICAgIEdMZW51bSBtRm9ybWF0OwogICAgIEQzREZPUk1BVCBtRDNERm9ybWF0Owog
ICAgIEdMc2l6ZWkgbVNhbXBsZXM7Ci0gICAgdW5zaWduZWQgaW50IG1TZXJpYWw7CisgICAgY29u
c3QgdW5zaWduZWQgaW50IG1TZXJpYWw7CiAKICAgcHJpdmF0ZToKICAgICBESVNBTExPV19DT1BZ
X0FORF9BU1NJR04oUmVuZGVyYnVmZmVyU3RvcmFnZSk7CkBAIC0xMDAsNiArMTAyLDcgQEAKIHsK
ICAgcHVibGljOgogICAgIGV4cGxpY2l0IENvbG9yYnVmZmVyKElEaXJlY3QzRFN1cmZhY2U5ICpy
ZW5kZXJUYXJnZXQpOworICAgIGV4cGxpY2l0IENvbG9yYnVmZmVyKGNvbnN0IFRleHR1cmUqIHRl
eHR1cmUpOwogICAgIENvbG9yYnVmZmVyKGludCB3aWR0aCwgaW50IGhlaWdodCwgR0xlbnVtIGZv
cm1hdCwgR0xzaXplaSBzYW1wbGVzKTsKIAogICAgIH5Db2xvcmJ1ZmZlcigpOwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkdMRVN2Mi9Db250ZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliR0xFU3YyL0NvbnRleHQuY3BwCShy
ZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIv
Q29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5LDE1ICsxOSwxNCBAQAogI2luY2x1ZGUg
ImxpYkdMRVN2Mi9CbGl0LmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1Jlc291cmNlTWFuYWdlci5o
IgogI2luY2x1ZGUgImxpYkdMRVN2Mi9CdWZmZXIuaCIKKyNpbmNsdWRlICJsaWJHTEVTdjIvRmVu
Y2UuaCIKICNpbmNsdWRlICJsaWJHTEVTdjIvRnJhbWVCdWZmZXIuaCIKICNpbmNsdWRlICJsaWJH
TEVTdjIvUHJvZ3JhbS5oIgogI2luY2x1ZGUgImxpYkdMRVN2Mi9SZW5kZXJCdWZmZXIuaCIKICNp
bmNsdWRlICJsaWJHTEVTdjIvU2hhZGVyLmgiCiAjaW5jbHVkZSAibGliR0xFU3YyL1RleHR1cmUu
aCIKLSNpbmNsdWRlICJsaWJHTEVTdjIvZ2VvbWV0cnkvYmFja2VuZC5oIgogI2luY2x1ZGUgImxp
YkdMRVN2Mi9nZW9tZXRyeS9WZXJ0ZXhEYXRhTWFuYWdlci5oIgogI2luY2x1ZGUgImxpYkdMRVN2
Mi9nZW9tZXRyeS9JbmRleERhdGFNYW5hZ2VyLmgiCi0jaW5jbHVkZSAibGliR0xFU3YyL2dlb21l
dHJ5L2R4OS5oIgogCiAjdW5kZWYgbmVhcgogI3VuZGVmIGZhcgpAQCAtODMsNiArODIsNyBAQAog
ICAgIG1TdGF0ZS5zY2lzc29yVGVzdCA9IGZhbHNlOwogICAgIG1TdGF0ZS5kaXRoZXIgPSB0cnVl
OwogICAgIG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQgPSBHTF9ET05UX0NBUkU7CisgICAgbVN0
YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhpbnQgPSBHTF9ET05UX0NBUkU7CiAKICAgICBt
U3RhdGUubGluZVdpZHRoID0gMS4wZjsKIApAQCAtMTIwLDEyICsxMjAsOSBAQAogICAgIC8vIElu
IG9yZGVyIHRoYXQgYWNjZXNzIHRvIHRoZXNlIGluaXRpYWwgdGV4dHVyZXMgbm90IGJlIGxvc3Qs
IHRoZXkgYXJlIHRyZWF0ZWQgYXMgdGV4dHVyZQogICAgIC8vIG9iamVjdHMgYWxsIG9mIHdob3Nl
IG5hbWVzIGFyZSAwLgogCi0gICAgbVRleHR1cmUyRFplcm8gPSBuZXcgVGV4dHVyZTJEKDApOwot
ICAgIG1UZXh0dXJlQ3ViZU1hcFplcm8gPSBuZXcgVGV4dHVyZUN1YmVNYXAoMCk7CisgICAgbVRl
eHR1cmUyRFplcm8uc2V0KG5ldyBUZXh0dXJlMkQoMCkpOworICAgIG1UZXh0dXJlQ3ViZU1hcFpl
cm8uc2V0KG5ldyBUZXh0dXJlQ3ViZU1hcCgwKSk7CiAKLSAgICBtQ29sb3JidWZmZXJaZXJvID0g
TlVMTDsKLSAgICBtRGVwdGhTdGVuY2lsYnVmZmVyWmVybyA9IE5VTEw7Ci0KICAgICBtU3RhdGUu
YWN0aXZlU2FtcGxlciA9IDA7CiAgICAgYmluZEFycmF5QnVmZmVyKDApOwogICAgIGJpbmRFbGVt
ZW50QXJyYXlCdWZmZXIoMCk7CkBAIC0xMzUsMTcgKzEzMiwxMSBAQAogICAgIGJpbmREcmF3RnJh
bWVidWZmZXIoMCk7CiAgICAgYmluZFJlbmRlcmJ1ZmZlcigwKTsKIAotICAgIGZvciAoaW50IHR5
cGUgPSAwOyB0eXBlIDwgU0FNUExFUl9UWVBFX0NPVU5UOyB0eXBlKyspCi0gICAgewotICAgICAg
ICBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdID0gTlVMTDsKLSAgICB9Ci0KICAgICBtU3RhdGUu
Y3VycmVudFByb2dyYW0gPSAwOwogCiAgICAgbVN0YXRlLnBhY2tBbGlnbm1lbnQgPSA0OwogICAg
IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQgPSA0OwogCi0gICAgbUJ1ZmZlckJhY2tFbmQgPSBOVUxM
OwogICAgIG1WZXJ0ZXhEYXRhTWFuYWdlciA9IE5VTEw7CiAgICAgbUluZGV4RGF0YU1hbmFnZXIg
PSBOVUxMOwogICAgIG1CbGl0ID0gTlVMTDsKQEAgLTE1OCw2ICsxNDksOCBAQAogCiAgICAgbUhh
c0JlZW5DdXJyZW50ID0gZmFsc2U7CiAKKyAgICBtU3VwcG9ydHNDb21wcmVzc2VkVGV4dHVyZXMg
PSBmYWxzZTsKKyAgICBtU3VwcG9ydHNFdmVudFF1ZXJpZXMgPSBmYWxzZTsKICAgICBtTWF4U3Vw
cG9ydGVkU2FtcGxlcyA9IDA7CiAgICAgbU1hc2tlZENsZWFyU2F2ZWRTdGF0ZSA9IE5VTEw7CiAg
ICAgbWFya0FsbFN0YXRlRGlydHkoKTsKQEAgLTE4MCw2ICsxNzMsMTEgQEAKICAgICAgICAgZGVs
ZXRlRnJhbWVidWZmZXIobUZyYW1lYnVmZmVyTWFwLmJlZ2luKCktPmZpcnN0KTsKICAgICB9CiAK
KyAgICB3aGlsZSAoIW1GZW5jZU1hcC5lbXB0eSgpKQorICAgIHsKKyAgICAgICAgZGVsZXRlRmVu
Y2UobUZlbmNlTWFwLmJlZ2luKCktPmZpcnN0KTsKKyAgICB9CisKICAgICB3aGlsZSAoIW1NdWx0
aVNhbXBsZVN1cHBvcnQuZW1wdHkoKSkKICAgICB7CiAgICAgICAgIGRlbGV0ZSBbXSBtTXVsdGlT
YW1wbGVTdXBwb3J0LmJlZ2luKCktPnNlY29uZDsKQEAgLTE5Niw3ICsxOTQsNyBAQAogCiAgICAg
Zm9yIChpbnQgdHlwZSA9IDA7IHR5cGUgPCBTQU1QTEVSX1RZUEVfQ09VTlQ7IHR5cGUrKykKICAg
ICB7Ci0gICAgICAgIGRlbGV0ZSBtSW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdOworICAgICAgICBt
SW5jb21wbGV0ZVRleHR1cmVzW3R5cGVdLnNldChOVUxMKTsKICAgICB9CiAKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQpAQCAtMjA2LDE0ICsyMDQsMTEg
QEAKIAogICAgIG1TdGF0ZS5hcnJheUJ1ZmZlci5zZXQoTlVMTCk7CiAgICAgbVN0YXRlLmVsZW1l
bnRBcnJheUJ1ZmZlci5zZXQoTlVMTCk7Ci0gICAgbVN0YXRlLnRleHR1cmUyRC5zZXQoTlVMTCk7
Ci0gICAgbVN0YXRlLnRleHR1cmVDdWJlTWFwLnNldChOVUxMKTsKICAgICBtU3RhdGUucmVuZGVy
YnVmZmVyLnNldChOVUxMKTsKIAotICAgIGRlbGV0ZSBtVGV4dHVyZTJEWmVybzsKLSAgICBkZWxl
dGUgbVRleHR1cmVDdWJlTWFwWmVybzsKKyAgICBtVGV4dHVyZTJEWmVyby5zZXQoTlVMTCk7Cisg
ICAgbVRleHR1cmVDdWJlTWFwWmVyby5zZXQoTlVMTCk7CiAKLSAgICBkZWxldGUgbUJ1ZmZlckJh
Y2tFbmQ7CiAgICAgZGVsZXRlIG1WZXJ0ZXhEYXRhTWFuYWdlcjsKICAgICBkZWxldGUgbUluZGV4
RGF0YU1hbmFnZXI7CiAgICAgZGVsZXRlIG1CbGl0OwpAQCAtMjM0LDExICsyMjksMjAgQEAKICAg
ICB7CiAgICAgICAgIG1EZXZpY2VDYXBzID0gZGlzcGxheS0+Z2V0RGV2aWNlQ2FwcygpOwogCi0g
ICAgICAgIG1CdWZmZXJCYWNrRW5kID0gbmV3IER4OUJhY2tFbmQodGhpcywgZGV2aWNlKTsKLSAg
ICAgICAgbVZlcnRleERhdGFNYW5hZ2VyID0gbmV3IFZlcnRleERhdGFNYW5hZ2VyKHRoaXMsIG1C
dWZmZXJCYWNrRW5kKTsKLSAgICAgICAgbUluZGV4RGF0YU1hbmFnZXIgPSBuZXcgSW5kZXhEYXRh
TWFuYWdlcih0aGlzLCBtQnVmZmVyQmFja0VuZCk7CisgICAgICAgIG1WZXJ0ZXhEYXRhTWFuYWdl
ciA9IG5ldyBWZXJ0ZXhEYXRhTWFuYWdlcih0aGlzLCBkZXZpY2UpOworICAgICAgICBtSW5kZXhE
YXRhTWFuYWdlciA9IG5ldyBJbmRleERhdGFNYW5hZ2VyKHRoaXMsIGRldmljZSk7CiAgICAgICAg
IG1CbGl0ID0gbmV3IEJsaXQodGhpcyk7CiAKKyAgICAgICAgbVN1cHBvcnRzU2hhZGVyTW9kZWwz
ID0gbURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJzaW9uID09IEQzRFBTX1ZFUlNJT04oMywgMCk7
CisKKyAgICAgICAgbU1heFRleHR1cmVEaW1lbnNpb24gPSBzdGQ6Om1pbihzdGQ6Om1pbigoaW50
KW1EZXZpY2VDYXBzLk1heFRleHR1cmVXaWR0aCwgKGludCltRGV2aWNlQ2Fwcy5NYXhUZXh0dXJl
SGVpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KWds
OjpJTVBMRU1FTlRBVElPTl9NQVhfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAgbU1heEN1YmVUZXh0
dXJlRGltZW5zaW9uID0gc3RkOjptaW4obU1heFRleHR1cmVEaW1lbnNpb24sIChpbnQpZ2w6OklN
UExFTUVOVEFUSU9OX01BWF9DVUJFX01BUF9URVhUVVJFX1NJWkUpOworICAgICAgICBtTWF4UmVu
ZGVyYnVmZmVyRGltZW5zaW9uID0gbU1heFRleHR1cmVEaW1lbnNpb247CisgICAgICAgIG1NYXhU
ZXh0dXJlTGV2ZWwgPSBsb2cyKG1NYXhUZXh0dXJlRGltZW5zaW9uKSArIDE7CisgICAgICAgIFRS
QUNFKCJNYXhUZXh0dXJlRGltZW5zaW9uPSVkLCBNYXhDdWJlVGV4dHVyZURpbWVuc2lvbj0lZCwg
TWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uPSVkLCBNYXhUZXh0dXJlTGV2ZWw9JWQiLAorICAgICAg
ICAgICAgICBtTWF4VGV4dHVyZURpbWVuc2lvbiwgbU1heEN1YmVUZXh0dXJlRGltZW5zaW9uLCBt
TWF4UmVuZGVyYnVmZmVyRGltZW5zaW9uLCBtTWF4VGV4dHVyZUxldmVsKTsKKwogICAgICAgICBj
b25zdCBEM0RGT1JNQVQgcmVuZGVyQnVmZmVyRm9ybWF0c1tdID0KICAgICAgICAgewogICAgICAg
ICAgICAgRDNERk1UX0E4UjhHOEI4LApAQCAtMjY1LDggKzI2OSwxNSBAQAogCiAgICAgICAgIG1N
YXhTdXBwb3J0ZWRTYW1wbGVzID0gbWF4OwogCisgICAgICAgIG1TdXBwb3J0c0V2ZW50UXVlcmll
cyA9IGRpc3BsYXktPmdldEV2ZW50UXVlcnlTdXBwb3J0KCk7CiAgICAgICAgIG1TdXBwb3J0c0Nv
bXByZXNzZWRUZXh0dXJlcyA9IGRpc3BsYXktPmdldENvbXByZXNzZWRUZXh0dXJlU3VwcG9ydCgp
OworICAgICAgICBtU3VwcG9ydHNGbG9hdFRleHR1cmVzID0gZGlzcGxheS0+Z2V0RmxvYXRUZXh0
dXJlU3VwcG9ydCgmbVN1cHBvcnRzRmxvYXRMaW5lYXJGaWx0ZXIsICZtU3VwcG9ydHNGbG9hdFJl
bmRlcmFibGVUZXh0dXJlcyk7CisgICAgICAgIG1TdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzID0g
ZGlzcGxheS0+Z2V0SGFsZkZsb2F0VGV4dHVyZVN1cHBvcnQoJm1TdXBwb3J0c0hhbGZGbG9hdExp
bmVhckZpbHRlciwgJm1TdXBwb3J0c0hhbGZGbG9hdFJlbmRlcmFibGVUZXh0dXJlcyk7CisgICAg
ICAgIG1TdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzID0gZGlzcGxheS0+Z2V0THVtaW5hbmNlVGV4
dHVyZVN1cHBvcnQoKTsKKyAgICAgICAgbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlcyA9
IGRpc3BsYXktPmdldEx1bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKTsKIAorICAgICAgICBt
U3VwcG9ydHMzMmJpdEluZGljZXMgPSBtRGV2aWNlQ2Fwcy5NYXhWZXJ0ZXhJbmRleCA+PSAoMSA8
PCAxNik7CisKICAgICAgICAgaW5pdEV4dGVuc2lvblN0cmluZygpOwogCiAgICAgICAgIG1TdGF0
ZS52aWV3cG9ydFggPSAwOwpAQCAtMjkyLDE1ICszMDMsMTYgQEAKIAogICAgIHNldEZyYW1lYnVm
ZmVyWmVybyhmcmFtZWJ1ZmZlclplcm8pOwogCi0gICAgZGVmYXVsdFJlbmRlclRhcmdldC0+UmVs
ZWFzZSgpOworICAgIGlmIChkZWZhdWx0UmVuZGVyVGFyZ2V0KQorICAgIHsKKyAgICAgICAgZGVm
YXVsdFJlbmRlclRhcmdldC0+UmVsZWFzZSgpOworICAgIH0KIAogICAgIGlmIChkZXB0aFN0ZW5j
aWwpCiAgICAgewogICAgICAgICBkZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsKICAgICB9CiAgICAg
Ci0gICAgbVN1cHBvcnRzU2hhZGVyTW9kZWwzID0gbURldmljZUNhcHMuUGl4ZWxTaGFkZXJWZXJz
aW9uID09IEQzRFBTX1ZFUlNJT04oMywgMCk7Ci0KICAgICBtYXJrQWxsU3RhdGVEaXJ0eSgpOwog
fQogCkBAIC0zMDksNiArMzIxLDggQEAKIHsKICAgICBtQXBwbGllZFJlbmRlclRhcmdldFNlcmlh
bCA9IDA7CiAgICAgbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCA9IDA7CisgICAgbUFwcGxpZWRT
dGVuY2lsYnVmZmVyU2VyaWFsID0gMDsKKyAgICBtRGVwdGhTdGVuY2lsSW5pdGlhbGl6ZWQgPSBm
YWxzZTsKICAgICBtQXBwbGllZFByb2dyYW0gPSAwOwogCiAgICAgbUNsZWFyU3RhdGVEaXJ0eSA9
IHRydWU7CkBAIC0zMjIsMTEgKzMzNiw2IEBACiAgICAgbVNhbXBsZVN0YXRlRGlydHkgPSB0cnVl
OwogICAgIG1EaXRoZXJTdGF0ZURpcnR5ID0gdHJ1ZTsKICAgICBtRnJvbnRGYWNlRGlydHkgPSB0
cnVlOwotCi0gICAgaWYgKG1CdWZmZXJCYWNrRW5kICE9IE5VTEwpCi0gICAgewotICAgICAgICBt
QnVmZmVyQmFja0VuZC0+aW52YWxpZGF0ZSgpOwotICAgIH0KIH0KIAogdm9pZCBDb250ZXh0Ojpz
ZXRDbGVhckNvbG9yKGZsb2F0IHJlZCwgZmxvYXQgZ3JlZW4sIGZsb2F0IGJsdWUsIGZsb2F0IGFs
cGhhKQpAQCAtNjUwLDYgKzY1OSwxNCBAQAogICAgIG1TdGF0ZS5nZW5lcmF0ZU1pcG1hcEhpbnQg
PSBoaW50OwogfQogCit2b2lkIENvbnRleHQ6OnNldEZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhp
bnQoR0xlbnVtIGhpbnQpCit7CisgICAgbVN0YXRlLmZyYWdtZW50U2hhZGVyRGVyaXZhdGl2ZUhp
bnQgPSBoaW50OworICAgIC8vIFRPRE86IFByb3BhZ2F0ZSB0aGUgaGludCB0byBzaGFkZXIgdHJh
bnNsYXRvciBzbyB3ZSBjYW4gd3JpdGUKKyAgICAvLyBkZHgsIGRkeF9jb2Fyc2UsIG9yIGRkeF9m
aW5lIGRlcGVuZGluZyBvbiB0aGUgaGludC4KKyAgICAvLyBJZ25vcmUgZm9yIG5vdy4gSXQgaXMg
dmFsaWQgZm9yIGltcGxlbWVudGF0aW9ucyB0byBpZ25vcmUgaGludC4KK30KKwogdm9pZCBDb250
ZXh0OjpzZXRWaWV3cG9ydFBhcmFtcyhHTGludCB4LCBHTGludCB5LCBHTHNpemVpIHdpZHRoLCBH
THNpemVpIGhlaWdodCkKIHsKICAgICBtU3RhdGUudmlld3BvcnRYID0geDsKQEAgLTcxOCwxMiAr
NzM1LDEyIEBACiAgICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5pZCgpOwogfQogCi12b2lk
IENvbnRleHQ6OnNldFZlcnRleEF0dHJpYkVuYWJsZWQodW5zaWduZWQgaW50IGF0dHJpYk51bSwg
Ym9vbCBlbmFibGVkKQordm9pZCBDb250ZXh0OjpzZXRFbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSh1
bnNpZ25lZCBpbnQgYXR0cmliTnVtLCBib29sIGVuYWJsZWQpCiB7Ci0gICAgbVN0YXRlLnZlcnRl
eEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1FbmFibGVkID0gZW5hYmxlZDsKKyAgICBtU3RhdGUudmVy
dGV4QXR0cmlidXRlW2F0dHJpYk51bV0ubUFycmF5RW5hYmxlZCA9IGVuYWJsZWQ7CiB9CiAKLWNv
bnN0IEF0dHJpYnV0ZVN0YXRlICZDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJTdGF0ZSh1bnNpZ25l
ZCBpbnQgYXR0cmliTnVtKQorY29uc3QgVmVydGV4QXR0cmlidXRlICZDb250ZXh0OjpnZXRWZXJ0
ZXhBdHRyaWJTdGF0ZSh1bnNpZ25lZCBpbnQgYXR0cmliTnVtKQogewogICAgIHJldHVybiBtU3Rh
dGUudmVydGV4QXR0cmlidXRlW2F0dHJpYk51bV07CiB9CkBAIC03NDQsOCArNzYxLDcgQEAKICAg
ICByZXR1cm4gbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVthdHRyaWJOdW1dLm1Qb2ludGVyOwogfQog
Ci0vLyByZXR1cm5zIGVudGlyZSBzZXQgb2YgYXR0cmlidXRlcyBhcyBhIGJsb2NrCi1jb25zdCBB
dHRyaWJ1dGVTdGF0ZSAqQ29udGV4dDo6Z2V0VmVydGV4QXR0cmliQmxvY2soKQorY29uc3QgVmVy
dGV4QXR0cmlidXRlQXJyYXkgJkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYnV0ZXMoKQogewogICAg
IHJldHVybiBtU3RhdGUudmVydGV4QXR0cmlidXRlOwogfQpAQCAtODEwLDYgKzgyNiwyMCBAQAog
ICAgIHJldHVybiBoYW5kbGU7CiB9CiAKK0dMdWludCBDb250ZXh0OjpjcmVhdGVGZW5jZSgpCit7
CisgICAgdW5zaWduZWQgaW50IGhhbmRsZSA9IDA7CisKKyAgICB3aGlsZSAobUZlbmNlTWFwLmZp
bmQoaGFuZGxlKSAhPSBtRmVuY2VNYXAuZW5kKCkpCisgICAgeworICAgICAgICBoYW5kbGUrKzsK
KyAgICB9CisKKyAgICBtRmVuY2VNYXBbaGFuZGxlXSA9IG5ldyBGZW5jZTsKKworICAgIHJldHVy
biBoYW5kbGU7Cit9CisKIHZvaWQgQ29udGV4dDo6ZGVsZXRlQnVmZmVyKEdMdWludCBidWZmZXIp
CiB7CiAgICAgaWYgKG1SZXNvdXJjZU1hbmFnZXItPmdldEJ1ZmZlcihidWZmZXIpKQpAQCAtODYz
LDYgKzg5MywxNyBAQAogICAgIH0KIH0KIAordm9pZCBDb250ZXh0OjpkZWxldGVGZW5jZShHTHVp
bnQgZmVuY2UpCit7CisgICAgRmVuY2VNYXA6Oml0ZXJhdG9yIGZlbmNlT2JqZWN0ID0gbUZlbmNl
TWFwLmZpbmQoZmVuY2UpOworCisgICAgaWYgKGZlbmNlT2JqZWN0ICE9IG1GZW5jZU1hcC5lbmQo
KSkKKyAgICB7CisgICAgICAgIGRlbGV0ZSBmZW5jZU9iamVjdC0+c2Vjb25kOworICAgICAgICBt
RmVuY2VNYXAuZXJhc2UoZmVuY2VPYmplY3QpOworICAgIH0KK30KKwogQnVmZmVyICpDb250ZXh0
OjpnZXRCdWZmZXIoR0x1aW50IGhhbmRsZSkKIHsKICAgICByZXR1cm4gbVJlc291cmNlTWFuYWdl
ci0+Z2V0QnVmZmVyKGhhbmRsZSk7CkBAIC05MTYsMTggKzk1NywxNCBAQAogewogICAgIG1SZXNv
dXJjZU1hbmFnZXItPmNoZWNrVGV4dHVyZUFsbG9jYXRpb24odGV4dHVyZSwgU0FNUExFUl8yRCk7
CiAKLSAgICBtU3RhdGUudGV4dHVyZTJELnNldChnZXRUZXh0dXJlKHRleHR1cmUpKTsKLQotICAg
IG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtTQU1QTEVSXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0u
c2V0KG1TdGF0ZS50ZXh0dXJlMkQuZ2V0KCkpOworICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtT
QU1QTEVSXzJEXVttU3RhdGUuYWN0aXZlU2FtcGxlcl0uc2V0KGdldFRleHR1cmUodGV4dHVyZSkp
OwogfQogCiB2b2lkIENvbnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcChHTHVpbnQgdGV4dHVyZSkK
IHsKICAgICBtUmVzb3VyY2VNYW5hZ2VyLT5jaGVja1RleHR1cmVBbGxvY2F0aW9uKHRleHR1cmUs
IFNBTVBMRVJfQ1VCRSk7CiAKLSAgICBtU3RhdGUudGV4dHVyZUN1YmVNYXAuc2V0KGdldFRleHR1
cmUodGV4dHVyZSkpOwotCi0gICAgbVN0YXRlLnNhbXBsZXJUZXh0dXJlW1NBTVBMRVJfQ1VCRV1b
bVN0YXRlLmFjdGl2ZVNhbXBsZXJdLnNldChtU3RhdGUudGV4dHVyZUN1YmVNYXAuZ2V0KCkpOwor
ICAgIG1TdGF0ZS5zYW1wbGVyVGV4dHVyZVtTQU1QTEVSX0NVQkVdW21TdGF0ZS5hY3RpdmVTYW1w
bGVyXS5zZXQoZ2V0VGV4dHVyZSh0ZXh0dXJlKSk7CiB9CiAKIHZvaWQgQ29udGV4dDo6YmluZFJl
YWRGcmFtZWJ1ZmZlcihHTHVpbnQgZnJhbWVidWZmZXIpCkBAIC0xMDA1LDYgKzEwNDIsMjAgQEAK
ICAgICB9CiB9CiAKK0ZlbmNlICpDb250ZXh0OjpnZXRGZW5jZSh1bnNpZ25lZCBpbnQgaGFuZGxl
KQoreworICAgIEZlbmNlTWFwOjppdGVyYXRvciBmZW5jZSA9IG1GZW5jZU1hcC5maW5kKGhhbmRs
ZSk7CisKKyAgICBpZiAoZmVuY2UgPT0gbUZlbmNlTWFwLmVuZCgpKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHJldHVybiBmZW5j
ZS0+c2Vjb25kOworICAgIH0KK30KKwogQnVmZmVyICpDb250ZXh0OjpnZXRBcnJheUJ1ZmZlcigp
CiB7CiAgICAgcmV0dXJuIG1TdGF0ZS5hcnJheUJ1ZmZlci5nZXQoKTsKQEAgLTEwMjIsMzUgKzEw
NzMsMjUgQEAKIAogVGV4dHVyZTJEICpDb250ZXh0OjpnZXRUZXh0dXJlMkQoKQogewotICAgIGlm
IChtU3RhdGUudGV4dHVyZTJELmlkKCkgPT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6IDAgcmVmZXJz
IHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJnZXQKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtVGV4dHVyZTJEWmVybzsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VGV4dHVyZTJEKj4obVN0YXRlLnRleHR1cmUyRC5nZXQoKSk7CisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFRleHR1cmUyRCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVT
YW1wbGVyLCBTQU1QTEVSXzJEKSk7CiB9CiAKIFRleHR1cmVDdWJlTWFwICpDb250ZXh0OjpnZXRU
ZXh0dXJlQ3ViZU1hcCgpCiB7Ci0gICAgaWYgKG1TdGF0ZS50ZXh0dXJlQ3ViZU1hcC5pZCgpID09
IDApICAgLy8gU3BlY2lhbCBjYXNlOiAwIHJlZmVycyB0byBkaWZmZXJlbnQgaW5pdGlhbCB0ZXh0
dXJlcyBiYXNlZCBvbiB0aGUgdGFyZ2V0Ci0gICAgewotICAgICAgICByZXR1cm4gbVRleHR1cmVD
dWJlTWFwWmVybzsKLSAgICB9Ci0KLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dHVyZUN1YmVN
YXAqPihtU3RhdGUudGV4dHVyZUN1YmVNYXAuZ2V0KCkpOworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxUZXh0dXJlQ3ViZU1hcCo+KGdldFNhbXBsZXJUZXh0dXJlKG1TdGF0ZS5hY3RpdmVTYW1wbGVy
LCBTQU1QTEVSX0NVQkUpKTsKIH0KIAogVGV4dHVyZSAqQ29udGV4dDo6Z2V0U2FtcGxlclRleHR1
cmUodW5zaWduZWQgaW50IHNhbXBsZXIsIFNhbXBsZXJUeXBlIHR5cGUpCiB7CiAgICAgR0x1aW50
IHRleGlkID0gbVN0YXRlLnNhbXBsZXJUZXh0dXJlW3R5cGVdW3NhbXBsZXJdLmlkKCk7CiAKLSAg
ICBpZiAodGV4aWQgPT0gMCkKKyAgICBpZiAodGV4aWQgPT0gMCkgICAvLyBTcGVjaWFsIGNhc2U6
IDAgcmVmZXJzIHRvIGRpZmZlcmVudCBpbml0aWFsIHRleHR1cmVzIGJhc2VkIG9uIHRoZSB0YXJn
ZXQKICAgICB7CiAgICAgICAgIHN3aXRjaCAodHlwZSkKICAgICAgICAgewogICAgICAgICAgIGRl
ZmF1bHQ6IFVOUkVBQ0hBQkxFKCk7Ci0gICAgICAgICAgY2FzZSBTQU1QTEVSXzJEOiByZXR1cm4g
bVRleHR1cmUyRFplcm87Ci0gICAgICAgICAgY2FzZSBTQU1QTEVSX0NVQkU6IHJldHVybiBtVGV4
dHVyZUN1YmVNYXBaZXJvOworICAgICAgICAgIGNhc2UgU0FNUExFUl8yRDogcmV0dXJuIG1UZXh0
dXJlMkRaZXJvLmdldCgpOworICAgICAgICAgIGNhc2UgU0FNUExFUl9DVUJFOiByZXR1cm4gbVRl
eHR1cmVDdWJlTWFwWmVyby5nZXQoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMTA3MCwxNSAr
MTExMSwxNSBAQAogICAgICAgICBwYXJhbXNbMl0gPSBtU3RhdGUuY29sb3JNYXNrQmx1ZTsKICAg
ICAgICAgcGFyYW1zWzNdID0gbVN0YXRlLmNvbG9yTWFza0FscGhhOwogICAgICAgICBicmVhazsK
LSAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmN1bGxGYWNlOwotICAgICAgY2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgICpwYXJh
bXMgPSBtU3RhdGUucG9seWdvbk9mZnNldEZpbGw7Ci0gICAgICBjYXNlIEdMX1NBTVBMRV9BTFBI
QV9UT19DT1ZFUkFHRTogKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2U7Ci0g
ICAgICBjYXNlIEdMX1NBTVBMRV9DT1ZFUkFHRTogICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5z
YW1wbGVDb3ZlcmFnZTsKLSAgICAgIGNhc2UgR0xfU0NJU1NPUl9URVNUOiAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLnNjaXNzb3JUZXN0OwotICAgICAgY2FzZSBHTF9TVEVOQ0lMX1RFU1Q6
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbFRlc3Q7Ci0gICAgICBjYXNlIEdM
X0RFUFRIX1RFU1Q6ICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kZXB0aFRlc3Q7Ci0g
ICAgICBjYXNlIEdMX0JMRU5EOiAgICAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5i
bGVuZDsKLSAgICAgIGNhc2UgR0xfRElUSEVSOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLmRpdGhlcjsKKyAgICAgIGNhc2UgR0xfQ1VMTF9GQUNFOiAgICAgICAgICAgICAgICAq
cGFyYW1zID0gbVN0YXRlLmN1bGxGYWNlOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
Y2FzZSBHTF9QT0xZR09OX09GRlNFVF9GSUxMOiAgICAgICpwYXJhbXMgPSBtU3RhdGUucG9seWdv
bk9mZnNldEZpbGw7ICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NBTVBMRV9BTFBIQV9U
T19DT1ZFUkFHRTogKnBhcmFtcyA9IG1TdGF0ZS5zYW1wbGVBbHBoYVRvQ292ZXJhZ2U7ICAgICBi
cmVhazsKKyAgICAgIGNhc2UgR0xfU0FNUExFX0NPVkVSQUdFOiAgICAgICAgICAqcGFyYW1zID0g
bVN0YXRlLnNhbXBsZUNvdmVyYWdlOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9T
Q0lTU09SX1RFU1Q6ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc2Npc3NvclRlc3Q7ICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1NURU5DSUxfVEVTVDogICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsVGVzdDsgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgIGNhc2UgR0xfREVQVEhfVEVTVDogICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmRl
cHRoVGVzdDsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9CTEVORDogICAg
ICAgICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuYmxlbmQ7ICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX0RJVEhFUjogICAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS5kaXRoZXI7ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CkBAIC0xMTQxLDI0ICsxMTgyLDI1IEBA
CiAgICAgewogICAgICAgY2FzZSBHTF9NQVhfVkVSVEVYX0FUVFJJQlM6ICAgICAgICAgICAgICAg
KnBhcmFtcyA9IGdsOjpNQVhfVkVSVEVYX0FUVFJJQlM7ICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICBjYXNlIEdMX01BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOiAgICAgICAqcGFyYW1zID0g
Z2w6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNUT1JTOyAgICAgICBicmVhazsKLSAgICAgIGNhc2Ug
R0xfTUFYX1ZBUllJTkdfVkVDVE9SUzogICAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1ZB
UllJTkdfVkVDVE9SUzsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfVkFS
WUlOR19WRUNUT1JTOiAgICAgICAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1WYXJ5aW5nVmVj
dG9ycygpOyAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX01BWF9DT01CSU5FRF9URVhU
VVJFX0lNQUdFX1VOSVRTOiAqcGFyYW1zID0gZ2w6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdF
X1VOSVRTOyBicmVhazsKICAgICAgIGNhc2UgR0xfTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VO
SVRTOiAgICpwYXJhbXMgPSBnbDo6TUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTOyAgIGJy
ZWFrOwogICAgICAgY2FzZSBHTF9NQVhfVEVYVFVSRV9JTUFHRV9VTklUUzogICAgICAgICAgKnBh
cmFtcyA9IGdsOjpNQVhfVEVYVFVSRV9JTUFHRV9VTklUUzsgICAgICAgICAgYnJlYWs7Ci0gICAg
ICBjYXNlIEdMX01BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM6ICAgICAqcGFyYW1zID0gZ2w6
Ok1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlM7ICAgICBicmVhazsKLSAgICAgIGNhc2UgR0xf
TUFYX1JFTkRFUkJVRkZFUl9TSVpFOiAgICAgICAgICAgICpwYXJhbXMgPSBnbDo6TUFYX1JFTkRF
UkJVRkZFUl9TSVpFOyAgICAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfRlJBR01F
TlRfVU5JRk9STV9WRUNUT1JTOiAgICAgKnBhcmFtcyA9IGdldE1heGltdW1GcmFnbWVudFVuaWZv
cm1WZWN0b3JzKCk7ICAgYnJlYWs7CisgICAgICBjYXNlIEdMX01BWF9SRU5ERVJCVUZGRVJfU0la
RTogICAgICAgICAgICAqcGFyYW1zID0gZ2V0TWF4aW11bVJlbmRlcmJ1ZmZlckRpbWVuc2lvbigp
OyAgICBicmVhazsKICAgICAgIGNhc2UgR0xfTlVNX1NIQURFUl9CSU5BUllfRk9STUFUUzogICAg
ICAgICpwYXJhbXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgY2FzZSBHTF9TSEFERVJfQklOQVJZX0ZPUk1BVFM6ICAgICAgLyogbm8gc2hhZGVy
IGJpbmFyeSBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQgKi8gICAgICAgICAgYnJlYWs7CiAgICAgICBj
YXNlIEdMX0FSUkFZX0JVRkZFUl9CSU5ESU5HOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmFycmF5QnVmZmVyLmlkKCk7ICAgICAgICAgICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfRUxF
TUVOVF9BUlJBWV9CVUZGRVJfQklORElORzogICAgICpwYXJhbXMgPSBtU3RhdGUuZWxlbWVudEFy
cmF5QnVmZmVyLmlkKCk7ICAgICAgIGJyZWFrOwotICAgICAgLy9jYXNlIEdMX0ZSQU1FQlVGRkVS
X0JJTkRJTkc6ICAgICAgICAgICAgICAvLyBub3cgZXF1aXZhbGVudCB0byBHTF9EUkFXX0ZSQU1F
QlVGRkVSX0JJTkRJTkdfQU5HTEUKLSAgICAgIGNhc2UgR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5E
SU5HX0FOR0xFOiAgICAgKnBhcmFtcyA9IG1TdGF0ZS5kcmF3RnJhbWVidWZmZXI7ICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX1JFQURfRlJBTUVCVUZGRVJfQklORElOR19BTkdM
RTogICAgICpwYXJhbXMgPSBtU3RhdGUucmVhZEZyYW1lYnVmZmVyOyAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgLy9jYXNlIEdMX0ZSQU1FQlVGRkVSX0JJTkRJTkc6ICAgICAgICAgICAgLy8g
bm93IGVxdWl2YWxlbnQgdG8gR0xfRFJBV19GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFCisgICAg
ICBjYXNlIEdMX0RSQVdfRlJBTUVCVUZGRVJfQklORElOR19BTkdMRTogICAqcGFyYW1zID0gbVN0
YXRlLmRyYXdGcmFtZWJ1ZmZlcjsgICAgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xf
UkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5HX0FOR0xFOiAgICpwYXJhbXMgPSBtU3RhdGUucmVhZEZy
YW1lYnVmZmVyOyAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9SRU5ERVJCVUZG
RVJfQklORElORzogICAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5yZW5kZXJidWZmZXIuaWQo
KTsgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX0NVUlJFTlRfUFJPR1JBTTogICAg
ICAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRlLmN1cnJlbnRQcm9ncmFtOyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgIGNhc2UgR0xfUEFDS19BTElHTk1FTlQ6ICAgICAgICAgICAgICAg
ICAgICpwYXJhbXMgPSBtU3RhdGUucGFja0FsaWdubWVudDsgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgY2FzZSBHTF9VTlBBQ0tfQUxJR05NRU5UOiAgICAgICAgICAgICAgICAgKnBhcmFt
cyA9IG1TdGF0ZS51bnBhY2tBbGlnbm1lbnQ7ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICBj
YXNlIEdMX0dFTkVSQVRFX01JUE1BUF9ISU5UOiAgICAgICAgICAgICAqcGFyYW1zID0gbVN0YXRl
LmdlbmVyYXRlTWlwbWFwSGludDsgICAgICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfRlJB
R01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9PRVM6ICpwYXJhbXMgPSBtU3RhdGUuZnJhZ21l
bnRTaGFkZXJEZXJpdmF0aXZlSGludDsgYnJlYWs7CiAgICAgICBjYXNlIEdMX0FDVElWRV9URVhU
VVJFOiAgICAgICAgICAgICAgICAgICAqcGFyYW1zID0gKG1TdGF0ZS5hY3RpdmVTYW1wbGVyICsg
R0xfVEVYVFVSRTApOyBicmVhazsKICAgICAgIGNhc2UgR0xfU1RFTkNJTF9GVU5DOiAgICAgICAg
ICAgICAgICAgICAgICpwYXJhbXMgPSBtU3RhdGUuc3RlbmNpbEZ1bmM7ICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgY2FzZSBHTF9TVEVOQ0lMX1JFRjogICAgICAgICAgICAgICAgICAg
ICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsUmVmOyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CkBAIC0xMTgzLDggKzEyMjUsOCBAQAogICAgICAgY2FzZSBHTF9TVEVOQ0lMX0JBQ0tfV1JJVEVN
QVNLOiAgICAgICAgICAgKnBhcmFtcyA9IG1TdGF0ZS5zdGVuY2lsQmFja1dyaXRlbWFzazsgICAg
ICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX1NURU5DSUxfQ0xFQVJfVkFMVUU6ICAgICAgICAg
ICAgICAqcGFyYW1zID0gbVN0YXRlLnN0ZW5jaWxDbGVhclZhbHVlOyAgICAgICAgICAgICBicmVh
azsKICAgICAgIGNhc2UgR0xfU1VCUElYRUxfQklUUzogICAgICAgICAgICAgICAgICAgICpwYXJh
bXMgPSA0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
Y2FzZSBHTF9NQVhfVEVYVFVSRV9TSVpFOiAgICAgICAgICAgICAgICAgKnBhcmFtcyA9IGdsOjpN
QVhfVEVYVFVSRV9TSVpFOyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEdMX01B
WF9DVUJFX01BUF9URVhUVVJFX1NJWkU6ICAgICAgICAqcGFyYW1zID0gZ2w6Ok1BWF9DVUJFX01B
UF9URVhUVVJFX1NJWkU7ICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfTUFYX1RFWFRVUkVf
U0laRTogICAgICAgICAgICAgICAgICpwYXJhbXMgPSBnZXRNYXhpbXVtVGV4dHVyZURpbWVuc2lv
bigpOyAgICAgICAgIGJyZWFrOworICAgICAgY2FzZSBHTF9NQVhfQ1VCRV9NQVBfVEVYVFVSRV9T
SVpFOiAgICAgICAgKnBhcmFtcyA9IGdldE1heGltdW1DdWJlVGV4dHVyZURpbWVuc2lvbigpOyAg
ICAgYnJlYWs7CiAgICAgICBjYXNlIEdMX05VTV9DT01QUkVTU0VEX1RFWFRVUkVfRk9STUFUUzog
ICAKICAgICAgICAgewogICAgICAgICAgICAgaWYgKHN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVz
KCkpCkBAIC0xMjQ2LDcgKzEyODgsNyBAQAogICAgICAgY2FzZSBHTF9JTVBMRU1FTlRBVElPTl9D
T0xPUl9SRUFEX0ZPUk1BVDogKnBhcmFtcyA9IGdsOjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFE
X0ZPUk1BVDsgYnJlYWs7CiAgICAgICBjYXNlIEdMX01BWF9WSUVXUE9SVF9ESU1TOgogICAgICAg
ICB7Ci0gICAgICAgICAgICBpbnQgbWF4RGltZW5zaW9uID0gc3RkOjptYXgoKGludClnbDo6TUFY
X1JFTkRFUkJVRkZFUl9TSVpFLCAoaW50KWdsOjpNQVhfVEVYVFVSRV9TSVpFKTsKKyAgICAgICAg
ICAgIGludCBtYXhEaW1lbnNpb24gPSBzdGQ6Om1heChnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGlt
ZW5zaW9uKCksIGdldE1heGltdW1UZXh0dXJlRGltZW5zaW9uKCkpOwogICAgICAgICAgICAgcGFy
YW1zWzBdID0gbWF4RGltZW5zaW9uOwogICAgICAgICAgICAgcGFyYW1zWzFdID0gbWF4RGltZW5z
aW9uOwogICAgICAgICB9CkBAIC0xMzkyLDYgKzE0MzQsNyBAQAogICAgICAgY2FzZSBHTF9QQUNL
X0FMSUdOTUVOVDoKICAgICAgIGNhc2UgR0xfVU5QQUNLX0FMSUdOTUVOVDoKICAgICAgIGNhc2Ug
R0xfR0VORVJBVEVfTUlQTUFQX0hJTlQ6CisgICAgICBjYXNlIEdMX0ZSQUdNRU5UX1NIQURFUl9E
RVJJVkFUSVZFX0hJTlRfT0VTOgogICAgICAgY2FzZSBHTF9SRURfQklUUzoKICAgICAgIGNhc2Ug
R0xfR1JFRU5fQklUUzoKICAgICAgIGNhc2UgR0xfQkxVRV9CSVRTOgpAQCAtMTUzNSw2ICsxNTc4
LDEyIEBACiAgICAgfQogCiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IGZy
YW1lYnVmZmVyT2JqZWN0LT5nZXRSZW5kZXJUYXJnZXQoKTsKKworICAgIGlmICghcmVuZGVyVGFy
Z2V0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAgIC8vIENvbnRleHQgbXVzdCBiZSBs
b3N0CisgICAgfQorCiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKmRlcHRoU3RlbmNpbCA9IE5VTEw7
CiAKICAgICB1bnNpZ25lZCBpbnQgcmVuZGVyVGFyZ2V0U2VyaWFsID0gZnJhbWVidWZmZXJPYmpl
Y3QtPmdldFJlbmRlclRhcmdldFNlcmlhbCgpOwpAQCAtMTU1MCwyNiArMTU5OSw0MyBAQAogICAg
IGlmIChmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0RGVwdGhidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkK
ICAgICB7CiAgICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXREZXB0
aGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICAgICAgaWYgKCFkZXB0aFN0ZW5jaWwp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNpbCBwb2ludGVyIHVuZXhw
ZWN0ZWRseSBudWxsLiIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIAogICAgICAgICBkZXB0aGJ1ZmZlclNlcmlhbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5n
ZXREZXB0aGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKICAgICB9CiAgICAgZWxzZSBpZiAoZnJhbWVi
dWZmZXJPYmplY3QtPmdldFN0ZW5jaWxidWZmZXJUeXBlKCkgIT0gR0xfTk9ORSkKICAgICB7CiAg
ICAgICAgIGRlcHRoU3RlbmNpbCA9IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTdGVuY2lsYnVmZmVy
KCktPmdldERlcHRoU3RlbmNpbCgpOworICAgICAgICBpZiAoIWRlcHRoU3RlbmNpbCkKKyAgICAg
ICAgeworICAgICAgICAgICAgRVJSKCJEZXB0aCBzdGVuY2lsIHBvaW50ZXIgdW5leHBlY3RlZGx5
IG51bGwuIik7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
CiAgICAgICAgIHN0ZW5jaWxidWZmZXJTZXJpYWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3Rl
bmNpbGJ1ZmZlcigpLT5nZXRTZXJpYWwoKTsKICAgICB9CiAKICAgICBpZiAoZGVwdGhidWZmZXJT
ZXJpYWwgIT0gbUFwcGxpZWREZXB0aGJ1ZmZlclNlcmlhbCB8fAotICAgICAgICBzdGVuY2lsYnVm
ZmVyU2VyaWFsICE9IG1BcHBsaWVkU3RlbmNpbGJ1ZmZlclNlcmlhbCkKKyAgICAgICAgc3RlbmNp
bGJ1ZmZlclNlcmlhbCAhPSBtQXBwbGllZFN0ZW5jaWxidWZmZXJTZXJpYWwgfHwKKyAgICAgICAg
IW1EZXB0aFN0ZW5jaWxJbml0aWFsaXplZCkKICAgICB7CiAgICAgICAgIGRldmljZS0+U2V0RGVw
dGhTdGVuY2lsU3VyZmFjZShkZXB0aFN0ZW5jaWwpOwogICAgICAgICBtQXBwbGllZERlcHRoYnVm
ZmVyU2VyaWFsID0gZGVwdGhidWZmZXJTZXJpYWw7CiAgICAgICAgIG1BcHBsaWVkU3RlbmNpbGJ1
ZmZlclNlcmlhbCA9IHN0ZW5jaWxidWZmZXJTZXJpYWw7CisgICAgICAgIG1EZXB0aFN0ZW5jaWxJ
bml0aWFsaXplZCA9IHRydWU7CiAgICAgfQogCiAgICAgRDNEVklFV1BPUlQ5IHZpZXdwb3J0Owog
ICAgIEQzRFNVUkZBQ0VfREVTQyBkZXNjOwogICAgIHJlbmRlclRhcmdldC0+R2V0RGVzYygmZGVz
Yyk7CiAKKyAgICBmbG9hdCB6TmVhciA9IGNsYW1wMDEobVN0YXRlLnpOZWFyKTsKKyAgICBmbG9h
dCB6RmFyID0gY2xhbXAwMShtU3RhdGUuekZhcik7CisKICAgICBpZiAoaWdub3JlVmlld3BvcnQp
CiAgICAgewogICAgICAgICB2aWV3cG9ydC5YID0gMDsKQEAgLTE1ODUsOCArMTY1MSw4IEBACiAg
ICAgICAgIHZpZXdwb3J0LlkgPSBzdGQ6Om1heChtU3RhdGUudmlld3BvcnRZLCAwKTsKICAgICAg
ICAgdmlld3BvcnQuV2lkdGggPSBzdGQ6Om1pbihtU3RhdGUudmlld3BvcnRXaWR0aCwgKGludClk
ZXNjLldpZHRoIC0gKGludCl2aWV3cG9ydC5YKTsKICAgICAgICAgdmlld3BvcnQuSGVpZ2h0ID0g
c3RkOjptaW4obVN0YXRlLnZpZXdwb3J0SGVpZ2h0LCAoaW50KWRlc2MuSGVpZ2h0IC0gKGludCl2
aWV3cG9ydC5ZKTsKLSAgICAgICAgdmlld3BvcnQuTWluWiA9IGNsYW1wMDEobVN0YXRlLnpOZWFy
KTsKLSAgICAgICAgdmlld3BvcnQuTWF4WiA9IGNsYW1wMDEobVN0YXRlLnpGYXIpOworICAgICAg
ICB2aWV3cG9ydC5NaW5aID0gek5lYXI7CisgICAgICAgIHZpZXdwb3J0Lk1heFogPSB6RmFyOwog
ICAgIH0KIAogICAgIGlmICh2aWV3cG9ydC5XaWR0aCA8PSAwIHx8IHZpZXdwb3J0LkhlaWdodCA8
PSAwKQpAQCAtMTYyMywyNyArMTY4OSwyMSBAQAogCiAgICAgICAgIEdMaW50IGhhbGZQaXhlbFNp
emUgPSBwcm9ncmFtT2JqZWN0LT5nZXREeEhhbGZQaXhlbFNpemVMb2NhdGlvbigpOwogICAgICAg
ICBHTGZsb2F0IHh5WzJdID0gezEuMGYgLyB2aWV3cG9ydC5XaWR0aCwgMS4wZiAvIHZpZXdwb3J0
LkhlaWdodH07Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0yZnYoaGFsZlBpeGVs
U2l6ZSwgMSwgKEdMZmxvYXQqKSZ4eSk7CisgICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZv
cm0yZnYoaGFsZlBpeGVsU2l6ZSwgMSwgeHkpOwogCi0gICAgICAgIEdMaW50IHdpbmRvdyA9IHBy
b2dyYW1PYmplY3QtPmdldER4Vmlld3BvcnRMb2NhdGlvbigpOworICAgICAgICBHTGludCB2aWV3
cG9ydCA9IHByb2dyYW1PYmplY3QtPmdldER4Vmlld3BvcnRMb2NhdGlvbigpOwogICAgICAgICBH
TGZsb2F0IHdoeHlbNF0gPSB7bVN0YXRlLnZpZXdwb3J0V2lkdGggLyAyLjBmLCBtU3RhdGUudmll
d3BvcnRIZWlnaHQgLyAyLjBmLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0KW1T
dGF0ZS52aWV3cG9ydFggKyBtU3RhdGUudmlld3BvcnRXaWR0aCAvIDIuMGYsIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAoZmxvYXQpbVN0YXRlLnZpZXdwb3J0WSArIG1TdGF0ZS52aWV3cG9y
dEhlaWdodCAvIDIuMGZ9OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtNGZ2KHdp
bmRvdywgMSwgKEdMZmxvYXQqKSZ3aHh5KTsKKyAgICAgICAgcHJvZ3JhbU9iamVjdC0+c2V0VW5p
Zm9ybTRmdih2aWV3cG9ydCwgMSwgd2h4eSk7CiAKICAgICAgICAgR0xpbnQgZGVwdGggPSBwcm9n
cmFtT2JqZWN0LT5nZXREeERlcHRoTG9jYXRpb24oKTsKLSAgICAgICAgR0xmbG9hdCBkelsyXSA9
IHsobVN0YXRlLnpGYXIgLSBtU3RhdGUuek5lYXIpIC8gMi4wZiwgKG1TdGF0ZS56TmVhciArIG1T
dGF0ZS56RmFyKSAvIDIuMGZ9OwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMmZ2
KGRlcHRoLCAxLCAoR0xmbG9hdCopJmR6KTsKKyAgICAgICAgR0xmbG9hdCBkelsyXSA9IHsoekZh
ciAtIHpOZWFyKSAvIDIuMGYsICh6TmVhciArIHpGYXIpIC8gMi4wZn07CisgICAgICAgIHByb2dy
YW1PYmplY3QtPnNldFVuaWZvcm0yZnYoZGVwdGgsIDEsIGR6KTsKIAotICAgICAgICBHTGludCBu
ZWFyID0gcHJvZ3JhbU9iamVjdC0+Z2V0RGVwdGhSYW5nZU5lYXJMb2NhdGlvbigpOwotICAgICAg
ICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMWZ2KG5lYXIsIDEsICZtU3RhdGUuek5lYXIpOwot
Ci0gICAgICAgIEdMaW50IGZhciA9IHByb2dyYW1PYmplY3QtPmdldERlcHRoUmFuZ2VGYXJMb2Nh
dGlvbigpOwotICAgICAgICBwcm9ncmFtT2JqZWN0LT5zZXRVbmlmb3JtMWZ2KGZhciwgMSwgJm1T
dGF0ZS56RmFyKTsKLQotICAgICAgICBHTGludCBkaWZmID0gcHJvZ3JhbU9iamVjdC0+Z2V0RGVw
dGhSYW5nZURpZmZMb2NhdGlvbigpOwotICAgICAgICBHTGZsb2F0IHpEaWZmID0gbVN0YXRlLnpG
YXIgLSBtU3RhdGUuek5lYXI7Ci0gICAgICAgIHByb2dyYW1PYmplY3QtPnNldFVuaWZvcm0xZnYo
ZGlmZiwgMSwgJnpEaWZmKTsKKyAgICAgICAgR0xpbnQgZGVwdGhSYW5nZSA9IHByb2dyYW1PYmpl
Y3QtPmdldER4RGVwdGhSYW5nZUxvY2F0aW9uKCk7CisgICAgICAgIEdMZmxvYXQgbmVhckZhckRp
ZmZbM10gPSB7ek5lYXIsIHpGYXIsIHpGYXIgLSB6TmVhcn07CisgICAgICAgIHByb2dyYW1PYmpl
Y3QtPnNldFVuaWZvcm0zZnYoZGVwdGhSYW5nZSwgMSwgbmVhckZhckRpZmYpOwogICAgIH0KIAog
ICAgIHJldHVybiB0cnVlOwpAQCAtMTgzMCwzOSArMTg5MCw0NiBAQAogICAgICAgICBtUG9seWdv
bk9mZnNldFN0YXRlRGlydHkgPSBmYWxzZTsKICAgICB9CiAKLSAgICBpZiAoZnJhbWVidWZmZXJP
YmplY3QtPmlzTXVsdGlzYW1wbGUoKSAmJiBtU2FtcGxlU3RhdGVEaXJ0eSkKKyAgICBpZiAobVNh
bXBsZVN0YXRlRGlydHkpCiAgICAgewotICAgICAgICBpZiAobVN0YXRlLnNhbXBsZUFscGhhVG9D
b3ZlcmFnZSkKKyAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5pc011bHRpc2FtcGxlKCkp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIEZJWE1FKCJTYW1wbGUgYWxwaGEgdG8gY292ZXJhZ2Ug
aXMgdW5pbXBsZW1lbnRlZC4iKTsKLSAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1TdGF0ZS5z
YW1wbGVBbHBoYVRvQ292ZXJhZ2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgRklY
TUUoIlNhbXBsZSBhbHBoYSB0byBjb3ZlcmFnZSBpcyB1bmltcGxlbWVudGVkLiIpOworICAgICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2UpCi0gICAgICAgIHsK
ICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfTVVMVElTQU1QTEVBTlRJ
QUxJQVMsIFRSVUUpOwotICAgICAgICAgICAgdW5zaWduZWQgaW50IG1hc2sgPSAwOwotICAgICAg
ICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlICE9IDApCisgICAgICAgICAgICBp
ZiAobVN0YXRlLnNhbXBsZUNvdmVyYWdlKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGZsb2F0IHRocmVzaG9sZCA9IDAuNWY7Ci0KLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTYW1wbGVzKCk7ICsraSkKKyAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisgICAgICAgICAgICAgICAgaWYgKG1TdGF0ZS5z
YW1wbGVDb3ZlcmFnZVZhbHVlICE9IDApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgICBtYXNrIDw8PSAxOworICAgICAgICAgICAgICAgICAgICBmbG9hdCB0aHJlc2hvbGQg
PSAwLjVmOwogCi0gICAgICAgICAgICAgICAgICAgIGlmICgoaSArIDEpICogbVN0YXRlLnNhbXBs
ZUNvdmVyYWdlVmFsdWUgPj0gdGhyZXNob2xkKQorICAgICAgICAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRTYW1wbGVzKCk7ICsraSkKICAgICAg
ICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgdGhyZXNob2xkICs9IDEu
MGY7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXNrIHw9IDE7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtYXNrIDw8PSAxOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgKyAx
KSAqIG1TdGF0ZS5zYW1wbGVDb3ZlcmFnZVZhbHVlID49IHRocmVzaG9sZCkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJlc2hvbGQgKz0g
MS4wZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrIHw9IDE7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKG1TdGF0ZS5zYW1wbGVDb3Zl
cmFnZUludmVydCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1hc2sg
PSB+bWFzazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZXZpY2UtPlNl
dFJlbmRlclN0YXRlKEQzRFJTX01VTFRJU0FNUExFTUFTSywgbWFzayk7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChtU3RhdGUuc2FtcGxlQ292ZXJhZ2VJbnZl
cnQpCisgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbWFz
ayA9IH5tYXNrOworICAgICAgICAgICAgICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNf
TVVMVElTQU1QTEVNQVNLLCAweEZGRkZGRkZGKTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgZGV2aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19NVUxUSVNBTVBMRU1BU0ssIG1hc2spOwog
ICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgewpAQCAtMTg4NywxOCArMTk1NCwxOCBA
QAogewogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1ZFUlRFWF9BVFRSSUJTOyBpKyspCiAg
ICAgewotICAgICAgICBpZiAoYXR0cmlidXRlc1tpXS5lbmFibGVkKQorICAgICAgICBpZiAoYXR0
cmlidXRlc1tpXS5hY3RpdmUpCiAgICAgICAgIHsKICAgICAgICAgICAgIGF0dHJpYnV0ZXNbaV0u
c2VtYW50aWNJbmRleCA9IGdldEN1cnJlbnRQcm9ncmFtKCktPmdldFNlbWFudGljSW5kZXgoaSk7
CiAgICAgICAgIH0KICAgICB9CiB9CiAKLUdMZW51bSBDb250ZXh0OjphcHBseVZlcnRleEJ1ZmZl
cihHTGVudW0gbW9kZSwgR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQsIGJvb2wgKnVzZUluZGV4
aW5nLCBUcmFuc2xhdGVkSW5kZXhEYXRhICppbmRleEluZm8pCitHTGVudW0gQ29udGV4dDo6YXBw
bHlWZXJ0ZXhCdWZmZXIoR0xpbnQgZmlyc3QsIEdMc2l6ZWkgY291bnQpCiB7CiAgICAgVHJhbnNs
YXRlZEF0dHJpYnV0ZSB0cmFuc2xhdGVkW01BWF9WRVJURVhfQVRUUklCU107CiAKLSAgICBHTGVu
dW0gZXJyID0gbVZlcnRleERhdGFNYW5hZ2VyLT5wcmVSZW5kZXJWYWxpZGF0ZShmaXJzdCwgY291
bnQsIHRyYW5zbGF0ZWQpOworICAgIEdMZW51bSBlcnIgPSBtVmVydGV4RGF0YU1hbmFnZXItPnBy
ZXBhcmVWZXJ0ZXhEYXRhKGZpcnN0LCBjb3VudCwgdHJhbnNsYXRlZCk7CiAgICAgaWYgKGVyciAh
PSBHTF9OT19FUlJPUikKICAgICB7CiAgICAgICAgIHJldHVybiBlcnI7CkBAIC0xOTA2LDUzICsx
OTczLDIwIEBACiAKICAgICBsb29rdXBBdHRyaWJ1dGVNYXBwaW5nKHRyYW5zbGF0ZWQpOwogCi0g
ICAgbUJ1ZmZlckJhY2tFbmQtPnNldHVwQXR0cmlidXRlc1ByZURyYXcodHJhbnNsYXRlZCk7Cisg
ICAgbVZlcnRleERhdGFNYW5hZ2VyLT5zZXR1cEF0dHJpYnV0ZXModHJhbnNsYXRlZCk7CiAKLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IE1BWF9WRVJURVhfQVRUUklCUzsgaSsrKQotICAgIHsKLSAg
ICAgICAgaWYgKHRyYW5zbGF0ZWRbaV0uZW5hYmxlZCAmJiB0cmFuc2xhdGVkW2ldLm5vbkFycmF5
KQotICAgICAgICB7Ci0gICAgICAgICAgICBlcnIgPSBtSW5kZXhEYXRhTWFuYWdlci0+cHJlUmVu
ZGVyVmFsaWRhdGVVbmluZGV4ZWQobW9kZSwgY291bnQsIGluZGV4SW5mbyk7Ci0gICAgICAgICAg
ICBpZiAoZXJyICE9IEdMX05PX0VSUk9SKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBlcnI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1CdWZmZXJCYWNrRW5k
LT5zZXR1cEluZGljZXNQcmVEcmF3KCppbmRleEluZm8pOwotCi0gICAgICAgICAgICAqdXNlSW5k
ZXhpbmcgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIEdMX05PX0VSUk9SOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgKnVzZUluZGV4aW5nID0gZmFsc2U7CiAgICAgcmV0dXJuIEdMX05PX0VS
Uk9SOwogfQogCi1HTGVudW0gQ29udGV4dDo6YXBwbHlWZXJ0ZXhCdWZmZXIoY29uc3QgVHJhbnNs
YXRlZEluZGV4RGF0YSAmaW5kZXhJbmZvKQotewotICAgIFRyYW5zbGF0ZWRBdHRyaWJ1dGUgdHJh
bnNsYXRlZFtNQVhfVkVSVEVYX0FUVFJJQlNdOwotCi0gICAgR0xlbnVtIGVyciA9IG1WZXJ0ZXhE
YXRhTWFuYWdlci0+cHJlUmVuZGVyVmFsaWRhdGUoaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleElu
Zm8ubWF4SW5kZXgtaW5kZXhJbmZvLm1pbkluZGV4KzEsIHRyYW5zbGF0ZWQpOwotCi0gICAgaWYg
KGVyciA9PSBHTF9OT19FUlJPUikKLSAgICB7Ci0gICAgICAgIGxvb2t1cEF0dHJpYnV0ZU1hcHBp
bmcodHJhbnNsYXRlZCk7Ci0KLSAgICAgICAgbUJ1ZmZlckJhY2tFbmQtPnNldHVwQXR0cmlidXRl
c1ByZURyYXcodHJhbnNsYXRlZCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGVycjsKLX0KLQogLy8g
QXBwbGllcyB0aGUgaW5kaWNlcyBhbmQgZWxlbWVudCBhcnJheSBiaW5kaW5ncyB0byB0aGUgRGly
ZWN0M0QgOSBkZXZpY2UKIEdMZW51bSBDb250ZXh0OjphcHBseUluZGV4QnVmZmVyKGNvbnN0IHZv
aWQgKmluZGljZXMsIEdMc2l6ZWkgY291bnQsIEdMZW51bSBtb2RlLCBHTGVudW0gdHlwZSwgVHJh
bnNsYXRlZEluZGV4RGF0YSAqaW5kZXhJbmZvKQogewotICAgIEdMZW51bSBlcnIgPSBtSW5kZXhE
YXRhTWFuYWdlci0+cHJlUmVuZGVyVmFsaWRhdGUobW9kZSwgdHlwZSwgY291bnQsIG1TdGF0ZS5l
bGVtZW50QXJyYXlCdWZmZXIuZ2V0KCksIGluZGljZXMsIGluZGV4SW5mbyk7CisgICAgSURpcmVj
dDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0RGV2aWNlKCk7CisgICAgR0xlbnVtIGVyciA9IG1JbmRl
eERhdGFNYW5hZ2VyLT5wcmVwYXJlSW5kZXhEYXRhKHR5cGUsIGNvdW50LCBtU3RhdGUuZWxlbWVu
dEFycmF5QnVmZmVyLmdldCgpLCBpbmRpY2VzLCBpbmRleEluZm8pOwogCiAgICAgaWYgKGVyciA9
PSBHTF9OT19FUlJPUikKICAgICB7Ci0gICAgICAgIG1CdWZmZXJCYWNrRW5kLT5zZXR1cEluZGlj
ZXNQcmVEcmF3KCppbmRleEluZm8pOworICAgICAgICBkZXZpY2UtPlNldEluZGljZXMoaW5kZXhJ
bmZvLT5pbmRleEJ1ZmZlcik7CiAgICAgfQogCiAgICAgcmV0dXJuIGVycjsKQEAgLTIwNDgsNiAr
MjA4MiwxMiBAQAogICAgIH0KIAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQg
PSBmcmFtZWJ1ZmZlci0+Z2V0UmVuZGVyVGFyZ2V0KCk7CisKKyAgICBpZiAoIXJlbmRlclRhcmdl
dCkKKyAgICB7CisgICAgICAgIHJldHVybjsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9zdCwgcmV0
dXJuIHNpbGVudGx5CisgICAgfQorCiAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZ2V0
RGV2aWNlKCk7CiAKICAgICBEM0RTVVJGQUNFX0RFU0MgZGVzYzsKQEAgLTIxNDEsMTYgKzIxODEs
NiBAQAogICAgICAgICAgICAgICAgICAgICByID0gKHJnYiAmIDB4RjgwMCkgKiAoMS4wZiAvIDB4
RjgwMCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICBjYXNlIEQzREZNVF9YMVI1RzVCNToKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHhyZ2IgPSAqKHVuc2lnbmVkIHNob3J0Kikoc291
cmNlICsgMiAqIGkgKyBqICogbG9jay5QaXRjaCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgYSA9
IDEuMGY7Ci0gICAgICAgICAgICAgICAgICAgIGIgPSAoeHJnYiAmIDB4MDAxRikgKiAoMS4wZiAv
IDB4MDAxRik7Ci0gICAgICAgICAgICAgICAgICAgIGcgPSAoeHJnYiAmIDB4MDNFMCkgKiAoMS4w
ZiAvIDB4MDNFMCk7Ci0gICAgICAgICAgICAgICAgICAgIHIgPSAoeHJnYiAmIDB4N0MwMCkgKiAo
MS4wZiAvIDB4N0MwMCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICBjYXNlIEQzREZNVF9BMVI1RzVCNToKICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGFyZ2IgPSAqKHVuc2lnbmVkIHNo
b3J0Kikoc291cmNlICsgMiAqIGkgKyBqICogbG9jay5QaXRjaCk7CkBAIC0yMTkxLDYgKzIyMjEs
MjggQEAKICAgICAgICAgICAgICAgICAgICAgciA9IChhcmdiICYgMHgzRkYwMDAwMCkgKiAoMS4w
ZiAvIDB4M0ZGMDAwMDApOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgY2FzZSBEM0RGTVRfQTMyQjMyRzMyUjMyRjoKKyAgICAgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8vIGZsb2F0IGZvcm1hdHMgaW4gRDNEIGFyZSBz
dG9yZWQgcmdiYSwgcmF0aGVyIHRoYW4gdGhlIG90aGVyIHdheSByb3VuZAorICAgICAgICAgICAg
ICAgICAgICByID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogbG9jay5QaXRjaCkg
KyAwKTsKKyAgICAgICAgICAgICAgICAgICAgZyA9ICooKGZsb2F0Kikoc291cmNlICsgMTYgKiBp
ICsgaiAqIGxvY2suUGl0Y2gpICsgMSk7CisgICAgICAgICAgICAgICAgICAgIGIgPSAqKChmbG9h
dCopKHNvdXJjZSArIDE2ICogaSArIGogKiBsb2NrLlBpdGNoKSArIDIpOworICAgICAgICAgICAg
ICAgICAgICBhID0gKigoZmxvYXQqKShzb3VyY2UgKyAxNiAqIGkgKyBqICogbG9jay5QaXRjaCkg
KyAzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgIGNhc2UgRDNERk1UX0ExNkIxNkcxNlIxNkY6CisgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAvLyBmbG9hdCBmb3JtYXRzIGluIEQzRCBhcmUgc3RvcmVkIHJnYmEs
IHJhdGhlciB0aGFuIHRoZSBvdGhlciB3YXkgcm91bmQKKyAgICAgICAgICAgICAgICAgICAgZmxv
YXQgYWJncls0XTsKKworICAgICAgICAgICAgICAgICAgICBEM0RYRmxvYXQxNlRvMzJBcnJheShh
YmdyLCAoRDNEWEZMT0FUMTYqKShzb3VyY2UgKyA4ICogaSArIGogKiBsb2NrLlBpdGNoKSwgNCk7
CisKKyAgICAgICAgICAgICAgICAgICAgYSA9IGFiZ3JbM107CisgICAgICAgICAgICAgICAgICAg
IGIgPSBhYmdyWzJdOworICAgICAgICAgICAgICAgICAgICBnID0gYWJnclsxXTsKKyAgICAgICAg
ICAgICAgICAgICAgciA9IGFiZ3JbMF07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIFVOSU1Q
TEVNRU5URUQoKTsgICAvLyBGSVhNRQogICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CkBA
IC0yMzE0LDYgKzIzNjYsMTIgQEAKICAgICAgICAgaWYgKGZyYW1lYnVmZmVyT2JqZWN0LT5nZXRT
dGVuY2lsYnVmZmVyVHlwZSgpICE9IEdMX05PTkUpCiAgICAgICAgIHsKICAgICAgICAgICAgIElE
aXJlY3QzRFN1cmZhY2U5ICpkZXB0aFN0ZW5jaWwgPSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0U3Rl
bmNpbGJ1ZmZlcigpLT5nZXREZXB0aFN0ZW5jaWwoKTsKKyAgICAgICAgICAgIGlmICghZGVwdGhT
dGVuY2lsKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEVSUigiRGVwdGggc3RlbmNp
bCBwb2ludGVyIHVuZXhwZWN0ZWRseSBudWxsLiIpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAogICAgICAgICAgICAgRDNEU1VSRkFDRV9ERVND
IGRlc2M7CiAgICAgICAgICAgICBkZXB0aFN0ZW5jaWwtPkdldERlc2MoJmRlc2MpOwogCkBAIC0y
MzQ2LDYgKzI0MDQsMTEgQEAKIAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQg
PSBmcmFtZWJ1ZmZlck9iamVjdC0+Z2V0UmVuZGVyVGFyZ2V0KCk7CiAKKyAgICBpZiAoIXJlbmRl
clRhcmdldCkKKyAgICB7CisgICAgICAgIHJldHVybjsgICAvLyBDb250ZXh0IG11c3QgYmUgbG9z
dCwgcmV0dXJuIHNpbGVudGx5CisgICAgfQorCiAgICAgRDNEU1VSRkFDRV9ERVNDIGRlc2M7CiAg
ICAgcmVuZGVyVGFyZ2V0LT5HZXREZXNjKCZkZXNjKTsKIApAQCAtMjM4MSw3ICsyNDQ0LDcgQEAK
ICAgICAgICAgICAgIGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7CiAgICAgICAgICAgICBk
ZXZpY2UtPlNldFZlcnRleFNoYWRlcihOVUxMKTsKICAgICAgICAgICAgIGRldmljZS0+U2V0RlZG
KEQzREZWRl9YWVpSSFcgfCBEM0RGVkZfRElGRlVTRSk7Ci0gICAgICAgICAgICBkZXZpY2UtPlNl
dFN0cmVhbVNvdXJjZUZyZXEoMCwgMSk7CisgICAgICAgICAgICBkZXZpY2UtPlNldFRleHR1cmVT
dGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUk9QLCBEM0RUT1BfRElTQUJMRSk7CiAKICAgICAgICAg
ICAgIGhyID0gZGV2aWNlLT5FbmRTdGF0ZUJsb2NrKCZtTWFza2VkQ2xlYXJTYXZlZFN0YXRlKTsK
ICAgICAgICAgICAgIEFTU0VSVChTVUNDRUVERUQoaHIpIHx8IGhyID09IEQzREVSUl9PVVRPRlZJ
REVPTUVNT1JZIHx8IGhyID09IEVfT1VUT0ZNRU1PUlkpOwpAQCAtMjQzNiw3ICsyNDk5LDcgQEAK
ICAgICAgICAgZGV2aWNlLT5TZXRQaXhlbFNoYWRlcihOVUxMKTsKICAgICAgICAgZGV2aWNlLT5T
ZXRWZXJ0ZXhTaGFkZXIoTlVMTCk7CiAgICAgICAgIGRldmljZS0+U2V0RlZGKEQzREZWRl9YWVpS
SFcgfCBEM0RGVkZfRElGRlVTRSk7Ci0gICAgICAgIGRldmljZS0+U2V0U3RyZWFtU291cmNlRnJl
cSgwLCAxKTsKKyAgICAgICAgZGV2aWNlLT5TZXRUZXh0dXJlU3RhZ2VTdGF0ZSgwLCBEM0RUU1Nf
Q09MT1JPUCwgRDNEVE9QX0RJU0FCTEUpOwogCiAgICAgICAgIHN0cnVjdCBWZXJ0ZXgKICAgICAg
ICAgewpAQCAtMjUxNyw5ICsyNTgwLDcgQEAKIAogICAgIGFwcGx5U3RhdGUobW9kZSk7CiAKLSAg
ICBUcmFuc2xhdGVkSW5kZXhEYXRhIGluZGV4SW5mbzsKLSAgICBib29sIHVzZUluZGV4aW5nOwot
ICAgIEdMZW51bSBlcnIgPSBhcHBseVZlcnRleEJ1ZmZlcihtb2RlLCBmaXJzdCwgY291bnQsICZ1
c2VJbmRleGluZywgJmluZGV4SW5mbyk7CisgICAgR0xlbnVtIGVyciA9IGFwcGx5VmVydGV4QnVm
ZmVyKGZpcnN0LCBjb3VudCk7CiAgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKICAgICB7CiAg
ICAgICAgIHJldHVybiBlcnJvcihlcnIpOwpAQCAtMjUzNiwxOCArMjU5NywxNyBAQAogICAgIGlm
ICghY3VsbFNraXBzRHJhdyhtb2RlKSkKICAgICB7CiAgICAgICAgIGRpc3BsYXktPnN0YXJ0U2Nl
bmUoKTsKLSAgICAgICAgaWYgKHVzZUluZGV4aW5nKQorICAgICAgICAKKyAgICAgICAgZGV2aWNl
LT5EcmF3UHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIHByaW1pdGl2ZUNvdW50KTsKKworICAg
ICAgICBpZiAobW9kZSA9PSBHTF9MSU5FX0xPT1ApICAgLy8gRHJhdyB0aGUgbGFzdCBzZWdtZW50
IHNlcGFyYXRlbHkKICAgICAgICAgewotICAgICAgICAgICAgZGV2aWNlLT5EcmF3SW5kZXhlZFBy
aW1pdGl2ZShwcmltaXRpdmVUeXBlLCAtKElOVClpbmRleEluZm8ubWluSW5kZXgsIGluZGV4SW5m
by5taW5JbmRleCwgaW5kZXhJbmZvLm1heEluZGV4LWluZGV4SW5mby5taW5JbmRleCsxLCBpbmRl
eEluZm8ub2Zmc2V0L2luZGV4SW5mby5pbmRleFNpemUsIHByaW1pdGl2ZUNvdW50KTsKKyAgICAg
ICAgICAgIGRyYXdDbG9zaW5nTGluZShmaXJzdCwgZmlyc3QgKyBjb3VudCAtIDEpOwogICAgICAg
ICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgICAgZGV2aWNlLT5EcmF3UHJp
bWl0aXZlKHByaW1pdGl2ZVR5cGUsIDAsIHByaW1pdGl2ZUNvdW50KTsKLSAgICAgICAgfQogICAg
IH0KIH0KIAotdm9pZCBDb250ZXh0OjpkcmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkg
Y291bnQsIEdMZW51bSB0eXBlLCBjb25zdCB2b2lkKiBpbmRpY2VzKQordm9pZCBDb250ZXh0Ojpk
cmF3RWxlbWVudHMoR0xlbnVtIG1vZGUsIEdMc2l6ZWkgY291bnQsIEdMZW51bSB0eXBlLCBjb25z
dCB2b2lkICppbmRpY2VzKQogewogICAgIGlmICghbVN0YXRlLmN1cnJlbnRQcm9ncmFtKQogICAg
IHsKQEAgLTI1ODYsNyArMjY0Niw4IEBACiAgICAgICAgIHJldHVybiBlcnJvcihlcnIpOwogICAg
IH0KIAotICAgIGVyciA9IGFwcGx5VmVydGV4QnVmZmVyKGluZGV4SW5mbyk7CisgICAgR0xzaXpl
aSB2ZXJ0ZXhDb3VudCA9IGluZGV4SW5mby5tYXhJbmRleCAtIGluZGV4SW5mby5taW5JbmRleCAr
IDE7CisgICAgZXJyID0gYXBwbHlWZXJ0ZXhCdWZmZXIoaW5kZXhJbmZvLm1pbkluZGV4LCB2ZXJ0
ZXhDb3VudCk7CiAgICAgaWYgKGVyciAhPSBHTF9OT19FUlJPUikKICAgICB7CiAgICAgICAgIHJl
dHVybiBlcnJvcihlcnIpOwpAQCAtMjYwMyw3ICsyNjY0LDEzIEBACiAgICAgaWYgKCFjdWxsU2tp
cHNEcmF3KG1vZGUpKQogICAgIHsKICAgICAgICAgZGlzcGxheS0+c3RhcnRTY2VuZSgpOwotICAg
ICAgICBkZXZpY2UtPkRyYXdJbmRleGVkUHJpbWl0aXZlKHByaW1pdGl2ZVR5cGUsIC0oSU5UKWlu
ZGV4SW5mby5taW5JbmRleCwgaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWF4SW5kZXgt
aW5kZXhJbmZvLm1pbkluZGV4KzEsIGluZGV4SW5mby5vZmZzZXQvaW5kZXhJbmZvLmluZGV4U2l6
ZSwgcHJpbWl0aXZlQ291bnQpOworCisgICAgICAgIGRldmljZS0+RHJhd0luZGV4ZWRQcmltaXRp
dmUocHJpbWl0aXZlVHlwZSwgLShJTlQpaW5kZXhJbmZvLm1pbkluZGV4LCBpbmRleEluZm8ubWlu
SW5kZXgsIHZlcnRleENvdW50LCBpbmRleEluZm8uc3RhcnRJbmRleCwgcHJpbWl0aXZlQ291bnQp
OworCisgICAgICAgIGlmIChtb2RlID09IEdMX0xJTkVfTE9PUCkgICAvLyBEcmF3IHRoZSBsYXN0
IHNlZ21lbnQgc2VwYXJhdGVseQorICAgICAgICB7CisgICAgICAgICAgICBkcmF3Q2xvc2luZ0xp
bmUoY291bnQsIHR5cGUsIGluZGljZXMpOworICAgICAgICB9CiAgICAgfQogfQogCkBAIC0yNjMx
LDcgKzI2OTgsNiBAQAogICAgICAgICBBU1NFUlQoU1VDQ0VFREVEKHJlc3VsdCkpOwogCiAgICAg
ICAgIC8vIFJlbmRlciBzb21ldGhpbmcgb3V0c2lkZSB0aGUgcmVuZGVyIHRhcmdldAotICAgICAg
ICBkZXZpY2UtPlNldFN0cmVhbVNvdXJjZUZyZXEoMCwgMSk7CiAgICAgICAgIGRldmljZS0+U2V0
UGl4ZWxTaGFkZXIoTlVMTCk7CiAgICAgICAgIGRldmljZS0+U2V0VmVydGV4U2hhZGVyKE5VTEwp
OwogICAgICAgICBkZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhXKTsKQEAgLTI2ODcsNiArMjc1
Myw5MyBAQAogICAgIH0KIH0KIAordm9pZCBDb250ZXh0OjpkcmF3Q2xvc2luZ0xpbmUodW5zaWdu
ZWQgaW50IGZpcnN0LCB1bnNpZ25lZCBpbnQgbGFzdCkKK3sKKyAgICBJRGlyZWN0M0REZXZpY2U5
ICpkZXZpY2UgPSBnZXREZXZpY2UoKTsKKyAgICBJRGlyZWN0M0RJbmRleEJ1ZmZlcjkgKmluZGV4
QnVmZmVyID0gTlVMTDsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IEQzREVSUl9JTlZBTElEQ0FMTDsK
KworICAgIGlmIChzdXBwb3J0czMyYml0SW5kaWNlcygpKQorICAgIHsKKyAgICAgICAgcmVzdWx0
ID0gZGV2aWNlLT5DcmVhdGVJbmRleEJ1ZmZlcig4LCBEM0RVU0FHRV9XUklURU9OTFksIEQzREZN
VF9JTkRFWDMyLCBEM0RQT09MX0RFRkFVTFQsICZpbmRleEJ1ZmZlciwgMCk7CisKKyAgICAgICAg
aWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgKmRhdGE7CisgICAgICAgICAgICByZXN1bHQgPSBpbmRleEJ1ZmZlci0+TG9jaygwLCAwLCAo
dm9pZCoqKSZkYXRhLCAwKTsKKworICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRhdGFbMF0gPSBsYXN0OworICAgICAgICAg
ICAgICAgIGRhdGFbMV0gPSBmaXJzdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICBlbHNlCisgICAgeworICAgICAgICByZXN1bHQgPSBkZXZpY2UtPkNyZWF0ZUluZGV4QnVm
ZmVyKDQsIEQzRFVTQUdFX1dSSVRFT05MWSwgRDNERk1UX0lOREVYMTYsIEQzRFBPT0xfREVGQVVM
VCwgJmluZGV4QnVmZmVyLCAwKTsKKworICAgICAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0ICpkYXRhOworICAgICAgICAgICAg
cmVzdWx0ID0gaW5kZXhCdWZmZXItPkxvY2soMCwgMCwgKHZvaWQqKikmZGF0YSwgMCk7CisKKyAg
ICAgICAgICAgIGlmIChTVUNDRUVERUQocmVzdWx0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBkYXRhWzBdID0gbGFzdDsKKyAgICAgICAgICAgICAgICBkYXRhWzFdID0gZmlyc3Q7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaWYgKFNVQ0NFRURF
RChyZXN1bHQpKQorICAgIHsKKyAgICAgICAgaW5kZXhCdWZmZXItPlVubG9jaygpOworICAgICAg
ICBkZXZpY2UtPlNldEluZGljZXMoaW5kZXhCdWZmZXIpOworCisgICAgICAgIGRldmljZS0+RHJh
d0luZGV4ZWRQcmltaXRpdmUoRDNEUFRfTElORUxJU1QsIDAsIDAsIDIsIDAsIDEpOworCisgICAg
ICAgIGluZGV4QnVmZmVyLT5SZWxlYXNlKCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAg
ICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBhbiBpbmRleCBidWZmZXIgZm9yIGNsb3NpbmcgYSBs
aW5lIGxvb3AuIik7CisgICAgICAgIGVycm9yKEdMX09VVF9PRl9NRU1PUlkpOworICAgIH0KK30K
Kwordm9pZCBDb250ZXh0OjpkcmF3Q2xvc2luZ0xpbmUoR0xzaXplaSBjb3VudCwgR0xlbnVtIHR5
cGUsIGNvbnN0IHZvaWQgKmluZGljZXMpCit7CisgICAgdW5zaWduZWQgaW50IGZpcnN0ID0gMDsK
KyAgICB1bnNpZ25lZCBpbnQgbGFzdCA9IDA7CisKKyAgICBpZiAobVN0YXRlLmVsZW1lbnRBcnJh
eUJ1ZmZlci5nZXQoKSkKKyAgICB7CisgICAgICAgIEJ1ZmZlciAqaW5kZXhCdWZmZXIgPSBtU3Rh
dGUuZWxlbWVudEFycmF5QnVmZmVyLmdldCgpOworICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSBy
ZWludGVycHJldF9jYXN0PGludHB0cl90PihpbmRpY2VzKTsKKyAgICAgICAgaW5kaWNlcyA9IHN0
YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRleEJ1ZmZlci0+ZGF0YSgpKSArIG9mZnNldDsK
KyAgICB9CisKKyAgICBzd2l0Y2ggKHR5cGUpCisgICAgeworICAgICAgY2FzZSBHTF9VTlNJR05F
RF9CWVRFOgorICAgICAgICBmaXJzdCA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRp
Y2VzKVswXTsKKyAgICAgICAgbGFzdCA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWJ5dGUqPihpbmRp
Y2VzKVtjb3VudCAtIDFdOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgR0xfVU5TSUdORURf
U0hPUlQ6CisgICAgICAgIGZpcnN0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgR0x1c2hvcnQqPihpbmRp
Y2VzKVswXTsKKyAgICAgICAgbGFzdCA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdXNob3J0Kj4oaW5k
aWNlcylbY291bnQgLSAxXTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIEdMX1VOU0lHTkVE
X0lOVDoKKyAgICAgICAgZmlyc3QgPSBzdGF0aWNfY2FzdDxjb25zdCBHTHVpbnQqPihpbmRpY2Vz
KVswXTsKKyAgICAgICAgbGFzdCA9IHN0YXRpY19jYXN0PGNvbnN0IEdMdWludCo+KGluZGljZXMp
W2NvdW50IC0gMV07CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUo
KTsKKyAgICB9CisKKyAgICBkcmF3Q2xvc2luZ0xpbmUoZmlyc3QsIGxhc3QpOworfQorCiB2b2lk
IENvbnRleHQ6OnJlY29yZEludmFsaWRFbnVtKCkKIHsKICAgICBtSW52YWxpZEVudW0gPSB0cnVl
OwpAQCAtMjc1OSw2ICsyOTEyLDE2IEBACiAgICAgcmV0dXJuIG1TdXBwb3J0c1NoYWRlck1vZGVs
MzsKIH0KIAoraW50IENvbnRleHQ6OmdldE1heGltdW1WYXJ5aW5nVmVjdG9ycygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1TdXBwb3J0c1NoYWRlck1vZGVsMyA/IE1BWF9WQVJZSU5HX1ZFQ1RPUlNf
U00zIDogTUFYX1ZBUllJTkdfVkVDVE9SU19TTTI7Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhp
bXVtRnJhZ21lbnRVbmlmb3JtVmVjdG9ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdXBwb3J0
c1NoYWRlck1vZGVsMyA/IE1BWF9GUkFHTUVOVF9VTklGT1JNX1ZFQ1RPUlNfU00zIDogTUFYX0ZS
QUdNRU5UX1VOSUZPUk1fVkVDVE9SU19TTTI7Cit9CisKIGludCBDb250ZXh0OjpnZXRNYXhTdXBw
b3J0ZWRTYW1wbGVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbU1heFN1cHBvcnRlZFNhbXBsZXM7
CkBAIC0yNzg4LDExICsyOTUxLDgxIEBACiAgICAgcmV0dXJuIC0xOwogfQogCitib29sIENvbnRl
eHQ6OnN1cHBvcnRzRXZlbnRRdWVyaWVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRz
RXZlbnRRdWVyaWVzOworfQorCiBib29sIENvbnRleHQ6OnN1cHBvcnRzQ29tcHJlc3NlZFRleHR1
cmVzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbVN1cHBvcnRzQ29tcHJlc3NlZFRleHR1cmVzOwog
fQogCitib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXRUZXh0dXJlcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1TdXBwb3J0c0Zsb2F0VGV4dHVyZXM7Cit9CisKK2Jvb2wgQ29udGV4dDo6c3VwcG9y
dHNGbG9hdExpbmVhckZpbHRlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1TdXBwb3J0c0Zsb2F0
TGluZWFyRmlsdGVyOworfQorCitib29sIENvbnRleHQ6OnN1cHBvcnRzRmxvYXRSZW5kZXJhYmxl
VGV4dHVyZXMoKSBjb25zdAoreworICAgIHJldHVybiBtU3VwcG9ydHNGbG9hdFJlbmRlcmFibGVU
ZXh0dXJlczsKK30KKworYm9vbCBDb250ZXh0OjpzdXBwb3J0c0hhbGZGbG9hdFRleHR1cmVzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzSGFsZkZsb2F0VGV4dHVyZXM7Cit9CisKK2Jv
b2wgQ29udGV4dDo6c3VwcG9ydHNIYWxmRmxvYXRMaW5lYXJGaWx0ZXIoKSBjb25zdAoreworICAg
IHJldHVybiBtU3VwcG9ydHNIYWxmRmxvYXRMaW5lYXJGaWx0ZXI7Cit9CisKK2Jvb2wgQ29udGV4
dDo6c3VwcG9ydHNIYWxmRmxvYXRSZW5kZXJhYmxlVGV4dHVyZXMoKSBjb25zdAoreworICAgIHJl
dHVybiBtU3VwcG9ydHNIYWxmRmxvYXRSZW5kZXJhYmxlVGV4dHVyZXM7Cit9CisKK2ludCBDb250
ZXh0OjpnZXRNYXhpbXVtUmVuZGVyYnVmZmVyRGltZW5zaW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbU1heFJlbmRlcmJ1ZmZlckRpbWVuc2lvbjsKK30KKworaW50IENvbnRleHQ6OmdldE1heGlt
dW1UZXh0dXJlRGltZW5zaW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbU1heFRleHR1cmVEaW1l
bnNpb247Cit9CisKK2ludCBDb250ZXh0OjpnZXRNYXhpbXVtQ3ViZVRleHR1cmVEaW1lbnNpb24o
KSBjb25zdAoreworICAgIHJldHVybiBtTWF4Q3ViZVRleHR1cmVEaW1lbnNpb247Cit9CisKK2lu
dCBDb250ZXh0OjpnZXRNYXhpbXVtVGV4dHVyZUxldmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bU1heFRleHR1cmVMZXZlbDsKK30KKworYm9vbCBDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRl
eHR1cmVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzTHVtaW5hbmNlVGV4dHVyZXM7
Cit9CisKK2Jvb2wgQ29udGV4dDo6c3VwcG9ydHNMdW1pbmFuY2VBbHBoYVRleHR1cmVzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbVN1cHBvcnRzTHVtaW5hbmNlQWxwaGFUZXh0dXJlczsKK30KKwor
Ym9vbCBDb250ZXh0OjpzdXBwb3J0czMyYml0SW5kaWNlcygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1TdXBwb3J0czMyYml0SW5kaWNlczsKK30KKwogdm9pZCBDb250ZXh0OjpkZXRhY2hCdWZmZXIo
R0x1aW50IGJ1ZmZlcikKIHsKICAgICAvLyBbT3BlbkdMIEVTIDIuMC4yNF0gc2VjdGlvbiAyLjkg
cGFnZSAyMjoKQEAgLTI5MDMsNyArMzEzNiw3IEBACiAKIFRleHR1cmUgKkNvbnRleHQ6OmdldElu
Y29tcGxldGVUZXh0dXJlKFNhbXBsZXJUeXBlIHR5cGUpCiB7Ci0gICAgVGV4dHVyZSAqdCA9IG1J
bmNvbXBsZXRlVGV4dHVyZXNbdHlwZV07CisgICAgVGV4dHVyZSAqdCA9IG1JbmNvbXBsZXRlVGV4
dHVyZXNbdHlwZV0uZ2V0KCk7CiAKICAgICBpZiAodCA9PSBOVUxMKQogICAgIHsKQEAgLTI5Mzks
NyArMzE3Miw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIG1J
bmNvbXBsZXRlVGV4dHVyZXNbdHlwZV0gPSB0OworICAgICAgICBtSW5jb21wbGV0ZVRleHR1cmVz
W3R5cGVdLnNldCh0KTsKICAgICB9CiAKICAgICByZXR1cm4gdDsKQEAgLTI5NzgsNyArMzIxMSw3
IEBACiAgICAgbVN0YXRlLnZlcnRleEF0dHJpYnV0ZVtpbmRleF0ubUN1cnJlbnRWYWx1ZVsyXSA9
IHZhbHVlc1syXTsKICAgICBtU3RhdGUudmVydGV4QXR0cmlidXRlW2luZGV4XS5tQ3VycmVudFZh
bHVlWzNdID0gdmFsdWVzWzNdOwogCi0gICAgbVZlcnRleERhdGFNYW5hZ2VyLT5kaXJ0eUN1cnJl
bnRWYWx1ZXMoKTsKKyAgICBtVmVydGV4RGF0YU1hbmFnZXItPmRpcnR5Q3VycmVudFZhbHVlKGlu
ZGV4KTsKIH0KIAogdm9pZCBDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5nKCkKQEAgLTI5ODgs
MTggKzMyMjEsNDQgQEAKICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9FWFRfcmVhZF9mb3Jt
YXRfYmdyYSAiOwogICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVy
X2JsaXQgIjsKICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJHTF9PRVNfcmdiOF9yZ2JhOCAiOwor
ICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyAiOwog
CisgICAgaWYgKHN1cHBvcnRzRXZlbnRRdWVyaWVzKCkpCisgICAgeworICAgICAgICBtRXh0ZW5z
aW9uU3RyaW5nICs9ICJHTF9OVl9mZW5jZSAiOworICAgIH0KKwogICAgIGlmIChzdXBwb3J0c0Nv
bXByZXNzZWRUZXh0dXJlcygpKQogICAgIHsKICAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAi
R0xfRVhUX3RleHR1cmVfY29tcHJlc3Npb25fZHh0MSAiOwogICAgIH0KIAorICAgIGlmIChzdXBw
b3J0c0Zsb2F0VGV4dHVyZXMoKSkKKyAgICB7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0g
IkdMX09FU190ZXh0dXJlX2Zsb2F0ICI7CisgICAgfQorCisgICAgaWYgKHN1cHBvcnRzSGFsZkZs
b2F0VGV4dHVyZXMoKSkKKyAgICB7CisgICAgICAgIG1FeHRlbnNpb25TdHJpbmcgKz0gIkdMX09F
U190ZXh0dXJlX2hhbGZfZmxvYXQgIjsKKyAgICB9CisKKyAgICBpZiAoc3VwcG9ydHNGbG9hdExp
bmVhckZpbHRlcigpKQorICAgIHsKKyAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xfT0VT
X3RleHR1cmVfZmxvYXRfbGluZWFyICI7CisgICAgfQorCisgICAgaWYgKHN1cHBvcnRzSGFsZkZs
b2F0TGluZWFyRmlsdGVyKCkpCisgICAgeworICAgICAgICBtRXh0ZW5zaW9uU3RyaW5nICs9ICJH
TF9PRVNfdGV4dHVyZV9oYWxmX2Zsb2F0X2xpbmVhciAiOworICAgIH0KKwogICAgIGlmIChnZXRN
YXhTdXBwb3J0ZWRTYW1wbGVzKCkgIT0gMCkKICAgICB7CiAgICAgICAgIG1FeHRlbnNpb25TdHJp
bmcgKz0gIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX211bHRpc2FtcGxlICI7CiAgICAgfQogCi0gICAg
aWYgKG1CdWZmZXJCYWNrRW5kLT5zdXBwb3J0SW50SW5kaWNlcygpKQorICAgIGlmIChzdXBwb3J0
czMyYml0SW5kaWNlcygpKQogICAgIHsKICAgICAgICAgbUV4dGVuc2lvblN0cmluZyArPSAiR0xf
T0VTX2VsZW1lbnRfaW5kZXhfdWludCAiOwogICAgIH0KQEAgLTMxNzgsMTAgKzM0MzcsMTAgQEAK
ICAgICB9CiAKICAgICBib29sIHBhcnRpYWxCdWZmZXJDb3B5ID0gZmFsc2U7Ci0gICAgaWYgKHNv
dXJjZVRyaW1tZWRSZWN0LmJvdHRvbSAtIHNvdXJjZVRyaW1tZWRSZWN0LnRvcCA8IHJlYWRGcmFt
ZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkgfHwKLSAgICAgICAgc291cmNl
VHJpbW1lZFJlY3QucmlnaHQgLSBzb3VyY2VUcmltbWVkUmVjdC5sZWZ0IDwgcmVhZEZyYW1lYnVm
ZmVyLT5nZXRDb2xvcmJ1ZmZlcigpLT5nZXRXaWR0aCgpIHx8IAotICAgICAgICBkZXN0VHJpbW1l
ZFJlY3QuYm90dG9tIC0gZGVzdFRyaW1tZWRSZWN0LnRvcCA8IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0
Q29sb3JidWZmZXIoKS0+Z2V0SGVpZ2h0KCkgfHwKLSAgICAgICAgZGVzdFRyaW1tZWRSZWN0LnJp
Z2h0IC0gZGVzdFRyaW1tZWRSZWN0LmxlZnQgPCBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVm
ZmVyKCktPmdldFdpZHRoKCkgfHwKKyAgICBpZiAoc291cmNlVHJpbW1lZFJlY3QuYm90dG9tIC0g
c291cmNlVHJpbW1lZFJlY3QudG9wIDwgcmVhZEJ1ZmZlckhlaWdodCB8fAorICAgICAgICBzb3Vy
Y2VUcmltbWVkUmVjdC5yaWdodCAtIHNvdXJjZVRyaW1tZWRSZWN0LmxlZnQgPCByZWFkQnVmZmVy
V2lkdGggfHwgCisgICAgICAgIGRlc3RUcmltbWVkUmVjdC5ib3R0b20gLSBkZXN0VHJpbW1lZFJl
Y3QudG9wIDwgZHJhd0J1ZmZlckhlaWdodCB8fAorICAgICAgICBkZXN0VHJpbW1lZFJlY3Qucmln
aHQgLSBkZXN0VHJpbW1lZFJlY3QubGVmdCA8IGRyYXdCdWZmZXJXaWR0aCB8fAogICAgICAgICBz
b3VyY2VUcmltbWVkUmVjdC50b3AgIT0gMCB8fCBkZXN0VHJpbW1lZFJlY3QudG9wICE9IDAgfHwg
c291cmNlVHJpbW1lZFJlY3QubGVmdCAhPSAwIHx8IGRlc3RUcmltbWVkUmVjdC5sZWZ0ICE9IDAp
CiAgICAgewogICAgICAgICBwYXJ0aWFsQnVmZmVyQ29weSA9IHRydWU7CkBAIC0zMTg5LDcgKzM0
NDgsMTEgQEAKIAogICAgIGlmIChtYXNrICYgR0xfQ09MT1JfQlVGRkVSX0JJVCkKICAgICB7Ci0g
ICAgICAgIGlmIChyZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlwZSgpICE9IGRyYXdG
cmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXJUeXBlKCkgfHwKKyAgICAgICAgY29uc3QgYm9vbCB2
YWxpZFJlYWRUeXBlID0gcmVhZEZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBH
TF9URVhUVVJFXzJEIHx8CisgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVm
ZmVyVHlwZSgpID09IEdMX1JFTkRFUkJVRkZFUjsKKyAgICAgICAgY29uc3QgYm9vbCB2YWxpZERy
YXdUeXBlID0gZHJhd0ZyYW1lYnVmZmVyLT5nZXRDb2xvcmJ1ZmZlclR5cGUoKSA9PSBHTF9URVhU
VVJFXzJEIHx8CisgICAgICAgICAgICBkcmF3RnJhbWVidWZmZXItPmdldENvbG9yYnVmZmVyVHlw
ZSgpID09IEdMX1JFTkRFUkJVRkZFUjsKKyAgICAgICAgaWYgKCF2YWxpZFJlYWRUeXBlIHx8ICF2
YWxpZERyYXdUeXBlIHx8CiAgICAgICAgICAgICByZWFkRnJhbWVidWZmZXItPmdldENvbG9yYnVm
ZmVyKCktPmdldEQzREZvcm1hdCgpICE9IGRyYXdGcmFtZWJ1ZmZlci0+Z2V0Q29sb3JidWZmZXIo
KS0+Z2V0RDNERm9ybWF0KCkpCiAgICAgICAgIHsKICAgICAgICAgICAgIEVSUigiQ29sb3IgYnVm
ZmVyIGZvcm1hdCBjb252ZXJzaW9uIGluIEJsaXRGcmFtZWJ1ZmZlckFOR0xFIG5vdCBzdXBwb3J0
ZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvbiIpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2xpYkdMRVN2Mi9GZW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9saWJHTEVTdjIvRmVuY2UuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0MyBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0
IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29k
ZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3Vu
ZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gRmVuY2UuaDogRGVmaW5lcyB0aGUgZ2w6
OkZlbmNlIGNsYXNzLCB3aGljaCBzdXBwb3J0cyB0aGUgR0xfTlZfZmVuY2UgZXh0ZW5zaW9uLgor
CisjaWZuZGVmIExJQkdMRVNWMl9GRU5DRV9IXworI2RlZmluZSBMSUJHTEVTVjJfRkVOQ0VfSF8K
KworI2RlZmluZSBHTF9BUElDQUxMCisjaW5jbHVkZSA8R0xFUzIvZ2wyLmg+CisjaW5jbHVkZSA8
ZDNkOS5oPgorCisjaW5jbHVkZSAiY29tbW9uL2FuZ2xldXRpbHMuaCIKKworbmFtZXNwYWNlIGds
Cit7CisKK2NsYXNzIEZlbmNlCit7CisgIHB1YmxpYzoKKyAgICBGZW5jZSgpOworICAgIHZpcnR1
YWwgfkZlbmNlKCk7CisKKyAgICBHTGJvb2xlYW4gaXNGZW5jZSgpOworICAgIHZvaWQgc2V0RmVu
Y2UoR0xlbnVtIGNvbmRpdGlvbik7CisgICAgR0xib29sZWFuIHRlc3RGZW5jZSgpOworICAgIHZv
aWQgZmluaXNoRmVuY2UoKTsKKyAgICB2b2lkIGdldEZlbmNlaXYoR0xlbnVtIHBuYW1lLCBHTGlu
dCAqcGFyYW1zKTsKKworICBwcml2YXRlOgorICAgIERJU0FMTE9XX0NPUFlfQU5EX0FTU0lHTihG
ZW5jZSk7CisKKyAgICBJRGlyZWN0M0RRdWVyeTkqIG1RdWVyeTsKKyAgICBHTGVudW0gbUNvbmRp
dGlvbjsKKyAgICBHTGJvb2xlYW4gbVN0YXR1czsKK307CisKK30KKworI2VuZGlmICAgLy8gTElC
R0xFU1YyX0ZFTkNFX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvZ2xzbGFuZ19sZXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9nbHNsYW5nX2xleC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDMxODYgQEAKKyNsaW5lIDE3ICJjb21waWxlci9nbHNsYW5nLmwiCisvLworLy8g
Q29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJT
RC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxl
LgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX2dsc2xh
bmdfbGV4ZXIuc2guIERPIE5PVCBFRElUIQorCisKKworI2xpbmUgMTMgImNvbXBpbGVyL2dsc2xh
bmdfbGV4LmNwcCIKKworI2RlZmluZSAgWVlfSU5UX0FMSUdORUQgc2hvcnQgaW50CisKKy8qIEEg
bGV4aWNhbCBzY2FubmVyIGdlbmVyYXRlZCBieSBmbGV4ICovCisKKyNkZWZpbmUgRkxFWF9TQ0FO
TkVSCisjZGVmaW5lIFlZX0ZMRVhfTUFKT1JfVkVSU0lPTiAyCisjZGVmaW5lIFlZX0ZMRVhfTUlO
T1JfVkVSU0lPTiA1CisjZGVmaW5lIFlZX0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiAzNQorI2lmIFlZ
X0ZMRVhfU1VCTUlOT1JfVkVSU0lPTiA+IDAKKyNkZWZpbmUgRkxFWF9CRVRBCisjZW5kaWYKKwor
LyogRmlyc3QsIHdlIGRlYWwgd2l0aCAgcGxhdGZvcm0tc3BlY2lmaWMgb3IgY29tcGlsZXItc3Bl
Y2lmaWMgaXNzdWVzLiAqLworCisvKiBiZWdpbiBzdGFuZGFyZCBDIGhlYWRlcnMuICovCisjaW5j
bHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgor
I2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKiBlbmQgc3RhbmRhcmQgQyBoZWFkZXJzLiAqLworCisv
KiBmbGV4IGludGVnZXIgdHlwZSBkZWZpbml0aW9ucyAqLworCisjaWZuZGVmIEZMRVhJTlRfSAor
I2RlZmluZSBGTEVYSU5UX0gKKworLyogQzk5IHN5c3RlbXMgaGF2ZSA8aW50dHlwZXMuaD4uIE5v
bi1DOTkgc3lzdGVtcyBtYXkgb3IgbWF5IG5vdC4gKi8KKworI2lmIGRlZmluZWQgKF9fU1REQ19W
RVJTSU9OX18pICYmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorCisvKiBDOTkgc2F5cyB0
byBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyBiZWZvcmUgaW5jbHVkaW5nIHN0ZGludC5oLAor
ICogaWYgeW91IHdhbnQgdGhlIGxpbWl0IChtYXgvbWluKSBtYWNyb3MgZm9yIGludCB0eXBlcy4g
CisgKi8KKyNpZm5kZWYgX19TVERDX0xJTUlUX01BQ1JPUworI2RlZmluZSBfX1NURENfTElNSVRf
TUFDUk9TIDEKKyNlbmRpZgorCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KK3R5cGVkZWYgaW50OF90
IGZsZXhfaW50OF90OwordHlwZWRlZiB1aW50OF90IGZsZXhfdWludDhfdDsKK3R5cGVkZWYgaW50
MTZfdCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIHVpbnQxNl90IGZsZXhfdWludDE2X3Q7Cit0eXBl
ZGVmIGludDMyX3QgZmxleF9pbnQzMl90OwordHlwZWRlZiB1aW50MzJfdCBmbGV4X3VpbnQzMl90
OworI2Vsc2UKK3R5cGVkZWYgc2lnbmVkIGNoYXIgZmxleF9pbnQ4X3Q7Cit0eXBlZGVmIHNob3J0
IGludCBmbGV4X2ludDE2X3Q7Cit0eXBlZGVmIGludCBmbGV4X2ludDMyX3Q7Cit0eXBlZGVmIHVu
c2lnbmVkIGNoYXIgZmxleF91aW50OF90OyAKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IGZs
ZXhfdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBmbGV4X3VpbnQzMl90OworI2VuZGlm
IC8qICEgQzk5ICovCisKKy8qIExpbWl0cyBvZiBpbnRlZ3JhbCB0eXBlcy4gKi8KKyNpZm5kZWYg
SU5UOF9NSU4KKyNkZWZpbmUgSU5UOF9NSU4gICAgICAgICAgICAgICAoLTEyOCkKKyNlbmRpZgor
I2lmbmRlZiBJTlQxNl9NSU4KKyNkZWZpbmUgSU5UMTZfTUlOICAgICAgICAgICAgICAoLTMyNzY3
LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UMzJfTUlOCisjZGVmaW5lIElOVDMyX01JTiAgICAgICAg
ICAgICAgKC0yMTQ3NDgzNjQ3LTEpCisjZW5kaWYKKyNpZm5kZWYgSU5UOF9NQVgKKyNkZWZpbmUg
SU5UOF9NQVggICAgICAgICAgICAgICAoMTI3KQorI2VuZGlmCisjaWZuZGVmIElOVDE2X01BWAor
I2RlZmluZSBJTlQxNl9NQVggICAgICAgICAgICAgICgzMjc2NykKKyNlbmRpZgorI2lmbmRlZiBJ
TlQzMl9NQVgKKyNkZWZpbmUgSU5UMzJfTUFYICAgICAgICAgICAgICAoMjE0NzQ4MzY0NykKKyNl
bmRpZgorI2lmbmRlZiBVSU5UOF9NQVgKKyNkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAgICAo
MjU1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMTZfTUFYCisjZGVmaW5lIFVJTlQxNl9NQVggICAg
ICAgICAgICAgKDY1NTM1VSkKKyNlbmRpZgorI2lmbmRlZiBVSU5UMzJfTUFYCisjZGVmaW5lIFVJ
TlQzMl9NQVggICAgICAgICAgICAgKDQyOTQ5NjcyOTVVKQorI2VuZGlmCisKKyNlbmRpZiAvKiAh
IEZMRVhJTlRfSCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKKworLyogVGhlICJjb25zdCIgc3Rv
cmFnZS1jbGFzcy1tb2RpZmllciBpcyB2YWxpZC4gKi8KKyNkZWZpbmUgWVlfVVNFX0NPTlNUCisK
KyNlbHNlCS8qICEgX19jcGx1c3BsdXMgKi8KKworLyogQzk5IHJlcXVpcmVzIF9fU1REQ19fIHRv
IGJlIGRlZmluZWQgYXMgMS4gKi8KKyNpZiBkZWZpbmVkIChfX1NURENfXykKKworI2RlZmluZSBZ
WV9VU0VfQ09OU1QKKworI2VuZGlmCS8qIGRlZmluZWQgKF9fU1REQ19fKSAqLworI2VuZGlmCS8q
ICEgX19jcGx1c3BsdXMgKi8KKworI2lmZGVmIFlZX1VTRV9DT05TVAorI2RlZmluZSB5eWNvbnN0
IGNvbnN0CisjZWxzZQorI2RlZmluZSB5eWNvbnN0CisjZW5kaWYKKworLyogUmV0dXJuZWQgdXBv
biBlbmQtb2YtZmlsZS4gKi8KKyNkZWZpbmUgWVlfTlVMTCAwCisKKy8qIFByb21vdGVzIGEgcG9z
c2libHkgbmVnYXRpdmUsIHBvc3NpYmx5IHNpZ25lZCBjaGFyIHRvIGFuIHVuc2lnbmVkCisgKiBp
bnRlZ2VyIGZvciB1c2UgYXMgYW4gYXJyYXkgaW5kZXguICBJZiB0aGUgc2lnbmVkIGNoYXIgaXMg
bmVnYXRpdmUsCisgKiB3ZSB3YW50IHRvIGluc3RlYWQgdHJlYXQgaXQgYXMgYW4gOC1iaXQgdW5z
aWduZWQgY2hhciwgaGVuY2UgdGhlCisgKiBkb3VibGUgY2FzdC4KKyAqLworI2RlZmluZSBZWV9T
Q19UT19VSShjKSAoKHVuc2lnbmVkIGludCkgKHVuc2lnbmVkIGNoYXIpIGMpCisKKy8qIEFuIG9w
YXF1ZSBwb2ludGVyLiAqLworI2lmbmRlZiBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAorI2RlZmlu
ZSBZWV9UWVBFREVGX1lZX1NDQU5ORVJfVAordHlwZWRlZiB2b2lkKiB5eXNjYW5fdDsKKyNlbmRp
ZgorCisvKiBGb3IgY29udmVuaWVuY2UsIHRoZXNlIHZhcnMgKHBsdXMgdGhlIGJpc29uIHZhcnMg
ZmFyIGJlbG93KQorICAgYXJlIG1hY3JvcyBpbiB0aGUgcmVlbnRyYW50IHNjYW5uZXIuICovCisj
ZGVmaW5lIHl5aW4geXlnLT55eWluX3IKKyNkZWZpbmUgeXlvdXQgeXlnLT55eW91dF9yCisjZGVm
aW5lIHl5ZXh0cmEgeXlnLT55eWV4dHJhX3IKKyNkZWZpbmUgeXlsZW5nIHl5Zy0+eXlsZW5nX3IK
KyNkZWZpbmUgeXl0ZXh0IHl5Zy0+eXl0ZXh0X3IKKyNkZWZpbmUgeXlsaW5lbm8gKFlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnNfbGluZW5vKQorI2RlZmluZSB5eWNvbHVtbiAoWVlfQ1VS
UkVOVF9CVUZGRVJfTFZBTFVFLT55eV9ic19jb2x1bW4pCisjZGVmaW5lIHl5X2ZsZXhfZGVidWcg
eXlnLT55eV9mbGV4X2RlYnVnX3IKKworLyogRW50ZXIgYSBzdGFydCBjb25kaXRpb24uICBUaGlz
IG1hY3JvIHJlYWxseSBvdWdodCB0byB0YWtlIGEgcGFyYW1ldGVyLAorICogYnV0IHdlIGRvIGl0
IHRoZSBkaXNndXN0aW5nIGNydWZ0eSB3YXkgZm9yY2VkIG9uIHVzIGJ5IHRoZSAoKS1sZXNzCisg
KiBkZWZpbml0aW9uIG9mIEJFR0lOLgorICovCisjZGVmaW5lIEJFR0lOIHl5Zy0+eXlfc3RhcnQg
PSAxICsgMiAqCisKKy8qIFRyYW5zbGF0ZSB0aGUgY3VycmVudCBzdGFydCBzdGF0ZSBpbnRvIGEg
dmFsdWUgdGhhdCBjYW4gYmUgbGF0ZXIgaGFuZGVkCisgKiB0byBCRUdJTiB0byByZXR1cm4gdG8g
dGhlIHN0YXRlLiAgVGhlIFlZU1RBVEUgYWxpYXMgaXMgZm9yIGxleAorICogY29tcGF0aWJpbGl0
eS4KKyAqLworI2RlZmluZSBZWV9TVEFSVCAoKHl5Zy0+eXlfc3RhcnQgLSAxKSAvIDIpCisjZGVm
aW5lIFlZU1RBVEUgWVlfU1RBUlQKKworLyogQWN0aW9uIG51bWJlciBmb3IgRU9GIHJ1bGUgb2Yg
YSBnaXZlbiBzdGFydCBzdGF0ZS4gKi8KKyNkZWZpbmUgWVlfU1RBVEVfRU9GKHN0YXRlKSAoWVlf
RU5EX09GX0JVRkZFUiArIHN0YXRlICsgMSkKKworLyogU3BlY2lhbCBhY3Rpb24gbWVhbmluZyAi
c3RhcnQgcHJvY2Vzc2luZyBhIG5ldyBmaWxlIi4gKi8KKyNkZWZpbmUgWVlfTkVXX0ZJTEUgeXly
ZXN0YXJ0KHl5aW4gLHl5c2Nhbm5lciApCisKKyNkZWZpbmUgWVlfRU5EX09GX0JVRkZFUl9DSEFS
IDAKKworLyogU2l6ZSBvZiBkZWZhdWx0IGlucHV0IGJ1ZmZlci4gKi8KKyNpZm5kZWYgWVlfQlVG
X1NJWkUKKyNkZWZpbmUgWVlfQlVGX1NJWkUgMTYzODQKKyNlbmRpZgorCisvKiBUaGUgc3RhdGUg
YnVmIG11c3QgYmUgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgb25lIHN0YXRlIHBlciBjaGFyYWN0ZXIg
aW4gdGhlIG1haW4gYnVmZmVyLgorICovCisjZGVmaW5lIFlZX1NUQVRFX0JVRl9TSVpFICAgKChZ
WV9CVUZfU0laRSArIDIpICogc2l6ZW9mKHl5X3N0YXRlX3R5cGUpKQorCisjaWZuZGVmIFlZX1RZ
UEVERUZfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1RZUEVERUZfWVlfQlVGRkVSX1NUQVRF
Cit0eXBlZGVmIHN0cnVjdCB5eV9idWZmZXJfc3RhdGUgKllZX0JVRkZFUl9TVEFURTsKKyNlbmRp
ZgorCisjZGVmaW5lIEVPQl9BQ1RfQ09OVElOVUVfU0NBTiAwCisjZGVmaW5lIEVPQl9BQ1RfRU5E
X09GX0ZJTEUgMQorI2RlZmluZSBFT0JfQUNUX0xBU1RfTUFUQ0ggMgorCisgICAgLyogTm90ZTog
V2Ugc3BlY2lmaWNhbGx5IG9taXQgdGhlIHRlc3QgZm9yIHl5X3J1bGVfY2FuX21hdGNoX2VvbCBi
ZWNhdXNlIGl0IHJlcXVpcmVzCisgICAgICogICAgICAgYWNjZXNzIHRvIHRoZSBsb2NhbCB2YXJp
YWJsZSB5eV9hY3QuIFNpbmNlIHl5bGVzcygpIGlzIGEgbWFjcm8sIGl0IHdvdWxkIGJyZWFrCisg
ICAgICogICAgICAgZXhpc3Rpbmcgc2Nhbm5lcnMgdGhhdCBjYWxsIHl5bGVzcygpIGZyb20gT1VU
U0lERSB5eWxleC4gCisgICAgICogICAgICAgT25lIG9idmlvdXMgc29sdXRpb24gaXQgdG8gbWFr
ZSB5eV9hY3QgYSBnbG9iYWwuIEkgdHJpZWQgdGhhdCwgYW5kIHNhdworICAgICAqICAgICAgIGEg
NSUgcGVyZm9ybWFuY2UgaGl0IGluIGEgbm9uLXl5bGluZW5vIHNjYW5uZXIsIGJlY2F1c2UgeXlf
YWN0IGlzCisgICAgICogICAgICAgbm9ybWFsbHkgZGVjbGFyZWQgYXMgYSByZWdpc3RlciB2YXJp
YWJsZS0tIHNvIGl0IGlzIG5vdCB3b3J0aCBpdC4KKyAgICAgKi8KKyAgICAjZGVmaW5lICBZWV9M
RVNTX0xJTkVOTyhuKSBcCisgICAgICAgICAgICBkbyB7IFwKKyAgICAgICAgICAgICAgICBpbnQg
eXlsO1wKKyAgICAgICAgICAgICAgICBmb3IgKCB5eWwgPSBuOyB5eWwgPCB5eWxlbmc7ICsreXls
IClcCisgICAgICAgICAgICAgICAgICAgIGlmICggeXl0ZXh0W3l5bF0gPT0gJ1xuJyApXAorICAg
ICAgICAgICAgICAgICAgICAgICAgLS15eWxpbmVubztcCisgICAgICAgICAgICB9d2hpbGUoMCkK
KyAgICAKKy8qIFJldHVybiBhbGwgYnV0IHRoZSBmaXJzdCAibiIgbWF0Y2hlZCBjaGFyYWN0ZXJz
IGJhY2sgdG8gdGhlIGlucHV0IHN0cmVhbS4gKi8KKyNkZWZpbmUgeXlsZXNzKG4pIFwKKwlkbyBc
CisJCXsgXAorCQkvKiBVbmRvIGVmZmVjdHMgb2Ygc2V0dGluZyB1cCB5eXRleHQuICovIFwKKyAg
ICAgICAgaW50IHl5bGVzc19tYWNyb19hcmcgPSAobik7IFwKKyAgICAgICAgWVlfTEVTU19MSU5F
Tk8oeXlsZXNzX21hY3JvX2FyZyk7XAorCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsgXAor
CQlZWV9SRVNUT1JFX1lZX01PUkVfT0ZGU0VUIFwKKwkJeXlnLT55eV9jX2J1Zl9wID0geXlfY3Ag
PSB5eV9icCArIHl5bGVzc19tYWNyb19hcmcgLSBZWV9NT1JFX0FESjsgXAorCQlZWV9ET19CRUZP
UkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0ZXh0IGFnYWluICovIFwKKwkJfSBcCisJd2hpbGUgKCAw
ICkKKworI2RlZmluZSB1bnB1dChjKSB5eXVucHV0KCBjLCB5eWctPnl5dGV4dF9wdHIgLCB5eXNj
YW5uZXIgKQorCisjaWZuZGVmIFlZX1RZUEVERUZfWVlfU0laRV9UCisjZGVmaW5lIFlZX1RZUEVE
RUZfWVlfU0laRV9UCit0eXBlZGVmIHNpemVfdCB5eV9zaXplX3Q7CisjZW5kaWYKKworI2lmbmRl
ZiBZWV9TVFJVQ1RfWVlfQlVGRkVSX1NUQVRFCisjZGVmaW5lIFlZX1NUUlVDVF9ZWV9CVUZGRVJf
U1RBVEUKK3N0cnVjdCB5eV9idWZmZXJfc3RhdGUKKwl7CisJRklMRSAqeXlfaW5wdXRfZmlsZTsK
KworCWNoYXIgKnl5X2NoX2J1ZjsJCS8qIGlucHV0IGJ1ZmZlciAqLworCWNoYXIgKnl5X2J1Zl9w
b3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGluIGlucHV0IGJ1ZmZlciAqLworCisJLyogU2l6ZSBv
ZiBpbnB1dCBidWZmZXIgaW4gYnl0ZXMsIG5vdCBpbmNsdWRpbmcgcm9vbSBmb3IgRU9CCisJICog
Y2hhcmFjdGVycy4KKwkgKi8KKwl5eV9zaXplX3QgeXlfYnVmX3NpemU7CisKKwkvKiBOdW1iZXIg
b2YgY2hhcmFjdGVycyByZWFkIGludG8geXlfY2hfYnVmLCBub3QgaW5jbHVkaW5nIEVPQgorCSAq
IGNoYXJhY3RlcnMuCisJICovCisJaW50IHl5X25fY2hhcnM7CisKKwkvKiBXaGV0aGVyIHdlICJv
d24iIHRoZSBidWZmZXIgLSBpLmUuLCB3ZSBrbm93IHdlIGNyZWF0ZWQgaXQsCisJICogYW5kIGNh
biByZWFsbG9jKCkgaXQgdG8gZ3JvdyBpdCwgYW5kIHNob3VsZCBmcmVlKCkgaXQgdG8KKwkgKiBk
ZWxldGUgaXQuCisJICovCisJaW50IHl5X2lzX291cl9idWZmZXI7CisKKwkvKiBXaGV0aGVyIHRo
aXMgaXMgYW4gImludGVyYWN0aXZlIiBpbnB1dCBzb3VyY2U7IGlmIHNvLCBhbmQKKwkgKiBpZiB3
ZSdyZSB1c2luZyBzdGRpbyBmb3IgaW5wdXQsIHRoZW4gd2Ugd2FudCB0byB1c2UgZ2V0YygpCisJ
ICogaW5zdGVhZCBvZiBmcmVhZCgpLCB0byBtYWtlIHN1cmUgd2Ugc3RvcCBmZXRjaGluZyBpbnB1
dCBhZnRlcgorCSAqIGVhY2ggbmV3bGluZS4KKwkgKi8KKwlpbnQgeXlfaXNfaW50ZXJhY3RpdmU7
CisKKwkvKiBXaGV0aGVyIHdlJ3JlIGNvbnNpZGVyZWQgdG8gYmUgYXQgdGhlIGJlZ2lubmluZyBv
ZiBhIGxpbmUuCisJICogSWYgc28sICdeJyBydWxlcyB3aWxsIGJlIGFjdGl2ZSBvbiB0aGUgbmV4
dCBtYXRjaCwgb3RoZXJ3aXNlCisJICogbm90LgorCSAqLworCWludCB5eV9hdF9ib2w7CisKKyAg
ICBpbnQgeXlfYnNfbGluZW5vOyAvKio8IFRoZSBsaW5lIGNvdW50LiAqLworICAgIGludCB5eV9i
c19jb2x1bW47IC8qKjwgVGhlIGNvbHVtbiBjb3VudC4gKi8KKyAgICAKKwkvKiBXaGV0aGVyIHRv
IHRyeSB0byBmaWxsIHRoZSBpbnB1dCBidWZmZXIgd2hlbiB3ZSByZWFjaCB0aGUKKwkgKiBlbmQg
b2YgaXQuCisJICovCisJaW50IHl5X2ZpbGxfYnVmZmVyOworCisJaW50IHl5X2J1ZmZlcl9zdGF0
dXM7CisKKyNkZWZpbmUgWVlfQlVGRkVSX05FVyAwCisjZGVmaW5lIFlZX0JVRkZFUl9OT1JNQUwg
MQorCS8qIFdoZW4gYW4gRU9GJ3MgYmVlbiBzZWVuIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgdGV4
dCB0byBwcm9jZXNzCisJICogdGhlbiB3ZSBtYXJrIHRoZSBidWZmZXIgYXMgWVlfRU9GX1BFTkRJ
TkcsIHRvIGluZGljYXRlIHRoYXQgd2UKKwkgKiBzaG91bGRuJ3QgdHJ5IHJlYWRpbmcgZnJvbSB0
aGUgaW5wdXQgc291cmNlIGFueSBtb3JlLiAgV2UgbWlnaHQKKwkgKiBzdGlsbCBoYXZlIGEgYnVu
Y2ggb2YgdG9rZW5zIHRvIG1hdGNoLCB0aG91Z2gsIGJlY2F1c2Ugb2YKKwkgKiBwb3NzaWJsZSBi
YWNraW5nLXVwLgorCSAqCisJICogV2hlbiB3ZSBhY3R1YWxseSBzZWUgdGhlIEVPRiwgd2UgY2hh
bmdlIHRoZSBzdGF0dXMgdG8gIm5ldyIKKwkgKiAodmlhIHl5cmVzdGFydCgpKSwgc28gdGhhdCB0
aGUgdXNlciBjYW4gY29udGludWUgc2Nhbm5pbmcgYnkKKwkgKiBqdXN0IHBvaW50aW5nIHl5aW4g
YXQgYSBuZXcgaW5wdXQgZmlsZS4KKwkgKi8KKyNkZWZpbmUgWVlfQlVGRkVSX0VPRl9QRU5ESU5H
IDIKKworCX07CisjZW5kaWYgLyogIVlZX1NUUlVDVF9ZWV9CVUZGRVJfU1RBVEUgKi8KKworLyog
V2UgcHJvdmlkZSBtYWNyb3MgZm9yIGFjY2Vzc2luZyBidWZmZXIgc3RhdGVzIGluIGNhc2UgaW4g
dGhlCisgKiBmdXR1cmUgd2Ugd2FudCB0byBwdXQgdGhlIGJ1ZmZlciBzdGF0ZXMgaW4gYSBtb3Jl
IGdlbmVyYWwKKyAqICJzY2FubmVyIHN0YXRlIi4KKyAqCisgKiBSZXR1cm5zIHRoZSB0b3Agb2Yg
dGhlIHN0YWNrLCBvciBOVUxMLgorICovCisjZGVmaW5lIFlZX0NVUlJFTlRfQlVGRkVSICggeXln
LT55eV9idWZmZXJfc3RhY2sgXAorICAgICAgICAgICAgICAgICAgICAgICAgICA/IHl5Zy0+eXlf
YnVmZmVyX3N0YWNrW3l5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcF0gXAorICAgICAgICAgICAgICAg
ICAgICAgICAgICA6IE5VTEwpCisKKy8qIFNhbWUgYXMgcHJldmlvdXMgbWFjcm8sIGJ1dCB1c2Vm
dWwgd2hlbiB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBzdGFjayBpcyBub3QKKyAqIE5VTEwgb3Ig
d2hlbiB3ZSBuZWVkIGFuIGx2YWx1ZS4gRm9yIGludGVybmFsIHVzZSBvbmx5LgorICovCisjZGVm
aW5lIFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSB5eWctPnl5X2J1ZmZlcl9zdGFja1t5eWctPnl5
X2J1ZmZlcl9zdGFja190b3BdCisKK3ZvaWQgeXlyZXN0YXJ0IChGSUxFICppbnB1dF9maWxlICx5
eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgeXlfc3dpdGNoX3RvX2J1ZmZlciAoWVlfQlVGRkVS
X1NUQVRFIG5ld19idWZmZXIgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NUQVRF
IHl5X2NyZWF0ZV9idWZmZXIgKEZJTEUgKmZpbGUsaW50IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5l
ciApOwordm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgYiAseXlzY2FuX3Qg
eXlzY2FubmVyICk7Cit2b2lkIHl5X2ZsdXNoX2J1ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIgLHl5
c2Nhbl90IHl5c2Nhbm5lciApOwordm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRlIChZWV9CVUZGRVJf
U1RBVEUgbmV3X2J1ZmZlciAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5cG9wX2J1ZmZl
cl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3N0YXRpYyB2b2lkIHl5ZW5zdXJlX2J1
ZmZlcl9zdGFjayAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eV9sb2FkX2J1
ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyICk7CitzdGF0aWMgdm9pZCB5eV9pbml0X2J1
ZmZlciAoWVlfQlVGRkVSX1NUQVRFIGIsRklMRSAqZmlsZSAseXlzY2FuX3QgeXlzY2FubmVyICk7
CisKKyNkZWZpbmUgWVlfRkxVU0hfQlVGRkVSIHl5X2ZsdXNoX2J1ZmZlcihZWV9DVVJSRU5UX0JV
RkZFUiAseXlzY2FubmVyKQorCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgKGNoYXIg
KmJhc2UseXlfc2l6ZV90IHNpemUgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworWVlfQlVGRkVSX1NU
QVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKnl5X3N0ciAseXlzY2FuX3QgeXlzY2Fu
bmVyICk7CitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9ieXRlcyAoeXljb25zdCBjaGFyICpieXRl
cyxpbnQgbGVuICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCAqeXlhbGxvYyAoeXlfc2l6
ZV90ICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3ZvaWQgKnl5cmVhbGxvYyAodm9pZCAqLHl5X3Np
emVfdCAseXlzY2FuX3QgeXlzY2FubmVyICk7Cit2b2lkIHl5ZnJlZSAodm9pZCAqICx5eXNjYW5f
dCB5eXNjYW5uZXIgKTsKKworI2RlZmluZSB5eV9uZXdfYnVmZmVyIHl5X2NyZWF0ZV9idWZmZXIK
KworI2RlZmluZSB5eV9zZXRfaW50ZXJhY3RpdmUoaXNfaW50ZXJhY3RpdmUpIFwKKwl7IFwKKwlp
ZiAoICEgWVlfQ1VSUkVOVF9CVUZGRVIgKXsgXAorICAgICAgICB5eWVuc3VyZV9idWZmZXJfc3Rh
Y2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAorICAg
ICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIpOyBc
CisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSA9IGlz
X2ludGVyYWN0aXZlOyBcCisJfQorCisjZGVmaW5lIHl5X3NldF9ib2woYXRfYm9sKSBcCisJeyBc
CisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7XAorICAgICAgICB5eWVuc3VyZV9idWZmZXJf
c3RhY2sgKHl5c2Nhbm5lcik7IFwKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0gICAgXAor
ICAgICAgICAgICAgeXlfY3JlYXRlX2J1ZmZlcih5eWluLFlZX0JVRl9TSVpFICx5eXNjYW5uZXIp
OyBcCisJfSBcCisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9hdF9ib2wgPSBhdF9ib2w7
IFwKKwl9CisKKyNkZWZpbmUgWVlfQVRfQk9MKCkgKFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfYXRfYm9sKQorCisvKiBCZWdpbiB1c2VyIHNlY3QzICovCisKKyNkZWZpbmUgeXl3cmFwKG4p
IDEKKyNkZWZpbmUgWVlfU0tJUF9ZWVdSQVAKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIFlZX0NI
QVI7CisKK3R5cGVkZWYgaW50IHl5X3N0YXRlX3R5cGU7CisKKyNkZWZpbmUgeXl0ZXh0X3B0ciB5
eXRleHRfcgorCitzdGF0aWMgeXlfc3RhdGVfdHlwZSB5eV9nZXRfcHJldmlvdXNfc3RhdGUgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOworc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFu
cyAoeXlfc3RhdGVfdHlwZSBjdXJyZW50X3N0YXRlICAseXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0
YXRpYyBpbnQgeXlfZ2V0X25leHRfYnVmZmVyICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKK3N0YXRp
YyB2b2lkIHl5X2ZhdGFsX2Vycm9yICh5eWNvbnN0IGNoYXIgbXNnW10gLHl5c2Nhbl90IHl5c2Nh
bm5lciApOworCisvKiBEb25lIGFmdGVyIHRoZSBjdXJyZW50IHBhdHRlcm4gaGFzIGJlZW4gbWF0
Y2hlZCBhbmQgYmVmb3JlIHRoZQorICogY29ycmVzcG9uZGluZyBhY3Rpb24gLSBzZXRzIHVwIHl5
dGV4dC4KKyAqLworI2RlZmluZSBZWV9ET19CRUZPUkVfQUNUSU9OIFwKKwl5eWctPnl5dGV4dF9w
dHIgPSB5eV9icDsgXAorCXl5bGVuZyA9IChzaXplX3QpICh5eV9jcCAtIHl5X2JwKTsgXAorCXl5
Zy0+eXlfaG9sZF9jaGFyID0gKnl5X2NwOyBcCisJKnl5X2NwID0gJ1wwJzsgXAorCXl5Zy0+eXlf
Y19idWZfcCA9IHl5X2NwOworCisjZGVmaW5lIFlZX05VTV9SVUxFUyAxNDUKKyNkZWZpbmUgWVlf
RU5EX09GX0JVRkZFUiAxNDYKKy8qIFRoaXMgc3RydWN0IGlzIG5vdCB1c2VkIGluIHRoaXMgc2Nh
bm5lciwKKyAgIGJ1dCBpdHMgcHJlc2VuY2UgaXMgbmVjZXNzYXJ5LiAqLworc3RydWN0IHl5X3Ry
YW5zX2luZm8KKwl7CisJZmxleF9pbnQzMl90IHl5X3ZlcmlmeTsKKwlmbGV4X2ludDMyX3QgeXlf
bnh0OworCX07CitzdGF0aWMgeXljb25zdCBmbGV4X2ludDE2X3QgeXlfYWNjZXB0WzQxMV0gPQor
ICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgMTQ2
LCAgMTQ0LCAgMTQzLCAgMTQzLAorICAgICAgMTI4LCAgMTM0LCAgMTM5LCAgMTIzLCAgMTI0LCAg
MTMyLCAgMTMxLCAgMTIwLCAgMTI5LCAgMTI3LAorICAgICAgMTMzLCAgIDkyLCAgIDkyLCAgMTIx
LCAgMTE3LCAgMTM1LCAgMTIyLCAgMTM2LCAgMTQwLCAgIDg4LAorICAgICAgMTI1LCAgMTI2LCAg
MTM4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LAorICAgICAgIDg4
LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LAor
ICAgICAgIDg4LCAgIDg4LCAgIDg4LCAgMTE4LCAgMTM3LCAgMTE5LCAgMTMwLCAgICAzLCAgICA0
LCAgICAzLAorICAgICAgMTQyLCAgMTQ1LCAgMTQxLCAgMTE0LCAgMTAwLCAgMTE5LCAgMTA4LCAg
MTAzLCAgIDk4LCAgMTA2LAorICAgICAgIDk2LCAgMTA3LCAgIDk3LCAgIDk1LCAgICAyLCAgICAx
LCAgIDk5LCAgIDk0LCAgIDkwLCAgIDkxLAorICAgICAgICAwLCAgICAwLCAgIDkyLCAgMTI2LCAg
MTE4LCAgMTI1LCAgMTE1LCAgMTExLCAgMTEzLCAgMTEyLAorICAgICAgMTE2LCAgIDg4LCAgMTA0
LCAgMTEwLCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LAorCisgICAgICAgODgs
ICAgODgsICAgODgsICAgODgsICAgMTcsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsCisg
ICAgICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgMjAs
ICAgMjIsCisgICAgICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAg
ODgsICAgODgsICAgODgsCisgICAgICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgs
ICAgODgsICAgODgsICAgODgsICAgODgsCisgICAgICAgODgsICAgODgsICAgODgsICAgODgsICAg
ODgsICAgODgsICAxMDUsICAxMDksICAgIDUsICAxNDEsCisgICAgICAgIDAsICAgIDEsICAgOTQs
ICAgIDAsICAgIDAsICAgOTMsICAgODksICAxMDEsICAxMDIsICAgNDgsCisgICAgICAgODgsICAg
ODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsCisgICAg
ICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgMTgsICAgODgsICAg
ODgsCisgICAgICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgMjYsICAgODgs
ICAgODgsICAgODgsCisgICAgICAgODgsICAgODgsICAgODgsICAgODgsICAgODgsICAgMjMsICAg
ODgsICAgODgsICAgODgsICAgODgsCisKKyAgICAgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4
OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwKKyAgICAgICA4OCwgICA4OCwgICA4OCwg
ICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICAgMCwgICA5NSwKKyAgICAgICAgMCwgICA5
NCwgICA4OCwgICAyOCwgICA4OCwgICA4OCwgICA4NSwgICA4OCwgICA4OCwgICA4OCwKKyAgICAg
ICA4OCwgICA4OCwgICA4OCwgICA4OCwgICAyMSwgICA1MSwgICA4OCwgICA4OCwgICA4OCwgICA4
OCwKKyAgICAgICA4OCwgICA1NiwgICA3MCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwg
ICA4OCwgICA4OCwKKyAgICAgICA4OCwgICA2NywgICAgOSwgICAzMywgICAzNCwgICAzNSwgICA4
OCwgICA4OCwgICA4OCwgICA4OCwKKyAgICAgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwg
ICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwKKyAgICAgICA4OCwgICA1NCwgICAyOSwgICA4
OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICAzNiwKKyAgICAgICAzNywgICAzOCwg
ICAyNywgICA4OCwgICA4OCwgICA4OCwgICAxNSwgICA0MiwgICA0MywgICA0NCwKKyAgICAgICA0
OSwgICAxMiwgICA4OCwgICA4OCwgICA4OCwgICA4OCwgICA4MSwgICA4MiwgICA4MywgICA4OCwK
KworICAgICAgIDMwLCAgIDcxLCAgIDI1LCAgIDc4LCAgIDc5LCAgIDgwLCAgICA3LCAgIDc1LCAg
IDc2LCAgIDc3LAorICAgICAgIDg4LCAgIDI0LCAgIDczLCAgIDg4LCAgIDg4LCAgIDM5LCAgIDQw
LCAgIDQxLCAgIDg4LCAgIDg4LAorICAgICAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAg
IDg4LCAgIDg4LCAgIDY4LCAgIDg4LCAgIDg4LAorICAgICAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4
LCAgIDg4LCAgIDUwLCAgIDg4LCAgIDg3LCAgIDg4LCAgIDg4LAorICAgICAgIDE5LCAgIDg4LCAg
IDg4LCAgIDg4LCAgIDg4LCAgIDY5LCAgIDY0LCAgIDU5LCAgIDg4LCAgIDg4LAorICAgICAgIDg4
LCAgIDg4LCAgIDg4LCAgIDc0LCAgIDU1LCAgIDg4LCAgIDYyLCAgIDMyLCAgIDg4LCAgIDg0LAor
ICAgICAgIDYzLCAgIDQ3LCAgIDU3LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4LCAgIDg4
LCAgIDg4LAorICAgICAgIDg4LCAgIDU4LCAgIDMxLCAgIDg4LCAgIDg4LCAgIDg4LCAgICA4LCAg
IDg4LCAgIDg4LCAgIDg4LAorICAgICAgIDg4LCAgIDg4LCAgIDUyLCAgIDEzLCAgIDg4LCAgIDE0
LCAgIDg4LCAgIDg4LCAgIDE2LCAgIDY1LAorICAgICAgIDg4LCAgIDg4LCAgIDg4LCAgIDYwLCAg
IDg4LCAgIDg4LCAgIDg4LCAgIDUzLCAgIDcyLCAgIDYxLAorCisgICAgICAgMTEsICAgNjYsICAg
IDYsICAgODYsICAgMTAsICAgNDUsICAgODgsICAgODgsICAgNDYsICAgIDAKKyAgICB9IDsKKwor
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQzMl90IHl5X2VjWzI1Nl0gPQorICAgIHsgICAwLAorICAg
ICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAyLCAg
ICAzLAorICAgICAgICAyLCAgICAyLCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAx
LCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAg
ICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAgICAxLCAgICAyLCAgICA0LCAgICAxLCAgICAx
LCAgICAxLCAgICA1LCAgICA2LCAgICAxLCAgICA3LAorICAgICAgICA4LCAgICA5LCAgIDEwLCAg
IDExLCAgIDEyLCAgIDEzLCAgIDE0LCAgIDE1LCAgIDE2LCAgIDE3LAorICAgICAgIDE4LCAgIDE5
LCAgIDE2LCAgIDE2LCAgIDE2LCAgIDIwLCAgIDIwLCAgIDIxLCAgIDIyLCAgIDIzLAorICAgICAg
IDI0LCAgIDI1LCAgIDI2LCAgICAxLCAgIDI3LCAgIDI3LCAgIDI4LCAgIDI5LCAgIDMwLCAgIDI3
LAorICAgICAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAg
IDMxLCAgIDMxLAorICAgICAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMxLCAgIDMx
LCAgIDMyLCAgIDMxLCAgIDMxLAorICAgICAgIDMzLCAgICAxLCAgIDM0LCAgIDM1LCAgIDMxLCAg
ICAxLCAgIDM2LCAgIDM3LCAgIDM4LCAgIDM5LAorCisgICAgICAgNDAsICAgNDEsICAgNDIsICAg
NDMsICAgNDQsICAgMzEsICAgNDUsICAgNDYsICAgNDcsICAgNDgsCisgICAgICAgNDksICAgNTAs
ICAgMzEsICAgNTEsICAgNTIsICAgNTMsICAgNTQsICAgNTUsICAgNTYsICAgNTcsCisgICAgICAg
NTgsICAgNTksICAgNjAsICAgNjEsICAgNjIsICAgNjMsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
CisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEsICAgIDEsICAg
IDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisgICAgICAgIDEs
ICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsCisg
ICAgICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEsICAgIDEs
ICAgIDEsCisKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMQorICAgIH0gOworCitzdGF0aWMgeXljb25z
dCBmbGV4X2ludDMyX3QgeXlfbWV0YVs2NF0gPQorICAgIHsgICAwLAorICAgICAgICAxLCAgICAx
LCAgICAyLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLAorICAgICAg
ICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAzLCAgICAz
LAorICAgICAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAzLCAg
ICAzLCAgICAzLAorICAgICAgICA0LCAgICA0LCAgICAxLCAgICAxLCAgICAxLCAgICAzLCAgICAz
LCAgICAzLCAgICAzLCAgICAzLAorICAgICAgICAzLCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAg
ICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LAorICAgICAgICA0LCAgICA0LCAgICA0LCAgICA0
LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICA0LCAgICAxLAorICAgICAgICAxLCAgICAxLCAg
ICAxCisgICAgfSA7CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9iYXNlWzQxNl0g
PQorICAgIHsgICAwLAorICAgICAgICAwLCAgICAwLCAgIDYxLCAgIDYyLCAgIDcxLCAgICAwLCAg
NjA2LCAgNjA3LCAgNjA3LCAgNjA3LAorICAgICAgNTgxLCAgIDQyLCAgMTI5LCAgNjA3LCAgNjA3
LCAgNTgwLCAgMTI2LCAgNjA3LCAgMTI1LCAgMTIzLAorICAgICAgMTM3LCAgMTQ5LCAgMTU3LCAg
NTc4LCAgNjA3LCAgMTc1LCAgNTc4LCAgIDQ0LCAgNjA3LCAgICAwLAorICAgICAgNjA3LCAgNjA3
LCAgMTIwLCAgIDk1LCAgMTAzLCAgMTQyLCAgMTQ2LCAgMTM2LCAgMTU2LCAgNTUyLAorICAgICAg
MTY4LCAgMTYyLCAgNTUxLCAgMTIwLCAgMTU4LCAgNTQ1LCAgMTczLCAgNTU4LCAgMTcyLCAgMTc4
LAorICAgICAgMTExLCAgMTg2LCAgNTU0LCAgNjA3LCAgMTU5LCAgNjA3LCAgNjA3LCAgNjA3LCAg
NjA3LCAgNTgyLAorICAgICAgNjA3LCAgNjA3LCAgICAwLCAgNjA3LCAgNjA3LCAgNjA3LCAgNjA3
LCAgNjA3LCAgNjA3LCAgNjA3LAorICAgICAgNjA3LCAgNjA3LCAgNjA3LCAgMjIyLCAgNjA3LCAg
ICAwLCAgNjA3LCAgMjI4LCAgMjU0LCAgMjYyLAorICAgICAgMjgxLCAgICAwLCAgMjkwLCAgNjA3
LCAgNjA3LCAgNjA3LCAgNTcxLCAgNjA3LCAgNjA3LCAgNjA3LAorICAgICAgNTcwLCAgICAwLCAg
NjA3LCAgNjA3LCAgNTQ2LCAgNTM5LCAgNTQyLCAgNTUwLCAgNTQ5LCAgNTM2LAorCisgICAgICA1
NTEsICA1MzgsICA1NDQsICA1MzIsICA1MjksICA1NDIsICA1MjksICA1MjYsICA1MjYsICA1MzIs
CisgICAgICA1MjAsICA1MjcsICA1MjQsICA1MzQsICA1MjAsICA1MjYsICA1MjksICA1MzAsICAg
IDAsICAyMDQsCisgICAgICA1MjksICAyMDcsICA1MTUsICA1MjgsICA1MTksICA1MjEsICA1MTEs
ICA1MjUsICA1MjIsICA1MjQsCisgICAgICA1MDcsICA1MTIsICA1MDksICA0OTgsICAxODMsICA1
MTIsICA1MDgsICA1MTAsICA0OTksICA1MDIsCisgICAgICAyMTIsICA1MDcsICA0OTksICA1MTEs
ICAxODYsICA1MDQsICA2MDcsICA2MDcsICA2MDcsICAgIDAsCisgICAgICAzMDYsICAgIDAsICAz
MTYsICAzMzIsICAyNzAsICAzNDIsICAgIDAsICA2MDcsICA2MDcsICAgIDAsCisgICAgICA0OTYs
ICA1MDAsICA1MDksICA1MDYsICA0OTAsICA0OTAsICAxNjEsICA1MDUsICA1MDIsICA1MDIsCisg
ICAgICA1MDAsICA0OTcsICA0ODksICA0OTUsICA0ODIsICA0OTMsICA0OTYsICAgIDAsICA0OTMs
ICA0ODEsCisgICAgICA0ODgsICA0ODUsICA0ODksICA0ODIsICA0NzEsICA0NzAsICA0ODMsICA0
ODYsICA0ODMsICA0NzgsCisgICAgICA0NjksICAyOTQsICA0NzQsICA0NzcsICA0NjgsICA0NjUs
ICA0NjksICA0NzUsICA0NjYsICA0NTcsCisKKyAgICAgIDQ2MCwgIDQ1OCwgIDQ2OCwgIDQ1NCwg
IDQ1MiwgIDQ1MiwgIDQ1NCwgIDQ1MSwgIDQ2MiwgIDQ2MSwKKyAgICAgIDI3OCwgIDQ1NiwgIDQ1
MSwgIDQ0MCwgIDMyMCwgIDQ1OCwgIDQ2MCwgIDQ0OSwgIDM0OCwgIDM1NCwKKyAgICAgIDM2MCwg
IDM2NiwgIDQ1MCwgICAgMCwgIDQ0OCwgIDMzNiwgICAgMCwgIDQ0MCwgIDQzOCwgIDQ0NiwKKyAg
ICAgIDQzNSwgIDQ1MiwgIDQ0MSwgIDM3MCwgICAgMCwgICAgMCwgIDQzNSwgIDQ0NSwgIDQ0NSwg
IDQzMCwKKyAgICAgIDM3MywgICAgMCwgICAgMCwgIDQzMiwgIDM3NiwgIDQzMywgIDQyNywgIDQy
NiwgIDQyNywgIDQyNiwKKyAgICAgIDM3OSwgICAgMCwgICAgMCwgICAgMCwgICAgMCwgICAgMCwg
IDQyMiwgIDQyMywgIDQyOCwgIDQxOSwKKyAgICAgIDQzMiwgIDQyNywgIDQyNiwgIDQxOCwgIDQy
MiwgIDQxNCwgIDQxNywgIDQyMSwgIDQyNiwgIDQyNSwKKyAgICAgIDQxNiwgICAgMCwgICAgMCwg
IDQyMiwgIDQxMSwgIDQxMSwgIDQxNiwgIDQxNSwgIDQxMiwgICAgMCwKKyAgICAgICAgMCwgICAg
MCwgICAgMCwgIDQwMiwgIDQxNCwgIDQxNiwgICAgMCwgICAgMCwgICAgMCwgICAgMCwKKyAgICAg
ICAgMCwgICAgMCwgIDQwNCwgIDQwNSwgIDM5OSwgIDQwOSwgICAgMCwgICAgMCwgICAgMCwgIDQw
MCwKKworICAgICAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAwLCAgICAw
LCAgICAwLCAgICAwLAorICAgICAgNDA3LCAgICAwLCAgICAwLCAgNDA1LCAgNDAxLCAgICAwLCAg
ICAwLCAgICAwLCAgMzk3LCAgMzkzLAorICAgICAgMzk4LCAgMzg4LCAgNDAxLCAgMzg3LCAgNDAw
LCAgMzg5LCAgMzk2LCAgICAwLCAgMzk0LCAgMzk2LAorICAgICAgMzgwLCAgMzg5LCAgMzk1LCAg
MzkwLCAgMzc4LCAgICAwLCAgMzgwLCAgICAwLCAgMzc5LCAgMzgyLAorICAgICAgICAwLCAgMzcx
LCAgMzcwLCAgMzcwLCAgMzgzLCAgICAwLCAgMzg1LCAgICAwLCAgMzg0LCAgMzgzLAorICAgICAg
MzY4LCAgMzgxLCAgMzY4LCAgICAwLCAgICAwLCAgMzcxLCAgICAwLCAgICAwLCAgMzYzLCAgICAw
LAorICAgICAgICAwLCAgICAwLCAgICAwLCAgMzYwLCAgMzcxLCAgMzY0LCAgMzY4LCAgMzAzLCAg
Mjk3LCAgMjg4LAorICAgICAgMzAwLCAgICAwLCAgICAwLCAgMjgzLCAgMjkwLCAgMjY5LCAgICAw
LCAgMjc3LCAgMjc0LCAgMjU1LAorICAgICAgMjMyLCAgMjU1LCAgICAwLCAgICAwLCAgMjQ0LCAg
ICAwLCAgMjM2LCAgMjI2LCAgICAwLCAgICAwLAorICAgICAgMjI1LCAgMjA4LCAgMjExLCAgICAw
LCAgMTg1LCAgMjAyLCAgMTMxLCAgICAwLCAgICAwLCAgICAwLAorCisgICAgICAgIDAsICAgIDAs
ICAgIDAsICAgIDAsICAgIDAsICAgIDAsICAxMzQsICAxMTcsICAgIDAsICA2MDcsCisgICAgICAz
OTgsICA0MDAsICA0MDIsICA0MDYsICAxNDIKKyAgICB9IDsKKworc3RhdGljIHl5Y29uc3QgZmxl
eF9pbnQxNl90IHl5X2RlZls0MTZdID0KKyAgICB7ICAgMCwKKyAgICAgIDQxMCwgICAgMSwgIDQx
MSwgIDQxMSwgIDQxMCwgICAgNSwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwKKyAgICAgIDQxMCwg
IDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwKKyAg
ICAgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwg
IDQxMiwKKyAgICAgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQx
MiwgIDQxMiwgIDQxMiwKKyAgICAgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwg
IDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKyAgICAgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMCwgIDQx
MCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwKKyAgICAgIDQxMCwgIDQxMCwgIDQxMywg
IDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwKKyAgICAgIDQxMCwgIDQx
MCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxNCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwKKyAgICAg
IDQxMCwgIDQxNSwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQx
MCwKKyAgICAgIDQxMCwgIDQxMiwgIDQxMCwgIDQxMCwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwg
IDQxMiwgIDQxMiwKKworICAgICAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAg
NDEyLCAgNDEyLCAgNDEyLCAgNDEyLAorICAgICAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEy
LCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLAorICAgICAgNDEyLCAgNDEyLCAgNDEyLCAg
NDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLAorICAgICAgNDEyLCAgNDEy
LCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLAorICAgICAg
NDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEz
LAorICAgICAgNDEwLCAgNDE0LCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDE1LCAgNDEwLCAg
NDEwLCAgNDEyLAorICAgICAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEy
LCAgNDEyLCAgNDEyLCAgNDEyLAorICAgICAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAg
NDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLAorICAgICAgNDEyLCAgNDEyLCAgNDEyLCAgNDEy
LCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLAorICAgICAgNDEyLCAgNDEyLCAg
NDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLAorCisgICAgICA0
MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIs
CisgICAgICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0
MTAsICA0MTAsCisgICAgICA0MTAsICA0MTAsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIs
ICA0MTIsICA0MTIsICA0MTIsCisgICAgICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0
MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsCisgICAgICA0MTIsICA0MTIsICA0MTIsICA0MTIs
ICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsCisgICAgICA0MTIsICA0MTIsICA0
MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsCisgICAgICA0MTIs
ICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsCisg
ICAgICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIs
ICA0MTIsCisgICAgICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0
MTIsICA0MTIsICA0MTIsCisgICAgICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIsICA0MTIs
ICA0MTIsICA0MTIsICA0MTIsICA0MTIsCisKKyAgICAgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwg
IDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKyAgICAgIDQxMiwgIDQxMiwgIDQx
MiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKyAgICAgIDQxMiwg
IDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKyAg
ICAgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwg
IDQxMiwKKyAgICAgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQx
MiwgIDQxMiwgIDQxMiwKKyAgICAgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwg
IDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKyAgICAgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQx
MiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKyAgICAgIDQxMiwgIDQxMiwgIDQxMiwg
IDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKyAgICAgIDQxMiwgIDQx
MiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwKKyAgICAg
IDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQxMiwgIDQx
MiwKKworICAgICAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEyLCAgNDEy
LCAgNDEyLCAgICAwLAorICAgICAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwLCAgNDEwCisgICAgfSA7
CisKK3N0YXRpYyB5eWNvbnN0IGZsZXhfaW50MTZfdCB5eV9ueHRbNjcxXSA9CisgICAgeyAgIDAs
CisgICAgICAgIDgsICAgIDksICAgMTAsICAgMTEsICAgMTIsICAgMTMsICAgMTQsICAgMTUsICAg
MTYsICAgMTcsCisgICAgICAgMTgsICAgMTksICAgMjAsICAgMjEsICAgMjIsICAgMjMsICAgMjMs
ICAgMjMsICAgMjMsICAgMjMsCisgICAgICAgMjQsICAgMjUsICAgMjYsICAgMjcsICAgMjgsICAg
MjksICAgMzAsICAgMzAsICAgMzAsICAgMzAsCisgICAgICAgMzAsICAgMzAsICAgMzEsICAgMzIs
ICAgMzMsICAgMzQsICAgMzUsICAgMzYsICAgMzcsICAgMzgsCisgICAgICAgMzksICAgNDAsICAg
NDEsICAgNDIsICAgMzAsICAgNDMsICAgNDQsICAgNDUsICAgNDYsICAgNDcsCisgICAgICAgNDgs
ICAgNDksICAgNTAsICAgNTEsICAgNTIsICAgNTMsICAgMzAsICAgMzAsICAgMzAsICAgNTQsCisg
ICAgICAgNTUsICAgNTYsICAgNTcsICAgNTksICAgNTksICAgNjUsICAgNjYsICAgOTAsICAgOTEs
ICAgNjAsCisgICAgICAgNjAsICAgIDgsICAgNjEsICAgNjIsICAgIDgsICAgIDgsICAgIDgsICAg
IDgsICAgIDgsICAgIDgsCisgICAgICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAgIDgs
ICAgIDgsICAgIDgsICAgIDgsICAgIDgsCisgICAgICAgIDgsICAgIDgsICAgIDgsICAgIDgsICAg
IDgsICAgIDgsICAgIDgsICAgNjMsICAgNjMsICAgNjMsCisKKyAgICAgICA2MywgICA2MywgICA2
MywgICAgOCwgICAgOCwgICAgOCwgICA2MywgICA2MywgICA2MywgICA2MywKKyAgICAgICA2Mywg
ICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywKKyAg
ICAgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2MywgICA2Mywg
ICA2MywKKyAgICAgICAgOCwgICAgOCwgICAgOCwgICAgOCwgICA2NywgICA3MCwgICA3MiwgICA3
NCwgICA3NCwgICA3NCwKKyAgICAgICA3NCwgICA3NCwgICA3NCwgICA5MywgIDE1NywgICA3NSwg
ICA5NSwgICA5NiwgICA3MywgICA3MSwKKyAgICAgICA3NiwgICA5NywgICA2OCwgICA5OCwgICA5
NCwgIDEyMywgIDQwOSwgICA5OSwgIDE0MSwgIDEyNCwKKyAgICAgICA3NywgICA3OCwgIDE0Miwg
ICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA3OSwgICA4MCwgICA3OCwKKyAgICAgIDQwOCwgICA4
MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgIDEwMCwgICA4MSwgICA4NSwKKyAgICAg
ICA4MiwgIDEwNywgIDE0NywgIDEwOCwgIDQwNywgIDEwMywgICA4MSwgIDEwMSwgICA4MSwgIDEw
NCwKKyAgICAgIDEwMiwgIDExMCwgIDEwOSwgIDEyNSwgIDEwNSwgICA4NiwgICA4MSwgICA4Nywg
ICA4OCwgIDExMSwKKworICAgICAgMTA2LCAgMTEyLCAgMTE5LCAgMTE2LCAgMTEzLCAgIDgyLCAg
MTI2LCAgMTMyLCAgMTI4LCAgMTIwLAorICAgICAgMTE0LCAgMTE3LCAgMjI5LCAgMjMwLCAgMTMz
LCAgMTM0LCAgMTIxLCAgMTM3LCAgMjA0LCAgMTQ4LAorICAgICAgMTM4LCAgMTQzLCAgMTE4LCAg
MTI5LCAgMTM1LCAgMTQ0LCAgMTMwLCAgMTM2LCAgMTM5LCAgMjE2LAorICAgICAgNDA2LCAgMjE3
LCAgNDA1LCAgMjA1LCAgMTQ1LCAgMTQwLCAgIDc0LCAgIDc0LCAgIDc0LCAgIDc0LAorICAgICAg
IDc0LCAgIDc0LCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMTUzLCAgMzk2LCAgMTg0
LAorICAgICAgNDA0LCAgMTUxLCAgMTg1LCAgMTg2LCAgMTkwLCAgMjExLCAgMTg3LCAgMTU0LCAg
MTg4LCAgMzk3LAorICAgICAgNDAzLCAgMTUxLCAgMTkxLCAgMjEyLCAgNDAyLCAgNDAxLCAgIDc4
LCAgMTU0LCAgIDc5LCAgIDc5LAorICAgICAgIDc5LCAgIDc5LCAgIDc5LCAgIDgwLCAgIDc4LCAg
NDAwLCAgIDgwLCAgIDgwLCAgIDgwLCAgIDgwLAorICAgICAgIDgwLCAgIDgwLCAgMzk5LCAgIDgx
LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LAorICAgICAgMTU1LCAgIDgxLCAg
MTU1LCAgIDgxLCAgMzk4LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LCAgMTU2LAorCisgICAgICAx
NTYsICAgODEsICAgNzgsICAzOTUsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMsICAgODMs
CisgICAgICAyNTQsICAyNTUsICAyNTYsICAzOTQsICAzOTMsICAyMTksICAzOTIsICAyMTksICAy
NzUsICAgODEsCisgICAgICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyNzYs
ICAzOTEsICAzOTAsICAgODEsCisgICAgICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAxNTMsICAx
NTMsICAyODAsICAyODEsICAyODIsICAzODksCisgICAgICAzODgsICAyMjEsICAzODcsICAyMjEs
ICAzODYsICAxNTQsICAyMjIsICAyMjIsICAyMjIsICAyMjIsCisgICAgICAyMjIsICAyMjIsICAy
ODgsICAyODksICAyOTAsICAxNTQsICAxNTYsICAxNTYsICAxNTYsICAxNTYsCisgICAgICAxNTYs
ICAxNTYsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjAsCisg
ICAgICAyMjAsICAyMjAsICAyMjAsICAyMjAsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIs
ICAyMjIsCisgICAgICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyMjIsICAyOTcsICAy
OTgsICAyOTksICAzMDQsCisgICAgICAzMDUsICAzMDYsICAzMDgsICAzMDksICAzMTAsICAzMTYs
ICAzMTcsICAzMTgsICAgNTgsICAgNTgsCisKKyAgICAgICA1OCwgICA1OCwgICA5MiwgICA5Miwg
IDE1MCwgIDE1MCwgIDE1MiwgIDM4NSwgIDE1MiwgIDE1MiwKKyAgICAgIDM4NCwgIDM4MywgIDM4
MiwgIDM4MSwgIDM4MCwgIDM3OSwgIDM3OCwgIDM3NywgIDM3NiwgIDM3NSwKKyAgICAgIDM3NCwg
IDM3MywgIDM3MiwgIDM3MSwgIDM3MCwgIDM2OSwgIDM2OCwgIDM2NywgIDM2NiwgIDM2NSwKKyAg
ICAgIDM2NCwgIDM2MywgIDM2MiwgIDM2MSwgIDM2MCwgIDM1OSwgIDM1OCwgIDM1NywgIDM1Niwg
IDM1NSwKKyAgICAgIDM1NCwgIDM1MywgIDM1MiwgIDM1MSwgIDM1MCwgIDM0OSwgIDM0OCwgIDM0
NywgIDM0NiwgIDM0NSwKKyAgICAgIDM0NCwgIDM0MywgIDM0MiwgIDM0MSwgIDM0MCwgIDMzOSwg
IDMzOCwgIDMzNywgIDMzNiwgIDMzNSwKKyAgICAgIDMzNCwgIDMzMywgIDMzMiwgIDMzMSwgIDMz
MCwgIDMyOSwgIDMyOCwgIDMyNywgIDMyNiwgIDMyNSwKKyAgICAgIDMyNCwgIDMyMywgIDMyMiwg
IDMyMSwgIDMyMCwgIDMxOSwgIDMxNSwgIDMxNCwgIDMxMywgIDMxMiwKKyAgICAgIDMxMSwgIDMw
NywgIDMwMywgIDMwMiwgIDMwMSwgIDMwMCwgIDI5NiwgIDI5NSwgIDI5NCwgIDI5MywKKyAgICAg
IDI5MiwgIDI5MSwgIDI4NywgIDI4NiwgIDI4NSwgIDI4NCwgIDI4MywgIDI3OSwgIDI3OCwgIDI3
NywKKworICAgICAgMjc0LCAgMjczLCAgMjcyLCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAgMjY3
LCAgMjY2LCAgMjY1LAorICAgICAgMjY0LCAgMjYzLCAgMjYyLCAgMjYxLCAgMjYwLCAgMjU5LCAg
MjU4LCAgMjU3LCAgMjUzLCAgMjUyLAorICAgICAgMjUxLCAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQ3
LCAgMjQ2LCAgMjQ1LCAgMjQ0LCAgMjQzLCAgMjQyLAorICAgICAgMjQxLCAgMjQwLCAgMjM5LCAg
MjM4LCAgMjM3LCAgMjM2LCAgMjM1LCAgMjM0LCAgMjMzLCAgMjMyLAorICAgICAgMjMxLCAgMjI4
LCAgMjI3LCAgMjI2LCAgMjI1LCAgMjI0LCAgMjIzLCAgMjE4LCAgMjE1LCAgMjE0LAorICAgICAg
MjEzLCAgMjEwLCAgMjA5LCAgMjA4LCAgMjA3LCAgMjA2LCAgMjAzLCAgMjAyLCAgMjAxLCAgMjAw
LAorICAgICAgMTk5LCAgMTk4LCAgMTk3LCAgMTk2LCAgMTk1LCAgMTk0LCAgMTkzLCAgMTkyLCAg
MTg5LCAgMTgzLAorICAgICAgMTgyLCAgMTgxLCAgMTgwLCAgMTc5LCAgMTc4LCAgMTc3LCAgMTc2
LCAgMTc1LCAgMTc0LCAgMTczLAorICAgICAgMTcyLCAgMTcxLCAgMTcwLCAgMTY5LCAgMTY4LCAg
MTY3LCAgMTY2LCAgMTY1LCAgMTY0LCAgMTYzLAorICAgICAgMTYyLCAgMTYxLCAgMTYwLCAgMTU5
LCAgMTU4LCAgMTQ5LCAgMTQ2LCAgMTMxLCAgMTI3LCAgMTIyLAorCisgICAgICAxMTUsICAgODks
ICAgODQsICAgNjksICAgNjQsICA0MTAsICAgIDcsICA0MTAsICA0MTAsICA0MTAsCisgICAgICA0
MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAs
CisgICAgICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0
MTAsICA0MTAsCisgICAgICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAs
ICA0MTAsICA0MTAsICA0MTAsCisgICAgICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0
MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsCisgICAgICA0MTAsICA0MTAsICA0MTAsICA0MTAs
ICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsCisgICAgICA0MTAsICA0MTAsICA0
MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAsICA0MTAKKyAgICB9IDsKKwor
c3RhdGljIHl5Y29uc3QgZmxleF9pbnQxNl90IHl5X2Noa1s2NzFdID0KKyAgICB7ICAgMCwKKyAg
ICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAgMSwgICAgMSwg
ICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAgICAgMSwgICAg
MSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwgICAgMSwKKyAgICAg
ICAgMSwgICAgMSwgICAgMSwgICAgMywgICAgNCwgICAxMiwgICAxMiwgICAyOCwgICAyOCwgICAg
MywKKyAgICAgICAgNCwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwg
ICAgNSwgICAgNSwKKyAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAg
NSwgICAgNSwgICAgNSwgICAgNSwKKyAgICAgICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwg
ICAgNSwgICAgNSwgICAgNSwgICAgNSwgICAgNSwKKworICAgICAgICA1LCAgICA1LCAgICA1LCAg
ICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAorICAgICAgICA1LCAgICA1
LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LAorICAgICAg
ICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgICA1
LAorICAgICAgICA1LCAgICA1LCAgICA1LCAgICA1LCAgIDEzLCAgIDE3LCAgIDE5LCAgIDIwLCAg
IDIwLCAgIDIwLAorICAgICAgIDIwLCAgIDIwLCAgIDIwLCAgIDMzLCAgNDE1LCAgIDIxLCAgIDM0
LCAgIDM0LCAgIDE5LCAgIDE3LAorICAgICAgIDIxLCAgIDM1LCAgIDEzLCAgIDM1LCAgIDMzLCAg
IDQ0LCAgNDA4LCAgIDM1LCAgIDUxLCAgIDQ0LAorICAgICAgIDIxLCAgIDIyLCAgIDUxLCAgIDIy
LCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIyLCAgIDIzLAorICAgICAgNDA3LCAgIDIzLCAg
IDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDIzLCAgIDM2LCAgIDIyLCAgIDI2LAorICAgICAgIDIy
LCAgIDM4LCAgIDU1LCAgIDM4LCAgMzk3LCAgIDM3LCAgIDIzLCAgIDM2LCAgIDIyLCAgIDM3LAor
ICAgICAgIDM2LCAgIDM5LCAgIDM4LCAgIDQ1LCAgIDM3LCAgIDI2LCAgIDIzLCAgIDI2LCAgIDI2
LCAgIDM5LAorCisgICAgICAgMzcsICAgMzksICAgNDIsICAgNDEsICAgMzksICAgMjIsICAgNDUs
ICAgNDksICAgNDcsICAgNDIsCisgICAgICAgMzksICAgNDEsICAxNjcsICAxNjcsICAgNDksICAg
NDksICAgNDIsICAgNTAsICAxMzUsICAgNTUsCisgICAgICAgNTAsICAgNTIsICAgNDEsICAgNDcs
ICAgNDksICAgNTIsICAgNDcsICAgNDksICAgNTAsICAxNDUsCisgICAgICAzOTYsICAxNDUsICAz
OTUsICAxMzUsICAgNTIsICAgNTAsICAgNzQsICAgNzQsICAgNzQsICAgNzQsCisgICAgICAgNzQs
ICAgNzQsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAgNzgsICAzODEsICAxMjAsCisg
ICAgICAzOTMsICAgNzQsICAxMjAsICAxMjAsICAxMjIsICAxNDEsICAxMjAsICAgNzgsICAxMjAs
ICAzODEsCisgICAgICAzOTIsICAgNzQsICAxMjIsICAxNDEsICAzOTEsICAzODgsICAgNzksICAg
NzgsICAgNzksICAgNzksCisgICAgICAgNzksICAgNzksICAgNzksICAgNzksICAgODAsICAzODcs
ICAgODAsICAgODAsICAgODAsICAgODAsCisgICAgICAgODAsICAgODAsICAzODUsICAgNzksICAx
NTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsICAxNTUsCisgICAgICAgODEsICAgODAsICAgODEs
ICAgNzksICAzODIsICAgODEsICAgODEsICAgODEsICAgODEsICAgODEsCisKKyAgICAgICA4MSwg
ICA4MCwgICA4MywgIDM4MCwgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywgICA4MywKKyAg
ICAgIDE5MiwgIDE5MiwgIDE5MiwgIDM3OSwgIDM3OCwgIDE1MSwgIDM3NiwgIDE1MSwgIDIxMSwg
ICA4MywKKyAgICAgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDE1MSwgIDIxMSwgIDM3
NSwgIDM3NCwgICA4MywKKyAgICAgIDE1MywgIDE1MywgIDE1MywgIDE1MywgIDE1MywgIDE1Mywg
IDIxNSwgIDIxNSwgIDIxNSwgIDM3MSwKKyAgICAgIDM3MCwgIDE1NCwgIDM2OSwgIDE1NCwgIDM2
OCwgIDE1MywgIDE1NCwgIDE1NCwgIDE1NCwgIDE1NCwKKyAgICAgIDE1NCwgIDE1NCwgIDIyNiwg
IDIyNiwgIDIyNiwgIDE1MywgIDE1NiwgIDE1NiwgIDE1NiwgIDE1NiwKKyAgICAgIDE1NiwgIDE1
NiwgIDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDIxOSwgIDIyMCwgIDIyMCwKKyAgICAg
IDIyMCwgIDIyMCwgIDIyMCwgIDIyMCwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyMSwgIDIyMSwgIDIy
MSwKKyAgICAgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIyMiwgIDIzNCwgIDIzNCwg
IDIzNCwgIDI0MSwKKyAgICAgIDI0MSwgIDI0MSwgIDI0NSwgIDI0NSwgIDI0NSwgIDI1MSwgIDI1
MSwgIDI1MSwgIDQxMSwgIDQxMSwKKworICAgICAgNDExLCAgNDExLCAgNDEyLCAgNDEyLCAgNDEz
LCAgNDEzLCAgNDE0LCAgMzY3LCAgNDE0LCAgNDE0LAorICAgICAgMzY2LCAgMzY1LCAgMzY0LCAg
MzU5LCAgMzU2LCAgMzUzLCAgMzUyLCAgMzUxLCAgMzUwLCAgMzQ5LAorICAgICAgMzQ3LCAgMzQ1
LCAgMzQ0LCAgMzQzLCAgMzQyLCAgMzQwLCAgMzM5LCAgMzM3LCAgMzM1LCAgMzM0LAorICAgICAg
MzMzLCAgMzMyLCAgMzMxLCAgMzMwLCAgMzI5LCAgMzI3LCAgMzI2LCAgMzI1LCAgMzI0LCAgMzIz
LAorICAgICAgMzIyLCAgMzIxLCAgMzIwLCAgMzE5LCAgMzE1LCAgMzE0LCAgMzExLCAgMzAwLCAg
Mjk2LCAgMjk1LAorICAgICAgMjk0LCAgMjkzLCAgMjg2LCAgMjg1LCAgMjg0LCAgMjc5LCAgMjc4
LCAgMjc3LCAgMjc2LCAgMjc1LAorICAgICAgMjc0LCAgMjcxLCAgMjcwLCAgMjY5LCAgMjY4LCAg
MjY3LCAgMjY2LCAgMjY1LCAgMjY0LCAgMjYzLAorICAgICAgMjYyLCAgMjYxLCAgMjYwLCAgMjU5
LCAgMjU4LCAgMjU3LCAgMjUwLCAgMjQ5LCAgMjQ4LCAgMjQ3LAorICAgICAgMjQ2LCAgMjQ0LCAg
MjQwLCAgMjM5LCAgMjM4LCAgMjM3LCAgMjMzLCAgMjMyLCAgMjMxLCAgMjMwLAorICAgICAgMjI5
LCAgMjI4LCAgMjI1LCAgMjIzLCAgMjE4LCAgMjE3LCAgMjE2LCAgMjE0LCAgMjEzLCAgMjEyLAor
CisgICAgICAyMTAsICAyMDksICAyMDgsICAyMDcsICAyMDYsICAyMDUsICAyMDQsICAyMDMsICAy
MDIsICAyMDEsCisgICAgICAyMDAsICAxOTksICAxOTgsICAxOTcsICAxOTYsICAxOTUsICAxOTQs
ICAxOTMsICAxOTEsICAxOTAsCisgICAgICAxODksICAxODgsICAxODcsICAxODYsICAxODUsICAx
ODQsICAxODMsICAxODIsICAxODEsICAxODAsCisgICAgICAxNzksICAxNzcsICAxNzYsICAxNzUs
ICAxNzQsICAxNzMsICAxNzIsICAxNzEsICAxNzAsICAxNjksCisgICAgICAxNjgsICAxNjYsICAx
NjUsICAxNjQsICAxNjMsICAxNjIsICAxNjEsICAxNDYsICAxNDQsICAxNDMsCisgICAgICAxNDIs
ICAxNDAsICAxMzksICAxMzgsICAxMzcsICAxMzYsICAxMzQsICAxMzMsICAxMzIsICAxMzEsCisg
ICAgICAxMzAsICAxMjksICAxMjgsICAxMjcsICAxMjYsICAxMjUsICAxMjQsICAxMjMsICAxMjEs
ICAxMTgsCisgICAgICAxMTcsICAxMTYsICAxMTUsICAxMTQsICAxMTMsICAxMTIsICAxMTEsICAx
MTAsICAxMDksICAxMDgsCisgICAgICAxMDcsICAxMDYsICAxMDUsICAxMDQsICAxMDMsICAxMDIs
ICAxMDEsICAxMDAsICAgOTksICAgOTgsCisgICAgICAgOTcsICAgOTYsICAgOTUsICAgOTEsICAg
ODcsICAgNjAsICAgNTMsICAgNDgsICAgNDYsICAgNDMsCisKKyAgICAgICA0MCwgICAyNywgICAy
NCwgICAxNiwgICAxMSwgICAgNywgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwKKyAgICAgIDQxMCwg
IDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwKKyAg
ICAgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwg
IDQxMCwKKyAgICAgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQx
MCwgIDQxMCwgIDQxMCwKKyAgICAgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwg
IDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwKKyAgICAgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQx
MCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwKKyAgICAgIDQxMCwgIDQxMCwgIDQxMCwg
IDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMCwgIDQxMAorICAgIH0gOworCisvKiBU
YWJsZSBvZiBib29sZWFucywgdHJ1ZSBpZiBydWxlIGNvdWxkIG1hdGNoIGVvbC4gKi8KK3N0YXRp
YyB5eWNvbnN0IGZsZXhfaW50MzJfdCB5eV9ydWxlX2Nhbl9tYXRjaF9lb2xbMTQ2XSA9CisgICAg
eyAgIDAsCiswLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAw
LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAg
ICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw
LCAwLCAKKyAgICAwLCAwLCAwLCAxLCAwLCAwLCAgICAgfTsKKworLyogVGhlIGludGVudCBiZWhp
bmQgdGhpcyBkZWZpbml0aW9uIGlzIHRoYXQgaXQnbGwgY2F0Y2gKKyAqIGFueSB1c2VzIG9mIFJF
SkVDVCB3aGljaCBmbGV4IG1pc3NlZC4KKyAqLworI2RlZmluZSBSRUpFQ1QgcmVqZWN0X3VzZWRf
YnV0X25vdF9kZXRlY3RlZAorI2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2Rl
dGVjdGVkCisjZGVmaW5lIFlZX01PUkVfQURKIDAKKyNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JF
X09GRlNFVAorLyoKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJv
amVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8g
Zm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKK1RoaXMgZmlsZSBjb250YWlucyB0aGUg
TGV4IHNwZWNpZmljYXRpb24gZm9yIEdMU0wgRVMuCitCYXNlZCBvbiBBTlNJIEMgZ3JhbW1hciwg
TGV4IHNwZWNpZmljYXRpb246CitodHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNlL2MvQU5TSS1DLWdy
YW1tYXItbC5odG1sCisKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8g
UlVOIGdlbmVyYXRlX2dsc2xhbmdfbGV4ZXIuc2gsCitXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wg
RVMgTEVYRVIgKGdsc2xhbmdfbGV4LmNwcCkuCisqLworCisjaW5jbHVkZSAiY29tcGlsZXIvZ2xz
bGFuZy5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCisjaW5jbHVkZSAiY29t
cGlsZXIvdXRpbC5oIgorI2luY2x1ZGUgImdsc2xhbmdfdGFiLmgiCisKKy8qIHdpbmRvd3Mgb25s
eSBwcmFnbWEgKi8KKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0
MTAyKQorI2VuZGlmCisKKyNkZWZpbmUgWVlfVVNFUl9BQ1RJT04geXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOworI2RlZmluZSBZWV9JTlBVVChidWYsIHJlc3VsdCwgbWF4X3NpemUpIFwKKyAg
ICByZXN1bHQgPSBzdHJpbmdfaW5wdXQoYnVmLCBtYXhfc2l6ZSwgeXlzY2FubmVyKTsKKworc3Rh
dGljIGludCBzdHJpbmdfaW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3NpemUsIHl5c2Nhbl90IHl5
c2Nhbm5lcik7CitzdGF0aWMgaW50IGNoZWNrX3R5cGUoeXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0
YXRpYyBpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5lIElO
SVRJQUwgMAorI2RlZmluZSBDT01NRU5UIDEKKyNkZWZpbmUgRklFTERTIDIKKworI2RlZmluZSBZ
WV9FWFRSQV9UWVBFIFRQYXJzZUNvbnRleHQqCisKKy8qIEhvbGRzIHRoZSBlbnRpcmUgc3RhdGUg
b2YgdGhlIHJlZW50cmFudCBzY2FubmVyLiAqLworc3RydWN0IHl5Z3V0c190CisgICAgeworCisg
ICAgLyogVXNlci1kZWZpbmVkLiBOb3QgdG91Y2hlZCBieSBmbGV4LiAqLworICAgIFlZX0VYVFJB
X1RZUEUgeXlleHRyYV9yOworCisgICAgLyogVGhlIHJlc3QgYXJlIHRoZSBzYW1lIGFzIHRoZSBn
bG9iYWxzIGRlY2xhcmVkIGluIHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuICovCisgICAgRklM
RSAqeXlpbl9yLCAqeXlvdXRfcjsKKyAgICBzaXplX3QgeXlfYnVmZmVyX3N0YWNrX3RvcDsgLyoq
PCBpbmRleCBvZiB0b3Agb2Ygc3RhY2suICovCisgICAgc2l6ZV90IHl5X2J1ZmZlcl9zdGFja19t
YXg7IC8qKjwgY2FwYWNpdHkgb2Ygc3RhY2suICovCisgICAgWVlfQlVGRkVSX1NUQVRFICogeXlf
YnVmZmVyX3N0YWNrOyAvKio8IFN0YWNrIGFzIGFuIGFycmF5LiAqLworICAgIGNoYXIgeXlfaG9s
ZF9jaGFyOworICAgIGludCB5eV9uX2NoYXJzOworICAgIGludCB5eWxlbmdfcjsKKyAgICBjaGFy
ICp5eV9jX2J1Zl9wOworICAgIGludCB5eV9pbml0OworICAgIGludCB5eV9zdGFydDsKKyAgICBp
bnQgeXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mOworICAgIGludCB5eV9zdGFydF9zdGFja19w
dHI7CisgICAgaW50IHl5X3N0YXJ0X3N0YWNrX2RlcHRoOworICAgIGludCAqeXlfc3RhcnRfc3Rh
Y2s7CisgICAgeXlfc3RhdGVfdHlwZSB5eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKyAgICBjaGFy
KiB5eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCisgICAgaW50IHl5bGluZW5vX3I7CisgICAgaW50
IHl5X2ZsZXhfZGVidWdfcjsKKworICAgIGNoYXIgKnl5dGV4dF9yOworICAgIGludCB5eV9tb3Jl
X2ZsYWc7CisgICAgaW50IHl5X21vcmVfbGVuOworCisgICAgWVlTVFlQRSAqIHl5bHZhbF9yOwor
CisgICAgfTsgLyogZW5kIHN0cnVjdCB5eWd1dHNfdCAqLworCitzdGF0aWMgaW50IHl5X2luaXRf
Z2xvYmFscyAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKKyAgICAvKiBUaGlzIG11c3QgZ28gaGVy
ZSBiZWNhdXNlIFlZU1RZUEUgYW5kIFlZTFRZUEUgYXJlIGluY2x1ZGVkCisgICAgICogZnJvbSBi
aXNvbiBvdXRwdXQgaW4gc2VjdGlvbiAxLiovCisgICAgIyAgICBkZWZpbmUgeXlsdmFsIHl5Zy0+
eXlsdmFsX3IKKyAgICAKK2ludCB5eWxleF9pbml0ICh5eXNjYW5fdCogc2Nhbm5lcik7CisKK2lu
dCB5eWxleF9pbml0X2V4dHJhIChZWV9FWFRSQV9UWVBFIHVzZXJfZGVmaW5lZCx5eXNjYW5fdCog
c2Nhbm5lcik7CisKKy8qIEFjY2Vzc29yIG1ldGhvZHMgdG8gZ2xvYmFscy4KKyAgIFRoZXNlIGFy
ZSBtYWRlIHZpc2libGUgdG8gbm9uLXJlZW50cmFudCBzY2FubmVycyBmb3IgY29udmVuaWVuY2Uu
ICovCisKK2ludCB5eWxleF9kZXN0cm95ICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworaW50IHl5
Z2V0X2RlYnVnICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9kZWJ1ZyAoaW50
IGRlYnVnX2ZsYWcgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitZWV9FWFRSQV9UWVBFIHl5Z2V0
X2V4dHJhICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9leHRyYSAoWVlfRVhU
UkFfVFlQRSB1c2VyX2RlZmluZWQgLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCitGSUxFICp5eWdl
dF9pbiAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK3ZvaWQgeXlzZXRfaW4gIChGSUxFICogaW5f
c3RyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworRklMRSAqeXlnZXRfb3V0ICh5eXNjYW5fdCB5
eXNjYW5uZXIgKTsKKwordm9pZCB5eXNldF9vdXQgIChGSUxFICogb3V0X3N0ciAseXlzY2FuX3Qg
eXlzY2FubmVyICk7CisKK2ludCB5eWdldF9sZW5nICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKwor
Y2hhciAqeXlnZXRfdGV4dCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisKK2ludCB5eWdldF9saW5l
bm8gKHl5c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHl5c2V0X2xpbmVubyAoaW50IGxpbmVf
bnVtYmVyICx5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKworWVlTVFlQRSAqIHl5Z2V0X2x2YWwgKHl5
c2Nhbl90IHl5c2Nhbm5lciApOworCit2b2lkIHl5c2V0X2x2YWwgKFlZU1RZUEUgKiB5eWx2YWxf
cGFyYW0gLHl5c2Nhbl90IHl5c2Nhbm5lciApOworCisvKiBNYWNyb3MgYWZ0ZXIgdGhpcyBwb2lu
dCBjYW4gYWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNlciBkZWZpbml0aW9ucyBpbgorICogc2VjdGlv
biAxLgorICovCisKKyNpZm5kZWYgWVlfU0tJUF9ZWVdSQVAKKyNpZmRlZiBfX2NwbHVzcGx1cwor
ZXh0ZXJuICJDIiBpbnQgeXl3cmFwICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyNlbHNlCitleHRl
cm4gaW50IHl5d3JhcCAoeXlzY2FuX3QgeXlzY2FubmVyICk7CisjZW5kaWYKKyNlbmRpZgorCisj
aWZuZGVmIHl5dGV4dF9wdHIKK3N0YXRpYyB2b2lkIHl5X2ZsZXhfc3RybmNweSAoY2hhciAqLHl5
Y29uc3QgY2hhciAqLGludCAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyNlbmRpZgorCisjaWZkZWYg
WVlfTkVFRF9TVFJMRU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAq
ICx5eXNjYW5fdCB5eXNjYW5uZXIpOworI2VuZGlmCisKKyNpZm5kZWYgWVlfTk9fSU5QVVQKKwor
I2lmZGVmIF9fY3BsdXNwbHVzCitzdGF0aWMgaW50IHl5aW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5l
ciApOworI2Vsc2UKK3N0YXRpYyBpbnQgaW5wdXQgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworI2Vu
ZGlmCisKKyNlbmRpZgorCisgICAgc3RhdGljIHZvaWQgeXlfcHVzaF9zdGF0ZSAoaW50IG5ld19z
dGF0ZSAseXlzY2FuX3QgeXlzY2FubmVyKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCB5eV9wb3Bf
c3RhdGUgKHl5c2Nhbl90IHl5c2Nhbm5lciApOworICAgIAorICAgIHN0YXRpYyBpbnQgeXlfdG9w
X3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIgKTsKKyAgICAKKy8qIEFtb3VudCBvZiBzdHVmZiB0
byBzbHVycCB1cCB3aXRoIGVhY2ggcmVhZC4gKi8KKyNpZm5kZWYgWVlfUkVBRF9CVUZfU0laRQor
I2RlZmluZSBZWV9SRUFEX0JVRl9TSVpFIDgxOTIKKyNlbmRpZgorCisvKiBDb3B5IHdoYXRldmVy
IHRoZSBsYXN0IHJ1bGUgbWF0Y2hlZCB0byB0aGUgc3RhbmRhcmQgb3V0cHV0LiAqLworI2lmbmRl
ZiBFQ0hPCisvKiBUaGlzIHVzZWQgdG8gYmUgYW4gZnB1dHMoKSwgYnV0IHNpbmNlIHRoZSBzdHJp
bmcgbWlnaHQgY29udGFpbiBOVUwncywKKyAqIHdlIG5vdyB1c2UgZndyaXRlKCkuCisgKi8KKyNk
ZWZpbmUgRUNITyBmd3JpdGUoIHl5dGV4dCwgeXlsZW5nLCAxLCB5eW91dCApCisjZW5kaWYKKwor
LyogR2V0cyBpbnB1dCBhbmQgc3R1ZmZzIGl0IGludG8gImJ1ZiIuICBudW1iZXIgb2YgY2hhcmFj
dGVycyByZWFkLCBvciBZWV9OVUxMLAorICogaXMgcmV0dXJuZWQgaW4gInJlc3VsdCIuCisgKi8K
KyNpZm5kZWYgWVlfSU5QVVQKKyNkZWZpbmUgWVlfSU5QVVQoYnVmLHJlc3VsdCxtYXhfc2l6ZSkg
XAorCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9pc19pbnRlcmFjdGl2ZSApIFwK
KwkJeyBcCisJCWludCBjID0gJyonOyBcCisJCWludCBuOyBcCisJCWZvciAoIG4gPSAwOyBuIDwg
bWF4X3NpemUgJiYgXAorCQkJICAgICAoYyA9IGdldGMoIHl5aW4gKSkgIT0gRU9GICYmIGMgIT0g
J1xuJzsgKytuICkgXAorCQkJYnVmW25dID0gKGNoYXIpIGM7IFwKKwkJaWYgKCBjID09ICdcbicg
KSBcCisJCQlidWZbbisrXSA9IChjaGFyKSBjOyBcCisJCWlmICggYyA9PSBFT0YgJiYgZmVycm9y
KCB5eWluICkgKSBcCisJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBm
YWlsZWQiICk7IFwKKwkJcmVzdWx0ID0gbjsgXAorCQl9IFwKKwllbHNlIFwKKwkJeyBcCisJCWVy
cm5vPTA7IFwKKwkJd2hpbGUgKCAocmVzdWx0ID0gZnJlYWQoYnVmLCAxLCBtYXhfc2l6ZSwgeXlp
bikpPT0wICYmIGZlcnJvcih5eWluKSkgXAorCQkJeyBcCisJCQlpZiggZXJybm8gIT0gRUlOVFIp
IFwKKwkJCQl7IFwKKwkJCQlZWV9GQVRBTF9FUlJPUiggImlucHV0IGluIGZsZXggc2Nhbm5lciBm
YWlsZWQiICk7IFwKKwkJCQlicmVhazsgXAorCQkJCX0gXAorCQkJZXJybm89MDsgXAorCQkJY2xl
YXJlcnIoeXlpbik7IFwKKwkJCX0gXAorCQl9XAorXAorCisjZW5kaWYKKworLyogTm8gc2VtaS1j
b2xvbiBhZnRlciByZXR1cm47IGNvcnJlY3QgdXNhZ2UgaXMgdG8gd3JpdGUgInl5dGVybWluYXRl
KCk7IiAtCisgKiB3ZSBkb24ndCB3YW50IGFuIGV4dHJhICc7JyBhZnRlciB0aGUgInJldHVybiIg
YmVjYXVzZSB0aGF0IHdpbGwgY2F1c2UKKyAqIHNvbWUgY29tcGlsZXJzIHRvIGNvbXBsYWluIGFi
b3V0IHVucmVhY2hhYmxlIHN0YXRlbWVudHMuCisgKi8KKyNpZm5kZWYgeXl0ZXJtaW5hdGUKKyNk
ZWZpbmUgeXl0ZXJtaW5hdGUoKSByZXR1cm4gWVlfTlVMTAorI2VuZGlmCisKKy8qIE51bWJlciBv
ZiBlbnRyaWVzIGJ5IHdoaWNoIHN0YXJ0LWNvbmRpdGlvbiBzdGFjayBncm93cy4gKi8KKyNpZm5k
ZWYgWVlfU1RBUlRfU1RBQ0tfSU5DUgorI2RlZmluZSBZWV9TVEFSVF9TVEFDS19JTkNSIDI1Cisj
ZW5kaWYKKworLyogUmVwb3J0IGEgZmF0YWwgZXJyb3IuICovCisjaWZuZGVmIFlZX0ZBVEFMX0VS
Uk9SCisjZGVmaW5lIFlZX0ZBVEFMX0VSUk9SKG1zZykgeXlfZmF0YWxfZXJyb3IoIG1zZyAsIHl5
c2Nhbm5lcikKKyNlbmRpZgorCisvKiBlbmQgdGFibGVzIHNlcmlhbGl6YXRpb24gc3RydWN0dXJl
cyBhbmQgcHJvdG90eXBlcyAqLworCisvKiBEZWZhdWx0IGRlY2xhcmF0aW9uIG9mIGdlbmVyYXRl
ZCBzY2FubmVyIC0gYSBkZWZpbmUgc28gdGhlIHVzZXIgY2FuCisgKiBlYXNpbHkgYWRkIHBhcmFt
ZXRlcnMuCisgKi8KKyNpZm5kZWYgWVlfREVDTAorI2RlZmluZSBZWV9ERUNMX0lTX09VUlMgMQor
CitleHRlcm4gaW50IHl5bGV4IFwKKyAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3Bh
cmFtICx5eXNjYW5fdCB5eXNjYW5uZXIpOworCisjZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4IFwK
KyAgICAgICAgICAgICAgIChZWVNUWVBFICogeXlsdmFsX3BhcmFtICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQorI2VuZGlmIC8qICFZWV9ERUNMICovCisKKy8qIENvZGUgZXhlY3V0ZWQgYXQgdGhlIGJl
Z2lubmluZyBvZiBlYWNoIHJ1bGUsIGFmdGVyIHl5dGV4dCBhbmQgeXlsZW5nCisgKiBoYXZlIGJl
ZW4gc2V0IHVwLgorICovCisjaWZuZGVmIFlZX1VTRVJfQUNUSU9OCisjZGVmaW5lIFlZX1VTRVJf
QUNUSU9OCisjZW5kaWYKKworLyogQ29kZSBleGVjdXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcnVs
ZS4gKi8KKyNpZm5kZWYgWVlfQlJFQUsKKyNkZWZpbmUgWVlfQlJFQUsgYnJlYWs7CisjZW5kaWYK
KworI2RlZmluZSBZWV9SVUxFX1NFVFVQIFwKKwlZWV9VU0VSX0FDVElPTgorCisvKiogVGhlIG1h
aW4gc2Nhbm5lciBmdW5jdGlvbiB3aGljaCBkb2VzIGFsbCB0aGUgd29yay4KKyAqLworWVlfREVD
TAoreworCXJlZ2lzdGVyIHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZTsKKwlyZWdpc3Rl
ciBjaGFyICp5eV9jcCwgKnl5X2JwOworCXJlZ2lzdGVyIGludCB5eV9hY3Q7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgVFBh
cnNlQ29udGV4dCogY29udGV4dCA9IHl5ZXh0cmE7CisKKyAgICAvKiBTaW5nbGUtbGluZSBjb21t
ZW50cyAqLworCisgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOworCisJaWYgKCAheXlnLT55eV9p
bml0ICkKKwkJeworCQl5eWctPnl5X2luaXQgPSAxOworCisjaWZkZWYgWVlfVVNFUl9JTklUCisJ
CVlZX1VTRVJfSU5JVDsKKyNlbmRpZgorCisJCWlmICggISB5eWctPnl5X3N0YXJ0ICkKKwkJCXl5
Zy0+eXlfc3RhcnQgPSAxOwkvKiBmaXJzdCBzdGFydCBzdGF0ZSAqLworCisJCWlmICggISB5eWlu
ICkKKwkJCXl5aW4gPSBzdGRpbjsKKworCQlpZiAoICEgeXlvdXQgKQorCQkJeXlvdXQgPSBzdGRv
dXQ7CisKKwkJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICkgeworCQkJeXllbnN1cmVfYnVmZmVy
X3N0YWNrICh5eXNjYW5uZXIpOworCQkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFID0KKwkJCQl5
eV9jcmVhdGVfYnVmZmVyKHl5aW4sWVlfQlVGX1NJWkUgLHl5c2Nhbm5lcik7CisJCX0KKworCQl5
eV9sb2FkX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIgKTsKKwkJfQorCisJd2hpbGUgKCAxICkJCS8q
IGxvb3BzIHVudGlsIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQgKi8KKwkJeworCQl5eV9jcCA9IHl5
Zy0+eXlfY19idWZfcDsKKworCQkvKiBTdXBwb3J0IG9mIHl5dGV4dC4gKi8KKwkJKnl5X2NwID0g
eXlnLT55eV9ob2xkX2NoYXI7CisKKwkJLyogeXlfYnAgcG9pbnRzIHRvIHRoZSBwb3NpdGlvbiBp
biB5eV9jaF9idWYgb2YgdGhlIHN0YXJ0IG9mCisJCSAqIHRoZSBjdXJyZW50IHJ1bi4KKwkJICov
CisJCXl5X2JwID0geXlfY3A7CisKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfc3RhcnQ7
Cit5eV9tYXRjaDoKKwkJZG8KKwkJCXsKKwkJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9IHl5X2Vj
W1lZX1NDX1RPX1VJKCp5eV9jcCldOworCQkJaWYgKCB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0
ZV0gKQorCQkJCXsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVu
dF9zdGF0ZTsKKwkJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX2Nwb3MgPSB5eV9jcDsKKwkJCQl9
CisJCQl3aGlsZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0g
eXlfY3VycmVudF9zdGF0ZSApCisJCQkJeworCQkJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50KSB5
eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQx
MSApCisJCQkJCXl5X2MgPSB5eV9tZXRhWyh1bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJCX0KKwkJ
CXl5X2N1cnJlbnRfc3RhdGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1
bnNpZ25lZCBpbnQpIHl5X2NdOworCQkJKyt5eV9jcDsKKwkJCX0KKwkJd2hpbGUgKCB5eV9jdXJy
ZW50X3N0YXRlICE9IDQxMCApOworCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3Bv
czsKKwkJeXlfY3VycmVudF9zdGF0ZSA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisK
K3l5X2ZpbmRfYWN0aW9uOgorCQl5eV9hY3QgPSB5eV9hY2NlcHRbeXlfY3VycmVudF9zdGF0ZV07
CisKKwkJWVlfRE9fQkVGT1JFX0FDVElPTjsKKworCQlpZiAoIHl5X2FjdCAhPSBZWV9FTkRfT0Zf
QlVGRkVSICYmIHl5X3J1bGVfY2FuX21hdGNoX2VvbFt5eV9hY3RdICkKKwkJCXsKKwkJCWludCB5
eWw7CisJCQlmb3IgKCB5eWwgPSAwOyB5eWwgPCB5eWxlbmc7ICsreXlsICkKKwkJCQlpZiAoIHl5
dGV4dFt5eWxdID09ICdcbicgKQorCQkJCQkgICAKKyAgICBkb3sgeXlsaW5lbm8rKzsKKyAgICAg
ICAgeXljb2x1bW49MDsKKyAgICB9d2hpbGUoMCkKKzsKKwkJCX0KKworZG9fYWN0aW9uOgkvKiBU
aGlzIGxhYmVsIGlzIHVzZWQgb25seSB0byBhY2Nlc3MgRU9GIGFjdGlvbnMuICovCisKKwkJc3dp
dGNoICggeXlfYWN0ICkKKwl7IC8qIGJlZ2lubmluZyBvZiBhY3Rpb24gc3dpdGNoICovCisJCQlj
YXNlIDA6IC8qIG11c3QgYmFjayB1cCAqLworCQkJLyogdW5kbyB0aGUgZWZmZWN0cyBvZiBZWV9E
T19CRUZPUkVfQUNUSU9OICovCisJCQkqeXlfY3AgPSB5eWctPnl5X2hvbGRfY2hhcjsKKwkJCXl5
X2NwID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19jcG9zOworCQkJeXlfY3VycmVudF9zdGF0ZSA9
IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfc3RhdGU7CisJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOwor
CitjYXNlIDE6CitZWV9SVUxFX1NFVFVQCis7CisJWVlfQlJFQUsKKy8qIE11bHRpLWxpbmUgY29t
bWVudHMgKi8KK2Nhc2UgMjoKK1lZX1JVTEVfU0VUVVAKK3sgeXlfcHVzaF9zdGF0ZShDT01NRU5U
LCB5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzoKK2Nhc2UgNDoKKy8qIHJ1bGUgNCBj
YW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQCis7CisJWVlfQlJFQUsKK2Nhc2UgNToKK1lZ
X1JVTEVfU0VUVVAKK3sgeXlfcG9wX3N0YXRlKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2Fz
ZSA2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4oSU5WQVJJQU5UKTsgfQorCVlZX0JSRUFLCitj
YXNlIDc6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybihISUdIX1BSRUNJU0lPTik7IH0KKwlZWV9C
UkVBSworY2FzZSA4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4oTUVESVVNX1BSRUNJU0lPTik7
IH0KKwlZWV9CUkVBSworY2FzZSA5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4oTE9XX1BSRUNJ
U0lPTik7IH0KKwlZWV9CUkVBSworY2FzZSAxMDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuKFBS
RUNJU0lPTik7IH0KKwlZWV9CUkVBSworY2FzZSAxMToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
KEFUVFJJQlVURSk7IH0KKwlZWV9CUkVBSworY2FzZSAxMjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuKENPTlNUX1FVQUwpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM6CitZWV9SVUxFX1NFVFVQCit7
IHJldHVybihVTklGT1JNKTsgfQorCVlZX0JSRUFLCitjYXNlIDE0OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4oVkFSWUlORyk7IH0KKwlZWV9CUkVBSworY2FzZSAxNToKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuKEJSRUFLKTsgfQorCVlZX0JSRUFLCitjYXNlIDE2OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4oQ09OVElOVUUpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTc6CitZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybihETyk7IH0KKwlZWV9CUkVBSworY2FzZSAxODoKK1lZX1JVTEVfU0VUVVAKK3sg
cmV0dXJuKEZPUik7IH0KKwlZWV9CUkVBSworY2FzZSAxOToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuKFdISUxFKTsgfQorCVlZX0JSRUFLCitjYXNlIDIwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1
cm4oSUYpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMjE6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybihF
TFNFKTsgfQorCVlZX0JSRUFLCitjYXNlIDIyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4oSU5f
UVVBTCk7IH0KKwlZWV9CUkVBSworY2FzZSAyMzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuKE9V
VF9RVUFMKTsgfQorCVlZX0JSRUFLCitjYXNlIDI0OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4o
SU5PVVRfUVVBTCk7IH0KKwlZWV9CUkVBSworY2FzZSAyNToKK1lZX1JVTEVfU0VUVVAKK3sgY29u
dGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKEZMT0FUX1RZUEUpOyB9CisJWVlfQlJF
QUsKK2Nhc2UgMjY6CitZWV9SVUxFX1NFVFVQCit7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IHRy
dWU7IHJldHVybihJTlRfVFlQRSk7IH0KKwlZWV9CUkVBSworY2FzZSAyNzoKK1lZX1JVTEVfU0VU
VVAKK3sgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKFZPSURfVFlQRSk7IH0K
KwlZWV9CUkVBSworY2FzZSAyODoKK1lZX1JVTEVfU0VUVVAKK3sgY29udGV4dC0+bGV4QWZ0ZXJU
eXBlID0gdHJ1ZTsgcmV0dXJuKEJPT0xfVFlQRSk7IH0KKwlZWV9CUkVBSworY2FzZSAyOToKK1lZ
X1JVTEVfU0VUVVAKK3sgeXlsdmFsLT5sZXguYiA9IHRydWU7ICByZXR1cm4oQk9PTENPTlNUQU5U
KTsgfQorCVlZX0JSRUFLCitjYXNlIDMwOgorWVlfUlVMRV9TRVRVUAoreyB5eWx2YWwtPmxleC5i
ID0gZmFsc2U7IHJldHVybihCT09MQ09OU1RBTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMzE6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybihESVNDQVJEKTsgfQorCVlZX0JSRUFLCitjYXNlIDMyOgor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4oUkVUVVJOKTsgfQorCVlZX0JSRUFLCitjYXNlIDMzOgor
WVlfUlVMRV9TRVRVUAoreyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oTUFU
UklYMik7IH0KKwlZWV9CUkVBSworY2FzZSAzNDoKK1lZX1JVTEVfU0VUVVAKK3sgY29udGV4dC0+
bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKE1BVFJJWDMpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
MzU6CitZWV9SVUxFX1NFVFVQCit7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVy
bihNQVRSSVg0KTsgfQorCVlZX0JSRUFLCitjYXNlIDM2OgorWVlfUlVMRV9TRVRVUAoreyBjb250
ZXh0LT5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKFZFQzIpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMzc6CitZWV9SVUxFX1NFVFVQCit7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IHRydWU7IHJl
dHVybiAoVkVDMyk7IH0KKwlZWV9CUkVBSworY2FzZSAzODoKK1lZX1JVTEVfU0VUVVAKK3sgY29u
dGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChWRUM0KTsgfQorCVlZX0JSRUFLCitj
YXNlIDM5OgorWVlfUlVMRV9TRVRVUAoreyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSB0cnVlOyBy
ZXR1cm4gKElWRUMyKTsgfQorCVlZX0JSRUFLCitjYXNlIDQwOgorWVlfUlVMRV9TRVRVUAoreyBj
b250ZXh0LT5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKElWRUMzKTsgfQorCVlZX0JSRUFL
CitjYXNlIDQxOgorWVlfUlVMRV9TRVRVUAoreyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSB0cnVl
OyByZXR1cm4gKElWRUM0KTsgfQorCVlZX0JSRUFLCitjYXNlIDQyOgorWVlfUlVMRV9TRVRVUAor
eyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKEJWRUMyKTsgfQorCVlZX0JS
RUFLCitjYXNlIDQzOgorWVlfUlVMRV9TRVRVUAoreyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSB0
cnVlOyByZXR1cm4gKEJWRUMzKTsgfQorCVlZX0JSRUFLCitjYXNlIDQ0OgorWVlfUlVMRV9TRVRV
UAoreyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKEJWRUM0KTsgfQorCVlZ
X0JSRUFLCitjYXNlIDQ1OgorWVlfUlVMRV9TRVRVUAoreyBjb250ZXh0LT5sZXhBZnRlclR5cGUg
PSB0cnVlOyByZXR1cm4gU0FNUExFUjJEOyB9CisJWVlfQlJFQUsKK2Nhc2UgNDY6CitZWV9SVUxF
X1NFVFVQCit7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiBTQU1QTEVSQ1VC
RTsgfQorCVlZX0JSRUFLCitjYXNlIDQ3OgorWVlfUlVMRV9TRVRVUAoreyBjb250ZXh0LT5sZXhB
ZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oU1RSVUNUKTsgfQorCVlZX0JSRUFLCitjYXNlIDQ4Ogor
WVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlf
QlJFQUsKK2Nhc2UgNDk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA1MDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJu
IHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDUxOgorWVlfUlVM
RV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsK
K2Nhc2UgNTI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5l
cik7IH0KKwlZWV9CUkVBSworY2FzZSA1MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2Vy
dmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDU0OgorWVlfUlVMRV9TRVRV
UAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2Ug
NTU6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KwlZWV9CUkVBSworY2FzZSA1NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dv
cmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDU3OgorWVlfUlVMRV9TRVRVUAoreyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNTg6CitZ
WV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9C
UkVBSworY2FzZSA1OToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDYwOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjE6CitZWV9SVUxF
X1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSwor
Y2FzZSA2MjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorCVlZX0JSRUFLCitjYXNlIDYzOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjQ6CitZWV9SVUxFX1NFVFVQ
Cit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA2
NToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
CVlZX0JSRUFLCitjYXNlIDY2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNjc6CitZWV9SVUxFX1NFVFVQCit7IHJl
dHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA2ODoKK1lZ
X1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JS
RUFLCitjYXNlIDY5OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNj
YW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgNzA6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiBy
ZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3MToKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitj
YXNlIDcyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisJWVlfQlJFQUsKK2Nhc2UgNzM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZl
ZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3NDoKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDc1
OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJ
WVlfQlJFQUsKK2Nhc2UgNzY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA3NzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDc4OgorWVlf
UlVMRV9TRVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJF
QUsKK2Nhc2UgNzk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nh
bm5lcik7IH0KKwlZWV9CUkVBSworY2FzZSA4MDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDgxOgorWVlfUlVMRV9T
RVRVUAoreyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nh
c2UgODI6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKwlZWV9CUkVBSworY2FzZSA4MzoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVk
X3dvcmQoeXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDg0OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgODU6
CitZWV9SVUxFX1NFVFVQCit7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKwlZ
WV9CUkVBSworY2FzZSA4NjoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuIHJlc2VydmVkX3dvcmQo
eXlzY2FubmVyKTsgfQorCVlZX0JSRUFLCitjYXNlIDg3OgorWVlfUlVMRV9TRVRVUAoreyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisJWVlfQlJFQUsKK2Nhc2UgODg6CitZWV9S
VUxFX1NFVFVQCit7CisgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRl
eHQpOyAKKyAgIHJldHVybiBjaGVja190eXBlKHl5c2Nhbm5lcik7Cit9CisJWVlfQlJFQUsKK2Nh
c2UgODk6CitZWV9SVUxFX1NFVFVQCit7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0LCAw
LCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQorCVlZX0JSRUFLCitjYXNlIDkwOgorWVlfUlVM
RV9TRVRVUAoreyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJ
TlRDT05TVEFOVCk7IH0KKwlZWV9CUkVBSworY2FzZSA5MToKK1lZX1JVTEVfU0VUVVAKK3sgY29u
dGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJJbnZhbGlkIE9jdGFsIG51bWJlci4iLCB5eXRleHQsICIi
LCAiIik7IGNvbnRleHQtPnJlY292ZXIoKTsgcmV0dXJuIDA7fQorCVlZX0JSRUFLCitjYXNlIDky
OgorWVlfUlVMRV9TRVRVUAoreyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7
IHJldHVybihJTlRDT05TVEFOVCk7IH0KKwlZWV9CUkVBSworY2FzZSA5MzoKK1lZX1JVTEVfU0VU
VVAKK3sgeXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQp
KTsgcmV0dXJuKEZMT0FUQ09OU1RBTlQpOyB9CisJWVlfQlJFQUsKK2Nhc2UgOTQ6CitZWV9SVUxF
X1NFVFVQCit7IHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZl9kb3QoeXl0
ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQorCVlZX0JSRUFLCitjYXNlIDk1OgorWVlf
UlVMRV9TRVRVUAoreyB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2ZfZG90
KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KKwlZWV9CUkVBSworY2FzZSA5NjoK
K1lZX1JVTEVfU0VUVVAKK3sgIHJldHVybihBRERfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNl
IDk3OgorWVlfUlVMRV9TRVRVUAoreyAgcmV0dXJuKFNVQl9BU1NJR04pOyB9CisJWVlfQlJFQUsK
K2Nhc2UgOTg6CitZWV9SVUxFX1NFVFVQCit7ICByZXR1cm4oTVVMX0FTU0lHTik7IH0KKwlZWV9C
UkVBSworY2FzZSA5OToKK1lZX1JVTEVfU0VUVVAKK3sgIHJldHVybihESVZfQVNTSUdOKTsgfQor
CVlZX0JSRUFLCitjYXNlIDEwMDoKK1lZX1JVTEVfU0VUVVAKK3sgIHJldHVybihNT0RfQVNTSUdO
KTsgfQorCVlZX0JSRUFLCitjYXNlIDEwMToKK1lZX1JVTEVfU0VUVVAKK3sgIHJldHVybihMRUZU
X0FTU0lHTik7IH0KKwlZWV9CUkVBSworY2FzZSAxMDI6CitZWV9SVUxFX1NFVFVQCit7ICByZXR1
cm4oUklHSFRfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwMzoKK1lZX1JVTEVfU0VUVVAK
K3sgIHJldHVybihBTkRfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwNDoKK1lZX1JVTEVf
U0VUVVAKK3sgIHJldHVybihYT1JfQVNTSUdOKTsgfQorCVlZX0JSRUFLCitjYXNlIDEwNToKK1lZ
X1JVTEVfU0VUVVAKK3sgIHJldHVybihPUl9BU1NJR04pOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTA2
OgorWVlfUlVMRV9TRVRVUAoreyAgcmV0dXJuKElOQ19PUCk7IH0KKwlZWV9CUkVBSworY2FzZSAx
MDc6CitZWV9SVUxFX1NFVFVQCit7ICByZXR1cm4oREVDX09QKTsgfQorCVlZX0JSRUFLCitjYXNl
IDEwODoKK1lZX1JVTEVfU0VUVVAKK3sgIHJldHVybihBTkRfT1ApOyB9CisJWVlfQlJFQUsKK2Nh
c2UgMTA5OgorWVlfUlVMRV9TRVRVUAoreyAgcmV0dXJuKE9SX09QKTsgfQorCVlZX0JSRUFLCitj
YXNlIDExMDoKK1lZX1JVTEVfU0VUVVAKK3sgIHJldHVybihYT1JfT1ApOyB9CisJWVlfQlJFQUsK
K2Nhc2UgMTExOgorWVlfUlVMRV9TRVRVUAoreyAgcmV0dXJuKExFX09QKTsgfQorCVlZX0JSRUFL
CitjYXNlIDExMjoKK1lZX1JVTEVfU0VUVVAKK3sgIHJldHVybihHRV9PUCk7IH0KKwlZWV9CUkVB
SworY2FzZSAxMTM6CitZWV9SVUxFX1NFVFVQCit7ICByZXR1cm4oRVFfT1ApOyB9CisJWVlfQlJF
QUsKK2Nhc2UgMTE0OgorWVlfUlVMRV9TRVRVUAoreyAgcmV0dXJuKE5FX09QKTsgfQorCVlZX0JS
RUFLCitjYXNlIDExNToKK1lZX1JVTEVfU0VUVVAKK3sgIHJldHVybihMRUZUX09QKTsgfQorCVlZ
X0JSRUFLCitjYXNlIDExNjoKK1lZX1JVTEVfU0VUVVAKK3sgIHJldHVybihSSUdIVF9PUCk7IH0K
KwlZWV9CUkVBSworY2FzZSAxMTc6CitZWV9SVUxFX1NFVFVQCit7IGNvbnRleHQtPmxleEFmdGVy
VHlwZSA9IGZhbHNlOyByZXR1cm4oU0VNSUNPTE9OKTsgfQorCVlZX0JSRUFLCitjYXNlIDExODoK
K1lZX1JVTEVfU0VUVVAKK3sgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihM
RUZUX0JSQUNFKTsgfQorCVlZX0JSRUFLCitjYXNlIDExOToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0
dXJuKFJJR0hUX0JSQUNFKTsgfQorCVlZX0JSRUFLCitjYXNlIDEyMDoKK1lZX1JVTEVfU0VUVVAK
K3sgaWYgKGNvbnRleHQtPmluVHlwZVBhcmVuKSBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxz
ZTsgcmV0dXJuKENPTU1BKTsgfQorCVlZX0JSRUFLCitjYXNlIDEyMToKK1lZX1JVTEVfU0VUVVAK
K3sgcmV0dXJuKENPTE9OKTsgfQorCVlZX0JSRUFLCitjYXNlIDEyMjoKK1lZX1JVTEVfU0VUVVAK
K3sgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihFUVVBTCk7IH0KKwlZWV9C
UkVBSworY2FzZSAxMjM6CitZWV9SVUxFX1NFVFVQCit7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9
IGZhbHNlOyBjb250ZXh0LT5pblR5cGVQYXJlbiA9IHRydWU7IHJldHVybihMRUZUX1BBUkVOKTsg
fQorCVlZX0JSRUFLCitjYXNlIDEyNDoKK1lZX1JVTEVfU0VUVVAKK3sgY29udGV4dC0+aW5UeXBl
UGFyZW4gPSBmYWxzZTsgcmV0dXJuKFJJR0hUX1BBUkVOKTsgfQorCVlZX0JSRUFLCitjYXNlIDEy
NToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuKExFRlRfQlJBQ0tFVCk7IH0KKwlZWV9CUkVBSwor
Y2FzZSAxMjY6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybihSSUdIVF9CUkFDS0VUKTsgfQorCVlZ
X0JSRUFLCitjYXNlIDEyNzoKK1lZX1JVTEVfU0VUVVAKK3sgQkVHSU4oRklFTERTKTsgIHJldHVy
bihET1QpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTI4OgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4o
QkFORyk7IH0KKwlZWV9CUkVBSworY2FzZSAxMjk6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybihE
QVNIKTsgfQorCVlZX0JSRUFLCitjYXNlIDEzMDoKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuKFRJ
TERFKTsgfQorCVlZX0JSRUFLCitjYXNlIDEzMToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuKFBM
VVMpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTMyOgorWVlfUlVMRV9TRVRVUAoreyByZXR1cm4oU1RB
Uik7IH0KKwlZWV9CUkVBSworY2FzZSAxMzM6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybihTTEFT
SCk7IH0KKwlZWV9CUkVBSworY2FzZSAxMzQ6CitZWV9SVUxFX1NFVFVQCit7IHJldHVybihQRVJD
RU5UKTsgfQorCVlZX0JSRUFLCitjYXNlIDEzNToKK1lZX1JVTEVfU0VUVVAKK3sgcmV0dXJuKExF
RlRfQU5HTEUpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM2OgorWVlfUlVMRV9TRVRVUAoreyByZXR1
cm4oUklHSFRfQU5HTEUpOyB9CisJWVlfQlJFQUsKK2Nhc2UgMTM3OgorWVlfUlVMRV9TRVRVUAor
eyByZXR1cm4oVkVSVElDQUxfQkFSKTsgfQorCVlZX0JSRUFLCitjYXNlIDEzODoKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuKENBUkVUKTsgfQorCVlZX0JSRUFLCitjYXNlIDEzOToKK1lZX1JVTEVf
U0VUVVAKK3sgcmV0dXJuKEFNUEVSU0FORCk7IH0KKwlZWV9CUkVBSworY2FzZSAxNDA6CitZWV9S
VUxFX1NFVFVQCit7IHJldHVybihRVUVTVElPTik7IH0KKwlZWV9CUkVBSworY2FzZSAxNDE6CitZ
WV9SVUxFX1NFVFVQCit7IAorICAgIEJFR0lOKElOSVRJQUwpOworICAgIHl5bHZhbC0+bGV4LnN0
cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAorICAgIHJldHVybiBGSUVMRF9TRUxFQ1RJ
T047Cit9CisJWVlfQlJFQUsKK2Nhc2UgMTQyOgorWVlfUlVMRV9TRVRVUAore30KKwlZWV9CUkVB
SworY2FzZSAxNDM6CisvKiBydWxlIDE0MyBjYW4gbWF0Y2ggZW9sICovCitZWV9SVUxFX1NFVFVQ
Cit7ICB9CisJWVlfQlJFQUsKK2Nhc2UgWVlfU1RBVEVfRU9GKElOSVRJQUwpOgorY2FzZSBZWV9T
VEFURV9FT0YoQ09NTUVOVCk6CitjYXNlIFlZX1NUQVRFX0VPRihGSUVMRFMpOgoreyBjb250ZXh0
LT5BZnRlckVPRiA9IHRydWU7IHl5dGVybWluYXRlKCk7IH0KKwlZWV9CUkVBSworY2FzZSAxNDQ6
CitZWV9SVUxFX1NFVFVQCit7IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sICJVbmtub3duIGNo
YXIiLCB5eXRleHQsICIiKTsgcmV0dXJuIDA7IH0KKwlZWV9CUkVBSworY2FzZSAxNDU6CitZWV9S
VUxFX1NFVFVQCitFQ0hPOworCVlZX0JSRUFLCisKKwljYXNlIFlZX0VORF9PRl9CVUZGRVI6CisJ
CXsKKwkJLyogQW1vdW50IG9mIHRleHQgbWF0Y2hlZCBub3QgaW5jbHVkaW5nIHRoZSBFT0IgY2hh
ci4gKi8KKwkJaW50IHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQgPSAoaW50KSAoeXlfY3AgLSB5
eWctPnl5dGV4dF9wdHIpIC0gMTsKKworCQkvKiBVbmRvIHRoZSBlZmZlY3RzIG9mIFlZX0RPX0JF
Rk9SRV9BQ1RJT04uICovCisJCSp5eV9jcCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCQlZWV9SRVNU
T1JFX1lZX01PUkVfT0ZGU0VUCisKKwkJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2J1ZmZlcl9zdGF0dXMgPT0gWVlfQlVGRkVSX05FVyApCisJCQl7CisJCQkvKiBXZSdyZSBzY2Fu
bmluZyBhIG5ldyBmaWxlIG9yIGlucHV0IHNvdXJjZS4gIEl0J3MKKwkJCSAqIHBvc3NpYmxlIHRo
YXQgdGhpcyBoYXBwZW5lZCBiZWNhdXNlIHRoZSB1c2VyCisJCQkgKiBqdXN0IHBvaW50ZWQgeXlp
biBhdCBhIG5ldyBzb3VyY2UgYW5kIGNhbGxlZAorCQkJICogeXlsZXgoKS4gIElmIHNvLCB0aGVu
IHdlIGhhdmUgdG8gYXNzdXJlCisJCQkgKiBjb25zaXN0ZW5jeSBiZXR3ZWVuIFlZX0NVUlJFTlRf
QlVGRkVSIGFuZCBvdXIKKwkJCSAqIGdsb2JhbHMuICBIZXJlIGlzIHRoZSByaWdodCBwbGFjZSB0
byBkbyBzbywgYmVjYXVzZQorCQkJICogdGhpcyBpcyB0aGUgZmlyc3QgYWN0aW9uIChvdGhlciB0
aGFuIHBvc3NpYmx5IGEKKwkJCSAqIGJhY2stdXApIHRoYXQgd2lsbCBtYXRjaCBmb3IgdGhlIG5l
dyBpbnB1dCBzb3VyY2UuCisJCQkgKi8KKwkJCXl5Zy0+eXlfbl9jaGFycyA9IFlZX0NVUlJFTlRf
QlVGRkVSX0xWQUxVRS0+eXlfbl9jaGFyczsKKwkJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+
eXlfaW5wdXRfZmlsZSA9IHl5aW47CisJCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2J1
ZmZlcl9zdGF0dXMgPSBZWV9CVUZGRVJfTk9STUFMOworCQkJfQorCisJCS8qIE5vdGUgdGhhdCBo
ZXJlIHdlIHRlc3QgZm9yIHl5X2NfYnVmX3AgIjw9IiB0byB0aGUgcG9zaXRpb24KKwkJICogb2Yg
dGhlIGZpcnN0IEVPQiBpbiB0aGUgYnVmZmVyLCBzaW5jZSB5eV9jX2J1Zl9wIHdpbGwKKwkJICog
YWxyZWFkeSBoYXZlIGJlZW4gaW5jcmVtZW50ZWQgcGFzdCB0aGUgTlVMIGNoYXJhY3RlcgorCQkg
KiAoc2luY2UgYWxsIHN0YXRlcyBtYWtlIHRyYW5zaXRpb25zIG9uIEVPQiB0byB0aGUKKwkJICog
ZW5kLW9mLWJ1ZmZlciBzdGF0ZSkuICBDb250cmFzdCB0aGlzIHdpdGggdGhlIHRlc3QKKwkJICog
aW4gaW5wdXQoKS4KKwkJICovCisJCWlmICggeXlnLT55eV9jX2J1Zl9wIDw9ICZZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnNdICkKKwkJCXsgLyogVGhp
cyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJeXlfc3RhdGVfdHlwZSB5eV9uZXh0X3N0YXRlOwor
CisJCQl5eWctPnl5X2NfYnVmX3AgPSB5eWctPnl5dGV4dF9wdHIgKyB5eV9hbW91bnRfb2ZfbWF0
Y2hlZF90ZXh0OworCisJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRl
KCB5eXNjYW5uZXIgKTsKKworCQkJLyogT2theSwgd2UncmUgbm93IHBvc2l0aW9uZWQgdG8gbWFr
ZSB0aGUgTlVMCisJCQkgKiB0cmFuc2l0aW9uLiAgV2UgY291bGRuJ3QgaGF2ZQorCQkJICogeXlf
Z2V0X3ByZXZpb3VzX3N0YXRlKCkgZ28gYWhlYWQgYW5kIGRvIGl0CisJCQkgKiBmb3IgdXMgYmVj
YXVzZSBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlYWwKKwkJCSAqIHdpdGggdGhlIHBvc3NpYmls
aXR5IG9mIGphbW1pbmcgKGFuZCB3ZSBkb24ndAorCQkJICogd2FudCB0byBidWlsZCBqYW1taW5n
IGludG8gaXQgYmVjYXVzZSB0aGVuIGl0CisJCQkgKiB3aWxsIHJ1biBtb3JlIHNsb3dseSkuCisJ
CQkgKi8KKworCQkJeXlfbmV4dF9zdGF0ZSA9IHl5X3RyeV9OVUxfdHJhbnMoIHl5X2N1cnJlbnRf
c3RhdGUgLCB5eXNjYW5uZXIpOworCisJCQl5eV9icCA9IHl5Zy0+eXl0ZXh0X3B0ciArIFlZX01P
UkVfQURKOworCisJCQlpZiAoIHl5X25leHRfc3RhdGUgKQorCQkJCXsKKwkJCQkvKiBDb25zdW1l
IHRoZSBOVUwuICovCisJCQkJeXlfY3AgPSArK3l5Zy0+eXlfY19idWZfcDsKKwkJCQl5eV9jdXJy
ZW50X3N0YXRlID0geXlfbmV4dF9zdGF0ZTsKKwkJCQlnb3RvIHl5X21hdGNoOworCQkJCX0KKwor
CQkJZWxzZQorCQkJCXsKKwkJCQl5eV9jcCA9IHl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvczsK
KwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0ZTsKKwkJ
CQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJCX0KKwkJCX0KKworCQllbHNlIHN3aXRjaCAoIHl5
X2dldF9uZXh0X2J1ZmZlciggeXlzY2FubmVyICkgKQorCQkJeworCQkJY2FzZSBFT0JfQUNUX0VO
RF9PRl9GSUxFOgorCQkJCXsKKwkJCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29uX2VvZiA9
IDA7CisKKwkJCQlpZiAoIHl5d3JhcCh5eXNjYW5uZXIgKSApCisJCQkJCXsKKwkJCQkJLyogTm90
ZTogYmVjYXVzZSB3ZSd2ZSB0YWtlbiBjYXJlIGluCisJCQkJCSAqIHl5X2dldF9uZXh0X2J1ZmZl
cigpIHRvIGhhdmUgc2V0IHVwCisJCQkJCSAqIHl5dGV4dCwgd2UgY2FuIG5vdyBzZXQgdXAKKwkJ
CQkJICogeXlfY19idWZfcCBzbyB0aGF0IGlmIHNvbWUgdG90YWwKKwkJCQkJICogaG9zZXIgKGxp
a2UgZmxleCBpdHNlbGYpIHdhbnRzIHRvCisJCQkJCSAqIGNhbGwgdGhlIHNjYW5uZXIgYWZ0ZXIg
d2UgcmV0dXJuIHRoZQorCQkJCQkgKiBZWV9OVUxMLCBpdCdsbCBzdGlsbCB3b3JrIC0gYW5vdGhl
cgorCQkJCQkgKiBZWV9OVUxMIHdpbGwgZ2V0IHJldHVybmVkLgorCQkJCQkgKi8KKwkJCQkJeXln
LT55eV9jX2J1Zl9wID0geXlnLT55eXRleHRfcHRyICsgWVlfTU9SRV9BREo7CisKKwkJCQkJeXlf
YWN0ID0gWVlfU1RBVEVfRU9GKFlZX1NUQVJUKTsKKwkJCQkJZ290byBkb19hY3Rpb247CisJCQkJ
CX0KKworCQkJCWVsc2UKKwkJCQkJeworCQkJCQlpZiAoICEgeXlnLT55eV9kaWRfYnVmZmVyX3N3
aXRjaF9vbl9lb2YgKQorCQkJCQkJWVlfTkVXX0ZJTEU7CisJCQkJCX0KKwkJCQlicmVhazsKKwkJ
CQl9CisKKwkJCWNhc2UgRU9CX0FDVF9DT05USU5VRV9TQ0FOOgorCQkJCXl5Zy0+eXlfY19idWZf
cCA9CisJCQkJCXl5Zy0+eXl0ZXh0X3B0ciArIHl5X2Ftb3VudF9vZl9tYXRjaGVkX3RleHQ7CisK
KwkJCQl5eV9jdXJyZW50X3N0YXRlID0geXlfZ2V0X3ByZXZpb3VzX3N0YXRlKCB5eXNjYW5uZXIg
KTsKKworCQkJCXl5X2NwID0geXlnLT55eV9jX2J1Zl9wOworCQkJCXl5X2JwID0geXlnLT55eXRl
eHRfcHRyICsgWVlfTU9SRV9BREo7CisJCQkJZ290byB5eV9tYXRjaDsKKworCQkJY2FzZSBFT0Jf
QUNUX0xBU1RfTUFUQ0g6CisJCQkJeXlnLT55eV9jX2J1Zl9wID0KKwkJCQkmWVlfQ1VSUkVOVF9C
VUZGRVJfTFZBTFVFLT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXTsKKworCQkJCXl5X2N1cnJl
bnRfc3RhdGUgPSB5eV9nZXRfcHJldmlvdXNfc3RhdGUoIHl5c2Nhbm5lciApOworCisJCQkJeXlf
Y3AgPSB5eWctPnl5X2NfYnVmX3A7CisJCQkJeXlfYnAgPSB5eWctPnl5dGV4dF9wdHIgKyBZWV9N
T1JFX0FESjsKKwkJCQlnb3RvIHl5X2ZpbmRfYWN0aW9uOworCQkJfQorCQlicmVhazsKKwkJfQor
CisJZGVmYXVsdDoKKwkJWVlfRkFUQUxfRVJST1IoCisJCQkiZmF0YWwgZmxleCBzY2FubmVyIGlu
dGVybmFsIGVycm9yLS1ubyBhY3Rpb24gZm91bmQiICk7CisJfSAvKiBlbmQgb2YgYWN0aW9uIHN3
aXRjaCAqLworCQl9IC8qIGVuZCBvZiBzY2FubmluZyBvbmUgdG9rZW4gKi8KK30gLyogZW5kIG9m
IHl5bGV4ICovCisKKy8qIHl5X2dldF9uZXh0X2J1ZmZlciAtIHRyeSB0byByZWFkIGluIGEgbmV3
IGJ1ZmZlcgorICoKKyAqIFJldHVybnMgYSBjb2RlIHJlcHJlc2VudGluZyBhbiBhY3Rpb246Cisg
KglFT0JfQUNUX0xBU1RfTUFUQ0ggLQorICoJRU9CX0FDVF9DT05USU5VRV9TQ0FOIC0gY29udGlu
dWUgc2Nhbm5pbmcgZnJvbSBjdXJyZW50IHBvc2l0aW9uCisgKglFT0JfQUNUX0VORF9PRl9GSUxF
IC0gZW5kIG9mIGZpbGUKKyAqLworc3RhdGljIGludCB5eV9nZXRfbmV4dF9idWZmZXIgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190Kil5eXNjYW5uZXI7CisJcmVnaXN0ZXIgY2hhciAqZGVzdCA9IFlZX0NVUlJFTlRfQlVG
RkVSX0xWQUxVRS0+eXlfY2hfYnVmOworCXJlZ2lzdGVyIGNoYXIgKnNvdXJjZSA9IHl5Zy0+eXl0
ZXh0X3B0cjsKKwlyZWdpc3RlciBpbnQgbnVtYmVyX3RvX21vdmUsIGk7CisJaW50IHJldF92YWw7
CisKKwlpZiAoIHl5Zy0+eXlfY19idWZfcCA+ICZZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSApCisJCVlZX0ZBVEFMX0VSUk9SKAorCQkiZmF0
YWwgZmxleCBzY2FubmVyIGludGVybmFsIGVycm9yLS1lbmQgb2YgYnVmZmVyIG1pc3NlZCIgKTsK
KworCWlmICggWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9maWxsX2J1ZmZlciA9PSAwICkK
KwkJeyAvKiBEb24ndCB0cnkgdG8gZmlsbCB0aGUgYnVmZmVyLCBzbyB0aGlzIGlzIGFuIEVPRi4g
Ki8KKwkJaWYgKCB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHIgLSBZWV9NT1JFX0FE
SiA9PSAxICkKKwkJCXsKKwkJCS8qIFdlIG1hdGNoZWQgYSBzaW5nbGUgY2hhcmFjdGVyLCB0aGUg
RU9CLCBzbworCQkJICogdHJlYXQgdGhpcyBhcyBhIGZpbmFsIEVPRi4KKwkJCSAqLworCQkJcmV0
dXJuIEVPQl9BQ1RfRU5EX09GX0ZJTEU7CisJCQl9CisKKwkJZWxzZQorCQkJeworCQkJLyogV2Ug
bWF0Y2hlZCBzb21lIHRleHQgcHJpb3IgdG8gdGhlIEVPQiwgZmlyc3QKKwkJCSAqIHByb2Nlc3Mg
aXQuCisJCQkgKi8KKwkJCXJldHVybiBFT0JfQUNUX0xBU1RfTUFUQ0g7CisJCQl9CisJCX0KKwor
CS8qIFRyeSB0byByZWFkIG1vcmUgZGF0YS4gKi8KKworCS8qIEZpcnN0IG1vdmUgbGFzdCBjaGFy
cyB0byBzdGFydCBvZiBidWZmZXIuICovCisJbnVtYmVyX3RvX21vdmUgPSAoaW50KSAoeXlnLT55
eV9jX2J1Zl9wIC0geXlnLT55eXRleHRfcHRyKSAtIDE7CisKKwlmb3IgKCBpID0gMDsgaSA8IG51
bWJlcl90b19tb3ZlOyArK2kgKQorCQkqKGRlc3QrKykgPSAqKHNvdXJjZSsrKTsKKworCWlmICgg
WVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZmZXJfc3RhdHVzID09IFlZX0JVRkZFUl9F
T0ZfUEVORElORyApCisJCS8qIGRvbid0IGRvIHRoZSByZWFkLCBpdCdzIG5vdCBndWFyYW50ZWVk
IHRvIHJldHVybiBhbiBFT0YsCisJCSAqIGp1c3QgZm9yY2UgYW4gRU9GCisJCSAqLworCQlZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hhcnMgPSAwOwor
CisJZWxzZQorCQl7CisJCQlpbnQgbnVtX3RvX3JlYWQgPQorCQkJWVlfQ1VSUkVOVF9CVUZGRVJf
TFZBTFVFLT55eV9idWZfc2l6ZSAtIG51bWJlcl90b19tb3ZlIC0gMTsKKworCQl3aGlsZSAoIG51
bV90b19yZWFkIDw9IDAgKQorCQkJeyAvKiBOb3QgZW5vdWdoIHJvb20gaW4gdGhlIGJ1ZmZlciAt
IGdyb3cgaXQuICovCisKKwkJCS8qIGp1c3QgYSBzaG9ydGVyIG5hbWUgZm9yIHRoZSBjdXJyZW50
IGJ1ZmZlciAqLworCQkJWVlfQlVGRkVSX1NUQVRFIGIgPSBZWV9DVVJSRU5UX0JVRkZFUjsKKwor
CQkJaW50IHl5X2NfYnVmX3Bfb2Zmc2V0ID0KKwkJCQkoaW50KSAoeXlnLT55eV9jX2J1Zl9wIC0g
Yi0+eXlfY2hfYnVmKTsKKworCQkJaWYgKCBiLT55eV9pc19vdXJfYnVmZmVyICkKKwkJCQl7CisJ
CQkJaW50IG5ld19zaXplID0gYi0+eXlfYnVmX3NpemUgKiAyOworCisJCQkJaWYgKCBuZXdfc2l6
ZSA8PSAwICkKKwkJCQkJYi0+eXlfYnVmX3NpemUgKz0gYi0+eXlfYnVmX3NpemUgLyA4OworCQkJ
CWVsc2UKKwkJCQkJYi0+eXlfYnVmX3NpemUgKj0gMjsKKworCQkJCWItPnl5X2NoX2J1ZiA9IChj
aGFyICopCisJCQkJCS8qIEluY2x1ZGUgcm9vbSBpbiBmb3IgMiBFT0IgY2hhcnMuICovCisJCQkJ
CXl5cmVhbGxvYygodm9pZCAqKSBiLT55eV9jaF9idWYsYi0+eXlfYnVmX3NpemUgKyAyICx5eXNj
YW5uZXIgKTsKKwkJCQl9CisJCQllbHNlCisJCQkJLyogQ2FuJ3QgZ3JvdyBpdCwgd2UgZG9uJ3Qg
b3duIGl0LiAqLworCQkJCWItPnl5X2NoX2J1ZiA9IDA7CisKKwkJCWlmICggISBiLT55eV9jaF9i
dWYgKQorCQkJCVlZX0ZBVEFMX0VSUk9SKAorCQkJCSJmYXRhbCBlcnJvciAtIHNjYW5uZXIgaW5w
dXQgYnVmZmVyIG92ZXJmbG93IiApOworCisJCQl5eWctPnl5X2NfYnVmX3AgPSAmYi0+eXlfY2hf
YnVmW3l5X2NfYnVmX3Bfb2Zmc2V0XTsKKworCQkJbnVtX3RvX3JlYWQgPSBZWV9DVVJSRU5UX0JV
RkZFUl9MVkFMVUUtPnl5X2J1Zl9zaXplIC0KKwkJCQkJCW51bWJlcl90b19tb3ZlIC0gMTsKKwor
CQkJfQorCisJCWlmICggbnVtX3RvX3JlYWQgPiBZWV9SRUFEX0JVRl9TSVpFICkKKwkJCW51bV90
b19yZWFkID0gWVlfUkVBRF9CVUZfU0laRTsKKworCQkvKiBSZWFkIGluIG1vcmUgZGF0YS4gKi8K
KwkJWVlfSU5QVVQoICgmWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9jaF9idWZbbnVtYmVy
X3RvX21vdmVdKSwKKwkJCXl5Zy0+eXlfbl9jaGFycywgKHNpemVfdCkgbnVtX3RvX3JlYWQgKTsK
KworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnMgPSB5eWctPnl5X25fY2hh
cnM7CisJCX0KKworCWlmICggeXlnLT55eV9uX2NoYXJzID09IDAgKQorCQl7CisJCWlmICggbnVt
YmVyX3RvX21vdmUgPT0gWVlfTU9SRV9BREogKQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1Rf
RU5EX09GX0ZJTEU7CisJCQl5eXJlc3RhcnQoeXlpbiAgLHl5c2Nhbm5lcik7CisJCQl9CisKKwkJ
ZWxzZQorCQkJeworCQkJcmV0X3ZhbCA9IEVPQl9BQ1RfTEFTVF9NQVRDSDsKKwkJCVlZX0NVUlJF
TlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmZmVyX3N0YXR1cyA9CisJCQkJWVlfQlVGRkVSX0VPRl9Q
RU5ESU5HOworCQkJfQorCQl9CisKKwllbHNlCisJCXJldF92YWwgPSBFT0JfQUNUX0NPTlRJTlVF
X1NDQU47CisKKwlpZiAoKHl5X3NpemVfdCkgKHl5Zy0+eXlfbl9jaGFycyArIG51bWJlcl90b19t
b3ZlKSA+IFlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3NpemUpIHsKKwkJLyogRXh0
ZW5kIHRoZSBhcnJheSBieSA1MCUsIHBsdXMgdGhlIG51bWJlciB3ZSByZWFsbHkgbmVlZC4gKi8K
KwkJeXlfc2l6ZV90IG5ld19zaXplID0geXlnLT55eV9uX2NoYXJzICsgbnVtYmVyX3RvX21vdmUg
KyAoeXlnLT55eV9uX2NoYXJzID4+IDEpOworCQlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5
X2NoX2J1ZiA9IChjaGFyICopIHl5cmVhbGxvYygodm9pZCAqKSBZWV9DVVJSRU5UX0JVRkZFUl9M
VkFMVUUtPnl5X2NoX2J1ZixuZXdfc2l6ZSAseXlzY2FubmVyICk7CisJCWlmICggISBZWV9DVVJS
RU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZiApCisJCQlZWV9GQVRBTF9FUlJPUiggIm91dCBv
ZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9nZXRfbmV4dF9idWZmZXIoKSIgKTsKKwl9CisKKwl5eWct
Pnl5X25fY2hhcnMgKz0gbnVtYmVyX3RvX21vdmU7CisJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVF
LT55eV9jaF9idWZbeXlnLT55eV9uX2NoYXJzXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKwlZ
WV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1Zlt5eWctPnl5X25fY2hhcnMgKyAxXSA9
IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCXl5Zy0+eXl0ZXh0X3B0ciA9ICZZWV9DVVJSRU5U
X0JVRkZFUl9MVkFMVUUtPnl5X2NoX2J1ZlswXTsKKworCXJldHVybiByZXRfdmFsOworfQorCisv
KiB5eV9nZXRfcHJldmlvdXNfc3RhdGUgLSBnZXQgdGhlIHN0YXRlIGp1c3QgYmVmb3JlIHRoZSBF
T0IgY2hhciB3YXMgcmVhY2hlZCAqLworCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfZ2V0
X3ByZXZpb3VzX3N0YXRlICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgeXlfc3Rh
dGVfdHlwZSB5eV9jdXJyZW50X3N0YXRlOworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwOworICAgIHN0
cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCXl5
X2N1cnJlbnRfc3RhdGUgPSB5eWctPnl5X3N0YXJ0OworCisJZm9yICggeXlfY3AgPSB5eWctPnl5
dGV4dF9wdHIgKyBZWV9NT1JFX0FESjsgeXlfY3AgPCB5eWctPnl5X2NfYnVmX3A7ICsreXlfY3Ag
KQorCQl7CisJCXJlZ2lzdGVyIFlZX0NIQVIgeXlfYyA9ICgqeXlfY3AgPyB5eV9lY1tZWV9TQ19U
T19VSSgqeXlfY3ApXSA6IDEpOworCQlpZiAoIHl5X2FjY2VwdFt5eV9jdXJyZW50X3N0YXRlXSAp
CisJCQl7CisJCQl5eWctPnl5X2xhc3RfYWNjZXB0aW5nX3N0YXRlID0geXlfY3VycmVudF9zdGF0
ZTsKKwkJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5X2NwOworCQkJfQorCQl3aGls
ZSAoIHl5X2Noa1t5eV9iYXNlW3l5X2N1cnJlbnRfc3RhdGVdICsgeXlfY10gIT0geXlfY3VycmVu
dF9zdGF0ZSApCisJCQl7CisJCQl5eV9jdXJyZW50X3N0YXRlID0gKGludCkgeXlfZGVmW3l5X2N1
cnJlbnRfc3RhdGVdOworCQkJaWYgKCB5eV9jdXJyZW50X3N0YXRlID49IDQxMSApCisJCQkJeXlf
YyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCQl9CisJCXl5X2N1cnJlbnRfc3Rh
dGUgPSB5eV9ueHRbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArICh1bnNpZ25lZCBpbnQpIHl5
X2NdOworCQl9CisKKwlyZXR1cm4geXlfY3VycmVudF9zdGF0ZTsKK30KKworLyogeXlfdHJ5X05V
TF90cmFucyAtIHRyeSB0byBtYWtlIGEgdHJhbnNpdGlvbiBvbiB0aGUgTlVMIGNoYXJhY3Rlcgor
ICoKKyAqIHN5bm9wc2lzCisgKgluZXh0X3N0YXRlID0geXlfdHJ5X05VTF90cmFucyggY3VycmVu
dF9zdGF0ZSApOworICovCisgICAgc3RhdGljIHl5X3N0YXRlX3R5cGUgeXlfdHJ5X05VTF90cmFu
cyAgKHl5X3N0YXRlX3R5cGUgeXlfY3VycmVudF9zdGF0ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKwlyZWdpc3RlciBpbnQgeXlfaXNfamFtOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9
IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsgLyogVGhpcyB2YXIgbWF5IGJlIHVudXNlZCBk
ZXBlbmRpbmcgdXBvbiBvcHRpb25zLiAqLworCXJlZ2lzdGVyIGNoYXIgKnl5X2NwID0geXlnLT55
eV9jX2J1Zl9wOworCisJcmVnaXN0ZXIgWVlfQ0hBUiB5eV9jID0gMTsKKwlpZiAoIHl5X2FjY2Vw
dFt5eV9jdXJyZW50X3N0YXRlXSApCisJCXsKKwkJeXlnLT55eV9sYXN0X2FjY2VwdGluZ19zdGF0
ZSA9IHl5X2N1cnJlbnRfc3RhdGU7CisJCXl5Zy0+eXlfbGFzdF9hY2NlcHRpbmdfY3BvcyA9IHl5
X2NwOworCQl9CisJd2hpbGUgKCB5eV9jaGtbeXlfYmFzZVt5eV9jdXJyZW50X3N0YXRlXSArIHl5
X2NdICE9IHl5X2N1cnJlbnRfc3RhdGUgKQorCQl7CisJCXl5X2N1cnJlbnRfc3RhdGUgPSAoaW50
KSB5eV9kZWZbeXlfY3VycmVudF9zdGF0ZV07CisJCWlmICggeXlfY3VycmVudF9zdGF0ZSA+PSA0
MTEgKQorCQkJeXlfYyA9IHl5X21ldGFbKHVuc2lnbmVkIGludCkgeXlfY107CisJCX0KKwl5eV9j
dXJyZW50X3N0YXRlID0geXlfbnh0W3l5X2Jhc2VbeXlfY3VycmVudF9zdGF0ZV0gKyAodW5zaWdu
ZWQgaW50KSB5eV9jXTsKKwl5eV9pc19qYW0gPSAoeXlfY3VycmVudF9zdGF0ZSA9PSA0MTApOwor
CisJcmV0dXJuIHl5X2lzX2phbSA/IDAgOiB5eV9jdXJyZW50X3N0YXRlOworfQorCisjaWZuZGVm
IFlZX05PX0lOUFVUCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgICBzdGF0aWMgaW50IHl5aW5wdXQg
KHl5c2Nhbl90IHl5c2Nhbm5lcikKKyNlbHNlCisgICAgc3RhdGljIGludCBpbnB1dCAgKHl5c2Nh
bl90IHl5c2Nhbm5lcikKKyNlbmRpZgorCit7CisJaW50IGM7CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJKnl5Zy0+eXlfY19idWZf
cCA9IHl5Zy0+eXlfaG9sZF9jaGFyOworCisJaWYgKCAqeXlnLT55eV9jX2J1Zl9wID09IFlZX0VO
RF9PRl9CVUZGRVJfQ0hBUiApCisJCXsKKwkJLyogeXlfY19idWZfcCBub3cgcG9pbnRzIHRvIHRo
ZSBjaGFyYWN0ZXIgd2Ugd2FudCB0byByZXR1cm4uCisJCSAqIElmIHRoaXMgb2NjdXJzICpiZWZv
cmUqIHRoZSBFT0IgY2hhcmFjdGVycywgdGhlbiBpdCdzIGEKKwkJICogdmFsaWQgTlVMOyBpZiBu
b3QsIHRoZW4gd2UndmUgaGl0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlci4KKwkJICovCisJCWlmICgg
eXlnLT55eV9jX2J1Zl9wIDwgJllZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfY2hfYnVmW3l5
Zy0+eXlfbl9jaGFyc10gKQorCQkJLyogVGhpcyB3YXMgcmVhbGx5IGEgTlVMLiAqLworCQkJKnl5
Zy0+eXlfY19idWZfcCA9ICdcMCc7CisKKwkJZWxzZQorCQkJeyAvKiBuZWVkIG1vcmUgaW5wdXQg
Ki8KKwkJCWludCBvZmZzZXQgPSB5eWctPnl5X2NfYnVmX3AgLSB5eWctPnl5dGV4dF9wdHI7CisJ
CQkrK3l5Zy0+eXlfY19idWZfcDsKKworCQkJc3dpdGNoICggeXlfZ2V0X25leHRfYnVmZmVyKCB5
eXNjYW5uZXIgKSApCisJCQkJeworCQkJCWNhc2UgRU9CX0FDVF9MQVNUX01BVENIOgorCQkJCQkv
KiBUaGlzIGhhcHBlbnMgYmVjYXVzZSB5eV9nX25fYigpCisJCQkJCSAqIHNlZXMgdGhhdCB3ZSd2
ZSBhY2N1bXVsYXRlZCBhCisJCQkJCSAqIHRva2VuIGFuZCBmbGFncyB0aGF0IHdlIG5lZWQgdG8K
KwkJCQkJICogdHJ5IG1hdGNoaW5nIHRoZSB0b2tlbiBiZWZvcmUKKwkJCQkJICogcHJvY2VlZGlu
Zy4gIEJ1dCBmb3IgaW5wdXQoKSwKKwkJCQkJICogdGhlcmUncyBubyBtYXRjaGluZyB0byBjb25z
aWRlci4KKwkJCQkJICogU28gY29udmVydCB0aGUgRU9CX0FDVF9MQVNUX01BVENICisJCQkJCSAq
IHRvIEVPQl9BQ1RfRU5EX09GX0ZJTEUuCisJCQkJCSAqLworCisJCQkJCS8qIFJlc2V0IGJ1ZmZl
ciBzdGF0dXMuICovCisJCQkJCXl5cmVzdGFydCh5eWluICx5eXNjYW5uZXIpOworCisJCQkJCS8q
RkFMTFRIUk9VR0gqLworCisJCQkJY2FzZSBFT0JfQUNUX0VORF9PRl9GSUxFOgorCQkJCQl7CisJ
CQkJCWlmICggeXl3cmFwKHl5c2Nhbm5lciApICkKKwkJCQkJCXJldHVybiBFT0Y7CisKKwkJCQkJ
aWYgKCAhIHl5Zy0+eXlfZGlkX2J1ZmZlcl9zd2l0Y2hfb25fZW9mICkKKwkJCQkJCVlZX05FV19G
SUxFOworI2lmZGVmIF9fY3BsdXNwbHVzCisJCQkJCXJldHVybiB5eWlucHV0KHl5c2Nhbm5lcik7
CisjZWxzZQorCQkJCQlyZXR1cm4gaW5wdXQoeXlzY2FubmVyKTsKKyNlbmRpZgorCQkJCQl9CisK
KwkJCQljYXNlIEVPQl9BQ1RfQ09OVElOVUVfU0NBTjoKKwkJCQkJeXlnLT55eV9jX2J1Zl9wID0g
eXlnLT55eXRleHRfcHRyICsgb2Zmc2V0OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0K
KworCWMgPSAqKHVuc2lnbmVkIGNoYXIgKikgeXlnLT55eV9jX2J1Zl9wOwkvKiBjYXN0IGZvciA4
LWJpdCBjaGFyJ3MgKi8KKwkqeXlnLT55eV9jX2J1Zl9wID0gJ1wwJzsJLyogcHJlc2VydmUgeXl0
ZXh0ICovCisJeXlnLT55eV9ob2xkX2NoYXIgPSAqKyt5eWctPnl5X2NfYnVmX3A7CisKKwlpZiAo
IGMgPT0gJ1xuJyApCisJCSAgIAorICAgIGRveyB5eWxpbmVubysrOworICAgICAgICB5eWNvbHVt
bj0wOworICAgIH13aGlsZSgwKQorOworCisJcmV0dXJuIGM7Cit9CisjZW5kaWYJLyogaWZuZGVm
IFlZX05PX0lOUFVUICovCisKKy8qKiBJbW1lZGlhdGVseSBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQg
aW5wdXQgc3RyZWFtLgorICogQHBhcmFtIGlucHV0X2ZpbGUgQSByZWFkYWJsZSBzdHJlYW0uCisg
KiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEBub3RlIFRoaXMgZnVu
Y3Rpb24gZG9lcyBub3QgcmVzZXQgdGhlIHN0YXJ0IGNvbmRpdGlvbiB0byBAYyBJTklUSUFMIC4K
KyAqLworICAgIHZvaWQgeXlyZXN0YXJ0ICAoRklMRSAqIGlucHV0X2ZpbGUgLCB5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworCisJaWYgKCAhIFlZX0NVUlJFTlRfQlVGRkVSICl7CisgICAgICAgIHl5
ZW5zdXJlX2J1ZmZlcl9zdGFjayAoeXlzY2FubmVyKTsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZB
TFVFID0KKyAgICAgICAgICAgIHl5X2NyZWF0ZV9idWZmZXIoeXlpbixZWV9CVUZfU0laRSAseXlz
Y2FubmVyKTsKKwl9CisKKwl5eV9pbml0X2J1ZmZlcihZWV9DVVJSRU5UX0JVRkZFUixpbnB1dF9m
aWxlICx5eXNjYW5uZXIpOworCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworfQor
CisvKiogU3dpdGNoIHRvIGEgZGlmZmVyZW50IGlucHV0IGJ1ZmZlci4KKyAqIEBwYXJhbSBuZXdf
YnVmZmVyIFRoZSBuZXcgaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCisgKi8KKyAgICB2b2lkIHl5X3N3aXRjaF90b19idWZmZXIgIChZWV9CVUZG
RVJfU1RBVEUgIG5ld19idWZmZXIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0
IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJLyogVE9E
Ty4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmVwbGFjZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBib2R5
CisJICogd2l0aAorCSAqCQl5eXBvcF9idWZmZXJfc3RhdGUoKTsKKwkgKgkJeXlwdXNoX2J1ZmZl
cl9zdGF0ZShuZXdfYnVmZmVyKTsKKyAgICAgKi8KKwl5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5
c2Nhbm5lcik7CisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiA9PSBuZXdfYnVmZmVyICkKKwkJcmV0
dXJuOworCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1c2ggb3V0IGlu
Zm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9wID0geXlnLT55
eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVmX3BvcyA9IHl5
Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9uX2NoYXJzID0g
eXlnLT55eV9uX2NoYXJzOworCQl9CisKKwlZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUgPSBuZXdf
YnVmZmVyOworCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCisJLyogV2UgZG9u
J3QgYWN0dWFsbHkga25vdyB3aGV0aGVyIHdlIGRpZCB0aGlzIHN3aXRjaCBkdXJpbmcKKwkgKiBF
T0YgKHl5d3JhcCgpKSBwcm9jZXNzaW5nLCBidXQgdGhlIG9ubHkgdGltZSB0aGlzIGZsYWcKKwkg
KiBpcyBsb29rZWQgYXQgaXMgYWZ0ZXIgeXl3cmFwKCkgaXMgY2FsbGVkLCBzbyBpdCdzIHNhZmUK
KwkgKiB0byBnbyBhaGVhZCBhbmQgYWx3YXlzIHNldCBpdC4KKwkgKi8KKwl5eWctPnl5X2RpZF9i
dWZmZXJfc3dpdGNoX29uX2VvZiA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHl5X2xvYWRfYnVmZmVy
X3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwl5eWctPnl5X25fY2hhcnMgPSBZWV9D
VVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X25fY2hhcnM7CisJeXlnLT55eXRleHRfcHRyID0geXln
LT55eV9jX2J1Zl9wID0gWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9idWZfcG9zOworCXl5
aW4gPSBZWV9DVVJSRU5UX0JVRkZFUl9MVkFMVUUtPnl5X2lucHV0X2ZpbGU7CisJeXlnLT55eV9o
b2xkX2NoYXIgPSAqeXlnLT55eV9jX2J1Zl9wOworfQorCisvKiogQWxsb2NhdGUgYW5kIGluaXRp
YWxpemUgYW4gaW5wdXQgYnVmZmVyIHN0YXRlLgorICogQHBhcmFtIGZpbGUgQSByZWFkYWJsZSBz
dHJlYW0uCisgKiBAcGFyYW0gc2l6ZSBUaGUgY2hhcmFjdGVyIGJ1ZmZlciBzaXplIGluIGJ5dGVz
LiBXaGVuIGluIGRvdWJ0LCB1c2UgQGMgWVlfQlVGX1NJWkUuCisgKiBAcGFyYW0geXlzY2FubmVy
IFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIGFsbG9jYXRlZCBidWZmZXIgc3Rh
dGUuCisgKi8KKyAgICBZWV9CVUZGRVJfU1RBVEUgeXlfY3JlYXRlX2J1ZmZlciAgKEZJTEUgKiBm
aWxlLCBpbnQgIHNpemUgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJWVlfQlVGRkVSX1NUQVRF
IGI7CisgICAgCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6ZW9mKCBzdHJ1Y3Qg
eXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOworCWlmICggISBiICkKKwkJWVlfRkFUQUxf
RVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOwor
CisJYi0+eXlfYnVmX3NpemUgPSBzaXplOworCisJLyogeXlfY2hfYnVmIGhhcyB0byBiZSAyIGNo
YXJhY3RlcnMgbG9uZ2VyIHRoYW4gdGhlIHNpemUgZ2l2ZW4gYmVjYXVzZQorCSAqIHdlIG5lZWQg
dG8gcHV0IGluIDIgZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLgorCSAqLworCWItPnl5X2NoX2J1
ZiA9IChjaGFyICopIHl5YWxsb2MoYi0+eXlfYnVmX3NpemUgKyAyICx5eXNjYW5uZXIgKTsKKwlp
ZiAoICEgYi0+eXlfY2hfYnVmICkKKwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBt
ZW1vcnkgaW4geXlfY3JlYXRlX2J1ZmZlcigpIiApOworCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9
IDE7CisKKwl5eV9pbml0X2J1ZmZlcihiLGZpbGUgLHl5c2Nhbm5lcik7CisKKwlyZXR1cm4gYjsK
K30KKworLyoqIERlc3Ryb3kgdGhlIGJ1ZmZlci4KKyAqIEBwYXJhbSBiIGEgYnVmZmVyIGNyZWF0
ZWQgd2l0aCB5eV9jcmVhdGVfYnVmZmVyKCkKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgorICovCisgICAgdm9pZCB5eV9kZWxldGVfYnVmZmVyIChZWV9CVUZGRVJfU1RB
VEUgIGIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXln
ID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCisJaWYgKCAhIGIgKQorCQlyZXR1cm47
CisKKwlpZiAoIGIgPT0gWVlfQ1VSUkVOVF9CVUZGRVIgKSAvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91
bGQgcG9wIGhlcmUuICovCisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IChZWV9CVUZGRVJf
U1RBVEUpIDA7CisKKwlpZiAoIGItPnl5X2lzX291cl9idWZmZXIgKQorCQl5eWZyZWUoKHZvaWQg
KikgYi0+eXlfY2hfYnVmICx5eXNjYW5uZXIgKTsKKworCXl5ZnJlZSgodm9pZCAqKSBiICx5eXNj
YW5uZXIgKTsKK30KKworLyogSW5pdGlhbGl6ZXMgb3IgcmVpbml0aWFsaXplcyBhIGJ1ZmZlci4K
KyAqIFRoaXMgZnVuY3Rpb24gaXMgc29tZXRpbWVzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0
aGUgc2FtZSBidWZmZXIsCisgKiBzdWNoIGFzIGR1cmluZyBhIHl5cmVzdGFydCgpIG9yIGF0IEVP
Ri4KKyAqLworICAgIHN0YXRpYyB2b2lkIHl5X2luaXRfYnVmZmVyICAoWVlfQlVGRkVSX1NUQVRF
ICBiLCBGSUxFICogZmlsZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKKworeworCWludCBvZXJybm8g
PSBlcnJubzsKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisKKwl5eV9mbHVzaF9idWZmZXIoYiAseXlzY2FubmVyKTsKKworCWItPnl5X2lu
cHV0X2ZpbGUgPSBmaWxlOworCWItPnl5X2ZpbGxfYnVmZmVyID0gMTsKKworICAgIC8qIElmIGIg
aXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHl5X2luaXRfYnVmZmVyIHdhcyBfcHJvYmFibHlf
CisgICAgICogY2FsbGVkIGZyb20geXlyZXN0YXJ0KCkgb3IgdGhyb3VnaCB5eV9nZXRfbmV4dF9i
dWZmZXIuCisgICAgICogSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHJlc2V0IHRoZSBs
aW5lbm8gb3IgY29sdW1uLgorICAgICAqLworICAgIGlmIChiICE9IFlZX0NVUlJFTlRfQlVGRkVS
KXsKKyAgICAgICAgYi0+eXlfYnNfbGluZW5vID0gMTsKKyAgICAgICAgYi0+eXlfYnNfY29sdW1u
ID0gMDsKKyAgICB9CisKKyAgICAgICAgYi0+eXlfaXNfaW50ZXJhY3RpdmUgPSAwOworICAgIAor
CWVycm5vID0gb2Vycm5vOworfQorCisvKiogRGlzY2FyZCBhbGwgYnVmZmVyZWQgY2hhcmFjdGVy
cy4gT24gdGhlIG5leHQgc2NhbiwgWVlfSU5QVVQgd2lsbCBiZSBjYWxsZWQuCisgKiBAcGFyYW0g
YiB0aGUgYnVmZmVyIHN0YXRlIHRvIGJlIGZsdXNoZWQsIHVzdWFsbHkgQGMgWVlfQ1VSUkVOVF9C
VUZGRVIuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLworICAg
IHZvaWQgeXlfZmx1c2hfYnVmZmVyIChZWV9CVUZGRVJfU1RBVEUgIGIgLCB5eXNjYW5fdCB5eXNj
YW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCop
eXlzY2FubmVyOworCWlmICggISBiICkKKwkJcmV0dXJuOworCisJYi0+eXlfbl9jaGFycyA9IDA7
CisKKwkvKiBXZSBhbHdheXMgbmVlZCB0d28gZW5kLW9mLWJ1ZmZlciBjaGFyYWN0ZXJzLiAgVGhl
IGZpcnN0IGNhdXNlcworCSAqIGEgdHJhbnNpdGlvbiB0byB0aGUgZW5kLW9mLWJ1ZmZlciBzdGF0
ZS4gIFRoZSBzZWNvbmQgY2F1c2VzCisJICogYSBqYW0gaW4gdGhhdCBzdGF0ZS4KKwkgKi8KKwli
LT55eV9jaF9idWZbMF0gPSBZWV9FTkRfT0ZfQlVGRkVSX0NIQVI7CisJYi0+eXlfY2hfYnVmWzFd
ID0gWVlfRU5EX09GX0JVRkZFUl9DSEFSOworCisJYi0+eXlfYnVmX3BvcyA9ICZiLT55eV9jaF9i
dWZbMF07CisKKwliLT55eV9hdF9ib2wgPSAxOworCWItPnl5X2J1ZmZlcl9zdGF0dXMgPSBZWV9C
VUZGRVJfTkVXOworCisJaWYgKCBiID09IFlZX0NVUlJFTlRfQlVGRkVSICkKKwkJeXlfbG9hZF9i
dWZmZXJfc3RhdGUoeXlzY2FubmVyICk7Cit9CisKKy8qKiBQdXNoZXMgdGhlIG5ldyBzdGF0ZSBv
bnRvIHRoZSBzdGFjay4gVGhlIG5ldyBzdGF0ZSBiZWNvbWVzCisgKiAgdGhlIGN1cnJlbnQgc3Rh
dGUuIFRoaXMgZnVuY3Rpb24gd2lsbCBhbGxvY2F0ZSB0aGUgc3RhY2sKKyAqICBpZiBuZWNlc3Nh
cnkuCisgKiAgQHBhcmFtIG5ld19idWZmZXIgVGhlIG5ldyBzdGF0ZS4KKyAqICBAcGFyYW0geXlz
Y2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqLwordm9pZCB5eXB1c2hfYnVmZmVyX3N0YXRl
IChZWV9CVUZGRVJfU1RBVEUgbmV3X2J1ZmZlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAg
ICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisJ
aWYgKG5ld19idWZmZXIgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJeXllbnN1cmVfYnVmZmVyX3N0
YWNrKHl5c2Nhbm5lcik7CisKKwkvKiBUaGlzIGJsb2NrIGlzIGNvcGllZCBmcm9tIHl5X3N3aXRj
aF90b19idWZmZXIuICovCisJaWYgKCBZWV9DVVJSRU5UX0JVRkZFUiApCisJCXsKKwkJLyogRmx1
c2ggb3V0IGluZm9ybWF0aW9uIGZvciBvbGQgYnVmZmVyLiAqLworCQkqeXlnLT55eV9jX2J1Zl9w
ID0geXlnLT55eV9ob2xkX2NoYXI7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRS0+eXlfYnVm
X3BvcyA9IHl5Zy0+eXlfY19idWZfcDsKKwkJWVlfQ1VSUkVOVF9CVUZGRVJfTFZBTFVFLT55eV9u
X2NoYXJzID0geXlnLT55eV9uX2NoYXJzOworCQl9CisKKwkvKiBPbmx5IHB1c2ggaWYgdG9wIGV4
aXN0cy4gT3RoZXJ3aXNlLCByZXBsYWNlIHRvcC4gKi8KKwlpZiAoWVlfQ1VSUkVOVF9CVUZGRVIp
CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCsrOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxV
RSA9IG5ld19idWZmZXI7CisKKwkvKiBjb3BpZWQgZnJvbSB5eV9zd2l0Y2hfdG9fYnVmZmVyLiAq
LworCXl5X2xvYWRfYnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCXl5Zy0+eXlfZGlkX2J1ZmZl
cl9zd2l0Y2hfb25fZW9mID0gMTsKK30KKworLyoqIFJlbW92ZXMgYW5kIGRlbGV0ZXMgdGhlIHRv
cCBvZiB0aGUgc3RhY2ssIGlmIHByZXNlbnQuCisgKiAgVGhlIG5leHQgZWxlbWVudCBiZWNvbWVz
IHRoZSBuZXcgdG9wLgorICogIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgor
ICovCit2b2lkIHl5cG9wX2J1ZmZlcl9zdGF0ZSAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlp
ZiAoIVlZX0NVUlJFTlRfQlVGRkVSKQorCQlyZXR1cm47CisKKwl5eV9kZWxldGVfYnVmZmVyKFlZ
X0NVUlJFTlRfQlVGRkVSICx5eXNjYW5uZXIpOworCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9
IE5VTEw7CisJaWYgKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX3RvcCA+IDApCisJCS0teXlnLT55eV9i
dWZmZXJfc3RhY2tfdG9wOworCisJaWYgKFlZX0NVUlJFTlRfQlVGRkVSKSB7CisJCXl5X2xvYWRf
YnVmZmVyX3N0YXRlKHl5c2Nhbm5lciApOworCQl5eWctPnl5X2RpZF9idWZmZXJfc3dpdGNoX29u
X2VvZiA9IDE7CisJfQorfQorCisvKiBBbGxvY2F0ZXMgdGhlIHN0YWNrIGlmIGl0IGRvZXMgbm90
IGV4aXN0LgorICogIEd1YXJhbnRlZXMgc3BhY2UgZm9yIGF0IGxlYXN0IG9uZSBwdXNoLgorICov
CitzdGF0aWMgdm9pZCB5eWVuc3VyZV9idWZmZXJfc3RhY2sgKHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKwlpbnQgbnVtX3RvX2FsbG9jOworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKworCWlmICgheXlnLT55eV9idWZmZXJfc3RhY2spIHsK
KworCQkvKiBGaXJzdCBhbGxvY2F0aW9uIGlzIGp1c3QgZm9yIDIgZWxlbWVudHMsIHNpbmNlIHdl
IGRvbid0IGtub3cgaWYgdGhpcworCQkgKiBzY2FubmVyIHdpbGwgZXZlbiBuZWVkIGEgc3RhY2su
IFdlIHVzZSAyIGluc3RlYWQgb2YgMSB0byBhdm9pZCBhbgorCQkgKiBpbW1lZGlhdGUgcmVhbGxv
YyBvbiB0aGUgbmV4dCBjYWxsLgorICAgICAgICAgKi8KKwkJbnVtX3RvX2FsbG9jID0gMTsKKwkJ
eXlnLT55eV9idWZmZXJfc3RhY2sgPSAoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSoqKXl5YWxsb2MK
KwkJCQkJCQkJKG51bV90b19hbGxvYyAqIHNpemVvZihzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlKikK
KwkJCQkJCQkJLCB5eXNjYW5uZXIpOworCQlpZiAoICEgeXlnLT55eV9idWZmZXJfc3RhY2sgKQor
CQkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXllbnN1cmVfYnVm
ZmVyX3N0YWNrKCkiICk7CisJCQkJCQkJCSAgCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFj
aywgMCwgbnVtX3RvX2FsbG9jICogc2l6ZW9mKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKSk7CisJ
CQkJCisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxvYzsKKwkJeXlnLT55
eV9idWZmZXJfc3RhY2tfdG9wID0gMDsKKwkJcmV0dXJuOworCX0KKworCWlmICh5eWctPnl5X2J1
ZmZlcl9zdGFja190b3AgPj0gKHl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCkgLSAxKXsKKworCQkv
KiBJbmNyZWFzZSB0aGUgYnVmZmVyIHRvIHByZXBhcmUgZm9yIGEgcG9zc2libGUgcHVzaC4gKi8K
KwkJaW50IGdyb3dfc2l6ZSA9IDggLyogYXJiaXRyYXJ5IGdyb3cgc2l6ZSAqLzsKKworCQludW1f
dG9fYWxsb2MgPSB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggKyBncm93X3NpemU7CisJCXl5Zy0+
eXlfYnVmZmVyX3N0YWNrID0gKHN0cnVjdCB5eV9idWZmZXJfc3RhdGUqKil5eXJlYWxsb2MKKwkJ
CQkJCQkJKHl5Zy0+eXlfYnVmZmVyX3N0YWNrLAorCQkJCQkJCQludW1fdG9fYWxsb2MgKiBzaXpl
b2Yoc3RydWN0IHl5X2J1ZmZlcl9zdGF0ZSopCisJCQkJCQkJCSwgeXlzY2FubmVyKTsKKwkJaWYg
KCAhIHl5Zy0+eXlfYnVmZmVyX3N0YWNrICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIGR5
bmFtaWMgbWVtb3J5IGluIHl5ZW5zdXJlX2J1ZmZlcl9zdGFjaygpIiApOworCisJCS8qIHplcm8g
b25seSB0aGUgbmV3IHNsb3RzLiovCisJCW1lbXNldCh5eWctPnl5X2J1ZmZlcl9zdGFjayArIHl5
Zy0+eXlfYnVmZmVyX3N0YWNrX21heCwgMCwgZ3Jvd19zaXplICogc2l6ZW9mKHN0cnVjdCB5eV9i
dWZmZXJfc3RhdGUqKSk7CisJCXl5Zy0+eXlfYnVmZmVyX3N0YWNrX21heCA9IG51bV90b19hbGxv
YzsKKwl9Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0YXRlIHRvIHNjYW4gZGly
ZWN0bHkgZnJvbSBhIHVzZXItc3BlY2lmaWVkIGNoYXJhY3RlciBidWZmZXIuCisgKiBAcGFyYW0g
YmFzZSB0aGUgY2hhcmFjdGVyIGJ1ZmZlcgorICogQHBhcmFtIHNpemUgdGhlIHNpemUgaW4gYnl0
ZXMgb2YgdGhlIGNoYXJhY3RlciBidWZmZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5u
ZXIgb2JqZWN0LgorICogQHJldHVybiB0aGUgbmV3bHkgYWxsb2NhdGVkIGJ1ZmZlciBzdGF0ZSBv
YmplY3QuIAorICovCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9idWZmZXIgIChjaGFyICogYmFz
ZSwgeXlfc2l6ZV90ICBzaXplICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9T
VEFURSBiOworICAgIAorCWlmICggc2l6ZSA8IDIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0yXSAhPSBZ
WV9FTkRfT0ZfQlVGRkVSX0NIQVIgfHwKKwkgICAgIGJhc2Vbc2l6ZS0xXSAhPSBZWV9FTkRfT0Zf
QlVGRkVSX0NIQVIgKQorCQkvKiBUaGV5IGZvcmdvdCB0byBsZWF2ZSByb29tIGZvciB0aGUgRU9C
J3MuICovCisJCXJldHVybiAwOworCisJYiA9IChZWV9CVUZGRVJfU1RBVEUpIHl5YWxsb2Moc2l6
ZW9mKCBzdHJ1Y3QgeXlfYnVmZmVyX3N0YXRlICkgLHl5c2Nhbm5lciApOworCWlmICggISBiICkK
KwkJWVlfRkFUQUxfRVJST1IoICJvdXQgb2YgZHluYW1pYyBtZW1vcnkgaW4geXlfc2Nhbl9idWZm
ZXIoKSIgKTsKKworCWItPnl5X2J1Zl9zaXplID0gc2l6ZSAtIDI7CS8qICItIDIiIHRvIHRha2Ug
Y2FyZSBvZiBFT0IncyAqLworCWItPnl5X2J1Zl9wb3MgPSBiLT55eV9jaF9idWYgPSBiYXNlOwor
CWItPnl5X2lzX291cl9idWZmZXIgPSAwOworCWItPnl5X2lucHV0X2ZpbGUgPSAwOworCWItPnl5
X25fY2hhcnMgPSBiLT55eV9idWZfc2l6ZTsKKwliLT55eV9pc19pbnRlcmFjdGl2ZSA9IDA7CisJ
Yi0+eXlfYXRfYm9sID0gMTsKKwliLT55eV9maWxsX2J1ZmZlciA9IDA7CisJYi0+eXlfYnVmZmVy
X3N0YXR1cyA9IFlZX0JVRkZFUl9ORVc7CisKKwl5eV9zd2l0Y2hfdG9fYnVmZmVyKGIgLHl5c2Nh
bm5lciApOworCisJcmV0dXJuIGI7Cit9CisKKy8qKiBTZXR1cCB0aGUgaW5wdXQgYnVmZmVyIHN0
YXRlIHRvIHNjYW4gYSBzdHJpbmcuIFRoZSBuZXh0IGNhbGwgdG8geXlsZXgoKSB3aWxsCisgKiBz
Y2FuIGZyb20gYSBAZSBjb3B5IG9mIEBhIHN0ci4KKyAqIEBwYXJhbSB5eXN0ciBhIE5VTC10ZXJt
aW5hdGVkIHN0cmluZyB0byBzY2FuCisgKiBAcGFyYW0geXlzY2FubmVyIFRoZSBzY2FubmVyIG9i
amVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9jYXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0
LgorICogQG5vdGUgSWYgeW91IHdhbnQgdG8gc2NhbiBieXRlcyB0aGF0IG1heSBjb250YWluIE5V
TCB2YWx1ZXMsIHRoZW4gdXNlCisgKiAgICAgICB5eV9zY2FuX2J5dGVzKCkgaW5zdGVhZC4KKyAq
LworWVlfQlVGRkVSX1NUQVRFIHl5X3NjYW5fc3RyaW5nICh5eWNvbnN0IGNoYXIgKiB5eXN0ciAs
IHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICAKKwlyZXR1cm4geXlfc2Nhbl9ieXRlcyh5eXN0
cixzdHJsZW4oeXlzdHIpICx5eXNjYW5uZXIpOworfQorCisvKiogU2V0dXAgdGhlIGlucHV0IGJ1
ZmZlciBzdGF0ZSB0byBzY2FuIHRoZSBnaXZlbiBieXRlcy4gVGhlIG5leHQgY2FsbCB0byB5eWxl
eCgpIHdpbGwKKyAqIHNjYW4gZnJvbSBhIEBlIGNvcHkgb2YgQGEgYnl0ZXMuCisgKiBAcGFyYW0g
Ynl0ZXMgdGhlIGJ5dGUgYnVmZmVyIHRvIHNjYW4KKyAqIEBwYXJhbSBsZW4gdGhlIG51bWJlciBv
ZiBieXRlcyBpbiB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgQGEgYnl0ZXMuCisgKiBAcGFyYW0g
eXlzY2FubmVyIFRoZSBzY2FubmVyIG9iamVjdC4KKyAqIEByZXR1cm4gdGhlIG5ld2x5IGFsbG9j
YXRlZCBidWZmZXIgc3RhdGUgb2JqZWN0LgorICovCitZWV9CVUZGRVJfU1RBVEUgeXlfc2Nhbl9i
eXRlcyAgKHl5Y29uc3QgY2hhciAqIHl5Ynl0ZXMsIGludCAgX3l5Ynl0ZXNfbGVuICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworCVlZX0JVRkZFUl9TVEFURSBiOworCWNoYXIgKmJ1ZjsKKwl5eV9z
aXplX3QgbjsKKwlpbnQgaTsKKyAgICAKKwkvKiBHZXQgbWVtb3J5IGZvciBmdWxsIGJ1ZmZlciwg
aW5jbHVkaW5nIHNwYWNlIGZvciB0cmFpbGluZyBFT0Incy4gKi8KKwluID0gX3l5Ynl0ZXNfbGVu
ICsgMjsKKwlidWYgPSAoY2hhciAqKSB5eWFsbG9jKG4gLHl5c2Nhbm5lciApOworCWlmICggISBi
dWYgKQorCQlZWV9GQVRBTF9FUlJPUiggIm91dCBvZiBkeW5hbWljIG1lbW9yeSBpbiB5eV9zY2Fu
X2J5dGVzKCkiICk7CisKKwlmb3IgKCBpID0gMDsgaSA8IF95eWJ5dGVzX2xlbjsgKytpICkKKwkJ
YnVmW2ldID0geXlieXRlc1tpXTsKKworCWJ1ZltfeXlieXRlc19sZW5dID0gYnVmW195eWJ5dGVz
X2xlbisxXSA9IFlZX0VORF9PRl9CVUZGRVJfQ0hBUjsKKworCWIgPSB5eV9zY2FuX2J1ZmZlcihi
dWYsbiAseXlzY2FubmVyKTsKKwlpZiAoICEgYiApCisJCVlZX0ZBVEFMX0VSUk9SKCAiYmFkIGJ1
ZmZlciBpbiB5eV9zY2FuX2J5dGVzKCkiICk7CisKKwkvKiBJdCdzIG9rYXkgdG8gZ3JvdyBldGMu
IHRoaXMgYnVmZmVyLCBhbmQgd2Ugc2hvdWxkIHRocm93IGl0CisJICogYXdheSB3aGVuIHdlJ3Jl
IGRvbmUuCisJICovCisJYi0+eXlfaXNfb3VyX2J1ZmZlciA9IDE7CisKKwlyZXR1cm4gYjsKK30K
KworICAgIHN0YXRpYyB2b2lkIHl5X3B1c2hfc3RhdGUgKGludCAgbmV3X3N0YXRlICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKwlpZiAoIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID49IHl5Zy0+
eXlfc3RhcnRfc3RhY2tfZGVwdGggKQorCQl7CisJCXl5X3NpemVfdCBuZXdfc2l6ZTsKKworCQl5
eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoICs9IFlZX1NUQVJUX1NUQUNLX0lOQ1I7CisJCW5ld19z
aXplID0geXlnLT55eV9zdGFydF9zdGFja19kZXB0aCAqIHNpemVvZiggaW50ICk7CisKKwkJaWYg
KCAhIHl5Zy0+eXlfc3RhcnRfc3RhY2sgKQorCQkJeXlnLT55eV9zdGFydF9zdGFjayA9IChpbnQg
KikgeXlhbGxvYyhuZXdfc2l6ZSAseXlzY2FubmVyICk7CisKKwkJZWxzZQorCQkJeXlnLT55eV9z
dGFydF9zdGFjayA9IChpbnQgKikgeXlyZWFsbG9jKCh2b2lkICopIHl5Zy0+eXlfc3RhcnRfc3Rh
Y2ssbmV3X3NpemUgLHl5c2Nhbm5lciApOworCisJCWlmICggISB5eWctPnl5X3N0YXJ0X3N0YWNr
ICkKKwkJCVlZX0ZBVEFMX0VSUk9SKCAib3V0IG9mIG1lbW9yeSBleHBhbmRpbmcgc3RhcnQtY29u
ZGl0aW9uIHN0YWNrIiApOworCQl9CisKKwl5eWctPnl5X3N0YXJ0X3N0YWNrW3l5Zy0+eXlfc3Rh
cnRfc3RhY2tfcHRyKytdID0gWVlfU1RBUlQ7CisKKwlCRUdJTihuZXdfc3RhdGUpOworfQorCisg
ICAgc3RhdGljIHZvaWQgeXlfcG9wX3N0YXRlICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAg
IHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKwlp
ZiAoIC0teXlnLT55eV9zdGFydF9zdGFja19wdHIgPCAwICkKKwkJWVlfRkFUQUxfRVJST1IoICJz
dGFydC1jb25kaXRpb24gc3RhY2sgdW5kZXJmbG93IiApOworCisJQkVHSU4oeXlnLT55eV9zdGFy
dF9zdGFja1t5eWctPnl5X3N0YXJ0X3N0YWNrX3B0cl0pOworfQorCisgICAgc3RhdGljIGludCB5
eV90b3Bfc3RhdGUgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190
ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworCXJldHVybiB5eWctPnl5X3N0
YXJ0X3N0YWNrW3l5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyIC0gMV07Cit9CisKKyNpZm5kZWYgWVlf
RVhJVF9GQUlMVVJFCisjZGVmaW5lIFlZX0VYSVRfRkFJTFVSRSAyCisjZW5kaWYKKworc3RhdGlj
IHZvaWQgeXlfZmF0YWxfZXJyb3IgKHl5Y29uc3QgY2hhciogbXNnICwgeXlzY2FuX3QgeXlzY2Fu
bmVyKQoreworICAgIAkodm9pZCkgZnByaW50Ziggc3RkZXJyLCAiJXNcbiIsIG1zZyApOworCWV4
aXQoIFlZX0VYSVRfRkFJTFVSRSApOworfQorCisvKiBSZWRlZmluZSB5eWxlc3MoKSBzbyBpdCB3
b3JrcyBpbiBzZWN0aW9uIDMgY29kZS4gKi8KKworI3VuZGVmIHl5bGVzcworI2RlZmluZSB5eWxl
c3MobikgXAorCWRvIFwKKwkJeyBcCisJCS8qIFVuZG8gZWZmZWN0cyBvZiBzZXR0aW5nIHVwIHl5
dGV4dC4gKi8gXAorICAgICAgICBpbnQgeXlsZXNzX21hY3JvX2FyZyA9IChuKTsgXAorICAgICAg
ICBZWV9MRVNTX0xJTkVOTyh5eWxlc3NfbWFjcm9fYXJnKTtcCisJCXl5dGV4dFt5eWxlbmddID0g
eXlnLT55eV9ob2xkX2NoYXI7IFwKKwkJeXlnLT55eV9jX2J1Zl9wID0geXl0ZXh0ICsgeXlsZXNz
X21hY3JvX2FyZzsgXAorCQl5eWctPnl5X2hvbGRfY2hhciA9ICp5eWctPnl5X2NfYnVmX3A7IFwK
KwkJKnl5Zy0+eXlfY19idWZfcCA9ICdcMCc7IFwKKwkJeXlsZW5nID0geXlsZXNzX21hY3JvX2Fy
ZzsgXAorCQl9IFwKKwl3aGlsZSAoIDAgKQorCisvKiBBY2Nlc3NvciAgbWV0aG9kcyAoZ2V0L3Nl
dCBmdW5jdGlvbnMpIHRvIHN0cnVjdCBtZW1iZXJzLiAqLworCisvKiogR2V0IHRoZSB1c2VyLWRl
ZmluZWQgZGF0YSBmb3IgdGhpcyBzY2FubmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nh
bm5lciBvYmplY3QuCisgKi8KK1lZX0VYVFJBX1RZUEUgeXlnZXRfZXh0cmEgICh5eXNjYW5fdCB5
eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNf
dCopeXlzY2FubmVyOworICAgIHJldHVybiB5eWV4dHJhOworfQorCisvKiogR2V0IHRoZSBjdXJy
ZW50IGxpbmUgbnVtYmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3Qu
CisgKi8KK2ludCB5eWdldF9saW5lbm8gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAor
ICAgICAgICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgIAorICAgIHJldHVybiB5eWxpbmVubzsKK30KKworLyoqIEdldCB0aGUgY3VycmVudCBjb2x1
bW4gbnVtYmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8K
K2ludCB5eWdldF9jb2x1bW4gICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5
Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIAorICAgICAg
ICBpZiAoISBZWV9DVVJSRU5UX0JVRkZFUikKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIAor
ICAgIHJldHVybiB5eWNvbHVtbjsKK30KKworLyoqIEdldCB0aGUgaW5wdXQgc3RyZWFtLgorICog
QHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK0ZJTEUgKnl5Z2V0X2lu
ICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChz
dHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlpbjsKK30KKworLyoqIEdl
dCB0aGUgb3V0cHV0IHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2Jq
ZWN0LgorICovCitGSUxFICp5eWdldF9vdXQgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAg
c3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAg
IHJldHVybiB5eW91dDsKK30KKworLyoqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHRv
a2VuLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK2ludCB5
eWdldF9sZW5nICAoeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAq
IHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlsZW5nOwor
fQorCisvKiogR2V0IHRoZSBjdXJyZW50IHRva2VuLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUg
c2Nhbm5lciBvYmplY3QuCisgKi8KKworY2hhciAqeXlnZXRfdGV4dCAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5dGV4dDsKK30KKworLyoqIFNldCB0aGUgdXNlci1kZWZp
bmVkIGRhdGEuIFRoaXMgZGF0YSBpcyBuZXZlciB0b3VjaGVkIGJ5IHRoZSBzY2FubmVyLgorICog
QHBhcmFtIHVzZXJfZGVmaW5lZCBUaGUgZGF0YSB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBz
Y2FubmVyLgorICogQHBhcmFtIHl5c2Nhbm5lciBUaGUgc2Nhbm5lciBvYmplY3QuCisgKi8KK3Zv
aWQgeXlzZXRfZXh0cmEgKFlZX0VYVFJBX1RZUEUgIHVzZXJfZGVmaW5lZCAsIHl5c2Nhbl90IHl5
c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190
Kil5eXNjYW5uZXI7CisgICAgeXlleHRyYSA9IHVzZXJfZGVmaW5lZCA7Cit9CisKKy8qKiBTZXQg
dGhlIGN1cnJlbnQgbGluZSBudW1iZXIuCisgKiBAcGFyYW0gbGluZV9udW1iZXIKKyAqIEBwYXJh
bSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5c2V0X2xpbmVubyAo
aW50ICBsaW5lX251bWJlciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXln
dXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisKKyAgICAgICAgLyog
bGluZW5vIGlzIG9ubHkgdmFsaWQgaWYgYW4gaW5wdXQgYnVmZmVyIGV4aXN0cy4gKi8KKyAgICAg
ICAgaWYgKCEgWVlfQ1VSUkVOVF9CVUZGRVIgKQorICAgICAgICAgICB5eV9mYXRhbF9lcnJvcigg
Inl5c2V0X2xpbmVubyBjYWxsZWQgd2l0aCBubyBidWZmZXIiICwgeXlzY2FubmVyKTsgCisgICAg
CisgICAgeXlsaW5lbm8gPSBsaW5lX251bWJlcjsKK30KKworLyoqIFNldCB0aGUgY3VycmVudCBj
b2x1bW4uCisgKiBAcGFyYW0gbGluZV9udW1iZXIKKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNj
YW5uZXIgb2JqZWN0LgorICovCit2b2lkIHl5c2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5
eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVj
dCB5eWd1dHNfdCopeXlzY2FubmVyOworCisgICAgICAgIC8qIGNvbHVtbiBpcyBvbmx5IHZhbGlk
IGlmIGFuIGlucHV0IGJ1ZmZlciBleGlzdHMuICovCisgICAgICAgIGlmICghIFlZX0NVUlJFTlRf
QlVGRkVSICkKKyAgICAgICAgICAgeXlfZmF0YWxfZXJyb3IoICJ5eXNldF9jb2x1bW4gY2FsbGVk
IHdpdGggbm8gYnVmZmVyIiAsIHl5c2Nhbm5lcik7IAorICAgIAorICAgIHl5Y29sdW1uID0gY29s
dW1uX25vOworfQorCisvKiogU2V0IHRoZSBpbnB1dCBzdHJlYW0uIFRoaXMgZG9lcyBub3QgZGlz
Y2FyZCB0aGUgY3VycmVudAorICogaW5wdXQgYnVmZmVyLgorICogQHBhcmFtIGluX3N0ciBBIHJl
YWRhYmxlIHN0cmVhbS4KKyAqIEBwYXJhbSB5eXNjYW5uZXIgVGhlIHNjYW5uZXIgb2JqZWN0Lgor
ICogQHNlZSB5eV9zd2l0Y2hfdG9fYnVmZmVyCisgKi8KK3ZvaWQgeXlzZXRfaW4gKEZJTEUgKiAg
aW5fc3RyICwgeXlzY2FuX3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5
ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKKyAgICB5eWluID0gaW5fc3RyIDsKK30K
Kwordm9pZCB5eXNldF9vdXQgKEZJTEUgKiAgb3V0X3N0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
K3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5u
ZXI7CisgICAgeXlvdXQgPSBvdXRfc3RyIDsKK30KKworaW50IHl5Z2V0X2RlYnVnICAoeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworICAgIHN0cnVjdCB5eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXln
dXRzX3QqKXl5c2Nhbm5lcjsKKyAgICByZXR1cm4geXlfZmxleF9kZWJ1ZzsKK30KKwordm9pZCB5
eXNldF9kZWJ1ZyAoaW50ICBiZGVidWcgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisgICAgc3Ry
dWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOworICAgIHl5
X2ZsZXhfZGVidWcgPSBiZGVidWcgOworfQorCisvKiBBY2Nlc3NvciBtZXRob2RzIGZvciB5eWx2
YWwgYW5kIHl5bGxvYyAqLworCitZWVNUWVBFICogeXlnZXRfbHZhbCAgKHl5c2Nhbl90IHl5c2Nh
bm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5
eXNjYW5uZXI7CisgICAgcmV0dXJuIHl5bHZhbDsKK30KKwordm9pZCB5eXNldF9sdmFsIChZWVNU
WVBFICogIHl5bHZhbF9wYXJhbSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3Qg
eXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0c190Kil5eXNjYW5uZXI7CisgICAgeXlsdmFs
ID0geXlsdmFsX3BhcmFtOworfQorCisvKiBVc2VyLXZpc2libGUgQVBJICovCisKKy8qIHl5bGV4
X2luaXQgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGNyZWF0ZXMgdGhlIHNjYW5uZXIgaXRzZWxmLCBz
byBpdCBpcworICogdGhlIE9OTFkgcmVlbnRyYW50IGZ1bmN0aW9uIHRoYXQgZG9lc24ndCB0YWtl
IHRoZSBzY2FubmVyIGFzIHRoZSBsYXN0IGFyZ3VtZW50LgorICogVGhhdCdzIHdoeSB3ZSBleHBs
aWNpdGx5IGhhbmRsZSB0aGUgZGVjbGFyYXRpb24sIGluc3RlYWQgb2YgdXNpbmcgb3VyIG1hY3Jv
cy4KKyAqLworCitpbnQgeXlsZXhfaW5pdCh5eXNjYW5fdCogcHRyX3l5X2dsb2JhbHMpCisKK3sK
KyAgICBpZiAocHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFM
OworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAqcHRyX3l5X2dsb2JhbHMgPSAoeXlz
Y2FuX3QpIHl5YWxsb2MgKCBzaXplb2YoIHN0cnVjdCB5eWd1dHNfdCApLCBOVUxMICk7CisKKyAg
ICBpZiAoKnB0cl95eV9nbG9iYWxzID09IE5VTEwpeworICAgICAgICBlcnJubyA9IEVOT01FTTsK
KyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3
ZSBleHBvc2UgYnVncyBpbiB5eV9pbml0X2dsb2JhbHMuIExlYXZlIGF0IDB4MDAgZm9yIHJlbGVh
c2VzLiAqLworICAgIG1lbXNldCgqcHRyX3l5X2dsb2JhbHMsMHgwMCxzaXplb2Yoc3RydWN0IHl5
Z3V0c190KSk7CisKKyAgICByZXR1cm4geXlfaW5pdF9nbG9iYWxzICggKnB0cl95eV9nbG9iYWxz
ICk7Cit9CisKKy8qIHl5bGV4X2luaXRfZXh0cmEgaGFzIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkg
YXMgeXlsZXhfaW5pdCwgYnV0IGZvbGxvd3MgdGhlCisgKiBjb252ZW50aW9uIG9mIHRha2luZyB0
aGUgc2Nhbm5lciBhcyB0aGUgbGFzdCBhcmd1bWVudC4gTm90ZSBob3dldmVyLCB0aGF0CisgKiB0
aGlzIGlzIGEgKnBvaW50ZXIqIHRvIGEgc2Nhbm5lciwgYXMgaXQgd2lsbCBiZSBhbGxvY2F0ZWQg
YnkgdGhpcyBjYWxsIChhbmQKKyAqIGlzIHRoZSByZWFzb24sIHRvbywgd2h5IHRoaXMgZnVuY3Rp
b24gYWxzbyBtdXN0IGhhbmRsZSBpdHMgb3duIGRlY2xhcmF0aW9uKS4KKyAqIFRoZSB1c2VyIGRl
ZmluZWQgdmFsdWUgaW4gdGhlIGZpcnN0IGFyZ3VtZW50IHdpbGwgYmUgYXZhaWxhYmxlIHRvIHl5
YWxsb2MgaW4KKyAqIHRoZSB5eWV4dHJhIGZpZWxkLgorICovCisKK2ludCB5eWxleF9pbml0X2V4
dHJhKFlZX0VYVFJBX1RZUEUgeXlfdXNlcl9kZWZpbmVkLHl5c2Nhbl90KiBwdHJfeXlfZ2xvYmFs
cyApCisKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgZHVtbXlfeXlndXRzOworCisgICAgeXlzZXRf
ZXh0cmEgKHl5X3VzZXJfZGVmaW5lZCwgJmR1bW15X3l5Z3V0cyk7CisKKyAgICBpZiAocHRyX3l5
X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1
cm4gMTsKKyAgICB9CisJCisgICAgKnB0cl95eV9nbG9iYWxzID0gKHl5c2Nhbl90KSB5eWFsbG9j
ICggc2l6ZW9mKCBzdHJ1Y3QgeXlndXRzX3QgKSwgJmR1bW15X3l5Z3V0cyApOworCQorICAgIGlm
ICgqcHRyX3l5X2dsb2JhbHMgPT0gTlVMTCl7CisgICAgICAgIGVycm5vID0gRU5PTUVNOworICAg
ICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgCisgICAgLyogQnkgc2V0dGluZyB0byAweEFBLCB3
ZSBleHBvc2UgYnVncyBpbgorICAgIHl5X2luaXRfZ2xvYmFscy4gTGVhdmUgYXQgMHgwMCBmb3Ig
cmVsZWFzZXMuICovCisgICAgbWVtc2V0KCpwdHJfeXlfZ2xvYmFscywweDAwLHNpemVvZihzdHJ1
Y3QgeXlndXRzX3QpKTsKKyAgICAKKyAgICB5eXNldF9leHRyYSAoeXlfdXNlcl9kZWZpbmVkLCAq
cHRyX3l5X2dsb2JhbHMpOworICAgIAorICAgIHJldHVybiB5eV9pbml0X2dsb2JhbHMgKCAqcHRy
X3l5X2dsb2JhbHMgKTsKK30KKworc3RhdGljIGludCB5eV9pbml0X2dsb2JhbHMgKHl5c2Nhbl90
IHl5c2Nhbm5lcikKK3sKKyAgICBzdHJ1Y3QgeXlndXRzX3QgKiB5eWcgPSAoc3RydWN0IHl5Z3V0
c190Kil5eXNjYW5uZXI7CisgICAgLyogSW5pdGlhbGl6YXRpb24gaXMgdGhlIHNhbWUgYXMgZm9y
IHRoZSBub24tcmVlbnRyYW50IHNjYW5uZXIuCisgICAgICogVGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQgZnJvbSB5eWxleF9kZXN0cm95KCksIHNvIGRvbid0IGFsbG9jYXRlIGhlcmUuCisgICAgICov
CisKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFjayA9IDA7CisgICAgeXlnLT55eV9idWZmZXJfc3Rh
Y2tfdG9wID0gMDsKKyAgICB5eWctPnl5X2J1ZmZlcl9zdGFja19tYXggPSAwOworICAgIHl5Zy0+
eXlfY19idWZfcCA9IChjaGFyICopIDA7CisgICAgeXlnLT55eV9pbml0ID0gMDsKKyAgICB5eWct
Pnl5X3N0YXJ0ID0gMDsKKworICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2tfcHRyID0gMDsKKyAgICB5
eWctPnl5X3N0YXJ0X3N0YWNrX2RlcHRoID0gMDsKKyAgICB5eWctPnl5X3N0YXJ0X3N0YWNrID0g
IE5VTEw7CisKKy8qIERlZmluZWQgaW4gbWFpbi5jICovCisjaWZkZWYgWVlfU1RESU5JVAorICAg
IHl5aW4gPSBzdGRpbjsKKyAgICB5eW91dCA9IHN0ZG91dDsKKyNlbHNlCisgICAgeXlpbiA9IChG
SUxFICopIDA7CisgICAgeXlvdXQgPSAoRklMRSAqKSAwOworI2VuZGlmCisKKyAgICAvKiBGb3Ig
ZnV0dXJlIHJlZmVyZW5jZTogU2V0IGVycm5vIG9uIGVycm9yLCBzaW5jZSB3ZSBhcmUgY2FsbGVk
IGJ5CisgICAgICogeXlsZXhfaW5pdCgpCisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8q
IHl5bGV4X2Rlc3Ryb3kgaXMgZm9yIGJvdGggcmVlbnRyYW50IGFuZCBub24tcmVlbnRyYW50IHNj
YW5uZXJzLiAqLworaW50IHl5bGV4X2Rlc3Ryb3kgICh5eXNjYW5fdCB5eXNjYW5uZXIpCit7Cisg
ICAgc3RydWN0IHl5Z3V0c190ICogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopeXlzY2FubmVyOwor
CisgICAgLyogUG9wIHRoZSBidWZmZXIgc3RhY2ssIGRlc3Ryb3lpbmcgZWFjaCBlbGVtZW50LiAq
LworCXdoaWxlKFlZX0NVUlJFTlRfQlVGRkVSKXsKKwkJeXlfZGVsZXRlX2J1ZmZlcihZWV9DVVJS
RU5UX0JVRkZFUiAseXlzY2FubmVyICk7CisJCVlZX0NVUlJFTlRfQlVGRkVSX0xWQUxVRSA9IE5V
TEw7CisJCXl5cG9wX2J1ZmZlcl9zdGF0ZSh5eXNjYW5uZXIpOworCX0KKworCS8qIERlc3Ryb3kg
dGhlIHN0YWNrIGl0c2VsZi4gKi8KKwl5eWZyZWUoeXlnLT55eV9idWZmZXJfc3RhY2sgLHl5c2Nh
bm5lcik7CisJeXlnLT55eV9idWZmZXJfc3RhY2sgPSBOVUxMOworCisgICAgLyogRGVzdHJveSB0
aGUgc3RhcnQgY29uZGl0aW9uIHN0YWNrLiAqLworICAgICAgICB5eWZyZWUoeXlnLT55eV9zdGFy
dF9zdGFjayAseXlzY2FubmVyICk7CisgICAgICAgIHl5Zy0+eXlfc3RhcnRfc3RhY2sgPSBOVUxM
OworCisgICAgLyogUmVzZXQgdGhlIGdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGluIGEgbm9u
LXJlZW50cmFudCBzY2FubmVyIHNvIHRoZSBuZXh0IHRpbWUKKyAgICAgKiB5eWxleCgpIGlzIGNh
bGxlZCwgaW5pdGlhbGl6YXRpb24gd2lsbCBvY2N1ci4gKi8KKyAgICB5eV9pbml0X2dsb2JhbHMo
IHl5c2Nhbm5lcik7CisKKyAgICAvKiBEZXN0cm95IHRoZSBtYWluIHN0cnVjdCAocmVlbnRyYW50
IG9ubHkpLiAqLworICAgIHl5ZnJlZSAoIHl5c2Nhbm5lciAsIHl5c2Nhbm5lciApOworICAgIHl5
c2Nhbm5lciA9IE5VTEw7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJbnRlcm5hbCB1dGls
aXR5IHJvdXRpbmVzLgorICovCisKKyNpZm5kZWYgeXl0ZXh0X3B0cgorc3RhdGljIHZvaWQgeXlf
ZmxleF9zdHJuY3B5IChjaGFyKiBzMSwgeXljb25zdCBjaGFyICogczIsIGludCBuICwgeXlzY2Fu
X3QgeXlzY2FubmVyKQoreworCXJlZ2lzdGVyIGludCBpOworCWZvciAoIGkgPSAwOyBpIDwgbjsg
KytpICkKKwkJczFbaV0gPSBzMltpXTsKK30KKyNlbmRpZgorCisjaWZkZWYgWVlfTkVFRF9TVFJM
RU4KK3N0YXRpYyBpbnQgeXlfZmxleF9zdHJsZW4gKHl5Y29uc3QgY2hhciAqIHMgLCB5eXNjYW5f
dCB5eXNjYW5uZXIpCit7CisJcmVnaXN0ZXIgaW50IG47CisJZm9yICggbiA9IDA7IHNbbl07ICsr
biApCisJCTsKKworCXJldHVybiBuOworfQorI2VuZGlmCisKK3ZvaWQgKnl5YWxsb2MgKHl5X3Np
emVfdCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwlyZXR1cm4gKHZvaWQgKikgbWFs
bG9jKCBzaXplICk7Cit9CisKK3ZvaWQgKnl5cmVhbGxvYyAgKHZvaWQgKiBwdHIsIHl5X3NpemVf
dCAgc2l6ZSAsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK3sKKwkvKiBUaGUgY2FzdCB0byAoY2hhciAq
KSBpbiB0aGUgZm9sbG93aW5nIGFjY29tbW9kYXRlcyBib3RoCisJICogaW1wbGVtZW50YXRpb25z
IHRoYXQgdXNlIGNoYXIqIGdlbmVyaWMgcG9pbnRlcnMsIGFuZCB0aG9zZQorCSAqIHRoYXQgdXNl
IHZvaWQqIGdlbmVyaWMgcG9pbnRlcnMuICBJdCB3b3JrcyB3aXRoIHRoZSBsYXR0ZXIKKwkgKiBi
ZWNhdXNlIGJvdGggQU5TSSBDIGFuZCBDKysgYWxsb3cgY2FzdGxlc3MgYXNzaWdubWVudCBmcm9t
CisJICogYW55IHBvaW50ZXIgdHlwZSB0byB2b2lkKiwgYW5kIGRlYWwgd2l0aCBhcmd1bWVudCBj
b252ZXJzaW9ucworCSAqIGFzIHRob3VnaCBkb2luZyBhbiBhc3NpZ25tZW50LgorCSAqLworCXJl
dHVybiAodm9pZCAqKSByZWFsbG9jKCAoY2hhciAqKSBwdHIsIHNpemUgKTsKK30KKwordm9pZCB5
eWZyZWUgKHZvaWQgKiBwdHIgLCB5eXNjYW5fdCB5eXNjYW5uZXIpCit7CisJZnJlZSggKGNoYXIg
KikgcHRyICk7CS8qIHNlZSB5eXJlYWxsb2MoKSBmb3IgKGNoYXIgKikgY2FzdCAqLworfQorCisj
ZGVmaW5lIFlZVEFCTEVTX05BTUUgInl5dGFibGVzIgorCitleHRlcm4gIkMiIHsKKy8vIFByZXBy
b2Nlc3NvciBpbnRlcmZhY2UuCisjaW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXBy
b2Nlc3MuaCIKKworI2RlZmluZSBTRVRVUF9DT05URVhUKHBwKSBcCisgICAgVFBhcnNlQ29udGV4
dCogY29udGV4dCA9IChUUGFyc2VDb250ZXh0KikgcHAtPnBDOyBcCisgICAgc3RydWN0IHl5Z3V0
c190KiB5eWcgPSAoc3RydWN0IHl5Z3V0c190KikgY29udGV4dC0+c2Nhbm5lcjsKKworLy8gUHJl
cHJvY2Vzc29yIGNhbGxiYWNrcy4KK3ZvaWQgQ1BQRGVidWdMb2dNc2coY29uc3QgY2hhciAqbXNn
KQoreworICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKKyAgICBjb250ZXh0LT5pbmZvU2luay5kZWJ1
Zy5tZXNzYWdlKEVQcmVmaXhOb25lLCBtc2cpOworfQorCit2b2lkIENQUFdhcm5pbmdUb0luZm9M
b2coY29uc3QgY2hhciAqbXNnKQoreworICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKKyAgICBjb250
ZXh0LT53YXJuaW5nKHl5bGluZW5vLCBtc2csICIiLCAiIik7Cit9CisKK3ZvaWQgQ1BQU2hJbmZv
TG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgICBTRVRVUF9DT05URVhUKGNwcCk7CisgICAg
Y29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sIG1zZywgIiIsICIiKTsKKyAgICBjb250ZXh0LT5yZWNv
dmVyKCk7Cit9CisKK3ZvaWQgQ1BQRXJyb3JUb0luZm9Mb2coY2hhciAqbXNnKQoreworICAgIFNF
VFVQX0NPTlRFWFQoY3BwKTsKKyAgICBjb250ZXh0LT5lcnJvcih5eWxpbmVubywgbXNnLCAiIiwg
IiIpOworICAgIGNvbnRleHQtPnJlY292ZXIoKTsKK30KKwordm9pZCBTZXRMaW5lTnVtYmVyKGlu
dCBsaW5lKQoreworICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKKyAgICBpbnQgc3RyaW5nID0gMDsK
KyAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZzdHJpbmcsIE5VTEwpOworICAgIHl5bGlu
ZW5vID0gRW5jb2RlU291cmNlTG9jKHN0cmluZywgbGluZSk7Cit9CisKK3ZvaWQgU2V0U3RyaW5n
TnVtYmVyKGludCBzdHJpbmcpCit7CisgICAgU0VUVVBfQ09OVEVYVChjcHApOworICAgIGludCBs
aW5lID0gMDsKKyAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sIE5VTEwsICZsaW5lKTsKKyAg
ICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhzdHJpbmcsIGxpbmUpOworfQorCitpbnQgR2V0
U3RyaW5nTnVtYmVyKCkKK3sKKyAgICBTRVRVUF9DT05URVhUKGNwcCk7CisgICAgaW50IHN0cmlu
ZyA9IDA7CisgICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5vLCAmc3RyaW5nLCBOVUxMKTsKKyAg
ICByZXR1cm4gc3RyaW5nOworfQorCitpbnQgR2V0TGluZU51bWJlcigpCit7CisgICAgU0VUVVBf
Q09OVEVYVChjcHApOworICAgIGludCBsaW5lID0gMDsKKyAgICBEZWNvZGVTb3VyY2VMb2MoeXls
aW5lbm8sIE5VTEwsICZsaW5lKTsKKyAgICByZXR1cm4gbGluZTsKK30KKwordm9pZCBJbmNMaW5l
TnVtYmVyKCkKK3sKKyAgICBTRVRVUF9DT05URVhUKGNwcCk7CisgICAgaW50IHN0cmluZyA9IDAs
IGxpbmUgPSAwOworICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgJnN0cmluZywgJmxpbmUp
OworICAgIHl5bGluZW5vID0gRW5jb2RlU291cmNlTG9jKHN0cmluZywgKytsaW5lKTsKK30KKwor
dm9pZCBEZWNMaW5lTnVtYmVyKCkKK3sKKyAgICBTRVRVUF9DT05URVhUKGNwcCk7CisgICAgaW50
IHN0cmluZyA9IDAsIGxpbmUgPSAwOworICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgJnN0
cmluZywgJmxpbmUpOworICAgIHl5bGluZW5vID0gRW5jb2RlU291cmNlTG9jKHN0cmluZywgLS1s
aW5lKTsKK30KKwordm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hhciAqKnRva2VucywgaW50IG51
bVRva2VucykKK3sKKyAgICBTRVRVUF9DT05URVhUKGNwcCk7CisgICAgaWYgKCFzdHJjbXAodG9r
ZW5zWzBdLCAib3B0aW1pemUiKSkgeworICAgICAgICBpZiAobnVtVG9rZW5zICE9IDQpIHsKKyAg
ICAgICAgICAgIENQUFNoSW5mb0xvZ01zZygib3B0aW1pemUgcHJhZ21hIHN5bnRheCBpcyBpbmNv
cnJlY3QiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgaWYgKHN0cmNtcCh0b2tlbnNbMV0sICIoIikpIHsKKyAgICAgICAgICAgIENQUFNoSW5mb0xv
Z01zZygiXCIoXCIgZXhwZWN0ZWQgYWZ0ZXIgJ29wdGltaXplJyBrZXl3b3JkIik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBpZiAoIXN0cmNt
cCh0b2tlbnNbMl0sICJvbiIpKQorICAgICAgICAgICAgY29udGV4dC0+Y29udGV4dFByYWdtYS5v
cHRpbWl6ZSA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib2Zm
IikpCisgICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gZmFsc2U7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9uXCIgb3Ig
XCJvZmZcIiBleHBlY3RlZCBhZnRlciAnKCcgZm9yICdvcHRpbWl6ZScgcHJhZ21hIik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJjbXAo
dG9rZW5zWzNdLCAiKSIpKSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKVwiIGV4
cGVjdGVkIHRvIGVuZCAnb3B0aW1pemUnIHByYWdtYSIpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmICghc3RyY21wKHRva2Vuc1swXSwgImRlYnVnIikpIHsK
KyAgICAgICAgaWYgKG51bVRva2VucyAhPSA0KSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dN
c2coImRlYnVnIHByYWdtYSBzeW50YXggaXMgaW5jb3JyZWN0Iik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChzdHJjbXAodG9rZW5zWzFdLCAi
KCIpKSB7CisgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIlwiKFwiIGV4cGVjdGVkIGFmdGVy
ICdkZWJ1Zycga2V5d29yZCIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgaWYgKCFzdHJjbXAodG9rZW5zWzJdLCAib24iKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVidWcgPSB0cnVlOworICAgICAgICBlbHNlIGlm
ICghc3RyY21wKHRva2Vuc1syXSwgIm9mZiIpKQorICAgICAgICAgICAgY29udGV4dC0+Y29udGV4
dFByYWdtYS5kZWJ1ZyA9IGZhbHNlOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIENQUFNo
SW5mb0xvZ01zZygiXCJvblwiIG9yIFwib2ZmXCIgZXhwZWN0ZWQgYWZ0ZXIgJygnIGZvciAnZGVi
dWcnIHByYWdtYSIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoc3RyY21wKHRva2Vuc1szXSwgIikiKSkgeworICAgICAgICAgICAgQ1BQU2hJ
bmZvTG9nTXNnKCJcIilcIiBleHBlY3RlZCB0byBlbmQgJ2RlYnVnJyBwcmFnbWEiKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisjaWZkZWYgUFJBR01BX1RB
QkxFCisgICAgICAgIC8vCisgICAgICAgIC8vIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHByYWdt
YQorICAgICAgICAvLyB1c2UgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFn
bWEucHJhZ21hVGFibGUgdG8gc3RvcmUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHByYWdtYQorICAg
ICAgICAvLyBGb3Igbm93LCBqdXN0IGlnbm9yZSB0aGUgcHJhZ21hIHRoYXQgdGhlIGltcGxlbWVu
dGF0aW9uIGNhbm5vdCByZWNvZ25pemUKKyAgICAgICAgLy8gQW4gRXhhbXBsZSBvZiBvbmUgc3Vj
aCBpbXBsZW1lbnRhdGlvbiBmb3IgYSBwcmFnbWEgdGhhdCBoYXMgYSBzeW50YXggbGlrZQorICAg
ICAgICAvLyAjcHJhZ21hIHByYWdtYW5hbWUocHJhZ21hdmFsdWUpCisgICAgICAgIC8vIFRoaXMg
aW1wbGVtZW50YXRpb24gc3RvcmVzIHRoZSBjdXJyZW50IHByYWdtYXZhbHVlIGFnYWluc3QgdGhl
IHByYWdtYSBuYW1lIGluIHByYWdtYVRhYmxlLgorICAgICAgICAvLyAgICAgICAgCisgICAgICAg
IGlmIChudW1Ub2tlbnMgPT0gNCAmJiAhc3RyY21wKHRva2Vuc1sxXSwgIigiKSAmJiAhc3RyY21w
KHRva2Vuc1szXSwgIikiKSkgeyAgICAgICAgICAgICAgCisgICAgICAgICAgICBUUHJhZ21hVGFi
bGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmNvbnRleHRQcmFn
bWEucHJhZ21hVGFibGU7CisgICAgICAgICAgICBUUHJhZ21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7
CisgICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUuZmluZChUU3RyaW5nKHRva2Vuc1swXSkp
OworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21hVGFibGUuZW5kKCkpIHsKKyAgICAgICAg
ICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMl07CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tlbnNbMF0gXSA9IHRva2Vuc1syXTsKKyAg
ICAgICAgICAgIH0gICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKG51bVRva2VucyA+PSAyKSB7
CisgICAgICAgICAgICBUUHJhZ21hVGFibGUmIHByYWdtYVRhYmxlID0gKChUUGFyc2VDb250ZXh0
ICopY3BwLT5wQyktPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGU7CisgICAgICAgICAgICBUUHJh
Z21hVGFibGU6Oml0ZXJhdG9yIGl0ZXI7CisgICAgICAgICAgICBpdGVyID0gcHJhZ21hVGFibGUu
ZmluZChUU3RyaW5nKHRva2Vuc1swXSkpOworICAgICAgICAgICAgaWYgKGl0ZXIgIT0gcHJhZ21h
VGFibGUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICBpdGVyLT5zZWNvbmQgPSB0b2tlbnNbMV07
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByYWdtYVRhYmxlWyB0b2tl
bnNbMF0gXSA9IHRva2Vuc1sxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmIC8v
IFBSQUdNQV9UQUJMRQorICAgIH0KK30KKwordm9pZCBTdG9yZVN0cihjaGFyICpzdHJpbmcpCit7
CisgICAgU0VUVVBfQ09OVEVYVChjcHApOworICAgIFRTdHJpbmcgc3RyU3JjOworICAgIHN0clNy
YyA9IFRTdHJpbmcoc3RyaW5nKTsKKworICAgIGNvbnRleHQtPkhhc2hFcnJNc2cgPSBjb250ZXh0
LT5IYXNoRXJyTXNnICsgIiAiICsgc3RyU3JjOworfQorCitjb25zdCBjaGFyKiBHZXRTdHJmcm9t
VFN0cih2b2lkKQoreworICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKKyAgICBjcHAtPkVyck1zZyA9
IGNvbnRleHQtPkhhc2hFcnJNc2cuY19zdHIoKTsKKyAgICByZXR1cm4gY3BwLT5FcnJNc2c7Cit9
CisKK3ZvaWQgUmVzZXRUU3RyaW5nKHZvaWQpCit7CisgICAgU0VUVVBfQ09OVEVYVChjcHApOwor
ICAgIGNvbnRleHQtPkhhc2hFcnJNc2cgPSAiIjsKK30KKworVEJlaGF2aW9yIEdldEJlaGF2aW9y
KGNvbnN0IGNoYXIqIGJlaGF2aW9yKQoreworICAgIGlmICghc3RyY21wKCJyZXF1aXJlIiwgYmVo
YXZpb3IpKQorICAgICAgICByZXR1cm4gRUJoUmVxdWlyZTsKKyAgICBlbHNlIGlmICghc3RyY21w
KCJlbmFibGUiLCBiZWhhdmlvcikpCisgICAgICAgIHJldHVybiBFQmhFbmFibGU7CisgICAgZWxz
ZSBpZiAoIXN0cmNtcCgiZGlzYWJsZSIsIGJlaGF2aW9yKSkKKyAgICAgICAgcmV0dXJuIEVCaERp
c2FibGU7CisgICAgZWxzZSBpZiAoIXN0cmNtcCgid2FybiIsIGJlaGF2aW9yKSkKKyAgICAgICAg
cmV0dXJuIEVCaFdhcm47CisgICAgZWxzZSB7CisgICAgICAgIENQUFNoSW5mb0xvZ01zZygoVFN0
cmluZygiYmVoYXZpb3IgJyIpICsgYmVoYXZpb3IgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIikuY19z
dHIoKSk7CisgICAgICAgIHJldHVybiBFQmhEaXNhYmxlOworICAgIH0gICAgICAgIAorfQorCit2
b2lkIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNo
YXIqIGJlaGF2aW9yKQoreworICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKKyAgICBUQmVoYXZpb3Ig
YmVoYXZpb3JWYWwgPSBHZXRCZWhhdmlvcihiZWhhdmlvcik7CisgICAgVE1hcDxUU3RyaW5nLCBU
QmVoYXZpb3I+OjogaXRlcmF0b3IgaXRlcjsKKyAgICBUU3RyaW5nIG1zZzsKKyAgICAKKyAgICAv
LyBzcGVjaWFsIGNhc2VkIGZvciBhbGwgZXh0ZW5zaW9uCisgICAgaWYgKCFzdHJjbXAoZXh0TmFt
ZSwgImFsbCIpKSB7CisgICAgICAgIGlmIChiZWhhdmlvclZhbCA9PSBFQmhSZXF1aXJlIHx8IGJl
aGF2aW9yVmFsID09IEVCaEVuYWJsZSkgeworICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJl
eHRlbnNpb24gJ2FsbCcgY2Fubm90IGhhdmUgJ3JlcXVpcmUnIG9yICdlbmFibGUnIGJlaGF2aW9y
Iik7ICAKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGZvciAoaXRlciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7IGl0ZXIgIT0g
Y29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgICAg
ICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKKyAgICAgICAgfSAgICAgICAgCisgICAgfSBl
bHNlIHsKKyAgICAgICAgaXRlciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoVFN0
cmluZyhleHROYW1lKSk7CisgICAgICAgIGlmIChpdGVyID09IGNvbnRleHQtPmV4dGVuc2lvbkJl
aGF2aW9yLmVuZCgpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGJlaGF2aW9yVmFsKSB7CisgICAg
ICAgICAgICBjYXNlIEVCaFJlcXVpcmU6CisgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNn
KChUU3RyaW5nKCJleHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQi
KS5jX3N0cigpKTsgIAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBF
QmhFbmFibGU6CisgICAgICAgICAgICBjYXNlIEVCaFdhcm46CisgICAgICAgICAgICBjYXNlIEVC
aERpc2FibGU6CisgICAgICAgICAgICAgICAgbXNnID0gVFN0cmluZygiZXh0ZW5zaW9uICciKSAr
IGV4dE5hbWUgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIjsKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5pbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIG1zZy5jX3N0cigpLCB5eWxp
bmVubyk7IAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGl0ZXItPnNlY29uZCA9IGJl
aGF2aW9yVmFsOworICAgIH0KK30KK30gIC8vIGV4dGVybiAiQyIKKworaW50IHN0cmluZ19pbnB1
dChjaGFyKiBidWYsIGludCBtYXhfc2l6ZSwgeXlzY2FuX3QgeXlzY2FubmVyKSB7CisgICAgaW50
IGxlbjsKKworICAgIGlmICgobGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4X3NpemUpKSA9PSAwKQor
ICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobGVuID49IG1heF9zaXplKSAKKyAgICAgICAgWVlf
RkFUQUxfRVJST1IoImlucHV0IGJ1ZmZlciBvdmVyZmxvdywgY2FuJ3QgZW5sYXJnZSBidWZmZXIg
YmVjYXVzZSBzY2FubmVyIHVzZXMgUkVKRUNUIik7CisKKyAgICBidWZbbGVuXSA9ICcgJzsKKyAg
ICByZXR1cm4gbGVuKzE7Cit9CisKK2ludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcikg
eworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5l
cjsKKyAgICAKKyAgICBpbnQgdG9rZW4gPSBJREVOVElGSUVSOworICAgIFRTeW1ib2wqIHN5bWJv
bCA9IHl5ZXh0cmEtPnN5bWJvbFRhYmxlLmZpbmQoeXl0ZXh0KTsKKyAgICBpZiAoeXlleHRyYS0+
bGV4QWZ0ZXJUeXBlID09IGZhbHNlICYmIHN5bWJvbCAmJiBzeW1ib2wtPmlzVmFyaWFibGUoKSkg
eworICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4o
c3ltYm9sKTsKKyAgICAgICAgaWYgKHZhcmlhYmxlLT5pc1VzZXJUeXBlKCkpIHsKKyAgICAgICAg
ICAgIHl5ZXh0cmEtPmxleEFmdGVyVHlwZSA9IHRydWU7CisgICAgICAgICAgICB0b2tlbiA9IFRZ
UEVfTkFNRTsKKyAgICAgICAgfQorICAgIH0KKyAgICB5eWx2YWwtPmxleC5zeW1ib2wgPSBzeW1i
b2w7CisgICAgcmV0dXJuIHRva2VuOworfQorCitpbnQgcmVzZXJ2ZWRfd29yZCh5eXNjYW5fdCB5
eXNjYW5uZXIpIHsKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KSB5eXNjYW5uZXI7CisKKyAgICB5eWV4dHJhLT5lcnJvcih5eWxpbmVubywgIklsbGVnYWwgdXNl
IG9mIHJlc2VydmVkIHdvcmQiLCB5eXRleHQsICIiKTsKKyAgICB5eWV4dHJhLT5yZWNvdmVyKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgeXllcnJvcihUUGFyc2VDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBjaGFyKiByZWFzb24pIHsKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1
Y3QgeXlndXRzX3QqKSBjb250ZXh0LT5zY2FubmVyOworCisgICAgaWYgKGNvbnRleHQtPkFmdGVy
RU9GKSB7CisgICAgICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sICJ1bmV4cGVj
dGVkIEVPRiIsICIiKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb250ZXh0LT5lcnJvcih5eWxp
bmVubywgcmVhc29uLCB5eXRleHQsICIiKTsKKyAgICB9CisgICAgY29udGV4dC0+cmVjb3Zlcigp
OworfQorCitpbnQgZ2xzbGFuZ19pbml0aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpIHsK
KyAgICB5eXNjYW5fdCBzY2FubmVyID0gTlVMTDsKKyAgICBpZiAoeXlsZXhfaW5pdF9leHRyYShj
b250ZXh0LCZzY2FubmVyKSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBjb250ZXh0LT5zY2Fu
bmVyID0gc2Nhbm5lcjsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGdsc2xhbmdfZmluYWxpemUo
VFBhcnNlQ29udGV4dCogY29udGV4dCkgeworICAgIHl5c2Nhbl90IHNjYW5uZXIgPSBjb250ZXh0
LT5zY2FubmVyOworICAgIGlmIChzY2FubmVyID09IE5VTEwpIHJldHVybiAwOworICAgIAorICAg
IGNvbnRleHQtPnNjYW5uZXIgPSBOVUxMOworICAgIHJldHVybiB5eWxleF9kZXN0cm95KHNjYW5u
ZXIpOworfQorCit2b2lkIGdsc2xhbmdfc2NhbihpbnQgY291bnQsIGNvbnN0IGNoYXIqIGNvbnN0
IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAgICBUUGFyc2VD
b250ZXh0KiBjb250ZXh0KSB7CisgICAgeXlyZXN0YXJ0KE5VTEwsY29udGV4dC0+c2Nhbm5lcik7
CisgICAgeXlzZXRfbGluZW5vKEVuY29kZVNvdXJjZUxvYygwLCAxKSxjb250ZXh0LT5zY2FubmVy
KTsKKyAgICBjb250ZXh0LT5BZnRlckVPRiA9IGZhbHNlOworICAgIAorICAgIC8vIEluaXQgcHJl
cHJvY2Vzc29yLgorICAgIGNwcC0+cEMgPSBjb250ZXh0OworICAgIGNwcC0+UGFXaGljaFN0ciA9
IDA7CisgICAgY3BwLT5QYUFyZ3YgICAgID0gc3RyaW5nOworICAgIGNwcC0+UGFBcmdjICAgICA9
IGNvdW50OworICAgIGNwcC0+UGFTdHJMZW4gICA9IGxlbmd0aDsKKyAgICBjcHAtPnBhc3RGaXJz
dFN0YXRlbWVudCA9IDA7CisgICAgU2NhbkZyb21TdHJpbmcoc3RyaW5nWzBdKTsKK30KKwpJbmRl
eDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcubAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xzbGFuZy5sCShy
ZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9n
bHNsYW5nLmwJKHdvcmtpbmcgY29weSkKQEAgLTQsMzQgKzQsMjkgQEAKIC8vIFVzZSBvZiB0aGlz
IHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4g
YmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLwotKi8KLS8qIEJhc2VkIG9uCi1B
TlNJIEMgZ3JhbW1hciwgTGV4IHNwZWNpZmljYXRpb24KIAotSW4gMTk4NSwgSmVmZiBMZWUgcHVi
bGlzaGVkIHRoaXMgTGV4IHNwZWNpZmljYXRpb24gdG9nZXRoZXIgd2l0aCBhIFlhY2MgCi1ncmFt
bWFyIGZvciB0aGUgQXByaWwgMzAsIDE5ODUgQU5TSSBDIGRyYWZ0LiAgVG9tIFN0b2NrZmlzY2gg
cmVwb3N0ZWQgCi1ib3RoIHRvIG5ldC5zb3VyY2VzIGluIDE5ODc7IHRoYXQgb3JpZ2luYWwsIGFz
IG1lbnRpb25lZCBpbiB0aGUgYW5zd2VyIAotdG8gcXVlc3Rpb24gMTcuMjUgb2YgdGhlIGNvbXAu
bGFuZy5jIEZBUSwgY2FuIGJlIGZ0cCdlZCBmcm9tIGZ0cC51dS5uZXQsIAotZmlsZSB1c2VuZXQv
bmV0LnNvdXJjZXMvYW5zaS5jLmdyYW1tYXIuWi4gCitUaGlzIGZpbGUgY29udGFpbnMgdGhlIExl
eCBzcGVjaWZpY2F0aW9uIGZvciBHTFNMIEVTLgorQmFzZWQgb24gQU5TSSBDIGdyYW1tYXIsIExl
eCBzcGVjaWZpY2F0aW9uOgoraHR0cDovL3d3dy5seXNhdG9yLmxpdS5zZS9jL0FOU0ktQy1ncmFt
bWFyLWwuaHRtbAogCi1JIGludGVuZCB0byBrZWVwIHRoaXMgdmVyc2lvbiBhcyBjbG9zZSB0byB0
aGUgY3VycmVudCBDIFN0YW5kYXJkIGdyYW1tYXIgCi1hcyBwb3NzaWJsZTsgcGxlYXNlIGxldCBt
ZSBrbm93IGlmIHlvdSBkaXNjb3ZlciBkaXNjcmVwYW5jaWVzLiAKLQotSnV0dGEgRGVnZW5lciwg
MTk5NSAKK0lGIFlPVSBNT0RJRlkgVEhJUyBGSUxFIFlPVSBBTFNPIE5FRUQgVE8gUlVOIGdlbmVy
YXRlX2dsc2xhbmdfbGV4ZXIuc2gsCitXSElDSCBHRU5FUkFURVMgVEhFIEdMU0wgRVMgTEVYRVIg
KGdsc2xhbmdfbGV4LmNwcCkuCiAqLwogCi1EICAgICAgICAgICBbMC05XQotTCAgICAgICAgICAg
W2EtekEtWl9dCi1IICAgICAgICAgICBbYS1mQS1GMC05XQotRSAgICAgICAgICAgW0VlXVsrLV0/
e0R9KwotTyAgICAgICAgICAgWzAtN10KKyV0b3B7CisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEw
IFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ug
b2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRo
YXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KIAotJW9wdGlvbiBu
b3VucHV0IAotJXsKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgorLy8g
VGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbmVyYXRlX2dsc2xhbmdfbGV4ZXIuc2gu
IERPIE5PVCBFRElUIQorfQogCisleworI2luY2x1ZGUgImNvbXBpbGVyL2dsc2xhbmcuaCIKICNp
bmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorI2luY2x1ZGUgImNvbXBpbGVyL3V0aWwu
aCIKICNpbmNsdWRlICJnbHNsYW5nX3RhYi5oIgogCiAvKiB3aW5kb3dzIG9ubHkgcHJhZ21hICov
CkBAIC0zOSw0MDcgKzM0LDMwNCBAQAogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGUgOiA0MTAyKQog
I2VuZGlmCiAKLWludCB5eV9pbnB1dChjaGFyKiBidWYsIGludCBtYXhfc2l6ZSk7CisjZGVmaW5l
IFlZX1VTRVJfQUNUSU9OIHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsKKyNkZWZpbmUgWVlf
SU5QVVQoYnVmLCByZXN1bHQsIG1heF9zaXplKSBcCisgICAgcmVzdWx0ID0gc3RyaW5nX2lucHV0
KGJ1ZiwgbWF4X3NpemUsIHl5c2Nhbm5lcik7CiAKLWV4dGVybiBpbnQgeXlwYXJzZSh2b2lkKik7
Ci0jZGVmaW5lIFlZX0RFQ0wgaW50IHl5bGV4KFlZU1RZUEUqIHB5eWx2YWwsIHZvaWQqIHBhcnNl
Q29udGV4dExvY2FsKQotI2RlZmluZSBwYXJzZUNvbnRleHQgKCooKFRQYXJzZUNvbnRleHQqKShw
YXJzZUNvbnRleHRMb2NhbCkpKQotIAotI2RlZmluZSBZWV9JTlBVVChidWYscmVzdWx0LG1heF9z
aXplKSAocmVzdWx0ID0geXlfaW5wdXQoYnVmLCBtYXhfc2l6ZSkpCi0KK3N0YXRpYyBpbnQgc3Ry
aW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplLCB5eXNjYW5fdCB5eXNjYW5uZXIpOwor
c3RhdGljIGludCBjaGVja190eXBlKHl5c2Nhbl90IHl5c2Nhbm5lcik7CitzdGF0aWMgaW50IHJl
c2VydmVkX3dvcmQoeXlzY2FuX3QgeXlzY2FubmVyKTsKICV9CiAKLS8qCi1UT0RPKGFsb2twKTog
eXlsaW5lbm8gaXMgb25seSBoZXJlIHRvIHN1cHBvcnQgb2xkIGZsZXguZXhlIGluIGNvbXBpbGVy
L3Rvb2xzLgotUmVtb3ZlIGl0IHdoZW4gd2UgY2FuIGV4Y2x1c2l2ZWx5IHVzZSB0aGUgbmV3ZXIg
dmVyc2lvbi4KLSovCi0lb3B0aW9uIHl5bGluZW5vCislb3B0aW9uIG5veXl3cmFwIG5vdW5wdXQg
bmV2ZXItaW50ZXJhY3RpdmUKKyVvcHRpb24geXlsaW5lbm8gcmVlbnRyYW50IGJpc29uLWJyaWRn
ZQorJW9wdGlvbiBzdGFjaworJW9wdGlvbiBleHRyYS10eXBlPSJUUGFyc2VDb250ZXh0KiIKKyV4
IENPTU1FTlQgRklFTERTCiAKLSVvcHRpb24gbm95eXdyYXAKLSVvcHRpb24gbmV2ZXItaW50ZXJh
Y3RpdmUKLSV4IEZJRUxEUworRCAgICAgICAgICAgWzAtOV0KK0wgICAgICAgICAgIFthLXpBLVpf
XQorSCAgICAgICAgICAgW2EtZkEtRjAtOV0KK0UgICAgICAgICAgIFtFZV1bKy1dP3tEfSsKK08g
ICAgICAgICAgIFswLTddCiAKLQogJSUKLTwqPiIvLyJbXlxuXSoiXG4iICAgICB7IC8qID8/IGNh
cnJpYWdlIGFuZC9vciBsaW5lLWZlZWQ/ICovIH07CiAKLSJpbnZhcmlhbnQiICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihJTlZBUklBTlQpOyB9Ci0iaGlnaHAiICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSElHSF9QUkVDSVNJ
T04pOyB9Ci0ibWVkaXVtcCIgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBy
ZXR1cm4oTUVESVVNX1BSRUNJU0lPTik7IH0KLSJsb3dwIiAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihMT1dfUFJFQ0lTSU9OKTsgfQotInByZWNpc2lvbiIg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFBSRUNJU0lPTik7IH0K
KyV7CisgICAgVFBhcnNlQ29udGV4dCogY29udGV4dCA9IHl5ZXh0cmE7CislfQogCi0iYXR0cmli
dXRlIiAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQVRUUklCVVRF
KTsgfQotImNvbnN0IiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0
dXJuKENPTlNUX1FVQUwpOyB9Ci0idW5pZm9ybSIgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oVU5JRk9STSk7IH0KLSJ2YXJ5aW5nIiAgICAgIHsgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihWQVJZSU5HKTsgfQorICAgIC8qIFNpbmdsZS1s
aW5lIGNvbW1lbnRzICovCisiLy8iW15cbl0qIDsKIAotImJyZWFrIiAgICAgICAgeyAgcHl5bHZh
bC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEJSRUFLKTsgfQotImNvbnRpbnVlIiAgICAg
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKENPTlRJTlVFKTsgfQotImRv
IiAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKERPKTsg
fQotImZvciIgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJu
KEZPUik7IH0KLSJ3aGlsZSIgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihXSElMRSk7IH0KKyAgICAvKiBNdWx0aS1saW5lIGNvbW1lbnRzICovCisiLyoiICAg
ICAgICAgICB7IHl5X3B1c2hfc3RhdGUoQ09NTUVOVCwgeXlzY2FubmVyKTsgfQorPENPTU1FTlQ+
LiB8Cis8Q09NTUVOVD5cbiA7Cis8Q09NTUVOVD4iKi8iICB7IHl5X3BvcF9zdGF0ZSh5eXNjYW5u
ZXIpOyB9CiAKLSJpZiIgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihJRik7IH0KLSJlbHNlIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihFTFNFKTsgfQorImludmFyaWFudCIgICAgeyByZXR1cm4oSU5WQVJJQU5U
KTsgfQorImhpZ2hwIiAgICAgICAgeyByZXR1cm4oSElHSF9QUkVDSVNJT04pOyB9CisibWVkaXVt
cCIgICAgICB7IHJldHVybihNRURJVU1fUFJFQ0lTSU9OKTsgfQorImxvd3AiICAgICAgICAgeyBy
ZXR1cm4oTE9XX1BSRUNJU0lPTik7IH0KKyJwcmVjaXNpb24iICAgIHsgcmV0dXJuKFBSRUNJU0lP
Tik7IH0KIAotImluIiAgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsg
cmV0dXJuKElOX1FVQUwpOyB9Ci0ib3V0IiAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oT1VUX1FVQUwpOyB9Ci0iaW5vdXQiICAgICAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oSU5PVVRfUVVBTCk7IH0KKyJhdHRyaWJ1dGUi
ICAgIHsgcmV0dXJuKEFUVFJJQlVURSk7IH0KKyJjb25zdCIgICAgICAgIHsgcmV0dXJuKENPTlNU
X1FVQUwpOyB9CisidW5pZm9ybSIgICAgICB7IHJldHVybihVTklGT1JNKTsgfQorInZhcnlpbmci
ICAgICAgeyByZXR1cm4oVkFSWUlORyk7IH0KIAotImZsb2F0IiAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJl
dHVybihGTE9BVF9UWVBFKTsgfQotImludCIgICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUg
PSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihJTlRf
VFlQRSk7IH0KLSJ2b2lkIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oVk9JRF9UWVBFKTsgfQot
ImJvb2wiICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250
ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybihCT09MX1RZUEUpOyB9Ci0idHJ1ZSIgICAg
ICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguYiA9IHRy
dWU7ICByZXR1cm4oQk9PTENPTlNUQU5UKTsgfQotImZhbHNlIiAgICAgICAgeyAgcHl5bHZhbC0+
bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5bHZhbC0+bGV4LmIgPSBmYWxzZTsgcmV0dXJuKEJPT0xD
T05TVEFOVCk7IH0KKyJicmVhayIgICAgICAgIHsgcmV0dXJuKEJSRUFLKTsgfQorImNvbnRpbnVl
IiAgICAgeyByZXR1cm4oQ09OVElOVUUpOyB9CisiZG8iICAgICAgICAgICB7IHJldHVybihETyk7
IH0KKyJmb3IiICAgICAgICAgIHsgcmV0dXJuKEZPUik7IH0KKyJ3aGlsZSIgICAgICAgIHsgcmV0
dXJuKFdISUxFKTsgfQogCi0iZGlzY2FyZCIgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5
bGluZW5vOyByZXR1cm4oRElTQ0FSRCk7IH0KLSJyZXR1cm4iICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihSRVRVUk4pOyB9CisiaWYiICAgICAgICAgICB7IHJl
dHVybihJRik7IH0KKyJlbHNlIiAgICAgICAgIHsgcmV0dXJuKEVMU0UpOyB9CiAKLSJtYXQyIiAg
ICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhB
ZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oTUFUUklYMik7IH0KLSJtYXQzIiAgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0
cnVlOyByZXR1cm4oTUFUUklYMyk7IH0KLSJtYXQ0IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5s
aW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4o
TUFUUklYNCk7IH0KKyJpbiIgICAgICAgICAgIHsgcmV0dXJuKElOX1FVQUwpOyB9Cisib3V0IiAg
ICAgICAgICB7IHJldHVybihPVVRfUVVBTCk7IH0KKyJpbm91dCIgICAgICAgIHsgcmV0dXJuKElO
T1VUX1FVQUwpOyB9CiAKLSJ2ZWMyIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKFZFQzIpOyB9
Ci0idmVjMyIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNv
bnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChWRUMzKTsgfQotInZlYzQiICAgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVy
VHlwZSA9IHRydWU7IHJldHVybiAoVkVDNCk7IH0KLSJpdmVjMiIgICAgICAgIHsgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyBy
ZXR1cm4gKElWRUMyKTsgfQotIml2ZWMzIiAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5
eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoSVZFQzMp
OyB9Ci0iaXZlYzQiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJz
ZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChJVkVDNCk7IH0KLSJidmVjMiIg
ICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhB
ZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKEJWRUMyKTsgfQotImJ2ZWMzIiAgICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IHRy
dWU7IHJldHVybiAoQlZFQzMpOyB9Ci0iYnZlYzQiICAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChC
VkVDNCk7IH0KKyJmbG9hdCIgICAgICAgIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsg
cmV0dXJuKEZMT0FUX1RZUEUpOyB9CisiaW50IiAgICAgICAgICB7IGNvbnRleHQtPmxleEFmdGVy
VHlwZSA9IHRydWU7IHJldHVybihJTlRfVFlQRSk7IH0KKyJ2b2lkIiAgICAgICAgIHsgY29udGV4
dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKFZPSURfVFlQRSk7IH0KKyJib29sIiAgICAg
ICAgIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKEJPT0xfVFlQRSk7IH0K
KyJ0cnVlIiAgICAgICAgIHsgeXlsdmFsLT5sZXguYiA9IHRydWU7ICByZXR1cm4oQk9PTENPTlNU
QU5UKTsgfQorImZhbHNlIiAgICAgICAgeyB5eWx2YWwtPmxleC5iID0gZmFsc2U7IHJldHVybihC
T09MQ09OU1RBTlQpOyB9CiAKLSJzYW1wbGVyMkQiICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gU0FN
UExFUjJEOyB9Ci0ic2FtcGxlckN1YmUiICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIFNBTVBMRVJDVUJF
OyB9CisiZGlzY2FyZCIgICAgICB7IHJldHVybihESVNDQVJEKTsgfQorInJldHVybiIgICAgICAg
eyByZXR1cm4oUkVUVVJOKTsgfQogCi0ic3RydWN0IiAgICAgICB7ICBweXlsdmFsLT5sZXgubGlu
ZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuKFNU
UlVDVCk7IH0KKyJtYXQyIiAgICAgICAgIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsg
cmV0dXJuKE1BVFJJWDIpOyB9CisibWF0MyIgICAgICAgICB7IGNvbnRleHQtPmxleEFmdGVyVHlw
ZSA9IHRydWU7IHJldHVybihNQVRSSVgzKTsgfQorIm1hdDQiICAgICAgICAgeyBjb250ZXh0LT5s
ZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4oTUFUUklYNCk7IH0KIAotImFzbSIgICAgICAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJ2ZWMyIiAgICAgICAgIHsgY29udGV4
dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChWRUMyKTsgfQorInZlYzMiICAgICAgICAg
eyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSB0cnVlOyByZXR1cm4gKFZFQzMpOyB9CisidmVjNCIg
ICAgICAgICB7IGNvbnRleHQtPmxleEFmdGVyVHlwZSA9IHRydWU7IHJldHVybiAoVkVDNCk7IH0K
KyJpdmVjMiIgICAgICAgIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChJ
VkVDMik7IH0KKyJpdmVjMyIgICAgICAgIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsg
cmV0dXJuIChJVkVDMyk7IH0KKyJpdmVjNCIgICAgICAgIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBl
ID0gdHJ1ZTsgcmV0dXJuIChJVkVDNCk7IH0KKyJidmVjMiIgICAgICAgIHsgY29udGV4dC0+bGV4
QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDMik7IH0KKyJidmVjMyIgICAgICAgIHsgY29u
dGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDMyk7IH0KKyJidmVjNCIgICAg
ICAgIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJuIChCVkVDNCk7IH0KIAot
ImNsYXNzIiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJ1bmlvbiIg
ICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0iZW51bSIgICAgICAgICB7
ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotInR5cGVkZWYiICAgICAgeyAgUGFSZXNl
cnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJ0ZW1wbGF0ZSIgICAgIHsgIFBhUmVzZXJ2ZWRXb3Jk
KCk7IHJldHVybiAwOyB9Ci0idGhpcyIgICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1
cm4gMDsgfQotInBhY2tlZCIgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0K
KyJzYW1wbGVyMkQiICAgICAgIHsgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsgcmV0dXJu
IFNBTVBMRVIyRDsgfQorInNhbXBsZXJDdWJlIiAgICAgeyBjb250ZXh0LT5sZXhBZnRlclR5cGUg
PSB0cnVlOyByZXR1cm4gU0FNUExFUkNVQkU7IH0KIAotImdvdG8iICAgICAgICAgeyAgUGFSZXNl
cnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJzd2l0Y2giICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3Jk
KCk7IHJldHVybiAwOyB9Ci0iZGVmYXVsdCIgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1
cm4gMDsgfQorInN0cnVjdCIgICAgICAgeyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSB0cnVlOyBy
ZXR1cm4oU1RSVUNUKTsgfQogCi0iaW5saW5lIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyBy
ZXR1cm4gMDsgfQotIm5vaW5saW5lIiAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7
IH0KLSJ2b2xhdGlsZSIgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0icHVi
bGljIiAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotInN0YXRpYyIgICAg
ICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJleHRlcm4iICAgICAgIHsgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0iZXh0ZXJuYWwiICAgICB7ICBQYVJlc2VydmVk
V29yZCgpOyByZXR1cm4gMDsgfQotImludGVyZmFjZSIgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsg
cmV0dXJuIDA7IH0KKyJhc20iICAgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQogCi0ibG9uZyIgICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsg
fQotInNob3J0IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJkb3Vi
bGUiICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0iaGFsZiIgICAgICAg
ICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotImZpeGVkIiAgICAgICAgeyAgUGFS
ZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJ1bnNpZ25lZCIgICAgIHsgIFBhUmVzZXJ2ZWRX
b3JkKCk7IHJldHVybiAwOyB9CisiY2xhc3MiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3Jk
KHl5c2Nhbm5lcik7IH0KKyJ1bmlvbiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlz
Y2FubmVyKTsgfQorImVudW0iICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5u
ZXIpOyB9CisidHlwZWRlZiIgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7
IH0KKyJ0ZW1wbGF0ZSIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
InRoaXMiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisicGFj
a2VkIiAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KIAotImlucHV0
IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJvdXRwdXQiICAgICAg
IHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9CisiZ290byIgICAgICAgICB7IHJldHVy
biByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJzd2l0Y2giICAgICAgIHsgcmV0dXJuIHJl
c2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImRlZmF1bHQiICAgICAgeyByZXR1cm4gcmVzZXJ2
ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKLSJodmVjMiIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3Jk
KCk7IHJldHVybiAwOyB9Ci0iaHZlYzMiICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1
cm4gMDsgfQotImh2ZWM0IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0K
LSJmdmVjMiIgICAgICAgIHsgIFBhUmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0iZnZlYzMi
ICAgICAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotImZ2ZWM0IiAgICAgICAg
eyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KLSJkdmVjMiIgICAgICAgIHsgIFBhUmVz
ZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0iZHZlYzMiICAgICAgICB7ICBQYVJlc2VydmVkV29y
ZCgpOyByZXR1cm4gMDsgfQotImR2ZWM0IiAgICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0
dXJuIDA7IH0KKyJpbmxpbmUiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorIm5vaW5saW5lIiAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
Cisidm9sYXRpbGUiICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJw
dWJsaWMiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInN0YXRp
YyIgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZXh0ZXJuIiAg
ICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJleHRlcm5hbCIgICAg
IHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImludGVyZmFjZSIgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKLSJzaXplb2YiICAgICAgIHsgIFBh
UmVzZXJ2ZWRXb3JkKCk7IHJldHVybiAwOyB9Ci0iY2FzdCIgICAgICAgICB7ICBQYVJlc2VydmVk
V29yZCgpOyByZXR1cm4gMDsgfQorImxvbmciICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29y
ZCh5eXNjYW5uZXIpOyB9Cisic2hvcnQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5
c2Nhbm5lcik7IH0KKyJkb3VibGUiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2Fu
bmVyKTsgfQorImhhbGYiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIp
OyB9CisiZml4ZWQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0K
KyJ1bnNpZ25lZCIgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQogCi0i
bmFtZXNwYWNlIiAgICB7ICBQYVJlc2VydmVkV29yZCgpOyByZXR1cm4gMDsgfQotInVzaW5nIiAg
ICAgICAgeyAgUGFSZXNlcnZlZFdvcmQoKTsgcmV0dXJuIDA7IH0KKyJpbnB1dCIgICAgICAgIHsg
cmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorIm91dHB1dCIgICAgICAgeyByZXR1
cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKLXtMfSh7TH18e0R9KSogICAgICAgeyAg
Ci0gICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyAKLSAgIHB5eWx2YWwtPmxleC5zdHJp
bmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAKLSAgIHJldHVybiBQYUlkZW50T3JUeXBlKCpw
eXlsdmFsLT5sZXguc3RyaW5nLCBwYXJzZUNvbnRleHQsIHB5eWx2YWwtPmxleC5zeW1ib2wpOyAK
LX0KKyJodmVjMiIgICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQor
Imh2ZWMzIiAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiaHZl
YzQiICAgICAgICB7IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJmdmVjMiIg
ICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImZ2ZWMzIiAgICAg
ICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZnZlYzQiICAgICAgICB7
IHJldHVybiByZXNlcnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KKyJkdmVjMiIgICAgICAgIHsgcmV0
dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorImR2ZWMzIiAgICAgICAgeyByZXR1cm4g
cmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CisiZHZlYzQiICAgICAgICB7IHJldHVybiByZXNl
cnZlZF93b3JkKHl5c2Nhbm5lcik7IH0KIAotMFt4WF17SH0rICAgICAgICAgeyBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguaSA9IHN0cnRvbCh5eXRleHQsIDAsIDAp
OyByZXR1cm4oSU5UQ09OU1RBTlQpOyB9Ci0we099KyAgICAgICAgICAgICB7IHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7
IHJldHVybihJTlRDT05TVEFOVCk7IH0KLTB7RH0rICAgICAgICAgICAgIHsgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmVycm9yKHl5bGluZW5vLCAiSW52YWxpZCBP
Y3RhbCBudW1iZXIuIiwgeXl0ZXh0LCAiIiwgIiIpOyBwYXJzZUNvbnRleHQucmVjb3ZlcigpOyBy
ZXR1cm4gMDt9Ci17RH0rICAgICAgICAgICAgICB7IHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5l
bm87IHB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05T
VEFOVCk7IH0KKyJzaXplb2YiICAgICAgIHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVy
KTsgfQorImNhc3QiICAgICAgICAgeyByZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9
CiAKLXtEfSt7RX0gICAgICAgICAgIHsgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcHl5
bHZhbC0+bGV4LmYgPSBzdGF0aWNfY2FzdDxmbG9hdD4oYXRvZih5eXRleHQpKTsgcmV0dXJuKEZM
T0FUQ09OU1RBTlQpOyB9Ci17RH0rIi4ie0R9Kih7RX0pPyB7IHB5eWx2YWwtPmxleC5saW5lID0g
eXlsaW5lbm87IHB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0b2YoeXl0ZXh0
KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQotIi4ie0R9Kyh7RX0pPyAgICAgeyBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyBweXlsdmFsLT5sZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0
PihhdG9mKHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KKyJuYW1lc3BhY2UiICAg
IHsgcmV0dXJuIHJlc2VydmVkX3dvcmQoeXlzY2FubmVyKTsgfQorInVzaW5nIiAgICAgICAgeyBy
ZXR1cm4gcmVzZXJ2ZWRfd29yZCh5eXNjYW5uZXIpOyB9CiAKLSIvKiIgICAgICAgICAgICB7ICBp
bnQgcmV0ID0gUGFQYXJzZUNvbW1lbnQocHl5bHZhbC0+bGV4LmxpbmUsIHBhcnNlQ29udGV4dCk7
IGlmICghcmV0KSByZXR1cm4gcmV0OyB9ICAgCit7TH0oe0x9fHtEfSkqICAgICAgIHsKKyAgIHl5
bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5nKHl5dGV4dCk7IAorICAgcmV0dXJuIGNo
ZWNrX3R5cGUoeXlzY2FubmVyKTsKK30KIAotIis9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxl
eC5saW5lID0geXlsaW5lbm87IHJldHVybihBRERfQVNTSUdOKTsgfQotIi09IiAgICAgICAgICAg
IHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihTVUJfQVNTSUdOKTsgfQot
Iio9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihN
VUxfQVNTSUdOKTsgfQotIi89IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihESVZfQVNTSUdOKTsgfQotIiU9IiAgICAgICAgICAgIHsgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihNT0RfQVNTSUdOKTsgfQotIjw8PSIgICAgICAg
ICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMRUZUX0FTU0lHTik7
IH0KLSI+Pj0iICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1
cm4oUklHSFRfQVNTSUdOKTsgfQotIiY9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5l
ID0geXlsaW5lbm87IHJldHVybihBTkRfQVNTSUdOKTsgfQotIl49IiAgICAgICAgICAgIHsgIHB5
eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihYT1JfQVNTSUdOKTsgfQotInw9IiAg
ICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihPUl9BU1NJ
R04pOyB9CiswW3hYXXtIfSsgICAgICAgICB7IHl5bHZhbC0+bGV4LmkgPSBzdHJ0b2woeXl0ZXh0
LCAwLCAwKTsgcmV0dXJuKElOVENPTlNUQU5UKTsgfQorMHtPfSsgICAgICAgICAgICAgeyB5eWx2
YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwgMCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0K
KzB7RH0rICAgICAgICAgICAgIHsgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJJbnZhbGlkIE9j
dGFsIG51bWJlci4iLCB5eXRleHQsICIiLCAiIik7IGNvbnRleHQtPnJlY292ZXIoKTsgcmV0dXJu
IDA7fQore0R9KyAgICAgICAgICAgICAgeyB5eWx2YWwtPmxleC5pID0gc3RydG9sKHl5dGV4dCwg
MCwgMCk7IHJldHVybihJTlRDT05TVEFOVCk7IH0KIAotIisrIiAgICAgICAgICAgIHsgIHB5eWx2
YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihJTkNfT1ApOyB9Ci0iLS0iICAgICAgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKERFQ19PUCk7IH0KLSIm
JiIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQU5E
X09QKTsgfQotInx8IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihPUl9PUCk7IH0KLSJeXiIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oWE9SX09QKTsgfQotIjw9IiAgICAgICAgICAgIHsgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihMRV9PUCk7IH0KLSI+PSIgICAgICAgICAgICB7
ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oR0VfT1ApOyB9Ci0iPT0iICAg
ICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKEVRX09QKTsg
fQotIiE9IiAgICAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihORV9PUCk7IH0KLSI8PCIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGlu
ZW5vOyByZXR1cm4oTEVGVF9PUCk7IH0KLSI+PiIgICAgICAgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oUklHSFRfT1ApOyB9Ci0iOyIgICAgICAgICB7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyBwYXJzZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gZmFs
c2U7IHJldHVybihTRU1JQ09MT04pOyB9Ci0oInsifCI8JSIpICAgICAgeyAgcHl5bHZhbC0+bGV4
LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IGZhbHNlOyByZXR1
cm4oTEVGVF9CUkFDRSk7IH0KLSgifSJ8IiU+IikgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oUklHSFRfQlJBQ0UpOyB9Ci0iLCIgICAgICAgICB7ICBweXlsdmFs
LT5sZXgubGluZSA9IHl5bGluZW5vOyBpZiAocGFyc2VDb250ZXh0LmluVHlwZVBhcmVuKSBwYXJz
ZUNvbnRleHQubGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihDT01NQSk7IH0KLSI6IiAgICAg
ICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihDT0xPTik7IH0KLSI9
IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29udGV4dC5s
ZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKEVRVUFMKTsgfQotIigiICAgICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcGFyc2VDb250ZXh0LmxleEFmdGVyVHlwZSA9IGZh
bHNlOyBwYXJzZUNvbnRleHQuaW5UeXBlUGFyZW4gPSB0cnVlOyByZXR1cm4oTEVGVF9QQVJFTik7
IH0KLSIpIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHBhcnNlQ29u
dGV4dC5pblR5cGVQYXJlbiA9IGZhbHNlOyByZXR1cm4oUklHSFRfUEFSRU4pOyB9Ci0oIlsifCI8
OiIpICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKExFRlRfQlJB
Q0tFVCk7IH0KLSgiXSJ8Ijo+IikgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5v
OyByZXR1cm4oUklHSFRfQlJBQ0tFVCk7IH0KK3tEfSt7RX0gICAgICAgICAgIHsgeXlsdmFsLT5s
ZXguZiA9IHN0YXRpY19jYXN0PGZsb2F0PihhdG9mX2RvdCh5eXRleHQpKTsgcmV0dXJuKEZMT0FU
Q09OU1RBTlQpOyB9Cit7RH0rIi4ie0R9Kih7RX0pPyB7IHl5bHZhbC0+bGV4LmYgPSBzdGF0aWNf
Y2FzdDxmbG9hdD4oYXRvZl9kb3QoeXl0ZXh0KSk7IHJldHVybihGTE9BVENPTlNUQU5UKTsgfQor
Ii4ie0R9Kyh7RX0pPyAgICAgeyB5eWx2YWwtPmxleC5mID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGF0
b2ZfZG90KHl5dGV4dCkpOyByZXR1cm4oRkxPQVRDT05TVEFOVCk7IH0KKworIis9IiAgICAgICAg
ICAgIHsgIHJldHVybihBRERfQVNTSUdOKTsgfQorIi09IiAgICAgICAgICAgIHsgIHJldHVybihT
VUJfQVNTSUdOKTsgfQorIio9IiAgICAgICAgICAgIHsgIHJldHVybihNVUxfQVNTSUdOKTsgfQor
Ii89IiAgICAgICAgICAgIHsgIHJldHVybihESVZfQVNTSUdOKTsgfQorIiU9IiAgICAgICAgICAg
IHsgIHJldHVybihNT0RfQVNTSUdOKTsgfQorIjw8PSIgICAgICAgICAgIHsgIHJldHVybihMRUZU
X0FTU0lHTik7IH0KKyI+Pj0iICAgICAgICAgICB7ICByZXR1cm4oUklHSFRfQVNTSUdOKTsgfQor
IiY9IiAgICAgICAgICAgIHsgIHJldHVybihBTkRfQVNTSUdOKTsgfQorIl49IiAgICAgICAgICAg
IHsgIHJldHVybihYT1JfQVNTSUdOKTsgfQorInw9IiAgICAgICAgICAgIHsgIHJldHVybihPUl9B
U1NJR04pOyB9CisKKyIrKyIgICAgICAgICAgICB7ICByZXR1cm4oSU5DX09QKTsgfQorIi0tIiAg
ICAgICAgICAgIHsgIHJldHVybihERUNfT1ApOyB9CisiJiYiICAgICAgICAgICAgeyAgcmV0dXJu
KEFORF9PUCk7IH0KKyJ8fCIgICAgICAgICAgICB7ICByZXR1cm4oT1JfT1ApOyB9CisiXl4iICAg
ICAgICAgICAgeyAgcmV0dXJuKFhPUl9PUCk7IH0KKyI8PSIgICAgICAgICAgICB7ICByZXR1cm4o
TEVfT1ApOyB9CisiPj0iICAgICAgICAgICAgeyAgcmV0dXJuKEdFX09QKTsgfQorIj09IiAgICAg
ICAgICAgIHsgIHJldHVybihFUV9PUCk7IH0KKyIhPSIgICAgICAgICAgICB7ICByZXR1cm4oTkVf
T1ApOyB9CisiPDwiICAgICAgICAgICAgeyAgcmV0dXJuKExFRlRfT1ApOyB9CisiPj4iICAgICAg
ICAgICAgeyAgcmV0dXJuKFJJR0hUX09QKTsgfQorIjsiICAgICAgICAgICAgIHsgY29udGV4dC0+
bGV4QWZ0ZXJUeXBlID0gZmFsc2U7IHJldHVybihTRU1JQ09MT04pOyB9CisoInsifCI8JSIpICAg
ICAgeyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKExFRlRfQlJBQ0UpOyB9
CisoIn0ifCIlPiIpICAgICAgeyByZXR1cm4oUklHSFRfQlJBQ0UpOyB9CisiLCIgICAgICAgICB7
IGlmIChjb250ZXh0LT5pblR5cGVQYXJlbikgY29udGV4dC0+bGV4QWZ0ZXJUeXBlID0gZmFsc2U7
IHJldHVybihDT01NQSk7IH0KKyI6IiAgICAgICAgIHsgcmV0dXJuKENPTE9OKTsgfQorIj0iICAg
ICAgICAgeyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxzZTsgcmV0dXJuKEVRVUFMKTsgfQor
IigiICAgICAgICAgeyBjb250ZXh0LT5sZXhBZnRlclR5cGUgPSBmYWxzZTsgY29udGV4dC0+aW5U
eXBlUGFyZW4gPSB0cnVlOyByZXR1cm4oTEVGVF9QQVJFTik7IH0KKyIpIiAgICAgICAgIHsgY29u
dGV4dC0+aW5UeXBlUGFyZW4gPSBmYWxzZTsgcmV0dXJuKFJJR0hUX1BBUkVOKTsgfQorKCJbInwi
PDoiKSAgICAgIHsgcmV0dXJuKExFRlRfQlJBQ0tFVCk7IH0KKygiXSJ8Ijo+IikgICAgICB7IHJl
dHVybihSSUdIVF9CUkFDS0VUKTsgfQogIi4iICAgICAgICAgeyBCRUdJTihGSUVMRFMpOyAgcmV0
dXJuKERPVCk7IH0KLSIhIiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87
IHJldHVybihCQU5HKTsgfQotIi0iICAgICAgICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxp
bmVubzsgcmV0dXJuKERBU0gpOyB9Ci0ifiIgICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyByZXR1cm4oVElMREUpOyB9Ci0iKyIgICAgICAgICB7ICBweXlsdmFsLT5sZXgu
bGluZSA9IHl5bGluZW5vOyByZXR1cm4oUExVUyk7IH0KLSIqIiAgICAgICAgIHsgIHB5eWx2YWwt
PmxleC5saW5lID0geXlsaW5lbm87IHJldHVybihTVEFSKTsgfQotIi8iICAgICAgICAgeyAgcHl5
bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFNMQVNIKTsgfQotIiUiICAgICAgICAg
eyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFBFUkNFTlQpOyB9Ci0iPCIg
ICAgICAgICB7ICBweXlsdmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oTEVGVF9BTkdM
RSk7IH0KLSI+IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXlsaW5lbm87IHJldHVy
bihSSUdIVF9BTkdMRSk7IH0KLSJ8IiAgICAgICAgIHsgIHB5eWx2YWwtPmxleC5saW5lID0geXls
aW5lbm87IHJldHVybihWRVJUSUNBTF9CQVIpOyB9Ci0iXiIgICAgICAgICB7ICBweXlsdmFsLT5s
ZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQ0FSRVQpOyB9Ci0iJiIgICAgICAgICB7ICBweXls
dmFsLT5sZXgubGluZSA9IHl5bGluZW5vOyByZXR1cm4oQU1QRVJTQU5EKTsgfQotIj8iICAgICAg
ICAgeyAgcHl5bHZhbC0+bGV4LmxpbmUgPSB5eWxpbmVubzsgcmV0dXJuKFFVRVNUSU9OKTsgfQor
IiEiICAgICAgICAgeyByZXR1cm4oQkFORyk7IH0KKyItIiAgICAgICAgIHsgcmV0dXJuKERBU0gp
OyB9CisifiIgICAgICAgICB7IHJldHVybihUSUxERSk7IH0KKyIrIiAgICAgICAgIHsgcmV0dXJu
KFBMVVMpOyB9CisiKiIgICAgICAgICB7IHJldHVybihTVEFSKTsgfQorIi8iICAgICAgICAgeyBy
ZXR1cm4oU0xBU0gpOyB9CisiJSIgICAgICAgICB7IHJldHVybihQRVJDRU5UKTsgfQorIjwiICAg
ICAgICAgeyByZXR1cm4oTEVGVF9BTkdMRSk7IH0KKyI+IiAgICAgICAgIHsgcmV0dXJuKFJJR0hU
X0FOR0xFKTsgfQorInwiICAgICAgICAgeyByZXR1cm4oVkVSVElDQUxfQkFSKTsgfQorIl4iICAg
ICAgICAgeyByZXR1cm4oQ0FSRVQpOyB9CisiJiIgICAgICAgICB7IHJldHVybihBTVBFUlNBTkQp
OyB9CisiPyIgICAgICAgICB7IHJldHVybihRVUVTVElPTik7IH0KIAogPEZJRUxEUz57TH0oe0x9
fHtEfSkqIHsgCi1CRUdJTihJTklUSUFMKTsgICAgICAKLSAgICBweXlsdmFsLT5sZXgubGluZSA9
IHl5bGluZW5vOyAgICAgCi0gICAgcHl5bHZhbC0+bGV4LnN0cmluZyA9IE5ld1Bvb2xUU3RyaW5n
KHl5dGV4dCk7IAotICAgIHJldHVybiBGSUVMRF9TRUxFQ1RJT047IH0KKyAgICBCRUdJTihJTklU
SUFMKTsKKyAgICB5eWx2YWwtPmxleC5zdHJpbmcgPSBOZXdQb29sVFN0cmluZyh5eXRleHQpOyAK
KyAgICByZXR1cm4gRklFTERfU0VMRUNUSU9OOworfQogPEZJRUxEUz5bIFx0XHZcZlxyXSB7fQog
CiBbIFx0XHZcblxmXHJdICAgeyAgfQotPCo+PDxFT0Y+PiB7ICgmcGFyc2VDb250ZXh0KS0+QWZ0
ZXJFT0YgPSB0cnVlOyB5eV9kZWxldGVfYnVmZmVyKFlZX0NVUlJFTlRfQlVGRkVSKTsgeXl0ZXJt
aW5hdGUoKTt9Ci08Kj4uICAgIHsgcGFyc2VDb250ZXh0LmluZm9TaW5rLmluZm8gPDwgIkZMRVg6
IFVua25vd24gY2hhciAiIDw8IHl5dGV4dCA8PCAiXG4iOwotICAgICAgICAgIHJldHVybiAwOyB9
Cis8Kj48PEVPRj4+ICAgICAgeyBjb250ZXh0LT5BZnRlckVPRiA9IHRydWU7IHl5dGVybWluYXRl
KCk7IH0KKzwqPi4gICAgICAgICAgICB7IGNvbnRleHQtPndhcm5pbmcoeXlsaW5lbm8sICJVbmtu
b3duIGNoYXIiLCB5eXRleHQsICIiKTsgcmV0dXJuIDA7IH0KIAogJSUKIAotCi0vL0luY2x1ZGlu
ZyBQcmUtcHJvY2Vzc29yLgogZXh0ZXJuICJDIiB7Ci0gICNpbmNsdWRlICJjb21waWxlci9wcmVw
cm9jZXNzb3IvcHJlcHJvY2Vzcy5oIgotfSAKKy8vIFByZXByb2Nlc3NvciBpbnRlcmZhY2UuCisj
aW5jbHVkZSAiY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaCIKIAotLy8KLS8vIFRo
ZSBZWV9JTlBVVCBtYWNybyBqdXN0IGNhbGxzIHRoaXMuICBNYXliZSB0aGlzIGNvdWxkIGJlIGp1
c3QgcHV0IGludG8KLS8vIHRoZSBtYWNybyBkaXJlY3RseS4KLS8vCisjZGVmaW5lIFNFVFVQX0NP
TlRFWFQocHApIFwKKyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0ID0gKFRQYXJzZUNvbnRleHQq
KSBwcC0+cEM7IFwKKyAgICBzdHJ1Y3QgeXlndXRzX3QqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3Qq
KSBjb250ZXh0LT5zY2FubmVyOwogCi1pbnQgeXlfaW5wdXQoY2hhciogYnVmLCBpbnQgbWF4X3Np
emUpCi17Ci0gICAgaW50IGxlbjsKLQotICAgIGlmICgobGVuID0geXlsZXhfQ1BQKGJ1ZiwgbWF4
X3NpemUpKSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAobGVuID49IG1heF9zaXpl
KSAKLSAgICAgICAgWVlfRkFUQUxfRVJST1IoICJpbnB1dCBidWZmZXIgb3ZlcmZsb3csIGNhbid0
IGVubGFyZ2UgYnVmZmVyIGJlY2F1c2Ugc2Nhbm5lciB1c2VzIFJFSkVDVCIgKTsKLQotICAgIGJ1
ZltsZW5dID0gJyAnOwotCXJldHVybiBsZW4rMTsKLX0KLQotCi0vLwotLy8gUGFyc2UgYW4gYXJy
YXkgb2Ygc3RyaW5ncyB1c2luZyB5eXBhcnNlLiAgV2Ugc2V0IHVwIGdsb2JhbHMgdXNlZCBieQot
Ly8geXl3cmFwLgotLy8KLS8vIFJldHVybnMgMCBmb3Igc3VjY2VzcywgYXMgcGVyIHl5cGFyc2Uo
KS4KLS8vCi1pbnQgUGFQYXJzZVN0cmluZ3MoY2hhciogYXJndltdLCBpbnQgc3RyTGVuW10sIGlu
dCBhcmdjLCBUUGFyc2VDb250ZXh0JiBwYXJzZUNvbnRleHRMb2NhbCkKLXsKLSAgICBpbnQgYXJn
djBsZW47Ci0gICAgCi0gICAgU2NhbkZyb21TdHJpbmcoYXJndlswXSk7IAotICAgIAotICAgIC8v
U3RvcmluZyB0aGUgQ3VycmVudCBDb21waWxlciBQYXJzZSBjb250ZXh0IGludG8gdGhlIGNwcCBz
dHJ1Y3R1cmUuCi0JY3BwLT5wQyA9ICh2b2lkKikmcGFyc2VDb250ZXh0TG9jYWw7Ci0JCi0JaWYg
KCFhcmd2IHx8IGFyZ2MgPT0gMCkKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgCi0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBhcmdjOyArK2kpIHsKLSAgICAgICAgaWYgKCFhcmd2W2ldKSB7Ci0gICAg
ICAgICAgICBwYXJzZUNvbnRleHRMb2NhbC5lcnJvcigwLCAiTnVsbCBzaGFkZXIgc291cmNlIHN0
cmluZyIsICIiLCAiIik7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHRMb2NhbC5yZWNvdmVyKCk7
Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAo
IXN0ckxlbikgewotICAgICAgICBhcmd2MGxlbiA9IChpbnQpIHN0cmxlbihhcmd2WzBdKTsKLSAg
ICAgICAgc3RyTGVuICAgPSAmYXJndjBsZW47Ci0gICAgfQotICAgIHl5cmVzdGFydCgwKTsKLSAg
ICAoJnBhcnNlQ29udGV4dExvY2FsKS0+QWZ0ZXJFT0YgPSBmYWxzZTsKLSAgICBjcHAtPlBhV2hp
Y2hTdHIgPSAwOwotICAgIGNwcC0+UGFBcmd2ICAgICA9IGFyZ3Y7Ci0gICAgY3BwLT5QYUFyZ2Mg
ICAgID0gYXJnYzsKLSAgICBjcHAtPlBhU3RyTGVuICAgPSBzdHJMZW47Ci0gICAgY3BwLT5wYXN0
Rmlyc3RTdGF0ZW1lbnQgPSAwOwotICAgIHl5bGluZW5vICAgPSAxOwotICAgCi0gICAgaWYgKCpj
cHAtPlBhU3RyTGVuID49IDApIHsgICAgCi0gICAgICAgIGludCByZXQgPSB5eXBhcnNlKCh2b2lk
KikoJnBhcnNlQ29udGV4dExvY2FsKSk7Ci0gICAgICAgIGlmIChyZXQgfHwgY3BwLT5Db21waWxl
RXJyb3IgPT0gMSB8fCBwYXJzZUNvbnRleHRMb2NhbC5yZWNvdmVyZWRGcm9tRXJyb3IgfHwgcGFy
c2VDb250ZXh0TG9jYWwubnVtRXJyb3JzID4gMCkKLSAgICAgICAgICAgICByZXR1cm4gMTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBlbHNlCi0gICAg
ICAgIHJldHVybiAwOwotfQotCi12b2lkIHl5ZXJyb3IoY29uc3QgY2hhciAqcykgCi17Ci0gICAg
aWYgKCgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5BZnRlckVPRikgewotICAgICAgICBpZiAo
Y3BwLT50b2tlbnNCZWZvcmVFT0YgPT0gMSkgewotICAgICAgICAgICAgR2xvYmFsUGFyc2VDb250
ZXh0LT5lcnJvcih5eWxpbmVubywgInN5bnRheCBlcnJvciIsICJwcmUtbWF0dXJlIEVPRiIsIHMs
ICIiKTsKLSAgICAgICAgICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAg
ICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgR2xvYmFsUGFyc2VDb250ZXh0LT5lcnJvcih5eWxp
bmVubywgInN5bnRheCBlcnJvciIsIHl5dGV4dCwgcywgIiIpOwotICAgICAgICBHbG9iYWxQYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICB9ICAgICAgICAgICAgCi19Ci0KLXZvaWQgUGFSZXNl
cnZlZFdvcmQoKQotewotICAgIEdsb2JhbFBhcnNlQ29udGV4dC0+ZXJyb3IoeXlsaW5lbm8sICJS
ZXNlcnZlZCB3b3JkLiIsIHl5dGV4dCwgIiIsICIiKTsKLSAgICBHbG9iYWxQYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKLX0KLQotaW50IFBhSWRlbnRPclR5cGUoVFN0cmluZyYgaWQsIFRQYXJzZUNv
bnRleHQmIHBhcnNlQ29udGV4dExvY2FsLCBUU3ltYm9sKiYgc3ltYm9sKQotewotICAgIHN5bWJv
bCA9IHBhcnNlQ29udGV4dExvY2FsLnN5bWJvbFRhYmxlLmZpbmQoaWQpOwotICAgIGlmIChwYXJz
ZUNvbnRleHRMb2NhbC5sZXhBZnRlclR5cGUgPT0gZmFsc2UgJiYgc3ltYm9sICYmIHN5bWJvbC0+
aXNWYXJpYWJsZSgpKSB7Ci0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBzdGF0aWNfY2Fz
dDxUVmFyaWFibGUqPihzeW1ib2wpOwotICAgICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5cGUo
KSkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0TG9jYWwubGV4QWZ0ZXJUeXBlID0gdHJ1ZTsK
LSAgICAgICAgICAgIHJldHVybiBUWVBFX05BTUU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIElERU5USUZJRVI7Ci19Ci0KLWludCBQYVBhcnNlQ29tbWVudChpbnQgJmxpbmVu
bywgVFBhcnNlQ29udGV4dCYgcGFyc2VDb250ZXh0TG9jYWwpCi17Ci0gICAgaW50IHRyYW5zaXRp
b25GbGFnID0gMDsKLSAgICBpbnQgbmV4dENoYXI7Ci0gICAgCi0gICAgd2hpbGUgKHRyYW5zaXRp
b25GbGFnICE9IDIpIHsKLSAgICAgICAgbmV4dENoYXIgPSB5eWlucHV0KCk7Ci0gICAgICAgIGlm
IChuZXh0Q2hhciA9PSAnXG4nKQotICAgICAgICAgICAgIGxpbmVubysrOwotICAgICAgICBzd2l0
Y2ggKG5leHRDaGFyKSB7Ci0gICAgICAgIGNhc2UgJyonIDoKLSAgICAgICAgICAgIHRyYW5zaXRp
b25GbGFnID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICcvJyA6ICAvKiBp
ZiBzdGFyIGlzIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIsIHRoZW4gaXQgaXMgdGhlIGVuZCBvZiBj
b21tZW50ICovCi0gICAgICAgICAgICBpZiAodHJhbnNpdGlvbkZsYWcgPT0gMSkgewotICAgICAg
ICAgICAgICAgIHJldHVybiAxIDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPRiA6Ci0gICAgICAgICAgICAvKiBSYWlzZSBlcnJvciBtZXNzYWdlIGhl
cmUgKi8KLSAgICAgICAgICAgIHBhcnNlQ29udGV4dExvY2FsLmVycm9yKHl5bGluZW5vLCAiRW5k
IG9mIHNoYWRlciBmb3VuZCBiZWZvcmUgZW5kIG9mIGNvbW1lbnQuIiwgIiIsICIiLCAiIik7Ci0g
ICAgICAgICAgICBHbG9iYWxQYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgIHJl
dHVybiBZWV9OVUxMOyAKLSAgICAgICAgZGVmYXVsdCA6ICAvKiBBbnkgb3RoZXIgY2hhcmFjdGVy
IHdpbGwgYmUgYSBwYXJ0IG9mIHRoZSBjb21tZW50ICovCi0gICAgICAgICAgICB0cmFuc2l0aW9u
RmxhZyA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLWV4dGVybiAi
QyIgewotCisvLyBQcmVwcm9jZXNzb3IgY2FsbGJhY2tzLgogdm9pZCBDUFBEZWJ1Z0xvZ01zZyhj
b25zdCBjaGFyICptc2cpCiB7Ci0gICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmluZm9T
aW5rLmRlYnVnLm1lc3NhZ2UoRVByZWZpeE5vbmUsIG1zZyk7CisgICAgU0VUVVBfQ09OVEVYVChj
cHApOworICAgIGNvbnRleHQtPmluZm9TaW5rLmRlYnVnLm1lc3NhZ2UoRVByZWZpeE5vbmUsIG1z
Zyk7CiB9CiAKIHZvaWQgQ1BQV2FybmluZ1RvSW5mb0xvZyhjb25zdCBjaGFyICptc2cpCiB7Ci0g
ICAgKChUUGFyc2VDb250ZXh0ICopY3BwLT5wQyktPmluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJl
Zml4V2FybmluZywgbXNnLCB5eWxpbmVubyk7IAorICAgIFNFVFVQX0NPTlRFWFQoY3BwKTsKKyAg
ICBjb250ZXh0LT53YXJuaW5nKHl5bGluZW5vLCBtc2csICIiLCAiIik7CiB9CiAKIHZvaWQgQ1BQ
U2hJbmZvTG9nTXNnKGNvbnN0IGNoYXIgKm1zZykKIHsKLSAgICAoKFRQYXJzZUNvbnRleHQgKilj
cHAtPnBDKS0+ZXJyb3IoeXlsaW5lbm8sIiIsICIiLG1zZywiIik7Ci0gICAgR2xvYmFsUGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgU0VUVVBfQ09OVEVYVChjcHApOworICAgIGNvbnRleHQt
PmVycm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
fQogCiB2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKm1zZykKIHsKLSAgICAoKFRQYXJzZUNv
bnRleHQgKiljcHAtPnBDKS0+ZXJyb3IoeXlsaW5lbm8sInN5bnRheCBlcnJvciIsICIiLG1zZywi
Iik7Ci0gICAgR2xvYmFsUGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgU0VUVVBfQ09OVEVY
VChjcHApOworICAgIGNvbnRleHQtPmVycm9yKHl5bGluZW5vLCBtc2csICIiLCAiIik7CisgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogfQogCiB2b2lkIFNldExpbmVOdW1iZXIoaW50IGxpbmUpCiB7
Ci0gICAgeXlsaW5lbm8gJj0gflNvdXJjZUxvY0xpbmVNYXNrOwotICAgIHl5bGluZW5vIHw9IGxp
bmU7CisgICAgU0VUVVBfQ09OVEVYVChjcHApOworICAgIGludCBzdHJpbmcgPSAwOworICAgIERl
Y29kZVNvdXJjZUxvYyh5eWxpbmVubywgJnN0cmluZywgTlVMTCk7CisgICAgeXlsaW5lbm8gPSBF
bmNvZGVTb3VyY2VMb2Moc3RyaW5nLCBsaW5lKTsKIH0KIAogdm9pZCBTZXRTdHJpbmdOdW1iZXIo
aW50IHN0cmluZykKIHsKLSAgICB5eWxpbmVubyA9IChzdHJpbmcgPDwgU291cmNlTG9jU3RyaW5n
U2hpZnQpIHwgKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spOworICAgIFNFVFVQX0NPTlRF
WFQoY3BwKTsKKyAgICBpbnQgbGluZSA9IDA7CisgICAgRGVjb2RlU291cmNlTG9jKHl5bGluZW5v
LCBOVUxMLCAmbGluZSk7CisgICAgeXlsaW5lbm8gPSBFbmNvZGVTb3VyY2VMb2Moc3RyaW5nLCBs
aW5lKTsKIH0KIAotaW50IEdldFN0cmluZ051bWJlcih2b2lkKQoraW50IEdldFN0cmluZ051bWJl
cigpCiB7Ci0gICAgcmV0dXJuIHl5bGluZW5vID4+IDE2OworICAgIFNFVFVQX0NPTlRFWFQoY3Bw
KTsKKyAgICBpbnQgc3RyaW5nID0gMDsKKyAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sICZz
dHJpbmcsIE5VTEwpOworICAgIHJldHVybiBzdHJpbmc7CiB9CiAKLWludCBHZXRMaW5lTnVtYmVy
KHZvaWQpCitpbnQgR2V0TGluZU51bWJlcigpCiB7Ci0gICAgcmV0dXJuIHl5bGluZW5vICYgU291
cmNlTG9jTGluZU1hc2s7CisgICAgU0VUVVBfQ09OVEVYVChjcHApOworICAgIGludCBsaW5lID0g
MDsKKyAgICBEZWNvZGVTb3VyY2VMb2MoeXlsaW5lbm8sIE5VTEwsICZsaW5lKTsKKyAgICByZXR1
cm4gbGluZTsKIH0KIAotdm9pZCBJbmNMaW5lTnVtYmVyKHZvaWQpCit2b2lkIEluY0xpbmVOdW1i
ZXIoKQogewotICAgIGlmICgoeXlsaW5lbm8gJiBTb3VyY2VMb2NMaW5lTWFzaykgPD0gU291cmNl
TG9jTGluZU1hc2spCi0gICAgICAgICsreXlsaW5lbm87CisgICAgU0VUVVBfQ09OVEVYVChjcHAp
OworICAgIGludCBzdHJpbmcgPSAwLCBsaW5lID0gMDsKKyAgICBEZWNvZGVTb3VyY2VMb2MoeXls
aW5lbm8sICZzdHJpbmcsICZsaW5lKTsKKyAgICB5eWxpbmVubyA9IEVuY29kZVNvdXJjZUxvYyhz
dHJpbmcsICsrbGluZSk7CiB9CiAKLXZvaWQgRGVjTGluZU51bWJlcih2b2lkKQordm9pZCBEZWNM
aW5lTnVtYmVyKCkKIHsKLSAgICBpZiAoKHl5bGluZW5vICYgU291cmNlTG9jTGluZU1hc2spID4g
MCkKLSAgICAgICAgLS15eWxpbmVubzsKKyAgICBTRVRVUF9DT05URVhUKGNwcCk7CisgICAgaW50
IHN0cmluZyA9IDAsIGxpbmUgPSAwOworICAgIERlY29kZVNvdXJjZUxvYyh5eWxpbmVubywgJnN0
cmluZywgJmxpbmUpOworICAgIHl5bGluZW5vID0gRW5jb2RlU291cmNlTG9jKHN0cmluZywgLS1s
aW5lKTsKIH0KIAogdm9pZCBIYW5kbGVQcmFnbWEoY29uc3QgY2hhciAqKnRva2VucywgaW50IG51
bVRva2VucykKLXsgICAgCit7CisgICAgU0VUVVBfQ09OVEVYVChjcHApOwogICAgIGlmICghc3Ry
Y21wKHRva2Vuc1swXSwgIm9wdGltaXplIikpIHsKICAgICAgICAgaWYgKG51bVRva2VucyAhPSA0
KSB7CiAgICAgICAgICAgICBDUFBTaEluZm9Mb2dNc2coIm9wdGltaXplIHByYWdtYSBzeW50YXgg
aXMgaW5jb3JyZWN0Iik7CkBAIC00NTIsOSArMzQ0LDkgQEAKICAgICAgICAgfQogICAgICAgICAg
ICAgCiAgICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9uIikpCi0gICAgICAgICAgICAo
KFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSA9IHRydWU7
CisgICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gdHJ1ZTsKICAg
ICAgICAgZWxzZSBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAgICAgICAgICAgICgo
VFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gZmFsc2U7
CisgICAgICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLm9wdGltaXplID0gZmFsc2U7CiAg
ICAgICAgIGVsc2UgewogICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9uXCIgb3IgXCJv
ZmZcIiBleHBlY3RlZCBhZnRlciAnKCcgZm9yICdvcHRpbWl6ZScgcHJhZ21hIik7CiAgICAgICAg
ICAgICByZXR1cm47CkBAIC00NzYsOSArMzY4LDkgQEAKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgICAgIGlmICghc3RyY21wKHRva2Vuc1syXSwgIm9uIikpCi0gICAgICAgICAgICAoKFRQ
YXJzZUNvbnRleHQgKiljcHAtPnBDKS0+Y29udGV4dFByYWdtYS5kZWJ1ZyA9IHRydWU7CisgICAg
ICAgICAgICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnID0gdHJ1ZTsKICAgICAgICAgZWxz
ZSBpZiAoIXN0cmNtcCh0b2tlbnNbMl0sICJvZmYiKSkKLSAgICAgICAgICAgICgoVFBhcnNlQ29u
dGV4dCAqKWNwcC0+cEMpLT5jb250ZXh0UHJhZ21hLmRlYnVnID0gZmFsc2U7CisgICAgICAgICAg
ICBjb250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnID0gZmFsc2U7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJcIm9uXCIgb3IgXCJvZmZcIiBleHBlY3RlZCBh
ZnRlciAnKCcgZm9yICdkZWJ1ZycgcHJhZ21hIik7CiAgICAgICAgICAgICByZXR1cm47CkBAIC00
ODksNyArMzgxLDYgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0gZWxz
ZSB7Ci0KICNpZmRlZiBQUkFHTUFfVEFCTEUKICAgICAgICAgLy8KICAgICAgICAgLy8gaW1wbGVt
ZW50YXRpb24gc3BlY2lmaWMgcHJhZ21hCkBAIC01MjQsMjEgKzQxNSwyNCBAQAogCiB2b2lkIFN0
b3JlU3RyKGNoYXIgKnN0cmluZykKIHsKKyAgICBTRVRVUF9DT05URVhUKGNwcCk7CiAgICAgVFN0
cmluZyBzdHJTcmM7CiAgICAgc3RyU3JjID0gVFN0cmluZyhzdHJpbmcpOwogCi0gICAgKChUUGFy
c2VDb250ZXh0ICopY3BwLT5wQyktPkhhc2hFcnJNc2cgPSAoKFRQYXJzZUNvbnRleHQgKiljcHAt
PnBDKS0+SGFzaEVyck1zZyArICIgIiArIHN0clNyYzsKKyAgICBjb250ZXh0LT5IYXNoRXJyTXNn
ID0gY29udGV4dC0+SGFzaEVyck1zZyArICIgIiArIHN0clNyYzsKIH0KIAogY29uc3QgY2hhciog
R2V0U3RyZnJvbVRTdHIodm9pZCkKIHsKLSAgICBjcHAtPkVyck1zZyA9ICgoKFRQYXJzZUNvbnRl
eHQgKiljcHAtPnBDKS0+SGFzaEVyck1zZykuY19zdHIoKTsKKyAgICBTRVRVUF9DT05URVhUKGNw
cCk7CisgICAgY3BwLT5FcnJNc2cgPSBjb250ZXh0LT5IYXNoRXJyTXNnLmNfc3RyKCk7CiAgICAg
cmV0dXJuIGNwcC0+RXJyTXNnOwogfQogCiB2b2lkIFJlc2V0VFN0cmluZyh2b2lkKQogewotICAg
ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5IYXNoRXJyTXNnID0gIiI7CisgICAgU0VUVVBf
Q09OVEVYVChjcHApOworICAgIGNvbnRleHQtPkhhc2hFcnJNc2cgPSAiIjsKIH0KIAogVEJlaGF2
aW9yIEdldEJlaGF2aW9yKGNvbnN0IGNoYXIqIGJlaGF2aW9yKQpAQCAtNTU3LDggKzQ1MSw5IEBA
CiAgICAgfSAgICAgICAgCiB9CiAKLXZvaWQgIHVwZGF0ZUV4dGVuc2lvbkJlaGF2aW9yKGNvbnN0
IGNoYXIqIGV4dE5hbWUsIGNvbnN0IGNoYXIqIGJlaGF2aW9yKQordm9pZCB1cGRhdGVFeHRlbnNp
b25CZWhhdmlvcihjb25zdCBjaGFyKiBleHROYW1lLCBjb25zdCBjaGFyKiBiZWhhdmlvcikKIHsK
KyAgICBTRVRVUF9DT05URVhUKGNwcCk7CiAgICAgVEJlaGF2aW9yIGJlaGF2aW9yVmFsID0gR2V0
QmVoYXZpb3IoYmVoYXZpb3IpOwogICAgIFRNYXA8VFN0cmluZywgVEJlaGF2aW9yPjo6IGl0ZXJh
dG9yIGl0ZXI7CiAgICAgVFN0cmluZyBtc2c7CkBAIC01NjksMTIgKzQ2NCwxMiBAQAogICAgICAg
ICAgICAgQ1BQU2hJbmZvTG9nTXNnKCJleHRlbnNpb24gJ2FsbCcgY2Fubm90IGhhdmUgJ3JlcXVp
cmUnIG9yICdlbmFibGUnIGJlaGF2aW9yIik7ICAKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaXRlciA9ICAoKFRQYXJzZUNvbnRleHQgKilj
cHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuYmVnaW4oKTsgaXRlciAhPSAoKFRQYXJzZUNvbnRl
eHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRlcikKKyAgICAgICAg
ICAgIGZvciAoaXRlciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmJlZ2luKCk7IGl0ZXIg
IT0gY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCk7ICsraXRlcikKICAgICAgICAgICAg
ICAgICBpdGVyLT5zZWNvbmQgPSBiZWhhdmlvclZhbDsKICAgICAgICAgfSAgICAgICAgCiAgICAg
fSBlbHNlIHsKLSAgICAgICAgaXRlciA9ICgoVFBhcnNlQ29udGV4dCAqKWNwcC0+cEMpLT5leHRl
bnNpb25CZWhhdmlvci5maW5kKFRTdHJpbmcoZXh0TmFtZSkpOwotICAgICAgICBpZiAoaXRlciA9
PSAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+ZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsK
KyAgICAgICAgaXRlciA9IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9yLmZpbmQoVFN0cmluZyhl
eHROYW1lKSk7CisgICAgICAgIGlmIChpdGVyID09IGNvbnRleHQtPmV4dGVuc2lvbkJlaGF2aW9y
LmVuZCgpKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGJlaGF2aW9yVmFsKSB7CiAgICAgICAgICAg
ICBjYXNlIEVCaFJlcXVpcmU6CiAgICAgICAgICAgICAgICAgQ1BQU2hJbmZvTG9nTXNnKChUU3Ry
aW5nKCJleHRlbnNpb24gJyIpICsgZXh0TmFtZSArICInIGlzIG5vdCBzdXBwb3J0ZWQiKS5jX3N0
cigpKTsgIApAQCAtNTgzLDcgKzQ3OCw3IEBACiAgICAgICAgICAgICBjYXNlIEVCaFdhcm46CiAg
ICAgICAgICAgICBjYXNlIEVCaERpc2FibGU6CiAgICAgICAgICAgICAgICAgbXNnID0gVFN0cmlu
ZygiZXh0ZW5zaW9uICciKSArIGV4dE5hbWUgKyAiJyBpcyBub3Qgc3VwcG9ydGVkIjsKLSAgICAg
ICAgICAgICAgICAoKFRQYXJzZUNvbnRleHQgKiljcHAtPnBDKS0+aW5mb1NpbmsuaW5mby5tZXNz
YWdlKEVQcmVmaXhXYXJuaW5nLCBtc2cuY19zdHIoKSwgeXlsaW5lbm8pOyAKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5pbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeFdhcm5pbmcsIG1zZy5j
X3N0cigpLCB5eWxpbmVubyk7IAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNTkxLDEwICs0ODYsODUgQEAKICAgICAgICAgICAg
IGl0ZXItPnNlY29uZCA9IGJlaGF2aW9yVmFsOwogICAgIH0KIH0KLSAgICAgICAgCiB9ICAvLyBl
eHRlcm4gIkMiCiAKLXZvaWQgc2V0SW5pdGlhbFN0YXRlKCkKLXsKLSAgICB5eV9zdGFydCA9IDE7
CitpbnQgc3RyaW5nX2lucHV0KGNoYXIqIGJ1ZiwgaW50IG1heF9zaXplLCB5eXNjYW5fdCB5eXNj
YW5uZXIpIHsKKyAgICBpbnQgbGVuOworCisgICAgaWYgKChsZW4gPSB5eWxleF9DUFAoYnVmLCBt
YXhfc2l6ZSkpID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChsZW4gPj0gbWF4X3Np
emUpIAorICAgICAgICBZWV9GQVRBTF9FUlJPUigiaW5wdXQgYnVmZmVyIG92ZXJmbG93LCBjYW4n
dCBlbmxhcmdlIGJ1ZmZlciBiZWNhdXNlIHNjYW5uZXIgdXNlcyBSRUpFQ1QiKTsKKworICAgIGJ1
ZltsZW5dID0gJyAnOworICAgIHJldHVybiBsZW4rMTsKIH0KKworaW50IGNoZWNrX3R5cGUoeXlz
Y2FuX3QgeXlzY2FubmVyKSB7CisgICAgc3RydWN0IHl5Z3V0c190KiB5eWcgPSAoc3RydWN0IHl5
Z3V0c190KikgeXlzY2FubmVyOworICAgIAorICAgIGludCB0b2tlbiA9IElERU5USUZJRVI7Cisg
ICAgVFN5bWJvbCogc3ltYm9sID0geXlleHRyYS0+c3ltYm9sVGFibGUuZmluZCh5eXRleHQpOwor
ICAgIGlmICh5eWV4dHJhLT5sZXhBZnRlclR5cGUgPT0gZmFsc2UgJiYgc3ltYm9sICYmIHN5bWJv
bC0+aXNWYXJpYWJsZSgpKSB7CisgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSBzdGF0aWNf
Y2FzdDxUVmFyaWFibGUqPihzeW1ib2wpOworICAgICAgICBpZiAodmFyaWFibGUtPmlzVXNlclR5
cGUoKSkgeworICAgICAgICAgICAgeXlleHRyYS0+bGV4QWZ0ZXJUeXBlID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHRva2VuID0gVFlQRV9OQU1FOworICAgICAgICB9CisgICAgfQorICAgIHl5bHZhbC0+
bGV4LnN5bWJvbCA9IHN5bWJvbDsKKyAgICByZXR1cm4gdG9rZW47Cit9CisKK2ludCByZXNlcnZl
ZF93b3JkKHl5c2Nhbl90IHl5c2Nhbm5lcikgeworICAgIHN0cnVjdCB5eWd1dHNfdCogeXlnID0g
KHN0cnVjdCB5eWd1dHNfdCopIHl5c2Nhbm5lcjsKKworICAgIHl5ZXh0cmEtPmVycm9yKHl5bGlu
ZW5vLCAiSWxsZWdhbCB1c2Ugb2YgcmVzZXJ2ZWQgd29yZCIsIHl5dGV4dCwgIiIpOworICAgIHl5
ZXh0cmEtPnJlY292ZXIoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCB5eWVycm9yKFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbikgeworICAgIHN0cnVjdCB5eWd1
dHNfdCogeXlnID0gKHN0cnVjdCB5eWd1dHNfdCopIGNvbnRleHQtPnNjYW5uZXI7CisKKyAgICBp
ZiAoY29udGV4dC0+QWZ0ZXJFT0YpIHsKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoeXlsaW5lbm8s
IHJlYXNvbiwgInVuZXhwZWN0ZWQgRU9GIiwgIiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNv
bnRleHQtPmVycm9yKHl5bGluZW5vLCByZWFzb24sIHl5dGV4dCwgIiIpOworICAgIH0KKyAgICBj
b250ZXh0LT5yZWNvdmVyKCk7Cit9CisKK2ludCBnbHNsYW5nX2luaXRpYWxpemUoVFBhcnNlQ29u
dGV4dCogY29udGV4dCkgeworICAgIHl5c2Nhbl90IHNjYW5uZXIgPSBOVUxMOworICAgIGlmICh5
eWxleF9pbml0X2V4dHJhKGNvbnRleHQsICZzY2FubmVyKSkKKyAgICAgICAgcmV0dXJuIDE7CisK
KyAgICBjb250ZXh0LT5zY2FubmVyID0gc2Nhbm5lcjsKKyAgICByZXR1cm4gMDsKK30KKworaW50
IGdsc2xhbmdfZmluYWxpemUoVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworICAgIHl5c2Nhbl90
IHNjYW5uZXIgPSBjb250ZXh0LT5zY2FubmVyOworICAgIGlmIChzY2FubmVyID09IE5VTEwpIHJl
dHVybiAwOworICAgIAorICAgIGNvbnRleHQtPnNjYW5uZXIgPSBOVUxMOworICAgIHJldHVybiB5
eWxleF9kZXN0cm95KHNjYW5uZXIpOworfQorCit2b2lkIGdsc2xhbmdfc2NhbihpbnQgY291bnQs
IGNvbnN0IGNoYXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAg
ICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KSB7CisgICAgeXlyZXN0YXJ0KE5VTEws
IGNvbnRleHQtPnNjYW5uZXIpOworICAgIHl5c2V0X2xpbmVubyhFbmNvZGVTb3VyY2VMb2MoMCwg
MSksIGNvbnRleHQtPnNjYW5uZXIpOworICAgIGNvbnRleHQtPkFmdGVyRU9GID0gZmFsc2U7Cisg
ICAgCisgICAgLy8gSW5pdCBwcmVwcm9jZXNzb3IuCisgICAgY3BwLT5wQyA9IGNvbnRleHQ7Cisg
ICAgY3BwLT5QYVdoaWNoU3RyID0gMDsKKyAgICBjcHAtPlBhQXJndiAgICAgPSBzdHJpbmc7Cisg
ICAgY3BwLT5QYUFyZ2MgICAgID0gY291bnQ7CisgICAgY3BwLT5QYVN0ckxlbiAgID0gbGVuZ3Ro
OworICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMDsKKyAgICBTY2FuRnJvbVN0cmluZyhz
dHJpbmdbMF0pOworfQorCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvSW5pdGlhbGl6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9Jbml0aWFsaXplLmgJKHJldmlzaW9uIDc2MDI1KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTcsMTcgKzE3LDE5IEBACiBwdWJsaWM6CiAgICAgUE9PTF9BTExPQ0FUT1JfTkVXX0RFTEVURShH
bG9iYWxQb29sQWxsb2NhdG9yKQogCi0gICAgdm9pZCBpbml0aWFsaXplKEVTaExhbmd1YWdlIGxh
bmd1YWdlLCBFU2hTcGVjIHNwZWMsIGNvbnN0IFRCdWlsdEluUmVzb3VyY2UmIHJlc291cmNlcyk7
CisgICAgdm9pZCBpbml0aWFsaXplKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3Bl
YywKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJj
ZXMpOwogICAgIGNvbnN0IFRCdWlsdEluU3RyaW5ncyYgZ2V0QnVpbHRJblN0cmluZ3MoKSB7IHJl
dHVybiBidWlsdEluU3RyaW5nczsgfQogCiBwcm90ZWN0ZWQ6CiAgICAgVEJ1aWx0SW5TdHJpbmdz
IGJ1aWx0SW5TdHJpbmdzOwogfTsKIAotdm9pZCBJZGVudGlmeUJ1aWx0SW5zKEVTaExhbmd1YWdl
IGxhbmd1YWdlLCBFU2hTcGVjIHNwZWMsIGNvbnN0IFRCdWlsdEluUmVzb3VyY2UmIHJlc291cmNl
cywKK3ZvaWQgSWRlbnRpZnlCdWlsdElucyhTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVj
IHNwZWMsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiBy
ZXNvdXJjZXMsCiAgICAgICAgICAgICAgICAgICAgICAgVFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJs
ZSk7CiAKLWV4dGVybiAiQyIgaW50IEluaXRQcmVwcm9jZXNzb3Iodm9pZCk7Ci1leHRlcm4gIkMi
IGludCBGaW5hbGl6ZVByZXByb2Nlc3Nvcih2b2lkKTsKK3ZvaWQgSW5pdEV4dGVuc2lvbkJlaGF2
aW9yKGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHRlbnNpb25CZWhhdmlvcik7CiAKICNl
bmRpZiAvLyBfSU5JVElBTElaRV9JTkNMVURFRF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gNzYw
MjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU3ltYm9sVGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDAsNiArMTQwLDIyIEBACiAgICAgfQogfQogCisvLwor
Ly8gQ2hhbmdlIGFsbCBmdW5jdGlvbiBlbnRyaWVzIGluIHRoZSB0YWJsZSB3aXRoIHRoZSBub24t
bWFuZ2xlZCBuYW1lCisvLyB0byBiZSByZWxhdGVkIHRvIHRoZSBwcm92aWRlZCBidWlsdC1pbiBl
eHRlbnNpb24uIFRoaXMgaXMgYSBsb3cKKy8vIHBlcmZvcm1hbmNlIG9wZXJhdGlvbiwgYW5kIG9u
bHkgaW50ZW5kZWQgZm9yIHN5bWJvbCB0YWJsZXMgdGhhdAorLy8gbGl2ZSBhY3Jvc3MgYSBsYXJn
ZSBudW1iZXIgb2YgY29tcGlsZXMuCisvLwordm9pZCBUU3ltYm9sVGFibGVMZXZlbDo6cmVsYXRl
VG9FeHRlbnNpb24oY29uc3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYgZXh0KQoreworICAg
IGZvciAodExldmVsOjppdGVyYXRvciBpdCA9IGxldmVsLmJlZ2luKCk7IGl0ICE9IGxldmVsLmVu
ZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vjb25kLT5pc0Z1bmN0aW9uKCkpIHsKKyAg
ICAgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihp
dC0+c2Vjb25kKTsKKyAgICAgICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0TmFtZSgpID09IG5hbWUp
CisgICAgICAgICAgICAgICAgZnVuY3Rpb24tPnJlbGF0ZVRvRXh0ZW5zaW9uKGV4dCk7CisgICAg
ICAgIH0KKyAgICB9Cit9CiAKIFRTeW1ib2w6OlRTeW1ib2woY29uc3QgVFN5bWJvbCYgY29weU9m
KQogewpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmcu
eQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2xz
bGFuZy55CShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9nbHNsYW5nLnkJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw0IEBACisvKgogLy8K
IC8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCkBAIC00LDg2ICs1LDM0IEBACiAv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgogLy8KIAotLyoqCi0gKiBUaGlzIGlzIGJpc29u
IGdyYW1tYXIgYW5kIHByb2R1Y3Rpb24gY29kZSBmb3IgcGFyc2luZyB0aGUgT3BlbkdMIDIuMCBz
aGFkaW5nCi0gKiBsYW5ndWFnZXMuCi0gKi8KLSV7CitUaGlzIGZpbGUgY29udGFpbnMgdGhlIFlh
Y2MgZ3JhbW1hciBmb3IgR0xTTCBFUy4KK0Jhc2VkIG9uIEFOU0kgQyBZYWNjIGdyYW1tYXI6Cito
dHRwOi8vd3d3Lmx5c2F0b3IubGl1LnNlL2MvQU5TSS1DLWdyYW1tYXIteS5odG1sCiAKLS8qIEJh
c2VkIG9uOgotQU5TSSBDIFlhY2MgZ3JhbW1hcgorSUYgWU9VIE1PRElGWSBUSElTIEZJTEUgWU9V
IEFMU08gTkVFRCBUTyBSVU4gZ2VuZXJhdGVfZ2xzbGFuZ19wYXJzZXIuc2gsCitXSElDSCBHRU5F
UkFURVMgVEhFIEdMU0wgRVMgUEFSU0VSIChnbHNsYW5nX3RhYi5jcHAgQU5EIGdsc2xhbmdfdGFi
LmgpLgorKi8KIAotSW4gMTk4NSwgSmVmZiBMZWUgcHVibGlzaGVkIGhpcyBZYWNjIGdyYW1tYXIg
KHdoaWNoIGlzIGFjY29tcGFuaWVkIGJ5IGEKLW1hdGNoaW5nIExleCBzcGVjaWZpY2F0aW9uKSBm
b3IgdGhlIEFwcmlsIDMwLCAxOTg1IGRyYWZ0IHZlcnNpb24gb2YgdGhlCi1BTlNJIEMgc3RhbmRh
cmQuICBUb20gU3RvY2tmaXNjaCByZXBvc3RlZCBpdCB0byBuZXQuc291cmNlcyBpbiAxOTg3OyB0
aGF0Ci1vcmlnaW5hbCwgYXMgbWVudGlvbmVkIGluIHRoZSBhbnN3ZXIgdG8gcXVlc3Rpb24gMTcu
MjUgb2YgdGhlIGNvbXAubGFuZy5jCi1GQVEsIGNhbiBiZSBmdHAnZWQgZnJvbSBmdHAudXUubmV0
LCBmaWxlIHVzZW5ldC9uZXQuc291cmNlcy9hbnNpLmMuZ3JhbW1hci5aLgorJXsKKy8vCisvLyBD
b3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkg
YSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0Ug
ZmlsZS4KKy8vCiAKLUkgaW50ZW5kIHRvIGtlZXAgdGhpcyB2ZXJzaW9uIGFzIGNsb3NlIHRvIHRo
ZSBjdXJyZW50IEMgU3RhbmRhcmQgZ3JhbW1hciBhcwotcG9zc2libGU7IHBsZWFzZSBsZXQgbWUg
a25vdyBpZiB5b3UgZGlzY292ZXIgZGlzY3JlcGFuY2llcy4KKy8vIFRoaXMgZmlsZSBpcyBhdXRv
LWdlbmVyYXRlZCBieSBnZW5lcmF0ZV9nbHNsYW5nX3BhcnNlci5zaC4gRE8gTk9UIEVESVQhCiAK
LUp1dHRhIERlZ2VuZXIsIDE5OTUKLSovCi0KICNpbmNsdWRlICJjb21waWxlci9TeW1ib2xUYWJs
ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1BhcnNlSGVscGVyLmgiCiAjaW5jbHVkZSAiR0xTTEFO
Ry9TaGFkZXJMYW5nLmgiCiAKLSNkZWZpbmUgWVlQQVJTRV9QQVJBTSBwYXJzZUNvbnRleHRMb2Nh
bAotLyoKLVRPRE8oYWxva3ApOiBZWVBBUlNFX1BBUkFNX0RFQ0wgaXMgb25seSBoZXJlIHRvIHN1
cHBvcnQgb2xkIGJpc29uLmV4ZSBpbgotY29tcGlsZXIvdG9vbHMuIFJlbW92ZSBpdCB3aGVuIHdl
IGNhbiBleGNsdXNpdmVseSB1c2UgdGhlIG5ld2VyIHZlcnNpb24uCi0qLwotI2RlZmluZSBZWVBB
UlNFX1BBUkFNX0RFQ0wgdm9pZCoKLSNkZWZpbmUgcGFyc2VDb250ZXh0ICgoVFBhcnNlQ29udGV4
dCopKHBhcnNlQ29udGV4dExvY2FsKSkKLSNkZWZpbmUgWVlMRVhfUEFSQU0gcGFyc2VDb250ZXh0
TG9jYWwKLSNkZWZpbmUgWVlfREVDTCBpbnQgeXlsZXgoWVlTVFlQRSogcHl5bHZhbCwgdm9pZCog
cGFyc2VDb250ZXh0TG9jYWwpCi1leHRlcm4gdm9pZCB5eWVycm9yKGNvbnN0IGNoYXIqKTsKKyNk
ZWZpbmUgWVlMRVhfUEFSQU0gY29udGV4dC0+c2Nhbm5lcgorJX0KIAotI2RlZmluZSBGUkFHX1ZF
UlRfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ0ZyYWdt
ZW50ICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHBhcnNlQ29udGV4
dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1ZlcnRleCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gdmVy
dGV4L2ZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgIFwKLSAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Cisl
ZXhwZWN0IDEgLyogT25lIHNoaWZ0IHJlZHVjZSBjb25mbGljdCBiZWNhdXNlIG9mIGlmIHwgZWxz
ZSAqLworJXB1cmUtcGFyc2VyCislcGFyc2UtcGFyYW0ge1RQYXJzZUNvbnRleHQqIGNvbnRleHR9
CiAKLSNkZWZpbmUgVkVSVEVYX09OTFkoUywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1
YWdlICE9IEVTaExhbmdWZXJ0ZXgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIHZlcnRleCBzaGFk
ZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAgICBcCi0gICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi0jZGVmaW5l
IEZSQUdfT05MWShTLCBMKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKLSAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hM
YW5nRnJhZ21lbnQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcGFy
c2VDb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFnbWVudCBzaGFkZXJzIG9ubHkg
IiwgUywgIiIsICIiKTsgICAgICAgICAgXAotICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIo
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotI2RlZmluZSBQQUNLX09OTFko
UywgTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgaWYgKHBhcnNlQ29udGV4dC0+bGFuZ3VhZ2UgIT0gRVNoTGFuZ1BhY2spIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHBhcnNlQ29udGV4dC0+
ZXJyb3IoTCwgIiBzdXBwb3J0ZWQgaW4gcGFjayBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsg
ICAgICAgICAgICAgIFwKLSAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi19Ci0KLSNkZWZpbmUgVU5QQUNLX09OTFkoUywgTCkgeyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg
IGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlICE9IEVTaExhbmdVbnBhY2spIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKEwsICIg
c3VwcG9ydGVkIGluIHVucGFjayBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgICAgICAgICAg
ICBcCi0gICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotfQotCi0jZGVmaW5lIFBBQ0tfVU5QQUNLX09OTFkoUywgTCkgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAocGFyc2VD
b250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nVW5wYWNrICYmICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgcGFyc2VDb250ZXh0LT5sYW5ndWFnZSAhPSBFU2hMYW5nUGFj
aykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcGFyc2VDb250
ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBwYWNrL3VucGFjayBzaGFkZXJzIG9ubHkgIiwg
UywgIiIsICIiKTsgICAgICAgXAotICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLSV9CiAldW5pb24gewogICAgIHN0cnVjdCB7
CiAgICAgICAgIFRTb3VyY2VMb2MgbGluZTsKQEAgLTExNywxMSArNjYsMzIgQEAKIH0KIAogJXsK
LSAgICBleHRlcm4gaW50IHl5bGV4KFlZU1RZUEUqLCB2b2lkKik7CitleHRlcm4gaW50IHl5bGV4
KFlZU1RZUEUqIHl5bHZhbF9wYXJhbSwgdm9pZCogeXlzY2FubmVyKTsKK2V4dGVybiB2b2lkIHl5
ZXJyb3IoVFBhcnNlQ29udGV4dCogY29udGV4dCwgY29uc3QgY2hhciogcmVhc29uKTsKKworI2Rl
ZmluZSBGUkFHX1ZFUlRfT05MWShTLCBMKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5
cGUgIT0gU0hfRlJBR01FTlRfU0hBREVSICYmICBcCisgICAgICAgIGNvbnRleHQtPnNoYWRlclR5
cGUgIT0gU0hfVkVSVEVYX1NIQURFUikgeyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAi
IHN1cHBvcnRlZCBpbiB2ZXJ0ZXgvZnJhZ21lbnQgc2hhZGVycyBvbmx5ICIsIFMsICIiLCAiIik7
ICBcCisgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsgIFwKKyAgICB9ICBcCit9CisKKyNkZWZp
bmUgVkVSVEVYX09OTFkoUywgTCkgeyAgXAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9
IFNIX1ZFUlRFWF9TSEFERVIpIHsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwgIiBzdXBw
b3J0ZWQgaW4gdmVydGV4IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAgfSAgXAorfQorCisjZGVmaW5lIEZSQUdfT05MWShT
LCBMKSB7ICBcCisgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgIT0gU0hfRlJBR01FTlRfU0hB
REVSKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3VwcG9ydGVkIGluIGZyYWdt
ZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIpOyAgXAorICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7ICBcCisgICAgfSAgXAorfQogJX0KIAotJXB1cmVfcGFyc2VyIC8qIEp1c3QgaW4gY2Fz
ZSBpcyBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzICovCi0lZXhwZWN0IDEgLyogT25lIHNo
aWZ0IHJlZHVjZSBjb25mbGljdCBiZWNhdXNlIG9mIGlmIHwgZWxzZSAqLwogJXRva2VuIDxsZXg+
IElOVkFSSUFOVCBISUdIX1BSRUNJU0lPTiBNRURJVU1fUFJFQ0lTSU9OIExPV19QUkVDSVNJT04g
UFJFQ0lTSU9OCiAldG9rZW4gPGxleD4gQVRUUklCVVRFIENPTlNUX1FVQUwgQk9PTF9UWVBFIEZM
T0FUX1RZUEUgSU5UX1RZUEUKICV0b2tlbiA8bGV4PiBCUkVBSyBDT05USU5VRSBETyBFTFNFIEZP
UiBJRiBESVNDQVJEIFJFVFVSTgpAQCAtMTg1LDE3ICsxNTUsMTcgQEAKICAgICAgICAgY29uc3Qg
VFN5bWJvbCogc3ltYm9sID0gJDEuc3ltYm9sOwogICAgICAgICBjb25zdCBUVmFyaWFibGUqIHZh
cmlhYmxlOwogICAgICAgICBpZiAoc3ltYm9sID09IDApIHsKLSAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+ZXJyb3IoJDEubGluZSwgInVuZGVjbGFyZWQgaWRlbnRpZmllciIsICQxLnN0cmluZy0+
Y19zdHIoKSwgIiIpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAidW5kZWNsYXJlZCBpZGVudGlmaWVyIiwg
JDEuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICBUVHlwZSB0eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQpOwogICAgICAg
ICAgICAgVFZhcmlhYmxlKiBmYWtlVmFyaWFibGUgPSBuZXcgVFZhcmlhYmxlKCQxLnN0cmluZywg
dHlwZSk7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFr
ZVZhcmlhYmxlKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqZmFr
ZVZhcmlhYmxlKTsKICAgICAgICAgICAgIHZhcmlhYmxlID0gZmFrZVZhcmlhYmxlOwogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgLy8gVGhpcyBpZGVudGlmaWVyIGNhbiBvbmx5IGJlIGEg
dmFyaWFibGUgdHlwZSBzeW1ib2wKICAgICAgICAgICAgIGlmICghIHN5bWJvbC0+aXNWYXJpYWJs
ZSgpKSB7Ci0gICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAidmFy
aWFibGUgZXhwZWN0ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCksICIiKTsKLSAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJv
cigkMS5saW5lLCAidmFyaWFibGUgZXhwZWN0ZWQiLCAkMS5zdHJpbmctPmNfc3RyKCksICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB2YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7
CiAgICAgICAgIH0KQEAgLTIwNiw5ICsxNzYsOSBAQAogICAgICAgICBpZiAodmFyaWFibGUtPmdl
dFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCApIHsKICAgICAgICAgICAgIENvbnN0
YW50VW5pb24qIGNvbnN0QXJyYXkgPSB2YXJpYWJsZS0+Z2V0Q29uc3RQb2ludGVyKCk7CiAgICAg
ICAgICAgICBUVHlwZSB0KHZhcmlhYmxlLT5nZXRUeXBlKCkpOwotICAgICAgICAgICAgJCQgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKGNvbnN0QXJyYXksIHQs
ICQxLmxpbmUpOworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29u
c3RhbnRVbmlvbihjb25zdEFycmF5LCB0LCAkMS5saW5lKTsKICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2YXJpYWJs
ZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFi
bGUtPmdldFR5cGUoKSwgJDEubGluZSk7CiAgICAgfQpAQCAtMjI0LDIyICsxOTQsMjIgQEAKICAg
ICAgICAgLy8gY2hlY2sgZm9yIG92ZXJmbG93IGZvciBjb25zdGFudHMKICAgICAgICAgLy8KICAg
ICAgICAgaWYgKGFicygkMS5pKSA+PSAoMSA8PCAxNikpIHsKLSAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+ZXJyb3IoJDEubGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIsICIi
KTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgY29u
dGV4dC0+ZXJyb3IoJDEubGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIsICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICBD
b25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAg
IHVuaW9uQXJyYXktPnNldElDb25zdCgkMS5pKTsKLSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQxLmxpbmUpOworICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwg
RWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQxLmxpbmUpOwogICAgIH0KICAgICB8IEZMT0FUQ09O
U1RBTlQgewogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50
VW5pb25bMV07CiAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgkMS5mKTsKLSAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDEubGluZSk7Cisg
ICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMS5saW5lKTsK
ICAgICB9CiAgICAgfCBCT09MQ09OU1RBTlQgewogICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgIHVuaW9uQXJyYXktPnNldEJD
b25zdCgkMS5iKTsKLSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRD
b25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZx
Q29uc3QpLCAkMS5saW5lKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgJDEubGluZSk7CiAgICAgfQogICAgIHwgTEVGVF9QQVJFTiBleHByZXNzaW9uIFJJ
R0hUX1BBUkVOIHsKICAgICAgICAgJCQgPSAkMjsKQEAgLTI1Myw1NyArMjIzLDU3IEBACiAgICAg
fCBwb3N0Zml4X2V4cHJlc3Npb24gTEVGVF9CUkFDS0VUIGludGVnZXJfZXhwcmVzc2lvbiBSSUdI
VF9CUkFDS0VUIHsKICAgICAgICAgaWYgKCEkMS0+aXNBcnJheSgpICYmICEkMS0+aXNNYXRyaXgo
KSAmJiAhJDEtPmlzVmVjdG9yKCkpIHsKICAgICAgICAgICAgIGlmICgkMS0+Z2V0QXNTeW1ib2xO
b2RlKCkpCi0gICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxl
ZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAkMS0+
Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5bWJvbCgpLmNfc3RyKCksICIiKTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIGxlZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBl
IGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAkMS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldFN5
bWJvbCgpLmNfc3RyKCksICIiKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbGVmdCBvZiAnWycgaXMgbm90IG9mIHR5cGUg
YXJyYXksIG1hdHJpeCwgb3IgdmVjdG9yICIsICJleHByZXNzaW9uIiwgIiIpOwotICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDIubGluZSwgIiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBv
ciB2ZWN0b3IgIiwgImV4cHJlc3Npb24iLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCQxLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVy
KCkgPT0gRXZxQ29uc3QgJiYgJDMtPmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CiAgICAg
ICAgICAgICBpZiAoJDEtPmlzQXJyYXkoKSkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciBhcnJh
eXMKLSAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RBcnJheU5vZGUo
JDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29u
c3QoKSwgJDEsICQyLmxpbmUpOworICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+YWRkQ29u
c3RBcnJheU5vZGUoJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRl
cigpLT5nZXRJQ29uc3QoKSwgJDEsICQyLmxpbmUpOwogICAgICAgICAgICAgfSBlbHNlIGlmICgk
MS0+aXNWZWN0b3IoKSkgeyAgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgdmVjdG9ycwogICAgICAg
ICAgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRzOwogICAgICAgICAgICAgICAgIGZpZWxkcy5u
dW0gPSAxOwogICAgICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gJDMtPmdldEFzQ29u
c3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsgLy8gbmVl
ZCB0byBkbyBpdCB0aGlzIHdheSBiZWNhdXNlIHYueHkgc2VuZHMgZmllbGRzIGludGVnZXIgYXJy
YXkKLSAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RWZWN0b3JOb2Rl
KGZpZWxkcywgJDEsICQyLmxpbmUpOworICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+YWRk
Q29uc3RWZWN0b3JOb2RlKGZpZWxkcywgJDEsICQyLmxpbmUpOwogICAgICAgICAgICAgfSBlbHNl
IGlmICgkMS0+aXNNYXRyaXgoKSkgeyAvLyBjb25zdGFudCBmb2xkaW5nIGZvciBtYXRyaWNlcwot
ICAgICAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5hZGRDb25zdE1hdHJpeE5vZGUoJDMt
PmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3Qo
KSwgJDEsICQyLmxpbmUpOworICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+YWRkQ29uc3RN
YXRyaXhOb2RlKCQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIo
KS0+Z2V0SUNvbnN0KCksICQxLCAkMi5saW5lKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIGlmICgkMy0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsK
ICAgICAgICAgICAgICAgICBpZiAoKCQxLT5pc1ZlY3RvcigpIHx8ICQxLT5pc01hdHJpeCgpKSAm
JiAkMS0+Z2V0VHlwZSgpLmdldE5vbWluYWxTaXplKCkgPD0gJDMtPmdldEFzQ29uc3RhbnRVbmlv
bigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSAmJiAhJDEtPmlzQXJyYXko
KSApIHsKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAi
IiwgIlsiLCAiZmllbGQgc2VsZWN0aW9uIG91dCBvZiByYW5nZSAnJWQnIiwgJDMtPmdldEFzQ29u
c3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAiIiwgIlsiLCAiZmllbGQgc2VsZWN0aW9uIG91
dCBvZiByYW5nZSAnJWQnIiwgJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5
UG9pbnRlcigpLT5nZXRJQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBp
ZiAoJDEtPmlzQXJyYXkoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQxLT5nZXRU
eXBlKCkuZ2V0QXJyYXlTaXplKCkgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICgkMS0+Z2V0VHlwZSgpLmdldE1heEFycmF5U2l6ZSgpIDw9ICQzLT5nZXRBc0NvbnN0YW50
VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTZXRNYXhTaXpl
KCQxLT5nZXRBc1N5bWJvbE5vZGUoKSwgJDEtPmdldFR5cGVQb2ludGVyKCksICQzLT5nZXRBc0Nv
bnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksIHRydWUs
ICQyLmxpbmUpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250
ZXh0LT5hcnJheVNldE1heFNpemUoJDEtPmdldEFzU3ltYm9sTm9kZSgpLCAkMS0+Z2V0VHlwZVBv
aW50ZXIoKSwgJDMtPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LT5nZXRJQ29uc3QoKSwgdHJ1ZSwgJDIubGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+YXJyYXlTZXRNYXhTaXplKCQxLT5nZXRBc1N5bWJvbE5vZGUoKSwgJDEtPmdldFR5cGVQ
b2ludGVyKCksIDAsIGZhbHNlLCAkMi5saW5lKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTZXRNYXhTaXplKCQxLT5nZXRBc1N5bWJvbE5v
ZGUoKSwgJDEtPmdldFR5cGVQb2ludGVyKCksIDAsIGZhbHNlLCAkMi5saW5lKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KCAkMy0+Z2V0QXNDb25zdGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElD
b25zdCgpID49ICQxLT5nZXRUeXBlKCkuZ2V0QXJyYXlTaXplKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsICJhcnJh
eSBpbmRleCBvdXQgb2YgcmFuZ2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIiLCAiWyIsICJhcnJheSBpbmRleCBvdXQgb2Yg
cmFuZ2UgJyVkJyIsICQzLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50
ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgJDMsICQyLmxpbmUpOworICAgICAgICAgICAg
ICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVj
dCwgJDEsICQzLCAkMi5saW5lKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIGlmICgkMS0+aXNBcnJheSgpICYmICQxLT5nZXRUeXBlKCku
Z2V0QXJyYXlTaXplKCkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmVycm9yKCQyLmxpbmUsICIiLCAiWyIsICJhcnJheSBtdXN0IGJlIHJlZGVjbGFyZWQgd2l0aCBh
IHNpemUgYmVmb3JlIGJlaW5nIGluZGV4ZWQgd2l0aCBhIHZhcmlhYmxlIik7Ci0gICAgICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5lcnJvcigkMi5saW5lLCAiIiwgIlsiLCAiYXJyYXkgbXVzdCBiZSByZWRlY2xhcmVk
IHdpdGggYSBzaXplIGJlZm9yZSBiZWluZyBpbmRleGVkIHdpdGggYSB2YXJpYWJsZSIpOworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRl
eChFT3BJbmRleEluZGlyZWN0LCAkMSwgJDMsICQyLmxpbmUpOworICAgICAgICAgICAgICAgICQk
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4SW5kaXJlY3QsICQxLCAk
MywgJDIubGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKCQkID09
IDApIHsKICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEZDb25zdCgwLjBmKTsKLSAg
ICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlv
bih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwSGlnaCwgRXZxQ29uc3QpLCAkMi5saW5l
KTsKKyAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cUNvbnN0KSwgJDIubGlu
ZSk7CiAgICAgICAgIH0gZWxzZSBpZiAoJDEtPmlzQXJyYXkoKSkgewogICAgICAgICAgICAgaWYg
KCQxLT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpCiAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUo
VFR5cGUoJDEtPmdldFR5cGUoKS5nZXRTdHJ1Y3QoKSwgJDEtPmdldFR5cGUoKS5nZXRUeXBlTmFt
ZSgpKSk7CkBAIC0zMjgsMjIgKzI5OCwyMiBAQAogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVz
c2lvbiBET1QgRklFTERfU0VMRUNUSU9OIHsKICAgICAgICAgaWYgKCQxLT5pc0FycmF5KCkpIHsK
LSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDMubGluZSwgImNhbm5vdCBhcHBseSBk
b3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIsICIiKTsKLSAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDMubGluZSwgImNh
bm5vdCBhcHBseSBkb3Qgb3BlcmF0b3IgdG8gYW4gYXJyYXkiLCAiLiIsICIiKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICgkMS0+aXNW
ZWN0b3IoKSkgewogICAgICAgICAgICAgVFZlY3RvckZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAg
ICBpZiAoISBwYXJzZUNvbnRleHQtPnBhcnNlVmVjdG9yRmllbGRzKCokMy5zdHJpbmcsICQxLT5n
ZXROb21pbmFsU2l6ZSgpLCBmaWVsZHMsICQzLmxpbmUpKSB7CisgICAgICAgICAgICBpZiAoISBj
b250ZXh0LT5wYXJzZVZlY3RvckZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUo
KSwgZmllbGRzLCAkMy5saW5lKSkgewogICAgICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOwog
ICAgICAgICAgICAgICAgIGZpZWxkcy5vZmZzZXRzWzBdID0gMDsKLSAgICAgICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICgkMS0+Z2V0VHlwZSgpLmdldFF1
YWxpZmllcigpID09IEV2cUNvbnN0KSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIHZlY3RvciBm
aWVsZHMKLSAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RWZWN0b3JO
b2RlKGZpZWxkcywgJDEsICQzLmxpbmUpOworICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+
YWRkQ29uc3RWZWN0b3JOb2RlKGZpZWxkcywgJDEsICQzLmxpbmUpOwogICAgICAgICAgICAgICAg
IGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAg
ICAgICAgICAgICQkID0gJDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVs
c2UKQEAgLTM1Miw0NyArMzIyLDQ3IEBACiAgICAgICAgICAgICAgICAgaWYgKGZpZWxkcy5udW0g
PT0gMSkgewogICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0g
bmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNl
dElDb25zdChmaWVsZHMub2Zmc2V0c1swXSk7Ci0gICAgICAgICAgICAgICAgICAgIFRJbnRlcm1U
eXBlZCogaW5kZXggPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9u
KHVuaW9uQXJyYXksIFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQzLmxp
bmUpOwotICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOworICAgICAgICAg
ICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgJDMubGluZSk7CisgICAgICAgICAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOwog
ICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCks
ICQxLT5nZXRQcmVjaXNpb24oKSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgICAgIFRTdHJpbmcgdmVjdG9yU3RyaW5nID0gKiQzLnN0cmluZzsKLSAgICAgICAg
ICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZFN3aXp6bGUoZmllbGRzLCAkMy5saW5lKTsKLSAgICAgICAgICAgICAgICAgICAgJCQg
PSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BWZWN0b3JTd2l6emxlLCAk
MSwgaW5kZXgsICQyLmxpbmUpOworICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGlu
ZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN3aXp6bGUoZmllbGRzLCAkMy5saW5lKTsK
KyAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgo
RU9wVmVjdG9yU3dpenpsZSwgJDEsIGluZGV4LCAkMi5saW5lKTsKICAgICAgICAgICAgICAgICAg
ICAgJCQtPnNldFR5cGUoVFR5cGUoJDEtPmdldEJhc2ljVHlwZSgpLCAkMS0+Z2V0UHJlY2lzaW9u
KCksIEV2cVRlbXBvcmFyeSwgKGludCkgdmVjdG9yU3RyaW5nLnNpemUoKSkpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmICgkMS0+aXNNYXRyaXgo
KSkgewogICAgICAgICAgICAgVE1hdHJpeEZpZWxkcyBmaWVsZHM7Ci0gICAgICAgICAgICBpZiAo
ISBwYXJzZUNvbnRleHQtPnBhcnNlTWF0cml4RmllbGRzKCokMy5zdHJpbmcsICQxLT5nZXROb21p
bmFsU2l6ZSgpLCBmaWVsZHMsICQzLmxpbmUpKSB7CisgICAgICAgICAgICBpZiAoISBjb250ZXh0
LT5wYXJzZU1hdHJpeEZpZWxkcygqJDMuc3RyaW5nLCAkMS0+Z2V0Tm9taW5hbFNpemUoKSwgZmll
bGRzLCAkMy5saW5lKSkgewogICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZVJvdyA9IGZhbHNl
OwogICAgICAgICAgICAgICAgIGZpZWxkcy53aG9sZUNvbCA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgIGZpZWxkcy5yb3cgPSAwOwogICAgICAgICAgICAgICAgIGZpZWxkcy5jb2wgPSAwOwotICAg
ICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGZpZWxk
cy53aG9sZVJvdyB8fCBmaWVsZHMud2hvbGVDb2wpIHsKLSAgICAgICAgICAgICAgICBwYXJzZUNv
bnRleHQtPmVycm9yKCQyLmxpbmUsICIgbm9uLXNjYWxhciBmaWVsZHMgbm90IGltcGxlbWVudGVk
IHlldCIsICIuIiwgIiIpOwotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbm9uLXNjYWxhciBm
aWVsZHMgbm90IGltcGxlbWVudGVkIHlldCIsICIuIiwgIiIpOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+
c2V0SUNvbnN0KDApOwotICAgICAgICAgICAgICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQzLmxpbmUpOwotICAgICAgICAgICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJl
Y3QsICQxLCBpbmRleCwgJDIubGluZSk7CisgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBp
bmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXks
IFRUeXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQzLmxpbmUpOworICAgICAg
ICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGly
ZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOwogICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKFRU
eXBlKCQxLT5nZXRCYXNpY1R5cGUoKSwgJDEtPmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwg
JDEtPmdldE5vbWluYWxTaXplKCkpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwog
ICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25zdChmaWVsZHMuY29sICogJDEtPmdl
dE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsKLSAgICAgICAgICAgICAgICBUSW50ZXJtVHlw
ZWQqIGluZGV4ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMy5saW5l
KTsKLSAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZElu
ZGV4KEVPcEluZGV4RGlyZWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOworICAgICAgICAgICAgICAg
IFRJbnRlcm1UeXBlZCogaW5kZXggPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRV
bmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAk
My5saW5lKTsKKyAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJ
bmRleChFT3BJbmRleERpcmVjdCwgJDEsIGluZGV4LCAkMi5saW5lKTsKICAgICAgICAgICAgICAg
ICAkJC0+c2V0VHlwZShUVHlwZSgkMS0+Z2V0QmFzaWNUeXBlKCksICQxLT5nZXRQcmVjaXNpb24o
KSkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKCQxLT5nZXRCYXNpY1R5cGUo
KSA9PSBFYnRTdHJ1Y3QpIHsKICAgICAgICAgICAgIGJvb2wgZmllbGRGb3VuZCA9IGZhbHNlOwog
ICAgICAgICAgICAgY29uc3QgVFR5cGVMaXN0KiBmaWVsZHMgPSAkMS0+Z2V0VHlwZSgpLmdldFN0
cnVjdCgpOwogICAgICAgICAgICAgaWYgKGZpZWxkcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAic3RydWN0dXJlIGhhcyBubyBmaWVsZHMiLCAi
SW50ZXJuYWwgRXJyb3IiLCAiIik7Ci0gICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInN0cnVjdHVy
ZSBoYXMgbm8gZmllbGRzIiwgIkludGVybmFsIEVycm9yIiwgIiIpOworICAgICAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaTsKQEAgLTQwNCw5ICsz
NzQsOSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoZmllbGRGb3Vu
ZCkgewogICAgICAgICAgICAgICAgICAgICBpZiAoJDEtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIo
KSA9PSBFdnFDb25zdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRl
eHQtPmFkZENvbnN0U3RydWN0KCokMy5zdHJpbmcsICQxLCAkMi5saW5lKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICQkID0gY29udGV4dC0+YWRkQ29uc3RTdHJ1Y3QoKiQzLnN0cmluZywgJDEs
ICQyLmxpbmUpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgewpAQCAtNDE4LDQwICszODgsNDAgQEAKICAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuaW9uQXJyYXktPnNldElDb25zdChpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFRJ
bnRlcm1UeXBlZCogaW5kZXggPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFu
dFVuaW9uKHVuaW9uQXJyYXksICooKmZpZWxkcylbaV0udHlwZSwgJDMubGluZSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4
KEVPcEluZGV4RGlyZWN0U3RydWN0LCAkMSwgaW5kZXgsICQyLmxpbmUpOworICAgICAgICAgICAg
ICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksICooKmZpZWxkcylbaV0udHlwZSwgJDMubGluZSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJ
bmRleChFT3BJbmRleERpcmVjdFN0cnVjdCwgJDEsIGluZGV4LCAkMi5saW5lKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgICQkLT5zZXRUeXBlKCooKmZpZWxkcylbaV0udHlwZSk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQyLmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1
Y3R1cmUiLCAkMy5zdHJpbmctPmNfc3RyKCksICIiKTsKLSAgICAgICAgICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQyLmxpbmUsICIgbm8gc3VjaCBmaWVsZCBpbiBzdHJ1Y3R1cmUiLCAkMy5zdHJpbmctPmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGlu
ZSwgIiBmaWVsZCBzZWxlY3Rpb24gcmVxdWlyZXMgc3RydWN0dXJlLCB2ZWN0b3IsIG9yIG1hdHJp
eCBvbiBsZWZ0IGhhbmQgc2lkZSIsICQzLnN0cmluZy0+Y19zdHIoKSwgIiIpOwotICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigk
Mi5saW5lLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBzdHJ1Y3R1cmUsIHZlY3Rvciwgb3Ig
bWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgJDMuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAg
ICB9CiAgICAgICAgIC8vIGRvbid0IGRlbGV0ZSAkMy5zdHJpbmcsIGl0J3MgZnJvbSB0aGUgcG9v
bAogICAgIH0KICAgICB8IHBvc3RmaXhfZXhwcmVzc2lvbiBJTkNfT1AgewotICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQyLmxpbmUsICIrKyIsICQxKSkKLSAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAkJCA9IHBhcnNlQ29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQb3N0SW5jcmVtZW50LCAkMSwgJDIubGlu
ZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmIChjb250ZXh0LT5sVmFs
dWVFcnJvckNoZWNrKCQyLmxpbmUsICIrKyIsICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRo
KEVPcFBvc3RJbmNyZW1lbnQsICQxLCAkMi5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CiAg
ICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnVuYXJ5T3BF
cnJvcigkMi5saW5lLCAiKysiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuYXJ5T3BF
cnJvcigkMi5saW5lLCAiKysiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAgICB9CiAg
ICAgfQogICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIERFQ19PUCB7Ci0gICAgICAgIGlmIChwYXJz
ZUNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJDIubGluZSwgIi0tIiwgJDEpKQotICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFBvc3REZWNyZW1lbnQsICQxLCAkMi5saW5lLCBw
YXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVy
cm9yQ2hlY2soJDIubGluZSwgIi0tIiwgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9w
UG9zdERlY3JlbWVudCwgJDEsICQyLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKICAgICAg
ICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5hcnlPcEVycm9y
KCQyLmxpbmUsICItLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9y
KCQyLmxpbmUsICItLSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQkID0gJDE7CiAgICAgICAgIH0KICAgICB9
CkBAIC00NTksOCArNDI5LDggQEAKIAogaW50ZWdlcl9leHByZXNzaW9uCiAgICAgOiBleHByZXNz
aW9uIHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+aW50ZWdlckVycm9yQ2hlY2soJDEsICJb
XSIpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChj
b250ZXh0LT5pbnRlZ2VyRXJyb3JDaGVjaygkMSwgIltdIikpCisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICQkID0gJDE7CiAgICAgfQogICAgIDsKQEAgLTQ3OCwxOCAr
NDQ4LDE4IEBACiAgICAgICAgICAgICAvLyBUaGVpciBwYXJhbWV0ZXJzIHdpbGwgYmUgdmVyaWZp
ZWQgYWxnb3JpdGhtaWNhbGx5LgogICAgICAgICAgICAgLy8KICAgICAgICAgICAgIFRUeXBlIHR5
cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsgIC8vIHVzZSB0aGlzIHRvIGdldCB0aGUgdHlwZSBi
YWNrCi0gICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jb25zdHJ1Y3RvckVycm9yQ2hlY2so
JDEubGluZSwgJDEuaW50ZXJtTm9kZSwgKmZuQ2FsbCwgb3AsICZ0eXBlKSkgeworICAgICAgICAg
ICAgaWYgKGNvbnRleHQtPmNvbnN0cnVjdG9yRXJyb3JDaGVjaygkMS5saW5lLCAkMS5pbnRlcm1O
b2RlLCAqZm5DYWxsLCBvcCwgJnR5cGUpKSB7CiAgICAgICAgICAgICAgICAgJCQgPSAwOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLwogICAgICAgICAgICAgICAgIC8v
IEl0J3MgYSBjb25zdHJ1Y3Rvciwgb2YgdHlwZSAndHlwZScuCiAgICAgICAgICAgICAgICAgLy8K
LSAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+YWRkQ29uc3RydWN0b3IoJDEuaW50
ZXJtTm9kZSwgJnR5cGUsIG9wLCBmbkNhbGwsICQxLmxpbmUpOworICAgICAgICAgICAgICAgICQk
ID0gY29udGV4dC0+YWRkQ29uc3RydWN0b3IoJDEuaW50ZXJtTm9kZSwgJnR5cGUsIG9wLCBmbkNh
bGwsICQxLmxpbmUpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoJCQgPT0gMCkg
ewotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICAgICAg
ICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3Io
MCwgb3AsICQxLmxpbmUpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVy
YXRvcigwLCBvcCwgJDEubGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAkJC0+c2V0
VHlwZSh0eXBlKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQ5OCwxMiArNDY4LDE1IEBACiAgICAg
ICAgICAgICAvLwogICAgICAgICAgICAgY29uc3QgVEZ1bmN0aW9uKiBmbkNhbmRpZGF0ZTsKICAg
ICAgICAgICAgIGJvb2wgYnVpbHRJbjsKLSAgICAgICAgICAgIGZuQ2FuZGlkYXRlID0gcGFyc2VD
b250ZXh0LT5maW5kRnVuY3Rpb24oJDEubGluZSwgZm5DYWxsLCAmYnVpbHRJbik7CisgICAgICAg
ICAgICBmbkNhbmRpZGF0ZSA9IGNvbnRleHQtPmZpbmRGdW5jdGlvbigkMS5saW5lLCBmbkNhbGws
ICZidWlsdEluKTsKICAgICAgICAgICAgIGlmIChmbkNhbmRpZGF0ZSkgewogICAgICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAgICAgLy8gQSBkZWNsYXJlZCBmdW5jdGlvbi4gIEJ1dCwgaXQg
bWlnaHQgc3RpbGwgbWFwIHRvIGEgYnVpbHQtaW4KLSAgICAgICAgICAgICAgICAvLyBvcGVyYXRp
b24uCisgICAgICAgICAgICAgICAgLy8gQSBkZWNsYXJlZCBmdW5jdGlvbi4KICAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgIGlmIChidWlsdEluICYmICFmbkNhbmRpZGF0ZS0+Z2V0
RXh0ZW5zaW9uKCkuZW1wdHkoKSAmJgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRl
bnNpb25FcnJvckNoZWNrKCQxLmxpbmUsIGZuQ2FuZGlkYXRlLT5nZXRFeHRlbnNpb24oKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBvcCA9IGZuQ2FuZGlkYXRlLT5nZXRCdWlsdEluT3AoKTsKICAg
ICAgICAgICAgICAgICBpZiAoYnVpbHRJbiAmJiBvcCAhPSBFT3BOdWxsKSB7CiAgICAgICAgICAg
ICAgICAgICAgIC8vCkBAIC01MTMsMjAgKzQ4NiwyMCBAQAogICAgICAgICAgICAgICAgICAgICAg
ICAgLy8KICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0IGl0IGxpa2UgYSBidWlsdC1p
biB1bmFyeSBvcGVyYXRvci4KICAgICAgICAgICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0
aChvcCwgJDEuaW50ZXJtTm9kZSwgMCwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1h
dGgob3AsICQxLmludGVybU5vZGUsIDAsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICgkJCA9PSAwKSAgewotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25n
IG9wZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDEuaW50ZXJtTm9kZS0+Z2V0TGluZSgpLCAiIHdyb25nIG9w
ZXJhbmQgdHlwZSIsICJJbnRlcm5hbCBFcnJvciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJidWlsdCBpbiB1bmFyeSBvcGVyYXRvciBmdW5jdGlvbi4gIFR5cGU6ICVzIiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VEludGVybVR5cGVkKj4o
JDEuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgWVlFUlJPUjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICQkID0g
cGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoJDEuaW50ZXJt
QWdncmVnYXRlLCBvcCwgJDEubGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigkMS5pbnRlcm1BZ2dyZWdh
dGUsIG9wLCAkMS5saW5lKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSByZWFsIGZ1bmN0aW9u
IGNhbGwKIAotICAgICAgICAgICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQxLmludGVybUFnZ3JlZ2F0ZSwgRU9wRnVuY3Rpb25D
YWxsLCAkMS5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoJDEuaW50ZXJtQWdncmVnYXRlLCBFT3BGdW5jdGlv
bkNhbGwsICQxLmxpbmUpOwogICAgICAgICAgICAgICAgICAgICAkJC0+c2V0VHlwZShmbkNhbmRp
ZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKIAogICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGlz
IGhvdyB3ZSBrbm93IHdoZXRoZXIgdGhlIGdpdmVuIGZ1bmN0aW9uIGlzIGEgYnVpbHRJbiBmdW5j
dGlvbiBvciBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbgpAQCAtNTM3LDE2ICs1MTAsMTQgQEAKICAg
ICAgICAgICAgICAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE5hbWUoZm5DYW5kaWRh
dGUtPmdldE1hbmdsZWROYW1lKCkpOwogCiAgICAgICAgICAgICAgICAgICAgIFRRdWFsaWZpZXIg
cXVhbDsKLSAgICAgICAgICAgICAgICAgICAgVFF1YWxpZmllckxpc3QmIHF1YWxpZmllckxpc3Qg
PSAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0UXVhbGlmaWVyKCk7CiAgICAgICAgICAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm5DYW5kaWRhdGUtPmdldFBhcmFtQ291bnQoKTsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBxdWFsID0gKCpmbkNhbmRpZGF0ZSlbaV0udHlw
ZS0+Z2V0UXVhbGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBxdWFsID0gZm5DYW5k
aWRhdGUtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKHF1YWwgPT0gRXZxT3V0IHx8IHF1YWwgPT0gRXZxSW5PdXQpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNoZWNr
KCQkLT5nZXRMaW5lKCksICJhc3NpZ24iLCAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+Z2V0U2VxdWVu
Y2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmludGVybU5vZGUtPmdldExpbmUoKSwgIkNvbnN0YW50
IHZhbHVlIGNhbm5vdCBiZSBwYXNzZWQgZm9yICdvdXQnIG9yICdpbm91dCcgcGFyYW1ldGVycy4i
LCAiRXJyb3IiLCAiIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0
LT5sVmFsdWVFcnJvckNoZWNrKCQkLT5nZXRMaW5lKCksICJhc3NpZ24iLCAkJC0+Z2V0QXNBZ2dy
ZWdhdGUoKS0+Z2V0U2VxdWVuY2UoKVtpXS0+Z2V0QXNUeXBlZCgpKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5pbnRlcm1Ob2RlLT5nZXRMaW5l
KCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFzc2VkIGZvciAnb3V0JyBvciAnaW5vdXQn
IHBhcmFtZXRlcnMuIiwgIkVycm9yIiwgIiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcXVhbGlm
aWVyTGlzdC5wdXNoX2JhY2socXVhbCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgJCQtPnNldFR5cGUoZm5DYW5kaWRhdGUtPmdldFJl
dHVyblR5cGUoKSk7CkBAIC01NTUsOCArNTI2LDggQEAKICAgICAgICAgICAgICAgICAvLyBQdXQg
b24gYSBkdW1teSBub2RlIGZvciBlcnJvciByZWNvdmVyeQogICAgICAgICAgICAgICAgIENvbnN0
YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKICAgICAgICAgICAg
ICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoMC4wZik7Ci0gICAgICAgICAgICAgICAgJCQgPSBw
YXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRU
eXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDEubGluZSk7Ci0gICAgICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShF
YnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQxLmxpbmUpOworICAgICAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBkZWxldGUgZm5DYWxsOwpAQCAtNTY4LDggKzUzOSw4IEBACiAgICAgICAgICQkID0gJDE7CiAg
ICAgfQogICAgIHwgcG9zdGZpeF9leHByZXNzaW9uIERPVCBmdW5jdGlvbl9jYWxsX2dlbmVyaWMg
ewotICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJtZXRob2RzIGFyZSBub3Qg
c3VwcG9ydGVkIiwgIiIsICIiKTsKLSAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQzLmxpbmUsICJtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVk
IiwgIiIsICIiKTsKKyAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAkJCA9ICQz
OwogICAgIH0KICAgICA7CkBAIC02MDcsNyArNTc4LDcgQEAKICAgICAgICAgVFBhcmFtZXRlciBw
YXJhbSA9IHsgMCwgbmV3IFRUeXBlKCQzLT5nZXRUeXBlKCkpIH07CiAgICAgICAgICQxLmZ1bmN0
aW9uLT5hZGRQYXJhbWV0ZXIocGFyYW0pOwogICAgICAgICAkJC5mdW5jdGlvbiA9ICQxLmZ1bmN0
aW9uOwotICAgICAgICAkJC5pbnRlcm1Ob2RlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
Z3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCAkMywgJDIubGluZSk7CisgICAgICAgICQkLmlu
dGVybU5vZGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1O
b2RlLCAkMywgJDIubGluZSk7CiAgICAgfQogICAgIDsKIApAQCAtNjI1LDE5ICs1OTYsMTYgQEAK
ICAgICAgICAgLy8gQ29uc3RydWN0b3IKICAgICAgICAgLy8KICAgICAgICAgaWYgKCQxLmFycmF5
KSB7Ci0gICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQx
LmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKSB7Ci0gICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgJDEuc2V0QXJyYXkoZmFsc2UpOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQ29uc3RydWN0b3JzIGZvciBhcnJheXMgYXJl
IG5vdCBhbGxvd2VkLgorICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgImNhbm5v
dCBjb25zdHJ1Y3QgdGhpcyB0eXBlIiwgImFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgJDEuc2V0QXJyYXkoZmFsc2UpOwogICAgICAgICB9
CiAKKyAgICAgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKICAgICAgICAgaWYgKCQxLnVzZXJE
ZWYpIHsKLSAgICAgICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZyA9ICIiOwotICAgICAgICAgICAg
VFR5cGUgdHlwZSgkMSk7Ci0gICAgICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3IFRG
dW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgRU9wQ29uc3RydWN0U3RydWN0KTsKLSAgICAgICAg
ICAgICQkID0gZnVuY3Rpb247CisgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdFN0cnVjdDsK
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFRPcGVyYXRvciBvcCA9IEVPcE51bGw7CiAg
ICAgICAgICAgICBzd2l0Y2ggKCQxLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgRWJ0RmxvYXQ6
CiAgICAgICAgICAgICAgICAgaWYgKCQxLm1hdHJpeCkgewpAQCAtNjcxLDI5ICs2MzksMzAgQEAK
ICAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJidmVjNCIsICQx
LmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdEJWZWM0OyBicmVhazsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBicmVhazsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChvcCA9PSBFT3BOdWxsKSB7Ci0gICAgICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlz
IHR5cGUiLCBnZXRCYXNpY1N0cmluZygkMS50eXBlKSwgIiIpOwotICAgICAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQx
LmxpbmUsICJjYW5ub3QgY29uc3RydWN0IHRoaXMgdHlwZSIsIGdldEJhc2ljU3RyaW5nKCQxLnR5
cGUpLCAiIik7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgICAgICQxLnR5cGUgPSBFYnRGbG9hdDsKICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0
cnVjdEZsb2F0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgVFN0cmluZyB0ZW1wU3RyaW5n
ID0gIiI7Ci0gICAgICAgICAgICBUVHlwZSB0eXBlKCQxKTsKLSAgICAgICAgICAgIFRGdW5jdGlv
biAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7Ci0gICAg
ICAgICAgICAkJCA9IGZ1bmN0aW9uOwogICAgICAgICB9CisgICAgICAgIFRTdHJpbmcgdGVtcFN0
cmluZzsKKyAgICAgICAgVFR5cGUgdHlwZSgkMSk7CisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rp
b24gPSBuZXcgVEZ1bmN0aW9uKCZ0ZW1wU3RyaW5nLCB0eXBlLCBvcCk7CisgICAgICAgICQkID0g
ZnVuY3Rpb247CiAgICAgfQogICAgIHwgSURFTlRJRklFUiB7Ci0gICAgICAgIGlmIChwYXJzZUNv
bnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMS5saW5lLCAqJDEuc3RyaW5nKSkKLSAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+cmVzZXJ2
ZWRFcnJvckNoZWNrKCQxLmxpbmUsICokMS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICBUVHlwZSB0eXBlKEVidFZvaWQsIEVicFVuZGVmaW5lZCk7CiAg
ICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb24gPSBuZXcgVEZ1bmN0aW9uKCQxLnN0cmluZywgdHlw
ZSk7CiAgICAgICAgICQkID0gZnVuY3Rpb247CiAgICAgfQogICAgIHwgRklFTERfU0VMRUNUSU9O
IHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQxLmxpbmUs
ICokMS5zdHJpbmcpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDEubGluZSwgKiQxLnN0cmluZykp
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIFRUeXBlIHR5cGUoRWJ0
Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBU
RnVuY3Rpb24oJDEuc3RyaW5nLCB0eXBlKTsKICAgICAgICAgJCQgPSBmdW5jdGlvbjsKQEAgLTcw
NSwyOCArNjc0LDI4IEBACiAgICAgICAgICQkID0gJDE7CiAgICAgfQogICAgIHwgSU5DX09QIHVu
YXJ5X2V4cHJlc3Npb24gewotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sVmFsdWVFcnJvckNo
ZWNrKCQxLmxpbmUsICIrKyIsICQyKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOwotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0
aChFT3BQcmVJbmNyZW1lbnQsICQyLCAkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
KTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soJDEubGluZSwgIisrIiwg
JDIpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJlSW5jcmVtZW50LCAkMiwgJDEubGlu
ZSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT51bmFyeU9wRXJyb3IoJDEubGluZSwgIisrIiwgJDItPmdldENv
bXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICBjb250ZXh0LT51bmFyeU9wRXJyb3IoJDEubGluZSwgIisrIiwgJDItPmdldENv
bXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAg
ICAgICAgJCQgPSAkMjsKICAgICAgICAgfQogICAgIH0KICAgICB8IERFQ19PUCB1bmFyeV9leHBy
ZXNzaW9uIHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMS5s
aW5lLCAiLS0iLCAkMikpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAg
ICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUHJl
RGVjcmVtZW50LCAkMiwgJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAg
ICAgIGlmIChjb250ZXh0LT5sVmFsdWVFcnJvckNoZWNrKCQxLmxpbmUsICItLSIsICQyKSkKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkVW5hcnlNYXRoKEVPcFByZURlY3JlbWVudCwgJDIsICQxLmxpbmUsIGNvbnRl
eHQtPnN5bWJvbFRhYmxlKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+dW5hcnlPcEVycm9yKCQxLmxpbmUsICItLSIsICQyLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCQxLmxpbmUsICItLSIsICQyLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQk
ID0gJDI7CiAgICAgICAgIH0KICAgICB9CiAgICAgfCB1bmFyeV9vcGVyYXRvciB1bmFyeV9leHBy
ZXNzaW9uIHsKICAgICAgICAgaWYgKCQxLm9wICE9IEVPcE51bGwpIHsKLSAgICAgICAgICAgICQk
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKCQxLm9wLCAkMiwgJDEu
bGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoJDEub3AsICQyLCAkMS5saW5lLCBjb250ZXh0
LT5zeW1ib2xUYWJsZSk7CiAgICAgICAgICAgICBpZiAoJCQgPT0gMCkgewogICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGVycm9yT3AgPSAiIjsKICAgICAgICAgICAgICAgICBzd2l0Y2goJDEu
b3ApIHsKQEAgLTczNCw4ICs3MDMsOCBAQAogICAgICAgICAgICAgICAgIGNhc2UgRU9wTG9naWNh
bE5vdDogZXJyb3JPcCA9ICIhIjsgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDogYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+dW5h
cnlPcEVycm9yKCQxLmxpbmUsIGVycm9yT3AsICQyLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAg
ICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICBj
b250ZXh0LT51bmFyeU9wRXJyb3IoJDEubGluZSwgZXJyb3JPcCwgJDItPmdldENvbXBsZXRlU3Ry
aW5nKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAg
ICAgICAkJCA9ICQyOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKQEAgLTc1NSwxOSAr
NzI0LDE5IEBACiAgICAgOiB1bmFyeV9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwgbXVs
dGlwbGljYXRpdmVfZXhwcmVzc2lvbiBTVEFSIHVuYXJ5X2V4cHJlc3Npb24gewogICAgICAgICBG
UkFHX1ZFUlRfT05MWSgiKiIsICQyLmxpbmUpOwotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTXVsLCAkMSwgJDMsICQyLmxpbmUsIHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCaW5hcnlNYXRoKEVPcE11bCwgJDEsICQzLCAkMi5saW5lLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQt
PmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIioiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMt
PmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICIqIiwgJDEt
PmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQkID0gJDE7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgfCBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9uIFNMQVNIIHVuYXJ5X2V4cHJl
c3Npb24gewogICAgICAgICBGUkFHX1ZFUlRfT05MWSgiLyIsICQyLmxpbmUpOwotICAgICAgICAk
JCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wRGl2LCAkMSwg
JDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcERpdiwgJDEsICQzLCAkMi5saW5l
LCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIi8iLCAkMS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9y
KCQyLmxpbmUsICIvIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQk
ID0gJDE7CiAgICAgICAgIH0KICAgICB9CkBAIC03NzYsMTggKzc0NSwxOCBAQAogYWRkaXRpdmVf
ZXhwcmVzc2lvbgogICAgIDogbXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiB7ICQkID0gJDE7IH0K
ICAgICB8IGFkZGl0aXZlX2V4cHJlc3Npb24gUExVUyBtdWx0aXBsaWNhdGl2ZV9leHByZXNzaW9u
IHsKLSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRo
KEVPcEFkZCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAg
ICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BBZGQsICQx
LCAkMywgJDIubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwogICAgICAgICBpZiAoJCQgPT0g
MCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICIr
IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgY29udGV4dC0+
YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiKyIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+
Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgICAgICAgICAkJCA9ICQxOwogICAgICAgICB9CiAgICAgfQogICAgIHwgYWRkaXRpdmVfZXhw
cmVzc2lvbiBEQVNIIG11bHRpcGxpY2F0aXZlX2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wU3ViLCAkMSwgJDMsICQy
LmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcFN1YiwgJDEsICQzLCAkMi5saW5lLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIi0iLCAkMS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxp
bmUsICItIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQkID0gJDE7
CiAgICAgICAgIH0KICAgICB9CkBAIC04MDAsNDMgKzc2OSw0MyBAQAogcmVsYXRpb25hbF9leHBy
ZXNzaW9uCiAgICAgOiBzaGlmdF9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwgcmVsYXRp
b25hbF9leHByZXNzaW9uIExFRlRfQU5HTEUgc2hpZnRfZXhwcmVzc2lvbiB7Ci0gICAgICAgICQk
ID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbiwg
JDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbiwgJDEsICQz
LCAkMi5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7
Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIjwiLCAk
MS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5h
cnlPcEVycm9yKCQyLmxpbmUsICI8IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
ICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0gICAgICAgICAgICAk
JCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJh
eSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAg
ICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlv
bkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgfCByZWxhdGlvbmFsX2V4cHJlc3Npb24gUklHSFRfQU5H
TEUgc2hpZnRfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICQxLCAkMywgJDIubGluZSwgcGFy
c2VDb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJpbmFyeU1hdGgoRU9wR3JlYXRlclRoYW4sICQxLCAkMywgJDIubGluZSwgY29udGV4
dC0+c3ltYm9sVGFibGUpOwogICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICI+IiwgJDEtPmdldENvbXBsZXRlU3Ry
aW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5l
LCAiPiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgICAgICB1bmlv
bkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2ws
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0
Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOwogICAgICAgICB9CiAgICAg
fQogICAgIHwgcmVsYXRpb25hbF9leHByZXNzaW9uIExFX09QIHNoaWZ0X2V4cHJlc3Npb24gIHsK
LSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVP
cExlc3NUaGFuRXF1YWwsICQxLCAkMywgJDIubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9w
TGVzc1RoYW5FcXVhbCwgJDEsICQzLCAkMi5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CiAg
ICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9w
RXJyb3IoJDIubGluZSwgIjw9IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPD0iLCAkMS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9
IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0
KGZhbHNlKTsKLSAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKICAgICAgICAgfQogICAgIH0KICAgICB8IHJlbGF0aW9u
YWxfZXhwcmVzc2lvbiBHRV9PUCBzaGlmdF9leHByZXNzaW9uICB7Ci0gICAgICAgICQkID0gcGFy
c2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFs
LCAkMSwgJDMsICQyLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAk
JCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcEdyZWF0ZXJUaGFuRXF1
YWwsICQxLCAkMywgJDIubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUpOwogICAgICAgICBpZiAo
JCQgPT0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxp
bmUsICI+PSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmco
KSk7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIj49IiwgJDEtPmdldENvbXBsZXRlU3RyaW5n
KCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7Ci0g
ICAgICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5p
b24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQy
LmxpbmUpOworICAgICAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgJDIubGluZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgOwpAQCAtODQ0LDI2ICs4MTMsMjQg
QEAKIGVxdWFsaXR5X2V4cHJlc3Npb24KICAgICA6IHJlbGF0aW9uYWxfZXhwcmVzc2lvbiB7ICQk
ID0gJDE7IH0KICAgICB8IGVxdWFsaXR5X2V4cHJlc3Npb24gRVFfT1AgcmVsYXRpb25hbF9leHBy
ZXNzaW9uICB7Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmlu
YXJ5TWF0aChFT3BFcXVhbCwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChF
T3BFcXVhbCwgJDEsICQzLCAkMi5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CiAgICAgICAg
IGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3Io
JDIubGluZSwgIj09IiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0
cmluZygpKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAg
ICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiPT0iLCAkMS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOwogICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uWzFdOwogICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNl
KTsKLSAgICAgICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgJDIubGluZSk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKCQxLT5pc0FycmF5KCkgfHwgJDMtPmlz
QXJyYXkoKSkgJiYgcGFyc2VDb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCQyLmxpbmUsICJH
TF8zRExfYXJyYXlfb2JqZWN0cyIpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVu
aW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAk
Mi5saW5lKTsKKyAgICAgICAgfQogICAgIH0KICAgICB8IGVxdWFsaXR5X2V4cHJlc3Npb24gTkVf
T1AgcmVsYXRpb25hbF9leHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAkMSwgJDMsICQyLmxpbmUsIHBh
cnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRCaW5hcnlNYXRoKEVPcE5vdEVxdWFsLCAkMSwgJDMsICQyLmxpbmUsIGNvbnRleHQt
PnN5bWJvbFRhYmxlKTsKICAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiIT0iLCAkMS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUs
ICIhPSIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBDb25zdGFudFVu
aW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgICAgICB1bmlv
bkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2ws
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKLSAgICAgICAgfSBlbHNlIGlmICgo
JDEtPmlzQXJyYXkoKSB8fCAkMy0+aXNBcnJheSgpKSAmJiBwYXJzZUNvbnRleHQtPmV4dGVuc2lv
bkVycm9yQ2hlY2soJDIubGluZSwgIkdMXzNETF9hcnJheV9vYmplY3RzIikpCi0gICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUpOworICAgICAgICB9CiAgICAgfQogICAgIDsK
IApAQCAtODgyLDEzICs4NDksMTMgQEAKIGxvZ2ljYWxfYW5kX2V4cHJlc3Npb24KICAgICA6IGlu
Y2x1c2l2ZV9vcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwgbG9naWNhbF9hbmRfZXhw
cmVzc2lvbiBBTkRfT1AgaW5jbHVzaXZlX29yX2V4cHJlc3Npb24gewotICAgICAgICAkJCA9IHBh
cnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbEFuZCwgJDEs
ICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgJCQgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMb2dpY2FsQW5kLCAkMSwgJDMs
ICQyLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKICAgICAgICAgaWYgKCQkID09IDApIHsK
LSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiJiYiLCAk
MS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5nKCkpOwotICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5h
cnlPcEVycm9yKCQyLmxpbmUsICImJiIsICQxLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAg
ICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07
CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwotICAgICAgICAgICAg
JCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJy
YXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKKyAg
ICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5p
b25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICQyLmxpbmUp
OwogICAgICAgICB9CiAgICAgfQogICAgIDsKQEAgLTg5NiwxMyArODYzLDEzIEBACiBsb2dpY2Fs
X3hvcl9leHByZXNzaW9uCiAgICAgOiBsb2dpY2FsX2FuZF9leHByZXNzaW9uIHsgJCQgPSAkMTsg
fQogICAgIHwgbG9naWNhbF94b3JfZXhwcmVzc2lvbiBYT1JfT1AgbG9naWNhbF9hbmRfZXhwcmVz
c2lvbiAgewotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFy
eU1hdGgoRU9wTG9naWNhbFhvciwgJDEsICQzLCAkMi5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJv
bFRhYmxlKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0
aChFT3BMb2dpY2FsWG9yLCAkMSwgJDMsICQyLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsK
ICAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+YmluYXJ5
T3BFcnJvcigkMi5saW5lLCAiXl4iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENv
bXBsZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCQyLmxpbmUsICJeXiIsICQxLT5nZXRD
b21wbGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bMV07CiAgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29u
c3QoZmFsc2UpOwotICAgICAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwg
RXZxQ29uc3QpLCAkMi5saW5lKTsKKyAgICAgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZp
bmVkLCBFdnFDb25zdCksICQyLmxpbmUpOwogICAgICAgICB9CiAgICAgfQogICAgIDsKQEAgLTkx
MCwxMyArODc3LDEzIEBACiBsb2dpY2FsX29yX2V4cHJlc3Npb24KICAgICA6IGxvZ2ljYWxfeG9y
X2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCBsb2dpY2FsX29yX2V4cHJlc3Npb24gT1Jf
T1AgbG9naWNhbF94b3JfZXhwcmVzc2lvbiAgewotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTG9naWNhbE9yLCAkMSwgJDMsICQyLmxpbmUs
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgJDEsICQzLCAkMi5saW5lLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7CiAgICAgICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBw
YXJzZUNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgInx8IiwgJDEtPmdldENvbXBsZXRl
U3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5s
aW5lLCAifHwiLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBsZXRlU3RyaW5n
KCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgQ29uc3Rh
bnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOwogICAgICAgICAgICAg
dW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKLSAgICAgICAgICAgICQkID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRC
b29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgJDIubGluZSk7CisgICAgICAgICAgICAkJCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAkMi5saW5lKTsKICAgICAgICAgfQog
ICAgIH0KICAgICA7CkBAIC05MjQsMTYgKzg5MSwxNiBAQAogY29uZGl0aW9uYWxfZXhwcmVzc2lv
bgogICAgIDogbG9naWNhbF9vcl9leHByZXNzaW9uIHsgJCQgPSAkMTsgfQogICAgIHwgbG9naWNh
bF9vcl9leHByZXNzaW9uIFFVRVNUSU9OIGV4cHJlc3Npb24gQ09MT04gYXNzaWdubWVudF9leHBy
ZXNzaW9uIHsKLSAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ib29sRXJyb3JDaGVjaygkMi5saW5l
LCAkMSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICBpZiAo
Y29udGV4dC0+Ym9vbEVycm9yQ2hlY2soJDIubGluZSwgJDEpKQorICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogCi0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkU2VsZWN0aW9uKCQxLCAkMywgJDUsICQyLmxpbmUpOworICAgICAgICAkJCA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRTZWxlY3Rpb24oJDEsICQzLCAkNSwgJDIubGluZSk7CiAgICAgICAg
IGlmICgkMy0+Z2V0VHlwZSgpICE9ICQ1LT5nZXRUeXBlKCkpCiAgICAgICAgICAgICAkJCA9IDA7
CiAKICAgICAgICAgaWYgKCQkID09IDApIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+Ymlu
YXJ5T3BFcnJvcigkMi5saW5lLCAiOiIsICQzLT5nZXRDb21wbGV0ZVN0cmluZygpLCAkNS0+Z2V0
Q29tcGxldGVTdHJpbmcoKSk7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoJDIubGluZSwgIjoiLCAkMy0+Z2V0
Q29tcGxldGVTdHJpbmcoKSwgJDUtPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgJCQgPSAkNTsKICAgICAgICAgfQogICAg
IH0KQEAgLTk0MiwxNSArOTA5LDE0IEBACiBhc3NpZ25tZW50X2V4cHJlc3Npb24KICAgICA6IGNv
bmRpdGlvbmFsX2V4cHJlc3Npb24geyAkJCA9ICQxOyB9CiAgICAgfCB1bmFyeV9leHByZXNzaW9u
IGFzc2lnbm1lbnRfb3BlcmF0b3IgYXNzaWdubWVudF9leHByZXNzaW9uIHsKLSAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMi5saW5lLCAiYXNzaWduIiwgJDEpKQot
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICQkID0gcGFyc2VD
b250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQXNzaWduKCQyLm9wLCAkMSwgJDMsICQyLmxpbmUpOwor
ICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygkMi5saW5lLCAiYXNzaWduIiwg
JDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRBc3NpZ24oJDIub3AsICQxLCAkMywgJDIubGluZSk7CiAgICAg
ICAgIGlmICgkJCA9PSAwKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmFzc2lnbkVycm9y
KCQyLmxpbmUsICJhc3NpZ24iLCAkMS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgJDMtPmdldENvbXBs
ZXRlU3RyaW5nKCkpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICAgICBjb250ZXh0LT5hc3NpZ25FcnJvcigkMi5saW5lLCAiYXNzaWduIiwgJDEtPmdldENv
bXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgICQkID0gJDE7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoKCQxLT5pc0FycmF5KCkgfHwgJDMtPmlzQXJyYXkoKSkgJiYgcGFyc2VDb250ZXh0LT5leHRl
bnNpb25FcnJvckNoZWNrKCQyLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQotICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KICAgICB9CiAgICAgOwog
CkBAIC05NjcsMTAgKzkzMywxMCBAQAogICAgICAgICAkJCA9ICQxOwogICAgIH0KICAgICB8IGV4
cHJlc3Npb24gQ09NTUEgYXNzaWdubWVudF9leHByZXNzaW9uIHsKLSAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb21tYSgkMSwgJDMsICQyLmxpbmUpOworICAgICAg
ICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb21tYSgkMSwgJDMsICQyLmxpbmUpOwog
ICAgICAgICBpZiAoJCQgPT0gMCkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5iaW5hcnlP
cEVycm9yKCQyLmxpbmUsICIsIiwgJDEtPmdldENvbXBsZXRlU3RyaW5nKCksICQzLT5nZXRDb21w
bGV0ZVN0cmluZygpKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigkMi5saW5lLCAiLCIsICQxLT5nZXRDb21w
bGV0ZVN0cmluZygpLCAkMy0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkJCA9ICQzOwogICAgICAgICB9CiAgICAgfQpA
QCAtOTc4LDggKzk0NCw4IEBACiAKIGNvbnN0YW50X2V4cHJlc3Npb24KICAgICA6IGNvbmRpdGlv
bmFsX2V4cHJlc3Npb24gewotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5jb25zdEVycm9yQ2hl
Y2soJDEpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlm
IChjb250ZXh0LT5jb25zdEVycm9yQ2hlY2soJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOwogICAgICAgICAkJCA9ICQxOwogICAgIH0KICAgICA7CkBAIC05OTQsMTYgKzk2MCwx
NiBAQAogICAgICAgICAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmdW5jdGlvbi5nZXRQ
YXJhbUNvdW50KCk7IGkrKykKICAgICAgICAgewotICAgICAgICAgICAgVFBhcmFtZXRlciAmcGFy
YW0gPSBmdW5jdGlvbltpXTsKKyAgICAgICAgICAgIGNvbnN0IFRQYXJhbWV0ZXIgJnBhcmFtID0g
ZnVuY3Rpb24uZ2V0UGFyYW0oaSk7CiAgICAgICAgICAgICBpZiAocGFyYW0ubmFtZSAhPSAwKQog
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIFRWYXJpYWJsZSAqdmFyaWFibGUgPSBuZXcg
VFZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICBwcm90b3R5cGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93
QWdncmVnYXRlKHByb3RvdHlwZSwgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLCB2YXJpYWJsZS0+Z2V0TmFtZSgpLCB2YXJpYWJsZS0+
Z2V0VHlwZSgpLCAkMS5saW5lKSwgJDEubGluZSk7CisgICAgICAgICAgICAgICAgcHJvdG90eXBl
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUocHJvdG90eXBlLCBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLCB2YXJpYWJs
ZS0+Z2V0TmFtZSgpLCB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAkMS5saW5lKSwgJDEubGluZSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcHJvdG90eXBlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0
ZShwcm90b3R5cGUsIHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwg
KnBhcmFtLnR5cGUsICQxLmxpbmUpLCAkMS5saW5lKTsKKyAgICAgICAgICAgICAgICBwcm90b3R5
cGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUsIGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAkMS5saW5lKSwg
JDEubGluZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCkBAIC0xMDE2LDcg
Kzk4Miw3IEBACiAgICAgICAgICQkID0gJDEuaW50ZXJtQWdncmVnYXRlOwogICAgIH0KICAgICB8
IFBSRUNJU0lPTiBwcmVjaXNpb25fcXVhbGlmaWVyIHR5cGVfc3BlY2lmaWVyX25vX3ByZWMgU0VN
SUNPTE9OIHsKLSAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJl
Y2lzaW9uKCAkMy50eXBlLCAkMiApOworICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5zZXRE
ZWZhdWx0UHJlY2lzaW9uKCAkMy50eXBlLCAkMiApOwogICAgICAgICAkJCA9IDA7CiAgICAgfQog
ICAgIDsKQEAgLTEwMzEsMTYgKzk5NywxNiBAQAogICAgICAgICAvLwogICAgICAgICAvLyBSZWRl
Y2xhcmF0aW9ucyBhcmUgYWxsb3dlZC4gIEJ1dCwgcmV0dXJuIHR5cGVzIGFuZCBwYXJhbWV0ZXIg
cXVhbGlmaWVycyBtdXN0IG1hdGNoLgogICAgICAgICAvLwotICAgICAgICBURnVuY3Rpb24qIHBy
ZXZEZWMgPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
LmZpbmQoJDEtPmdldE1hbmdsZWROYW1lKCkpKTsKKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVj
ID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZCgkMS0+
Z2V0TWFuZ2xlZE5hbWUoKSkpOwogICAgICAgICBpZiAocHJldkRlYykgewogICAgICAgICAgICAg
aWYgKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSAhPSAkMS0+Z2V0UmV0dXJuVHlwZSgpKSB7Ci0g
ICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5saW5lLCAib3ZlcmxvYWRlZCBm
dW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHJldHVybiB0eXBlIiwgJDEtPmdldFJldHVyblR5
cGUoKS5nZXRCYXNpY1N0cmluZygpLCAiIik7Ci0gICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm92
ZXJsb2FkZWQgZnVuY3Rpb25zIG11c3QgaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZSIsICQxLT5n
ZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgcHJldkRlYy0+Z2V0UGFyYW1Db3VudCgpOyArK2kpIHsKLSAgICAgICAgICAgICAg
ICBpZiAoKCpwcmV2RGVjKVtpXS50eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSAoKiQxKVtpXS50eXBl
LT5nZXRRdWFsaWZpZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVy
cm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcGFy
YW1ldGVyIHF1YWxpZmllcnMiLCAoKiQxKVtpXS50eXBlLT5nZXRRdWFsaWZpZXJTdHJpbmcoKSwg
IiIpOwotICAgICAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICAgICBpZiAocHJldkRlYy0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkg
IT0gJDEtPmdldFBhcmFtKGkpLnR5cGUtPmdldFF1YWxpZmllcigpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0
IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyIHF1YWxpZmllcnMiLCAkMS0+Z2V0UGFyYW0oaSkudHlw
ZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAg
fQpAQCAtMTA1Myw3ICsxMDE5LDcgQEAKICAgICAgICAgJCQuZnVuY3Rpb24gPSAkMTsKICAgICAg
ICAgJCQubGluZSA9ICQyLmxpbmU7CiAKLSAgICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJs
ZS5pbnNlcnQoKiQkLmZ1bmN0aW9uKTsKKyAgICAgICAgY29udGV4dC0+c3ltYm9sVGFibGUuaW5z
ZXJ0KCokJC5mdW5jdGlvbik7CiAgICAgfQogICAgIDsKIApAQCAtMTA4NSw4ICsxMDUxLDggQEAK
ICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAvLyBUaGlzIHBhcmFtZXRlciA+IGZpcnN0IGlz
IHZvaWQKICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQy
LmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlwZSBleGNlcHQgZm9yICcodm9pZCknIiwg
InZvaWQiLCAiIik7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUsICJjYW5ub3QgYmUgYW4gYXJndW1lbnQgdHlw
ZSBleGNlcHQgZm9yICcodm9pZCknIiwgInZvaWQiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICBkZWxldGUgJDMucGFyYW0udHlwZTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyCkBAIC0xMDk5LDEyICsx
MDY1LDEyIEBACiBmdW5jdGlvbl9oZWFkZXIKICAgICA6IGZ1bGx5X3NwZWNpZmllZF90eXBlIElE
RU5USUZJRVIgTEVGVF9QQVJFTiB7CiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIgIT0gRXZxR2xv
YmFsICYmICQxLnF1YWxpZmllciAhPSBFdnFUZW1wb3JhcnkpIHsKLSAgICAgICAgICAgIHBhcnNl
Q29udGV4dC0+ZXJyb3IoJDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rp
b24gcmV0dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKLSAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDIubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rpb24gcmV0dXJuIiwg
Z2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgICAgICAvLyBtYWtlIHN1cmUgYSBzYW1wbGVy
IGlzIG5vdCBpbnZvbHZlZCBhcyB3ZWxsLi4uCi0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0
cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDIubGluZSwgJDEpKQotICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJF
cnJvckNoZWNrKCQyLmxpbmUsICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
IAogICAgICAgICAvLyBBZGQgdGhlIGZ1bmN0aW9uIGFzIGEgcHJvdG90eXBlIGFmdGVyIHBhcnNp
bmcgaXQgKHdlIGRvIG5vdCBzdXBwb3J0IHJlY3Vyc2lvbikKICAgICAgICAgVEZ1bmN0aW9uICpm
dW5jdGlvbjsKQEAgLTExMTgsMjYgKzEwODQsMjYgQEAKICAgICAvLyBUeXBlICsgbmFtZQogICAg
IDogdHlwZV9zcGVjaWZpZXIgSURFTlRJRklFUiB7CiAgICAgICAgIGlmICgkMS50eXBlID09IEVi
dFZvaWQpIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgImlsbGVn
YWwgdXNlIG9mIHR5cGUgJ3ZvaWQnIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAiIik7Ci0gICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9y
KCQyLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2b2lkJyIsICQyLnN0cmluZy0+Y19zdHIo
KSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9Ci0gICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3Ry
aW5nKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAo
Y29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQorICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBUUGFyYW1ldGVyIHBhcmFtID0geyQy
LnN0cmluZywgbmV3IFRUeXBlKCQxKX07CiAgICAgICAgICQkLmxpbmUgPSAkMi5saW5lOwogICAg
ICAgICAkJC5wYXJhbSA9IHBhcmFtOwogICAgIH0KICAgICB8IHR5cGVfc3BlY2lmaWVyIElERU5U
SUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CiAg
ICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2UgYW4gYXJyYXkgb3V0IG9mIHRoaXMgdHlw
ZQotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQzLmxpbmUs
ICQxKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAo
Y29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkMy5saW5lLCAkMSkpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRF
cnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDIu
bGluZSwgKiQyLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAg
ICAgICAgaW50IHNpemU7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5U2l6ZUVycm9y
Q2hlY2soJDMubGluZSwgJDQsIHNpemUpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQzLmxpbmUs
ICQ0LCBzaXplKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgJDEu
c2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CiAKICAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5cGUo
JDEpOwpAQCAtMTE1OCwzMCArMTEyNCwzMCBAQAogICAgIC8vCiAgICAgOiB0eXBlX3F1YWxpZmll
ciBwYXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl9kZWNsYXJhdG9yIHsKICAgICAgICAgJCQg
PSAkMzsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCQzLmxpbmUs
ICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soJDMu
bGluZSwgJDEucXVhbGlmaWVyLCAkMiwgJCQucGFyYW0udHlwZSkpCisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAgICAgfQogICAgIHwgcGFyYW1ldGVyX3F1YWxpZmllciBwYXJhbWV0
ZXJfZGVjbGFyYXRvciB7CiAgICAgICAgICQkID0gJDI7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKCQyLmxpbmUsICQxLCAqJDIucGFyYW0udHlw
ZSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgaWYgKHBh
cnNlQ29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCQyLmxpbmUsIEV2cVRlbXBvcmFyeSwgJDEsICQk
LnBhcmFtLnR5cGUpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgIGlmIChjb250ZXh0LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSwg
KiQyLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCQyLmxpbmUsIEV2cVRlbXBvcmFyeSwgJDEs
ICQkLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgIH0K
ICAgICAvLwogICAgIC8vIE9ubHkgdHlwZQogICAgIC8vCiAgICAgfCB0eXBlX3F1YWxpZmllciBw
YXJhbWV0ZXJfcXVhbGlmaWVyIHBhcmFtZXRlcl90eXBlX3NwZWNpZmllciB7CiAgICAgICAgICQk
ID0gJDM7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygkMy5saW5l
LCAkMS5xdWFsaWZpZXIsICQyLCAkJC5wYXJhbS50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCQz
LmxpbmUsICQxLnF1YWxpZmllciwgJDIsICQkLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgIH0KICAgICB8IHBhcmFtZXRlcl9xdWFsaWZpZXIgcGFyYW1l
dGVyX3R5cGVfc3BlY2lmaWVyIHsKICAgICAgICAgJCQgPSAkMjsKLSAgICAgICAgaWYgKHBhcnNl
Q29udGV4dC0+cGFyYW1ldGVyU2FtcGxlckVycm9yQ2hlY2soJDIubGluZSwgJDEsICokMi5wYXJh
bS50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soJDIubGluZSwgRXZxVGVtcG9yYXJ5LCAk
MSwgJCQucGFyYW0udHlwZSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKCQyLmxpbmUs
ICQxLCAqJDIucGFyYW0udHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soJDIubGluZSwgRXZxVGVtcG9yYXJ5
LCAkMSwgJCQucGFyYW0udHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAg
ICAgfQogICAgIDsKIApAQCAtMTIxMiwxNTIgKzExNzgsODMgQEAKICAgICAgICAgJCQgPSAkMTsK
ICAgICAgICAgCiAgICAgICAgIGlmICgkJC50eXBlLnByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQp
IHsKLSAgICAgICAgICAgICQkLnR5cGUucHJlY2lzaW9uID0gcGFyc2VDb250ZXh0LT5zeW1ib2xU
YWJsZS5nZXREZWZhdWx0UHJlY2lzaW9uKCQxLnR5cGUudHlwZSk7Ci0gICAgICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5wcmVjaXNpb25FcnJvckNoZWNrKCQxLmxpbmUsICQkLnR5cGUucHJlY2lz
aW9uLCAkMS50eXBlLnR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAkJC50eXBlLnByZWNpc2lvbiA9IGNvbnRleHQtPnN5bWJvbFRh
YmxlLmdldERlZmF1bHRQcmVjaXNpb24oJDEudHlwZS50eXBlKTsKKyAgICAgICAgICAgIGlmIChj
b250ZXh0LT5wcmVjaXNpb25FcnJvckNoZWNrKCQxLmxpbmUsICQkLnR5cGUucHJlY2lzaW9uLCAk
MS50eXBlLnR5cGUpKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3Qg
Q09NTUEgSURFTlRJRklFUiB7Ci0gICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50ZXJtTm9kZSwgcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMy5zdHJpbmcsIFRUeXBlKCQxLnR5cGUp
LCAkMy5saW5lKSwgJDMubGluZSk7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQzLnN0cmluZywgVFR5cGUoJDEudHlwZSksICQzLmxp
bmUpLCAkMy5saW5lKTsKICAgICAgICAgCi0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVj
dFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJCQudHlwZSkpCi0gICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmll
ckVycm9yQ2hlY2soJDMubGluZSwgJCQudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVj
aygkMy5saW5lLCAqJDMuc3RyaW5nLCAkJC50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVj
aygkMy5saW5lLCAqJDMuc3RyaW5nLCAkJC50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKIAotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygk
My5saW5lLCAqJDMuc3RyaW5nLCAkJC50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soJDMubGlu
ZSwgKiQzLnN0cmluZywgJCQudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgfQogICAgIHwgaW5pdF9kZWNsYXJhdG9yX2xpc3QgQ09NTUEgSURFTlRJRklFUiBMRUZU
X0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVj
dFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEudHlwZSkpCi0gICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmll
ckVycm9yQ2hlY2soJDMubGluZSwgJDEudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVj
aygkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVj
aygkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKIAogICAgICAgICAkJCA9ICQxOwogCi0gICAgICAgIGlmIChwYXJzZUNvbnRleHQt
PmFycmF5VHlwZUVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkgfHwgcGFyc2VDb250ZXh0LT5h
cnJheVF1YWxpZmllckVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkpCi0gICAgICAgICAgICBw
YXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVy
cm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJv
ckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSk7CiAg
ICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOwotICAgICAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+YXJyYXlFcnJvckNoZWNrKCQ0LmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUsIHZhcmlh
YmxlKSkKLSAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDQubGluZSwgKiQzLnN0cmluZywgJDEu
dHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgIH0KICAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5USUZJ
RVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7Ci0gICAg
ICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwg
JDEudHlwZSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
aWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEudHlwZSkp
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBl
KSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29u
dGV4dC0+bm9uSW5pdENvbnN0RXJyb3JDaGVjaygkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBl
KSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICAkJCA9ICQxOwog
Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDQubGluZSwg
JDEudHlwZSkgfHwgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soJDQubGlu
ZSwgJDEudHlwZSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPmFycmF5VHlwZUVycm9yQ2hlY2soJDQubGluZSwgJDEudHlwZSkgfHwg
Y29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpKQorICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IGludCBzaXplOwotICAgICAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JD
aGVjaygkNC5saW5lLCAkNSwgc2l6ZSkpCi0gICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygk
NC5saW5lLCAkNSwgc2l6ZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
ICAgICAgICAgICAgJDEudHlwZS5zZXRBcnJheSh0cnVlLCBzaXplKTsKICAgICAgICAgICAgIFRW
YXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVy
cm9yQ2hlY2soJDQubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQotICAgICAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmFycmF5RXJyb3JDaGVjaygkNC5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlLCB2YXJpYWJs
ZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgVFR5
cGUgdHlwZSA9IFRUeXBlKCQxLnR5cGUpOwogICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUo
c2l6ZSk7Ci0gICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybU5vZGUsIHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDMuc3RyaW5nLCB0eXBlLCAkMy5saW5lKSwgJDMubGlu
ZSk7CisgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuZ3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
U3ltYm9sKDAsICokMy5zdHJpbmcsIHR5cGUsICQzLmxpbmUpLCAkMy5saW5lKTsKICAgICAgICAg
fQogICAgIH0KLSAgICB8IGluaXRfZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5USUZJRVIgTEVG
VF9CUkFDS0VUIFJJR0hUX0JSQUNLRVQgRVFVQUwgaW5pdGlhbGl6ZXIgewotICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5cGUp
KQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0KLSAgICAgICAgJCQgPSAk
MTsKLQotICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlID0gMDsKLSAgICAgICAgaWYgKHBhcnNl
Q29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSB8fCBwYXJzZUNv
bnRleHQtPmFycmF5UXVhbGlmaWVyRXJyb3JDaGVjaygkNC5saW5lLCAkMS50eXBlKSkKLSAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSwgJDctPmdldFR5cGUoKS5nZXRBcnJheVNpemUoKSk7
Ci0gICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDQubGluZSwg
KiQzLnN0cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+
ZXh0ZW5zaW9uRXJyb3JDaGVjaygkJC5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKLSAg
ICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICAgICAgaWYgKCFwYXJzZUNv
bnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlLCAk
NywgaW50ZXJtTm9kZSwgdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAg
ICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICBpZiAoaW50ZXJtTm9kZSkKLSAgICAgICAgICAg
ICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
Z3Jvd0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAkNi5saW5lKTsKLSAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9
ICQxLmludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdn
cmVnYXRlID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICB8IGluaXRf
ZGVjbGFyYXRvcl9saXN0IENPTU1BIElERU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4
cHJlc3Npb24gUklHSFRfQlJBQ0tFVCBFUVVBTCBpbml0aWFsaXplciB7Ci0gICAgICAgIGlmIChw
YXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEudHlwZSkp
Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLQotICAgICAgICAkJCA9ICQx
OwotCi0gICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwOwotICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpIHx8IHBhcnNlQ29u
dGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCQ0LmxpbmUsICQxLnR5cGUpKQotICAgICAg
ICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgaW50IHNpemU7Ci0gICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJv
ckNoZWNrKCQ0LmxpbmUsICQ1LCBzaXplKSkKLSAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKLSAgICAgICAgICAgICQxLnR5cGUuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7Ci0g
ICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDQubGluZSwgKiQz
LnN0cmluZywgJDEudHlwZSwgdmFyaWFibGUpKQotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+ZXh0
ZW5zaW9uRXJyb3JDaGVjaygkJC5saW5lLCAiR0xfM0RMX2FycmF5X29iamVjdHMiKSkKLSAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIFRJbnRlcm1Ob2RlKiBpbnRlcm1Ob2RlOwotICAgICAgICAgICAgaWYgKCFwYXJzZUNvbnRl
eHQtPmV4ZWN1dGVJbml0aWFsaXplcigkMy5saW5lLCAqJDMuc3RyaW5nLCAkMS50eXBlLCAkOCwg
aW50ZXJtTm9kZSwgdmFyaWFibGUpKSB7Ci0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAg
ICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCi0gICAgICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgICAgICBpZiAoaW50ZXJtTm9kZSkKLSAgICAgICAgICAgICAg
ICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jv
d0FnZ3JlZ2F0ZSgkMS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAkNy5saW5lKTsKLSAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9ICQx
LmludGVybUFnZ3JlZ2F0ZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
cGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgJCQuaW50ZXJtQWdncmVn
YXRlID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KICAgICB8IGluaXRfZGVj
bGFyYXRvcl9saXN0IENPTU1BIElERU5USUZJRVIgRVFVQUwgaW5pdGlhbGl6ZXIgewotICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQx
LnR5cGUpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlm
IChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCQzLmxpbmUsICQxLnR5cGUpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICQkID0gJDE7CiAKICAg
ICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7Ci0gICAgICAgIGlmICghcGFyc2VDb250ZXh0
LT5leGVjdXRlSW5pdGlhbGl6ZXIoJDMubGluZSwgKiQzLnN0cmluZywgJDEudHlwZSwgJDUsIGlu
dGVybU5vZGUpKSB7CisgICAgICAgIGlmICghY29udGV4dC0+ZXhlY3V0ZUluaXRpYWxpemVyKCQz
LmxpbmUsICokMy5zdHJpbmcsICQxLnR5cGUsICQ1LCBpbnRlcm1Ob2RlKSkgewogICAgICAgICAg
ICAgLy8KICAgICAgICAgICAgIC8vIGJ1aWxkIHRoZSBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRp
b24KICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICBpZiAoaW50ZXJtTm9kZSkKLSAgICAgICAg
JCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3Jl
Z2F0ZSgkMS5pbnRlcm1Ob2RlLCBpbnRlcm1Ob2RlLCAkNC5saW5lKTsKKyAgICAgICAgJCQuaW50
ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEuaW50
ZXJtTm9kZSwgaW50ZXJtTm9kZSwgJDQubGluZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gJDEuaW50ZXJtQWdncmVnYXRlOwogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkJC5pbnRlcm1BZ2dyZWdhdGUg
PSAwOwogICAgICAgICB9CiAgICAgfQpAQCAtMTM2Niw4OCArMTI2Myw4OCBAQAogc2luZ2xlX2Rl
Y2xhcmF0aW9uCiAgICAgOiBmdWxseV9zcGVjaWZpZWRfdHlwZSB7CiAgICAgICAgICQkLnR5cGUg
PSAkMTsKLSAgICAgICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1l
ZGlhdGUubWFrZUFnZ3JlZ2F0ZShwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wo
MCwgIiIsIFRUeXBlKCQxKSwgJDEubGluZSksICQxLmxpbmUpOworICAgICAgICAkJC5pbnRlcm1B
Z2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICIiLCBUVHlwZSgkMSksICQxLmxpbmUpLCAkMS5saW5l
KTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVSIHsKLSAgICAg
ICAgJCQuaW50ZXJtQWdncmVnYXRlID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFn
Z3JlZ2F0ZShwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmlu
ZywgVFR5cGUoJDEpLCAkMi5saW5lKSwgJDIubGluZSk7CisgICAgICAgICQkLmludGVybUFnZ3Jl
Z2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRTeW1ib2woMCwgKiQyLnN0cmluZywgVFR5cGUoJDEpLCAkMi5saW5lKSwgJDIu
bGluZSk7CiAgICAgICAgIAotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5zdHJ1Y3RRdWFsaWZp
ZXJFcnJvckNoZWNrKCQyLmxpbmUsICQkLnR5cGUpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNo
ZWNrKCQyLmxpbmUsICQkLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwog
Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDIubGlu
ZSwgKiQyLnN0cmluZywgJCQudHlwZSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDIubGlu
ZSwgKiQyLnN0cmluZywgJCQudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgICAgICAKICAgICAgICAgICAgICQkLnR5cGUgPSAkMTsKIAotICAgICAgICBpZiAo
cGFyc2VDb250ZXh0LT5ub25Jbml0RXJyb3JDaGVjaygkMi5saW5lLCAqJDIuc3RyaW5nLCAkJC50
eXBlKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAo
Y29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZywgJCQudHlwZSkp
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgfQogICAgIHwgZnVsbHlfc3Bl
Y2lmaWVkX3R5cGUgSURFTlRJRklFUiBMRUZUX0JSQUNLRVQgUklHSFRfQlJBQ0tFVCB7Ci0gICAg
ICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VB
Z2dyZWdhdGUocGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJp
bmcsIFRUeXBlKCQxKSwgJDIubGluZSksICQyLmxpbmUpOworICAgICAgICAkJC5pbnRlcm1BZ2dy
ZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3JlZ2F0ZShjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkU3ltYm9sKDAsICokMi5zdHJpbmcsIFRUeXBlKCQxKSwgJDIubGluZSksICQy
LmxpbmUpOwogICAgICAgICAKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlm
aWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2so
JDIubGluZSwgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAg
IGlmIChwYXJzZUNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0
cmluZywgJDEpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcs
ICQxKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICAkJC50eXBl
ID0gJDE7CiAKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygk
My5saW5lLCAkMSkgfHwgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soJDMu
bGluZSwgJDEpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IGlmIChjb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQzLmxpbmUsICQxKSB8fCBjb250ZXh0
LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEpKQorICAgICAgICAgICAgY29u
dGV4dC0+cmVjb3ZlcigpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICQxLnNldEFycmF5
KHRydWUpOwogICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKLSAgICAgICAgICAgIGlm
IChwYXJzZUNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkMy5saW5lLCAqJDIuc3RyaW5nLCAkMSwg
dmFyaWFibGUpKQotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygkMy5saW5lLCAqJDIuc3RyaW5n
LCAkMSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAg
ICAgICAgfQogICAgIH0KICAgICB8IGZ1bGx5X3NwZWNpZmllZF90eXBlIElERU5USUZJRVIgTEVG
VF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7CiAgICAgICAgIFRU
eXBlIHR5cGUgPSBUVHlwZSgkMSk7CiAgICAgICAgIGludCBzaXplOwotICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQyLmxpbmUsICQ0LCBzaXplKSkKLSAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlTaXplRXJyb3JDaGVjaygkMi5saW5lLCAkNCwgc2l6ZSkpCisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIHR5cGUuc2V0QXJyYXlTaXplKHNpemUpOwotICAgICAgICAk
JC5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVn
YXRlKHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqJDIuc3RyaW5nLCB0
eXBlLCAkMi5saW5lKSwgJDIubGluZSk7CisgICAgICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRTeW1ib2woMCwgKiQyLnN0cmluZywgdHlwZSwgJDIubGluZSksICQyLmxpbmUpOwogICAgICAg
ICAKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygk
Mi5saW5lLCAkMSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soJDIubGluZSwgJDEpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZywgJDEpKQotICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5u
b25Jbml0Q29uc3RFcnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsICQxKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIAogICAgICAgICAkJC50eXBlID0gJDE7CiAKLSAgICAg
ICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygkMy5saW5lLCAkMSkgfHwg
cGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soJDMubGluZSwgJDEpKQotICAg
ICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5h
cnJheVR5cGVFcnJvckNoZWNrKCQzLmxpbmUsICQxKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmll
ckVycm9yQ2hlY2soJDMubGluZSwgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGludCBzaXplOwotICAgICAgICAgICAgaWYg
KHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkMy5saW5lLCAkNCwgc2l6ZSkpCi0g
ICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygkMy5saW5lLCAkNCwgc2l6ZSkpCisgICAgICAg
ICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICAgICAkMS5zZXRBcnJheSh0
cnVlLCBzaXplKTsKICAgICAgICAgICAgIFRWYXJpYWJsZSogdmFyaWFibGU7Ci0gICAgICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDMubGluZSwgKiQyLnN0cmluZywg
JDEsIHZhcmlhYmxlKSkKLSAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soJDMubGluZSwgKiQyLnN0
cmluZywgJDEsIHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZpZWRfdHlwZSBJREVOVElGSUVS
IEVRVUFMIGluaXRpYWxpemVyIHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+c3RydWN0UXVh
bGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hl
Y2soJDIubGluZSwgJDEpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAg
ICAgICQkLnR5cGUgPSAkMTsKIAogICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsKLSAg
ICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigkMi5saW5lLCAqJDIu
c3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKSB7CisgICAgICAgIGlmICghY29udGV4dC0+ZXhl
Y3V0ZUluaXRpYWxpemVyKCQyLmxpbmUsICokMi5zdHJpbmcsICQxLCAkNCwgaW50ZXJtTm9kZSkp
IHsKICAgICAgICAgLy8KICAgICAgICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0
aW9uCiAgICAgICAgIC8vCiAgICAgICAgICAgICBpZihpbnRlcm1Ob2RlKQotICAgICAgICAgICAg
ICAgICQkLmludGVybUFnZ3JlZ2F0ZSA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VB
Z2dyZWdhdGUoaW50ZXJtTm9kZSwgJDMubGluZSk7CisgICAgICAgICAgICAgICAgJCQuaW50ZXJt
QWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoaW50ZXJtTm9k
ZSwgJDMubGluZSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgJCQuaW50ZXJt
QWdncmVnYXRlID0gMDsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAg
ICAgJCQuaW50ZXJtQWdncmVnYXRlID0gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTE0NzksMTQg
KzEzNzYsMTQgQEAKIC8vCiAvL2lucHV0X29yX291dHB1dAogLy8gICAgOiBJTlBVVCB7Ci0vLyAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImlucHV0IikpCi0vLyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworLy8gICAgICAgIGlmIChjb250ZXh0LT5nbG9i
YWxFcnJvckNoZWNrKCQxLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSwgImlucHV0IikpCisvLyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIC8vICAgICAg
ICBVTlBBQ0tfT05MWSgiaW5wdXQiLCAkMS5saW5lKTsKIC8vICAgICAgICAkJC5xdWFsaWZpZXIg
PSBFdnFJbnB1dDsKIC8vICAgIH0KIC8vICAgIHwgT1VUUFVUIHsKLS8vICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQxLmxpbmUsIHBhcnNlQ29udGV4dC0+c3ltYm9s
VGFibGUuYXRHbG9iYWxMZXZlbCgpLCAib3V0cHV0IikpCi0vLyAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworLy8gICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNr
KCQxLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgIm91dHB1dCIp
KQorLy8gICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAvLyAgICAgICAgUEFDS19PTkxZ
KCJvdXRwdXQiLCAkMS5saW5lKTsKIC8vICAgICAgICAkJC5xdWFsaWZpZXIgPSBFdnFPdXRwdXQ7
CiAvLyAgICB9CkBAIC0xNTE1LDEyICsxNDEyLDEyIEBACiAvLwogLy9idWZmZXJfZGVjbGFyYXRp
b24KIC8vICAgIDogdHlwZV9zcGVjaWZpZXIgSURFTlRJRklFUiBDT0xPTiBjb25zdGFudF9leHBy
ZXNzaW9uIFNFTUlDT0xPTiB7Ci0vLyAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRF
cnJvckNoZWNrKCQyLmxpbmUsICokMi5zdHJpbmcsIHBhcnNlQ29udGV4dCkpCi0vLyAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworLy8gICAgICAgIGlmIChjb250ZXh0LT5yZXNl
cnZlZEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmluZywgY29udGV4dCkpCisvLyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKIC8vICAgICAgICAkJC52YXJpYWJsZSA9IG5ldyBUVmFy
aWFibGUoJDIuc3RyaW5nLCAkMSk7Ci0vLyAgICAgICAgaWYgKCEgcGFyc2VDb250ZXh0LT5zeW1i
b2xUYWJsZS5pbnNlcnQoKiQkLnZhcmlhYmxlKSkgewotLy8gICAgICAgICAgICBwYXJzZUNvbnRl
eHQtPmVycm9yKCQyLmxpbmUsICJyZWRlZmluaXRpb24iLCAkJC52YXJpYWJsZS0+Z2V0TmFtZSgp
LmNfc3RyKCksICIiKTsKLS8vICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisv
LyAgICAgICAgaWYgKCEgY29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCokJC52YXJpYWJsZSkp
IHsKKy8vICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgInJlZGVmaW5pdGlvbiIs
ICQkLnZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOworLy8gICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CiAvLyAgICAgICAgICAgIC8vIGRvbid0IGhhdmUgdG8gZGVsZXRlICQk
LnZhcmlhYmxlLCB0aGUgcG9vbCBwb3Agd2lsbCB0YWtlIGNhcmUgb2YgaXQKIC8vICAgICAgICB9
CiAvLyAgICB9CkBAIC0xNTMxLDMxICsxNDI4LDI3IEBACiAgICAgICAgICQkID0gJDE7CiAKICAg
ICAgICAgaWYgKCQxLmFycmF5KSB7Ci0gICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5leHRl
bnNpb25FcnJvckNoZWNrKCQxLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKSB7Ci0gICAg
ICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0gICAgICAgICAgICAgICAgJDEu
c2V0QXJyYXkoZmFsc2UpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGV4dC0+ZXJy
b3IoJDEubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAkMS5zZXRBcnJheShm
YWxzZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgfCB0eXBlX3F1YWxpZmllciB0eXBlX3NwZWNp
ZmllciAgewotICAgICAgICBpZiAoJDIuYXJyYXkgJiYgcGFyc2VDb250ZXh0LT5leHRlbnNpb25F
cnJvckNoZWNrKCQyLmxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKSB7Ci0gICAgICAgICAg
ICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKCQyLmFycmF5KSB7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5saW5lLCAibm90IHN1cHBvcnRlZCIsICJmaXJzdC1j
bGFzcyBhcnJheSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgICAgICQyLnNldEFycmF5KGZhbHNlKTsKICAgICAgICAgfQotICAgICAgICBpZiAoJDIuYXJy
YXkgJiYgcGFyc2VDb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soJDIubGluZSwgJDEp
KSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgICAgICQy
LnNldEFycmF5KGZhbHNlKTsKLSAgICAgICAgfQogCiAgICAgICAgIGlmICgkMS5xdWFsaWZpZXIg
PT0gRXZxQXR0cmlidXRlICYmCiAgICAgICAgICAgICAoJDIudHlwZSA9PSBFYnRCb29sIHx8ICQy
LnR5cGUgPT0gRWJ0SW50KSkgewotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMi5s
aW5lLCAiY2Fubm90IGJlIGJvb2wgb3IgaW50IiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCQxLnF1YWxp
ZmllciksICIiKTsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgY29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdl
dFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCgkMS5xdWFsaWZpZXIgPT0gRXZx
VmFyeWluZ0luIHx8ICQxLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAmJgogICAgICAgICAg
ICAgKCQyLnR5cGUgPT0gRWJ0Qm9vbCB8fCAkMi50eXBlID09IEVidEludCkpIHsKLSAgICAgICAg
ICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIs
IGdldFF1YWxpZmllclN0cmluZygkMS5xdWFsaWZpZXIpLCAiIik7Ci0gICAgICAgICAgICBwYXJz
ZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQyLmxpbmUs
ICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoJDEucXVhbGlmaWVy
KSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICB9CiAgICAg
ICAgICQkID0gJDI7CiAgICAgICAgICQkLnF1YWxpZmllciA9ICQxLnF1YWxpZmllcjsKQEAgLTE1
NjgsMjkgKzE0NjEsMjkgQEAKICAgICB9CiAgICAgfCBBVFRSSUJVVEUgewogICAgICAgICBWRVJU
RVhfT05MWSgiYXR0cmlidXRlIiwgJDEubGluZSk7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQt
Pmdsb2JhbEVycm9yQ2hlY2soJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5lLCBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJhdHRyaWJ1dGUiKSkKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwg
RXZxQXR0cmlidXRlLCAkMS5saW5lKTsKICAgICB9CiAgICAgfCBWQVJZSU5HIHsKLSAgICAgICAg
aWYgKHBhcnNlQ29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgInZhcnlpbmciKSkKLSAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOwotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5sYW5ndWFn
ZSA9PSBFU2hMYW5nVmVydGV4KQorICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVj
aygkMS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ2YXJ5aW5n
IikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0
LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCiAgICAgICAgICAgICAkJC5zZXRCYXNp
YyhFYnRWb2lkLCBFdnFWYXJ5aW5nT3V0LCAkMS5saW5lKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ0luLCAkMS5saW5lKTsKICAgICB9
CiAgICAgfCBJTlZBUklBTlQgVkFSWUlORyB7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmds
b2JhbEVycm9yQ2hlY2soJDEubGluZSwgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCksICJpbnZhcmlhbnQgdmFyeWluZyIpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0
LT5yZWNvdmVyKCk7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmxhbmd1YWdlID09IEVTaExh
bmdWZXJ0ZXgpCisgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNrKCQxLmxpbmUs
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSwgImludmFyaWFudCB2YXJ5aW5n
IikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0
LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCiAgICAgICAgICAgICAkJC5zZXRCYXNp
YyhFYnRWb2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0LCAkMS5saW5lKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxSW52YXJpYW50VmFyeWluZ0lu
LCAkMS5saW5lKTsKICAgICB9CiAgICAgfCBVTklGT1JNIHsKLSAgICAgICAgaWYgKHBhcnNlQ29u
dGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5lLCBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSwgInVuaWZvcm0iKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+Z2xvYmFsRXJyb3JDaGVjaygkMS5saW5l
LCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidFZvaWQs
IEV2cVVuaWZvcm0sICQxLmxpbmUpOwogICAgIH0KICAgICA7CkBAIC0xNjI0LDEyICsxNTE3LDEy
IEBACiAgICAgfCB0eXBlX3NwZWNpZmllcl9ub25hcnJheSBMRUZUX0JSQUNLRVQgY29uc3RhbnRf
ZXhwcmVzc2lvbiBSSUdIVF9CUkFDS0VUIHsKICAgICAgICAgJCQgPSAkMTsKIAotICAgICAgICBp
ZiAocGFyc2VDb250ZXh0LT5hcnJheVR5cGVFcnJvckNoZWNrKCQyLmxpbmUsICQxKSkKLSAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+YXJy
YXlUeXBlRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaW50IHNpemU7Ci0gICAgICAgICAg
ICBpZiAocGFyc2VDb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQyLmxpbmUsICQzLCBzaXpl
KSkKLSAgICAgICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
IGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNrKCQyLmxpbmUsICQzLCBzaXplKSkKKyAg
ICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgICAgICAkJC5zZXRBcnJh
eSh0cnVlLCBzaXplKTsKICAgICAgICAgfQogICAgIH0KQEAgLTE2MzcsMTAzICsxNTMwLDEwMyBA
QAogCiB0eXBlX3NwZWNpZmllcl9ub25hcnJheQogICAgIDogVk9JRF9UWVBFIHsKLSAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Vm9pZCwgcXVhbCwgJDEubGluZSk7CiAg
ICAgfQogICAgIHwgRkxPQVRfVFlQRSB7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNl
Q29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNl
dEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKICAgICB9CiAgICAgfCBJTlRfVFlQRSB7
Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRH
bG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEludCwgcXVhbCwgJDEu
bGluZSk7CiAgICAgfQogICAgIHwgQk9PTF9UWVBFIHsKLSAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgJDEubGluZSk7CiAgICAgfQogLy8gICAgfCBV
TlNJR05FRCBJTlRfVFlQRSB7CiAvLyAgICAgICAgUEFDS19VTlBBQ0tfT05MWSgidW5zaWduZWQi
LCAkMS5saW5lKTsKLS8vICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKy8v
ICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAvLyAgICAgICAgJCQuc2V0QmFzaWMo
RWJ0SW50LCBxdWFsLCAkMS5saW5lKTsKIC8vICAgIH0KICAgICB8IFZFQzIgewotICAgICAgICBU
UXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwo
KSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0g
Y29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVt
cG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7CiAg
ICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyKTsKICAgICB9CiAgICAgfCBWRUMzIHsKLSAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVs
KCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRl
bXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOwog
ICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMyk7CiAgICAgfQogICAgIHwgVkVDNCB7Ci0gICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZl
bCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICBUUXVhbGlmaWVyIHF1YWwg
PSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFU
ZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsK
ICAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOwogICAgIH0KICAgICB8IEJWRUMyIHsKLSAgICAg
ICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExl
dmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2
cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgJDEubGluZSk7
CiAgICAgICAgICQkLnNldEFnZ3JlZ2F0ZSgyKTsKICAgICB9CiAgICAgfCBCVkVDMyB7Ci0gICAg
ICAgIFRRdWFsaWZpZXIgcXVhbCA9IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICBUUXVhbGlmaWVyIHF1
YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBF
dnFUZW1wb3Jhcnk7CiAgICAgICAgICQkLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICQxLmxpbmUp
OwogICAgICAgICAkJC5zZXRBZ2dyZWdhdGUoMyk7CiAgICAgfQogICAgIHwgQlZFQzQgewotICAg
ICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFs
TGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRCb29sLCBxdWFsLCAkMS5saW5l
KTsKICAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOwogICAgIH0KICAgICB8IElWRUMyIHsKLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAkMS5saW5l
KTsKICAgICAgICAgJCQuc2V0QWdncmVnYXRlKDIpOwogICAgIH0KICAgICB8IElWRUMzIHsKLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAkMS5saW5l
KTsKICAgICAgICAgJCQuc2V0QWdncmVnYXRlKDMpOwogICAgIH0KICAgICB8IElWRUM0IHsKLSAg
ICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgIFRRdWFsaWZpZXIg
cXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0SW50LCBxdWFsLCAkMS5saW5l
KTsKICAgICAgICAgJCQuc2V0QWdncmVnYXRlKDQpOwogICAgIH0KICAgICB8IE1BVFJJWDIgewog
ICAgICAgICBGUkFHX1ZFUlRfT05MWSgibWF0MiIsICQxLmxpbmUpOwotICAgICAgICBUUXVhbGlm
aWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2
cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgJDEubGluZSk7CiAgICAgICAg
ICQkLnNldEFnZ3JlZ2F0ZSgyLCB0cnVlKTsKICAgICB9CiAgICAgfCBNQVRSSVgzIHsKICAgICAg
ICAgRlJBR19WRVJUX09OTFkoIm1hdDMiLCAkMS5saW5lKTsKLSAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9i
YWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5
bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAg
ICAgICAgJCQuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1YWwsICQxLmxpbmUpOwogICAgICAgICAkJC5z
ZXRBZ2dyZWdhdGUoMywgdHJ1ZSk7CiAgICAgfQogICAgIHwgTUFUUklYNCB7CiAgICAgICAgIEZS
QUdfVkVSVF9PTkxZKCJtYXQ0IiwgJDEubGluZSk7Ci0gICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9
IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CiAgICAgICAg
ICQkLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAkMS5saW5lKTsKICAgICAgICAgJCQuc2V0QWdn
cmVnYXRlKDQsIHRydWUpOwogICAgIH0KICAgICB8IFNBTVBMRVIyRCB7CiAgICAgICAgIEZSQUdf
VkVSVF9PTkxZKCJzYW1wbGVyMkQiLCAkMS5saW5lKTsKLSAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwg
OiBFdnFUZW1wb3Jhcnk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJv
bFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAg
ICAgJCQuc2V0QmFzaWMoRWJ0U2FtcGxlcjJELCBxdWFsLCAkMS5saW5lKTsKICAgICB9CiAgICAg
fCBTQU1QTEVSQ1VCRSB7CiAgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzYW1wbGVyQ3ViZSIsICQx
LmxpbmUpOwotICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBwYXJzZUNvbnRleHQtPnN5bWJvbFRh
YmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OwogICAgICAgICAkJC5zZXRCYXNpYyhFYnRTYW1wbGVy
Q3ViZSwgcXVhbCwgJDEubGluZSk7CiAgICAgfQogICAgIHwgc3RydWN0X3NwZWNpZmllciB7CiAg
ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJzdHJ1Y3QiLCAkMS5saW5lKTsKICAgICAgICAgJCQgPSAk
MTsKLSAgICAgICAgJCQucXVhbGlmaWVyID0gcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICQkLnF1YWxp
ZmllciA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6
IEV2cVRlbXBvcmFyeTsKICAgICB9CiAgICAgfCBUWVBFX05BTUUgewogICAgICAgICAvLwpAQCAt
MTc0MSw3ICsxNjM0LDcgQEAKICAgICAgICAgLy8gdHlwZS4KICAgICAgICAgLy8KICAgICAgICAg
VFR5cGUmIHN0cnVjdHVyZSA9IHN0YXRpY19jYXN0PFRWYXJpYWJsZSo+KCQxLnN5bWJvbCktPmdl
dFR5cGUoKTsKLSAgICAgICAgVFF1YWxpZmllciBxdWFsID0gcGFyc2VDb250ZXh0LT5zeW1ib2xU
YWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAg
IFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/
IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKICAgICAgICAgJCQuc2V0QmFzaWMoRWJ0U3RydWN0
LCBxdWFsLCAkMS5saW5lKTsKICAgICAgICAgJCQudXNlckRlZiA9ICZzdHJ1Y3R1cmU7CiAgICAg
fQpAQCAtMTc0OSwxNCArMTY0MiwxNCBAQAogCiBzdHJ1Y3Rfc3BlY2lmaWVyCiAgICAgOiBTVFJV
Q1QgSURFTlRJRklFUiBMRUZUX0JSQUNFIHN0cnVjdF9kZWNsYXJhdGlvbl9saXN0IFJJR0hUX0JS
QUNFIHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQyLmxp
bmUsICokMi5zdHJpbmcpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Cisg
ICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDIubGluZSwgKiQyLnN0cmlu
ZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgVFR5cGUqIHN0
cnVjdHVyZSA9IG5ldyBUVHlwZSgkNCwgKiQyLnN0cmluZyk7CiAgICAgICAgIFRWYXJpYWJsZSog
dXNlclR5cGVEZWYgPSBuZXcgVFZhcmlhYmxlKCQyLnN0cmluZywgKnN0cnVjdHVyZSwgdHJ1ZSk7
Ci0gICAgICAgIGlmICghIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuaW5zZXJ0KCp1c2VyVHlw
ZURlZikpIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDIubGluZSwgInJlZGVm
aW5pdGlvbiIsICQyLnN0cmluZy0+Y19zdHIoKSwgInN0cnVjdCIpOwotICAgICAgICAgICAgcGFy
c2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxl
Lmluc2VydCgqdXNlclR5cGVEZWYpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMi5s
aW5lLCAicmVkZWZpbml0aW9uIiwgJDIuc3RyaW5nLT5jX3N0cigpLCAic3RydWN0Iik7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgJCQuc2V0QmFz
aWMoRWJ0U3RydWN0LCBFdnFUZW1wb3JhcnksICQxLmxpbmUpOwogICAgICAgICAkJC51c2VyRGVm
ID0gc3RydWN0dXJlOwpAQCAtMTc3Nyw4ICsxNjcwLDggQEAKICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCAkMi0+c2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW50IGogPSAwOyBqIDwgJCQtPnNpemUoKTsgKytqKSB7CiAgICAgICAgICAgICAgICAg
aWYgKCgqJCQpW2pdLnR5cGUtPmdldEZpZWxkTmFtZSgpID09ICgqJDIpW2ldLnR5cGUtPmdldEZp
ZWxkTmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoKCok
MilbaV0ubGluZSwgImR1cGxpY2F0ZSBmaWVsZCBuYW1lIGluIHN0cnVjdHVyZToiLCAic3RydWN0
IiwgKCokMilbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkuY19zdHIoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoKiQyKVtpXS5saW5lLCAiZHVwbGljYXRlIGZpZWxkIG5hbWUgaW4gc3RydWN0
dXJlOiIsICJzdHJ1Y3QiLCAoKiQyKVtpXS50eXBlLT5nZXRGaWVsZE5hbWUoKS5jX3N0cigpKTsK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgICQkLT5wdXNoX2JhY2soKCokMilbaV0pOwpA
QCAtMTc5MCw4ICsxNjgzLDggQEAKICAgICA6IHR5cGVfc3BlY2lmaWVyIHN0cnVjdF9kZWNsYXJh
dG9yX2xpc3QgU0VNSUNPTE9OIHsKICAgICAgICAgJCQgPSAkMjsKIAotICAgICAgICBpZiAocGFy
c2VDb250ZXh0LT52b2lkRXJyb3JDaGVjaygkMS5saW5lLCAoKiQyKVswXS50eXBlLT5nZXRGaWVs
ZE5hbWUoKSwgJDEpKSB7Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgaWYgKGNvbnRleHQtPnZvaWRFcnJvckNoZWNrKCQxLmxpbmUsICgqJDIpWzBdLnR5cGUt
PmdldEZpZWxkTmFtZSgpLCAkMSkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
ICAgICAgICAgfQogICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8ICQkLT5zaXpl
KCk7ICsraSkgewogICAgICAgICAgICAgLy8KQEAgLTE4MDQsOCArMTY5Nyw4IEBACiAKICAgICAg
ICAgICAgIC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBhcnJheXMKICAgICAgICAgICAgIGlmICh0
eXBlLT5pc0FycmF5KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5hcnJh
eVR5cGVFcnJvckNoZWNrKCQxLmxpbmUsICQxKSkKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VD
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5VHlw
ZUVycm9yQ2hlY2soJDEubGluZSwgJDEpKQorICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoJDEuYXJyYXkpCiAgICAg
ICAgICAgICAgICAgdHlwZS0+c2V0QXJyYXlTaXplKCQxLmFycmF5U2l6ZSk7CkBAIC0xODI5LDI0
ICsxNzIyLDI0IEBACiAKIHN0cnVjdF9kZWNsYXJhdG9yCiAgICAgOiBJREVOVElGSUVSIHsKLSAg
ICAgICAgaWYgKHBhcnNlQ29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQxLmxpbmUsICokMS5z
dHJpbmcpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlm
IChjb250ZXh0LT5yZXNlcnZlZEVycm9yQ2hlY2soJDEubGluZSwgKiQxLnN0cmluZykpCisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKICAgICAgICAgJCQudHlwZSA9IG5ldyBUVHlw
ZShFYnRWb2lkLCBFYnBVbmRlZmluZWQpOwogICAgICAgICAkJC5saW5lID0gJDEubGluZTsKICAg
ICAgICAgJCQudHlwZS0+c2V0RmllbGROYW1lKCokMS5zdHJpbmcpOwogICAgIH0KICAgICB8IElE
RU5USUZJRVIgTEVGVF9CUkFDS0VUIGNvbnN0YW50X2V4cHJlc3Npb24gUklHSFRfQlJBQ0tFVCB7
Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygkMS5saW5lLCAq
JDEuc3RyaW5nKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICBpZiAoY29udGV4dC0+cmVzZXJ2ZWRFcnJvckNoZWNrKCQxLmxpbmUsICokMS5zdHJpbmcpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCiAgICAgICAgICQkLnR5cGUgPSBuZXcg
VFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKICAgICAgICAgJCQubGluZSA9ICQxLmxpbmU7
CiAgICAgICAgICQkLnR5cGUtPnNldEZpZWxkTmFtZSgqJDEuc3RyaW5nKTsKIAogICAgICAgICBp
bnQgc2l6ZTsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygk
Mi5saW5lLCAkMywgc2l6ZSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hlY2soJDIubGluZSwgJDMsIHNp
emUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAkJC50eXBlLT5z
ZXRBcnJheVNpemUoc2l6ZSk7CiAgICAgfQogICAgIDsKQEAgLTE4NzYsNyArMTc2OSw3IEBACiAK
IGNvbXBvdW5kX3N0YXRlbWVudAogICAgIDogTEVGVF9CUkFDRSBSSUdIVF9CUkFDRSB7ICQkID0g
MDsgfQotICAgIHwgTEVGVF9CUkFDRSB7IHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgp
OyB9IHN0YXRlbWVudF9saXN0IHsgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsgfSBS
SUdIVF9CUkFDRSB7CisgICAgfCBMRUZUX0JSQUNFIHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVz
aCgpOyB9IHN0YXRlbWVudF9saXN0IHsgY29udGV4dC0+c3ltYm9sVGFibGUucG9wKCk7IH0gUklH
SFRfQlJBQ0UgewogICAgICAgICBpZiAoJDMgIT0gMCkKICAgICAgICAgICAgICQzLT5zZXRPcChF
T3BTZXF1ZW5jZSk7CiAgICAgICAgICQkID0gJDM7CkBAIC0xOTAyLDEwICsxNzk1LDEwIEBACiAK
IHN0YXRlbWVudF9saXN0CiAgICAgOiBzdGF0ZW1lbnQgewotICAgICAgICAkJCA9IHBhcnNlQ29u
dGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoJDEsIDApOworICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKCQxLCAwKTsKICAgICB9CiAgICAgfCBz
dGF0ZW1lbnRfbGlzdCBzdGF0ZW1lbnQgewotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50
ZXJtZWRpYXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQyLCAwKTsKKyAgICAgICAgJCQgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMSwgJDIsIDApOwogICAgIH0KICAgICA7CiAK
QEAgLTE5MTYsOSArMTgwOSw5IEBACiAKIHNlbGVjdGlvbl9zdGF0ZW1lbnQKICAgICA6IElGIExF
RlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiBzZWxlY3Rpb25fcmVzdF9zdGF0ZW1lbnQg
ewotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ib29sRXJyb3JDaGVjaygkMS5saW5lLCAkMykp
Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKLSAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTZWxlY3Rpb24oJDMsICQ1LCAkMS5saW5lKTsKKyAg
ICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQxLmxpbmUsICQzKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU2VsZWN0aW9uKCQzLCAkNSwgJDEubGluZSk7CiAgICAgfQogICAgIDsKIApAQCAtMTkz
OSw0MiArMTgzMiw0MiBAQAogICAgIC8vIEluIDE5OTYgYysrIGRyYWZ0LCBjb25kaXRpb25zIGNh
biBpbmNsdWRlIHNpbmdsZSBkZWNsYXJhdGlvbnMKICAgICA6IGV4cHJlc3Npb24gewogICAgICAg
ICAkJCA9ICQxOwotICAgICAgICBpZiAocGFyc2VDb250ZXh0LT5ib29sRXJyb3JDaGVjaygkMS0+
Z2V0TGluZSgpLCAkMSkpCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQxLT5nZXRMaW5lKCksICQxKSkKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICB9CiAgICAgfCBmdWxseV9zcGVjaWZp
ZWRfdHlwZSBJREVOVElGSUVSIEVRVUFMIGluaXRpYWxpemVyIHsKICAgICAgICAgVEludGVybU5v
ZGUqIGludGVybU5vZGU7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPnN0cnVjdFF1YWxpZmll
ckVycm9yQ2hlY2soJDIubGluZSwgJDEpKQotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNv
dmVyKCk7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCQyLmxpbmUs
ICQxKSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAo
Y29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygkMi5saW5lLCAkMSkpCisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JD
aGVjaygkMi5saW5lLCAkMSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAKLSAg
ICAgICAgaWYgKCFwYXJzZUNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXplcigkMi5saW5lLCAqJDIu
c3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKQorICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1
dGVJbml0aWFsaXplcigkMi5saW5lLCAqJDIuc3RyaW5nLCAkMSwgJDQsIGludGVybU5vZGUpKQog
ICAgICAgICAgICAgJCQgPSAkNDsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBwYXJzZUNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAg
ICAgICAgICQkID0gMDsKICAgICAgICAgfQogICAgIH0KICAgICA7CiAKIGl0ZXJhdGlvbl9zdGF0
ZW1lbnQKLSAgICA6IFdISUxFIExFRlRfUEFSRU4geyBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
LnB1c2goKTsgKytwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0gY29uZGl0aW9uIFJJ
R0hUX1BBUkVOIHN0YXRlbWVudF9ub19uZXdfc2NvcGUgewotICAgICAgICBwYXJzZUNvbnRleHQt
PnN5bWJvbFRhYmxlLnBvcCgpOwotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZExvb3AoMCwgJDYsICQ0LCAwLCB0cnVlLCAkMS5saW5lKTsKLSAgICAgICAgLS1wYXJz
ZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgOiBXSElMRSBMRUZUX1BBUkVOIHsgY29u
dGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0g
Y29uZGl0aW9uIFJJR0hUX1BBUkVOIHN0YXRlbWVudF9ub19uZXdfc2NvcGUgeworICAgICAgICBj
b250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKKyAgICAgICAgJCQgPSBjb250ZXh0LT5pbnRlcm1l
ZGlhdGUuYWRkTG9vcChFTG9vcFdoaWxlLCAwLCAkNCwgMCwgJDYsICQxLmxpbmUpOworICAgICAg
ICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CiAgICAgfQotICAgIHwgRE8geyArK3BhcnNl
Q29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgfSBzdGF0ZW1lbnQgV0hJTEUgTEVGVF9QQVJFTiBl
eHByZXNzaW9uIFJJR0hUX1BBUkVOIFNFTUlDT0xPTiB7Ci0gICAgICAgIGlmIChwYXJzZUNvbnRl
eHQtPmJvb2xFcnJvckNoZWNrKCQ4LmxpbmUsICQ2KSkKLSAgICAgICAgICAgIHBhcnNlQ29udGV4
dC0+cmVjb3ZlcigpOworICAgIHwgRE8geyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0g
c3RhdGVtZW50IFdISUxFIExFRlRfUEFSRU4gZXhwcmVzc2lvbiBSSUdIVF9QQVJFTiBTRU1JQ09M
T04geworICAgICAgICBpZiAoY29udGV4dC0+Ym9vbEVycm9yQ2hlY2soJDgubGluZSwgJDYpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogCi0gICAgICAgICQkID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcCgwLCAkMywgJDYsIDAsIGZhbHNlLCAkNC5saW5lKTsK
LSAgICAgICAgLS1wYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CisgICAgICAgICQkID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BEb1doaWxlLCAwLCAkNiwgMCwgJDMs
ICQ0LmxpbmUpOworICAgICAgICAtLWNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7CiAgICAgfQot
ICAgIHwgRk9SIExFRlRfUEFSRU4geyBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLnB1c2goKTsg
KytwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWw7IH0gZm9yX2luaXRfc3RhdGVtZW50IGZv
cl9yZXN0X3N0YXRlbWVudCBSSUdIVF9QQVJFTiBzdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIHsKLSAg
ICAgICAgcGFyc2VDb250ZXh0LT5zeW1ib2xUYWJsZS5wb3AoKTsKLSAgICAgICAgJCQgPSBwYXJz
ZUNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRMb29wKCQ0LCAkNywgcmVpbnRlcnByZXRfY2FzdDxU
SW50ZXJtVHlwZWQqPigkNS5ub2RlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4o
JDUubm9kZTIpLCB0cnVlLCAkMS5saW5lKTsKLSAgICAgICAgLS1wYXJzZUNvbnRleHQtPmxvb3BO
ZXN0aW5nTGV2ZWw7CisgICAgfCBGT1IgTEVGVF9QQVJFTiB7IGNvbnRleHQtPnN5bWJvbFRhYmxl
LnB1c2goKTsgKytjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOyB9IGZvcl9pbml0X3N0YXRlbWVu
dCBmb3JfcmVzdF9zdGF0ZW1lbnQgUklHSFRfUEFSRU4gc3RhdGVtZW50X25vX25ld19zY29wZSB7
CisgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRMb29wKEVMb29wRm9yLCAkNCwgcmVpbnRlcnByZXRfY2FzdDxU
SW50ZXJtVHlwZWQqPigkNS5ub2RlMSksIHJlaW50ZXJwcmV0X2Nhc3Q8VEludGVybVR5cGVkKj4o
JDUubm9kZTIpLCAkNywgJDEubGluZSk7CisgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdM
ZXZlbDsKICAgICB9CiAgICAgOwogCkBAIC0yMDA5LDQwICsxOTAyLDQwIEBACiAKIGp1bXBfc3Rh
dGVtZW50CiAgICAgOiBDT05USU5VRSBTRU1JQ09MT04gewotICAgICAgICBpZiAocGFyc2VDb250
ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+
ZXJyb3IoJDEubGluZSwgImNvbnRpbnVlIHN0YXRlbWVudCBvbmx5IGFsbG93ZWQgaW4gbG9vcHMi
LCAiIiwgIiIpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IGlmIChjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsIDw9IDApIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQxLmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxv
b3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAg
fQotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BD
b250aW51ZSwgJDEubGluZSk7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJyYW5jaChFT3BDb250aW51ZSwgJDEubGluZSk7CiAgICAgfQogICAgIHwgQlJFQUsgU0VNSUNP
TE9OIHsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8PSAwKSB7
Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJicmVhayBzdGF0ZW1l
bnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIiKTsKLSAgICAgICAgICAgIHBhcnNlQ29u
dGV4dC0+cmVjb3ZlcigpOworICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8
PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiYnJlYWsgc3RhdGVt
ZW50IG9ubHkgYWxsb3dlZCBpbiBsb29wcyIsICIiLCAiIik7CisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KLSAgICAgICAgJCQgPSBwYXJzZUNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICQxLmxpbmUpOworICAgICAgICAkJCA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wQnJlYWssICQxLmxpbmUpOwogICAgIH0KICAg
ICB8IFJFVFVSTiBTRU1JQ09MT04gewotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJt
ZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICQxLmxpbmUpOwotICAgICAgICBpZiAocGFyc2VD
b250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7
Ci0gICAgICAgICAgICBwYXJzZUNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJub24tdm9pZCBmdW5j
dGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKLSAgICAgICAgICAgIHBh
cnNlQ29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCcmFuY2goRU9wUmV0dXJuLCAkMS5saW5lKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmN1
cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpICE9IEVidFZvaWQpIHsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJub24tdm9pZCBmdW5jdGlvbiBtdXN0IHJldHVy
biBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgfQogICAgIH0KICAgICB8IFJFVFVSTiBleHByZXNzaW9uIFNFTUlDT0xPTiB7
Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJl
dHVybiwgJDIsICQxLmxpbmUpOwotICAgICAgICBwYXJzZUNvbnRleHQtPmZ1bmN0aW9uUmV0dXJu
c1ZhbHVlID0gdHJ1ZTsKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Y3VycmVudEZ1bmN0aW9u
VHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkgewotICAgICAgICAgICAgcGFyc2VDb250
ZXh0LT5lcnJvcigkMS5saW5lLCAidm9pZCBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUi
LCAicmV0dXJuIiwgIiIpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAoKihwYXJzZUNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9
ICQyLT5nZXRUeXBlKCkpIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGlu
ZSwgImZ1bmN0aW9uIHJldHVybiBpcyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIp
OwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICQkID0gY29u
dGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BSZXR1cm4sICQyLCAkMS5saW5lKTsKKyAg
ICAgICAgY29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUgPSB0cnVlOworICAgICAgICBpZiAo
Y29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9pZCkg
eworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoJDEubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fu
bm90IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgfSBlbHNlIGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlv
blR5cGUpICE9ICQyLT5nZXRUeXBlKCkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQx
LmxpbmUsICJmdW5jdGlvbiByZXR1cm4gaXMgbm90IG1hdGNoaW5nIHR5cGU6IiwgInJldHVybiIs
ICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKICAgICAgICAgfQogICAgIH0K
ICAgICB8IERJU0NBUkQgU0VNSUNPTE9OIHsKICAgICAgICAgRlJBR19PTkxZKCJkaXNjYXJkIiwg
JDEubGluZSk7Ci0gICAgICAgICQkID0gcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJh
bmNoKEVPcEtpbGwsICQxLmxpbmUpOworICAgICAgICAkJCA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRCcmFuY2goRU9wS2lsbCwgJDEubGluZSk7CiAgICAgfQogICAgIDsKIApAQCAtMjA1MSwx
MSArMTk0NCwxMSBAQAogdHJhbnNsYXRpb25fdW5pdAogICAgIDogZXh0ZXJuYWxfZGVjbGFyYXRp
b24gewogICAgICAgICAkJCA9ICQxOwotICAgICAgICBwYXJzZUNvbnRleHQtPnRyZWVSb290ID0g
JCQ7CisgICAgICAgIGNvbnRleHQtPnRyZWVSb290ID0gJCQ7CiAgICAgfQogICAgIHwgdHJhbnNs
YXRpb25fdW5pdCBleHRlcm5hbF9kZWNsYXJhdGlvbiB7Ci0gICAgICAgICQkID0gcGFyc2VDb250
ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgkMSwgJDIsIDApOwotICAgICAgICBwYXJz
ZUNvbnRleHQtPnRyZWVSb290ID0gJCQ7CisgICAgICAgICQkID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmdyb3dBZ2dyZWdhdGUoJDEsICQyLCAwKTsKKyAgICAgICAgY29udGV4dC0+dHJlZVJvb3Qg
PSAkJDsKICAgICB9CiAgICAgOwogCkBAIC0yMDcwLDggKzE5NjMsOCBAQAogCiBmdW5jdGlvbl9k
ZWZpbml0aW9uCiAgICAgOiBmdW5jdGlvbl9wcm90b3R5cGUgewotICAgICAgICBURnVuY3Rpb24m
IGZ1bmN0aW9uID0gKigkMS5mdW5jdGlvbik7Ci0gICAgICAgIFRGdW5jdGlvbiogcHJldkRlYyA9
IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KHBhcnNlQ29udGV4dC0+c3ltYm9sVGFibGUuZmluZChm
dW5jdGlvbi5nZXRNYW5nbGVkTmFtZSgpKSk7CisgICAgICAgIFRGdW5jdGlvbiogZnVuY3Rpb24g
PSAkMS5mdW5jdGlvbjsKKyAgICAgICAgVEZ1bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8
VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9sVGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xl
ZE5hbWUoKSkpOwogICAgICAgICAvLwogICAgICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxk
IGJlICdmdW5jdGlvbicgaWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0
aW9uCiAgICAgICAgIC8vIGFzIGl0IHdvdWxkIGhhdmUganVzdCBiZWVuIHB1dCBpbiB0aGUgc3lt
Ym9sIHRhYmxlLiAgT3RoZXJ3aXNlLCB3ZSdyZSBsb29raW5nIHVwCkBAIC0yMDgxLDM1ICsxOTc0
LDM1IEBACiAgICAgICAgICAgICAvLwogICAgICAgICAgICAgLy8gVGhlbiB0aGlzIGZ1bmN0aW9u
IGFscmVhZHkgaGFzIGEgYm9keS4KICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBwYXJzZUNv
bnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBhbHJlYWR5IGhhcyBhIGJvZHkiLCBmdW5j
dGlvbi5nZXROYW1lKCkuY19zdHIoKSwgIiIpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAiZnVuY3Rpb24g
YWxyZWFkeSBoYXMgYSBib2R5IiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CiAgICAgICAgIH0KICAgICAgICAgcHJldkRl
Yy0+c2V0RGVmaW5lZCgpOwogCiAgICAgICAgIC8vCiAgICAgICAgIC8vIFJhaXNlIGVycm9yIG1l
c3NhZ2UgaWYgbWFpbiBmdW5jdGlvbiB0YWtlcyBhbnkgcGFyYW1ldGVycyBvciByZXR1cm4gYW55
dGhpbmcgb3RoZXIgdGhhbiB2b2lkCiAgICAgICAgIC8vCi0gICAgICAgIGlmIChmdW5jdGlvbi5n
ZXROYW1lKCkgPT0gIm1haW4iKSB7Ci0gICAgICAgICAgICBpZiAoZnVuY3Rpb24uZ2V0UGFyYW1D
b3VudCgpID4gMCkgewotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGlu
ZSwgImZ1bmN0aW9uIGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi5nZXRO
YW1lKCkuY19zdHIoKSwgIiIpOwotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsKKyAgICAg
ICAgICAgIGlmIChmdW5jdGlvbi0+Z2V0UGFyYW1Db3VudCgpID4gMCkgeworICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBjYW5ub3QgdGFrZSBhbnkgcGFy
YW1ldGVyKHMpIiwgZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KGZ1bmN0aW9uLmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7Ci0g
ICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5lcnJvcigkMS5saW5lLCAiIiwgZnVuY3Rpb24u
Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICJtYWluIGZ1bmN0aW9uIGNhbm5vdCBy
ZXR1cm4gYSB2YWx1ZSIpOwotICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBlKCkuZ2V0QmFzaWNUeXBl
KCkgIT0gRWJ0Vm9pZCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCQxLmxpbmUs
ICIiLCBmdW5jdGlvbi0+Z2V0UmV0dXJuVHlwZSgpLmdldEJhc2ljU3RyaW5nKCksICJtYWluIGZ1
bmN0aW9uIGNhbm5vdCByZXR1cm4gYSB2YWx1ZSIpOworICAgICAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIC8vCiAgICAg
ICAgIC8vIE5ldyBzeW1ib2wgdGFibGUgc2NvcGUgZm9yIGJvZHkgb2YgZnVuY3Rpb24gcGx1cyBp
dHMgYXJndW1lbnRzCiAgICAgICAgIC8vCi0gICAgICAgIHBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGUucHVzaCgpOworICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7CiAKICAgICAg
ICAgLy8KICAgICAgICAgLy8gUmVtZW1iZXIgdGhlIHJldHVybiB0eXBlIGZvciBsYXRlciBjaGVj
a2luZyBmb3IgUkVUVVJOIHN0YXRlbWVudHMuCiAgICAgICAgIC8vCi0gICAgICAgIHBhcnNlQ29u
dGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZSA9ICYocHJldkRlYy0+Z2V0UmV0dXJuVHlwZSgpKTsK
LSAgICAgICAgcGFyc2VDb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNlOworICAg
ICAgICBjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlID0gJihwcmV2RGVjLT5nZXRSZXR1cm5U
eXBlKCkpOworICAgICAgICBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSA9IGZhbHNlOwog
CiAgICAgICAgIC8vCiAgICAgICAgIC8vIEluc2VydCBwYXJhbWV0ZXJzIGludG8gdGhlIHN5bWJv
bCB0YWJsZS4KQEAgLTIxMjAsNTkgKzIwMTMsNjAgQEAKICAgICAgICAgLy8ga25vd3Mgd2hlcmUg
dG8gZmluZCBwYXJhbWV0ZXJzLgogICAgICAgICAvLwogICAgICAgICBUSW50ZXJtQWdncmVnYXRl
KiBwYXJhbU5vZGVzID0gbmV3IFRJbnRlcm1BZ2dyZWdhdGU7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgZnVuY3Rpb24uZ2V0UGFyYW1Db3VudCgpOyBpKyspIHsKLSAgICAgICAgICAgIFRQ
YXJhbWV0ZXImIHBhcmFtID0gZnVuY3Rpb25baV07CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgZnVuY3Rpb24tPmdldFBhcmFtQ291bnQoKTsgaSsrKSB7CisgICAgICAgICAgICBjb25zdCBU
UGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJhbShpKTsKICAgICAgICAgICAgIGlm
IChwYXJhbS5uYW1lICE9IDApIHsKICAgICAgICAgICAgICAgICBUVmFyaWFibGUgKnZhcmlhYmxl
ID0gbmV3IFRWYXJpYWJsZShwYXJhbS5uYW1lLCAqcGFyYW0udHlwZSk7CiAgICAgICAgICAgICAg
ICAgLy8KICAgICAgICAgICAgICAgICAvLyBJbnNlcnQgdGhlIHBhcmFtZXRlcnMgd2l0aCBuYW1l
IGluIHRoZSBzeW1ib2wgdGFibGUuCiAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAg
ICBpZiAoISBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgInJlZGVmaW5p
dGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIpOwotICAgICAgICAgICAgICAg
ICAgICBwYXJzZUNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoISBjb250
ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKnZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5lcnJvcigkMS5saW5lLCAicmVkZWZpbml0aW9uIiwgdmFyaWFibGUtPmdldE5h
bWUoKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhcmlhYmxlOwogICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIFRyYW5zZmVyIG93bmVy
c2hpcCBvZiBuYW1lIHBvaW50ZXIgdG8gc3ltYm9sIHRhYmxlLgotICAgICAgICAgICAgICAgIC8v
Ci0gICAgICAgICAgICAgICAgcGFyYW0ubmFtZSA9IDA7CiAKICAgICAgICAgICAgICAgICAvLwog
ICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyIHRvIHRoZSBISUwKICAgICAgICAg
ICAgICAgICAvLwotICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBwYXJzZUNvbnRleHQtPmlu
dGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKAorICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBj
b250ZXh0LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkU3ltYm9s
KHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFt
ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0VHlwZSgpLCAkMS5saW5lKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJDEubGluZSk7CiAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBwYXJzZUNvbnRl
eHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHBhcmFtTm9kZXMsIHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAiIiwgKnBhcmFtLnR5cGUsICQxLmxpbmUpLCAkMS5s
aW5lKTsKKyAgICAgICAgICAgICAgICBwYXJhbU5vZGVzID0gY29udGV4dC0+aW50ZXJtZWRpYXRl
Lmdyb3dBZ2dyZWdhdGUocGFyYW1Ob2RlcywgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJv
bCgwLCAiIiwgKnBhcmFtLnR5cGUsICQxLmxpbmUpLCAkMS5saW5lKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQotICAgICAgICBwYXJzZUNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdh
dGVPcGVyYXRvcihwYXJhbU5vZGVzLCBFT3BQYXJhbWV0ZXJzLCAkMS5saW5lKTsKKyAgICAgICAg
Y29udGV4dC0+aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKHBhcmFtTm9kZXMsIEVP
cFBhcmFtZXRlcnMsICQxLmxpbmUpOwogICAgICAgICAkMS5pbnRlcm1BZ2dyZWdhdGUgPSBwYXJh
bU5vZGVzOwotICAgICAgICBwYXJzZUNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPSAwOworICAg
ICAgICBjb250ZXh0LT5sb29wTmVzdGluZ0xldmVsID0gMDsKICAgICB9CiAgICAgY29tcG91bmRf
c3RhdGVtZW50X25vX25ld19zY29wZSB7CiAgICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBhbGwgcGF0
aHMgcmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJuIHR5cGUgIT0gdm9pZCA/CiAgICAgICAgIC8vICAg
TWF5IGJlIGJlc3QgZG9uZSBhcyBwb3N0IHByb2Nlc3MgcGhhc2Ugb24gaW50ZXJtZWRpYXRlIGNv
ZGUKLSAgICAgICAgaWYgKHBhcnNlQ29udGV4dC0+Y3VycmVudEZ1bmN0aW9uVHlwZS0+Z2V0QmFz
aWNUeXBlKCkgIT0gRWJ0Vm9pZCAmJiAhIHBhcnNlQ29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFs
dWUpIHsKLSAgICAgICAgICAgIHBhcnNlQ29udGV4dC0+ZXJyb3IoJDEubGluZSwgImZ1bmN0aW9u
IGRvZXMgbm90IHJldHVybiBhIHZhbHVlOiIsICIiLCAkMS5mdW5jdGlvbi0+Z2V0TmFtZSgpLmNf
c3RyKCkpOwotICAgICAgICAgICAgcGFyc2VDb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIGlm
IChjb250ZXh0LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lk
ICYmICEgY29udGV4dC0+ZnVuY3Rpb25SZXR1cm5zVmFsdWUpIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCQxLmxpbmUsICJmdW5jdGlvbiBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZToiLCAi
IiwgJDEuZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKICAgICAgICAgfQotICAgICAgICBwYXJzZUNvbnRleHQtPnN5bWJvbFRhYmxl
LnBvcCgpOwotICAgICAgICAkJCA9IHBhcnNlQ29udGV4dC0+aW50ZXJtZWRpYXRlLmdyb3dBZ2dy
ZWdhdGUoJDEuaW50ZXJtQWdncmVnYXRlLCAkMywgMCk7Ci0gICAgICAgIHBhcnNlQ29udGV4dC0+
aW50ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCQkLCBFT3BGdW5jdGlvbiwgJDEubGlu
ZSk7CisgICAgICAgIGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAkJCA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCQxLmludGVybUFnZ3JlZ2F0ZSwgJDMs
IDApOworICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3Io
JCQsIEVPcEZ1bmN0aW9uLCAkMS5saW5lKTsKICAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCkt
PnNldE5hbWUoJDEuZnVuY3Rpb24tPmdldE1hbmdsZWROYW1lKCkuY19zdHIoKSk7CiAgICAgICAg
ICQkLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5zZXRUeXBlKCQxLmZ1bmN0aW9uLT5nZXRSZXR1cm5UeXBl
KCkpOwogCiAgICAgICAgIC8vIHN0b3JlIHRoZSBwcmFnbWEgaW5mb3JtYXRpb24gZm9yIGRlYnVn
IGFuZCBvcHRpbWl6ZSBhbmQgb3RoZXIgdmVuZG9yIHNwZWNpZmljCiAgICAgICAgIC8vIGluZm9y
bWF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGNhbiBiZSBxdWVyaWVkIGZyb20gdGhlIHBhcnNlIHRy
ZWUKLSAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPnNldE9wdGltaXplKHBhcnNlQ29udGV4
dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSk7Ci0gICAgICAgICQkLT5nZXRBc0FnZ3JlZ2F0ZSgp
LT5zZXREZWJ1ZyhwYXJzZUNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVidWcpOwotICAgICAgICAk
JC0+Z2V0QXNBZ2dyZWdhdGUoKS0+YWRkVG9QcmFnbWFUYWJsZShwYXJzZUNvbnRleHQtPmNvbnRl
eHRQcmFnbWEucHJhZ21hVGFibGUpOworICAgICAgICAkJC0+Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0
T3B0aW1pemUoY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRpbWl6ZSk7CisgICAgICAgICQkLT5n
ZXRBc0FnZ3JlZ2F0ZSgpLT5zZXREZWJ1Zyhjb250ZXh0LT5jb250ZXh0UHJhZ21hLmRlYnVnKTsK
KyAgICAgICAgJCQtPmdldEFzQWdncmVnYXRlKCktPmFkZFRvUHJhZ21hVGFibGUoY29udGV4dC0+
Y29udGV4dFByYWdtYS5wcmFnbWFUYWJsZSk7CiAgICAgfQogICAgIDsKIAogJSUKKworaW50IGds
c2xhbmdfcGFyc2UoVFBhcnNlQ29udGV4dCogY29udGV4dCkgeworICAgIHJldHVybiB5eXBhcnNl
KGNvbnRleHQpOworfQorCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvUGFyc2VIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaAkocmV2aXNpb24gNzYwMjUpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuaAkod29ya2luZyBjb3B5KQpA
QCAtNiw5ICs2LDEwIEBACiAjaWZuZGVmIF9QQVJTRVJfSEVMUEVSX0lOQ0xVREVEXwogI2RlZmlu
ZSBfUEFSU0VSX0hFTFBFUl9JTkNMVURFRF8KIAorI2luY2x1ZGUgImNvbXBpbGVyL0V4dGVuc2lv
bkJlaGF2aW9yLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKICNp
bmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5bWJvbFRh
YmxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUuaCIKIAogc3RydWN0
IFRNYXRyaXhGaWVsZHMgewogICAgIGJvb2wgd2hvbGVSb3c7CkBAIC0xNywxMyArMTgsNiBAQAog
ICAgIGludCBjb2w7CiB9OwogCi10eXBlZGVmIGVudW0gewotICAgIEVCaFJlcXVpcmUsCi0gICAg
RUJoRW5hYmxlLAotICAgIEVCaFdhcm4sCi0gICAgRUJoRGlzYWJsZQotfSBUQmVoYXZpb3I7Ci0K
IHN0cnVjdCBUUHJhZ21hIHsKICAgICBUUHJhZ21hKGJvb2wgbywgYm9vbCBkKSA6IG9wdGltaXpl
KG8pLCBkZWJ1ZyhkKSB7IH0KICAgICBib29sIG9wdGltaXplOwpAQCAtMzYsMTUgKzMwLDE2IEBA
CiAvLyB0aGV5IGNhbiBiZSBwYXNzZWQgdG8gdGhlIHBhcnNlciB3aXRob3V0IG5lZWRpbmcgYSBn
bG9iYWwuCiAvLwogc3RydWN0IFRQYXJzZUNvbnRleHQgewotICAgIFRQYXJzZUNvbnRleHQoVFN5
bWJvbFRhYmxlJiBzeW10LCBUSW50ZXJtZWRpYXRlJiBpbnRlcm0sIEVTaExhbmd1YWdlIGwsIEVT
aFNwZWMgcywgVEluZm9TaW5rJiBpcykgOgotICAgICAgICAgICAgaW50ZXJtZWRpYXRlKGludGVy
bSksIHN5bWJvbFRhYmxlKHN5bXQpLCBpbmZvU2luayhpcyksIGxhbmd1YWdlKGwpLCBzcGVjKHMp
LCB0cmVlUm9vdCgwKSwKKyAgICBUUGFyc2VDb250ZXh0KFRTeW1ib2xUYWJsZSYgc3ltdCwgY29u
c3QgVEV4dGVuc2lvbkJlaGF2aW9yJiBleHQsIFRJbnRlcm1lZGlhdGUmIGludGVybSwgU2hTaGFk
ZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLCBUSW5mb1NpbmsmIGlzKSA6CisgICAgICAg
ICAgICBpbnRlcm1lZGlhdGUoaW50ZXJtKSwgc3ltYm9sVGFibGUoc3ltdCksIGV4dGVuc2lvbkJl
aGF2aW9yKGV4dCksIGluZm9TaW5rKGlzKSwgc2hhZGVyVHlwZSh0eXBlKSwgc2hhZGVyU3BlYyhz
cGVjKSwgdHJlZVJvb3QoMCksCiAgICAgICAgICAgICByZWNvdmVyZWRGcm9tRXJyb3IoZmFsc2Up
LCBudW1FcnJvcnMoMCksIGxleEFmdGVyVHlwZShmYWxzZSksIGxvb3BOZXN0aW5nTGV2ZWwoMCks
Ci0gICAgICAgICAgICBpblR5cGVQYXJlbihmYWxzZSksIGNvbnRleHRQcmFnbWEodHJ1ZSwgZmFs
c2UpIHsgIH0KKyAgICAgICAgICAgIGluVHlwZVBhcmVuKGZhbHNlKSwgc2Nhbm5lcihOVUxMKSwg
Y29udGV4dFByYWdtYSh0cnVlLCBmYWxzZSkgeyAgfQogICAgIFRJbnRlcm1lZGlhdGUmIGludGVy
bWVkaWF0ZTsgLy8gdG8gaG9sZCBhbmQgYnVpbGQgYSBwYXJzZSB0cmVlCiAgICAgVFN5bWJvbFRh
YmxlJiBzeW1ib2xUYWJsZTsgICAvLyBzeW1ib2wgdGFibGUgdGhhdCBnb2VzIHdpdGggdGhlIGxh
bmd1YWdlIGN1cnJlbnRseSBiZWluZyBwYXJzZWQKKyAgICBURXh0ZW5zaW9uQmVoYXZpb3IgZXh0
ZW5zaW9uQmVoYXZpb3I7ICAvLyBtYXBwaW5nIGJldHdlZW4gc3VwcG9ydGVkIGV4dGVuc2lvbnMg
YW5kIGN1cnJlbnQgYmVoYXZpb3IuCiAgICAgVEluZm9TaW5rJiBpbmZvU2luazsKLSAgICBFU2hM
YW5ndWFnZSBsYW5ndWFnZTsgICAgICAgIC8vIHZlcnRleCBvciBmcmFnbWVudCBsYW5ndWFnZSAo
ZnV0dXJlOiBwYWNrIG9yIHVucGFjaykKLSAgICBFU2hTcGVjIHNwZWM7ICAgICAgICAgICAgICAg
IC8vIFRoZSBsYW5ndWFnZSBzcGVjaWZpY2F0aW9uIGNvbXBpbGVyIGNvbmZvcm1zIHRvIC0gR0xF
UzIgb3IgV2ViR0wuCisgICAgU2hTaGFkZXJUeXBlIHNoYWRlclR5cGU7ICAgICAgICAgICAgICAv
LyB2ZXJ0ZXggb3IgZnJhZ21lbnQgbGFuZ3VhZ2UgKGZ1dHVyZTogcGFjayBvciB1bnBhY2spCisg
ICAgU2hTaGFkZXJTcGVjIHNoYWRlclNwZWM7ICAgICAgICAgICAgICAvLyBUaGUgbGFuZ3VhZ2Ug
c3BlY2lmaWNhdGlvbiBjb21waWxlciBjb25mb3JtcyB0byAtIEdMRVMyIG9yIFdlYkdMLgogICAg
IFRJbnRlcm1Ob2RlKiB0cmVlUm9vdDsgICAgICAgLy8gcm9vdCBvZiBwYXJzZSB0cmVlIGJlaW5n
IGNyZWF0ZWQKICAgICBib29sIHJlY292ZXJlZEZyb21FcnJvcjsgICAgIC8vIHRydWUgaWYgYSBw
YXJzZSBlcnJvciBoYXMgb2NjdXJyZWQsIGJ1dCB3ZSBjb250aW51ZSB0byBwYXJzZQogICAgIGlu
dCBudW1FcnJvcnM7CkBAIC01MywxMSArNDgsMTEgQEAKICAgICBib29sIGluVHlwZVBhcmVuOyAg
ICAgICAgICAgIC8vIHRydWUgaWYgaW4gcGFyZW50aGVzZXMsIGxvb2tpbmcgb25seSBmb3IgYW4g
aWRlbnRpZmllcgogICAgIGNvbnN0IFRUeXBlKiBjdXJyZW50RnVuY3Rpb25UeXBlOyAgLy8gdGhl
IHJldHVybiB0eXBlIG9mIHRoZSBmdW5jdGlvbiB0aGF0J3MgY3VycmVudGx5IGJlaW5nIHBhcnNl
ZAogICAgIGJvb2wgZnVuY3Rpb25SZXR1cm5zVmFsdWU7ICAgLy8gdHJ1ZSBpZiBhIG5vbi12b2lk
IGZ1bmN0aW9uIGhhcyBhIHJldHVybgotICAgIFRNYXA8VFN0cmluZywgVEJlaGF2aW9yPiBleHRl
bnNpb25CZWhhdmlvcjsKLSAgICB2b2lkIGluaXRpYWxpemVFeHRlbnNpb25CZWhhdmlvcigpOwog
Ci0gICAgdm9pZCBlcnJvcihUU291cmNlTG9jLCBjb25zdCBjaGFyICpzelJlYXNvbiwgY29uc3Qg
Y2hhciAqc3pUb2tlbiwKLSAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN6RXh0cmFJbmZvRm9y
bWF0LCAuLi4pOworICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJl
YXNvbiwgY29uc3QgY2hhciogdG9rZW4sCisgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRy
YUluZm9Gb3JtYXQsIC4uLik7CisgICAgdm9pZCB3YXJuaW5nKFRTb3VyY2VMb2MgbG9jLCBjb25z
dCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIqIHRva2VuLAorICAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBleHRyYUluZm9Gb3JtYXQsIC4uLik7CiAgICAgYm9vbCByZXNlcnZlZEVycm9yQ2hl
Y2soaW50IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGlkZW50aWZpZXIpOwogICAgIHZvaWQgcmVjb3Zl
cigpOwogCkBAIC04Niw3ICs4MSw3IEBACiAgICAgYm9vbCBub25Jbml0Q29uc3RFcnJvckNoZWNr
KGludCBsaW5lLCBUU3RyaW5nJiBpZGVudGlmaWVyLCBUUHVibGljVHlwZSYgdHlwZSk7CiAgICAg
Ym9vbCBub25Jbml0RXJyb3JDaGVjayhpbnQgbGluZSwgVFN0cmluZyYgaWRlbnRpZmllciwgVFB1
YmxpY1R5cGUmIHR5cGUpOwogICAgIGJvb2wgcGFyYW1FcnJvckNoZWNrKGludCBsaW5lLCBUUXVh
bGlmaWVyIHF1YWxpZmllciwgVFF1YWxpZmllciBwYXJhbVF1YWxpZmllciwgVFR5cGUqIHR5cGUp
OwotICAgIGJvb2wgZXh0ZW5zaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciopOwor
ICAgIGJvb2wgZXh0ZW5zaW9uRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgVFN0cmluZyYpOwog
ICAgIGNvbnN0IFRGdW5jdGlvbiogZmluZEZ1bmN0aW9uKGludCBsaW5lLCBURnVuY3Rpb24qIHBm
bkNhbGwsIGJvb2wgKmJ1aWx0SW4gPSAwKTsKICAgICBib29sIGV4ZWN1dGVJbml0aWFsaXplcihU
U291cmNlTG9jIGxpbmUsIFRTdHJpbmcmIGlkZW50aWZpZXIsIFRQdWJsaWNUeXBlJiBwVHlwZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlwZWQqIGluaXRpYWxpemVyLCBU
SW50ZXJtTm9kZSomIGludGVybU5vZGUsIFRWYXJpYWJsZSogdmFyaWFibGUgPSAwKTsKQEAgLTEw
MCwxNiArOTUsMTQgQEAKICAgICBUSW50ZXJtVHlwZWQqIGFkZENvbnN0QXJyYXlOb2RlKGludCBp
bmRleCwgVEludGVybVR5cGVkKiBub2RlLCBUU291cmNlTG9jIGxpbmUpOwogICAgIFRJbnRlcm1U
eXBlZCogYWRkQ29uc3RTdHJ1Y3QoVFN0cmluZyYgLCBUSW50ZXJtVHlwZWQqLCBUU291cmNlTG9j
KTsKICAgICBib29sIGFycmF5U2V0TWF4U2l6ZShUSW50ZXJtU3ltYm9sKiwgVFR5cGUqLCBpbnQs
IGJvb2wsIFRTb3VyY2VMb2MpOworICAgIHZvaWQqIHNjYW5uZXI7CiAgICAgc3RydWN0IFRQcmFn
bWEgY29udGV4dFByYWdtYTsKICAgICBUU3RyaW5nIEhhc2hFcnJNc2c7CiAgICAgYm9vbCBBZnRl
ckVPRjsKIH07CiAKLWludCBQYVBhcnNlU3RyaW5ncyhjaGFyKiBhcmd2W10sIGludCBzdHJMZW5b
XSwgaW50IGFyZ2MsIFRQYXJzZUNvbnRleHQmKTsKLXZvaWQgUGFSZXNlcnZlZFdvcmQoKTsKLWlu
dCBQYUlkZW50T3JUeXBlKFRTdHJpbmcmIGlkLCBUUGFyc2VDb250ZXh0JiwgVFN5bWJvbComKTsK
LWludCBQYVBhcnNlQ29tbWVudChpbnQgJmxpbmVubywgVFBhcnNlQ29udGV4dCYpOwotdm9pZCBz
ZXRJbml0aWFsU3RhdGUoKTsKK2ludCBQYVBhcnNlU3RyaW5ncyhpbnQgY291bnQsIGNvbnN0IGNo
YXIqIGNvbnN0IHN0cmluZ1tdLCBjb25zdCBpbnQgbGVuZ3RoW10sCisgICAgICAgICAgICAgICAg
ICAgVFBhcnNlQ29udGV4dCogY29udGV4dCk7CiAKIHR5cGVkZWYgVFBhcnNlQ29udGV4dCogVFBh
cnNlQ29udGV4dFBvaW50ZXI7CiBleHRlcm4gVFBhcnNlQ29udGV4dFBvaW50ZXImIEdldEdsb2Jh
bFBhcnNlQ29udGV4dCgpOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL3V0aWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvdXRpbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3V0aWwuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorLy8KKy8vIENv
cHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBh
IEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBm
aWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9VVElMX0gKKyNkZWZpbmUgQ09NUElMRVJfVVRJ
TF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8gYXRv
Zl9kb3QgaXMgbGlrZSBhdG9mIGJ1dCBmb3JjaW5nIEMgbG9jYWxlLCBpLmUuIGZvcmNpbmcgJy4n
IGFzIGRlY2ltYWwgcG9pbnQuCitkb3VibGUgYXRvZl9kb3QoY29uc3QgY2hhciAqc3RyKTsKKwor
I2lmZGVmIF9fY3BsdXNwbHVzCit9IC8vIGVuZCBleHRlcm4gIkMiCisjZW5kaWYKKworI2VuZGlm
IC8vIENPTVBJTEVSX1VUSUxfSApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL091dHB1dEhMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmNwcAkocmV2aXNpb24gNzYwMjUpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKICNpbmNs
dWRlICJjb21waWxlci9JbmZvU2luay5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1VuZm9sZFNlbGVj
dC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1NlYXJjaFN5bWJvbC5oIgogCiAjaW5jbHVkZSA8c3Rk
aW8uaD4KICNpbmNsdWRlIDxhbGdvcml0aG0+CkBAIC02NCw3ICs2NSw3IEBACiAKICAgICBtU2Nv
cGVEZXB0aCA9IDA7CiAKLSAgICBtQXJndW1lbnRJbmRleCA9IDA7CisgICAgbVVuaXF1ZUluZGV4
ID0gMDsKIH0KIAogT3V0cHV0SExTTDo6fk91dHB1dEhMU0woKQpAQCAtOTYsNyArOTcsNyBAQAog
CiB2b2lkIE91dHB1dEhMU0w6OmhlYWRlcigpCiB7Ci0gICAgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2Ug
PSBtQ29udGV4dC5sYW5ndWFnZTsKKyAgICBTaFNoYWRlclR5cGUgc2hhZGVyVHlwZSA9IG1Db250
ZXh0LnNoYWRlclR5cGU7CiAgICAgVEluZm9TaW5rQmFzZSAmb3V0ID0gbUhlYWRlcjsKIAogICAg
IGZvciAoU3RydWN0RGVjbGFyYXRpb25zOjppdGVyYXRvciBzdHJ1Y3REZWNsYXJhdGlvbiA9IG1T
dHJ1Y3REZWNsYXJhdGlvbnMuYmVnaW4oKTsgc3RydWN0RGVjbGFyYXRpb24gIT0gbVN0cnVjdERl
Y2xhcmF0aW9ucy5lbmQoKTsgc3RydWN0RGVjbGFyYXRpb24rKykKQEAgLTEwOSw3ICsxMTAsNyBA
QAogICAgICAgICBvdXQgPDwgKmNvbnN0cnVjdG9yOwogICAgIH0KIAotICAgIGlmIChsYW5ndWFn
ZSA9PSBFU2hMYW5nRnJhZ21lbnQpCisgICAgaWYgKHNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRf
U0hBREVSKQogICAgIHsKICAgICAgICAgVFN0cmluZyB1bmlmb3JtczsKICAgICAgICAgVFN0cmlu
ZyB2YXJ5aW5nczsKQEAgLTM2MSw3ICszNjIsOCBAQAogICAgICAgICAgICAgICAgIiAgICBmbG9h
dCBkaWZmO1xuIgogICAgICAgICAgICAgICAgIn07XG4iCiAgICAgICAgICAgICAgICAiXG4iCi0g
ICAgICAgICAgICAgICAidW5pZm9ybSBnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyBnbF9EZXB0aFJh
bmdlO1xuIgorICAgICAgICAgICAgICAgInVuaWZvcm0gZmxvYXQzIGR4X0RlcHRoUmFuZ2U7Igor
ICAgICAgICAgICAgICAgInN0YXRpYyBnbF9EZXB0aFJhbmdlUGFyYW1ldGVycyBnbF9EZXB0aFJh
bmdlID0ge2R4X0RlcHRoUmFuZ2UueCwgZHhfRGVwdGhSYW5nZS55LCBkeF9EZXB0aFJhbmdlLnp9
O1xuIgogICAgICAgICAgICAgICAgIlxuIjsKICAgICB9CiAKQEAgLTY1Myw3ICs2NTUsMzkgQEAK
ICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpCiAgICAgewogICAgICAgY2FzZSBFT3BBc3NpZ246
ICAgICAgICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgIigiLCAiID0gIiwgIikiKTsg
ICAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBFT3BJbml0aWFsaXplOiAgICAgICAgICAgICAg
b3V0cHV0VHJpcGxldCh2aXNpdCwgIiIsICIgPSAiLCAiIik7ICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgY2FzZSBFT3BJbml0aWFsaXplOgorICAgICAgICBpZiAodmlzaXQgPT0gUHJlVmlzaXQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEdMU0wgYWxsb3dzIHRvIHdyaXRlIHRoaW5ncyBs
aWtlICJmbG9hdCB4ID0geDsiIHdoZXJlIGEgbmV3IHZhcmlhYmxlIHggaXMgZGVmaW5lZAorICAg
ICAgICAgICAgLy8gYW5kIHRoZSB2YWx1ZSBvZiBhbiBleGlzdGluZyB2YXJpYWJsZSB4IGlzIGFz
c2lnbmVkLiBITFNMIHVzZXMgQyBzZW1hbnRpY3MgKHRoZQorICAgICAgICAgICAgLy8gbmV3IHZh
cmlhYmxlIGlzIGNyZWF0ZWQgYmVmb3JlIHRoZSBhc3NpZ25tZW50IGlzIGV2YWx1YXRlZCksIHNv
IHdlIG5lZWQgdG8gY29udmVydAorICAgICAgICAgICAgLy8gdGhpcyB0byAiZmxvYXQgdCA9IHgs
IHggPSB0OyIuCisKKyAgICAgICAgICAgIFRJbnRlcm1TeW1ib2wgKnN5bWJvbE5vZGUgPSBub2Rl
LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgICAgICAgICAgVEludGVybVR5cGVk
ICpleHByZXNzaW9uID0gbm9kZS0+Z2V0UmlnaHQoKTsKKworICAgICAgICAgICAgc2g6OlNlYXJj
aFN5bWJvbCBzZWFyY2hTeW1ib2woc3ltYm9sTm9kZS0+Z2V0U3ltYm9sKCkpOworICAgICAgICAg
ICAgZXhwcmVzc2lvbi0+dHJhdmVyc2UoJnNlYXJjaFN5bWJvbCk7CisgICAgICAgICAgICBib29s
IHNhbWVTeW1ib2wgPSBzZWFyY2hTeW1ib2wuZm91bmRNYXRjaCgpOworCisgICAgICAgICAgICBp
ZiAoc2FtZVN5bWJvbCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvLyBUeXBlIGFs
cmVhZHkgcHJpbnRlZAorICAgICAgICAgICAgICAgIG91dCA8PCAidCIgKyBzdHIobVVuaXF1ZUlu
ZGV4KSArICIgPSAiOworICAgICAgICAgICAgICAgIGV4cHJlc3Npb24tPnRyYXZlcnNlKHRoaXMp
OworICAgICAgICAgICAgICAgIG91dCA8PCAiLCAiOworICAgICAgICAgICAgICAgIHN5bWJvbE5v
ZGUtPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgICAgIG91dCA8PCAiID0gdCIgKyBzdHIo
bVVuaXF1ZUluZGV4KTsKKworICAgICAgICAgICAgICAgIG1VbmlxdWVJbmRleCsrOworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBlbHNlIGlmICh2aXNpdCA9PSBJblZpc2l0KQorICAgICAgICB7CisgICAgICAgICAgICBvdXQg
PDwgIiA9ICI7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcEFkZEFz
c2lnbjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgKz0gIiwgIiki
KTsgICAgICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcFN1YkFzc2lnbjogICAgICAgICAgICAg
ICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiKCIsICIgLT0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7
CiAgICAgICBjYXNlIEVPcE11bEFzc2lnbjogICAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiKCIsICIgKj0gIiwgIikiKTsgICAgICAgICAgYnJlYWs7CkBAIC05MzMsOSArOTY3LDkg
QEAKICAgICAgIGNhc2UgRU9wRnJhY3Q6ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwg
ImZyYWMoIiwgIiIsICIpIik7ICAgICAgYnJlYWs7CiAgICAgICBjYXNlIEVPcExlbmd0aDogICAg
ICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJsZW5ndGgoIiwgIiIsICIpIik7ICAgIGJyZWFr
OwogICAgICAgY2FzZSBFT3BOb3JtYWxpemU6ICAgICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAi
bm9ybWFsaXplKCIsICIiLCAiKSIpOyBicmVhazsKLS8vICAgIGNhc2UgRU9wRFBkeDogICAgICAg
ICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRkeCgiLCAiIiwgIikiKTsgICAgICAgYnJlYWs7
Ci0vLyAgICBjYXNlIEVPcERQZHk6ICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJk
ZHkoIiwgIiIsICIpIik7ICAgICAgIGJyZWFrOwotLy8gICAgY2FzZSBFT3BGd2lkdGg6ICAgICAg
ICAgICBvdXRwdXRUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsICIiLCAiKSIpOyAgICBicmVhazsg
ICAgICAgIAorICAgICAgY2FzZSBFT3BERmR4OiAgICAgICAgICAgICBvdXRwdXRUcmlwbGV0KHZp
c2l0LCAiZGR4KCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKKyAgICAgIGNhc2UgRU9wREZkeTog
ICAgICAgICAgICAgb3V0cHV0VHJpcGxldCh2aXNpdCwgImRkeSgiLCAiIiwgIikiKTsgICAgICAg
YnJlYWs7CisgICAgICBjYXNlIEVPcEZ3aWR0aDogICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlz
aXQsICJmd2lkdGgoIiwgIiIsICIpIik7ICAgIGJyZWFrOyAgICAgICAgCiAgICAgICBjYXNlIEVP
cEFueTogICAgICAgICAgICAgIG91dHB1dFRyaXBsZXQodmlzaXQsICJhbnkoIiwgIiIsICIpIik7
ICAgICAgIGJyZWFrOwogICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAgICAgICBvdXRwdXRUcmlw
bGV0KHZpc2l0LCAiYWxsKCIsICIiLCAiKSIpOyAgICAgICBicmVhazsKICAgICAgIGRlZmF1bHQ6
IFVOUkVBQ0hBQkxFKCk7CkBAIC05NDYsNyArOTgwLDcgQEAKIAogYm9vbCBPdXRwdXRITFNMOjp2
aXNpdEFnZ3JlZ2F0ZShWaXNpdCB2aXNpdCwgVEludGVybUFnZ3JlZ2F0ZSAqbm9kZSkKIHsKLSAg
ICBFU2hMYW5ndWFnZSBsYW5ndWFnZSA9IG1Db250ZXh0Lmxhbmd1YWdlOworICAgIFNoU2hhZGVy
VHlwZSBzaGFkZXJUeXBlID0gbUNvbnRleHQuc2hhZGVyVHlwZTsKICAgICBUSW5mb1NpbmtCYXNl
ICZvdXQgPSBtQm9keTsKIAogICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkKQEAgLTEzOTIsNyAr
MTQyNiw3IEBACiAKICAgICBUSW5mb1NpbmtCYXNlICZvdXQgPSBtQm9keTsKIAotICAgIGlmICgh
bm9kZS0+dGVzdEZpcnN0KCkpCisgICAgaWYgKG5vZGUtPmdldFR5cGUoKSA9PSBFTG9vcERvV2hp
bGUpCiAgICAgewogICAgICAgICBvdXQgPDwgImRvXG4iCiAgICAgICAgICAgICAgICAie1xuIjsK
QEAgLTE0MDQsMTQgKzE0MzgsMTQgQEAKICAgICAgICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZl
cnNlKG5vZGUtPmdldEluaXQoKSk7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIGlmIChu
b2RlLT5nZXRUZXN0KCkpCisgICAgICAgIGlmIChub2RlLT5nZXRDb25kaXRpb24oKSkKICAgICAg
ICAgewotICAgICAgICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0VGVzdCgp
KTsKKyAgICAgICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldENvbmRpdGlv
bigpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFs
KCkpCisgICAgICAgIGlmIChub2RlLT5nZXRFeHByZXNzaW9uKCkpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIG1VbmZvbGRTZWxlY3QtPnRyYXZlcnNlKG5vZGUtPmdldFRlcm1pbmFsKCkpOworICAg
ICAgICAgICAgbVVuZm9sZFNlbGVjdC0+dHJhdmVyc2Uobm9kZS0+Z2V0RXhwcmVzc2lvbigpKTsK
ICAgICAgICAgfQogCiAgICAgICAgIG91dCA8PCAiZm9yKCI7CkBAIC0xNDIzLDE2ICsxNDU3LDE2
IEBACiAKICAgICAgICAgb3V0IDw8ICI7ICI7CiAKLSAgICAgICAgaWYgKG5vZGUtPmdldFRlc3Qo
KSkKKyAgICAgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBub2RlLT5nZXRUZXN0KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgbm9kZS0+
Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwogICAgICAgICB9CiAKICAgICAgICAgb3V0
IDw8ICI7ICI7CiAKLSAgICAgICAgaWYgKG5vZGUtPmdldFRlcm1pbmFsKCkpCisgICAgICAgIGlm
IChub2RlLT5nZXRFeHByZXNzaW9uKCkpCiAgICAgICAgIHsKLSAgICAgICAgICAgIG5vZGUtPmdl
dFRlcm1pbmFsKCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICAgICAgbm9kZS0+Z2V0RXhwcmVz
c2lvbigpLT50cmF2ZXJzZSh0aGlzKTsKICAgICAgICAgfQogCiAgICAgICAgIG91dCA8PCAiKVxu
IgpAQCAtMTQ0NiwxMSArMTQ4MCwxMSBAQAogCiAgICAgb3V0IDw8ICJ9XG4iOwogCi0gICAgaWYg
KCFub2RlLT50ZXN0Rmlyc3QoKSkKKyAgICBpZiAobm9kZS0+Z2V0VHlwZSgpID09IEVMb29wRG9X
aGlsZSkKICAgICB7CiAgICAgICAgIG91dCA8PCAid2hpbGUoXG4iOwogCi0gICAgICAgIG5vZGUt
PmdldFRlc3QoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigp
LT50cmF2ZXJzZSh0aGlzKTsKIAogICAgICAgICBvdXQgPDwgIikiOwogICAgIH0KQEAgLTE1NjUs
OSArMTU5OSw5IEBACiAgICAgfQogCiAgICAgLy8gUGFyc2UgY29tcGFyYXRvciBhbmQgbGltaXQg
dmFsdWUKLSAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBub2RlLT5nZXRUZXN0KCkpCisgICAgaWYg
KGluZGV4ICE9IE5VTEwgJiYgbm9kZS0+Z2V0Q29uZGl0aW9uKCkpCiAgICAgewotICAgICAgICBU
SW50ZXJtQmluYXJ5ICp0ZXN0ID0gbm9kZS0+Z2V0VGVzdCgpLT5nZXRBc0JpbmFyeU5vZGUoKTsK
KyAgICAgICAgVEludGVybUJpbmFyeSAqdGVzdCA9IG5vZGUtPmdldENvbmRpdGlvbigpLT5nZXRB
c0JpbmFyeU5vZGUoKTsKICAgICAgICAgCiAgICAgICAgIGlmICh0ZXN0ICYmIHRlc3QtPmdldExl
ZnQoKS0+Z2V0QXNTeW1ib2xOb2RlKCktPmdldElkKCkgPT0gaW5kZXgtPmdldElkKCkpCiAgICAg
ICAgIHsKQEAgLTE1ODUsMTAgKzE2MTksMTAgQEAKICAgICB9CiAKICAgICAvLyBQYXJzZSBpbmNy
ZW1lbnQKLSAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBjb21wYXJhdG9yICE9IEVPcE51bGwgJiYg
bm9kZS0+Z2V0VGVybWluYWwoKSkKKyAgICBpZiAoaW5kZXggIT0gTlVMTCAmJiBjb21wYXJhdG9y
ICE9IEVPcE51bGwgJiYgbm9kZS0+Z2V0RXhwcmVzc2lvbigpKQogICAgIHsKLSAgICAgICAgVElu
dGVybUJpbmFyeSAqYmluYXJ5VGVybWluYWwgPSBub2RlLT5nZXRUZXJtaW5hbCgpLT5nZXRBc0Jp
bmFyeU5vZGUoKTsKLSAgICAgICAgVEludGVybVVuYXJ5ICp1bmFyeVRlcm1pbmFsID0gbm9kZS0+
Z2V0VGVybWluYWwoKS0+Z2V0QXNVbmFyeU5vZGUoKTsKKyAgICAgICAgVEludGVybUJpbmFyeSAq
YmluYXJ5VGVybWluYWwgPSBub2RlLT5nZXRFeHByZXNzaW9uKCktPmdldEFzQmluYXJ5Tm9kZSgp
OworICAgICAgICBUSW50ZXJtVW5hcnkgKnVuYXJ5VGVybWluYWwgPSBub2RlLT5nZXRFeHByZXNz
aW9uKCktPmdldEFzVW5hcnlOb2RlKCk7CiAgICAgICAgIAogICAgICAgICBpZiAoYmluYXJ5VGVy
bWluYWwpCiAgICAgICAgIHsKQEAgLTE3MTEsNyArMTc0NSw3IEBACiAKICAgICBpZiAobmFtZS5l
bXB0eSgpKSAgIC8vIEhMU0wgZGVtYW5kcyBuYW1lZCBhcmd1bWVudHMsIGFsc28gZm9yIHByb3Rv
dHlwZXMKICAgICB7Ci0gICAgICAgIG5hbWUgPSAieCIgKyBzdHIobUFyZ3VtZW50SW5kZXgrKyk7
CisgICAgICAgIG5hbWUgPSAieCIgKyBzdHIobVVuaXF1ZUluZGV4KyspOwogICAgIH0KICAgICBl
bHNlCiAgICAgewpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0Nv
ZGVHZW5HTFNMLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvQ29kZUdlbkdMU0wuY3BwCShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuR0xTTC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExLDkgKzExLDkgQEAKIC8vIGNvbXBpbGUgb2JqZWN0IHVzZWQgYnkgaGlnaGVyIGxldmVs
IGNvZGUuICBJdCByZXR1cm5zCiAvLyBhIHN1YmNsYXNzIG9mIFRDb21waWxlci4KIC8vCi1UQ29t
cGlsZXIqIENvbnN0cnVjdENvbXBpbGVyKEVTaExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNw
ZWMpCitUQ29tcGlsZXIqIENvbnN0cnVjdENvbXBpbGVyKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNo
YWRlclNwZWMgc3BlYykKIHsKLSAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JHTFNMKGxhbmd1YWdl
LCBzcGVjKTsKKyAgICByZXR1cm4gbmV3IFRyYW5zbGF0b3JHTFNMKHR5cGUsIHNwZWMpOwogfQog
CiAvLwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0luaXRpYWxp
emUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9Jbml0aWFsaXplLmNwcAkocmV2aXNpb24gNzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9B
TkdMRS9zcmMvY29tcGlsZXIvSW5pdGlhbGl6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMSwx
NSArMzExLDYgQEAKICAgICBzLmFwcGVuZChUU3RyaW5nKCJidmVjNCBub3QoYnZlYzQgeCk7Iikp
OwogCiAgICAgLy8KLSAgICAvLyBUZXh0dXJlIEZ1bmN0aW9ucy4KLSAgICAvLwotICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMyIGNvb3Jk
KTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qKHNhbXBsZXIy
RCBzYW1wbGVyLCB2ZWMzIGNvb3JkKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0
ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWM0IGNvb3JkKTsiKSk7Ci0KLSAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmVDdWJlKHNhbXBsZXJDdWJlIHNhbXBsZXIsIHZl
YzMgY29vcmQpOyIpKTsKLQotICAgIC8vCiAgICAgLy8gTm9pc2UgZnVuY3Rpb25zLgogICAgIC8v
CiAgICAgLy9zLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBub2lzZTEoZmxvYXQgeCk7IikpOwpAQCAt
MzQyLDcgKzMzMyw2IEBACiAgICAgLy9zLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IG5vaXNlNCh2ZWMz
ICB4KTsiKSk7CiAgICAgLy9zLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IG5vaXNlNCh2ZWM0ICB4KTsi
KSk7CiAKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJcbiIpKTsKICAgICByZXR1cm4gczsKIH0KIApA
QCAtMzUxLDcgKzM0MSw3IEBACiAvLyBQcm90b3R5cGVzIGZvciBidWlsdC1pbiBmdW5jdGlvbnMg
c2VlbiBieSB2ZXJ0ZXggc2hhZGVycyBvbmx5LgogLy8KIC8vPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
c3RhdGljIFRTdHJpbmcgQnVpbHRJbkZ1bmN0aW9uc1ZlcnRleCgpCitzdGF0aWMgVFN0cmluZyBC
dWlsdEluRnVuY3Rpb25zVmVydGV4KGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2Vz
KQogewogICAgIFRTdHJpbmcgczsKIApAQCAtMzYzLDEyICszNTMsMTggQEAKICAgICAvLwogICAg
IC8vIFRleHR1cmUgRnVuY3Rpb25zLgogICAgIC8vCi0gICAgcy5hcHBlbmQoVFN0cmluZygidmVj
NCB0ZXh0dXJlMkRMb2Qoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzIgY29vcmQsIGZsb2F0IGxvZCk7
IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJvakxvZChzYW1wbGVy
MkQgc2FtcGxlciwgdmVjMyBjb29yZCwgZmxvYXQgbG9kKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0
cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qTG9kKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWM0IGNvb3Jk
LCBmbG9hdCBsb2QpOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmVDdWJl
TG9kKHNhbXBsZXJDdWJlIHNhbXBsZXIsIHZlYzMgY29vcmQsIGZsb2F0IGxvZCk7IikpOworICAg
IGlmIChyZXNvdXJjZXMuTWF4VmVydGV4VGV4dHVyZUltYWdlVW5pdHMgPiAwKSB7CisgICAgICAg
IHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMy
IGNvb3JkKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEUHJv
aihzYW1wbGVyMkQgc2FtcGxlciwgdmVjMyBjb29yZCk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFByb2ooc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzQgY29vcmQp
OyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlQ3ViZShzYW1wbGVy
Q3ViZSBzYW1wbGVyLCB2ZWMzIGNvb3JkKTsiKSk7CiAKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJc
biIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRMb2Qoc2FtcGxl
cjJEIHNhbXBsZXIsIHZlYzIgY29vcmQsIGZsb2F0IGxvZCk7IikpOworICAgICAgICBzLmFwcGVu
ZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzMg
Y29vcmQsIGZsb2F0IGxvZCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRl
eHR1cmUyRFByb2pMb2Qoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzQgY29vcmQsIGZsb2F0IGxvZCk7
IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmVDdWJlTG9kKHNhbXBs
ZXJDdWJlIHNhbXBsZXIsIHZlYzMgY29vcmQsIGZsb2F0IGxvZCk7IikpOworICAgIH0KKwogICAg
IHJldHVybiBzOwogfQogCkBAIC0zNzcsMzQgKzM3Myw0MCBAQAogLy8gUHJvdG90eXBlcyBmb3Ig
YnVpbHQtaW4gZnVuY3Rpb25zIHNlZW4gYnkgZnJhZ21lbnQgc2hhZGVycyBvbmx5LgogLy8KIC8v
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotc3RhdGljIFRTdHJpbmcgQnVpbHRJbkZ1bmN0aW9uc0ZyYWdt
ZW50KCkKK3N0YXRpYyBUU3RyaW5nIEJ1aWx0SW5GdW5jdGlvbnNGcmFnbWVudChjb25zdCBTaEJ1
aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcykKIHsKICAgICBUU3RyaW5nIHM7CiAKICAgICAvLwog
ICAgIC8vIFRleHR1cmUgRnVuY3Rpb25zLgogICAgIC8vCisgICAgcy5hcHBlbmQoVFN0cmluZygi
dmVjNCB0ZXh0dXJlMkQoc2FtcGxlcjJEIHNhbXBsZXIsIHZlYzIgY29vcmQpOyIpKTsKKyAgICBz
LmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFByb2ooc2FtcGxlcjJEIHNhbXBsZXIsIHZl
YzMgY29vcmQpOyIpKTsKKyAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0IHRleHR1cmUyRFByb2oo
c2FtcGxlcjJEIHNhbXBsZXIsIHZlYzQgY29vcmQpOyIpKTsKKyAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWM0IHRleHR1cmVDdWJlKHNhbXBsZXJDdWJlIHNhbXBsZXIsIHZlYzMgY29vcmQpOyIpKTsK
KwogICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgdGV4dHVyZTJEKHNhbXBsZXIyRCBzYW1wbGVy
LCB2ZWMyIGNvb3JkLCBmbG9hdCBiaWFzKTsiKSk7CiAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
NCB0ZXh0dXJlMkRQcm9qKHNhbXBsZXIyRCBzYW1wbGVyLCB2ZWMzIGNvb3JkLCBmbG9hdCBiaWFz
KTsiKSk7CiAgICAgcy5hcHBlbmQoVFN0cmluZygidmVjNCB0ZXh0dXJlMkRQcm9qKHNhbXBsZXIy
RCBzYW1wbGVyLCB2ZWM0IGNvb3JkLCBmbG9hdCBiaWFzKTsiKSk7CiAgICAgcy5hcHBlbmQoVFN0
cmluZygidmVjNCB0ZXh0dXJlQ3ViZShzYW1wbGVyQ3ViZSBzYW1wbGVyLCB2ZWMzIGNvb3JkLCBm
bG9hdCBiaWFzKTsiKSk7CiAKLSAgICAvL3MuYXBwZW5kKFRTdHJpbmcoImZsb2F0IGRGZHgoZmxv
YXQgcCk7IikpOwotICAgIC8vcy5hcHBlbmQoVFN0cmluZygidmVjMiAgZEZkeCh2ZWMyICBwKTsi
KSk7Ci0gICAgLy9zLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBkRmR4KHZlYzMgIHApOyIpKTsKLSAg
ICAvL3MuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGRGZHgodmVjNCAgcCk7IikpOworICAgIGlmIChy
ZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzKSB7CisgICAgICAgIHMuYXBwZW5kKFRT
dHJpbmcoImZsb2F0IGRGZHgoZmxvYXQgcCk7IikpOworICAgICAgICBzLmFwcGVuZChUU3RyaW5n
KCJ2ZWMyICBkRmR4KHZlYzIgIHApOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmluZygidmVj
MyAgZEZkeCh2ZWMzICBwKTsiKSk7CisgICAgICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzQgIGRG
ZHgodmVjNCAgcCk7IikpOwogCi0gICAgLy9zLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBkRmR5KGZs
b2F0IHApOyIpKTsKLSAgICAvL3MuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGRGZHkodmVjMiAgcCk7
IikpOwotICAgIC8vcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZEZkeSh2ZWMzICBwKTsiKSk7Ci0g
ICAgLy9zLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBkRmR5KHZlYzQgIHApOyIpKTsKKyAgICAgICAg
cy5hcHBlbmQoVFN0cmluZygiZmxvYXQgZEZkeShmbG9hdCBwKTsiKSk7CisgICAgICAgIHMuYXBw
ZW5kKFRTdHJpbmcoInZlYzIgIGRGZHkodmVjMiAgcCk7IikpOworICAgICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ2ZWMzICBkRmR5KHZlYzMgIHApOyIpKTsKKyAgICAgICAgcy5hcHBlbmQoVFN0cmlu
ZygidmVjNCAgZEZkeSh2ZWM0ICBwKTsiKSk7CiAKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9h
dCBmd2lkdGgoZmxvYXQgcCk7IikpOwotICAgIHMuYXBwZW5kKFRTdHJpbmcoInZlYzIgIGZ3aWR0
aCh2ZWMyICBwKTsiKSk7Ci0gICAgcy5hcHBlbmQoVFN0cmluZygidmVjMyAgZndpZHRoKHZlYzMg
IHApOyIpKTsKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBmd2lkdGgodmVjNCAgcCk7Iikp
OworICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJmbG9hdCBmd2lkdGgoZmxvYXQgcCk7IikpOwor
ICAgICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMyICBmd2lkdGgodmVjMiAgcCk7IikpOworICAg
ICAgICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWMzICBmd2lkdGgodmVjMyAgcCk7IikpOworICAgICAg
ICBzLmFwcGVuZChUU3RyaW5nKCJ2ZWM0ICBmd2lkdGgodmVjNCAgcCk7IikpOworICAgIH0KIAot
ICAgIHMuYXBwZW5kKFRTdHJpbmcoIlxuIikpOwogICAgIHJldHVybiBzOwogfQogCkBAIC00Mjcs
NyArNDI5LDYgQEAKICAgICBzLmFwcGVuZChUU3RyaW5nKCJ9OyIpKTsKICAgICBzLmFwcGVuZChU
U3RyaW5nKCJ1bmlmb3JtIGdsX0RlcHRoUmFuZ2VQYXJhbWV0ZXJzIGdsX0RlcHRoUmFuZ2U7Iikp
OwogCi0gICAgcy5hcHBlbmQoVFN0cmluZygiXG4iKSk7CiAgICAgcmV0dXJuIHM7CiB9CiAKQEAg
LTQ0Myw3ICs0NDQsNiBAQAogICAgIHMuYXBwZW5kKFRTdHJpbmcoInByZWNpc2lvbiBoaWdocCBp
bnQ7IikpOwogICAgIHMuYXBwZW5kKFRTdHJpbmcoInByZWNpc2lvbiBoaWdocCBmbG9hdDsiKSk7
CiAKLSAgICBzLmFwcGVuZChUU3RyaW5nKCJcbiIpKTsKICAgICByZXR1cm4gczsKIH0KIApAQCAt
NDU5LDcgKzQ1OSw2IEBACiAgICAgcy5hcHBlbmQoVFN0cmluZygicHJlY2lzaW9uIG1lZGl1bXAg
aW50OyIpKTsKICAgICAvLyBObyBkZWZhdWx0IHByZWNpc2lvbiBmb3IgZmxvYXQgaW4gZnJhZ21l
bnQgc2hhZGVycwogCi0gICAgcy5hcHBlbmQoVFN0cmluZygiXG4iKSk7CiAgICAgcmV0dXJuIHM7
CiB9CiAKQEAgLTQ2OCw3ICs0NjcsNyBAQAogLy8gSW1wbGVtZW50YXRpb24gZGVwZW5kZW50IGJ1
aWx0LWluIGNvbnN0YW50cy4KIC8vCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXN0YXRpYyBUU3Ry
aW5nIEJ1aWx0SW5Db25zdGFudHMoY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSAmcmVzb3VyY2VzKQor
c3RhdGljIFRTdHJpbmcgQnVpbHRJbkNvbnN0YW50cyhjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMg
JnJlc291cmNlcykKIHsKICAgICBUU3RyaW5nU3RyZWFtIHM7CiAKQEAgLTQ4NSwyMCArNDg0LDIx
IEBACiAgICAgcmV0dXJuIHMuc3RyKCk7CiB9CiAKLXZvaWQgVEJ1aWx0SW5zOjppbml0aWFsaXpl
KEVTaExhbmd1YWdlIGxhbmd1YWdlLCBFU2hTcGVjIHNwZWMsIGNvbnN0IFRCdWlsdEluUmVzb3Vy
Y2UmIHJlc291cmNlcykKK3ZvaWQgVEJ1aWx0SW5zOjppbml0aWFsaXplKFNoU2hhZGVyVHlwZSB0
eXBlLCBTaFNoYWRlclNwZWMgc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzKQogewotICAgIHN3aXRjaCAobGFuZ3VhZ2Up
IHsKLSAgICBjYXNlIEVTaExhbmdGcmFnbWVudDoKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBj
YXNlIFNIX0ZSQUdNRU5UX1NIQURFUjoKICAgICAgICAgYnVpbHRJblN0cmluZ3MucHVzaF9iYWNr
KERlZmF1bHRQcmVjaXNpb25GcmFnbWVudCgpKTsKICAgICAgICAgYnVpbHRJblN0cmluZ3MucHVz
aF9iYWNrKEJ1aWx0SW5GdW5jdGlvbnNDb21tb24oKSk7Ci0gICAgICAgIGJ1aWx0SW5TdHJpbmdz
LnB1c2hfYmFjayhCdWlsdEluRnVuY3Rpb25zRnJhZ21lbnQoKSk7CisgICAgICAgIGJ1aWx0SW5T
dHJpbmdzLnB1c2hfYmFjayhCdWlsdEluRnVuY3Rpb25zRnJhZ21lbnQocmVzb3VyY2VzKSk7CiAg
ICAgICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhTdGFuZGFyZFVuaWZvcm1zKCkpOwogICAg
ICAgICBicmVhazsKIAotICAgIGNhc2UgRVNoTGFuZ1ZlcnRleDoKKyAgICBjYXNlIFNIX1ZFUlRF
WF9TSEFERVI6CiAgICAgICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhEZWZhdWx0UHJlY2lz
aW9uVmVydGV4KCkpOwogICAgICAgICBidWlsdEluU3RyaW5ncy5wdXNoX2JhY2soQnVpbHRJbkZ1
bmN0aW9uc0NvbW1vbigpKTsKLSAgICAgICAgYnVpbHRJblN0cmluZ3MucHVzaF9iYWNrKEJ1aWx0
SW5GdW5jdGlvbnNWZXJ0ZXgoKSk7CisgICAgICAgIGJ1aWx0SW5TdHJpbmdzLnB1c2hfYmFjayhC
dWlsdEluRnVuY3Rpb25zVmVydGV4KHJlc291cmNlcykpOwogICAgICAgICBidWlsdEluU3RyaW5n
cy5wdXNoX2JhY2soU3RhbmRhcmRVbmlmb3JtcygpKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTUw
OCwxNCArNTA4LDE2IEBACiAgICAgYnVpbHRJblN0cmluZ3MucHVzaF9iYWNrKEJ1aWx0SW5Db25z
dGFudHMocmVzb3VyY2VzKSk7CiB9CiAKLXZvaWQgSWRlbnRpZnlCdWlsdElucyhFU2hMYW5ndWFn
ZSBsYW5ndWFnZSwgRVNoU3BlYyBzcGVjLCBjb25zdCBUQnVpbHRJblJlc291cmNlJiByZXNvdXJj
ZXMsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCit2b2lkIElkZW50aWZ5QnVpbHRJbnMoU2hT
aGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjLAorICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2VzLAorICAgICAgICAgICAgICAgICAg
ICAgIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCiB7CiAgICAgLy8KICAgICAvLyBGaXJzdCwg
aW5zZXJ0IHNvbWUgc3BlY2lhbCBidWlsdC1pbiB2YXJpYWJsZXMgdGhhdCBhcmUgbm90IGluIAog
ICAgIC8vIHRoZSBidWlsdC1pbiBoZWFkZXIgZmlsZXMuCiAgICAgLy8KLSAgICBzd2l0Y2gobGFu
Z3VhZ2UpIHsKLSAgICBjYXNlIEVTaExhbmdGcmFnbWVudDoKKyAgICBzd2l0Y2godHlwZSkgewor
ICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOgogICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQo
Km5ldyBUVmFyaWFibGUoTmV3UG9vbFRTdHJpbmcoImdsX0ZyYWdDb29yZCIpLCAgICAgICAgICAg
ICAgICAgICBUVHlwZShFYnRGbG9hdCwgRWJwTWVkaXVtLCBFdnFGcmFnQ29vcmQsICAgNCkpKTsK
ICAgICAgICAgc3ltYm9sVGFibGUuaW5zZXJ0KCpuZXcgVFZhcmlhYmxlKE5ld1Bvb2xUU3RyaW5n
KCJnbF9Gcm9udEZhY2luZyIpLCAgICAgICAgICAgICAgICAgVFR5cGUoRWJ0Qm9vbCwgIEVicFVu
ZGVmaW5lZCwgRXZxRnJvbnRGYWNpbmcsIDEpKSk7CiAgICAgICAgIHN5bWJvbFRhYmxlLmluc2Vy
dCgqbmV3IFRWYXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfRnJhZ0NvbG9yIiksICAgICAgICAg
ICAgICAgICAgIFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb2xvciwgICA0KSkp
OwpAQCAtNTIzLDcgKzUyNSw3IEBACiAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRW
YXJpYWJsZShOZXdQb29sVFN0cmluZygiZ2xfUG9pbnRDb29yZCIpLCAgICAgICAgICAgICAgICAg
IFRUeXBlKEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cVBvaW50Q29vcmQsICAyKSkpOwogICAgICAg
ICBicmVhazsKIAotICAgIGNhc2UgRVNoTGFuZ1ZlcnRleDoKKyAgICBjYXNlIFNIX1ZFUlRFWF9T
SEFERVI6CiAgICAgICAgIHN5bWJvbFRhYmxlLmluc2VydCgqbmV3IFRWYXJpYWJsZShOZXdQb29s
VFN0cmluZygiZ2xfUG9zaXRpb24iKSwgICAgVFR5cGUoRWJ0RmxvYXQsIEVicEhpZ2gsIEV2cVBv
c2l0aW9uLCAgICA0KSkpOwogICAgICAgICBzeW1ib2xUYWJsZS5pbnNlcnQoKm5ldyBUVmFyaWFi
bGUoTmV3UG9vbFRTdHJpbmcoImdsX1BvaW50U2l6ZSIpLCAgIFRUeXBlKEVidEZsb2F0LCBFYnBN
ZWRpdW0sIEV2cVBvaW50U2l6ZSwgICAxKSkpOwogICAgICAgICBicmVhazsKQEAgLTU5MSwyMCAr
NTkzLDI2IEBACiAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiYWxsIiwgICAgICAg
ICAgRU9wQWxsKTsKIAogICAgIC8vIE1hcCBsYW5ndWFnZS1zcGVjaWZpYyBvcGVyYXRvcnMuCi0g
ICAgc3dpdGNoKGxhbmd1YWdlKSB7Ci0gICAgY2FzZSBFU2hMYW5nVmVydGV4OgorICAgIHN3aXRj
aCh0eXBlKSB7CisgICAgY2FzZSBTSF9WRVJURVhfU0hBREVSOgogICAgICAgICBicmVhazsKLSAg
ICBjYXNlIEVTaExhbmdGcmFnbWVudDoKLSAgICAgICAgLy9zeW1ib2xUYWJsZS5yZWxhdGVUb09w
ZXJhdG9yKCJkRmR4IiwgICBFT3BEUGR4KTsgICAgLy8gT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVz
IGV4dGVuc2lvbgotICAgICAgICAvL3N5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHki
LCAgIEVPcERQZHkpOyAgICAvLyBPRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCi0g
ICAgICAgIC8vc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigiZndpZHRoIiwgRU9wRndpZHRo
KTsgIC8vIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KKyAgICBjYXNlIFNIX0ZS
QUdNRU5UX1NIQURFUjoKKyAgICAgICAgaWYgKHJlc291cmNlcy5PRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMpIHsKKyAgICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvT3BlcmF0b3IoImRGZHgi
LCAgIEVPcERGZHgpOworICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9PcGVyYXRvcigi
ZEZkeSIsICAgRU9wREZkeSk7CisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxhdGVUb09wZXJh
dG9yKCJmd2lkdGgiLCBFT3BGd2lkdGgpOworCisgICAgICAgICAgICBzeW1ib2xUYWJsZS5yZWxh
dGVUb0V4dGVuc2lvbigiZEZkeCIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAg
ICAgICAgICAgIHN5bWJvbFRhYmxlLnJlbGF0ZVRvRXh0ZW5zaW9uKCJkRmR5IiwgIkdMX09FU19z
dGFuZGFyZF9kZXJpdmF0aXZlcyIpOworICAgICAgICAgICAgc3ltYm9sVGFibGUucmVsYXRlVG9F
eHRlbnNpb24oImZ3aWR0aCIsICJHTF9PRVNfc3RhbmRhcmRfZGVyaXZhdGl2ZXMiKTsKKyAgICAg
ICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CiAKICAgICAv
LyBGaW5hbGx5IGFkZCByZXNvdXJjZS1zcGVjaWZpYyB2YXJpYWJsZXMuCi0gICAgc3dpdGNoKGxh
bmd1YWdlKSB7Ci0gICAgY2FzZSBFU2hMYW5nRnJhZ21lbnQ6IHsKKyAgICBzd2l0Y2godHlwZSkg
eworICAgIGNhc2UgU0hfRlJBR01FTlRfU0hBREVSOiB7CiAgICAgICAgICAgICAvLyBTZXQgdXAg
Z2xfRnJhZ0RhdGEuICBUaGUgYXJyYXkgc2l6ZS4KICAgICAgICAgICAgIFRUeXBlIGZyYWdEYXRh
KEVidEZsb2F0LCBFYnBNZWRpdW0sIEV2cUZyYWdDb2xvciwgICA0LCBmYWxzZSwgdHJ1ZSk7CiAg
ICAgICAgICAgICBmcmFnRGF0YS5zZXRBcnJheVNpemUocmVzb3VyY2VzLk1heERyYXdCdWZmZXJz
KTsKQEAgLTYxNSwzICs2MjMsOSBAQAogICAgIH0KIH0KIAordm9pZCBJbml0RXh0ZW5zaW9uQmVo
YXZpb3IoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJjZXMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yKQoreworICAgIGlm
IChyZXNvdXJjZXMuT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzKQorICAgICAgICBleHRCZWhhdmlv
clsiR0xfT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIl0gPSBFQmhEaXNhYmxlOworfQpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9W
YWxpZGF0ZUxpbWl0YXRpb25zLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9WYWxpZGF0ZUxpbWl0YXRpb25zLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw0NjggQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5H
TEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxl
ci9WYWxpZGF0ZUxpbWl0YXRpb25zLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvSW5mb1NpbmsuaCIK
KyNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgorCituYW1lc3BhY2UgeworYm9vbCBJ
c0xvb3BJbmRleChjb25zdCBUSW50ZXJtU3ltYm9sKiBzeW1ib2wsIGNvbnN0IFRMb29wU3RhY2sm
IHN0YWNrKSB7CisgICAgZm9yIChUTG9vcFN0YWNrOjpjb25zdF9pdGVyYXRvciBpID0gc3RhY2su
YmVnaW4oKTsgaSAhPSBzdGFjay5lbmQoKTsgKytpKSB7CisgICAgICAgIGlmIChpLT5pbmRleC5p
ZCA9PSBzeW1ib2wtPmdldElkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUcmF2ZXJzZXMgYSBub2RlIHRvIGNoZWNrIGlmIGl0
IHJlcHJlc2VudHMgYSBjb25zdGFudCBpbmRleCBleHByZXNzaW9uLgorLy8gRGVmaW5pdGlvbjoK
Ky8vIGNvbnN0YW50LWluZGV4LWV4cHJlc3Npb25zIGFyZSBhIHN1cGVyc2V0IG9mIGNvbnN0YW50
LWV4cHJlc3Npb25zLgorLy8gQ29uc3RhbnQtaW5kZXgtZXhwcmVzc2lvbnMgY2FuIGluY2x1ZGUg
bG9vcCBpbmRpY2VzIGFzIGRlZmluZWQgaW4KKy8vIEdMU0wgRVMgMS4wIHNwZWMsIEFwcGVuZGl4
IEEsIHNlY3Rpb24gNC4KKy8vIFRoZSBmb2xsb3dpbmcgYXJlIGNvbnN0YW50LWluZGV4LWV4cHJl
c3Npb25zOgorLy8gLSBDb25zdGFudCBleHByZXNzaW9ucworLy8gLSBMb29wIGluZGljZXMgYXMg
ZGVmaW5lZCBpbiBzZWN0aW9uIDQKKy8vIC0gRXhwcmVzc2lvbnMgY29tcG9zZWQgb2YgYm90aCBv
ZiB0aGUgYWJvdmUKK2NsYXNzIFZhbGlkYXRlQ29uc3RJbmRleEV4cHIgOiBwdWJsaWMgVEludGVy
bVRyYXZlcnNlciB7CitwdWJsaWM6CisgICAgVmFsaWRhdGVDb25zdEluZGV4RXhwcihjb25zdCBU
TG9vcFN0YWNrJiBzdGFjaykKKyAgICAgICAgOiBtVmFsaWQodHJ1ZSksIG1Mb29wU3RhY2soc3Rh
Y2spIHt9CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIHBhcnNlZCBub2RlIHJlcHJlc2Vu
dHMgYSBjb25zdGFudCBpbmRleCBleHByZXNzaW9uLgorICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIG1WYWxpZDsgfQorCisgICAgdmlydHVhbCB2b2lkIHZpc2l0U3ltYm9sKFRJbnRl
cm1TeW1ib2wqIHN5bWJvbCkgeworICAgICAgICAvLyBPbmx5IGNvbnN0YW50cyBhbmQgbG9vcCBp
bmRpY2VzIGFyZSBhbGxvd2VkIGluIGEKKyAgICAgICAgLy8gY29uc3RhbnQgaW5kZXggZXhwcmVz
c2lvbi4KKyAgICAgICAgaWYgKG1WYWxpZCkgeworICAgICAgICAgICAgbVZhbGlkID0gKHN5bWJv
bC0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHx8CisgICAgICAgICAgICAgICAgICAgICBJ
c0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2spOworICAgICAgICB9CisgICAgfQorICAgIHZp
cnR1YWwgdm9pZCB2aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKSB7fQor
ICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSopIHsgcmV0
dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVu
YXJ5KikgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCB2aXNpdFNlbGVjdGlvbihW
aXNpdCwgVEludGVybVNlbGVjdGlvbiopIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKSB7IHJldHVybiB0cnVl
OyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AqKSB7IHJl
dHVybiB0cnVlOyB9CisgICAgdmlydHVhbCBib29sIHZpc2l0QnJhbmNoKFZpc2l0LCBUSW50ZXJt
QnJhbmNoKikgeyByZXR1cm4gdHJ1ZTsgfQorCitwcml2YXRlOgorICAgIGJvb2wgbVZhbGlkOwor
ICAgIGNvbnN0IFRMb29wU3RhY2smIG1Mb29wU3RhY2s7Cit9OworfSAgLy8gbmFtZXNwYWNlCisK
K1ZhbGlkYXRlTGltaXRhdGlvbnM6OlZhbGlkYXRlTGltaXRhdGlvbnMoU2hTaGFkZXJUeXBlIHNo
YWRlclR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJbmZv
U2lua0Jhc2UmIHNpbmspCisgICAgOiBtU2hhZGVyVHlwZShzaGFkZXJUeXBlKSwKKyAgICAgIG1T
aW5rKHNpbmspLAorICAgICAgbU51bUVycm9ycygwKQoreworfQorCit2b2lkIFZhbGlkYXRlTGlt
aXRhdGlvbnM6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqKQoreworfQorCit2b2lkIFZhbGlk
YXRlTGltaXRhdGlvbnM6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiop
Cit7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJ
bnRlcm1CaW5hcnkqIG5vZGUpCit7CisgICAgLy8gQ2hlY2sgaWYgbG9vcCBpbmRleCBpcyBtb2Rp
ZmllZCBpbiB0aGUgbG9vcCBib2R5LgorICAgIHZhbGlkYXRlT3BlcmF0aW9uKG5vZGUsIG5vZGUt
PmdldExlZnQoKSk7CisKKyAgICAvLyBDaGVjayBpbmRleGluZy4KKyAgICBzd2l0Y2ggKG5vZGUt
PmdldE9wKCkpIHsKKyAgICAgIGNhc2UgRU9wSW5kZXhEaXJlY3Q6CisgICAgICBjYXNlIEVPcElu
ZGV4SW5kaXJlY3Q6CisgICAgICAgIHZhbGlkYXRlSW5kZXhpbmcobm9kZSk7CisgICAgICAgIGJy
ZWFrOworICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFy
eSogbm9kZSkKK3sKKyAgICAvLyBDaGVjayBpZiBsb29wIGluZGV4IGlzIG1vZGlmaWVkIGluIHRo
ZSBsb29wIGJvZHkuCisgICAgdmFsaWRhdGVPcGVyYXRpb24obm9kZSwgbm9kZS0+Z2V0T3BlcmFu
ZCgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6
OnZpc2l0U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKikKK3sKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworYm9vbCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp2aXNpdEFnZ3JlZ2F0ZShWaXNp
dCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkp
IHsKKyAgICAgIGNhc2UgRU9wRnVuY3Rpb25DYWxsOgorICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9u
Q2FsbChub2RlKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9u
czo6dmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCogbm9kZSkKK3sKKyAgICBpZiAoIXZhbGlk
YXRlTG9vcFR5cGUobm9kZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFRMb29wSW5m
byBpbmZvOworICAgIG1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKFRMb29wSW5mbykpOworICAgIGlm
ICghdmFsaWRhdGVGb3JMb29wSGVhZGVyKG5vZGUsICZpbmZvKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgVEludGVybU5vZGUqIGJvZHkgPSBub2RlLT5nZXRCb2R5KCk7CisgICAgaWYg
KGJvZHkgIT0gTlVMTCkgeworICAgICAgICBtTG9vcFN0YWNrLnB1c2hfYmFjayhpbmZvKTsKKyAg
ICAgICAgYm9keS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIG1Mb29wU3RhY2sucG9wX2JhY2so
KTsKKyAgICB9CisKKyAgICAvLyBUaGUgbG9vcCBpcyBmdWxseSBwcm9jZXNzZWQgLSBubyBuZWVk
IHRvIHZpc2l0IGNoaWxkcmVuLgorICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBWYWxpZGF0
ZUxpbWl0YXRpb25zOjp2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCopCit7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgVmFsaWRhdGVMaW1pdGF0aW9uczo6ZXJyb3IoVFNvdXJj
ZUxvYyBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJl
YXNvbiwgY29uc3QgY2hhciogdG9rZW4pCit7CisgICAgbVNpbmsucHJlZml4KEVQcmVmaXhFcnJv
cik7CisgICAgbVNpbmsubG9jYXRpb24obG9jKTsKKyAgICBtU2luayA8PCAiJyIgPDwgdG9rZW4g
PDwgIicgOiAiIDw8IHJlYXNvbiA8PCAiXG4iOworICAgICsrbU51bUVycm9yczsKK30KKworYm9v
bCBWYWxpZGF0ZUxpbWl0YXRpb25zOjp3aXRoaW5Mb29wQm9keSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuICFtTG9vcFN0YWNrLmVtcHR5KCk7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6
aXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sKSBjb25zdAoreworICAgIHJl
dHVybiBJc0xvb3BJbmRleChzeW1ib2wsIG1Mb29wU3RhY2spOworfQorCitib29sIFZhbGlkYXRl
TGltaXRhdGlvbnM6OnZhbGlkYXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUpIHsKKyAgICBU
TG9vcFR5cGUgdHlwZSA9IG5vZGUtPmdldFR5cGUoKTsKKyAgICBpZiAodHlwZSA9PSBFTG9vcEZv
cikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAvLyBSZWplY3Qgd2hpbGUgYW5kIGRvLXdo
aWxlIGxvb3BzLgorICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKKyAgICAgICAgICAiVGhpcyB0
eXBlIG9mIGxvb3AgaXMgbm90IGFsbG93ZWQiLAorICAgICAgICAgIHR5cGUgPT0gRUxvb3BXaGls
ZSA/ICJ3aGlsZSIgOiAiZG8iKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgVmFsaWRh
dGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRlcm1Mb29wKiBub2RlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExvb3BJbmZv
KiBpbmZvKQoreworICAgIEFTU0VSVChub2RlLT5nZXRUeXBlKCkgPT0gRUxvb3BGb3IpOworCisg
ICAgLy8KKyAgICAvLyBUaGUgZm9yIHN0YXRlbWVudCBoYXMgdGhlIGZvcm06CisgICAgLy8gICAg
Zm9yICggaW5pdC1kZWNsYXJhdGlvbiA7IGNvbmRpdGlvbiA7IGV4cHJlc3Npb24gKSBzdGF0ZW1l
bnQKKyAgICAvLworICAgIGlmICghdmFsaWRhdGVGb3JMb29wSW5pdChub2RlLCBpbmZvKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdmFsaWRhdGVGb3JMb29wQ29uZChub2RlLCBp
bmZvKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghdmFsaWRhdGVGb3JMb29wRXhw
cihub2RlLCBpbmZvKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSW5pdChUSW50
ZXJtTG9vcCogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBUTG9vcEluZm8qIGluZm8pCit7CisgICAgVEludGVybU5vZGUqIGluaXQgPSBub2RlLT5n
ZXRJbml0KCk7CisgICAgaWYgKGluaXQgPT0gTlVMTCkgeworICAgICAgICBlcnJvcihub2RlLT5n
ZXRMaW5lKCksICJNaXNzaW5nIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLworICAgIC8vIGluaXQtZGVjbGFyYXRpb24gaGFz
IHRoZSBmb3JtOgorICAgIC8vICAgICB0eXBlLXNwZWNpZmllciBpZGVudGlmaWVyID0gY29uc3Rh
bnQtZXhwcmVzc2lvbgorICAgIC8vCisgICAgVEludGVybUFnZ3JlZ2F0ZSogZGVjbCA9IGluaXQt
PmdldEFzQWdncmVnYXRlKCk7CisgICAgaWYgKChkZWNsID09IE5VTEwpIHx8IChkZWNsLT5nZXRP
cCgpICE9IEVPcERlY2xhcmF0aW9uKSkgeworICAgICAgICBlcnJvcihpbml0LT5nZXRMaW5lKCks
ICJJbnZhbGlkIGluaXQgZGVjbGFyYXRpb24iLCAiZm9yIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgLy8gVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGRvIG5vdCBhbGxvdyBkZWNs
YXJhdGlvbiBsaXN0LgorICAgIFRJbnRlcm1TZXF1ZW5jZSYgZGVjbFNlcSA9IGRlY2wtPmdldFNl
cXVlbmNlKCk7CisgICAgaWYgKGRlY2xTZXEuc2l6ZSgpICE9IDEpIHsKKyAgICAgICAgZXJyb3Io
ZGVjbC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFRJbnRlcm1CaW5hcnkqIGRlY2xJbml0ID0g
ZGVjbFNlcVswXS0+Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgaWYgKChkZWNsSW5pdCA9PSBOVUxM
KSB8fCAoZGVjbEluaXQtPmdldE9wKCkgIT0gRU9wSW5pdGlhbGl6ZSkpIHsKKyAgICAgICAgZXJy
b3IoZGVjbC0+Z2V0TGluZSgpLCAiSW52YWxpZCBpbml0IGRlY2xhcmF0aW9uIiwgImZvciIpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9
IGRlY2xJbml0LT5nZXRMZWZ0KCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgIGlmIChzeW1ib2wg
PT0gTlVMTCkgeworICAgICAgICBlcnJvcihkZWNsSW5pdC0+Z2V0TGluZSgpLCAiSW52YWxpZCBp
bml0IGRlY2xhcmF0aW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
ICAgIC8vIFRoZSBsb29wIGluZGV4IGhhcyB0eXBlIGludCBvciBmbG9hdC4KKyAgICBUQmFzaWNU
eXBlIHR5cGUgPSBzeW1ib2wtPmdldEJhc2ljVHlwZSgpOworICAgIGlmICgodHlwZSAhPSBFYnRJ
bnQpICYmICh0eXBlICE9IEVidEZsb2F0KSkgeworICAgICAgICBlcnJvcihzeW1ib2wtPmdldExp
bmUoKSwKKyAgICAgICAgICAgICAgIkludmFsaWQgdHlwZSBmb3IgbG9vcCBpbmRleCIsIGdldEJh
c2ljU3RyaW5nKHR5cGUpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAvLyBU
aGUgbG9vcCBpbmRleCBpcyBpbml0aWFsaXplZCB3aXRoIGNvbnN0YW50IGV4cHJlc3Npb24uCisg
ICAgaWYgKCFpc0NvbnN0RXhwcihkZWNsSW5pdC0+Z2V0UmlnaHQoKSkpIHsKKyAgICAgICAgZXJy
b3IoZGVjbEluaXQtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgIkxvb3AgaW5kZXggY2Fubm90
IGJlIGluaXRpYWxpemVkIHdpdGggbm9uLWNvbnN0YW50IGV4cHJlc3Npb24iLAorICAgICAgICAg
ICAgICBzeW1ib2wtPmdldFN5bWJvbCgpLmNfc3RyKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaW5mby0+aW5kZXguaWQgPSBzeW1ib2wtPmdldElkKCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29w
Q29uZChUSW50ZXJtTG9vcCogbm9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBUTG9vcEluZm8qIGluZm8pCit7CisgICAgVEludGVybU5vZGUqIGNvbmQg
PSBub2RlLT5nZXRDb25kaXRpb24oKTsKKyAgICBpZiAoY29uZCA9PSBOVUxMKSB7CisgICAgICAg
IGVycm9yKG5vZGUtPmdldExpbmUoKSwgIk1pc3NpbmcgY29uZGl0aW9uIiwgImZvciIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIC8vCisgICAgLy8gY29uZGl0aW9uIGhhcyB0
aGUgZm9ybToKKyAgICAvLyAgICAgbG9vcF9pbmRleCByZWxhdGlvbmFsX29wZXJhdG9yIGNvbnN0
YW50X2V4cHJlc3Npb24KKyAgICAvLworICAgIFRJbnRlcm1CaW5hcnkqIGJpbk9wID0gY29uZC0+
Z2V0QXNCaW5hcnlOb2RlKCk7CisgICAgaWYgKGJpbk9wID09IE5VTEwpIHsKKyAgICAgICAgZXJy
b3Iobm9kZS0+Z2V0TGluZSgpLCAiSW52YWxpZCBjb25kaXRpb24iLCAiZm9yIik7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgLy8gTG9vcCBpbmRleCBzaG91bGQgYmUgdG8gdGhl
IGxlZnQgb2YgcmVsYXRpb25hbCBvcGVyYXRvci4KKyAgICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wg
PSBiaW5PcC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICBpZiAoc3ltYm9sID09
IE5VTEwpIHsKKyAgICAgICAgZXJyb3IoYmluT3AtPmdldExpbmUoKSwgIkludmFsaWQgY29uZGl0
aW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIGlmIChzeW1i
b2wtPmdldElkKCkgIT0gaW5mby0+aW5kZXguaWQpIHsKKyAgICAgICAgZXJyb3Ioc3ltYm9sLT5n
ZXRMaW5lKCksCisgICAgICAgICAgICAgICJFeHBlY3RlZCBsb29wIGluZGV4Iiwgc3ltYm9sLT5n
ZXRTeW1ib2woKS5jX3N0cigpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAv
LyBSZWxhdGlvbmFsIG9wZXJhdG9yIGlzIG9uZSBvZjogPiA+PSA8IDw9ID09IG9yICE9LgorICAg
IHN3aXRjaCAoYmluT3AtPmdldE9wKCkpIHsKKyAgICAgIGNhc2UgRU9wRXF1YWw6CisgICAgICBj
YXNlIEVPcE5vdEVxdWFsOgorICAgICAgY2FzZSBFT3BMZXNzVGhhbjoKKyAgICAgIGNhc2UgRU9w
R3JlYXRlclRoYW46CisgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CisgICAgICBjYXNlIEVP
cEdyZWF0ZXJUaGFuRXF1YWw6CisgICAgICAgIGJyZWFrOworICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgZXJyb3IoYmluT3AtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgIkludmFsaWQgcmVsYXRp
b25hbCBvcGVyYXRvciIsCisgICAgICAgICAgICAgIGdldE9wZXJhdG9yU3RyaW5nKGJpbk9wLT5n
ZXRPcCgpKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAvLyBMb29wIGluZGV4IG11c3Qg
YmUgY29tcGFyZWQgd2l0aCBhIGNvbnN0YW50LgorICAgIGlmICghaXNDb25zdEV4cHIoYmluT3At
PmdldFJpZ2h0KCkpKSB7CisgICAgICAgIGVycm9yKGJpbk9wLT5nZXRMaW5lKCksCisgICAgICAg
ICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBjb21wYXJlZCB3aXRoIG5vbi1jb25zdGFudCBl
eHByZXNzaW9uIiwKKyAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigpKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEV4cHIoVEludGVybUxvb3Aq
IG5vZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVExv
b3BJbmZvKiBpbmZvKQoreworICAgIFRJbnRlcm1Ob2RlKiBleHByID0gbm9kZS0+Z2V0RXhwcmVz
c2lvbigpOworICAgIGlmIChleHByID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3Iobm9kZS0+Z2V0
TGluZSgpLCAiTWlzc2luZyBleHByZXNzaW9uIiwgImZvciIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgLy8gZm9yIGV4cHJlc3Npb24gaGFzIG9uZSBvZiB0aGUgZm9sbG93
aW5nIGZvcm1zOgorICAgIC8vICAgICBsb29wX2luZGV4KysKKyAgICAvLyAgICAgbG9vcF9pbmRl
eC0tCisgICAgLy8gICAgIGxvb3BfaW5kZXggKz0gY29uc3RhbnRfZXhwcmVzc2lvbgorICAgIC8v
ICAgICBsb29wX2luZGV4IC09IGNvbnN0YW50X2V4cHJlc3Npb24KKyAgICAvLyAgICAgKytsb29w
X2luZGV4CisgICAgLy8gICAgIC0tbG9vcF9pbmRleAorICAgIC8vIFRoZSBsYXN0IHR3byBmb3Jt
cyBhcmUgbm90IHNwZWNpZmllZCBpbiB0aGUgc3BlYywgYnV0IEkgYW0gYXNzdW1pbmcKKyAgICAv
LyBpdHMgYW4gb3ZlcnNpZ2h0LgorICAgIFRJbnRlcm1VbmFyeSogdW5PcCA9IGV4cHItPmdldEFz
VW5hcnlOb2RlKCk7CisgICAgVEludGVybUJpbmFyeSogYmluT3AgPSB1bk9wID8gTlVMTCA6IGV4
cHItPmdldEFzQmluYXJ5Tm9kZSgpOworCisgICAgVE9wZXJhdG9yIG9wID0gRU9wTnVsbDsKKyAg
ICBUSW50ZXJtU3ltYm9sKiBzeW1ib2wgPSBOVUxMOworICAgIGlmICh1bk9wICE9IE5VTEwpIHsK
KyAgICAgICAgb3AgPSB1bk9wLT5nZXRPcCgpOworICAgICAgICBzeW1ib2wgPSB1bk9wLT5nZXRP
cGVyYW5kKCktPmdldEFzU3ltYm9sTm9kZSgpOworICAgIH0gZWxzZSBpZiAoYmluT3AgIT0gTlVM
TCkgeworICAgICAgICBvcCA9IGJpbk9wLT5nZXRPcCgpOworICAgICAgICBzeW1ib2wgPSBiaW5P
cC0+Z2V0TGVmdCgpLT5nZXRBc1N5bWJvbE5vZGUoKTsKKyAgICB9CisKKyAgICAvLyBUaGUgb3Bl
cmFuZCBtdXN0IGJlIGxvb3AgaW5kZXguCisgICAgaWYgKHN5bWJvbCA9PSBOVUxMKSB7CisgICAg
ICAgIGVycm9yKGV4cHItPmdldExpbmUoKSwgIkludmFsaWQgZXhwcmVzc2lvbiIsICJmb3IiKTsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpZiAoc3ltYm9sLT5nZXRJZCgpICE9
IGluZm8tPmluZGV4LmlkKSB7CisgICAgICAgIGVycm9yKHN5bWJvbC0+Z2V0TGluZSgpLAorICAg
ICAgICAgICAgICAiRXhwZWN0ZWQgbG9vcCBpbmRleCIsIHN5bWJvbC0+Z2V0U3ltYm9sKCkuY19z
dHIoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgb3BlcmF0
b3IgaXMgb25lIG9mOiArKyAtLSArPSAtPS4KKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNh
c2UgRU9wUG9zdEluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQb3N0RGVjcmVtZW50OgorICAg
ICAgICBjYXNlIEVPcFByZUluY3JlbWVudDoKKyAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1lbnQ6
CisgICAgICAgICAgICBBU1NFUlQoKHVuT3AgIT0gTlVMTCkgJiYgKGJpbk9wID09IE5VTEwpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEFkZEFzc2lnbjoKKyAgICAgICAg
Y2FzZSBFT3BTdWJBc3NpZ246CisgICAgICAgICAgICBBU1NFUlQoKHVuT3AgPT0gTlVMTCkgJiYg
KGJpbk9wICE9IE5VTEwpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgZXJyb3IoZXhwci0+Z2V0TGluZSgpLCAiSW52YWxpZCBvcGVyYXRvciIsIGdl
dE9wZXJhdG9yU3RyaW5nKG9wKSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgLy8gTG9vcCBpbmRleCBtdXN0IGJlIGluY3JlbWVudGVkL2RlY3JlbWVudGVkIHdpdGgg
YSBjb25zdGFudC4KKyAgICBpZiAoYmluT3AgIT0gTlVMTCkgeworICAgICAgICBpZiAoIWlzQ29u
c3RFeHByKGJpbk9wLT5nZXRSaWdodCgpKSkgeworICAgICAgICAgICAgZXJyb3IoYmluT3AtPmdl
dExpbmUoKSwKKyAgICAgICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSBtb2RpZmll
ZCBieSBub24tY29uc3RhbnQgZXhwcmVzc2lvbiIsCisgICAgICAgICAgICAgICAgICBzeW1ib2wt
PmdldFN5bWJvbCgpLmNfc3RyKCkpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0
aW9uczo6dmFsaWRhdGVGdW5jdGlvbkNhbGwoVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAg
ICBBU1NFUlQobm9kZS0+Z2V0T3AoKSA9PSBFT3BGdW5jdGlvbkNhbGwpOworCisgICAgLy8gSWYg
bm90IHdpdGhpbiBsb29wIGJvZHksIHRoZXJlIGlzIG5vdGhpbmcgdG8gY2hlY2suCisgICAgaWYg
KCF3aXRoaW5Mb29wQm9keSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIC8vIExpc3Qg
b2YgcGFyYW0gaW5kaWNlcyBmb3Igd2hpY2ggbG9vcCBpbmRpY2VzIGFyZSB1c2VkIGFzIGFyZ3Vt
ZW50LgorICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3I8aW50PiBQYXJhbUluZGV4OworICAgIFBhcmFt
SW5kZXggcEluZGV4OworICAgIFRJbnRlcm1TZXF1ZW5jZSYgcGFyYW1zID0gbm9kZS0+Z2V0U2Vx
dWVuY2UoKTsKKyAgICBmb3IgKFRJbnRlcm1TZXF1ZW5jZTo6c2l6ZV90eXBlIGkgPSAwOyBpIDwg
cGFyYW1zLnNpemUoKTsgKytpKSB7CisgICAgICAgIFRJbnRlcm1TeW1ib2wqIHN5bWJvbCA9IHBh
cmFtc1tpXS0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgICAgIGlmIChzeW1ib2wgJiYgaXNMb29w
SW5kZXgoc3ltYm9sKSkKKyAgICAgICAgICAgIHBJbmRleC5wdXNoX2JhY2soaSk7CisgICAgfQor
ICAgIC8vIElmIG5vbmUgb2YgdGhlIGxvb3AgaW5kaWNlcyBhcmUgdXNlZCBhcyBhcmd1bWVudHMs
CisgICAgLy8gdGhlcmUgaXMgbm90aGluZyB0byBjaGVjay4KKyAgICBpZiAocEluZGV4LmVtcHR5
KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAg
VFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9IEdsb2JhbFBhcnNlQ29udGV4dC0+c3ltYm9sVGFi
bGU7CisgICAgVFN5bWJvbCogc3ltYm9sID0gc3ltYm9sVGFibGUuZmluZChub2RlLT5nZXROYW1l
KCkpOworICAgIEFTU0VSVChzeW1ib2wgJiYgc3ltYm9sLT5pc0Z1bmN0aW9uKCkpOworICAgIFRG
dW5jdGlvbiogZnVuY3Rpb24gPSBzdGF0aWNfY2FzdDxURnVuY3Rpb24qPihzeW1ib2wpOworICAg
IGZvciAoUGFyYW1JbmRleDo6Y29uc3RfaXRlcmF0b3IgaSA9IHBJbmRleC5iZWdpbigpOworICAg
ICAgICAgaSAhPSBwSW5kZXguZW5kKCk7ICsraSkgeworICAgICAgICBjb25zdCBUUGFyYW1ldGVy
JiBwYXJhbSA9IGZ1bmN0aW9uLT5nZXRQYXJhbSgqaSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVh
bCA9IHBhcmFtLnR5cGUtPmdldFF1YWxpZmllcigpOworICAgICAgICBpZiAoKHF1YWwgPT0gRXZx
T3V0KSB8fCAocXVhbCA9PSBFdnFJbk91dCkpIHsKKyAgICAgICAgICAgIGVycm9yKHBhcmFtc1sq
aV0tPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgICAgICJMb29wIGluZGV4IGNhbm5vdCBiZSB1
c2VkIGFzIGFyZ3VtZW50IHRvIGEgZnVuY3Rpb24gb3V0IG9yIGlub3V0IHBhcmFtZXRlciIsCisg
ICAgICAgICAgICAgICAgICBwYXJhbXNbKmldLT5nZXRBc1N5bWJvbE5vZGUoKS0+Z2V0U3ltYm9s
KCkuY19zdHIoKSk7CisgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgcmV0dXJuIHZhbGlkOworfQorCitib29sIFZhbGlkYXRlTGltaXRhdGlvbnM6OnZh
bGlkYXRlT3BlcmF0aW9uKFRJbnRlcm1PcGVyYXRvciogbm9kZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVEludGVybU5vZGUqIG9wZXJhbmQpIHsKKyAgICAv
LyBDaGVjayBpZiBsb29wIGluZGV4IGlzIG1vZGlmaWVkIGluIHRoZSBsb29wIGJvZHkuCisgICAg
aWYgKCF3aXRoaW5Mb29wQm9keSgpIHx8ICFub2RlLT5tb2RpZmllc1N0YXRlKCkpCisgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sID0gb3BlcmFu
ZC0+Z2V0QXNTeW1ib2xOb2RlKCk7CisgICAgaWYgKHN5bWJvbCAmJiBpc0xvb3BJbmRleChzeW1i
b2wpKSB7CisgICAgICAgIGVycm9yKG5vZGUtPmdldExpbmUoKSwKKyAgICAgICAgICAgICAgIkxv
b3AgaW5kZXggY2Fubm90IGJlIHN0YXRpY2FsbHkgYXNzaWduZWQgdG8gd2l0aGluIHRoZSBib2R5
IG9mIHRoZSBsb29wIiwKKyAgICAgICAgICAgICAgc3ltYm9sLT5nZXRTeW1ib2woKS5jX3N0cigp
KTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9u
czo6aXNDb25zdEV4cHIoVEludGVybU5vZGUqIG5vZGUpCit7CisgICAgQVNTRVJUKG5vZGUgIT0g
TlVMTCk7CisgICAgcmV0dXJuIG5vZGUtPmdldEFzQ29uc3RhbnRVbmlvbigpICE9IE5VTEw7Cit9
CisKK2Jvb2wgVmFsaWRhdGVMaW1pdGF0aW9uczo6aXNDb25zdEluZGV4RXhwcihUSW50ZXJtTm9k
ZSogbm9kZSkKK3sKKyAgICBBU1NFUlQobm9kZSAhPSBOVUxMKTsKKworICAgIFZhbGlkYXRlQ29u
c3RJbmRleEV4cHIgdmFsaWRhdGUobUxvb3BTdGFjayk7CisgICAgbm9kZS0+dHJhdmVyc2UoJnZh
bGlkYXRlKTsKKyAgICByZXR1cm4gdmFsaWRhdGUuaXNWYWxpZCgpOworfQorCitib29sIFZhbGlk
YXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSogbm9kZSkKK3sK
KyAgICBBU1NFUlQoKG5vZGUtPmdldE9wKCkgPT0gRU9wSW5kZXhEaXJlY3QpIHx8CisgICAgICAg
ICAgIChub2RlLT5nZXRPcCgpID09IEVPcEluZGV4SW5kaXJlY3QpKTsKKworICAgIGJvb2wgdmFs
aWQgPSB0cnVlOworICAgIFRJbnRlcm1UeXBlZCogaW5kZXggPSBub2RlLT5nZXRSaWdodCgpOwor
ICAgIC8vIFRoZSBpbmRleCBleHByZXNzaW9uIG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlLgorICAg
IGlmICghaW5kZXgtPmlzU2NhbGFyKCkgfHwgKGluZGV4LT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRJ
bnQpKSB7CisgICAgICAgIGVycm9yKGluZGV4LT5nZXRMaW5lKCksCisgICAgICAgICAgICAgICJJ
bmRleCBleHByZXNzaW9uIG11c3QgaGF2ZSBpbnRlZ3JhbCB0eXBlIiwKKyAgICAgICAgICAgICAg
aW5kZXgtPmdldENvbXBsZXRlU3RyaW5nKCkuY19zdHIoKSk7CisgICAgICAgIHZhbGlkID0gZmFs
c2U7CisgICAgfQorICAgIC8vIFRoZSBpbmRleCBleHBlc3Npb24gbXVzdCBiZSBhIGNvbnN0YW50
LWluZGV4LWV4cHJlc3Npb24gdW5sZXNzCisgICAgLy8gdGhlIG9wZXJhbmQgaXMgYSB1bmlmb3Jt
IGluIGEgdmVydGV4IHNoYWRlci4KKyAgICBUSW50ZXJtVHlwZWQqIG9wZXJhbmQgPSBub2RlLT5n
ZXRMZWZ0KCk7CisgICAgYm9vbCBza2lwID0gKG1TaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFE
RVIpICYmCisgICAgICAgICAgICAgICAgKG9wZXJhbmQtPmdldFF1YWxpZmllcigpID09IEV2cVVu
aWZvcm0pOworICAgIGlmICghc2tpcCAmJiAhaXNDb25zdEluZGV4RXhwcihpbmRleCkpIHsKKyAg
ICAgICAgZXJyb3IoaW5kZXgtPmdldExpbmUoKSwgIkluZGV4IGV4cHJlc3Npb24gbXVzdCBiZSBj
b25zdGFudCIsICJbXSIpOworICAgICAgICB2YWxpZCA9IGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdmFsaWQ7Cit9CisKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9TaGFkZXJMYW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvU2hhZGVyTGFuZy5jcHAJKHJldmlzaW9uIDc2MDI1KQorKysgU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMSw4MCArMTEsNTcgQEAKIAogI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgog
Ci0jaW5jbHVkZSAiY29tcGlsZXIvSW5pdGlhbGl6ZS5oIgogI2luY2x1ZGUgImNvbXBpbGVyL0lu
aXRpYWxpemVEbGwuaCIKLSNpbmNsdWRlICJjb21waWxlci9QYXJzZUhlbHBlci5oIgogI2luY2x1
ZGUgImNvbXBpbGVyL1NoSGFuZGxlLmgiCi0jaW5jbHVkZSAiY29tcGlsZXIvU3ltYm9sVGFibGUu
aCIKIAotc3RhdGljIGJvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKAotICAgICAgICBjb25zdCBU
QnVpbHRJblN0cmluZ3MmIGJ1aWx0SW5TdHJpbmdzLAotICAgICAgICBFU2hMYW5ndWFnZSBsYW5n
dWFnZSwgRVNoU3BlYyBzcGVjLCBjb25zdCBUQnVpbHRJblJlc291cmNlJiByZXNvdXJjZXMsCi0g
ICAgICAgIFRJbmZvU2luayYgaW5mb1NpbmssIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi17
Ci0gICAgVEludGVybWVkaWF0ZSBpbnRlcm1lZGlhdGUoaW5mb1NpbmspOwotICAgIFRQYXJzZUNv
bnRleHQgcGFyc2VDb250ZXh0KHN5bWJvbFRhYmxlLCBpbnRlcm1lZGlhdGUsIGxhbmd1YWdlLCBz
cGVjLCBpbmZvU2luayk7CisvLworLy8gVGhpcyBpcyB0aGUgcGxhdGZvcm0gaW5kZXBlbmRlbnQg
aW50ZXJmYWNlIGJldHdlZW4gYW4gT0dMIGRyaXZlcgorLy8gYW5kIHRoZSBzaGFkaW5nIGxhbmd1
YWdlIGNvbXBpbGVyLgorLy8KIAotICAgIEdsb2JhbFBhcnNlQ29udGV4dCA9ICZwYXJzZUNvbnRl
eHQ7Ci0KLSAgICBzZXRJbml0aWFsU3RhdGUoKTsKLQotICAgIGFzc2VydChzeW1ib2xUYWJsZS5p
c0VtcHR5KCkpOyAgICAgICAKLSAgICAvLwotICAgIC8vIFBhcnNlIHRoZSBidWlsdC1pbnMuICBU
aGlzIHNob3VsZCBvbmx5IGhhcHBlbiBvbmNlIHBlcgotICAgIC8vIGxhbmd1YWdlIHN5bWJvbCB0
YWJsZS4KLSAgICAvLwotICAgIC8vIFB1c2ggdGhlIHN5bWJvbCB0YWJsZSB0byBnaXZlIGl0IGFu
IGluaXRpYWwgc2NvcGUuICBUaGlzCi0gICAgLy8gcHVzaCBzaG91bGQgbm90IGhhdmUgYSBjb3Jy
ZXNwb25kaW5nIHBvcCwgc28gdGhhdCBidWlsdC1pbnMKLSAgICAvLyBhcmUgcHJlc2VydmVkLCBh
bmQgdGhlIHRlc3QgZm9yIGFuIGVtcHR5IHRhYmxlIGZhaWxzLgotICAgIC8vCi0gICAgc3ltYm9s
VGFibGUucHVzaCgpOwotICAgIAotICAgIC8vSW5pdGlhbGl6ZSB0aGUgUHJlcHJvY2Vzc29yCi0g
ICAgaWYgKEluaXRQcmVwcm9jZXNzb3IoKSkKK3N0YXRpYyBpbnQgZ2V0VmFyaWFibGVNYXhMZW5n
dGgoY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIHZhckxpc3QpCit7CisgICAgVFN0cmluZzo6c2l6
ZV90eXBlIG1heExlbiA9IDA7CisgICAgZm9yIChUVmFyaWFibGVJbmZvTGlzdDo6Y29uc3RfaXRl
cmF0b3IgaSA9IHZhckxpc3QuYmVnaW4oKTsKKyAgICAgICAgIGkgIT0gdmFyTGlzdC5lbmQoKTsg
KytpKQogICAgIHsKLSAgICAgICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5h
bEVycm9yLCAgIlVuYWJsZSB0byBpbnRpYWxpemUgdGhlIFByZXByb2Nlc3NvciIpOwotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1heExlbiA9IHN0ZDo6bWF4KG1heExlbiwgaS0+bmFt
ZS5zaXplKCkpOwogICAgIH0KKyAgICAvLyBBZGQgMSB0byBpbmNsdWRlIG51bGwtdGVybWluYXRp
b24gY2hhcmFjdGVyLgorICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KG1heExlbikgKyAxOwor
fQogCi0gICAgZm9yIChUQnVpbHRJblN0cmluZ3M6OmNvbnN0X2l0ZXJhdG9yIGkgPSBidWlsdElu
U3RyaW5ncy5iZWdpbigpOyBpICE9IGJ1aWx0SW5TdHJpbmdzLmVuZCgpOyArK2kpCi0gICAgewot
ICAgICAgICBjb25zdCBjaGFyKiBidWlsdEluU2hhZGVyc1sxXTsKLSAgICAgICAgaW50IGJ1aWx0
SW5MZW5ndGhzWzFdOworc3RhdGljIHZvaWQgZ2V0VmFyaWFibGVJbmZvKFNoU2hhZGVySW5mbyB2
YXJUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFNoSGFuZGxlIGhhbmRs
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50KiBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNoRGF0YVR5cGUqIHR5cGUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogbmFtZSkKK3sKKyAgICBpZiAoIWhh
bmRsZSB8fCAhc2l6ZSB8fCAhdHlwZSB8fCAhbmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFT
U0VSVCgodmFyVHlwZSA9PSBTSF9BQ1RJVkVfQVRUUklCVVRFUykgfHwKKyAgICAgICAgICAgKHZh
clR5cGUgPT0gU0hfQUNUSVZFX1VOSUZPUk1TKSk7CiAKLSAgICAgICAgYnVpbHRJblNoYWRlcnNb
MF0gPSAoKmkpLmNfc3RyKCk7Ci0gICAgICAgIGJ1aWx0SW5MZW5ndGhzWzBdID0gKGludCkgKCpp
KS5zaXplKCk7CisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8VFNo
SGFuZGxlQmFzZSo+KGhhbmRsZSk7CisgICAgVENvbXBpbGVyKiBjb21waWxlciA9IGJhc2UtPmdl
dEFzQ29tcGlsZXIoKTsKKyAgICBpZiAoY29tcGlsZXIgPT0gMCkKKyAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIGlmIChQYVBhcnNlU3RyaW5ncyhjb25zdF9jYXN0PGNoYXIqKj4oYnVpbHRJblNo
YWRlcnMpLCBidWlsdEluTGVuZ3RocywgMSwgcGFyc2VDb250ZXh0KSAhPSAwKQotICAgICAgICB7
Ci0gICAgICAgICAgICBpbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
ICJVbmFibGUgdG8gcGFyc2UgYnVpbHQtaW5zIik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9CisgICAgY29uc3QgVFZhcmlhYmxlSW5mb0xpc3QmIHZhckxpc3Qg
PSB2YXJUeXBlID09IFNIX0FDVElWRV9BVFRSSUJVVEVTID8KKyAgICAgICAgY29tcGlsZXItPmdl
dEF0dHJpYnMoKSA6IGNvbXBpbGVyLT5nZXRVbmlmb3JtcygpOworICAgIGlmIChpbmRleCA8IDAg
fHwgaW5kZXggPj0gc3RhdGljX2Nhc3Q8aW50Pih2YXJMaXN0LnNpemUoKSkpCisgICAgICAgIHJl
dHVybjsKIAotICAgIElkZW50aWZ5QnVpbHRJbnMobGFuZ3VhZ2UsIHNwZWMsIHJlc291cmNlcywg
c3ltYm9sVGFibGUpOwotCi0gICAgRmluYWxpemVQcmVwcm9jZXNzb3IoKTsKLQotICAgIHJldHVy
biB0cnVlOworICAgIGNvbnN0IFRWYXJpYWJsZUluZm8mIHZhckluZm8gPSB2YXJMaXN0W2luZGV4
XTsKKyAgICBpZiAobGVuZ3RoKSAqbGVuZ3RoID0gdmFySW5mby5uYW1lLnNpemUoKTsKKyAgICAq
c2l6ZSA9IHZhckluZm8uc2l6ZTsKKyAgICAqdHlwZSA9IHZhckluZm8udHlwZTsKKyAgICBzdHJj
cHkobmFtZSwgdmFySW5mby5uYW1lLmNfc3RyKCkpOwogfQogCi1zdGF0aWMgYm9vbCBHZW5lcmF0
ZUJ1aWx0SW5TeW1ib2xUYWJsZSgKLSAgICAgICAgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2UsIEVTaFNw
ZWMgc3BlYywgY29uc3QgVEJ1aWx0SW5SZXNvdXJjZSYgcmVzb3VyY2VzLAotICAgICAgICBUSW5m
b1NpbmsmIGluZm9TaW5rLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQotewotICAgIFRCdWls
dElucyBidWlsdEluczsKLQotICAgIGJ1aWx0SW5zLmluaXRpYWxpemUobGFuZ3VhZ2UsIHNwZWMs
IHJlc291cmNlcyk7Ci0gICAgcmV0dXJuIEluaXRpYWxpemVTeW1ib2xUYWJsZShidWlsdElucy5n
ZXRCdWlsdEluU3RyaW5ncygpLCBsYW5ndWFnZSwgc3BlYywgcmVzb3VyY2VzLCBpbmZvU2luaywg
c3ltYm9sVGFibGUpOwotfQotCiAvLwotLy8gVGhpcyBpcyB0aGUgcGxhdGZvcm0gaW5kZXBlbmRl
bnQgaW50ZXJmYWNlIGJldHdlZW4gYW4gT0dMIGRyaXZlcgotLy8gYW5kIHRoZSBzaGFkaW5nIGxh
bmd1YWdlIGNvbXBpbGVyLgotLy8KLQotLy8KIC8vIERyaXZlciBtdXN0IGNhbGwgdGhpcyBmaXJz
dCwgb25jZSwgYmVmb3JlIGRvaW5nIGFueSBvdGhlcgogLy8gY29tcGlsZXIgb3BlcmF0aW9ucy4K
IC8vCkBAIC0xMTAsNyArODcsNyBAQAogLy8KIC8vIEluaXRpYWxpemUgYnVpbHQtaW4gcmVzb3Vy
Y2VzIHdpdGggbWluaW11bSBleHBlY3RlZCB2YWx1ZXMuCiAvLwotdm9pZCBTaEluaXRCdWlsdElu
UmVzb3VyY2UoVEJ1aWx0SW5SZXNvdXJjZSogcmVzb3VyY2VzKQordm9pZCBTaEluaXRCdWlsdElu
UmVzb3VyY2VzKFNoQnVpbHRJblJlc291cmNlcyogcmVzb3VyY2VzKQogewogICAgIC8vIENvbnN0
YW50cy4KICAgICByZXNvdXJjZXMtPk1heFZlcnRleEF0dHJpYnMgPSA4OwpAQCAtMTI5LDE4ICsx
MDYsMTkgQEAKIC8vCiAvLyBEcml2ZXIgY2FsbHMgdGhlc2UgdG8gY3JlYXRlIGFuZCBkZXN0cm95
IGNvbXBpbGVyIG9iamVjdHMuCiAvLwotU2hIYW5kbGUgU2hDb25zdHJ1Y3RDb21waWxlcihFU2hM
YW5ndWFnZSBsYW5ndWFnZSwgRVNoU3BlYyBzcGVjLCBjb25zdCBUQnVpbHRJblJlc291cmNlKiBy
ZXNvdXJjZXMpCitTaEhhbmRsZSBTaENvbnN0cnVjdENvbXBpbGVyKFNoU2hhZGVyVHlwZSB0eXBl
LCBTaFNoYWRlclNwZWMgc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U2hCdWlsdEluUmVzb3VyY2VzKiByZXNvdXJjZXMpCiB7CiAgICAgaWYgKCFJbml0VGhyZWFkKCkp
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19j
YXN0PFRTaEhhbmRsZUJhc2UqPihDb25zdHJ1Y3RDb21waWxlcihsYW5ndWFnZSwgc3BlYykpOwor
ICAgIFRTaEhhbmRsZUJhc2UqIGJhc2UgPSBzdGF0aWNfY2FzdDxUU2hIYW5kbGVCYXNlKj4oQ29u
c3RydWN0Q29tcGlsZXIodHlwZSwgc3BlYykpOwogICAgIFRDb21waWxlciogY29tcGlsZXIgPSBi
YXNlLT5nZXRBc0NvbXBpbGVyKCk7CiAgICAgaWYgKGNvbXBpbGVyID09IDApCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgLy8gR2VuZXJhdGUgYnVpbHQtaW4gc3ltYm9sIHRhYmxlLgotICAgIGlm
ICghR2VuZXJhdGVCdWlsdEluU3ltYm9sVGFibGUobGFuZ3VhZ2UsIHNwZWMsICpyZXNvdXJjZXMs
IGNvbXBpbGVyLT5nZXRJbmZvU2luaygpLCBjb21waWxlci0+Z2V0U3ltYm9sVGFibGUoKSkpIHsK
KyAgICBpZiAoIWNvbXBpbGVyLT5Jbml0KCpyZXNvdXJjZXMpKSB7CiAgICAgICAgIFNoRGVzdHJ1
Y3QoYmFzZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTE3MCw5ICsxNDgsNyBAQAog
ICAgIGNvbnN0IFNoSGFuZGxlIGhhbmRsZSwKICAgICBjb25zdCBjaGFyKiBjb25zdCBzaGFkZXJT
dHJpbmdzW10sCiAgICAgY29uc3QgaW50IG51bVN0cmluZ3MsCi0gICAgY29uc3QgRVNoT3B0aW1p
emF0aW9uTGV2ZWwgb3B0TGV2ZWwsCi0gICAgaW50IGRlYnVnT3B0aW9ucwotICAgICkKKyAgICBp
bnQgY29tcGlsZU9wdGlvbnMpCiB7CiAgICAgaWYgKCFJbml0VGhyZWFkKCkpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMTg0LDEyOCArMTYwLDk1IEBACiAgICAgVENvbXBpbGVyKiBjb21waWxlciA9
IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKICAgICBpZiAoY29tcGlsZXIgPT0gMCkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgCi0gICAgR2xvYmFsUG9vbEFsbG9jYXRvci5wdXNoKCk7Ci0gICAgVElu
Zm9TaW5rJiBpbmZvU2luayA9IGNvbXBpbGVyLT5nZXRJbmZvU2luaygpOwotICAgIGluZm9TaW5r
LmluZm8uZXJhc2UoKTsKLSAgICBpbmZvU2luay5kZWJ1Zy5lcmFzZSgpOwotICAgIGluZm9TaW5r
Lm9iai5lcmFzZSgpOwogCi0gICAgaWYgKG51bVN0cmluZ3MgPT0gMCkKLSAgICAgICAgcmV0dXJu
IDE7CisgICAgYm9vbCBzdWNjZXNzID0gY29tcGlsZXItPmNvbXBpbGUoc2hhZGVyU3RyaW5ncywg
bnVtU3RyaW5ncywgY29tcGlsZU9wdGlvbnMpOworICAgIHJldHVybiBzdWNjZXNzID8gMSA6IDA7
Cit9CiAKLSAgICBUSW50ZXJtZWRpYXRlIGludGVybWVkaWF0ZShpbmZvU2luayk7Ci0gICAgVFN5
bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9IGNvbXBpbGVyLT5nZXRTeW1ib2xUYWJsZSgpOwordm9p
ZCBTaEdldEluZm8oY29uc3QgU2hIYW5kbGUgaGFuZGxlLCBTaFNoYWRlckluZm8gcG5hbWUsIGlu
dCogcGFyYW1zKQoreworICAgIGlmICghaGFuZGxlIHx8ICFwYXJhbXMpCisgICAgICAgIHJldHVy
bjsKIAotICAgIFRQYXJzZUNvbnRleHQgcGFyc2VDb250ZXh0KHN5bWJvbFRhYmxlLCBpbnRlcm1l
ZGlhdGUsIGNvbXBpbGVyLT5nZXRMYW5ndWFnZSgpLCBjb21waWxlci0+Z2V0U3BlYygpLCBpbmZv
U2luayk7Ci0gICAgcGFyc2VDb250ZXh0LmluaXRpYWxpemVFeHRlbnNpb25CZWhhdmlvcigpOwot
ICAgIEdsb2JhbFBhcnNlQ29udGV4dCA9ICZwYXJzZUNvbnRleHQ7Ci0gCi0gICAgc2V0SW5pdGlh
bFN0YXRlKCk7CisgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhhbmRs
ZUJhc2UqPihoYW5kbGUpOworICAgIFRDb21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0Nv
bXBpbGVyKCk7CisgICAgaWYgKCFjb21waWxlcikgcmV0dXJuOwogCi0gICAgSW5pdFByZXByb2Nl
c3NvcigpOwotICAgIC8vCi0gICAgLy8gUGFyc2UgdGhlIGFwcGxpY2F0aW9uJ3Mgc2hhZGVycy4g
IEFsbCB0aGUgZm9sbG93aW5nIHN5bWJvbCB0YWJsZQotICAgIC8vIHdvcmsgd2lsbCBiZSB0aHJv
dy1hd2F5LCBzbyBwdXNoIGEgbmV3IGFsbG9jYXRpb24gc2NvcGUgdGhhdCBjYW4KLSAgICAvLyBi
ZSB0aHJvd24gYXdheSwgdGhlbiBwdXNoIGEgc2NvcGUgZm9yIHRoZSBjdXJyZW50IHNoYWRlcidz
IGdsb2JhbHMuCi0gICAgLy8KLSAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOworICAgIHN3aXRjaChw
bmFtZSkKKyAgICB7CisgICAgY2FzZSBTSF9JTkZPX0xPR19MRU5HVEg6CisgICAgICAgICpwYXJh
bXMgPSBjb21waWxlci0+Z2V0SW5mb1NpbmsoKS5pbmZvLnNpemUoKSArIDE7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU0hfT0JKRUNUX0NPREVfTEVOR1RIOgorICAgICAgICAqcGFyYW1zID0g
Y29tcGlsZXItPmdldEluZm9TaW5rKCkub2JqLnNpemUoKSArIDE7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU0hfQUNUSVZFX1VOSUZPUk1TOgorICAgICAgICAqcGFyYW1zID0gY29tcGlsZXIt
PmdldFVuaWZvcm1zKCkuc2l6ZSgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNIX0FDVElW
RV9VTklGT1JNX01BWF9MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSBnZXRWYXJpYWJsZU1heExl
bmd0aChjb21waWxlci0+Z2V0VW5pZm9ybXMoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U0hfQUNUSVZFX0FUVFJJQlVURVM6CisgICAgICAgICpwYXJhbXMgPSBjb21waWxlci0+Z2V0QXR0
cmlicygpLnNpemUoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTSF9BQ1RJVkVfQVRUUklC
VVRFX01BWF9MRU5HVEg6CisgICAgICAgICpwYXJhbXMgPSBnZXRWYXJpYWJsZU1heExlbmd0aChj
b21waWxlci0+Z2V0QXR0cmlicygpKTsKKyAgICAgICAgYnJlYWs7CiAKLSAgICBzeW1ib2xUYWJs
ZS5wdXNoKCk7Ci0gICAgaWYgKCFzeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkpCi0gICAgICAg
IHBhcnNlQ29udGV4dC5pbmZvU2luay5pbmZvLm1lc3NhZ2UoRVByZWZpeEludGVybmFsRXJyb3Is
ICJXcm9uZyBzeW1ib2wgdGFibGUgbGV2ZWwiKTsKLQotICAgIGludCByZXQgPSBQYVBhcnNlU3Ry
aW5ncyhjb25zdF9jYXN0PGNoYXIqKj4oc2hhZGVyU3RyaW5ncyksIDAsIG51bVN0cmluZ3MsIHBh
cnNlQ29udGV4dCk7Ci0gICAgaWYgKHJldCkKLSAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwotCi0g
ICAgaWYgKHN1Y2Nlc3MgJiYgcGFyc2VDb250ZXh0LnRyZWVSb290KSB7Ci0gICAgICAgIGlmIChv
cHRMZXZlbCA9PSBFU2hPcHROb0dlbmVyYXRpb24pCi0gICAgICAgICAgICBwYXJzZUNvbnRleHQu
aW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhOb25lLCAiTm8gZXJyb3JzLiAgTm8gY29kZSBn
ZW5lcmF0aW9uIHdhcyByZXF1ZXN0ZWQuIik7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
c3VjY2VzcyA9IGludGVybWVkaWF0ZS5wb3N0UHJvY2VzcyhwYXJzZUNvbnRleHQudHJlZVJvb3Qs
IHBhcnNlQ29udGV4dC5sYW5ndWFnZSk7Ci0KLSAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7Ci0K
LSAgICAgICAgICAgICAgICBpZiAoZGVidWdPcHRpb25zICYgRURlYnVnT3BJbnRlcm1lZGlhdGUp
Ci0gICAgICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZS5vdXRwdXRUcmVlKHBhcnNlQ29udGV4
dC50cmVlUm9vdCk7Ci0KLSAgICAgICAgICAgICAgICAvLwotICAgICAgICAgICAgICAgIC8vIENh
bGwgdGhlIG1hY2hpbmUgZGVwZW5kZW50IGNvbXBpbGVyCi0gICAgICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgICAgICBpZiAoIWNvbXBpbGVyLT5jb21waWxlKHBhcnNlQ29udGV4dC50cmVlUm9v
dCkpCi0gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3MgPSBmYWxzZTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXN1Y2Nlc3MpIHsKLSAgICAgICAgcGFyc2VDb250
ZXh0LmluZm9TaW5rLmluZm8ucHJlZml4KEVQcmVmaXhFcnJvcik7Ci0gICAgICAgIHBhcnNlQ29u
dGV4dC5pbmZvU2luay5pbmZvIDw8IHBhcnNlQ29udGV4dC5udW1FcnJvcnMgPDwgIiBjb21waWxh
dGlvbiBlcnJvcnMuICBObyBjb2RlIGdlbmVyYXRlZC5cblxuIjsKLSAgICAgICAgc3VjY2VzcyA9
IGZhbHNlOwotICAgICAgICBpZiAoZGVidWdPcHRpb25zICYgRURlYnVnT3BJbnRlcm1lZGlhdGUp
Ci0gICAgICAgICAgICBpbnRlcm1lZGlhdGUub3V0cHV0VHJlZShwYXJzZUNvbnRleHQudHJlZVJv
b3QpOwotICAgIH0gZWxzZSBpZiAoIXBhcnNlQ29udGV4dC50cmVlUm9vdCkgewotICAgICAgICBw
YXJzZUNvbnRleHQuZXJyb3IoMSwgIlVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUuIiwgIiIsICIiKTsK
LSAgICAgICAgcGFyc2VDb250ZXh0LmluZm9TaW5rLmluZm8gPDwgcGFyc2VDb250ZXh0Lm51bUVy
cm9ycyA8PCAiIGNvbXBpbGF0aW9uIGVycm9ycy4gIE5vIGNvZGUgZ2VuZXJhdGVkLlxuXG4iOwot
ICAgICAgICBzdWNjZXNzID0gZmFsc2U7Ci0gICAgICAgIGlmIChkZWJ1Z09wdGlvbnMgJiBFRGVi
dWdPcEludGVybWVkaWF0ZSkKLSAgICAgICAgICAgIGludGVybWVkaWF0ZS5vdXRwdXRUcmVlKHBh
cnNlQ29udGV4dC50cmVlUm9vdCk7CisgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKICAgICB9
Ci0KLSAgICBpbnRlcm1lZGlhdGUucmVtb3ZlKHBhcnNlQ29udGV4dC50cmVlUm9vdCk7Ci0KLSAg
ICAvLwotICAgIC8vIEVuc3VyZSBzeW1ib2wgdGFibGUgaXMgcmV0dXJuZWQgdG8gdGhlIGJ1aWx0
LWluIGxldmVsLAotICAgIC8vIHRocm93aW5nIGF3YXkgYWxsIGJ1dCB0aGUgYnVpbHQtaW5zLgot
ICAgIC8vCi0gICAgd2hpbGUgKCFzeW1ib2xUYWJsZS5hdEJ1aWx0SW5MZXZlbCgpKQotICAgICAg
ICBzeW1ib2xUYWJsZS5wb3AoKTsKLQotICAgIEZpbmFsaXplUHJlcHJvY2Vzc29yKCk7Ci0gICAg
Ly8KLSAgICAvLyBUaHJvdyBhd2F5IGFsbCB0aGUgdGVtcG9yYXJ5IG1lbW9yeSB1c2VkIGJ5IHRo
ZSBjb21waWxhdGlvbiBwcm9jZXNzLgotICAgIC8vCi0gICAgR2xvYmFsUG9vbEFsbG9jYXRvci5w
b3AoKTsKLQotICAgIHJldHVybiBzdWNjZXNzID8gMSA6IDA7CiB9CiAKIC8vCiAvLyBSZXR1cm4g
YW55IGNvbXBpbGVyIGxvZyBvZiBtZXNzYWdlcyBmb3IgdGhlIGFwcGxpY2F0aW9uLgogLy8KLWNv
bnN0IGNoYXIqIFNoR2V0SW5mb0xvZyhjb25zdCBTaEhhbmRsZSBoYW5kbGUpCit2b2lkIFNoR2V0
SW5mb0xvZyhjb25zdCBTaEhhbmRsZSBoYW5kbGUsIGNoYXIqIGluZm9Mb2cpCiB7Ci0gICAgaWYg
KCFJbml0VGhyZWFkKCkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghaGFuZGxlIHx8ICFp
bmZvTG9nKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaGFuZGxlID09IDApCi0gICAgICAg
IHJldHVybiAwOwotCiAgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhh
bmRsZUJhc2UqPihoYW5kbGUpOwotICAgIFRJbmZvU2luayogaW5mb1NpbmsgPSAwOworICAgIFRD
b21waWxlciogY29tcGlsZXIgPSBiYXNlLT5nZXRBc0NvbXBpbGVyKCk7CisgICAgaWYgKCFjb21w
aWxlcikgcmV0dXJuOwogCi0gICAgaWYgKGJhc2UtPmdldEFzQ29tcGlsZXIoKSkKLSAgICAgICAg
aW5mb1NpbmsgPSAmKGJhc2UtPmdldEFzQ29tcGlsZXIoKS0+Z2V0SW5mb1NpbmsoKSk7Ci0KLSAg
ICBpbmZvU2luay0+aW5mbyA8PCBpbmZvU2luay0+ZGVidWcuY19zdHIoKTsKLSAgICByZXR1cm4g
aW5mb1NpbmstPmluZm8uY19zdHIoKTsKKyAgICBUSW5mb1NpbmsmIGluZm9TaW5rID0gY29tcGls
ZXItPmdldEluZm9TaW5rKCk7CisgICAgc3RyY3B5KGluZm9Mb2csIGluZm9TaW5rLmluZm8uY19z
dHIoKSk7CiB9CiAKIC8vCiAvLyBSZXR1cm4gYW55IG9iamVjdCBjb2RlLgogLy8KLWNvbnN0IGNo
YXIqIFNoR2V0T2JqZWN0Q29kZShjb25zdCBTaEhhbmRsZSBoYW5kbGUpCit2b2lkIFNoR2V0T2Jq
ZWN0Q29kZShjb25zdCBTaEhhbmRsZSBoYW5kbGUsIGNoYXIqIG9iakNvZGUpCiB7Ci0gICAgaWYg
KCFJbml0VGhyZWFkKCkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghaGFuZGxlIHx8ICFv
YmpDb2RlKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoaGFuZGxlID09IDApCi0gICAgICAg
IHJldHVybiAwOwotCiAgICAgVFNoSGFuZGxlQmFzZSogYmFzZSA9IHN0YXRpY19jYXN0PFRTaEhh
bmRsZUJhc2UqPihoYW5kbGUpOwotICAgIFRJbmZvU2luayogaW5mb1Npbms7CisgICAgVENvbXBp
bGVyKiBjb21waWxlciA9IGJhc2UtPmdldEFzQ29tcGlsZXIoKTsKKyAgICBpZiAoIWNvbXBpbGVy
KSByZXR1cm47CiAKLSAgICBpZiAoYmFzZS0+Z2V0QXNDb21waWxlcigpKQotICAgICAgICBpbmZv
U2luayA9ICYoYmFzZS0+Z2V0QXNDb21waWxlcigpLT5nZXRJbmZvU2luaygpKTsKKyAgICBUSW5m
b1NpbmsmIGluZm9TaW5rID0gY29tcGlsZXItPmdldEluZm9TaW5rKCk7CisgICAgc3RyY3B5KG9i
akNvZGUsIGluZm9TaW5rLm9iai5jX3N0cigpKTsKK30KIAotICAgIHJldHVybiBpbmZvU2luay0+
b2JqLmNfc3RyKCk7Cit2b2lkIFNoR2V0QWN0aXZlQXR0cmliKGNvbnN0IFNoSGFuZGxlIGhhbmRs
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LAorICAgICAgICAgICAgICAgICAg
ICAgICBpbnQqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50KiBzaXplLAorICAg
ICAgICAgICAgICAgICAgICAgICBTaERhdGFUeXBlKiB0eXBlLAorICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyKiBuYW1lKQoreworICAgIGdldFZhcmlhYmxlSW5mbyhTSF9BQ1RJVkVfQVRUUklC
VVRFUywKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlLCBpbmRleCwgbGVuZ3RoLCBzaXplLCB0
eXBlLCBuYW1lKTsKIH0KKwordm9pZCBTaEdldEFjdGl2ZVVuaWZvcm0oY29uc3QgU2hIYW5kbGUg
aGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4LAorICAgICAgICAgICAg
ICAgICAgICAgICAgaW50KiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIHNp
emUsCisgICAgICAgICAgICAgICAgICAgICAgICBTaERhdGFUeXBlKiB0eXBlLAorICAgICAgICAg
ICAgICAgICAgICAgICAgY2hhciogbmFtZSkKK3sKKyAgICBnZXRWYXJpYWJsZUluZm8oU0hfQUNU
SVZFX1VOSUZPUk1TLAorICAgICAgICAgICAgICAgICAgICBoYW5kbGUsIGluZGV4LCBsZW5ndGgs
IHNpemUsIHR5cGUsIG5hbWUpOworfQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL1R5cGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL1R5cGVzLmgJKHJldmlzaW9uIDc2MDI1KQorKysgU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL1R5cGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTg1LDEyICs4
NSwxMiBAQAogICAgIFRUeXBlKCkge30KICAgICBUVHlwZShUQmFzaWNUeXBlIHQsIFRQcmVjaXNp
b24gcCwgVFF1YWxpZmllciBxID0gRXZxVGVtcG9yYXJ5LCBpbnQgcyA9IDEsIGJvb2wgbSA9IGZh
bHNlLCBib29sIGEgPSBmYWxzZSkgOgogICAgICAgICAgICAgdHlwZSh0KSwgcHJlY2lzaW9uKHAp
LCBxdWFsaWZpZXIocSksIHNpemUocyksIG1hdHJpeChtKSwgYXJyYXkoYSksIGFycmF5U2l6ZSgw
KSwKLSAgICAgICAgICAgIHN0cnVjdHVyZSgwKSwgc3RydWN0dXJlU2l6ZSgwKSwgbWF4QXJyYXlT
aXplKDApLCBhcnJheUluZm9ybWF0aW9uVHlwZSgwKSwgZmllbGROYW1lKDApLCBtYW5nbGVkKDAp
LCB0eXBlTmFtZSgwKQorICAgICAgICAgICAgbWF4QXJyYXlTaXplKDApLCBhcnJheUluZm9ybWF0
aW9uVHlwZSgwKSwgc3RydWN0dXJlKDApLCBzdHJ1Y3R1cmVTaXplKDApLCBmaWVsZE5hbWUoMCks
IG1hbmdsZWQoMCksIHR5cGVOYW1lKDApCiAgICAgewogICAgIH0KICAgICBleHBsaWNpdCBUVHlw
ZShjb25zdCBUUHVibGljVHlwZSAmcCkgOgogICAgICAgICAgICAgdHlwZShwLnR5cGUpLCBwcmVj
aXNpb24ocC5wcmVjaXNpb24pLCBxdWFsaWZpZXIocC5xdWFsaWZpZXIpLCBzaXplKHAuc2l6ZSks
IG1hdHJpeChwLm1hdHJpeCksIGFycmF5KHAuYXJyYXkpLCBhcnJheVNpemUocC5hcnJheVNpemUp
LAotICAgICAgICAgICAgc3RydWN0dXJlKDApLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhBcnJheVNp
emUoMCksIGFycmF5SW5mb3JtYXRpb25UeXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCks
IHR5cGVOYW1lKDApCisgICAgICAgICAgICBtYXhBcnJheVNpemUoMCksIGFycmF5SW5mb3JtYXRp
b25UeXBlKDApLCBzdHJ1Y3R1cmUoMCksIHN0cnVjdHVyZVNpemUoMCksIGZpZWxkTmFtZSgwKSwg
bWFuZ2xlZCgwKSwgdHlwZU5hbWUoMCkKICAgICB7CiAgICAgICAgIGlmIChwLnVzZXJEZWYpIHsK
ICAgICAgICAgICAgIHN0cnVjdHVyZSA9IHAudXNlckRlZi0+Z2V0U3RydWN0KCk7CkBAIC05OSw3
ICs5OSw3IEBACiAgICAgfQogICAgIFRUeXBlKFRUeXBlTGlzdCogdXNlckRlZiwgY29uc3QgVFN0
cmluZyYgbiwgVFByZWNpc2lvbiBwID0gRWJwVW5kZWZpbmVkKSA6CiAgICAgICAgICAgICB0eXBl
KEVidFN0cnVjdCksIHByZWNpc2lvbihwKSwgcXVhbGlmaWVyKEV2cVRlbXBvcmFyeSksIHNpemUo
MSksIG1hdHJpeChmYWxzZSksIGFycmF5KGZhbHNlKSwgYXJyYXlTaXplKDApLAotICAgICAgICAg
ICAgc3RydWN0dXJlKHVzZXJEZWYpLCBzdHJ1Y3R1cmVTaXplKDApLCBtYXhBcnJheVNpemUoMCks
IGFycmF5SW5mb3JtYXRpb25UeXBlKDApLCBmaWVsZE5hbWUoMCksIG1hbmdsZWQoMCkKKyAgICAg
ICAgICAgIG1heEFycmF5U2l6ZSgwKSwgYXJyYXlJbmZvcm1hdGlvblR5cGUoMCksIHN0cnVjdHVy
ZSh1c2VyRGVmKSwgc3RydWN0dXJlU2l6ZSgwKSwgZmllbGROYW1lKDApLCBtYW5nbGVkKDApCiAg
ICAgewogICAgICAgICB0eXBlTmFtZSA9IE5ld1Bvb2xUU3RyaW5nKG4uY19zdHIoKSk7CiAgICAg
fQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvbXBpbGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvQ29t
cGlsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL0NvbXBpbGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODkgQEAKKy8vCisv
LyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQg
YnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VO
U0UgZmlsZS4KKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9Jbml0aWFsaXplLmgiCisjaW5jbHVk
ZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIKKyNpbmNsdWRlICJjb21waWxlci9TaEhhbmRsZS5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaCIKKworbmFtZXNwYWNl
IHsKK2Jvb2wgSW5pdGlhbGl6ZVN5bWJvbFRhYmxlKAorICAgIGNvbnN0IFRCdWlsdEluU3RyaW5n
cyYgYnVpbHRJblN0cmluZ3MsCisgICAgU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBz
cGVjLCBjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcywKKyAgICBUSW5mb1Npbmsm
IGluZm9TaW5rLCBUU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQoreworICAgIFRJbnRlcm1lZGlh
dGUgaW50ZXJtZWRpYXRlKGluZm9TaW5rKTsKKyAgICBURXh0ZW5zaW9uQmVoYXZpb3IgZXh0QmVo
YXZpb3I7CisgICAgVFBhcnNlQ29udGV4dCBwYXJzZUNvbnRleHQoc3ltYm9sVGFibGUsIGV4dEJl
aGF2aW9yLCBpbnRlcm1lZGlhdGUsIHR5cGUsIHNwZWMsIGluZm9TaW5rKTsKKworICAgIEdsb2Jh
bFBhcnNlQ29udGV4dCA9ICZwYXJzZUNvbnRleHQ7CisKKyAgICBhc3NlcnQoc3ltYm9sVGFibGUu
aXNFbXB0eSgpKTsgICAgICAgCisgICAgLy8KKyAgICAvLyBQYXJzZSB0aGUgYnVpbHQtaW5zLiAg
VGhpcyBzaG91bGQgb25seSBoYXBwZW4gb25jZSBwZXIKKyAgICAvLyBsYW5ndWFnZSBzeW1ib2wg
dGFibGUuCisgICAgLy8KKyAgICAvLyBQdXNoIHRoZSBzeW1ib2wgdGFibGUgdG8gZ2l2ZSBpdCBh
biBpbml0aWFsIHNjb3BlLiAgVGhpcworICAgIC8vIHB1c2ggc2hvdWxkIG5vdCBoYXZlIGEgY29y
cmVzcG9uZGluZyBwb3AsIHNvIHRoYXQgYnVpbHQtaW5zCisgICAgLy8gYXJlIHByZXNlcnZlZCwg
YW5kIHRoZSB0ZXN0IGZvciBhbiBlbXB0eSB0YWJsZSBmYWlscy4KKyAgICAvLworICAgIHN5bWJv
bFRhYmxlLnB1c2goKTsKKworICAgIGZvciAoVEJ1aWx0SW5TdHJpbmdzOjpjb25zdF9pdGVyYXRv
ciBpID0gYnVpbHRJblN0cmluZ3MuYmVnaW4oKTsgaSAhPSBidWlsdEluU3RyaW5ncy5lbmQoKTsg
KytpKQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogYnVpbHRJblNoYWRlcnMgPSBpLT5jX3N0
cigpOworICAgICAgICBpbnQgYnVpbHRJbkxlbmd0aHMgPSBzdGF0aWNfY2FzdDxpbnQ+KGktPnNp
emUoKSk7CisgICAgICAgIGlmIChidWlsdEluTGVuZ3RocyA8PSAwKQorICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGlmIChQYVBhcnNlU3RyaW5ncygxLCAmYnVpbHRJblNoYWRlcnMsICZi
dWlsdEluTGVuZ3RocywgJnBhcnNlQ29udGV4dCkgIT0gMCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaW5mb1NpbmsuaW5mby5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiVW5hYmxlIHRv
IHBhcnNlIGJ1aWx0LWlucyIpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgSWRlbnRpZnlCdWlsdElucyh0eXBlLCBzcGVjLCByZXNvdXJjZXMsIHN5
bWJvbFRhYmxlKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitjbGFzcyBUU2NvcGVkUG9vbEFs
bG9jYXRvciB7CitwdWJsaWM6CisgICAgVFNjb3BlZFBvb2xBbGxvY2F0b3IoVFBvb2xBbGxvY2F0
b3IqIGFsbG9jYXRvciwgYm9vbCBwdXNoUG9wKQorICAgICAgICA6IG1BbGxvY2F0b3IoYWxsb2Nh
dG9yKSwgbVB1c2hQb3BBbGxvY2F0b3IocHVzaFBvcCkgeworICAgICAgICBpZiAobVB1c2hQb3BB
bGxvY2F0b3IpIG1BbGxvY2F0b3ItPnB1c2goKTsKKyAgICAgICAgU2V0R2xvYmFsUG9vbEFsbG9j
YXRvcihtQWxsb2NhdG9yKTsKKyAgICB9CisgICAgflRTY29wZWRQb29sQWxsb2NhdG9yKCkgewor
ICAgICAgICBTZXRHbG9iYWxQb29sQWxsb2NhdG9yKE5VTEwpOworICAgICAgICBpZiAobVB1c2hQ
b3BBbGxvY2F0b3IpIG1BbGxvY2F0b3ItPnBvcCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBU
UG9vbEFsbG9jYXRvciogbUFsbG9jYXRvcjsKKyAgICBib29sIG1QdXNoUG9wQWxsb2NhdG9yOwor
fTsKK30gIC8vIG5hbWVzcGFjZQorCitUU2hIYW5kbGVCYXNlOjpUU2hIYW5kbGVCYXNlKCkgewor
ICAgIGFsbG9jYXRvci5wdXNoKCk7CisgICAgU2V0R2xvYmFsUG9vbEFsbG9jYXRvcigmYWxsb2Nh
dG9yKTsKK30KKworVFNoSGFuZGxlQmFzZTo6flRTaEhhbmRsZUJhc2UoKSB7CisgICAgU2V0R2xv
YmFsUG9vbEFsbG9jYXRvcihOVUxMKTsKKyAgICBhbGxvY2F0b3IucG9wQWxsKCk7Cit9CisKK1RD
b21waWxlcjo6VENvbXBpbGVyKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYykK
KyAgICA6IHNoYWRlclR5cGUodHlwZSksCisgICAgICBzaGFkZXJTcGVjKHNwZWMpIAoreworfQor
CitUQ29tcGlsZXI6On5UQ29tcGlsZXIoKQoreworfQorCitib29sIFRDb21waWxlcjo6SW5pdChj
b25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJlc291cmNlcykKK3sKKyAgICBUU2NvcGVkUG9vbEFs
bG9jYXRvciBzY29wZWRBbGxvYygmYWxsb2NhdG9yLCBmYWxzZSk7CisKKyAgICAvLyBHZW5lcmF0
ZSBidWlsdC1pbiBzeW1ib2wgdGFibGUuCisgICAgaWYgKCFJbml0QnVpbHRJblN5bWJvbFRhYmxl
KHJlc291cmNlcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBJbml0RXh0ZW5zaW9uQmVo
YXZpb3IocmVzb3VyY2VzLCBleHRlbnNpb25CZWhhdmlvcik7CisKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBUQ29tcGlsZXI6OmNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3Ry
aW5nc1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IG51bVN0cmluZ3MsCisg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29tcGlsZU9wdGlvbnMpCit7CisgICAgVFNjb3Bl
ZFBvb2xBbGxvY2F0b3Igc2NvcGVkQWxsb2MoJmFsbG9jYXRvciwgdHJ1ZSk7CisgICAgY2xlYXJS
ZXN1bHRzKCk7CisKKyAgICBpZiAobnVtU3RyaW5ncyA9PSAwKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIC8vIElmIGNvbXBpbGluZyBmb3IgV2ViR0wsIHZhbGlkYXRlIGxvb3AgYW5kIGlu
ZGV4aW5nIGFzIHdlbGwuCisgICAgaWYgKHNoYWRlclNwZWMgPT0gU0hfV0VCR0xfU1BFQykKKyAg
ICAgICAgY29tcGlsZU9wdGlvbnMgfD0gU0hfVkFMSURBVEVfTE9PUF9JTkRFWElORzsKKworICAg
IFRJbnRlcm1lZGlhdGUgaW50ZXJtZWRpYXRlKGluZm9TaW5rKTsKKyAgICBUUGFyc2VDb250ZXh0
IHBhcnNlQ29udGV4dChzeW1ib2xUYWJsZSwgZXh0ZW5zaW9uQmVoYXZpb3IsIGludGVybWVkaWF0
ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJUeXBlLCBzaGFkZXJTcGVj
LCBpbmZvU2luayk7CisgICAgR2xvYmFsUGFyc2VDb250ZXh0ID0gJnBhcnNlQ29udGV4dDsKKwor
ICAgIC8vIFdlIHByZXNlcnZlIHN5bWJvbHMgYXQgdGhlIGJ1aWx0LWluIGxldmVsIGZyb20gY29t
cGlsZS10by1jb21waWxlLgorICAgIC8vIFN0YXJ0IHB1c2hpbmcgdGhlIHVzZXItZGVmaW5lZCBz
eW1ib2xzIGF0IGdsb2JhbCBsZXZlbC4KKyAgICBzeW1ib2xUYWJsZS5wdXNoKCk7CisgICAgaWYg
KCFzeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkpCisgICAgICAgIGluZm9TaW5rLmluZm8ubWVz
c2FnZShFUHJlZml4SW50ZXJuYWxFcnJvciwgIldyb25nIHN5bWJvbCB0YWJsZSBsZXZlbCIpOwor
CisgICAgLy8gUGFyc2Ugc2hhZGVyLgorICAgIGJvb2wgc3VjY2VzcyA9CisgICAgICAgIChQYVBh
cnNlU3RyaW5ncyhudW1TdHJpbmdzLCBzaGFkZXJTdHJpbmdzLCBOVUxMLCAmcGFyc2VDb250ZXh0
KSA9PSAwKSAmJgorICAgICAgICAocGFyc2VDb250ZXh0LnRyZWVSb290ICE9IE5VTEwpOworICAg
IGlmIChzdWNjZXNzKSB7CisgICAgICAgIFRJbnRlcm1Ob2RlKiByb290ID0gcGFyc2VDb250ZXh0
LnRyZWVSb290OworICAgICAgICBzdWNjZXNzID0gaW50ZXJtZWRpYXRlLnBvc3RQcm9jZXNzKHJv
b3QpOworCisgICAgICAgIGlmIChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX1ZBTElE
QVRFX0xPT1BfSU5ERVhJTkcpKQorICAgICAgICAgICAgc3VjY2VzcyA9IHZhbGlkYXRlTGltaXRh
dGlvbnMocm9vdCk7CisKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYg
U0hfSU5URVJNRURJQVRFX1RSRUUpKQorICAgICAgICAgICAgaW50ZXJtZWRpYXRlLm91dHB1dFRy
ZWUocm9vdCk7CisKKyAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgKGNvbXBpbGVPcHRpb25zICYgU0hf
T0JKRUNUX0NPREUpKQorICAgICAgICAgICAgdHJhbnNsYXRlKHJvb3QpOworCisgICAgICAgIGlm
IChzdWNjZXNzICYmIChjb21waWxlT3B0aW9ucyAmIFNIX0FUVFJJQlVURVNfVU5JRk9STVMpKQor
ICAgICAgICAgICAgY29sbGVjdEF0dHJpYnNVbmlmb3Jtcyhyb290KTsKKyAgICB9CisKKyAgICAv
LyBDbGVhbnVwIG1lbW9yeS4KKyAgICBpbnRlcm1lZGlhdGUucmVtb3ZlKHBhcnNlQ29udGV4dC50
cmVlUm9vdCk7CisgICAgLy8gRW5zdXJlIHN5bWJvbCB0YWJsZSBpcyByZXR1cm5lZCB0byB0aGUg
YnVpbHQtaW4gbGV2ZWwsCisgICAgLy8gdGhyb3dpbmcgYXdheSBhbGwgYnV0IHRoZSBidWlsdC1p
bnMuCisgICAgd2hpbGUgKCFzeW1ib2xUYWJsZS5hdEJ1aWx0SW5MZXZlbCgpKQorICAgICAgICBz
eW1ib2xUYWJsZS5wb3AoKTsKKworICAgIHJldHVybiBzdWNjZXNzOworfQorCitib29sIFRDb21w
aWxlcjo6SW5pdEJ1aWx0SW5TeW1ib2xUYWJsZShjb25zdCBTaEJ1aWx0SW5SZXNvdXJjZXMmIHJl
c291cmNlcykKK3sKKyAgICBUQnVpbHRJbnMgYnVpbHRJbnM7CisKKyAgICBidWlsdElucy5pbml0
aWFsaXplKHNoYWRlclR5cGUsIHNoYWRlclNwZWMsIHJlc291cmNlcyk7CisgICAgcmV0dXJuIElu
aXRpYWxpemVTeW1ib2xUYWJsZShidWlsdElucy5nZXRCdWlsdEluU3RyaW5ncygpLAorICAgICAg
ICBzaGFkZXJUeXBlLCBzaGFkZXJTcGVjLCByZXNvdXJjZXMsIGluZm9TaW5rLCBzeW1ib2xUYWJs
ZSk7Cit9CisKK3ZvaWQgVENvbXBpbGVyOjpjbGVhclJlc3VsdHMoKQoreworICAgIGluZm9TaW5r
LmluZm8uZXJhc2UoKTsKKyAgICBpbmZvU2luay5vYmouZXJhc2UoKTsKKyAgICBpbmZvU2luay5k
ZWJ1Zy5lcmFzZSgpOworCisgICAgYXR0cmlicy5jbGVhcigpOworICAgIHVuaWZvcm1zLmNsZWFy
KCk7Cit9CisKK2Jvb2wgVENvbXBpbGVyOjp2YWxpZGF0ZUxpbWl0YXRpb25zKFRJbnRlcm1Ob2Rl
KiByb290KSB7CisgICAgVmFsaWRhdGVMaW1pdGF0aW9ucyB2YWxpZGF0ZShzaGFkZXJUeXBlLCBp
bmZvU2luay5pbmZvKTsKKyAgICByb290LT50cmF2ZXJzZSgmdmFsaWRhdGUpOworICAgIHJldHVy
biB2YWxpZGF0ZS5udW1FcnJvcnMoKSA9PSAwOworfQorCit2b2lkIFRDb21waWxlcjo6Y29sbGVj
dEF0dHJpYnNVbmlmb3JtcyhUSW50ZXJtTm9kZSogcm9vdCkKK3sKKyAgICBDb2xsZWN0QXR0cmli
c1VuaWZvcm1zIGNvbGxlY3QoYXR0cmlicywgdW5pZm9ybXMpOworICAgIHJvb3QtPnRyYXZlcnNl
KCZjb2xsZWN0KTsKK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9JbnRlcm1UcmF2ZXJzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL0ludGVybVRyYXZlcnNlLmNwcAkocmV2aXNpb24gNzYwMjUpCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW50ZXJtVHJhdmVyc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjksOSArMjI5LDkgQEAKIAogCQlpZihpdC0+cmlnaHRUb0xlZnQp
CiAJCXsKLQkJCWlmKHRlcm1pbmFsKQorCQkJaWYoZXhwcikKIAkJCXsKLQkJCQl0ZXJtaW5hbC0+
dHJhdmVyc2UoaXQpOworCQkJCWV4cHItPnRyYXZlcnNlKGl0KTsKIAkJCX0KIAogCQkJaWYoYm9k
eSkKQEAgLTIzOSwxNiArMjM5LDE2IEBACiAJCQkJYm9keS0+dHJhdmVyc2UoaXQpOwogCQkJfQog
Ci0JCQlpZih0ZXN0KQorCQkJaWYoY29uZCkKIAkJCXsKLQkJCQl0ZXN0LT50cmF2ZXJzZShpdCk7
CisJCQkJY29uZC0+dHJhdmVyc2UoaXQpOwogCQkJfQogCQl9CiAJCWVsc2UKIAkJewotCQkJaWYo
dGVzdCkKKwkJCWlmKGNvbmQpCiAJCQl7Ci0JCQkJdGVzdC0+dHJhdmVyc2UoaXQpOworCQkJCWNv
bmQtPnRyYXZlcnNlKGl0KTsKIAkJCX0KIAogCQkJaWYoYm9keSkKQEAgLTI1Niw5ICsyNTYsOSBA
QAogCQkJCWJvZHktPnRyYXZlcnNlKGl0KTsKIAkJCX0KIAotCQkJaWYodGVybWluYWwpCisJCQlp
ZihleHByKQogCQkJewotCQkJCXRlcm1pbmFsLT50cmF2ZXJzZShpdCk7CisJCQkJZXhwci0+dHJh
dmVyc2UoaXQpOwogCQkJfQogCQl9CiAKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JITFNMLmNwcAkocmV2aXNpb24gNzYw
MjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckhM
U0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04LDE3ICs4LDE1IEBACiAKICNpbmNsdWRlICJjb21w
aWxlci9PdXRwdXRITFNMLmgiCiAKLVRyYW5zbGF0b3JITFNMOjpUcmFuc2xhdG9ySExTTChFU2hM
YW5ndWFnZSBsYW5nLCBFU2hTcGVjIHNwZWMpCi0gICAgOiBUQ29tcGlsZXIobGFuZywgc3BlYykK
K1RyYW5zbGF0b3JITFNMOjpUcmFuc2xhdG9ySExTTChTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFk
ZXJTcGVjIHNwZWMpCisgICAgOiBUQ29tcGlsZXIodHlwZSwgc3BlYykKIHsKIH0KIAotYm9vbCBU
cmFuc2xhdG9ySExTTDo6Y29tcGlsZShUSW50ZXJtTm9kZSAqcm9vdCkKK3ZvaWQgVHJhbnNsYXRv
ckhMU0w6OnRyYW5zbGF0ZShUSW50ZXJtTm9kZSAqcm9vdCkKIHsKICAgICBUUGFyc2VDb250ZXh0
JiBwYXJzZUNvbnRleHQgPSAqR2V0R2xvYmFsUGFyc2VDb250ZXh0KCk7CiAgICAgc2g6Ok91dHB1
dEhMU0wgb3V0cHV0SExTTChwYXJzZUNvbnRleHQpOwogCiAgICAgb3V0cHV0SExTTC5vdXRwdXQo
KTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci91dGlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdXRpbC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0
aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgPHN0
ZGxpYi5oPgorCisjaW5jbHVkZSAidXRpbC5oIgorCisjaWZkZWYgX01TQ19WRVIKKyAgICAjaW5j
bHVkZSA8bG9jYWxlLmg+CisjZWxzZQorICAgICNpbmNsdWRlIDxzc3RyZWFtPgorI2VuZGlmCisK
K2RvdWJsZSBhdG9mX2RvdChjb25zdCBjaGFyICpzdHIpCit7CisjaWZkZWYgX01TQ19WRVIKKyAg
ICBfbG9jYWxlX3QgbCA9IF9jcmVhdGVfbG9jYWxlKExDX05VTUVSSUMsICJDIik7CisgICAgZG91
YmxlIHJlc3VsdCA9IF9hdG9mX2woc3RyLCBsKTsKKyAgICBfZnJlZV9sb2NhbGUobCk7CisgICAg
cmV0dXJuIHJlc3VsdDsKKyNlbHNlCisgICAgZG91YmxlIHJlc3VsdDsKKyAgICBzdGQ6OmlzdHJp
bmdzdHJlYW0gcyhzdHIpOworICAgIHN0ZDo6bG9jYWxlIGwoIkMiKTsKKyAgICBzLmltYnVlKGwp
OworICAgIHMgPj4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7CisjZW5kaWYKK30KSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvaW50ZXJtZWRp
YXRlLmgJKHJldmlzaW9uIDc2MDI1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL2ludGVybWVkaWF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksOSArMTI5LDkgQEAK
ICAgICBFT3BSZWZsZWN0LAogICAgIEVPcFJlZnJhY3QsCiAKLSAgICAvL0VPcERQZHgsICAgICAg
ICAgICAgLy8gRnJhZ21lbnQgb25seSwgT0VTX3N0YW5kYXJkX2Rlcml2YXRpdmVzIGV4dGVuc2lv
bgotICAgIC8vRU9wRFBkeSwgICAgICAgICAgICAvLyBGcmFnbWVudCBvbmx5LCBPRVNfc3RhbmRh
cmRfZGVyaXZhdGl2ZXMgZXh0ZW5zaW9uCi0gICAgLy9FT3BGd2lkdGgsICAgICAgICAgIC8vIEZy
YWdtZW50IG9ubHksIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KKyAgICBFT3BE
RmR4LCAgICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZl
cyBleHRlbnNpb24KKyAgICBFT3BERmR5LCAgICAgICAgICAgIC8vIEZyYWdtZW50IG9ubHksIE9F
U19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KKyAgICBFT3BGd2lkdGgsICAgICAgICAg
IC8vIEZyYWdtZW50IG9ubHksIE9FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyBleHRlbnNpb24KIAog
ICAgIEVPcE1hdHJpeFRpbWVzTWF0cml4LAogCkBAIC0xODQsNiArMTg0LDggQEAKICAgICBFT3BE
aXZBc3NpZ24sCiB9OwogCitleHRlcm4gY29uc3QgY2hhciogZ2V0T3BlcmF0b3JTdHJpbmcoVE9w
ZXJhdG9yIG9wKTsKKwogY2xhc3MgVEludGVybVRyYXZlcnNlcjsKIGNsYXNzIFRJbnRlcm1BZ2dy
ZWdhdGU7CiBjbGFzcyBUSW50ZXJtQmluYXJ5OwpAQCAtMjYyLDMwICsyNjQsMzggQEAKIC8vCiAv
LyBIYW5kbGUgZm9yLCBkby13aGlsZSwgYW5kIHdoaWxlIGxvb3BzLgogLy8KK2VudW0gVExvb3BU
eXBlIHsKKyAgICBFTG9vcEZvciwKKyAgICBFTG9vcFdoaWxlLAorICAgIEVMb29wRG9XaGlsZSwK
K307CisKIGNsYXNzIFRJbnRlcm1Mb29wIDogcHVibGljIFRJbnRlcm1Ob2RlIHsKIHB1YmxpYzoK
LSAgICBUSW50ZXJtTG9vcChUSW50ZXJtTm9kZSAqaW5pdCwgVEludGVybU5vZGUqIGFCb2R5LCBU
SW50ZXJtVHlwZWQqIGFUZXN0LCBUSW50ZXJtVHlwZWQqIGFUZXJtaW5hbCwgYm9vbCB0ZXN0Rmly
c3QpIDogCi0gICAgICAgICAgICBpbml0KGluaXQpLAotICAgICAgICAgICAgYm9keShhQm9keSks
Ci0gICAgICAgICAgICB0ZXN0KGFUZXN0KSwKLSAgICAgICAgICAgIHRlcm1pbmFsKGFUZXJtaW5h
bCksCi0gICAgICAgICAgICBmaXJzdCh0ZXN0Rmlyc3QpIHsgfQorICAgIFRJbnRlcm1Mb29wKFRM
b29wVHlwZSBhVHlwZSwKKyAgICAgICAgICAgICAgICBUSW50ZXJtTm9kZSAqYUluaXQsIFRJbnRl
cm1UeXBlZCogYUNvbmQsIFRJbnRlcm1UeXBlZCogYUV4cHIsCisgICAgICAgICAgICAgICAgVElu
dGVybU5vZGUqIGFCb2R5KSA6CisgICAgICAgICAgICB0eXBlKGFUeXBlKSwKKyAgICAgICAgICAg
IGluaXQoYUluaXQpLAorICAgICAgICAgICAgY29uZChhQ29uZCksCisgICAgICAgICAgICBleHBy
KGFFeHByKSwKKyAgICAgICAgICAgIGJvZHkoYUJvZHkpIHsgfQogCiAgICAgdmlydHVhbCBUSW50
ZXJtTG9vcCogZ2V0QXNMb29wTm9kZSgpIHsgcmV0dXJuIHRoaXM7IH0KICAgICB2aXJ0dWFsIHZv
aWQgdHJhdmVyc2UoVEludGVybVRyYXZlcnNlciopOwogCi0gICAgVEludGVybU5vZGUgKmdldElu
aXQoKSB7IHJldHVybiBpbml0OyB9Ci0gICAgVEludGVybU5vZGUgKmdldEJvZHkoKSB7IHJldHVy
biBib2R5OyB9Ci0gICAgVEludGVybVR5cGVkICpnZXRUZXN0KCkgeyByZXR1cm4gdGVzdDsgfQot
ICAgIFRJbnRlcm1UeXBlZCAqZ2V0VGVybWluYWwoKSB7IHJldHVybiB0ZXJtaW5hbDsgfQotICAg
IGJvb2wgdGVzdEZpcnN0KCkgeyByZXR1cm4gZmlyc3Q7IH0KKyAgICBUTG9vcFR5cGUgZ2V0VHlw
ZSgpIGNvbnN0IHsgcmV0dXJuIHR5cGU7IH0KKyAgICBUSW50ZXJtTm9kZSogZ2V0SW5pdCgpIHsg
cmV0dXJuIGluaXQ7IH0KKyAgICBUSW50ZXJtVHlwZWQqIGdldENvbmRpdGlvbigpIHsgcmV0dXJu
IGNvbmQ7IH0KKyAgICBUSW50ZXJtVHlwZWQqIGdldEV4cHJlc3Npb24oKSB7IHJldHVybiBleHBy
OyB9CisgICAgVEludGVybU5vZGUqIGdldEJvZHkoKSB7IHJldHVybiBib2R5OyB9CiAKIHByb3Rl
Y3RlZDoKLSAgICBUSW50ZXJtTm9kZSAqaW5pdDsKLSAgICBUSW50ZXJtTm9kZSAqYm9keTsgICAg
ICAgLy8gY29kZSB0byBsb29wIG92ZXIKLSAgICBUSW50ZXJtVHlwZWQgKnRlc3Q7ICAgICAgLy8g
ZXhpdCBjb25kaXRpb24gYXNzb2NpYXRlZCB3aXRoIGxvb3AsIGNvdWxkIGJlIDAgZm9yICdmb3In
IGxvb3BzCi0gICAgVEludGVybVR5cGVkICp0ZXJtaW5hbDsgIC8vIGV4aXN0cyBmb3IgZm9yLWxv
b3BzCi0gICAgYm9vbCBmaXJzdDsgICAgICAgICAgICAgIC8vIHRydWUgZm9yIHdoaWxlIGFuZCBm
b3IsIG5vdCBmb3IgZG8td2hpbGUKKyAgICBUTG9vcFR5cGUgdHlwZTsKKyAgICBUSW50ZXJtTm9k
ZSogaW5pdDsgIC8vIGZvci1sb29wIGluaXRpYWxpemF0aW9uCisgICAgVEludGVybVR5cGVkKiBj
b25kOyAvLyBsb29wIGV4aXQgY29uZGl0aW9uCisgICAgVEludGVybVR5cGVkKiBleHByOyAvLyBm
b3ItbG9vcCBleHByZXNzaW9uCisgICAgVEludGVybU5vZGUqIGJvZHk7ICAvLyBsb29wIGJvZHkK
IH07CiAKIC8vCkBAIC00MDQsNiArNDE0LDcgQEAKIAogdHlwZWRlZiBUVmVjdG9yPFRJbnRlcm1O
b2RlKj4gVEludGVybVNlcXVlbmNlOwogdHlwZWRlZiBUVmVjdG9yPGludD4gVFF1YWxpZmllckxp
c3Q7Cit0eXBlZGVmIFRNYXA8VFN0cmluZywgVFN0cmluZz4gVFByYWdtYVRhYmxlOwogLy8KIC8v
IE5vZGVzIHRoYXQgb3BlcmF0ZSBvbiBhbiBhcmJpdHJhcnkgc2l6ZWQgc2V0IG9mIGNoaWxkcmVu
LgogLy8KQEAgLTQxNywxMiArNDI4LDEzIEBACiAgICAgdmlydHVhbCB2b2lkIHRyYXZlcnNlKFRJ
bnRlcm1UcmF2ZXJzZXIqKTsKIAogICAgIFRJbnRlcm1TZXF1ZW5jZSYgZ2V0U2VxdWVuY2UoKSB7
IHJldHVybiBzZXF1ZW5jZTsgfQorCiAgICAgdm9pZCBzZXROYW1lKGNvbnN0IFRTdHJpbmcmIG4p
IHsgbmFtZSA9IG47IH0KICAgICBjb25zdCBUU3RyaW5nJiBnZXROYW1lKCkgY29uc3QgeyByZXR1
cm4gbmFtZTsgfQogCiAgICAgdm9pZCBzZXRVc2VyRGVmaW5lZCgpIHsgdXNlckRlZmluZWQgPSB0
cnVlOyB9CiAgICAgYm9vbCBpc1VzZXJEZWZpbmVkKCkgeyByZXR1cm4gdXNlckRlZmluZWQ7IH0K
LSAgICBUUXVhbGlmaWVyTGlzdCYgZ2V0UXVhbGlmaWVyKCkgeyByZXR1cm4gcXVhbGlmaWVyOyB9
CisKICAgICB2b2lkIHNldE9wdGltaXplKGJvb2wgbykgeyBvcHRpbWl6ZSA9IG87IH0KICAgICBi
b29sIGdldE9wdGltaXplKCkgeyByZXR1cm4gb3B0aW1pemU7IH0KICAgICB2b2lkIHNldERlYnVn
KGJvb2wgZCkgeyBkZWJ1ZyA9IGQ7IH0KQEAgLTQzNCw5ICs0NDYsOSBAQAogICAgIFRJbnRlcm1B
Z2dyZWdhdGUoY29uc3QgVEludGVybUFnZ3JlZ2F0ZSYpOyAvLyBkaXNhbGxvdyBjb3B5IGNvbnN0
cnVjdG9yCiAgICAgVEludGVybUFnZ3JlZ2F0ZSYgb3BlcmF0b3I9KGNvbnN0IFRJbnRlcm1BZ2dy
ZWdhdGUmKTsgLy8gZGlzYWxsb3cgYXNzaWdubWVudCBvcGVyYXRvcgogICAgIFRJbnRlcm1TZXF1
ZW5jZSBzZXF1ZW5jZTsKLSAgICBUUXVhbGlmaWVyTGlzdCBxdWFsaWZpZXI7CiAgICAgVFN0cmlu
ZyBuYW1lOwogICAgIGJvb2wgdXNlckRlZmluZWQ7IC8vIHVzZWQgZm9yIHVzZXIgZGVmaW5lZCBm
dW5jdGlvbiBuYW1lcworCiAgICAgYm9vbCBvcHRpbWl6ZTsKICAgICBib29sIGRlYnVnOwogICAg
IFRQcmFnbWFUYWJsZSAqcHJhZ21hVGFibGU7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wuaAkocmV2aXNpb24gNzYw
MjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVHJhbnNsYXRvckdM
U0wuaAkod29ya2luZyBjb3B5KQpAQCAtMTEsOCArMTEsMTAgQEAKIAogY2xhc3MgVHJhbnNsYXRv
ckdMU0wgOiBwdWJsaWMgVENvbXBpbGVyIHsKIHB1YmxpYzoKLSAgICBUcmFuc2xhdG9yR0xTTChF
U2hMYW5ndWFnZSBsYW5nLCBFU2hTcGVjIHNwZWMpOwotICAgIHZpcnR1YWwgYm9vbCBjb21waWxl
KFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICBUcmFuc2xhdG9yR0xTTChTaFNoYWRlclR5cGUgdHlw
ZSwgU2hTaGFkZXJTcGVjIHNwZWMpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIHRy
YW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCk7CiB9OwogCiAjZW5kaWYgIC8vIENPTVBJTEVSX1RS
QU5TTEFUT1JHTFNMX0hfCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvT3V0cHV0R0xTTC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL091dHB1dEdMU0wuY3BwCShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRHTFNMLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzc0LDYgKzM3NCwxMCBAQAogICAgICAgICBjYXNlIEVPcExlbmd0aDogd3JpdGVUcmlw
bGV0KHZpc2l0LCAibGVuZ3RoKCIsIE5VTEwsICIpIik7IGJyZWFrOwogICAgICAgICBjYXNlIEVP
cE5vcm1hbGl6ZTogd3JpdGVUcmlwbGV0KHZpc2l0LCAibm9ybWFsaXplKCIsIE5VTEwsICIpIik7
IGJyZWFrOwogCisgICAgICAgIGNhc2UgRU9wREZkeDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZEZk
eCgiLCBOVUxMLCAiKSIpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BERmR5OiB3cml0ZVRyaXBs
ZXQodmlzaXQsICJkRmR5KCIsIE5VTEwsICIpIik7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEZ3
aWR0aDogd3JpdGVUcmlwbGV0KHZpc2l0LCAiZndpZHRoKCIsIE5VTEwsICIpIik7IGJyZWFrOwor
CiAgICAgICAgIGNhc2UgRU9wQW55OiB3cml0ZVRyaXBsZXQodmlzaXQsICJhbnkoIiwgTlVMTCwg
IikiKTsgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wQWxsOiB3cml0ZVRyaXBsZXQodmlzaXQsICJh
bGwoIiwgTlVMTCwgIikiKTsgYnJlYWs7CiAKQEAgLTYwOCwyMyArNjEyLDMyIEBACiAKICAgICBp
bmNyZW1lbnREZXB0aCgpOwogICAgIC8vIExvb3AgaGVhZGVyLgotICAgIGlmIChub2RlLT50ZXN0
Rmlyc3QoKSkgIC8vIGZvciBsb29wCisgICAgVExvb3BUeXBlIGxvb3BUeXBlID0gbm9kZS0+Z2V0
VHlwZSgpOworICAgIGlmIChsb29wVHlwZSA9PSBFTG9vcEZvcikgIC8vIGZvciBsb29wCiAgICAg
ewogICAgICAgICBvdXQgPDwgImZvciAoIjsKICAgICAgICAgaWYgKG5vZGUtPmdldEluaXQoKSkK
ICAgICAgICAgICAgIG5vZGUtPmdldEluaXQoKS0+dHJhdmVyc2UodGhpcyk7CiAgICAgICAgIG91
dCA8PCAiOyAiOwogCi0gICAgICAgIEFTU0VSVChub2RlLT5nZXRUZXN0KCkgIT0gTlVMTCk7Ci0g
ICAgICAgIG5vZGUtPmdldFRlc3QoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgICAgIGlmIChub2Rl
LT5nZXRDb25kaXRpb24oKSkKKyAgICAgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2
ZXJzZSh0aGlzKTsKICAgICAgICAgb3V0IDw8ICI7ICI7CiAKLSAgICAgICAgaWYgKG5vZGUtPmdl
dFRlcm1pbmFsKCkpCi0gICAgICAgICAgICBub2RlLT5nZXRUZXJtaW5hbCgpLT50cmF2ZXJzZSh0
aGlzKTsKKyAgICAgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24oKSkKKyAgICAgICAgICAgIG5v
ZGUtPmdldEV4cHJlc3Npb24oKS0+dHJhdmVyc2UodGhpcyk7CiAgICAgICAgIG91dCA8PCAiKVxu
IjsKICAgICB9CisgICAgZWxzZSBpZiAobG9vcFR5cGUgPT0gRUxvb3BXaGlsZSkgIC8vIHdoaWxl
IGxvb3AKKyAgICB7CisgICAgICAgIG91dCA8PCAid2hpbGUgKCI7CisgICAgICAgIEFTU0VSVChu
b2RlLT5nZXRDb25kaXRpb24oKSAhPSBOVUxMKTsKKyAgICAgICAgbm9kZS0+Z2V0Q29uZGl0aW9u
KCktPnRyYXZlcnNlKHRoaXMpOworICAgICAgICBvdXQgPDwgIilcbiI7CisgICAgfQogICAgIGVs
c2UgIC8vIGRvLXdoaWxlIGxvb3AKICAgICB7CisgICAgICAgIEFTU0VSVChsb29wVHlwZSA9PSBF
TG9vcERvV2hpbGUpOwogICAgICAgICBvdXQgPDwgImRvXG4iOwogICAgIH0KIApAQCAtNjMyLDEx
ICs2NDUsMTEgQEAKICAgICB2aXNpdENvZGVCbG9jayhub2RlLT5nZXRCb2R5KCkpOwogCiAgICAg
Ly8gTG9vcCBmb290ZXIuCi0gICAgaWYgKCFub2RlLT50ZXN0Rmlyc3QoKSkgIC8vIHdoaWxlIGxv
b3AKKyAgICBpZiAobG9vcFR5cGUgPT0gRUxvb3BEb1doaWxlKSAgLy8gZG8td2hpbGUgbG9vcAog
ICAgIHsKICAgICAgICAgb3V0IDw8ICJ3aGlsZSAoIjsKLSAgICAgICAgQVNTRVJUKG5vZGUtPmdl
dFRlc3QoKSAhPSBOVUxMKTsKLSAgICAgICAgbm9kZS0+Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlz
KTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmdldENvbmRpdGlvbigpICE9IE5VTEwpOworICAgICAg
ICBub2RlLT5nZXRDb25kaXRpb24oKS0+dHJhdmVyc2UodGhpcyk7CiAgICAgICAgIG91dCA8PCAi
KTtcbiI7CiAgICAgfQogICAgIGRlY3JlbWVudERlcHRoKCk7CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmNwcAkocmV2aXNpb24g
NzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9j
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMTQgKzIyLDEwIEBACiAgICAgaWYgKGdsb2JhbFBv
b2xzKQogICAgICAgICByZXR1cm47CiAKLSAgICBUUG9vbEFsbG9jYXRvciAqZ2xvYmFsUG9vbEFs
bG9jYXRvciA9IG5ldyBUUG9vbEFsbG9jYXRvcih0cnVlKTsKLQogICAgIFRUaHJlYWRHbG9iYWxQ
b29scyogdGhyZWFkRGF0YSA9IG5ldyBUVGhyZWFkR2xvYmFsUG9vbHMoKTsKLSAgICAKLSAgICB0
aHJlYWREYXRhLT5nbG9iYWxQb29sQWxsb2NhdG9yID0gZ2xvYmFsUG9vbEFsbG9jYXRvcjsKLSAg
ICAgICAgCi0gICAgT1NfU2V0VExTVmFsdWUoUG9vbEluZGV4LCB0aHJlYWREYXRhKTsgICAgIAot
ICAgIGdsb2JhbFBvb2xBbGxvY2F0b3ItPnB1c2goKTsKKyAgICB0aHJlYWREYXRhLT5nbG9iYWxQ
b29sQWxsb2NhdG9yID0gMDsKKworICAgIE9TX1NldFRMU1ZhbHVlKFBvb2xJbmRleCwgdGhyZWFk
RGF0YSk7CiB9CiAKIHZvaWQgRnJlZUdsb2JhbFBvb2xzKCkKQEAgLTM4LDkgKzM0LDcgQEAKICAg
ICBUVGhyZWFkR2xvYmFsUG9vbHMqIGdsb2JhbFBvb2xzPSBzdGF0aWNfY2FzdDxUVGhyZWFkR2xv
YmFsUG9vbHMqPihPU19HZXRUTFNWYWx1ZShQb29sSW5kZXgpKTsgICAgCiAgICAgaWYgKCFnbG9i
YWxQb29scykKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEdsb2JhbFBvb2xBbGxvY2F0b3Iu
cG9wQWxsKCk7Ci0gICAgZGVsZXRlICZHbG9iYWxQb29sQWxsb2NhdG9yOyAgICAgICAKKyAKICAg
ICBkZWxldGUgZ2xvYmFsUG9vbHM7CiB9CiAKQEAgLTY2LDcgKzYwLDcgQEAKICAgICByZXR1cm4g
KnRocmVhZERhdGEtPmdsb2JhbFBvb2xBbGxvY2F0b3I7CiB9CiAKLXZvaWQgU2V0R2xvYmFsUG9v
bEFsbG9jYXRvclB0cihUUG9vbEFsbG9jYXRvciogcG9vbEFsbG9jYXRvcikKK3ZvaWQgU2V0R2xv
YmFsUG9vbEFsbG9jYXRvcihUUG9vbEFsbG9jYXRvciogcG9vbEFsbG9jYXRvcikKIHsKICAgICBU
VGhyZWFkR2xvYmFsUG9vbHMqIHRocmVhZERhdGEgPSBzdGF0aWNfY2FzdDxUVGhyZWFkR2xvYmFs
UG9vbHMqPihPU19HZXRUTFNWYWx1ZShQb29sSW5kZXgpKTsKIApAQCAtNzcsMTMgKzcxLDEzIEBA
CiAvLyBJbXBsZW1lbnQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFRQb29sQWxsb2NhdG9yIGNs
YXNzLCB3aGljaAogLy8gaXMgZG9jdW1lbnRlZCBpbiBQb29sQWxsb2MuaC4KIC8vCi1UUG9vbEFs
bG9jYXRvcjo6VFBvb2xBbGxvY2F0b3IoYm9vbCBnLCBpbnQgZ3Jvd3RoSW5jcmVtZW50LCBpbnQg
YWxsb2NhdGlvbkFsaWdubWVudCkgOiAKLSAgICBnbG9iYWwoZyksCitUUG9vbEFsbG9jYXRvcjo6
VFBvb2xBbGxvY2F0b3IoaW50IGdyb3d0aEluY3JlbWVudCwgaW50IGFsbG9jYXRpb25BbGlnbm1l
bnQpIDogCiAgICAgcGFnZVNpemUoZ3Jvd3RoSW5jcmVtZW50KSwKICAgICBhbGlnbm1lbnQoYWxs
b2NhdGlvbkFsaWdubWVudCksCiAgICAgZnJlZUxpc3QoMCksCiAgICAgaW5Vc2VMaXN0KDApLAot
ICAgIG51bUNhbGxzKDApCisgICAgbnVtQ2FsbHMoMCksCisgICAgdG90YWxCeXRlcygwKQogewog
ICAgIC8vCiAgICAgLy8gRG9uJ3QgYWxsb3cgcGFnZSBzaXplcyB3ZSBrbm93IGFyZSBzbWFsbGVy
IHRoYW4gYWxsIGNvbW1vbgpAQCAtMTIzLDI0ICsxMTcsMTQgQEAKIAogVFBvb2xBbGxvY2F0b3I6
On5UUG9vbEFsbG9jYXRvcigpCiB7Ci0gICAgaWYgKCFnbG9iYWwpIHsKLSAgICAgICAgLy8KLSAg
ICAgICAgLy8gVGhlbiB3ZSBrbm93IHRoYXQgdGhpcyBvYmplY3QgaXMgbm90IGJlaW5nIAotICAg
ICAgICAvLyBhbGxvY2F0ZWQgYWZ0ZXIgb3RoZXIsIGdsb2JhbGx5IHNjb3BlZCBvYmplY3RzCi0g
ICAgICAgIC8vIHRoYXQgZGVwZW5kIG9uIGl0LiAgU28gd2UgY2FuIGRlbGV0ZSB0aGUgImluIHVz
ZSIgbWVtb3J5LgotICAgICAgICAvLwotICAgICAgICB3aGlsZSAoaW5Vc2VMaXN0KSB7Ci0gICAg
ICAgICAgICB0SGVhZGVyKiBuZXh0ID0gaW5Vc2VMaXN0LT5uZXh0UGFnZTsKLSAgICAgICAgICAg
IGluVXNlTGlzdC0+fnRIZWFkZXIoKTsKLSAgICAgICAgICAgIGRlbGV0ZSBbXSByZWludGVycHJl
dF9jYXN0PGNoYXIqPihpblVzZUxpc3QpOwotICAgICAgICAgICAgaW5Vc2VMaXN0ID0gbmV4dDsK
LSAgICAgICAgfQorICAgIHdoaWxlIChpblVzZUxpc3QpIHsKKyAgICAgICAgdEhlYWRlciogbmV4
dCA9IGluVXNlTGlzdC0+bmV4dFBhZ2U7CisgICAgICAgIGluVXNlTGlzdC0+fnRIZWFkZXIoKTsK
KyAgICAgICAgZGVsZXRlIFtdIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGluVXNlTGlzdCk7Cisg
ICAgICAgIGluVXNlTGlzdCA9IG5leHQ7CiAgICAgfQogCi0gICAgLy8KLSAgICAvLyBBbHdheXMg
ZGVsZXRlIHRoZSBmcmVlIGxpc3QgbWVtb3J5IC0gaXQgY2FuJ3QgYmUgYmVpbmcKLSAgICAvLyAo
Y29ycmVjdGx5KSByZWZlcmVuY2VkLCB3aGV0aGVyIHRoZSBwb29sIGFsbG9jYXRvciB3YXMKLSAg
ICAvLyBnbG9iYWwgb3Igbm90LiAgV2Ugc2hvdWxkIG5vdCBjaGVjayB0aGUgZ3VhcmQgYmxvY2tz
CisgICAgLy8gV2Ugc2hvdWxkIG5vdCBjaGVjayB0aGUgZ3VhcmQgYmxvY2tzCiAgICAgLy8gaGVy
ZSwgYmVjYXVzZSB3ZSBkaWQgaXQgYWxyZWFkeSB3aGVuIHRoZSBibG9jayB3YXMKICAgICAvLyBw
bGFjZWQgaW50byB0aGUgZnJlZSBsaXN0LgogICAgIC8vCkBAIC0zMTUsNCArMjk5LDQgQEAKIHsK
ICAgICBmb3IgKGNvbnN0IFRBbGxvY2F0aW9uKiBhbGxvYyA9IHRoaXM7IGFsbG9jICE9IDA7IGFs
bG9jID0gYWxsb2MtPnByZXZBbGxvYykKICAgICAgICAgYWxsb2MtPmNoZWNrKCk7Ci19Cit9Clwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUv
c3JjL2NvbXBpbGVyL2dlbmVyYXRlX2dsc2xhbmdfbGV4ZXIuc2gKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dlbmVyYXRlX2dsc2xhbmdfbGV4ZXIu
c2gJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
Z2VuZXJhdGVfZ2xzbGFuZ19sZXhlci5zaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAor
IyEvYmluL2Jhc2gKKyMgQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKyMgZm91bmQgaW4gdGhl
IExJQ0VOU0UgZmlsZS4KKworIyBHZW5lcmF0ZXMgR0xTTCBFUyBsZXhlciAtIGdsc2xhbmdfbGV4
LmNwcAorCitzY3JpcHRfZGlyPSQoZGlybmFtZSAkMCkKK2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIv
Z2xzbGFuZy5sCitvdXRwdXRfZmlsZT0kc2NyaXB0X2Rpci9nbHNsYW5nX2xleC5jcHAKK2ZsZXgg
LS1ub2xpbmUgLS1ub3VuaXN0ZCAtLW91dGZpbGU9JG91dHB1dF9maWxlICRpbnB1dF9maWxlCklu
ZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1VuZm9s
ZFNlbGVjdC5oCShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9VbmZvbGRTZWxlY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDggQEAK
IC8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLworLy8g
VW5mb2xkU2VsZWN0IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHRoZSBzZWxlY3Qgb3Bl
cmF0b3IgPzogYXMgaWYtZWxzZSBzdGF0ZW1lbnRzCisvLwogCiAjaWZuZGVmIENPTVBJTEVSX1VO
Rk9MRFNFTEVDVF9IXwogI2RlZmluZSBDT01QSUxFUl9VTkZPTERTRUxFQ1RfSF8KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNpb25CZWhhdmlvci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9FeHRlbnNp
b25CZWhhdmlvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0V4dGVuc2lvbkJlaGF2aW9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKyNpZm5kZWYgX0VYVEVOU0lPTl9CRUhBVklPUl9JTkNM
VURFRF8KKyNkZWZpbmUgX0VYVEVOU0lPTl9CRUhBVklPUl9JTkNMVURFRF8KKworI2luY2x1ZGUg
ImNvbXBpbGVyL0NvbW1vbi5oIgorCit0eXBlZGVmIGVudW0geworICAgIEVCaFJlcXVpcmUsCisg
ICAgRUJoRW5hYmxlLAorICAgIEVCaFdhcm4sCisgICAgRUJoRGlzYWJsZQorfSBUQmVoYXZpb3I7
CisKK3R5cGVkZWYgVE1hcDxUU3RyaW5nLCBUQmVoYXZpb3I+IFRFeHRlbnNpb25CZWhhdmlvcjsK
KworI2VuZGlmIC8vIF9FWFRFTlNJT05fVEFCTEVfSU5DTFVERURfCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvZ2VuZXJhdGVfZ2xzbGFuZ19wYXJzZXIuc2gKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dlbmVyYXRl
X2dsc2xhbmdfcGFyc2VyLnNoCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5H
TEUvc3JjL2NvbXBpbGVyL2dlbmVyYXRlX2dsc2xhbmdfcGFyc2VyLnNoCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEyIEBACisjIS9iaW4vYmFzaAorIyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFO
R0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgVXNlIG9mIHRoaXMg
c291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorIyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorCisjIEdlbmVyYXRlcyBHTFNMIEVTIHBh
cnNlciAtIGdsc2xhbmdfdGFiLmggYW5kIGdsc2xhbmdfdGFiLmNwcAorCitzY3JpcHRfZGlyPSQo
ZGlybmFtZSAkMCkKK2lucHV0X2ZpbGU9JHNjcmlwdF9kaXIvZ2xzbGFuZy55CitvdXRwdXRfaGVh
ZGVyPSRzY3JpcHRfZGlyL2dsc2xhbmdfdGFiLmgKK291dHB1dF9zb3VyY2U9JHNjcmlwdF9kaXIv
Z2xzbGFuZ190YWIuY3BwCitiaXNvbiAtLW5vLWxpbmVzIC0tc2tlbGV0b249eWFjYy5jIC0tZGVm
aW5lcz0kb3V0cHV0X2hlYWRlciAtLW91dHB1dD0kb3V0cHV0X3NvdXJjZSAkaW5wdXRfZmlsZQpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJp
YWJsZUluZm8uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9WYXJpYWJsZUluZm8uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOCBAQAorLy8K
Ky8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5l
ZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElD
RU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5oIgorI2luY2x1
ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCisvLyBQcm92aWRlcyBpbmZvcm1hdGlvbiBh
Ym91dCBhIHZhcmlhYmxlLgorLy8gSXQgaXMgY3VycmVudGx5IGJlaW5nIHVzZWQgdG8gc3RvcmUg
aW5mbyBhYm91dCBhY3RpdmUgYXR0cmlicyBhbmQgdW5pZm9ybXMuCitzdHJ1Y3QgVFZhcmlhYmxl
SW5mbyB7CisgICAgVFBlcnNpc3RTdHJpbmcgbmFtZTsKKyAgICBTaERhdGFUeXBlIHR5cGU7Cisg
ICAgaW50IHNpemU7Cit9OwordHlwZWRlZiBzdGQ6OnZlY3RvcjxUVmFyaWFibGVJbmZvPiBUVmFy
aWFibGVJbmZvTGlzdDsKKworLy8gVHJhdmVyc2VzIGludGVybWVkaWF0ZSB0cmVlIHRvIGNvbGxl
Y3QgYWxsIGF0dHJpYnV0ZXMgYW5kIHVuaWZvcm1zLgorY2xhc3MgQ29sbGVjdEF0dHJpYnNVbmlm
b3JtcyA6IHB1YmxpYyBUSW50ZXJtVHJhdmVyc2VyIHsKK3B1YmxpYzoKKyAgICBDb2xsZWN0QXR0
cmlic1VuaWZvcm1zKFRWYXJpYWJsZUluZm9MaXN0JiBhdHRyaWJzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIHVuaWZvcm1zKTsKKworICAgIHZpcnR1YWwg
dm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sKik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0
Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopOworICAgIHZpcnR1YWwgYm9vbCB2
aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJpbmFyeSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNp
dFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxl
Y3Rpb24oVmlzaXQsIFRJbnRlcm1TZWxlY3Rpb24qKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRB
Z2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dyZWdhdGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlz
aXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5j
aChWaXNpdCwgVEludGVybUJyYW5jaCopOworCitwcml2YXRlOgorICAgIFRWYXJpYWJsZUluZm9M
aXN0JiBtQXR0cmliczsKKyAgICBUVmFyaWFibGVJbmZvTGlzdCYgbVVuaWZvcm1zOworfTsKKwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1RyYW5zbGF0b3JHTFNM
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VHJhbnNsYXRvckdMU0wuY3BwCShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9yR0xTTC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcsMTQgKzcsMzEgQEAKICNpbmNsdWRlICJjb21waWxlci9UcmFuc2xhdG9yR0xTTC5oIgogCiAj
aW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0R0xTTC5oIgorI2luY2x1ZGUgImNvbXBpbGVyL1ZlcnNp
b25HTFNMLmgiCiAKLVRyYW5zbGF0b3JHTFNMOjpUcmFuc2xhdG9yR0xTTChFU2hMYW5ndWFnZSBs
YW5nLCBFU2hTcGVjIHNwZWMpCi0gICAgOiBUQ29tcGlsZXIobGFuZywgc3BlYykgeworc3RhdGlj
IHZvaWQgd3JpdGVWZXJzaW9uKFNoU2hhZGVyVHlwZSB0eXBlLCBUSW50ZXJtTm9kZSogcm9vdCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBUSW5mb1NpbmtCYXNlJiBzaW5rKSB7CisgICAgVFZl
cnNpb25HTFNMIHZlcnNpb25HTFNMKHR5cGUpOworICAgIHJvb3QtPnRyYXZlcnNlKCZ2ZXJzaW9u
R0xTTCk7CisgICAgaW50IHZlcnNpb24gPSB2ZXJzaW9uR0xTTC5nZXRWZXJzaW9uKCk7CisgICAg
Ly8gV2UgbmVlZCB0byB3cml0ZSB2ZXJzaW9uIGRpcmVjdGl2ZSBvbmx5IGlmIGl0IGlzIGdyZWF0
ZXIgdGhhbiAxMTAuCisgICAgLy8gSWYgdGhlcmUgaXMgbm8gdmVyc2lvbiBkaXJlY3RpdmUgaW4g
dGhlIHNoYWRlciwgMTEwIGlzIGltcGxpZWQuCisgICAgaWYgKHZlcnNpb24gPiAxMTApIHsKKyAg
ICAgICAgc2luayA8PCAiI3ZlcnNpb24gIiA8PCB2ZXJzaW9uIDw8ICJcbiI7CisgICAgfQogfQog
Ci1ib29sIFRyYW5zbGF0b3JHTFNMOjpjb21waWxlKFRJbnRlcm1Ob2RlKiByb290KSB7Ci0gICAg
VE91dHB1dEdMU0wgb3V0cHV0R0xTTChpbmZvU2luay5vYmopOworVHJhbnNsYXRvckdMU0w6OlRy
YW5zbGF0b3JHTFNMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYykKKyAgICA6
IFRDb21waWxlcih0eXBlLCBzcGVjKSB7Cit9CisKK3ZvaWQgVHJhbnNsYXRvckdMU0w6OnRyYW5z
bGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgeworICAgIFRJbmZvU2lua0Jhc2UmIHNpbmsgPSBnZXRJ
bmZvU2luaygpLm9iajsKKworICAgIC8vIFdyaXRlIEdMU0wgdmVyc2lvbi4KKyAgICB3cml0ZVZl
cnNpb24oZ2V0U2hhZGVyVHlwZSgpLCByb290LCBzaW5rKTsKKworICAgIC8vIFdyaXRlIHRyYW5z
bGF0ZWQgc2hhZGVyLgorICAgIFRPdXRwdXRHTFNMIG91dHB1dEdMU0woc2luayk7CiAgICAgcm9v
dC0+dHJhdmVyc2UoJm91dHB1dEdMU0wpOwotCi0gICAgcmV0dXJuIHRydWU7CiB9CkluZGV4OiBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYWxp
ZGF0ZUxpbWl0YXRpb25zLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvVmFsaWRhdGVMaW1pdGF0aW9ucy5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDYyIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAyMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1
dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBp
biB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgIkdMU0xBTkcvU2hhZGVyTGFuZy5o
IgorI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorCitjbGFzcyBUSW5mb1NpbmtC
YXNlOworCitzdHJ1Y3QgVExvb3BJbmZvIHsKKyAgICBzdHJ1Y3QgVEluZGV4IHsKKyAgICAgICAg
aW50IGlkOyAgLy8gc3ltYm9sIGlkLgorICAgIH0gaW5kZXg7Cit9OwordHlwZWRlZiBUVmVjdG9y
PFRMb29wSW5mbz4gVExvb3BTdGFjazsKKworLy8gVHJhdmVyc2VzIGludGVybWVkaWF0ZSB0cmVl
IHRvIGVuc3VyZSB0aGF0IHRoZSBzaGFkZXIgZG9lcyBub3QgZXhjZWVkIHRoZQorLy8gbWluaW11
bSBmdW5jdGlvbmFsaXR5IG1hbmRhdGVkIGluIEdMU0wgMS4wIHNwZWMsIEFwcGVuZGl4IEEuCitj
bGFzcyBWYWxpZGF0ZUxpbWl0YXRpb25zIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgeworcHVi
bGljOgorICAgIFZhbGlkYXRlTGltaXRhdGlvbnMoU2hTaGFkZXJUeXBlIHNoYWRlclR5cGUsIFRJ
bmZvU2lua0Jhc2UmIHNpbmspOworCisgICAgaW50IG51bUVycm9ycygpIGNvbnN0IHsgcmV0dXJu
IG1OdW1FcnJvcnM7IH0KKworICAgIHZpcnR1YWwgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3lt
Ym9sKik7CisgICAgdmlydHVhbCB2b2lkIHZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3Rh
bnRVbmlvbiopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJpbmFyeShWaXNpdCwgVEludGVybUJp
bmFyeSopOworICAgIHZpcnR1YWwgYm9vbCB2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkq
KTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRTZWxlY3Rpb24oVmlzaXQsIFRJbnRlcm1TZWxlY3Rp
b24qKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRBZ2dyZWdhdGUoVmlzaXQsIFRJbnRlcm1BZ2dy
ZWdhdGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCop
OworICAgIHZpcnR1YWwgYm9vbCB2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCopOwor
Citwcml2YXRlOgorICAgIHZvaWQgZXJyb3IoVFNvdXJjZUxvYyBsb2MsIGNvbnN0IGNoYXIgKnJl
YXNvbiwgY29uc3QgY2hhciogdG9rZW4pOworCisgICAgYm9vbCB3aXRoaW5Mb29wQm9keSgpIGNv
bnN0OworICAgIGJvb2wgaXNMb29wSW5kZXgoY29uc3QgVEludGVybVN5bWJvbCogc3ltYm9sKSBj
b25zdDsKKyAgICBib29sIHZhbGlkYXRlTG9vcFR5cGUoVEludGVybUxvb3AqIG5vZGUpOworICAg
IGJvb2wgdmFsaWRhdGVGb3JMb29wSGVhZGVyKFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8q
IGluZm8pOworICAgIGJvb2wgdmFsaWRhdGVGb3JMb29wSW5pdChUSW50ZXJtTG9vcCogbm9kZSwg
VExvb3BJbmZvKiBpbmZvKTsKKyAgICBib29sIHZhbGlkYXRlRm9yTG9vcENvbmQoVEludGVybUxv
b3AqIG5vZGUsIFRMb29wSW5mbyogaW5mbyk7CisgICAgYm9vbCB2YWxpZGF0ZUZvckxvb3BFeHBy
KFRJbnRlcm1Mb29wKiBub2RlLCBUTG9vcEluZm8qIGluZm8pOworICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiBub25lIG9mIHRoZSBsb29wIGluZGljZXMgaXMgdXNlZCBhcyB0aGUgYXJndW1lbnQgdG8K
KyAgICAvLyB0aGUgZ2l2ZW4gZnVuY3Rpb24gb3V0IG9yIGlub3V0IHBhcmFtZXRlci4KKyAgICBi
b29sIHZhbGlkYXRlRnVuY3Rpb25DYWxsKFRJbnRlcm1BZ2dyZWdhdGUqIG5vZGUpOworICAgIGJv
b2wgdmFsaWRhdGVPcGVyYXRpb24oVEludGVybU9wZXJhdG9yKiBub2RlLCBUSW50ZXJtTm9kZSog
b3BlcmFuZCk7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgaW5kZXhpbmcgZG9lcyBub3QgZXhj
ZWVkIHRoZSBtaW5pbXVtIGZ1bmN0aW9uYWxpdHkKKyAgICAvLyBtYW5kYXRlZCBpbiBHTFNMIDEu
MCBzcGVjLCBBcHBlbmRpeCBBLCBTZWN0aW9uIDUuCisgICAgYm9vbCBpc0NvbnN0RXhwcihUSW50
ZXJtTm9kZSogbm9kZSk7CisgICAgYm9vbCBpc0NvbnN0SW5kZXhFeHByKFRJbnRlcm1Ob2RlKiBu
b2RlKTsKKyAgICBib29sIHZhbGlkYXRlSW5kZXhpbmcoVEludGVybUJpbmFyeSogbm9kZSk7CisK
KyAgICBTaFNoYWRlclR5cGUgbVNoYWRlclR5cGU7CisgICAgVEluZm9TaW5rQmFzZSYgbVNpbms7
CisgICAgaW50IG1OdW1FcnJvcnM7CisgICAgVExvb3BTdGFjayBtTG9vcFN0YWNrOworfTsKKwpJ
bmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNpb25HTFNMLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZlcnNp
b25HTFNMLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29t
cGlsZXIvVmVyc2lvbkdMU0wuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLy8KKy8v
IENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBi
eSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5T
RSBmaWxlLgorLy8KKworI2lmbmRlZiBDT01QSUxFUl9WRVJTSU9OR0xTTF9IXworI2RlZmluZSBD
T01QSUxFUl9WRVJTSU9OR0xTTF9IXworCisjaW5jbHVkZSAiR0xTTEFORy9TaGFkZXJMYW5nLmgi
CisjaW5jbHVkZSAiY29tcGlsZXIvaW50ZXJtZWRpYXRlLmgiCisKKy8vIFRyYXZlcnNlcyB0aGUg
aW50ZXJtZWRpYXRlIHRyZWUgdG8gcmV0dXJuIHRoZSBtaW5pbXVtIEdMU0wgdmVyc2lvbgorLy8g
cmVxdWlyZWQgdG8gbGVnYWxseSBhY2Nlc3MgYWxsIGJ1aWx0LWluIGZlYXR1cmVzIHVzZWQgaW4g
dGhlIHNoYWRlci4KKy8vIEdMU0wgMS4xIHdoaWNoIGlzIG1hbmRhdGVkIGJ5IE9wZW5HTCAyLjAg
cHJvdmlkZXM6CisvLyAgIC0gI3ZlcnNpb24gYW5kICNleHRlbnNpb24gdG8gZGVjbGFyZSB2ZXJz
aW9uIGFuZCBleHRlbnNpb25zLgorLy8gICAtIGJ1aWx0LWluIGZ1bmN0aW9ucyByZWZyYWN0LCBl
eHAsIGFuZCBsb2cuCisvLyAgIC0gdXBkYXRlZCBzdGVwKCkgdG8gY29tcGFyZSB4IDwgZWRnZSBp
bnN0ZWFkIG9mIHggPD0gZWRnZS4KKy8vIEdMU0wgMS4yIHdoaWNoIGlzIG1hbmRhdGVkIGJ5IE9w
ZW5HTCAyLjEgcHJvdmlkZXM6CisvLyAgIC0gbWFueSBjaGFuZ2VzIHRvIHJlZHVjZSBkaWZmZXJl
bmNlcyB3aGVuIGNvbXBhcmVkIHRvIHRoZSBFUyBzcGVjaWZpY2F0aW9uLgorLy8gICAtIGludmFy
aWFudCBrZXl3b3JkIGFuZCBpdHMgc3VwcG9ydC4KKy8vICAgLSBjKysgc3R5bGUgbmFtZSBoaWRp
bmcgcnVsZXMuCisvLyAgIC0gYnVpbHQtaW4gdmFyaWFibGUgZ2xfUG9pbnRDb29yZCBmb3IgZnJh
Z21lbnQgc2hhZGVycy4KKy8vCitjbGFzcyBUVmVyc2lvbkdMU0wgOiBwdWJsaWMgVEludGVybVRy
YXZlcnNlciB7CitwdWJsaWM6CisgICAgVFZlcnNpb25HTFNMKFNoU2hhZGVyVHlwZSB0eXBlKTsK
KworICAgIC8vIFJldHVybnMgMTIwIGlmICJpbnZhcmlhbnQiIGtleXdvcmQgb3IgImdsX1BvaW50
Q29vcmQiIGlzIHVzZWQKKyAgICAvLyBpbiB0aGUgc2hhZGVyLiBFbHNlIDExMCBpcyByZXR1cm5l
ZC4KKyAgICBpbnQgZ2V0VmVyc2lvbigpIHsgcmV0dXJuIG1WZXJzaW9uOyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgdmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOworICAgIHZpcnR1YWwgdm9pZCB2
aXNpdENvbnN0YW50VW5pb24oVEludGVybUNvbnN0YW50VW5pb24qKTsKKyAgICB2aXJ0dWFsIGJv
b2wgdmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5hcnkqKTsKKyAgICB2aXJ0dWFsIGJvb2wg
dmlzaXRVbmFyeShWaXNpdCwgVEludGVybVVuYXJ5Kik7CisgICAgdmlydHVhbCBib29sIHZpc2l0
U2VsZWN0aW9uKFZpc2l0LCBUSW50ZXJtU2VsZWN0aW9uKik7CisgICAgdmlydHVhbCBib29sIHZp
c2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVnYXRlKik7CisgICAgdmlydHVhbCBib29s
IHZpc2l0TG9vcChWaXNpdCwgVEludGVybUxvb3AqKTsKKyAgICB2aXJ0dWFsIGJvb2wgdmlzaXRC
cmFuY2goVmlzaXQsIFRJbnRlcm1CcmFuY2gqKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgdXBk
YXRlVmVyc2lvbihpbnQgdmVyc2lvbik7CisKK3ByaXZhdGU6CisgICAgU2hTaGFkZXJUeXBlIG1T
aGFkZXJUeXBlOworICAgIGludCBtVmVyc2lvbjsKK307CisKKyNlbmRpZiAgLy8gQ09NUElMRVJf
VkVSU0lPTkdMU0xfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9JbmZvU2luay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL0luZm9TaW5rLmNwcAkocmV2aXNpb24gNzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1NpbmsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw4ICszMiw4IEBACiB9CiAKIHZvaWQgVEluZm9TaW5rQmFzZTo6bG9jYXRpb24oVFNvdXJjZUxv
YyBsb2MpIHsKLSAgICBpbnQgc3RyaW5nID0gbG9jID4+IFNvdXJjZUxvY1N0cmluZ1NoaWZ0Owot
ICAgIGludCBsaW5lID0gbG9jICYgU291cmNlTG9jTGluZU1hc2s7CisgICAgaW50IHN0cmluZyA9
IDAsIGxpbmUgPSAwOworICAgIERlY29kZVNvdXJjZUxvYyhsb2MsICZzdHJpbmcsICZsaW5lKTsK
IAogICAgIFRQZXJzaXN0U3RyaW5nU3RyZWFtIHN0cmVhbTsKICAgICBpZiAobGluZSkKSW5kZXg6
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9UcmFuc2xh
dG9ySExTTC5oCShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw4ICsxMSwx
MCBAQAogCiBjbGFzcyBUcmFuc2xhdG9ySExTTCA6IHB1YmxpYyBUQ29tcGlsZXIgewogcHVibGlj
OgotICAgIFRyYW5zbGF0b3JITFNMKEVTaExhbmd1YWdlIGxhbmcsIEVTaFNwZWMgc3BlYyk7Ci0g
ICAgdmlydHVhbCBib29sIGNvbXBpbGUoVEludGVybU5vZGUqIHJvb3QpOworICAgIFRyYW5zbGF0
b3JITFNMKFNoU2hhZGVyVHlwZSB0eXBlLCBTaFNoYWRlclNwZWMgc3BlYyk7CisKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNsYXRlKFRJbnRlcm1Ob2RlKiByb290KTsKIH07CiAK
ICNlbmRpZiAgLy8gQ09NUElMRVJfVFJBTlNMQVRPUkhMU0xfSF8KSW5kZXg6IFNvdXJjZS9UaGly
ZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9nbHNsYW5nX3RhYi5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFi
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjc0IEBACisvKiBBIEJpc29uIHBhcnNlciwgbWFk
ZSBieSBHTlUgQmlzb24gMi4zLiAgKi8KKworLyogU2tlbGV0b24gaW50ZXJmYWNlIGZvciBCaXNv
bidzIFlhY2MtbGlrZSBwYXJzZXJzIGluIEMKKworICAgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5
LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2CisgICBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBv
ciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9n
cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuICAqLworCisvKiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGNyZWF0ZSBhIGxh
cmdlciB3b3JrIHRoYXQgY29udGFpbnMKKyAgIHBhcnQgb3IgYWxsIG9mIHRoZSBCaXNvbiBwYXJz
ZXIgc2tlbGV0b24gYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCisgICB1bmRlciB0ZXJtcyBvZiB5
b3VyIGNob2ljZSwgc28gbG9uZyBhcyB0aGF0IHdvcmsgaXNuJ3QgaXRzZWxmIGEKKyAgIHBhcnNl
ciBnZW5lcmF0b3IgdXNpbmcgdGhlIHNrZWxldG9uIG9yIGEgbW9kaWZpZWQgdmVyc2lvbiB0aGVy
ZW9mCisgICBhcyBhIHBhcnNlciBza2VsZXRvbi4gIEFsdGVybmF0aXZlbHksIGlmIHlvdSBtb2Rp
Znkgb3IgcmVkaXN0cmlidXRlCisgICB0aGUgcGFyc2VyIHNrZWxldG9uIGl0c2VsZiwgeW91IG1h
eSAoYXQgeW91ciBvcHRpb24pIHJlbW92ZSB0aGlzCisgICBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hp
Y2ggd2lsbCBjYXVzZSB0aGUgc2tlbGV0b24gYW5kIHRoZSByZXN1bHRpbmcKKyAgIEJpc29uIG91
dHB1dCBmaWxlcyB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCisg
ICBMaWNlbnNlIHdpdGhvdXQgdGhpcyBzcGVjaWFsIGV4Y2VwdGlvbi4KKworICAgVGhpcyBzcGVj
aWFsIGV4Y2VwdGlvbiB3YXMgYWRkZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBp
bgorICAgdmVyc2lvbiAyLjIgb2YgQmlzb24uICAqLworCisvKiBUb2tlbnMuICAqLworI2lmbmRl
ZiBZWVRPS0VOVFlQRQorIyBkZWZpbmUgWVlUT0tFTlRZUEUKKyAgIC8qIFB1dCB0aGUgdG9rZW5z
IGludG8gdGhlIHN5bWJvbCB0YWJsZSwgc28gdGhhdCBHREIgYW5kIG90aGVyIGRlYnVnZ2Vycwor
ICAgICAga25vdyBhYm91dCB0aGVtLiAgKi8KKyAgIGVudW0geXl0b2tlbnR5cGUgeworICAgICBJ
TlZBUklBTlQgPSAyNTgsCisgICAgIEhJR0hfUFJFQ0lTSU9OID0gMjU5LAorICAgICBNRURJVU1f
UFJFQ0lTSU9OID0gMjYwLAorICAgICBMT1dfUFJFQ0lTSU9OID0gMjYxLAorICAgICBQUkVDSVNJ
T04gPSAyNjIsCisgICAgIEFUVFJJQlVURSA9IDI2MywKKyAgICAgQ09OU1RfUVVBTCA9IDI2NCwK
KyAgICAgQk9PTF9UWVBFID0gMjY1LAorICAgICBGTE9BVF9UWVBFID0gMjY2LAorICAgICBJTlRf
VFlQRSA9IDI2NywKKyAgICAgQlJFQUsgPSAyNjgsCisgICAgIENPTlRJTlVFID0gMjY5LAorICAg
ICBETyA9IDI3MCwKKyAgICAgRUxTRSA9IDI3MSwKKyAgICAgRk9SID0gMjcyLAorICAgICBJRiA9
IDI3MywKKyAgICAgRElTQ0FSRCA9IDI3NCwKKyAgICAgUkVUVVJOID0gMjc1LAorICAgICBCVkVD
MiA9IDI3NiwKKyAgICAgQlZFQzMgPSAyNzcsCisgICAgIEJWRUM0ID0gMjc4LAorICAgICBJVkVD
MiA9IDI3OSwKKyAgICAgSVZFQzMgPSAyODAsCisgICAgIElWRUM0ID0gMjgxLAorICAgICBWRUMy
ID0gMjgyLAorICAgICBWRUMzID0gMjgzLAorICAgICBWRUM0ID0gMjg0LAorICAgICBNQVRSSVgy
ID0gMjg1LAorICAgICBNQVRSSVgzID0gMjg2LAorICAgICBNQVRSSVg0ID0gMjg3LAorICAgICBJ
Tl9RVUFMID0gMjg4LAorICAgICBPVVRfUVVBTCA9IDI4OSwKKyAgICAgSU5PVVRfUVVBTCA9IDI5
MCwKKyAgICAgVU5JRk9STSA9IDI5MSwKKyAgICAgVkFSWUlORyA9IDI5MiwKKyAgICAgU1RSVUNU
ID0gMjkzLAorICAgICBWT0lEX1RZUEUgPSAyOTQsCisgICAgIFdISUxFID0gMjk1LAorICAgICBT
QU1QTEVSMkQgPSAyOTYsCisgICAgIFNBTVBMRVJDVUJFID0gMjk3LAorICAgICBJREVOVElGSUVS
ID0gMjk4LAorICAgICBUWVBFX05BTUUgPSAyOTksCisgICAgIEZMT0FUQ09OU1RBTlQgPSAzMDAs
CisgICAgIElOVENPTlNUQU5UID0gMzAxLAorICAgICBCT09MQ09OU1RBTlQgPSAzMDIsCisgICAg
IEZJRUxEX1NFTEVDVElPTiA9IDMwMywKKyAgICAgTEVGVF9PUCA9IDMwNCwKKyAgICAgUklHSFRf
T1AgPSAzMDUsCisgICAgIElOQ19PUCA9IDMwNiwKKyAgICAgREVDX09QID0gMzA3LAorICAgICBM
RV9PUCA9IDMwOCwKKyAgICAgR0VfT1AgPSAzMDksCisgICAgIEVRX09QID0gMzEwLAorICAgICBO
RV9PUCA9IDMxMSwKKyAgICAgQU5EX09QID0gMzEyLAorICAgICBPUl9PUCA9IDMxMywKKyAgICAg
WE9SX09QID0gMzE0LAorICAgICBNVUxfQVNTSUdOID0gMzE1LAorICAgICBESVZfQVNTSUdOID0g
MzE2LAorICAgICBBRERfQVNTSUdOID0gMzE3LAorICAgICBNT0RfQVNTSUdOID0gMzE4LAorICAg
ICBMRUZUX0FTU0lHTiA9IDMxOSwKKyAgICAgUklHSFRfQVNTSUdOID0gMzIwLAorICAgICBBTkRf
QVNTSUdOID0gMzIxLAorICAgICBYT1JfQVNTSUdOID0gMzIyLAorICAgICBPUl9BU1NJR04gPSAz
MjMsCisgICAgIFNVQl9BU1NJR04gPSAzMjQsCisgICAgIExFRlRfUEFSRU4gPSAzMjUsCisgICAg
IFJJR0hUX1BBUkVOID0gMzI2LAorICAgICBMRUZUX0JSQUNLRVQgPSAzMjcsCisgICAgIFJJR0hU
X0JSQUNLRVQgPSAzMjgsCisgICAgIExFRlRfQlJBQ0UgPSAzMjksCisgICAgIFJJR0hUX0JSQUNF
ID0gMzMwLAorICAgICBET1QgPSAzMzEsCisgICAgIENPTU1BID0gMzMyLAorICAgICBDT0xPTiA9
IDMzMywKKyAgICAgRVFVQUwgPSAzMzQsCisgICAgIFNFTUlDT0xPTiA9IDMzNSwKKyAgICAgQkFO
RyA9IDMzNiwKKyAgICAgREFTSCA9IDMzNywKKyAgICAgVElMREUgPSAzMzgsCisgICAgIFBMVVMg
PSAzMzksCisgICAgIFNUQVIgPSAzNDAsCisgICAgIFNMQVNIID0gMzQxLAorICAgICBQRVJDRU5U
ID0gMzQyLAorICAgICBMRUZUX0FOR0xFID0gMzQzLAorICAgICBSSUdIVF9BTkdMRSA9IDM0NCwK
KyAgICAgVkVSVElDQUxfQkFSID0gMzQ1LAorICAgICBDQVJFVCA9IDM0NiwKKyAgICAgQU1QRVJT
QU5EID0gMzQ3LAorICAgICBRVUVTVElPTiA9IDM0OAorICAgfTsKKyNlbmRpZgorLyogVG9rZW5z
LiAgKi8KKyNkZWZpbmUgSU5WQVJJQU5UIDI1OAorI2RlZmluZSBISUdIX1BSRUNJU0lPTiAyNTkK
KyNkZWZpbmUgTUVESVVNX1BSRUNJU0lPTiAyNjAKKyNkZWZpbmUgTE9XX1BSRUNJU0lPTiAyNjEK
KyNkZWZpbmUgUFJFQ0lTSU9OIDI2MgorI2RlZmluZSBBVFRSSUJVVEUgMjYzCisjZGVmaW5lIENP
TlNUX1FVQUwgMjY0CisjZGVmaW5lIEJPT0xfVFlQRSAyNjUKKyNkZWZpbmUgRkxPQVRfVFlQRSAy
NjYKKyNkZWZpbmUgSU5UX1RZUEUgMjY3CisjZGVmaW5lIEJSRUFLIDI2OAorI2RlZmluZSBDT05U
SU5VRSAyNjkKKyNkZWZpbmUgRE8gMjcwCisjZGVmaW5lIEVMU0UgMjcxCisjZGVmaW5lIEZPUiAy
NzIKKyNkZWZpbmUgSUYgMjczCisjZGVmaW5lIERJU0NBUkQgMjc0CisjZGVmaW5lIFJFVFVSTiAy
NzUKKyNkZWZpbmUgQlZFQzIgMjc2CisjZGVmaW5lIEJWRUMzIDI3NworI2RlZmluZSBCVkVDNCAy
NzgKKyNkZWZpbmUgSVZFQzIgMjc5CisjZGVmaW5lIElWRUMzIDI4MAorI2RlZmluZSBJVkVDNCAy
ODEKKyNkZWZpbmUgVkVDMiAyODIKKyNkZWZpbmUgVkVDMyAyODMKKyNkZWZpbmUgVkVDNCAyODQK
KyNkZWZpbmUgTUFUUklYMiAyODUKKyNkZWZpbmUgTUFUUklYMyAyODYKKyNkZWZpbmUgTUFUUklY
NCAyODcKKyNkZWZpbmUgSU5fUVVBTCAyODgKKyNkZWZpbmUgT1VUX1FVQUwgMjg5CisjZGVmaW5l
IElOT1VUX1FVQUwgMjkwCisjZGVmaW5lIFVOSUZPUk0gMjkxCisjZGVmaW5lIFZBUllJTkcgMjky
CisjZGVmaW5lIFNUUlVDVCAyOTMKKyNkZWZpbmUgVk9JRF9UWVBFIDI5NAorI2RlZmluZSBXSElM
RSAyOTUKKyNkZWZpbmUgU0FNUExFUjJEIDI5NgorI2RlZmluZSBTQU1QTEVSQ1VCRSAyOTcKKyNk
ZWZpbmUgSURFTlRJRklFUiAyOTgKKyNkZWZpbmUgVFlQRV9OQU1FIDI5OQorI2RlZmluZSBGTE9B
VENPTlNUQU5UIDMwMAorI2RlZmluZSBJTlRDT05TVEFOVCAzMDEKKyNkZWZpbmUgQk9PTENPTlNU
QU5UIDMwMgorI2RlZmluZSBGSUVMRF9TRUxFQ1RJT04gMzAzCisjZGVmaW5lIExFRlRfT1AgMzA0
CisjZGVmaW5lIFJJR0hUX09QIDMwNQorI2RlZmluZSBJTkNfT1AgMzA2CisjZGVmaW5lIERFQ19P
UCAzMDcKKyNkZWZpbmUgTEVfT1AgMzA4CisjZGVmaW5lIEdFX09QIDMwOQorI2RlZmluZSBFUV9P
UCAzMTAKKyNkZWZpbmUgTkVfT1AgMzExCisjZGVmaW5lIEFORF9PUCAzMTIKKyNkZWZpbmUgT1Jf
T1AgMzEzCisjZGVmaW5lIFhPUl9PUCAzMTQKKyNkZWZpbmUgTVVMX0FTU0lHTiAzMTUKKyNkZWZp
bmUgRElWX0FTU0lHTiAzMTYKKyNkZWZpbmUgQUREX0FTU0lHTiAzMTcKKyNkZWZpbmUgTU9EX0FT
U0lHTiAzMTgKKyNkZWZpbmUgTEVGVF9BU1NJR04gMzE5CisjZGVmaW5lIFJJR0hUX0FTU0lHTiAz
MjAKKyNkZWZpbmUgQU5EX0FTU0lHTiAzMjEKKyNkZWZpbmUgWE9SX0FTU0lHTiAzMjIKKyNkZWZp
bmUgT1JfQVNTSUdOIDMyMworI2RlZmluZSBTVUJfQVNTSUdOIDMyNAorI2RlZmluZSBMRUZUX1BB
UkVOIDMyNQorI2RlZmluZSBSSUdIVF9QQVJFTiAzMjYKKyNkZWZpbmUgTEVGVF9CUkFDS0VUIDMy
NworI2RlZmluZSBSSUdIVF9CUkFDS0VUIDMyOAorI2RlZmluZSBMRUZUX0JSQUNFIDMyOQorI2Rl
ZmluZSBSSUdIVF9CUkFDRSAzMzAKKyNkZWZpbmUgRE9UIDMzMQorI2RlZmluZSBDT01NQSAzMzIK
KyNkZWZpbmUgQ09MT04gMzMzCisjZGVmaW5lIEVRVUFMIDMzNAorI2RlZmluZSBTRU1JQ09MT04g
MzM1CisjZGVmaW5lIEJBTkcgMzM2CisjZGVmaW5lIERBU0ggMzM3CisjZGVmaW5lIFRJTERFIDMz
OAorI2RlZmluZSBQTFVTIDMzOQorI2RlZmluZSBTVEFSIDM0MAorI2RlZmluZSBTTEFTSCAzNDEK
KyNkZWZpbmUgUEVSQ0VOVCAzNDIKKyNkZWZpbmUgTEVGVF9BTkdMRSAzNDMKKyNkZWZpbmUgUklH
SFRfQU5HTEUgMzQ0CisjZGVmaW5lIFZFUlRJQ0FMX0JBUiAzNDUKKyNkZWZpbmUgQ0FSRVQgMzQ2
CisjZGVmaW5lIEFNUEVSU0FORCAzNDcKKyNkZWZpbmUgUVVFU1RJT04gMzQ4CisKKworCisKKyNp
ZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNMQVJFRAordHlw
ZWRlZiB1bmlvbiBZWVNUWVBFCisKK3sKKyAgICBzdHJ1Y3QgeworICAgICAgICBUU291cmNlTG9j
IGxpbmU7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRTdHJpbmcgKnN0cmluZzsKKyAg
ICAgICAgICAgIGZsb2F0IGY7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgIGJvb2wg
YjsKKyAgICAgICAgfTsKKyAgICAgICAgVFN5bWJvbCogc3ltYm9sOworICAgIH0gbGV4OworICAg
IHN0cnVjdCB7CisgICAgICAgIFRTb3VyY2VMb2MgbGluZTsKKyAgICAgICAgVE9wZXJhdG9yIG9w
OworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50ZXJtTm9kZTsK
KyAgICAgICAgICAgIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpcjsKKyAgICAgICAgICAgIFRJbnRl
cm1UeXBlZCogaW50ZXJtVHlwZWROb2RlOworICAgICAgICAgICAgVEludGVybUFnZ3JlZ2F0ZSog
aW50ZXJtQWdncmVnYXRlOworICAgICAgICB9OworICAgICAgICB1bmlvbiB7CisgICAgICAgICAg
ICBUUHVibGljVHlwZSB0eXBlOworICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVjaXNpb247Cisg
ICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKKyAgICAgICAgICAgIFRGdW5jdGlvbiog
ZnVuY3Rpb247CisgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOworICAgICAgICAgICAgVFR5
cGVMaW5lIHR5cGVMaW5lOworICAgICAgICAgICAgVFR5cGVMaXN0KiB0eXBlTGlzdDsKKyAgICAg
ICAgfTsKKyAgICB9IGludGVybTsKK30KKy8qIExpbmUgMTQ4OSBvZiB5YWNjLmMuICAqLworCisJ
WVlTVFlQRTsKKyMgZGVmaW5lIHl5c3R5cGUgWVlTVFlQRSAvKiBvYnNvbGVzY2VudDsgd2lsbCBi
ZSB3aXRoZHJhd24gKi8KKyMgZGVmaW5lIFlZU1RZUEVfSVNfREVDTEFSRUQgMQorIyBkZWZpbmUg
WVlTVFlQRV9JU19UUklWSUFMIDEKKyNlbmRpZgorCisKKwpJbmRleDogU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5jcHAJKHJldmlzaW9uIDc2
MDI1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2ludGVybU91dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDggKzIxLDggQEAKIC8vCiBjbGFzcyBUT3V0cHV0VHJh
dmVyc2VyIDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIgewogcHVibGljOgotICAgIFRPdXRwdXRU
cmF2ZXJzZXIoVEluZm9TaW5rJiBpKSA6IGluZm9TaW5rKGkpIHsgfQotICAgIFRJbmZvU2luayYg
aW5mb1Npbms7CisgICAgVE91dHB1dFRyYXZlcnNlcihUSW5mb1NpbmtCYXNlJiBpKSA6IHNpbmso
aSkgeyB9CisgICAgVEluZm9TaW5rQmFzZSYgc2luazsKIAogcHJvdGVjdGVkOgogICAgIHZvaWQg
dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCopOwpAQCAtNTYsMTQgKzU2LDE0IEBACiAvLyBIZWxw
ZXIgZnVuY3Rpb25zIGZvciBwcmludGluZywgbm90IHBhcnQgb2YgdHJhdmVyc2luZy4KIC8vCiAK
LXZvaWQgT3V0cHV0VHJlZVRleHQoVEluZm9TaW5rJiBpbmZvU2luaywgVEludGVybU5vZGUqIG5v
ZGUsIGNvbnN0IGludCBkZXB0aCkKK3ZvaWQgT3V0cHV0VHJlZVRleHQoVEluZm9TaW5rQmFzZSYg
c2luaywgVEludGVybU5vZGUqIG5vZGUsIGNvbnN0IGludCBkZXB0aCkKIHsKICAgICBpbnQgaTsK
IAotICAgIGluZm9TaW5rLmRlYnVnLmxvY2F0aW9uKG5vZGUtPmdldExpbmUoKSk7CisgICAgc2lu
ay5sb2NhdGlvbihub2RlLT5nZXRMaW5lKCkpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IGRlcHRo
OyArK2kpCi0gICAgICAgIGluZm9TaW5rLmRlYnVnIDw8ICIgICI7CisgICAgICAgIHNpbmsgPDwg
IiAgIjsKIH0KIAogLy8KQEAgLTc3LDIyNiArNzcsMjI2IEBACiAKIHZvaWQgVE91dHB1dFRyYXZl
cnNlcjo6dmlzaXRTeW1ib2woVEludGVybVN5bWJvbCogbm9kZSkKIHsKLSAgICBPdXRwdXRUcmVl
VGV4dChpbmZvU2luaywgbm9kZSwgZGVwdGgpOworICAgIE91dHB1dFRyZWVUZXh0KHNpbmssIG5v
ZGUsIGRlcHRoKTsKIAotICAgIGluZm9TaW5rLmRlYnVnIDw8ICInIiA8PCBub2RlLT5nZXRTeW1i
b2woKSA8PCAiJyAiOwotICAgIGluZm9TaW5rLmRlYnVnIDw8ICIoIiA8PCBub2RlLT5nZXRDb21w
bGV0ZVN0cmluZygpIDw8ICIpXG4iOworICAgIHNpbmsgPDwgIiciIDw8IG5vZGUtPmdldFN5bWJv
bCgpIDw8ICInICI7CisgICAgc2luayA8PCAiKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJpbmco
KSA8PCAiKVxuIjsKIH0KIAogYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEJpbmFyeShWaXNp
dCB2aXNpdCwgVEludGVybUJpbmFyeSogbm9kZSkKIHsKLSAgICBUSW5mb1NpbmsmIG91dCA9IGlu
Zm9TaW5rOworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CiAKICAgICBPdXRwdXRUcmVl
VGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKIAogICAgIHN3aXRjaCAobm9kZS0+Z2V0T3AoKSkgewot
ICAgICAgICBjYXNlIEVPcEFzc2lnbjogICAgICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJt
b3ZlIHNlY29uZCBjaGlsZCB0byBmaXJzdCBjaGlsZCI7ICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BJbml0aWFsaXplOiAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiaW5pdGlh
bGl6ZSBmaXJzdCBjaGlsZCB3aXRoIHNlY29uZCBjaGlsZCI7ICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wQWRkQXNzaWduOiAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgImFkZCBzZWNvbmQg
Y2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVP
cFN1YkFzc2lnbjogICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJzdWJ0cmFjdCBzZWNvbmQg
Y2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNdWxB
c3NpZ246ICAgICAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAibXVsdGlwbHkgc2Vjb25kIGNoaWxk
IGludG8gZmlyc3QgY2hpbGQiOyAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yVGlt
ZXNNYXRyaXhBc3NpZ246ICBvdXQuZGVidWcgPDwgIm1hdHJpeCBtdWx0IHNlY29uZCBjaGlsZCBp
bnRvIGZpcnN0IGNoaWxkIjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2Nh
bGFyQXNzaWduOiAgb3V0LmRlYnVnIDw8ICJ2ZWN0b3Igc2NhbGUgc2Vjb25kIGNoaWxkIGludG8g
Zmlyc3QgY2hpbGQiOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFz
c2lnbjogIG91dC5kZWJ1ZyA8PCAibWF0cml4IHNjYWxlIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0
IGNoaWxkIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246
ICBvdXQuZGVidWcgPDwgIm1hdHJpeCBtdWx0IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxk
IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRGl2QXNzaWduOiAgICAgICAgICAgICAgICBvdXQu
ZGVidWcgPDwgImRpdmlkZSBzZWNvbmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OiAgIG91dC5kZWJ1ZyA8PCAiZGlyZWN0
IGluZGV4IjsgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BJbmRleEluZGlyZWN0OiBvdXQuZGVi
dWcgPDwgImluZGlyZWN0IGluZGV4IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wSW5kZXhEaXJl
Y3RTdHJ1Y3Q6ICAgb3V0LmRlYnVnIDw8ICJkaXJlY3QgaW5kZXggZm9yIHN0cnVjdHVyZSI7ICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZTogb3V0LmRlYnVnIDw8ICJ2ZWN0
b3Igc3dpenpsZSI7IGJyZWFrOworICAgICAgICBjYXNlIEVPcEFzc2lnbjogICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICJtb3ZlIHNlY29uZCBjaGlsZCB0byBmaXJzdCBjaGlsZCI7ICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbml0aWFsaXplOiAgICAgICAgICAgICAgIG91dCA8
PCAiaW5pdGlhbGl6ZSBmaXJzdCBjaGlsZCB3aXRoIHNlY29uZCBjaGlsZCI7ICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQWRkQXNzaWduOiAgICAgICAgICAgICAgICBvdXQgPDwgImFkZCBzZWNv
bmQgY2hpbGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcFN1YkFzc2lnbjogICAgICAgICAgICAgICAgb3V0IDw8ICJzdWJ0cmFjdCBzZWNvbmQgY2hp
bGQgaW50byBmaXJzdCBjaGlsZCI7ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNdWxBc3Np
Z246ICAgICAgICAgICAgICAgIG91dCA8PCAibXVsdGlwbHkgc2Vjb25kIGNoaWxkIGludG8gZmly
c3QgY2hpbGQiOyAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNNYXRyaXhB
c3NpZ246ICBvdXQgPDwgIm1hdHJpeCBtdWx0IHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxk
IjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzU2NhbGFyQXNzaWduOiAgb3V0
IDw8ICJ2ZWN0b3Igc2NhbGUgc2Vjb25kIGNoaWxkIGludG8gZmlyc3QgY2hpbGQiOyBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhckFzc2lnbjogIG91dCA8PCAibWF0cml4
IHNjYWxlIHNlY29uZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wTWF0cml4VGltZXNNYXRyaXhBc3NpZ246ICBvdXQgPDwgIm1hdHJpeCBtdWx0IHNlY29u
ZCBjaGlsZCBpbnRvIGZpcnN0IGNoaWxkIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRGl2QXNz
aWduOiAgICAgICAgICAgICAgICBvdXQgPDwgImRpdmlkZSBzZWNvbmQgY2hpbGQgaW50byBmaXJz
dCBjaGlsZCI7ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEluZGV4RGlyZWN0OiAgIG91
dCA8PCAiZGlyZWN0IGluZGV4IjsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BJbmRleEluZGly
ZWN0OiBvdXQgPDwgImluZGlyZWN0IGluZGV4IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW5k
ZXhEaXJlY3RTdHJ1Y3Q6ICAgb3V0IDw8ICJkaXJlY3QgaW5kZXggZm9yIHN0cnVjdHVyZSI7ICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yU3dpenpsZTogb3V0IDw8ICJ2ZWN0b3Igc3dp
enpsZSI7IGJyZWFrOwogCi0gICAgICAgIGNhc2UgRU9wQWRkOiAgICBvdXQuZGVidWcgPDwgImFk
ZCI7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU3ViOiAgICBv
dXQuZGVidWcgPDwgInN1YnRyYWN0IjsgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wTXVsOiAgICBvdXQuZGVidWcgPDwgImNvbXBvbmVudC13aXNlIG11bHRpcGx5IjsgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wRGl2OiAgICBvdXQuZGVidWcgPDwgImRpdmlkZSI7ICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRXF1YWw6ICAgICAgICAgICAgb3V0
LmRlYnVnIDw8ICJDb21wYXJlIEVxdWFsIjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcE5vdEVxdWFsOiAgICAgICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBOb3QgRXF1
YWwiOyAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAg
ICBvdXQuZGVidWcgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIjsgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46ICAgICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIEdy
ZWF0ZXIgVGhhbiI7ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1
YWw6ICAgIG91dC5kZWJ1ZyA8PCAiQ29tcGFyZSBMZXNzIFRoYW4gb3IgRXF1YWwiOyAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBvdXQuZGVidWcgPDwgIkNvbXBh
cmUgR3JlYXRlciBUaGFuIG9yIEVxdWFsIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQWRkOiAg
ICBvdXQgPDwgImFkZCI7ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RU9wU3ViOiAgICBvdXQgPDwgInN1YnRyYWN0IjsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wTXVsOiAgICBvdXQgPDwgImNvbXBvbmVudC13aXNlIG11bHRpcGx5IjsgYnJl
YWs7CisgICAgICAgIGNhc2UgRU9wRGl2OiAgICBvdXQgPDwgImRpdmlkZSI7ICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRXF1YWw6ICAgICAgICAgICAgb3V0IDw8ICJD
b21wYXJlIEVxdWFsIjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcE5v
dEVxdWFsOiAgICAgICAgIG91dCA8PCAiQ29tcGFyZSBOb3QgRXF1YWwiOyAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAgICBvdXQgPDwgIkNvbXBhcmUg
TGVzcyBUaGFuIjsgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wR3JlYXRlclRo
YW46ICAgICAgb3V0IDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhhbiI7ICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6ICAgIG91dCA8PCAiQ29tcGFyZSBMZXNzIFRo
YW4gb3IgRXF1YWwiOyAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFs
OiBvdXQgPDwgIkNvbXBhcmUgR3JlYXRlciBUaGFuIG9yIEVxdWFsIjsgYnJlYWs7CiAKLSAgICAg
ICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjogb3V0LmRlYnVnIDw8ICJ2ZWN0b3Itc2NhbGUi
OyAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDogb3V0
LmRlYnVnIDw8ICJ2ZWN0b3ItdGltZXMtbWF0cml4IjsgICBicmVhazsKLSAgICAgICAgY2FzZSBF
T3BNYXRyaXhUaW1lc1ZlY3Rvcjogb3V0LmRlYnVnIDw8ICJtYXRyaXgtdGltZXMtdmVjdG9yIjsg
ICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjogb3V0LmRlYnVnIDw8
ICJtYXRyaXgtc2NhbGUiOyAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNYXRyaXhU
aW1lc01hdHJpeDogb3V0LmRlYnVnIDw8ICJtYXRyaXgtbXVsdGlwbHkiOyAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc1NjYWxhcjogb3V0IDw8ICJ2ZWN0b3Itc2NhbGUi
OyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BWZWN0b3JUaW1lc01hdHJpeDogb3V0
IDw8ICJ2ZWN0b3ItdGltZXMtbWF0cml4IjsgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRy
aXhUaW1lc1ZlY3Rvcjogb3V0IDw8ICJtYXRyaXgtdGltZXMtdmVjdG9yIjsgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1NjYWxhcjogb3V0IDw8ICJtYXRyaXgtc2NhbGUiOyAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc01hdHJpeDogb3V0IDw8
ICJtYXRyaXgtbXVsdGlwbHkiOyAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIEVPcExvZ2lj
YWxPcjogIG91dC5kZWJ1ZyA8PCAibG9naWNhbC1vciI7ICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
RU9wTG9naWNhbFhvcjogb3V0LmRlYnVnIDw8ICJsb2dpY2FsLXhvciI7IGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcExvZ2ljYWxBbmQ6IG91dC5kZWJ1ZyA8PCAibG9naWNhbC1hbmQiOyBicmVhazsK
LSAgICAgICAgZGVmYXVsdDogb3V0LmRlYnVnIDw8ICI8dW5rbm93biBvcD4iOworICAgICAgICBj
YXNlIEVPcExvZ2ljYWxPcjogIG91dCA8PCAibG9naWNhbC1vciI7ICAgYnJlYWs7CisgICAgICAg
IGNhc2UgRU9wTG9naWNhbFhvcjogb3V0IDw8ICJsb2dpY2FsLXhvciI7IGJyZWFrOworICAgICAg
ICBjYXNlIEVPcExvZ2ljYWxBbmQ6IG91dCA8PCAibG9naWNhbC1hbmQiOyBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDogb3V0IDw8ICI8dW5rbm93biBvcD4iOwogICAgIH0KIAotICAgIG91dC5kZWJ1
ZyA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIikiOworICAgIG91dCA8
PCAiICgiIDw8IG5vZGUtPmdldENvbXBsZXRlU3RyaW5nKCkgPDwgIikiOwogCi0gICAgb3V0LmRl
YnVnIDw8ICJcbiI7CisgICAgb3V0IDw8ICJcbiI7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
Ym9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFVuYXJ5KFZpc2l0IHZpc2l0LCBUSW50ZXJtVW5h
cnkqIG5vZGUpCiB7Ci0gICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKyAgICBUSW5mb1Np
bmtCYXNlJiBvdXQgPSBzaW5rOwogCiAgICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0
aCk7CiAKICAgICBzd2l0Y2ggKG5vZGUtPmdldE9wKCkpIHsKLSAgICAgICAgY2FzZSBFT3BOZWdh
dGl2ZTogICAgICAgb3V0LmRlYnVnIDw8ICJOZWdhdGUgdmFsdWUiOyAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcE5lZ2F0aXZlOiAgICAgICBvdXQgPDwgIk5lZ2F0ZSB2YWx1ZSI7ICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wVmVjdG9yTG9naWNhbE5vdDoKLSAgICAgICAg
Y2FzZSBFT3BMb2dpY2FsTm90OiAgICAgb3V0LmRlYnVnIDw8ICJOZWdhdGUgY29uZGl0aW9uYWwi
OyAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6ICAgICBvdXQgPDwgIk5lZ2F0
ZSBjb25kaXRpb25hbCI7ICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBFT3BQb3N0SW5jcmVtZW50
OiAgb3V0LmRlYnVnIDw8ICJQb3N0LUluY3JlbWVudCI7ICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEVPcFBvc3REZWNyZW1lbnQ6ICBvdXQuZGVidWcgPDwgIlBvc3QtRGVjcmVtZW50IjsgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUHJlSW5jcmVtZW50OiAgIG91dC5kZWJ1ZyA8PCAi
UHJlLUluY3JlbWVudCI7ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQcmVEZWNyZW1l
bnQ6ICAgb3V0LmRlYnVnIDw8ICJQcmUtRGVjcmVtZW50IjsgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEVPcFBvc3RJbmNyZW1lbnQ6ICBvdXQgPDwgIlBvc3QtSW5jcmVtZW50IjsgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wUG9zdERlY3JlbWVudDogIG91dCA8PCAiUG9zdC1EZWNy
ZW1lbnQiOyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6ICAgb3V0
IDw8ICJQcmUtSW5jcmVtZW50IjsgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFByZURl
Y3JlbWVudDogICBvdXQgPDwgIlByZS1EZWNyZW1lbnQiOyAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgY2FzZSBFT3BDb252SW50VG9Cb29sOiAgb3V0LmRlYnVnIDw8ICJDb252ZXJ0IGludCB0byBi
b29sIjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDpvdXQuZGVidWcg
PDwgIkNvbnZlcnQgZmxvYXQgdG8gYm9vbCI7YnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29udkJv
b2xUb0Zsb2F0Om91dC5kZWJ1ZyA8PCAiQ29udmVydCBib29sIHRvIGZsb2F0IjticmVhazsKLSAg
ICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDogb3V0LmRlYnVnIDw8ICJDb252ZXJ0IGludCB0
byBmbG9hdCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvSW50OiBvdXQuZGVi
dWcgPDwgIkNvbnZlcnQgZmxvYXQgdG8gaW50IjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ29u
dkJvb2xUb0ludDogIG91dC5kZWJ1ZyA8PCAiQ29udmVydCBib29sIHRvIGludCI7ICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BDb252SW50VG9Cb29sOiAgb3V0IDw8ICJDb252ZXJ0IGludCB0byBi
b29sIjsgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvQm9vbDpvdXQgPDwgIkNv
bnZlcnQgZmxvYXQgdG8gYm9vbCI7YnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0Zs
b2F0Om91dCA8PCAiQ29udmVydCBib29sIHRvIGZsb2F0IjticmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb252SW50VG9GbG9hdDogb3V0IDw8ICJDb252ZXJ0IGludCB0byBmbG9hdCI7IGJyZWFrOwor
ICAgICAgICBjYXNlIEVPcENvbnZGbG9hdFRvSW50OiBvdXQgPDwgIkNvbnZlcnQgZmxvYXQgdG8g
aW50IjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQ29udkJvb2xUb0ludDogIG91dCA8PCAiQ29u
dmVydCBib29sIHRvIGludCI7ICBicmVhazsKIAotICAgICAgICBjYXNlIEVPcFJhZGlhbnM6ICAg
ICAgICBvdXQuZGVidWcgPDwgInJhZGlhbnMiOyAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IGNhc2UgRU9wRGVncmVlczogICAgICAgIG91dC5kZWJ1ZyA8PCAiZGVncmVlcyI7ICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BTaW46ICAgICAgICAgICAgb3V0LmRlYnVnIDw8
ICJzaW5lIjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvczogICAg
ICAgICAgICBvdXQuZGVidWcgPDwgImNvc2luZSI7ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgRU9wVGFuOiAgICAgICAgICAgIG91dC5kZWJ1ZyA8PCAidGFuZ2VudCI7ICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BBc2luOiAgICAgICAgICAgb3V0LmRlYnVn
IDw8ICJhcmMgc2luZSI7ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFjb3M6
ICAgICAgICAgICBvdXQuZGVidWcgPDwgImFyYyBjb3NpbmUiOyAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgRU9wQXRhbjogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYXJjIHRhbmdlbnQi
OyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BSYWRpYW5zOiAgICAgICAgb3V0IDw8
ICJyYWRpYW5zIjsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcERlZ3JlZXM6
ICAgICAgICBvdXQgPDwgImRlZ3JlZXMiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgRU9wU2luOiAgICAgICAgICAgIG91dCA8PCAic2luZSI7ICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BDb3M6ICAgICAgICAgICAgb3V0IDw8ICJjb3NpbmUiOyAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFRhbjogICAgICAgICAgICBvdXQgPDwg
InRhbmdlbnQiOyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wQXNpbjogICAg
ICAgICAgIG91dCA8PCAiYXJjIHNpbmUiOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BBY29zOiAgICAgICAgICAgb3V0IDw8ICJhcmMgY29zaW5lIjsgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVPcEF0YW46ICAgICAgICAgICBvdXQgPDwgImFyYyB0YW5nZW50Ijsg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBFT3BFeHA6ICAgICAgICAgICAgb3V0LmRl
YnVnIDw8ICJleHAiOyAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcExv
ZzogICAgICAgICAgICBvdXQuZGVidWcgPDwgImxvZyI7ICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgRU9wRXhwMjogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiZXhwMiI7ICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BMb2cyOiAgICAgICAgICAgb3V0
LmRlYnVnIDw8ICJsb2cyIjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVP
cFNxcnQ6ICAgICAgICAgICBvdXQuZGVidWcgPDwgInNxcnQiOyAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgRU9wSW52ZXJzZVNxcnQ6ICAgIG91dC5kZWJ1ZyA8PCAiaW52ZXJz
ZSBzcXJ0IjsgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BFeHA6ICAgICAgICAgICAg
b3V0IDw8ICJleHAiOyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExv
ZzogICAgICAgICAgICBvdXQgPDwgImxvZyI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgRU9wRXhwMjogICAgICAgICAgIG91dCA8PCAiZXhwMiI7ICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMb2cyOiAgICAgICAgICAgb3V0IDw8ICJsb2cyIjsg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFNxcnQ6ICAgICAgICAgICBv
dXQgPDwgInNxcnQiOyAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wSW52
ZXJzZVNxcnQ6ICAgIG91dCA8PCAiaW52ZXJzZSBzcXJ0IjsgICAgICAgICBicmVhazsKIAotICAg
ICAgICBjYXNlIEVPcEFiczogICAgICAgICAgICBvdXQuZGVidWcgPDwgIkFic29sdXRlIHZhbHVl
IjsgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wU2lnbjogICAgICAgICAgIG91dC5kZWJ1
ZyA8PCAiU2lnbiI7ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BGbG9v
cjogICAgICAgICAgb3V0LmRlYnVnIDw8ICJGbG9vciI7ICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcENlaWw6ICAgICAgICAgICBvdXQuZGVidWcgPDwgIkNlaWxpbmciOyAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wRnJhY3Q6ICAgICAgICAgIG91dC5k
ZWJ1ZyA8PCAiRnJhY3Rpb24iOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BB
YnM6ICAgICAgICAgICAgb3V0IDw8ICJBYnNvbHV0ZSB2YWx1ZSI7ICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVPcFNpZ246ICAgICAgICAgICBvdXQgPDwgIlNpZ24iOyAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRmxvb3I6ICAgICAgICAgIG91dCA8PCAiRmxvb3Ii
OyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDZWlsOiAgICAgICAgICAg
b3V0IDw8ICJDZWlsaW5nIjsgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcEZy
YWN0OiAgICAgICAgICBvdXQgPDwgIkZyYWN0aW9uIjsgICAgICAgICAgICAgYnJlYWs7CiAKLSAg
ICAgICAgY2FzZSBFT3BMZW5ndGg6ICAgICAgICAgb3V0LmRlYnVnIDw8ICJsZW5ndGgiOyAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogICAgICBvdXQuZGVi
dWcgPDwgIm5vcm1hbGl6ZSI7ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAvLwljYXNl
IEVPcERQZHg6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImRQZHgiOyAgICAgICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAvLwljYXNlIEVPcERQZHk6ICAgICAg
ICAgICBvdXQuZGVidWcgPDwgImRQZHkiOyAgICAgICAgICAgICAgICAgYnJlYWs7ICAgCi0gICAg
ICAgICAgICAvLwljYXNlIEVPcEZ3aWR0aDogICAgICAgICBvdXQuZGVidWcgPDwgImZ3aWR0aCI7
ICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgIAorICAgICAgICBjYXNlIEVP
cExlbmd0aDogICAgICAgICBvdXQgPDwgImxlbmd0aCI7ICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wTm9ybWFsaXplOiAgICAgIG91dCA8PCAibm9ybWFsaXplIjsgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIC8vCWNhc2UgRU9wRFBkeDogICAgICAgICAgIG91dCA8
PCAiZFBkeCI7ICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vCWNhc2UgRU9wRFBkeTogICAgICAgICAgIG91dCA8PCAiZFBkeSI7ICAgICAgICAgICAg
ICAgICBicmVhazsgICAKKyAgICAgICAgICAgIC8vCWNhc2UgRU9wRndpZHRoOiAgICAgICAgIG91
dCA8PCAiZndpZHRoIjsgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgCiAK
LSAgICAgICAgY2FzZSBFT3BBbnk6ICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJhbnkiOyAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEFsbDogICAgICAgICAgICBvdXQu
ZGVidWcgPDwgImFsbCI7ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9w
QW55OiAgICAgICAgICAgIG91dCA8PCAiYW55IjsgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BBbGw6ICAgICAgICAgICAgb3V0IDw8ICJhbGwiOyAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogCi0gICAgICAgIGRlZmF1bHQ6IG91dC5kZWJ1Zy5tZXNzYWdlKEVQcmVmaXhF
cnJvciwgIkJhZCB1bmFyeSBvcCIpOworICAgICAgICBkZWZhdWx0OiBvdXQubWVzc2FnZShFUHJl
Zml4RXJyb3IsICJCYWQgdW5hcnkgb3AiKTsKICAgICB9CiAKLSAgICBvdXQuZGVidWcgPDwgIiAo
IiA8PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKKyAgICBvdXQgPDwgIiAoIiA8
PCBub2RlLT5nZXRDb21wbGV0ZVN0cmluZygpIDw8ICIpIjsKIAotICAgIG91dC5kZWJ1ZyA8PCAi
XG4iOworICAgIG91dCA8PCAiXG4iOwogCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKIGJvb2wgVE91
dHB1dFRyYXZlcnNlcjo6dmlzaXRBZ2dyZWdhdGUoVmlzaXQgdmlzaXQsIFRJbnRlcm1BZ2dyZWdh
dGUqIG5vZGUpCiB7Ci0gICAgVEluZm9TaW5rJiBvdXQgPSBpbmZvU2luazsKKyAgICBUSW5mb1Np
bmtCYXNlJiBvdXQgPSBzaW5rOwogCiAgICAgaWYgKG5vZGUtPmdldE9wKCkgPT0gRU9wTnVsbCkg
ewotICAgICAgICBvdXQuZGVidWcubWVzc2FnZShFUHJlZml4RXJyb3IsICJub2RlIGlzIHN0aWxs
IEVPcE51bGwhIik7CisgICAgICAgIG91dC5tZXNzYWdlKEVQcmVmaXhFcnJvciwgIm5vZGUgaXMg
c3RpbGwgRU9wTnVsbCEiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiAgICAgT3V0
cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CiAKICAgICBzd2l0Y2ggKG5vZGUtPmdldE9w
KCkpIHsKLSAgICAgICAgY2FzZSBFT3BTZXF1ZW5jZTogICAgICBvdXQuZGVidWcgPDwgIlNlcXVl
bmNlXG4iOyByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBFT3BDb21tYTogICAgICAgICBvdXQu
ZGVidWcgPDwgIkNvbW1hXG4iOyByZXR1cm4gdHJ1ZTsKLSAgICAgICAgY2FzZSBFT3BGdW5jdGlv
bjogICAgICBvdXQuZGVidWcgPDwgIkZ1bmN0aW9uIERlZmluaXRpb246ICIgPDwgbm9kZS0+Z2V0
TmFtZSgpOyBicmVhazsKLSAgICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6ICBvdXQuZGVidWcg
PDwgIkZ1bmN0aW9uIENhbGw6ICIgPDwgbm9kZS0+Z2V0TmFtZSgpOyBicmVhazsKLSAgICAgICAg
Y2FzZSBFT3BQYXJhbWV0ZXJzOiAgICBvdXQuZGVidWcgPDwgIkZ1bmN0aW9uIFBhcmFtZXRlcnM6
ICI7ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BTZXF1ZW5jZTogICAgICBv
dXQgPDwgIlNlcXVlbmNlXG4iOyByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBFT3BDb21tYTog
ICAgICAgICBvdXQgPDwgIkNvbW1hXG4iOyByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBFT3BG
dW5jdGlvbjogICAgICBvdXQgPDwgIkZ1bmN0aW9uIERlZmluaXRpb246ICIgPDwgbm9kZS0+Z2V0
TmFtZSgpOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BGdW5jdGlvbkNhbGw6ICBvdXQgPDwgIkZ1
bmN0aW9uIENhbGw6ICIgPDwgbm9kZS0+Z2V0TmFtZSgpOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BQYXJhbWV0ZXJzOiAgICBvdXQgPDwgIkZ1bmN0aW9uIFBhcmFtZXRlcnM6ICI7ICAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEZsb2F0OiBvdXQuZGVidWcg
PDwgIkNvbnN0cnVjdCBmbG9hdCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZl
YzI6ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCB2ZWMyIjsgIGJyZWFrOwotICAgICAgICBjYXNl
IEVPcENvbnN0cnVjdFZlYzM6ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCB2ZWMzIjsgIGJyZWFr
OwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFZlYzQ6ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVj
dCB2ZWM0IjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJvb2w6ICBvdXQuZGVi
dWcgPDwgIkNvbnN0cnVjdCBib29sIjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVj
dEJWZWMyOiBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBidmVjMiI7IGJyZWFrOwotICAgICAgICBj
YXNlIEVPcENvbnN0cnVjdEJWZWMzOiBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBidmVjMyI7IGJy
ZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEJWZWM0OiBvdXQuZGVidWcgPDwgIkNvbnN0
cnVjdCBidmVjNCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdEludDogICBvdXQu
ZGVidWcgPDwgIkNvbnN0cnVjdCBpbnQiOyAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0
cnVjdElWZWMyOiBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBpdmVjMiI7IGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcENvbnN0cnVjdElWZWMzOiBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBpdmVjMyI7
IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdElWZWM0OiBvdXQuZGVidWcgPDwgIkNv
bnN0cnVjdCBpdmVjNCI7IGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDI6ICBv
dXQuZGVidWcgPDwgIkNvbnN0cnVjdCBtYXQyIjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENv
bnN0cnVjdE1hdDM6ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBtYXQzIjsgIGJyZWFrOwotICAg
ICAgICBjYXNlIEVPcENvbnN0cnVjdE1hdDQ6ICBvdXQuZGVidWcgPDwgIkNvbnN0cnVjdCBtYXQ0
IjsgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENvbnN0cnVjdFN0cnVjdDogIG91dC5kZWJ1ZyA8
PCAiQ29uc3RydWN0IHN0cnVjdHVyZSI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1
Y3RGbG9hdDogb3V0IDw8ICJDb25zdHJ1Y3QgZmxvYXQiOyBicmVhazsKKyAgICAgICAgY2FzZSBF
T3BDb25zdHJ1Y3RWZWMyOiAgb3V0IDw8ICJDb25zdHJ1Y3QgdmVjMiI7ICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWMzOiAgb3V0IDw8ICJDb25zdHJ1Y3QgdmVjMyI7ICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RWZWM0OiAgb3V0IDw8ICJDb25zdHJ1Y3QgdmVj
NCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCb29sOiAgb3V0IDw8ICJDb25z
dHJ1Y3QgYm9vbCI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RCVmVjMjogb3V0
IDw8ICJDb25zdHJ1Y3QgYnZlYzIiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RC
VmVjMzogb3V0IDw8ICJDb25zdHJ1Y3QgYnZlYzMiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BD
b25zdHJ1Y3RCVmVjNDogb3V0IDw8ICJDb25zdHJ1Y3QgYnZlYzQiOyBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BDb25zdHJ1Y3RJbnQ6ICAgb3V0IDw8ICJDb25zdHJ1Y3QgaW50IjsgICBicmVhazsK
KyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMjogb3V0IDw8ICJDb25zdHJ1Y3QgaXZlYzIi
OyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjMzogb3V0IDw8ICJDb25zdHJ1
Y3QgaXZlYzMiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RJVmVjNDogb3V0IDw8
ICJDb25zdHJ1Y3QgaXZlYzQiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RNYXQy
OiAgb3V0IDw8ICJDb25zdHJ1Y3QgbWF0MiI7ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BDb25z
dHJ1Y3RNYXQzOiAgb3V0IDw8ICJDb25zdHJ1Y3QgbWF0MyI7ICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFT3BDb25zdHJ1Y3RNYXQ0OiAgb3V0IDw8ICJDb25zdHJ1Y3QgbWF0NCI7ICBicmVhazsKKyAg
ICAgICAgY2FzZSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q6ICBvdXQgPDwgIkNvbnN0cnVjdCBzdHJ1Y3R1
cmUiOyAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjogICAgICAgICBvdXQuZGVi
dWcgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIjsgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW46ICAgICAgb3V0LmRlYnVnIDw8ICJDb21wYXJlIEdyZWF0ZXIgVGhh
biI7ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6ICAgIG91
dC5kZWJ1ZyA8PCAiQ29tcGFyZSBMZXNzIFRoYW4gb3IgRXF1YWwiOyAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBvdXQuZGVidWcgPDwgIkNvbXBhcmUgR3JlYXRl
ciBUaGFuIG9yIEVxdWFsIjsgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wVmVjdG9yRXF1YWw6ICAg
ICAgb3V0LmRlYnVnIDw8ICJFcXVhbCI7ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcFZlY3Rvck5vdEVxdWFsOiAgIG91dC5kZWJ1ZyA8PCAiTm90RXF1YWwi
OyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BMZXNzVGhhbjog
ICAgICAgICBvdXQgPDwgIkNvbXBhcmUgTGVzcyBUaGFuIjsgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wR3JlYXRlclRoYW46ICAgICAgb3V0IDw8ICJDb21wYXJlIEdyZWF0ZXIg
VGhhbiI7ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6ICAg
IG91dCA8PCAiQ29tcGFyZSBMZXNzIFRoYW4gb3IgRXF1YWwiOyAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFT3BHcmVhdGVyVGhhbkVxdWFsOiBvdXQgPDwgIkNvbXBhcmUgR3JlYXRlciBUaGFuIG9y
IEVxdWFsIjsgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wVmVjdG9yRXF1YWw6ICAgICAgb3V0IDw8
ICJFcXVhbCI7ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVP
cFZlY3Rvck5vdEVxdWFsOiAgIG91dCA8PCAiTm90RXF1YWwiOyAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKIAotICAgICAgICBjYXNlIEVPcE1vZDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAi
bW9kIjsgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BQb3c6ICAgICAgICAgICBvdXQu
ZGVidWcgPDwgInBvdyI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wTW9kOiAgICAg
ICAgICAgb3V0IDw8ICJtb2QiOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFBvdzog
ICAgICAgICAgIG91dCA8PCAicG93IjsgICAgICAgICBicmVhazsKIAotICAgICAgICBjYXNlIEVP
cEF0YW46ICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiYXJjIHRhbmdlbnQiOyBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BBdGFuOiAgICAgICAgICBvdXQgPDwgImFyYyB0YW5nZW50IjsgYnJlYWs7CiAK
LSAgICAgICAgY2FzZSBFT3BNaW46ICAgICAgICAgICBvdXQuZGVidWcgPDwgIm1pbiI7ICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wTWF4OiAgICAgICAgICAgb3V0LmRlYnVnIDw8ICJt
YXgiOyAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcENsYW1wOiAgICAgICAgIG91dC5k
ZWJ1ZyA8PCAiY2xhbXAiOyAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BNaXg6ICAgICAg
ICAgICBvdXQuZGVidWcgPDwgIm1peCI7ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9w
U3RlcDogICAgICAgICAgb3V0LmRlYnVnIDw8ICJzdGVwIjsgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEVPcFNtb290aFN0ZXA6ICAgIG91dC5kZWJ1ZyA8PCAic21vb3Roc3RlcCI7ICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BNaW46ICAgICAgICAgICBvdXQgPDwgIm1pbiI7ICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRU9wTWF4OiAgICAgICAgICAgb3V0IDw8ICJtYXgiOyAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcENsYW1wOiAgICAgICAgIG91dCA8PCAiY2xhbXAi
OyAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BNaXg6ICAgICAgICAgICBvdXQgPDwgIm1p
eCI7ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wU3RlcDogICAgICAgICAgb3V0IDw8
ICJzdGVwIjsgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFNtb290aFN0ZXA6ICAgIG91
dCA8PCAic21vb3Roc3RlcCI7ICBicmVhazsKIAotICAgICAgICBjYXNlIEVPcERpc3RhbmNlOiAg
ICAgIG91dC5kZWJ1ZyA8PCAiZGlzdGFuY2UiOyAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBFT3BEb3Q6ICAgICAgICAgICBvdXQuZGVidWcgPDwgImRvdC1wcm9kdWN0IjsgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQ3Jvc3M6ICAgICAgICAgb3V0LmRlYnVn
IDw8ICJjcm9zcy1wcm9kdWN0IjsgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVPcEZh
Y2VGb3J3YXJkOiAgIG91dC5kZWJ1ZyA8PCAiZmFjZS1mb3J3YXJkIjsgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBFT3BSZWZsZWN0OiAgICAgICBvdXQuZGVidWcgPDwgInJlZmxlY3Qi
OyAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wUmVmcmFjdDogICAgICAg
b3V0LmRlYnVnIDw8ICJyZWZyYWN0IjsgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEVPcE11bDogICAgICAgICAgIG91dC5kZWJ1ZyA8PCAiY29tcG9uZW50LXdpc2UgbXVsdGlw
bHkiOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BEaXN0YW5jZTogICAgICBvdXQgPDwgImRpc3Rh
bmNlIjsgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wRG90OiAgICAgICAg
ICAgb3V0IDw8ICJkb3QtcHJvZHVjdCI7ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcENyb3NzOiAgICAgICAgIG91dCA8PCAiY3Jvc3MtcHJvZHVjdCI7ICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBFT3BGYWNlRm9yd2FyZDogICBvdXQgPDwgImZhY2UtZm9yd2FyZCI7
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRU9wUmVmbGVjdDogICAgICAgb3V0IDw8
ICJyZWZsZWN0IjsgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVPcFJlZnJh
Y3Q6ICAgICAgIG91dCA8PCAicmVmcmFjdCI7ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBFT3BNdWw6ICAgICAgICAgICBvdXQgPDwgImNvbXBvbmVudC13aXNlIG11bHRpcGx5
IjsgYnJlYWs7CiAKLSAgICAgICAgZGVmYXVsdDogb3V0LmRlYnVnLm1lc3NhZ2UoRVByZWZpeEVy
cm9yLCAiQmFkIGFnZ3JlZ2F0aW9uIG9wIik7CisgICAgICAgIGRlZmF1bHQ6IG91dC5tZXNzYWdl
KEVQcmVmaXhFcnJvciwgIkJhZCBhZ2dyZWdhdGlvbiBvcCIpOwogICAgIH0KIAogICAgIGlmIChu
b2RlLT5nZXRPcCgpICE9IEVPcFNlcXVlbmNlICYmIG5vZGUtPmdldE9wKCkgIT0gRU9wUGFyYW1l
dGVycykKLSAgICAgICAgb3V0LmRlYnVnIDw8ICIgKCIgPDwgbm9kZS0+Z2V0Q29tcGxldGVTdHJp
bmcoKSA8PCAiKSI7CisgICAgICAgIG91dCA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBsZXRlU3Ry
aW5nKCkgPDwgIikiOwogCi0gICAgb3V0LmRlYnVnIDw8ICJcbiI7CisgICAgb3V0IDw8ICJcbiI7
CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFNl
bGVjdGlvbihWaXNpdCB2aXNpdCwgVEludGVybVNlbGVjdGlvbiogbm9kZSkKIHsKLSAgICBUSW5m
b1NpbmsmIG91dCA9IGluZm9TaW5rOworICAgIFRJbmZvU2lua0Jhc2UmIG91dCA9IHNpbms7CiAK
ICAgICBPdXRwdXRUcmVlVGV4dChvdXQsIG5vZGUsIGRlcHRoKTsKIAotICAgIG91dC5kZWJ1ZyA8
PCAiVGVzdCBjb25kaXRpb24gYW5kIHNlbGVjdCI7Ci0gICAgb3V0LmRlYnVnIDw8ICIgKCIgPDwg
bm9kZS0+Z2V0Q29tcGxldGVTdHJpbmcoKSA8PCAiKVxuIjsKKyAgICBvdXQgPDwgIlRlc3QgY29u
ZGl0aW9uIGFuZCBzZWxlY3QiOworICAgIG91dCA8PCAiICgiIDw8IG5vZGUtPmdldENvbXBsZXRl
U3RyaW5nKCkgPDwgIilcbiI7CiAKICAgICArK2RlcHRoOwogCi0gICAgT3V0cHV0VHJlZVRleHQo
aW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKLSAgICBvdXQuZGVidWcgPDwgIkNvbmRpdGlvblxuIjsK
KyAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7CisgICAgb3V0IDw8ICJDb25k
aXRpb25cbiI7CiAgICAgbm9kZS0+Z2V0Q29uZGl0aW9uKCktPnRyYXZlcnNlKHRoaXMpOwogCi0g
ICAgT3V0cHV0VHJlZVRleHQoaW5mb1NpbmssIG5vZGUsIGRlcHRoKTsKKyAgICBPdXRwdXRUcmVl
VGV4dChzaW5rLCBub2RlLCBkZXB0aCk7CiAgICAgaWYgKG5vZGUtPmdldFRydWVCbG9jaygpKSB7
Ci0gICAgICAgIG91dC5kZWJ1ZyA8PCAidHJ1ZSBjYXNlXG4iOworICAgICAgICBvdXQgPDwgInRy
dWUgY2FzZVxuIjsKICAgICAgICAgbm9kZS0+Z2V0VHJ1ZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMp
OwogICAgIH0gZWxzZQotICAgICAgICBvdXQuZGVidWcgPDwgInRydWUgY2FzZSBpcyBudWxsXG4i
OworICAgICAgICBvdXQgPDwgInRydWUgY2FzZSBpcyBudWxsXG4iOwogCiAgICAgaWYgKG5vZGUt
PmdldEZhbHNlQmxvY2soKSkgewotICAgICAgICBPdXRwdXRUcmVlVGV4dChpbmZvU2luaywgbm9k
ZSwgZGVwdGgpOwotICAgICAgICBvdXQuZGVidWcgPDwgImZhbHNlIGNhc2VcbiI7CisgICAgICAg
IE91dHB1dFRyZWVUZXh0KHNpbmssIG5vZGUsIGRlcHRoKTsKKyAgICAgICAgb3V0IDw8ICJmYWxz
ZSBjYXNlXG4iOwogICAgICAgICBub2RlLT5nZXRGYWxzZUJsb2NrKCktPnRyYXZlcnNlKHRoaXMp
OwogICAgIH0KIApAQCAtMzA3LDcgKzMwNyw3IEBACiAKIHZvaWQgVE91dHB1dFRyYXZlcnNlcjo6
dmlzaXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKiBub2RlKQogewotICAgIFRJ
bmZvU2luayYgb3V0ID0gaW5mb1Npbms7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2luazsK
IAogICAgIGludCBzaXplID0gbm9kZS0+Z2V0VHlwZSgpLmdldE9iamVjdFNpemUoKTsKIApAQCAt
MzE2LDIzICszMTYsMjMgQEAKICAgICAgICAgc3dpdGNoIChub2RlLT5nZXRVbmlvbkFycmF5UG9p
bnRlcigpW2ldLmdldFR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBFYnRCb29sOgogICAgICAg
ICAgICAgICAgIGlmIChub2RlLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldEJDb25zdCgp
KQotICAgICAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgInRydWUiOworICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgInRydWUiOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgb3V0LmRlYnVnIDw8ICJmYWxzZSI7CisgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiZmFsc2UiOwogCi0gICAgICAgICAgICAgICAgb3V0LmRlYnVnIDw8ICIgKCIgPDwgImNvbnN0
IGJvb2wiIDw8ICIpIjsKLSAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgIlxuIjsKKyAgICAg
ICAgICAgICAgICBvdXQgPDwgIiAoIiA8PCAiY29uc3QgYm9vbCIgPDwgIikiOworICAgICAgICAg
ICAgICAgIG91dCA8PCAiXG4iOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
Y2FzZSBFYnRGbG9hdDoKLSAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgbm9kZS0+Z2V0VW5p
b25BcnJheVBvaW50ZXIoKVtpXS5nZXRGQ29uc3QoKTsKLSAgICAgICAgICAgICAgICBvdXQuZGVi
dWcgPDwgIiAoY29uc3QgZmxvYXQpXG4iOworICAgICAgICAgICAgICAgIG91dCA8PCBub2RlLT5n
ZXRVbmlvbkFycmF5UG9pbnRlcigpW2ldLmdldEZDb25zdCgpOworICAgICAgICAgICAgICAgIG91
dCA8PCAiIChjb25zdCBmbG9hdClcbiI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIEVidEludDoKLSAgICAgICAgICAgICAgICBvdXQuZGVidWcgPDwgbm9kZS0+Z2V0
VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRJQ29uc3QoKTsKLSAgICAgICAgICAgICAgICBvdXQu
ZGVidWcgPDwgIiAoY29uc3QgaW50KVxuIjsKKyAgICAgICAgICAgICAgICBvdXQgPDwgbm9kZS0+
Z2V0VW5pb25BcnJheVBvaW50ZXIoKVtpXS5nZXRJQ29uc3QoKTsKKyAgICAgICAgICAgICAgICBv
dXQgPDwgIiAoY29uc3QgaW50KVxuIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgb3V0LmluZm8ubWVzc2FnZShFUHJlZml4SW50
ZXJuYWxFcnJvciwgIlVua25vd24gY29uc3RhbnQiLCBub2RlLT5nZXRMaW5lKCkpOworICAgICAg
ICAgICAgICAgIG91dC5tZXNzYWdlKEVQcmVmaXhJbnRlcm5hbEVycm9yLCAiVW5rbm93biBjb25z
dGFudCIsIG5vZGUtPmdldExpbmUoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICB9CkBAIC0zNDAsMzUgKzM0MCwzNSBAQAogCiBib29sIFRPdXRwdXRUcmF2ZXJzZXI6
OnZpc2l0TG9vcChWaXNpdCB2aXNpdCwgVEludGVybUxvb3AqIG5vZGUpCiB7Ci0gICAgVEluZm9T
aW5rJiBvdXQgPSBpbmZvU2luazsKKyAgICBUSW5mb1NpbmtCYXNlJiBvdXQgPSBzaW5rOwogCiAg
ICAgT3V0cHV0VHJlZVRleHQob3V0LCBub2RlLCBkZXB0aCk7CiAKLSAgICBvdXQuZGVidWcgPDwg
Ikxvb3Agd2l0aCBjb25kaXRpb24gIjsKLSAgICBpZiAoISBub2RlLT50ZXN0Rmlyc3QoKSkKLSAg
ICAgICAgb3V0LmRlYnVnIDw8ICJub3QgIjsKLSAgICBvdXQuZGVidWcgPDwgInRlc3RlZCBmaXJz
dFxuIjsKKyAgICBvdXQgPDwgIkxvb3Agd2l0aCBjb25kaXRpb24gIjsKKyAgICBpZiAobm9kZS0+
Z2V0VHlwZSgpID09IEVMb29wRG9XaGlsZSkKKyAgICAgICAgb3V0IDw8ICJub3QgIjsKKyAgICBv
dXQgPDwgInRlc3RlZCBmaXJzdFxuIjsKIAogICAgICsrZGVwdGg7CiAKLSAgICBPdXRwdXRUcmVl
VGV4dChpbmZvU2luaywgbm9kZSwgZGVwdGgpOwotICAgIGlmIChub2RlLT5nZXRUZXN0KCkpIHsK
LSAgICAgICAgb3V0LmRlYnVnIDw8ICJMb29wIENvbmRpdGlvblxuIjsKLSAgICAgICAgbm9kZS0+
Z2V0VGVzdCgpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2Rl
LCBkZXB0aCk7CisgICAgaWYgKG5vZGUtPmdldENvbmRpdGlvbigpKSB7CisgICAgICAgIG91dCA8
PCAiTG9vcCBDb25kaXRpb25cbiI7CisgICAgICAgIG5vZGUtPmdldENvbmRpdGlvbigpLT50cmF2
ZXJzZSh0aGlzKTsKICAgICB9IGVsc2UKLSAgICAgICAgb3V0LmRlYnVnIDw8ICJObyBsb29wIGNv
bmRpdGlvblxuIjsKKyAgICAgICAgb3V0IDw8ICJObyBsb29wIGNvbmRpdGlvblxuIjsKIAotICAg
IE91dHB1dFRyZWVUZXh0KGluZm9TaW5rLCBub2RlLCBkZXB0aCk7CisgICAgT3V0cHV0VHJlZVRl
eHQoc2luaywgbm9kZSwgZGVwdGgpOwogICAgIGlmIChub2RlLT5nZXRCb2R5KCkpIHsKLSAgICAg
ICAgb3V0LmRlYnVnIDw8ICJMb29wIEJvZHlcbiI7CisgICAgICAgIG91dCA8PCAiTG9vcCBCb2R5
XG4iOwogICAgICAgICBub2RlLT5nZXRCb2R5KCktPnRyYXZlcnNlKHRoaXMpOwogICAgIH0gZWxz
ZQotICAgICAgICBvdXQuZGVidWcgPDwgIk5vIGxvb3AgYm9keVxuIjsKKyAgICAgICAgb3V0IDw8
ICJObyBsb29wIGJvZHlcbiI7CiAKLSAgICBpZiAobm9kZS0+Z2V0VGVybWluYWwoKSkgewotICAg
ICAgICBPdXRwdXRUcmVlVGV4dChpbmZvU2luaywgbm9kZSwgZGVwdGgpOwotICAgICAgICBvdXQu
ZGVidWcgPDwgIkxvb3AgVGVybWluYWwgRXhwcmVzc2lvblxuIjsKLSAgICAgICAgbm9kZS0+Z2V0
VGVybWluYWwoKS0+dHJhdmVyc2UodGhpcyk7CisgICAgaWYgKG5vZGUtPmdldEV4cHJlc3Npb24o
KSkgeworICAgICAgICBPdXRwdXRUcmVlVGV4dChzaW5rLCBub2RlLCBkZXB0aCk7CisgICAgICAg
IG91dCA8PCAiTG9vcCBUZXJtaW5hbCBFeHByZXNzaW9uXG4iOworICAgICAgICBub2RlLT5nZXRF
eHByZXNzaW9uKCktPnRyYXZlcnNlKHRoaXMpOwogICAgIH0KIAogICAgIC0tZGVwdGg7CkBAIC0z
NzgsMjUgKzM3OCwyNSBAQAogCiBib29sIFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0QnJhbmNoKFZp
c2l0IHZpc2l0LCBUSW50ZXJtQnJhbmNoKiBub2RlKQogewotICAgIFRJbmZvU2luayYgb3V0ID0g
aW5mb1Npbms7CisgICAgVEluZm9TaW5rQmFzZSYgb3V0ID0gc2luazsKIAogICAgIE91dHB1dFRy
ZWVUZXh0KG91dCwgbm9kZSwgZGVwdGgpOwogCiAgICAgc3dpdGNoIChub2RlLT5nZXRGbG93T3Ao
KSkgewotICAgICAgICBjYXNlIEVPcEtpbGw6ICAgICAgb3V0LmRlYnVnIDw8ICJCcmFuY2g6IEtp
bGwiOyAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRU9wQnJlYWs6ICAgICBvdXQuZGVi
dWcgPDwgIkJyYW5jaDogQnJlYWsiOyAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFT3BD
b250aW51ZTogIG91dC5kZWJ1ZyA8PCAiQnJhbmNoOiBDb250aW51ZSI7ICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIEVPcFJldHVybjogICAgb3V0LmRlYnVnIDw8ICJCcmFuY2g6IFJldHVybiI7
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6ICAgICAgICAgICBvdXQuZGVidWcgPDwg
IkJyYW5jaDogVW5rbm93biBCcmFuY2giOyBicmVhazsKKyAgICAgICAgY2FzZSBFT3BLaWxsOiAg
ICAgIG91dCA8PCAiQnJhbmNoOiBLaWxsIjsgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEVPcEJyZWFrOiAgICAgb3V0IDw8ICJCcmFuY2g6IEJyZWFrIjsgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgRU9wQ29udGludWU6ICBvdXQgPDwgIkJyYW5jaDogQ29udGludWUiOyAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFT3BSZXR1cm46ICAgIG91dCA8PCAiQnJhbmNoOiBSZXR1
cm4iOyAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgb3V0IDw8ICJC
cmFuY2g6IFVua25vd24gQnJhbmNoIjsgYnJlYWs7CiAgICAgfQogCiAgICAgaWYgKG5vZGUtPmdl
dEV4cHJlc3Npb24oKSkgewotICAgICAgICBvdXQuZGVidWcgPDwgIiB3aXRoIGV4cHJlc3Npb25c
biI7CisgICAgICAgIG91dCA8PCAiIHdpdGggZXhwcmVzc2lvblxuIjsKICAgICAgICAgKytkZXB0
aDsKICAgICAgICAgbm9kZS0+Z2V0RXhwcmVzc2lvbigpLT50cmF2ZXJzZSh0aGlzKTsKICAgICAg
ICAgLS1kZXB0aDsKICAgICB9IGVsc2UKLSAgICAgICAgb3V0LmRlYnVnIDw8ICJcbiI7CisgICAg
ICAgIG91dCA8PCAiXG4iOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtNDExLDcgKzQxMSw3
IEBACiAgICAgaWYgKHJvb3QgPT0gMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVE91dHB1dFRy
YXZlcnNlciBpdChpbmZvU2luayk7CisgICAgVE91dHB1dFRyYXZlcnNlciBpdChpbmZvU2luay5p
bmZvKTsKIAogICAgIHJvb3QtPnRyYXZlcnNlKCZpdCk7CiB9CkluZGV4OiBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcAkocmV2
aXNpb24gNzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVW5m
b2xkU2VsZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDggQEAKIC8vIFVzZSBvZiB0
aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBj
YW4gYmUKIC8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCiAvLworLy8gVW5mb2xkU2VsZWN0
IGlzIGFuIEFTVCB0cmF2ZXJzZXIgdG8gb3V0cHV0IHRoZSBzZWxlY3Qgb3BlcmF0b3IgPzogYXMg
aWYtZWxzZSBzdGF0ZW1lbnRzCisvLwogCiAjaW5jbHVkZSAiY29tcGlsZXIvVW5mb2xkU2VsZWN0
LmgiCiAKQEAgLTQ0LDcgKzQ2LDcgQEAKICAgICAgICAgICAgICAgICJ9XG4iCiAgICAgICAgICAg
ICAgICAiZWxzZVxuIgogICAgICAgICAgICAgICAgIntcbiI7Ci0gICAgICAgIG5vZGUtPmdldENv
bmRpdGlvbigpLT50cmF2ZXJzZSh0aGlzKTsKKyAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygp
LT50cmF2ZXJzZSh0aGlzKTsKICAgICAgICAgb3V0IDw8ICIgICAgdCIgPDwgaSA8PCAiID0gIjsK
ICAgICAgICAgbm9kZS0+Z2V0RmFsc2VCbG9jaygpLT50cmF2ZXJzZShtT3V0cHV0SExTTCk7CiAg
ICAgICAgIG91dCA8PCAiO1xuIgpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1Bvb2xBbGxvYy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xF
L3NyYy9jb21waWxlci9Qb29sQWxsb2MuaAkocmV2aXNpb24gNzYwMjUpCisrKyBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUG9vbEFsbG9jLmgJKHdvcmtpbmcgY29weSkKQEAg
LTExNSw3ICsxMTUsNyBAQAogLy8KIGNsYXNzIFRQb29sQWxsb2NhdG9yIHsKIHB1YmxpYzoKLSAg
ICBUUG9vbEFsbG9jYXRvcihib29sIGdsb2JhbCA9IGZhbHNlLCBpbnQgZ3Jvd3RoSW5jcmVtZW50
ID0gOCoxMDI0LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVudCA9IDE2KTsKKyAgICBUUG9vbEFsbG9j
YXRvcihpbnQgZ3Jvd3RoSW5jcmVtZW50ID0gOCoxMDI0LCBpbnQgYWxsb2NhdGlvbkFsaWdubWVu
dCA9IDE2KTsKIAogICAgIC8vCiAgICAgLy8gRG9uJ3QgY2FsbCB0aGUgZGVzdHJ1Y3RvciBqdXN0
IHRvIGZyZWUgdXAgdGhlIG1lbW9yeSwgY2FsbCBwb3AoKQpAQCAtMTk0LDcgKzE5NCw2IEBACiAg
ICAgICAgIHJldHVybiBUQWxsb2NhdGlvbjo6b2Zmc2V0QWxsb2NhdGlvbihtZW1vcnkpOwogICAg
IH0KIAotICAgIGJvb2wgZ2xvYmFsOyAgICAgICAgICAgIC8vIHNob3VsZCBiZSB0cnVlIGlmIHRo
aXMgb2JqZWN0IGlzIGdsb2JhbGx5IHNjb3BlZAogICAgIHNpemVfdCBwYWdlU2l6ZTsgICAgICAg
IC8vIGdyYW51bGFyaXR5IG9mIGFsbG9jYXRpb24gZnJvbSB0aGUgT1MKICAgICBzaXplX3QgYWxp
Z25tZW50OyAgICAgICAvLyBhbGwgcmV0dXJuZWQgYWxsb2NhdGlvbnMgd2lsbCBiZSBhbGlnbmVk
IGF0IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgZ3JhbnVsYXJpdHksIHdo
aWNoIHdpbGwgYmUgYSBwb3dlciBvZiAyCkBAIC0yMjAsMTggKzIxOSwxNSBAQAogLy8gZGlmZmVy
ZW50IHRpbWVzLiAgQnV0IGEgc2ltcGxlIHVzZSBpcyB0byBoYXZlIGEgZ2xvYmFsIHBvcAogLy8g
d2l0aCBldmVyeW9uZSB1c2luZyB0aGUgc2FtZSBnbG9iYWwgYWxsb2NhdG9yLgogLy8KLXR5cGVk
ZWYgVFBvb2xBbGxvY2F0b3IqIFBvb2xBbGxvY2F0b3JQb2ludGVyOwogZXh0ZXJuIFRQb29sQWxs
b2NhdG9yJiBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCk7CitleHRlcm4gdm9pZCBTZXRHbG9iYWxQ
b29sQWxsb2NhdG9yKFRQb29sQWxsb2NhdG9yKiBwb29sQWxsb2NhdG9yKTsKICNkZWZpbmUgR2xv
YmFsUG9vbEFsbG9jYXRvciBHZXRHbG9iYWxQb29sQWxsb2NhdG9yKCkKIAotCiBzdHJ1Y3QgVFRo
cmVhZEdsb2JhbFBvb2xzCiB7CiAgICAgVFBvb2xBbGxvY2F0b3IqIGdsb2JhbFBvb2xBbGxvY2F0
b3I7CiB9OwogCi12b2lkIFNldEdsb2JhbFBvb2xBbGxvY2F0b3JQdHIoVFBvb2xBbGxvY2F0b3Iq
IHBvb2xBbGxvY2F0b3IpOwotCiAvLwogLy8gVGhpcyBTVEwgY29tcGF0aWJsZSBhbGxvY2F0b3Ig
aXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyB0aGUgYWxsb2NhdG9yCiAvLyBwYXJhbWV0ZXIgdG8g
dGVtcGxhdGl6ZWQgU1RMIGNvbnRhaW5lcnMsIGxpa2UgdmVjdG9yIGFuZCBtYXAuCkBAIC0zMDEs
NCArMjk3LDQgQEAKICAgICBUUG9vbEFsbG9jYXRvciYgYWxsb2NhdG9yOwogfTsKIAotI2VuZGlm
IC8vIF9QT09MQUxMT0NfSU5DTFVERURfCisjZW5kaWYgLy8gX1BPT0xBTExPQ19JTkNMVURFRF8K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL0NvbW1vbi5oCShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db21tb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MTQsMTAgKzE0LDI1IEBACiAKICNpbmNsdWRlICJjb21waWxlci9Qb29sQWxsb2MuaCIKIAorLy8g
V2UgbmVlZCB0d28gcGllY2VzIG9mIGluZm9ybWF0aW9uIHRvIHJlcG9ydCBlcnJvcnMvd2Fybmlu
Z3MgLSBzdHJpbmcgYW5kCisvLyBsaW5lIG51bWJlci4gV2UgZW5jb2RlIHRoZXNlIGludG8gYSBz
aW5nbGUgaW50IHNvIHRoYXQgaXQgY2FuIGJlIGVhc2lseQorLy8gaW5jcmVtZW50ZWQvZGVjcmVt
ZW50ZWQgYnkgbGV4ZXIuIFRoZSByaWdodCBTT1VSQ0VfTE9DX0xJTkVfU0laRSBiaXRzIHN0b3Jl
CisvLyBsaW5lIG51bWJlciB3aGlsZSB0aGUgcmVzdCBzdG9yZSB0aGUgc3RyaW5nIG51bWJlci4g
U2luY2UgdGhlIHNoYWRlcnMgYXJlCisvLyB1c3VhbGx5IHNtYWxsLCB3ZSBzaG91bGQgbm90IHJ1
biBvdXQgb2YgbWVtb3J5LiBTT1VSQ0VfTE9DX0xJTkVfU0laRQorLy8gY2FuIGJlIGluY3JlYXNl
ZCB0byBhbGxldmlhdGUgdGhpcyBpc3N1ZS4KIHR5cGVkZWYgaW50IFRTb3VyY2VMb2M7Ci1jb25z
dCB1bnNpZ25lZCBpbnQgU291cmNlTG9jTGluZU1hc2sgPSAweGZmZmY7Ci1jb25zdCB1bnNpZ25l
ZCBpbnQgU291cmNlTG9jU3RyaW5nU2hpZnQgPSAxNjsKK2NvbnN0IHVuc2lnbmVkIGludCBTT1VS
Q0VfTE9DX0xJTkVfU0laRSA9IDE2OyAgLy8gaW4gYml0cy4KK2NvbnN0IHVuc2lnbmVkIGludCBT
T1VSQ0VfTE9DX0xJTkVfTUFTSyA9ICgxIDw8IFNPVVJDRV9MT0NfTElORV9TSVpFKSAtIDE7CiAK
K2lubGluZSBUU291cmNlTG9jIEVuY29kZVNvdXJjZUxvYyhpbnQgc3RyaW5nLCBpbnQgbGluZSkg
eworICAgIHJldHVybiAoc3RyaW5nIDw8IFNPVVJDRV9MT0NfTElORV9TSVpFKSB8IChsaW5lICYg
U09VUkNFX0xPQ19MSU5FX01BU0spOworfQorCitpbmxpbmUgdm9pZCBEZWNvZGVTb3VyY2VMb2Mo
VFNvdXJjZUxvYyBsb2MsIGludCogc3RyaW5nLCBpbnQqIGxpbmUpIHsKKyAgICBpZiAoc3RyaW5n
KSAqc3RyaW5nID0gbG9jID4+IFNPVVJDRV9MT0NfTElORV9TSVpFOworICAgIGlmIChsaW5lKSAq
bGluZSA9IGxvYyAmIFNPVVJDRV9MT0NfTElORV9NQVNLOworfQorCiAvLwogLy8gUHV0IFBPT0xf
QUxMT0NBVE9SX05FV19ERUxFVEUgaW4gYmFzZSBjbGFzc2VzIHRvIG1ha2UgdGhlbSB1c2UgdGhp
cyBzY2hlbWUuCiAvLwpAQCAtNzEsNiArODYsNCBAQAogICAgIFRNYXAoY29uc3QgdEFsbG9jYXRv
ciYgYSkgOiBzdGQ6Om1hcDxLLCBELCBDTVAsIHRBbGxvY2F0b3I+KHN0ZDo6bWFwPEssIEQsIENN
UCwgdEFsbG9jYXRvcj46OmtleV9jb21wYXJlKCksIGEpIHt9CiB9OwogCi10eXBlZGVmIFRNYXA8
VFN0cmluZywgVFN0cmluZz4gVFByYWdtYVRhYmxlOwotCiAjZW5kaWYgLy8gX0NPTU1PTl9JTkNM
VURFRF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TZWFyY2hT
eW1ib2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGls
ZXIvU2VhcmNoU3ltYm9sLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzMg
QEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAxMCBUaGUgQU5HTEUgUHJvamVjdCBBdXRo
b3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMg
Z292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorLy8gZm91bmQgaW4g
dGhlIExJQ0VOU0UgZmlsZS4KKy8vCisvLyBTZWFyY2hTeW1ib2wgaXMgYW4gQVNUIHRyYXZlcnNl
ciB0byBkZXRlY3QgdGhlIHVzZSBvZiBhIGdpdmVuIHN5bWJvbCBuYW1lCisvLworCisjaWZuZGVm
IENPTVBJTEVSX1NFQVJDSFNZTUJPTF9IXworI2RlZmluZSBDT01QSUxFUl9TRUFSQ0hTWU1CT0xf
SF8KKworI2luY2x1ZGUgImNvbXBpbGVyL2ludGVybWVkaWF0ZS5oIgorI2luY2x1ZGUgImNvbXBp
bGVyL1BhcnNlSGVscGVyLmgiCisKK25hbWVzcGFjZSBzaAoreworY2xhc3MgU2VhcmNoU3ltYm9s
IDogcHVibGljIFRJbnRlcm1UcmF2ZXJzZXIKK3sKKyAgcHVibGljOgorICAgIFNlYXJjaFN5bWJv
bChjb25zdCBUU3RyaW5nICZzeW1ib2wpOworCisgICAgdm9pZCB0cmF2ZXJzZShUSW50ZXJtTm9k
ZSAqbm9kZSk7CisgICAgdm9pZCB2aXNpdFN5bWJvbChUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2Rl
KTsKKworICAgIGJvb2wgZm91bmRNYXRjaCgpIGNvbnN0OworCisgIHByb3RlY3RlZDoKKyAgICBj
b25zdCBUU3RyaW5nICZtU3ltYm9sOworICAgIGJvb2wgbWF0Y2g7Cit9OworfQorCisjZW5kaWYg
ICAvLyBDT01QSUxFUl9TRUFSQ0hTWU1CT0xfSF8KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9WYXJpYWJsZUluZm8uY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEwIEBACisvLworLy8gQ29weXJpZ2h0IChjKSAy
MDAyLTIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
Ky8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEgQlNELXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisvLworCisj
aW5jbHVkZSAiY29tcGlsZXIvVmFyaWFibGVJbmZvLmgiCisKK3N0YXRpYyBUU3RyaW5nIGFycmF5
QnJhY2tldHMoaW50IGluZGV4KQoreworICAgIFRTdHJpbmdTdHJlYW0gc3RyZWFtOworICAgIHN0
cmVhbSA8PCAiWyIgPDwgaW5kZXggPDwgIl0iOworICAgIHJldHVybiBzdHJlYW0uc3RyKCk7Cit9
CisKKy8vIFJldHVybnMgdGhlIGRhdGEgdHlwZSBmb3IgYW4gYXR0cmlidXRlIG9yIHVuaWZvcm0u
CitzdGF0aWMgU2hEYXRhVHlwZSBnZXRWYXJpYWJsZURhdGFUeXBlKGNvbnN0IFRUeXBlJiB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZS5nZXRCYXNpY1R5cGUoKSkgeworICAgICAgY2FzZSBFYnRG
bG9hdDoKKyAgICAgICAgICBpZiAodHlwZS5pc01hdHJpeCgpKSB7CisgICAgICAgICAgICAgIHN3
aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSAyOiBy
ZXR1cm4gU0hfRkxPQVRfTUFUMjsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9G
TE9BVF9NQVQzOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX01BVDQ7
CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAgICAg
fQorICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICAg
IHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSAy
OiByZXR1cm4gU0hfRkxPQVRfVkVDMjsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBT
SF9GTE9BVF9WRUMzOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFNIX0ZMT0FUX1ZF
QzQ7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICAgICAgICAg
ICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHJldHVybiBTSF9GTE9BVDsK
KyAgICAgICAgICB9CisgICAgICBjYXNlIEVidEludDoKKyAgICAgICAgICBpZiAodHlwZS5pc01h
dHJpeCgpKSB7CisgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFKCk7CisgICAgICAgICAgfSBlbHNl
IGlmICh0eXBlLmlzVmVjdG9yKCkpIHsKKyAgICAgICAgICAgICAgc3dpdGNoICh0eXBlLmdldE5v
bWluYWxTaXplKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBTSF9JTlRfVkVD
MjsKKyAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBTSF9JTlRfVkVDMzsKKyAgICAgICAg
ICAgICAgICBjYXNlIDQ6IHJldHVybiBTSF9JTlRfVkVDNDsKKyAgICAgICAgICAgICAgICBkZWZh
dWx0OiBVTlJFQUNIQUJMRSgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgcmV0dXJuIFNIX0lOVDsKKyAgICAgICAgICB9CisgICAgICBjYXNlIEVi
dEJvb2w6CisgICAgICAgICAgaWYgKHR5cGUuaXNNYXRyaXgoKSkgeworICAgICAgICAgICAgICBV
TlJFQUNIQUJMRSgpOworICAgICAgICAgIH0gZWxzZSBpZiAodHlwZS5pc1ZlY3RvcigpKSB7Cisg
ICAgICAgICAgICAgIHN3aXRjaCAodHlwZS5nZXROb21pbmFsU2l6ZSgpKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSAyOiByZXR1cm4gU0hfQk9PTF9WRUMyOworICAgICAgICAgICAgICAgIGNhc2Ug
MzogcmV0dXJuIFNIX0JPT0xfVkVDMzsKKyAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBT
SF9CT09MX1ZFQzQ7CisgICAgICAgICAgICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAg
ICAgICAgICAgICAgfQorICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgIHJldHVybiBT
SF9CT09MOworICAgICAgICAgIH0KKyAgICAgIGNhc2UgRWJ0U2FtcGxlcjJEOiByZXR1cm4gU0hf
U0FNUExFUl8yRDsKKyAgICAgIGNhc2UgRWJ0U2FtcGxlckN1YmU6IHJldHVybiBTSF9TQU1QTEVS
X0NVQkU7CisgICAgICBkZWZhdWx0OiBVTlJFQUNIQUJMRSgpOworICAgIH0KKyAgICByZXR1cm4g
U0hfTk9ORTsKK30KKworc3RhdGljIHZvaWQgZ2V0QnVpbHRJblZhcmlhYmxlSW5mbyhjb25zdCBU
VHlwZSYgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVFN0
cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxl
SW5mb0xpc3QmIGluZm9MaXN0KTsKK3N0YXRpYyB2b2lkIGdldFVzZXJEZWZpbmVkVmFyaWFibGVJ
bmZvKGNvbnN0IFRUeXBlJiB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVFN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFRWYXJpYWJsZUluZm9MaXN0JiBpbmZvTGlzdCk7CisKKy8vIFJldHVybnMgaW5m
byBmb3IgYW4gYXR0cmlidXRlIG9yIHVuaWZvcm0uCitzdGF0aWMgdm9pZCBnZXRWYXJpYWJsZUlu
Zm8oY29uc3QgVFR5cGUmIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
VFN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZv
TGlzdCYgaW5mb0xpc3QpCit7CisgICAgaWYgKHR5cGUuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3Ry
dWN0KSB7CisgICAgICAgIGlmICh0eXBlLmlzQXJyYXkoKSkgeworICAgICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCB0eXBlLmdldEFycmF5U2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBUU3RyaW5nIGxuYW1lID0gbmFtZSArIGFycmF5QnJhY2tldHMoaSk7CisgICAgICAgICAgICAg
ICAgZ2V0VXNlckRlZmluZWRWYXJpYWJsZUluZm8odHlwZSwgbG5hbWUsIGluZm9MaXN0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdldFVzZXJEZWZpbmVk
VmFyaWFibGVJbmZvKHR5cGUsIG5hbWUsIGluZm9MaXN0KTsKKyAgICAgICAgfQorICAgIH0gZWxz
ZSB7CisgICAgICAgIGdldEJ1aWx0SW5WYXJpYWJsZUluZm8odHlwZSwgbmFtZSwgaW5mb0xpc3Qp
OworICAgIH0KK30KKwordm9pZCBnZXRCdWlsdEluVmFyaWFibGVJbmZvKGNvbnN0IFRUeXBlJiB0
eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRTdHJpbmcmIG5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZhcmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0KQor
eworICAgIEFTU0VSVCh0eXBlLmdldEJhc2ljVHlwZSgpICE9IEVidFN0cnVjdCk7CisKKyAgICBU
VmFyaWFibGVJbmZvIHZhckluZm87CisgICAgaWYgKHR5cGUuaXNBcnJheSgpKSB7CisgICAgICAg
IHZhckluZm8ubmFtZSA9IChuYW1lICsgIlswXSIpLmNfc3RyKCk7CisgICAgICAgIHZhckluZm8u
c2l6ZSA9IHR5cGUuZ2V0QXJyYXlTaXplKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdmFySW5m
by5uYW1lID0gbmFtZS5jX3N0cigpOworICAgICAgICB2YXJJbmZvLnNpemUgPSAxOworICAgIH0K
KyAgICB2YXJJbmZvLnR5cGUgPSBnZXRWYXJpYWJsZURhdGFUeXBlKHR5cGUpOworICAgIGluZm9M
aXN0LnB1c2hfYmFjayh2YXJJbmZvKTsKK30KKwordm9pZCBnZXRVc2VyRGVmaW5lZFZhcmlhYmxl
SW5mbyhjb25zdCBUVHlwZSYgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVFN0cmluZyYgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFZh
cmlhYmxlSW5mb0xpc3QmIGluZm9MaXN0KQoreworICAgIEFTU0VSVCh0eXBlLmdldEJhc2ljVHlw
ZSgpID09IEVidFN0cnVjdCk7CisKKyAgICBUU3RyaW5nIGxuYW1lID0gbmFtZSArICIuIjsKKyAg
ICBjb25zdCBUVHlwZUxpc3QqIHN0cnVjdHVyZSA9IHR5cGUuZ2V0U3RydWN0KCk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzdHJ1Y3R1cmUtPnNpemUoKTsgKytpKSB7CisgICAgICAgIGNv
bnN0IFRUeXBlKiBmaWVsZFR5cGUgPSAoKnN0cnVjdHVyZSlbaV0udHlwZTsKKyAgICAgICAgZ2V0
VmFyaWFibGVJbmZvKCpmaWVsZFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICBsbmFtZSAr
IGZpZWxkVHlwZS0+Z2V0RmllbGROYW1lKCksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmZv
TGlzdCk7CisgICAgfQorfQorCitDb2xsZWN0QXR0cmlic1VuaWZvcm1zOjpDb2xsZWN0QXR0cmli
c1VuaWZvcm1zKFRWYXJpYWJsZUluZm9MaXN0JiBhdHRyaWJzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlzdCYgdW5pZm9ybXMp
CisgICAgOiBtQXR0cmlicyhhdHRyaWJzKSwKKyAgICAgIG1Vbmlmb3Jtcyh1bmlmb3JtcykKK3sK
K30KKworLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBhdHRyaWJ1dGUgYW5kIHVuaWZvcm0g
dmFyaWFibGUgZGVjbGFyYXRpb24uCit2b2lkIENvbGxlY3RBdHRyaWJzVW5pZm9ybXM6OnZpc2l0
U3ltYm9sKFRJbnRlcm1TeW1ib2wqKQoreworfQorCit2b2lkIENvbGxlY3RBdHRyaWJzVW5pZm9y
bXM6OnZpc2l0Q29uc3RhbnRVbmlvbihUSW50ZXJtQ29uc3RhbnRVbmlvbiopCit7Cit9CisKK2Jv
b2wgQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6dmlzaXRCaW5hcnkoVmlzaXQsIFRJbnRlcm1CaW5h
cnkqKQoreworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBDb2xsZWN0QXR0cmlic1VuaWZv
cm1zOjp2aXNpdFVuYXJ5KFZpc2l0LCBUSW50ZXJtVW5hcnkqKQoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKworYm9vbCBDb2xsZWN0QXR0cmlic1VuaWZvcm1zOjp2aXNpdFNlbGVjdGlvbihWaXNp
dCwgVEludGVybVNlbGVjdGlvbiopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENv
bGxlY3RBdHRyaWJzVW5pZm9ybXM6OnZpc2l0QWdncmVnYXRlKFZpc2l0LCBUSW50ZXJtQWdncmVn
YXRlKiBub2RlKQoreworICAgIGJvb2wgdmlzaXRDaGlsZHJlbiA9IGZhbHNlOworCisgICAgc3dp
dGNoIChub2RlLT5nZXRPcCgpKQorICAgIHsKKyAgICBjYXNlIEVPcFNlcXVlbmNlOgorICAgICAg
ICAvLyBXZSBuZWVkIHRvIHZpc2l0IHNlcXVlbmNlIGNoaWxkcmVuIHRvIGdldCB0byB2YXJpYWJs
ZSBkZWNsYXJhdGlvbnMuCisgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEVPcERlY2xhcmF0aW9uOiB7CisgICAgICAgIGNvbnN0IFRJbnRlcm1T
ZXF1ZW5jZSYgc2VxdWVuY2UgPSBub2RlLT5nZXRTZXF1ZW5jZSgpOworICAgICAgICBUUXVhbGlm
aWVyIHF1YWxpZmllciA9IHNlcXVlbmNlLmZyb250KCktPmdldEFzVHlwZWQoKS0+Z2V0UXVhbGlm
aWVyKCk7CisgICAgICAgIGlmIChxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlIHx8IHF1YWxpZmll
ciA9PSBFdnFVbmlmb3JtKQorICAgICAgICB7CisgICAgICAgICAgICBUVmFyaWFibGVJbmZvTGlz
dCYgaW5mb0xpc3QgPSBxdWFsaWZpZXIgPT0gRXZxQXR0cmlidXRlID8KKyAgICAgICAgICAgICAg
ICBtQXR0cmlicyA6IG1Vbmlmb3JtczsKKyAgICAgICAgICAgIGZvciAoVEludGVybVNlcXVlbmNl
Ojpjb25zdF9pdGVyYXRvciBpID0gc2VxdWVuY2UuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAg
aSAhPSBzZXF1ZW5jZS5lbmQoKTsgKytpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNvbnN0IFRJbnRlcm1TeW1ib2wqIHZhcmlhYmxlID0gKCppKS0+Z2V0QXNTeW1ib2xOb2RlKCk7
CisgICAgICAgICAgICAgICAgLy8gVGhlIG9ubHkgY2FzZSBpbiB3aGljaCB0aGUgc2VxdWVuY2Ug
d2lsbCBub3QgY29udGFpbiBhCisgICAgICAgICAgICAgICAgLy8gVEludGVybVN5bWJvbCBub2Rl
IGlzIGluaXRpYWxpemF0aW9uLiBJdCB3aWxsIGNvbnRhaW4gYQorICAgICAgICAgICAgICAgIC8v
IFRJbnRlckJpbmFyeSBub2RlIGluIHRoYXQgY2FzZS4gU2luY2UgYXR0cmlidXRlcyBhbmQgdW5p
ZnJvbXMKKyAgICAgICAgICAgICAgICAvLyBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQgaW4gYSBzaGFk
ZXIsIHdlIG11c3QgaGF2ZSBvbmx5CisgICAgICAgICAgICAgICAgLy8gVEludGVybVN5bWJvbCBu
b2RlcyBpbiB0aGUgc2VxdWVuY2UuCisgICAgICAgICAgICAgICAgQVNTRVJUKHZhcmlhYmxlICE9
IE5VTEwpOworICAgICAgICAgICAgICAgIGdldFZhcmlhYmxlSW5mbyh2YXJpYWJsZS0+Z2V0VHlw
ZSgpLCB2YXJpYWJsZS0+Z2V0U3ltYm9sKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGluZm9MaXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgZGVmYXVsdDogYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHZpc2l0Q2hp
bGRyZW47Cit9CisKK2Jvb2wgQ29sbGVjdEF0dHJpYnNVbmlmb3Jtczo6dmlzaXRMb29wKFZpc2l0
LCBUSW50ZXJtTG9vcCopCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitib29sIENvbGxlY3RB
dHRyaWJzVW5pZm9ybXM6OnZpc2l0QnJhbmNoKFZpc2l0LCBUSW50ZXJtQnJhbmNoKikKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9j
b21waWxlci9vc3NvdXJjZV9uc3ByLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2VfbnNwci5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3Nzb3VyY2VfbnNwci5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKy8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMDItMjAx
MCBUaGUgQU5HTEUgUHJvamVjdCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gVXNl
IG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0
aGF0IGNhbiBiZQorLy8gZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KKy8vCisKKy8vCisvLyBU
aGlzIGZpbGUgY29udGFpbnMgdGhlIG5zcHIgc3BlY2lmaWMgZnVuY3Rpb25zCisvLworI2luY2x1
ZGUgImNvbXBpbGVyL29zaW5jbHVkZS5oIgorCisvLworLy8gVGhyZWFkIExvY2FsIFN0b3JhZ2Ug
T3BlcmF0aW9ucworLy8KK09TX1RMU0luZGV4IE9TX0FsbG9jVExTSW5kZXgoKQoreworICAgIFBS
VWludG4gaW5kZXg7CisgICAgUFJTdGF0dXMgc3RhdHVzID0gUFJfTmV3VGhyZWFkUHJpdmF0ZUlu
ZGV4KCZpbmRleCwgTlVMTCk7CisKKyAgICBpZiAoc3RhdHVzKSB7CisgICAgICAgIGFzc2VydCgw
ICYmICJPU19BbGxvY1RMU0luZGV4KCk6IFVuYWJsZSB0byBhbGxvY2F0ZSBUaHJlYWQgTG9jYWwg
U3RvcmFnZSIpOworICAgICAgICByZXR1cm4gT1NfSU5WQUxJRF9UTFNfSU5ERVg7CisgICAgfQor
CisgICAgcmV0dXJuIGluZGV4OworfQorCitib29sIE9TX1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4
IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpCit7CisgICAgaWYgKG5JbmRleCA9PSBPU19JTlZBTElE
X1RMU19JTkRFWCkgeworICAgICAgICBhc3NlcnQoMCAmJiAiT1NfU2V0VExTVmFsdWUoKTogSW52
YWxpZCBUTFMgSW5kZXgiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiBQUl9TZXRUaHJlYWRQcml2YXRlKG5JbmRleCwgbHB2VmFsdWUpID09IDA7Cit9CisKK2Jv
b2wgT1NfRnJlZVRMU0luZGV4KE9TX1RMU0luZGV4IG5JbmRleCkKK3sKKyAgICAvLyBDYW4ndCBk
ZWxldGUgVExTIGtleXMgd2l0aCBuc3ByCisgICAgcmV0dXJuIHRydWU7Cit9CisKSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVw
cm9jZXNzb3Ivc2Nhbm5lci5oCShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5
L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3Ivc2Nhbm5lci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw4ICs0OCw5IEBACiAjaWYgIWRlZmluZWQoX19TQ0FOTkVSX0gpCiAjZGVmaW5lIF9f
U0NBTk5FUl9IIDEKIAotI2RlZmluZSBNQVhfU1lNQk9MX05BTUVfTEVOIDEyOAotI2RlZmluZSBN
QVhfU1RSSU5HX0xFTiA1MTIKKy8vIFRoZXNlIGxlbmd0aHMgZG8gbm90IGluY2x1ZGUgdGhlIE5V
TEwgdGVybWluYXRvci4KKyNkZWZpbmUgTUFYX1NZTUJPTF9OQU1FX0xFTiAxMjcKKyNkZWZpbmUg
TUFYX1NUUklOR19MRU4gNTExCiAKICNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3IvcGFy
c2VyLmgiCiAKQEAgLTU5LDggKzYwLDYgQEAKICAgICB1bnNpZ25lZCBzaG9ydCBmaWxlLCBsaW5l
OwogfSBTb3VyY2VMb2M7CiAKLWludCB5eXBhcnNlICh2b2lkKTsKLQogaW50IHl5bGV4X0NQUChj
aGFyKiBidWYsIGludCBtYXhTaXplKTsKIAogdHlwZWRlZiBzdHJ1Y3QgSW5wdXRTcmMgewpAQCAt
NzMsNyArNzIsNyBAQAogfSBJbnB1dFNyYzsKIAogaW50IEluaXRTY2FubmVyKENQUFN0cnVjdCAq
Y3BwKTsgICAvLyBJbnRpYWxpc2UgdGhlIGNwcCBzY2FubmVyLiAKLWludCBTY2FuRnJvbVN0cmlu
ZyhjaGFyICopOyAgICAgIC8vIFN0YXJ0IHNjYW5uaW5nIHRoZSBpbnB1dCBmcm9tIHRoZSBzdHJp
bmcgbWVudGlvbmVkLgoraW50IFNjYW5Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKik7ICAgICAgLy8g
U3RhcnQgc2Nhbm5pbmcgdGhlIGlucHV0IGZyb20gdGhlIHN0cmluZyBtZW50aW9uZWQuCiBpbnQg
Y2hlY2tfRU9GKGludCk7ICAgICAgICAgICAgICAvLyBjaGVjayBpZiB3ZSBoaXQgYSBFT0YgYWJy
dXB0bHkgCiB2b2lkIENQUEVycm9yVG9JbmZvTG9nKGNoYXIgKik7ICAgLy8gc3RpY2tpbmcgdGhl
IG1zZyxsaW5lIGludG8gdGhlIFNoYWRlcidzLkluZm8ubG9nCiB2b2lkIFNldExpbmVOdW1iZXIo
aW50KTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvdG9rZW5zLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMuYwkocmV2aXNpb24gNzYwMjUpCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3Rva2Vucy5jCSh3
b3JraW5nIGNvcHkpCkBAIC01Miw2ICs1Miw3IEBACiAKICNpbmNsdWRlICJjb21waWxlci9kZWJ1
Zy5oIgogI2luY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nvci9zbGdsb2JhbHMuaCIKKyNpbmNs
dWRlICJjb21waWxlci91dGlsLmgiCiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gUHJlcHJvY2Vzc29yIGFuZCBUb2tlbiBS
ZWNvcmRlciBhbmQgUGxheWJhY2s6IC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMjI0LDgg
KzIyNSw3IEBACiAgICAgY2FzZSBDUFBfSU5UQ09OU1RBTlQ6CiAgICAgICAgICBzdHI9eXlsdmFs
cHAtPnN5bWJvbF9uYW1lOwogICAgICAgICAgd2hpbGUgKCpzdHIpewotICAgICAgICAgICAgbEFk
ZEJ5dGUocFRvaywodW5zaWduZWQgY2hhcikgKnN0cik7Ci0gICAgICAgICAgICAqc3RyKys7Cisg
ICAgICAgICAgICBsQWRkQnl0ZShwVG9rLCAodW5zaWduZWQgY2hhcikgKnN0cisrKTsKICAgICAg
ICAgIH0KICAgICAgICAgIGxBZGRCeXRlKHBUb2ssIDApOwogICAgICAgICAgYnJlYWs7CkBAIC0y
NzYsOCArMjc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIGNoID09ICdfJykKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgewot
ICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gY2g7Ci0gICAgICAgICAgICAg
ICAgICAgIGxlbisrOworICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10gPSBj
aDsKICAgICAgICAgICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjkxLDcgKzI5MCw3IEBACiAgICAgICAgICAgICB3
aGlsZSAoKGNoID0gbFJlYWRCeXRlKHBUb2spKSAhPSAwKQogICAgICAgICAgICAgICAgIGlmIChs
ZW4gPCBNQVhfU1RSSU5HX0xFTikKICAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3ZhbFtsZW4r
K10gPSBjaDsKLSAgICAgICAgICAgIHN0cmluZ192YWxbbGVuXSA9IDA7CisgICAgICAgICAgICBz
dHJpbmdfdmFsW2xlbl0gPSAnXDAnOwogICAgICAgICAgICAgeXlsdmFscHAtPnNjX2lkZW50ID0g
TG9va1VwQWRkU3RyaW5nKGF0YWJsZSwgc3RyaW5nX3ZhbCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDUFBfRkxPQVRDT05TVEFOVDoKQEAgLTMwMCwxNSArMjk5LDE0IEBACiAg
ICAgICAgICAgICB3aGlsZSAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScpfHwoY2g9PSdlJ3x8Y2g9
PSdFJ3x8Y2g9PScuJyl8fChjaD09JysnfHxjaD09Jy0nKSkKICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgewotICAgICAgICAgICAg
ICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gY2g7Ci0gICAgICAgICAgICAgICAgICAgIGxlbisr
OworICAgICAgICAgICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKICAgICAgICAg
ICAgICAgICAgICAgY2ggPSBsUmVhZEJ5dGUocFRvayk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgc3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7CiAgICAgICAg
ICAgICBhc3NlcnQoY2ggPT0gJ1wwJyk7CiAgICAgICAgICAgICBzdHJjcHkoeXlsdmFscHAtPnN5
bWJvbF9uYW1lLHN5bWJvbF9uYW1lKTsKLSAgICAgICAgICAgIHl5bHZhbHBwLT5zY19mdmFsPShm
bG9hdClhdG9mKHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CisgICAgICAgICAgICB5eWx2YWxwcC0+
c2NfZnZhbD0oZmxvYXQpYXRvZl9kb3QoeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIENQUF9JTlRDT05TVEFOVDoKICAgICAgICAgICAgIGxl
biA9IDA7CkBAIC0zMTYsOCArMzE0LDcgQEAKICAgICAgICAgICAgIHdoaWxlICgoY2ggPj0gJzAn
ICYmIGNoIDw9ICc5JykpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgaWYgKGxlbiA8
IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKLSAgICAgICAgICAgICAgICAgICAgc3ltYm9sX25hbWVb
bGVuXSA9IGNoOwotICAgICAgICAgICAgICAgICAgICBsZW4rKzsKKyAgICAgICAgICAgICAgICAg
ICAgc3ltYm9sX25hbWVbbGVuKytdID0gY2g7CiAgICAgICAgICAgICAgICAgICAgIGNoID0gbFJl
YWRCeXRlKHBUb2spOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY3BwLmMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nl
c3Nvci9jcHAuYwkocmV2aXNpb24gNzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL2NwcC5jCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEsNiAr
MTkxLDkgQEAKICAgICAgICAgaWYgKHRva2VuID09ICdcXCcpIHsKICAgICAgICAgICAgIENQUEVy
cm9yVG9JbmZvTG9nKCJUaGUgbGluZSBjb250aW51YXRpb24gY2hhcmFjdGVyIChcXCkgaXMgbm90
IHBhcnQgb2YgdGhlIE9wZW5HTCBFUyBTaGFkaW5nIExhbmd1YWdlIik7CiAgICAgICAgICAgICBy
ZXR1cm4gdG9rZW47CisgICAgICAgIH0gZWxzZSBpZiAodG9rZW4gPD0gMCkgeyAvLyBFT0Ygb3Ig
ZXJyb3IKKyAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBp
bnB1dCBpbiAjZGVmaW5lIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xp
bmUiKTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIFJlY29yZFRv
a2VuKG1hYy5ib2R5LCB0b2tlbiwgeXlsdmFscHApOwogICAgICAgICB0b2tlbiA9IGNwcC0+Y3Vy
cmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CkBAIC0yNjcsOSAr
MjcwLDEzIEBACiAJCiAJd2hpbGUgKHRva2VuID4gMCkgewogICAgICAgICBpZiAodG9rZW4gIT0g
JyMnKSB7Ci0JCSAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykKKyAgICAgICAgICAgIHdoaWxlICh0
b2tlbiAhPSAnXG4nKSB7CiAgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1
dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9GIG9yIGVycm9yCisgICAgICAgICAg
ICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBpbiAj
ZWxzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJyZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJy
ZW50SW5wdXQsIHl5bHZhbHBwKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBA
IC0yOTUsOCArMzAyLDEzIEBACiAgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogICAgICAgICAgICAgICAg
IGlmICh0b2tlbiAhPSAnXG4nKSB7CiAgICAgICAgICAgICAgICAgICAgIENQUFdhcm5pbmdUb0lu
Zm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5zIGZvbGxvd2luZyAjZWxzZSBwcmVwcm9jZXNzb3IgZGly
ZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxl
ICh0b2tlbiAhPSAnXG4nKQorICAgICAgICAgICAgICAgICAgICB3aGlsZSAodG9rZW4gIT0gJ1xu
JykgewogICAgICAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9GIG9yIGVycm9yCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coInVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0IGZvbGxv
d2luZyAjZWxzZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IAogCQkJ
CWJyZWFrOwogCQkJfSAKQEAgLTQ2Nyw5ICs0NzksMTQgQEAKIAl9CiAJdG9rZW4gPSBldmFsKHRv
a2VuLCBNSU5fUFJFQywgJnJlcywgJmVyciwgeXlsdmFscHApOwogICAgIGlmICh0b2tlbiAhPSAn
XG4nKSB7Ci0gICAgICAgIENQUFdhcm5pbmdUb0luZm9Mb2coInVuZXhwZWN0ZWQgdG9rZW5zIGZv
bGxvd2luZyB0aGUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVkIGEgbmV3bGluZSIp
OwotICAgICAgICB3aGlsZSAodG9rZW4gIT0gJ1xuJykKKyAgICAgICAgQ1BQV2FybmluZ1RvSW5m
b0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNpZiBwcmVwcm9jZXNzb3IgZGlyZWN0
aXZlIC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7CisgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4n
KSB7CiAgICAgICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3Vy
cmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgICAgICBpZiAodG9rZW4gPD0gMCkgeyAvLyBF
T0Ygb3IgZXJyb3IKKyAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygidW5leHBlY3Rl
ZCBlbmQgb2YgaW5wdXQgaW4gI2lmIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBh
IG5ld2xpbmUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQogICAgIH0gCiAgICAgaWYgKCFyZXMgJiYgIWVycikgewogICAgICAgICB0b2tlbiA9
IENQUGVsc2UoMSwgeXlsdmFscHApOwpAQCAtNDk1LDggKzUxMiwxMyBAQAogICAgICAgICB0b2tl
biA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7
CiAgICAgICAgIGlmICh0b2tlbiAhPSAnXG4nKSB7CiAgICAgICAgICAgICBDUFBXYXJuaW5nVG9J
bmZvTG9nKCJ1bmV4cGVjdGVkIHRva2VucyBmb2xsb3dpbmcgI2lmZGVmIHByZXByb2Nlc3NvciBk
aXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAgICAgIHdoaWxlICh0b2tl
biAhPSAnXG4nKQorICAgICAgICAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKICAgICAgICAg
ICAgICAgICB0b2tlbiA9IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0
LCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9GIG9y
IGVycm9yCisgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVjdGVk
IGVuZCBvZiBpbnB1dCBpbiAjaWZkZWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVjdGVk
IGEgbmV3bGluZSIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKCgocyAmJiAhcy0+
ZGV0YWlscy5tYWMudW5kZWYpID8gMSA6IDApICE9IGRlZmluZWQpCiAgICAgICAgICAgICB0b2tl
biA9IENQUGVsc2UoMSwgeXlsdmFscHApOwpAQCAtNTQ0LDcgKzU2NiwxMCBAQAogICAgIGNvbnN0
IGNoYXIgKm1lc3NhZ2U7CiAJCiAgICAgd2hpbGUgKHRva2VuICE9ICdcbicpIHsKLQkJaWYgKHRv
a2VuID09IENQUF9GTE9BVENPTlNUQU5UIHx8IHRva2VuID09IENQUF9JTlRDT05TVEFOVCl7Cisg
ICAgICAgIGlmICh0b2tlbiA8PSAwKXsKKyAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1
bmV4cGVjdGVkIGVuZCBvZiBpbnB1dCBpbiAjZXJyb3IgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAt
IGV4cGVjdGVkIGEgbmV3bGluZSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH1l
bHNlIGlmICh0b2tlbiA9PSBDUFBfRkxPQVRDT05TVEFOVCB8fCB0b2tlbiA9PSBDUFBfSU5UQ09O
U1RBTlQpewogICAgICAgICAgICAgU3RvcmVTdHIoeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKIAkJ
fWVsc2UgaWYodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIgfHwgdG9rZW4gPT0gQ1BQX1NUUkNPTlNU
QU5UKXsKIAkJCVN0b3JlU3RyKEdldFN0cmluZ09mQXRvbShhdGFibGUseXlsdmFscHAtPnNjX2lk
ZW50KSk7CkBAIC02NzAsNyArNjk1LDcgQEAKIHsKIAogICAgIGludCB0b2tlbiA9IGNwcC0+Y3Vy
cmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Ci0gICAgY2hhciBl
eHRlbnNpb25OYW1lWzgwXTsKKyAgICBjaGFyIGV4dGVuc2lvbk5hbWVbTUFYX1NZTUJPTF9OQU1F
X0xFTiArIDFdOwogCiAgICAgaWYodG9rZW49PSdcbicpewogCQlEZWNMaW5lTnVtYmVyKCk7CkBA
IC02ODIsNyArNzA3LDggQEAKICAgICBpZiAodG9rZW4gIT0gQ1BQX0lERU5USUZJRVIpCiAgICAg
ICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZXh0ZW5zaW9uIik7CiAgICAgCi0gICAgc3RyY3B5KGV4
dGVuc2lvbk5hbWUsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxwcC0+c2NfaWRlbnQpKTsK
KyAgICBzdHJuY3B5KGV4dGVuc2lvbk5hbWUsIEdldEF0b21TdHJpbmcoYXRhYmxlLCB5eWx2YWxw
cC0+c2NfaWRlbnQpLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKKyAgICBleHRlbnNpb25OYW1lW01B
WF9TWU1CT0xfTkFNRV9MRU5dID0gJ1wwJzsKIAkgICAgCiAgICAgdG9rZW4gPSBjcHAtPmN1cnJl
bnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogICAgIGlmICh0b2tl
biAhPSAnOicpIHsKQEAgLTcyNiw4ICs3NTIsMTMgQEAKICAgICAgICAgICAgICAgICAgdG9rZW4g
PSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwog
ICAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT0gJ1xuJykgewogICAgICAgICAgICAgICAgICAg
ICAgQ1BQV2FybmluZ1RvSW5mb0xvZygidW5leHBlY3RlZCB0b2tlbnMgZm9sbG93aW5nICNlbHNl
IHByZXByb2Nlc3NvciBkaXJlY3RpdmUgLSBleHBlY3RlZCBhIG5ld2xpbmUiKTsKLSAgICAgICAg
ICAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4nKQorICAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKHRva2VuICE9ICdcbicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9
IGNwcC0+Y3VycmVudElucHV0LT5zY2FuKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRva2VuIDw9IDApIHsgLy8gRU9GIG9yIGVycm9y
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJ1bmV4cGVj
dGVkIGVuZCBvZiBpbnB1dCBpbiAjaWZkZWYgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSAtIGV4cGVj
dGVkIGEgbmV3bGluZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgIH0KIAkJCSAgICAgdG9rZW4gPSBDUFBlbHNlKDAsIHl5bHZhbHBwKTsKICAg
ICAgICAgICAgICB9ZWxzZXsKQEAgLTc0Myw4ICs3NzQsMTQgQEAKICAgICAgICAgICAgIH0gCiAg
ICAgICAgICAgICAvLyB0aGlzIHRva2VuIGlzIHJlYWxseSBhIGRvbnQgY2FyZSwgYnV0IHdlIHN0
aWxsIG5lZWQgdG8gZWF0IHRoZSB0b2tlbnMKICAgICAgICAgICAgIHRva2VuID0gY3BwLT5jdXJy
ZW50SW5wdXQtPnNjYW4oY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsgCi0gICAgICAgICAg
ICB3aGlsZSAodG9rZW4gIT0gJ1xuJykKKyAgICAgICAgICAgIHdoaWxlICh0b2tlbiAhPSAnXG4n
KSB7CiAgICAgICAgICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+c2NhbihjcHAt
PmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGlmICh0b2tlbiA8PSAw
KSB7IC8vIEVPRiBvciBlcnJvcgorICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xv
ZygidW5leHBlY3QgdG9rZW5zIGZvbGxvd2luZyAjZWxpZiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZl
IC0gZXhwZWN0ZWQgYSBuZXdsaW5lIik7CisgICAgICAgICAgICAgICAgICAgIGNwcC0+Q29tcGls
ZUVycm9yID0gMTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQogCQkgICAgdG9rZW4gPSBDUFBlbHNlKDAsIHl5bHZhbHBwKTsKICAg
ICAgICAgfSBlbHNlIGlmICh5eWx2YWxwcC0+c2NfaWRlbnQgPT0gZW5kaWZBdG9tKSB7CiAJCSAg
ICAgLS1jcHAtPmVsc2V0cmFja2VyOwpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1Ro
aXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci9zY2FubmVyLmMJKHJldmlz
aW9uIDc2MDI1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3ByZXBy
b2Nlc3Nvci9zY2FubmVyLmMJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDcgQEAKIC8vIHNj
YW5uZXIuYwogLy8KIAorI2luY2x1ZGUgPGFzc2VydC5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgog
I2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC01MiwxNCArNTMsMTQg
QEAKIAogI2lmIDAKICAgICAjaW5jbHVkZSA8aWVlZWZwLmg+Ci0gICAgI2Vsc2UKKyNlbHNlCiAg
ICAgI2RlZmluZSBpc2luZmYoeCkgKCgoKihpbnQgKikmKHgpICYgMHg3ZjgwMDAwMEwpPT0weDdm
ODAwMDAwTCkgJiYgXAogICAgICAgICAgICAgICAgICAgICAgICAoKCooaW50ICopJih4KSAmIDB4
MDA3ZmZmZmZMKT09MDAwMDAwMDAwMEwpKQogI2VuZGlmCiAKICNpbmNsdWRlICJjb21waWxlci9w
cmVwcm9jZXNzb3Ivc2xnbG9iYWxzLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvdXRpbC5oIgogCi0K
IHR5cGVkZWYgc3RydWN0IFN0cmluZ0lucHV0U3JjIHsKICAgICBJbnB1dFNyYyBiYXNlOwogICAg
IGNoYXIgKnA7CkBAIC0xMzMsNDkgKzEzNCw0OSBAQAogICovCiBzdGF0aWMgaW50IHN0cl9nZXRj
aChTdHJpbmdJbnB1dFNyYyAqaW4pCiB7Ci0JZm9yKDs7KXsKLQkgICBpZiAoKmluLT5wKXsKLQkg
ICAgICBpZiAoKmluLT5wID09ICdcbicpIHsKKyAgICBmb3IoOzspeworICAgICAgIGlmICgqaW4t
PnApeworICAgICAgICAgIGlmICgqaW4tPnAgPT0gJ1xuJykgewogICAgICAgICAgICAgIGluLT5i
YXNlLmxpbmUrKzsKICAgICAgICAgICAgICBJbmNMaW5lTnVtYmVyKCk7CiAgICAgICAgICAgfQog
ICAgICAgICAgIHJldHVybiAqaW4tPnArKzsKLQkgICB9Ci0JICAgaWYoKysoY3BwLT5QYVdoaWNo
U3RyKSA8IGNwcC0+UGFBcmdjKXsKLQkJICBmcmVlKGluKTsKLQkJICBTZXRTdHJpbmdOdW1iZXIo
Y3BwLT5QYVdoaWNoU3RyKTsKLSAgICAJICBTZXRMaW5lTnVtYmVyKDEpOwotCQkgIFNjYW5Gcm9t
U3RyaW5nKGNwcC0+UGFBcmd2W2NwcC0+UGFXaGljaFN0cl0pOwotCQkgIGluPShTdHJpbmdJbnB1
dFNyYyopY3BwLT5jdXJyZW50SW5wdXQ7Ci0JICAgICAgY29udGludWU7ICAgICAgICAgICAgIAot
CSAgIH0KLQkgICBlbHNlewotCSAgICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPmJhc2UucHJl
djsKLQkgICAgICBjcHAtPlBhV2hpY2hTdHI9MDsKKyAgICAgICB9CisgICAgICAgaWYoKysoY3Bw
LT5QYVdoaWNoU3RyKSA8IGNwcC0+UGFBcmdjKXsKICAgICAgICAgICBmcmVlKGluKTsKKyAgICAg
ICAgICBTZXRTdHJpbmdOdW1iZXIoY3BwLT5QYVdoaWNoU3RyKTsKKyAgICAgICAgICBTZXRMaW5l
TnVtYmVyKDEpOworICAgICAgICAgIFNjYW5Gcm9tU3RyaW5nKGNwcC0+UGFBcmd2W2NwcC0+UGFX
aGljaFN0cl0pOworICAgICAgICAgIGluPShTdHJpbmdJbnB1dFNyYyopY3BwLT5jdXJyZW50SW5w
dXQ7CisgICAgICAgICAgY29udGludWU7ICAgICAgICAgICAgIAorICAgICAgIH0KKyAgICAgICBl
bHNleworICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0ID0gaW4tPmJhc2UucHJldjsKKyAgICAg
ICAgICBjcHAtPlBhV2hpY2hTdHI9MDsKKyAgICAgICAgICBmcmVlKGluKTsKICAgICAgICAgICBy
ZXR1cm4gRU9GOwogICAgICAgIH0gIAotCX0KKyAgICB9CiB9IC8vIHN0cl9nZXRjaAogCiBzdGF0
aWMgdm9pZCBzdHJfdW5nZXRjaChTdHJpbmdJbnB1dFNyYyAqaW4sIGludCBjaCwgeXlzdHlwZXBw
ICp0eXBlKSB7CiAgICAgaWYgKGluLT5wWy0xXSA9PSBjaClpbi0+cC0tOwotCWVsc2UgewotCQkq
KGluLT5wKT0nXDAnOyAvL3RoaXMgd291bGQgdGFrZSBjYXJlIG9mIHNoaWZ0aW5nIHRvIHRoZSBw
cmV2aW91cyBzdHJpbmcuCi0JICAgIGNwcC0+UGFXaGljaFN0ci0tOwotCX0gIAotCWlmIChjaCA9
PSAnXG4nKSB7CisgICAgZWxzZSB7CisgICAgICAgICooaW4tPnApPSdcMCc7IC8vdGhpcyB3b3Vs
ZCB0YWtlIGNhcmUgb2Ygc2hpZnRpbmcgdG8gdGhlIHByZXZpb3VzIHN0cmluZy4KKyAgICAgICAg
Y3BwLT5QYVdoaWNoU3RyLS07CisgICAgfSAgCisgICAgaWYgKGNoID09ICdcbicpIHsKICAgICAg
ICAgaW4tPmJhc2UubGluZS0tOwogICAgICAgICBEZWNMaW5lTnVtYmVyKCk7CiAgICAgfQogfSAv
LyBzdHJfdW5nZXRjaAogCi1pbnQgU2NhbkZyb21TdHJpbmcoY2hhciAqcykKK2ludCBTY2FuRnJv
bVN0cmluZyhjb25zdCBjaGFyICpzKQogewogICAgIAotCVN0cmluZ0lucHV0U3JjICppbiA9IG1h
bGxvYyhzaXplb2YoU3RyaW5nSW5wdXRTcmMpKTsKKyAgICBTdHJpbmdJbnB1dFNyYyAqaW4gPSBt
YWxsb2Moc2l6ZW9mKFN0cmluZ0lucHV0U3JjKSk7CiAgICAgbWVtc2V0KGluLCAwLCBzaXplb2Yo
U3RyaW5nSW5wdXRTcmMpKTsKLQlpbi0+cCA9IHM7CisgICAgaW4tPnAgPSBzOwogICAgIGluLT5i
YXNlLmxpbmUgPSAxOwogICAgIGluLT5iYXNlLnNjYW4gPSBieXRlX3NjYW47CiAgICAgaW4tPmJh
c2UuZ2V0Y2ggPSAoaW50ICgqKShJbnB1dFNyYyAqLCB5eXN0eXBlcHAgKikpc3RyX2dldGNoOwpA
QCAtMTkwLDExOSArMTkxLDYzIEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gRmxvYXRpbmcgcG9pbnQg
Y29uc3RhbnRzOiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0vKgotICogbEJ1aWxkRmxvYXRWYWx1ZSgpIC0g
UXVpY2sgYW5kIGRpcnR5IGNvbnZlcnNpb24gdG8gZmxvYXRpbmcgcG9pbnQuICBTaW5jZSBhbGwK
LSAqICAgICAgICAgd2UgbmVlZCBpcyBzaW5nbGUgcHJlY2lzaW9uIHRoaXMgc2hvdWxkIGJlIHF1
aXRlIHByZWNpc2UuCi0gKi8KIAotc3RhdGljIGZsb2F0IGxCdWlsZEZsb2F0VmFsdWUoY29uc3Qg
Y2hhciAqc3RyLCBpbnQgbGVuLCBpbnQgZXhwKQotewotICAgIGRvdWJsZSB2YWwsIGV4cHZhbCwg
dGVuOwotICAgIGludCBpaSwgbGxlbiwgYWJzZXhwOwotICAgIGZsb2F0IHJ2OworI2RlZmluZSBB
UFBFTkRfQ0hBUl9TKGNoLCBzdHIsIGxlbiwgbWF4X2xlbikgXAorICAgICAgaWYgKGxlbiA8IG1h
eF9sZW4pIHsgXAorICAgICAgICAgIHN0cltsZW4rK10gPSBjaDsgXAorICAgICAgfSBlbHNlIGlm
ICghYWxyZWFkeUNvbXBsYWluZWQpIHsgXAorICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJC
VUZGRVIgT1ZFUkZMT1ciKTsgXAorICAgICAgICAgIGFscmVhZHlDb21wbGFpbmVkID0gMTsgXAor
ICAgICAgfQogCi0gICAgdmFsID0gMC4wOwotICAgIGxsZW4gPSBsZW47Ci0gICAgZm9yIChpaSA9
IDA7IGlpIDwgbGVuOyBpaSsrKQotICAgICAgICB2YWwgPSB2YWwqMTAuMCArIChzdHJbaWldIC0g
JzAnKTsKLSAgICBpZiAoZXhwICE9IDApIHsKLSAgICAgICAgYWJzZXhwID0gZXhwID4gMCA/IGV4
cCA6IC1leHA7Ci0gICAgICAgIGV4cHZhbCA9IDEuMGY7Ci0gICAgICAgIHRlbiA9IDEwLjA7Ci0g
ICAgICAgIHdoaWxlIChhYnNleHApIHsKLSAgICAgICAgICAgIGlmIChhYnNleHAgJiAxKQotICAg
ICAgICAgICAgICAgIGV4cHZhbCAqPSB0ZW47Ci0gICAgICAgICAgICB0ZW4gKj0gdGVuOwotICAg
ICAgICAgICAgYWJzZXhwID4+PSAxOwotICAgICAgICB9Ci0gICAgICAgIGlmIChleHAgPj0gMCkg
ewotICAgICAgICAgICAgdmFsICo9IGV4cHZhbDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHZhbCAvPSBleHB2YWw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcnYgPSAoZmxvYXQpdmFs
OwotICAgIGlmIChpc2luZmYocnYpKSB7Ci0JCUNQUEVycm9yVG9JbmZvTG9nKCIgRVJST1JfX19G
UF9DT05TVF9PVkVSRkxPVyIpOwotICAgIH0KLSAgICByZXR1cm4gcnY7Ci19IC8vIGxCdWlsZEZs
b2F0VmFsdWUKLQotCiAvKgogICogbEZsb2F0Q29uc3QoKSAtIFNjYW4gYSBmbG9hdGluZyBwb2lu
dCBjb25zdGFudC4gIEFzc3VtZXMgdGhhdCB0aGUgc2Nhbm5lcgogICogICAgICAgICBoYXMgc2Vl
biBhdCBsZWFzdCBvbmUgZGlnaXQsIGZvbGxvd2VkIGJ5IGVpdGhlciBhIGRlY2ltYWwgJy4nIG9y
IHRoZQogICogICAgICAgICBsZXR0ZXIgJ2UnLgorICogY2ggLSAnLicgb3IgJ2UnCisgKiBsZW4g
LSBsZW5ndGggb2Ygc3RyaW5nIGFscmVhZHkgY29waWVkIGludG8geXlsdmFscHAtPnN5bWJvbF9u
YW1lLgogICovCiAKLXN0YXRpYyBpbnQgbEZsb2F0Q29uc3QoY2hhciAqc3RyLCBpbnQgbGVuLCBp
bnQgY2gsIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQorc3RhdGljIGludCBsRmxvYXRDb25zdChpbnQg
Y2gsIGludCBsZW4sIHl5c3R5cGVwcCAqIHl5bHZhbHBwKQogewotICAgIGludCBIYXNEZWNpbWFs
LCBkZWNsZW4sIGV4cCwgRXhwU2lnbjsKLSAgICBpbnQgc3RyX2xlbjsKLSAgICBmbG9hdCBsdmFs
OwotICAgIAotICAgIEhhc0RlY2ltYWwgPSAwOwotICAgIGRlY2xlbiA9IDA7Ci0gICAgZXhwID0g
MDsKLQkKLSAgICBzdHJfbGVuPWxlbjsKKyAgICBpbnQgYWxyZWFkeUNvbXBsYWluZWQgPSAwOwor
ICAgIGFzc2VydCgoY2ggPT0gJy4nKSB8fCAoY2ggPT0gJ2UnKSB8fCAoY2ggPT0gJ0UnKSk7CisK
ICAgICBpZiAoY2ggPT0gJy4nKSB7Ci0JCXN0cltsZW4rK109Y2g7Ci0gICAgICAgIEhhc0RlY2lt
YWwgPSAxOwotICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICB3aGlsZSAoY2ggPj0gJzAnICYmIGNoIDw9ICc5
JykgewotICAgICAgICAgICAgaWYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pIHsKLSAgICAg
ICAgICAgICAgICBkZWNsZW4rKzsKLSAgICAgICAgICAgICAgICBpZiAobGVuID4gMCB8fCBjaCAh
PSAnMCcpIHsKLSAgICAgICAgICAgICAgICAgICAgc3RyW2xlbl0gPSBjaDsKLSAgICAgICAgICAg
ICAgICAgICAgbGVuKys7c3RyX2xlbisrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXls
dmFscHApOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBDUFBFcnJvclRv
SW5mb0xvZygiRVJST1JfX19GUF9DT05TVF9UT09fTE9ORyIpOwotICAgICAgICAgICAgICAgIGxl
biA9IDEsc3RyX2xlbj0xOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGRvIHsK
KyAgICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVu
LCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5w
dXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CisgICAgICAgIH0gd2hpbGUg
KGNoID49ICcwJyAmJiBjaCA8PSAnOScpOwogICAgIH0KIAogICAgIC8vIEV4cG9uZW50OgotCiAg
ICAgaWYgKGNoID09ICdlJyB8fCBjaCA9PSAnRScpIHsKLSAgICAgICAgRXhwU2lnbiA9IDE7Ci0J
CXN0cltsZW4rK109Y2g7CisgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5zeW1i
b2xfbmFtZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsKICAgICAgICAgY2ggPSBjcHAtPmN1
cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKICAgICAgICAg
aWYgKGNoID09ICcrJykgewotICAgICAgICAgICAgc3RyW2xlbisrXT1jaDsgIAotCQkJY2ggPSBj
cHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKKyAg
ICAgICAgICAgIEFQUEVORF9DSEFSX1MoY2gsIHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBN
QVhfU1lNQk9MX05BTUVfTEVOKTsKKyAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQt
PmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxwcCk7CiAgICAgICAgIH0gZWxzZSBpZiAo
Y2ggPT0gJy0nKSB7Ci0gICAgICAgICAgICBFeHBTaWduID0gLTE7Ci0JCQlzdHJbbGVuKytdPWNo
OworICAgICAgICAgICAgQVBQRU5EX0NIQVJfUyhjaCwgeXlsdmFscHAtPnN5bWJvbF9uYW1lLCBs
ZW4sIE1BWF9TWU1CT0xfTkFNRV9MRU4pOwogICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJ
bnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKICAgICAgICAgfQogICAg
ICAgICBpZiAoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgewogICAgICAgICAgICAgd2hpbGUgKGNo
ID49ICcwJyAmJiBjaCA8PSAnOScpIHsKLSAgICAgICAgICAgICAgICBleHAgPSBleHAqMTAgKyBj
aCAtICcwJzsKLQkJCQlzdHJbbGVuKytdPWNoOworICAgICAgICAgICAgICAgIEFQUEVORF9DSEFS
X1MoY2gsIHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBNQVhfU1lNQk9MX05BTUVfTEVOKTsK
ICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJl
bnRJbnB1dCwgeXlsdmFscHApOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVSUk9SX19fRVJST1JfSU5fRVhQT05FTlQiKTsK
KyAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFWFBPTkVOVCBJTlZBTElEIik7CiAgICAg
ICAgIH0KLSAgICAgICAgZXhwICo9IEV4cFNpZ247CiAgICAgfQotICAgICAgCi0gICAgaWYgKGxl
biA9PSAwKSB7Ci0gICAgICAgIGx2YWwgPSAwLjBmOwotCQlzdHJjcHkoc3RyLCIwLjAiKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBzdHJbbGVuXT0nXDAnOyAgICAgIAotICAgICAgICBsdmFsID0g
bEJ1aWxkRmxvYXRWYWx1ZShzdHIsIHN0cl9sZW4sIGV4cCAtIGRlY2xlbik7CisgICAgY3BwLT5j
dXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisK
KyAgICBhc3NlcnQobGVuIDw9IE1BWF9TWU1CT0xfTkFNRV9MRU4pOworICAgIHl5bHZhbHBwLT5z
eW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsKKyAgICB5eWx2YWxwcC0+c2NfZnZhbCA9IChmbG9hdCkg
YXRvZl9kb3QoeXlsdmFscHAtPnN5bWJvbF9uYW1lKTsKKyAgICBpZiAoaXNpbmZmKHl5bHZhbHBw
LT5zY19mdmFsKSkgeworICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRkxPQVQgQ09OU1RBTlQg
T1ZFUkZMT1ciKTsKICAgICB9Ci0gICAgLy8gU3VmZml4OgotICAgIAotICAgIHl5bHZhbHBwLT5z
Y19mdmFsID0gbHZhbDsKLSAgICBzdHJjcHkoeXlsdmFscHAtPnN5bWJvbF9uYW1lLHN0cik7Ci0g
ICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2
YWxwcCk7ICAgICAgICAgICAgCiAgICAgcmV0dXJuIENQUF9GTE9BVENPTlNUQU5UOwogfSAvLyBs
RmxvYXRDb25zdAogCkBAIC0zMTIsMjkgKzI1NywyOSBAQAogICAgIAogc3RhdGljIGludCBieXRl
X3NjYW4oSW5wdXRTcmMgKmluLCB5eXN0eXBlcHAgKiB5eWx2YWxwcCkKIHsKLSAgICBjaGFyIHN5
bWJvbF9uYW1lW01BWF9TWU1CT0xfTkFNRV9MRU4gKyAxXTsKICAgICBjaGFyIHN0cmluZ192YWxb
TUFYX1NUUklOR19MRU4gKyAxXTsKLSAgICBpbnQgQWxyZWFkeUNvbXBsYWluZWQ7CisgICAgaW50
IGFscmVhZHlDb21wbGFpbmVkID0gMDsKICAgICBpbnQgbGVuLCBjaCwgaWksIGl2YWwgPSAwOwog
CiAgICAgZm9yICg7OykgewogICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gMDsKICAgICAgICAg
Y2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBw
KTsKLQkJCisgCiAgICAgICAgIHdoaWxlIChjaCA9PSAnICcgfHwgY2ggPT0gJ1x0JyB8fCBjaCA9
PSAnXHInKSB7CiAgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gMTsKICAgICAgICAgICAg
IGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2YWxw
cCk7CiAgICAgICAgIH0KLQkJCisgICAgICAgIAogICAgICAgICBjcHAtPmx0b2tlbkxvYy5maWxl
ID0gY3BwLT5jdXJyZW50SW5wdXQtPm5hbWU7CiAgICAgICAgIGNwcC0+bHRva2VuTG9jLmxpbmUg
PSBjcHAtPmN1cnJlbnRJbnB1dC0+bGluZTsKKyAgICAgICAgYWxyZWFkeUNvbXBsYWluZWQgPSAw
OwogICAgICAgICBsZW4gPSAwOwogICAgICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgICAgIGRlZmF1
bHQ6Ci0JCQlyZXR1cm4gY2g7IC8vIFNpbmdsZSBjaGFyYWN0ZXIgdG9rZW4KKyAgICAgICAgICAg
IHJldHVybiBjaDsgLy8gU2luZ2xlIGNoYXJhY3RlciB0b2tlbgogICAgICAgICBjYXNlIEVPRjoK
ICAgICAgICAgICAgIHJldHVybiAtMTsKLQkJY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzog
Y2FzZSAnRCc6IGNhc2UgJ0UnOgorICAgICAgICBjYXNlICdBJzogY2FzZSAnQic6IGNhc2UgJ0Mn
OiBjYXNlICdEJzogY2FzZSAnRSc6CiAgICAgICAgIGNhc2UgJ0YnOiBjYXNlICdHJzogY2FzZSAn
SCc6IGNhc2UgJ0knOiBjYXNlICdKJzoKICAgICAgICAgY2FzZSAnSyc6IGNhc2UgJ0wnOiBjYXNl
ICdNJzogY2FzZSAnTic6IGNhc2UgJ08nOgogICAgICAgICBjYXNlICdQJzogY2FzZSAnUSc6IGNh
c2UgJ1InOiBjYXNlICdTJzogY2FzZSAnVCc6CkBAIC0zNDcsMzkgKzI5MiwzMiBAQAogICAgICAg
ICBjYXNlICd1JzogY2FzZSAndic6IGNhc2UgJ3cnOiBjYXNlICd4JzogY2FzZSAneSc6CiAgICAg
ICAgIGNhc2UgJ3onOiAgICAgICAgICAgIAogICAgICAgICAgICAgZG8gewotICAgICAgICAgICAg
ICAgIGlmIChsZW4gPCBNQVhfU1lNQk9MX05BTUVfTEVOKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHN5bWJvbF9uYW1lW2xlbl0gPSBjaDsKLSAgICAgICAgICAgICAgICAgICAgbGVuKys7Ci0gICAg
ICAgICAgICAgICAgICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVu
dElucHV0LCB5eWx2YWxwcCk7CQkJCQkKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBUFBF
TkRfQ0hBUl9TKGNoLCB5eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgTUFYX1NZTUJPTF9OQU1F
X0xFTik7CisgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKICAgICAgICAgICAgIH0gd2hpbGUgKChjaCA+PSAn
YScgJiYgY2ggPD0gJ3onKSB8fAogICAgICAgICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBj
aCA8PSAnWicpIHx8CiAgICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJzAnICYmIGNoIDw9ICc5
JykgfHwKICAgICAgICAgICAgICAgICAgICAgIGNoID09ICdfJyk7Ci0gICAgICAgICAgICBpZiAo
bGVuID49IE1BWF9TWU1CT0xfTkFNRV9MRU4pCi0gICAgICAgICAgICAgICAgbGVuID0gTUFYX1NZ
TUJPTF9OQU1FX0xFTiAtIDE7Ci0gICAgICAgICAgICBzeW1ib2xfbmFtZVtsZW5dID0gJ1wwJzsK
KyAgICAgICAgICAgIGFzc2VydChsZW4gPD0gTUFYX1NZTUJPTF9OQU1FX0xFTik7CisgICAgICAg
ICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7CiAgICAgICAgICAgICBjcHAt
PmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZhbHBwKTsK
LSAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFkZFN0cmluZyhhdGFibGUs
IHN5bWJvbF9uYW1lKTsKKyAgICAgICAgICAgIHl5bHZhbHBwLT5zY19pZGVudCA9IExvb2tVcEFk
ZFN0cmluZyhhdGFibGUsIHl5bHZhbHBwLT5zeW1ib2xfbmFtZSk7CiAgICAgICAgICAgICByZXR1
cm4gQ1BQX0lERU5USUZJRVI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAnMCc6
Ci0gICAgICAgICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuKytdID0gY2g7CisgICAgICAg
ICAgICBBUFBFTkRfQ0hBUl9TKGNoLCB5eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgTUFYX1NZ
TUJPTF9OQU1FX0xFTik7CiAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRj
aChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAgICAgICAgICAgaWYgKGNoID09ICd4
JyB8fCBjaCA9PSAnWCcpIHsKLQkJCQl5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuKytdID0gY2g7
CisgICAgICAgICAgICBpZiAoY2ggPT0gJ3gnIHx8IGNoID09ICdYJykgeyAgLy8gaGV4YWRlY2lt
YWwgaW50ZWdlciBjb25zdGFudHMKKyAgICAgICAgICAgICAgICBBUFBFTkRfQ0hBUl9TKGNoLCB5
eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgTUFYX1NZTUJPTF9OQU1FX0xFTik7CiAgICAgICAg
ICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQs
IHl5bHZhbHBwKTsKICAgICAgICAgICAgICAgICBpZiAoKGNoID49ICcwJyAmJiBjaCA8PSAnOScp
IHx8CiAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKSB8fAogICAg
ICAgICAgICAgICAgICAgICAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykpCiAgICAgICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxhaW5lZCA9IDA7CiAgICAgICAg
ICAgICAgICAgICAgIGl2YWwgPSAwOwogICAgICAgICAgICAgICAgICAgICBkbyB7Ci0JCQkJCQl5
eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuKytdID0gY2g7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoaXZhbCA8PSAweDBmZmZmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
KGl2YWwgPD0gMHgwZmZmZmZmZikgJiYgKGxlbiA8IE1BWF9TWU1CT0xfTkFNRV9MRU4pKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xlbisrXSA9
IGNoOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0g
JzknKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpID0gY2ggLSAnMCc7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA+PSAnQScgJiYgY2ggPD0g
J0YnKSB7CkBAIC0zODgsNzQgKzMyNiw2NyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpaSA9IGNoIC0gJ2EnICsgMTA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl2YWwgPSAoaXZhbCA8PCA0KSB8IGlpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIUFscmVhZHlDb21wbGFpbmVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19IRVhfQ09OU1RfT1ZFUkZMT1ciKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBbHJlYWR5Q29tcGxhaW5lZCA9IDE7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFhbHJlYWR5Q29tcGxhaW5lZCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJIRVggQ09OU1RBTlQgT1ZFUkZM
T1ciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHJlYWR5Q29tcGxhaW5lZCA9IDE7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBjaCA9
IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwog
ICAgICAgICAgICAgICAgICAgICB9IHdoaWxlICgoY2ggPj0gJzAnICYmIGNoIDw9ICc5JykgfHwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoID49ICdBJyAmJiBjaCA8PSAnRicpIHx8
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaCA+PSAnYScgJiYgY2ggPD0gJ2YnKSk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JU
b0luZm9Mb2coIkVSUk9SX19fRVJST1JfSU5fSEVYX0NPTlNUQU5UIik7CisgICAgICAgICAgICAg
ICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJIRVggQ09OU1RBTlQgSU5WQUxJRCIpOwogICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhc3NlcnQobGVuIDw9IE1BWF9TWU1CT0xfTkFN
RV9MRU4pOwogICAgICAgICAgICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW5dID0gJ1ww
JzsKLQkJCQljcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gs
IHl5bHZhbHBwKTsKLQkJCQl5eWx2YWxwcC0+c2NfaW50ID0gaXZhbDsKKyAgICAgICAgICAgICAg
ICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgY2gsIHl5bHZh
bHBwKTsKKyAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0gaXZhbDsKICAgICAgICAg
ICAgICAgICByZXR1cm4gQ1BQX0lOVENPTlNUQU5UOwogICAgICAgICAgICAgfSBlbHNlIGlmIChj
aCA+PSAnMCcgJiYgY2ggPD0gJzcnKSB7IC8vIG9jdGFsIGludGVnZXIgY29uc3RhbnRzCi0gICAg
ICAgICAgICAgICAgQWxyZWFkeUNvbXBsYWluZWQgPSAwOwogICAgICAgICAgICAgICAgIGl2YWwg
PSAwOwogICAgICAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICAgICAgeXlsdmFscHAt
PnN5bWJvbF9uYW1lW2xlbisrXSA9IGNoOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXZhbCA8
PSAweDFmZmZmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgoaXZhbCA8PSAweDFmZmZm
ZmZmKSAmJiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW4rK10gPSBjaDsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlpID0gY2ggLSAnMCc7CiAgICAgICAgICAgICAgICAgICAgICAgICBpdmFsID0g
KGl2YWwgPDwgMykgfCBpaTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghQWxyZWFkeUNvbXBsYWluZWQpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19PQ1RfQ09OU1RfT1ZFUkZMT1ci
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFscmVhZHlDb21wbGFpbmVkID0gMTsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIGlmICghYWxyZWFkeUNvbXBsYWluZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJPQ1QgQ09OU1RBTlQgT1ZFUkZMT1ci
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHlDb21wbGFpbmVkID0gMTsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElu
cHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogICAgICAgICAgICAgICAg
IH0gd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnNycpOwogICAgICAgICAgICAgICAgIGlmIChj
aCA9PSAnLicgfHwgY2ggPT0gJ2UnIHx8IGNoID09ICdmJyB8fCBjaCA9PSAnaCcgfHwgY2ggPT0g
J3gnfHwgY2ggPT0gJ0UnKSAKLSAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsRmxvYXRDb25z
dCh5eWx2YWxwcC0+c3ltYm9sX25hbWUsIGxlbiwgY2gsIHl5bHZhbHBwKTsKKyAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBsRmxvYXRDb25zdChjaCwgbGVuLCB5eWx2YWxwcCk7CisgICAgICAg
ICAgICAgICAgYXNzZXJ0KGxlbiA8PSBNQVhfU1lNQk9MX05BTUVfTEVOKTsKICAgICAgICAgICAg
ICAgICB5eWx2YWxwcC0+c3ltYm9sX25hbWVbbGVuXSA9ICdcMCc7Ci0JCQkJY3BwLT5jdXJyZW50
SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0JCQkJeXls
dmFscHAtPnNjX2ludCA9IGl2YWw7CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQt
PnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAg
ICAgeXlsdmFscHAtPnNjX2ludCA9IGl2YWw7CiAgICAgICAgICAgICAgICAgcmV0dXJuIENQUF9J
TlRDT05TVEFOVDsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0JCQkJY3BwLT5jdXJyZW50SW5wdXQt
PnVuZ2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIGNoLCB5eWx2YWxwcCk7Ci0JCQkJY2ggPSAnMCc7
CisgICAgICAgICAgICAgICAgY3BwLT5jdXJyZW50SW5wdXQtPnVuZ2V0Y2goY3BwLT5jdXJyZW50
SW5wdXQsIGNoLCB5eWx2YWxwcCk7CisgICAgICAgICAgICAgICAgY2ggPSAnMCc7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2guLi4KICAgICAgICAgY2FzZSAnMSc6
IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CiAgICAgICAgIGNhc2UgJzUnOiBjYXNlICc2
JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKICAgICAgICAgICAgIGRvIHsKLSAgICAg
ICAgICAgICAgICBpZiAobGVuIDwgTUFYX1NZTUJPTF9OQU1FX0xFTikgewotICAgICAgICAgICAg
ICAgICAgICBpZiAobGVuID4gMCB8fCBjaCAhPSAnMCcpIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHl5bHZhbHBwLT5zeW1ib2xfbmFtZVtsZW5dID0gY2g7Ci0gICAgICAgICAgICAgICAgICAg
bGVuKys7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgY2ggPSBj
cHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3BwLT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgQVBQRU5EX0NIQVJfUyhjaCwgeXlsdmFs
cHAtPnN5bWJvbF9uYW1lLCBsZW4sIE1BWF9TWU1CT0xfTkFNRV9MRU4pOworICAgICAgICAgICAg
ICAgIGNoID0gY3BwLT5jdXJyZW50SW5wdXQtPmdldGNoKGNwcC0+Y3VycmVudElucHV0LCB5eWx2
YWxwcCk7CiAgICAgICAgICAgICB9IHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKTsKICAg
ICAgICAgICAgIGlmIChjaCA9PSAnLicgfHwgY2ggPT0gJ2UnIHx8IGNoID09ICdmJyB8fCBjaCA9
PSAnaCcgfHwgY2ggPT0gJ3gnfHwgY2ggPT0gJ0UnKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGxGbG9hdENvbnN0KHl5bHZhbHBwLT5zeW1ib2xfbmFtZSwgbGVuLCBjaCwgeXlsdmFscHApOwor
ICAgICAgICAgICAgICAgIHJldHVybiBsRmxvYXRDb25zdChjaCwgbGVuLCB5eWx2YWxwcCk7CiAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGFzc2VydChsZW4gPD0gTUFYX1NZ
TUJPTF9OQU1FX0xFTik7CiAgICAgICAgICAgICAgICAgeXlsdmFscHAtPnN5bWJvbF9uYW1lW2xl
bl0gPSAnXDAnOwotCQkJCWNwcC0+Y3VycmVudElucHV0LT51bmdldGNoKGNwcC0+Y3VycmVudElu
cHV0LCBjaCwgeXlsdmFscHApOworICAgICAgICAgICAgICAgIGNwcC0+Y3VycmVudElucHV0LT51
bmdldGNoKGNwcC0+Y3VycmVudElucHV0LCBjaCwgeXlsdmFscHApOwogICAgICAgICAgICAgICAg
IGl2YWwgPSAwOwotICAgICAgICAgICAgICAgIEFscmVhZHlDb21wbGFpbmVkID0gMDsKICAgICAg
ICAgICAgICAgICBmb3IgKGlpID0gMDsgaWkgPCBsZW47IGlpKyspIHsKICAgICAgICAgICAgICAg
ICAgICAgY2ggPSB5eWx2YWxwcC0+c3ltYm9sX25hbWVbaWldIC0gJzAnOworICAgICAgICAgICAg
ICAgICAgICBpdmFsID0gaXZhbCoxMCArIGNoOwogICAgICAgICAgICAgICAgICAgICBpZiAoKGl2
YWwgPiAyMTQ3NDgzNjQpIHx8IChpdmFsID09IDIxNDc0ODM2NCAmJiBjaCA+PSA4KSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFBbHJlYWR5Q29tcGxhaW5lZCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJFUlJPUl9fX0lOVEVHRVJfQ09OU1Rf
T1ZFUkZMT1ciKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFscmVhZHlDb21wbGFpbmVkID0g
MTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCJJTlRFR0VSIENP
TlNUQU5UIE9WRVJGTE9XIik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpdmFsID0gaXZhbCoxMCArIGNo
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaW50ID0g
aXZhbDsKICAgICAgICAgICAgICAgICBpZihpdmFsPT0wKQpAQCAtNjA4LDcgKzUzOSw3IEBACiAg
ICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1
dCwgeXlsdmFscHApOwogICAgICAgICAgICAgaWYgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHsK
ICAgICAgICAgICAgICAgICBjcHAtPmN1cnJlbnRJbnB1dC0+dW5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgY2gsIHl5bHZhbHBwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbEZsb2F0Q29uc3Qo
eXlsdmFscHAtPnN5bWJvbF9uYW1lLCAwLCAnLicsIHl5bHZhbHBwKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbEZsb2F0Q29uc3QoJy4nLCAwLCB5eWx2YWxwcCk7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnLicpIHsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIC0xOyAvLyBTcGVjaWFsIEVPRiBoYWNrCkBAIC02MzMsMTQgKzU2NCwxNCBAQAog
ICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY2ggIT0gJyonKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoY2ggPT0gJ1xuJykgbmxjb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoID09IEVPRikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQUEVycm9y
VG9JbmZvTG9nKCJFUlJPUl9fX0VPRl9JTl9DT01NRU5UIik7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVPRiBJTiBDT01NRU5UIik7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgY2ggPSBjcHAtPmN1cnJlbnRJbnB1dC0+Z2V0Y2goY3Bw
LT5jdXJyZW50SW5wdXQsIHl5bHZhbHBwKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJ
bnB1dCwgeXlsdmFscHApOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gRU9GKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygiRVJST1JfX19FT0ZfSU5f
Q09NTUVOVCIpOworICAgICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9Mb2coIkVP
RiBJTiBDT01NRU5UIik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9IHdoaWxlIChjaCAhPSAnLycpOwpA
QCAtNjYyLDQxICs1OTMsNDAgQEAKICAgICAgICAgICAgICAgICAgICAgQ1BQRXJyb3JUb0luZm9M
b2coIlRoZSBsaW5lIGNvbnRpbnVhdGlvbiBjaGFyYWN0ZXIgKFxcKSBpcyBub3QgcGFydCBvZiB0
aGUgT3BlbkdMIEVTIFNoYWRpbmcgTGFuZ3VhZ2UiKTsKICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIC0xOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgTUFY
X1NUUklOR19MRU4pIHsKLSAgICAgICAgICAgICAgICAgICAgc3RyaW5nX3ZhbFtsZW5dID0gY2g7
Ci0gICAgICAgICAgICAgICAgICAgIGxlbisrOwotICAgICAgICAgICAgICAgICAgICBjaCA9IGNw
cC0+Y3VycmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwotICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBBUFBFTkRfQ0hBUl9TKGNoLCBzdHJpbmdf
dmFsLCBsZW4sIE1BWF9TVFJJTkdfTEVOKTsKKyAgICAgICAgICAgICAgICBjaCA9IGNwcC0+Y3Vy
cmVudElucHV0LT5nZXRjaChjcHAtPmN1cnJlbnRJbnB1dCwgeXlsdmFscHApOwogICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIGFzc2VydChsZW4gPD0gTUFYX1NUUklOR19MRU4pOwogICAgICAg
ICAgICAgc3RyaW5nX3ZhbFtsZW5dID0gJ1wwJzsKICAgICAgICAgICAgIGlmIChjaCA9PSAnIicp
IHsKICAgICAgICAgICAgICAgICB5eWx2YWxwcC0+c2NfaWRlbnQgPSBMb29rVXBBZGRTdHJpbmco
YXRhYmxlLCBzdHJpbmdfdmFsKTsKICAgICAgICAgICAgICAgICByZXR1cm4gQ1BQX1NUUkNPTlNU
QU5UOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5m
b0xvZygiRVJST1JfX19DUFBfRU9MX0lOX1NUUklORyIpOworICAgICAgICAgICAgICAgIENQUEVy
cm9yVG9JbmZvTG9nKCJFT0wgSU4gU1RSSU5HIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIEVS
Uk9SX1NZOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAg
ICB9CiB9IC8vIGJ5dGVfc2NhbgogCiBpbnQgeXlsZXhfQ1BQKGNoYXIqIGJ1ZiwgaW50IG1heFNp
emUpCiB7ICAgIAotCXl5c3R5cGVwcCB5eWx2YWxwcDsKKyAgICB5eXN0eXBlcHAgeXlsdmFscHA7
CiAgICAgaW50IHRva2VuID0gJ1xuJzsgICAKIAogICAgIGZvcig7OykgewogCiAgICAgICAgIGNo
YXIqIHRva2VuU3RyaW5nID0gMDsKICAgICAgICAgdG9rZW4gPSBjcHAtPmN1cnJlbnRJbnB1dC0+
c2NhbihjcHAtPmN1cnJlbnRJbnB1dCwgJnl5bHZhbHBwKTsKLQkJaWYoY2hlY2tfRU9GKHRva2Vu
KSkKLQkJICAgIHJldHVybiAwOworICAgICAgICBpZihjaGVja19FT0YodG9rZW4pKQorICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGlmICh0b2tlbiA9PSAnIycpIHsKICAgICAgICAgICAg
IGlmIChjcHAtPnByZXZpb3VzX3Rva2VuID09ICdcbid8fCBjcHAtPnByZXZpb3VzX3Rva2VuID09
IDApIHsKLQkJCSAgICB0b2tlbiA9IHJlYWRDUFBsaW5lKCZ5eWx2YWxwcCk7CisgICAgICAgICAg
ICAgICAgdG9rZW4gPSByZWFkQ1BQbGluZSgmeXlsdmFscHApOwogICAgICAgICAgICAgICAgIGlm
KGNoZWNrX0VPRih0b2tlbikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotCQkJICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBDUFBFcnJvclRvSW5mb0xvZygicHJlcHJvY2Vzc29yIGNvbW1h
bmQgbXVzdCBub3QgYmUgcHJlY2VkZWQgYnkgYW55IG90aGVyIHN0YXRlbWVudCBpbiB0aGF0IGxp
bmUiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTcwOCwzMCArNjM4LDI4IEBACiAg
ICAgICAgICAgICBjcHAtPnBhc3RGaXJzdFN0YXRlbWVudCA9IDE7CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAodG9rZW4gPT0gJ1xuJykK
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgIAotICAgICAgICBpZiAodG9rZW4gPT0g
Q1BQX0lERU5USUZJRVIpIHsgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBjcHAtPnBhc3RG
aXJzdFN0YXRlbWVudCA9IDE7CisgICAgICAgIGNwcC0+cGFzdEZpcnN0U3RhdGVtZW50ID0gMTsK
KworICAgICAgICBpZiAodG9rZW4gPT0gQ1BQX0lERU5USUZJRVIpIHsKICAgICAgICAgICAgIHRv
a2VuU3RyaW5nID0gR2V0U3RyaW5nT2ZBdG9tKGF0YWJsZSx5eWx2YWxwcC5zY19pZGVudCk7Ci0g
ICAgICAgIH0gZWxzZSBpZiAodG9rZW4gPT0gQ1BQX0ZMT0FUQ09OU1RBTlR8fHRva2VuID09IENQ
UF9JTlRDT05TVEFOVCl7ICAgICAgICAgICAgIAotICAgICAgICAgICAgY3BwLT5wYXN0Rmlyc3RT
dGF0ZW1lbnQgPSAxOyAgICAgICAgICAgIAorICAgICAgICB9IGVsc2UgaWYgKHRva2VuID09IENQ
UF9GTE9BVENPTlNUQU5UIHx8IHRva2VuID09IENQUF9JTlRDT05TVEFOVCl7CiAgICAgICAgICAg
ICB0b2tlblN0cmluZyA9IHl5bHZhbHBwLnN5bWJvbF9uYW1lOwotCQl9IGVsc2UgeyAgICAgICAg
ICAgIAotICAgICAgICAgICAgY3BwLT5wYXN0Rmlyc3RTdGF0ZW1lbnQgPSAxOyAgICAgICAgICAg
IAorICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdG9rZW5TdHJpbmcgPSBHZXRTdHJpbmdP
ZkF0b20oYXRhYmxlLHRva2VuKTsKLQkgICAgfQorICAgICAgICB9CiAKICAgICAgICAgaWYgKHRv
a2VuU3RyaW5nKSB7Ci0gICAgICAgICAgICBpZiAoKHNpZ25lZClzdHJsZW4odG9rZW5TdHJpbmcp
ID49IG1heFNpemUpIHsKLSAgICAgICAgICAgICAgICBjcHAtPnRva2Vuc0JlZm9yZUVPRiA9IDE7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1heFNpemU7ICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICB9IGVsc2UgIGlmIChzdHJsZW4odG9rZW5TdHJpbmcpID4gMCkgewotCQkJICAgIHN0cmNw
eShidWYsIHRva2VuU3RyaW5nKTsKLSAgICAgICAgICAgICAgICBjcHAtPnRva2Vuc0JlZm9yZUVP
RiA9IDE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpc3RybGVuKHRva2VuU3RyaW5nKTsK
LSAgICAgICAgICAgIH0gIAorICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbih0b2tlblN0cmlu
Zyk7CisgICAgICAgICAgICBjcHAtPnRva2Vuc0JlZm9yZUVPRiA9IDE7CisgICAgICAgICAgICBp
ZiAobGVuID49IG1heFNpemUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbWF4U2l6ZTsKKyAg
ICAgICAgICAgIH0gZWxzZSAgaWYgKGxlbiA+IDApIHsKKyAgICAgICAgICAgICAgICBzdHJjcHko
YnVmLCB0b2tlblN0cmluZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGxlbjsKKyAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTc0NSw3ICs2NzMs
NyBAQAogewogICAgaWYodG9rZW49PS0xKXsKICAgICAgICBpZihjcHAtPmlmZGVwdGggPjApewot
CQlDUFBFcnJvclRvSW5mb0xvZygiI2VuZGlmIG1pc3NpbmchISBDb21waWxhdGlvbiBzdG9wcGVk
Iik7CisgICAgICAgIENQUEVycm9yVG9JbmZvTG9nKCIjZW5kaWYgbWlzc2luZyEhIENvbXBpbGF0
aW9uIHN0b3BwZWQiKTsKICAgICAgICAgY3BwLT5Db21waWxlRXJyb3I9MTsKICAgICAgICB9CiAg
ICAgICByZXR1cm4gMTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvcHJlcHJvY2Vzcy5oCShyZXZpc2lv
biA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9j
ZXNzb3IvcHJlcHJvY2Vzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMCArNDIsMTAgQEAKIE5W
SURJQSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
IFwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqLwogCi0jIGluY2x1ZGUgImNvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zbGdsb2JhbHMuaCIKKyNpbmNsdWRlICJjb21waWxlci9wcmVwcm9jZXNzb3Ivc2xnbG9iYWxz
LmgiCiBleHRlcm4gQ1BQU3RydWN0ICpjcHA7CiBpbnQgSW5pdENQUFN0cnVjdCh2b2lkKTsKIGlu
dCBJbml0U2Nhbm5lcihDUFBTdHJ1Y3QgKmNwcCk7CiBpbnQgSW5pdEF0b21UYWJsZShBdG9tVGFi
bGUgKmF0YWJsZSwgaW50IGh0c2l6ZSk7Ci1pbnQgU2NhbkZyb21TdHJpbmcoY2hhciAqcyk7Citp
bnQgU2NhbkZyb21TdHJpbmcoY29uc3QgY2hhciAqcyk7CiBjaGFyKiBHZXRTdHJpbmdPZkF0b20o
QXRvbVRhYmxlICphdGFibGUsIGludCBhdG9tKTsKSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9wcmVwcm9jZXNzb3IvY29tcGlsZS5o
CShyZXZpc2lvbiA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxl
ci9wcmVwcm9jZXNzb3IvY29tcGlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxMCArODksMTAg
QEAKICAgICAvLyBHbG9iYWxzIHVzZWQgdG8gY29tbXVuaWNhdGUgYmV0d2VlbiBQYVBhcnNlU3Ry
aW5ncygpIGFuZCB5eV9pbnB1dCgpYW5kIAogICAgIC8vIGFsc28gYWNyb3NzIHRoZSBmaWxlcy4o
Z2VuX2dsc2xhbmcuY3BwIGFuZCBzY2FubmVyLmMpCiAgICAgLy8KLSAgICBpbnQgICAgUGFXaGlj
aFN0cjsgICAgICAgICAgICAvLyB3aGljaCBzdHJpbmcgd2UncmUgcGFyc2luZwotICAgIGludCog
ICBQYVN0ckxlbjsgICAgICAgICAgICAgIC8vIGFycmF5IG9mIGxlbmd0aHMgb2YgdGhlIFBhQXJn
diBzdHJpbmdzCi0gICAgaW50ICAgIFBhQXJnYzsgICAgICAgICAgICAgICAgLy8gY291bnQgb2Yg
c3RyaW5ncyBpbiB0aGUgYXJyYXkKLSAgICBjaGFyKiogUGFBcmd2OyAgICAgICAgICAgICAgICAv
LyBvdXIgYXJyYXkgb2Ygc3RyaW5ncyB0byBwYXJzZSAgICAKKyAgICBpbnQgUGFXaGljaFN0cjsg
ICAgICAgICAgICAgLy8gd2hpY2ggc3RyaW5nIHdlJ3JlIHBhcnNpbmcKKyAgICBjb25zdCBpbnQq
IFBhU3RyTGVuOyAgICAgICAgLy8gYXJyYXkgb2YgbGVuZ3RocyBvZiB0aGUgUGFBcmd2IHN0cmlu
Z3MKKyAgICBpbnQgUGFBcmdjOyAgICAgICAgICAgICAgICAgLy8gY291bnQgb2Ygc3RyaW5ncyBp
biB0aGUgYXJyYXkKKyAgICBjb25zdCBjaGFyKiBjb25zdCogUGFBcmd2OyAgLy8gb3VyIGFycmF5
IG9mIHN0cmluZ3MgdG8gcGFyc2UgICAgCiAgICAgdW5zaWduZWQgaW50IHRva2Vuc0JlZm9yZUVP
RiA6IDE7CiB9OwogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
VmVyc2lvbkdMU0wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9jb21waWxlci9WZXJzaW9uR0xTTC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEwOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQ
cm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3Vy
Y2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisv
LyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKworI2luY2x1ZGUgImNvbXBpbGVyL1Zl
cnNpb25HTFNMLmgiCisKK3N0YXRpYyBjb25zdCBpbnQgR0xTTF9WRVJTSU9OXzExMCA9IDExMDsK
K3N0YXRpYyBjb25zdCBpbnQgR0xTTF9WRVJTSU9OXzEyMCA9IDEyMDsKKworLy8gV2UgbmVlZCB0
byBzY2FuIGZvciB0d28gdGhpbmdzOgorLy8gMS4gImludmFyaWFudCIga2V5d29yZDogVGhpcyBj
YW4gb2NjdXIgaW4gYm90aCAtIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycworLy8gICAgYnV0
IG9ubHkgYXQgdGhlIGdsb2JhbCBzY29wZS4KKy8vIDIuICJnbF9Qb2ludENvb3JkIiBidWlsdC1p
biB2YXJpYWJsZTogVGhpcyBjYW4gb25seSBvY2N1ciBpbiBmcmFnbWVudCBzaGFkZXIKKy8vICAg
IGJ1dCBpbnNpZGUgYW55IHNjb3BlLgorLy8gU28gd2UgbmVlZCB0byBzY2FuIHRoZSBlbnRpcmUg
ZnJhZ21lbnQgc2hhZGVyIGJ1dCBvbmx5IHRoZSBnbG9iYWwgc2NvcGUKKy8vIG9mIHZlcnRleCBz
aGFkZXIuCisvLworLy8gVE9ETyhhbG9rcCk6IFRoZSBmb2xsb3dpbmcgdHdvIGNhc2VzIG9mIGlu
dmFyaWFudCBkZWNhbGFyYXRpb24gZ2V0IGxvc3QKKy8vIGR1cmluZyBwYXJzaW5nIC0gdGhleSBk
byBub3QgZ2V0IGNhcnJpZWQgb3ZlciB0byB0aGUgaW50ZXJtZWRpYXRlIHRyZWUuCisvLyBIYW5k
bGUgdGhlc2UgY2FzZXM6CisvLyAxLiBXaGVuIGEgcHJhZ21hIGlzIHVzZWQgdG8gZm9yY2UgYWxs
IG91dHB1dCB2YXJpYWJsZXMgdG8gYmUgaW52YXJpYW50OgorLy8gICAgLSAjcHJhZ21hIFNUREdM
IGludmFyaWFudChhbGwpCisvLyAyLiBXaGVuIGEgcHJldmlvdXNseSBkZWNhbGFyZWQgb3IgYnVp
bHQtaW4gdmFyaWFibGUgaXMgbWFya2VkIGludmFyaWFudDoKKy8vICAgIC0gaW52YXJpYW50IGds
X1Bvc2l0aW9uOworLy8gICAgLSB2YXJ5aW5nIHZlYzMgY29sb3I7IGludmFyaWFudCBjb2xvcjsK
Ky8vCitUVmVyc2lvbkdMU0w6OlRWZXJzaW9uR0xTTChTaFNoYWRlclR5cGUgdHlwZSkKKyAgICA6
IG1TaGFkZXJUeXBlKHR5cGUpLAorICAgICAgbVZlcnNpb24oR0xTTF9WRVJTSU9OXzExMCkKK3sK
K30KKwordm9pZCBUVmVyc2lvbkdMU0w6OnZpc2l0U3ltYm9sKFRJbnRlcm1TeW1ib2wqIG5vZGUp
Cit7CisgICAgQVNTRVJUKG1TaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUik7CisKKyAg
ICBpZiAobm9kZS0+Z2V0U3ltYm9sKCkgPT0gImdsX1BvaW50Q29vcmQiKQorICAgICAgICB1cGRh
dGVWZXJzaW9uKEdMU0xfVkVSU0lPTl8xMjApOworfQorCit2b2lkIFRWZXJzaW9uR0xTTDo6dmlz
aXRDb25zdGFudFVuaW9uKFRJbnRlcm1Db25zdGFudFVuaW9uKikKK3sKKyAgICBBU1NFUlQobVNo
YWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKTsKK30KKworYm9vbCBUVmVyc2lvbkdMU0w6
OnZpc2l0QmluYXJ5KFZpc2l0LCBUSW50ZXJtQmluYXJ5KikKK3sKKyAgICBBU1NFUlQobVNoYWRl
clR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBUVmVyc2lvbkdMU0w6OnZpc2l0VW5hcnkoVmlzaXQsIFRJbnRlcm1VbmFyeSopCit7CisgICAg
QVNTRVJUKG1TaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUik7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK2Jvb2wgVFZlcnNpb25HTFNMOjp2aXNpdFNlbGVjdGlvbihWaXNpdCwgVEludGVy
bVNlbGVjdGlvbiopCit7CisgICAgQVNTRVJUKG1TaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NI
QURFUik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVFZlcnNpb25HTFNMOjp2aXNpdEFn
Z3JlZ2F0ZShWaXNpdCwgVEludGVybUFnZ3JlZ2F0ZSogbm9kZSkKK3sKKyAgICAvLyBXZSBuZWVk
IHRvIHNjYW4gdGhlIGVudGlyZSBmcmFnbWVudCBzaGFkZXIgYnV0IG9ubHkgdGhlIGdsb2JhbCBz
Y29wZQorICAgIC8vIG9mIHZlcnRleCBzaGFkZXIuCisgICAgYm9vbCB2aXNpdENoaWxkcmVuID0g
bVNoYWRlclR5cGUgPT0gU0hfRlJBR01FTlRfU0hBREVSID8gdHJ1ZSA6IGZhbHNlOworCisgICAg
c3dpdGNoIChub2RlLT5nZXRPcCgpKSB7CisgICAgICBjYXNlIEVPcFNlcXVlbmNlOgorICAgICAg
ICAvLyBXZSBuZWVkIHRvIHZpc2l0IHNlcXVlbmNlIGNoaWxkcmVuIHRvIGdldCB0byBnbG9iYWwg
b3IgaW5uZXIgc2NvcGUuCisgICAgICAgIHZpc2l0Q2hpbGRyZW4gPSB0cnVlOworICAgICAgICBi
cmVhazsKKyAgICAgIGNhc2UgRU9wRGVjbGFyYXRpb246IHsKKyAgICAgICAgY29uc3QgVEludGVy
bVNlcXVlbmNlJiBzZXF1ZW5jZSA9IG5vZGUtPmdldFNlcXVlbmNlKCk7CisgICAgICAgIFRRdWFs
aWZpZXIgcXVhbGlmaWVyID0gc2VxdWVuY2UuZnJvbnQoKS0+Z2V0QXNUeXBlZCgpLT5nZXRRdWFs
aWZpZXIoKTsKKyAgICAgICAgaWYgKChxdWFsaWZpZXIgPT0gRXZxSW52YXJpYW50VmFyeWluZ0lu
KSB8fAorICAgICAgICAgICAgKHF1YWxpZmllciA9PSBFdnFJbnZhcmlhbnRWYXJ5aW5nT3V0KSkg
eworICAgICAgICAgICAgdXBkYXRlVmVyc2lvbihHTFNMX1ZFUlNJT05fMTIwKTsKKyAgICAgICAg
fQorICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgIH0K
KworICAgIHJldHVybiB2aXNpdENoaWxkcmVuOworfQorCitib29sIFRWZXJzaW9uR0xTTDo6dmlz
aXRMb29wKFZpc2l0LCBUSW50ZXJtTG9vcCopCit7CisgICAgQVNTRVJUKG1TaGFkZXJUeXBlID09
IFNIX0ZSQUdNRU5UX1NIQURFUik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgVFZlcnNp
b25HTFNMOjp2aXNpdEJyYW5jaChWaXNpdCwgVEludGVybUJyYW5jaCopCit7CisgICAgQVNTRVJU
KG1TaGFkZXJUeXBlID09IFNIX0ZSQUdNRU5UX1NIQURFUik7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgVFZlcnNpb25HTFNMOjp1cGRhdGVWZXJzaW9uKGludCB2ZXJzaW9uKQoreworICAg
IG1WZXJzaW9uID0gc3RkOjptYXgodmVyc2lvbiwgbVZlcnNpb24pOworfQorCkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvUGFyc2VIZWxwZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9QYXJzZUhlbHBlci5j
cHAJKHJldmlzaW9uIDc2MDI1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL1BhcnNlSGVscGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOSw5ICs5LDM1IEBACiAjaW5j
bHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KIAorI2luY2x1ZGUgImNvbXBpbGVy
L2dsc2xhbmcuaCIKICNpbmNsdWRlICJjb21waWxlci9vc2luY2x1ZGUuaCIKICNpbmNsdWRlICJj
b21waWxlci9Jbml0aWFsaXplUGFyc2VDb250ZXh0LmgiCiAKK2V4dGVybiAiQyIgeworZXh0ZXJu
IGludCBJbml0UHJlcHJvY2Vzc29yKCk7CitleHRlcm4gaW50IEZpbmFsaXplUHJlcHJvY2Vzc29y
KCk7CitleHRlcm4gdm9pZCBQcmVkZWZpbmVJbnRNYWNybyhjb25zdCBjaGFyICpuYW1lLCBpbnQg
dmFsdWUpOworfQorCitzdGF0aWMgdm9pZCBSZXBvcnRJbmZvKFRJbmZvU2lua0Jhc2UmIHNpbmss
CisgICAgICAgICAgICAgICAgICAgICAgIFRQcmVmaXhUeXBlIHR5cGUsIFRTb3VyY2VMb2MgbG9j
LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWFzb24sIGNvbnN0IGNoYXIq
IHRva2VuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXh0cmFJbmZvKQor
eworICAgIC8qIFZDKysgZm9ybWF0OiBmaWxlKGxpbmVudW0pIDogZXJyb3IgIzogJ3Rva2VuJyA6
IGV4dHJhaW5mbyAqLworICAgIHNpbmsucHJlZml4KHR5cGUpOworICAgIHNpbmsubG9jYXRpb24o
bG9jKTsKKyAgICBzaW5rIDw8ICInIiA8PCB0b2tlbiA8PCAgIicgOiAiIDw8IHJlYXNvbiA8PCAi
ICIgPDwgZXh0cmFJbmZvIDw8ICJcbiI7Cit9CisKK3N0YXRpYyB2b2lkIERlZmluZUV4dGVuc2lv
bk1hY3Jvcyhjb25zdCBURXh0ZW5zaW9uQmVoYXZpb3ImIGV4dEJlaGF2aW9yKQoreworICAgIGZv
ciAoVEV4dGVuc2lvbkJlaGF2aW9yOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXh0QmVoYXZpb3Iu
YmVnaW4oKTsKKyAgICAgICAgIGl0ZXIgIT0gZXh0QmVoYXZpb3IuZW5kKCk7ICsraXRlcikgewor
ICAgICAgICBQcmVkZWZpbmVJbnRNYWNybyhpdGVyLT5maXJzdC5jX3N0cigpLCAxKTsKKyAgICB9
Cit9CisKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLwogLy8gU3ViLSB2ZWN0b3IgYW5kIG1hdHJpeCBmaWVs
ZHMKQEAgLTE3NiwyNCArMjAyLDMyIEBACiAvLwogLy8gVXNlZCBieSBmbGV4L2Jpc29uIHRvIG91
dHB1dCBhbGwgc3ludGF4IGFuZCBwYXJzaW5nIGVycm9ycy4KIC8vCi12b2lkIFRQYXJzZUNvbnRl
eHQ6OmVycm9yKFRTb3VyY2VMb2MgbkxpbmUsIGNvbnN0IGNoYXIgKnN6UmVhc29uLCBjb25zdCBj
aGFyICpzelRva2VuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqc3pF
eHRyYUluZm9Gb3JtYXQsIC4uLikKK3ZvaWQgVFBhcnNlQ29udGV4dDo6ZXJyb3IoVFNvdXJjZUxv
YyBsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIHJlYXNvbiwgY29u
c3QgY2hhciogdG9rZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBl
eHRyYUluZm9Gb3JtYXQsIC4uLikKIHsKLSAgICBjaGFyIHN6RXh0cmFJbmZvWzQwMF07CisgICAg
Y2hhciBleHRyYUluZm9bNTEyXTsKICAgICB2YV9saXN0IG1hcmtlcjsKKyAgICB2YV9zdGFydCht
YXJrZXIsIGV4dHJhSW5mb0Zvcm1hdCk7CisgICAgdnNucHJpbnRmKGV4dHJhSW5mbywgc2l6ZW9m
KGV4dHJhSW5mbyksIGV4dHJhSW5mb0Zvcm1hdCwgbWFya2VyKTsKIAotICAgIHZhX3N0YXJ0KG1h
cmtlciwgc3pFeHRyYUluZm9Gb3JtYXQpOworICAgIFJlcG9ydEluZm8oaW5mb1NpbmsuaW5mbywg
RVByZWZpeEVycm9yLCBsb2MsIHJlYXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7CiAKLSAgICB2c25w
cmludGYoc3pFeHRyYUluZm8sIHNpemVvZihzekV4dHJhSW5mbyksIHN6RXh0cmFJbmZvRm9ybWF0
LCBtYXJrZXIpOworICAgIHZhX2VuZChtYXJrZXIpOworICAgICsrbnVtRXJyb3JzOworfQogCi0g
ICAgLyogVkMrKyBmb3JtYXQ6IGZpbGUobGluZW51bSkgOiBlcnJvciAjOiAndG9rZW4nIDogZXh0
cmFpbmZvICovCi0gICAgaW5mb1NpbmsuaW5mby5wcmVmaXgoRVByZWZpeEVycm9yKTsKLSAgICBp
bmZvU2luay5pbmZvLmxvY2F0aW9uKG5MaW5lKTsKLSAgICBpbmZvU2luay5pbmZvIDw8ICInIiA8
PCBzelRva2VuIDw8ICAiJyA6ICIgPDwgc3pSZWFzb24gPDwgIiAiIDw8IHN6RXh0cmFJbmZvIDw8
ICJcbiI7Cit2b2lkIFRQYXJzZUNvbnRleHQ6Ondhcm5pbmcoVFNvdXJjZUxvYyBsb2MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVhc29uLCBjb25zdCBjaGFyKiB0
b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBleHRyYUluZm9G
b3JtYXQsIC4uLikgeworICAgIGNoYXIgZXh0cmFJbmZvWzUxMl07CisgICAgdmFfbGlzdCBtYXJr
ZXI7CisgICAgdmFfc3RhcnQobWFya2VyLCBleHRyYUluZm9Gb3JtYXQpOworICAgIHZzbnByaW50
ZihleHRyYUluZm8sIHNpemVvZihleHRyYUluZm8pLCBleHRyYUluZm9Gb3JtYXQsIG1hcmtlcik7
CiAKKyAgICBSZXBvcnRJbmZvKGluZm9TaW5rLmluZm8sIEVQcmVmaXhXYXJuaW5nLCBsb2MsIHJl
YXNvbiwgdG9rZW4sIGV4dHJhSW5mbyk7CisKICAgICB2YV9lbmQobWFya2VyKTsKLQotICAgICsr
bnVtRXJyb3JzOwogfQogCiAvLwpAQCAtNDE1LDcgKzQ0OSw3IEBACiAgICAgICAgICAgICBlcnJv
cihsaW5lLCByZXNlcnZlZEVyck1zZywgImdsXyIsICIiKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzcGVjID09IEVTaFNwZWNXZWJHTCkgeworICAg
ICAgICBpZiAoc2hhZGVyU3BlYyA9PSBTSF9XRUJHTF9TUEVDKSB7CiAgICAgICAgICAgICBpZiAo
aWRlbnRpZmllci5zdWJzdHIoMCwgNikgPT0gVFN0cmluZygid2ViZ2xfIikpIHsKICAgICAgICAg
ICAgICAgICBlcnJvcihsaW5lLCByZXNlcnZlZEVyck1zZywgIndlYmdsXyIsICIiKTsKICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ3MSwxNyArNTA1LDE4IEBACiAgICAgYm9vbCBt
YXRyaXhJbk1hdHJpeCA9IGZhbHNlOwogICAgIGJvb2wgYXJyYXlBcmcgPSBmYWxzZTsKICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGZ1bmN0aW9uLmdldFBhcmFtQ291bnQoKTsgKytpKSB7Ci0gICAg
ICAgIHNpemUgKz0gZnVuY3Rpb25baV0udHlwZS0+Z2V0T2JqZWN0U2l6ZSgpOworICAgICAgICBj
b25zdCBUUGFyYW1ldGVyJiBwYXJhbSA9IGZ1bmN0aW9uLmdldFBhcmFtKGkpOworICAgICAgICBz
aXplICs9IHBhcmFtLnR5cGUtPmdldE9iamVjdFNpemUoKTsKICAgICAgICAgCi0gICAgICAgIGlm
IChjb25zdHJ1Y3RpbmdNYXRyaXggJiYgZnVuY3Rpb25baV0udHlwZS0+aXNNYXRyaXgoKSkKKyAg
ICAgICAgaWYgKGNvbnN0cnVjdGluZ01hdHJpeCAmJiBwYXJhbS50eXBlLT5pc01hdHJpeCgpKQog
ICAgICAgICAgICAgbWF0cml4SW5NYXRyaXggPSB0cnVlOwogICAgICAgICBpZiAoZnVsbCkKICAg
ICAgICAgICAgIG92ZXJGdWxsID0gdHJ1ZTsKICAgICAgICAgaWYgKG9wICE9IEVPcENvbnN0cnVj
dFN0cnVjdCAmJiAhdHlwZS0+aXNBcnJheSgpICYmIHNpemUgPj0gdHlwZS0+Z2V0T2JqZWN0U2l6
ZSgpKQogICAgICAgICAgICAgZnVsbCA9IHRydWU7Ci0gICAgICAgIGlmIChmdW5jdGlvbltpXS50
eXBlLT5nZXRRdWFsaWZpZXIoKSAhPSBFdnFDb25zdCkKKyAgICAgICAgaWYgKHBhcmFtLnR5cGUt
PmdldFF1YWxpZmllcigpICE9IEV2cUNvbnN0KQogICAgICAgICAgICAgY29uc3RUeXBlID0gZmFs
c2U7Ci0gICAgICAgIGlmIChmdW5jdGlvbltpXS50eXBlLT5pc0FycmF5KCkpCisgICAgICAgIGlm
IChwYXJhbS50eXBlLT5pc0FycmF5KCkpCiAgICAgICAgICAgICBhcnJheUFyZyA9IHRydWU7CiAg
ICAgfQogICAgIApAQCAtNTEwLDcgKzU0NSw3IEBACiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAKLSAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0Fy
cmF5KCkgJiYgdHlwZS0+Z2V0U3RydWN0KCktPnNpemUoKSAhPSBmdW5jdGlvbi5nZXRQYXJhbUNv
dW50KCkpIHsKKyAgICBpZiAob3AgPT0gRU9wQ29uc3RydWN0U3RydWN0ICYmICF0eXBlLT5pc0Fy
cmF5KCkgJiYgaW50KHR5cGUtPmdldFN0cnVjdCgpLT5zaXplKCkpICE9IGZ1bmN0aW9uLmdldFBh
cmFtQ291bnQoKSkgewogICAgICAgICBlcnJvcihsaW5lLCAiTnVtYmVyIG9mIGNvbnN0cnVjdG9y
IHBhcmFtZXRlcnMgZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiBzdHJ1Y3R1cmUgZmllbGRz
IiwgImNvbnN0cnVjdG9yIiwgIiIpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC02
NzQsMTQgKzcwOSwxMSBAQAogLy8KIGJvb2wgVFBhcnNlQ29udGV4dDo6YXJyYXlRdWFsaWZpZXJF
cnJvckNoZWNrKGludCBsaW5lLCBUUHVibGljVHlwZSB0eXBlKQogewotICAgIGlmICh0eXBlLnF1
YWxpZmllciA9PSBFdnFBdHRyaWJ1dGUpIHsKKyAgICBpZiAoKHR5cGUucXVhbGlmaWVyID09IEV2
cUF0dHJpYnV0ZSkgfHwgKHR5cGUucXVhbGlmaWVyID09IEV2cUNvbnN0KSkgewogICAgICAgICBl
cnJvcihsaW5lLCAiY2Fubm90IGRlY2xhcmUgYXJyYXlzIG9mIHRoaXMgcXVhbGlmaWVyIiwgVFR5
cGUodHlwZSkuZ2V0Q29tcGxldGVTdHJpbmcoKS5jX3N0cigpLCAiIik7CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIH0KIAotICAgIGlmICh0eXBlLnF1YWxpZmllciA9PSBFdnFDb25zdCAmJiBl
eHRlbnNpb25FcnJvckNoZWNrKGxpbmUsICJHTF8zRExfYXJyYXlfb2JqZWN0cyIpKQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLQogICAgIHJldHVybiBmYWxzZTsKIH0KIApAQCAtODg2LDE2ICs5MTgs
MjIgQEAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgVFBhcnNlQ29udGV4dDo6ZXh0ZW5z
aW9uRXJyb3JDaGVjayhpbnQgbGluZSwgY29uc3QgY2hhciogZXh0ZW5zaW9uKQoteyAgICAgICAK
LSAgICBpZiAoZXh0ZW5zaW9uQmVoYXZpb3JbZXh0ZW5zaW9uXSA9PSBFQmhXYXJuKSB7Ci0gICAg
ICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgKCJleHRlbnNpb24gIiAr
IFRTdHJpbmcoZXh0ZW5zaW9uKSArICIgaXMgYmVpbmcgdXNlZCIpLmNfc3RyKCksIGxpbmUpOwot
ICAgICAgICByZXR1cm4gZmFsc2U7Citib29sIFRQYXJzZUNvbnRleHQ6OmV4dGVuc2lvbkVycm9y
Q2hlY2soaW50IGxpbmUsIGNvbnN0IFRTdHJpbmcmIGV4dGVuc2lvbikKK3sKKyAgICBURXh0ZW5z
aW9uQmVoYXZpb3I6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBleHRlbnNpb25CZWhhdmlvci5maW5k
KGV4dGVuc2lvbik7CisgICAgaWYgKGl0ZXIgPT0gZXh0ZW5zaW9uQmVoYXZpb3IuZW5kKCkpIHsK
KyAgICAgICAgZXJyb3IobGluZSwgImV4dGVuc2lvbiIsIGV4dGVuc2lvbi5jX3N0cigpLCAiaXMg
bm90IHN1cHBvcnRlZCIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKGV4
dGVuc2lvbkJlaGF2aW9yW2V4dGVuc2lvbl0gPT0gRUJoRGlzYWJsZSkgewotICAgICAgICBlcnJv
cihsaW5lLCAiZXh0ZW5zaW9uIiwgZXh0ZW5zaW9uLCAiaXMgZGlzYWJsZWQiKTsKKyAgICBpZiAo
aXRlci0+c2Vjb25kID09IEVCaERpc2FibGUpIHsKKyAgICAgICAgZXJyb3IobGluZSwgImV4dGVu
c2lvbiIsIGV4dGVuc2lvbi5jX3N0cigpLCAiaXMgZGlzYWJsZWQiKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQorICAgIGlmIChpdGVyLT5zZWNvbmQgPT0gRUJoV2FybikgeworICAgICAg
ICBUU3RyaW5nIG1zZyA9ICJleHRlbnNpb24gIiArIGV4dGVuc2lvbiArICIgaXMgYmVpbmcgdXNl
ZCI7CisgICAgICAgIGluZm9TaW5rLmluZm8ubWVzc2FnZShFUHJlZml4V2FybmluZywgbXNnLmNf
c3RyKCksIGxpbmUpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgcmV0dXJu
IGZhbHNlOwogfQpAQCAtMTAyMSw2ICsxMDU5LDcgQEAKIAogYm9vbCBUUGFyc2VDb250ZXh0Ojph
cmVBbGxDaGlsZENvbnN0KFRJbnRlcm1BZ2dyZWdhdGUqIGFnZ3JOb2RlKQogeworICAgIEFTU0VS
VChhZ2dyTm9kZSAhPSBOVUxMKTsKICAgICBpZiAoIWFnZ3JOb2RlLT5pc0NvbnN0cnVjdG9yKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMTAyOCwxMyArMTA2NywxMCBAQAogCiAgICAg
Ly8gY2hlY2sgaWYgYWxsIHRoZSBjaGlsZCBub2RlcyBhcmUgY29uc3RhbnRzIHNvIHRoYXQgdGhl
eSBjYW4gYmUgaW5zZXJ0ZWQgaW50byAKICAgICAvLyB0aGUgcGFyZW50IG5vZGUKLSAgICBpZiAo
YWdnck5vZGUpIHsKLSAgICAgICAgVEludGVybVNlcXVlbmNlICZjaGlsZFNlcXVlbmNlVmVjdG9y
ID0gYWdnck5vZGUtPmdldFNlcXVlbmNlKCkgOwotICAgICAgICBmb3IgKFRJbnRlcm1TZXF1ZW5j
ZTo6aXRlcmF0b3IgcCA9IGNoaWxkU2VxdWVuY2VWZWN0b3IuYmVnaW4oKTsgCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwICE9IGNoaWxkU2VxdWVuY2VWZWN0b3IuZW5kKCk7
IHArKykgewotICAgICAgICAgICAgaWYgKCEoKnApLT5nZXRBc1R5cGVkKCktPmdldEFzQ29uc3Rh
bnRVbmlvbigpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQorICAg
IFRJbnRlcm1TZXF1ZW5jZSAmc2VxdWVuY2UgPSBhZ2dyTm9kZS0+Z2V0U2VxdWVuY2UoKSA7Cisg
ICAgZm9yIChUSW50ZXJtU2VxdWVuY2U6Oml0ZXJhdG9yIHAgPSBzZXF1ZW5jZS5iZWdpbigpOyBw
ICE9IHNlcXVlbmNlLmVuZCgpOyArK3ApIHsKKyAgICAgICAgaWYgKCEoKnApLT5nZXRBc1R5cGVk
KCktPmdldEFzQ29uc3RhbnRVbmlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IH0KIAogICAgIHJldHVybiBhbGxDb25zdGFudDsKQEAgLTEzNzksMTYgKzE0MTUsMjkgQEAKIH0K
IAogLy8KLS8vIEluaXRpYWxpemUgYWxsIHN1cHBvcnRlZCBleHRlbnNpb25zIHRvIGRpc2FibGUK
Ky8vIFBhcnNlIGFuIGFycmF5IG9mIHN0cmluZ3MgdXNpbmcgeXlwYXJzZS4KIC8vCi12b2lkIFRQ
YXJzZUNvbnRleHQ6OmluaXRpYWxpemVFeHRlbnNpb25CZWhhdmlvcigpCi17Ci0gICAgLy8KLSAg
ICAvLyBleGFtcGxlIGNvZGU6IGV4dGVuc2lvbkJlaGF2aW9yWyJ0ZXN0Il0gPSBFQmhEaXNhYmxl
OyAvLyB3aGVyZSAidGVzdCIgaXMgdGhlIG5hbWUgb2YgCi0gICAgLy8gc3VwcG9ydGVkIGV4dGVu
c2lvbgotICAgIC8vCi0gICAgZXh0ZW5zaW9uQmVoYXZpb3JbIkdMX0FSQl90ZXh0dXJlX3JlY3Rh
bmdsZSJdID0gRUJoUmVxdWlyZTsKLSAgICBleHRlbnNpb25CZWhhdmlvclsiR0xfM0RMX2FycmF5
X29iamVjdHMiXSA9IEVCaERpc2FibGU7CisvLyBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MuCisvLwor
aW50IFBhUGFyc2VTdHJpbmdzKGludCBjb3VudCwgY29uc3QgY2hhciogY29uc3Qgc3RyaW5nW10s
IGNvbnN0IGludCBsZW5ndGhbXSwKKyAgICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBj
b250ZXh0KSB7CisgICAgaWYgKChjb3VudCA9PSAwKSB8fCAoc3RyaW5nID09IE5VTEwpKQorICAg
ICAgICByZXR1cm4gMTsKKworICAgIC8vIHNldHVwIHByZXByb2Nlc3Nvci4KKyAgICBpZiAoSW5p
dFByZXByb2Nlc3NvcigpKQorICAgICAgICByZXR1cm4gMTsKKyAgICBEZWZpbmVFeHRlbnNpb25N
YWNyb3MoY29udGV4dC0+ZXh0ZW5zaW9uQmVoYXZpb3IpOworCisgICAgaWYgKGdsc2xhbmdfaW5p
dGlhbGl6ZShjb250ZXh0KSkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBnbHNsYW5nX3NjYW4o
Y291bnQsIHN0cmluZywgbGVuZ3RoLCBjb250ZXh0KTsKKyAgICBpbnQgZXJyb3IgPSBnbHNsYW5n
X3BhcnNlKGNvbnRleHQpOworCisgICAgZ2xzbGFuZ19maW5hbGl6ZShjb250ZXh0KTsKKyAgICBG
aW5hbGl6ZVByZXByb2Nlc3NvcigpOworICAgIHJldHVybiAoZXJyb3IgPT0gMCkgJiYgKGNvbnRl
eHQtPm51bUVycm9ycyA9PSAwKSA/IDAgOiAxOwogfQogCiBPU19UTFNJbmRleCBHbG9iYWxQYXJz
ZUNvbnRleHRJbmRleCA9IE9TX0lOVkFMSURfVExTX0lOREVYOwpJbmRleDogU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0ludGVybWVkaWF0ZS5jcHAJKHJl
dmlzaW9uIDc2MDI1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0lu
dGVybWVkaWF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDEwMSBAQAogICAgIHJl
dHVybiBsZWZ0ID4gcmlnaHQgPyBsZWZ0IDogcmlnaHQ7CiB9CiAKK2NvbnN0IGNoYXIqIGdldE9w
ZXJhdG9yU3RyaW5nKFRPcGVyYXRvciBvcCkgeworICAgIHN3aXRjaCAob3ApIHsKKyAgICAgIGNh
c2UgRU9wSW5pdGlhbGl6ZTogcmV0dXJuICI9IjsKKyAgICAgIGNhc2UgRU9wQXNzaWduOiByZXR1
cm4gIj0iOworICAgICAgY2FzZSBFT3BBZGRBc3NpZ246IHJldHVybiAiKz0iOworICAgICAgY2Fz
ZSBFT3BTdWJBc3NpZ246IHJldHVybiAiLT0iOworICAgICAgY2FzZSBFT3BEaXZBc3NpZ246IHJl
dHVybiAiLz0iOworCisgICAgICAvLyBGYWxsLXRocm91Z2guCisgICAgICBjYXNlIEVPcE11bEFz
c2lnbjogCisgICAgICBjYXNlIEVPcFZlY3RvclRpbWVzTWF0cml4QXNzaWduOgorICAgICAgY2Fz
ZSBFT3BWZWN0b3JUaW1lc1NjYWxhckFzc2lnbjoKKyAgICAgIGNhc2UgRU9wTWF0cml4VGltZXNT
Y2FsYXJBc3NpZ246CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0cml4QXNzaWduOiByZXR1
cm4gIio9IjsKKworICAgICAgLy8gRmFsbC10aHJvdWdoLgorICAgICAgY2FzZSBFT3BJbmRleERp
cmVjdDoKKyAgICAgIGNhc2UgRU9wSW5kZXhJbmRpcmVjdDogcmV0dXJuICJbXSI7CisKKyAgICAg
IGNhc2UgRU9wSW5kZXhEaXJlY3RTdHJ1Y3Q6IHJldHVybiAiLiI7CisgICAgICBjYXNlIEVPcFZl
Y3RvclN3aXp6bGU6IHJldHVybiAiLiI7CisgICAgICBjYXNlIEVPcEFkZDogcmV0dXJuICIrIjsK
KyAgICAgIGNhc2UgRU9wU3ViOiByZXR1cm4gIi0iOworICAgICAgY2FzZSBFT3BNdWw6IHJldHVy
biAiKiI7CisgICAgICBjYXNlIEVPcERpdjogcmV0dXJuICIvIjsKKyAgICAgIGNhc2UgRU9wTW9k
OiBVTklNUExFTUVOVEVEKCk7IGJyZWFrOworICAgICAgY2FzZSBFT3BFcXVhbDogcmV0dXJuICI9
PSI7CisgICAgICBjYXNlIEVPcE5vdEVxdWFsOiByZXR1cm4gIiE9IjsKKyAgICAgIGNhc2UgRU9w
TGVzc1RoYW46IHJldHVybiAiPCI7CisgICAgICBjYXNlIEVPcEdyZWF0ZXJUaGFuOiByZXR1cm4g
Ij4iOworICAgICAgY2FzZSBFT3BMZXNzVGhhbkVxdWFsOiByZXR1cm4gIjw9IjsKKyAgICAgIGNh
c2UgRU9wR3JlYXRlclRoYW5FcXVhbDogcmV0dXJuICI+PSI7CisKKyAgICAgIC8vIEZhbGwtdGhy
b3VnaC4KKyAgICAgIGNhc2UgRU9wVmVjdG9yVGltZXNTY2FsYXI6CisgICAgICBjYXNlIEVPcFZl
Y3RvclRpbWVzTWF0cml4OgorICAgICAgY2FzZSBFT3BNYXRyaXhUaW1lc1ZlY3RvcjoKKyAgICAg
IGNhc2UgRU9wTWF0cml4VGltZXNTY2FsYXI6CisgICAgICBjYXNlIEVPcE1hdHJpeFRpbWVzTWF0
cml4OiByZXR1cm4gIioiOworCisgICAgICBjYXNlIEVPcExvZ2ljYWxPcjogcmV0dXJuICJ8fCI7
CisgICAgICBjYXNlIEVPcExvZ2ljYWxYb3I6IHJldHVybiAiXl4iOworICAgICAgY2FzZSBFT3BM
b2dpY2FsQW5kOiByZXR1cm4gIiYmIjsKKyAgICAgIGNhc2UgRU9wTmVnYXRpdmU6IHJldHVybiAi
LSI7CisgICAgICBjYXNlIEVPcFZlY3RvckxvZ2ljYWxOb3Q6IHJldHVybiAibm90IjsKKyAgICAg
IGNhc2UgRU9wTG9naWNhbE5vdDogcmV0dXJuICIhIjsKKyAgICAgIGNhc2UgRU9wUG9zdEluY3Jl
bWVudDogcmV0dXJuICIrKyI7CisgICAgICBjYXNlIEVPcFBvc3REZWNyZW1lbnQ6IHJldHVybiAi
LS0iOworICAgICAgY2FzZSBFT3BQcmVJbmNyZW1lbnQ6IHJldHVybiAiKysiOworICAgICAgY2Fz
ZSBFT3BQcmVEZWNyZW1lbnQ6IHJldHVybiAiLS0iOworCisgICAgICAvLyBGYWxsLXRocm91Z2gu
CisgICAgICBjYXNlIEVPcENvbnZJbnRUb0Jvb2w6CisgICAgICBjYXNlIEVPcENvbnZGbG9hdFRv
Qm9vbDogcmV0dXJuICJib29sIjsKKyAKKyAgICAgIC8vIEZhbGwtdGhyb3VnaC4KKyAgICAgIGNh
c2UgRU9wQ29udkJvb2xUb0Zsb2F0OgorICAgICAgY2FzZSBFT3BDb252SW50VG9GbG9hdDogcmV0
dXJuICJmbG9hdCI7CisgCisgICAgICAvLyBGYWxsLXRocm91Z2guCisgICAgICBjYXNlIEVPcENv
bnZGbG9hdFRvSW50OgorICAgICAgY2FzZSBFT3BDb252Qm9vbFRvSW50OiByZXR1cm4gImludCI7
CisKKyAgICAgIGNhc2UgRU9wUmFkaWFuczogcmV0dXJuICJyYWRpYW5zIjsKKyAgICAgIGNhc2Ug
RU9wRGVncmVlczogcmV0dXJuICJkZWdyZWVzIjsKKyAgICAgIGNhc2UgRU9wU2luOiByZXR1cm4g
InNpbiI7CisgICAgICBjYXNlIEVPcENvczogcmV0dXJuICJjb3MiOworICAgICAgY2FzZSBFT3BU
YW46IHJldHVybiAidGFuIjsKKyAgICAgIGNhc2UgRU9wQXNpbjogcmV0dXJuICJhc2luIjsKKyAg
ICAgIGNhc2UgRU9wQWNvczogcmV0dXJuICJhY29zIjsKKyAgICAgIGNhc2UgRU9wQXRhbjogcmV0
dXJuICJhdGFuIjsKKyAgICAgIGNhc2UgRU9wRXhwOiByZXR1cm4gImV4cCI7CisgICAgICBjYXNl
IEVPcExvZzogcmV0dXJuICJsb2ciOworICAgICAgY2FzZSBFT3BFeHAyOiByZXR1cm4gImV4cDIi
OworICAgICAgY2FzZSBFT3BMb2cyOiByZXR1cm4gImxvZzIiOworICAgICAgY2FzZSBFT3BTcXJ0
OiByZXR1cm4gInNxcnQiOworICAgICAgY2FzZSBFT3BJbnZlcnNlU3FydDogcmV0dXJuICJpbnZl
cnNlc3FydCI7CisgICAgICBjYXNlIEVPcEFiczogcmV0dXJuICJhYnMiOworICAgICAgY2FzZSBF
T3BTaWduOiByZXR1cm4gInNpZ24iOworICAgICAgY2FzZSBFT3BGbG9vcjogcmV0dXJuICJmbG9v
ciI7CisgICAgICBjYXNlIEVPcENlaWw6IHJldHVybiAiY2VpbCI7CisgICAgICBjYXNlIEVPcEZy
YWN0OiByZXR1cm4gImZyYWN0IjsKKyAgICAgIGNhc2UgRU9wTGVuZ3RoOiByZXR1cm4gImxlbmd0
aCI7CisgICAgICBjYXNlIEVPcE5vcm1hbGl6ZTogcmV0dXJuICJub3JtYWxpemUiOworICAgICAg
Y2FzZSBFT3BERmR4OiByZXR1cm4gImRGZHgiOworICAgICAgY2FzZSBFT3BERmR5OiByZXR1cm4g
ImRGZHkiOworICAgICAgY2FzZSBFT3BGd2lkdGg6IHJldHVybiAiZndpZHRoIjsKKyAgICAgIGNh
c2UgRU9wQW55OiByZXR1cm4gImFueSI7CisgICAgICBjYXNlIEVPcEFsbDogcmV0dXJuICJhbGwi
OworCisgICAgICBkZWZhdWx0OiBicmVhazsKKyAgICB9CisgICAgcmV0dXJuICIiOworfQorCiAv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCiAvLwogLy8gRmlyc3Qgc2V0IG9mIGZ1bmN0aW9ucyBhcmUgdG8g
aGVscCBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLgpAQCAtNTEsMTggKzE0
NiwyMyBAQAogVEludGVybVR5cGVkKiBUSW50ZXJtZWRpYXRlOjphZGRCaW5hcnlNYXRoKFRPcGVy
YXRvciBvcCwgVEludGVybVR5cGVkKiBsZWZ0LCBUSW50ZXJtVHlwZWQqIHJpZ2h0LCBUU291cmNl
TG9jIGxpbmUsIFRTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCiB7CiAgICAgc3dpdGNoIChvcCkg
eworICAgICAgICBjYXNlIEVPcEVxdWFsOgorICAgICAgICBjYXNlIEVPcE5vdEVxdWFsOgorICAg
ICAgICAgICAgaWYgKGxlZnQtPmlzQXJyYXkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEVPcExlc3NUaGFuOgogICAgICAgICBj
YXNlIEVPcEdyZWF0ZXJUaGFuOgogICAgICAgICBjYXNlIEVPcExlc3NUaGFuRXF1YWw6CiAgICAg
ICAgIGNhc2UgRU9wR3JlYXRlclRoYW5FcXVhbDoKLSAgICAgICAgICAgIGlmIChsZWZ0LT5nZXRU
eXBlKCkuaXNNYXRyaXgoKSB8fCBsZWZ0LT5nZXRUeXBlKCkuaXNBcnJheSgpIHx8IGxlZnQtPmdl
dFR5cGUoKS5pc1ZlY3RvcigpIHx8IGxlZnQtPmdldFR5cGUoKS5nZXRCYXNpY1R5cGUoKSA9PSBF
YnRTdHJ1Y3QpIHsKKyAgICAgICAgICAgIGlmIChsZWZ0LT5pc01hdHJpeCgpIHx8IGxlZnQtPmlz
QXJyYXkoKSB8fCBsZWZ0LT5pc1ZlY3RvcigpIHx8IGxlZnQtPmdldEJhc2ljVHlwZSgpID09IEVi
dFN0cnVjdCkgewogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRU9wTG9naWNhbE9yOgogICAgICAgICBjYXNl
IEVPcExvZ2ljYWxYb3I6CiAgICAgICAgIGNhc2UgRU9wTG9naWNhbEFuZDoKLSAgICAgICAgICAg
IGlmIChsZWZ0LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgIT0gRWJ0Qm9vbCB8fCBsZWZ0LT5n
ZXRUeXBlKCkuaXNNYXRyaXgoKSB8fCBsZWZ0LT5nZXRUeXBlKCkuaXNBcnJheSgpIHx8IGxlZnQt
PmdldFR5cGUoKS5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICBpZiAobGVmdC0+Z2V0QmFzaWNU
eXBlKCkgIT0gRWJ0Qm9vbCB8fCBsZWZ0LT5pc01hdHJpeCgpIHx8IGxlZnQtPmlzQXJyYXkoKSB8
fCBsZWZ0LT5pc1ZlY3RvcigpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTcwLDcgKzE3MCw3IEBACiAgICAgICAgIGNh
c2UgRU9wU3ViOgogICAgICAgICBjYXNlIEVPcERpdjoKICAgICAgICAgY2FzZSBFT3BNdWw6Ci0g
ICAgICAgICAgICBpZiAobGVmdC0+Z2V0VHlwZSgpLmdldEJhc2ljVHlwZSgpID09IEVidFN0cnVj
dCB8fCBsZWZ0LT5nZXRUeXBlKCkuZ2V0QmFzaWNUeXBlKCkgPT0gRWJ0Qm9vbCkKKyAgICAgICAg
ICAgIGlmIChsZWZ0LT5nZXRCYXNpY1R5cGUoKSA9PSBFYnRTdHJ1Y3QgfHwgbGVmdC0+Z2V0QmFz
aWNUeXBlKCkgPT0gRWJ0Qm9vbCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
ZGVmYXVsdDogYnJlYWs7CiAgICAgfQpAQCAtNzgsOCArMTc4LDEwIEBACiAgICAgLy8KICAgICAv
LyBGaXJzdCB0cnkgY29udmVydGluZyB0aGUgY2hpbGRyZW4gdG8gY29tcGF0aWJsZSB0eXBlcy4K
ICAgICAvLwotCi0gICAgaWYgKCEobGVmdC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpICYmIHJpZ2h0
LT5nZXRUeXBlKCkuZ2V0U3RydWN0KCkpKSB7CisgICAgaWYgKGxlZnQtPmdldFR5cGUoKS5nZXRT
dHJ1Y3QoKSAmJiByaWdodC0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKSB7CisgICAgICAgIGlmIChs
ZWZ0LT5nZXRUeXBlKCkgIT0gcmlnaHQtPmdldFR5cGUoKSkKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgIH0gZWxzZSB7CiAgICAgICAgIFRJbnRlcm1UeXBlZCogY2hpbGQgPSBhZGRDb252ZXJz
aW9uKG9wLCBsZWZ0LT5nZXRUeXBlKCksIHJpZ2h0KTsKICAgICAgICAgaWYgKGNoaWxkKQogICAg
ICAgICAgICAgcmlnaHQgPSBjaGlsZDsKQEAgLTkwLDEyICsxOTIsOCBAQAogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgaWYgKGxlZnQtPmdldFR5cGUoKSAhPSByaWdodC0+Z2V0VHlwZSgpKQotICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0KICAgICAvLwogICAgIC8vIE5lZWQgYSBuZXcgbm9k
ZSBob2xkaW5nIHRoaW5ncyB0b2dldGhlciB0aGVuLiAgTWFrZQogICAgIC8vIG9uZSBhbmQgcHJv
bW90ZSBpdCB0byB0aGUgcmlnaHQgdHlwZS4KQEAgLTEwNywxOCArMjA1LDE2IEBACiAKICAgICBu
b2RlLT5zZXRMZWZ0KGxlZnQpOwogICAgIG5vZGUtPnNldFJpZ2h0KHJpZ2h0KTsKLSAgICBpZiAo
ISBub2RlLT5wcm9tb3RlKGluZm9TaW5rKSkKKyAgICBpZiAoIW5vZGUtPnByb21vdGUoaW5mb1Np
bmspKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFRJbnRlcm1Db25zdGFudFVuaW9uICpsZWZ0
VGVtcENvbnN0YW50ID0gbGVmdC0+Z2V0QXNDb25zdGFudFVuaW9uKCk7Ci0gICAgVEludGVybUNv
bnN0YW50VW5pb24gKnJpZ2h0VGVtcENvbnN0YW50ID0gcmlnaHQtPmdldEFzQ29uc3RhbnRVbmlv
bigpOwotCiAgICAgLy8KICAgICAvLyBTZWUgaWYgd2UgY2FuIGZvbGQgY29uc3RhbnRzLgogICAg
IC8vCi0KICAgICBUSW50ZXJtVHlwZWQqIHR5cGVkUmV0dXJuTm9kZSA9IDA7Ci0gICAgaWYgKCBs
ZWZ0VGVtcENvbnN0YW50ICYmIHJpZ2h0VGVtcENvbnN0YW50KSB7CisgICAgVEludGVybUNvbnN0
YW50VW5pb24gKmxlZnRUZW1wQ29uc3RhbnQgPSBsZWZ0LT5nZXRBc0NvbnN0YW50VW5pb24oKTsK
KyAgICBUSW50ZXJtQ29uc3RhbnRVbmlvbiAqcmlnaHRUZW1wQ29uc3RhbnQgPSByaWdodC0+Z2V0
QXNDb25zdGFudFVuaW9uKCk7CisgICAgaWYgKGxlZnRUZW1wQ29uc3RhbnQgJiYgcmlnaHRUZW1w
Q29uc3RhbnQpIHsKICAgICAgICAgdHlwZWRSZXR1cm5Ob2RlID0gbGVmdFRlbXBDb25zdGFudC0+
Zm9sZChub2RlLT5nZXRPcCgpLCByaWdodFRlbXBDb25zdGFudCwgaW5mb1NpbmspOwogCiAgICAg
ICAgIGlmICh0eXBlZFJldHVybk5vZGUpCkBAIC02MDIsOSArNjk4LDkgQEAKIC8vCiAvLyBDcmVh
dGUgbG9vcCBub2Rlcy4KIC8vCi1USW50ZXJtTm9kZSogVEludGVybWVkaWF0ZTo6YWRkTG9vcChU
SW50ZXJtTm9kZSAqaW5pdCwgVEludGVybU5vZGUqIGJvZHksIFRJbnRlcm1UeXBlZCogdGVzdCwg
VEludGVybVR5cGVkKiB0ZXJtaW5hbCwgYm9vbCB0ZXN0Rmlyc3QsIFRTb3VyY2VMb2MgbGluZSkK
K1RJbnRlcm1Ob2RlKiBUSW50ZXJtZWRpYXRlOjphZGRMb29wKFRMb29wVHlwZSB0eXBlLCBUSW50
ZXJtTm9kZSogaW5pdCwgVEludGVybVR5cGVkKiBjb25kLCBUSW50ZXJtVHlwZWQqIGV4cHIsIFRJ
bnRlcm1Ob2RlKiBib2R5LCBUU291cmNlTG9jIGxpbmUpCiB7Ci0gICAgVEludGVybU5vZGUqIG5v
ZGUgPSBuZXcgVEludGVybUxvb3AoaW5pdCwgYm9keSwgdGVzdCwgdGVybWluYWwsIHRlc3RGaXJz
dCk7CisgICAgVEludGVybU5vZGUqIG5vZGUgPSBuZXcgVEludGVybUxvb3AodHlwZSwgaW5pdCwg
Y29uZCwgZXhwciwgYm9keSk7CiAgICAgbm9kZS0+c2V0TGluZShsaW5lKTsKIAogICAgIHJldHVy
biBub2RlOwpAQCAtNjMwLDcgKzcyNiw3IEBACiAvLyBUaGlzIGlzIHRvIGJlIGV4ZWN1dGVkIG9u
Y2UgdGhlIGZpbmFsIHJvb3QgaXMgcHV0IG9uIHRvcCBieSB0aGUgcGFyc2luZwogLy8gcHJvY2Vz
cy4KIC8vCi1ib29sIFRJbnRlcm1lZGlhdGU6OnBvc3RQcm9jZXNzKFRJbnRlcm1Ob2RlKiByb290
LCBFU2hMYW5ndWFnZSBsYW5ndWFnZSkKK2Jvb2wgVEludGVybWVkaWF0ZTo6cG9zdFByb2Nlc3Mo
VEludGVybU5vZGUqIHJvb3QpCiB7CiAgICAgaWYgKHJvb3QgPT0gMCkKICAgICAgICAgcmV0dXJu
IHRydWU7CkBAIC03NjAsNiArODU2LDEyIEBACiAvLwogYm9vbCBUSW50ZXJtQmluYXJ5Ojpwcm9t
b3RlKFRJbmZvU2luayYgaW5mb1NpbmspCiB7CisgICAgLy8gVGhpcyBmdW5jdGlvbiBvbmx5IGhh
bmRsZXMgc2NhbGFycywgdmVjdG9ycywgYW5kIG1hdHJpY2VzLgorICAgIGlmIChsZWZ0LT5pc0Fy
cmF5KCkgfHwgcmlnaHQtPmlzQXJyYXkoKSkgeworICAgICAgICBpbmZvU2luay5pbmZvLm1lc3Nh
Z2UoRVByZWZpeEludGVybmFsRXJyb3IsICJJbnZhbGlkIG9wZXJhdGlvbiBmb3IgYXJyYXlzIiwg
Z2V0TGluZSgpKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwogICAgIC8vIEdMU0wg
RVMgMi4wIGRvZXMgbm90IHN1cHBvcnQgaW1wbGljaXQgdHlwZSBjYXN0aW5nLgogICAgIC8vIFNv
IHRoZSBiYXNpYyB0eXBlIHNob3VsZCBhbHdheXMgbWF0Y2guCiAgICAgaWYgKGxlZnQtPmdldEJh
c2ljVHlwZSgpICE9IHJpZ2h0LT5nZXRCYXNpY1R5cGUoKSkKQEAgLTc4MSw0MCArODgzLDYgQEAK
ICAgICAgICAgZ2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlmaWVyKEV2cVRlbXBvcmFyeSk7CiAg
ICAgfQogCi0gICAgLy8KLSAgICAvLyBBcnJheSBvcGVyYXRpb25zLgotICAgIC8vCi0gICAgaWYg
KGxlZnQtPmlzQXJyYXkoKSB8fCByaWdodC0+aXNBcnJheSgpKSB7Ci0gICAgICAgIC8vCi0gICAg
ICAgIC8vIEFycmF5cyB0eXBlcyBoYXZlIHRvIGJlIGV4YWN0IG1hdGNoZXMuCi0gICAgICAgIC8v
Ci0gICAgICAgIGlmIChsZWZ0LT5nZXRUeXBlKCkgIT0gcmlnaHQtPmdldFR5cGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgICAg
ICAvLwotICAgICAgICAgICAgLy8gUHJvbW90ZSB0byBjb25kaXRpb25hbAotICAgICAgICAgICAg
Ly8KLSAgICAgICAgICAgIGNhc2UgRU9wRXF1YWw6Ci0gICAgICAgICAgICBjYXNlIEVPcE5vdEVx
dWFsOgotICAgICAgICAgICAgICAgIHNldFR5cGUoVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVk
KSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAg
ICAvLyBTZXQgYXJyYXkgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAg
Y2FzZSBFT3BBc3NpZ246Ci0gICAgICAgICAgICBjYXNlIEVPcEluaXRpYWxpemU6Ci0gICAgICAg
ICAgICAgICAgZ2V0VHlwZVBvaW50ZXIoKS0+c2V0QXJyYXlTaXplKGxlZnQtPmdldFR5cGUoKS5n
ZXRBcnJheVNpemUoKSk7Ci0gICAgICAgICAgICAgICAgZ2V0VHlwZVBvaW50ZXIoKS0+c2V0QXJy
YXlJbmZvcm1hdGlvblR5cGUobGVmdC0+Z2V0VHlwZSgpLmdldEFycmF5SW5mb3JtYXRpb25UeXBl
KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBkZWZhdWx0OgotICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0KICAgICBpbnQgc2l6ZSA9IHN0ZDo6bWF4KGxlZnQtPmdldE5vbWluYWxTaXpl
KCksIHJpZ2h0LT5nZXROb21pbmFsU2l6ZSgpKTsKIAogICAgIC8vCkluZGV4OiBTb3VyY2UvVGhp
cmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvdW5pc3RkLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL3VuaXN0ZC5oCShyZXZpc2lvbiA3NjAyNSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci91bmlzdGQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMSArMCwwIEBACi0vLyBUaGlzIGlzIGEgTlVMTCBmaWxlIGFuZCBpcyBtZWFu
dCB0byBiZSBlbXB0eQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L2dsc2xhbmdfdGFiLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvY29tcGlsZXIvZ2xzbGFuZ190YWIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2dsc2xhbmdfdGFiLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw0NzEwIEBACisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUgQmlzb24gMi4z
LiAgKi8KKworLyogU2tlbGV0b24gaW1wbGVtZW50YXRpb24gZm9yIEJpc29uJ3MgWWFjYy1saWtl
IHBhcnNlcnMgaW4gQworCisgICBDb3B5cmlnaHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAs
IDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKKyAgIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9w
dGlvbikKKyAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4gICovCisKKy8q
IEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHlvdSBtYXkgY3JlYXRlIGEgbGFyZ2VyIHdvcmsgdGhh
dCBjb250YWlucworICAgcGFydCBvciBhbGwgb2YgdGhlIEJpc29uIHBhcnNlciBza2VsZXRvbiBh
bmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKKyAgIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBz
byBsb25nIGFzIHRoYXQgd29yayBpc24ndCBpdHNlbGYgYQorICAgcGFyc2VyIGdlbmVyYXRvciB1
c2luZyB0aGUgc2tlbGV0b24gb3IgYSBtb2RpZmllZCB2ZXJzaW9uIHRoZXJlb2YKKyAgIGFzIGEg
cGFyc2VyIHNrZWxldG9uLiAgQWx0ZXJuYXRpdmVseSwgaWYgeW91IG1vZGlmeSBvciByZWRpc3Ry
aWJ1dGUKKyAgIHRoZSBwYXJzZXIgc2tlbGV0b24gaXRzZWxmLCB5b3UgbWF5IChhdCB5b3VyIG9w
dGlvbikgcmVtb3ZlIHRoaXMKKyAgIHNwZWNpYWwgZXhjZXB0aW9uLCB3aGljaCB3aWxsIGNhdXNl
IHRoZSBza2VsZXRvbiBhbmQgdGhlIHJlc3VsdGluZworICAgQmlzb24gb3V0cHV0IGZpbGVzIHRv
IGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2Ugd2l0
aG91dCB0aGlzIHNwZWNpYWwgZXhjZXB0aW9uLgorCisgICBUaGlzIHNwZWNpYWwgZXhjZXB0aW9u
IHdhcyBhZGRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGluCisgICB2ZXJzaW9u
IDIuMiBvZiBCaXNvbi4gICovCisKKy8qIEMgTEFMUigxKSBwYXJzZXIgc2tlbGV0b24gd3JpdHRl
biBieSBSaWNoYXJkIFN0YWxsbWFuLCBieQorICAgc2ltcGxpZnlpbmcgdGhlIG9yaWdpbmFsIHNv
LWNhbGxlZCAic2VtYW50aWMiIHBhcnNlci4gICovCisKKy8qIEFsbCBzeW1ib2xzIGRlZmluZWQg
YmVsb3cgc2hvdWxkIGJlZ2luIHdpdGggeXkgb3IgWVksIHRvIGF2b2lkCisgICBpbmZyaW5naW5n
IG9uIHVzZXIgbmFtZSBzcGFjZS4gIFRoaXMgc2hvdWxkIGJlIGRvbmUgZXZlbiBmb3IgbG9jYWwK
KyAgIHZhcmlhYmxlcywgYXMgdGhleSBtaWdodCBvdGhlcndpc2UgYmUgZXhwYW5kZWQgYnkgdXNl
ciBtYWNyb3MuCisgICBUaGVyZSBhcmUgc29tZSB1bmF2b2lkYWJsZSBleGNlcHRpb25zIHdpdGhp
biBpbmNsdWRlIGZpbGVzIHRvCisgICBkZWZpbmUgbmVjZXNzYXJ5IGxpYnJhcnkgc3ltYm9sczsg
dGhleSBhcmUgbm90ZWQgIklORlJJTkdFUyBPTgorICAgVVNFUiBOQU1FIFNQQUNFIiBiZWxvdy4g
ICovCisKKy8qIElkZW50aWZ5IEJpc29uIG91dHB1dC4gICovCisjZGVmaW5lIFlZQklTT04gMQor
CisvKiBCaXNvbiB2ZXJzaW9uLiAgKi8KKyNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjMiCisK
Ky8qIFNrZWxldG9uIG5hbWUuICAqLworI2RlZmluZSBZWVNLRUxFVE9OX05BTUUgInlhY2MuYyIK
KworLyogUHVyZSBwYXJzZXJzLiAgKi8KKyNkZWZpbmUgWVlQVVJFIDEKKworLyogVXNpbmcgbG9j
YXRpb25zLiAgKi8KKyNkZWZpbmUgWVlMU1BfTkVFREVEIDAKKworCisKKy8qIFRva2Vucy4gICov
CisjaWZuZGVmIFlZVE9LRU5UWVBFCisjIGRlZmluZSBZWVRPS0VOVFlQRQorICAgLyogUHV0IHRo
ZSB0b2tlbnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aGF0IEdEQiBhbmQgb3RoZXIgZGVi
dWdnZXJzCisgICAgICBrbm93IGFib3V0IHRoZW0uICAqLworICAgZW51bSB5eXRva2VudHlwZSB7
CisgICAgIElOVkFSSUFOVCA9IDI1OCwKKyAgICAgSElHSF9QUkVDSVNJT04gPSAyNTksCisgICAg
IE1FRElVTV9QUkVDSVNJT04gPSAyNjAsCisgICAgIExPV19QUkVDSVNJT04gPSAyNjEsCisgICAg
IFBSRUNJU0lPTiA9IDI2MiwKKyAgICAgQVRUUklCVVRFID0gMjYzLAorICAgICBDT05TVF9RVUFM
ID0gMjY0LAorICAgICBCT09MX1RZUEUgPSAyNjUsCisgICAgIEZMT0FUX1RZUEUgPSAyNjYsCisg
ICAgIElOVF9UWVBFID0gMjY3LAorICAgICBCUkVBSyA9IDI2OCwKKyAgICAgQ09OVElOVUUgPSAy
NjksCisgICAgIERPID0gMjcwLAorICAgICBFTFNFID0gMjcxLAorICAgICBGT1IgPSAyNzIsCisg
ICAgIElGID0gMjczLAorICAgICBESVNDQVJEID0gMjc0LAorICAgICBSRVRVUk4gPSAyNzUsCisg
ICAgIEJWRUMyID0gMjc2LAorICAgICBCVkVDMyA9IDI3NywKKyAgICAgQlZFQzQgPSAyNzgsCisg
ICAgIElWRUMyID0gMjc5LAorICAgICBJVkVDMyA9IDI4MCwKKyAgICAgSVZFQzQgPSAyODEsCisg
ICAgIFZFQzIgPSAyODIsCisgICAgIFZFQzMgPSAyODMsCisgICAgIFZFQzQgPSAyODQsCisgICAg
IE1BVFJJWDIgPSAyODUsCisgICAgIE1BVFJJWDMgPSAyODYsCisgICAgIE1BVFJJWDQgPSAyODcs
CisgICAgIElOX1FVQUwgPSAyODgsCisgICAgIE9VVF9RVUFMID0gMjg5LAorICAgICBJTk9VVF9R
VUFMID0gMjkwLAorICAgICBVTklGT1JNID0gMjkxLAorICAgICBWQVJZSU5HID0gMjkyLAorICAg
ICBTVFJVQ1QgPSAyOTMsCisgICAgIFZPSURfVFlQRSA9IDI5NCwKKyAgICAgV0hJTEUgPSAyOTUs
CisgICAgIFNBTVBMRVIyRCA9IDI5NiwKKyAgICAgU0FNUExFUkNVQkUgPSAyOTcsCisgICAgIElE
RU5USUZJRVIgPSAyOTgsCisgICAgIFRZUEVfTkFNRSA9IDI5OSwKKyAgICAgRkxPQVRDT05TVEFO
VCA9IDMwMCwKKyAgICAgSU5UQ09OU1RBTlQgPSAzMDEsCisgICAgIEJPT0xDT05TVEFOVCA9IDMw
MiwKKyAgICAgRklFTERfU0VMRUNUSU9OID0gMzAzLAorICAgICBMRUZUX09QID0gMzA0LAorICAg
ICBSSUdIVF9PUCA9IDMwNSwKKyAgICAgSU5DX09QID0gMzA2LAorICAgICBERUNfT1AgPSAzMDcs
CisgICAgIExFX09QID0gMzA4LAorICAgICBHRV9PUCA9IDMwOSwKKyAgICAgRVFfT1AgPSAzMTAs
CisgICAgIE5FX09QID0gMzExLAorICAgICBBTkRfT1AgPSAzMTIsCisgICAgIE9SX09QID0gMzEz
LAorICAgICBYT1JfT1AgPSAzMTQsCisgICAgIE1VTF9BU1NJR04gPSAzMTUsCisgICAgIERJVl9B
U1NJR04gPSAzMTYsCisgICAgIEFERF9BU1NJR04gPSAzMTcsCisgICAgIE1PRF9BU1NJR04gPSAz
MTgsCisgICAgIExFRlRfQVNTSUdOID0gMzE5LAorICAgICBSSUdIVF9BU1NJR04gPSAzMjAsCisg
ICAgIEFORF9BU1NJR04gPSAzMjEsCisgICAgIFhPUl9BU1NJR04gPSAzMjIsCisgICAgIE9SX0FT
U0lHTiA9IDMyMywKKyAgICAgU1VCX0FTU0lHTiA9IDMyNCwKKyAgICAgTEVGVF9QQVJFTiA9IDMy
NSwKKyAgICAgUklHSFRfUEFSRU4gPSAzMjYsCisgICAgIExFRlRfQlJBQ0tFVCA9IDMyNywKKyAg
ICAgUklHSFRfQlJBQ0tFVCA9IDMyOCwKKyAgICAgTEVGVF9CUkFDRSA9IDMyOSwKKyAgICAgUklH
SFRfQlJBQ0UgPSAzMzAsCisgICAgIERPVCA9IDMzMSwKKyAgICAgQ09NTUEgPSAzMzIsCisgICAg
IENPTE9OID0gMzMzLAorICAgICBFUVVBTCA9IDMzNCwKKyAgICAgU0VNSUNPTE9OID0gMzM1LAor
ICAgICBCQU5HID0gMzM2LAorICAgICBEQVNIID0gMzM3LAorICAgICBUSUxERSA9IDMzOCwKKyAg
ICAgUExVUyA9IDMzOSwKKyAgICAgU1RBUiA9IDM0MCwKKyAgICAgU0xBU0ggPSAzNDEsCisgICAg
IFBFUkNFTlQgPSAzNDIsCisgICAgIExFRlRfQU5HTEUgPSAzNDMsCisgICAgIFJJR0hUX0FOR0xF
ID0gMzQ0LAorICAgICBWRVJUSUNBTF9CQVIgPSAzNDUsCisgICAgIENBUkVUID0gMzQ2LAorICAg
ICBBTVBFUlNBTkQgPSAzNDcsCisgICAgIFFVRVNUSU9OID0gMzQ4CisgICB9OworI2VuZGlmCisv
KiBUb2tlbnMuICAqLworI2RlZmluZSBJTlZBUklBTlQgMjU4CisjZGVmaW5lIEhJR0hfUFJFQ0lT
SU9OIDI1OQorI2RlZmluZSBNRURJVU1fUFJFQ0lTSU9OIDI2MAorI2RlZmluZSBMT1dfUFJFQ0lT
SU9OIDI2MQorI2RlZmluZSBQUkVDSVNJT04gMjYyCisjZGVmaW5lIEFUVFJJQlVURSAyNjMKKyNk
ZWZpbmUgQ09OU1RfUVVBTCAyNjQKKyNkZWZpbmUgQk9PTF9UWVBFIDI2NQorI2RlZmluZSBGTE9B
VF9UWVBFIDI2NgorI2RlZmluZSBJTlRfVFlQRSAyNjcKKyNkZWZpbmUgQlJFQUsgMjY4CisjZGVm
aW5lIENPTlRJTlVFIDI2OQorI2RlZmluZSBETyAyNzAKKyNkZWZpbmUgRUxTRSAyNzEKKyNkZWZp
bmUgRk9SIDI3MgorI2RlZmluZSBJRiAyNzMKKyNkZWZpbmUgRElTQ0FSRCAyNzQKKyNkZWZpbmUg
UkVUVVJOIDI3NQorI2RlZmluZSBCVkVDMiAyNzYKKyNkZWZpbmUgQlZFQzMgMjc3CisjZGVmaW5l
IEJWRUM0IDI3OAorI2RlZmluZSBJVkVDMiAyNzkKKyNkZWZpbmUgSVZFQzMgMjgwCisjZGVmaW5l
IElWRUM0IDI4MQorI2RlZmluZSBWRUMyIDI4MgorI2RlZmluZSBWRUMzIDI4MworI2RlZmluZSBW
RUM0IDI4NAorI2RlZmluZSBNQVRSSVgyIDI4NQorI2RlZmluZSBNQVRSSVgzIDI4NgorI2RlZmlu
ZSBNQVRSSVg0IDI4NworI2RlZmluZSBJTl9RVUFMIDI4OAorI2RlZmluZSBPVVRfUVVBTCAyODkK
KyNkZWZpbmUgSU5PVVRfUVVBTCAyOTAKKyNkZWZpbmUgVU5JRk9STSAyOTEKKyNkZWZpbmUgVkFS
WUlORyAyOTIKKyNkZWZpbmUgU1RSVUNUIDI5MworI2RlZmluZSBWT0lEX1RZUEUgMjk0CisjZGVm
aW5lIFdISUxFIDI5NQorI2RlZmluZSBTQU1QTEVSMkQgMjk2CisjZGVmaW5lIFNBTVBMRVJDVUJF
IDI5NworI2RlZmluZSBJREVOVElGSUVSIDI5OAorI2RlZmluZSBUWVBFX05BTUUgMjk5CisjZGVm
aW5lIEZMT0FUQ09OU1RBTlQgMzAwCisjZGVmaW5lIElOVENPTlNUQU5UIDMwMQorI2RlZmluZSBC
T09MQ09OU1RBTlQgMzAyCisjZGVmaW5lIEZJRUxEX1NFTEVDVElPTiAzMDMKKyNkZWZpbmUgTEVG
VF9PUCAzMDQKKyNkZWZpbmUgUklHSFRfT1AgMzA1CisjZGVmaW5lIElOQ19PUCAzMDYKKyNkZWZp
bmUgREVDX09QIDMwNworI2RlZmluZSBMRV9PUCAzMDgKKyNkZWZpbmUgR0VfT1AgMzA5CisjZGVm
aW5lIEVRX09QIDMxMAorI2RlZmluZSBORV9PUCAzMTEKKyNkZWZpbmUgQU5EX09QIDMxMgorI2Rl
ZmluZSBPUl9PUCAzMTMKKyNkZWZpbmUgWE9SX09QIDMxNAorI2RlZmluZSBNVUxfQVNTSUdOIDMx
NQorI2RlZmluZSBESVZfQVNTSUdOIDMxNgorI2RlZmluZSBBRERfQVNTSUdOIDMxNworI2RlZmlu
ZSBNT0RfQVNTSUdOIDMxOAorI2RlZmluZSBMRUZUX0FTU0lHTiAzMTkKKyNkZWZpbmUgUklHSFRf
QVNTSUdOIDMyMAorI2RlZmluZSBBTkRfQVNTSUdOIDMyMQorI2RlZmluZSBYT1JfQVNTSUdOIDMy
MgorI2RlZmluZSBPUl9BU1NJR04gMzIzCisjZGVmaW5lIFNVQl9BU1NJR04gMzI0CisjZGVmaW5l
IExFRlRfUEFSRU4gMzI1CisjZGVmaW5lIFJJR0hUX1BBUkVOIDMyNgorI2RlZmluZSBMRUZUX0JS
QUNLRVQgMzI3CisjZGVmaW5lIFJJR0hUX0JSQUNLRVQgMzI4CisjZGVmaW5lIExFRlRfQlJBQ0Ug
MzI5CisjZGVmaW5lIFJJR0hUX0JSQUNFIDMzMAorI2RlZmluZSBET1QgMzMxCisjZGVmaW5lIENP
TU1BIDMzMgorI2RlZmluZSBDT0xPTiAzMzMKKyNkZWZpbmUgRVFVQUwgMzM0CisjZGVmaW5lIFNF
TUlDT0xPTiAzMzUKKyNkZWZpbmUgQkFORyAzMzYKKyNkZWZpbmUgREFTSCAzMzcKKyNkZWZpbmUg
VElMREUgMzM4CisjZGVmaW5lIFBMVVMgMzM5CisjZGVmaW5lIFNUQVIgMzQwCisjZGVmaW5lIFNM
QVNIIDM0MQorI2RlZmluZSBQRVJDRU5UIDM0MgorI2RlZmluZSBMRUZUX0FOR0xFIDM0MworI2Rl
ZmluZSBSSUdIVF9BTkdMRSAzNDQKKyNkZWZpbmUgVkVSVElDQUxfQkFSIDM0NQorI2RlZmluZSBD
QVJFVCAzNDYKKyNkZWZpbmUgQU1QRVJTQU5EIDM0NworI2RlZmluZSBRVUVTVElPTiAzNDgKKwor
CisKKworLyogQ29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisK
KworLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRoZSBBTkdMRSBQcm9qZWN0IEF1dGhv
cnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBn
b3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisvLyBmb3VuZCBpbiB0
aGUgTElDRU5TRSBmaWxlLgorLy8KKworLy8gVGhpcyBmaWxlIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5
IGdlbmVyYXRlX2dsc2xhbmdfcGFyc2VyLnNoLiBETyBOT1QgRURJVCEKKworI2luY2x1ZGUgImNv
bXBpbGVyL1N5bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvUGFyc2VIZWxwZXIuaCIK
KyNpbmNsdWRlICJHTFNMQU5HL1NoYWRlckxhbmcuaCIKKworI2RlZmluZSBZWUxFWF9QQVJBTSBj
b250ZXh0LT5zY2FubmVyCisKKworLyogRW5hYmxpbmcgdHJhY2VzLiAgKi8KKyNpZm5kZWYgWVlE
RUJVRworIyBkZWZpbmUgWVlERUJVRyAwCisjZW5kaWYKKworLyogRW5hYmxpbmcgdmVyYm9zZSBl
cnJvciBtZXNzYWdlcy4gICovCisjaWZkZWYgWVlFUlJPUl9WRVJCT1NFCisjIHVuZGVmIFlZRVJS
T1JfVkVSQk9TRQorIyBkZWZpbmUgWVlFUlJPUl9WRVJCT1NFIDEKKyNlbHNlCisjIGRlZmluZSBZ
WUVSUk9SX1ZFUkJPU0UgMAorI2VuZGlmCisKKy8qIEVuYWJsaW5nIHRoZSB0b2tlbiB0YWJsZS4g
ICovCisjaWZuZGVmIFlZVE9LRU5fVEFCTEUKKyMgZGVmaW5lIFlZVE9LRU5fVEFCTEUgMAorI2Vu
ZGlmCisKKyNpZiAhIGRlZmluZWQgWVlTVFlQRSAmJiAhIGRlZmluZWQgWVlTVFlQRV9JU19ERUNM
QVJFRAordHlwZWRlZiB1bmlvbiBZWVNUWVBFCisKK3sKKyAgICBzdHJ1Y3QgeworICAgICAgICBU
U291cmNlTG9jIGxpbmU7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIFRTdHJpbmcgKnN0
cmluZzsKKyAgICAgICAgICAgIGZsb2F0IGY7CisgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAg
ICAgIGJvb2wgYjsKKyAgICAgICAgfTsKKyAgICAgICAgVFN5bWJvbCogc3ltYm9sOworICAgIH0g
bGV4OworICAgIHN0cnVjdCB7CisgICAgICAgIFRTb3VyY2VMb2MgbGluZTsKKyAgICAgICAgVE9w
ZXJhdG9yIG9wOworICAgICAgICB1bmlvbiB7CisgICAgICAgICAgICBUSW50ZXJtTm9kZSogaW50
ZXJtTm9kZTsKKyAgICAgICAgICAgIFRJbnRlcm1Ob2RlUGFpciBub2RlUGFpcjsKKyAgICAgICAg
ICAgIFRJbnRlcm1UeXBlZCogaW50ZXJtVHlwZWROb2RlOworICAgICAgICAgICAgVEludGVybUFn
Z3JlZ2F0ZSogaW50ZXJtQWdncmVnYXRlOworICAgICAgICB9OworICAgICAgICB1bmlvbiB7Cisg
ICAgICAgICAgICBUUHVibGljVHlwZSB0eXBlOworICAgICAgICAgICAgVFByZWNpc2lvbiBwcmVj
aXNpb247CisgICAgICAgICAgICBUUXVhbGlmaWVyIHF1YWxpZmllcjsKKyAgICAgICAgICAgIFRG
dW5jdGlvbiogZnVuY3Rpb247CisgICAgICAgICAgICBUUGFyYW1ldGVyIHBhcmFtOworICAgICAg
ICAgICAgVFR5cGVMaW5lIHR5cGVMaW5lOworICAgICAgICAgICAgVFR5cGVMaXN0KiB0eXBlTGlz
dDsKKyAgICAgICAgfTsKKyAgICB9IGludGVybTsKK30KKy8qIExpbmUgMTg3IG9mIHlhY2MuYy4g
ICovCisKKwlZWVNUWVBFOworIyBkZWZpbmUgeXlzdHlwZSBZWVNUWVBFIC8qIG9ic29sZXNjZW50
OyB3aWxsIGJlIHdpdGhkcmF3biAqLworIyBkZWZpbmUgWVlTVFlQRV9JU19ERUNMQVJFRCAxCisj
IGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQorI2VuZGlmCisKKworCisvKiBDb3B5IHRoZSBz
ZWNvbmQgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy4gICovCisKKworZXh0ZXJuIGludCB5eWxl
eChZWVNUWVBFKiB5eWx2YWxfcGFyYW0sIHZvaWQqIHl5c2Nhbm5lcik7CitleHRlcm4gdm9pZCB5
eWVycm9yKFRQYXJzZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IGNoYXIqIHJlYXNvbik7CisKKyNk
ZWZpbmUgRlJBR19WRVJUX09OTFkoUywgTCkgeyAgXAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJU
eXBlICE9IFNIX0ZSQUdNRU5UX1NIQURFUiAmJiAgXAorICAgICAgICBjb250ZXh0LT5zaGFkZXJU
eXBlICE9IFNIX1ZFUlRFWF9TSEFERVIpIHsgIFwKKyAgICAgICAgY29udGV4dC0+ZXJyb3IoTCwg
IiBzdXBwb3J0ZWQgaW4gdmVydGV4L2ZyYWdtZW50IHNoYWRlcnMgb25seSAiLCBTLCAiIiwgIiIp
OyAgXAorICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7ICBcCisgICAgfSAgXAorfQorCisjZGVm
aW5lIFZFUlRFWF9PTkxZKFMsIEwpIHsgIFwKKyAgICBpZiAoY29udGV4dC0+c2hhZGVyVHlwZSAh
PSBTSF9WRVJURVhfU0hBREVSKSB7ICBcCisgICAgICAgIGNvbnRleHQtPmVycm9yKEwsICIgc3Vw
cG9ydGVkIGluIHZlcnRleCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOyAgXAorICAgIH0gIFwKK30KKworI2RlZmluZSBGUkFHX09OTFko
UywgTCkgeyAgXAorICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlICE9IFNIX0ZSQUdNRU5UX1NI
QURFUikgeyAgXAorICAgICAgICBjb250ZXh0LT5lcnJvcihMLCAiIHN1cHBvcnRlZCBpbiBmcmFn
bWVudCBzaGFkZXJzIG9ubHkgIiwgUywgIiIsICIiKTsgIFwKKyAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOyAgXAorICAgIH0gIFwKK30KKworCisvKiBMaW5lIDIxNiBvZiB5YWNjLmMuICAqLwor
CisKKyNpZmRlZiBzaG9ydAorIyB1bmRlZiBzaG9ydAorI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVf
VUlOVDgKK3R5cGVkZWYgWVlUWVBFX1VJTlQ4IHl5dHlwZV91aW50ODsKKyNlbHNlCit0eXBlZGVm
IHVuc2lnbmVkIGNoYXIgeXl0eXBlX3VpbnQ4OworI2VuZGlmCisKKyNpZmRlZiBZWVRZUEVfSU5U
OAordHlwZWRlZiBZWVRZUEVfSU5UOCB5eXR5cGVfaW50ODsKKyNlbGlmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3R5cGVkZWYgc2lnbmVkIGNoYXIgeXl0eXBlX2ludDg7
CisjZWxzZQordHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBlX2ludDg7CisjZW5kaWYKKworI2lmZGVm
IFlZVFlQRV9VSU5UMTYKK3R5cGVkZWYgWVlUWVBFX1VJTlQxNiB5eXR5cGVfdWludDE2OworI2Vs
c2UKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHl5dHlwZV91aW50MTY7CisjZW5kaWYKKwor
I2lmZGVmIFlZVFlQRV9JTlQxNgordHlwZWRlZiBZWVRZUEVfSU5UMTYgeXl0eXBlX2ludDE2Owor
I2Vsc2UKK3R5cGVkZWYgc2hvcnQgaW50IHl5dHlwZV9pbnQxNjsKKyNlbmRpZgorCisjaWZuZGVm
IFlZU0laRV9UCisjIGlmZGVmIF9fU0laRV9UWVBFX18KKyMgIGRlZmluZSBZWVNJWkVfVCBfX1NJ
WkVfVFlQRV9fCisjIGVsaWYgZGVmaW5lZCBzaXplX3QKKyMgIGRlZmluZSBZWVNJWkVfVCBzaXpl
X3QKKyMgZWxpZiAhIGRlZmluZWQgWVlTSVpFX1QgJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVm
aW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZp
bmVkIF9NU0NfVkVSKQorIyAgaW5jbHVkZSA8c3RkZGVmLmg+IC8qIElORlJJTkdFUyBPTiBVU0VS
IE5BTUUgU1BBQ0UgKi8KKyMgIGRlZmluZSBZWVNJWkVfVCBzaXplX3QKKyMgZWxzZQorIyAgZGVm
aW5lIFlZU0laRV9UIHVuc2lnbmVkIGludAorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgWVlT
SVpFX01BWElNVU0gKChZWVNJWkVfVCkgLTEpCisKKyNpZm5kZWYgWVlfCisjIGlmIFlZRU5BQkxF
X05MUworIyAgaWYgRU5BQkxFX05MUworIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklO
R0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLworIyAgIGRlZmluZSBZWV8obXNnaWQpIGRnZXR0ZXh0
ICgiYmlzb24tcnVudGltZSIsIG1zZ2lkKQorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZuZGVmIFlZ
XworIyAgZGVmaW5lIFlZXyhtc2dpZCkgbXNnaWQKKyMgZW5kaWYKKyNlbmRpZgorCisvKiBTdXBw
cmVzcyB1bnVzZWQtdmFyaWFibGUgd2FybmluZ3MgYnkgInVzaW5nIiBFLiAgKi8KKyNpZiAhIGRl
ZmluZWQgbGludCB8fCBkZWZpbmVkIF9fR05VQ19fCisjIGRlZmluZSBZWVVTRShlKSAoKHZvaWQp
IChlKSkKKyNlbHNlCisjIGRlZmluZSBZWVVTRShlKSAvKiBlbXB0eSAqLworI2VuZGlmCisKKy8q
IElkZW50aXR5IGZ1bmN0aW9uLCB1c2VkIHRvIHN1cHByZXNzIHdhcm5pbmdzIGFib3V0IGNvbnN0
YW50IGNvbmRpdGlvbnMuICAqLworI2lmbmRlZiBsaW50CisjIGRlZmluZSBZWUlEKG4pIChuKQor
I2Vsc2UKKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAor
ICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCitzdGF0aWMg
aW50CitZWUlEIChpbnQgaSkKKyNlbHNlCitzdGF0aWMgaW50CitZWUlEIChpKQorICAgIGludCBp
OworI2VuZGlmCit7CisgIHJldHVybiBpOworfQorI2VuZGlmCisKKyNpZiAhIGRlZmluZWQgeXlv
dmVyZmxvdyB8fCBZWUVSUk9SX1ZFUkJPU0UKKworLyogVGhlIHBhcnNlciBpbnZva2VzIGFsbG9j
YSBvciBtYWxsb2M7IGRlZmluZSB0aGUgbmVjZXNzYXJ5IHN5bWJvbHMuICAqLworCisjIGlmZGVm
IFlZU1RBQ0tfVVNFX0FMTE9DQQorIyAgaWYgWVlTVEFDS19VU0VfQUxMT0NBCisjICAgaWZkZWYg
X19HTlVDX18KKyMgICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0MgX19idWlsdGluX2FsbG9jYQorIyAg
IGVsaWYgZGVmaW5lZCBfX0JVSUxUSU5fVkFfQVJHX0lOQ1IKKyMgICAgaW5jbHVkZSA8YWxsb2Nh
Lmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBlbGlmIGRlZmluZWQg
X0FJWAorIyAgICBkZWZpbmUgWVlTVEFDS19BTExPQyBfX2FsbG9jYQorIyAgIGVsaWYgZGVmaW5l
ZCBfTVNDX1ZFUgorIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4gLyogSU5GUklOR0VTIE9OIFVTRVIg
TkFNRSBTUEFDRSAqLworIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgICBlbHNlCisjICAg
IGRlZmluZSBZWVNUQUNLX0FMTE9DIGFsbG9jYQorIyAgICBpZiAhIGRlZmluZWQgX0FMTE9DQV9I
ICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQorIyAgICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5B
TUUgU1BBQ0UgKi8KKyMgICAgIGlmbmRlZiBfU1RETElCX0gKKyMgICAgICBkZWZpbmUgX1NURExJ
Ql9IIDEKKyMgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICAgZW5kaWYKKyMgIGVuZGlmCisjIGVu
ZGlmCisKKyMgaWZkZWYgWVlTVEFDS19BTExPQworICAgLyogUGFjaWZ5IEdDQydzIGBlbXB0eSBp
Zi1ib2R5JyB3YXJuaW5nLiAgKi8KKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUoUHRyKSBkbyB7IC8q
IGVtcHR5ICovOyB9IHdoaWxlIChZWUlEICgwKSkKKyMgIGlmbmRlZiBZWVNUQUNLX0FMTE9DX01B
WElNVU0KKyAgICAvKiBUaGUgT1MgbWlnaHQgZ3VhcmFudGVlIG9ubHkgb25lIGd1YXJkIHBhZ2Ug
YXQgdGhlIGJvdHRvbSBvZiB0aGUgc3RhY2ssCisgICAgICAgYW5kIGEgcGFnZSBzaXplIGNhbiBi
ZSBhcyBzbWFsbCBhcyA0MDk2IGJ5dGVzLiAgU28gd2UgY2Fubm90IHNhZmVseQorICAgICAgIGlu
dm9rZSBhbGxvY2EgKE4pIGlmIE4gZXhjZWVkcyA0MDk2LiAgVXNlIGEgc2xpZ2h0bHkgc21hbGxl
ciBudW1iZXIKKyAgICAgICB0byBhbGxvdyBmb3IgYSBmZXcgY29tcGlsZXItYWxsb2NhdGVkIHRl
bXBvcmFyeSBzdGFjayBzbG90cy4gICovCisjICAgZGVmaW5lIFlZU1RBQ0tfQUxMT0NfTUFYSU1V
TSA0MDMyIC8qIHJlYXNvbmFibGUgY2lyY2EgMjAwNiAqLworIyAgZW5kaWYKKyMgZWxzZQorIyAg
ZGVmaW5lIFlZU1RBQ0tfQUxMT0MgWVlNQUxMT0MKKyMgIGRlZmluZSBZWVNUQUNLX0ZSRUUgWVlG
UkVFCisjICBpZm5kZWYgWVlTVEFDS19BTExPQ19NQVhJTVVNCisjICAgZGVmaW5lIFlZU1RBQ0tf
QUxMT0NfTUFYSU1VTSBZWVNJWkVfTUFYSU1VTQorIyAgZW5kaWYKKyMgIGlmIChkZWZpbmVkIF9f
Y3BsdXNwbHVzICYmICEgZGVmaW5lZCBfU1RETElCX0ggXAorICAgICAgICYmICEgKChkZWZpbmVk
IFlZTUFMTE9DIHx8IGRlZmluZWQgbWFsbG9jKSBcCisJICAgICAmJiAoZGVmaW5lZCBZWUZSRUUg
fHwgZGVmaW5lZCBmcmVlKSkpCisjICAgaW5jbHVkZSA8c3RkbGliLmg+IC8qIElORlJJTkdFUyBP
TiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMgICBpZm5kZWYgX1NURExJQl9ICisjICAgIGRlZmluZSBf
U1RETElCX0ggMQorIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZTUFMTE9DCisjICAg
ZGVmaW5lIFlZTUFMTE9DIG1hbGxvYworIyAgIGlmICEgZGVmaW5lZCBtYWxsb2MgJiYgISBkZWZp
bmVkIF9TVERMSUJfSCAmJiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5D
X18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCit2
b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAq
LworIyAgIGVuZGlmCisjICBlbmRpZgorIyAgaWZuZGVmIFlZRlJFRQorIyAgIGRlZmluZSBZWUZS
RUUgZnJlZQorIyAgIGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQordm9pZCBmcmVlICh2b2lkICop
OyAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCisjICAgZW5kaWYKKyMgIGVuZGlm
CisjIGVuZGlmCisjZW5kaWYgLyogISBkZWZpbmVkIHl5b3ZlcmZsb3cgfHwgWVlFUlJPUl9WRVJC
T1NFICovCisKKworI2lmICghIGRlZmluZWQgeXlvdmVyZmxvdyBcCisgICAgICYmICghIGRlZmlu
ZWQgX19jcGx1c3BsdXMgXAorCSB8fCAoZGVmaW5lZCBZWVNUWVBFX0lTX1RSSVZJQUwgJiYgWVlT
VFlQRV9JU19UUklWSUFMKSkpCisKKy8qIEEgdHlwZSB0aGF0IGlzIHByb3Blcmx5IGFsaWduZWQg
Zm9yIGFueSBzdGFjayBtZW1iZXIuICAqLwordW5pb24geXlhbGxvYworeworICB5eXR5cGVfaW50
MTYgeXlzczsKKyAgWVlTVFlQRSB5eXZzOworICB9OworCisvKiBUaGUgc2l6ZSBvZiB0aGUgbWF4
aW11bSBnYXAgYmV0d2VlbiBvbmUgYWxpZ25lZCBzdGFjayBhbmQgdGhlIG5leHQuICAqLworIyBk
ZWZpbmUgWVlTVEFDS19HQVBfTUFYSU1VTSAoc2l6ZW9mICh1bmlvbiB5eWFsbG9jKSAtIDEpCisK
Ky8qIFRoZSBzaXplIG9mIGFuIGFycmF5IGxhcmdlIHRvIGVub3VnaCB0byBob2xkIGFsbCBzdGFj
a3MsIGVhY2ggd2l0aAorICAgTiBlbGVtZW50cy4gICovCisjIGRlZmluZSBZWVNUQUNLX0JZVEVT
KE4pIFwKKyAgICAgKChOKSAqIChzaXplb2YgKHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZ
UEUpKSBcCisgICAgICArIFlZU1RBQ0tfR0FQX01BWElNVU0pCisKKy8qIENvcHkgQ09VTlQgb2Jq
ZWN0cyBmcm9tIEZST00gdG8gVE8uICBUaGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkbworICAg
bm90IG92ZXJsYXAuICAqLworIyBpZm5kZWYgWVlDT1BZCisjICBpZiBkZWZpbmVkIF9fR05VQ19f
ICYmIDEgPCBfX0dOVUNfXworIyAgIGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KSBcCisg
ICAgICBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwgKENvdW50KSAqIHNpemVvZiAoKihGcm9t
KSkpCisjICBlbHNlCisjICAgZGVmaW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpCQlcCisgICAg
ICBkbwkJCQkJXAorCXsJCQkJCVwKKwkgIFlZU0laRV9UIHl5aTsJCQkJXAorCSAgZm9yICh5eWkg
PSAwOyB5eWkgPCAoQ291bnQpOyB5eWkrKykJXAorCSAgICAoVG8pW3l5aV0gPSAoRnJvbSlbeXlp
XTsJCVwKKwl9CQkJCQlcCisgICAgICB3aGlsZSAoWVlJRCAoMCkpCisjICBlbmRpZgorIyBlbmRp
ZgorCisvKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8gdGhlIG5ldyBv
bmUuICBUaGUKKyAgIGxvY2FsIHZhcmlhYmxlcyBZWVNJWkUgYW5kIFlZU1RBQ0tTSVpFIGdpdmUg
dGhlIG9sZCBhbmQgbmV3IG51bWJlciBvZgorICAgZWxlbWVudHMgaW4gdGhlIHN0YWNrLCBhbmQg
WVlQVFIgZ2l2ZXMgdGhlIG5ldyBsb2NhdGlvbiBvZiB0aGUKKyAgIHN0YWNrLiAgQWR2YW5jZSBZ
WVBUUiB0byBhIHByb3Blcmx5IGFsaWduZWQgbG9jYXRpb24gZm9yIHRoZSBuZXh0CisgICBzdGFj
ay4gICovCisjIGRlZmluZSBZWVNUQUNLX1JFTE9DQVRFKFN0YWNrKQkJCQkJXAorICAgIGRvCQkJ
CQkJCQkJXAorICAgICAgewkJCQkJCQkJCVwKKwlZWVNJWkVfVCB5eW5ld2J5dGVzOwkJCQkJCVwK
KwlZWUNPUFkgKCZ5eXB0ci0+U3RhY2ssIFN0YWNrLCB5eXNpemUpOwkJCQlcCisJU3RhY2sgPSAm
eXlwdHItPlN0YWNrOwkJCQkJCVwKKwl5eW5ld2J5dGVzID0geXlzdGFja3NpemUgKiBzaXplb2Yg
KCpTdGFjaykgKyBZWVNUQUNLX0dBUF9NQVhJTVVNOyBcCisJeXlwdHIgKz0geXluZXdieXRlcyAv
IHNpemVvZiAoKnl5cHRyKTsJCQkJXAorICAgICAgfQkJCQkJCQkJCVwKKyAgICB3aGlsZSAoWVlJ
RCAoMCkpCisKKyNlbmRpZgorCisvKiBZWUZJTkFMIC0tIFN0YXRlIG51bWJlciBvZiB0aGUgdGVy
bWluYXRpb24gc3RhdGUuICAqLworI2RlZmluZSBZWUZJTkFMICA2OQorLyogWVlMQVNUIC0tIExh
c3QgaW5kZXggaW4gWVlUQUJMRS4gICovCisjZGVmaW5lIFlZTEFTVCAgIDEzMzQKKworLyogWVlO
VE9LRU5TIC0tIE51bWJlciBvZiB0ZXJtaW5hbHMuICAqLworI2RlZmluZSBZWU5UT0tFTlMgIDk0
CisvKiBZWU5OVFMgLS0gTnVtYmVyIG9mIG5vbnRlcm1pbmFscy4gICovCisjZGVmaW5lIFlZTk5U
UyAgNzgKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBydWxlcy4gICovCisjZGVmaW5lIFlZTlJV
TEVTICAxOTMKKy8qIFlZTlJVTEVTIC0tIE51bWJlciBvZiBzdGF0ZXMuICAqLworI2RlZmluZSBZ
WU5TVEFURVMgIDI5NgorCisvKiBZWVRSQU5TTEFURShZWUxFWCkgLS0gQmlzb24gc3ltYm9sIG51
bWJlciBjb3JyZXNwb25kaW5nIHRvIFlZTEVYLiAgKi8KKyNkZWZpbmUgWVlVTkRFRlRPSyAgMgor
I2RlZmluZSBZWU1BWFVUT0sgICAzNDgKKworI2RlZmluZSBZWVRSQU5TTEFURShZWVgpCQkJCQkJ
XAorICAoKHVuc2lnbmVkIGludCkgKFlZWCkgPD0gWVlNQVhVVE9LID8geXl0cmFuc2xhdGVbWVlY
XSA6IFlZVU5ERUZUT0spCisKKy8qIFlZVFJBTlNMQVRFW1lZTEVYXSAtLSBCaXNvbiBzeW1ib2wg
bnVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gWVlMRVguICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91
aW50OCB5eXRyYW5zbGF0ZVtdID0KK3sKKyAgICAgICAwLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
CisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwK
KyAgICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAg
MiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAg
ICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLAorICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwg
ICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAor
ICAgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAy
LCAgICAgMiwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAg
ICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwKKyAgICAgICAyLCAgICAgMiwgICAgIDIs
ICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLAorICAgICAg
IDIsICAgICAyLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMiwgICAgIDEsICAgICAyLCAgICAg
MywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAg
ICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAg
IDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAzMywgICAg
MzQsCisgICAgICAzNSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQwLCAgICA0MSwg
ICAgNDIsICAgIDQzLCAgICA0NCwKKyAgICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICA0
OSwgICAgNTAsICAgIDUxLCAgICA1MiwgICAgNTMsICAgIDU0LAorICAgICAgNTUsICAgIDU2LCAg
ICA1NywgICAgNTgsICAgIDU5LCAgICA2MCwgICAgNjEsICAgIDYyLCAgICA2MywgICAgNjQsCisg
ICAgICA2NSwgICAgNjYsICAgIDY3LCAgICA2OCwgICAgNjksICAgIDcwLCAgICA3MSwgICAgNzIs
ICAgIDczLCAgICA3NCwKKyAgICAgIDc1LCAgICA3NiwgICAgNzcsICAgIDc4LCAgICA3OSwgICAg
ODAsICAgIDgxLCAgICA4MiwgICAgODMsICAgIDg0LAorICAgICAgODUsICAgIDg2LCAgICA4Nywg
ICAgODgsICAgIDg5LCAgICA5MCwgICAgOTEsICAgIDkyLCAgICA5MworfTsKKworI2lmIFlZREVC
VUcKKy8qIFlZUFJIU1tZWU5dIC0tIEluZGV4IG9mIHRoZSBmaXJzdCBSSFMgc3ltYm9sIG9mIHJ1
bGUgbnVtYmVyIFlZTiBpbgorICAgWVlSSFMuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50
MTYgeXlwcmhzW10gPQoreworICAgICAgIDAsICAgICAwLCAgICAgMywgICAgIDUsICAgICA3LCAg
ICAgOSwgICAgMTEsICAgIDEzLCAgICAxNywgICAgMTksCisgICAgICAyNCwgICAgMjYsICAgIDMw
LCAgICAzMywgICAgMzYsICAgIDM4LCAgICA0MCwgICAgNDIsICAgIDQ2LCAgICA0OSwKKyAgICAg
IDUyLCAgICA1NSwgICAgNTcsICAgIDYwLCAgICA2NCwgICAgNjcsICAgIDY5LCAgICA3MSwgICAg
NzMsICAgIDc1LAorICAgICAgNzgsICAgIDgxLCAgICA4NCwgICAgODYsICAgIDg4LCAgICA5MCwg
ICAgOTIsICAgIDk2LCAgIDEwMCwgICAxMDIsCisgICAgIDEwNiwgICAxMTAsICAgMTEyLCAgIDEx
NCwgICAxMTgsICAgMTIyLCAgIDEyNiwgICAxMzAsICAgMTMyLCAgIDEzNiwKKyAgICAgMTQwLCAg
IDE0MiwgICAxNDQsICAgMTQ2LCAgIDE0OCwgICAxNTIsICAgMTU0LCAgIDE1OCwgICAxNjAsICAg
MTY0LAorICAgICAxNjYsICAgMTcyLCAgIDE3NCwgICAxNzgsICAgMTgwLCAgIDE4MiwgICAxODQs
ICAgMTg2LCAgIDE4OCwgICAxOTAsCisgICAgIDE5NCwgICAxOTYsICAgMTk5LCAgIDIwMiwgICAy
MDcsICAgMjEwLCAgIDIxMiwgICAyMTQsICAgMjE3LCAgIDIyMSwKKyAgICAgMjI1LCAgIDIyOCwg
ICAyMzQsICAgMjM4LCAgIDI0MSwgICAyNDUsICAgMjQ4LCAgIDI0OSwgICAyNTEsICAgMjUzLAor
ICAgICAyNTUsICAgMjU3LCAgIDI1OSwgICAyNjMsICAgMjY5LCAgIDI3NiwgICAyODIsICAgMjg0
LCAgIDI4NywgICAyOTIsCisgICAgIDI5OCwgICAzMDMsICAgMzA2LCAgIDMwOCwgICAzMTEsICAg
MzEzLCAgIDMxNSwgICAzMTcsICAgMzIwLCAgIDMyMiwKKyAgICAgMzI0LCAgIDMyNywgICAzMjks
ICAgMzMxLCAgIDMzMywgICAzMzUsICAgMzQwLCAgIDM0MiwgICAzNDQsICAgMzQ2LAorICAgICAz
NDgsICAgMzUwLCAgIDM1MiwgICAzNTQsICAgMzU2LCAgIDM1OCwgICAzNjAsICAgMzYyLCAgIDM2
NCwgICAzNjYsCisgICAgIDM2OCwgICAzNzAsICAgMzcyLCAgIDM3NCwgICAzNzYsICAgMzc4LCAg
IDM4MCwgICAzODYsICAgMzkxLCAgIDM5MywKKyAgICAgMzk2LCAgIDQwMCwgICA0MDIsICAgNDA2
LCAgIDQwOCwgICA0MTMsICAgNDE1LCAgIDQxNywgICA0MTksICAgNDIxLAorICAgICA0MjMsICAg
NDI1LCAgIDQyNywgICA0MjksICAgNDMxLCAgIDQzNCwgICA0MzUsICAgNDM2LCAgIDQ0MiwgICA0
NDQsCisgICAgIDQ0NiwgICA0NDksICAgNDUzLCAgIDQ1NSwgICA0NTgsICAgNDYwLCAgIDQ2Mywg
ICA0NjksICAgNDczLCAgIDQ3NSwKKyAgICAgNDc3LCAgIDQ4MiwgICA0ODMsICAgNDkwLCAgIDQ5
MSwgICA1MDAsICAgNTAxLCAgIDUwOSwgICA1MTEsICAgNTEzLAorICAgICA1MTUsICAgNTE2LCAg
IDUxOSwgICA1MjMsICAgNTI2LCAgIDUyOSwgICA1MzIsICAgNTM2LCAgIDUzOSwgICA1NDEsCisg
ICAgIDU0NCwgICA1NDYsICAgNTQ4LCAgIDU0OQorfTsKKworLyogWVlSSFMgLS0gQSBgLTEnLXNl
cGFyYXRlZCBsaXN0IG9mIHRoZSBydWxlcycgUkhTLiAgKi8KK3N0YXRpYyBjb25zdCB5eXR5cGVf
aW50MTYgeXlyaHNbXSA9Cit7CisgICAgIDE2OCwgICAgIDAsICAgIC0xLCAgICA0MywgICAgLTEs
ICAgIDk1LCAgICAtMSwgICAgNDYsICAgIC0xLCAgICA0NSwKKyAgICAgIC0xLCAgICA0NywgICAg
LTEsICAgIDcwLCAgIDEyMiwgICAgNzEsICAgIC0xLCAgICA5NiwgICAgLTEsICAgIDk3LAorICAg
ICAgNzIsICAgIDk4LCAgICA3MywgICAgLTEsICAgIDk5LCAgICAtMSwgICAgOTcsICAgIDc2LCAg
ICA0OCwgICAgLTEsCisgICAgICA5NywgICAgNTEsICAgIC0xLCAgICA5NywgICAgNTIsICAgIC0x
LCAgIDEyMiwgICAgLTEsICAgMTAwLCAgICAtMSwKKyAgICAgMTAxLCAgICAtMSwgICAgOTcsICAg
IDc2LCAgIDEwMSwgICAgLTEsICAgMTAzLCAgICA3MSwgICAgLTEsICAgMTAyLAorICAgICAgNzEs
ICAgIC0xLCAgIDEwNCwgICAgMzksICAgIC0xLCAgIDEwNCwgICAgLTEsICAgMTA0LCAgIDEyMCwg
ICAgLTEsCisgICAgIDEwMywgICAgNzcsICAgMTIwLCAgICAtMSwgICAxMDUsICAgIDcwLCAgICAt
MSwgICAxMzcsICAgIC0xLCAgICA0MywKKyAgICAgIC0xLCAgICA0OCwgICAgLTEsICAgIDk3LCAg
ICAtMSwgICAgNTEsICAgMTA2LCAgICAtMSwgICAgNTIsICAgMTA2LAorICAgICAgLTEsICAgMTA3
LCAgIDEwNiwgICAgLTEsICAgIDg0LCAgICAtMSwgICAgODIsICAgIC0xLCAgICA4MSwgICAgLTEs
CisgICAgIDEwNiwgICAgLTEsICAgMTA4LCAgICA4NSwgICAxMDYsICAgIC0xLCAgIDEwOCwgICAg
ODYsICAgMTA2LCAgICAtMSwKKyAgICAgMTA4LCAgICAtMSwgICAxMDksICAgIDg0LCAgIDEwOCwg
ICAgLTEsICAgMTA5LCAgICA4MiwgICAxMDgsICAgIC0xLAorICAgICAxMDksICAgIC0xLCAgIDEx
MCwgICAgLTEsICAgMTExLCAgICA4OCwgICAxMTAsICAgIC0xLCAgIDExMSwgICAgODksCisgICAg
IDExMCwgICAgLTEsICAgMTExLCAgICA1MywgICAxMTAsICAgIC0xLCAgIDExMSwgICAgNTQsICAg
MTEwLCAgICAtMSwKKyAgICAgMTExLCAgICAtMSwgICAxMTIsICAgIDU1LCAgIDExMSwgICAgLTEs
ICAgMTEyLCAgICA1NiwgICAxMTEsICAgIC0xLAorICAgICAxMTIsICAgIC0xLCAgIDExMywgICAg
LTEsICAgMTE0LCAgICAtMSwgICAxMTUsICAgIC0xLCAgIDExNiwgICAgNTcsCisgICAgIDExNSwg
ICAgLTEsICAgMTE2LCAgICAtMSwgICAxMTcsICAgIDU5LCAgIDExNiwgICAgLTEsICAgMTE3LCAg
ICAtMSwKKyAgICAgMTE4LCAgICA1OCwgICAxMTcsICAgIC0xLCAgIDExOCwgICAgLTEsICAgMTE4
LCAgICA5MywgICAxMjIsICAgIDc4LAorICAgICAxMjAsICAgIC0xLCAgIDExOSwgICAgLTEsICAg
MTA2LCAgIDEyMSwgICAxMjAsICAgIC0xLCAgICA3OSwgICAgLTEsCisgICAgICA2MCwgICAgLTEs
ICAgIDYxLCAgICAtMSwgICAgNjIsICAgIC0xLCAgICA2OSwgICAgLTEsICAgMTIwLCAgICAtMSwK
KyAgICAgMTIyLCAgICA3NywgICAxMjAsICAgIC0xLCAgIDExOSwgICAgLTEsICAgMTI1LCAgICA4
MCwgICAgLTEsICAgMTMzLAorICAgICAgODAsICAgIC0xLCAgICAgNywgICAxMzgsICAgMTM5LCAg
ICA4MCwgICAgLTEsICAgMTI2LCAgICA3MSwgICAgLTEsCisgICAgIDEyOCwgICAgLTEsICAgMTI3
LCAgICAtMSwgICAxMjgsICAgMTMwLCAgICAtMSwgICAxMjcsICAgIDc3LCAgIDEzMCwKKyAgICAg
IC0xLCAgIDEzNSwgICAgNDMsICAgIDcwLCAgICAtMSwgICAxMzcsICAgIDQzLCAgICAtMSwgICAx
MzcsICAgIDQzLAorICAgICAgNzIsICAgMTIzLCAgICA3MywgICAgLTEsICAgMTM2LCAgIDEzMSwg
ICAxMjksICAgIC0xLCAgIDEzMSwgICAxMjksCisgICAgICAtMSwgICAxMzYsICAgMTMxLCAgIDEz
MiwgICAgLTEsICAgMTMxLCAgIDEzMiwgICAgLTEsICAgIC0xLCAgICAzMywKKyAgICAgIC0xLCAg
ICAzNCwgICAgLTEsICAgIDM1LCAgICAtMSwgICAxMzcsICAgIC0xLCAgIDEzNCwgICAgLTEsICAg
MTMzLAorICAgICAgNzcsICAgIDQzLCAgICAtMSwgICAxMzMsICAgIDc3LCAgICA0MywgICAgNzIs
ICAgIDczLCAgICAtMSwgICAxMzMsCisgICAgICA3NywgICAgNDMsICAgIDcyLCAgIDEyMywgICAg
NzMsICAgIC0xLCAgIDEzMywgICAgNzcsICAgIDQzLCAgICA3OSwKKyAgICAgMTQ2LCAgICAtMSwg
ICAxMzUsICAgIC0xLCAgIDEzNSwgICAgNDMsICAgIC0xLCAgIDEzNSwgICAgNDMsICAgIDcyLAor
ICAgICAgNzMsICAgIC0xLCAgIDEzNSwgICAgNDMsICAgIDcyLCAgIDEyMywgICAgNzMsICAgIC0x
LCAgIDEzNSwgICAgNDMsCisgICAgICA3OSwgICAxNDYsICAgIC0xLCAgICAgMywgICAgNDMsICAg
IC0xLCAgIDEzNywgICAgLTEsICAgMTM2LCAgIDEzNywKKyAgICAgIC0xLCAgICAgOSwgICAgLTEs
ICAgICA4LCAgICAtMSwgICAgMzcsICAgIC0xLCAgICAgMywgICAgMzcsICAgIC0xLAorICAgICAg
MzYsICAgIC0xLCAgIDEzOSwgICAgLTEsICAgMTM4LCAgIDEzOSwgICAgLTEsICAgICA0LCAgICAt
MSwgICAgIDUsCisgICAgICAtMSwgICAgIDYsICAgIC0xLCAgIDE0MCwgICAgLTEsICAgMTQwLCAg
ICA3MiwgICAxMjMsICAgIDczLCAgICAtMSwKKyAgICAgIDM5LCAgICAtMSwgICAgMTEsICAgIC0x
LCAgICAxMiwgICAgLTEsICAgIDEwLCAgICAtMSwgICAgMjcsICAgIC0xLAorICAgICAgMjgsICAg
IC0xLCAgICAyOSwgICAgLTEsICAgIDIxLCAgICAtMSwgICAgMjIsICAgIC0xLCAgICAyMywgICAg
LTEsCisgICAgICAyNCwgICAgLTEsICAgIDI1LCAgICAtMSwgICAgMjYsICAgIC0xLCAgICAzMCwg
ICAgLTEsICAgIDMxLCAgICAtMSwKKyAgICAgIDMyLCAgICAtMSwgICAgNDEsICAgIC0xLCAgICA0
MiwgICAgLTEsICAgMTQxLCAgICAtMSwgICAgNDQsICAgIC0xLAorICAgICAgMzgsICAgIDQzLCAg
ICA3NCwgICAxNDIsICAgIDc1LCAgICAtMSwgICAgMzgsICAgIDc0LCAgIDE0MiwgICAgNzUsCisg
ICAgICAtMSwgICAxNDMsICAgIC0xLCAgIDE0MiwgICAxNDMsICAgIC0xLCAgIDEzNywgICAxNDQs
ICAgIDgwLCAgICAtMSwKKyAgICAgMTQ1LCAgICAtMSwgICAxNDQsICAgIDc3LCAgIDE0NSwgICAg
LTEsICAgIDQzLCAgICAtMSwgICAgNDMsICAgIDcyLAorICAgICAxMjMsICAgIDczLCAgICAtMSwg
ICAxMjAsICAgIC0xLCAgIDEyNCwgICAgLTEsICAgMTUwLCAgICAtMSwgICAxNDksCisgICAgICAt
MSwgICAxNDcsICAgIC0xLCAgIDE1NiwgICAgLTEsICAgMTU3LCAgICAtMSwgICAxNjAsICAgIC0x
LCAgIDE2NywKKyAgICAgIC0xLCAgICA3NCwgICAgNzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDc0LCAgIDE1MSwgICAxNTUsICAgMTUyLAorICAgICAgNzUsICAgIC0xLCAgIDE1NCwgICAgLTEs
ICAgMTQ5LCAgICAtMSwgICAgNzQsICAgIDc1LCAgICAtMSwgICAgNzQsCisgICAgIDE1NSwgICAg
NzUsICAgIC0xLCAgIDE0OCwgICAgLTEsICAgMTU1LCAgIDE0OCwgICAgLTEsICAgIDgwLCAgICAt
MSwKKyAgICAgMTIyLCAgICA4MCwgICAgLTEsICAgIDE4LCAgICA3MCwgICAxMjIsICAgIDcxLCAg
IDE1OCwgICAgLTEsICAgMTQ4LAorICAgICAgMTYsICAgMTQ4LCAgICAtMSwgICAxNDgsICAgIC0x
LCAgIDEyMiwgICAgLTEsICAgMTM1LCAgICA0MywgICAgNzksCisgICAgIDE0NiwgICAgLTEsICAg
IC0xLCAgICA0MCwgICAgNzAsICAgMTYxLCAgIDE1OSwgICAgNzEsICAgMTUzLCAgICAtMSwKKyAg
ICAgIC0xLCAgICAxNSwgICAxNjIsICAgMTQ4LCAgICA0MCwgICAgNzAsICAgMTIyLCAgICA3MSwg
ICAgODAsICAgIC0xLAorICAgICAgLTEsICAgIDE3LCAgICA3MCwgICAxNjMsICAgMTY0LCAgIDE2
NiwgICAgNzEsICAgMTUzLCAgICAtMSwgICAxNTYsCisgICAgICAtMSwgICAxNDcsICAgIC0xLCAg
IDE1OSwgICAgLTEsICAgIC0xLCAgIDE2NSwgICAgODAsICAgIC0xLCAgIDE2NSwKKyAgICAgIDgw
LCAgIDEyMiwgICAgLTEsICAgIDE0LCAgICA4MCwgICAgLTEsICAgIDEzLCAgICA4MCwgICAgLTEs
ICAgIDIwLAorICAgICAgODAsICAgIC0xLCAgICAyMCwgICAxMjIsICAgIDgwLCAgICAtMSwgICAg
MTksICAgIDgwLCAgICAtMSwgICAxNjksCisgICAgICAtMSwgICAxNjgsICAgMTY5LCAgICAtMSwg
ICAxNzAsICAgIC0xLCAgIDEyNCwgICAgLTEsICAgIC0xLCAgIDEyNSwKKyAgICAgMTcxLCAgIDE1
NCwgICAgLTEKK307CisKKy8qIFlZUkxJTkVbWVlOXSAtLSBzb3VyY2UgbGluZSB3aGVyZSBydWxl
IG51bWJlciBZWU4gd2FzIGRlZmluZWQuICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYg
eXlybGluZVtdID0KK3sKKyAgICAgICAwLCAgIDE1MywgICAxNTMsICAgMTg4LCAgIDE5MSwgICAy
MDQsICAgMjA5LCAgIDIxNCwgICAyMjAsICAgMjIzLAorICAgICAyOTYsICAgMjk5LCAgIDQwOCwg
ICA0MTgsICAgNDMxLCAgIDQzOSwgICA1MzgsICAgNTQxLCAgIDU0OSwgICA1NTMsCisgICAgIDU2
MCwgICA1NjQsICAgNTcxLCAgIDU3NywgICA1ODYsICAgNTk0LCAgIDY1NiwgICA2NjMsICAgNjcz
LCAgIDY3NiwKKyAgICAgNjg2LCAgIDY5NiwgICA3MTcsICAgNzE4LCAgIDcxOSwgICA3MjQsICAg
NzI1LCAgIDczNCwgICA3NDYsICAgNzQ3LAorICAgICA3NTUsICAgNzY2LCAgIDc3MCwgICA3NzEs
ICAgNzgxLCAgIDc5MSwgICA4MDEsICAgODE0LCAgIDgxNSwgICA4MjUsCisgICAgIDgzOCwgICA4
NDIsICAgODQ2LCAgIDg1MCwgICA4NTEsICAgODY0LCAgIDg2NSwgICA4NzgsICAgODc5LCAgIDg5
MiwKKyAgICAgODkzLCAgIDkxMCwgICA5MTEsICAgOTI0LCAgIDkyNSwgICA5MjYsICAgOTI3LCAg
IDkyOCwgICA5MzIsICAgOTM1LAorICAgICA5NDYsICAgOTU0LCAgIDk3OSwgICA5ODQsICAgOTkx
LCAgMTAyNywgIDEwMzAsICAxMDM3LCAgMTA0NSwgIDEwNjYsCisgICAgMTA4NSwgIDEwOTYsICAx
MTI1LCAgMTEzMCwgIDExNDAsICAxMTQ1LCAgMTE1NSwgIDExNTgsICAxMTYxLCAgMTE2NCwKKyAg
ICAxMTcwLCAgMTE3NywgIDExODcsICAxMTk5LCAgMTIxNywgIDEyNDEsICAxMjY0LCAgMTI2OCwg
IDEyODIsICAxMzAyLAorICAgIDEzMzEsICAxMzUxLCAgMTQyNywgIDE0MzYsICAxNDU5LCAgMTQ2
MiwgIDE0NjgsICAxNDc2LCAgMTQ4NCwgIDE0OTIsCisgICAgMTQ5NSwgIDE1MDIsICAxNTA1LCAg
MTUwOCwgIDE1MTQsICAxNTE3LCAgMTUzMiwgIDE1MzYsICAxNTQwLCAgMTU0NCwKKyAgICAxNTUz
LCAgMTU1OCwgIDE1NjMsICAxNTY4LCAgMTU3MywgIDE1NzgsICAxNTgzLCAgMTU4OCwgIDE1OTMs
ICAxNTk4LAorICAgIDE2MDQsICAxNjEwLCAgMTYxNiwgIDE2MjEsICAxNjI2LCAgMTYzMSwgIDE2
NDQsICAxNjU3LCAgMTY2NSwgIDE2NjgsCisgICAgMTY4MywgIDE3MTQsICAxNzE4LCAgMTcyNCwg
IDE3MzIsICAxNzQ4LCAgMTc1MiwgIDE3NTYsICAxNzU3LCAgMTc2MywKKyAgICAxNzY0LCAgMTc2
NSwgIDE3NjYsICAxNzY3LCAgMTc3MSwgIDE3NzIsICAxNzcyLCAgMTc3MiwgIDE3ODAsICAxNzgx
LAorICAgIDE3ODYsICAxNzg5LCAgMTc5NywgIDE4MDAsICAxODA2LCAgMTgwNywgIDE4MTEsICAx
ODE5LCAgMTgyMywgIDE4MzMsCisgICAgMTgzOCwgIDE4NTUsICAxODU1LCAgMTg2MCwgIDE4NjAs
ICAxODY3LCAgMTg2NywgIDE4NzUsICAxODc4LCAgMTg4NCwKKyAgICAxODg3LCAgMTg5MywgIDE4
OTcsICAxOTA0LCAgMTkxMSwgIDE5MTgsICAxOTI1LCAgMTkzNiwgIDE5NDUsICAxOTQ5LAorICAg
IDE5NTYsICAxOTU5LCAgMTk2NSwgIDE5NjUKK307CisjZW5kaWYKKworI2lmIFlZREVCVUcgfHwg
WVlFUlJPUl9WRVJCT1NFIHx8IFlZVE9LRU5fVEFCTEUKKy8qIFlZVE5BTUVbU1lNQk9MLU5VTV0g
LS0gU3RyaW5nIG5hbWUgb2YgdGhlIHN5bWJvbCBTWU1CT0wtTlVNLgorICAgRmlyc3QsIHRoZSB0
ZXJtaW5hbHMsIHRoZW4sIHN0YXJ0aW5nIGF0IFlZTlRPS0VOUywgbm9udGVybWluYWxzLiAgKi8K
K3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCB5eXRuYW1lW10gPQoreworICAiJGVuZCIsICJlcnJv
ciIsICIkdW5kZWZpbmVkIiwgIklOVkFSSUFOVCIsICJISUdIX1BSRUNJU0lPTiIsCisgICJNRURJ
VU1fUFJFQ0lTSU9OIiwgIkxPV19QUkVDSVNJT04iLCAiUFJFQ0lTSU9OIiwgIkFUVFJJQlVURSIs
CisgICJDT05TVF9RVUFMIiwgIkJPT0xfVFlQRSIsICJGTE9BVF9UWVBFIiwgIklOVF9UWVBFIiwg
IkJSRUFLIiwgIkNPTlRJTlVFIiwKKyAgIkRPIiwgIkVMU0UiLCAiRk9SIiwgIklGIiwgIkRJU0NB
UkQiLCAiUkVUVVJOIiwgIkJWRUMyIiwgIkJWRUMzIiwKKyAgIkJWRUM0IiwgIklWRUMyIiwgIklW
RUMzIiwgIklWRUM0IiwgIlZFQzIiLCAiVkVDMyIsICJWRUM0IiwgIk1BVFJJWDIiLAorICAiTUFU
UklYMyIsICJNQVRSSVg0IiwgIklOX1FVQUwiLCAiT1VUX1FVQUwiLCAiSU5PVVRfUVVBTCIsICJV
TklGT1JNIiwKKyAgIlZBUllJTkciLCAiU1RSVUNUIiwgIlZPSURfVFlQRSIsICJXSElMRSIsICJT
QU1QTEVSMkQiLCAiU0FNUExFUkNVQkUiLAorICAiSURFTlRJRklFUiIsICJUWVBFX05BTUUiLCAi
RkxPQVRDT05TVEFOVCIsICJJTlRDT05TVEFOVCIsCisgICJCT09MQ09OU1RBTlQiLCAiRklFTERf
U0VMRUNUSU9OIiwgIkxFRlRfT1AiLCAiUklHSFRfT1AiLCAiSU5DX09QIiwKKyAgIkRFQ19PUCIs
ICJMRV9PUCIsICJHRV9PUCIsICJFUV9PUCIsICJORV9PUCIsICJBTkRfT1AiLCAiT1JfT1AiLAor
ICAiWE9SX09QIiwgIk1VTF9BU1NJR04iLCAiRElWX0FTU0lHTiIsICJBRERfQVNTSUdOIiwgIk1P
RF9BU1NJR04iLAorICAiTEVGVF9BU1NJR04iLCAiUklHSFRfQVNTSUdOIiwgIkFORF9BU1NJR04i
LCAiWE9SX0FTU0lHTiIsICJPUl9BU1NJR04iLAorICAiU1VCX0FTU0lHTiIsICJMRUZUX1BBUkVO
IiwgIlJJR0hUX1BBUkVOIiwgIkxFRlRfQlJBQ0tFVCIsCisgICJSSUdIVF9CUkFDS0VUIiwgIkxF
RlRfQlJBQ0UiLCAiUklHSFRfQlJBQ0UiLCAiRE9UIiwgIkNPTU1BIiwgIkNPTE9OIiwKKyAgIkVR
VUFMIiwgIlNFTUlDT0xPTiIsICJCQU5HIiwgIkRBU0giLCAiVElMREUiLCAiUExVUyIsICJTVEFS
IiwgIlNMQVNIIiwKKyAgIlBFUkNFTlQiLCAiTEVGVF9BTkdMRSIsICJSSUdIVF9BTkdMRSIsICJW
RVJUSUNBTF9CQVIiLCAiQ0FSRVQiLAorICAiQU1QRVJTQU5EIiwgIlFVRVNUSU9OIiwgIiRhY2Nl
cHQiLCAidmFyaWFibGVfaWRlbnRpZmllciIsCisgICJwcmltYXJ5X2V4cHJlc3Npb24iLCAicG9z
dGZpeF9leHByZXNzaW9uIiwgImludGVnZXJfZXhwcmVzc2lvbiIsCisgICJmdW5jdGlvbl9jYWxs
IiwgImZ1bmN0aW9uX2NhbGxfb3JfbWV0aG9kIiwgImZ1bmN0aW9uX2NhbGxfZ2VuZXJpYyIsCisg
ICJmdW5jdGlvbl9jYWxsX2hlYWRlcl9ub19wYXJhbWV0ZXJzIiwKKyAgImZ1bmN0aW9uX2NhbGxf
aGVhZGVyX3dpdGhfcGFyYW1ldGVycyIsICJmdW5jdGlvbl9jYWxsX2hlYWRlciIsCisgICJmdW5j
dGlvbl9pZGVudGlmaWVyIiwgInVuYXJ5X2V4cHJlc3Npb24iLCAidW5hcnlfb3BlcmF0b3IiLAor
ICAibXVsdGlwbGljYXRpdmVfZXhwcmVzc2lvbiIsICJhZGRpdGl2ZV9leHByZXNzaW9uIiwgInNo
aWZ0X2V4cHJlc3Npb24iLAorICAicmVsYXRpb25hbF9leHByZXNzaW9uIiwgImVxdWFsaXR5X2V4
cHJlc3Npb24iLCAiYW5kX2V4cHJlc3Npb24iLAorICAiZXhjbHVzaXZlX29yX2V4cHJlc3Npb24i
LCAiaW5jbHVzaXZlX29yX2V4cHJlc3Npb24iLAorICAibG9naWNhbF9hbmRfZXhwcmVzc2lvbiIs
ICJsb2dpY2FsX3hvcl9leHByZXNzaW9uIiwKKyAgImxvZ2ljYWxfb3JfZXhwcmVzc2lvbiIsICJj
b25kaXRpb25hbF9leHByZXNzaW9uIiwKKyAgImFzc2lnbm1lbnRfZXhwcmVzc2lvbiIsICJhc3Np
Z25tZW50X29wZXJhdG9yIiwgImV4cHJlc3Npb24iLAorICAiY29uc3RhbnRfZXhwcmVzc2lvbiIs
ICJkZWNsYXJhdGlvbiIsICJmdW5jdGlvbl9wcm90b3R5cGUiLAorICAiZnVuY3Rpb25fZGVjbGFy
YXRvciIsICJmdW5jdGlvbl9oZWFkZXJfd2l0aF9wYXJhbWV0ZXJzIiwKKyAgImZ1bmN0aW9uX2hl
YWRlciIsICJwYXJhbWV0ZXJfZGVjbGFyYXRvciIsICJwYXJhbWV0ZXJfZGVjbGFyYXRpb24iLAor
ICAicGFyYW1ldGVyX3F1YWxpZmllciIsICJwYXJhbWV0ZXJfdHlwZV9zcGVjaWZpZXIiLAorICAi
aW5pdF9kZWNsYXJhdG9yX2xpc3QiLCAic2luZ2xlX2RlY2xhcmF0aW9uIiwgImZ1bGx5X3NwZWNp
ZmllZF90eXBlIiwKKyAgInR5cGVfcXVhbGlmaWVyIiwgInR5cGVfc3BlY2lmaWVyIiwgInByZWNp
c2lvbl9xdWFsaWZpZXIiLAorICAidHlwZV9zcGVjaWZpZXJfbm9fcHJlYyIsICJ0eXBlX3NwZWNp
Zmllcl9ub25hcnJheSIsICJzdHJ1Y3Rfc3BlY2lmaWVyIiwKKyAgInN0cnVjdF9kZWNsYXJhdGlv
bl9saXN0IiwgInN0cnVjdF9kZWNsYXJhdGlvbiIsCisgICJzdHJ1Y3RfZGVjbGFyYXRvcl9saXN0
IiwgInN0cnVjdF9kZWNsYXJhdG9yIiwgImluaXRpYWxpemVyIiwKKyAgImRlY2xhcmF0aW9uX3N0
YXRlbWVudCIsICJzdGF0ZW1lbnQiLCAic2ltcGxlX3N0YXRlbWVudCIsCisgICJjb21wb3VuZF9z
dGF0ZW1lbnQiLCAiQDEiLCAiQDIiLCAic3RhdGVtZW50X25vX25ld19zY29wZSIsCisgICJjb21w
b3VuZF9zdGF0ZW1lbnRfbm9fbmV3X3Njb3BlIiwgInN0YXRlbWVudF9saXN0IiwKKyAgImV4cHJl
c3Npb25fc3RhdGVtZW50IiwgInNlbGVjdGlvbl9zdGF0ZW1lbnQiLAorICAic2VsZWN0aW9uX3Jl
c3Rfc3RhdGVtZW50IiwgImNvbmRpdGlvbiIsICJpdGVyYXRpb25fc3RhdGVtZW50IiwgIkAzIiwK
KyAgIkA0IiwgIkA1IiwgImZvcl9pbml0X3N0YXRlbWVudCIsICJjb25kaXRpb25vcHQiLCAiZm9y
X3Jlc3Rfc3RhdGVtZW50IiwKKyAgImp1bXBfc3RhdGVtZW50IiwgInRyYW5zbGF0aW9uX3VuaXQi
LCAiZXh0ZXJuYWxfZGVjbGFyYXRpb24iLAorICAiZnVuY3Rpb25fZGVmaW5pdGlvbiIsICJANiIs
IDAKK307CisjZW5kaWYKKworIyBpZmRlZiBZWVBSSU5UCisvKiBZWVRPS05VTVtZWUxFWC1OVU1d
IC0tIEludGVybmFsIHRva2VuIG51bWJlciBjb3JyZXNwb25kaW5nIHRvCisgICB0b2tlbiBZWUxF
WC1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50MTYgeXl0b2tudW1bXSA9Cit7Cisg
ICAgICAgMCwgICAyNTYsICAgMjU3LCAgIDI1OCwgICAyNTksICAgMjYwLCAgIDI2MSwgICAyNjIs
ICAgMjYzLCAgIDI2NCwKKyAgICAgMjY1LCAgIDI2NiwgICAyNjcsICAgMjY4LCAgIDI2OSwgICAy
NzAsICAgMjcxLCAgIDI3MiwgICAyNzMsICAgMjc0LAorICAgICAyNzUsICAgMjc2LCAgIDI3Nywg
ICAyNzgsICAgMjc5LCAgIDI4MCwgICAyODEsICAgMjgyLCAgIDI4MywgICAyODQsCisgICAgIDI4
NSwgICAyODYsICAgMjg3LCAgIDI4OCwgICAyODksICAgMjkwLCAgIDI5MSwgICAyOTIsICAgMjkz
LCAgIDI5NCwKKyAgICAgMjk1LCAgIDI5NiwgICAyOTcsICAgMjk4LCAgIDI5OSwgICAzMDAsICAg
MzAxLCAgIDMwMiwgICAzMDMsICAgMzA0LAorICAgICAzMDUsICAgMzA2LCAgIDMwNywgICAzMDgs
ICAgMzA5LCAgIDMxMCwgICAzMTEsICAgMzEyLCAgIDMxMywgICAzMTQsCisgICAgIDMxNSwgICAz
MTYsICAgMzE3LCAgIDMxOCwgICAzMTksICAgMzIwLCAgIDMyMSwgICAzMjIsICAgMzIzLCAgIDMy
NCwKKyAgICAgMzI1LCAgIDMyNiwgICAzMjcsICAgMzI4LCAgIDMyOSwgICAzMzAsICAgMzMxLCAg
IDMzMiwgICAzMzMsICAgMzM0LAorICAgICAzMzUsICAgMzM2LCAgIDMzNywgICAzMzgsICAgMzM5
LCAgIDM0MCwgICAzNDEsICAgMzQyLCAgIDM0MywgICAzNDQsCisgICAgIDM0NSwgICAzNDYsICAg
MzQ3LCAgIDM0OAorfTsKKyMgZW5kaWYKKworLyogWVlSMVtZWU5dIC0tIFN5bWJvbCBudW1iZXIg
b2Ygc3ltYm9sIHRoYXQgcnVsZSBZWU4gZGVyaXZlcy4gICovCitzdGF0aWMgY29uc3QgeXl0eXBl
X3VpbnQ4IHl5cjFbXSA9Cit7CisgICAgICAgMCwgICAgOTQsICAgIDk1LCAgICA5NiwgICAgOTYs
ICAgIDk2LCAgICA5NiwgICAgOTYsICAgIDk3LCAgICA5NywKKyAgICAgIDk3LCAgICA5NywgICAg
OTcsICAgIDk3LCAgICA5OCwgICAgOTksICAgMTAwLCAgIDEwMCwgICAxMDEsICAgMTAxLAorICAg
ICAxMDIsICAgMTAyLCAgIDEwMywgICAxMDMsICAgMTA0LCAgIDEwNSwgICAxMDUsICAgMTA1LCAg
IDEwNiwgICAxMDYsCisgICAgIDEwNiwgICAxMDYsICAgMTA3LCAgIDEwNywgICAxMDcsICAgMTA4
LCAgIDEwOCwgICAxMDgsICAgMTA5LCAgIDEwOSwKKyAgICAgMTA5LCAgIDExMCwgICAxMTEsICAg
MTExLCAgIDExMSwgICAxMTEsICAgMTExLCAgIDExMiwgICAxMTIsICAgMTEyLAorICAgICAxMTMs
ICAgMTE0LCAgIDExNSwgICAxMTYsICAgMTE2LCAgIDExNywgICAxMTcsICAgMTE4LCAgIDExOCwg
ICAxMTksCisgICAgIDExOSwgICAxMjAsICAgMTIwLCAgIDEyMSwgICAxMjEsICAgMTIxLCAgIDEy
MSwgICAxMjEsICAgMTIyLCAgIDEyMiwKKyAgICAgMTIzLCAgIDEyNCwgICAxMjQsICAgMTI0LCAg
IDEyNSwgICAxMjYsICAgMTI2LCAgIDEyNywgICAxMjcsICAgMTI4LAorICAgICAxMjksICAgMTI5
LCAgIDEzMCwgICAxMzAsICAgMTMwLCAgIDEzMCwgICAxMzEsICAgMTMxLCAgIDEzMSwgICAxMzEs
CisgICAgIDEzMiwgICAxMzMsICAgMTMzLCAgIDEzMywgICAxMzMsICAgMTMzLCAgIDEzNCwgICAx
MzQsICAgMTM0LCAgIDEzNCwKKyAgICAgMTM0LCAgIDEzNCwgICAxMzUsICAgMTM1LCAgIDEzNiwg
ICAxMzYsICAgMTM2LCAgIDEzNiwgICAxMzYsICAgMTM3LAorICAgICAxMzcsICAgMTM4LCAgIDEz
OCwgICAxMzgsICAgMTM5LCAgIDEzOSwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsCisgICAg
IDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAsICAg
MTQwLCAgIDE0MCwKKyAgICAgMTQwLCAgIDE0MCwgICAxNDAsICAgMTQwLCAgIDE0MCwgICAxNDAs
ICAgMTQxLCAgIDE0MSwgICAxNDIsICAgMTQyLAorICAgICAxNDMsICAgMTQ0LCAgIDE0NCwgICAx
NDUsICAgMTQ1LCAgIDE0NiwgICAxNDcsICAgMTQ4LCAgIDE0OCwgICAxNDksCisgICAgIDE0OSwg
ICAxNDksICAgMTQ5LCAgIDE0OSwgICAxNTAsICAgMTUxLCAgIDE1MiwgICAxNTAsICAgMTUzLCAg
IDE1MywKKyAgICAgMTU0LCAgIDE1NCwgICAxNTUsICAgMTU1LCAgIDE1NiwgICAxNTYsICAgMTU3
LCAgIDE1OCwgICAxNTgsICAgMTU5LAorICAgICAxNTksICAgMTYxLCAgIDE2MCwgICAxNjIsICAg
MTYwLCAgIDE2MywgICAxNjAsICAgMTY0LCAgIDE2NCwgICAxNjUsCisgICAgIDE2NSwgICAxNjYs
ICAgMTY2LCAgIDE2NywgICAxNjcsICAgMTY3LCAgIDE2NywgICAxNjcsICAgMTY4LCAgIDE2OCwK
KyAgICAgMTY5LCAgIDE2OSwgICAxNzEsICAgMTcwCit9OworCisvKiBZWVIyW1lZTl0gLS0gTnVt
YmVyIG9mIHN5bWJvbHMgY29tcG9zaW5nIHJpZ2h0IGhhbmQgc2lkZSBvZiBydWxlIFlZTi4gICov
CitzdGF0aWMgY29uc3QgeXl0eXBlX3VpbnQ4IHl5cjJbXSA9Cit7CisgICAgICAgMCwgICAgIDIs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDMsICAgICAxLCAgICAgNCwK
KyAgICAgICAxLCAgICAgMywgICAgIDIsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MywgICAgIDIsICAgICAyLAorICAgICAgIDIsICAgICAxLCAgICAgMiwgICAgIDMsICAgICAyLCAg
ICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsCisgICAgICAgMiwgICAgIDIsICAgICAx
LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywgICAgIDMsICAgICAxLCAgICAgMywKKyAgICAg
ICAzLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMywgICAgIDMsICAgICAzLCAgICAgMSwgICAg
IDMsICAgICAzLAorICAgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAzLCAgICAgMSwg
ICAgIDMsICAgICAxLCAgICAgMywgICAgIDEsCisgICAgICAgNSwgICAgIDEsICAgICAzLCAgICAg
MSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMywKKyAgICAgICAxLCAg
ICAgMiwgICAgIDIsICAgICA0LCAgICAgMiwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDMsICAg
ICAzLAorICAgICAgIDIsICAgICA1LCAgICAgMywgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDAs
ICAgICAxLCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAzLCAgICAgNSwgICAg
IDYsICAgICA1LCAgICAgMSwgICAgIDIsICAgICA0LCAgICAgNSwKKyAgICAgICA0LCAgICAgMiwg
ICAgIDEsICAgICAyLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMiwgICAgIDEsICAgICAxLAor
ICAgICAgIDIsICAgICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgNCwgICAgIDEsICAgICAx
LCAgICAgMSwgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDEsICAg
ICAxLCAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwKKyAgICAgICAxLCAgICAgMSwgICAgIDEs
ICAgICAxLCAgICAgMSwgICAgIDEsICAgICA1LCAgICAgNCwgICAgIDEsICAgICAyLAorICAgICAg
IDMsICAgICAxLCAgICAgMywgICAgIDEsICAgICA0LCAgICAgMSwgICAgIDEsICAgICAxLCAgICAg
MSwgICAgIDEsCisgICAgICAgMSwgICAgIDEsICAgICAxLCAgICAgMSwgICAgIDIsICAgICAwLCAg
ICAgMCwgICAgIDUsICAgICAxLCAgICAgMSwKKyAgICAgICAyLCAgICAgMywgICAgIDEsICAgICAy
LCAgICAgMSwgICAgIDIsICAgICA1LCAgICAgMywgICAgIDEsICAgICAxLAorICAgICAgIDQsICAg
ICAwLCAgICAgNiwgICAgIDAsICAgICA4LCAgICAgMCwgICAgIDcsICAgICAxLCAgICAgMSwgICAg
IDEsCisgICAgICAgMCwgICAgIDIsICAgICAzLCAgICAgMiwgICAgIDIsICAgICAyLCAgICAgMywg
ICAgIDIsICAgICAxLCAgICAgMiwKKyAgICAgICAxLCAgICAgMSwgICAgIDAsICAgICAzCit9Owor
CisvKiBZWURFRkFDVFtTVEFURS1OQU1FXSAtLSBEZWZhdWx0IHJ1bGUgdG8gcmVkdWNlIHdpdGgg
aW4gc3RhdGUKKyAgIFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNvbWV0
aGluZyBlbHNlIHRvIGRvLiAgWmVybworICAgbWVhbnMgdGhlIGRlZmF1bHQgaXMgYW4gZXJyb3Iu
ICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eWRlZmFjdFtdID0KK3sKKyAgICAgICAw
LCAgICAgMCwgICAxMTEsICAgMTEyLCAgIDExMywgICAgIDAsICAgMTA1LCAgIDEwNCwgICAxMTks
ICAgMTE3LAorICAgICAxMTgsICAgMTIzLCAgIDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNywgICAx
MjgsICAgMTIwLCAgIDEyMSwgICAxMjIsCisgICAgIDEyOSwgICAxMzAsICAgMTMxLCAgIDEwOCwg
ICAxMDYsICAgICAwLCAgIDExNiwgICAxMzIsICAgMTMzLCAgIDEzNSwKKyAgICAgMTkxLCAgIDE5
MiwgICAgIDAsICAgIDc2LCAgICA4NiwgICAgIDAsICAgIDkxLCAgICA5NiwgICAgIDAsICAgMTAy
LAorICAgICAgIDAsICAgMTA5LCAgIDExNCwgICAxMzQsICAgICAwLCAgIDE4OCwgICAxOTAsICAg
MTA3LCAgIDEwMSwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgIDcxLCAgICAgMCwgICAgNzQs
ICAgIDg2LCAgICAgMCwgICAgODcsICAgIDg4LCAgICA4OSwKKyAgICAgIDc3LCAgICAgMCwgICAg
ODYsICAgICAwLCAgICA3MiwgICAgOTcsICAgMTAzLCAgIDExMCwgICAgIDAsICAgICAxLAorICAg
ICAxODksICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgIDEzOCwgICAgIDAsICAgMTkzLCAg
ICA3OCwgICAgODMsCisgICAgICA4NSwgICAgOTAsICAgICAwLCAgICA5MiwgICAgNzksICAgICAw
LCAgICAgMCwgICAgIDIsICAgICA1LCAgICAgNCwKKyAgICAgICA2LCAgICAyNywgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgMzQsICAgIDMzLCAgICAzMiwgICAgIDMsICAgICA4LAorICAgICAgMjgs
ICAgIDEwLCAgICAxNSwgICAgMTYsICAgICAwLCAgICAgMCwgICAgMjEsICAgICAwLCAgICAzNSwg
ICAgIDAsCisgICAgICAzOCwgICAgNDEsICAgIDQyLCAgICA0NywgICAgNTAsICAgIDUxLCAgICA1
MiwgICAgNTMsICAgIDU1LCAgICA1NywKKyAgICAgIDU5LCAgICA3MCwgICAgIDAsICAgIDI1LCAg
ICA3MywgICAgIDAsICAgMTQzLCAgICAgMCwgICAxNDEsICAgMTM3LAorICAgICAxMzksICAgICAw
LCAgICAgMCwgICAxNzMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAxNTUs
CisgICAgIDE2MCwgICAxNjQsICAgIDM1LCAgICA2MSwgICAgNjgsICAgICAwLCAgIDE0NiwgICAg
IDAsICAgMTAyLCAgIDE0OSwKKyAgICAgMTYyLCAgIDE0OCwgICAxNDcsICAgICAwLCAgIDE1MCwg
ICAxNTEsICAgMTUyLCAgIDE1MywgICAgODAsICAgIDgyLAorICAgICAgODQsICAgICAwLCAgICAg
MCwgICAgOTgsICAgICAwLCAgIDE0NSwgICAxMDAsICAgIDI5LCAgICAzMCwgICAgIDAsCisgICAg
ICAxMiwgICAgMTMsICAgICAwLCAgICAgMCwgICAgMTksICAgIDE4LCAgICAgMCwgICAxMTYsICAg
IDIyLCAgICAyNCwKKyAgICAgIDMxLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgIDExNSwgICAxMzYsICAgICAwLCAgICAgMCwgICAxNDAsCisgICAgIDE4NCwg
ICAxODMsICAgICAwLCAgIDE3NSwgICAgIDAsICAgMTg3LCAgIDE4NSwgICAgIDAsICAgMTcxLCAg
IDE1NCwKKyAgICAgICAwLCAgICA2NCwgICAgNjUsICAgIDY2LCAgICA2NywgICAgNjMsICAgICAw
LCAgICAgMCwgICAxNjUsICAgMTYxLAorICAgICAxNjMsICAgICAwLCAgICA5MywgICAgIDAsICAg
IDk1LCAgICA5OSwgICAgIDcsICAgICAwLCAgICAxNCwgICAgMjYsCisgICAgICAxMSwgICAgMTcs
ICAgIDIzLCAgICAzNiwgICAgMzcsICAgIDQwLCAgICAzOSwgICAgNDUsICAgIDQ2LCAgICA0MywK
KyAgICAgIDQ0LCAgICA0OCwgICAgNDksICAgIDU0LCAgICA1NiwgICAgNTgsICAgICAwLCAgICAg
MCwgICAxNDIsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgIDE4NiwgICAgIDAsICAgMTU2LCAg
ICA2MiwgICAgNjksICAgICAwLCAgICA5NCwgICAgIDksCisgICAgICAgMCwgICAxNDQsICAgICAw
LCAgIDE3OCwgICAxNzcsICAgMTgwLCAgICAgMCwgICAxNjksICAgICAwLCAgICAgMCwKKyAgICAg
ICAwLCAgICA4MSwgICAgNjAsICAgICAwLCAgIDE3OSwgICAgIDAsICAgICAwLCAgIDE2OCwgICAx
NjYsICAgICAwLAorICAgICAgIDAsICAgMTU3LCAgICAgMCwgICAxODEsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTU5LCAgIDE3MiwgICAxNTgsCisgICAgICAgMCwgICAxODIsICAgMTc2LCAgIDE2
NywgICAxNzAsICAgMTc0Cit9OworCisvKiBZWURFRkdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0
aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5ZGVmZ290b1tdID0KK3sKKyAgICAgIC0xLCAgICA5OCwg
ICAgOTksICAgMTAwLCAgIDIyNywgICAxMDEsICAgMTAyLCAgIDEwMywgICAxMDQsICAgMTA1LAor
ICAgICAxMDYsICAgMTA3LCAgIDE0MiwgICAxMDksICAgMTEwLCAgIDExMSwgICAxMTIsICAgMTEz
LCAgIDExNCwgICAxMTUsCisgICAgIDExNiwgICAxMTcsICAgMTE4LCAgIDExOSwgICAxMjAsICAg
MTQzLCAgIDE0NCwgICAyMTYsICAgMTQ1LCAgIDEyMiwKKyAgICAgMTQ2LCAgIDE0NywgICAgMzIs
ICAgIDMzLCAgICAzNCwgICAgNzksICAgIDYwLCAgICA2MSwgICAgODAsICAgIDM1LAorICAgICAg
MzYsICAgIDM3LCAgICAzOCwgICAxMjMsICAgIDQwLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA3
NCwgICAgNzUsCisgICAgIDEyNywgICAxMjgsICAgMTY2LCAgIDE0OSwgICAxNTAsICAgMTUxLCAg
IDE1MiwgICAyMTAsICAgMjcwLCAgIDI4OCwKKyAgICAgMjg5LCAgIDE1MywgICAxNTQsICAgMTU1
LCAgIDI3OCwgICAyNjksICAgMTU2LCAgIDI1MywgICAyMDIsICAgMjUwLAorICAgICAyNjUsICAg
Mjc1LCAgIDI3NiwgICAxNTcsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDUzCit9OworCisvKiBZ
WVBBQ1RbU1RBVEUtTlVNXSAtLSBJbmRleCBpbiBZWVRBQkxFIG9mIHRoZSBwb3J0aW9uIGRlc2Ny
aWJpbmcKKyAgIFNUQVRFLU5VTS4gICovCisjZGVmaW5lIFlZUEFDVF9OSU5GIC0yNTAKK3N0YXRp
YyBjb25zdCB5eXR5cGVfaW50MTYgeXlwYWN0W10gPQoreworICAgIDEyMjUsICAgIDM2LCAgLTI1
MCwgIC0yNTAsICAtMjUwLCAgIDE1MCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgIC0yNTAsCisgICAg
LTI1MCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAt
MjUwLCAgLTI1MCwKKyAgICAtMjUwLCAgLTI1MCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgICAtMzMs
ICAtMjUwLCAgLTI1MCwgIC0yNTAsICAtMjUwLAorICAgIC0yNTAsICAgLTYwLCAgIC0yMiwgICAt
MTcsICAgIDIxLCAgIC02MiwgIC0yNTAsICAgIDIyLCAgMTI2NiwgIC0yNTAsCisgICAgMTI5MCwg
IC0yNTAsICAgIDExLCAgLTI1MCwgIDExMzgsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAtMjUwLCAg
MTI5MCwKKyAgICAgIDE0LCAgMTI2NiwgIC0yNTAsICAgIDI3LCAgLTI1MCwgICAgMzQsICAgIDQx
LCAgLTI1MCwgIC0yNTAsICAtMjUwLAorICAgIC0yNTAsICAxMjY2LCAgIDEyOSwgICAgNjEsICAt
MjUwLCAgICAxNywgIC0yNTAsICAtMjUwLCAgIDkwOCwgIC0yNTAsCisgICAgLTI1MCwgICAgMzEs
ICAxMjY2LCAgICA3MiwgIDEwNDIsICAtMjUwLCAgIDI4MywgIC0yNTAsICAtMjUwLCAgLTI1MCwK
KyAgICAtMjUwLCAgICA5MCwgIDEyNjYsICAgLTQ2LCAgLTI1MCwgICAxOTQsICAgOTA4LCAgICA2
NSwgIC0yNTAsICAtMjUwLAorICAgIC0yNTAsICAtMjUwLCAgIDkwOCwgICA5MDgsICAgOTA4LCAg
LTI1MCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgIC0yNTAsCisgICAgIC00MCwgIC0yNTAsICAtMjUw
LCAgLTI1MCwgICAgODAsICAgLTI1LCAgIDk3NSwgICAgODcsICAtMjUwLCAgIDkwOCwKKyAgICAg
IDM1LCAgICAxMywgIC0yNTAsICAgLTI2LCAgICA2OCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgICAx
MTAsICAgMTA5LAorICAgICAtNTQsICAtMjUwLCAgICA5NiwgIC0yNTAsICAtMjUwLCAgMTA4Mywg
ICAgOTgsICAgIDMzLCAgLTI1MCwgIC0yNTAsCisgICAgLTI1MCwgICAgOTEsICAgIDkyLCAgLTI1
MCwgICAxMDQsICAgMTA3LCAgICA5OSwgICA3NjAsICAgMTA4LCAgIDEwNSwKKyAgICAtMjUwLCAg
LTI1MCwgICAgMjQsICAtMjUwLCAgLTI1MCwgICAgMzcsICAtMjUwLCAgIC02MCwgICAxMTIsICAt
MjUwLAorICAgIC0yNTAsICAtMjUwLCAgLTI1MCwgICAzNjUsICAtMjUwLCAgLTI1MCwgIC0yNTAs
ICAtMjUwLCAgIDExMSwgIC0yNTAsCisgICAgLTI1MCwgICA4MjcsICAgOTA4LCAgLTI1MCwgICAx
MTMsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAtMjUwLCAgICAgNCwKKyAgICAtMjUwLCAgLTI1MCwg
ICA5MDgsICAxMTc5LCAgLTI1MCwgIC0yNTAsICAgOTA4LCAgIDExNCwgIC0yNTAsICAtMjUwLAor
ICAgIC0yNTAsICAgOTA4LCAgIDkwOCwgICA5MDgsICAgOTA4LCAgIDkwOCwgICA5MDgsICAgOTA4
LCAgIDkwOCwgICA5MDgsCisgICAgIDkwOCwgICA5MDgsICAgOTA4LCAgIDkwOCwgICA5MDgsICAt
MjUwLCAgLTI1MCwgICA5MDgsICAgIDcyLCAgLTI1MCwKKyAgICAtMjUwLCAgLTI1MCwgICA0NDcs
ICAtMjUwLCAgIDkwOCwgIC0yNTAsICAtMjUwLCAgICA0MiwgIC0yNTAsICAtMjUwLAorICAgICA0
NDcsICAtMjUwLCAgLTI1MCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgICA5MDgsICAgOTA4LCAgLTI1
MCwgIC0yNTAsCisgICAgLTI1MCwgICA5MDgsICAtMjUwLCAgIDExNSwgIC0yNTAsICAtMjUwLCAg
LTI1MCwgICAxMTYsICAgMTE3LCAgLTI1MCwKKyAgICAgMTIwLCAgLTI1MCwgIC0yNTAsICAtMjUw
LCAgLTI1MCwgICAgMzUsICAgIDM1LCAgLTI1MCwgIC0yNTAsICAtMjUwLAorICAgIC0yNTAsICAg
LTI2LCAgIC0yNiwgIC0yNTAsICAgMTEwLCAgIDEwOSwgICAgNTEsICAgMTE5LCAgLTI1MCwgICAx
NDQsCisgICAgIDYxMSwgICAgMjMsICAtMjUwLCAgIDY5MywgICA0NDcsICAtMjUwLCAgLTI1MCwg
ICAxMjIsICAtMjUwLCAgLTI1MCwKKyAgICAgOTA4LCAgLTI1MCwgICAxMjMsICAtMjUwLCAgLTI1
MCwgICA2OTMsICAgNDQ3LCAgIDExNywgICAxNTMsICAgMTI2LAorICAgICAxMjgsICAtMjUwLCAg
LTI1MCwgICA5MDgsICAtMjUwLCAgIDEyNywgICAxMzcsICAgMTcxLCAgLTI1MCwgICAxMzAsCisg
ICAgIDUyOSwgIC0yNTAsICAgIDI4LCAgIDkwOCwgICA1MjksICAgNDQ3LCAgIDkwOCwgIC0yNTAs
ICAtMjUwLCAgLTI1MCwKKyAgICAgMTMxLCAgIDExNywgIC0yNTAsICAtMjUwLCAgLTI1MCwgIC0y
NTAKK307CisKKy8qIFlZUEdPVE9bTlRFUk0tTlVNXS4gICovCitzdGF0aWMgY29uc3QgeXl0eXBl
X2ludDE2IHl5cGdvdG9bXSA9Cit7CisgICAgLTI1MCwgIC0yNTAsICAtMjUwLCAgLTI1MCwgIC0y
NTAsICAtMjUwLCAgLTI1MCwgICAgMzksICAtMjUwLCAgLTI1MCwKKyAgICAtMjUwLCAgLTI1MCwg
ICAtNDUsICAtMjUwLCAgIC0xOCwgIC0yNTAsICAgLTc5LCAgIC0zMCwgIC0yNTAsICAtMjUwLAor
ICAgIC0yNTAsICAgIDM4LCAgICA1MiwgICAgMjAsICAtMjUwLCAgIC02MywgICAtODUsICAtMjUw
LCAgIC05MiwgICAtNzEsCisgICAgICAgNiwgICAgIDksICAtMjUwLCAgLTI1MCwgIC0yNTAsICAg
MTMyLCAgIDE3MiwgICAxNjYsICAgMTQ4LCAgLTI1MCwKKyAgICAtMjUwLCAgLTI0NiwgICAtMjEs
ICAgICAwLCAgIDIyNiwgICAtMjQsICAtMjUwLCAgLTI1MCwgICAxNjIsICAgLTY2LAorICAgIC0y
NTAsICAgIDQ1LCAgLTE1OSwgICAgLTMsICAtMTM2LCAgLTI0OSwgIC0yNTAsICAtMjUwLCAgLTI1
MCwgICAtMzYsCisgICAgIDE5NiwgICAgNDYsICAgICAxLCAgLTI1MCwgIC0yNTAsICAgLTEzLCAg
LTI1MCwgIC0yNTAsICAtMjUwLCAgLTI1MCwKKyAgICAtMjUwLCAgLTI1MCwgIC0yNTAsICAtMjUw
LCAgLTI1MCwgICAyMTEsICAtMjUwLCAgLTI1MAorfTsKKworLyogWVlUQUJMRVtZWVBBQ1RbU1RB
VEUtTlVNXV0uICBXaGF0IHRvIGRvIGluIHN0YXRlIFNUQVRFLU5VTS4gIElmCisgICBwb3NpdGl2
ZSwgc2hpZnQgdGhhdCB0b2tlbi4gIElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gK
KyAgIG51bWJlciBpcyB0aGUgb3Bwb3NpdGUuICBJZiB6ZXJvLCBkbyB3aGF0IFlZREVGQUNUIHNh
eXMuCisgICBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci4gICovCisjZGVmaW5lIFlZVEFC
TEVfTklORiAtNzYKK3N0YXRpYyBjb25zdCB5eXR5cGVfaW50MTYgeXl0YWJsZVtdID0KK3sKKyAg
ICAgIDM5LCAgIDE2NSwgICAxNjksICAgMjI0LCAgIDE5MywgICAxMjEsICAgIDMwLCAgIDI2OCwg
ICAxMzAsICAgIDMxLAorICAgICAgNTAsICAgMTcwLCAgIDE3MSwgICAgNjIsICAgMTY0LCAgICA2
MywgICAgNjcsICAgMjIwLCAgICA2NCwgICAyNjgsCisgICAgICA1MiwgICAxNzgsICAgMTIxLCAg
IDEwOCwgICAgNTYsICAgIDcxLCAgIDE2MSwgICAxODUsICAgMTg2LCAgICAgNiwKKyAgICAgICA3
LCAgIDI4NywgICAxNzIsICAgMTYyLCAgICA2MiwgICAyODcsICAgMTczLCAgICA1NiwgICAgNjYs
ICAgMTk0LAorICAgICAxMDgsICAgIDUxLCAgICAgNiwgICAgIDcsICAgIDM5LCAgIDIwNywgICAx
NzUsICAgMTY3LCAgIDE2OCwgICAgNTQsCisgICAgICAzMCwgICAgNzMsICAgMTc2LCAgICAzMSwg
ICAgNTcsICAgIDU4LCAgICA1OSwgICAgMjMsICAgIDI0LCAgIDEzMCwKKyAgICAgIDU1LCAgICA4
MSwgICAxODcsICAgMTg4LCAgIDE4MCwgICAgNjUsICAgMjQ5LCAgICA1NywgICAgNTgsICAgIDU5
LAorICAgICAgMjMsICAgIDI0LCAgICA3MywgICAgNDcsICAgIDczLCAgIDIyNiwgICAxNDgsICAg
MTY1LCAgICA0NywgICAgNDgsCisgICAgIDIyOCwgICAyMTcsICAgIDgxLCAgICA2OCwgICAyMTEs
ICAgMjEyLCAgIDIxMywgICAgODQsICAgIDcyLCAgICA4NSwKKyAgICAgMjIzLCAgIDIzMiwgICAt
NzUsICAgMjE0LCAgIDI2NiwgICAxODMsICAgIDg2LCAgIDE4NCwgICAxMjEsICAgMjkwLAorICAg
ICAyMTcsICAgIDc2LCAgIDI0NiwgICAyMTUsICAgIDgzLCAgIDIxNywgICAyMzcsICAgMjM4LCAg
IDIzOSwgICAyNDAsCisgICAgIDE5OCwgICAxMjQsICAgMjUxLCAgIDE5OSwgICAyMTcsICAgMTI2
LCAgIDEwOCwgICAyMTgsICAgMjIwLCAgIDIxNywKKyAgICAgMTgxLCAgIDE4MiwgICAyNTIsICAg
MTg5LCAgIDE5MCwgICAgNzMsICAgMjQ3LCAgIDI5NCwgICAyMTcsICAgMjYwLAorICAgICAyNzcs
ICAgMjU1LCAgIDI1NiwgICAxNTgsICAgMTIxLCAgIC0yNiwgICAyMzMsICAgMjM0LCAgIDEwOCwg
ICAxMDgsCisgICAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEwOCwgICAxMDgsICAgMTA4LCAgIDEw
OCwgICAxMDgsICAgMTA4LCAgIDI5MywKKyAgICAgMjU3LCAgIDE3NCwgICAxMDgsICAgMTQ4LCAg
ICAgMiwgICAgIDMsICAgICA0LCAgIDE3OSwgICAxMjEsICAgMjQxLAorICAgICAyNDIsICAgMjY3
LCAgICA1NywgICAgNTgsICAgIDU5LCAgIDIzNSwgICAyMzYsICAgMTkxLCAgIDE5MiwgICAxOTUs
CisgICAgIDE5NywgICAyMDAsICAgMjAxLCAgIDI2NywgICAyMDMsICAgMjcyLCAgIDEwOCwgICAy
MDQsICAgMjA4LCAgIDIwNSwKKyAgICAgMjA5LCAgIDI4MiwgICAtMjUsICAgMjIxLCAgIDI2Miwg
ICAtMjAsICAgMjI1LCAgIDI4NSwgICAyNTgsICAgMjU5LAorICAgICAtMjcsICAgMjkxLCAgIDI2
MSwgICAyNzMsICAgMjE3LCAgIDI3MSwgICAyNzksICAgMjgwLCAgICAgMiwgICAgIDMsCisgICAg
ICAgNCwgICAxNjUsICAgMTQ4LCAgIDI4MSwgICAgIDgsICAgICA5LCAgICAxMCwgICAyODMsICAg
Mjg0LCAgIDI4NiwKKyAgICAgMTQ4LCAgIDI5NSwgICAyMzEsICAgMjQ1LCAgIDE1OSwgICAgMTEs
ICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LAorICAgICAgMTYsICAgIDE3LCAgICAxOCwgICAg
MTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgIDc4LCAgICA4MiwgICAyNDMsCisgICAgIDE2MCwg
ICAgNDksICAgIDI1LCAgICAyNiwgICAxMjUsICAgIDI3LCAgICAyOCwgICAgODcsICAgIDI5LCAg
ICA4OCwKKyAgICAgIDg5LCAgICA5MCwgICAgOTEsICAgMjQ4LCAgIDI0NCwgICAgOTIsICAgIDkz
LCAgIDI2MywgICAyOTIsICAgIDc3LAorICAgICAxNDgsICAgMjY0LCAgIDI3NCwgICAxNDgsICAg
MTQ4LCAgICA3MCwgICAyNTQsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgOTQsICAgMTQ4LCAgIDE0OCwgICAxNjMsICAgICAwLCAgICAgMCwK
KyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTUsICAgIDk2LCAgICAg
MCwgICAgOTcsICAgICAwLAorICAgICAxNDgsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQ4LCAg
IDE0OCwgICAgIDEsICAgICAyLCAgICAgMywgICAgIDQsCisgICAgICAgNSwgICAgIDYsICAgICA3
LCAgICAgOCwgICAgIDksICAgIDEwLCAgIDEzMSwgICAxMzIsICAgMTMzLCAgICAgMCwKKyAgICAg
MTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAg
MTUsICAgIDE2LAorICAgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEz
OCwgICAgMjcsICAgIDI4LCAgICA4NywgICAgMjksICAgIDg4LCAgICA4OSwKKyAgICAgIDkwLCAg
ICA5MSwgICAgIDAsICAgICAwLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAxMzksICAgMTQwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwg
ICAgIDAsICAgMTQxLCAgICA5NSwgICAgOTYsICAgICAwLCAgICA5NywgICAgIDEsICAgICAyLAor
ICAgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEw
LCAgIDEzMSwgICAxMzIsCisgICAgIDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAg
MTM3LCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwKKyAgICAgIDE1LCAgICAxNiwgICAgMTcs
ICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLCAgICAyMiwgICAgIDAsICAgICAwLAorICAgICAg
IDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LCAgICA4
NywgICAgMjksCisgICAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwgICAgIDAsICAgICAwLCAg
ICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NCwgICAgIDAsICAgICAwLCAgICAgMCwgICAx
MzksCisgICAgIDIxOSwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NSwg
ICAgOTYsICAgICAwLCAgICA5NywKKyAgICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAg
NSwgICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLAorICAgICAxMzEsICAgMTMyLCAg
IDEzMywgICAgIDAsICAgMTM0LCAgIDEzNSwgICAxMzYsICAgMTM3LCAgICAxMSwgICAgMTIsCisg
ICAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAs
ICAgIDIxLCAgICAyMiwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAg
MjUsICAgIDI2LCAgIDEzOCwgICAgMjcsICAgIDI4LAorICAgICAgODcsICAgIDI5LCAgICA4OCwg
ICAgODksICAgIDkwLCAgICA5MSwgICAgIDAsICAgICAwLCAgICA5MiwgICAgOTMsCisgICAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICA5NCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgMTM5LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgMTQxLCAgICA5NSwgICAgOTYsCisgICAgICAgMCwgICAg
OTcsICAgICAxLCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAg
OCwKKyAgICAgICA5LCAgICAxMCwgICAxMzEsICAgMTMyLCAgIDEzMywgICAgIDAsICAgMTM0LCAg
IDEzNSwgICAxMzYsICAgMTM3LAorICAgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1
LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsCisgICAgICAyMSwgICAgMjIsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgIDEzOCwKKyAg
ICAgIDI3LCAgICAyOCwgICAgODcsICAgIDI5LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwg
ICAgIDAsICAgICAwLAorICAgICAgOTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5NCwKKyAgICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDc2LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAs
ICAgMTQxLAorICAgICAgOTUsICAgIDk2LCAgICAgMCwgICAgOTcsICAgICAxLCAgICAgMiwgICAg
IDMsICAgICA0LCAgICAgNSwgICAgIDYsCisgICAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAg
MCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4
LAorICAgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDIzLCAgICAyNCwgICAgMjUsCisgICAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgODcs
ICAgIDI5LCAgICA4OCwgICAgODksICAgIDkwLCAgICA5MSwKKyAgICAgICAwLCAgICAgMCwgICAg
OTIsICAgIDkzLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgOTQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgIDE0MSwgICAgOTUsICAg
IDk2LCAgICAgMCwgICAgOTcsICAgIDU2LCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDAs
ICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAx
MywgICAgMTQsICAgIDE1LCAgICAxNiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAg
ICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDIzLAorICAgICAgMjQsICAgIDI1
LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgODcsICAgIDI5LCAgICA4OCwgICAgODks
CisgICAgICA5MCwgICAgOTEsICAgICAwLCAgICAgMCwgICAgOTIsICAgIDkzLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAg
MCwgICAgOTQsICAgICAyLCAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAg
ICAgOCwgICAgIDksICAgIDEwLCAgICAgMCwgICAgOTUsICAgIDk2LCAgICAgMCwgICAgOTcsICAg
ICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUs
ICAgIDE2LCAgICAxNywgICAgMTgsICAgIDE5LAorICAgICAgMjAsICAgIDIxLCAgICAyMiwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAgMjYsCisgICAgICAgMCwg
ICAgMjcsICAgIDI4LCAgICA4NywgICAgMjksICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAg
ICAgMCwKKyAgICAgICAwLCAgICA5MiwgICAgOTMsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICA5NCwgICAgIDIs
ICAgICAzLCAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwK
KyAgICAgMjA2LCAgICA5NSwgICAgOTYsICAgICAwLCAgICA5NywgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMTEsICAgIDEyLAorICAgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsCisgICAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwKKyAgICAg
IDg3LCAgICAyOSwgICAgODgsICAgIDg5LCAgICA5MCwgICAgOTEsICAgICAwLCAgICAgMCwgICAg
OTIsICAgIDkzLAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTQsICAgICAwLCAgICAgMCwKKyAgICAgMjIyLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgOTUsICAg
IDk2LAorICAgICAgIDAsICAgIDk3LCAgICAgMiwgICAgIDMsICAgICA0LCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgOCwgICAgIDksCisgICAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAxMSwKKyAgICAgIDEyLCAgICAxMywg
ICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsICAgIDE4LCAgICAxOSwgICAgMjAsICAgIDIxLAor
ICAgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2
LCAgICAgMCwgICAgMjcsCisgICAgICAyOCwgICAgODcsICAgIDI5LCAgICA4OCwgICAgODksICAg
IDkwLCAgICA5MSwgICAgIDAsICAgICAwLCAgICA5MiwKKyAgICAgIDkzLCAgICAgMCwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLAorICAgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICA5
NCwgICAgIDIsCisgICAgICAgMywgICAgIDQsICAgICAwLCAgICAgMCwgICAgIDAsICAgICA4LCAg
ICAgOSwgICAgMTAsICAgICAwLCAgICA5NSwKKyAgICAgIDk2LCAgICAgMCwgICAgOTcsICAgICAw
LCAgICAgMCwgICAgIDAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LAorICAgICAgMTUsICAg
IDE2LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAgMCwgICAg
IDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAyNSwgICAxNzcsICAgICAwLCAgICAyNywg
ICAgMjgsICAgIDg3LCAgICAyOSwKKyAgICAgIDg4LCAgICA4OSwgICAgOTAsICAgIDkxLCAgICAg
MCwgICAgIDAsICAgIDkyLCAgICA5MywgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgICAwLCAg
ICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisg
ICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDk0LCAgICAgMiwgICAgIDMs
ICAgICA0LCAgICAgMCwKKyAgICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwgICAg
IDAsICAgIDk1LCAgICA5NiwgICAgIDAsICAgIDk3LAorICAgICAgIDAsICAgICAwLCAgICAgMCwg
ICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAgMTcsCisgICAgICAx
OCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAw
LCAgICAgMCwKKyAgICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsICAg
IDI5LCAgICAgMiwgICAgIDMsICAgICA0LAorICAgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgs
ICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAx
NiwKKyAgICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAg
IDEyOSwgICAgIDAsICAgICAwLAorICAgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3
LCAgICAyOCwgICAgIDAsICAgIDI5LCAgICAgMCwgICAgIDAsCisgICAgICAgMCwgICAgIDAsICAg
ICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgIDY5LCAgICAgMCwKKyAg
ICAgICAwLCAgICAgMSwgICAgIDIsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAgNywg
ICAgIDgsICAgICA5LAorICAgICAgMTAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgIDAsICAgICAwLCAgIDE5NiwgICAgMTEsCisgICAgICAxMiwgICAgMTMsICAgIDE0LCAg
ICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwKKyAgICAgIDIy
LCAgICAgMCwgICAgIDAsICAgICAwLCAgICAyMywgICAgMjQsICAgIDI1LCAgICAyNiwgICAgIDAs
ICAgIDI3LAorICAgICAgMjgsICAgICAwLCAgICAyOSwgICAgIDIsICAgICAzLCAgICAgNCwgICAg
IDAsICAgICAwLCAgICAgMCwgICAgIDgsCisgICAgICAgOSwgICAgMTAsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwKKyAgICAgIDExLCAgICAx
MiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LAorICAgICAgMjEsICAgIDIyLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAg
IDI1LCAgICAyNiwgICAgIDAsCisgICAgICAyNywgICAgMjgsICAgMjI5LCAgICAyOSwgICAgIDAs
ICAgICAwLCAgICAgMCwgICAyMzAsICAgICAxLCAgICAgMiwKKyAgICAgICAzLCAgICAgNCwgICAg
IDUsICAgICA2LCAgICAgNywgICAgIDgsICAgICA5LCAgICAxMCwgICAgIDAsICAgICAwLAorICAg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgMTEsICAgIDEyLCAg
ICAxMywgICAgMTQsCisgICAgICAxNSwgICAgMTYsICAgIDE3LCAgICAxOCwgICAgMTksICAgIDIw
LCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwKKyAgICAgICAwLCAgICAyMywgICAgMjQsICAg
IDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAsICAgIDI5LAorICAgICAgIDIs
ICAgICAzLCAgICAgNCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDgsICAgICA5LCAgICAxMCwg
ICAgIDAsCisgICAgICAgMCwgICAgIDAsICAgICAwLCAgICAgMCwgICAgIDAsICAgICAwLCAgICAg
MCwgICAgMTEsICAgIDEyLCAgICAxMywKKyAgICAgIDE0LCAgICAxNSwgICAgMTYsICAgIDE3LCAg
ICAxOCwgICAgMTksICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLAorICAgICAgIDgsICAgICA5
LCAgICAxMCwgICAgIDAsICAgIDI1LCAgICAyNiwgICAgIDAsICAgIDI3LCAgICAyOCwgICAgIDAs
CisgICAgICAyOSwgICAgMTEsICAgIDEyLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNiwgICAg
MTcsICAgIDE4LCAgICAxOSwKKyAgICAgIDIwLCAgICAyMSwgICAgMjIsICAgICAwLCAgICAgMCwg
ICAgIDAsICAgICAwLCAgICAgMCwgICAgMjUsICAgIDI2LAorICAgICAgIDAsICAgIDI3LCAgICAy
OCwgICAgIDAsICAgIDI5Cit9OworCitzdGF0aWMgY29uc3QgeXl0eXBlX2ludDE2IHl5Y2hlY2tb
XSA9Cit7CisgICAgICAgMCwgICAgODYsICAgIDk0LCAgIDE2MiwgICAgNTgsICAgIDY4LCAgICAg
MCwgICAyNTMsICAgIDc0LCAgICAgMCwKKyAgICAgIDQzLCAgICA1MSwgICAgNTIsICAgIDM0LCAg
ICA4NSwgICAgNzcsICAgIDQwLCAgIDE1MywgICAgODAsICAgMjY1LAorICAgICAgODAsICAgMTA2
LCAgICA4NSwgICAgNjgsICAgICAzLCAgICA0OSwgICAgNzIsICAgIDUzLCAgICA1NCwgICAgIDgs
CisgICAgICAgOSwgICAyODAsICAgIDcyLCAgICA3OSwgICAgNTUsICAgMjg0LCAgICA3NiwgICAg
IDMsICAgIDM4LCAgICA5MywKKyAgICAgIDg1LCAgICA3NCwgICAgIDgsICAgICA5LCAgICA0NCwg
ICAxMzcsICAgIDcxLCAgICA5MiwgICAgOTMsICAgIDcxLAorICAgICAgNDQsICAgIDUxLCAgICA3
NywgICAgNDQsICAgIDMzLCAgICAzNCwgICAgMzUsICAgIDM2LCAgICAzNywgICAxMjUsCisgICAg
ICA3NywgICAgNjEsICAgIDg4LCAgICA4OSwgICAxMDksICAgIDQzLCAgIDIwMiwgICAgMzMsICAg
IDM0LCAgICAzNSwKKyAgICAgIDM2LCAgICAzNywgICAgNzIsICAgIDM3LCAgICA3NCwgICAgNzEs
ICAgIDc2LCAgIDE2MiwgICAgMzcsICAgIDQzLAorICAgICAxNzIsICAgIDc3LCAgICA4MiwgICAg
NzIsICAgIDYwLCAgICA2MSwgICAgNjIsICAgIDcwLCAgICA3NCwgICAgNzIsCisgICAgIDE2MSwg
ICAxNzYsICAgIDcxLCAgICA2OSwgICAgNzEsICAgIDgyLCAgICA3OSwgICAgODQsICAgMTYxLCAg
ICA3MSwKKyAgICAgIDc3LCAgICA3NCwgICAxOTQsICAgIDc5LCAgICA0MywgICAgNzcsICAgMTg1
LCAgIDE4NiwgICAxODcsICAgMTg4LAorICAgICAgNzcsICAgIDgwLCAgIDIwNCwgICAgODAsICAg
IDc3LCAgICA0MywgICAxNjEsICAgIDgwLCAgIDI1NCwgICAgNzcsCisgICAgICA4NSwgICAgODYs
ICAgIDgwLCAgICA1NSwgICAgNTYsICAgMTI1LCAgIDE5NywgICAyODYsICAgIDc3LCAgICA3OCwK
KyAgICAgMjY2LCAgIDIxNiwgICAyMTcsICAgIDQzLCAgIDE5NywgICAgNzAsICAgMTgxLCAgIDE4
MiwgICAxODMsICAgMTg0LAorICAgICAxODUsICAgMTg2LCAgIDE4NywgICAxODgsICAgMTg5LCAg
IDE5MCwgICAxOTEsICAgMTkyLCAgIDE5MywgICAyODUsCisgICAgIDIyMSwgICAgNzEsICAgMTk3
LCAgIDE1MywgICAgIDQsICAgICA1LCAgICAgNiwgICAgNzAsICAgMjIxLCAgIDE4OSwKKyAgICAg
MTkwLCAgIDI1MywgICAgMzMsICAgIDM0LCAgICAzNSwgICAxODMsICAgMTg0LCAgICA1NywgICAg
NTksICAgIDczLAorICAgICAgNzIsICAgIDgwLCAgICA4MCwgICAyNjUsICAgIDcwLCAgIDI2MCwg
ICAyMjEsICAgIDcwLCAgICA3MCwgICAgODAsCisgICAgICA3NSwgICAyNzMsICAgIDcwLCAgICA3
MiwgICAgNDAsICAgIDcxLCAgICA3MywgICAgMTYsICAgIDczLCAgICA3MywKKyAgICAgIDcwLCAg
IDI4MywgICAgNzMsICAgIDcwLCAgICA3NywgICAgNzMsICAgIDQzLCAgICA3MSwgICAgIDQsICAg
ICA1LAorICAgICAgIDYsICAgMjg2LCAgIDIwMiwgICAgNzUsICAgIDEwLCAgICAxMSwgICAgMTIs
ICAgIDgwLCAgICA3MSwgICAgNzksCisgICAgIDIxMCwgICAgODAsICAgMTczLCAgIDE5MywgICAg
ODIsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwKKyAgICAgIDI2LCAgICAyNywg
ICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICA1NSwgICAgNjIsICAgMTkxLAor
ICAgICAgODIsICAgICA1LCAgICAzOCwgICAgMzksICAgIDcyLCAgICA0MSwgICAgNDIsICAgIDQz
LCAgICA0NCwgICAgNDUsCisgICAgICA0NiwgICAgNDcsICAgIDQ4LCAgIDE5OCwgICAxOTIsICAg
IDUxLCAgICA1MiwgICAyNTAsICAgMjg0LCAgICA1MywKKyAgICAgMjUwLCAgIDI1MCwgICAyNjUs
ICAgMjUzLCAgIDI1NCwgICAgNDQsICAgMjEwLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcwLCAgIDI2NSwgICAyNjYsICAgIDczLCAgICAt
MSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDgxLCAg
ICA4MiwgICAgLTEsICAgIDg0LCAgICAtMSwKKyAgICAgMjgwLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgIDI4NCwgICAyODUsICAgICAzLCAgICAgNCwgICAgIDUsICAgICA2LAorICAgICAgIDcsICAg
ICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwgICAgMTMsICAgIDE0LCAgICAxNSwgICAg
LTEsCisgICAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywg
ICAgMjQsICAgIDI1LCAgICAyNiwKKyAgICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAz
MSwgICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM2LAorICAgICAgMzcsICAgIDM4LCAg
ICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsCisg
ICAgICA0NywgICAgNDgsICAgIC0xLCAgICAtMSwgICAgNTEsICAgIDUyLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwg
ICAgNzAsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDc0LCAgICA3NSwgICAgLTEsCisgICAgICAt
MSwgICAgLTEsICAgIC0xLCAgICA4MCwgICAgODEsICAgIDgyLCAgICAtMSwgICAgODQsICAgICAz
LCAgICAgNCwKKyAgICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAg
IDExLCAgICAxMiwgICAgMTMsICAgIDE0LAorICAgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgs
ICAgIDE5LCAgICAyMCwgICAgMjEsICAgIDIyLCAgICAyMywgICAgMjQsCisgICAgICAyNSwgICAg
MjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLCAgICAzMSwgICAgMzIsICAgIC0xLCAgICAt
MSwKKyAgICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAg
ICA0MiwgICAgNDMsICAgIDQ0LAorICAgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIC0x
LCAgICAtMSwgICAgNTEsICAgIDUyLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAg
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIDc0LAorICAgICAgNzUsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4
MCwgICAgODEsICAgIDgyLCAgICAtMSwgICAgODQsCisgICAgICAgMywgICAgIDQsICAgICA1LCAg
ICAgNiwgICAgIDcsICAgICA4LCAgICAgOSwgICAgMTAsICAgIDExLCAgICAxMiwKKyAgICAgIDEz
LCAgICAxNCwgICAgMTUsICAgIC0xLCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAgMjEs
ICAgIDIyLAorICAgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAg
MjksICAgIDMwLCAgICAzMSwgICAgMzIsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwg
ICAgMzcsICAgIDM4LCAgICAzOSwgICAgNDAsICAgIDQxLCAgICA0MiwKKyAgICAgIDQzLCAgICA0
NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsICAgIC0xLCAgICAtMSwgICAgNTEsICAgIDUy
LAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgNzAsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICA3NCwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA4MCwgICAgODEsICAgIDgyLAorICAg
ICAgLTEsICAgIDg0LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LCAg
ICAgOSwgICAgMTAsCisgICAgICAxMSwgICAgMTIsICAgIDEzLCAgICAxNCwgICAgMTUsICAgIC0x
LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwKKyAgICAgIDIxLCAgICAyMiwgICAgMjMsICAg
IDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMwLAorICAgICAgMzEs
ICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LCAgICAzOSwg
ICAgNDAsCisgICAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0
NywgICAgNDgsICAgIC0xLCAgICAtMSwKKyAgICAgIDUxLCAgICA1MiwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzAs
CisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3NCwgICAgLTEsICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIC0xLCAgICA4MCwKKyAgICAgIDgxLCAgICA4MiwgICAgLTEsICAgIDg0LCAgICAgMywg
ICAgIDQsICAgICA1LCAgICAgNiwgICAgIDcsICAgICA4LAorICAgICAgIDksICAgIDEwLCAgICAx
MSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAg
IDI3LCAgICAyOCwKKyAgICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAzNiwgICAgMzcsICAgIDM4LAorICAgICAgMzksICAgIC0xLCAgICA0MSwgICAg
NDIsICAgIDQzLCAgICA0NCwgICAgNDUsICAgIDQ2LCAgICA0NywgICAgNDgsCisgICAgICAtMSwg
ICAgLTEsICAgIDUxLCAgICA1MiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgODAs
ICAgIDgxLCAgICA4MiwgICAgLTEsICAgIDg0LCAgICAgMywgICAgIDQsICAgICA1LCAgICAgNiwK
KyAgICAgIC0xLCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAg
ICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5
LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzNiwKKyAgICAg
IDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIDQzLCAgICA0NCwgICAg
NDUsICAgIDQ2LAorICAgICAgNDcsICAgIDQ4LCAgICAtMSwgICAgLTEsICAgIDUxLCAgICA1Miwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDcwLCAgICAgNCwgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAg
IC0xLAorICAgICAgMTAsICAgIDExLCAgICAxMiwgICAgLTEsICAgIDgxLCAgICA4MiwgICAgLTEs
ICAgIDg0LCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgMjEsICAgIDIyLCAgICAyMywgICAg
MjQsICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwKKyAgICAgIDMwLCAgICAzMSwg
ICAgMzIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LAor
ICAgICAgLTEsICAgIDQxLCAgICA0MiwgICAgNDMsICAgIDQ0LCAgICA0NSwgICAgNDYsICAgIDQ3
LCAgICA0OCwgICAgLTEsCisgICAgICAtMSwgICAgNTEsICAgIDUyLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAg
NzAsICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAx
MSwgICAgMTIsCisgICAgICA4MCwgICAgODEsICAgIDgyLCAgICAtMSwgICAgODQsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwKKyAgICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLAorICAgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAg
NDIsCisgICAgICA0MywgICAgNDQsICAgIDQ1LCAgICA0NiwgICAgNDcsICAgIDQ4LCAgICAtMSwg
ICAgLTEsICAgIDUxLCAgICA1MiwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDcwLCAgICAtMSwgICAgLTEsCisg
ICAgICA3MywgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIDgxLCAgICA4MiwKKyAgICAgIC0xLCAgICA4NCwgICAgIDQsICAgICA1LCAgICAgNiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgMTAsICAgIDExLAorICAgICAgMTIsICAgIC0xLCAgICAtMSwg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMjEsCisgICAgICAy
MiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksICAgIDMw
LCAgICAzMSwKKyAgICAgIDMyLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAg
IDM4LCAgICAzOSwgICAgLTEsICAgIDQxLAorICAgICAgNDIsICAgIDQzLCAgICA0NCwgICAgNDUs
ICAgIDQ2LCAgICA0NywgICAgNDgsICAgIC0xLCAgICAtMSwgICAgNTEsCisgICAgICA1MiwgICAg
LTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAt
MSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgNzAsICAgICA0LAorICAgICAgIDUsICAgICA2LCAgICAtMSwgICAgLTEsICAgIC0x
LCAgICAxMCwgICAgMTEsICAgIDEyLCAgICAtMSwgICAgODEsCisgICAgICA4MiwgICAgLTEsICAg
IDg0LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwKKyAg
ICAgIDI1LCAgICAyNiwgICAgMjcsICAgIDI4LCAgICAyOSwgICAgMzAsICAgIDMxLCAgICAzMiwg
ICAgLTEsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzgsICAgIDM5LCAgICAt
MSwgICAgNDEsICAgIDQyLCAgICA0MywgICAgNDQsCisgICAgICA0NSwgICAgNDYsICAgIDQ3LCAg
ICA0OCwgICAgLTEsICAgIC0xLCAgICA1MSwgICAgNTIsICAgIC0xLCAgICAtMSwKKyAgICAgIC0x
LCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICA3MCwgICAg
IDQsICAgICA1LCAgICAgNiwgICAgLTEsCisgICAgICAtMSwgICAgLTEsICAgIDEwLCAgICAxMSwg
ICAgMTIsICAgIC0xLCAgICA4MSwgICAgODIsICAgIC0xLCAgICA4NCwKKyAgICAgIC0xLCAgICAt
MSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwgICAgMjYsICAgIDI3
LAorICAgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsICAg
IC0xLCAgICAtMSwgICAgLTEsCisgICAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIs
ICAgIC0xLCAgICA0NCwgICAgIDQsICAgICA1LCAgICAgNiwKKyAgICAgIC0xLCAgICAtMSwgICAg
LTEsICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLAorICAg
ICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAg
ICAyNSwgICAgMjYsCisgICAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMy
LCAgICAtMSwgICAgNzUsICAgIC0xLCAgICAtMSwKKyAgICAgIC0xLCAgICAzOCwgICAgMzksICAg
IC0xLCAgICA0MSwgICAgNDIsICAgIC0xLCAgICA0NCwgICAgLTEsICAgIC0xLAorICAgICAgLTEs
ICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAgMCwg
ICAgLTEsCisgICAgICAtMSwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAg
OCwgICAgIDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgNzUsICAgIDIxLAorICAgICAgMjIsICAgIDIz
LCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEs
CisgICAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgMzYsICAgIDM3LCAgICAzOCwgICAg
MzksICAgIC0xLCAgICA0MSwKKyAgICAgIDQyLCAgICAtMSwgICAgNDQsICAgICA0LCAgICAgNSwg
ICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLAorICAgICAgMTEsICAgIDEyLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsCisgICAg
ICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwKKyAgICAgIDMxLCAgICAzMiwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEs
ICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLAorICAgICAgNDEsICAgIDQyLCAgICA0MywgICAg
NDQsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDQ4LCAgICAgMywgICAgIDQsCisgICAgICAgNSwg
ICAgIDYsICAgICA3LCAgICAgOCwgICAgIDksICAgIDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAg
ICAtMSwKKyAgICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDIx
LCAgICAyMiwgICAgMjMsICAgIDI0LAorICAgICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAg
IDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwgICAgLTEsCisgICAgICAtMSwgICAgMzYs
ICAgIDM3LCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAgNDIsICAgIC0xLCAgICA0NCwK
KyAgICAgICA0LCAgICAgNSwgICAgIDYsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDEwLCAgICAx
MSwgICAgMTIsICAgIC0xLAorICAgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIC0xLCAg
ICAtMSwgICAgLTEsICAgIDIxLCAgICAyMiwgICAgMjMsCisgICAgICAyNCwgICAgMjUsICAgIDI2
LCAgICAyNywgICAgMjgsICAgIDI5LCAgICAzMCwgICAgMzEsICAgIDMyLCAgICAtMSwKKyAgICAg
IDEwLCAgICAxMSwgICAgMTIsICAgIC0xLCAgICAzOCwgICAgMzksICAgIC0xLCAgICA0MSwgICAg
NDIsICAgIC0xLAorICAgICAgNDQsICAgIDIxLCAgICAyMiwgICAgMjMsICAgIDI0LCAgICAyNSwg
ICAgMjYsICAgIDI3LCAgICAyOCwgICAgMjksCisgICAgICAzMCwgICAgMzEsICAgIDMyLCAgICAt
MSwgICAgLTEsICAgIC0xLCAgICAtMSwgICAgLTEsICAgIDM4LCAgICAzOSwKKyAgICAgIC0xLCAg
ICA0MSwgICAgNDIsICAgIC0xLCAgICA0NAorfTsKKworLyogWVlTVE9TW1NUQVRFLU5VTV0gLS0g
VGhlIChpbnRlcm5hbCBudW1iZXIgb2YgdGhlKSBhY2Nlc3NpbmcKKyAgIHN5bWJvbCBvZiBzdGF0
ZSBTVEFURS1OVU0uICAqLworc3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Cit7
CisgICAgICAgMCwgICAgIDMsICAgICA0LCAgICAgNSwgICAgIDYsICAgICA3LCAgICAgOCwgICAg
IDksICAgIDEwLCAgICAxMSwKKyAgICAgIDEyLCAgICAyMSwgICAgMjIsICAgIDIzLCAgICAyNCwg
ICAgMjUsICAgIDI2LCAgICAyNywgICAgMjgsICAgIDI5LAorICAgICAgMzAsICAgIDMxLCAgICAz
MiwgICAgMzYsICAgIDM3LCAgICAzOCwgICAgMzksICAgIDQxLCAgICA0MiwgICAgNDQsCisgICAg
IDEyNCwgICAxMjUsICAgMTI2LCAgIDEyNywgICAxMjgsICAgMTMzLCAgIDEzNCwgICAxMzUsICAg
MTM2LCAgIDEzNywKKyAgICAgMTM4LCAgIDEzOSwgICAxNDAsICAgMTQxLCAgIDE2OCwgICAxNjks
ICAgMTcwLCAgICAzNywgICAgNDMsICAgMTM4LAorICAgICAgNDMsICAgIDc0LCAgICA4MCwgICAx
NzEsICAgIDcxLCAgICA3NywgICAgIDMsICAgIDMzLCAgICAzNCwgICAgMzUsCisgICAgIDEzMCwg
ICAxMzEsICAgMTM2LCAgICA3NywgICAgODAsICAgIDQzLCAgIDEzNywgICAxMzksICAgIDcyLCAg
ICAgMCwKKyAgICAgMTY5LCAgIDEzOSwgICAgNzQsICAgMTM3LCAgIDE0MiwgICAxNDMsICAgIDc0
LCAgIDE1NCwgICAxMzAsICAgMTI5LAorICAgICAxMzIsICAgMTM3LCAgIDEzMSwgICAgNDMsICAg
IDcwLCAgICA3MiwgICAgNzksICAgIDQzLCAgICA0NSwgICAgNDYsCisgICAgICA0NywgICAgNDgs
ICAgIDUxLCAgICA1MiwgICAgNzAsICAgIDgxLCAgICA4MiwgICAgODQsICAgIDk1LCAgICA5NiwK
KyAgICAgIDk3LCAgICA5OSwgICAxMDAsICAgMTAxLCAgIDEwMiwgICAxMDMsICAgMTA0LCAgIDEw
NSwgICAxMDYsICAgMTA3LAorICAgICAxMDgsICAgMTA5LCAgIDExMCwgICAxMTEsICAgMTEyLCAg
IDExMywgICAxMTQsICAgMTE1LCAgIDExNiwgICAxMTcsCisgICAgIDExOCwgICAxMTksICAgMTIz
LCAgIDEzNywgICAgODAsICAgMTQyLCAgICA0MywgICAxNDQsICAgMTQ1LCAgICA3NSwKKyAgICAg
MTQzLCAgICAxMywgICAgMTQsICAgIDE1LCAgICAxNywgICAgMTgsICAgIDE5LCAgICAyMCwgICAg
NDAsICAgIDc0LAorICAgICAgNzUsICAgIDgwLCAgIDEwNiwgICAxMTksICAgMTIwLCAgIDEyMiwg
ICAxMjQsICAgMTI1LCAgIDEzNywgICAxNDcsCisgICAgIDE0OCwgICAxNDksICAgMTUwLCAgIDE1
NSwgICAxNTYsICAgMTU3LCAgIDE2MCwgICAxNjcsICAgIDQzLCAgIDEyOSwKKyAgICAgMTMyLCAg
ICA3MiwgICAgNzksICAgIDczLCAgIDEyMywgICAxMjAsICAgMTQ2LCAgIDEwNiwgICAxMDYsICAg
MTIyLAorICAgICAgNTEsICAgIDUyLCAgICA3MiwgICAgNzYsICAgIDcxLCAgICA3MSwgICAgNzcs
ICAgIDM5LCAgIDEyMCwgICAgNzAsCisgICAgIDEwNiwgICAgODUsICAgIDg2LCAgICA4MiwgICAg
ODQsICAgIDUzLCAgICA1NCwgICAgODgsICAgIDg5LCAgICA1NSwKKyAgICAgIDU2LCAgICA1Nywg
ICAgNTksICAgIDU4LCAgICA5MywgICAgNzMsICAgIDc1LCAgICA3MiwgICAgNzcsICAgIDgwLAor
ICAgICAgODAsICAgIDgwLCAgIDE2MiwgICAgNzAsICAgIDcwLCAgICA4MCwgICAgODAsICAgMTIy
LCAgICA3MCwgICAgNzUsCisgICAgIDE1MSwgICAgNjAsICAgIDYxLCAgICA2MiwgICAgNjksICAg
IDc5LCAgIDEyMSwgICAgNzcsICAgIDgwLCAgICA3NSwKKyAgICAgMTQ4LCAgICA3MiwgICAgNzMs
ICAgMTIzLCAgIDE0NiwgICAgNzMsICAgIDcxLCAgICA5OCwgICAxMjIsICAgIDQzLAorICAgICAg
NDgsICAgMTAxLCAgIDEyMCwgICAxMDYsICAgMTA2LCAgIDEwOCwgICAxMDgsICAgMTEwLCAgIDEx
MCwgICAxMTAsCisgICAgIDExMCwgICAxMTEsICAgMTExLCAgIDExNSwgICAxMTYsICAgMTE3LCAg
IDEyMiwgICAxMjMsICAgMTQ1LCAgIDE0OCwKKyAgICAgMTYzLCAgIDEyMiwgICAgODAsICAgMTYx
LCAgIDE1NSwgICAxMjAsICAgMTIwLCAgIDEyMywgICAgNzMsICAgIDczLAorICAgICAgNzgsICAg
IDczLCAgICA0MCwgICAxNDcsICAgMTU2LCAgIDE2NCwgICAgNzEsICAgMTIyLCAgIDEzNSwgICAx
NTksCisgICAgIDE1MiwgICAgNzMsICAgMTIwLCAgICA3MCwgICAxNTksICAgMTY1LCAgIDE2Niwg
ICAxNDgsICAgMTU4LCAgICA0MywKKyAgICAgIDcxLCAgICA3NSwgICAxMjIsICAgIDgwLCAgICA3
MSwgICAgMTYsICAgIDc5LCAgIDE0OSwgICAxNTMsICAgMTU0LAorICAgICAgNzEsICAgMTIyLCAg
IDE1MywgICAxNDgsICAgMTQ2LCAgICA4MAorfTsKKworI2RlZmluZSB5eWVycm9rCQkoeXllcnJz
dGF0dXMgPSAwKQorI2RlZmluZSB5eWNsZWFyaW4JKHl5Y2hhciA9IFlZRU1QVFkpCisjZGVmaW5l
IFlZRU1QVFkJCSgtMikKKyNkZWZpbmUgWVlFT0YJCTAKKworI2RlZmluZSBZWUFDQ0VQVAlnb3Rv
IHl5YWNjZXB0bGFiCisjZGVmaW5lIFlZQUJPUlQJCWdvdG8geXlhYm9ydGxhYgorI2RlZmluZSBZ
WUVSUk9SCQlnb3RvIHl5ZXJyb3JsYWIKKworCisvKiBMaWtlIFlZRVJST1IgZXhjZXB0IGRvIGNh
bGwgeXllcnJvci4gIFRoaXMgcmVtYWlucyBoZXJlIHRlbXBvcmFyaWx5CisgICB0byBlYXNlIHRo
ZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbWVhbmluZyBvZiBZWUVSUk9SLCBmb3IgR0NDLgorICAg
T25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBwbGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28u
ICAqLworCisjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgorCisjZGVmaW5lIFlZUkVDT1ZF
UklORygpICAoISF5eWVycnN0YXR1cykKKworI2RlZmluZSBZWUJBQ0tVUChUb2tlbiwgVmFsdWUp
CQkJCQlcCitkbwkJCQkJCQkJXAorICBpZiAoeXljaGFyID09IFlZRU1QVFkgJiYgeXlsZW4gPT0g
MSkJCQkJXAorICAgIHsJCQkJCQkJCVwKKyAgICAgIHl5Y2hhciA9IChUb2tlbik7CQkJCQkJXAor
ICAgICAgeXlsdmFsID0gKFZhbHVlKTsJCQkJCQlcCisgICAgICB5eXRva2VuID0gWVlUUkFOU0xB
VEUgKHl5Y2hhcik7CQkJCVwKKyAgICAgIFlZUE9QU1RBQ0sgKDEpOwkJCQkJCVwKKyAgICAgIGdv
dG8geXliYWNrdXA7CQkJCQkJXAorICAgIH0JCQkJCQkJCVwKKyAgZWxzZQkJCQkJCQkJXAorICAg
IHsJCQkJCQkJCVwKKyAgICAgIHl5ZXJyb3IgKGNvbnRleHQsIFlZXygic3ludGF4IGVycm9yOiBj
YW5ub3QgYmFjayB1cCIpKTsgXAorICAgICAgWVlFUlJPUjsJCQkJCQkJXAorICAgIH0JCQkJCQkJ
CVwKK3doaWxlIChZWUlEICgwKSkKKworCisjZGVmaW5lIFlZVEVSUk9SCTEKKyNkZWZpbmUgWVlF
UlJDT0RFCTI1NgorCisKKy8qIFlZTExPQ19ERUZBVUxUIC0tIFNldCBDVVJSRU5UIHRvIHNwYW4g
ZnJvbSBSSFNbMV0gdG8gUkhTW05dLgorICAgSWYgTiBpcyAwLCB0aGVuIHNldCBDVVJSRU5UIHRv
IHRoZSBlbXB0eSBsb2NhdGlvbiB3aGljaCBlbmRzCisgICB0aGUgcHJldmlvdXMgc3ltYm9sOiBS
SFNbMF0gKGFsd2F5cyBkZWZpbmVkKS4gICovCisKKyNkZWZpbmUgWVlSSFNMT0MoUmhzLCBLKSAo
KFJocylbS10pCisjaWZuZGVmIFlZTExPQ19ERUZBVUxUCisjIGRlZmluZSBZWUxMT0NfREVGQVVM
VChDdXJyZW50LCBSaHMsIE4pCQkJCVwKKyAgICBkbwkJCQkJCQkJCVwKKyAgICAgIGlmIChZWUlE
IChOKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorCXsJCQkJCQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSBZWVJIU0xPQyAoUmhz
LCAxKS5maXJzdF9saW5lOwlcCisJICAoQ3VycmVudCkuZmlyc3RfY29sdW1uID0gWVlSSFNMT0Mg
KFJocywgMSkuZmlyc3RfY29sdW1uOwlcCisJICAoQ3VycmVudCkubGFzdF9saW5lICAgID0gWVlS
SFNMT0MgKFJocywgTikubGFzdF9saW5lOwkJXAorCSAgKEN1cnJlbnQpLmxhc3RfY29sdW1uICA9
IFlZUkhTTE9DIChSaHMsIE4pLmxhc3RfY29sdW1uOwlcCisJfQkJCQkJCQkJXAorICAgICAgZWxz
ZQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9saW5lICAgPSAoQ3Vy
cmVudCkubGFzdF9saW5lICAgPQkJXAorCSAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2xpbmU7
CQkJCVwKKwkgIChDdXJyZW50KS5maXJzdF9jb2x1bW4gPSAoQ3VycmVudCkubGFzdF9jb2x1bW4g
PQkJXAorCSAgICBZWVJIU0xPQyAoUmhzLCAwKS5sYXN0X2NvbHVtbjsJCQkJXAorCX0JCQkJCQkJ
CVwKKyAgICB3aGlsZSAoWVlJRCAoMCkpCisjZW5kaWYKKworCisvKiBZWV9MT0NBVElPTl9QUklO
VCAtLSBQcmludCB0aGUgbG9jYXRpb24gb24gdGhlIHN0cmVhbS4KKyAgIFRoaXMgbWFjcm8gd2Fz
IG5vdCBtYW5kYXRlZCBvcmlnaW5hbGx5OiBkZWZpbmUgb25seSBpZiB3ZSBrbm93CisgICB3ZSB3
b24ndCBicmVhayB1c2VyIGNvZGU6IHdoZW4gdGhlc2UgYXJlIHRoZSBsb2NhdGlvbnMgd2Uga25v
dy4gICovCisKKyNpZm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKKyMgaWYgWVlMVFlQRV9JU19UUklW
SUFMCisjICBkZWZpbmUgWVlfTE9DQVRJT05fUFJJTlQoRmlsZSwgTG9jKQkJCVwKKyAgICAgZnBy
aW50ZiAoRmlsZSwgIiVkLiVkLSVkLiVkIiwJCQlcCisJICAgICAgKExvYykuZmlyc3RfbGluZSwg
KExvYykuZmlyc3RfY29sdW1uLAlcCisJICAgICAgKExvYykubGFzdF9saW5lLCAgKExvYykubGFz
dF9jb2x1bW4pCisjIGVsc2UKKyMgIGRlZmluZSBZWV9MT0NBVElPTl9QUklOVChGaWxlLCBMb2Mp
ICgodm9pZCkgMCkKKyMgZW5kaWYKKyNlbmRpZgorCisKKy8qIFlZTEVYIC0tIGNhbGxpbmcgYHl5
bGV4JyB3aXRoIHRoZSByaWdodCBhcmd1bWVudHMuICAqLworCisjaWZkZWYgWVlMRVhfUEFSQU0K
KyMgZGVmaW5lIFlZTEVYIHl5bGV4ICgmeXlsdmFsLCBZWUxFWF9QQVJBTSkKKyNlbHNlCisjIGRl
ZmluZSBZWUxFWCB5eWxleCAoJnl5bHZhbCkKKyNlbmRpZgorCisvKiBFbmFibGUgZGVidWdnaW5n
IGlmIHJlcXVlc3RlZC4gICovCisjaWYgWVlERUJVRworCisjIGlmbmRlZiBZWUZQUklOVEYKKyMg
IGluY2x1ZGUgPHN0ZGlvLmg+IC8qIElORlJJTkdFUyBPTiBVU0VSIE5BTUUgU1BBQ0UgKi8KKyMg
IGRlZmluZSBZWUZQUklOVEYgZnByaW50ZgorIyBlbmRpZgorCisjIGRlZmluZSBZWURQUklOVEYo
QXJncykJCQlcCitkbyB7CQkJCQkJXAorICBpZiAoeXlkZWJ1ZykJCQkJCVwKKyAgICBZWUZQUklO
VEYgQXJnczsJCQkJXAorfSB3aGlsZSAoWVlJRCAoMCkpCisKKyMgZGVmaW5lIFlZX1NZTUJPTF9Q
UklOVChUaXRsZSwgVHlwZSwgVmFsdWUsIExvY2F0aW9uKQkJCSAgXAorZG8gewkJCQkJCQkJCSAg
XAorICBpZiAoeXlkZWJ1ZykJCQkJCQkJCSAgXAorICAgIHsJCQkJCQkJCQkgIFwKKyAgICAgIFlZ
RlBSSU5URiAoc3RkZXJyLCAiJXMgIiwgVGl0bGUpOwkJCQkJICBcCisgICAgICB5eV9zeW1ib2xf
cHJpbnQgKHN0ZGVyciwJCQkJCQkgIFwKKwkJICBUeXBlLCBWYWx1ZSwgY29udGV4dCk7IFwKKyAg
ICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiXG4iKTsJCQkJCQkgIFwKKyAgICB9CQkJCQkJCQkJICBc
Cit9IHdoaWxlIChZWUlEICgwKSkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLgorfCBQcmludCB0aGlzIHN5bWJvbCBvbiBZWU9VVFBVVC4gIHwKK2AtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChkZWZpbmVkIF9fU1RE
Q19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQgX19jcGx1c3Bs
dXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9zeW1ib2xfdmFsdWVfcHJp
bnQgKEZJTEUgKnl5b3V0cHV0LCBpbnQgeXl0eXBlLCBZWVNUWVBFIGNvbnN0ICogY29uc3QgeXl2
YWx1ZXAsIFRQYXJzZUNvbnRleHQqIGNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3N5
bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2YWx1ZXAsIGNvbnRleHQpCisg
ICAgRklMRSAqeXlvdXRwdXQ7CisgICAgaW50IHl5dHlwZTsKKyAgICBZWVNUWVBFIGNvbnN0ICog
Y29uc3QgeXl2YWx1ZXA7CisgICAgVFBhcnNlQ29udGV4dCogY29udGV4dDsKKyNlbmRpZgorewor
ICBpZiAoIXl5dmFsdWVwKQorICAgIHJldHVybjsKKyAgWVlVU0UgKGNvbnRleHQpOworIyBpZmRl
ZiBZWVBSSU5UCisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisgICAgWVlQUklOVCAoeXlvdXRw
dXQsIHl5dG9rbnVtW3l5dHlwZV0sICp5eXZhbHVlcCk7CisjIGVsc2UKKyAgWVlVU0UgKHl5b3V0
cHV0KTsKKyMgZW5kaWYKKyAgc3dpdGNoICh5eXR5cGUpCisgICAgeworICAgICAgZGVmYXVsdDoK
KwlicmVhazsKKyAgICB9Cit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KK3wgUHJpbnQgdGhpcyBzeW1ib2wgb24gWVlPVVRQVVQuICB8CitgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9N
U0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3N5bWJvbF9wcmludCAoRklMRSAqeXlvdXRwdXQsIGlu
dCB5eXR5cGUsIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcCwgVFBhcnNlQ29udGV4dCog
Y29udGV4dCkKKyNlbHNlCitzdGF0aWMgdm9pZAoreXlfc3ltYm9sX3ByaW50ICh5eW91dHB1dCwg
eXl0eXBlLCB5eXZhbHVlcCwgY29udGV4dCkKKyAgICBGSUxFICp5eW91dHB1dDsKKyAgICBpbnQg
eXl0eXBlOworICAgIFlZU1RZUEUgY29uc3QgKiBjb25zdCB5eXZhbHVlcDsKKyAgICBUUGFyc2VD
b250ZXh0KiBjb250ZXh0OworI2VuZGlmCit7CisgIGlmICh5eXR5cGUgPCBZWU5UT0tFTlMpCisg
ICAgWVlGUFJJTlRGICh5eW91dHB1dCwgInRva2VuICVzICgiLCB5eXRuYW1lW3l5dHlwZV0pOwor
ICBlbHNlCisgICAgWVlGUFJJTlRGICh5eW91dHB1dCwgIm50ZXJtICVzICgiLCB5eXRuYW1lW3l5
dHlwZV0pOworCisgIHl5X3N5bWJvbF92YWx1ZV9wcmludCAoeXlvdXRwdXQsIHl5dHlwZSwgeXl2
YWx1ZXAsIGNvbnRleHQpOworICBZWUZQUklOVEYgKHl5b3V0cHV0LCAiKSIpOworfQorCisvKi0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KK3wgeXlfc3RhY2tfcHJpbnQgLS0gUHJpbnQgdGhlIHN0YXRlIHN0YWNrIGZyb20g
aXRzIEJPVFRPTSB1cCB0byBpdHMgfAorfCBUT1AgKGluY2x1ZGVkKS4gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CitgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lm
IChkZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRl
ZmluZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eV9z
dGFja19wcmludCAoeXl0eXBlX2ludDE2ICpib3R0b20sIHl5dHlwZV9pbnQxNiAqdG9wKQorI2Vs
c2UKK3N0YXRpYyB2b2lkCit5eV9zdGFja19wcmludCAoYm90dG9tLCB0b3ApCisgICAgeXl0eXBl
X2ludDE2ICpib3R0b207CisgICAgeXl0eXBlX2ludDE2ICp0b3A7CisjZW5kaWYKK3sKKyAgWVlG
UFJJTlRGIChzdGRlcnIsICJTdGFjayBub3ciKTsKKyAgZm9yICg7IGJvdHRvbSA8PSB0b3A7ICsr
Ym90dG9tKQorICAgIFlZRlBSSU5URiAoc3RkZXJyLCAiICVkIiwgKmJvdHRvbSk7CisgIFlZRlBS
SU5URiAoc3RkZXJyLCAiXG4iKTsKK30KKworIyBkZWZpbmUgWVlfU1RBQ0tfUFJJTlQoQm90dG9t
LCBUb3ApCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWYgKHl5ZGVidWcpCQkJCQkJCVwKKyAgICB5
eV9zdGFja19wcmludCAoKEJvdHRvbSksIChUb3ApKTsJCQkJXAorfSB3aGlsZSAoWVlJRCAoMCkp
CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0u
Cit8IFJlcG9ydCB0aGF0IHRoZSBZWVJVTEUgaXMgZ29pbmcgdG8gYmUgcmVkdWNlZC4gIHwKK2At
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjaWYg
KGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVm
aW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIHZvaWQKK3l5X3Jl
ZHVjZV9wcmludCAoWVlTVFlQRSAqeXl2c3AsIGludCB5eXJ1bGUsIFRQYXJzZUNvbnRleHQqIGNv
bnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5X3JlZHVjZV9wcmludCAoeXl2c3AsIHl5cnVs
ZSwgY29udGV4dCkKKyAgICBZWVNUWVBFICp5eXZzcDsKKyAgICBpbnQgeXlydWxlOworICAgIFRQ
YXJzZUNvbnRleHQqIGNvbnRleHQ7CisjZW5kaWYKK3sKKyAgaW50IHl5bnJocyA9IHl5cjJbeXly
dWxlXTsKKyAgaW50IHl5aTsKKyAgdW5zaWduZWQgbG9uZyBpbnQgeXlsbm8gPSB5eXJsaW5lW3l5
cnVsZV07CisgIFlZRlBSSU5URiAoc3RkZXJyLCAiUmVkdWNpbmcgc3RhY2sgYnkgcnVsZSAlZCAo
bGluZSAlbHUpOlxuIiwKKwkgICAgIHl5cnVsZSAtIDEsIHl5bG5vKTsKKyAgLyogVGhlIHN5bWJv
bHMgYmVpbmcgcmVkdWNlZC4gICovCisgIGZvciAoeXlpID0gMDsgeXlpIDwgeXlucmhzOyB5eWkr
KykKKyAgICB7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICIgICAkJWQgPSAiLCB5eWkgKyAxKTsK
KyAgICAgIHl5X3N5bWJvbF9wcmludCAoc3RkZXJyLCB5eXJoc1t5eXByaHNbeXlydWxlXSArIHl5
aV0sCisJCSAgICAgICAmKHl5dnNwWyh5eWkgKyAxKSAtICh5eW5yaHMpXSkKKwkJICAgICAgIAkJ
ICAgICAgICwgY29udGV4dCk7CisgICAgICBmcHJpbnRmIChzdGRlcnIsICJcbiIpOworICAgIH0K
K30KKworIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCQlcCitkbyB7CQkJCQlcCisgIGlm
ICh5eWRlYnVnKQkJCQlcCisgICAgeXlfcmVkdWNlX3ByaW50ICh5eXZzcCwgUnVsZSwgY29udGV4
dCk7IFwKK30gd2hpbGUgKFlZSUQgKDApKQorCisvKiBOb256ZXJvIG1lYW5zIHByaW50IHBhcnNl
IHRyYWNlLiAgSXQgaXMgbGVmdCB1bmluaXRpYWxpemVkIHNvIHRoYXQKKyAgIG11bHRpcGxlIHBh
cnNlcnMgY2FuIGNvZXhpc3QuICAqLworaW50IHl5ZGVidWc7CisjZWxzZSAvKiAhWVlERUJVRyAq
LworIyBkZWZpbmUgWVlEUFJJTlRGKEFyZ3MpCisjIGRlZmluZSBZWV9TWU1CT0xfUFJJTlQoVGl0
bGUsIFR5cGUsIFZhbHVlLCBMb2NhdGlvbikKKyMgZGVmaW5lIFlZX1NUQUNLX1BSSU5UKEJvdHRv
bSwgVG9wKQorIyBkZWZpbmUgWVlfUkVEVUNFX1BSSU5UKFJ1bGUpCisjZW5kaWYgLyogIVlZREVC
VUcgKi8KKworCisvKiBZWUlOSVRERVBUSCAtLSBpbml0aWFsIHNpemUgb2YgdGhlIHBhcnNlcidz
IHN0YWNrcy4gICovCisjaWZuZGVmCVlZSU5JVERFUFRICisjIGRlZmluZSBZWUlOSVRERVBUSCAy
MDAKKyNlbmRpZgorCisvKiBZWU1BWERFUFRIIC0tIG1heGltdW0gc2l6ZSB0aGUgc3RhY2tzIGNh
biBncm93IHRvIChlZmZlY3RpdmUgb25seQorICAgaWYgdGhlIGJ1aWx0LWluIHN0YWNrIGV4dGVu
c2lvbiBtZXRob2QgaXMgdXNlZCkuCisKKyAgIERvIG5vdCBtYWtlIHRoaXMgdmFsdWUgdG9vIGxh
cmdlOyB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkIGlmCisgICBZWVNUQUNLX0FMTE9DX01BWElN
VU0gPCBZWVNUQUNLX0JZVEVTIChZWU1BWERFUFRIKQorICAgZXZhbHVhdGVkIHdpdGggaW5maW5p
dGUtcHJlY2lzaW9uIGludGVnZXIgYXJpdGhtZXRpYy4gICovCisKKyNpZm5kZWYgWVlNQVhERVBU
SAorIyBkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2VuZGlmCisKKwwKKworI2lmIFlZRVJST1Jf
VkVSQk9TRQorCisjIGlmbmRlZiB5eXN0cmxlbgorIyAgaWYgZGVmaW5lZCBfX0dMSUJDX18gJiYg
ZGVmaW5lZCBfU1RSSU5HX0gKKyMgICBkZWZpbmUgeXlzdHJsZW4gc3RybGVuCisjICBlbHNlCisv
KiBSZXR1cm4gdGhlIGxlbmd0aCBvZiBZWVNUUi4gICovCisjaWYgKGRlZmluZWQgX19TVERDX18g
fHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAgfHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8
fCBkZWZpbmVkIF9NU0NfVkVSKQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoY29uc3QgY2hh
ciAqeXlzdHIpCisjZWxzZQorc3RhdGljIFlZU0laRV9UCit5eXN0cmxlbiAoeXlzdHIpCisgICAg
Y29uc3QgY2hhciAqeXlzdHI7CisjZW5kaWYKK3sKKyAgWVlTSVpFX1QgeXlsZW47CisgIGZvciAo
eXlsZW4gPSAwOyB5eXN0clt5eWxlbl07IHl5bGVuKyspCisgICAgY29udGludWU7CisgIHJldHVy
biB5eWxlbjsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5c3RwY3B5CisjICBp
ZiBkZWZpbmVkIF9fR0xJQkNfXyAmJiBkZWZpbmVkIF9TVFJJTkdfSCAmJiBkZWZpbmVkIF9HTlVf
U09VUkNFCisjICAgZGVmaW5lIHl5c3RwY3B5IHN0cGNweQorIyAgZWxzZQorLyogQ29weSBZWVNS
QyB0byBZWURFU1QsIHJldHVybmluZyB0aGUgYWRkcmVzcyBvZiB0aGUgdGVybWluYXRpbmcgJ1ww
JyBpbgorICAgWVlERVNULiAgKi8KKyNpZiAoZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9f
Qzk5X19GVU5DX18gXAorICAgICB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRlZmluZWQgX01T
Q19WRVIpCitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoY2hhciAqeXlkZXN0LCBjb25zdCBjaGFy
ICp5eXNyYykKKyNlbHNlCitzdGF0aWMgY2hhciAqCit5eXN0cGNweSAoeXlkZXN0LCB5eXNyYykK
KyAgICBjaGFyICp5eWRlc3Q7CisgICAgY29uc3QgY2hhciAqeXlzcmM7CisjZW5kaWYKK3sKKyAg
Y2hhciAqeXlkID0geXlkZXN0OworICBjb25zdCBjaGFyICp5eXMgPSB5eXNyYzsKKworICB3aGls
ZSAoKCp5eWQrKyA9ICp5eXMrKykgIT0gJ1wwJykKKyAgICBjb250aW51ZTsKKworICByZXR1cm4g
eXlkIC0gMTsKK30KKyMgIGVuZGlmCisjIGVuZGlmCisKKyMgaWZuZGVmIHl5dG5hbWVycgorLyog
Q29weSB0byBZWVJFUyB0aGUgY29udGVudHMgb2YgWVlTVFIgYWZ0ZXIgc3RyaXBwaW5nIGF3YXkg
dW5uZWNlc3NhcnkKKyAgIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMsIHNvIHRoYXQgaXQncyBzdWl0
YWJsZSBmb3IgeXllcnJvci4gIFRoZQorICAgaGV1cmlzdGljIGlzIHRoYXQgZG91YmxlLXF1b3Rp
bmcgaXMgdW5uZWNlc3NhcnkgdW5sZXNzIHRoZSBzdHJpbmcKKyAgIGNvbnRhaW5zIGFuIGFwb3N0
cm9waGUsIGEgY29tbWEsIG9yIGJhY2tzbGFzaCAob3RoZXIgdGhhbgorICAgYmFja3NsYXNoLWJh
Y2tzbGFzaCkuICBZWVNUUiBpcyB0YWtlbiBmcm9tIHl5dG5hbWUuICBJZiBZWVJFUyBpcworICAg
bnVsbCwgZG8gbm90IGNvcHk7IGluc3RlYWQsIHJldHVybiB0aGUgbGVuZ3RoIG9mIHdoYXQgdGhl
IHJlc3VsdAorICAgd291bGQgaGF2ZSBiZWVuLiAgKi8KK3N0YXRpYyBZWVNJWkVfVAoreXl0bmFt
ZXJyIChjaGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCit7CisgIGlmICgqeXlzdHIgPT0g
JyInKQorICAgIHsKKyAgICAgIFlZU0laRV9UIHl5biA9IDA7CisgICAgICBjaGFyIGNvbnN0ICp5
eXAgPSB5eXN0cjsKKworICAgICAgZm9yICg7OykKKwlzd2l0Y2ggKCorK3l5cCkKKwkgIHsKKwkg
IGNhc2UgJ1wnJzoKKwkgIGNhc2UgJywnOgorCSAgICBnb3RvIGRvX25vdF9zdHJpcF9xdW90ZXM7
CisKKwkgIGNhc2UgJ1xcJzoKKwkgICAgaWYgKCorK3l5cCAhPSAnXFwnKQorCSAgICAgIGdvdG8g
ZG9fbm90X3N0cmlwX3F1b3RlczsKKwkgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKwkgIGRlZmF1
bHQ6CisJICAgIGlmICh5eXJlcykKKwkgICAgICB5eXJlc1t5eW5dID0gKnl5cDsKKwkgICAgeXlu
Kys7CisJICAgIGJyZWFrOworCisJICBjYXNlICciJzoKKwkgICAgaWYgKHl5cmVzKQorCSAgICAg
IHl5cmVzW3l5bl0gPSAnXDAnOworCSAgICByZXR1cm4geXluOworCSAgfQorICAgIGRvX25vdF9z
dHJpcF9xdW90ZXM6IDsKKyAgICB9CisKKyAgaWYgKCEgeXlyZXMpCisgICAgcmV0dXJuIHl5c3Ry
bGVuICh5eXN0cik7CisKKyAgcmV0dXJuIHl5c3RwY3B5ICh5eXJlcywgeXlzdHIpIC0geXlyZXM7
Cit9CisjIGVuZGlmCisKKy8qIENvcHkgaW50byBZWVJFU1VMVCBhbiBlcnJvciBtZXNzYWdlIGFi
b3V0IHRoZSB1bmV4cGVjdGVkIHRva2VuCisgICBZWUNIQVIgd2hpbGUgaW4gc3RhdGUgWVlTVEFU
RS4gIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCwKKyAgIGluY2x1ZGluZyB0aGUg
dGVybWluYXRpbmcgbnVsbCBieXRlLiAgSWYgWVlSRVNVTFQgaXMgbnVsbCwgZG8gbm90CisgICBj
b3B5IGFueXRoaW5nOyBqdXN0IHJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd291bGQg
YmUKKyAgIGNvcGllZC4gIEFzIGEgc3BlY2lhbCBjYXNlLCByZXR1cm4gMCBpZiBhbiBvcmRpbmFy
eSAic3ludGF4IGVycm9yIgorICAgbWVzc2FnZSB3aWxsIGRvLiAgUmV0dXJuIFlZU0laRV9NQVhJ
TVVNIGlmIG92ZXJmbG93IG9jY3VycyBkdXJpbmcKKyAgIHNpemUgY2FsY3VsYXRpb24uICAqLwor
c3RhdGljIFlZU0laRV9UCit5eXN5bnRheF9lcnJvciAoY2hhciAqeXlyZXN1bHQsIGludCB5eXN0
YXRlLCBpbnQgeXljaGFyKQoreworICBpbnQgeXluID0geXlwYWN0W3l5c3RhdGVdOworCisgIGlm
ICghIChZWVBBQ1RfTklORiA8IHl5biAmJiB5eW4gPD0gWVlMQVNUKSkKKyAgICByZXR1cm4gMDsK
KyAgZWxzZQorICAgIHsKKyAgICAgIGludCB5eXR5cGUgPSBZWVRSQU5TTEFURSAoeXljaGFyKTsK
KyAgICAgIFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBlXSk7
CisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5eXNpemUwOworICAgICAgWVlTSVpFX1QgeXlzaXpl
MTsKKyAgICAgIGludCB5eXNpemVfb3ZlcmZsb3cgPSAwOworICAgICAgZW51bSB7IFlZRVJST1Jf
VkVSQk9TRV9BUkdTX01BWElNVU0gPSA1IH07CisgICAgICBjaGFyIGNvbnN0ICp5eWFyZ1tZWUVS
Uk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKKyAgICAgIGludCB5eXg7CisKKyMgaWYgMAorICAg
ICAgLyogVGhpcyBpcyBzbyB4Z2V0dGV4dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9ybWF0cyB0
aGF0IGFyZQorCSBjb25zdHJ1Y3RlZCBvbiB0aGUgZmx5LiAgKi8KKyAgICAgIFlZXygic3ludGF4
IGVycm9yLCB1bmV4cGVjdGVkICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBl
Y3RlZCAlcywgZXhwZWN0aW5nICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwgdW5leHBl
Y3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIik7CisgICAgICBZWV8oInN5bnRheCBlcnJvciwg
dW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIik7CisgICAgICBZWV8oInN5
bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yICVzIG9yICVz
Iik7CisjIGVuZGlmCisgICAgICBjaGFyICp5eWZtdDsKKyAgICAgIGNoYXIgY29uc3QgKnl5ZjsK
KyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5dW5leHBlY3RlZFtdID0gInN5bnRheCBlcnJvciwg
dW5leHBlY3RlZCAlcyI7CisgICAgICBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGluZ1tdID0g
IiwgZXhwZWN0aW5nICVzIjsKKyAgICAgIHN0YXRpYyBjaGFyIGNvbnN0IHl5b3JbXSA9ICIgb3Ig
JXMiOworICAgICAgY2hhciB5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkCisJCSAgICArIHNp
emVvZiB5eWV4cGVjdGluZyAtIDEKKwkJICAgICsgKChZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJ
TVVNIC0gMikKKwkJICAgICAgICogKHNpemVvZiB5eW9yIC0gMSkpXTsKKyAgICAgIGNoYXIgY29u
c3QgKnl5cHJlZml4ID0geXlleHBlY3Rpbmc7CisKKyAgICAgIC8qIFN0YXJ0IFlZWCBhdCAtWVlO
IGlmIG5lZ2F0aXZlIHRvIGF2b2lkIG5lZ2F0aXZlIGluZGV4ZXMgaW4KKwkgWVlDSEVDSy4gICov
CisgICAgICBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7CisKKyAgICAgIC8qIFN0
YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5kIHl5dG5hbWUuICAqLworICAgICAg
aW50IHl5Y2hlY2tsaW0gPSBZWUxBU1QgLSB5eW4gKyAxOworICAgICAgaW50IHl5eGVuZCA9IHl5
Y2hlY2tsaW0gPCBZWU5UT0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOworICAgICAgaW50
IHl5Y291bnQgPSAxOworCisgICAgICB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsKKyAgICAg
IHl5Zm10ID0geXlzdHBjcHkgKHl5Zm9ybWF0LCB5eXVuZXhwZWN0ZWQpOworCisgICAgICBmb3Ig
KHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQorCWlmICh5eWNoZWNrW3l5eCAr
IHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUikKKwkgIHsKKwkgICAgaWYgKHl5Y291bnQg
PT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSkKKwkgICAgICB7CisJCXl5Y291bnQgPSAx
OworCQl5eXNpemUgPSB5eXNpemUwOworCQl5eWZvcm1hdFtzaXplb2YgeXl1bmV4cGVjdGVkIC0g
MV0gPSAnXDAnOworCQlicmVhazsKKwkgICAgICB9CisJICAgIHl5YXJnW3l5Y291bnQrK10gPSB5
eXRuYW1lW3l5eF07CisJICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIgKDAsIHl5dG5h
bWVbeXl4XSk7CisJICAgIHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CisJ
ICAgIHl5c2l6ZSA9IHl5c2l6ZTE7CisJICAgIHl5Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5eXBy
ZWZpeCk7CisJICAgIHl5cHJlZml4ID0geXlvcjsKKwkgIH0KKworICAgICAgeXlmID0gWVlfKHl5
Zm9ybWF0KTsKKyAgICAgIHl5c2l6ZTEgPSB5eXNpemUgKyB5eXN0cmxlbiAoeXlmKTsKKyAgICAg
IHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXplMSA8IHl5c2l6ZSk7CisgICAgICB5eXNpemUgPSB5
eXNpemUxOworCisgICAgICBpZiAoeXlzaXplX292ZXJmbG93KQorCXJldHVybiBZWVNJWkVfTUFY
SU1VTTsKKworICAgICAgaWYgKHl5cmVzdWx0KQorCXsKKwkgIC8qIEF2b2lkIHNwcmludGYsIGFz
IHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFjZS4KKwkgICAgIERvbid0IGhh
dmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCisJICAgICBwcm9k
dWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgIiVzInMuICAqLworCSAgY2hh
ciAqeXlwID0geXlyZXN1bHQ7CisJICBpbnQgeXlpID0gMDsKKwkgIHdoaWxlICgoKnl5cCA9ICp5
eWYpICE9ICdcMCcpCisJICAgIHsKKwkgICAgICBpZiAoKnl5cCA9PSAnJScgJiYgeXlmWzFdID09
ICdzJyAmJiB5eWkgPCB5eWNvdW50KQorCQl7CisJCSAgeXlwICs9IHl5dG5hbWVyciAoeXlwLCB5
eWFyZ1t5eWkrK10pOworCQkgIHl5ZiArPSAyOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAg
eXlwKys7CisJCSAgeXlmKys7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIHJldHVybiB5eXNpemU7
CisgICAgfQorfQorI2VuZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLworDAorCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCBSZWxlYXNlIHRoZSBt
ZW1vcnkgYXNzb2NpYXRlZCB0byB0aGlzIHN5bWJvbC4gIHwKK2AtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qQVJHU1VTRUQqLworI2lmIChkZWZp
bmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmluZWQg
X19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK3N0YXRpYyB2b2lkCit5eWRlc3RydWN0
IChjb25zdCBjaGFyICp5eW1zZywgaW50IHl5dHlwZSwgWVlTVFlQRSAqeXl2YWx1ZXAsIFRQYXJz
ZUNvbnRleHQqIGNvbnRleHQpCisjZWxzZQorc3RhdGljIHZvaWQKK3l5ZGVzdHJ1Y3QgKHl5bXNn
LCB5eXR5cGUsIHl5dmFsdWVwLCBjb250ZXh0KQorICAgIGNvbnN0IGNoYXIgKnl5bXNnOworICAg
IGludCB5eXR5cGU7CisgICAgWVlTVFlQRSAqeXl2YWx1ZXA7CisgICAgVFBhcnNlQ29udGV4dCog
Y29udGV4dDsKKyNlbmRpZgoreworICBZWVVTRSAoeXl2YWx1ZXApOworICBZWVVTRSAoY29udGV4
dCk7CisKKyAgaWYgKCF5eW1zZykKKyAgICB5eW1zZyA9ICJEZWxldGluZyI7CisgIFlZX1NZTUJP
TF9QUklOVCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wKTsKKworICBzd2l0
Y2ggKHl5dHlwZSkKKyAgICB7CisKKyAgICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorfQor
DAorCisvKiBQcmV2ZW50IHdhcm5pbmdzIGZyb20gLVdtaXNzaW5nLXByb3RvdHlwZXMuICAqLwor
CisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmIGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBf
X2NwbHVzcGx1cworaW50IHl5cGFyc2UgKHZvaWQgKllZUEFSU0VfUEFSQU0pOworI2Vsc2UKK2lu
dCB5eXBhcnNlICgpOworI2VuZGlmCisjZWxzZSAvKiAhIFlZUEFSU0VfUEFSQU0gKi8KKyNpZiBk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19jcGx1c3BsdXMKK2ludCB5eXBhcnNlIChUUGFy
c2VDb250ZXh0KiBjb250ZXh0KTsKKyNlbHNlCitpbnQgeXlwYXJzZSAoKTsKKyNlbmRpZgorI2Vu
ZGlmIC8qICEgWVlQQVJTRV9QQVJBTSAqLworCisKKworCisKKworLyotLS0tLS0tLS0tLgorfCB5
eXBhcnNlLiAgfAorYC0tLS0tLS0tLS0qLworCisjaWZkZWYgWVlQQVJTRV9QQVJBTQorI2lmIChk
ZWZpbmVkIF9fU1REQ19fIHx8IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCisgICAgIHx8IGRlZmlu
ZWQgX19jcGx1c3BsdXMgfHwgZGVmaW5lZCBfTVNDX1ZFUikKK2ludAoreXlwYXJzZSAodm9pZCAq
WVlQQVJTRV9QQVJBTSkKKyNlbHNlCitpbnQKK3l5cGFyc2UgKFlZUEFSU0VfUEFSQU0pCisgICAg
dm9pZCAqWVlQQVJTRV9QQVJBTTsKKyNlbmRpZgorI2Vsc2UgLyogISBZWVBBUlNFX1BBUkFNICov
CisjaWYgKGRlZmluZWQgX19TVERDX18gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKKyAgICAg
fHwgZGVmaW5lZCBfX2NwbHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQoraW50Cit5eXBhcnNl
IChUUGFyc2VDb250ZXh0KiBjb250ZXh0KQorI2Vsc2UKK2ludAoreXlwYXJzZSAoY29udGV4dCkK
KyAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0OworI2VuZGlmCisjZW5kaWYKK3sKKyAgLyogVGhl
IGxvb2stYWhlYWQgc3ltYm9sLiAgKi8KK2ludCB5eWNoYXI7CisKKy8qIFRoZSBzZW1hbnRpYyB2
YWx1ZSBvZiB0aGUgbG9vay1haGVhZCBzeW1ib2wuICAqLworWVlTVFlQRSB5eWx2YWw7CisKKy8q
IE51bWJlciBvZiBzeW50YXggZXJyb3JzIHNvIGZhci4gICovCitpbnQgeXluZXJyczsKKworICBp
bnQgeXlzdGF0ZTsKKyAgaW50IHl5bjsKKyAgaW50IHl5cmVzdWx0OworICAvKiBOdW1iZXIgb2Yg
dG9rZW5zIHRvIHNoaWZ0IGJlZm9yZSBlcnJvciBtZXNzYWdlcyBlbmFibGVkLiAgKi8KKyAgaW50
IHl5ZXJyc3RhdHVzOworICAvKiBMb29rLWFoZWFkIHRva2VuIGFzIGFuIGludGVybmFsICh0cmFu
c2xhdGVkKSB0b2tlbiBudW1iZXIuICAqLworICBpbnQgeXl0b2tlbiA9IDA7CisjaWYgWVlFUlJP
Ul9WRVJCT1NFCisgIC8qIEJ1ZmZlciBmb3IgZXJyb3IgbWVzc2FnZXMsIGFuZCBpdHMgYWxsb2Nh
dGVkIHNpemUuICAqLworICBjaGFyIHl5bXNnYnVmWzEyOF07CisgIGNoYXIgKnl5bXNnID0geXlt
c2didWY7CisgIFlZU0laRV9UIHl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5bXNnYnVmOworI2VuZGlm
CisKKyAgLyogVGhyZWUgc3RhY2tzIGFuZCB0aGVpciB0b29sczoKKyAgICAgYHl5c3MnOiByZWxh
dGVkIHRvIHN0YXRlcywKKyAgICAgYHl5dnMnOiByZWxhdGVkIHRvIHNlbWFudGljIHZhbHVlcywK
KyAgICAgYHl5bHMnOiByZWxhdGVkIHRvIGxvY2F0aW9ucy4KKworICAgICBSZWZlciB0byB0aGUg
c3RhY2tzIHRocnUgc2VwYXJhdGUgcG9pbnRlcnMsIHRvIGFsbG93IHl5b3ZlcmZsb3cKKyAgICAg
dG8gcmVhbGxvY2F0ZSB0aGVtIGVsc2V3aGVyZS4gICovCisKKyAgLyogVGhlIHN0YXRlIHN0YWNr
LiAgKi8KKyAgeXl0eXBlX2ludDE2IHl5c3NhW1lZSU5JVERFUFRIXTsKKyAgeXl0eXBlX2ludDE2
ICp5eXNzID0geXlzc2E7CisgIHl5dHlwZV9pbnQxNiAqeXlzc3A7CisKKyAgLyogVGhlIHNlbWFu
dGljIHZhbHVlIHN0YWNrLiAgKi8KKyAgWVlTVFlQRSB5eXZzYVtZWUlOSVRERVBUSF07CisgIFlZ
U1RZUEUgKnl5dnMgPSB5eXZzYTsKKyAgWVlTVFlQRSAqeXl2c3A7CisKKworCisjZGVmaW5lIFlZ
UE9QU1RBQ0soTikgICAoeXl2c3AgLT0gKE4pLCB5eXNzcCAtPSAoTikpCisKKyAgWVlTSVpFX1Qg
eXlzdGFja3NpemUgPSBZWUlOSVRERVBUSDsKKworICAvKiBUaGUgdmFyaWFibGVzIHVzZWQgdG8g
cmV0dXJuIHNlbWFudGljIHZhbHVlIGFuZCBsb2NhdGlvbiBmcm9tIHRoZQorICAgICBhY3Rpb24g
cm91dGluZXMuICAqLworICBZWVNUWVBFIHl5dmFsOworCisKKyAgLyogVGhlIG51bWJlciBvZiBz
eW1ib2xzIG9uIHRoZSBSSFMgb2YgdGhlIHJlZHVjZWQgcnVsZS4KKyAgICAgS2VlcCB0byB6ZXJv
IHdoZW4gbm8gc3ltYm9sIHNob3VsZCBiZSBwb3BwZWQuICAqLworICBpbnQgeXlsZW4gPSAwOwor
CisgIFlZRFBSSU5URiAoKHN0ZGVyciwgIlN0YXJ0aW5nIHBhcnNlXG4iKSk7CisKKyAgeXlzdGF0
ZSA9IDA7CisgIHl5ZXJyc3RhdHVzID0gMDsKKyAgeXluZXJycyA9IDA7CisgIHl5Y2hhciA9IFlZ
RU1QVFk7CQkvKiBDYXVzZSBhIHRva2VuIHRvIGJlIHJlYWQuICAqLworCisgIC8qIEluaXRpYWxp
emUgc3RhY2sgcG9pbnRlcnMuCisgICAgIFdhc3RlIG9uZSBlbGVtZW50IG9mIHZhbHVlIGFuZCBs
b2NhdGlvbiBzdGFjaworICAgICBzbyB0aGF0IHRoZXkgc3RheSBvbiB0aGUgc2FtZSBsZXZlbCBh
cyB0aGUgc3RhdGUgc3RhY2suCisgICAgIFRoZSB3YXN0ZWQgZWxlbWVudHMgYXJlIG5ldmVyIGlu
aXRpYWxpemVkLiAgKi8KKworICB5eXNzcCA9IHl5c3M7CisgIHl5dnNwID0geXl2czsKKworICBn
b3RvIHl5c2V0c3RhdGU7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eW5ld3N0YXRlIC0tIFB1c2ggYSBuZXcgc3Rh
dGUsIHdoaWNoIGlzIGZvdW5kIGluIHl5c3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyB5eW5ld3N0YXRlOgor
ICAvKiBJbiBhbGwgY2FzZXMsIHdoZW4geW91IGdldCBoZXJlLCB0aGUgdmFsdWUgYW5kIGxvY2F0
aW9uIHN0YWNrcworICAgICBoYXZlIGp1c3QgYmVlbiBwdXNoZWQuICBTbyBwdXNoaW5nIGEgc3Rh
dGUgaGVyZSBldmVucyB0aGUgc3RhY2tzLiAgKi8KKyAgeXlzc3ArKzsKKworIHl5c2V0c3RhdGU6
CisgICp5eXNzcCA9IHl5c3RhdGU7CisKKyAgaWYgKHl5c3MgKyB5eXN0YWNrc2l6ZSAtIDEgPD0g
eXlzc3ApCisgICAgeworICAgICAgLyogR2V0IHRoZSBjdXJyZW50IHVzZWQgc2l6ZSBvZiB0aGUg
dGhyZWUgc3RhY2tzLCBpbiBlbGVtZW50cy4gICovCisgICAgICBZWVNJWkVfVCB5eXNpemUgPSB5
eXNzcCAtIHl5c3MgKyAxOworCisjaWZkZWYgeXlvdmVyZmxvdworICAgICAgeworCS8qIEdpdmUg
dXNlciBhIGNoYW5jZSB0byByZWFsbG9jYXRlIHRoZSBzdGFjay4gIFVzZSBjb3BpZXMgb2YKKwkg
ICB0aGVzZSBzbyB0aGF0IHRoZSAmJ3MgZG9uJ3QgZm9yY2UgdGhlIHJlYWwgb25lcyBpbnRvCisJ
ICAgbWVtb3J5LiAgKi8KKwlZWVNUWVBFICp5eXZzMSA9IHl5dnM7CisJeXl0eXBlX2ludDE2ICp5
eXNzMSA9IHl5c3M7CisKKworCS8qIEVhY2ggc3RhY2sgcG9pbnRlciBhZGRyZXNzIGlzIGZvbGxv
d2VkIGJ5IHRoZSBzaXplIG9mIHRoZQorCSAgIGRhdGEgaW4gdXNlIGluIHRoYXQgc3RhY2ssIGlu
IGJ5dGVzLiAgVGhpcyB1c2VkIHRvIGJlIGEKKwkgICBjb25kaXRpb25hbCBhcm91bmQganVzdCB0
aGUgdHdvIGV4dHJhIGFyZ3MsIGJ1dCB0aGF0IG1pZ2h0CisJICAgYmUgdW5kZWZpbmVkIGlmIHl5
b3ZlcmZsb3cgaXMgYSBtYWNyby4gICovCisJeXlvdmVyZmxvdyAoWVlfKCJtZW1vcnkgZXhoYXVz
dGVkIiksCisJCSAgICAmeXlzczEsIHl5c2l6ZSAqIHNpemVvZiAoKnl5c3NwKSwKKwkJICAgICZ5
eXZzMSwgeXlzaXplICogc2l6ZW9mICgqeXl2c3ApLAorCisJCSAgICAmeXlzdGFja3NpemUpOwor
CisJeXlzcyA9IHl5c3MxOworCXl5dnMgPSB5eXZzMTsKKyAgICAgIH0KKyNlbHNlIC8qIG5vIHl5
b3ZlcmZsb3cgKi8KKyMgaWZuZGVmIFlZU1RBQ0tfUkVMT0NBVEUKKyAgICAgIGdvdG8geXlleGhh
dXN0ZWRsYWI7CisjIGVsc2UKKyAgICAgIC8qIEV4dGVuZCB0aGUgc3RhY2sgb3VyIG93biB3YXku
ICAqLworICAgICAgaWYgKFlZTUFYREVQVEggPD0geXlzdGFja3NpemUpCisJZ290byB5eWV4aGF1
c3RlZGxhYjsKKyAgICAgIHl5c3RhY2tzaXplICo9IDI7CisgICAgICBpZiAoWVlNQVhERVBUSCA8
IHl5c3RhY2tzaXplKQorCXl5c3RhY2tzaXplID0gWVlNQVhERVBUSDsKKworICAgICAgeworCXl5
dHlwZV9pbnQxNiAqeXlzczEgPSB5eXNzOworCXVuaW9uIHl5YWxsb2MgKnl5cHRyID0KKwkgICh1
bmlvbiB5eWFsbG9jICopIFlZU1RBQ0tfQUxMT0MgKFlZU1RBQ0tfQllURVMgKHl5c3RhY2tzaXpl
KSk7CisJaWYgKCEgeXlwdHIpCisJICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCVlZU1RBQ0tfUkVM
T0NBVEUgKHl5c3MpOworCVlZU1RBQ0tfUkVMT0NBVEUgKHl5dnMpOworCisjICB1bmRlZiBZWVNU
QUNLX1JFTE9DQVRFCisJaWYgKHl5c3MxICE9IHl5c3NhKQorCSAgWVlTVEFDS19GUkVFICh5eXNz
MSk7CisgICAgICB9CisjIGVuZGlmCisjZW5kaWYgLyogbm8geXlvdmVyZmxvdyAqLworCisgICAg
ICB5eXNzcCA9IHl5c3MgKyB5eXNpemUgLSAxOworICAgICAgeXl2c3AgPSB5eXZzICsgeXlzaXpl
IC0gMTsKKworCisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJTdGFjayBzaXplIGluY3JlYXNl
ZCB0byAlbHVcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgaW50KSB5eXN0YWNrc2l6ZSkpOworCisg
ICAgICBpZiAoeXlzcyArIHl5c3RhY2tzaXplIC0gMSA8PSB5eXNzcCkKKwlZWUFCT1JUOworICAg
IH0KKworICBZWURQUklOVEYgKChzdGRlcnIsICJFbnRlcmluZyBzdGF0ZSAlZFxuIiwgeXlzdGF0
ZSkpOworCisgIGdvdG8geXliYWNrdXA7CisKKy8qLS0tLS0tLS0tLS0uCit8IHl5YmFja3VwLiAg
fAorYC0tLS0tLS0tLS0tKi8KK3l5YmFja3VwOgorCisgIC8qIERvIGFwcHJvcHJpYXRlIHByb2Nl
c3NpbmcgZ2l2ZW4gdGhlIGN1cnJlbnQgc3RhdGUuICBSZWFkIGEKKyAgICAgbG9vay1haGVhZCB0
b2tlbiBpZiB3ZSBuZWVkIG9uZSBhbmQgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisKKyAg
LyogRmlyc3QgdHJ5IHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGxv
b2stYWhlYWQgdG9rZW4uICAqLworICB5eW4gPSB5eXBhY3RbeXlzdGF0ZV07CisgIGlmICh5eW4g
PT0gWVlQQUNUX05JTkYpCisgICAgZ290byB5eWRlZmF1bHQ7CisKKyAgLyogTm90IGtub3duID0+
IGdldCBhIGxvb2stYWhlYWQgdG9rZW4gaWYgZG9uJ3QgYWxyZWFkeSBoYXZlIG9uZS4gICovCisK
KyAgLyogWVlDSEFSIGlzIGVpdGhlciBZWUVNUFRZIG9yIFlZRU9GIG9yIGEgdmFsaWQgbG9vay1h
aGVhZCBzeW1ib2wuICAqLworICBpZiAoeXljaGFyID09IFlZRU1QVFkpCisgICAgeworICAgICAg
WVlEUFJJTlRGICgoc3RkZXJyLCAiUmVhZGluZyBhIHRva2VuOiAiKSk7CisgICAgICB5eWNoYXIg
PSBZWUxFWDsKKyAgICB9CisKKyAgaWYgKHl5Y2hhciA8PSBZWUVPRikKKyAgICB7CisgICAgICB5
eWNoYXIgPSB5eXRva2VuID0gWVlFT0Y7CisgICAgICBZWURQUklOVEYgKChzdGRlcnIsICJOb3cg
YXQgZW5kIG9mIGlucHV0LlxuIikpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHl5dG9r
ZW4gPSBZWVRSQU5TTEFURSAoeXljaGFyKTsKKyAgICAgIFlZX1NZTUJPTF9QUklOVCAoIk5leHQg
dG9rZW4gaXMiLCB5eXRva2VuLCAmeXlsdmFsLCAmeXlsbG9jKTsKKyAgICB9CisKKyAgLyogSWYg
dGhlIHByb3BlciBhY3Rpb24gb24gc2VlaW5nIHRva2VuIFlZVE9LRU4gaXMgdG8gcmVkdWNlIG9y
IHRvCisgICAgIGRldGVjdCBhbiBlcnJvciwgdGFrZSB0aGF0IGFjdGlvbi4gICovCisgIHl5biAr
PSB5eXRva2VuOworICBpZiAoeXluIDwgMCB8fCBZWUxBU1QgPCB5eW4gfHwgeXljaGVja1t5eW5d
ICE9IHl5dG9rZW4pCisgICAgZ290byB5eWRlZmF1bHQ7CisgIHl5biA9IHl5dGFibGVbeXluXTsK
KyAgaWYgKHl5biA8PSAwKQorICAgIHsKKyAgICAgIGlmICh5eW4gPT0gMCB8fCB5eW4gPT0gWVlU
QUJMRV9OSU5GKQorCWdvdG8geXllcnJsYWI7CisgICAgICB5eW4gPSAteXluOworICAgICAgZ290
byB5eXJlZHVjZTsKKyAgICB9CisKKyAgaWYgKHl5biA9PSBZWUZJTkFMKQorICAgIFlZQUNDRVBU
OworCisgIC8qIENvdW50IHRva2VucyBzaGlmdGVkIHNpbmNlIGVycm9yOyBhZnRlciB0aHJlZSwg
dHVybiBvZmYgZXJyb3IKKyAgICAgc3RhdHVzLiAgKi8KKyAgaWYgKHl5ZXJyc3RhdHVzKQorICAg
IHl5ZXJyc3RhdHVzLS07CisKKyAgLyogU2hpZnQgdGhlIGxvb2stYWhlYWQgdG9rZW4uICAqLwor
ICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGluZyIsIHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2Mp
OworCisgIC8qIERpc2NhcmQgdGhlIHNoaWZ0ZWQgdG9rZW4gdW5sZXNzIGl0IGlzIGVvZi4gICov
CisgIGlmICh5eWNoYXIgIT0gWVlFT0YpCisgICAgeXljaGFyID0gWVlFTVBUWTsKKworICB5eXN0
YXRlID0geXluOworICAqKyt5eXZzcCA9IHl5bHZhbDsKKworICBnb3RvIHl5bmV3c3RhdGU7CisK
KworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS4KK3wgeXlkZWZhdWx0IC0tIGRvIHRoZSBkZWZhdWx0IGFjdGlvbiBmb3IgdGhlIGN1
cnJlbnQgc3RhdGUuICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlkZWZhdWx0OgorICB5eW4gPSB5eWRlZmFjdFt5eXN0
YXRlXTsKKyAgaWYgKHl5biA9PSAwKQorICAgIGdvdG8geXllcnJsYWI7CisgIGdvdG8geXlyZWR1
Y2U7CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXlyZWR1Y2UgLS0g
RG8gYSByZWR1Y3Rpb24uICB8CitgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXly
ZWR1Y2U6CisgIC8qIHl5biBpcyB0aGUgbnVtYmVyIG9mIGEgcnVsZSB0byByZWR1Y2Ugd2l0aC4g
ICovCisgIHl5bGVuID0geXlyMlt5eW5dOworCisgIC8qIElmIFlZTEVOIGlzIG5vbnplcm8sIGlt
cGxlbWVudCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYWN0aW9uOgorICAgICBgJCQgPSAkMScu
CisKKyAgICAgT3RoZXJ3aXNlLCB0aGUgZm9sbG93aW5nIGxpbmUgc2V0cyBZWVZBTCB0byBnYXJi
YWdlLgorICAgICBUaGlzIGJlaGF2aW9yIGlzIHVuZG9jdW1lbnRlZCBhbmQgQmlzb24KKyAgICAg
dXNlcnMgc2hvdWxkIG5vdCByZWx5IHVwb24gaXQuICBBc3NpZ25pbmcgdG8gWVlWQUwKKyAgICAg
dW5jb25kaXRpb25hbGx5IG1ha2VzIHRoZSBwYXJzZXIgYSBiaXQgc21hbGxlciwgYW5kIGl0IGF2
b2lkcyBhCisgICAgIEdDQyB3YXJuaW5nIHRoYXQgWVlWQUwgbWF5IGJlIHVzZWQgdW5pbml0aWFs
aXplZC4gICovCisgIHl5dmFsID0geXl2c3BbMS15eWxlbl07CisKKworICBZWV9SRURVQ0VfUFJJ
TlQgKHl5bik7CisgIHN3aXRjaCAoeXluKQorICAgIHsKKyAgICAgICAgY2FzZSAyOgorCisgICAg
eworICAgICAgICAvLyBUaGUgc3ltYm9sIHRhYmxlIHNlYXJjaCB3YXMgZG9uZSBpbiB0aGUgbGV4
aWNhbCBwaGFzZQorICAgICAgICBjb25zdCBUU3ltYm9sKiBzeW1ib2wgPSAoeXl2c3BbKDEpIC0g
KDEpXS5sZXgpLnN5bWJvbDsKKyAgICAgICAgY29uc3QgVFZhcmlhYmxlKiB2YXJpYWJsZTsKKyAg
ICAgICAgaWYgKHN5bWJvbCA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICJ1bmRlY2xhcmVkIGlkZW50aWZpZXIiLCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLnN0cmluZy0+Y19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgVFR5cGUgdHlwZShFYnRGbG9hdCwgRWJwVW5kZWZp
bmVkKTsKKyAgICAgICAgICAgIFRWYXJpYWJsZSogZmFrZVZhcmlhYmxlID0gbmV3IFRWYXJpYWJs
ZSgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZywgdHlwZSk7CisgICAgICAgICAgICBjb250
ZXh0LT5zeW1ib2xUYWJsZS5pbnNlcnQoKmZha2VWYXJpYWJsZSk7CisgICAgICAgICAgICB2YXJp
YWJsZSA9IGZha2VWYXJpYWJsZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFRo
aXMgaWRlbnRpZmllciBjYW4gb25seSBiZSBhIHZhcmlhYmxlIHR5cGUgc3ltYm9sCisgICAgICAg
ICAgICBpZiAoISBzeW1ib2wtPmlzVmFyaWFibGUoKSkgeworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSwgInZhcmlhYmxlIGV4cGVjdGVk
IiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2
YXJpYWJsZSA9IHN0YXRpY19jYXN0PGNvbnN0IFRWYXJpYWJsZSo+KHN5bWJvbCk7CisgICAgICAg
IH0KKworICAgICAgICAvLyBkb24ndCBkZWxldGUgJDEuc3RyaW5nLCBpdCdzIHVzZWQgYnkgZXJy
b3IgcmVjb3ZlcnksIGFuZCB0aGUgcG9vbAorICAgICAgICAvLyBwb3Agd2lsbCByZWNsYWltIHRo
ZSBtZW1vcnkKKworICAgICAgICBpZiAodmFyaWFibGUtPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIo
KSA9PSBFdnFDb25zdCApIHsKKyAgICAgICAgICAgIENvbnN0YW50VW5pb24qIGNvbnN0QXJyYXkg
PSB2YXJpYWJsZS0+Z2V0Q29uc3RQb2ludGVyKCk7CisgICAgICAgICAgICBUVHlwZSB0KHZhcmlh
YmxlLT5nZXRUeXBlKCkpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24oY29uc3RBcnJheSwg
dCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkU3ltYm9sKHZhcmlhYmxlLT5nZXRVbmlxdWVJZCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZS0+Z2V0TmFtZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJp
YWJsZS0+Z2V0VHlwZSgpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAzOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNDoKKworICAgIHsKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gSU5UX1RZUEUgaXMgb25seSAxNi1iaXQgcGx1cyBzaWduIGJpdCBmb3IgdmVy
dGV4L2ZyYWdtZW50IHNoYWRlcnMsCisgICAgICAgIC8vIGNoZWNrIGZvciBvdmVyZmxvdyBmb3Ig
Y29uc3RhbnRzCisgICAgICAgIC8vCisgICAgICAgIGlmIChhYnMoKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5pKSA+PSAoMSA8PCAxNikpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSwgIiBpbnRlZ2VyIGNvbnN0YW50IG92ZXJmbG93IiwgIiIs
ICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAg
ICAgIHVuaW9uQXJyYXktPnNldElDb25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmkpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRJbnQsIEVicFVuZGVmaW5l
ZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA1OgorCisgICAgeworICAgICAgICBDb25zdGFudFVuaW9uICp1bmlv
bkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgIHVuaW9uQXJyYXktPnNldEZD
b25zdCgoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmYpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1
bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDY6
CisKKyAgICB7CisgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3Rh
bnRVbmlvblsxXTsKKyAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KCh5eXZzcFsoMSkgLSAo
MSldLmxleCkuYik7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVi
dEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxp
bmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDk6CisKKyAgICB7CisgICAgICAgIGlmICghKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmlzQXJyYXkoKSAmJiAhKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkgJiYgISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5pc1ZlY3RvcigpKSB7CisgICAgICAgICAgICBpZiAoKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9kZSgpKQorICAg
ICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwg
IiBsZWZ0IG9mICdbJyBpcyBub3Qgb2YgdHlwZSBhcnJheSwgbWF0cml4LCBvciB2ZWN0b3IgIiwg
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9k
ZSgpLT5nZXRTeW1ib2woKS5jX3N0cigpLCAiIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAiIGxl
ZnQgb2YgJ1snIGlzIG5vdCBvZiB0eXBlIGFycmF5LCBtYXRyaXgsIG9yIHZlY3RvciAiLCAiZXhw
cmVzc2lvbiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCAmJiAoeXl2c3BbKDMpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsK
KyAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+aXNBcnJheSgpKSB7IC8vIGNvbnN0YW50IGZvbGRpbmcgZm9yIGFycmF5cworICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZENvbnN0
QXJyYXlOb2RlKCh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRB
c0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCksICh5
eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDQp
XS5sZXgpLmxpbmUpOworICAgICAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSkgeyAgLy8gY29uc3RhbnQgZm9sZGlu
ZyBmb3IgdmVjdG9ycworICAgICAgICAgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRzOworICAg
ICAgICAgICAgICAgIGZpZWxkcy5udW0gPSAxOworICAgICAgICAgICAgICAgIGZpZWxkcy5vZmZz
ZXRzWzBdID0gKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFz
Q29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKTsgLy8g
bmVlZCB0byBkbyBpdCB0aGlzIHdheSBiZWNhdXNlIHYueHkgc2VuZHMgZmllbGRzIGludGVnZXIg
YXJyYXkKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBj
b250ZXh0LT5hZGRDb25zdFZlY3Rvck5vZGUoZmllbGRzLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmlzTWF0cml4KCkpIHsgLy8gY29uc3RhbnQgZm9sZGluZyBmb3IgbWF0cmljZXMKKyAgICAg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5hZGRD
b25zdE1hdHJpeE5vZGUoKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3Qo
KSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikg
LSAoNCldLmxleCkubGluZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBpZiAoKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFF1YWxpZmllcigpID09IEV2cUNvbnN0KSB7CisgICAgICAgICAgICAgICAgaWYgKCgoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNWZWN0b3IoKSB8fCAoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSkgJiYgKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXROb21pbmFs
U2l6ZSgpIDw9ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRB
c0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkgJiYg
ISh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkgKSB7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxl
eCkubGluZSwgIiIsICJbIiwgImZpZWxkIHNlbGVjdGlvbiBvdXQgb2YgcmFuZ2UgJyVkJyIsICh5
eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5p
b24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0SUNvbnN0KCkpOworICAgICAgICAgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5pc0FycmF5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldEFycmF5U2l6
ZSgpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRNYXhBcnJheVNpemUo
KSA8PSAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNDb25z
dGFudFVuaW9uKCktPmdldFVuaW9uQXJyYXlQb2ludGVyKCktPmdldElDb25zdCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNldE1heFNpemUo
KHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzU3ltYm9sTm9k
ZSgpLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZVBv
aW50ZXIoKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFz
Q29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigpLT5nZXRJQ29uc3QoKSwgdHJ1
ZSwgKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGV4
dC0+YXJyYXlTZXRNYXhTaXplKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRBc1N5bWJvbE5vZGUoKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldFR5cGVQb2ludGVyKCksIDAsIGZhbHNlLCAoeXl2c3BbKDIpIC0gKDQpXS5s
ZXgpLmxpbmUpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRBc0NvbnN0YW50VW5pb24oKS0+Z2V0VW5pb25BcnJheVBvaW50ZXIoKS0+Z2V0
SUNvbnN0KCkgPj0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dFR5cGUoKS5nZXRBcnJheVNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgImFycmF5
IGluZGV4IG91dCBvZiByYW5nZSAnJWQnIiwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldEFzQ29uc3RhbnRVbmlvbigpLT5nZXRVbmlvbkFycmF5UG9pbnRlcigp
LT5nZXRJQ29uc3QoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgKHl5dnNwWygxKSAt
ICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoNCldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCh5eXZz
cFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0FycmF5KCkgJiYgKHl5dnNw
WygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRBcnJheVNp
emUoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFso
MikgLSAoNCldLmxleCkubGluZSwgIiIsICJbIiwgImFycmF5IG11c3QgYmUgcmVkZWNsYXJlZCB3
aXRoIGEgc2l6ZSBiZWZvcmUgYmVpbmcgaW5kZXhlZCB3aXRoIGEgdmFyaWFibGUiKTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleEluZGlyZWN0LCAoeXl2c3BbKDEpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
PSAwKSB7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRGQ29uc3QoMC4wZik7Cisg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRl
cm1lZGlhdGUuYWRkQ29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRGbG9hdCwgRWJw
SGlnaCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUpOworICAgICAgICB9
IGVsc2UgaWYgKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc0Fy
cmF5KCkpIHsKKyAgICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpKQorICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDQp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFN0cnVjdCgpLCAoeXl2c3Bb
KDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFR5cGVOYW1l
KCkpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSwgKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCksICh5eXZz
cFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5pc01hdHJpeCgpKSk7CisKKyAg
ICAgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0KQorICAgICAgICAgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZVBvaW50ZXIoKS0+c2V0UXVhbGlm
aWVyKEV2cUNvbnN0KTsKKyAgICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+aXNNYXRyaXgoKSAmJiAoeXl2c3BbKDEpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpLmdldFF1YWxpZmllcigpID09IEV2cUNvbnN0
KQorICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRU
eXBlKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5
cGUoKSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNp
c2lvbigpLCBFdnFDb25zdCwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSktPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgZWxzZSBpZiAoKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpCisgICAgICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0g
KDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFy
eSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxT
aXplKCkpKTsKKyAgICAgICAgZWxzZSBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmlzVmVjdG9yKCkgJiYgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRRdWFsaWZpZXIoKSA9PSBFdnFDb25zdCkKKyAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2
c3BbKDEpIC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5
eXZzcFsoMSkgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwg
RXZxQ29uc3QpKTsKKyAgICAgICAgZWxzZSBpZiAoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmlzVmVjdG9yKCkpCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCksIEV2cVRlbXBvcmFyeSkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5
cGUoKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSk7
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTE6CisKKyAgICB7
CisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
aXNBcnJheSgpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDMpIC0gKDMp
XS5sZXgpLmxpbmUsICJjYW5ub3QgYXBwbHkgZG90IG9wZXJhdG9yIHRvIGFuIGFycmF5IiwgIi4i
LCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmlzVmVj
dG9yKCkpIHsKKyAgICAgICAgICAgIFRWZWN0b3JGaWVsZHMgZmllbGRzOworICAgICAgICAgICAg
aWYgKCEgY29udGV4dC0+cGFyc2VWZWN0b3JGaWVsZHMoKih5eXZzcFsoMykgLSAoMyldLmxleCku
c3RyaW5nLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Tm9t
aW5hbFNpemUoKSwgZmllbGRzLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpKSB7CisgICAg
ICAgICAgICAgICAgZmllbGRzLm51bSA9IDE7CisgICAgICAgICAgICAgICAgZmllbGRzLm9mZnNl
dHNbMF0gPSAwOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29uc3QpIHsgLy8gY29u
c3RhbnQgZm9sZGluZyBmb3IgdmVjdG9yIGZpZWxkcworICAgICAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmFkZENvbnN0VmVjdG9yTm9kZShmaWVs
ZHMsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShUVHlwZSgoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QmFzaWNUeXBlKCksICh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRQcmVjaXNpb24oKSwgRXZxQ29uc3QsIChp
bnQpICgqKHl5dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcpLnNpemUoKSkpOworICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZmllbGRzLm51bSA9PSAxKSB7CisgICAg
ICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRV
bmlvblsxXTsKKyAgICAgICAgICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0SUNvbnN0KGZpZWxk
cy5vZmZzZXRzWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRleCA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMykgLSAoMyldLmxleCku
bGluZSk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRJbmRleChFT3BJbmRleERpcmVjdCwgKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIGluZGV4LCAoeXl2c3BbKDIpIC0g
KDMpXS5sZXgpLmxpbmUpOworICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBUU3RyaW5nIHZlY3RvclN0cmluZyA9ICooeXl2c3BbKDMp
IC0gKDMpXS5sZXgpLnN0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBp
bmRleCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTd2l6emxlKGZpZWxkcywgKHl5dnNwWygz
KSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcFZlY3Rv
clN3aXp6bGUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRl
eCwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAo
MyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFByZWNpc2lvbigpLCBFdnFUZW1wb3Jh
cnksIChpbnQpIHZlY3RvclN0cmluZy5zaXplKCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmlzTWF0cml4KCkpIHsKKyAgICAgICAgICAgIFRNYXRyaXhGaWVsZHMg
ZmllbGRzOworICAgICAgICAgICAgaWYgKCEgY29udGV4dC0+cGFyc2VNYXRyaXhGaWVsZHMoKih5
eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0Tm9taW5hbFNpemUoKSwgZmllbGRzLCAoeXl2c3BbKDMpIC0gKDMp
XS5sZXgpLmxpbmUpKSB7CisgICAgICAgICAgICAgICAgZmllbGRzLndob2xlUm93ID0gZmFsc2U7
CisgICAgICAgICAgICAgICAgZmllbGRzLndob2xlQ29sID0gZmFsc2U7CisgICAgICAgICAgICAg
ICAgZmllbGRzLnJvdyA9IDA7CisgICAgICAgICAgICAgICAgZmllbGRzLmNvbCA9IDA7CisgICAg
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoZmllbGRzLndob2xlUm93IHx8IGZpZWxkcy53aG9sZUNvbCkgeworICAgICAgICAg
ICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBub24t
c2NhbGFyIGZpZWxkcyBub3QgaW1wbGVtZW50ZWQgeWV0IiwgIi4iLCAiIik7CisgICAgICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIENvbnN0YW50VW5pb24g
KnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAgICAgICAgICAgICB1bmlv
bkFycmF5LT5zZXRJQ29uc3QoMCk7CisgICAgICAgICAgICAgICAgVEludGVybVR5cGVkKiBpbmRl
eCA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRU
eXBlKEVidEludCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMykgLSAoMyldLmxl
eCkubGluZSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0LCAoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eXZzcFsoMikgLSAo
MyldLmxleCkubGluZSk7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5zZXRUeXBlKFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpLT5nZXRCYXNpY1R5cGUoKSwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSktPmdldFByZWNpc2lvbigpLEV2cVRlbXBvcmFyeSwgKHl5dnNwWygxKSAtICgzKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldE5vbWluYWxTaXplKCkpKTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5l
dyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldElDb25z
dChmaWVsZHMuY29sICogKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkt
PmdldE5vbWluYWxTaXplKCkgKyBmaWVsZHMucm93KTsKKyAgICAgICAgICAgICAgICBUSW50ZXJt
VHlwZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5p
b25BcnJheSwgVFR5cGUoRWJ0SW50LCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0KSwgKHl5dnNwWygz
KSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVy
bVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkSW5kZXgoRU9wSW5kZXhEaXJl
Y3QsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBpbmRleCwgKHl5
dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoVFR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPmdldEJhc2ljVHlwZSgpLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0UHJlY2lzaW9uKCkpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIGlmICgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0U3RydWN0KSB7CisgICAgICAgICAgICBib29sIGZpZWxk
Rm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAgIGNvbnN0IFRUeXBlTGlzdCogZmllbGRzID0gKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGUoKS5nZXRTdHJ1
Y3QoKTsKKyAgICAgICAgICAgIGlmIChmaWVsZHMgPT0gMCkgeworICAgICAgICAgICAgICAgIGNv
bnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgInN0cnVjdHVyZSBoYXMg
bm8gZmllbGRzIiwgIkludGVybmFsIEVycm9yIiwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRl
eHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGk7CisgICAgICAg
ICAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpZWxkcy0+c2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCgqZmllbGRzKVtpXS50eXBlLT5nZXRGaWVsZE5hbWUoKSA9PSAqKHl5
dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZp
ZWxkRm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGZp
ZWxkRm91bmQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkuZ2V0UXVhbGlmaWVyKCkgPT0gRXZxQ29u
c3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSA9IGNvbnRleHQtPmFkZENvbnN0U3RydWN0KCooeXl2c3BbKDMpIC0gKDMpXS5sZXgpLnN0
cmluZywgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBlKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBjaGFuZ2UgdGhlIHF1YWxpZmllciBvZiB0aGUgcmV0
dXJuIHR5cGUsIG5vdCBvZiB0aGUgc3RydWN0dXJlIGZpZWxkCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gYXMgdGhlIHN0cnVjdHVyZSBkZWZpbml0aW9uIGlzIHNoYXJlZCBiZXR3ZWVu
IHZhcmlvdXMgc3RydWN0dXJlcy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldFR5cGVQb2ludGVyKCktPnNldFF1YWxpZmllcihF
dnFDb25zdCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFy
cmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICAgICAgICAgICAgICB1bmlv
bkFycmF5LT5zZXRJQ29uc3QoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBUSW50ZXJtVHlw
ZWQqIGluZGV4ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgKigqZmllbGRzKVtpXS50eXBlLCAoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEluZGV4KEVPcEluZGV4RGlyZWN0U3RydWN0LCAoeXl2
c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW5kZXgsICh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSktPnNldFR5cGUoKigqZmllbGRzKVtpXS50eXBlKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIiBubyBzdWNo
IGZpZWxkIGluIHN0cnVjdHVyZSIsICh5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLT5jX3N0
cigpLCAiIik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygx
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3Io
KHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiIGZpZWxkIHNlbGVjdGlvbiByZXF1aXJlcyBz
dHJ1Y3R1cmUsIHZlY3Rvciwgb3IgbWF0cml4IG9uIGxlZnQgaGFuZCBzaWRlIiwgKHl5dnNwWygz
KSAtICgzKV0ubGV4KS5zdHJpbmctPmNfc3RyKCksICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9Cisg
ICAgICAgIC8vIGRvbid0IGRlbGV0ZSAkMy5zdHJpbmcsIGl0J3MgZnJvbSB0aGUgcG9vbAorICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCAiKysiLCAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoRU9wUG9zdEluY3JlbWVudCwg
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAo
MildLmxleCkubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnVu
YXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICIrKyIsICh5eXZzcFsoMSkg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEzOgorCisgICAg
eworICAgICAgICBpZiAoY29udGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIp
XS5sZXgpLmxpbmUsICItLSIsICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0
aChFT3BQb3N0RGVjcmVtZW50LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAg
ICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMildLmxleCkubGlu
ZSwgIi0tIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTQ6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5pbnRlZ2VyRXJyb3JD
aGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgIltdIikpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNToKKworICAgIHsKKyAgICAgICAgVEZ1
bmN0aW9uKiBmbkNhbGwgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmZ1bmN0aW9uOworICAg
ICAgICBUT3BlcmF0b3Igb3AgPSBmbkNhbGwtPmdldEJ1aWx0SW5PcCgpOworCisgICAgICAgIGlm
IChvcCAhPSBFT3BOdWxsKQorICAgICAgICB7CisgICAgICAgICAgICAvLworICAgICAgICAgICAg
Ly8gVGhlbiB0aGlzIHNob3VsZCBiZSBhIGNvbnN0cnVjdG9yLgorICAgICAgICAgICAgLy8gRG9u
J3QgZ28gdGhyb3VnaCB0aGUgc3ltYm9sIHRhYmxlIGZvciBjb25zdHJ1Y3RvcnMuCisgICAgICAg
ICAgICAvLyBUaGVpciBwYXJhbWV0ZXJzIHdpbGwgYmUgdmVyaWZpZWQgYWxnb3JpdGhtaWNhbGx5
LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9pZCwgRWJwVW5k
ZWZpbmVkKTsgIC8vIHVzZSB0aGlzIHRvIGdldCB0aGUgdHlwZSBiYWNrCisgICAgICAgICAgICBp
ZiAoY29udGV4dC0+Y29uc3RydWN0b3JFcnJvckNoZWNrKCh5eXZzcFsoMSkgLSAoMSldLmludGVy
bSkubGluZSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5pbnRlcm1Ob2RlLCAqZm5DYWxsLCBv
cCwgJnR5cGUpKSB7CisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAvLyBJdCdzIGEgY29uc3RydWN0b3IsIG9mIHR5cGUgJ3R5cGUnLgorICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+YWRkQ29uc3RydWN0b3IoKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5p
bnRlcm1Ob2RlLCAmdHlwZSwgb3AsIGZuQ2FsbCwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5s
aW5lKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigwLCBvcCwgKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtKS5saW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZSh0eXBlKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBOb3QgYSBjb25zdHJ1Y3Rvci4gIEZpbmQg
aXQgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICBjb25z
dCBURnVuY3Rpb24qIGZuQ2FuZGlkYXRlOworICAgICAgICAgICAgYm9vbCBidWlsdEluOworICAg
ICAgICAgICAgZm5DYW5kaWRhdGUgPSBjb250ZXh0LT5maW5kRnVuY3Rpb24oKHl5dnNwWygxKSAt
ICgxKV0uaW50ZXJtKS5saW5lLCBmbkNhbGwsICZidWlsdEluKTsKKyAgICAgICAgICAgIGlmIChm
bkNhbmRpZGF0ZSkgeworICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gQSBk
ZWNsYXJlZCBmdW5jdGlvbi4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIGlm
IChidWlsdEluICYmICFmbkNhbmRpZGF0ZS0+Z2V0RXh0ZW5zaW9uKCkuZW1wdHkoKSAmJgorICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5leHRlbnNpb25FcnJvckNoZWNrKCh5eXZzcFsoMSkg
LSAoMSldLmludGVybSkubGluZSwgZm5DYW5kaWRhdGUtPmdldEV4dGVuc2lvbigpKSkgeworICAg
ICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG9wID0gZm5DYW5kaWRhdGUtPmdldEJ1aWx0SW5PcCgpOworICAgICAg
ICAgICAgICAgIGlmIChidWlsdEluICYmIG9wICE9IEVPcE51bGwpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gQSBmdW5jdGlvbiBjYWxsIG1hcHBlZCB0
byBhIGJ1aWx0LWluIG9wZXJhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCkgPT0gMSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyZWF0
IGl0IGxpa2UgYSBidWlsdC1pbiB1bmFyeSBvcGVyYXRvci4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkVW5hcnlNYXRoKG9wLCAoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUsIDAsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PT0gMCkgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybU5vZGUtPmdldExpbmUoKSwgIiB3cm9uZyBvcGVy
YW5kIHR5cGUiLCAiSW50ZXJuYWwgRXJyb3IiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiYnVpbHQgaW4gdW5hcnkgb3BlcmF0b3IgZnVuY3Rpb24uICBUeXBlOiAlcyIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRJbnRlcm1UeXBlZCo+KCh5
eXZzcFsoMSkgLSAoMSldLmludGVybSkuaW50ZXJtTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCku
Y19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWVlFUlJPUjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0pLmludGVybUFnZ3JlZ2F0ZSwgb3AsICh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgcmVhbCBmdW5jdGlvbiBjYWxsCisKKyAgICAgICAg
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLnNldEFnZ3JlZ2F0ZU9wZXJhdG9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSku
aW50ZXJtQWdncmVnYXRlLCBFT3BGdW5jdGlvbkNhbGwsICh5eXZzcFsoMSkgLSAoMSldLmludGVy
bSkubGluZSk7CisgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJuVHlwZSgpKTsKKworICAgICAgICAg
ICAgICAgICAgICAvLyB0aGlzIGlzIGhvdyB3ZSBrbm93IHdoZXRoZXIgdGhlIGdpdmVuIGZ1bmN0
aW9uIGlzIGEgYnVpbHRJbiBmdW5jdGlvbiBvciBhIHVzZXIgZGVmaW5lZCBmdW5jdGlvbgorICAg
ICAgICAgICAgICAgICAgICAvLyBpZiBidWlsdEluID09IGZhbHNlLCBpdCdzIGEgdXNlckRlZmlu
ZWQgLT4gY291bGQgYmUgYW4gb3ZlcmxvYWRlZCBidWlsdEluIGZ1bmN0aW9uIGFsc28KKyAgICAg
ICAgICAgICAgICAgICAgLy8gaWYgYnVpbHRJbiA9PSB0cnVlLCBpdCdzIGRlZmluaXRlbHkgYSBi
dWlsdEluIGZ1bmN0aW9uIHdpdGggRU9wTnVsbAorICAgICAgICAgICAgICAgICAgICBpZiAoIWJ1
aWx0SW4pCisgICAgICAgICAgICAgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldEFzQWdncmVnYXRlKCktPnNldFVzZXJEZWZpbmVkKCk7CisgICAgICAgICAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0QXNBZ2dyZWdhdGUoKS0+
c2V0TmFtZShmbkNhbmRpZGF0ZS0+Z2V0TWFuZ2xlZE5hbWUoKSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgVFF1YWxpZmllciBxdWFsOworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbUNvdW50KCk7ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcXVhbCA9IGZuQ2FuZGlkYXRlLT5nZXRQYXJhbShpKS50eXBlLT5nZXRRdWFs
aWZpZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChxdWFsID09IEV2cU91dCB8fCBx
dWFsID09IEV2cUluT3V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRl
eHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRM
aW5lKCksICJhc3NpZ24iLCAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldEFzQWdn
cmVnYXRlKCktPmdldFNlcXVlbmNlKClbaV0tPmdldEFzVHlwZWQoKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgxKV0uaW50
ZXJtKS5pbnRlcm1Ob2RlLT5nZXRMaW5lKCksICJDb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgcGFz
c2VkIGZvciAnb3V0JyBvciAnaW5vdXQnIHBhcmFtZXRlcnMuIiwgIkVycm9yIiwgIiIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+c2V0VHlwZShmbkNhbmRpZGF0ZS0+Z2V0UmV0dXJu
VHlwZSgpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gZXJyb3Ig
bWVzc2FnZSB3YXMgcHV0IG91dCBieSBQYUZpbmRGdW5jdGlvbigpCisgICAgICAgICAgICAgICAg
Ly8gUHV0IG9uIGEgZHVtbXkgbm9kZSBmb3IgZXJyb3IgcmVjb3ZlcnkKKyAgICAgICAgICAgICAg
ICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAg
ICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0RkNvbnN0KDAuMGYpOworICAgICAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEZsb2F0LCBFYnBVbmRlZmluZWQs
IEV2cUNvbnN0KSwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lKTsKKyAgICAgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgZGVsZXRlIGZuQ2FsbDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTY6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKTsK
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTc6CisKKyAgICB7CisgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkubGluZSwgIm1ldGhvZHMgYXJlIG5v
dCBzdXBwb3J0ZWQiLCAiIiwgIiIpOworICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKTsKKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0p
ID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkubGlu
ZSA9ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTk6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikg
LSAoMildLmxleCkubGluZTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMjA6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgyKV0u
aW50ZXJtLmZ1bmN0aW9uKTsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IDA7
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDIxOgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtKS5mdW5jdGlvbiA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5mdW5jdGlvbik7
CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybU5vZGUgPSAwOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAyMjoKKworICAgIHsKKyAgICAgICAgVFBhcmFtZXRlciBwYXJhbSA9IHsg
MCwgbmV3IFRUeXBlKCh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5n
ZXRUeXBlKCkpIH07CisgICAgICAgICh5eXZzcFsoMSkgLSAoMildLmludGVybS5mdW5jdGlvbikt
PmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmZ1bmN0aW9uID0g
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bSkuaW50ZXJtTm9kZSA9ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyMzoKKworICAgIHsKKyAgICAgICAgVFBh
cmFtZXRlciBwYXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMykgLSAoMyldLmludGVybS5p
bnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIH07CisgICAgICAgICh5eXZzcFsoMSkgLSAoMyld
LmludGVybSkuZnVuY3Rpb24tPmFkZFBhcmFtZXRlcihwYXJhbSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0pLmZ1bmN0aW9uID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbjsKKyAg
ICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtTm9kZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5n
cm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuaW50ZXJtTm9kZSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxl
eCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDI0OgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5m
dW5jdGlvbik7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDI1OgorCisgICAgeworICAg
ICAgICAvLworICAgICAgICAvLyBDb25zdHJ1Y3RvcgorICAgICAgICAvLworICAgICAgICBpZiAo
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmFycmF5KSB7CisgICAgICAgICAgICAvLyBD
b25zdHJ1Y3RvcnMgZm9yIGFycmF5cyBhcmUgbm90IGFsbG93ZWQuCisgICAgICAgICAgICBjb250
ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSwgImNhbm5vdCBj
b25zdHJ1Y3QgdGhpcyB0eXBlIiwgImFycmF5IiwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnNl
dEFycmF5KGZhbHNlKTsKKyAgICAgICAgfQorCisgICAgICAgIFRPcGVyYXRvciBvcCA9IEVPcE51
bGw7CisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudXNlckRlZikg
eworICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RTdHJ1Y3Q7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBzd2l0Y2ggKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS50eXBl
KSB7CisgICAgICAgICAgICBjYXNlIEVidEZsb2F0OgorICAgICAgICAgICAgICAgIGlmICgoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubWF0cml4KSB7CisgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuc2l6ZSkgeworICAgICAgICAg
ICAgICAgICAgICBjYXNlIDI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9w
ID0gRU9wQ29uc3RydWN0TWF0MjsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDM6
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0TWF0
MzsgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wID0gRU9wQ29uc3RydWN0TWF0NDsgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3AgPSBFT3BDb25zdHJ1Y3RGbG9hdDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgMjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1
Y3RWZWMyOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgMzogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RWZWMzOyAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3AgPSBFT3BDb25zdHJ1Y3RWZWM0OyAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEVidEludDoKKyAgICAgICAgICAgICAgICBzd2l0Y2goKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpLnNpemUpIHsKKyAgICAgICAgICAgICAgICBjYXNlIDE6ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IEVPcENvbnN0cnVjdEludDsgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIDI6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJpdmVjMiIs
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RJ
VmVjMjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzOiAgICAgICBGUkFHX1ZFUlRfT05M
WSgiaXZlYzMiLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSk7IG9wID0gRU9w
Q29uc3RydWN0SVZlYzM7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogICAgICAgRlJB
R19WRVJUX09OTFkoIml2ZWM0IiwgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLmxpbmUp
OyBvcCA9IEVPcENvbnN0cnVjdElWZWM0OyBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVidEJvb2w6CisgICAgICAgICAg
ICAgICAgc3dpdGNoKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zaXplKSB7CisgICAg
ICAgICAgICAgICAgY2FzZSAxOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3AgPSBFT3BDb25zdHJ1Y3RCb29sOyAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAy
OiAgICAgICBGUkFHX1ZFUlRfT05MWSgiYnZlYzIiLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
dHlwZSkubGluZSk7IG9wID0gRU9wQ29uc3RydWN0QlZlYzI7IGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgMzogICAgICAgRlJBR19WRVJUX09OTFkoImJ2ZWMzIiwgKHl5dnNwWygxKSAtICgx
KV0uaW50ZXJtLnR5cGUpLmxpbmUpOyBvcCA9IEVPcENvbnN0cnVjdEJWZWMzOyBicmVhazsKKyAg
ICAgICAgICAgICAgICBjYXNlIDQ6ICAgICAgIEZSQUdfVkVSVF9PTkxZKCJidmVjNCIsICh5eXZz
cFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKTsgb3AgPSBFT3BDb25zdHJ1Y3RCVmVjNDsg
YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDogYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3Ag
PT0gRU9wTnVsbCkgeworICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkg
LSAoMSldLmludGVybS50eXBlKS5saW5lLCAiY2Fubm90IGNvbnN0cnVjdCB0aGlzIHR5cGUiLCBn
ZXRCYXNpY1N0cmluZygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkudHlwZSksICIiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgKHl5
dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpLnR5cGUgPSBFYnRGbG9hdDsKKyAgICAgICAgICAg
ICAgICBvcCA9IEVPcENvbnN0cnVjdEZsb2F0OworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIFRTdHJpbmcgdGVtcFN0cmluZzsKKyAgICAgICAgVFR5cGUgdHlwZSgoeXl2c3BbKDEp
IC0gKDEpXS5pbnRlcm0udHlwZSkpOworICAgICAgICBURnVuY3Rpb24gKmZ1bmN0aW9uID0gbmV3
IFRGdW5jdGlvbigmdGVtcFN0cmluZywgdHlwZSwgb3ApOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAyNjoK
KworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUsICooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZykpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIFRUeXBlIHR5cGUoRWJ0Vm9p
ZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9IG5ldyBURnVu
Y3Rpb24oKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAyNzoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVj
aygoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUsICooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0
cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIFRUeXBlIHR5
cGUoRWJ0Vm9pZCwgRWJwVW5kZWZpbmVkKTsKKyAgICAgICAgVEZ1bmN0aW9uICpmdW5jdGlvbiA9
IG5ldyBURnVuY3Rpb24oKHl5dnNwWygxKSAtICgxKV0ubGV4KS5zdHJpbmcsIHR5cGUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmZ1bmN0aW9uKSA9IGZ1bmN0aW9uOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAyODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDI5OgorCisgICAgeworICAgICAgICBpZiAoY29u
dGV4dC0+bFZhbHVlRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICIrKyIs
ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFVuYXJ5TWF0aChFT3BQcmVJbmNyZW1lbnQs
ICh5eXZzcFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDEpIC0g
KDIpXS5sZXgpLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZh
bC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT51
bmFyeU9wRXJyb3IoKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCAiKysiLCAoeXl2c3BbKDIp
IC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAzMDoKKworICAg
IHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgy
KV0ubGV4KS5saW5lLCAiLS0iLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1h
dGgoRU9wUHJlRGVjcmVtZW50LCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7
CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAg
ICAgICAgICAgY29udGV4dC0+dW5hcnlPcEVycm9yKCh5eXZzcFsoMSkgLSAoMildLmxleCkubGlu
ZSwgIi0tIiwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENv
bXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAg
ICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygyKSAtICgyKV0u
aW50ZXJtLmludGVybVR5cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMzE6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0pLm9wICE9IEVPcE51bGwpIHsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRVbmFyeU1hdGgoKHl5dnNwWygxKSAt
ICgyKV0uaW50ZXJtKS5vcCwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybVR5cGVkTm9k
ZSksICh5eXZzcFsoMSkgLSAoMildLmludGVybSkubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUp
OworICAgICAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7
CisgICAgICAgICAgICAgICAgY29uc3QgY2hhciogZXJyb3JPcCA9ICIiOworICAgICAgICAgICAg
ICAgIHN3aXRjaCgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLm9wKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBFT3BOZWdhdGl2ZTogICBlcnJvck9wID0gIi0iOyBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIEVPcExvZ2ljYWxOb3Q6IGVycm9yT3AgPSAiISI7IGJyZWFrOworICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBjb250ZXh0LT51bmFyeU9wRXJyb3IoKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5saW5lLCBl
cnJvck9wLCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29t
cGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMikg
LSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZz
cFsoMikgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAzMjoKKworICAgIHsgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BOdWxsOyA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMzM6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0pLmxpbmUgPSAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9wTmVnYXRpdmU7IDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAzNDoKKworICAgIHsgKHl5dmFsLmludGVybSkubGluZSA9
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BMb2dp
Y2FsTm90OyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMzU6CisKKyAgICB7ICh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMzY6CisKKyAgICB7CisgICAgICAgIEZS
QUdfVkVSVF9PTkxZKCIqIiwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFk
ZEJpbmFyeU1hdGgoRU9wTXVsLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFso
MikgLSAoMyldLmxleCkubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUpOworICAgICAgICBpZiAo
KHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCAiKiIsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
LCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVT
dHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAzNzoKKworICAgIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoIi8iLCAoeXl2c3BbKDIpIC0g
KDMpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BEaXYsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCBjb250ZXh0LT5z
eW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0g
KDMpXS5sZXgpLmxpbmUsICIvIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDM4OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDM5OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5
TWF0aChFT3BBZGQsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+Ymlu
YXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIrIiwgKHl5dnNwWygxKSAt
ICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygp
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQwOgor
CisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BTdWIsICh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJs
ZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkgewor
ICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgp
LmxpbmUsICItIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdl
dENvbXBsZXRlU3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOworICAgICAgICB9CisgICAgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDQxOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDQyOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDQzOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BM
ZXNzVGhhbiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5s
ZXgpLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlP
cEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIjwiLCAoeXl2c3BbKDEpIC0gKDMp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygz
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOwor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlv
biAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25B
cnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9u
QXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIp
IC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDQ0OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsIGNv
bnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZz
cFsoMikgLSAoMyldLmxleCkubGluZSwgIj4iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJh
eSA9IG5ldyBDb25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNv
bnN0KGZhbHNlKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBl
KEVidEJvb2wsIEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgp
LmxpbmUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQ1OgorCisg
ICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5p
bnRlcm1lZGlhdGUuYWRkQmluYXJ5TWF0aChFT3BMZXNzVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgY29udGV4dC0+c3lt
Ym9sVGFibGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09
IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5saW5lLCAiPD0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBD
b25zdGFudFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNl
KTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2ws
IEVicFVuZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOwor
ICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQ2OgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkQmluYXJ5TWF0aChFT3BHcmVhdGVyVGhhbkVxdWFsLCAoeXl2c3BbKDEpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgY29udGV4dC0+c3ltYm9sVGFi
bGUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09IDApIHsK
KyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lLCAiPj0iLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+
Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgQ29uc3RhbnRVbmlvbiAqdW5pb25BcnJheSA9IG5ldyBDb25zdGFu
dFVuaW9uWzFdOworICAgICAgICAgICAgdW5pb25BcnJheS0+c2V0QkNvbnN0KGZhbHNlKTsKKyAg
ICAgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVy
bWVkaWF0ZS5hZGRDb25zdGFudFVuaW9uKHVuaW9uQXJyYXksIFRUeXBlKEVidEJvb2wsIEVicFVu
ZGVmaW5lZCwgRXZxQ29uc3QpLCAoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUpOworICAgICAg
ICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDQ3OgorCisgICAgeyAoeXl2YWwuaW50
ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDQ4OgorCisgICAgeworICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
QmluYXJ5TWF0aChFT3BFcXVhbCwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDIpIC0gKDMpXS5sZXgpLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAgICAgaWYg
KCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250
ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgIj09IiwgKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5n
KCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0
ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
IENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsKKyAgICAg
ICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQ29uc3Rh
bnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2cUNvbnN0
KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgfQorICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA0OToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJpbmFyeU1hdGgoRU9wTm90
RXF1YWwsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3Bb
KDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4
KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BF
cnJvcigoeXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICIhPSIsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMp
IC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9u
ICp1bmlvbkFycmF5ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFy
cmF5LT5zZXRCQ29uc3QoZmFsc2UpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25B
cnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNTA6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNTE6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNTI6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNTM6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFso
MSkgLSAoMSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgNTQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxBbmQsICh5eXZz
cFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCBjb250
ZXh0LT5zeW1ib2xUYWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPT0gMCkgeworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3Bb
KDIpIC0gKDMpXS5sZXgpLmxpbmUsICImJiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5
ID0gbmV3IENvbnN0YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29u
c3QoZmFsc2UpOworICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0g
Y29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUo
RWJ0Qm9vbCwgRWJwVW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCku
bGluZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTU6CisKKyAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTY6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5hZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxYb3IsICh5eXZzcFsoMSkgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xU
YWJsZSk7CisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPT0gMCkg
eworICAgICAgICAgICAgY29udGV4dC0+YmluYXJ5T3BFcnJvcigoeXl2c3BbKDIpIC0gKDMpXS5s
ZXgpLmxpbmUsICJeXiIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
LT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisgICAgICAgICAgICBDb25zdGFudFVuaW9uICp1bmlvbkFycmF5ID0gbmV3IENvbnN0
YW50VW5pb25bMV07CisgICAgICAgICAgICB1bmlvbkFycmF5LT5zZXRCQ29uc3QoZmFsc2UpOwor
ICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4dC0+aW50
ZXJtZWRpYXRlLmFkZENvbnN0YW50VW5pb24odW5pb25BcnJheSwgVFR5cGUoRWJ0Qm9vbCwgRWJw
VW5kZWZpbmVkLCBFdnFDb25zdCksICh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSk7CisgICAg
ICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTc6CisKKyAgICB7ICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNTg6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5h
ZGRCaW5hcnlNYXRoKEVPcExvZ2ljYWxPciwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAo
eXl2c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsIGNvbnRleHQtPnN5bWJvbFRhYmxlKTsKKyAgICAg
ICAgaWYgKCh5eXZhbC5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAg
ICBjb250ZXh0LT5iaW5hcnlPcEVycm9yKCh5eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgInx8
IiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRl
U3RyaW5nKCksICh5eXZzcFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRD
b21wbGV0ZVN0cmluZygpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAg
ICAgICAgIENvbnN0YW50VW5pb24gKnVuaW9uQXJyYXkgPSBuZXcgQ29uc3RhbnRVbmlvblsxXTsK
KyAgICAgICAgICAgIHVuaW9uQXJyYXktPnNldEJDb25zdChmYWxzZSk7CisgICAgICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRk
Q29uc3RhbnRVbmlvbih1bmlvbkFycmF5LCBUVHlwZShFYnRCb29sLCBFYnBVbmRlZmluZWQsIEV2
cUNvbnN0KSwgKHl5dnNwWygyKSAtICgzKV0ubGV4KS5saW5lKTsKKyAgICAgICAgfQorICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA1OToKKworICAgIHsgKHl5dmFsLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSk7IDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA2MDoKKworICAgIHsKKyAgICAgICBpZiAoY29udGV4dC0+
Ym9vbEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0g
KDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNv
dmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gY29udGV4
dC0+aW50ZXJtZWRpYXRlLmFkZFNlbGVjdGlvbigoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKSwgKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSks
ICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0g
KDUpXS5sZXgpLmxpbmUpOworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICg1KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSktPmdldFR5cGUoKSAhPSAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50
ZXJtVHlwZWROb2RlKS0+Z2V0VHlwZSgpKQorICAgICAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpID0gMDsKKworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBl
ZE5vZGUpID09IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNw
WygyKSAtICg1KV0ubGV4KS5saW5lLCAiOiIsICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDUpIC0gKDUpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBj
b250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVk
Tm9kZSkgPSAoeXl2c3BbKDUpIC0gKDUpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAg
ICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2MToKKworICAgIHsgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2MjoKKworICAgIHsKKyAgICAgICAg
aWYgKGNvbnRleHQtPmxWYWx1ZUVycm9yQ2hlY2soKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtKS5s
aW5lLCAiYXNzaWduIiwgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSkp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2YWwuaW50ZXJt
LmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQXNzaWduKCh5eXZz
cFsoMikgLSAoMyldLmludGVybSkub3AsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgKHl5
dnNwWygyKSAtICgzKV0uaW50ZXJtKS5saW5lKTsKKyAgICAgICAgaWYgKCh5eXZhbC5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSA9PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5hc3NpZ25FcnJv
cigoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICJhc3NpZ24iLCAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSwgKHl5dnNw
WygzKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSktPmdldENvbXBsZXRlU3RyaW5nKCkp
OworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgKHl5dmFsLmlu
dGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5
cGVkTm9kZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjM6CisK
KyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSku
bGluZSA9ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBF
T3BBc3NpZ247IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA2NDoKKworICAgIHsgRlJBR19WRVJU
X09OTFkoIio9IiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsgICAgICh5eXZhbC5pbnRl
cm0pLmxpbmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9w
ID0gRU9wTXVsQXNzaWduOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjU6CisKKyAgICB7IEZS
QUdfVkVSVF9PTkxZKCIvPSIsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7ICAgICAoeXl2
YWwuaW50ZXJtKS5saW5lID0gKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lOyAoeXl2YWwuaW50
ZXJtKS5vcCA9IEVPcERpdkFzc2lnbjsgO30KKyAgICBicmVhazsKKworICBjYXNlIDY2OgorCisg
ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmxp
bmUgPSAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmU7ICh5eXZhbC5pbnRlcm0pLm9wID0gRU9w
QWRkQXNzaWduOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgNjc6CisKKyAgICB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFso
MSkgLSAoMSldLmxleCkubGluZTsgKHl5dmFsLmludGVybSkub3AgPSBFT3BTdWJBc3NpZ247IDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA2ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVy
bS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybVR5cGVk
Tm9kZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDY5OgorCisgICAgeworICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUu
YWRkQ29tbWEoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZz
cFsoMykgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCAoeXl2c3BbKDIpIC0gKDMpXS5s
ZXgpLmxpbmUpOworICAgICAgICBpZiAoKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID09
IDApIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmJpbmFyeU9wRXJyb3IoKHl5dnNwWygyKSAtICgz
KV0ubGV4KS5saW5lLCAiLCIsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS5pbnRlcm1UeXBlZE5v
ZGUpLT5nZXRDb21wbGV0ZVN0cmluZygpLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKS0+Z2V0Q29tcGxldGVTdHJpbmcoKSk7CisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAo
eXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgfQorICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3MDoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRl
eHQtPmNvbnN0RXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWRO
b2RlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1U
eXBlZE5vZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA3MToKKworICAgIHsKKyAg
ICAgICAgVEZ1bmN0aW9uICZmdW5jdGlvbiA9ICooKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5m
dW5jdGlvbik7CisgICAgICAgIAorICAgICAgICBUSW50ZXJtQWdncmVnYXRlICpwcm90b3R5cGUg
PSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgcHJvdG90eXBlLT5zZXRUeXBlKGZ1bmN0
aW9uLmdldFJldHVyblR5cGUoKSk7CisgICAgICAgIHByb3RvdHlwZS0+c2V0TmFtZShmdW5jdGlv
bi5nZXROYW1lKCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmdW5j
dGlvbi5nZXRQYXJhbUNvdW50KCk7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3Qg
VFBhcmFtZXRlciAmcGFyYW0gPSBmdW5jdGlvbi5nZXRQYXJhbShpKTsKKyAgICAgICAgICAgIGlm
IChwYXJhbS5uYW1lICE9IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgVFZhcmlh
YmxlICp2YXJpYWJsZSA9IG5ldyBUVmFyaWFibGUocGFyYW0ubmFtZSwgKnBhcmFtLnR5cGUpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHByb3RvdHlwZSA9IGNvbnRleHQtPmlu
dGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKHByb3RvdHlwZSwgY29udGV4dC0+aW50ZXJtZWRpYXRl
LmFkZFN5bWJvbCh2YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwgdmFyaWFibGUtPmdldE5hbWUoKSwg
dmFyaWFibGUtPmdldFR5cGUoKSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtKS5saW5lKSwgKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtKS5saW5lKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcm90b3R5cGUgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZShwcm90b3R5cGUsIGNvbnRleHQtPmludGVybWVk
aWF0ZS5hZGRTeW1ib2woMCwgIiIsICpwYXJhbS50eXBlLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRl
cm0pLmxpbmUpLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmxpbmUpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBwcm90b3R5cGUtPnNldE9wKEVPcFByb3Rv
dHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBwcm90b3R5cGU7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDcyOgorCisgICAgeworICAgICAgICBpZiAoKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUpCisgICAgICAgICAgICAoeXl2
c3BbKDEpIC0gKDIpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZS0+c2V0T3AoRU9wRGVjbGFyYXRp
b24pOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGU7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDczOgorCisgICAgeworICAgICAgICBjb250ZXh0LT5zeW1ib2xUYWJsZS5zZXREZWZhdWx0UHJl
Y2lzaW9uKCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRlcm0udHlwZSkudHlwZSwgKHl5dnNwWygyKSAt
ICg0KV0uaW50ZXJtLnByZWNpc2lvbikgKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1O
b2RlKSA9IDA7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDc0OgorCisgICAgeworICAg
ICAgICAvLworICAgICAgICAvLyBNdWx0aXBsZSBkZWNsYXJhdGlvbnMgb2YgdGhlIHNhbWUgZnVu
Y3Rpb24gYXJlIGFsbG93ZWQuCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHRoaXMgaXMgYSBk
ZWZpbml0aW9uLCB0aGUgZGVmaW5pdGlvbiBwcm9kdWN0aW9uIGNvZGUgd2lsbCBjaGVjayBmb3Ig
cmVkZWZpbml0aW9ucworICAgICAgICAvLyAod2UgZG9uJ3Qga25vdyBhdCB0aGlzIHBvaW50IGlm
IGl0J3MgYSBkZWZpbml0aW9uIG9yIG5vdCkuCisgICAgICAgIC8vCisgICAgICAgIC8vIFJlZGVj
bGFyYXRpb25zIGFyZSBhbGxvd2VkLiAgQnV0LCByZXR1cm4gdHlwZXMgYW5kIHBhcmFtZXRlciBx
dWFsaWZpZXJzIG11c3QgbWF0Y2guCisgICAgICAgIC8vCisgICAgICAgIFRGdW5jdGlvbiogcHJl
dkRlYyA9IHN0YXRpY19jYXN0PFRGdW5jdGlvbio+KGNvbnRleHQtPnN5bWJvbFRhYmxlLmZpbmQo
KHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0TWFuZ2xlZE5hbWUoKSkpOwor
ICAgICAgICBpZiAocHJldkRlYykgeworICAgICAgICAgICAgaWYgKHByZXZEZWMtPmdldFJldHVy
blR5cGUoKSAhPSAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5U
eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIp
XS5sZXgpLmxpbmUsICJvdmVybG9hZGVkIGZ1bmN0aW9ucyBtdXN0IGhhdmUgdGhlIHNhbWUgcmV0
dXJuIHR5cGUiLCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pLT5nZXRSZXR1cm5U
eXBlKCkuZ2V0QmFzaWNTdHJpbmcoKSwgIiIpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cHJldkRlYy0+Z2V0UGFyYW1Db3VudCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJl
dkRlYy0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkgIT0gKHl5dnNwWygxKSAtICgy
KV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UGFyYW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0ubGV4
KS5saW5lLCAib3ZlcmxvYWRlZCBmdW5jdGlvbnMgbXVzdCBoYXZlIHRoZSBzYW1lIHBhcmFtZXRl
ciBxdWFsaWZpZXJzIiwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+Z2V0UGFy
YW0oaSkudHlwZS0+Z2V0UXVhbGlmaWVyU3RyaW5nKCksICIiKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIC8vCisgICAgICAgIC8vIElmIHRoaXMgaXMgYSByZWRlY2xh
cmF0aW9uLCBpdCBjb3VsZCBhbHNvIGJlIGEgZGVmaW5pdGlvbiwKKyAgICAgICAgLy8gaW4gd2hp
Y2ggY2FzZSwgd2Ugd2FudCB0byB1c2UgdGhlIHZhcmlhYmxlIG5hbWVzIGZyb20gdGhpcyBvbmUs
IGFuZCBub3QgdGhlIG9uZSB0aGF0J3MKKyAgICAgICAgLy8gYmVpbmcgcmVkZWNsYXJlZC4gIFNv
LCBwYXNzIGJhY2sgdXAgdGhpcyBkZWNsYXJhdGlvbiwgbm90IHRoZSBvbmUgaW4gdGhlIHN5bWJv
bCB0YWJsZS4KKyAgICAgICAgLy8KKyAgICAgICAgKHl5dmFsLmludGVybSkuZnVuY3Rpb24gPSAo
eXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgICAgICAoeXl2YWwuaW50ZXJt
KS5saW5lID0gKHl5dnNwWygyKSAtICgyKV0ubGV4KS5saW5lOworCisgICAgICAgIGNvbnRleHQt
PnN5bWJvbFRhYmxlLmluc2VydCgqKHl5dmFsLmludGVybSkuZnVuY3Rpb24pOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA3NToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5m
dW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA3NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5m
dW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSA3NzoKKworICAgIHsKKyAgICAgICAgLy8gQWRkIHRoZSBwYXJh
bWV0ZXIKKyAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0uZnVuY3Rpb24pOworICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJt
KS5wYXJhbS50eXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKQorICAgICAgICAgICAgKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLmZ1bmN0aW9uKS0+YWRkUGFyYW1ldGVyKCh5eXZzcFsoMikg
LSAoMildLmludGVybSkucGFyYW0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBkZWxldGUg
KHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbS50eXBlOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSA3ODoKKworICAgIHsKKyAgICAgICAgLy8KKyAgICAgICAgLy8gT25seSBmaXJz
dCBwYXJhbWV0ZXIgb2Ygb25lLXBhcmFtZXRlciBmdW5jdGlvbnMgY2FuIGJlIHZvaWQKKyAgICAg
ICAgLy8gVGhlIGNoZWNrIGZvciBuYW1lZCBwYXJhbWV0ZXJzIG5vdCBiZWluZyB2b2lkIGlzIGRv
bmUgaW4gcGFyYW1ldGVyX2RlY2xhcmF0b3IKKyAgICAgICAgLy8KKyAgICAgICAgaWYgKCh5eXZz
cFsoMykgLSAoMyldLmludGVybSkucGFyYW0udHlwZS0+Z2V0QmFzaWNUeXBlKCkgPT0gRWJ0Vm9p
ZCkgeworICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIFRoaXMgcGFyYW1ldGVyID4gZmly
c3QgaXMgdm9pZAorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5
eXZzcFsoMikgLSAoMyldLmxleCkubGluZSwgImNhbm5vdCBiZSBhbiBhcmd1bWVudCB0eXBlIGV4
Y2VwdCBmb3IgJyh2b2lkKSciLCAidm9pZCIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgICAgIGRlbGV0ZSAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0pLnBh
cmFtLnR5cGU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBBZGQgdGhlIHBhcmFt
ZXRlcgorICAgICAgICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSAoeXl2c3BbKDEpIC0g
KDMpXS5pbnRlcm0uZnVuY3Rpb24pOworICAgICAgICAgICAgKHl5dnNwWygxKSAtICgzKV0uaW50
ZXJtLmZ1bmN0aW9uKS0+YWRkUGFyYW1ldGVyKCh5eXZzcFsoMykgLSAoMyldLmludGVybSkucGFy
YW0pOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDc5OgorCisgICAg
eworICAgICAgICBpZiAoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciAh
PSBFdnFHbG9iYWwgJiYgKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciAh
PSBFdnFUZW1wb3JhcnkpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMikg
LSAoMyldLmxleCkubGluZSwgIm5vIHF1YWxpZmllcnMgYWxsb3dlZCBmb3IgZnVuY3Rpb24gcmV0
dXJuIiwgZ2V0UXVhbGlmaWVyU3RyaW5nKCh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKS5x
dWFsaWZpZXIpLCAiIik7CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAg
IH0KKyAgICAgICAgLy8gbWFrZSBzdXJlIGEgc2FtcGxlciBpcyBub3QgaW52b2x2ZWQgYXMgd2Vs
bC4uLgorICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2
c3BbKDIpIC0gKDMpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkp
CisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgLy8gQWRkIHRoZSBm
dW5jdGlvbiBhcyBhIHByb3RvdHlwZSBhZnRlciBwYXJzaW5nIGl0ICh3ZSBkbyBub3Qgc3VwcG9y
dCByZWN1cnNpb24pCisgICAgICAgIFRGdW5jdGlvbiAqZnVuY3Rpb247CisgICAgICAgIFRUeXBl
IHR5cGUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpKTsKKyAgICAgICAgZnVuY3Rpb24g
PSBuZXcgVEZ1bmN0aW9uKCh5eXZzcFsoMikgLSAoMyldLmxleCkuc3RyaW5nLCB0eXBlKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybS5mdW5jdGlvbikgPSBmdW5jdGlvbjsKKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgODA6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDEpIC0gKDIp
XS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRWb2lkKSB7CisgICAgICAgICAgICBjb250ZXh0LT5l
cnJvcigoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICJpbGxlZ2FsIHVzZSBvZiB0eXBlICd2
b2lkJyIsICh5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLT5jX3N0cigpLCAiIik7CisgICAg
ICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGNvbnRl
eHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICooeXl2
c3BbKDIpIC0gKDIpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgIFRQYXJhbWV0ZXIgcGFyYW0gPSB7KHl5dnNwWygyKSAtICgyKV0ubGV4KS5z
dHJpbmcsIG5ldyBUVHlwZSgoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkpfTsKKyAgICAg
ICAgKHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZTsKKyAg
ICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgODE6CisKKyAgICB7CisgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIG1ha2Ug
YW4gYXJyYXkgb3V0IG9mIHRoaXMgdHlwZQorICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBl
RXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNSld
LmludGVybS50eXBlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAg
ICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDUpXS5sZXgp
LmxpbmUsICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaW50IHNpemU7CisgICAgICAgIGlmIChjb250ZXh0
LT5hcnJheVNpemVFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKHl5dnNw
Wyg0KSAtICg1KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0udHlw
ZSkuc2V0QXJyYXkodHJ1ZSwgc2l6ZSk7CisKKyAgICAgICAgVFR5cGUqIHR5cGUgPSBuZXcgVFR5
cGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKTsKKyAgICAgICAgVFBhcmFtZXRlciBw
YXJhbSA9IHsgKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsIHR5cGUgfTsKKyAgICAgICAg
KHl5dmFsLmludGVybSkubGluZSA9ICh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZTsKKyAgICAg
ICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKKyAgICA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgODI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNwWygzKSAt
ICgzKV0uaW50ZXJtKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnBhcmFtRXJyb3JDaGVjaygoeXl2
c3BbKDMpIC0gKDMpXS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBl
KS5xdWFsaWZpZXIsICh5eXZzcFsoMikgLSAoMyldLmludGVybS5xdWFsaWZpZXIpLCAoeXl2YWwu
aW50ZXJtKS5wYXJhbS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODM6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5p
bnRlcm0pID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKTsKKyAgICAgICAgaWYgKGNvbnRleHQt
PnBhcmFtZXRlclNhbXBsZXJFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmludGVybSkubGlu
ZSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICooeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0pLnBhcmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICBpZiAoY29udGV4dC0+cGFyYW1FcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMildLmlu
dGVybSkubGluZSwgRXZxVGVtcG9yYXJ5LCAoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0ucXVhbGlm
aWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDg0OgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMykgLSAoMyldLmludGVybSk7CisgICAgICAg
IGlmIChjb250ZXh0LT5wYXJhbUVycm9yQ2hlY2soKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtKS5s
aW5lLCAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyLCAoeXl2c3BbKDIp
IC0gKDMpXS5pbnRlcm0ucXVhbGlmaWVyKSwgKHl5dmFsLmludGVybSkucGFyYW0udHlwZSkpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDg1OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtKSA9ICh5eXZzcFsoMikgLSAo
MildLmludGVybSk7CisgICAgICAgIGlmIChjb250ZXh0LT5wYXJhbWV0ZXJTYW1wbGVyRXJyb3JD
aGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUsICh5eXZzcFsoMSkgLSAoMildLmlu
dGVybS5xdWFsaWZpZXIpLCAqKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtKS5wYXJhbS50eXBlKSkK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnBh
cmFtRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0pLmxpbmUsIEV2cVRlbXBvcmFy
eSwgKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnF1YWxpZmllciksICh5eXZhbC5pbnRlcm0pLnBh
cmFtLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSA4NjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5xdWFs
aWZpZXIpID0gRXZxSW47CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDg3OgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtLnF1YWxpZmllcikgPSBFdnFJbjsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgODg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucXVh
bGlmaWVyKSA9IEV2cU91dDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgODk6CisKKyAg
ICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0ucXVhbGlmaWVyKSA9IEV2cUluT3V0OworICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSA5MDoKKworICAgIHsKKyAgICAgICAgVFBhcmFtZXRlciBw
YXJhbSA9IHsgMCwgbmV3IFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSkgfTsK
KyAgICAgICAgKHl5dmFsLmludGVybSkucGFyYW0gPSBwYXJhbTsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgOTE6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtKTsKKyAgICAgICAgCisgICAgICAgIGlmICgoeXl2YWwuaW50ZXJt
KS50eXBlLnByZWNpc2lvbiA9PSBFYnBVbmRlZmluZWQpIHsKKyAgICAgICAgICAgICh5eXZhbC5p
bnRlcm0pLnR5cGUucHJlY2lzaW9uID0gY29udGV4dC0+c3ltYm9sVGFibGUuZ2V0RGVmYXVsdFBy
ZWNpc2lvbigoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLnR5cGUudHlwZSk7CisgICAgICAgICAg
ICBpZiAoY29udGV4dC0+cHJlY2lzaW9uRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDEpXS5pbnRl
cm0pLmxpbmUsICh5eXZhbC5pbnRlcm0pLnR5cGUucHJlY2lzaW9uLCAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0pLnR5cGUudHlwZSkpIHsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgOTI6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMyldLmlu
dGVybSkuaW50ZXJtTm9kZSwgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5
dnNwWygzKSAtICgzKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bSkudHlwZSksICh5eXZzcFsoMykgLSAoMyldLmxleCkubGluZSksICh5eXZzcFsoMykgLSAoMyld
LmxleCkubGluZSk7CisgICAgICAgIAorICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlm
aWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDMpXS5sZXgpLmxpbmUsICh5eXZhbC5pbnRlcm0p
LnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChj
b250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoMyldLmxleCkubGlu
ZSwgKih5eXZzcFsoMykgLSAoMyldLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJtKS50eXBlKSkK
KyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAoY29udGV4dC0+
bm9uSW5pdEVycm9yQ2hlY2soKHl5dnNwWygzKSAtICgzKV0ubGV4KS5saW5lLCAqKHl5dnNwWygz
KSAtICgzKV0ubGV4KS5zdHJpbmcsICh5eXZhbC5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAg
Y29udGV4dC0+cmVjb3ZlcigpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5MzoKKwor
ICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnN0cnVjdFF1YWxpZmllckVycm9yQ2hlY2soKHl5
dnNwWygzKSAtICg1KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUp
KQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgIGlmIChjb250ZXh0
LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKih5
eXZzcFsoMykgLSAoNSldLmxleCkuc3RyaW5nLCAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5
cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5eXZhbC5p
bnRlcm0pID0gKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKTsKKworICAgICAgICBpZiAoY29udGV4
dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXl2c3BbKDQpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZz
cFsoMSkgLSAoNSldLmludGVybSkudHlwZSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJv
ckNoZWNrKCh5eXZzcFsoNCkgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg1KV0uaW50
ZXJtKS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pLnR5cGUuc2V0QXJyYXko
dHJ1ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOworICAgICAgICAgICAgaWYg
KGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXl2c3BbKDQpIC0gKDUpXS5sZXgpLmxpbmUsICoo
eXl2c3BbKDMpIC0gKDUpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50
eXBlLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
ICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDk0OgorCisgICAgeworICAgICAg
ICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDYp
XS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCisgICAgICAgICAg
ICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25z
dEVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg2KV0ubGV4KS5saW5lLCAqKHl5dnNwWygzKSAtICg2
KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmludGVybSkudHlwZSkpCisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybSkgPSAoeXl2
c3BbKDEpIC0gKDYpXS5pbnRlcm0pOworCisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVR5cGVF
cnJvckNoZWNrKCh5eXZzcFsoNCkgLSAoNildLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg2KV0u
aW50ZXJtKS50eXBlKSB8fCBjb250ZXh0LT5hcnJheVF1YWxpZmllckVycm9yQ2hlY2soKHl5dnNw
Wyg0KSAtICg2KV0ubGV4KS5saW5lLCAoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLnR5cGUpKQor
ICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIGludCBzaXplOworICAgICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9yQ2hl
Y2soKHl5dnNwWyg0KSAtICg2KV0ubGV4KS5saW5lLCAoeXl2c3BbKDUpIC0gKDYpXS5pbnRlcm0u
aW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zl
cigpOworICAgICAgICAgICAgKHl5dnNwWygxKSAtICg2KV0uaW50ZXJtKS50eXBlLnNldEFycmF5
KHRydWUsIHNpemUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5dnNwWyg0KSAtICg2KV0ubGV4KS5s
aW5lLCAqKHl5dnNwWygzKSAtICg2KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNildLmlu
dGVybSkudHlwZSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgICAgIFRUeXBlIHR5cGUgPSBUVHlwZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRl
cm0pLnR5cGUpOworICAgICAgICAgICAgdHlwZS5zZXRBcnJheVNpemUoc2l6ZSk7CisgICAgICAg
ICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuZ3Jvd0FnZ3JlZ2F0ZSgoeXl2c3BbKDEpIC0gKDYpXS5pbnRlcm0pLmludGVybU5vZGUsIGNv
bnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2woMCwgKih5eXZzcFsoMykgLSAoNildLmxleCku
c3RyaW5nLCB0eXBlLCAoeXl2c3BbKDMpIC0gKDYpXS5sZXgpLmxpbmUpLCAoeXl2c3BbKDMpIC0g
KDYpXS5sZXgpLmxpbmUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDk1OgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JD
aGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNSldLmludGVy
bSkudHlwZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5
dmFsLmludGVybSkgPSAoeXl2c3BbKDEpIC0gKDUpXS5pbnRlcm0pOworCisgICAgICAgIFRJbnRl
cm1Ob2RlKiBpbnRlcm1Ob2RlOworICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFs
aXplcigoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICooeXl2c3BbKDMpIC0gKDUpXS5sZXgp
LnN0cmluZywgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtKS50eXBlLCAoeXl2c3BbKDUpIC0gKDUp
XS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSkpIHsKKyAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAvLyBidWlsZCB0aGUgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisg
ICAgICAgICAgICAvLworICAgICAgICAgICAgaWYgKGludGVybU5vZGUpCisgICAgICAgICh5eXZh
bC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdn
cmVnYXRlKCh5eXZzcFsoMSkgLSAoNSldLmludGVybSkuaW50ZXJtTm9kZSwgaW50ZXJtTm9kZSwg
KHl5dnNwWyg0KSAtICg1KV0ubGV4KS5saW5lKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAoeXl2YWwuaW50ZXJtKS5pbnRlcm1BZ2dyZWdhdGUgPSAoeXl2c3BbKDEpIC0gKDUp
XS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFn
Z3JlZ2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgOTY6
CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLnR5cGUgPSAoeXl2c3BbKDEpIC0gKDEp
XS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGNvbnRleHQtPmludGVybWVkaWF0
ZS5hZGRTeW1ib2woMCwgIiIsIFRUeXBlKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKSks
ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lKSwgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLnR5cGUpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5NzoKKwor
ICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+
aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJv
bCgwLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAo
MildLmludGVybS50eXBlKSksICh5eXZzcFsoMikgLSAoMildLmxleCkubGluZSksICh5eXZzcFso
MikgLSAoMildLmxleCkubGluZSk7CisgICAgICAgIAorICAgICAgICBpZiAoY29udGV4dC0+c3Ry
dWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDIpXS5sZXgpLmxpbmUsICh5eXZh
bC5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAg
ICAgIGlmIChjb250ZXh0LT5ub25Jbml0Q29uc3RFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoMild
LmxleCkubGluZSwgKih5eXZzcFsoMikgLSAoMildLmxleCkuc3RyaW5nLCAoeXl2YWwuaW50ZXJt
KS50eXBlKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVy
bS50eXBlKTsKKworICAgICAgICBpZiAoY29udGV4dC0+bm9uSW5pdEVycm9yQ2hlY2soKHl5dnNw
WygyKSAtICgyKV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICgyKV0ubGV4KS5zdHJpbmcsICh5
eXZhbC5pbnRlcm0pLnR5cGUpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAg
IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSA5ODoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmlu
dGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VBZ2dyZWdh
dGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAtICg0KV0u
bGV4KS5zdHJpbmcsIFRUeXBlKCh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSksICh5eXZz
cFsoMikgLSAoNCldLmxleCkubGluZSksICh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoY29udGV4dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygo
eXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBl
KSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRl
eHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAq
KHl5dnNwWygyKSAtICg0KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50
eXBlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFs
LmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKTsKKworICAgICAg
ICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDQpXS5sZXgp
LmxpbmUsICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKSkgfHwgY29udGV4dC0+YXJyYXlR
dWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMykgLSAoNCldLmxleCkubGluZSwgKHl5dnNwWygx
KSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAoeXl2c3BbKDEpIC0gKDQpXS5pbnRlcm0udHlw
ZSkuc2V0QXJyYXkodHJ1ZSk7CisgICAgICAgICAgICBUVmFyaWFibGUqIHZhcmlhYmxlOworICAg
ICAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5RXJyb3JDaGVjaygoeXl2c3BbKDMpIC0gKDQpXS5s
ZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg0
KV0uaW50ZXJtLnR5cGUpLCB2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+cmVj
b3ZlcigpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDk5OgorCisg
ICAgeworICAgICAgICBUVHlwZSB0eXBlID0gVFR5cGUoKHl5dnNwWygxKSAtICg1KV0uaW50ZXJt
LnR5cGUpKTsKKyAgICAgICAgaW50IHNpemU7CisgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNp
emVFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWyg0KSAtICg1
KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAgICAgICAgY29udGV4dC0+
cmVjb3ZlcigpOworICAgICAgICB0eXBlLnNldEFycmF5U2l6ZShzaXplKTsKKyAgICAgICAgKHl5
dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLm1ha2VB
Z2dyZWdhdGUoY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCgwLCAqKHl5dnNwWygyKSAt
ICg1KV0ubGV4KS5zdHJpbmcsIHR5cGUsICh5eXZzcFsoMikgLSAoNSldLmxleCkubGluZSksICh5
eXZzcFsoMikgLSAoNSldLmxleCkubGluZSk7CisgICAgICAgIAorICAgICAgICBpZiAoY29udGV4
dC0+c3RydWN0UXVhbGlmaWVyRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLmxpbmUs
ICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5y
ZWNvdmVyKCk7CisKKyAgICAgICAgaWYgKGNvbnRleHQtPm5vbkluaXRDb25zdEVycm9yQ2hlY2so
KHl5dnNwWygyKSAtICg1KV0ubGV4KS5saW5lLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJp
bmcsICh5eXZzcFsoMSkgLSAoNSldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CisKKyAgICAgICAgKHl5dmFsLmludGVybSkudHlwZSA9ICh5eXZzcFsoMSkg
LSAoNSldLmludGVybS50eXBlKTsKKworICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJy
b3JDaGVjaygoeXl2c3BbKDMpIC0gKDUpXS5sZXgpLmxpbmUsICh5eXZzcFsoMSkgLSAoNSldLmlu
dGVybS50eXBlKSkgfHwgY29udGV4dC0+YXJyYXlRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFso
MykgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpKSkKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBpbnQgc2l6ZTsKKyAgICAgICAgICAgIGlmIChjb250ZXh0LT5hcnJheVNpemVFcnJvckNoZWNr
KCh5eXZzcFsoMykgLSAoNSldLmxleCkubGluZSwgKHl5dnNwWyg0KSAtICg1KV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSksIHNpemUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKworICAgICAgICAgICAgKHl5dnNwWygxKSAtICg1KV0uaW50ZXJtLnR5cGUpLnNldEFycmF5
KHRydWUsIHNpemUpOworICAgICAgICAgICAgVFZhcmlhYmxlKiB2YXJpYWJsZTsKKyAgICAgICAg
ICAgIGlmIChjb250ZXh0LT5hcnJheUVycm9yQ2hlY2soKHl5dnNwWygzKSAtICg1KV0ubGV4KS5s
aW5lLCAqKHl5dnNwWygyKSAtICg1KV0ubGV4KS5zdHJpbmcsICh5eXZzcFsoMSkgLSAoNSldLmlu
dGVybS50eXBlKSwgdmFyaWFibGUpKQorICAgICAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIo
KTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMDA6CisKKyAgICB7
CisgICAgICAgIGlmIChjb250ZXh0LT5zdHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFso
MikgLSAoNCldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAg
ICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICAoeXl2YWwuaW50ZXJtKS50
eXBlID0gKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpOworCisgICAgICAgIFRJbnRlcm1O
b2RlKiBpbnRlcm1Ob2RlOworICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJbml0aWFsaXpl
cigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDQpXS5sZXgpLnN0
cmluZywgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLCAoeXl2c3BbKDQpIC0gKDQpXS5p
bnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSkpIHsKKyAgICAgICAgLy8KKyAgICAg
ICAgLy8gQnVpbGQgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uCisgICAgICAgIC8vCisgICAg
ICAgICAgICBpZihpbnRlcm1Ob2RlKQorICAgICAgICAgICAgICAgICh5eXZhbC5pbnRlcm0pLmlu
dGVybUFnZ3JlZ2F0ZSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5tYWtlQWdncmVnYXRlKGludGVy
bU5vZGUsICh5eXZzcFsoMykgLSAoNCldLmxleCkubGluZSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgICAg
ICh5eXZhbC5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IDA7CisgICAgICAgIH0KKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTAxOgorCisgICAgeworICAgICAgICBWRVJURVhfT05MWSgi
aW52YXJpYW50IGRlY2xhcmF0aW9uIiwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKKyAg
ICAgICAgKHl5dmFsLmludGVybSkucXVhbGlmaWVyID0gRXZxSW52YXJpYW50VmFyeWluZ091dDsK
KyAgICAgICAgKHl5dmFsLmludGVybSkuaW50ZXJtQWdncmVnYXRlID0gMDsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTAyOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOworCisgICAgICAgIGlmICgoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkuYXJyYXkpIHsKKyAgICAgICAgICAgIGNvbnRleHQt
PmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5saW5lLCAibm90IHN1cHBvcnRl
ZCIsICJmaXJzdC1jbGFzcyBhcnJheSIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgICAgICh5eXZzcFsoMSkgLSAoMSldLmludGVybS50eXBlKS5zZXRBcnJh
eShmYWxzZSk7CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTAzOgor
CisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLmFycmF5
KSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0u
dHlwZSkubGluZSwgIm5vdCBzdXBwb3J0ZWQiLCAiZmlyc3QtY2xhc3MgYXJyYXkiLCAiIik7Cisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2c3BbKDIpIC0g
KDIpXS5pbnRlcm0udHlwZSkuc2V0QXJyYXkoZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKCh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFsaWZpZXIgPT0gRXZxQXR0cmli
dXRlICYmCisgICAgICAgICAgICAoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUg
PT0gRWJ0Qm9vbCB8fCAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSkudHlwZSA9PSBFYnRJ
bnQpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDIpXS5pbnRl
cm0udHlwZSkubGluZSwgImNhbm5vdCBiZSBib29sIG9yIGludCIsIGdldFF1YWxpZmllclN0cmlu
ZygoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0udHlwZSkucXVhbGlmaWVyKSwgIiIpOworICAgICAg
ICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgICAgIGlmICgoKHl5dnNw
WygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nSW4gfHwgKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciA9PSBFdnFWYXJ5aW5nT3V0KSAm
JgorICAgICAgICAgICAgKCh5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlKS50eXBlID09IEVi
dEJvb2wgfHwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpLnR5cGUgPT0gRWJ0SW50KSkg
eworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5
cGUpLmxpbmUsICJjYW5ub3QgYmUgYm9vbCBvciBpbnQiLCBnZXRRdWFsaWZpZXJTdHJpbmcoKHl5
dnNwWygxKSAtICgyKV0uaW50ZXJtLnR5cGUpLnF1YWxpZmllciksICIiKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpID0gKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGUpOworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnF1YWxpZmllciA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS50eXBlKS5xdWFs
aWZpZXI7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwNDoKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFDb25zdCwgKHl5dnNw
WygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTA1
OgorCisgICAgeworICAgICAgICBWRVJURVhfT05MWSgiYXR0cmlidXRlIiwgKHl5dnNwWygxKSAt
ICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2so
KHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2Jh
bExldmVsKCksICJhdHRyaWJ1dGUiKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRWb2lkLCBFdnFBdHRyaWJ1
dGUsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDEwNjoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmdsb2JhbEVycm9yQ2hl
Y2soKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEds
b2JhbExldmVsKCksICJ2YXJ5aW5nIikpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgIGlmIChjb250ZXh0LT5zaGFkZXJUeXBlID09IFNIX1ZFUlRFWF9TSEFERVIpCisg
ICAgICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIEV2cVZhcnlp
bmdPdXQsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwgRXZxVmFyeWluZ0lu
LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAg
Y2FzZSAxMDc6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5nbG9iYWxFcnJvckNoZWNr
KCh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSwgY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpLCAiaW52YXJpYW50IHZhcnlpbmciKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJl
Y292ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPnNoYWRlclR5cGUgPT0gU0hfVkVSVEVYX1NI
QURFUikKKyAgICAgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Vm9pZCwg
RXZxSW52YXJpYW50VmFyeWluZ091dCwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRW
b2lkLCBFdnFJbnZhcmlhbnRWYXJ5aW5nSW4sICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEwODoKKworICAgIHsKKyAgICAgICAgaWYg
KGNvbnRleHQtPmdsb2JhbEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCksICJ1bmlmb3JtIikpCisgICAgICAg
ICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0
QmFzaWMoRWJ0Vm9pZCwgRXZxVW5pZm9ybSwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsK
KyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTA5OgorCisgICAgeworICAgICAgICAoeXl2
YWwuaW50ZXJtLnR5cGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLnR5cGUpOworICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0udHlwZSkgPSAoeXl2c3BbKDIpIC0gKDIpXS5pbnRlcm0udHlwZSk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkucHJlY2lzaW9uID0gKHl5dnNwWygxKSAtICgyKV0uaW50ZXJtLnByZWNp
c2lvbik7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDExMToKKworICAgIHsKKyAgICAg
ICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwSGlnaDsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMTEyOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnByZWNpc2lv
bikgPSBFYnBNZWRpdW07CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDExMzoKKworICAg
IHsKKyAgICAgICAgKHl5dmFsLmludGVybS5wcmVjaXNpb24pID0gRWJwTG93OworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxMTQ6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDExNToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKSA9
ICh5eXZzcFsoMSkgLSAoNCldLmludGVybS50eXBlKTsKKworICAgICAgICBpZiAoY29udGV4dC0+
YXJyYXlUeXBlRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICh5eXZzcFso
MSkgLSAoNCldLmludGVybS50eXBlKSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50IHNpemU7CisgICAgICAgICAgICBpZiAo
Y29udGV4dC0+YXJyYXlTaXplRXJyb3JDaGVjaygoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUs
ICh5eXZzcFsoMykgLSAoNCldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpLCBzaXplKSkKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEFycmF5KHRydWUsIHNpemUpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVh
azsKKworICBjYXNlIDExNjoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29u
dGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9y
YXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFZvaWQsIHF1YWws
ICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDExNzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3lt
Ym9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3Bb
KDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMTg6
CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRJbnQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSld
LmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDExOToKKworICAgIHsK
KyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxM
ZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJt
LnR5cGUpLnNldEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGlu
ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEyMDoKKworICAgIHsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidEZsb2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAg
ICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgyKTsKKyAgICA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTIxOgorCisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBj
b250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1w
b3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0RmxvYXQsIHF1
YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
dHlwZSkuc2V0QWdncmVnYXRlKDMpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxMjI6
CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQtPnN5bWJvbFRhYmxl
LmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsKKyAgICAgICAgKHl5
dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVhbCwgKHl5dnNwWygxKSAtICgx
KV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUo
NCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEyMzoKKworICAgIHsKKyAgICAgICAg
VFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8g
RXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNl
dEJhc2ljKEVidEJvb2wsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIpOworICAgIDt9CisgICAgYnJl
YWs7CisKKyAgY2FzZSAxMjQ6CisKKyAgICB7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRCb29sLCBxdWFs
LCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5
cGUpLnNldEFnZ3JlZ2F0ZSgzKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTI1Ogor
CisgICAgeworICAgICAgICBUUXVhbGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5h
dEdsb2JhbExldmVsKCkgPyBFdnFHbG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZh
bC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0Qm9vbCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0u
bGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEyNjoKKworICAgIHsKKyAgICAgICAgVFF1
YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZx
R2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJh
c2ljKEVidEludCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAg
KHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoMik7CisgICAgO30KKyAgICBicmVhazsK
KworICBjYXNlIDEyNzoKKworICAgIHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4
dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5
OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5
dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5z
ZXRBZ2dyZWdhdGUoMyk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEyODoKKworICAg
IHsKKyAgICAgICAgVFF1YWxpZmllciBxdWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9i
YWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50
ZXJtLnR5cGUpLnNldEJhc2ljKEVidEludCwgcXVhbCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5s
aW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRBZ2dyZWdhdGUoNCk7CisgICAg
O30KKyAgICBicmVhazsKKworICBjYXNlIDEyOToKKworICAgIHsKKyAgICAgICAgRlJBR19WRVJU
X09OTFkoIm1hdDIiLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICBUUXVh
bGlmaWVyIHF1YWwgPSBjb250ZXh0LT5zeW1ib2xUYWJsZS5hdEdsb2JhbExldmVsKCkgPyBFdnFH
bG9iYWwgOiBFdnFUZW1wb3Jhcnk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFz
aWMoRWJ0RmxvYXQsIHF1YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QWdncmVnYXRlKDIsIHRydWUpOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMzA6CisKKyAgICB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJt
YXQzIiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgVFF1YWxpZmllciBx
dWFsID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDog
RXZxVGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidEZs
b2F0LCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgICAgICAoeXl2YWwu
aW50ZXJtLnR5cGUpLnNldEFnZ3JlZ2F0ZSgzLCB0cnVlKTsKKyAgICA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTMxOgorCisgICAgeworICAgICAgICBGUkFHX1ZFUlRfT05MWSgibWF0NCIsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNv
bnRleHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBv
cmFyeTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRGbG9hdCwgcXVh
bCwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50
eXBlKS5zZXRBZ2dyZWdhdGUoNCwgdHJ1ZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNl
IDEzMjoKKworICAgIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXIyRCIsICh5eXZz
cFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRl
eHQtPnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFy
eTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTYW1wbGVyMkQsIHF1
YWwsICh5eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsKKwor
ICBjYXNlIDEzMzoKKworICAgIHsKKyAgICAgICAgRlJBR19WRVJUX09OTFkoInNhbXBsZXJDdWJl
IiwgKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lKTsKKyAgICAgICAgVFF1YWxpZmllciBxdWFs
ID0gY29udGV4dC0+c3ltYm9sVGFibGUuYXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZx
VGVtcG9yYXJ5OworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGUpLnNldEJhc2ljKEVidFNhbXBs
ZXJDdWJlLCBxdWFsLCAoeXl2c3BbKDEpIC0gKDEpXS5sZXgpLmxpbmUpOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMzQ6CisKKyAgICB7CisgICAgICAgIEZSQUdfVkVSVF9PTkxZKCJz
dHJ1Y3QiLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSkubGluZSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0udHlwZSk7CisgICAg
ICAgICh5eXZhbC5pbnRlcm0udHlwZSkucXVhbGlmaWVyID0gY29udGV4dC0+c3ltYm9sVGFibGUu
YXRHbG9iYWxMZXZlbCgpID8gRXZxR2xvYmFsIDogRXZxVGVtcG9yYXJ5OworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxMzU6CisKKyAgICB7CisgICAgICAgIC8vCisgICAgICAgIC8vIFRo
aXMgaXMgZm9yIHVzZXIgZGVmaW5lZCB0eXBlIG5hbWVzLiAgVGhlIGxleGljYWwgcGhhc2UgbG9v
a2VkIHVwIHRoZQorICAgICAgICAvLyB0eXBlLgorICAgICAgICAvLworICAgICAgICBUVHlwZSYg
c3RydWN0dXJlID0gc3RhdGljX2Nhc3Q8VFZhcmlhYmxlKj4oKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5zeW1ib2wpLT5nZXRUeXBlKCk7CisgICAgICAgIFRRdWFsaWZpZXIgcXVhbCA9IGNvbnRleHQt
PnN5bWJvbFRhYmxlLmF0R2xvYmFsTGV2ZWwoKSA/IEV2cUdsb2JhbCA6IEV2cVRlbXBvcmFyeTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIHF1YWwsICh5
eXZzcFsoMSkgLSAoMSldLmxleCkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSku
dXNlckRlZiA9ICZzdHJ1Y3R1cmU7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDEzNjoK
KworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnJlc2VydmVkRXJyb3JDaGVjaygoeXl2c3Bb
KDIpIC0gKDUpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZykpCisg
ICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisKKyAgICAgICAgVFR5cGUqIHN0cnVjdHVy
ZSA9IG5ldyBUVHlwZSgoeXl2c3BbKDQpIC0gKDUpXS5pbnRlcm0udHlwZUxpc3QpLCAqKHl5dnNw
WygyKSAtICg1KV0ubGV4KS5zdHJpbmcpOworICAgICAgICBUVmFyaWFibGUqIHVzZXJUeXBlRGVm
ID0gbmV3IFRWYXJpYWJsZSgoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmluZywgKnN0cnVjdHVy
ZSwgdHJ1ZSk7CisgICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdXNl
clR5cGVEZWYpKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDIpIC0gKDUp
XS5sZXgpLmxpbmUsICJyZWRlZmluaXRpb24iLCAoeXl2c3BbKDIpIC0gKDUpXS5sZXgpLnN0cmlu
Zy0+Y19zdHIoKSwgInN0cnVjdCIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICB9CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZSkuc2V0QmFzaWMoRWJ0U3RydWN0
LCBFdnFUZW1wb3JhcnksICh5eXZzcFsoMSkgLSAoNSldLmxleCkubGluZSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZSkudXNlckRlZiA9IHN0cnVjdHVyZTsKKyAgICA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMTM3OgorCisgICAgeworICAgICAgICBUVHlwZSogc3RydWN0dXJlID0gbmV3
IFRUeXBlKCh5eXZzcFsoMykgLSAoNCldLmludGVybS50eXBlTGlzdCksIFRTdHJpbmcoIiIpKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlKS5zZXRCYXNpYyhFYnRTdHJ1Y3QsIEV2cVRlbXBv
cmFyeSwgKHl5dnNwWygxKSAtICg0KV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVy
bS50eXBlKS51c2VyRGVmID0gc3RydWN0dXJlOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxMzg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpc3QpID0gKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtLnR5cGVMaXN0KTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgMTM5OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9ICh5eXZz
cFsoMSkgLSAoMildLmludGVybS50eXBlTGlzdCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgKHl5dnNwWygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KS0+c2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgKHl5dmFsLmlu
dGVybS50eXBlTGlzdCktPnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKCgqKHl5
dmFsLmludGVybS50eXBlTGlzdCkpW2pdLnR5cGUtPmdldEZpZWxkTmFtZSgpID09ICgqKHl5dnNw
WygyKSAtICgyKV0uaW50ZXJtLnR5cGVMaXN0KSlbaV0udHlwZS0+Z2V0RmllbGROYW1lKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKCooeXl2c3BbKDIpIC0gKDIpXS5p
bnRlcm0udHlwZUxpc3QpKVtpXS5saW5lLCAiZHVwbGljYXRlIGZpZWxkIG5hbWUgaW4gc3RydWN0
dXJlOiIsICJzdHJ1Y3QiLCAoKih5eXZzcFsoMikgLSAoMildLmludGVybS50eXBlTGlzdCkpW2ld
LnR5cGUtPmdldEZpZWxkTmFtZSgpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICBjb250
ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hfYmFjaygoKih5eXZzcFsoMikgLSAo
MildLmludGVybS50eXBlTGlzdCkpW2ldKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxNDA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpc3Qp
ID0gKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnR5cGVMaXN0KTsKKworICAgICAgICBpZiAoY29u
dGV4dC0+dm9pZEVycm9yQ2hlY2soKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLmxpbmUs
ICgqKHl5dnNwWygyKSAtICgzKV0uaW50ZXJtLnR5cGVMaXN0KSlbMF0udHlwZS0+Z2V0RmllbGRO
YW1lKCksICh5eXZzcFsoMSkgLSAoMyldLmludGVybS50eXBlKSkpIHsKKyAgICAgICAgICAgIGNv
bnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8ICh5eXZhbC5pbnRlcm0udHlwZUxpc3QpLT5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIC8vIENhcmVmdWwgbm90IHRvIHJlcGxhY2UgYWxyZWFkeSBr
bm93biBhc3BlY3RzIG9mIHR5cGUsIGxpa2UgYXJyYXktbmVzcworICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgIFRUeXBlKiB0eXBlID0gKCooeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSlbaV0udHlw
ZTsKKyAgICAgICAgICAgIHR5cGUtPnNldEJhc2ljVHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRl
cm0udHlwZSkudHlwZSk7CisgICAgICAgICAgICB0eXBlLT5zZXROb21pbmFsU2l6ZSgoeXl2c3Bb
KDEpIC0gKDMpXS5pbnRlcm0udHlwZSkuc2l6ZSk7CisgICAgICAgICAgICB0eXBlLT5zZXRNYXRy
aXgoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLm1hdHJpeCk7CisKKyAgICAgICAgICAg
IC8vIGRvbid0IGFsbG93IGFycmF5cyBvZiBhcnJheXMKKyAgICAgICAgICAgIGlmICh0eXBlLT5p
c0FycmF5KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29udGV4dC0+YXJyYXlUeXBlRXJyb3JD
aGVjaygoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0udHlwZSkubGluZSwgKHl5dnNwWygxKSAtICgz
KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+cmVjb3Zlcigp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCh5eXZzcFsoMSkgLSAoMyldLmludGVy
bS50eXBlKS5hcnJheSkKKyAgICAgICAgICAgICAgICB0eXBlLT5zZXRBcnJheVNpemUoKHl5dnNw
WygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLmFycmF5U2l6ZSk7CisgICAgICAgICAgICBpZiAoKHl5
dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYpIHsKKyAgICAgICAgICAgICAgICB0
eXBlLT5zZXRTdHJ1Y3QoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtLnR5cGUpLnVzZXJEZWYtPmdl
dFN0cnVjdCgpKTsKKyAgICAgICAgICAgICAgICB0eXBlLT5zZXRUeXBlTmFtZSgoeXl2c3BbKDEp
IC0gKDMpXS5pbnRlcm0udHlwZSkudXNlckRlZi0+Z2V0VHlwZU5hbWUoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQxOgorCisgICAg
eworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KSA9IE5ld1Bvb2xUVHlwZUxpc3QoKTsK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGlzdCktPnB1c2hfYmFjaygoeXl2c3BbKDEpIC0g
KDEpXS5pbnRlcm0udHlwZUxpbmUpKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQy
OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaXN0KS0+cHVzaF9iYWNrKCh5
eXZzcFsoMykgLSAoMyldLmludGVybS50eXBlTGluZSkpOworICAgIDt9CisgICAgYnJlYWs7CisK
KyAgY2FzZSAxNDM6CisKKyAgICB7CisgICAgICAgIGlmIChjb250ZXh0LT5yZXNlcnZlZEVycm9y
Q2hlY2soKHl5dnNwWygxKSAtICgxKV0ubGV4KS5saW5lLCAqKHl5dnNwWygxKSAtICgxKV0ubGV4
KS5zdHJpbmcpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOworCisgICAgICAgICh5
eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUgPSBuZXcgVFR5cGUoRWJ0Vm9pZCwgRWJwVW5kZWZp
bmVkKTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGluZSkubGluZSA9ICh5eXZzcFsoMSkg
LSAoMSldLmxleCkubGluZTsKKyAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGluZSkudHlwZS0+
c2V0RmllbGROYW1lKCooeXl2c3BbKDEpIC0gKDEpXS5sZXgpLnN0cmluZyk7CisgICAgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDE0NDoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPnJl
c2VydmVkRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDQpXS5sZXgpLmxpbmUsICooeXl2c3BbKDEp
IC0gKDQpXS5sZXgpLnN0cmluZykpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisK
KyAgICAgICAgKHl5dmFsLmludGVybS50eXBlTGluZSkudHlwZSA9IG5ldyBUVHlwZShFYnRWb2lk
LCBFYnBVbmRlZmluZWQpOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVMaW5lKS5saW5lID0g
KHl5dnNwWygxKSAtICg0KV0ubGV4KS5saW5lOworICAgICAgICAoeXl2YWwuaW50ZXJtLnR5cGVM
aW5lKS50eXBlLT5zZXRGaWVsZE5hbWUoKih5eXZzcFsoMSkgLSAoNCldLmxleCkuc3RyaW5nKTsK
KworICAgICAgICBpbnQgc2l6ZTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmFycmF5U2l6ZUVycm9y
Q2hlY2soKHl5dnNwWygyKSAtICg0KV0ubGV4KS5saW5lLCAoeXl2c3BbKDMpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKSwgc2l6ZSkpCisgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVy
KCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0udHlwZUxpbmUpLnR5cGUtPnNldEFycmF5U2l6ZShz
aXplKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ1OgorCisgICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJt
VHlwZWROb2RlKTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE0NjoKKworICAgIHsgKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2Rl
KTsgO30KKyAgICBicmVhazsKKworICBjYXNlIDE0NzoKKworICAgIHsgKHl5dmFsLmludGVybS5p
bnRlcm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpOyA7
fQorICAgIGJyZWFrOworCisgIGNhc2UgMTQ4OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVy
bU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJy
ZWFrOworCisgIGNhc2UgMTQ5OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0g
KHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisg
IGNhc2UgMTUwOgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygx
KSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTUx
OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtLmludGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTUyOgorCisgICAg
eyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybU5vZGUpOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTUzOgorCisgICAgeyAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUp
OyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU0OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmlu
dGVybUFnZ3JlZ2F0ZSkgPSAwOyA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTU1OgorCisgICAg
eyBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
NTY6CisKKyAgICB7IGNvbnRleHQtPnN5bWJvbFRhYmxlLnBvcCgpOyA7fQorICAgIGJyZWFrOwor
CisgIGNhc2UgMTU3OgorCisgICAgeworICAgICAgICBpZiAoKHl5dnNwWygzKSAtICg1KV0uaW50
ZXJtLmludGVybUFnZ3JlZ2F0ZSkgIT0gMCkKKyAgICAgICAgICAgICh5eXZzcFsoMykgLSAoNSld
LmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLT5zZXRPcChFT3BTZXF1ZW5jZSk7CisgICAgICAgICh5
eXZhbC5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKSA9ICh5eXZzcFsoMykgLSAoNSldLmludGVybS5p
bnRlcm1BZ2dyZWdhdGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTg6CisKKyAg
ICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0u
aW50ZXJtTm9kZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNTk6CisKKyAgICB7ICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9k
ZSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjA6CisKKyAgICB7CisgICAgICAgICh5eXZh
bC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
NjE6CisKKyAgICB7CisgICAgICAgIGlmICgoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJt
QWdncmVnYXRlKSkKKyAgICAgICAgICAgICh5eXZzcFsoMikgLSAoMyldLmludGVybS5pbnRlcm1B
Z2dyZWdhdGUpLT5zZXRPcChFT3BTZXF1ZW5jZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50
ZXJtTm9kZSkgPSAoeXl2c3BbKDIpIC0gKDMpXS5pbnRlcm0uaW50ZXJtQWdncmVnYXRlKTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTYyOgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybUFnZ3JlZ2F0ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUubWFrZUFnZ3Jl
Z2F0ZSgoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSksIDApOworICAgIDt9Cisg
ICAgYnJlYWs7CisKKyAgY2FzZSAxNjM6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0u
aW50ZXJtQWdncmVnYXRlKSA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5
eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1BZ2dyZWdhdGUpLCAoeXl2c3BbKDIpIC0gKDIp
XS5pbnRlcm0uaW50ZXJtTm9kZSksIDApOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAx
NjQ6CisKKyAgICB7ICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSAwOyA7fQorICAgIGJyZWFr
OworCisgIGNhc2UgMTY1OgorCisgICAgeyAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gc3Rh
dGljX2Nhc3Q8VEludGVybU5vZGUqPigoeXl2c3BbKDEpIC0gKDIpXS5pbnRlcm0uaW50ZXJtVHlw
ZWROb2RlKSk7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjY6CisKKyAgICB7CisgICAgICAg
IGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXl2c3BbKDEpIC0gKDUpXS5sZXgpLmxpbmUs
ICh5eXZzcFsoMykgLSAoNSldLmludGVybS5pbnRlcm1UeXBlZE5vZGUpKSkKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9
IGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTZWxlY3Rpb24oKHl5dnNwWygzKSAtICg1KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoNSkgLSAoNSldLmludGVybS5ub2RlUGFpciks
ICh5eXZzcFsoMSkgLSAoNSldLmxleCkubGluZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBj
YXNlIDE2NzoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTEg
PSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgICAgICh5eXZhbC5p
bnRlcm0ubm9kZVBhaXIpLm5vZGUyID0gKHl5dnNwWygzKSAtICgzKV0uaW50ZXJtLmludGVybU5v
ZGUpOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNjg6CisKKyAgICB7CisgICAgICAg
ICh5eXZhbC5pbnRlcm0ubm9kZVBhaXIpLm5vZGUxID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybU5vZGUpOworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiA9IDA7
CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE2OToKKworICAgIHsKKyAgICAgICAgKHl5
dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmlu
dGVybVR5cGVkTm9kZSk7CisgICAgICAgIGlmIChjb250ZXh0LT5ib29sRXJyb3JDaGVjaygoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKS0+Z2V0TGluZSgpLCAoeXl2c3Bb
KDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSkpCisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE3MDoKKworICAgIHsK
KyAgICAgICAgVEludGVybU5vZGUqIGludGVybU5vZGU7CisgICAgICAgIGlmIChjb250ZXh0LT5z
dHJ1Y3RRdWFsaWZpZXJFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAoNCldLmxleCkubGluZSwgKHl5
dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292
ZXIoKTsKKyAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJvckNoZWNrKCh5eXZzcFsoMikgLSAo
NCldLmxleCkubGluZSwgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpKSkKKyAgICAgICAg
ICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKworICAgICAgICBpZiAoIWNvbnRleHQtPmV4ZWN1dGVJ
bml0aWFsaXplcigoeXl2c3BbKDIpIC0gKDQpXS5sZXgpLmxpbmUsICooeXl2c3BbKDIpIC0gKDQp
XS5sZXgpLnN0cmluZywgKHl5dnNwWygxKSAtICg0KV0uaW50ZXJtLnR5cGUpLCAoeXl2c3BbKDQp
IC0gKDQpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKSwgaW50ZXJtTm9kZSkpCisgICAgICAgICAg
ICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkgPSAoeXl2c3BbKDQpIC0gKDQpXS5pbnRl
cm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjb250ZXh0
LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybVR5cGVkTm9kZSkg
PSAwOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE3MToKKworICAg
IHsgY29udGV4dC0+c3ltYm9sVGFibGUucHVzaCgpOyArK2NvbnRleHQtPmxvb3BOZXN0aW5nTGV2
ZWw7IDt9CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzI6CisKKyAgICB7CisgICAgICAgIGNvbnRl
eHQtPnN5bWJvbFRhYmxlLnBvcCgpOworICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUp
ID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZExvb3AoRUxvb3BXaGlsZSwgMCwgKHl5dnNwWyg0
KSAtICg2KV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksIDAsICh5eXZzcFsoNikgLSAoNildLmlu
dGVybS5pbnRlcm1Ob2RlKSwgKHl5dnNwWygxKSAtICg2KV0ubGV4KS5saW5lKTsKKyAgICAgICAg
LS1jb250ZXh0LT5sb29wTmVzdGluZ0xldmVsOworICAgIDt9CisgICAgYnJlYWs7CisKKyAgY2Fz
ZSAxNzM6CisKKyAgICB7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgO30KKyAgICBicmVh
azsKKworICBjYXNlIDE3NDoKKworICAgIHsKKyAgICAgICAgaWYgKGNvbnRleHQtPmJvb2xFcnJv
ckNoZWNrKCh5eXZzcFsoOCkgLSAoOCldLmxleCkubGluZSwgKHl5dnNwWyg2KSAtICg4KV0uaW50
ZXJtLmludGVybVR5cGVkTm9kZSkpKQorICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlh
dGUuYWRkTG9vcChFTG9vcERvV2hpbGUsIDAsICh5eXZzcFsoNikgLSAoOCldLmludGVybS5pbnRl
cm1UeXBlZE5vZGUpLCAwLCAoeXl2c3BbKDMpIC0gKDgpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5
eXZzcFsoNCkgLSAoOCldLmxleCkubGluZSk7CisgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3Rp
bmdMZXZlbDsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTc1OgorCisgICAgeyBjb250
ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7ICsrY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsgO30K
KyAgICBicmVhazsKKworICBjYXNlIDE3NjoKKworICAgIHsKKyAgICAgICAgY29udGV4dC0+c3lt
Ym9sVGFibGUucG9wKCk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSkgPSBjb250
ZXh0LT5pbnRlcm1lZGlhdGUuYWRkTG9vcChFTG9vcEZvciwgKHl5dnNwWyg0KSAtICg3KV0uaW50
ZXJtLmludGVybU5vZGUpLCByZWludGVycHJldF9jYXN0PFRJbnRlcm1UeXBlZCo+KCh5eXZzcFso
NSkgLSAoNyldLmludGVybS5ub2RlUGFpcikubm9kZTEpLCByZWludGVycHJldF9jYXN0PFRJbnRl
cm1UeXBlZCo+KCh5eXZzcFsoNSkgLSAoNyldLmludGVybS5ub2RlUGFpcikubm9kZTIpLCAoeXl2
c3BbKDcpIC0gKDcpXS5pbnRlcm0uaW50ZXJtTm9kZSksICh5eXZzcFsoMSkgLSAoNyldLmxleCku
bGluZSk7CisgICAgICAgIC0tY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbDsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTc3OgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLmlu
dGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVybU5vZGUpOworICAgIDt9
CisgICAgYnJlYWs7CisKKyAgY2FzZSAxNzg6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRl
cm0uaW50ZXJtTm9kZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7Cisg
ICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE3OToKKworICAgIHsKKyAgICAgICAgKHl5dmFs
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtLmludGVy
bVR5cGVkTm9kZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE4MDoKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1UeXBlZE5vZGUpID0gMDsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTgxOgorCisgICAgeworICAgICAgICAoeXl2YWwuaW50ZXJtLm5v
ZGVQYWlyKS5ub2RlMSA9ICh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1UeXBlZE5vZGUp
OworICAgICAgICAoeXl2YWwuaW50ZXJtLm5vZGVQYWlyKS5ub2RlMiA9IDA7CisgICAgO30KKyAg
ICBicmVhazsKKworICBjYXNlIDE4MjoKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5u
b2RlUGFpcikubm9kZTEgPSAoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2Rl
KTsKKyAgICAgICAgKHl5dmFsLmludGVybS5ub2RlUGFpcikubm9kZTIgPSAoeXl2c3BbKDMpIC0g
KDMpXS5pbnRlcm0uaW50ZXJtVHlwZWROb2RlKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNh
c2UgMTgzOgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+bG9vcE5lc3RpbmdMZXZlbCA8
PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgp
LmxpbmUsICJjb250aW51ZSBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxvb3BzIiwgIiIsICIi
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICAo
eXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5j
aChFT3BDb250aW51ZSwgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKKyAgICA7fQorICAg
IGJyZWFrOworCisgIGNhc2UgMTg0OgorCisgICAgeworICAgICAgICBpZiAoY29udGV4dC0+bG9v
cE5lc3RpbmdMZXZlbCA8PSAwKSB7CisgICAgICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3Bb
KDEpIC0gKDIpXS5sZXgpLmxpbmUsICJicmVhayBzdGF0ZW1lbnQgb25seSBhbGxvd2VkIGluIGxv
b3BzIiwgIiIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAg
fQorICAgICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRp
YXRlLmFkZEJyYW5jaChFT3BCcmVhaywgKHl5dnNwWygxKSAtICgyKV0ubGV4KS5saW5lKTsKKyAg
ICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTg1OgorCisgICAgeworICAgICAgICAoeXl2YWwu
aW50ZXJtLmludGVybU5vZGUpID0gY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZEJyYW5jaChFT3BS
ZXR1cm4sICh5eXZzcFsoMSkgLSAoMildLmxleCkubGluZSk7CisgICAgICAgIGlmIChjb250ZXh0
LT5jdXJyZW50RnVuY3Rpb25UeXBlLT5nZXRCYXNpY1R5cGUoKSAhPSBFYnRWb2lkKSB7CisgICAg
ICAgICAgICBjb250ZXh0LT5lcnJvcigoeXl2c3BbKDEpIC0gKDIpXS5sZXgpLmxpbmUsICJub24t
dm9pZCBmdW5jdGlvbiBtdXN0IHJldHVybiBhIHZhbHVlIiwgInJldHVybiIsICIiKTsKKyAgICAg
ICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxODY6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSBjb250ZXh0LT5pbnRlcm1lZGlhdGUuYWRkQnJhbmNoKEVPcFJldHVybiwgKHl5dnNwWygy
KSAtICgzKV0uaW50ZXJtLmludGVybVR5cGVkTm9kZSksICh5eXZzcFsoMSkgLSAoMyldLmxleCku
bGluZSk7CisgICAgICAgIGNvbnRleHQtPmZ1bmN0aW9uUmV0dXJuc1ZhbHVlID0gdHJ1ZTsKKyAg
ICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJhc2ljVHlwZSgpID09
IEVidFZvaWQpIHsKKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyld
LmxleCkubGluZSwgInZvaWQgZnVuY3Rpb24gY2Fubm90IHJldHVybiBhIHZhbHVlIiwgInJldHVy
biIsICIiKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfSBlbHNl
IGlmICgqKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUpICE9ICh5eXZzcFsoMikgLSAoMyld
LmludGVybS5pbnRlcm1UeXBlZE5vZGUpLT5nZXRUeXBlKCkpIHsKKyAgICAgICAgICAgIGNvbnRl
eHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMyldLmxleCkubGluZSwgImZ1bmN0aW9uIHJldHVybiBp
cyBub3QgbWF0Y2hpbmcgdHlwZToiLCAicmV0dXJuIiwgIiIpOworICAgICAgICAgICAgY29udGV4
dC0+cmVjb3ZlcigpOworICAgICAgICB9CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE4
NzoKKworICAgIHsKKyAgICAgICAgRlJBR19PTkxZKCJkaXNjYXJkIiwgKHl5dnNwWygxKSAtICgy
KV0ubGV4KS5saW5lKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRl
eHQtPmludGVybWVkaWF0ZS5hZGRCcmFuY2goRU9wS2lsbCwgKHl5dnNwWygxKSAtICgyKV0ubGV4
KS5saW5lKTsKKyAgICA7fQorICAgIGJyZWFrOworCisgIGNhc2UgMTg4OgorCisgICAgeworICAg
ICAgICAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJt
LmludGVybU5vZGUpOworICAgICAgICBjb250ZXh0LT50cmVlUm9vdCA9ICh5eXZhbC5pbnRlcm0u
aW50ZXJtTm9kZSk7CisgICAgO30KKyAgICBicmVhazsKKworICBjYXNlIDE4OToKKworICAgIHsK
KyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQtPmludGVybWVkaWF0
ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMildLmludGVybS5pbnRlcm1Ob2RlKSwgKHl5
dnNwWygyKSAtICgyKV0uaW50ZXJtLmludGVybU5vZGUpLCAwKTsKKyAgICAgICAgY29udGV4dC0+
dHJlZVJvb3QgPSAoeXl2YWwuaW50ZXJtLmludGVybU5vZGUpOworICAgIDt9CisgICAgYnJlYWs7
CisKKyAgY2FzZSAxOTA6CisKKyAgICB7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9k
ZSkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0uaW50ZXJtTm9kZSk7CisgICAgO30KKyAgICBi
cmVhazsKKworICBjYXNlIDE5MToKKworICAgIHsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRl
cm1Ob2RlKSA9ICh5eXZzcFsoMSkgLSAoMSldLmludGVybS5pbnRlcm1Ob2RlKTsKKyAgICA7fQor
ICAgIGJyZWFrOworCisgIGNhc2UgMTkyOgorCisgICAgeworICAgICAgICBURnVuY3Rpb24qIGZ1
bmN0aW9uID0gKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5mdW5jdGlvbjsKKyAgICAgICAgVEZ1
bmN0aW9uKiBwcmV2RGVjID0gc3RhdGljX2Nhc3Q8VEZ1bmN0aW9uKj4oY29udGV4dC0+c3ltYm9s
VGFibGUuZmluZChmdW5jdGlvbi0+Z2V0TWFuZ2xlZE5hbWUoKSkpOworICAgICAgICAvLworICAg
ICAgICAvLyBOb3RlOiAgJ3ByZXZEZWMnIGNvdWxkIGJlICdmdW5jdGlvbicgaWYgdGhpcyBpcyB0
aGUgZmlyc3QgdGltZSB3ZSd2ZSBzZWVuIGZ1bmN0aW9uCisgICAgICAgIC8vIGFzIGl0IHdvdWxk
IGhhdmUganVzdCBiZWVuIHB1dCBpbiB0aGUgc3ltYm9sIHRhYmxlLiAgT3RoZXJ3aXNlLCB3ZSdy
ZSBsb29raW5nIHVwCisgICAgICAgIC8vIGFuIGVhcmxpZXIgb2NjdXJhbmNlLgorICAgICAgICAv
LworICAgICAgICBpZiAocHJldkRlYy0+aXNEZWZpbmVkKCkpIHsKKyAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAvLyBUaGVuIHRoaXMgZnVuY3Rpb24gYWxyZWFkeSBoYXMgYSBib2R5LgorICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSld
LmludGVybSkubGluZSwgImZ1bmN0aW9uIGFscmVhZHkgaGFzIGEgYm9keSIsIGZ1bmN0aW9uLT5n
ZXROYW1lKCkuY19zdHIoKSwgIiIpOworICAgICAgICAgICAgY29udGV4dC0+cmVjb3ZlcigpOwor
ICAgICAgICB9CisgICAgICAgIHByZXZEZWMtPnNldERlZmluZWQoKTsKKworICAgICAgICAvLwor
ICAgICAgICAvLyBSYWlzZSBlcnJvciBtZXNzYWdlIGlmIG1haW4gZnVuY3Rpb24gdGFrZXMgYW55
IHBhcmFtZXRlcnMgb3IgcmV0dXJuIGFueXRoaW5nIG90aGVyIHRoYW4gdm9pZAorICAgICAgICAv
LworICAgICAgICBpZiAoZnVuY3Rpb24tPmdldE5hbWUoKSA9PSAibWFpbiIpIHsKKyAgICAgICAg
ICAgIGlmIChmdW5jdGlvbi0+Z2V0UGFyYW1Db3VudCgpID4gMCkgeworICAgICAgICAgICAgICAg
IGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVybSkubGluZSwgImZ1bmN0aW9u
IGNhbm5vdCB0YWtlIGFueSBwYXJhbWV0ZXIocykiLCBmdW5jdGlvbi0+Z2V0TmFtZSgpLmNfc3Ry
KCksICIiKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoZnVuY3Rpb24tPmdldFJldHVyblR5cGUoKS5nZXRCYXNpY1R5
cGUoKSAhPSBFYnRWb2lkKSB7CisgICAgICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNw
WygxKSAtICgxKV0uaW50ZXJtKS5saW5lLCAiIiwgZnVuY3Rpb24tPmdldFJldHVyblR5cGUoKS5n
ZXRCYXNpY1N0cmluZygpLCAibWFpbiBmdW5jdGlvbiBjYW5ub3QgcmV0dXJuIGEgdmFsdWUiKTsK
KyAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICAvLworICAgICAgICAvLyBOZXcgc3ltYm9sIHRhYmxlIHNjb3BlIGZv
ciBib2R5IG9mIGZ1bmN0aW9uIHBsdXMgaXRzIGFyZ3VtZW50cworICAgICAgICAvLworICAgICAg
ICBjb250ZXh0LT5zeW1ib2xUYWJsZS5wdXNoKCk7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8g
UmVtZW1iZXIgdGhlIHJldHVybiB0eXBlIGZvciBsYXRlciBjaGVja2luZyBmb3IgUkVUVVJOIHN0
YXRlbWVudHMuCisgICAgICAgIC8vCisgICAgICAgIGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5
cGUgPSAmKHByZXZEZWMtPmdldFJldHVyblR5cGUoKSk7CisgICAgICAgIGNvbnRleHQtPmZ1bmN0
aW9uUmV0dXJuc1ZhbHVlID0gZmFsc2U7CisKKyAgICAgICAgLy8KKyAgICAgICAgLy8gSW5zZXJ0
IHBhcmFtZXRlcnMgaW50byB0aGUgc3ltYm9sIHRhYmxlLgorICAgICAgICAvLyBJZiB0aGUgcGFy
YW1ldGVyIGhhcyBubyBuYW1lLCBpdCdzIG5vdCBhbiBlcnJvciwganVzdCBkb24ndCBpbnNlcnQg
aXQKKyAgICAgICAgLy8gKGNvdWxkIGJlIHVzZWQgZm9yIHVudXNlZCBhcmdzKS4KKyAgICAgICAg
Ly8KKyAgICAgICAgLy8gQWxzbywgYWNjdW11bGF0ZSB0aGUgbGlzdCBvZiBwYXJhbWV0ZXJzIGlu
dG8gdGhlIEhJTCwgc28gbG93ZXIgbGV2ZWwgY29kZQorICAgICAgICAvLyBrbm93cyB3aGVyZSB0
byBmaW5kIHBhcmFtZXRlcnMuCisgICAgICAgIC8vCisgICAgICAgIFRJbnRlcm1BZ2dyZWdhdGUq
IHBhcmFtTm9kZXMgPSBuZXcgVEludGVybUFnZ3JlZ2F0ZTsKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBmdW5jdGlvbi0+Z2V0UGFyYW1Db3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIGNv
bnN0IFRQYXJhbWV0ZXImIHBhcmFtID0gZnVuY3Rpb24tPmdldFBhcmFtKGkpOworICAgICAgICAg
ICAgaWYgKHBhcmFtLm5hbWUgIT0gMCkgeworICAgICAgICAgICAgICAgIFRWYXJpYWJsZSAqdmFy
aWFibGUgPSBuZXcgVFZhcmlhYmxlKHBhcmFtLm5hbWUsICpwYXJhbS50eXBlKTsKKyAgICAgICAg
ICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vIEluc2VydCB0aGUgcGFyYW1ldGVycyB3aXRo
IG5hbWUgaW4gdGhlIHN5bWJvbCB0YWJsZS4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgIGlmICghIGNvbnRleHQtPnN5bWJvbFRhYmxlLmluc2VydCgqdmFyaWFibGUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmVycm9yKCh5eXZzcFsoMSkgLSAoMSldLmludGVy
bSkubGluZSwgInJlZGVmaW5pdGlvbiIsIHZhcmlhYmxlLT5nZXROYW1lKCkuY19zdHIoKSwgIiIp
OworICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5yZWNvdmVyKCk7CisgICAgICAgICAgICAg
ICAgICAgIGRlbGV0ZSB2YXJpYWJsZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgcGFyYW1ldGVyIHRvIHRoZSBISUwK
KyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIHBhcmFtTm9kZXMgPSBjb250ZXh0
LT5pbnRlcm1lZGlhdGUuZ3Jvd0FnZ3JlZ2F0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+aW50ZXJtZWRpYXRlLmFkZFN5bWJvbCh2
YXJpYWJsZS0+Z2V0VW5pcXVlSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldE5hbWUo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFyaWFibGUtPmdldFR5cGUoKSwgKHl5dnNwWygxKSAtICgxKV0u
aW50ZXJtKS5saW5lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHl5dnNwWygxKSAtICgxKV0uaW50ZXJtKS5saW5lKTsKKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgcGFyYW1Ob2RlcyA9IGNvbnRleHQtPmludGVybWVkaWF0ZS5n
cm93QWdncmVnYXRlKHBhcmFtTm9kZXMsIGNvbnRleHQtPmludGVybWVkaWF0ZS5hZGRTeW1ib2wo
MCwgIiIsICpwYXJhbS50eXBlLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpLCAoeXl2
c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIGNvbnRleHQtPmludGVybWVkaWF0ZS5zZXRBZ2dyZWdhdGVPcGVyYXRvcihwYXJhbU5v
ZGVzLCBFT3BQYXJhbWV0ZXJzLCAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmxpbmUpOworICAg
ICAgICAoeXl2c3BbKDEpIC0gKDEpXS5pbnRlcm0pLmludGVybUFnZ3JlZ2F0ZSA9IHBhcmFtTm9k
ZXM7CisgICAgICAgIGNvbnRleHQtPmxvb3BOZXN0aW5nTGV2ZWwgPSAwOworICAgIDt9CisgICAg
YnJlYWs7CisKKyAgY2FzZSAxOTM6CisKKyAgICB7CisgICAgICAgIC8vPz8gQ2hlY2sgdGhhdCBh
bGwgcGF0aHMgcmV0dXJuIGEgdmFsdWUgaWYgcmV0dXJuIHR5cGUgIT0gdm9pZCA/CisgICAgICAg
IC8vICAgTWF5IGJlIGJlc3QgZG9uZSBhcyBwb3N0IHByb2Nlc3MgcGhhc2Ugb24gaW50ZXJtZWRp
YXRlIGNvZGUKKyAgICAgICAgaWYgKGNvbnRleHQtPmN1cnJlbnRGdW5jdGlvblR5cGUtPmdldEJh
c2ljVHlwZSgpICE9IEVidFZvaWQgJiYgISBjb250ZXh0LT5mdW5jdGlvblJldHVybnNWYWx1ZSkg
eworICAgICAgICAgICAgY29udGV4dC0+ZXJyb3IoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5s
aW5lLCAiZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGEgdmFsdWU6IiwgIiIsICh5eXZzcFsoMSkg
LSAoMyldLmludGVybSkuZnVuY3Rpb24tPmdldE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgICAg
IGNvbnRleHQtPnJlY292ZXIoKTsKKyAgICAgICAgfQorICAgICAgICBjb250ZXh0LT5zeW1ib2xU
YWJsZS5wb3AoKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKSA9IGNvbnRleHQt
PmludGVybWVkaWF0ZS5ncm93QWdncmVnYXRlKCh5eXZzcFsoMSkgLSAoMyldLmludGVybSkuaW50
ZXJtQWdncmVnYXRlLCAoeXl2c3BbKDMpIC0gKDMpXS5pbnRlcm0uaW50ZXJtTm9kZSksIDApOwor
ICAgICAgICBjb250ZXh0LT5pbnRlcm1lZGlhdGUuc2V0QWdncmVnYXRlT3BlcmF0b3IoKHl5dmFs
LmludGVybS5pbnRlcm1Ob2RlKSwgRU9wRnVuY3Rpb24sICh5eXZzcFsoMSkgLSAoMyldLmludGVy
bSkubGluZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVn
YXRlKCktPnNldE5hbWUoKHl5dnNwWygxKSAtICgzKV0uaW50ZXJtKS5mdW5jdGlvbi0+Z2V0TWFu
Z2xlZE5hbWUoKS5jX3N0cigpKTsKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+
Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0VHlwZSgoeXl2c3BbKDEpIC0gKDMpXS5pbnRlcm0pLmZ1bmN0
aW9uLT5nZXRSZXR1cm5UeXBlKCkpOworCisgICAgICAgIC8vIHN0b3JlIHRoZSBwcmFnbWEgaW5m
b3JtYXRpb24gZm9yIGRlYnVnIGFuZCBvcHRpbWl6ZSBhbmQgb3RoZXIgdmVuZG9yIHNwZWNpZmlj
CisgICAgICAgIC8vIGluZm9ybWF0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGNhbiBiZSBxdWVyaWVk
IGZyb20gdGhlIHBhcnNlIHRyZWUKKyAgICAgICAgKHl5dmFsLmludGVybS5pbnRlcm1Ob2RlKS0+
Z2V0QXNBZ2dyZWdhdGUoKS0+c2V0T3B0aW1pemUoY29udGV4dC0+Y29udGV4dFByYWdtYS5vcHRp
bWl6ZSk7CisgICAgICAgICh5eXZhbC5pbnRlcm0uaW50ZXJtTm9kZSktPmdldEFzQWdncmVnYXRl
KCktPnNldERlYnVnKGNvbnRleHQtPmNvbnRleHRQcmFnbWEuZGVidWcpOworICAgICAgICAoeXl2
YWwuaW50ZXJtLmludGVybU5vZGUpLT5nZXRBc0FnZ3JlZ2F0ZSgpLT5hZGRUb1ByYWdtYVRhYmxl
KGNvbnRleHQtPmNvbnRleHRQcmFnbWEucHJhZ21hVGFibGUpOworICAgIDt9CisgICAgYnJlYWs7
CisKKworLyogTGluZSAxMjY3IG9mIHlhY2MuYy4gICovCisKKyAgICAgIGRlZmF1bHQ6IGJyZWFr
OworICAgIH0KKyAgWVlfU1lNQk9MX1BSSU5UICgiLT4gJCQgPSIsIHl5cjFbeXluXSwgJnl5dmFs
LCAmeXlsb2MpOworCisgIFlZUE9QU1RBQ0sgKHl5bGVuKTsKKyAgeXlsZW4gPSAwOworICBZWV9T
VEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworCisgICorK3l5dnNwID0geXl2YWw7CisKKworICAv
KiBOb3cgYHNoaWZ0JyB0aGUgcmVzdWx0IG9mIHRoZSByZWR1Y3Rpb24uICBEZXRlcm1pbmUgd2hh
dCBzdGF0ZQorICAgICB0aGF0IGdvZXMgdG8sIGJhc2VkIG9uIHRoZSBzdGF0ZSB3ZSBwb3BwZWQg
YmFjayB0byBhbmQgdGhlIHJ1bGUKKyAgICAgbnVtYmVyIHJlZHVjZWQgYnkuICAqLworCisgIHl5
biA9IHl5cjFbeXluXTsKKworICB5eXN0YXRlID0geXlwZ290b1t5eW4gLSBZWU5UT0tFTlNdICsg
Knl5c3NwOworICBpZiAoMCA8PSB5eXN0YXRlICYmIHl5c3RhdGUgPD0gWVlMQVNUICYmIHl5Y2hl
Y2tbeXlzdGF0ZV0gPT0gKnl5c3NwKQorICAgIHl5c3RhdGUgPSB5eXRhYmxlW3l5c3RhdGVdOwor
ICBlbHNlCisgICAgeXlzdGF0ZSA9IHl5ZGVmZ290b1t5eW4gLSBZWU5UT0tFTlNdOworCisgIGdv
dG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KK3wgeXllcnJsYWIgLS0gaGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAorYC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWVycmxhYjoKKyAgLyogSWYgbm90IGFscmVh
ZHkgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZXBvcnQgdGhpcyBlcnJvci4gICovCisgIGlm
ICgheXllcnJzdGF0dXMpCisgICAgeworICAgICAgKyt5eW5lcnJzOworI2lmICEgWVlFUlJPUl9W
RVJCT1NFCisgICAgICB5eWVycm9yIChjb250ZXh0LCBZWV8oInN5bnRheCBlcnJvciIpKTsKKyNl
bHNlCisgICAgICB7CisJWVlTSVpFX1QgeXlzaXplID0geXlzeW50YXhfZXJyb3IgKDAsIHl5c3Rh
dGUsIHl5Y2hhcik7CisJaWYgKHl5bXNnX2FsbG9jIDwgeXlzaXplICYmIHl5bXNnX2FsbG9jIDwg
WVlTVEFDS19BTExPQ19NQVhJTVVNKQorCSAgeworCSAgICBZWVNJWkVfVCB5eWFsbG9jID0gMiAq
IHl5c2l6ZTsKKwkgICAgaWYgKCEgKHl5c2l6ZSA8PSB5eWFsbG9jICYmIHl5YWxsb2MgPD0gWVlT
VEFDS19BTExPQ19NQVhJTVVNKSkKKwkgICAgICB5eWFsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJ
TVVNOworCSAgICBpZiAoeXltc2cgIT0geXltc2didWYpCisJICAgICAgWVlTVEFDS19GUkVFICh5
eW1zZyk7CisJICAgIHl5bXNnID0gKGNoYXIgKikgWVlTVEFDS19BTExPQyAoeXlhbGxvYyk7CisJ
ICAgIGlmICh5eW1zZykKKwkgICAgICB5eW1zZ19hbGxvYyA9IHl5YWxsb2M7CisJICAgIGVsc2UK
KwkgICAgICB7CisJCXl5bXNnID0geXltc2didWY7CisJCXl5bXNnX2FsbG9jID0gc2l6ZW9mIHl5
bXNnYnVmOworCSAgICAgIH0KKwkgIH0KKworCWlmICgwIDwgeXlzaXplICYmIHl5c2l6ZSA8PSB5
eW1zZ19hbGxvYykKKwkgIHsKKwkgICAgKHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywgeXlz
dGF0ZSwgeXljaGFyKTsKKwkgICAgeXllcnJvciAoY29udGV4dCwgeXltc2cpOworCSAgfQorCWVs
c2UKKwkgIHsKKwkgICAgeXllcnJvciAoY29udGV4dCwgWVlfKCJzeW50YXggZXJyb3IiKSk7CisJ
ICAgIGlmICh5eXNpemUgIT0gMCkKKwkgICAgICBnb3RvIHl5ZXhoYXVzdGVkbGFiOworCSAgfQor
ICAgICAgfQorI2VuZGlmCisgICAgfQorCisKKworICBpZiAoeXllcnJzdGF0dXMgPT0gMykKKyAg
ICB7CisgICAgICAvKiBJZiBqdXN0IHRyaWVkIGFuZCBmYWlsZWQgdG8gcmV1c2UgbG9vay1haGVh
ZCB0b2tlbiBhZnRlciBhbgorCSBlcnJvciwgZGlzY2FyZCBpdC4gICovCisKKyAgICAgIGlmICh5
eWNoYXIgPD0gWVlFT0YpCisJeworCSAgLyogUmV0dXJuIGZhaWx1cmUgaWYgYXQgZW5kIG9mIGlu
cHV0LiAgKi8KKwkgIGlmICh5eWNoYXIgPT0gWVlFT0YpCisJICAgIFlZQUJPUlQ7CisJfQorICAg
ICAgZWxzZQorCXsKKwkgIHl5ZGVzdHJ1Y3QgKCJFcnJvcjogZGlzY2FyZGluZyIsCisJCSAgICAg
IHl5dG9rZW4sICZ5eWx2YWwsIGNvbnRleHQpOworCSAgeXljaGFyID0gWVlFTVBUWTsKKwl9Cisg
ICAgfQorCisgIC8qIEVsc2Ugd2lsbCB0cnkgdG8gcmV1c2UgbG9vay1haGVhZCB0b2tlbiBhZnRl
ciBzaGlmdGluZyB0aGUgZXJyb3IKKyAgICAgdG9rZW4uICAqLworICBnb3RvIHl5ZXJybGFiMTsK
KworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS4KK3wgeXllcnJvcmxhYiAtLSBlcnJvciByYWlzZWQgZXhwbGljaXRseSBieSBZWUVSUk9SLiAg
fAorYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov
Cit5eWVycm9ybGFiOgorCisgIC8qIFBhY2lmeSBjb21waWxlcnMgbGlrZSBHQ0Mgd2hlbiB0aGUg
dXNlciBjb2RlIG5ldmVyIGludm9rZXMKKyAgICAgWVlFUlJPUiBhbmQgdGhlIGxhYmVsIHl5ZXJy
b3JsYWIgdGhlcmVmb3JlIG5ldmVyIGFwcGVhcnMgaW4gdXNlcgorICAgICBjb2RlLiAgKi8KKyAg
aWYgKC8qQ09OU1RDT05EKi8gMCkKKyAgICAgZ290byB5eWVycm9ybGFiOworCisgIC8qIERvIG5v
dCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFjdGlvbiB0cmlnZ2VyZWQK
KyAgICAgdGhpcyBZWUVSUk9SLiAgKi8KKyAgWVlQT1BTVEFDSyAoeXlsZW4pOworICB5eWxlbiA9
IDA7CisgIFlZX1NUQUNLX1BSSU5UICh5eXNzLCB5eXNzcCk7CisgIHl5c3RhdGUgPSAqeXlzc3A7
CisgIGdvdG8geXllcnJsYWIxOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4KK3wgeXllcnJsYWIxIC0tIGNvbW1vbiBj
b2RlIGZvciBib3RoIHN5bnRheCBlcnJvciBhbmQgWVlFUlJPUi4gIHwKK2AtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3l5ZXJy
bGFiMToKKyAgeXllcnJzdGF0dXMgPSAzOwkvKiBFYWNoIHJlYWwgdG9rZW4gc2hpZnRlZCBkZWNy
ZW1lbnRzIHRoaXMuICAqLworCisgIGZvciAoOzspCisgICAgeworICAgICAgeXluID0geXlwYWN0
W3l5c3RhdGVdOworICAgICAgaWYgKHl5biAhPSBZWVBBQ1RfTklORikKKwl7CisJICB5eW4gKz0g
WVlURVJST1I7CisJICBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFTVCAmJiB5eWNoZWNrW3l5
bl0gPT0gWVlURVJST1IpCisJICAgIHsKKwkgICAgICB5eW4gPSB5eXRhYmxlW3l5bl07CisJICAg
ICAgaWYgKDAgPCB5eW4pCisJCWJyZWFrOworCSAgICB9CisJfQorCisgICAgICAvKiBQb3AgdGhl
IGN1cnJlbnQgc3RhdGUgYmVjYXVzZSBpdCBjYW5ub3QgaGFuZGxlIHRoZSBlcnJvciB0b2tlbi4g
ICovCisgICAgICBpZiAoeXlzc3AgPT0geXlzcykKKwlZWUFCT1JUOworCisKKyAgICAgIHl5ZGVz
dHJ1Y3QgKCJFcnJvcjogcG9wcGluZyIsCisJCSAgeXlzdG9zW3l5c3RhdGVdLCB5eXZzcCwgY29u
dGV4dCk7CisgICAgICBZWVBPUFNUQUNLICgxKTsKKyAgICAgIHl5c3RhdGUgPSAqeXlzc3A7Cisg
ICAgICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICAgIH0KKworICBpZiAoeXluID09
IFlZRklOQUwpCisgICAgWVlBQ0NFUFQ7CisKKyAgKisreXl2c3AgPSB5eWx2YWw7CisKKworICAv
KiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uICAqLworICBZWV9TWU1CT0xfUFJJTlQgKCJTaGlmdGlu
ZyIsIHl5c3Rvc1t5eW5dLCB5eXZzcCwgeXlsc3ApOworCisgIHl5c3RhdGUgPSB5eW47CisgIGdv
dG8geXluZXdzdGF0ZTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0uCit8IHl5YWNjZXB0bGFiIC0tIFlZQUNDRVBUIGNvbWVzIGhlcmUuICB8CitgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFjY2VwdGxhYjoKKyAgeXlyZXN1bHQg
PSAwOworICBnb3RvIHl5cmV0dXJuOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLgorfCB5eWFib3J0bGFiIC0tIFlZQUJPUlQgY29tZXMgaGVyZS4gIHwKK2AtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCit5eWFib3J0bGFiOgorICB5eXJlc3VsdCA9
IDE7CisgIGdvdG8geXlyZXR1cm47CisKKyNpZm5kZWYgeXlvdmVyZmxvdworLyotLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLgorfCB5eWV4aGF1c3RlZGxh
YiAtLSBtZW1vcnkgZXhoYXVzdGlvbiBjb21lcyBoZXJlLiAgfAorYC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworeXlleGhhdXN0ZWRsYWI6CisgIHl5
ZXJyb3IgKGNvbnRleHQsIFlZXygibWVtb3J5IGV4aGF1c3RlZCIpKTsKKyAgeXlyZXN1bHQgPSAy
OworICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisKK3l5cmV0dXJuOgorICBpZiAoeXlj
aGFyICE9IFlZRU9GICYmIHl5Y2hhciAhPSBZWUVNUFRZKQorICAgICB5eWRlc3RydWN0ICgiQ2xl
YW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAorCQkgeXl0b2tlbiwgJnl5bHZhbCwgY29udGV4
dCk7CisgIC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFj
dGlvbiB0cmlnZ2VyZWQKKyAgICAgdGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBULiAgKi8KKyAgWVlQ
T1BTVEFDSyAoeXlsZW4pOworICBZWV9TVEFDS19QUklOVCAoeXlzcywgeXlzc3ApOworICB3aGls
ZSAoeXlzc3AgIT0geXlzcykKKyAgICB7CisgICAgICB5eWRlc3RydWN0ICgiQ2xlYW51cDogcG9w
cGluZyIsCisJCSAgeXlzdG9zWyp5eXNzcF0sIHl5dnNwLCBjb250ZXh0KTsKKyAgICAgIFlZUE9Q
U1RBQ0sgKDEpOworICAgIH0KKyNpZm5kZWYgeXlvdmVyZmxvdworICBpZiAoeXlzcyAhPSB5eXNz
YSkKKyAgICBZWVNUQUNLX0ZSRUUgKHl5c3MpOworI2VuZGlmCisjaWYgWVlFUlJPUl9WRVJCT1NF
CisgIGlmICh5eW1zZyAhPSB5eW1zZ2J1ZikKKyAgICBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKKyNl
bmRpZgorICAvKiBNYWtlIHN1cmUgWVlJRCBpcyB1c2VkLiAgKi8KKyAgcmV0dXJuIFlZSUQgKHl5
cmVzdWx0KTsKK30KKworCisKKworCitpbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0KiBj
b250ZXh0KSB7CisgICAgcmV0dXJuIHl5cGFyc2UoY29udGV4dCk7Cit9CisKKwpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL1N5bWJvbFRhYmxlLmgJ
KHJldmlzaW9uIDc2MDI1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVy
L1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDEwIEBACiAKICAgICB2
b2lkIHNoYXJlQ29uc3RQb2ludGVyKCBDb25zdGFudFVuaW9uICpjb25zdEFycmF5KQogICAgIHsK
LSAgICAgICAgZGVsZXRlIHVuaW9uQXJyYXk7CisgICAgICAgIGlmICh1bmlvbkFycmF5ID09IGNv
bnN0QXJyYXkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZGVsZXRlW10gdW5pb25B
cnJheTsKICAgICAgICAgdW5pb25BcnJheSA9IGNvbnN0QXJyYXk7ICAKICAgICB9CiAgICAgVFZh
cmlhYmxlKGNvbnN0IFRWYXJpYWJsZSYsIFRTdHJ1Y3R1cmVNYXAmIHJlbWFwcGVyKTsgLy8gY29w
eSBjb25zdHJ1Y3RvcgpAQCAtMTU2LDE0ICsxNTksMTggQEAKIAogICAgIGNvbnN0IFRTdHJpbmcm
IGdldE1hbmdsZWROYW1lKCkgY29uc3QgeyByZXR1cm4gbWFuZ2xlZE5hbWU7IH0KICAgICBjb25z
dCBUVHlwZSYgZ2V0UmV0dXJuVHlwZSgpIGNvbnN0IHsgcmV0dXJuIHJldHVyblR5cGU7IH0KKwog
ICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihUT3BlcmF0b3IgbykgeyBvcCA9IG87IH0KICAgICBU
T3BlcmF0b3IgZ2V0QnVpbHRJbk9wKCkgY29uc3QgeyByZXR1cm4gb3A7IH0KKworICAgIHZvaWQg
cmVsYXRlVG9FeHRlbnNpb24oY29uc3QgVFN0cmluZyYgZXh0KSB7IGV4dGVuc2lvbiA9IGV4dDsg
fQorICAgIGNvbnN0IFRTdHJpbmcmIGdldEV4dGVuc2lvbigpIGNvbnN0IHsgcmV0dXJuIGV4dGVu
c2lvbjsgfQorCiAgICAgdm9pZCBzZXREZWZpbmVkKCkgeyBkZWZpbmVkID0gdHJ1ZTsgfQogICAg
IGJvb2wgaXNEZWZpbmVkKCkgeyByZXR1cm4gZGVmaW5lZDsgfQogCi0gICAgaW50IGdldFBhcmFt
Q291bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBhcmFtZXRlcnMuc2l6ZSgp
KTsgfSAgICAKLSAgICBUUGFyYW1ldGVyJiBvcGVyYXRvciBbXShpbnQgaSkgICAgICAgeyByZXR1
cm4gcGFyYW1ldGVyc1tpXTsgfQotICAgIGNvbnN0IFRQYXJhbWV0ZXImIG9wZXJhdG9yIFtdKGlu
dCBpKSBjb25zdCB7IHJldHVybiBwYXJhbWV0ZXJzW2ldOyB9CisgICAgaW50IGdldFBhcmFtQ291
bnQoKSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBhcmFtZXRlcnMuc2l6ZSgpKTsg
fSAgCisgICAgY29uc3QgVFBhcmFtZXRlciYgZ2V0UGFyYW0oaW50IGkpIGNvbnN0IHsgcmV0dXJu
IHBhcmFtZXRlcnNbaV07IH0KIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRJbmZvU2luayAmaW5m
b1NpbmspIGNvbnN0OwogICAgIFRGdW5jdGlvbihjb25zdCBURnVuY3Rpb24mLCBUU3RydWN0dXJl
TWFwJiByZW1hcHBlcik7CkBAIC0xNzUsNiArMTgyLDcgQEAKICAgICBUVHlwZSByZXR1cm5UeXBl
OwogICAgIFRTdHJpbmcgbWFuZ2xlZE5hbWU7CiAgICAgVE9wZXJhdG9yIG9wOworICAgIFRTdHJp
bmcgZXh0ZW5zaW9uOwogICAgIGJvb2wgZGVmaW5lZDsKIH07CiAKQEAgLTIyMSw2ICsyMjksNyBA
QAogICAgIH0KIAogICAgIHZvaWQgcmVsYXRlVG9PcGVyYXRvcihjb25zdCBjaGFyKiBuYW1lLCBU
T3BlcmF0b3Igb3ApOworICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29uc3QgY2hhciogbmFt
ZSwgY29uc3QgVFN0cmluZyYgZXh0KTsKICAgICB2b2lkIGR1bXAoVEluZm9TaW5rICZpbmZvU2lu
aykgY29uc3Q7CiAgICAgVFN5bWJvbFRhYmxlTGV2ZWwqIGNsb25lKFRTdHJ1Y3R1cmVNYXAmIHJl
bWFwcGVyKTsKIApAQCAtMjg5LDggKzI5OCwxNiBAQAogICAgICAgICByZXR1cm4gc3ltYm9sOwog
ICAgIH0KIAotICAgIFRTeW1ib2xUYWJsZUxldmVsKiBnZXRHbG9iYWxMZXZlbCgpIHsgYXNzZXJ0
KHRhYmxlLnNpemUoKSA+PSAyKTsgcmV0dXJuIHRhYmxlWzFdOyB9Ci0gICAgdm9pZCByZWxhdGVU
b09wZXJhdG9yKGNvbnN0IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCkgeyB0YWJsZVswXS0+cmVs
YXRlVG9PcGVyYXRvcihuYW1lLCBvcCk7IH0KKyAgICBUU3ltYm9sVGFibGVMZXZlbCogZ2V0R2xv
YmFsTGV2ZWwoKSB7CisgICAgICAgIGFzc2VydCh0YWJsZS5zaXplKCkgPj0gMik7CisgICAgICAg
IHJldHVybiB0YWJsZVsxXTsKKyAgICB9CisgICAgdm9pZCByZWxhdGVUb09wZXJhdG9yKGNvbnN0
IGNoYXIqIG5hbWUsIFRPcGVyYXRvciBvcCkgeworICAgICAgICB0YWJsZVswXS0+cmVsYXRlVG9P
cGVyYXRvcihuYW1lLCBvcCk7CisgICAgfQorICAgIHZvaWQgcmVsYXRlVG9FeHRlbnNpb24oY29u
c3QgY2hhciogbmFtZSwgY29uc3QgVFN0cmluZyYgZXh0KSB7CisgICAgICAgIHRhYmxlWzBdLT5y
ZWxhdGVUb0V4dGVuc2lvbihuYW1lLCBleHQpOworICAgIH0KICAgICBpbnQgZ2V0TWF4U3ltYm9s
SWQoKSB7IHJldHVybiB1bmlxdWVJZDsgfQogICAgIHZvaWQgZHVtcChUSW5mb1NpbmsgJmluZm9T
aW5rKSBjb25zdDsKICAgICB2b2lkIGNvcHlUYWJsZShjb25zdCBUU3ltYm9sVGFibGUmIGNvcHlP
Zik7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5mb1Npbmsu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvSW5m
b1NpbmsuaAkocmV2aXNpb24gNzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
Y29tcGlsZXIvSW5mb1NpbmsuaAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsNyBAQAogICAg
IH0KIAogICAgIHZvaWQgZXJhc2UoKSB7IHNpbmsuY2xlYXIoKTsgfQorICAgIGludCBzaXplKCkg
eyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihzaW5rLnNpemUoKSk7IH0KIAogICAgIGNvbnN0IFRQ
ZXJzaXN0U3RyaW5nJiBzdHIoKSBjb25zdCB7IHJldHVybiBzaW5rOyB9CiAgICAgY29uc3QgY2hh
ciogY19zdHIoKSBjb25zdCB7IHJldHVybiBzaW5rLmNfc3RyKCk7IH0KSW5kZXg6IFNvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9Db2RlR2VuSExTTC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL0NvZGVHZW5ITFNMLmNwcAko
cmV2aXNpb24gNzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIv
Q29kZUdlbkhMU0wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMSw5ICsxMSw5IEBACiAvLyBjb21w
aWxlIG9iamVjdCB1c2VkIGJ5IGhpZ2hlciBsZXZlbCBjb2RlLiAgSXQgcmV0dXJucwogLy8gYSBz
dWJjbGFzcyBvZiBUQ29tcGlsZXIuCiAvLwotVENvbXBpbGVyKiBDb25zdHJ1Y3RDb21waWxlcihF
U2hMYW5ndWFnZSBsYW5ndWFnZSwgRVNoU3BlYyBzcGVjKQorVENvbXBpbGVyKiBDb25zdHJ1Y3RD
b21waWxlcihTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVjIHNwZWMpCiB7Ci0gICAgcmV0
dXJuIG5ldyBUcmFuc2xhdG9ySExTTChsYW5ndWFnZSwgc3BlYyk7CisgICAgcmV0dXJuIG5ldyBU
cmFuc2xhdG9ySExTTCh0eXBlLCBzcGVjKTsKIH0KIAogLy8KSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9PdXRwdXRITFNMLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL091dHB1dEhMU0wuaAkocmV2aXNpb24gNzYw
MjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvT3V0cHV0SExTTC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcgQEAKICAgICBTY29wZUJyYWNrZXQgbVNj
b3BlQnJhY2tldDsKICAgICB1bnNpZ25lZCBpbnQgbVNjb3BlRGVwdGg7CiAKLSAgICBpbnQgbUFy
Z3VtZW50SW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBhcmd1bWVudCBuYW1lcworICAg
IGludCBtVW5pcXVlSW5kZXg7ICAgLy8gRm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1lcwogfTsKIH0K
IApJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJt
ZWRpYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBp
bGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgJKHJldmlzaW9uIDc2MDI1KQorKysgU291cmNlL1RoaXJk
UGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL2xvY2FsaW50ZXJtZWRpYXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDExICs0MCwxMSBAQAogICAgIFRJbnRlcm1Db25zdGFudFVuaW9uKiBhZGRDb25z
dGFudFVuaW9uKENvbnN0YW50VW5pb24qLCBjb25zdCBUVHlwZSYsIFRTb3VyY2VMb2MpOwogICAg
IFRJbnRlcm1UeXBlZCogcHJvbW90ZUNvbnN0YW50VW5pb24oVEJhc2ljVHlwZSwgVEludGVybUNv
bnN0YW50VW5pb24qKSA7CiAgICAgYm9vbCBwYXJzZUNvbnN0VHJlZShUU291cmNlTG9jLCBUSW50
ZXJtTm9kZSosIENvbnN0YW50VW5pb24qLCBUT3BlcmF0b3IsIFRTeW1ib2xUYWJsZSYsIFRUeXBl
LCBib29sIHNpbmdsZUNvbnN0YW50UGFyYW0gPSBmYWxzZSk7ICAgICAgICAKLSAgICBUSW50ZXJt
Tm9kZSogYWRkTG9vcChUSW50ZXJtTm9kZSosIFRJbnRlcm1Ob2RlKiwgVEludGVybVR5cGVkKiwg
VEludGVybVR5cGVkKiwgYm9vbCB0ZXN0Rmlyc3QsIFRTb3VyY2VMb2MpOworICAgIFRJbnRlcm1O
b2RlKiBhZGRMb29wKFRMb29wVHlwZSwgVEludGVybU5vZGUqLCBUSW50ZXJtVHlwZWQqLCBUSW50
ZXJtVHlwZWQqLCBUSW50ZXJtTm9kZSosIFRTb3VyY2VMb2MpOwogICAgIFRJbnRlcm1CcmFuY2gq
IGFkZEJyYW5jaChUT3BlcmF0b3IsIFRTb3VyY2VMb2MpOwogICAgIFRJbnRlcm1CcmFuY2gqIGFk
ZEJyYW5jaChUT3BlcmF0b3IsIFRJbnRlcm1UeXBlZCosIFRTb3VyY2VMb2MpOwogICAgIFRJbnRl
cm1UeXBlZCogYWRkU3dpenpsZShUVmVjdG9yRmllbGRzJiwgVFNvdXJjZUxvYyk7Ci0gICAgYm9v
bCBwb3N0UHJvY2VzcyhUSW50ZXJtTm9kZSosIEVTaExhbmd1YWdlKTsKKyAgICBib29sIHBvc3RQ
cm9jZXNzKFRJbnRlcm1Ob2RlKik7CiAJdm9pZCByZW1vdmUoVEludGVybU5vZGUqKTsKICAgICB2
b2lkIG91dHB1dFRyZWUoVEludGVybU5vZGUqKTsKICAgICAKSW5kZXg6IFNvdXJjZS9UaGlyZFBh
cnR5L0FOR0xFL3NyYy9jb21waWxlci9vc2luY2x1ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvb3NpbmNsdWRlLmgJKHJldmlzaW9uIDc2MDI1
KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2NvbXBpbGVyL29zaW5jbHVkZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC04LDggKzgsOCBAQAogI2RlZmluZSBfX09TSU5DTFVERV9ICiAKIC8v
Ci0vLyBUaGlzIGZpbGUgY29udGFpbnMgY29udGFpbnMgdGhlIHdpbmRvdydzIHNwZWNpZmljIGRh
dGF0eXBlcyBhbmQKLS8vIGRlY2xhcmVzIGFueSB3aW5kb3dzIHNwZWNpZmljIGZ1bmN0aW9ucy4K
Ky8vIFRoaXMgZmlsZSBjb250YWlucyBjb250YWlucyBvcy1zcGVjaWZpYyBkYXRhdHlwZXMgYW5k
CisvLyBkZWNsYXJlcyBhbnkgb3Mtc3BlY2lmaWMgZnVuY3Rpb25zLgogLy8KIAogI2lmIGRlZmlu
ZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU42NCkKQEAgLTIyLDcgKzIyLDkgQEAKICNlcnJvciBV
bnN1cHBvcnRlZCBwbGF0Zm9ybS4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChBTkdMRV9PU19XSU4p
CisjaWYgZGVmaW5lZChBTkdMRV9VU0VfTlNQUikKKyNpbmNsdWRlICJwcnRocmVhZC5oIgorI2Vs
aWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCiAjZGVmaW5lIFNUUklDVAogI2RlZmluZSBWQ19FWFRS
QUxFQU4gMQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KQEAgLTMwLDIwICszMiwyNCBAQAogI2luY2x1
ZGUgPHB0aHJlYWQuaD4KICNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxlcnJuby5o
PgotI2VuZGlmICAvLyBBTkdMRV9PU19XSU4KKyNlbmRpZiAgLy8gQU5HTEVfVVNFX05TUFIKIAor
CiAjaW5jbHVkZSAiY29tcGlsZXIvZGVidWcuaCIKIAogLy8KIC8vIFRocmVhZCBMb2NhbCBTdG9y
YWdlIE9wZXJhdGlvbnMKIC8vCi0jaWYgZGVmaW5lZChBTkdMRV9PU19XSU4pCisjaWYgZGVmaW5l
ZChBTkdMRV9VU0VfTlNQUikKK3R5cGVkZWYgUFJVaW50biBPU19UTFNJbmRleDsKKyNkZWZpbmUg
T1NfSU5WQUxJRF9UTFNfSU5ERVggMHhGRkZGRkZGRgorI2VsaWYgZGVmaW5lZChBTkdMRV9PU19X
SU4pCiB0eXBlZGVmIERXT1JEIE9TX1RMU0luZGV4OwogI2RlZmluZSBPU19JTlZBTElEX1RMU19J
TkRFWCAoVExTX09VVF9PRl9JTkRFWEVTKQogI2VsaWYgZGVmaW5lZChBTkdMRV9PU19QT1NJWCkK
IHR5cGVkZWYgdW5zaWduZWQgaW50IE9TX1RMU0luZGV4OwogI2RlZmluZSBPU19JTlZBTElEX1RM
U19JTkRFWCAweEZGRkZGRkZGCi0jZW5kaWYgIC8vIEFOR0xFX09TX1dJTgorI2VuZGlmICAvLyBB
TkdMRV9VU0VfTlNQUgogCiBPU19UTFNJbmRleCBPU19BbGxvY1RMU0luZGV4KCk7CiBib29sIE9T
X1NldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5JbmRleCwgdm9pZCAqbHB2VmFsdWUpOwpAQCAtNTEs
OCArNTcsMTAgQEAKIAogaW5saW5lIHZvaWQqIE9TX0dldFRMU1ZhbHVlKE9TX1RMU0luZGV4IG5J
bmRleCkKIHsKLSAgICBhc3NlcnQobkluZGV4ICE9IE9TX0lOVkFMSURfVExTX0lOREVYKTsKLSNp
ZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKKyAgICBBU1NFUlQobkluZGV4ICE9IE9TX0lOVkFMSURf
VExTX0lOREVYKTsKKyNpZiBkZWZpbmVkKEFOR0xFX1VTRV9OU1BSKQorICAgIHJldHVybiBQUl9H
ZXRUaHJlYWRQcml2YXRlKG5JbmRleCk7CisjZWxpZiBkZWZpbmVkKEFOR0xFX09TX1dJTikKICAg
ICByZXR1cm4gVGxzR2V0VmFsdWUobkluZGV4KTsKICNlbGlmIGRlZmluZWQoQU5HTEVfT1NfUE9T
SVgpCiAgICAgcmV0dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMobkluZGV4KTsKSW5kZXg6IFNvdXJj
ZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRsZS5oCShyZXZpc2lv
biA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21waWxlci9TaEhhbmRs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNiwyMCArMTYsMjYgQEAKIAogI2luY2x1ZGUgIkdMU0xB
TkcvU2hhZGVyTGFuZy5oIgogCisjaW5jbHVkZSAiY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3Iu
aCIKICNpbmNsdWRlICJjb21waWxlci9JbmZvU2luay5oIgogI2luY2x1ZGUgImNvbXBpbGVyL1N5
bWJvbFRhYmxlLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvVmFyaWFibGVJbmZvLmgiCiAKIGNsYXNz
IFRDb21waWxlcjsKLWNsYXNzIFRJbnRlcm1Ob2RlOwogCiAvLwogLy8gVGhlIGJhc2UgY2xhc3Mg
dXNlZCB0byBiYWNrIGhhbmRsZXMgcmV0dXJuZWQgdG8gdGhlIGRyaXZlci4KIC8vCiBjbGFzcyBU
U2hIYW5kbGVCYXNlIHsKIHB1YmxpYzoKLSAgICBUU2hIYW5kbGVCYXNlKCkgeyB9Ci0gICAgdmly
dHVhbCB+VFNoSGFuZGxlQmFzZSgpIHsgfQorICAgIFRTaEhhbmRsZUJhc2UoKTsKKyAgICB2aXJ0
dWFsIH5UU2hIYW5kbGVCYXNlKCk7CiAgICAgdmlydHVhbCBUQ29tcGlsZXIqIGdldEFzQ29tcGls
ZXIoKSB7IHJldHVybiAwOyB9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBNZW1vcnkgYWxsb2NhdG9y
LiBBbGxvY2F0ZXMgYW5kIHRyYWNrcyBtZW1vcnkgcmVxdWlyZWQgYnkgdGhlIGNvbXBpbGVyLgor
ICAgIC8vIERlYWxsb2NhdGVzIGFsbCBtZW1vcnkgd2hlbiBjb21waWxlciBpcyBkZXN0cnVjdGVk
LgorICAgIFRQb29sQWxsb2NhdG9yIGFsbG9jYXRvcjsKIH07CiAKIC8vCkBAIC0zOCwyNyArNDQs
NDkgQEAKIC8vCiBjbGFzcyBUQ29tcGlsZXIgOiBwdWJsaWMgVFNoSGFuZGxlQmFzZSB7CiBwdWJs
aWM6Ci0gICAgVENvbXBpbGVyKEVTaExhbmd1YWdlIGwsIEVTaFNwZWMgcykgOiBsYW5ndWFnZShs
KSwgc3BlYyhzKSB7IH0KLSAgICB2aXJ0dWFsIH5UQ29tcGlsZXIoKSB7IH0KKyAgICBUQ29tcGls
ZXIoU2hTaGFkZXJUeXBlIHR5cGUsIFNoU2hhZGVyU3BlYyBzcGVjKTsKKyAgICB2aXJ0dWFsIH5U
Q29tcGlsZXIoKTsKKyAgICB2aXJ0dWFsIFRDb21waWxlciogZ2V0QXNDb21waWxlcigpIHsgcmV0
dXJuIHRoaXM7IH0KIAotICAgIEVTaExhbmd1YWdlIGdldExhbmd1YWdlKCkgY29uc3QgeyByZXR1
cm4gbGFuZ3VhZ2U7IH0KLSAgICBFU2hTcGVjIGdldFNwZWMoKSBjb25zdCB7IHJldHVybiBzcGVj
OyB9Ci0gICAgVFN5bWJvbFRhYmxlJiBnZXRTeW1ib2xUYWJsZSgpIHsgcmV0dXJuIHN5bWJvbFRh
YmxlOyB9CisgICAgYm9vbCBJbml0KGNvbnN0IFNoQnVpbHRJblJlc291cmNlcyYgcmVzb3VyY2Vz
KTsKKyAgICBib29sIGNvbXBpbGUoY29uc3QgY2hhciogY29uc3Qgc2hhZGVyU3RyaW5nc1tdLAor
ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgbnVtU3RyaW5ncywKKyAgICAgICAgICAgICAgICAg
aW50IGNvbXBpbGVPcHRpb25zKTsKKworICAgIC8vIEdldCByZXN1bHRzIG9mIHRoZSBsYXN0IGNv
bXBpbGF0aW9uLgogICAgIFRJbmZvU2luayYgZ2V0SW5mb1NpbmsoKSB7IHJldHVybiBpbmZvU2lu
azsgfQorICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBnZXRBdHRyaWJzKCkgY29uc3QgeyBy
ZXR1cm4gYXR0cmliczsgfQorICAgIGNvbnN0IFRWYXJpYWJsZUluZm9MaXN0JiBnZXRVbmlmb3Jt
cygpIGNvbnN0IHsgcmV0dXJuIHVuaWZvcm1zOyB9CiAKLSAgICB2aXJ0dWFsIGJvb2wgY29tcGls
ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAwOworcHJvdGVjdGVkOgorICAgIFNoU2hhZGVyVHlwZSBn
ZXRTaGFkZXJUeXBlKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyVHlwZTsgfQorICAgIFNoU2hhZGVy
U3BlYyBnZXRTaGFkZXJTcGVjKCkgY29uc3QgeyByZXR1cm4gc2hhZGVyU3BlYzsgfQorICAgIC8v
IEluaXRpYWxpemUgc3ltYm9sLXRhYmxlIHdpdGggYnVpbHQtaW4gc3ltYm9scy4KKyAgICBib29s
IEluaXRCdWlsdEluU3ltYm9sVGFibGUoY29uc3QgU2hCdWlsdEluUmVzb3VyY2VzJiByZXNvdXJj
ZXMpOworICAgIC8vIENsZWFycyB0aGUgcmVzdWx0cyBmcm9tIHRoZSBwcmV2aW91cyBjb21waWxh
dGlvbi4KKyAgICB2b2lkIGNsZWFyUmVzdWx0cygpOworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgZ2l2ZW4gc2hhZGVyIGRvZXMgbm90IGV4Y2VlZCB0aGUgbWluaW11bQorICAgIC8vIGZ1bmN0
aW9uYWxpdHkgbWFuZGF0ZWQgaW4gR0xTTCAxLjAgc3BlYyBBcHBlbmRpeCBBLgorICAgIGJvb2wg
dmFsaWRhdGVMaW1pdGF0aW9ucyhUSW50ZXJtTm9kZSogcm9vdCk7CisgICAgLy8gQ29sbGVjdCBp
bmZvIGZvciBhbGwgYXR0cmlicyBhbmQgdW5pZm9ybXMuCisgICAgdm9pZCBjb2xsZWN0QXR0cmli
c1VuaWZvcm1zKFRJbnRlcm1Ob2RlKiByb290KTsKKyAgICAvLyBUcmFuc2xhdGUgdG8gb2JqZWN0
IGNvZGUuCisgICAgdmlydHVhbCB2b2lkIHRyYW5zbGF0ZShUSW50ZXJtTm9kZSogcm9vdCkgPSAw
OwogCi0gICAgdmlydHVhbCBUQ29tcGlsZXIqIGdldEFzQ29tcGlsZXIoKSB7IHJldHVybiB0aGlz
OyB9Citwcml2YXRlOgorICAgIFNoU2hhZGVyVHlwZSBzaGFkZXJUeXBlOworICAgIFNoU2hhZGVy
U3BlYyBzaGFkZXJTcGVjOwogCi1wcm90ZWN0ZWQ6Ci0gICAgRVNoTGFuZ3VhZ2UgbGFuZ3VhZ2U7
Ci0gICAgRVNoU3BlYyBzcGVjOwotCiAgICAgLy8gQnVpbHQtaW4gc3ltYm9sIHRhYmxlIGZvciB0
aGUgZ2l2ZW4gbGFuZ3VhZ2UsIHNwZWMsIGFuZCByZXNvdXJjZXMuCiAgICAgLy8gSXQgaXMgcHJl
c2VydmVkIGZyb20gY29tcGlsZS10by1jb21waWxlLgogICAgIFRTeW1ib2xUYWJsZSBzeW1ib2xU
YWJsZTsKLSAgICAvLyBPdXRwdXQgc2luay4KLSAgICBUSW5mb1NpbmsgaW5mb1Npbms7CisgICAg
Ly8gQnVpbHQtaW4gZXh0ZW5zaW9ucyB3aXRoIGRlZmF1bHQgYmVoYXZpb3IuCisgICAgVEV4dGVu
c2lvbkJlaGF2aW9yIGV4dGVuc2lvbkJlaGF2aW9yOworCisgICAgLy8gUmVzdWx0cyBvZiBjb21w
aWxhdGlvbi4KKyAgICBUSW5mb1NpbmsgaW5mb1Npbms7ICAvLyBPdXRwdXQgc2luay4KKyAgICBU
VmFyaWFibGVJbmZvTGlzdCBhdHRyaWJzOyAgLy8gQWN0aXZlIGF0dHJpYnV0ZXMgaW4gdGhlIGNv
bXBpbGVkIHNoYWRlci4KKyAgICBUVmFyaWFibGVJbmZvTGlzdCB1bmlmb3JtczsgIC8vIEFjdGl2
ZSB1bmlmb3JtcyBpbiB0aGUgY29tcGlsZWQgc2hhZGVyLgogfTsKIAogLy8KQEAgLTcwLDcgKzk4
LDcgQEAKIC8vIGRlc3Ryb3kgdGhlIG1hY2hpbmUgZGVwZW5kZW50IG9iamVjdHMsIHdoaWNoIGNv
bnRhaW4gdGhlCiAvLyBhYm92ZSBtYWNoaW5lIGluZGVwZW5kZW50IGluZm9ybWF0aW9uLgogLy8K
LVRDb21waWxlciogQ29uc3RydWN0Q29tcGlsZXIoRVNoTGFuZ3VhZ2UsIEVTaFNwZWMpOworVENv
bXBpbGVyKiBDb25zdHJ1Y3RDb21waWxlcihTaFNoYWRlclR5cGUgdHlwZSwgU2hTaGFkZXJTcGVj
IHNwZWMpOwogdm9pZCBEZWxldGVDb21waWxlcihUQ29tcGlsZXIqKTsKIAotI2VuZGlmIC8vIF9T
SEhBTkRMRV9JTkNMVURFRF8KKyNlbmRpZiAvLyBfU0hIQU5ETEVfSU5DTFVERURfClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2Nv
bXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkv
QU5HTEUvc3JjL2NvbXBpbGVyL1NlYXJjaFN5bWJvbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzOCBAQAorLy8KKy8vIENvcHlyaWdodCAoYykgMjAwMi0yMDEwIFRo
ZSBBTkdMRSBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBVc2Ugb2Yg
dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQg
Y2FuIGJlCisvLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgorLy8KKy8vIFNlYXJjaFN5bWJv
bCBpcyBhbiBBU1QgdHJhdmVyc2VyIHRvIGRldGVjdCB0aGUgdXNlIG9mIGEgZ2l2ZW4gc3ltYm9s
IG5hbWUKKy8vCisKKyNpbmNsdWRlICJjb21waWxlci9TZWFyY2hTeW1ib2wuaCIKKworI2luY2x1
ZGUgImNvbXBpbGVyL0luZm9TaW5rLmgiCisjaW5jbHVkZSAiY29tcGlsZXIvT3V0cHV0SExTTC5o
IgorCituYW1lc3BhY2Ugc2gKK3sKK1NlYXJjaFN5bWJvbDo6U2VhcmNoU3ltYm9sKGNvbnN0IFRT
dHJpbmcgJnN5bWJvbCkgOiBtU3ltYm9sKHN5bWJvbCkKK3sKKyAgICBtYXRjaCA9IGZhbHNlOwor
fQorCit2b2lkIFNlYXJjaFN5bWJvbDo6dHJhdmVyc2UoVEludGVybU5vZGUgKm5vZGUpCit7Cisg
ICAgbm9kZS0+dHJhdmVyc2UodGhpcyk7Cit9CisKK3ZvaWQgU2VhcmNoU3ltYm9sOjp2aXNpdFN5
bWJvbChUSW50ZXJtU3ltYm9sICpzeW1ib2xOb2RlKQoreworICAgIGlmIChzeW1ib2xOb2RlLT5n
ZXRTeW1ib2woKSA9PSBtU3ltYm9sKQorICAgIHsKKyAgICAgICAgbWF0Y2ggPSB0cnVlOworICAg
IH0KK30KKworYm9vbCBTZWFyY2hTeW1ib2w6OmZvdW5kTWF0Y2goKSBjb25zdAoreworICAgIHJl
dHVybiBtYXRjaDsKK30KK30KSW5kZXg6IFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9jb21w
aWxlci9nbHNsYW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2NvbXBpbGVyL2dsc2xhbmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FO
R0xFL3NyYy9jb21waWxlci9nbHNsYW5nLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYgQEAK
Ky8vCisvLyBDb3B5cmlnaHQgKGMpIDIwMTAgVGhlIEFOR0xFIFByb2plY3QgQXV0aG9ycy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKy8vIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVk
IGJ5IGEgQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKKy8vIGZvdW5kIGluIHRoZSBMSUNF
TlNFIGZpbGUuCisvLworCitzdHJ1Y3QgVFBhcnNlQ29udGV4dDsKK2V4dGVybiBpbnQgZ2xzbGFu
Z19pbml0aWFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOworZXh0ZXJuIGludCBnbHNsYW5n
X2ZpbmFsaXplKFRQYXJzZUNvbnRleHQqIGNvbnRleHQpOworCitleHRlcm4gdm9pZCBnbHNsYW5n
X3NjYW4oaW50IGNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNv
bnN0IHN0cmluZ1tdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsZW5ndGhb
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKK2V4
dGVybiBpbnQgZ2xzbGFuZ19wYXJzZShUUGFyc2VDb250ZXh0KiBjb250ZXh0KTsKKwpJbmRleDog
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9saWJFR0wuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvbGliRUdMLmNwcAkocmV2aXNp
b24gNzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML2xpYkVHTC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2MCw2ICszNjAsOCBAQAogICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQVRUUklC
VVRFLCBFR0xfTk9fU1VSRkFDRSk7CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgYXR0cmliX2xpc3QgKz0gMjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC03NDYs
OCArNzQ4LDE1IEBACiAgICAgICAgICAgICByZXR1cm4gRUdMX0ZBTFNFOwogICAgICAgICB9CiAK
LSAgICAgICAgZGlzcGxheS0+c2V0U3dhcEludGVydmFsKGludGVydmFsKTsKKyAgICAgICAgZWds
OjpTdXJmYWNlICpkcmF3X3N1cmZhY2UgPSBzdGF0aWNfY2FzdDxlZ2w6OlN1cmZhY2UqPihlZ2w6
OmdldEN1cnJlbnREcmF3U3VyZmFjZSgpKTsKIAorICAgICAgICBpZiAoZHJhd19zdXJmYWNlID09
IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX1NVUkZB
Q0UsIEVHTF9GQUxTRSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGRyYXdfc3VyZmFj
ZS0+c2V0U3dhcEludGVydmFsKGludGVydmFsKTsKKwogICAgICAgICByZXR1cm4gc3VjY2VzcyhF
R0xfVFJVRSk7CiAgICAgfQogICAgIGNhdGNoKHN0ZDo6YmFkX2FsbG9jJikKQEAgLTc2NSw2ICs3
NzQsMjggQEAKIAogICAgIHRyeQogICAgIHsKKyAgICAgICAgLy8gR2V0IHRoZSByZXF1ZXN0ZWQg
Y2xpZW50IHZlcnNpb24gKGRlZmF1bHQgaXMgMSkgYW5kIGNoZWNrIGl0IGlzIHR3by4KKyAgICAg
ICAgRUdMaW50IGNsaWVudF92ZXJzaW9uID0gMTsKKyAgICAgICAgaWYgKGF0dHJpYl9saXN0KQor
ICAgICAgICB7CisgICAgICAgICAgICBmb3IgKGNvbnN0IEVHTGludCogYXR0cmlidXRlID0gYXR0
cmliX2xpc3Q7IGF0dHJpYnV0ZVswXSAhPSBFR0xfTk9ORTsgYXR0cmlidXRlICs9IDIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVswXSA9PSBFR0xfQ09OVEVY
VF9DTElFTlRfVkVSU0lPTikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGNsaWVudF92ZXJzaW9uID0gYXR0cmlidXRlWzFdOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZXJyb3IoRUdMX0JBRF9BVFRSSUJVVEUsIEVHTF9OT19DT05URVhUKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2xpZW50
X3ZlcnNpb24gIT0gMikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9C
QURfQ09ORklHLCBFR0xfTk9fQ09OVEVYVCk7CisgICAgICAgIH0KKwogICAgICAgICBlZ2w6OkRp
c3BsYXkgKmRpc3BsYXkgPSBzdGF0aWNfY2FzdDxlZ2w6OkRpc3BsYXkqPihkcHkpOwogCiAgICAg
ICAgIGlmICghdmFsaWRhdGUoZGlzcGxheSwgY29uZmlnKSkKQEAgLTgyNSw3ICs4NTYsNyBAQAog
ICAgICAgICBnbDo6Q29udGV4dCAqY29udGV4dCA9IHN0YXRpY19jYXN0PGdsOjpDb250ZXh0Kj4o
Y3R4KTsKICAgICAgICAgSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlID0gZGlzcGxheS0+Z2V0RGV2
aWNlKCk7CiAKLSAgICAgICAgaWYgKCFkZXZpY2UgfHwgZGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVM
ZXZlbCgpICE9IEQzRF9PSykKKyAgICAgICAgaWYgKCFkZXZpY2UgfHwgRkFJTEVEKGRldmljZS0+
VGVzdENvb3BlcmF0aXZlTGV2ZWwoKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBl
cnJvcihFR0xfQ09OVEVYVF9MT1NULCBFR0xfRkFMU0UpOwogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0NvbmZpZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9Db25maWcuY3BwCShyZXZpc2lvbiA3
NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvQ29uZmlnLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtOTQsMTMgKzk0LDYgQEAKICAgICAgICAgbUJsdWVTaXplID0gNTsK
ICAgICAgICAgbUFscGhhU2l6ZSA9IDA7CiAgICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBEM0RG
TVRfWDFSNUc1QjU6Ci0gICAgICAgIG1CdWZmZXJTaXplID0gMTY7Ci0gICAgICAgIG1SZWRTaXpl
ID0gNTsKLSAgICAgICAgbUdyZWVuU2l6ZSA9IDU7Ci0gICAgICAgIG1CbHVlU2l6ZSA9IDU7Ci0g
ICAgICAgIG1BbHBoYVNpemUgPSAwOwotICAgICAgICBicmVhazsKICAgICAgIGNhc2UgRDNERk1U
X1g4UjhHOEI4OgogICAgICAgICBtQnVmZmVyU2l6ZSA9IDMyOwogICAgICAgICBtUmVkU2l6ZSA9
IDg7CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvRGlzcGxh
eS5jcHAJKHJldmlzaW9uIDc2MDI1KQorKysgU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkVHTC9EaXNwbGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcsNyArMTcsOCBAQAogCiAjaW5j
bHVkZSAibGliRUdML21haW4uaCIKIAotI2RlZmluZSBSRUZfUkFTVCAwICAgLy8gQ2FuIGFsc28g
YmUgZW5hYmxlZCBieSBkZWZpbmluZyBGT1JDRV9SRUZfUkFTVCBpbiB0aGUgcHJvamVjdCdzIHBy
ZWRlZmluZWQgbWFjcm9zCisjZGVmaW5lIFJFRl9SQVNUIDAgICAgICAgIC8vIENhbiBhbHNvIGJl
IGVuYWJsZWQgYnkgZGVmaW5pbmcgRk9SQ0VfUkVGX1JBU1QgaW4gdGhlIHByb2plY3QncyBwcmVk
ZWZpbmVkIG1hY3JvcworI2RlZmluZSBFTkFCTEVfRDNEOUVYIDEgICAvLyBFbmFibGVzIHVzZSBv
ZiB0aGUgSURpcmVjdDNEOUV4IGludGVyZmFjZSwgd2hlbiBhdmFpbGFibGUKIAogbmFtZXNwYWNl
IGVnbAogewpAQCAtNDAsNyArNDEsNiBAQAogCiAgICAgbU1pblN3YXBJbnRlcnZhbCA9IDE7CiAg
ICAgbU1heFN3YXBJbnRlcnZhbCA9IDE7Ci0gICAgc2V0U3dhcEludGVydmFsKDEpOwogfQogCiBE
aXNwbGF5Ojp+RGlzcGxheSgpCkBAIC03Nyw3ICs3Nyw3IEBACiAgICAgLy8gVXNlIERpcmVjdDNE
OUV4IGlmIGF2YWlsYWJsZS4gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIHZlcnNpb24gaXMgbGVz
cwogICAgIC8vIGluY2xpbmVkIHRvIHJlcG9ydCBhIGxvc3QgY29udGV4dCwgZm9yIGV4YW1wbGUg
d2hlbiB0aGUgdXNlciBzd2l0Y2hlcwogICAgIC8vIGRlc2t0b3AuIERpcmVjdDNEOUV4IGlzIGF2
YWlsYWJsZSBpbiBXaW5kb3dzIFZpc3RhIGFuZCBsYXRlciBpZiBzdWl0YWJsZSBkcml2ZXJzIGFy
ZSBhdmFpbGFibGUuCi0gICAgaWYgKERpcmVjdDNEQ3JlYXRlOUV4UHRyICYmIFNVQ0NFRURFRChE
aXJlY3QzRENyZWF0ZTlFeFB0cihEM0RfU0RLX1ZFUlNJT04sICZtRDNkOWV4KSkpCisgICAgaWYg
KEVOQUJMRV9EM0Q5RVggJiYgRGlyZWN0M0RDcmVhdGU5RXhQdHIgJiYgU1VDQ0VFREVEKERpcmVj
dDNEQ3JlYXRlOUV4UHRyKEQzRF9TREtfVkVSU0lPTiwgJm1EM2Q5ZXgpKSkKICAgICB7CiAgICAg
ICAgIEFTU0VSVChtRDNkOWV4KTsKICAgICAgICAgbUQzZDlleC0+UXVlcnlJbnRlcmZhY2UoSUlE
X0lEaXJlY3QzRDksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbUQzZDkpKTsKQEAgLTk1LDEx
ICs5NSwyNiBAQAogICAgICAgICAvLyAgVU5JTVBMRU1FTlRFRCgpOyAgIC8vIEZJWE1FOiBEZXRl
cm1pbmUgd2hpY2ggYWRhcHRlciBpbmRleCB0aGUgZGV2aWNlIGNvbnRleHQgY29ycmVzcG9uZHMg
dG8KICAgICAgICAgfQogCi0gICAgICAgIEhSRVNVTFQgcmVzdWx0ID0gbUQzZDktPkdldERldmlj
ZUNhcHMobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCAmbURldmljZUNhcHMpOwotCi0gICAgICAgIGlm
IChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1PUlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZN
RU1PUlkpCisgICAgICAgIEhSRVNVTFQgcmVzdWx0OworICAgICAgICAKKyAgICAgICAgLy8gR2l2
ZSB1cCBvbiBnZXR0aW5nIGRldmljZSBjYXBzIGFmdGVyIGFib3V0IG9uZSBzZWNvbmQuCisgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTA7ICsraSkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IG1EM2Q5LT5HZXREZXZpY2VDYXBzKG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgJm1EZXZpY2VDYXBz
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKFNVQ0NFRURFRChyZXN1bHQpKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZWxzZSBpZiAocmVzdWx0ID09IEQzREVSUl9OT1RBVkFJTEFCTEUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgU2xlZXAoMTAwKTsgICAvLyBHaXZlIHRoZSBkcml2ZXIgc29t
ZSB0aW1lIHRvIGluaXRpYWxpemUvcmVjb3ZlcgorICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZWxzZSBpZiAoRkFJTEVEKHJlc3VsdCkpICAgLy8gRDNERVJSX09VVE9GVklERU9NRU1PUlksIEVf
T1VUT0ZNRU1PUlksIEQzREVSUl9JTlZBTElEREVWSUNFLCBvciBhbm90aGVyIGVycm9yIHdlIGNh
bid0IHJlY292ZXIgZnJvbQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHRlcm1pbmF0
ZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DLCBmYWxzZSk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBpZiAobURldmljZUNhcHMuUGl4
ZWxTaGFkZXJWZXJzaW9uIDwgRDNEUFNfVkVSU0lPTigyLCAwKSkKQEAgLTEwOCw2ICsxMjMsMTQg
QEAKICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfTk9UX0lOSVRJQUxJWkVELCBmYWxzZSk7
CiAgICAgICAgIH0KIAorICAgICAgICAvLyBXaGVuIERpcmVjdFg5IGlzIHJ1bm5pbmcgd2l0aCBh
biBvbGRlciBEaXJlY3RYOCBkcml2ZXIsIGEgU3RyZXRjaFJlY3QgZnJvbSBhIHJlZ3VsYXIgdGV4
dHVyZSB0byBhIHJlbmRlciB0YXJnZXQgdGV4dHVyZSBpcyBub3Qgc3VwcG9ydGVkLgorICAgICAg
ICAvLyBUaGlzIGlzIHJlcXVpcmVkIGJ5IFRleHR1cmUyRDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0
LgorICAgICAgICBpZiAoKG1EZXZpY2VDYXBzLkRldkNhcHMyICYgRDNEREVWQ0FQUzJfQ0FOX1NU
UkVUQ0hSRUNUX0ZST01fVEVYVFVSRVMpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHRl
cm1pbmF0ZSgpOworICAgICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9OT1RfSU5JVElBTElaRUQs
IGZhbHNlKTsKKyAgICAgICAgfQorCiAgICAgICAgIG1NaW5Td2FwSW50ZXJ2YWwgPSA0OwogICAg
ICAgICBtTWF4U3dhcEludGVydmFsID0gMDsKIApAQCAtMTIzLDcgKzE0Niw3IEBACiAgICAgICAg
IC8vICBEM0RGTVRfQTJSMTBHMTBCMTAsICAgLy8gVGhlIGNvbG9yX3JhbXAgY29uZm9ybWFuY2Ug
dGVzdCB1c2VzIFJlYWRQaXhlbHMgd2l0aCBVTlNJR05FRF9CWVRFIGNhdXNpbmcgaXQgdG8gdGhp
bmsgdGhhdCByZW5kZXJpbmcgc2tpcHBlZCBhIGNvbG91ciB2YWx1ZS4KICAgICAgICAgICAgIEQz
REZNVF9BOFI4RzhCOCwKICAgICAgICAgICAgIEQzREZNVF9SNUc2QjUsCi0gICAgICAgICAgICBE
M0RGTVRfWDFSNUc1QjUsCisgICAgICAgIC8vICBEM0RGTVRfWDFSNUc1QjUsICAgICAgLy8gSGFz
IG5vIGNvbXBhdGlibGUgT3BlbkdMIEVTIHJlbmRlcmJ1ZmZlciBmb3JtYXQKICAgICAgICAgICAg
IEQzREZNVF9YOFI4RzhCOAogICAgICAgICB9OwogCkBAIC0xODMsMTMgKzIwNiw2IEBACiAKICAg
ICAgICAgICAgIG1Db25maWdTZXQubVNldC5pbnNlcnQoY29uZmlndXJhdGlvbik7CiAgICAgICAg
IH0KLQotICAgICAgICBpZiAoIWNyZWF0ZURldmljZSgpKQotICAgICAgICB7Ci0gICAgICAgICAg
ICB0ZXJtaW5hdGUoKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9CiAg
ICAgfQogCiAgICAgaWYgKCFpc0luaXRpYWxpemVkKCkpCkBAIC0xOTksMjMgKzIxNSwzNCBAQAog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCisgICAgc3RhdGljIGNvbnN0IFRDSEFSIHdp
bmRvd05hbWVbXSA9IFRFWFQoIkFuZ2xlSGlkZGVuV2luZG93Iik7CisgICAgc3RhdGljIGNvbnN0
IFRDSEFSIGNsYXNzTmFtZVtdID0gVEVYVCgiU1RBVElDIik7CisKKyAgICBtRGV2aWNlV2luZG93
ID0gQ3JlYXRlV2luZG93RXgoV1NfRVhfTk9BQ1RJVkFURSwgY2xhc3NOYW1lLCB3aW5kb3dOYW1l
LCBXU19ESVNBQkxFRCB8IFdTX1BPUFVQLCAwLCAwLCAxLCAxLCBIV05EX01FU1NBR0UsIE5VTEws
IEdldE1vZHVsZUhhbmRsZShOVUxMKSwgTlVMTCk7CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
dm9pZCBEaXNwbGF5Ojp0ZXJtaW5hdGUoKQogewotICAgIGZvciAoU3VyZmFjZVNldDo6aXRlcmF0
b3Igc3VyZmFjZSA9IG1TdXJmYWNlU2V0LmJlZ2luKCk7IHN1cmZhY2UgIT0gbVN1cmZhY2VTZXQu
ZW5kKCk7IHN1cmZhY2UrKykKKyAgICB3aGlsZSAoIW1TdXJmYWNlU2V0LmVtcHR5KCkpCiAgICAg
ewotICAgICAgICBkZWxldGUgKnN1cmZhY2U7CisgICAgICAgIGRlc3Ryb3lTdXJmYWNlKCptU3Vy
ZmFjZVNldC5iZWdpbigpKTsKICAgICB9CiAKLSAgICBmb3IgKENvbnRleHRTZXQ6Oml0ZXJhdG9y
IGNvbnRleHQgPSBtQ29udGV4dFNldC5iZWdpbigpOyBjb250ZXh0ICE9IG1Db250ZXh0U2V0LmVu
ZCgpOyBjb250ZXh0KyspCisgICAgd2hpbGUgKCFtQ29udGV4dFNldC5lbXB0eSgpKQogICAgIHsK
LSAgICAgICAgZ2xEZXN0cm95Q29udGV4dCgqY29udGV4dCk7CisgICAgICAgIGRlc3Ryb3lDb250
ZXh0KCptQ29udGV4dFNldC5iZWdpbigpKTsKICAgICB9CiAKICAgICBpZiAobURldmljZSkKICAg
ICB7CisgICAgICAgIC8vIElmIHRoZSBkZXZpY2UgaXMgbG9zdCwgcmVzZXQgaXQgZmlyc3QgdG8g
cHJldmVudCBsZWF2aW5nIHRoZSBkcml2ZXIgaW4gYW4gdW5zdGFibGUgc3RhdGUKKyAgICAgICAg
aWYgKEZBSUxFRChtRGV2aWNlLT5UZXN0Q29vcGVyYXRpdmVMZXZlbCgpKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmVzZXREZXZpY2UoKTsKKyAgICAgICAgfQorCiAgICAgICAgIG1EZXZpY2Ut
PlJlbGVhc2UoKTsKICAgICAgICAgbURldmljZSA9IE5VTEw7CiAgICAgfQpAQCAtMzE0LDMzICsz
NDEsMTIgQEAKIAogYm9vbCBEaXNwbGF5OjpjcmVhdGVEZXZpY2UoKQogewotICAgIHN0YXRpYyBj
b25zdCBUQ0hBUiB3aW5kb3dOYW1lW10gPSBURVhUKCJBbmdsZUhpZGRlbldpbmRvdyIpOwotICAg
IHN0YXRpYyBjb25zdCBUQ0hBUiBjbGFzc05hbWVbXSA9IFRFWFQoIlNUQVRJQyIpOwotCi0gICAg
bURldmljZVdpbmRvdyA9IENyZWF0ZVdpbmRvd0V4KFdTX0VYX05PQUNUSVZBVEUsIGNsYXNzTmFt
ZSwgd2luZG93TmFtZSwgV1NfRElTQUJMRUQgfCBXU19QT1BVUCwgMCwgMCwgMSwgMSwgSFdORF9N
RVNTQUdFLCBOVUxMLCBHZXRNb2R1bGVIYW5kbGUoTlVMTCksIE5VTEwpOwotCi0gICAgRDNEUFJF
U0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gezB9OwotCi0gICAgLy8gVGhlIGRl
ZmF1bHQgc3dhcCBjaGFpbiBpcyBuZXZlciBhY3R1YWxseSB1c2VkLiBTdXJmYWNlIHdpbGwgY3Jl
YXRlIGEgbmV3IHN3YXAgY2hhaW4gd2l0aCB0aGUgcHJvcGVyIHBhcmFtZXRlcnMuCi0gICAgcHJl
c2VudFBhcmFtZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IEQzREZNVF9VTktOT1dOOwot
ICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7Ci0gICAgcHJlc2VudFBh
cmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCA9IEQzREZNVF9VTktOT1dOOwotICAgIHByZXNlbnRQ
YXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IDE7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuQmFj
a0J1ZmZlckhlaWdodCA9IDE7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRo
U3RlbmNpbCA9IEZBTFNFOwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKLSAgICBw
cmVzZW50UGFyYW1ldGVycy5oRGV2aWNlV2luZG93ID0gbURldmljZVdpbmRvdzsKLSAgICBwcmVz
ZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVF1YWxpdHkgPSAwOwotICAgIHByZXNlbnRQYXJhbWV0
ZXJzLk11bHRpU2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7Ci0gICAgcHJlc2VudFBh
cmFtZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBjb252ZXJ0SW50ZXJ2YWwobU1pblN3YXBJ
bnRlcnZhbCk7Ci0gICAgcHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZF
Q1RfRElTQ0FSRDsKLSAgICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7Ci0KKyAg
ICBEM0RQUkVTRU5UX1BBUkFNRVRFUlMgcHJlc2VudFBhcmFtZXRlcnMgPSBnZXREZWZhdWx0UHJl
c2VudFBhcmFtZXRlcnMoKTsKICAgICBEV09SRCBiZWhhdmlvckZsYWdzID0gRDNEQ1JFQVRFX0ZQ
VV9QUkVTRVJWRSB8IEQzRENSRUFURV9OT1dJTkRPV0NIQU5HRVM7CiAKICAgICBIUkVTVUxUIHJl
c3VsdCA9IG1EM2Q5LT5DcmVhdGVEZXZpY2UobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBtRGV2aWNl
V2luZG93LCBiZWhhdmlvckZsYWdzIHwgRDNEQ1JFQVRFX0hBUkRXQVJFX1ZFUlRFWFBST0NFU1NJ
TkcgfCBEM0RDUkVBVEVfUFVSRURFVklDRSwgJnByZXNlbnRQYXJhbWV0ZXJzLCAmbURldmljZSk7
CiAKLSAgICBpZiAocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9
PSBFX09VVE9GTUVNT1JZKQorICAgIGlmIChyZXN1bHQgPT0gRDNERVJSX09VVE9GVklERU9NRU1P
UlkgfHwgcmVzdWx0ID09IEVfT1VUT0ZNRU1PUlkgfHwgcmVzdWx0ID09IEQzREVSUl9ERVZJQ0VM
T1NUKQogICAgIHsKICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxMT0MsIGZhbHNlKTsK
ICAgICB9CkBAIC0zNDksMTQgKzM1NSwxMyBAQAogICAgIHsKICAgICAgICAgcmVzdWx0ID0gbUQz
ZDktPkNyZWF0ZURldmljZShtQWRhcHRlciwgbURldmljZVR5cGUsIG1EZXZpY2VXaW5kb3csIGJl
aGF2aW9yRmxhZ3MgfCBEM0RDUkVBVEVfU09GVFdBUkVfVkVSVEVYUFJPQ0VTU0lORywgJnByZXNl
bnRQYXJhbWV0ZXJzLCAmbURldmljZSk7CiAKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJf
T1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSkKKyAgICAgICAgaWYg
KEZBSUxFRChyZXN1bHQpKQogICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVzdWx0ID09
IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZIHx8IHJl
c3VsdCA9PSBEM0RFUlJfTk9UQVZBSUxBQkxFIHx8IHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9T
VCk7CiAgICAgICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQywgZmFsc2UpOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgQVNTRVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKLQogICAgIC8v
IFBlcm1hbmVudCBub24tZGVmYXVsdCBzdGF0ZXMKICAgICBtRGV2aWNlLT5TZXRSZW5kZXJTdGF0
ZShEM0RSU19QT0lOVFNQUklURUVOQUJMRSwgVFJVRSk7CiAKQEAgLTM2NSw2ICszNzAsMjkgQEAK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBEaXNwbGF5OjpyZXNldERldmljZSgpCit7Cisg
ICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gZ2V0RGVmYXVsdFBy
ZXNlbnRQYXJhbWV0ZXJzKCk7CisgICAgSFJFU1VMVCByZXN1bHQ7CisgICAgCisgICAgZG8KKyAg
ICB7CisgICAgICAgIFNsZWVwKDApOyAgIC8vIEdpdmUgdGhlIGdyYXBoaWNzIGRyaXZlciBzb21l
IENQVSB0aW1lCisKKyAgICAgICAgcmVzdWx0ID0gbURldmljZS0+UmVzZXQoJnByZXNlbnRQYXJh
bWV0ZXJzKTsKKyAgICB9CisgICAgd2hpbGUgKHJlc3VsdCA9PSBEM0RFUlJfREVWSUNFTE9TVCk7
CisKKyAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCisgICAgeworICAgICAgICByZXR1cm4gZXJyb3Io
RUdMX0JBRF9BTExPQywgZmFsc2UpOworICAgIH0KKworICAgIEFTU0VSVChTVUNDRUVERUQocmVz
dWx0KSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogU3VyZmFjZSAqRGlzcGxheTo6Y3JlYXRl
V2luZG93U3VyZmFjZShIV05EIHdpbmRvdywgRUdMQ29uZmlnIGNvbmZpZykKIHsKICAgICBjb25z
dCBDb25maWcgKmNvbmZpZ3VyYXRpb24gPSBtQ29uZmlnU2V0LmdldChjb25maWcpOwpAQCAtMzc3
LDYgKzQwNSwyNyBAQAogCiBFR0xDb250ZXh0IERpc3BsYXk6OmNyZWF0ZUNvbnRleHQoRUdMQ29u
ZmlnIGNvbmZpZ0hhbmRsZSwgY29uc3QgZ2w6OkNvbnRleHQgKnNoYXJlQ29udGV4dCkKIHsKKyAg
ICBpZiAoIW1EZXZpY2UpCisgICAgeworICAgICAgICBpZiAoIWNyZWF0ZURldmljZSgpKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBl
bHNlIGlmIChGQUlMRUQobURldmljZS0+VGVzdENvb3BlcmF0aXZlTGV2ZWwoKSkpICAgLy8gTG9z
dCBkZXZpY2UKKyAgICB7CisgICAgICAgIGlmICghcmVzZXREZXZpY2UoKSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvLyBSZXN0b3Jl
IGFueSBzdXJmYWNlcyB0aGF0IG1heSBoYXZlIGJlZW4gbG9zdAorICAgICAgICBmb3IgKFN1cmZh
Y2VTZXQ6Oml0ZXJhdG9yIHN1cmZhY2UgPSBtU3VyZmFjZVNldC5iZWdpbigpOyBzdXJmYWNlICE9
IG1TdXJmYWNlU2V0LmVuZCgpOyBzdXJmYWNlKyspCisgICAgICAgIHsKKyAgICAgICAgICAgICgq
c3VyZmFjZSktPnJlc2V0U3dhcENoYWluKCk7CisgICAgICAgIH0KKyAgICB9CisKICAgICBjb25z
dCBlZ2w6OkNvbmZpZyAqY29uZmlnID0gbUNvbmZpZ1NldC5nZXQoY29uZmlnSGFuZGxlKTsKIAog
ICAgIGdsOjpDb250ZXh0ICpjb250ZXh0ID0gZ2xDcmVhdGVDb250ZXh0KGNvbmZpZywgc2hhcmVD
b250ZXh0KTsKQEAgLTM5NSw2ICs0NDQsMTQgQEAKIHsKICAgICBnbERlc3Ryb3lDb250ZXh0KGNv
bnRleHQpOwogICAgIG1Db250ZXh0U2V0LmVyYXNlKGNvbnRleHQpOworCisgICAgaWYgKG1Db250
ZXh0U2V0LmVtcHR5KCkgJiYgbURldmljZSAmJiBGQUlMRUQobURldmljZS0+VGVzdENvb3BlcmF0
aXZlTGV2ZWwoKSkpICAgLy8gTGFzdCBjb250ZXh0IG9mIGEgbG9zdCBkZXZpY2UKKyAgICB7Cisg
ICAgICAgIGZvciAoU3VyZmFjZVNldDo6aXRlcmF0b3Igc3VyZmFjZSA9IG1TdXJmYWNlU2V0LmJl
Z2luKCk7IHN1cmZhY2UgIT0gbVN1cmZhY2VTZXQuZW5kKCk7IHN1cmZhY2UrKykKKyAgICAgICAg
eworICAgICAgICAgICAgKCpzdXJmYWNlKS0+cmVsZWFzZSgpOworICAgICAgICB9CQorICAgIH0K
IH0KIAogYm9vbCBEaXNwbGF5Ojppc0luaXRpYWxpemVkKCkKQEAgLTQzMCwzNyArNDg3LDI2IEBA
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIERpc3BsYXk6OnNldFN3YXBJbnRlcnZhbChH
TGludCBpbnRlcnZhbCkKK0VHTGludCBEaXNwbGF5OjpnZXRNaW5Td2FwSW50ZXJ2YWwoKQogewot
ICAgIG1Td2FwSW50ZXJ2YWwgPSBpbnRlcnZhbDsKLSAgICBtU3dhcEludGVydmFsID0gc3RkOjpt
YXgobVN3YXBJbnRlcnZhbCwgbU1pblN3YXBJbnRlcnZhbCk7Ci0gICAgbVN3YXBJbnRlcnZhbCA9
IHN0ZDo6bWluKG1Td2FwSW50ZXJ2YWwsIG1NYXhTd2FwSW50ZXJ2YWwpOwotCi0gICAgbVByZXNl
bnRJbnRlcnZhbCA9IGNvbnZlcnRJbnRlcnZhbChtU3dhcEludGVydmFsKTsKKyAgICByZXR1cm4g
bU1pblN3YXBJbnRlcnZhbDsKIH0KIAotRFdPUkQgRGlzcGxheTo6Z2V0UHJlc2VudEludGVydmFs
KCkKK0VHTGludCBEaXNwbGF5OjpnZXRNYXhTd2FwSW50ZXJ2YWwoKQogewotICAgIHJldHVybiBt
UHJlc2VudEludGVydmFsOworICAgIHJldHVybiBtTWF4U3dhcEludGVydmFsOwogfQogCi1EV09S
RCBEaXNwbGF5Ojpjb252ZXJ0SW50ZXJ2YWwoR0xpbnQgaW50ZXJ2YWwpCitJRGlyZWN0M0REZXZp
Y2U5ICpEaXNwbGF5OjpnZXREZXZpY2UoKQogewotICAgIHN3aXRjaChpbnRlcnZhbCkKKyAgICBp
ZiAoIW1EZXZpY2UpCiAgICAgewotICAgICAgY2FzZSAwOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRF
UlZBTF9JTU1FRElBVEU7Ci0gICAgICBjYXNlIDE6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFM
X09ORTsKLSAgICAgIGNhc2UgMjogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfVFdPOwotICAg
ICAgY2FzZSAzOiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9USFJFRTsKLSAgICAgIGNhc2Ug
NDogcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfRk9VUjsKLSAgICAgIGRlZmF1bHQ6IFVOUkVB
Q0hBQkxFKCk7CisgICAgICAgIGlmICghY3JlYXRlRGV2aWNlKCkpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgfQogCi0gICAgcmV0dXJuIEQzRFBS
RVNFTlRfSU5URVJWQUxfREVGQVVMVDsKLX0KLQotSURpcmVjdDNERGV2aWNlOSAqRGlzcGxheTo6
Z2V0RGV2aWNlKCkKLXsKICAgICByZXR1cm4gbURldmljZTsKIH0KIApAQCAtNDg3LDQgKzUzMywx
MjcgQEAKIAogICAgIHJldHVybiBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1B
ZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgMCwgRDNEUlRZ
UEVfVEVYVFVSRSwgRDNERk1UX0RYVDEpKTsKIH0KKworYm9vbCBEaXNwbGF5OjpnZXRGbG9hdFRl
eHR1cmVTdXBwb3J0KGJvb2wgKmZpbHRlcmluZywgYm9vbCAqcmVuZGVyYWJsZSkKK3sKKyAgICBE
M0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1vZGU7CisgICAgbUQzZDktPkdldEFkYXB0ZXJE
aXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnREaXNwbGF5TW9kZSk7CisKKyAgICAqZmlsdGVy
aW5nID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmlj
ZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1FVRVJZX0ZJTFRFUiwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNE
UlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSAmJgorICAgICAgICAgICAgICAg
ICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlw
ZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVSLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBF
X0NVQkVURVhUVVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOworICAgIAorICAgICpyZW5kZXJh
YmxlID0gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRlciwgbURldmlj
ZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIEQzRFVTQUdFX1JFTkRFUlRBUkdFVCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNE
UlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSYmCisgICAgICAgICAgICAgICAg
ICBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlw
ZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQ
RV9DVUJFVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKTsKKworICAgIGlmICghZmlsdGVy
aW5nICYmICFyZW5kZXJhYmxlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFNVQ0NFRURFRChtRDNk
OS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxh
eU1vZGUuRm9ybWF0LCAwLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0EzMkIzMkczMlIzMkYpKSAmJgor
ICAgICAgICAgICAgICAgU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZvcm1hdChtQWRhcHRl
ciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEQzRFJUWVBFX0NVQkVURVhU
VVJFLCBEM0RGTVRfQTMyQjMyRzMyUjMyRikpOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CiB9CisKK2Jvb2wgRGlzcGxheTo6Z2V0SGFsZkZsb2F0
VGV4dHVyZVN1cHBvcnQoYm9vbCAqZmlsdGVyaW5nLCBib29sICpyZW5kZXJhYmxlKQoreworICAg
IEQzRERJU1BMQVlNT0RFIGN1cnJlbnREaXNwbGF5TW9kZTsKKyAgICBtRDNkOS0+R2V0QWRhcHRl
ckRpc3BsYXlNb2RlKG1BZGFwdGVyLCAmY3VycmVudERpc3BsYXlNb2RlKTsKKworICAgICpmaWx0
ZXJpbmcgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUVVFUllfRklMVEVS
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpICYmCisgICAgICAgICAgICAg
ICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9RVUVSWV9GSUxURVIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZ
UEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSk7CisgICAgCisgICAgKnJlbmRl
cmFibGUgPSBTVUNDRUVERUQobUQzZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2
aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2RlLkZvcm1hdCwgRDNEVVNBR0VfUkVOREVSVEFSR0VU
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE
M0RSVFlQRV9URVhUVVJFLCBEM0RGTVRfQTE2QjE2RzE2UjE2RikpICYmCisgICAgICAgICAgICAg
ICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0ZXIsIG1EZXZpY2VU
eXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCBEM0RVU0FHRV9SRU5ERVJUQVJHRVQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRDNEUlRZ
UEVfQ1VCRVRFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSk7CisKKyAgICBpZiAoIWZpbHRl
cmluZyAmJiAhcmVuZGVyYWJsZSkKKyAgICB7CisgICAgICAgIHJldHVybiBTVUNDRUVERUQobUQz
ZDktPkNoZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3Bs
YXlNb2RlLkZvcm1hdCwgMCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9BMTZCMTZHMTZSMTZGKSkgJiYK
KyAgICAgICAgICAgICAgIFNVQ0NFRURFRChtRDNkOS0+Q2hlY2tEZXZpY2VGb3JtYXQobUFkYXB0
ZXIsIG1EZXZpY2VUeXBlLCBjdXJyZW50RGlzcGxheU1vZGUuRm9ybWF0LCAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEM0RSVFlQRV9DVUJFVEVY
VFVSRSwgRDNERk1UX0ExNkIxNkcxNlIxNkYpKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCitib29sIERpc3BsYXk6OmdldEx1bWluYW5j
ZVRleHR1cmVTdXBwb3J0KCkKK3sKKyAgICBEM0RESVNQTEFZTU9ERSBjdXJyZW50RGlzcGxheU1v
ZGU7CisgICAgbUQzZDktPkdldEFkYXB0ZXJEaXNwbGF5TW9kZShtQWRhcHRlciwgJmN1cnJlbnRE
aXNwbGF5TW9kZSk7CisKKyAgICByZXR1cm4gU1VDQ0VFREVEKG1EM2Q5LT5DaGVja0RldmljZUZv
cm1hdChtQWRhcHRlciwgbURldmljZVR5cGUsIGN1cnJlbnREaXNwbGF5TW9kZS5Gb3JtYXQsIDAs
IEQzRFJUWVBFX1RFWFRVUkUsIEQzREZNVF9MOCkpOworfQorCitib29sIERpc3BsYXk6OmdldEx1
bWluYW5jZUFscGhhVGV4dHVyZVN1cHBvcnQoKQoreworICAgIEQzRERJU1BMQVlNT0RFIGN1cnJl
bnREaXNwbGF5TW9kZTsKKyAgICBtRDNkOS0+R2V0QWRhcHRlckRpc3BsYXlNb2RlKG1BZGFwdGVy
LCAmY3VycmVudERpc3BsYXlNb2RlKTsKKworICAgIHJldHVybiBTVUNDRUVERUQobUQzZDktPkNo
ZWNrRGV2aWNlRm9ybWF0KG1BZGFwdGVyLCBtRGV2aWNlVHlwZSwgY3VycmVudERpc3BsYXlNb2Rl
LkZvcm1hdCwgMCwgRDNEUlRZUEVfVEVYVFVSRSwgRDNERk1UX0E4TDgpKTsKK30KKworRDNEUE9P
TCBEaXNwbGF5OjpnZXRCdWZmZXJQb29sKERXT1JEIHVzYWdlKSBjb25zdAoreworICAgIGlmICht
RDNkOWV4ICE9IE5VTEwpCisgICAgeworICAgICAgICByZXR1cm4gRDNEUE9PTF9ERUZBVUxUOwor
ICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoISh1c2FnZSAmIEQzRFVTQUdFX0RZ
TkFNSUMpKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRDNEUE9PTF9NQU5BR0VEOwor
ICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIEQzRFBPT0xfREVGQVVMVDsKK30KKworYm9v
bCBEaXNwbGF5OjpnZXRFdmVudFF1ZXJ5U3VwcG9ydCgpCit7CisgICAgSURpcmVjdDNEUXVlcnk5
ICpxdWVyeTsKKyAgICBIUkVTVUxUIHJlc3VsdCA9IG1EZXZpY2UtPkNyZWF0ZVF1ZXJ5KEQzRFFV
RVJZVFlQRV9FVkVOVCwgJnF1ZXJ5KTsKKyAgICBpZiAoU1VDQ0VFREVEKHJlc3VsdCkpCisgICAg
eworICAgICAgICBxdWVyeS0+UmVsZWFzZSgpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQg
IT0gRDNERVJSX05PVEFWQUlMQUJMRTsKK30KKworRDNEUFJFU0VOVF9QQVJBTUVURVJTIERpc3Bs
YXk6OmdldERlZmF1bHRQcmVzZW50UGFyYW1ldGVycygpCit7CisgICAgRDNEUFJFU0VOVF9QQVJB
TUVURVJTIHByZXNlbnRQYXJhbWV0ZXJzID0gezB9OworCisgICAgLy8gVGhlIGRlZmF1bHQgc3dh
cCBjaGFpbiBpcyBuZXZlciBhY3R1YWxseSB1c2VkLiBTdXJmYWNlIHdpbGwgY3JlYXRlIGEgbmV3
IHN3YXAgY2hhaW4gd2l0aCB0aGUgcHJvcGVyIHBhcmFtZXRlcnMuCisgICAgcHJlc2VudFBhcmFt
ZXRlcnMuQXV0b0RlcHRoU3RlbmNpbEZvcm1hdCA9IEQzREZNVF9VTktOT1dOOworICAgIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJDb3VudCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMu
QmFja0J1ZmZlckZvcm1hdCA9IEQzREZNVF9VTktOT1dOOworICAgIHByZXNlbnRQYXJhbWV0ZXJz
LkJhY2tCdWZmZXJXaWR0aCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhl
aWdodCA9IDE7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuRW5hYmxlQXV0b0RlcHRoU3RlbmNpbCA9
IEZBTFNFOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLkZsYWdzID0gMDsKKyAgICBwcmVzZW50UGFy
YW1ldGVycy5oRGV2aWNlV2luZG93ID0gbURldmljZVdpbmRvdzsKKyAgICBwcmVzZW50UGFyYW1l
dGVycy5NdWx0aVNhbXBsZVF1YWxpdHkgPSAwOworICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRp
U2FtcGxlVHlwZSA9IEQzRE1VTFRJU0FNUExFX05PTkU7CisgICAgcHJlc2VudFBhcmFtZXRlcnMu
UHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBEM0RQUkVTRU5UX0lOVEVSVkFMX0RFRkFVTFQ7CisgICAg
cHJlc2VudFBhcmFtZXRlcnMuU3dhcEVmZmVjdCA9IEQzRFNXQVBFRkZFQ1RfRElTQ0FSRDsKKyAg
ICBwcmVzZW50UGFyYW1ldGVycy5XaW5kb3dlZCA9IFRSVUU7CisKKyAgICByZXR1cm4gcHJlc2Vu
dFBhcmFtZXRlcnM7Cit9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogU291
cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkVHTC9TdXJmYWNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuY3BwCShyZXZpc2lv
biA3NjAyNSkKKysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJFR0wvU3VyZmFjZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgsNiArOCw4IEBACiAvLyBzdWNoIGFzIHRoZSBjbGllbnQg
YXJlYSBvZiBhIHdpbmRvdywgaW5jbHVkaW5nIGFueSBiYWNrIGJ1ZmZlcnMuCiAvLyBJbXBsZW1l
bnRzIEVHTFN1cmZhY2UgYW5kIHJlbGF0ZWQgZnVuY3Rpb25hbGl0eS4gW0VHTCAxLjRdIHNlY3Rp
b24gMi4yIHBhZ2UgMy4KIAorI2luY2x1ZGUgPHRjaGFyLmg+CisKICNpbmNsdWRlICJsaWJFR0wv
U3VyZmFjZS5oIgogCiAjaW5jbHVkZSAiY29tbW9uL2RlYnVnLmgiCkBAIC0yMyw3ICsyNSw2IEBA
CiAgICAgbVN3YXBDaGFpbiA9IE5VTEw7CiAgICAgbURlcHRoU3RlbmNpbCA9IE5VTEw7CiAgICAg
bUJhY2tCdWZmZXIgPSBOVUxMOwotICAgIG1SZW5kZXJUYXJnZXQgPSBOVUxMOwogICAgIG1GbGlw
VGV4dHVyZSA9IE5VTEw7CiAgICAgbUZsaXBTdGF0ZSA9IE5VTEw7CiAgICAgbVByZUZsaXBTdGF0
ZSA9IE5VTEw7CkBAIC0zMSw1MiArMzIsODYgQEAKICAgICBtUGl4ZWxBc3BlY3RSYXRpbyA9IChF
R0xpbnQpKDEuMCAqIEVHTF9ESVNQTEFZX1NDQUxJTkcpOyAgIC8vIEZJWE1FOiBEZXRlcm1pbmUg
YWN0dWFsIHBpeGVsIGFzcGVjdCByYXRpbwogICAgIG1SZW5kZXJCdWZmZXIgPSBFR0xfQkFDS19C
VUZGRVI7CiAgICAgbVN3YXBCZWhhdmlvciA9IEVHTF9CVUZGRVJfUFJFU0VSVkVEOworICAgIG1T
d2FwSW50ZXJ2YWwgPSAtMTsKKyAgICBzZXRTd2FwSW50ZXJ2YWwoMSk7CiAKKyAgICBzdWJjbGFz
c1dpbmRvdygpOwogICAgIHJlc2V0U3dhcENoYWluKCk7CiB9CiAKIFN1cmZhY2U6On5TdXJmYWNl
KCkKIHsKKyAgICB1bnN1YmNsYXNzV2luZG93KCk7CisgICAgcmVsZWFzZSgpOworfQorCit2b2lk
IFN1cmZhY2U6OnJlbGVhc2UoKQorewogICAgIGlmIChtU3dhcENoYWluKQogICAgIHsKICAgICAg
ICAgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOworICAgICAgICBtU3dhcENoYWluID0gTlVMTDsKICAg
ICB9CiAKICAgICBpZiAobUJhY2tCdWZmZXIpCiAgICAgewogICAgICAgICBtQmFja0J1ZmZlci0+
UmVsZWFzZSgpOworICAgICAgICBtQmFja0J1ZmZlciA9IE5VTEw7CiAgICAgfQogCi0gICAgaWYg
KG1SZW5kZXJUYXJnZXQpCi0gICAgewotICAgICAgICBtUmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7
Ci0gICAgfQotCiAgICAgaWYgKG1EZXB0aFN0ZW5jaWwpCiAgICAgewogICAgICAgICBtRGVwdGhT
dGVuY2lsLT5SZWxlYXNlKCk7CisgICAgICAgIG1EZXB0aFN0ZW5jaWwgPSBOVUxMOwogICAgIH0K
IAogICAgIGlmIChtRmxpcFRleHR1cmUpCiAgICAgewogICAgICAgICBtRmxpcFRleHR1cmUtPlJl
bGVhc2UoKTsKKyAgICAgICAgbUZsaXBUZXh0dXJlID0gTlVMTDsKICAgICB9CiAKICAgICBpZiAo
bUZsaXBTdGF0ZSkKICAgICB7CiAgICAgICAgIG1GbGlwU3RhdGUtPlJlbGVhc2UoKTsKKyAgICAg
ICAgbUZsaXBTdGF0ZSA9IE5VTEw7CiAgICAgfQogCiAgICAgaWYgKG1QcmVGbGlwU3RhdGUpCiAg
ICAgewogICAgICAgICBtUHJlRmxpcFN0YXRlLT5SZWxlYXNlKCk7CisgICAgICAgIG1QcmVGbGlw
U3RhdGUgPSBOVUxMOwogICAgIH0KIH0KIAogdm9pZCBTdXJmYWNlOjpyZXNldFN3YXBDaGFpbigp
CiB7CisgICAgUkVDVCB3aW5kb3dSZWN0OworICAgIGlmICghR2V0Q2xpZW50UmVjdChnZXRXaW5k
b3dIYW5kbGUoKSwgJndpbmRvd1JlY3QpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGZhbHNlKTsK
KworICAgICAgICBFUlIoIkNvdWxkIG5vdCByZXRyaWV2ZSB0aGUgd2luZG93IGRpbWVuc2lvbnMi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHJlc2V0U3dhcENoYWluKHdpbmRvd1Jl
Y3QucmlnaHQgLSB3aW5kb3dSZWN0LmxlZnQsIHdpbmRvd1JlY3QuYm90dG9tIC0gd2luZG93UmVj
dC50b3ApOworfQorCit2b2lkIFN1cmZhY2U6OnJlc2V0U3dhcENoYWluKGludCBiYWNrYnVmZmVy
V2lkdGgsIGludCBiYWNrYnVmZmVySGVpZ2h0KQorewogICAgIElEaXJlY3QzRERldmljZTkgKmRl
dmljZSA9IG1EaXNwbGF5LT5nZXREZXZpY2UoKTsKIAorICAgIGlmIChkZXZpY2UgPT0gTlVMTCkK
KyAgICB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBFdmljdCBhbGwgbm9uLXJl
bmRlciB0YXJnZXQgdGV4dHVyZXMgdG8gc3lzdGVtIG1lbW9yeSBhbmQgcmVsZWFzZSBhbGwgcmVz
b3VyY2VzCisgICAgLy8gYmVmb3JlIHJlYWxsb2NhdGluZyB0aGVtIHRvIGZyZWUgdXAgYXMgbXVj
aCB2aWRlbyBtZW1vcnkgYXMgcG9zc2libGUuCisgICAgZGV2aWNlLT5FdmljdE1hbmFnZWRSZXNv
dXJjZXMoKTsKKyAgICByZWxlYXNlKCk7CisgICAgCiAgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJT
IHByZXNlbnRQYXJhbWV0ZXJzID0gezB9OwogCiAgICAgcHJlc2VudFBhcmFtZXRlcnMuQXV0b0Rl
cHRoU3RlbmNpbEZvcm1hdCA9IG1Db25maWctPm1EZXB0aFN0ZW5jaWxGb3JtYXQ7CkBAIC04Nyw5
NyArMTIyLDU4IEBACiAgICAgcHJlc2VudFBhcmFtZXRlcnMuaERldmljZVdpbmRvdyA9IGdldFdp
bmRvd0hhbmRsZSgpOwogICAgIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSA9
IDA7ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVuaW1wbGVtZW50ZWQKICAgICBwcmVzZW50
UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUgPSBEM0RNVUxUSVNBTVBMRV9OT05FOyAgIC8vIEZJ
WE1FOiBVbmltcGxlbWVudGVkCi0gICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50
ZXJ2YWwgPSBEaXNwbGF5Ojpjb252ZXJ0SW50ZXJ2YWwobUNvbmZpZy0+bU1pblN3YXBJbnRlcnZh
bCk7CisgICAgcHJlc2VudFBhcmFtZXRlcnMuUHJlc2VudGF0aW9uSW50ZXJ2YWwgPSBtUHJlc2Vu
dEludGVydmFsOwogICAgIHByZXNlbnRQYXJhbWV0ZXJzLlN3YXBFZmZlY3QgPSBEM0RTV0FQRUZG
RUNUX0RJU0NBUkQ7CiAgICAgcHJlc2VudFBhcmFtZXRlcnMuV2luZG93ZWQgPSBUUlVFOworICAg
IHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCA9IGJhY2tidWZmZXJXaWR0aDsKKyAg
ICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVySGVpZ2h0ID0gYmFja2J1ZmZlckhlaWdodDsK
IAotICAgIFJFQ1Qgd2luZG93UmVjdDsKLSAgICBpZiAoIUdldENsaWVudFJlY3QoZ2V0V2luZG93
SGFuZGxlKCksICZ3aW5kb3dSZWN0KSkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChmYWxzZSk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgSFJFU1VMVCByZXN1bHQgPSBkZXZpY2UtPkNyZWF0
ZUFkZGl0aW9uYWxTd2FwQ2hhaW4oJnByZXNlbnRQYXJhbWV0ZXJzLCAmbVN3YXBDaGFpbik7CiAK
LSAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGggPSB3aW5kb3dSZWN0LnJpZ2h0
IC0gd2luZG93UmVjdC5sZWZ0OwotICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWln
aHQgPSB3aW5kb3dSZWN0LmJvdHRvbSAtIHdpbmRvd1JlY3QudG9wOwotCi0gICAgSURpcmVjdDNE
U3dhcENoYWluOSAqc3dhcENoYWluID0gTlVMTDsKLSAgICBIUkVTVUxUIHJlc3VsdCA9IGRldmlj
ZS0+Q3JlYXRlQWRkaXRpb25hbFN3YXBDaGFpbigmcHJlc2VudFBhcmFtZXRlcnMsICZzd2FwQ2hh
aW4pOwotCiAgICAgaWYgKEZBSUxFRChyZXN1bHQpKQogICAgIHsKICAgICAgICAgQVNTRVJUKHJl
c3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9S
WSk7CiAKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGFkZGl0aW9uYWwgc3dhcCBjaGFp
bnM6ICUwOGxYIiwgcmVzdWx0KTsKKyAgICAgICAgcmVsZWFzZSgpOwogICAgICAgICByZXR1cm4g
ZXJyb3IoRUdMX0JBRF9BTExPQyk7CiAgICAgfQogCi0gICAgSURpcmVjdDNEU3VyZmFjZTkgKmRl
cHRoU3RlbmNpbFN1cmZhY2UgPSBOVUxMOwogICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlRGVw
dGhTdGVuY2lsU3VyZmFjZShwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyV2lkdGgsIHByZXNl
bnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJIZWlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkF1dG9EZXB0aFN0ZW5jaWxG
b3JtYXQsIHByZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlVHlwZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VudFBhcmFtZXRlcnMuTXVsdGlT
YW1wbGVRdWFsaXR5LCBGQUxTRSwgJmRlcHRoU3RlbmNpbFN1cmZhY2UsIE5VTEwpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVy
cy5NdWx0aVNhbXBsZVF1YWxpdHksIEZBTFNFLCAmbURlcHRoU3RlbmNpbCwgTlVMTCk7CiAKICAg
ICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAgewogICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQz
REVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJlc3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKIAotICAg
ICAgICBzd2FwQ2hhaW4tPlJlbGVhc2UoKTsKLQogICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVh
dGUgZGVwdGhzdGVuY2lsIHN1cmZhY2UgZm9yIG5ldyBzd2FwIGNoYWluOiAlMDhsWCIsIHJlc3Vs
dCk7CisgICAgICAgIHJlbGVhc2UoKTsKICAgICAgICAgcmV0dXJuIGVycm9yKEVHTF9CQURfQUxM
T0MpOwogICAgIH0KIAotICAgIElEaXJlY3QzRFN1cmZhY2U5ICpyZW5kZXJUYXJnZXQgPSBOVUxM
OwotICAgIHJlc3VsdCA9IGRldmljZS0+Q3JlYXRlUmVuZGVyVGFyZ2V0KHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhlaWdodCwg
cHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5NdWx0aVNhbXBsZVR5cGUsIHBy
ZXNlbnRQYXJhbWV0ZXJzLk11bHRpU2FtcGxlUXVhbGl0eSwgRkFMU0UsICZyZW5kZXJUYXJnZXQs
IE5VTEwpOwotCi0gICAgaWYgKEZBSUxFRChyZXN1bHQpKQotICAgIHsKLSAgICAgICAgQVNTRVJU
KHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9SWSB8fCByZXN1bHQgPT0gRV9PVVRPRk1F
TU9SWSk7Ci0KLSAgICAgICAgc3dhcENoYWluLT5SZWxlYXNlKCk7Ci0gICAgICAgIGRlcHRoU3Rl
bmNpbFN1cmZhY2UtPlJlbGVhc2UoKTsKLQotICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUg
cmVuZGVyIHRhcmdldCBzdXJmYWNlIGZvciBuZXcgc3dhcCBjaGFpbjogJTA4bFgiLCByZXN1bHQp
OwotICAgICAgICByZXR1cm4gZXJyb3IoRUdMX0JBRF9BTExPQyk7Ci0gICAgfQotCiAgICAgQVNT
RVJUKFNVQ0NFRURFRChyZXN1bHQpKTsKIAotICAgIElEaXJlY3QzRFRleHR1cmU5ICpmbGlwVGV4
dHVyZSA9IE5VTEw7CiAgICAgcmVzdWx0ID0gZGV2aWNlLT5DcmVhdGVUZXh0dXJlKHByZXNlbnRQ
YXJhbWV0ZXJzLkJhY2tCdWZmZXJXaWR0aCwgcHJlc2VudFBhcmFtZXRlcnMuQmFja0J1ZmZlckhl
aWdodCwgMSwgRDNEVVNBR0VfUkVOREVSVEFSR0VULAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcmVzZW50UGFyYW1ldGVycy5CYWNrQnVmZmVyRm9ybWF0LCBEM0RQT09MX0RF
RkFVTFQsICZmbGlwVGV4dHVyZSwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByZXNlbnRQYXJhbWV0ZXJzLkJhY2tCdWZmZXJGb3JtYXQsIEQzRFBPT0xfREVGQVVM
VCwgJm1GbGlwVGV4dHVyZSwgTlVMTCk7CiAKICAgICBpZiAoRkFJTEVEKHJlc3VsdCkpCiAgICAg
ewogICAgICAgICBBU1NFUlQocmVzdWx0ID09IEQzREVSUl9PVVRPRlZJREVPTUVNT1JZIHx8IHJl
c3VsdCA9PSBFX09VVE9GTUVNT1JZKTsKIAotICAgICAgICBzd2FwQ2hhaW4tPlJlbGVhc2UoKTsK
LSAgICAgICAgZGVwdGhTdGVuY2lsU3VyZmFjZS0+UmVsZWFzZSgpOwotICAgICAgICByZW5kZXJU
YXJnZXQtPlJlbGVhc2UoKTsKLQogICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgZmxpcCB0
ZXh0dXJlIGZvciBuZXcgc3dhcCBjaGFpbjogJTA4bFgiLCByZXN1bHQpOworICAgICAgICByZWxl
YXNlKCk7CiAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFEX0FMTE9DKTsKICAgICB9CiAKLSAg
ICBJRGlyZWN0M0RTdXJmYWNlOSAqYmFja0J1ZmZlciA9IE5VTEw7Ci0gICAgc3dhcENoYWluLT5H
ZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZGRVJfVFlQRV9NT05PLCAmYmFja0J1ZmZlcik7Ci0K
LSAgICBpZiAobVN3YXBDaGFpbikgbVN3YXBDaGFpbi0+UmVsZWFzZSgpOwotICAgIGlmIChtRGVw
dGhTdGVuY2lsKSBtRGVwdGhTdGVuY2lsLT5SZWxlYXNlKCk7Ci0gICAgaWYgKG1CYWNrQnVmZmVy
KSBtQmFja0J1ZmZlci0+UmVsZWFzZSgpOwotICAgIGlmIChtUmVuZGVyVGFyZ2V0KSBtUmVuZGVy
VGFyZ2V0LT5SZWxlYXNlKCk7Ci0gICAgaWYgKG1GbGlwVGV4dHVyZSkgbUZsaXBUZXh0dXJlLT5S
ZWxlYXNlKCk7Ci0KKyAgICBtU3dhcENoYWluLT5HZXRCYWNrQnVmZmVyKDAsIEQzREJBQ0tCVUZG
RVJfVFlQRV9NT05PLCAmbUJhY2tCdWZmZXIpOwogICAgIG1XaWR0aCA9IHByZXNlbnRQYXJhbWV0
ZXJzLkJhY2tCdWZmZXJXaWR0aDsKICAgICBtSGVpZ2h0ID0gcHJlc2VudFBhcmFtZXRlcnMuQmFj
a0J1ZmZlckhlaWdodDsKIAotICAgIG1Td2FwQ2hhaW4gPSBzd2FwQ2hhaW47Ci0gICAgbURlcHRo
U3RlbmNpbCA9IGRlcHRoU3RlbmNpbFN1cmZhY2U7Ci0gICAgbUJhY2tCdWZmZXIgPSBiYWNrQnVm
ZmVyOwotICAgIG1SZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7Ci0gICAgbUZsaXBUZXh0dXJl
ID0gZmxpcFRleHR1cmU7CisgICAgbVByZXNlbnRJbnRlcnZhbERpcnR5ID0gZmFsc2U7CiAKKyAg
ICBJbnZhbGlkYXRlUmVjdChtV2luZG93LCBOVUxMLCBGQUxTRSk7CisKICAgICAvLyBUaGUgZmxp
cCBzdGF0ZSBibG9jayByZWNvcmRlZCBtRmxpcFRleHR1cmUgc28gaXQgaXMgbm93IGludmFsaWQu
CiAgICAgcmVsZWFzZVJlY29yZGVkU3RhdGUoZGV2aWNlKTsKIH0KQEAgLTE5OSw2ICsxOTUsNyBA
QAogICAgIGRldmljZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfQ0xJUFBMQU5FRU5BQkxFLCAwKTsK
ICAgICBkZXZpY2UtPlNldFJlbmRlclN0YXRlKEQzRFJTX0NPTE9SV1JJVEVFTkFCTEUsIEQzRENP
TE9SV1JJVEVFTkFCTEVfQUxQSEEgfCBEM0RDT0xPUldSSVRFRU5BQkxFX0JMVUUgfCBEM0RDT0xP
UldSSVRFRU5BQkxFX0dSRUVOIHwgRDNEQ09MT1JXUklURUVOQUJMRV9SRUQpOwogICAgIGRldmlj
ZS0+U2V0UmVuZGVyU3RhdGUoRDNEUlNfU1JHQldSSVRFRU5BQkxFLCBGQUxTRSk7CisgICAgZGV2
aWNlLT5TZXRSZW5kZXJTdGF0ZShEM0RSU19TQ0lTU09SVEVTVEVOQUJMRSwgRkFMU0UpOwogICAg
IGRldmljZS0+U2V0UGl4ZWxTaGFkZXIoTlVMTCk7CiAgICAgZGV2aWNlLT5TZXRWZXJ0ZXhTaGFk
ZXIoTlVMTCk7CiAKQEAgLTIwNiw3ICsyMDMsNyBAQAogICAgIGRldmljZS0+U2V0VGV4dHVyZVN0
YWdlU3RhdGUoMCwgRDNEVFNTX0NPTE9ST1AsIEQzRFRPUF9TRUxFQ1RBUkcxKTsKICAgICBkZXZp
Y2UtPlNldFRleHR1cmVTdGFnZVN0YXRlKDAsIEQzRFRTU19DT0xPUkFSRzEsIEQzRFRBX1RFWFRV
UkUpOwogICAgIGRldmljZS0+U2V0VGV4dHVyZVN0YWdlU3RhdGUoMSwgRDNEVFNTX0NPTE9ST1As
IEQzRFRPUF9ESVNBQkxFKTsKLSAgICBkZXZpY2UtPlNldFRleHR1cmUoMCwgTlVMTCk7IC8vIFRo
ZSBhY3R1YWwgdGV4dHVyZSB3aWxsIGNoYW5nZSBhZnRlciByZXNpemluZy4gQnV0IHRoZSBwcmUt
ZmxpcCBzdGF0ZSBibG9jayBtdXN0IHNhdmUvcmVzdG9yZSB0aGUgdGV4dHVyZS4KKyAgICBkZXZp
Y2UtPlNldFRleHR1cmUoMCwgTlVMTCk7ICAgLy8gVGhlIGFjdHVhbCB0ZXh0dXJlIHdpbGwgY2hh
bmdlIGFmdGVyIHJlc2l6aW5nLiBCdXQgdGhlIHByZS1mbGlwIHN0YXRlIGJsb2NrIG11c3Qgc2F2
ZS9yZXN0b3JlIHRoZSB0ZXh0dXJlLgogICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQz
RFNBTVBfTUFHRklMVEVSLCBEM0RURVhGX1BPSU5UKTsKICAgICBkZXZpY2UtPlNldFNhbXBsZXJT
dGF0ZSgwLCBEM0RTQU1QX01JTkZJTFRFUiwgRDNEVEVYRl9QT0lOVCk7CiAgICAgZGV2aWNlLT5T
ZXRTYW1wbGVyU3RhdGUoMCwgRDNEU0FNUF9TUkdCVEVYVFVSRSwgRkFMU0UpOwpAQCAtMjE0LDcg
KzIxMSwxMCBAQAogICAgIGRldmljZS0+U2V0U2FtcGxlclN0YXRlKDAsIEQzRFNBTVBfQUREUkVT
U1YsIEQzRFRBRERSRVNTX0NMQU1QKTsKICAgICBkZXZpY2UtPlNldEZWRihEM0RGVkZfWFlaUkhX
IHwgRDNERlZGX1RFWDEpOwogCi0gICAgZGV2aWNlLT5TZXRTdHJlYW1Tb3VyY2VGcmVxKDAsIDEp
OyAvLyBEcmF3UHJpbWl0aXZlVVAgb25seSBjYXJlcyBhYm91dCBzdHJlYW0gMCwgbm90IHRoZSBy
ZXN0LgorICAgIFJFQ1Qgc2Npc3NvclJlY3QgPSB7MH07ICAgLy8gU2Npc3NvcmluZyBpcyBkaXNh
YmxlZCBmb3IgZmxpcHBpbmcsIGJ1dCB3ZSBuZWVkIHRoaXMgdG8gY2FwdHVyZSBhbmQgcmVzdG9y
ZSB0aGUgb2xkIHJlY3RhbmdsZQorICAgIGRldmljZS0+U2V0U2Npc3NvclJlY3QoJnNjaXNzb3JS
ZWN0KTsKKyAgICBEM0RWSUVXUE9SVDkgdmlld3BvcnQgPSB7MCwgMCwgbVdpZHRoLCBtSGVpZ2h0
LCAwLjBmLCAxLjBmfTsKKyAgICBkZXZpY2UtPlNldFZpZXdwb3J0KCZ2aWV3cG9ydCk7CiB9CiAK
IHZvaWQgU3VyZmFjZTo6YXBwbHlGbGlwU3RhdGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlKQpA
QCAtMjc1LDggKzI3NSw2IEBACiAKIHZvaWQgU3VyZmFjZTo6cmVzdG9yZVN0YXRlKElEaXJlY3Qz
RERldmljZTkgKmRldmljZSkKIHsKLSAgICBtUHJlRmxpcFN0YXRlLT5BcHBseSgpOwotCiAgICAg
ZGV2aWNlLT5TZXRSZW5kZXJUYXJnZXQoMCwgbVByZUZsaXBCYWNrQnVmZmVyKTsKICAgICBkZXZp
Y2UtPlNldERlcHRoU3RlbmNpbFN1cmZhY2UobVByZUZsaXBEZXB0aFN0ZW5jaWwpOwogCkBAIC0y
OTEsNiArMjg5LDggQEAKICAgICAgICAgbVByZUZsaXBEZXB0aFN0ZW5jaWwtPlJlbGVhc2UoKTsK
ICAgICAgICAgbVByZUZsaXBEZXB0aFN0ZW5jaWwgPSBOVUxMOwogICAgIH0KKworICAgIG1QcmVG
bGlwU3RhdGUtPkFwcGx5KCk7CiB9CiAKIC8vIE9uIHRoZSBuZXh0IGZsaXAsIHRoaXMgd2lsbCBj
YXVzZSB0aGUgc3RhdGUgdG8gYmUgcmVjb3JkZWQgZnJvbSBzY3JhdGNoLgpAQCAtMzA5LDkgKzMw
OSw1OSBAQAogICAgICAgICBtUHJlRmxpcFN0YXRlID0gTlVMTDsKICAgICB9CiB9CisjZGVmaW5l
IGtTdXJmYWNlUHJvcGVydHkgX1RFWFQoIkVnbDo6U3VyZmFjZU93bmVyIikKKyNkZWZpbmUga1Bh
cmVudFduZFByb2MgX1RFWFQoIkVnbDo6U3VyZmFjZVBhcmVudFduZFByb2MiKQogCi1ib29sIFN1
cmZhY2U6OmNoZWNrRm9yV2luZG93UmVzaXplKCkKK3N0YXRpYyBMUkVTVUxUIENBTExCQUNLIFN1
cmZhY2VXaW5kb3dQcm9jKEhXTkQgaHduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd3BhcmFtLCBM
UEFSQU0gbHBhcmFtKSB7CisgIGlmIChtZXNzYWdlID09IFdNX1NJWkUpIHsKKyAgICAgIFN1cmZh
Y2UqIHN1cmYgPSByZWludGVycHJldF9jYXN0PFN1cmZhY2UqPihHZXRQcm9wKGh3bmQsIGtTdXJm
YWNlUHJvcGVydHkpKTsKKyAgICAgIGlmKHN1cmYpIHsKKyAgICAgICAgc3VyZi0+Y2hlY2tGb3JP
dXRPZkRhdGVTd2FwQ2hhaW4oKTsKKyAgICAgIH0KKyAgfQorICBXTkRQUk9DIHByZXZXbmRGdW5j
ID0gcmVpbnRlcnByZXRfY2FzdDxXTkRQUk9DID4oR2V0UHJvcChod25kLCBrUGFyZW50V25kUHJv
YykpOworICByZXR1cm4gQ2FsbFdpbmRvd1Byb2MocHJldlduZEZ1bmMsIGh3bmQsIG1lc3NhZ2Us
IHdwYXJhbSwgbHBhcmFtKTsKK30KKwordm9pZCBTdXJmYWNlOjpzdWJjbGFzc1dpbmRvdygpCiB7
CisgIFNldExhc3RFcnJvcigwKTsKKyAgTE9ORyBvbGRXbmRQcm9jID0gU2V0V2luZG93TG9uZyht
V2luZG93LCBHV0xfV05EUFJPQywgcmVpbnRlcnByZXRfY2FzdDxMT05HPihTdXJmYWNlV2luZG93
UHJvYykpOworICBpZihvbGRXbmRQcm9jID09IDAgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1Jf
U1VDQ0VTUykgeworICAgIG1XaW5kb3dTdWJjbGFzc2VkID0gZmFsc2U7CisgICAgcmV0dXJuOwor
ICB9CisKKyAgU2V0UHJvcChtV2luZG93LCBrU3VyZmFjZVByb3BlcnR5LCByZWludGVycHJldF9j
YXN0PEhBTkRMRT4odGhpcykpOworICBTZXRQcm9wKG1XaW5kb3csIGtQYXJlbnRXbmRQcm9jLCBy
ZWludGVycHJldF9jYXN0PEhBTkRMRT4ob2xkV25kUHJvYykpOworICBtV2luZG93U3ViY2xhc3Nl
ZCA9IHRydWU7Cit9CisKK3ZvaWQgU3VyZmFjZTo6dW5zdWJjbGFzc1dpbmRvdygpCit7CisgIGlm
KCFtV2luZG93U3ViY2xhc3NlZCkKKyAgICByZXR1cm47CisKKyAgLy8gdW4tc3ViY2xhc3MKKyAg
TE9ORyBwYXJlbnRXbmRGdW5jID0gcmVpbnRlcnByZXRfY2FzdDxMT05HPihHZXRQcm9wKG1XaW5k
b3csIGtQYXJlbnRXbmRQcm9jKSk7CisKKyAgLy8gQ2hlY2sgdGhlIHdpbmRvd3Byb2MgaXMgc3Rp
bGwgU3VyZmFjZVdpbmRvd1Byb2MuCisgIC8vIElmIHRoaXMgYXNzZXJ0IGZhaWxzLCB0aGVuIGl0
IGlzIGxpa2VseSB0aGUgYXBwbGljYXRpb24gaGFzIHN1YmNsYXNzZWQgdGhlCisgIC8vIGh3bmQg
YXMgd2VsbCBhbmQgZGlkIG5vdCB1bnN1YmNsYXNzIGJlZm9yZSBkZXN0cm95aW5nIGl0cyBFR0wg
Y29udGV4dC4gVGhlCisgIC8vIGFwcGxpY2F0aW9uIHNob3VsZCBiZSBtb2RpZmllZCB0byBlaXRo
ZXIgc3ViY2xhc3MgYmVmb3JlIGluaXRpYWxpemluZyB0aGUKKyAgLy8gRUdMIGNvbnRleHQsIG9y
IHRvIHVuc3ViY2xhc3MgYmVmb3JlIGRlc3Ryb3lpbmcgdGhlIEVHTCBjb250ZXh0LgorICBpZihw
YXJlbnRXbmRGdW5jKSB7CisgICAgTE9ORyBwcmV2V25kRnVuYyA9IFNldFdpbmRvd0xvbmcobVdp
bmRvdywgR1dMX1dORFBST0MsIHBhcmVudFduZEZ1bmMpOworICAgIEFTU0VSVChwcmV2V25kRnVu
YyA9PSByZWludGVycHJldF9jYXN0PExPTkc+KFN1cmZhY2VXaW5kb3dQcm9jKSk7CisgIH0KKwor
ICBSZW1vdmVQcm9wKG1XaW5kb3csIGtTdXJmYWNlUHJvcGVydHkpOworICBSZW1vdmVQcm9wKG1X
aW5kb3csIGtQYXJlbnRXbmRQcm9jKTsKKyAgbVdpbmRvd1N1YmNsYXNzZWQgPSBmYWxzZTsKK30K
KworYm9vbCBTdXJmYWNlOjpjaGVja0Zvck91dE9mRGF0ZVN3YXBDaGFpbigpCit7CiAgICAgUkVD
VCBjbGllbnQ7CiAgICAgaWYgKCFHZXRDbGllbnRSZWN0KGdldFdpbmRvd0hhbmRsZSgpLCAmY2xp
ZW50KSkKICAgICB7CkBAIC0zMTksMTAgKzM2OSwxNCBAQAogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgaWYgKGdldFdpZHRoKCkgIT0gY2xpZW50LnJpZ2h0IC0gY2xpZW50Lmxl
ZnQgfHwgZ2V0SGVpZ2h0KCkgIT0gY2xpZW50LmJvdHRvbSAtIGNsaWVudC50b3ApCisgICAgLy8g
R3JvdyB0aGUgYnVmZmVyIG5vdywgaWYgdGhlIHdpbmRvdyBoYXMgZ3Jvd24uIFdlIG5lZWQgdG8g
Z3JvdyBub3cgdG8gYXZvaWQgbG9zaW5nIGluZm9ybWF0aW9uLgorICAgIGludCBjbGllbnRXaWR0
aCA9IGNsaWVudC5yaWdodCAtIGNsaWVudC5sZWZ0OworICAgIGludCBjbGllbnRIZWlnaHQgPSBj
bGllbnQuYm90dG9tIC0gY2xpZW50LnRvcDsKKyAgICBib29sIHNpemVEaXJ0eSA9IGNsaWVudFdp
ZHRoICE9IGdldFdpZHRoKCkgfHwgY2xpZW50SGVpZ2h0ICE9IGdldEhlaWdodCgpOworCisgICAg
aWYgKHNpemVEaXJ0eSB8fCBtUHJlc2VudEludGVydmFsRGlydHkpCiAgICAgewotICAgICAgICBy
ZXNldFN3YXBDaGFpbigpOwotCisgICAgICAgIHJlc2V0U3dhcENoYWluKGNsaWVudFdpZHRoLCBj
bGllbnRIZWlnaHQpOwogICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8ZWdsOjpTdXJmYWNlKj4oZ2V0
Q3VycmVudERyYXdTdXJmYWNlKCkpID09IHRoaXMpCiAgICAgICAgIHsKICAgICAgICAgICAgIGds
TWFrZUN1cnJlbnQoZ2xHZXRDdXJyZW50Q29udGV4dCgpLCBzdGF0aWNfY2FzdDxlZ2w6OkRpc3Bs
YXkqPihnZXRDdXJyZW50RGlzcGxheSgpKSwgdGhpcyk7CkBAIC0zMzAsNTggKzM4NCw1MiBAQAog
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLQogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBTdXJmYWNlOjpzd2FwKCkKK0RXT1JEIFN1cmZhY2U6OmNvbnZlcnRJbnRlcnZhbChFR0xp
bnQgaW50ZXJ2YWwpCiB7Ci0gICAgaWYgKG1Td2FwQ2hhaW4pCisgICAgc3dpdGNoKGludGVydmFs
KQogICAgIHsKLSAgICAgICAgSURpcmVjdDNEVGV4dHVyZTkgKmZsaXBUZXh0dXJlID0gbUZsaXBU
ZXh0dXJlOwotICAgICAgICBmbGlwVGV4dHVyZS0+QWRkUmVmKCk7CisgICAgICBjYXNlIDA6IHJl
dHVybiBEM0RQUkVTRU5UX0lOVEVSVkFMX0lNTUVESUFURTsKKyAgICAgIGNhc2UgMTogcmV0dXJu
IEQzRFBSRVNFTlRfSU5URVJWQUxfT05FOworICAgICAgY2FzZSAyOiByZXR1cm4gRDNEUFJFU0VO
VF9JTlRFUlZBTF9UV087CisgICAgICBjYXNlIDM6IHJldHVybiBEM0RQUkVTRU5UX0lOVEVSVkFM
X1RIUkVFOworICAgICAgY2FzZSA0OiByZXR1cm4gRDNEUFJFU0VOVF9JTlRFUlZBTF9GT1VSOwor
ICAgICAgZGVmYXVsdDogVU5SRUFDSEFCTEUoKTsKKyAgICB9CiAKLSAgICAgICAgSURpcmVjdDNE
U3VyZmFjZTkgKnJlbmRlclRhcmdldCA9IG1SZW5kZXJUYXJnZXQ7Ci0gICAgICAgIHJlbmRlclRh
cmdldC0+QWRkUmVmKCk7CisgICAgcmV0dXJuIEQzRFBSRVNFTlRfSU5URVJWQUxfREVGQVVMVDsK
K30KIAotICAgICAgICBFR0xpbnQgb2xkV2lkdGggPSBtV2lkdGg7Ci0gICAgICAgIEVHTGludCBv
bGRIZWlnaHQgPSBtSGVpZ2h0OwogCi0gICAgICAgIGNoZWNrRm9yV2luZG93UmVzaXplKCk7Ci0K
K2Jvb2wgU3VyZmFjZTo6c3dhcCgpCit7CisgICAgaWYgKG1Td2FwQ2hhaW4pCisgICAgewogICAg
ICAgICBJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UgPSBtRGlzcGxheS0+Z2V0RGV2aWNlKCk7CiAK
LSAgICAgICAgSURpcmVjdDNEU3VyZmFjZTkgKnRleHR1cmVTdXJmYWNlOwotICAgICAgICBmbGlw
VGV4dHVyZS0+R2V0U3VyZmFjZUxldmVsKDAsICZ0ZXh0dXJlU3VyZmFjZSk7Ci0KLSAgICAgICAg
bURpc3BsYXktPmVuZFNjZW5lKCk7Ci0gICAgICAgIGRldmljZS0+U3RyZXRjaFJlY3QocmVuZGVy
VGFyZ2V0LCBOVUxMLCB0ZXh0dXJlU3VyZmFjZSwgTlVMTCwgRDNEVEVYRl9OT05FKTsKLSAgICAg
ICAgcmVuZGVyVGFyZ2V0LT5SZWxlYXNlKCk7Ci0KICAgICAgICAgYXBwbHlGbGlwU3RhdGUoZGV2
aWNlKTsKLSAgICAgICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIGZsaXBUZXh0dXJlKTsKKyAgICAg
ICAgZGV2aWNlLT5TZXRUZXh0dXJlKDAsIG1GbGlwVGV4dHVyZSk7CiAKLSAgICAgICAgZmxvYXQg
eHNjYWxlID0gKGZsb2F0KW1XaWR0aCAvIG9sZFdpZHRoOwotICAgICAgICBmbG9hdCB5c2NhbGUg
PSAoZmxvYXQpbUhlaWdodCAvIG9sZEhlaWdodDsKLQogICAgICAgICAvLyBSZW5kZXIgdGhlIHRl
eHR1cmUgdXBzaWRlIGRvd24gaW50byB0aGUgYmFjayBidWZmZXIKLSAgICAgICAgLy8gVGV4Y29v
cmRzIGFyZSBjaG9zZW4gdG8gcGluIGEgcG90ZW50aWFsbHkgcmVzaXplZCBpbWFnZSBpbnRvIHRo
ZSB1cHBlci1sZWZ0IGNvcm5lciB3aXRob3V0IHNjYWxpbmcuCi0gICAgICAgIGZsb2F0IHF1YWRb
NF1bNl0gPSB7eyAgICAgMCAtIDAuNWYsICAgICAgIDAgLSAwLjVmLCAwLjBmLCAxLjBmLCAwLjBm
LCAgIDEuMGYgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bVdpZHRoIC0g
MC41ZiwgICAgICAgMCAtIDAuNWYsIDAuMGYsIDEuMGYsIHhzY2FsZSwgMS4wZiAgICAgICB9LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHttV2lkdGggLSAwLjVmLCBtSGVpZ2h0IC0gMC41
ZiwgMC4wZiwgMS4wZiwgeHNjYWxlLCAxLjBmLXlzY2FsZX0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeyAgICAgMCAtIDAuNWYsIG1IZWlnaHQgLSAwLjVmLCAwLjBmLCAxLjBmLCAwLjBm
LCAgIDEuMGYteXNjYWxlfX07ICAgLy8geCwgeSwgeiwgcmh3LCB1LCB2CisgICAgICAgIC8vIFRl
eGNvb3JkcyBhcmUgY2hvc2VuIHRvIGZsaXAgdGhlIHJlbmRlclRhcmdldCBhYm91dCBpdHMgWSBh
eGlzLgorICAgICAgICBmbG9hdCB3ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdldFdpZHRoKCkpOwor
ICAgICAgICBmbG9hdCBoID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KGdldEhlaWdodCgpKTsKKyAgICAg
ICAgZmxvYXQgcXVhZFs0XVs2XSA9IHt7MCAtIDAuNWYsIDAgLSAwLjVmLCAwLjBmLCAxLjBmLCAw
LjBmLCAxLjBmfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dyAtIDAuNWYsIDAgLSAw
LjVmLCAwLjBmLCAxLjBmLCAxLjBmLCAxLjBmfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7dyAtIDAuNWYsIGggLSAwLjVmLCAwLjBmLCAxLjBmLCAxLjBmLCAwLjBmfSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7MCAtIDAuNWYsIGggLSAwLjVmLCAwLjBmLCAxLjBmLCAwLjBm
LCAwLjBmfX07ICAgLy8geCwgeSwgeiwgcmh3LCB1LCB2CiAKICAgICAgICAgbURpc3BsYXktPnN0
YXJ0U2NlbmUoKTsKICAgICAgICAgZGV2aWNlLT5EcmF3UHJpbWl0aXZlVVAoRDNEUFRfVFJJQU5H
TEVGQU4sIDIsIHF1YWQsIDYgKiBzaXplb2YoZmxvYXQpKTsKIAotICAgICAgICBmbGlwVGV4dHVy
ZS0+UmVsZWFzZSgpOwotICAgICAgICB0ZXh0dXJlU3VyZmFjZS0+UmVsZWFzZSgpOwotCiAgICAg
ICAgIHJlc3RvcmVTdGF0ZShkZXZpY2UpOwogCiAgICAgICAgIG1EaXNwbGF5LT5lbmRTY2VuZSgp
OwotICAgICAgICBIUkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPlByZXNlbnQoTlVMTCwgTlVM
TCwgTlVMTCwgTlVMTCwgbURpc3BsYXktPmdldFByZXNlbnRJbnRlcnZhbCgpKTsKIAorICAgICAg
ICBIUkVTVUxUIHJlc3VsdCA9IG1Td2FwQ2hhaW4tPlByZXNlbnQoTlVMTCwgTlVMTCwgTlVMTCwg
TlVMTCwgMCk7CisKICAgICAgICAgaWYgKHJlc3VsdCA9PSBEM0RFUlJfT1VUT0ZWSURFT01FTU9S
WSB8fCByZXN1bHQgPT0gRV9PVVRPRk1FTU9SWSB8fCByZXN1bHQgPT0gRDNERVJSX0RSSVZFUklO
VEVSTkFMRVJST1IpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBlcnJvcihFR0xfQkFE
X0FMTE9DLCBmYWxzZSk7CkBAIC0zOTQsNiArNDQyLDcgQEAKIAogICAgICAgICBBU1NFUlQoU1VD
Q0VFREVEKHJlc3VsdCkpOwogCisgICAgICAgIGNoZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCk7
CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CkBAIC00MTEsMTIgKzQ2MCwxNCBAQAogCiBJRGly
ZWN0M0RTdXJmYWNlOSAqU3VyZmFjZTo6Z2V0UmVuZGVyVGFyZ2V0KCkKIHsKLSAgICBpZiAobVJl
bmRlclRhcmdldCkKKyAgICBJRGlyZWN0M0RTdXJmYWNlOSAqdGV4dHVyZVN1cmZhY2UgPSBOVUxM
OworCisgICAgaWYgKG1GbGlwVGV4dHVyZSkKICAgICB7Ci0gICAgICAgIG1SZW5kZXJUYXJnZXQt
PkFkZFJlZigpOworICAgICAgICBtRmxpcFRleHR1cmUtPkdldFN1cmZhY2VMZXZlbCgwLCAmdGV4
dHVyZVN1cmZhY2UpOwogICAgIH0KIAotICAgIHJldHVybiBtUmVuZGVyVGFyZ2V0OworICAgIHJl
dHVybiB0ZXh0dXJlU3VyZmFjZTsKIH0KIAogSURpcmVjdDNEU3VyZmFjZTkgKlN1cmZhY2U6Omdl
dERlcHRoU3RlbmNpbCgpCkBAIC00MjgsNCArNDc5LDE5IEBACiAKICAgICByZXR1cm4gbURlcHRo
U3RlbmNpbDsKIH0KKwordm9pZCBTdXJmYWNlOjpzZXRTd2FwSW50ZXJ2YWwoRUdMaW50IGludGVy
dmFsKQoreworICAgIGlmIChtU3dhcEludGVydmFsID09IGludGVydmFsKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBtU3dhcEludGVydmFsID0gaW50ZXJ2YWw7Cisg
ICAgbVN3YXBJbnRlcnZhbCA9IHN0ZDo6bWF4KG1Td2FwSW50ZXJ2YWwsIG1EaXNwbGF5LT5nZXRN
aW5Td2FwSW50ZXJ2YWwoKSk7CisgICAgbVN3YXBJbnRlcnZhbCA9IHN0ZDo6bWluKG1Td2FwSW50
ZXJ2YWwsIG1EaXNwbGF5LT5nZXRNYXhTd2FwSW50ZXJ2YWwoKSk7CisKKyAgICBtUHJlc2VudElu
dGVydmFsID0gY29udmVydEludGVydmFsKG1Td2FwSW50ZXJ2YWwpOworICAgIG1QcmVzZW50SW50
ZXJ2YWxEaXJ0eSA9IHRydWU7CiB9Cit9CkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9z
cmMvbGliRUdML0Rpc3BsYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdM
RS9zcmMvbGliRUdML0Rpc3BsYXkuaAkocmV2aXNpb24gNzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQ
YXJ0eS9BTkdMRS9zcmMvbGliRUdML0Rpc3BsYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsMTcg
KzU0LDI1IEBACiAgICAgYm9vbCBpc1ZhbGlkU3VyZmFjZShlZ2w6OlN1cmZhY2UgKnN1cmZhY2Up
OwogICAgIGJvb2wgaGFzRXhpc3RpbmdXaW5kb3dTdXJmYWNlKEhXTkQgd2luZG93KTsKIAotICAg
IHZvaWQgc2V0U3dhcEludGVydmFsKEdMaW50IGludGVydmFsKTsKLSAgICBEV09SRCBnZXRQcmVz
ZW50SW50ZXJ2YWwoKTsKLSAgICBzdGF0aWMgRFdPUkQgY29udmVydEludGVydmFsKEdMaW50IGlu
dGVydmFsKTsKKyAgICBFR0xpbnQgZ2V0TWluU3dhcEludGVydmFsKCk7CisgICAgRUdMaW50IGdl
dE1heFN3YXBJbnRlcnZhbCgpOwogCiAgICAgdmlydHVhbCBJRGlyZWN0M0REZXZpY2U5ICpnZXRE
ZXZpY2UoKTsKICAgICB2aXJ0dWFsIEQzRENBUFM5IGdldERldmljZUNhcHMoKTsKICAgICB2aXJ0
dWFsIHZvaWQgZ2V0TXVsdGlTYW1wbGVTdXBwb3J0KEQzREZPUk1BVCBmb3JtYXQsIGJvb2wgKm11
bHRpU2FtcGxlQXJyYXkpOwogICAgIHZpcnR1YWwgYm9vbCBnZXRDb21wcmVzc2VkVGV4dHVyZVN1
cHBvcnQoKTsKKyAgICB2aXJ0dWFsIGJvb2wgZ2V0RXZlbnRRdWVyeVN1cHBvcnQoKTsKKyAgICB2
aXJ0dWFsIGJvb2wgZ2V0RmxvYXRUZXh0dXJlU3VwcG9ydChib29sICpmaWx0ZXJpbmcsIGJvb2wg
KnJlbmRlcmFibGUpOworICAgIHZpcnR1YWwgYm9vbCBnZXRIYWxmRmxvYXRUZXh0dXJlU3VwcG9y
dChib29sICpmaWx0ZXJpbmcsIGJvb2wgKnJlbmRlcmFibGUpOworICAgIHZpcnR1YWwgYm9vbCBn
ZXRMdW1pbmFuY2VUZXh0dXJlU3VwcG9ydCgpOworICAgIHZpcnR1YWwgYm9vbCBnZXRMdW1pbmFu
Y2VBbHBoYVRleHR1cmVTdXBwb3J0KCk7CisgICAgdmlydHVhbCBEM0RQT09MIGdldEJ1ZmZlclBv
b2woRFdPUkQgdXNhZ2UpIGNvbnN0OwogCiAgIHByaXZhdGU6CiAgICAgRElTQUxMT1dfQ09QWV9B
TkRfQVNTSUdOKERpc3BsYXkpOworCisgICAgRDNEUFJFU0VOVF9QQVJBTUVURVJTIGdldERlZmF1
bHRQcmVzZW50UGFyYW1ldGVycygpOworCiAgICAgY29uc3QgSERDIG1EYzsKIAogICAgIEhNT0RV
TEUgbUQzZDlNb2R1bGU7CkBAIC03OCwxMSArODYsOSBAQAogICAgIEhXTkQgbURldmljZVdpbmRv
dzsKIAogICAgIGJvb2wgbVNjZW5lU3RhcnRlZDsKLSAgICBHTGludCBtU3dhcEludGVydmFsOwog
ICAgIEVHTGludCBtTWF4U3dhcEludGVydmFsOwogICAgIEVHTGludCBtTWluU3dhcEludGVydmFs
OwotICAgIERXT1JEIG1QcmVzZW50SW50ZXJ2YWw7Ci0KKyAgICAKICAgICB0eXBlZGVmIHN0ZDo6
c2V0PFN1cmZhY2UqPiBTdXJmYWNlU2V0OwogICAgIFN1cmZhY2VTZXQgbVN1cmZhY2VTZXQ7CiAK
QEAgLTkyLDYgKzk4LDcgQEAKICAgICBDb250ZXh0U2V0IG1Db250ZXh0U2V0OwogCiAgICAgYm9v
bCBjcmVhdGVEZXZpY2UoKTsKKyAgICBib29sIHJlc2V0RGV2aWNlKCk7CiB9OwogfQogCkluZGV4
OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2UuaAkocmV2aXNp
b24gNzYwMjUpCisrKyBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliRUdML1N1cmZhY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksOSBAQAogCiAgICAgflN1cmZhY2UoKTsKIAor
ICAgIHZvaWQgcmVsZWFzZSgpOworICAgIHZvaWQgcmVzZXRTd2FwQ2hhaW4oKTsKKwogICAgIEhX
TkQgZ2V0V2luZG93SGFuZGxlKCk7CiAgICAgYm9vbCBzd2FwKCk7CiAKQEAgLTM4LDE4ICs0MSwy
MiBAQAogICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldFJlbmRlclRhcmdldCgpOwog
ICAgIHZpcnR1YWwgSURpcmVjdDNEU3VyZmFjZTkgKmdldERlcHRoU3RlbmNpbCgpOwogCi0gIHBy
aXZhdGU6CisgICAgdm9pZCBzZXRTd2FwSW50ZXJ2YWwoRUdMaW50IGludGVydmFsKTsKKyAgICBi
b29sIGNoZWNrRm9yT3V0T2ZEYXRlU3dhcENoYWluKCk7ICAgLy8gUmV0dXJucyB0cnVlIGlmIHN3
YXBjaGFpbiBjaGFuZ2VkIGR1ZSB0byByZXNpemUgb3IgaW50ZXJ2YWwgdXBkYXRlCisKK3ByaXZh
dGU6CiAgICAgRElTQUxMT1dfQ09QWV9BTkRfQVNTSUdOKFN1cmZhY2UpOwogCiAgICAgRGlzcGxh
eSAqY29uc3QgbURpc3BsYXk7CiAgICAgSURpcmVjdDNEU3dhcENoYWluOSAqbVN3YXBDaGFpbjsK
ICAgICBJRGlyZWN0M0RTdXJmYWNlOSAqbUJhY2tCdWZmZXI7Ci0gICAgSURpcmVjdDNEU3VyZmFj
ZTkgKm1SZW5kZXJUYXJnZXQ7CiAgICAgSURpcmVjdDNEU3VyZmFjZTkgKm1EZXB0aFN0ZW5jaWw7
CiAgICAgSURpcmVjdDNEVGV4dHVyZTkgKm1GbGlwVGV4dHVyZTsKIAotICAgIHZvaWQgcmVzZXRT
d2FwQ2hhaW4oKTsKLSAgICBib29sIGNoZWNrRm9yV2luZG93UmVzaXplKCk7CisgICAgdm9pZCBz
dWJjbGFzc1dpbmRvdygpOworICAgIHZvaWQgdW5zdWJjbGFzc1dpbmRvdygpOworICAgIHZvaWQg
cmVzZXRTd2FwQ2hhaW4oaW50IGJhY2tidWZmZXJXaWR0aCwgaW50IGJhY2tidWZmZXJIZWlnaHQp
OworICAgIHN0YXRpYyBEV09SRCBjb252ZXJ0SW50ZXJ2YWwoRUdMaW50IGludGVydmFsKTsKIAog
ICAgIHZvaWQgYXBwbHlGbGlwU3RhdGUoSURpcmVjdDNERGV2aWNlOSAqZGV2aWNlKTsKICAgICB2
b2lkIHJlc3RvcmVTdGF0ZShJRGlyZWN0M0REZXZpY2U5ICpkZXZpY2UpOwpAQCAtNjEsNiArNjgs
NyBAQAogICAgIElEaXJlY3QzRFN1cmZhY2U5ICptUHJlRmxpcERlcHRoU3RlbmNpbDsKIAogICAg
IGNvbnN0IEhXTkQgbVdpbmRvdzsgICAgICAgICAgICAvLyBXaW5kb3cgdGhhdCB0aGUgc3VyZmFj
ZSBpcyBjcmVhdGVkIGZvci4KKyAgICBib29sIG1XaW5kb3dTdWJjbGFzc2VkOyAgICAgICAgLy8g
SW5kaWNhdGVzIHdoZXRoZXIgd2Ugc3VjY2Vzc2Z1bGx5IHN1YmNsYXNzZWQgbVdpbmRvdyBmb3Ig
V01fUkVTSVpFIGhvb2tpbmcKICAgICBjb25zdCBlZ2w6OkNvbmZpZyAqbUNvbmZpZzsgICAgLy8g
RUdMIGNvbmZpZyBzdXJmYWNlIHdhcyBjcmVhdGVkIHdpdGgKICAgICBFR0xpbnQgbUhlaWdodDsg
ICAgICAgICAgICAgICAgLy8gSGVpZ2h0IG9mIHN1cmZhY2UKICAgICBFR0xpbnQgbVdpZHRoOyAg
ICAgICAgICAgICAgICAgLy8gV2lkdGggb2Ygc3VyZmFjZQpAQCAtNzcsNiArODUsOSBAQAogLy8g
IEVHTGVudW0gdGV4dHVyZVRhcmdldDsgICAgICAgICAvLyBUeXBlIG9mIHRleHR1cmU6IDJEIG9y
IG5vIHRleHR1cmUKIC8vICBFR0xlbnVtIHZnQWxwaGFGb3JtYXQ7ICAgICAgICAgLy8gQWxwaGEg
Zm9ybWF0IGZvciBPcGVuVkcKIC8vICBFR0xlbnVtIHZnQ29sb3JTcGFjZTsgICAgICAgICAgLy8g
Q29sb3Igc3BhY2UgZm9yIE9wZW5WRworICAgIEVHTGludCBtU3dhcEludGVydmFsOworICAgIERX
T1JEIG1QcmVzZW50SW50ZXJ2YWw7CisgICAgYm9vbCBtUHJlc2VudEludGVydmFsRGlydHk7CiB9
OwogfQogCkluZGV4OiBTb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1RoaXJkUGFydHkvQU5HTEUvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NjAyNSkK
KysrIFNvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDU5OCBAQAorMjAxMS0wMS0xOCAgQmVuIFZhbmlrICA8YmVuLnZhbmlrQGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRh
dGluZyBBTkdMRSBpbiBXZWJLaXQgdG8gcjUzMy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3MTk0CisKKyAgICAgICAgKiBBTkdMRS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGluY2x1ZGUvR0xTTEFORy9TaGFkZXJMYW5nLmg6
CisgICAgICAgICogc3JjL2NvbW1vbi9kZWJ1Zy5jcHA6CisgICAgICAgIChnbDo6dHJhY2UpOgor
ICAgICAgICAqIHNyYy9jb21tb24vZGVidWcuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvQ29k
ZUdlbkdMU0wuY3BwOgorICAgICAgICAoQ29uc3RydWN0Q29tcGlsZXIpOgorICAgICAgICAqIHNy
Yy9jb21waWxlci9Db2RlR2VuSExTTC5jcHA6CisgICAgICAgIChDb25zdHJ1Y3RDb21waWxlcik6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL0NvbW1vbi5oOgorICAgICAgICAoRW5jb2RlU291cmNl
TG9jKToKKyAgICAgICAgKERlY29kZVNvdXJjZUxvYyk6CisgICAgICAgICogc3JjL2NvbXBpbGVy
L0NvbXBpbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChUU2hIYW5kbGVCYXNlOjpUU2hIYW5kbGVC
YXNlKToKKyAgICAgICAgKFRTaEhhbmRsZUJhc2U6On5UU2hIYW5kbGVCYXNlKToKKyAgICAgICAg
KFRDb21waWxlcjo6VENvbXBpbGVyKToKKyAgICAgICAgKFRDb21waWxlcjo6flRDb21waWxlcik6
CisgICAgICAgIChUQ29tcGlsZXI6OkluaXQpOgorICAgICAgICAoVENvbXBpbGVyOjpjb21waWxl
KToKKyAgICAgICAgKFRDb21waWxlcjo6SW5pdEJ1aWx0SW5TeW1ib2xUYWJsZSk6CisgICAgICAg
IChUQ29tcGlsZXI6OmNsZWFyUmVzdWx0cyk6CisgICAgICAgIChUQ29tcGlsZXI6OnZhbGlkYXRl
TGltaXRhdGlvbnMpOgorICAgICAgICAoVENvbXBpbGVyOjpjb2xsZWN0QXR0cmlic1VuaWZvcm1z
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvRXh0ZW5zaW9uQmVoYXZpb3IuaDogQWRkZWQuCisg
ICAgICAgICogc3JjL2NvbXBpbGVyL0luZm9TaW5rLmNwcDoKKyAgICAgICAgKFRJbmZvU2lua0Jh
c2U6OmxvY2F0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvSW5mb1NpbmsuaDoKKyAgICAg
ICAgKFRJbmZvU2lua0Jhc2U6OnNpemUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9Jbml0aWFs
aXplLmNwcDoKKyAgICAgICAgKEJ1aWx0SW5GdW5jdGlvbnNDb21tb24pOgorICAgICAgICAoQnVp
bHRJbkZ1bmN0aW9uc1ZlcnRleCk6CisgICAgICAgIChCdWlsdEluRnVuY3Rpb25zRnJhZ21lbnQp
OgorICAgICAgICAoU3RhbmRhcmRVbmlmb3Jtcyk6CisgICAgICAgIChEZWZhdWx0UHJlY2lzaW9u
VmVydGV4KToKKyAgICAgICAgKERlZmF1bHRQcmVjaXNpb25GcmFnbWVudCk6CisgICAgICAgIChC
dWlsdEluQ29uc3RhbnRzKToKKyAgICAgICAgKFRCdWlsdEluczo6aW5pdGlhbGl6ZSk6CisgICAg
ICAgIChJZGVudGlmeUJ1aWx0SW5zKToKKyAgICAgICAgKEluaXRFeHRlbnNpb25CZWhhdmlvcik6
CisgICAgICAgICogc3JjL2NvbXBpbGVyL0luaXRpYWxpemUuaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvSW50ZXJtVHJhdmVyc2UuY3BwOgorICAgICAgICAoVEludGVybUxvb3A6OnRyYXZlcnNl
KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvSW50ZXJtZWRpYXRlLmNwcDoKKyAgICAgICAgKGdl
dE9wZXJhdG9yU3RyaW5nKToKKyAgICAgICAgKFRJbnRlcm1lZGlhdGU6OmFkZEJpbmFyeU1hdGgp
OgorICAgICAgICAoVEludGVybWVkaWF0ZTo6YWRkTG9vcCk6CisgICAgICAgIChUSW50ZXJtZWRp
YXRlOjpwb3N0UHJvY2Vzcyk6CisgICAgICAgIChUSW50ZXJtQmluYXJ5Ojpwcm9tb3RlKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0R0xTTC5jcHA6CisgICAgICAgIChUT3V0cHV0R0xT
TDo6dmlzaXRVbmFyeSk6CisgICAgICAgIChUT3V0cHV0R0xTTDo6dmlzaXRMb29wKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvT3V0cHV0SExTTC5jcHA6CisgICAgICAgIChzaDo6T3V0cHV0SExT
TDo6T3V0cHV0SExTTCk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6aGVhZGVyKToKKyAgICAg
ICAgKHNoOjpPdXRwdXRITFNMOjp2aXNpdEJpbmFyeSk6CisgICAgICAgIChzaDo6T3V0cHV0SExT
TDo6dmlzaXRVbmFyeSk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6dmlzaXRBZ2dyZWdhdGUp
OgorICAgICAgICAoc2g6Ok91dHB1dEhMU0w6OnZpc2l0TG9vcCk6CisgICAgICAgIChzaDo6T3V0
cHV0SExTTDo6aGFuZGxlRXhjZXNzaXZlTG9vcCk6CisgICAgICAgIChzaDo6T3V0cHV0SExTTDo6
YXJndW1lbnRTdHJpbmcpOgorICAgICAgICAqIHNyYy9jb21waWxlci9PdXRwdXRITFNMLmg6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL1BhcnNlSGVscGVyLmNwcDoKKyAgICAgICAgKFJlcG9ydElu
Zm8pOgorICAgICAgICAoRGVmaW5lRXh0ZW5zaW9uTWFjcm9zKToKKyAgICAgICAgKFRQYXJzZUNv
bnRleHQ6OmVycm9yKToKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6Ondhcm5pbmcpOgorICAgICAg
ICAoVFBhcnNlQ29udGV4dDo6cmVzZXJ2ZWRFcnJvckNoZWNrKToKKyAgICAgICAgKFRQYXJzZUNv
bnRleHQ6OmNvbnN0cnVjdG9yRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0Ojph
cnJheVF1YWxpZmllckVycm9yQ2hlY2spOgorICAgICAgICAoVFBhcnNlQ29udGV4dDo6ZXh0ZW5z
aW9uRXJyb3JDaGVjayk6CisgICAgICAgIChUUGFyc2VDb250ZXh0OjphcmVBbGxDaGlsZENvbnN0
KToKKyAgICAgICAgKFBhUGFyc2VTdHJpbmdzKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvUGFy
c2VIZWxwZXIuaDoKKyAgICAgICAgKFRQYXJzZUNvbnRleHQ6OlRQYXJzZUNvbnRleHQpOgorICAg
ICAgICAqIHNyYy9jb21waWxlci9Qb29sQWxsb2MuY3BwOgorICAgICAgICAoSW5pdGlhbGl6ZUds
b2JhbFBvb2xzKToKKyAgICAgICAgKEZyZWVHbG9iYWxQb29scyk6CisgICAgICAgIChTZXRHbG9i
YWxQb29sQWxsb2NhdG9yKToKKyAgICAgICAgKFRQb29sQWxsb2NhdG9yOjpUUG9vbEFsbG9jYXRv
cik6CisgICAgICAgIChUUG9vbEFsbG9jYXRvcjo6flRQb29sQWxsb2NhdG9yKToKKyAgICAgICAg
KFRBbGxvY2F0aW9uOjpjaGVja0FsbG9jTGlzdCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1Bv
b2xBbGxvYy5oOgorICAgICAgICAqIHNyYy9jb21waWxlci9TZWFyY2hTeW1ib2wuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKHNoOjpTZWFyY2hTeW1ib2w6OlNlYXJjaFN5bWJvbCk6CisgICAgICAgIChz
aDo6U2VhcmNoU3ltYm9sOjp0cmF2ZXJzZSk6CisgICAgICAgIChzaDo6U2VhcmNoU3ltYm9sOjp2
aXNpdFN5bWJvbCk6CisgICAgICAgIChzaDo6U2VhcmNoU3ltYm9sOjpmb3VuZE1hdGNoKToKKyAg
ICAgICAgKiBzcmMvY29tcGlsZXIvU2VhcmNoU3ltYm9sLmg6IEFkZGVkLgorICAgICAgICAqIHNy
Yy9jb21waWxlci9TaEhhbmRsZS5oOgorICAgICAgICAoVENvbXBpbGVyOjpnZXRBc0NvbXBpbGVy
KToKKyAgICAgICAgKFRDb21waWxlcjo6Z2V0SW5mb1NpbmspOgorICAgICAgICAoVENvbXBpbGVy
OjpnZXRBdHRyaWJzKToKKyAgICAgICAgKFRDb21waWxlcjo6Z2V0VW5pZm9ybXMpOgorICAgICAg
ICAoVENvbXBpbGVyOjpnZXRTaGFkZXJUeXBlKToKKyAgICAgICAgKFRDb21waWxlcjo6Z2V0U2hh
ZGVyU3BlYyk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1NoYWRlckxhbmcuY3BwOgorICAgICAg
ICAoZ2V0VmFyaWFibGVNYXhMZW5ndGgpOgorICAgICAgICAoZ2V0VmFyaWFibGVJbmZvKToKKyAg
ICAgICAgKFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMpOgorICAgICAgICAoU2hDb25zdHJ1Y3RDb21w
aWxlcik6CisgICAgICAgIChTaENvbXBpbGUpOgorICAgICAgICAoU2hHZXRJbmZvKToKKyAgICAg
ICAgKFNoR2V0SW5mb0xvZyk6CisgICAgICAgIChTaEdldE9iamVjdENvZGUpOgorICAgICAgICAo
U2hHZXRBY3RpdmVBdHRyaWIpOgorICAgICAgICAoU2hHZXRBY3RpdmVVbmlmb3JtKToKKyAgICAg
ICAgKiBzcmMvY29tcGlsZXIvU3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoVFN5bWJvbFRhYmxl
TGV2ZWw6OnJlbGF0ZVRvRXh0ZW5zaW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvU3ltYm9s
VGFibGUuaDoKKyAgICAgICAgKFRWYXJpYWJsZTo6c2hhcmVDb25zdFBvaW50ZXIpOgorICAgICAg
ICAoVEZ1bmN0aW9uOjpyZWxhdGVUb0V4dGVuc2lvbik6CisgICAgICAgIChURnVuY3Rpb246Omdl
dEV4dGVuc2lvbik6CisgICAgICAgIChURnVuY3Rpb246OmdldFBhcmFtQ291bnQpOgorICAgICAg
ICAoVEZ1bmN0aW9uOjpnZXRQYXJhbSk6CisgICAgICAgIChUU3ltYm9sVGFibGU6OmdldEdsb2Jh
bExldmVsKToKKyAgICAgICAgKFRTeW1ib2xUYWJsZTo6cmVsYXRlVG9PcGVyYXRvcik6CisgICAg
ICAgIChUU3ltYm9sVGFibGU6OnJlbGF0ZVRvRXh0ZW5zaW9uKToKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvVHJhbnNsYXRvckdMU0wuY3BwOgorICAgICAgICAod3JpdGVWZXJzaW9uKToKKyAgICAg
ICAgKFRyYW5zbGF0b3JHTFNMOjpUcmFuc2xhdG9yR0xTTCk6CisgICAgICAgIChUcmFuc2xhdG9y
R0xTTDo6dHJhbnNsYXRlKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVHJhbnNsYXRvckdMU0wu
aDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVHJhbnNsYXRvckhMU0wuY3BwOgorICAgICAgICAo
VHJhbnNsYXRvckhMU0w6OlRyYW5zbGF0b3JITFNMKToKKyAgICAgICAgKFRyYW5zbGF0b3JITFNM
Ojp0cmFuc2xhdGUpOgorICAgICAgICAqIHNyYy9jb21waWxlci9UcmFuc2xhdG9ySExTTC5oOgor
ICAgICAgICAqIHNyYy9jb21waWxlci9UeXBlcy5oOgorICAgICAgICAoVFR5cGU6OlRUeXBlKToK
KyAgICAgICAgKiBzcmMvY29tcGlsZXIvVW5mb2xkU2VsZWN0LmNwcDoKKyAgICAgICAgKHNoOjpV
bmZvbGRTZWxlY3Q6OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVW5m
b2xkU2VsZWN0Lmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFZhbGlkYXRlTGltaXRhdGlvbnM6OlZhbGlkYXRlTGltaXRh
dGlvbnMpOgorICAgICAgICAoVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRTeW1ib2wpOgorICAg
ICAgICAoVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRDb25zdGFudFVuaW9uKToKKyAgICAgICAg
KFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0QmluYXJ5KToKKyAgICAgICAgKFZhbGlkYXRlTGlt
aXRhdGlvbnM6OnZpc2l0VW5hcnkpOgorICAgICAgICAoVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlz
aXRTZWxlY3Rpb24pOgorICAgICAgICAoVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRBZ2dyZWdh
dGUpOgorICAgICAgICAoVmFsaWRhdGVMaW1pdGF0aW9uczo6dmlzaXRMb29wKToKKyAgICAgICAg
KFZhbGlkYXRlTGltaXRhdGlvbnM6OnZpc2l0QnJhbmNoKToKKyAgICAgICAgKFZhbGlkYXRlTGlt
aXRhdGlvbnM6OmVycm9yKToKKyAgICAgICAgKFZhbGlkYXRlTGltaXRhdGlvbnM6OndpdGhpbkxv
b3BCb2R5KToKKyAgICAgICAgKFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzTG9vcEluZGV4KToKKyAg
ICAgICAgKFZhbGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlTG9vcFR5cGUpOgorICAgICAgICAo
VmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wSGVhZGVyKToKKyAgICAgICAgKFZh
bGlkYXRlTGltaXRhdGlvbnM6OnZhbGlkYXRlRm9yTG9vcEluaXQpOgorICAgICAgICAoVmFsaWRh
dGVMaW1pdGF0aW9uczo6dmFsaWRhdGVGb3JMb29wQ29uZCk6CisgICAgICAgIChWYWxpZGF0ZUxp
bWl0YXRpb25zOjp2YWxpZGF0ZUZvckxvb3BFeHByKToKKyAgICAgICAgKFZhbGlkYXRlTGltaXRh
dGlvbnM6OnZhbGlkYXRlRnVuY3Rpb25DYWxsKToKKyAgICAgICAgKFZhbGlkYXRlTGltaXRhdGlv
bnM6OnZhbGlkYXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFZhbGlkYXRlTGltaXRhdGlvbnM6Omlz
Q29uc3RFeHByKToKKyAgICAgICAgKFZhbGlkYXRlTGltaXRhdGlvbnM6OmlzQ29uc3RJbmRleEV4
cHIpOgorICAgICAgICAoVmFsaWRhdGVMaW1pdGF0aW9uczo6dmFsaWRhdGVJbmRleGluZyk6Cisg
ICAgICAgICogc3JjL2NvbXBpbGVyL1ZhbGlkYXRlTGltaXRhdGlvbnMuaDogQWRkZWQuCisgICAg
ICAgIChWYWxpZGF0ZUxpbWl0YXRpb25zOjpudW1FcnJvcnMpOgorICAgICAgICAqIHNyYy9jb21w
aWxlci9WYXJpYWJsZUluZm8uY3BwOiBBZGRlZC4KKyAgICAgICAgKGFycmF5QnJhY2tldHMpOgor
ICAgICAgICAoZ2V0VmFyaWFibGVEYXRhVHlwZSk6CisgICAgICAgIChnZXRWYXJpYWJsZUluZm8p
OgorICAgICAgICAoZ2V0QnVpbHRJblZhcmlhYmxlSW5mbyk6CisgICAgICAgIChnZXRVc2VyRGVm
aW5lZFZhcmlhYmxlSW5mbyk6CisgICAgICAgIChDb2xsZWN0QXR0cmlic1VuaWZvcm1zOjpDb2xs
ZWN0QXR0cmlic1VuaWZvcm1zKToKKyAgICAgICAgKENvbGxlY3RBdHRyaWJzVW5pZm9ybXM6OnZp
c2l0U3ltYm9sKToKKyAgICAgICAgKENvbGxlY3RBdHRyaWJzVW5pZm9ybXM6OnZpc2l0Q29uc3Rh
bnRVbmlvbik6CisgICAgICAgIChDb2xsZWN0QXR0cmlic1VuaWZvcm1zOjp2aXNpdEJpbmFyeSk6
CisgICAgICAgIChDb2xsZWN0QXR0cmlic1VuaWZvcm1zOjp2aXNpdFVuYXJ5KToKKyAgICAgICAg
KENvbGxlY3RBdHRyaWJzVW5pZm9ybXM6OnZpc2l0U2VsZWN0aW9uKToKKyAgICAgICAgKENvbGxl
Y3RBdHRyaWJzVW5pZm9ybXM6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKENvbGxlY3RBdHRy
aWJzVW5pZm9ybXM6OnZpc2l0TG9vcCk6CisgICAgICAgIChDb2xsZWN0QXR0cmlic1VuaWZvcm1z
Ojp2aXNpdEJyYW5jaCk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL1ZhcmlhYmxlSW5mby5oOiBB
ZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFRWZXJzaW9uR0xTTDo6VFZlcnNpb25HTFNMKToKKyAgICAgICAgKFRWZXJzaW9uR0xT
TDo6dmlzaXRTeW1ib2wpOgorICAgICAgICAoVFZlcnNpb25HTFNMOjp2aXNpdENvbnN0YW50VW5p
b24pOgorICAgICAgICAoVFZlcnNpb25HTFNMOjp2aXNpdEJpbmFyeSk6CisgICAgICAgIChUVmVy
c2lvbkdMU0w6OnZpc2l0VW5hcnkpOgorICAgICAgICAoVFZlcnNpb25HTFNMOjp2aXNpdFNlbGVj
dGlvbik6CisgICAgICAgIChUVmVyc2lvbkdMU0w6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAg
KFRWZXJzaW9uR0xTTDo6dmlzaXRMb29wKToKKyAgICAgICAgKFRWZXJzaW9uR0xTTDo6dmlzaXRC
cmFuY2gpOgorICAgICAgICAoVFZlcnNpb25HTFNMOjp1cGRhdGVWZXJzaW9uKToKKyAgICAgICAg
KiBzcmMvY29tcGlsZXIvVmVyc2lvbkdMU0wuaDogQWRkZWQuCisgICAgICAgIChUVmVyc2lvbkdM
U0w6OmdldFZlcnNpb24pOgorICAgICAgICAqIHNyYy9jb21waWxlci9nZW5lcmF0ZV9nbHNsYW5n
X2xleGVyLnNoOiBBZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2VuZXJhdGVfZ2xzbGFu
Z19wYXJzZXIuc2g6IEFkZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5nLmg6IEFk
ZGVkLgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5nLmw6CisgICAgICAgICogc3JjL2Nv
bXBpbGVyL2dsc2xhbmcueToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvZ2xzbGFuZ19sZXguY3Bw
OiBBZGRlZC4KKyAgICAgICAgKHl5X2dldF9uZXh0X2J1ZmZlcik6CisgICAgICAgICh5eV9nZXRf
cHJldmlvdXNfc3RhdGUpOgorICAgICAgICAoeXlfdHJ5X05VTF90cmFucyk6CisgICAgICAgIChp
bnB1dCk6CisgICAgICAgICh5eXJlc3RhcnQpOgorICAgICAgICAoeXlfc3dpdGNoX3RvX2J1ZmZl
cik6CisgICAgICAgICh5eV9sb2FkX2J1ZmZlcl9zdGF0ZSk6CisgICAgICAgICh5eV9jcmVhdGVf
YnVmZmVyKToKKyAgICAgICAgKHl5X2RlbGV0ZV9idWZmZXIpOgorICAgICAgICAoeXlfaW5pdF9i
dWZmZXIpOgorICAgICAgICAoeXlfZmx1c2hfYnVmZmVyKToKKyAgICAgICAgKHl5cHVzaF9idWZm
ZXJfc3RhdGUpOgorICAgICAgICAoeXlwb3BfYnVmZmVyX3N0YXRlKToKKyAgICAgICAgKHl5ZW5z
dXJlX2J1ZmZlcl9zdGFjayk6CisgICAgICAgICh5eV9zY2FuX2J1ZmZlcik6CisgICAgICAgICh5
eV9zY2FuX3N0cmluZyk6CisgICAgICAgICh5eV9zY2FuX2J5dGVzKToKKyAgICAgICAgKHl5X3B1
c2hfc3RhdGUpOgorICAgICAgICAoeXlfcG9wX3N0YXRlKToKKyAgICAgICAgKHl5X3RvcF9zdGF0
ZSk6CisgICAgICAgICh5eV9mYXRhbF9lcnJvcik6CisgICAgICAgICh5eWdldF9leHRyYSk6Cisg
ICAgICAgICh5eWdldF9saW5lbm8pOgorICAgICAgICAoeXlnZXRfY29sdW1uKToKKyAgICAgICAg
KHl5Z2V0X2luKToKKyAgICAgICAgKHl5Z2V0X291dCk6CisgICAgICAgICh5eWdldF9sZW5nKToK
KyAgICAgICAgKHl5Z2V0X3RleHQpOgorICAgICAgICAoeXlzZXRfZXh0cmEpOgorICAgICAgICAo
eXlzZXRfbGluZW5vKToKKyAgICAgICAgKHl5c2V0X2NvbHVtbik6CisgICAgICAgICh5eXNldF9p
bik6CisgICAgICAgICh5eXNldF9vdXQpOgorICAgICAgICAoeXlnZXRfZGVidWcpOgorICAgICAg
ICAoeXlzZXRfZGVidWcpOgorICAgICAgICAoeXlnZXRfbHZhbCk6CisgICAgICAgICh5eXNldF9s
dmFsKToKKyAgICAgICAgKHl5bGV4X2luaXQpOgorICAgICAgICAoeXlsZXhfaW5pdF9leHRyYSk6
CisgICAgICAgICh5eV9pbml0X2dsb2JhbHMpOgorICAgICAgICAoeXlsZXhfZGVzdHJveSk6Cisg
ICAgICAgICh5eV9mbGV4X3N0cm5jcHkpOgorICAgICAgICAoeXlfZmxleF9zdHJsZW4pOgorICAg
ICAgICAoeXlhbGxvYyk6CisgICAgICAgICh5eXJlYWxsb2MpOgorICAgICAgICAoeXlmcmVlKToK
KyAgICAgICAgKHN0cmluZ19pbnB1dCk6CisgICAgICAgIChjaGVja190eXBlKToKKyAgICAgICAg
KHJlc2VydmVkX3dvcmQpOgorICAgICAgICAoeXllcnJvcik6CisgICAgICAgIChnbHNsYW5nX2lu
aXRpYWxpemUpOgorICAgICAgICAoZ2xzbGFuZ19maW5hbGl6ZSk6CisgICAgICAgIChnbHNsYW5n
X3NjYW4pOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5nX3RhYi5jcHA6IEFkZGVkLgor
ICAgICAgICAoeXl0bmFtZXJyKToKKyAgICAgICAgKHl5c3ludGF4X2Vycm9yKToKKyAgICAgICAg
KGdsc2xhbmdfcGFyc2UpOgorICAgICAgICAqIHNyYy9jb21waWxlci9nbHNsYW5nX3RhYi5oOiBB
ZGRlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvaW50ZXJtT3V0LmNwcDoKKyAgICAgICAgKFRP
dXRwdXRUcmF2ZXJzZXI6OlRPdXRwdXRUcmF2ZXJzZXIpOgorICAgICAgICAoT3V0cHV0VHJlZVRl
eHQpOgorICAgICAgICAoVE91dHB1dFRyYXZlcnNlcjo6dmlzaXRTeW1ib2wpOgorICAgICAgICAo
VE91dHB1dFRyYXZlcnNlcjo6dmlzaXRCaW5hcnkpOgorICAgICAgICAoVE91dHB1dFRyYXZlcnNl
cjo6dmlzaXRVbmFyeSk6CisgICAgICAgIChUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdEFnZ3JlZ2F0
ZSk6CisgICAgICAgIChUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdFNlbGVjdGlvbik6CisgICAgICAg
IChUT3V0cHV0VHJhdmVyc2VyOjp2aXNpdENvbnN0YW50VW5pb24pOgorICAgICAgICAoVE91dHB1
dFRyYXZlcnNlcjo6dmlzaXRMb29wKToKKyAgICAgICAgKFRPdXRwdXRUcmF2ZXJzZXI6OnZpc2l0
QnJhbmNoKToKKyAgICAgICAgKFRJbnRlcm1lZGlhdGU6Om91dHB1dFRyZWUpOgorICAgICAgICAq
IHNyYy9jb21waWxlci9pbnRlcm1lZGlhdGUuaDoKKyAgICAgICAgKFRJbnRlcm1Mb29wOjpUSW50
ZXJtTG9vcCk6CisgICAgICAgIChUSW50ZXJtTG9vcDo6Z2V0VHlwZSk6CisgICAgICAgIChUSW50
ZXJtTG9vcDo6Z2V0SW5pdCk6CisgICAgICAgIChUSW50ZXJtTG9vcDo6Z2V0Q29uZGl0aW9uKToK
KyAgICAgICAgKFRJbnRlcm1Mb29wOjpnZXRFeHByZXNzaW9uKToKKyAgICAgICAgKFRJbnRlcm1M
b29wOjpnZXRCb2R5KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvbG9jYWxpbnRlcm1lZGlhdGUu
aDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvb3NpbmNsdWRlLmg6CisgICAgICAgIChPU19HZXRU
TFNWYWx1ZSk6CisgICAgICAgICogc3JjL2NvbXBpbGVyL29zc291cmNlX25zcHIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKE9TX0FsbG9jVExTSW5kZXgpOgorICAgICAgICAoT1NfU2V0VExTVmFsdWUp
OgorICAgICAgICAoT1NfRnJlZVRMU0luZGV4KToKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJl
cHJvY2Vzc29yL2NvbXBpbGUuaDoKKyAgICAgICAgKiBzcmMvY29tcGlsZXIvcHJlcHJvY2Vzc29y
L2NwcC5jOgorICAgICAgICAoQ1BQZGVmaW5lKToKKyAgICAgICAgKENQUGVsc2UpOgorICAgICAg
ICAoQ1BQaWYpOgorICAgICAgICAoQ1BQaWZkZWYpOgorICAgICAgICAoQ1BQZXJyb3IpOgorICAg
ICAgICAoQ1BQZXh0ZW5zaW9uKToKKyAgICAgICAgKHJlYWRDUFBsaW5lKToKKyAgICAgICAgKiBz
cmMvY29tcGlsZXIvcHJlcHJvY2Vzc29yL3ByZXByb2Nlc3MuaDoKKyAgICAgICAgKiBzcmMvY29t
cGlsZXIvcHJlcHJvY2Vzc29yL3NjYW5uZXIuYzoKKyAgICAgICAgKHN0cl9nZXRjaCk6CisgICAg
ICAgIChzdHJfdW5nZXRjaCk6CisgICAgICAgIChTY2FuRnJvbVN0cmluZyk6CisgICAgICAgIChs
RmxvYXRDb25zdCk6CisgICAgICAgIChieXRlX3NjYW4pOgorICAgICAgICAoeXlsZXhfQ1BQKToK
KyAgICAgICAgKGNoZWNrX0VPRik6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nv
ci9zY2FubmVyLmg6CisgICAgICAgICogc3JjL2NvbXBpbGVyL3ByZXByb2Nlc3Nvci90b2tlbnMu
YzoKKyAgICAgICAgKFJlY29yZFRva2VuKToKKyAgICAgICAgKFJlYWRUb2tlbik6CisgICAgICAg
ICogc3JjL2NvbXBpbGVyL3Rvb2xzOiBSZW1vdmVkLgorICAgICAgICAqIHNyYy9jb21waWxlci91
bmlzdGQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvY29tcGlsZXIvdXRpbC5jcHA6IEFkZGVk
LgorICAgICAgICAoYXRvZl9kb3QpOgorICAgICAgICAqIHNyYy9jb21waWxlci91dGlsLmg6IEFk
ZGVkLgorICAgICAgICAqIHNyYy9saWJFR0wvQ29uZmlnLmNwcDoKKyAgICAgICAgKGVnbDo6Q29u
ZmlnOjpzZXQpOgorICAgICAgICAqIHNyYy9saWJFR0wvRGlzcGxheS5jcHA6CisgICAgICAgIChl
Z2w6OkRpc3BsYXk6OkRpc3BsYXkpOgorICAgICAgICAoZWdsOjpEaXNwbGF5Ojppbml0aWFsaXpl
KToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6dGVybWluYXRlKToKKyAgICAgICAgKGVnbDo6RGlz
cGxheTo6Y3JlYXRlRGV2aWNlKToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6cmVzZXREZXZpY2Up
OgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpjcmVhdGVDb250ZXh0KToKKyAgICAgICAgKGVnbDo6
RGlzcGxheTo6ZGVzdHJveUNvbnRleHQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRNaW5T
d2FwSW50ZXJ2YWwpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRNYXhTd2FwSW50ZXJ2YWwp
OgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXREZXZpY2UpOgorICAgICAgICAoZWdsOjpEaXNw
bGF5OjpnZXRGbG9hdFRleHR1cmVTdXBwb3J0KToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Z2V0
SGFsZkZsb2F0VGV4dHVyZVN1cHBvcnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRMdW1p
bmFuY2VUZXh0dXJlU3VwcG9ydCk6CisgICAgICAgIChlZ2w6OkRpc3BsYXk6OmdldEx1bWluYW5j
ZUFscGhhVGV4dHVyZVN1cHBvcnQpOgorICAgICAgICAoZWdsOjpEaXNwbGF5OjpnZXRCdWZmZXJQ
b29sKToKKyAgICAgICAgKGVnbDo6RGlzcGxheTo6Z2V0RXZlbnRRdWVyeVN1cHBvcnQpOgorICAg
ICAgICAoZWdsOjpEaXNwbGF5OjpnZXREZWZhdWx0UHJlc2VudFBhcmFtZXRlcnMpOgorICAgICAg
ICAqIHNyYy9saWJFR0wvRGlzcGxheS5oOgorICAgICAgICAqIHNyYy9saWJFR0wvU3VyZmFjZS5j
cHA6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OlN1cmZhY2UpOgorICAgICAgICAoZWdsOjpTdXJm
YWNlOjp+U3VyZmFjZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnJlbGVhc2UpOgorICAgICAg
ICAoZWdsOjpTdXJmYWNlOjpyZXNldFN3YXBDaGFpbik6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6
OndyaXRlUmVjb3JkYWJsZUZsaXBTdGF0ZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2U6OnJlc3Rv
cmVTdGF0ZSk6CisgICAgICAgIChlZ2w6OlN1cmZhY2VXaW5kb3dQcm9jKToKKyAgICAgICAgKGVn
bDo6U3VyZmFjZTo6c3ViY2xhc3NXaW5kb3cpOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjp1bnN1
YmNsYXNzV2luZG93KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Y2hlY2tGb3JPdXRPZkRhdGVT
d2FwQ2hhaW4pOgorICAgICAgICAoZWdsOjpTdXJmYWNlOjpjb252ZXJ0SW50ZXJ2YWwpOgorICAg
ICAgICAoZWdsOjpTdXJmYWNlOjpzd2FwKToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6Z2V0UmVu
ZGVyVGFyZ2V0KToKKyAgICAgICAgKGVnbDo6U3VyZmFjZTo6c2V0U3dhcEludGVydmFsKToKKyAg
ICAgICAgKiBzcmMvbGliRUdML1N1cmZhY2UuaDoKKyAgICAgICAgKiBzcmMvbGliRUdML2xpYkVH
TC5jcHA6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9CbGl0LmNwcDoKKyAgICAgICAgKGdsOjpC
bGl0Ojpjb3B5U3VyZmFjZVRvVGV4dHVyZSk6CisgICAgICAgIChnbDo6QmxpdDo6c2V0Q29tbW9u
QmxpdFN0YXRlKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0J1ZmZlci5jcHA6CisgICAgICAg
IChnbDo6QnVmZmVyOjpCdWZmZXIpOgorICAgICAgICAoZ2w6OkJ1ZmZlcjo6fkJ1ZmZlcik6Cisg
ICAgICAgIChnbDo6QnVmZmVyOjpidWZmZXJEYXRhKToKKyAgICAgICAgKGdsOjpCdWZmZXI6OmJ1
ZmZlclN1YkRhdGEpOgorICAgICAgICAoZ2w6OkJ1ZmZlcjo6Z2V0VmVydGV4QnVmZmVyKToKKyAg
ICAgICAgKGdsOjpCdWZmZXI6OmdldEluZGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpCdWZmZXI6
OmludmFsaWRhdGVTdGF0aWNEYXRhKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0J1ZmZlci5o
OgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvQ29udGV4dC5jcHA6CisgICAgICAgIChnbDo6Q29u
dGV4dDo6Q29udGV4dCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6fkNvbnRleHQpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6Om1ha2VDdXJyZW50KToKKyAgICAgICAgKGdsOjpDb250ZXh0OjptYXJr
QWxsU3RhdGVEaXJ0eSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0RnJhZ21lbnRTaGFkZXJE
ZXJpdmF0aXZlSGludCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0RW5hYmxlVmVydGV4QXR0
cmliQXJyYXkpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFZlcnRleEF0dHJpYlN0YXRlKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRWZXJ0ZXhBdHRyaWJ1dGVzKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpjcmVhdGVGZW5jZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZGVsZXRlRmVu
Y2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmJpbmRUZXh0dXJlMkQpOgorICAgICAgICAoZ2w6
OkNvbnRleHQ6OmJpbmRUZXh0dXJlQ3ViZU1hcCk6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0
RmVuY2UpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmdldFRleHR1cmUyRCk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6Z2V0VGV4dHVyZUN1YmVNYXApOgorICAgICAgICAoZ2w6OkNvbnRleHQ6Omdl
dFNhbXBsZXJUZXh0dXJlKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRCb29sZWFudik6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6Z2V0SW50ZWdlcnYpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OmdldFF1ZXJ5UGFyYW1ldGVySW5mbyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6YXBwbHlSZW5k
ZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmFwcGx5U3RhdGUpOgorICAgICAgICAo
Z2w6OkNvbnRleHQ6Omxvb2t1cEF0dHJpYnV0ZU1hcHBpbmcpOgorICAgICAgICAoZ2w6OkNvbnRl
eHQ6OmFwcGx5VmVydGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjphcHBseUluZGV4
QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpyZWFkUGl4ZWxzKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpjbGVhcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0FycmF5cyk6Cisg
ICAgICAgIChnbDo6Q29udGV4dDo6ZHJhd0VsZW1lbnRzKToKKyAgICAgICAgKGdsOjpDb250ZXh0
OjpmaW5pc2gpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OmRyYXdDbG9zaW5nTGluZSk6CisgICAg
ICAgIChnbDo6Q29udGV4dDo6Z2V0TWF4aW11bVZhcnlpbmdWZWN0b3JzKToKKyAgICAgICAgKGds
OjpDb250ZXh0OjpnZXRNYXhpbXVtRnJhZ21lbnRVbmlmb3JtVmVjdG9ycyk6CisgICAgICAgIChn
bDo6Q29udGV4dDo6c3VwcG9ydHNFdmVudFF1ZXJpZXMpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6
OnN1cHBvcnRzRmxvYXRUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNG
bG9hdExpbmVhckZpbHRlcik6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNGbG9hdFJl
bmRlcmFibGVUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNIYWxmRmxv
YXRUZXh0dXJlcyk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c3VwcG9ydHNIYWxmRmxvYXRMaW5l
YXJGaWx0ZXIpOgorICAgICAgICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzSGFsZkZsb2F0UmVuZGVy
YWJsZVRleHR1cmVzKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtUmVuZGVyYnVm
ZmVyRGltZW5zaW9uKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtVGV4dHVyZURp
bWVuc2lvbik6CisgICAgICAgIChnbDo6Q29udGV4dDo6Z2V0TWF4aW11bUN1YmVUZXh0dXJlRGlt
ZW5zaW9uKToKKyAgICAgICAgKGdsOjpDb250ZXh0OjpnZXRNYXhpbXVtVGV4dHVyZUxldmVsKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZVRleHR1cmVzKToKKyAgICAg
ICAgKGdsOjpDb250ZXh0OjpzdXBwb3J0c0x1bWluYW5jZUFscGhhVGV4dHVyZXMpOgorICAgICAg
ICAoZ2w6OkNvbnRleHQ6OnN1cHBvcnRzMzJiaXRJbmRpY2VzKToKKyAgICAgICAgKGdsOjpDb250
ZXh0OjpnZXRJbmNvbXBsZXRlVGV4dHVyZSk6CisgICAgICAgIChnbDo6Q29udGV4dDo6c2V0VmVy
dGV4QXR0cmliKToKKyAgICAgICAgKGdsOjpDb250ZXh0Ojppbml0RXh0ZW5zaW9uU3RyaW5nKToK
KyAgICAgICAgKGdsOjpDb250ZXh0OjpibGl0RnJhbWVidWZmZXIpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvQ29udGV4dC5oOgorICAgICAgICAoZ2w6OlZlcnRleEF0dHJpYnV0ZTo6VmVydGV4
QXR0cmlidXRlKToKKyAgICAgICAgKGdsOjpWZXJ0ZXhBdHRyaWJ1dGU6OnR5cGVTaXplKToKKyAg
ICAgICAgKGdsOjpWZXJ0ZXhBdHRyaWJ1dGU6OnN0cmlkZSk6CisgICAgICAgICogc3JjL2xpYkdM
RVN2Mi9GZW5jZS5jcHA6IEFkZGVkLgorICAgICAgICAoZ2w6OkZlbmNlOjpGZW5jZSk6CisgICAg
ICAgIChnbDo6RmVuY2U6On5GZW5jZSk6CisgICAgICAgIChnbDo6RmVuY2U6OmlzRmVuY2UpOgor
ICAgICAgICAoZ2w6OkZlbmNlOjpzZXRGZW5jZSk6CisgICAgICAgIChnbDo6RmVuY2U6OnRlc3RG
ZW5jZSk6CisgICAgICAgIChnbDo6RmVuY2U6OmZpbmlzaEZlbmNlKToKKyAgICAgICAgKGdsOjpG
ZW5jZTo6Z2V0RmVuY2Vpdik6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9GZW5jZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL0ZyYW1lYnVmZmVyLmNwcDoKKyAgICAgICAgKGds
OjpGcmFtZWJ1ZmZlcjo6Y29tcGxldGVuZXNzKToKKyAgICAgICAgKGdsOjpEZWZhdWx0RnJhbWVi
dWZmZXI6OkRlZmF1bHRGcmFtZWJ1ZmZlcik6CisgICAgICAgIChnbDo6RGVmYXVsdEZyYW1lYnVm
ZmVyOjpjb21wbGV0ZW5lc3MpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbS5jcHA6
CisgICAgICAgIChnbDo6UHJvZ3JhbTo6UHJvZ3JhbSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6
Z2V0U2FtcGxlck1hcHBpbmcpOgorICAgICAgICAoZ2w6OlByb2dyYW06OmdldFVuaWZvcm1Mb2Nh
dGlvbik6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6c2V0VW5pZm9ybTFpdik6CisgICAgICAgIChn
bDo6UHJvZ3JhbTo6YXBwbHlVbmlmb3Jtcyk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6cGFja1Zh
cnlpbmdzKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjpsaW5rVmFyeWluZ3MpOgorICAgICAgICAo
Z2w6OlByb2dyYW06OmxpbmspOgorICAgICAgICAoZ2w6OlByb2dyYW06OmRlZmluZVVuaWZvcm0p
OgorICAgICAgICAoZ2w6OlByb2dyYW06OmNyZWF0ZVVuaWZvcm0pOgorICAgICAgICAoZ2w6OlBy
b2dyYW06OmFwcGx5VW5pZm9ybTFpdik6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6cmVzZXRJbmZv
TG9nKToKKyAgICAgICAgKGdsOjpQcm9ncmFtOjp1bmxpbmspOgorICAgICAgICAoZ2w6OlByb2dy
YW06OmdldEFjdGl2ZUF0dHJpYnV0ZSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0QWN0aXZl
VW5pZm9ybSk6CisgICAgICAgIChnbDo6UHJvZ3JhbTo6Z2V0RHhEZXB0aFJhbmdlTG9jYXRpb24p
OgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUHJvZ3JhbS5oOgorICAgICAgICAqIHNyYy9saWJH
TEVTdjIvUmVmQ291bnRPYmplY3QuY3BwOgorICAgICAgICAoZ2w6OlJlZkNvdW50T2JqZWN0Ojp+
UmVmQ291bnRPYmplY3QpOgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvUmVuZGVyYnVmZmVyLmNw
cDoKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjpSZW5kZXJidWZmZXJTdG9yYWdl
KToKKyAgICAgICAgKGdsOjpSZW5kZXJidWZmZXJTdG9yYWdlOjppc0Zsb2F0aW5nUG9pbnQpOgor
ICAgICAgICAoZ2w6OkNvbG9yYnVmZmVyOjpDb2xvcmJ1ZmZlcik6CisgICAgICAgIChnbDo6RGVw
dGhTdGVuY2lsYnVmZmVyOjpEZXB0aFN0ZW5jaWxidWZmZXIpOgorICAgICAgICAqIHNyYy9saWJH
TEVTdjIvUmVuZGVyYnVmZmVyLmg6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9TaGFkZXIuY3Bw
OgorICAgICAgICAoZ2w6OlNoYWRlcjo6U2hhZGVyKToKKyAgICAgICAgKGdsOjpTaGFkZXI6OnBh
cnNlVmFyeWluZ3MpOgorICAgICAgICAoZ2w6OlNoYWRlcjo6Y29tcGlsZVRvSExTTCk6CisgICAg
ICAgIChnbDo6VmVydGV4U2hhZGVyOjpwYXJzZUF0dHJpYnV0ZXMpOgorICAgICAgICAqIHNyYy9s
aWJHTEVTdjIvVGV4dHVyZS5jcHA6CisgICAgICAgIChnbDo6VGV4dHVyZTo6VGV4dHVyZSk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZTo6aXNGbG9hdGluZ1BvaW50KToKKyAgICAgICAgKGdsOjpUZXh0
dXJlOjppc1JlbmRlcmFibGVGb3JtYXQpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNlbGVjdEZv
cm1hdCk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZEltYWdlRGF0YSk6CisgICAgICAgIChn
bDo6VGV4dHVyZTo6bG9hZEFscGhhRmxvYXRJbWFnZURhdGEpOgorICAgICAgICAoZ2w6OlRleHR1
cmU6OmxvYWRBbHBoYUhhbGZGbG9hdEltYWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6
bG9hZEx1bWluYW5jZUltYWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZEx1bWlu
YW5jZUZsb2F0SW1hZ2VEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkTHVtaW5hbmNl
SGFsZkZsb2F0SW1hZ2VEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkTHVtaW5hbmNl
QWxwaGFJbWFnZURhdGEpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmxvYWRMdW1pbmFuY2VBbHBo
YUZsb2F0SW1hZ2VEYXRhKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpsb2FkTHVtaW5hbmNlQWxw
aGFIYWxmRmxvYXRJbWFnZURhdGEpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmxvYWRSR0JGbG9h
dEltYWdlRGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZFJHQkhhbGZGbG9hdEltYWdl
RGF0YSk6CisgICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZFJHQkFGbG9hdEltYWdlRGF0YSk6Cisg
ICAgICAgIChnbDo6VGV4dHVyZTo6bG9hZFJHQkFIYWxmRmxvYXRJbWFnZURhdGEpOgorICAgICAg
ICAoZ2w6OlRleHR1cmU6OmNyZWF0ZVN1cmZhY2UpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OnNl
dEltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzZXRDb21wcmVzc2VkSW1hZ2UpOgorICAg
ICAgICAoZ2w6OlRleHR1cmU6OnN1YkltYWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpzdWJJ
bWFnZUNvbXByZXNzZWQpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OmNvcHlOb25SZW5kZXJhYmxl
KToKKyAgICAgICAgKGdsOjpUZXh0dXJlOjpnZXREM0RGb3JtYXQpOgorICAgICAgICAoZ2w6OlRl
eHR1cmU6OmlzUmVuZGVyYWJsZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpUZXh0dXJlMkQp
OgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6flRleHR1cmUyRCk6CisgICAgICAgIChnbDo6VGV4
dHVyZTJEOjpyZWRlZmluZVRleHR1cmUpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6c2V0SW1h
Z2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6c2V0Q29tcHJlc3NlZEltYWdlKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlMkQ6OmNvcHlJbWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpj
b3B5U3ViSW1hZ2UpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6aXNDb21wbGV0ZSk6CisgICAg
ICAgIChnbDo6VGV4dHVyZTJEOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJl
MkQ6OmNvbnZlcnRUb1JlbmRlclRhcmdldCk6CisgICAgICAgIChnbDo6VGV4dHVyZTJEOjpnZW5l
cmF0ZU1pcG1hcHMpOgorICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0Q29sb3JidWZmZXIpOgor
ICAgICAgICAoZ2w6OlRleHR1cmUyRDo6Z2V0UmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlQ3ViZU1hcDo6VGV4dHVyZUN1YmVNYXApOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJl
TWFwOjp+VGV4dHVyZUN1YmVNYXApOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJlTWFwOjpzdWJJ
bWFnZSk6CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OnN1YkltYWdlQ29tcHJlc3NlZCk6
CisgICAgICAgIChnbDo6VGV4dHVyZUN1YmVNYXA6OmlzQ29tcGxldGUpOgorICAgICAgICAoZ2w6
OlRleHR1cmVDdWJlTWFwOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3Vi
ZU1hcDo6Y29udmVydFRvUmVuZGVyVGFyZ2V0KToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1h
cDo6cmVkZWZpbmVUZXh0dXJlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y29weUlt
YWdlKToKKyAgICAgICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Y29weVN1YkltYWdlKToKKyAgICAg
ICAgKGdsOjpUZXh0dXJlQ3ViZU1hcDo6Z2VuZXJhdGVNaXBtYXBzKToKKyAgICAgICAgKGdsOjpU
ZXh0dXJlQ3ViZU1hcDo6Z2V0Q29sb3JidWZmZXIpOgorICAgICAgICAoZ2w6OlRleHR1cmVDdWJl
TWFwOjpnZXRSZW5kZXJUYXJnZXQpOgorICAgICAgICAoZ2w6OlRleHR1cmU6OlRleHR1cmVDb2xv
cmJ1ZmZlclByb3h5OjpUZXh0dXJlQ29sb3JidWZmZXJQcm94eSk6CisgICAgICAgIChnbDo6VGV4
dHVyZTo6VGV4dHVyZUNvbG9yYnVmZmVyUHJveHk6OmlzRmxvYXRpbmdQb2ludCk6CisgICAgICAg
ICogc3JjL2xpYkdMRVN2Mi9UZXh0dXJlLmg6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9nZW9t
ZXRyeS9JbmRleERhdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKGdsOjpJbmRleERhdGFNYW5hZ2Vy
OjpJbmRleERhdGFNYW5hZ2VyKToKKyAgICAgICAgKGdsOjpJbmRleERhdGFNYW5hZ2VyOjp+SW5k
ZXhEYXRhTWFuYWdlcik6CisgICAgICAgIChnbDo6Y29udmVydEluZGljZXMpOgorICAgICAgICAo
Z2w6OmNvbXB1dGVSYW5nZSk6CisgICAgICAgIChnbDo6SW5kZXhEYXRhTWFuYWdlcjo6cHJlcGFy
ZUluZGV4RGF0YSk6CisgICAgICAgIChnbDo6SW5kZXhEYXRhTWFuYWdlcjo6aW5kZXhTaXplKToK
KyAgICAgICAgKGdsOjpJbmRleERhdGFNYW5hZ2VyOjp0eXBlU2l6ZSk6CisgICAgICAgIChnbDo6
SW5kZXhCdWZmZXI6OkluZGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpJbmRleEJ1ZmZlcjo6fklu
ZGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpJbmRleEJ1ZmZlcjo6Z2V0QnVmZmVyKToKKyAgICAg
ICAgKGdsOjpJbmRleEJ1ZmZlcjo6dW5tYXApOgorICAgICAgICAoZ2w6OlN0cmVhbWluZ0luZGV4
QnVmZmVyOjpTdHJlYW1pbmdJbmRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6U3RyZWFtaW5nSW5k
ZXhCdWZmZXI6On5TdHJlYW1pbmdJbmRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6U3RyZWFtaW5n
SW5kZXhCdWZmZXI6Om1hcCk6CisgICAgICAgIChnbDo6U3RyZWFtaW5nSW5kZXhCdWZmZXI6OnJl
c2VydmVTcGFjZSk6CisgICAgICAgIChnbDo6U3RhdGljSW5kZXhCdWZmZXI6OlN0YXRpY0luZGV4
QnVmZmVyKToKKyAgICAgICAgKGdsOjpTdGF0aWNJbmRleEJ1ZmZlcjo6flN0YXRpY0luZGV4QnVm
ZmVyKToKKyAgICAgICAgKGdsOjpTdGF0aWNJbmRleEJ1ZmZlcjo6bWFwKToKKyAgICAgICAgKGds
OjpTdGF0aWNJbmRleEJ1ZmZlcjo6cmVzZXJ2ZVNwYWNlKToKKyAgICAgICAgKGdsOjpTdGF0aWNJ
bmRleEJ1ZmZlcjo6bG9va3VwVHlwZSk6CisgICAgICAgIChnbDo6U3RhdGljSW5kZXhCdWZmZXI6
Omxvb2t1cFJhbmdlKToKKyAgICAgICAgKGdsOjpTdGF0aWNJbmRleEJ1ZmZlcjo6YWRkUmFuZ2Up
OgorICAgICAgICAqIHNyYy9saWJHTEVTdjIvZ2VvbWV0cnkvSW5kZXhEYXRhTWFuYWdlci5oOgor
ICAgICAgICAoZ2w6OkluZGV4QnVmZmVyOjpzaXplKToKKyAgICAgICAgKiBzcmMvbGliR0xFU3Yy
L2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmNwcDoKKyAgICAgICAgKGdsOjpWZXJ0ZXhEYXRh
TWFuYWdlcjo6VmVydGV4RGF0YU1hbmFnZXIpOgorICAgICAgICAoZ2w6OlZlcnRleERhdGFNYW5h
Z2VyOjp+VmVydGV4RGF0YU1hbmFnZXIpOgorICAgICAgICAoZ2w6OlZlcnRleERhdGFNYW5hZ2Vy
Ojp3cml0ZUF0dHJpYnV0ZURhdGEpOgorICAgICAgICAoZ2w6OlZlcnRleERhdGFNYW5hZ2VyOjpw
cmVwYXJlVmVydGV4RGF0YSk6CisgICAgICAgIChnbDo6VmVydGV4RGF0YU1hbmFnZXI6OnNwYWNl
UmVxdWlyZWQpOgorICAgICAgICAoZ2w6OlZlcnRleERhdGFNYW5hZ2VyOjpjaGVja1ZlcnRleENh
cHMpOgorICAgICAgICAoZ2w6OlZlcnRleERhdGFNYW5hZ2VyOjp0eXBlSW5kZXgpOgorICAgICAg
ICAoZ2w6OlZlcnRleERhdGFNYW5hZ2VyOjpzZXR1cEF0dHJpYnV0ZXMpOgorICAgICAgICAoZ2w6
OlZlcnRleEJ1ZmZlcjo6VmVydGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpWZXJ0ZXhCdWZmZXI6
On5WZXJ0ZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OlZlcnRleEJ1ZmZlcjo6dW5tYXApOgorICAg
ICAgICAoZ2w6OlZlcnRleEJ1ZmZlcjo6Z2V0QnVmZmVyKToKKyAgICAgICAgKGdsOjpDb25zdGFu
dFZlcnRleEJ1ZmZlcjo6Q29uc3RhbnRWZXJ0ZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OkNvbnN0
YW50VmVydGV4QnVmZmVyOjp+Q29uc3RhbnRWZXJ0ZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OkFy
cmF5VmVydGV4QnVmZmVyOjpBcnJheVZlcnRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6QXJyYXlW
ZXJ0ZXhCdWZmZXI6On5BcnJheVZlcnRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6QXJyYXlWZXJ0
ZXhCdWZmZXI6OmFkZFJlcXVpcmVkU3BhY2UpOgorICAgICAgICAoZ2w6OkFycmF5VmVydGV4QnVm
ZmVyOjphZGRSZXF1aXJlZFNwYWNlRm9yKToKKyAgICAgICAgKGdsOjpTdHJlYW1pbmdWZXJ0ZXhC
dWZmZXI6OlN0cmVhbWluZ1ZlcnRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6U3RyZWFtaW5nVmVy
dGV4QnVmZmVyOjp+U3RyZWFtaW5nVmVydGV4QnVmZmVyKToKKyAgICAgICAgKGdsOjpTdHJlYW1p
bmdWZXJ0ZXhCdWZmZXI6Om1hcCk6CisgICAgICAgIChnbDo6U3RyZWFtaW5nVmVydGV4QnVmZmVy
OjpyZXNlcnZlUmVxdWlyZWRTcGFjZSk6CisgICAgICAgIChnbDo6U3RhdGljVmVydGV4QnVmZmVy
OjpTdGF0aWNWZXJ0ZXhCdWZmZXIpOgorICAgICAgICAoZ2w6OlN0YXRpY1ZlcnRleEJ1ZmZlcjo6
flN0YXRpY1ZlcnRleEJ1ZmZlcik6CisgICAgICAgIChnbDo6U3RhdGljVmVydGV4QnVmZmVyOjpt
YXApOgorICAgICAgICAoZ2w6OlN0YXRpY1ZlcnRleEJ1ZmZlcjo6cmVzZXJ2ZVJlcXVpcmVkU3Bh
Y2UpOgorICAgICAgICAoZ2w6OlN0YXRpY1ZlcnRleEJ1ZmZlcjo6bG9va3VwQXR0cmlidXRlKToK
KyAgICAgICAgKGdsOjpWZXJ0ZXhEYXRhTWFuYWdlcjo6Zm9ybWF0Q29udmVydGVyKToKKyAgICAg
ICAgKiBzcmMvbGliR0xFU3YyL2dlb21ldHJ5L1ZlcnRleERhdGFNYW5hZ2VyLmg6CisgICAgICAg
IChnbDo6QXJyYXlWZXJ0ZXhCdWZmZXI6OnNpemUpOgorICAgICAgICAoZ2w6OlZlcnRleERhdGFN
YW5hZ2VyOjpkaXJ0eUN1cnJlbnRWYWx1ZSk6CisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9nZW9t
ZXRyeS9iYWNrZW5kLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2dlb21l
dHJ5L2JhY2tlbmQuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2dlb21ldHJ5
L2R4OS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogc3JjL2xpYkdMRVN2Mi9nZW9tZXRyeS9keDku
aDogUmVtb3ZlZC4KKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL2xpYkdMRVN2Mi5jcHA6CisgICAg
ICAgICogc3JjL2xpYkdMRVN2Mi9saWJHTEVTdjIuZGVmOgorICAgICAgICAqIHNyYy9saWJHTEVT
djIvbGliR0xFU3YyLnZjcHJvajoKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL3V0aWxpdGllcy5j
cHA6CisgICAgICAgIChnbDo6VW5pZm9ybUNvbXBvbmVudENvdW50KToKKyAgICAgICAgKGdsOjpV
bmlmb3JtQ29tcG9uZW50VHlwZSk6CisgICAgICAgIChnbDo6Q29tcHV0ZVBpeGVsU2l6ZSk6Cisg
ICAgICAgIChnbDo6Q2hlY2tUZXh0dXJlRm9ybWF0VHlwZSk6CisgICAgICAgIChnbDo6SXNDb2xv
clJlbmRlcmFibGUpOgorICAgICAgICAoZ2w6OklzRGVwdGhSZW5kZXJhYmxlKToKKyAgICAgICAg
KGdsOjpJc1N0ZW5jaWxSZW5kZXJhYmxlKToKKyAgICAgICAgKGVzMmR4OjpHZXRBbHBoYVNpemUp
OgorICAgICAgICAoZXMyZHg6OkdldFJlZFNpemUpOgorICAgICAgICAoZXMyZHg6OkdldEdyZWVu
U2l6ZSk6CisgICAgICAgIChlczJkeDo6R2V0Qmx1ZVNpemUpOgorICAgICAgICAoZXMyZHg6Okdl
dERlcHRoU2l6ZSk6CisgICAgICAgIChlczJkeDo6Q29udmVydFByaW1pdGl2ZVR5cGUpOgorICAg
ICAgICAoZHgyZXM6OkNvbnZlcnRCYWNrQnVmZmVyRm9ybWF0KToKKyAgICAgICAgKGR4MmVzOjpD
b252ZXJ0RGVwdGhTdGVuY2lsRm9ybWF0KToKKyAgICAgICAgKiBzcmMvbGliR0xFU3YyL3V0aWxp
dGllcy5oOgorCiAyMDExLTAxLTE3ICBEYW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAK
ICAgICAgICAgUnViYmVyLXN0YW1wZWQgYnkgTWFyayBSb3dlLgo=
</data>
<flag name="review"
          id="70754"
          type_id="1"
          status="+"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="70774"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>