<?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>86049</bug_id>
          
          <creation_ts>2012-05-09 18:10:45 -0700</creation_ts>
          <short_desc>[chromium] create WebTransformationMatrix interface for chromium platform</short_desc>
          <delta_ts>2012-05-11 13:06:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>vollick</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>620132</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-09 18:10:45 -0700</bug_when>
    <thetext>We would like to migrate the compositor code to use a new WebTransformationMatrix object instead of WebCore TransformationMatrix.

This patch is step (1), submitting the actual code for WebTransformationMatrix, but it will be un-used for now, and it will still use webcore rect/quad/point/size types until step (4).

After this patch:

(2) Follow up patch:  CCKeyframedAnimationCurve contains usage of other transform related webcore classes.  We should add functionality to WebTransformationMatrix (ideally static helpers, or in worst case more wrapper objects) so that there is no direct usage of transform functionality.

And then when we&apos;re ready to do the actual migration in minimum amount of time:

(3) In the compositor, replace all instances of &quot;TransformationMatrix&quot; with &quot;WebTransformationMatrix&quot;.  (While making this patch, I&apos;m already doing that for proof of concept)
      (3a) Where possible, reduce the size of the WebTransformationMatrix API  (e.g. operator *= is equivalent to .multiply())
(4) Remove the WebCore rect/quad/point/size types from WebTransformationMatrix, and get that to compile with whatever explicit conversions are needed.
(5) In the compositor, replace all instances of WebCore rect/quad/point/size types with the analogous WebXXX versions.

Its possible (4) and (5) are just the same step, not sure yet.   Finally, after that, explicit conversions should be limited to the public compositor API, including WebLayer and GraphicsLayerChromium, I think.  That should pretty much give us the isolation we want from these data types.

James, please correct me if that plan is flawed or not what you intended =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620942</commentid>
    <comment_count>1</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-10 14:07:37 -0700</bug_when>
    <thetext>Spoke with vollick@ offline, and it became clear that we will have to also migrate the additional TransformOperation stuff, too.  So that will replace step (2) in the plan described above =)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621051</commentid>
    <comment_count>2</comment_count>
      <attachid>141277</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-10 15:14:02 -0700</bug_when>
    <thetext>Created attachment 141277
Just for reference

This first patch is just for reference, it contains the entire change needed to make the switch from WebCore::TransformationMatrix to WebKit::WebTransformationMatrix. Passes all unit tests on osx. I&apos;ll submit another patch that only adds the WebTransformationMatrix class, and I will make a separate bug to add unit tests to cover this new class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621052</commentid>
    <comment_count>3</comment_count>
      <attachid>141278</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-10 15:18:39 -0700</bug_when>
    <thetext>Created attachment 141278
Patch for review

There will be style errors, but personally I think these errors should be overruled? Specifically, the single variable symbols are actually a bit useful here, and the alphabetical sorting seems to contradict the preferred WebCommon.h include at the top.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621055</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-10 15:22:25 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621056</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-10 15:22:45 -0700</bug_when>
    <thetext>Attachment 141278 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platf...&quot; exit_code: 1
Source/Platform/chromium/public/WebTransformationMatrix.h:35:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/chromium/public/WebTransformationMatrix.h:37:  Alphabetical sorting problem.  [build/include_order] [4]
Source/Platform/chromium/public/WebTransformationMatrix.h:55:  The parameter name &quot;b&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/chromium/public/WebTransformationMatrix.h:55:  The parameter name &quot;d&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/chromium/public/WebTransformationMatrix.h:55:  The parameter name &quot;e&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/chromium/public/WebTransformationMatrix.h:139:  The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/chromium/public/WebTransformationMatrix.h:141:  The parameter name &quot;b&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/chromium/public/WebTransformationMatrix.h:143:  The parameter name &quot;c&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/chromium/public/WebTransformationMatrix.h:145:  The parameter name &quot;d&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/chromium/public/WebTransformationMatrix.h:147:  The parameter name &quot;e&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/chromium/public/WebTransformationMatrix.h:149:  The parameter name &quot;f&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 11 in 7 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>621059</commentid>
    <comment_count>6</comment_count>
      <attachid>141278</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-10 15:30:38 -0700</bug_when>
    <thetext>Comment on attachment 141278
Patch for review

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

&gt; Source/Platform/chromium/public/WebTransformationMatrix.h:38
&gt; +#include &quot;FloatPoint.h&quot;

you will have to modify Source/Platform/Platform.gyp/Platform.gyp and add FloatQuad and FloatPoint3D.h to the webcore_headers section to do this (reasons are a bit complex, I can explain if you are interested).  it looks like these are temporary so that should be OK

&gt; Source/Platform/chromium/public/WebTransformationMatrix.h:45
&gt; +
&gt; +class TransformationMatrix;
&gt; +

nitty nit nit: probably don&apos;t need the empty lines between the namespace and class name declarations

&gt; Source/Platform/chromium/public/WebTransformationMatrix.h:58
&gt; +    // Conversions between WebKit::WebTransformationMatrix and WebCore::TransformationMatrix

I think these should be inside a #if WEBKIT_IMPLEMENTATION guard and down at the end of the public section since they aren&apos;t part of the public (used by things other than WebKit implementation) interface

&gt; Source/Platform/chromium/public/WebTransformationMatrix.h:94
&gt; +    // FIXME: these map functions should not exist, should be using CCMathUtil

can you move these down and put them in #if WEBKIT_IMPLEMENTATION as well? stuff that&apos;s not WEBKIT_IMPLEMENTATION will not be able to use these WebCore types, but I agree it&apos;s OK to have these here to ease the transition

&gt; Source/Platform/chromium/public/WebTransformationMatrix.h:107
&gt; +    void setM11(double f);

probably don&apos;t need to name these parameters for these setters in the header

&gt;&gt; Source/Platform/chromium/public/WebTransformationMatrix.h:139
&gt;&gt; +    void setA(double a);
&gt; 
&gt; The parameter name &quot;a&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I kind of agree with these style nits - it&apos;s pretty obvious what the parameter is without the name.

mind putting a newline between the  m[1-4][1-4]()/setM[1-4][1-4]() block and the [a-f]()/set[A-F]() block?

&gt; Source/WebKit/chromium/public/platform/WebTransformationMatrix.h:26
&gt; +#include &quot;../../../../Platform/chromium/public/WebTransformationMatrix.h&quot;

We don&apos;t actually need this forwarding header, I think?

&gt; Source/WebKit/chromium/src/WebTransformationMatrix.cpp:2
&gt; + * Copyright (C) 2011 Google Inc. All rights reserved.

2012

this file would fit slightly better in Source/WebCore/platform/chromium/support/ - it depends on WebCore but it doesn&apos;t depend on anything else that&apos;s in Source/WebKit/chromium/src

&gt; Source/WebKit/chromium/src/WebTransformationMatrix.cpp:27
&gt; +#include &quot;platform/WebTransformationMatrix.h&quot;

&lt;platform/WebTransformationMatrix.h&gt; please

&gt; Source/WebKit/chromium/src/WebTransformationMatrix.cpp:30
&gt; +#include &quot;WTF/PassOwnPtr.h&quot;

&lt;wtf/PassOwnPtr.h&gt; please

&gt; Source/WebKit/chromium/src/WebTransformationMatrix.cpp:45
&gt; +    // FIXME: The overhead of allocating a new TransformationMatrix needs to go away as soon as possible.

just one of these FIXME&apos;s near is probably sufficient</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621065</commentid>
    <comment_count>7</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-10 15:37:21 -0700</bug_when>
    <thetext>Cool thanks for the super quick review.  Will make all those changes soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621265</commentid>
    <comment_count>8</comment_count>
      <attachid>141278</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-10 22:18:12 -0700</bug_when>
    <thetext>Comment on attachment 141278
Patch for review

Attachment 141278 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12672197</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621829</commentid>
    <comment_count>9</comment_count>
      <attachid>141458</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-11 11:28:44 -0700</bug_when>
    <thetext>Created attachment 141458
Addressed reviewer comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621833</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-11 11:32:42 -0700</bug_when>
    <thetext>Attachment 141458 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platf...&quot; exit_code: 1
Source/WebCore/platform/chromium/support/WebTransformationMatrix.cpp:29:  Found header this file implements after other header. Should be: config.h, primary header, blank line, and then alphabetically sorted.  [build/include_order] [4]
Source/Platform/chromium/public/WebTransformationMatrix.h:52:  The parameter name &quot;b&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/chromium/public/WebTransformationMatrix.h:52:  The parameter name &quot;d&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/Platform/chromium/public/WebTransformationMatrix.h:52:  The parameter name &quot;e&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 4 in 7 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>621903</commentid>
    <comment_count>11</comment_count>
      <attachid>141458</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-05-11 12:49:43 -0700</bug_when>
    <thetext>Comment on attachment 141458
Addressed reviewer comments

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

Looks great!

&gt;&gt;&gt;&gt; Source/Platform/chromium/public/WebTransformationMatrix.h:52
&gt;&gt;&gt;&gt; +    WebTransformationMatrix(double a, double b, double c, double d, double e, double f);
&gt;&gt;&gt; 
&gt;&gt;&gt; The parameter name &quot;b&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt;&gt; 
&gt;&gt; The parameter name &quot;d&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; 
&gt; The parameter name &quot;e&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]

I think the style guide is wrong on this, FWIW

&gt; Source/WebCore/platform/chromium/support/WebTransformationMatrix.cpp:30
&gt; +#include &lt;wtf/PassOwnPtr.h&gt;

is this #include being used?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621908</commentid>
    <comment_count>12</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-11 13:00:25 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 141458 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=141458&amp;action=review
&gt; 
&gt; Looks great!
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/Platform/chromium/public/WebTransformationMatrix.h:52
&gt; &gt;&gt;&gt;&gt; +    WebTransformationMatrix(double a, double b, double c, double d, double e, double f);
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; The parameter name &quot;b&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; &gt;&gt; 
&gt; &gt;&gt; The parameter name &quot;d&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; &gt; 
&gt; &gt; The parameter name &quot;e&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
&gt; 
&gt; I think the style guide is wrong on this, FWIW
&gt; 
&gt; &gt; Source/WebCore/platform/chromium/support/WebTransformationMatrix.cpp:30
&gt; &gt; +#include &lt;wtf/PassOwnPtr.h&gt;
&gt; 
&gt; is this #include being used?

Nope, its not necessary.  Now I removed it for the final patch.  Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621913</commentid>
    <comment_count>13</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-05-11 13:06:32 -0700</bug_when>
    <thetext>Committed r116797: &lt;http://trac.webkit.org/changeset/116797&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141277</attachid>
            <date>2012-05-10 15:14:02 -0700</date>
            <delta_ts>2012-05-10 15:18:33 -0700</delta_ts>
            <desc>Just for reference</desc>
            <filename>bug-86049-20120510151401.patch</filename>
            <type>text/plain</type>
            <size>229939</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA2MjdjN2UwZmY3MWM1
ZTVmMTdhMzk0NTU0NzNkYjNkY2E1NDcxMTA4Li5hYzg3OTUwYmNkY2RjNzJiZTRkNWM3NTgwYzk2
ODcxNmI0NTEzNGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wNS0xMCAg
U2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENyZWF0ZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnRlcmZhY2UgZm9yIGNocm9taXVt
IHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04NjA0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogUGxhdGZvcm0uZ3lwaToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXguaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCk6CisKIDIwMTItMDUtMTAgIE1h
cmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0g
UmVtb3ZlIFdFQktJVF9VU0lOR19TS0lBIGlmZGVmcyB0aGF0IGFyZSBhbHdheXMgdHJ1ZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBhMGU2YTU4MTJiYmZhZDlkZTgxNzIzMGY0OTlhYWRk
YTQ4ZGQxMTRmLi5hMzg4YWFjODdmMTQ1YzUxOGNjMmM1OTFlMDRmNDk2MGFiMGI4NDk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDEyLTA1LTEwICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGludGVyZmFjZSBmb3IgY2hyb21pdW0gcGxh
dGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2
MDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBjcmVhdGVzIGEgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaW50ZXJmYWNlLiBJdCB3
aWxsCisgICAgICAgIHJlbWFpbiB1bnVzZWQgYXQgdGhlIG1vbWVudCwgdW50aWwgKGEpIHVuaXQg
dGVzdHMgYXJlIGNyZWF0ZWQKKyAgICAgICAgYW5kIChiKSB3aGVuIHdlIGFyZSByZWFkeSB0byBt
YWtlIGEgYnJpZWYgdHJhbnNpdGlvbiBvZiBhbGwgb3RoZXIKKyAgICAgICAgY2hyb21pdW0gY29k
ZSB0byB1c2UgaXQuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9w
bGF0Zm9ybS9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMv
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0b1dl
YkNvcmVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Omlu
dmVyc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6dG8yZFRy
YW5zZm9ybSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptdWx0
aXBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptYWtlSWRl
bnRpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6dHJhbnNs
YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnRyYW5zbGF0
ZTNkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnRyYW5zbGF0
ZVJpZ2h0M2QpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2Nh
bGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2NhbGVOb25V
bmlmb3JtKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNjYWxl
M2QpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cm90YXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJvdGF0ZTNkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNrZXdYKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNrZXdZKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmFwcGx5UGVyc3BlY3RpdmUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YmxlbmQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6aGFzUGVyc3BlY3RpdmUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6aXNJbnZlcnRpYmxlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmlzQmFja0ZhY2VWaXNpYmxlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmlzSWRlbnRpdHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6aXNJZGVudGl0eU9yVHJhbnNsYXRp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6aXNJbnRlZ2Vy
VHJhbnNsYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
bWFwUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBQ
b2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBRdWFk
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnByb2plY3RQb2lu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMTEpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTExKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0xMik6CisgICAgICAgIChXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNMTIpOgorICAgICAgICAoV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTEzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OnNldE0xMyk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4OjptMTQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
c2V0TTE0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0yMSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNMjEpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTIyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE0yMik6CisgICAgICAgIChXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMjMpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTIzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXg6Om0yNCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4OjpzZXRNMjQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
bTMxKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE0zMSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMzIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTMyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0zMyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNMzMpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6bTM0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnNldE0zNCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4OjptNDEpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0
TTQxKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om00Mik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNNDIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTQzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE00Myk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4OjptNDQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6c2V0TTQ0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXg6OmEpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
c2V0QSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpiKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6Yyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRDKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXg6OmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6c2V0RCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6Zik6CisgICAgICAgIChXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRGKToKKwogMjAxMi0wNS0xMCAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBDYWxs
IGFkZFRyYWNlRXZlbnQgYW5kIGdldFRyYWNlQ2F0ZWdvcnlFbmFibGVkRmxhZyBkaXJlY3RseQpk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkgYi9Tb3VyY2UvUGxhdGZv
cm0vUGxhdGZvcm0uZ3lwaQppbmRleCA5YTgyNzhhY2I1MjNhOWRjMDE2MGE3MzZjMzRmOGU5MjAz
NmZiYTA2Li5lNTQ5OTM0ZjU4NmIyZjM2YmMwN2YyMzdmYjVhM2VhZGE0NjIyOGI2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
UGxhdGZvcm0uZ3lwaQpAQCAtOTIsNiArOTIsNyBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1
YmxpYy9XZWJTdHJpbmcuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlRocmVh
ZC5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVGhyZWFkU2FmZURhdGEuaCcs
CisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgn
LAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaCcsCiAgICAgICAgICAgICAn
Y2hyb21pdW0vcHVibGljL1dlYlVSTEVycm9yLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1
YmxpYy9XZWJVUkxMb2FkVGltaW5nLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIGIvU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQx
MjNmYTgzOTIxMGZiNDhiMWM5NTJkMGM0ZTRiZDYxNzc4MTgwODEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4X2gKKyNk
ZWZpbmUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXhfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgi
CisKKyNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZU93blB0ci5oIgorCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggeworCitwdWJsaWM6CisgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgoKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIs
IGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKTsKKyAgICBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworCisgICAgLy8g
Q29udmVyc2lvbnMgYmV0d2VlbiBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGFuZCBX
ZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeAorICAgIGV4cGxpY2l0IFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgV2Vi
Q29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRvV2ViQ29yZVRyYW5zZm9ybSgpIGNvbnN0Owor
CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG9wZXJhdG9yPShjb25zdCBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYpOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYpIGNvbnN0OworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG9wZXJhdG9y
Kihjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OworCisgICAgLy8gT3BlcmF0
aW9ucyB0aGF0IHJldHVybiBhIHNlcGFyYXRlIG1hdHJpeCBhbmQgZG8gbm90IG1vZGlmeSB0aGlz
IG9uZS4KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlKCkgY29uc3Q7CisgICAg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdG8yZFRyYW5zZm9ybSgpIGNvbnN0OworICAgCisgICAg
Ly8gT3BlcmF0aW9ucyB0aGF0IG1vZGlmeSB0aGlzIG1hdHJpeAorICAgIHZvaWQgbXVsdGlwbHko
Y29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2b2lkIG1ha2VJZGVudGl0eSgp
OworICAgIHZvaWQgdHJhbnNsYXRlKGRvdWJsZSB0eCwgZG91YmxlIHR5KTsKKyAgICB2b2lkIHRy
YW5zbGF0ZTNkKGRvdWJsZSB0eCwgZG91YmxlIHR5LCBkb3VibGUgdHopOworICAgIHZvaWQgdHJh
bnNsYXRlUmlnaHQzZChkb3VibGUgdHgsIGRvdWJsZSB0eSwgZG91YmxlIHR6KTsKKyAgICB2b2lk
IHNjYWxlKGRvdWJsZSBzKTsKKyAgICB2b2lkIHNjYWxlTm9uVW5pZm9ybShkb3VibGUgc3gsIGRv
dWJsZSBzeSk7CisgICAgdm9pZCBzY2FsZTNkKGRvdWJsZSBzeCwgZG91YmxlIHN5LCBkb3VibGUg
c3opOworICAgIHZvaWQgcm90YXRlKGRvdWJsZSBhbmdsZSk7CisgICAgdm9pZCByb3RhdGUzZChk
b3VibGUgcngsIGRvdWJsZSByeSwgZG91YmxlIHJ6KTsKKyAgICB2b2lkIHJvdGF0ZTNkKGRvdWJs
ZSB4LCBkb3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSBhbmdsZSk7CisgICAgdm9pZCBza2V3WChk
b3VibGUgYW5nbGUpOworICAgIHZvaWQgc2tld1koZG91YmxlIGFuZ2xlKTsKKyAgICB2b2lkIGFw
cGx5UGVyc3BlY3RpdmUoZG91YmxlIHApOworICAgIHZvaWQgYmxlbmQoY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGZyb20sIGRvdWJsZSBwcm9ncmVzcyk7CisKKyAgICBib29sIGhhc1Bl
cnNwZWN0aXZlKCkgY29uc3Q7CisgICAgYm9vbCBpc0ludmVydGlibGUoKSBjb25zdDsKKyAgICBi
b29sIGlzQmFja0ZhY2VWaXNpYmxlKCkgY29uc3Q7CisgICAgYm9vbCBpc0lkZW50aXR5KCkgY29u
c3Q7CisgICAgYm9vbCBpc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpIGNvbnN0OworICAgIGJvb2wg
aXNJbnRlZ2VyVHJhbnNsYXRpb24oKSBjb25zdDsKKworICAgIC8vIEZJWE1FOiB0aGVzZSBtYXAg
ZnVuY3Rpb25zIHNob3VsZCBub3QgZXhpc3QsIHNob3VsZCBiZSB1c2luZyBDQ01hdGhVdGlsCisg
ICAgLy8gaW5zdGVhZC4gRXZlbnR1YWxseSBDQ01hdGhVdGlsIGZ1bmN0aW9ucyBjb3VsZCBiZSBt
ZXJnZWQgaGVyZSwgYnV0IGl0cworICAgIC8vIG5vdCB5ZXQgdGhlIHJpZ2h0IHRpbWUgZm9yIHRo
YXQuCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1hcFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtYXBSZWN0KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSBjb25zdDsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50M0QgbWFwUG9pbnQoY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludDNEJikgY29uc3Q7CisgICAgV2ViQ29yZTo6RmxvYXRQb2lu
dCBtYXBQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikgY29uc3Q7CisgICAgV2ViQ29y
ZTo6SW50UG9pbnQgbWFwUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAg
ICBXZWJDb3JlOjpGbG9hdFF1YWQgbWFwUXVhZChjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmKSBj
b25zdDsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHByb2plY3RQb2ludChjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiwgYm9vbCogY2xhbXBlZCA9IDApIGNvbnN0OworCisgICAgLy8gQWNjZXNz
b3JzCisgICAgZG91YmxlIG0xMSgpIGNvbnN0OworICAgIHZvaWQgc2V0TTExKGRvdWJsZSBmKTsK
KyAgICBkb3VibGUgbTEyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNMTIoZG91YmxlIGYpOworICAg
IGRvdWJsZSBtMTMoKSBjb25zdDsKKyAgICB2b2lkIHNldE0xMyhkb3VibGUgZik7CisgICAgZG91
YmxlIG0xNCgpIGNvbnN0OworICAgIHZvaWQgc2V0TTE0KGRvdWJsZSBmKTsKKyAgICBkb3VibGUg
bTIxKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNMjEoZG91YmxlIGYpOworICAgIGRvdWJsZSBtMjIo
KSBjb25zdDsKKyAgICB2b2lkIHNldE0yMihkb3VibGUgZik7CisgICAgZG91YmxlIG0yMygpIGNv
bnN0OworICAgIHZvaWQgc2V0TTIzKGRvdWJsZSBmKTsKKyAgICBkb3VibGUgbTI0KCkgY29uc3Q7
CisgICAgdm9pZCBzZXRNMjQoZG91YmxlIGYpOworICAgIGRvdWJsZSBtMzEoKSBjb25zdDsKKyAg
ICB2b2lkIHNldE0zMShkb3VibGUgZik7CisgICAgZG91YmxlIG0zMigpIGNvbnN0OworICAgIHZv
aWQgc2V0TTMyKGRvdWJsZSBmKTsKKyAgICBkb3VibGUgbTMzKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRNMzMoZG91YmxlIGYpOworICAgIGRvdWJsZSBtMzQoKSBjb25zdDsKKyAgICB2b2lkIHNldE0z
NChkb3VibGUgZik7CisgICAgZG91YmxlIG00MSgpIGNvbnN0OworICAgIHZvaWQgc2V0TTQxKGRv
dWJsZSBmKTsKKyAgICBkb3VibGUgbTQyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNNDIoZG91Ymxl
IGYpOworICAgIGRvdWJsZSBtNDMoKSBjb25zdDsKKyAgICB2b2lkIHNldE00Myhkb3VibGUgZik7
CisgICAgZG91YmxlIG00NCgpIGNvbnN0OworICAgIHZvaWQgc2V0TTQ0KGRvdWJsZSBmKTsKKyAg
ICBkb3VibGUgYSgpIGNvbnN0OworICAgIHZvaWQgc2V0QShkb3VibGUgYSk7CisgICAgZG91Ymxl
IGIoKSBjb25zdDsKKyAgICB2b2lkIHNldEIoZG91YmxlIGIpOworICAgIGRvdWJsZSBjKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRDKGRvdWJsZSBjKTsKKyAgICBkb3VibGUgZCgpIGNvbnN0OworICAg
IHZvaWQgc2V0RChkb3VibGUgZCk7CisgICAgZG91YmxlIGUoKSBjb25zdDsKKyAgICB2b2lkIHNl
dEUoZG91YmxlIGUpOworICAgIGRvdWJsZSBmKCkgY29uc3Q7CisgICAgdm9pZCBzZXRGKGRvdWJs
ZSBmKTsKKworcHJvdGVjdGVkOgorICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXg+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HcmFwaGljc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDllZjMx
YjI1YmMzZmMxNjBiYmRjMDk2OTJiNzI5NWQzZDk2OTA0ZDAuLmI1M2M3YmE2OTIyODE0Mzc0NWMz
NmIxMThkOTE5YTI4YzYyMjYwNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dyYXBoaWNzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR3JhcGhpY3NMYXllckNocm9taXVt
LmNwcApAQCAtNTg2LDEyICs1ODYsMTIgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVw
ZGF0ZUFuY2hvclBvaW50KCkKIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06OnVwZGF0ZVRy
YW5zZm9ybSgpCiB7Ci0gICAgcHJpbWFyeUxheWVyKCktPnNldFRyYW5zZm9ybShtX3RyYW5zZm9y
bSk7CisgICAgcHJpbWFyeUxheWVyKCktPnNldFRyYW5zZm9ybShXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4KG1fdHJhbnNmb3JtKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNocm9t
aXVtOjp1cGRhdGVDaGlsZHJlblRyYW5zZm9ybSgpCiB7Ci0gICAgcHJpbWFyeUxheWVyKCktPnNl
dFN1YmxheWVyVHJhbnNmb3JtKG1fY2hpbGRyZW5UcmFuc2Zvcm0pOworICAgIHByaW1hcnlMYXll
cigpLT5zZXRTdWJsYXllclRyYW5zZm9ybShXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4
KG1fY2hpbGRyZW5UcmFuc2Zvcm0pKTsKIH0KIAogdm9pZCBHcmFwaGljc0xheWVyQ2hyb21pdW06
OnVwZGF0ZU1hc2tzVG9Cb3VuZHMoKQpAQCAtNjE4LDcgKzYxOCw3IEBAIHZvaWQgR3JhcGhpY3NM
YXllckNocm9taXVtOjp1cGRhdGVMYXllclByZXNlcnZlczNEKCkKICAgICAgICAgbV9sYXllci0+
c2V0UG9zaXRpb24oRmxvYXRQb2ludChtX3NpemUud2lkdGgoKSAvIDIuMGYsIG1fc2l6ZS5oZWln
aHQoKSAvIDIuMGYpKTsKIAogICAgICAgICBtX2xheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBv
aW50KDAuNWYsIDAuNWYpKTsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHk7
CisgICAgICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHk7CiAgICAg
ICAgIG1fbGF5ZXItPnNldFRyYW5zZm9ybShpZGVudGl0eSk7CiAKICAgICAgICAgLy8gU2V0IHRo
ZSBvbGQgbGF5ZXIgdG8gb3BhY2l0eSBvZiAxLiBGdXJ0aGVyIGRvd24gd2Ugd2lsbCBzZXQgdGhl
IG9wYWNpdHkgb24gdGhlIHRyYW5zZm9ybSBsYXllci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggYzdmN2IzMWI5NWIzMGNhM2RjMTI0ZWMzN2M3ODljYThkNDliZjQzOC4uNzZhMjA1ZTA3NmIz
NTEwYWY3NGZhYWJmMjZjNjY1YTc0MDEwNWU2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTM1NCw3ICszNTQsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnNldFBvc2l0aW9uKGNvbnN0IEZs
b2F0UG9pbnQmIHBvc2l0aW9uKQogICAgIHNldE5lZWRzQ29tbWl0KCk7CiB9CiAKLXZvaWQgTGF5
ZXJDaHJvbWl1bTo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHN1YmxheWVyVHJhbnNmb3JtKQordm9pZCBMYXllckNocm9taXVtOjpzZXRTdWJsYXllclRy
YW5zZm9ybShjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRy
YW5zZm9ybSkKIHsKICAgICBpZiAobV9zdWJsYXllclRyYW5zZm9ybSA9PSBzdWJsYXllclRyYW5z
Zm9ybSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzYyLDcgKzM2Miw3IEBAIHZvaWQgTGF5ZXJDaHJv
bWl1bTo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1
YmxheWVyVHJhCiAgICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotdm9pZCBMYXllckNocm9taXVt
OjpzZXRUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKK3Zv
aWQgTGF5ZXJDaHJvbWl1bTo6c2V0VHJhbnNmb3JtKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKICAgICBpZiAobV90cmFuc2Zvcm0gPT0gdHJhbnNm
b3JtKQogICAgICAgICByZXR1cm47CkBAIC01ODYsNyArNTg2LDcgQEAgdm9pZCBMYXllckNocm9t
aXVtOjpzZXRPcGFjaXR5RnJvbUFuaW1hdGlvbihmbG9hdCBvcGFjaXR5KQogICAgIG1fb3BhY2l0
eSA9IG9wYWNpdHk7CiB9CiAKLXZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0VHJhbnNmb3JtRnJvbUFu
aW1hdGlvbihjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQordm9pZCBMYXll
ckNocm9taXVtOjpzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKICAgICAvLyBUaGlzIGlzIGNhbGxlZCBk
dWUgdG8gYW4gb25nb2luZyBhY2NlbGVyYXRlZCBhbmltYXRpb24uIFNpbmNlIHRoaXMgYW5pbWF0
aW9uIGlzCiAgICAgLy8gYWxzbyBiZWluZyBydW4gb24gdGhlIGltcGwgdGhyZWFkLCB0aGVyZSBp
cyBubyBuZWVkIHRvIHJlcXVlc3QgYSBjb21taXQgdG8gcHVzaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCmlu
ZGV4IDllN2ZjZTUwYzU5YWM4MzlkM2QyZjkwZTA5ZjUxYjRiNDBjNTk5ZjIuLjZhMmNjZWQzODYw
ZjcxNzQ4MGQ2MDRiZWNiZGZjYjQ4OGEyMGU1MzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKQEAgLTQy
LDcgKzQyLDcgQEAKICNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNl
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJTaGFkZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIlRyYW5z
Zm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNj
L0NDT2NjbHVzaW9uVHJhY2tlci5oIgogCkBAIC03Niw4ICs3Niw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGludCBpZCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQogICAg
IHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5RnJvbUFuaW1hdGlvbihmbG9hdCkgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9vcGFj
aXR5OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybUZyb21BbmltYXRpb24oY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3Ry
YW5zZm9ybTsgfQorICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNv
bnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBPVkVSUklERTsKKyAgICB2aXJ0
dWFsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdHJhbnNmb3JtOyB9CiAgICAgdmlydHVhbCBjb25zdCBJ
bnRTaXplJiBib3VuZHMoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2JvdW5kczsgfQogCiAg
ICAgY29uc3QgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyKCkgY29uc3Q7CkBAIC0xMjksMTAgKzEy
OSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRQb3NpdGlvbihjb25zdCBGbG9hdFBvaW50Jik7
CiAgICAgRmxvYXRQb2ludCBwb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpb247IH0K
IAotICAgIHZvaWQgc2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBtX3N1YmxheWVyVHJhbnNmb3JtOyB9CisgICAgdm9pZCBzZXRTdWJs
YXllclRyYW5zZm9ybShjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7Cisg
ICAgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VibGF5ZXJUcmFuc2Zv
cm0oKSBjb25zdCB7IHJldHVybiBtX3N1YmxheWVyVHJhbnNmb3JtOyB9CiAKLSAgICB2b2lkIHNl
dFRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZvaWQgc2V0VHJh
bnNmb3JtKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKICAgICBib29s
IHRyYW5zZm9ybUlzQW5pbWF0aW5nKCkgY29uc3Q7CiAKICAgICBjb25zdCBJbnRSZWN0JiB2aXNp
YmxlTGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlTGF5ZXJSZWN0OyB9CkBAIC0y
MTAsMTEgKzIxMCwxMSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTY3JlZW5TcGFjZVRyYW5zZm9y
bUlzQW5pbWF0aW5nKGJvb2wgYW5pbWF0aW5nKSB7IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm1Jc0Fu
aW1hdGluZyA9IGFuaW1hdGluZzsgfQogCiAgICAgLy8gVGhpcyBtb3ZlcyBmcm9tIGxheWVyIHNw
YWNlLCB3aXRoIG9yaWdpbiBpbiB0aGUgY2VudGVyIHRvIHRhcmdldCBzcGFjZSB3aXRoIG9yaWdp
biBpbiB0aGUgdG9wIGxlZnQKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1Ry
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQotICAgIHZvaWQgc2V0
RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fZHJh
d1RyYW5zZm9ybSA9IG1hdHJpeDsgfQorICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFuc2Zvcm07
IH0KKyAgICB2b2lkIHNldERyYXdUcmFuc2Zvcm0oY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fZHJhd1RyYW5zZm9ybSA9IG1hdHJpeDsgfQogICAgIC8v
IFRoaXMgbW92ZXMgZnJvbSBsYXllciBzcGFjZSwgd2l0aCBvcmlnaW4gdGhlIHRvcCBsZWZ0IHRv
IHNjcmVlbiBzcGFjZSB3aXRoIG9yaWdpbiBpbiB0aGUgdG9wIGxlZnQKLSAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgc2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X3NjcmVlblNwYWNlVHJhbnNmb3JtOyB9Ci0gICAgdm9pZCBzZXRTY3JlZW5TcGFjZVRyYW5zZm9y
bShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KSB7IG1fc2NyZWVuU3BhY2VUcmFu
c2Zvcm0gPSBtYXRyaXg7IH0KKyAgICBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JiBzY3JlZW5TcGFjZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyZWVuU3BhY2VU
cmFuc2Zvcm07IH0KKyAgICB2b2lkIHNldFNjcmVlblNwYWNlVHJhbnNmb3JtKGNvbnN0IFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkgeyBtX3NjcmVlblNwYWNlVHJhbnNm
b3JtID0gbWF0cml4OyB9CiAgICAgY29uc3QgSW50UmVjdCYgZHJhd2FibGVDb250ZW50UmVjdCgp
IGNvbnN0IHsgcmV0dXJuIG1fZHJhd2FibGVDb250ZW50UmVjdDsgfQogICAgIHZvaWQgc2V0RHJh
d2FibGVDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7IG1fZHJhd2FibGVDb250ZW50
UmVjdCA9IHJlY3Q7IH0KICAgICBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50c1NjYWxlOyB9CkBAIC0zMzAsOCArMzMwLDggQEAgcHJpdmF0ZToKICAgICBib29s
IG1fYWx3YXlzUmVzZXJ2ZVRleHR1cmVzOwogICAgIGJvb2wgbV9kcmF3Q2hlY2tlcmJvYXJkRm9y
TWlzc2luZ1RpbGVzOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV90cmFuc2Zvcm07Ci0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKKyAgICBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKIAogICAgIC8vIFJlcGxpY2Eg
bGF5ZXIgdXNlZCBmb3IgcmVmbGVjdGlvbnMuCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG1f
cmVwbGljYUxheWVyOwpAQCAtMzQyLDggKzM0Miw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2Ry
YXdPcGFjaXR5SXNBbmltYXRpbmc7CiAgICAgSW50UmVjdCBtX2NsaXBSZWN0OwogICAgIFJlbmRl
clN1cmZhY2VDaHJvbWl1bSogbV90YXJnZXRSZW5kZXJTdXJmYWNlOwotICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9ybTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Nj
cmVlblNwYWNlVHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
bV9kcmF3VHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9z
Y3JlZW5TcGFjZVRyYW5zZm9ybTsKICAgICBib29sIG1fZHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5n
OwogICAgIGJvb2wgbV9zY3JlZW5TcGFjZVRyYW5zZm9ybUlzQW5pbWF0aW5nOwogICAgIEludFJl
Y3QgbV9kcmF3YWJsZUNvbnRlbnRSZWN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAKaW5kZXggOWYzZWRkMGFlZmE2M2FmODI4YjE3MTUxMzZkOWQ4NmEyZWFmYTBhZC4uMWM3
ODQ5MTZjYzM5MjA4MWJmMjI3M2EwYWJlNDI0NGVkYzAyZGMzNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCkBAIC03NSwxMSArNzUsMTEgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBuYW1lc3BhY2UgewogCi1zdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggb3J0aG9N
YXRyaXgoZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgdG9wKQor
c3RhdGljIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggb3J0aG9NYXRyaXgoZmxvYXQg
bGVmdCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgdG9wKQogewogICAgIGZsb2F0
IGRlbHRhWCA9IHJpZ2h0IC0gbGVmdDsKICAgICBmbG9hdCBkZWx0YVkgPSB0b3AgLSBib3R0b207
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggb3J0aG87CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBvcnRobzsKICAgICBpZiAoIWRlbHRhWCB8fCAhZGVsdGFZKQogICAgICAg
ICByZXR1cm4gb3J0aG87CiAgICAgb3J0aG8uc2V0TTExKDIuMGYgLyBkZWx0YVgpOwpAQCAtOTQs
OSArOTQsOSBAQCBzdGF0aWMgVHJhbnNmb3JtYXRpb25NYXRyaXggb3J0aG9NYXRyaXgoZmxvYXQg
bGVmdCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgZgogICAgIHJldHVybiBvcnRobzsKIH0K
IAotc3RhdGljIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlbk1hdHJpeChpbnQgeCwgaW50IHks
IGludCB3aWR0aCwgaW50IGhlaWdodCkKK3N0YXRpYyBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IHNjcmVlbk1hdHJpeChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkK
IHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW47CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBzY3JlZW47CiAKICAgICAvLyBNYXAgdG8gdmlld3BvcnQuCiAgICAg
c2NyZWVuLnRyYW5zbGF0ZTNkKHgsIHksIDApOwpAQCAtNTAzLDcgKzUwMyw3IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3Q2hlY2tlcmJvYXJkUXVhZChjb25zdCBDQ0NoZWNrZXJi
b2FyZERyYXdRdWFkKiBxCiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFt
KHByb2dyYW0tPnByb2dyYW0oKSkpOwogCiAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHF1YWQtPnF1
YWRSZWN0KCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsZVRyYW5zZm9ybSA9IHF1YWQt
PnF1YWRUcmFuc2Zvcm0oKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRp
bGVUcmFuc2Zvcm0gPSBxdWFkLT5xdWFkVHJhbnNmb3JtKCk7CiAgICAgdGlsZVRyYW5zZm9ybS50
cmFuc2xhdGUodGlsZVJlY3QueCgpICsgdGlsZVJlY3Qud2lkdGgoKSAvIDIuMCwgdGlsZVJlY3Qu
eSgpICsgdGlsZVJlY3QuaGVpZ2h0KCkgLyAyLjApOwogCiAgICAgZmxvYXQgdGV4T2Zmc2V0WCA9
IHRpbGVSZWN0LngoKTsKQEAgLTUzMiw3ICs1MzIsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6ZHJhd0RlYnVnQm9yZGVyUXVhZChjb25zdCBDQ0RlYnVnQm9yZGVyRHJhd1F1YWQqIHF1
YQogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9n
cmFtKCkpKTsKIAogICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCA9IHF1YWQtPnF1YWRSZWN0
KCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVuZGVyTWF0cml4ID0gcXVhZC0+cXVhZFRy
YW5zZm9ybSgpOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVuZGVyTWF0
cml4ID0gcXVhZC0+cXVhZFRyYW5zZm9ybSgpOwogICAgIHJlbmRlck1hdHJpeC50cmFuc2xhdGUo
MC41ICogbGF5ZXJSZWN0LndpZHRoKCkgKyBsYXllclJlY3QueCgpLCAwLjUgKiBsYXllclJlY3Qu
aGVpZ2h0KCkgKyBsYXllclJlY3QueSgpKTsKICAgICByZW5kZXJNYXRyaXguc2NhbGVOb25Vbmlm
b3JtKGxheWVyUmVjdC53aWR0aCgpLCBsYXllclJlY3QuaGVpZ2h0KCkpOwogICAgIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dG9HTE1hdHJpeCgmZ2xNYXRyaXhbMF0sIHByb2plY3Rpb25NYXRyaXgo
KSAqIHJlbmRlck1hdHJpeCk7CkBAIC01NzQsNyArNTc0LDcgQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OmRyYXdCYWNrZ3JvdW5kRmlsdGVycyhjb25zdCBDQ1JlbmRlclN1cmZhY2VEcmF3
UXVhZCoKICAgICBpZiAoIWlzQ3VycmVudFJlbmRlclN1cmZhY2UobV9kZWZhdWx0UmVuZGVyU3Vy
ZmFjZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBzdXJmYWNlRHJhd1RyYW5zZm9ybSA9IHF1YWQtPmlzUmVwbGljYSgpID8gZHJhd2luZ1N1cmZh
Y2UtPnJlcGxpY2FEcmF3VHJhbnNmb3JtKCkgOiBkcmF3aW5nU3VyZmFjZS0+ZHJhd1RyYW5zZm9y
bSgpOworICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHN1cmZhY2VE
cmF3VHJhbnNmb3JtID0gcXVhZC0+aXNSZXBsaWNhKCkgPyBkcmF3aW5nU3VyZmFjZS0+cmVwbGlj
YURyYXdUcmFuc2Zvcm0oKSA6IGRyYXdpbmdTdXJmYWNlLT5kcmF3VHJhbnNmb3JtKCk7CiAKICAg
ICAvLyBGSVhNRTogRG8gYSBzaW5nbGUgcmVhZGJhY2sgZm9yIGJvdGggdGhlIHN1cmZhY2UgYW5k
IHJlcGxpY2EgYW5kIGNhY2hlIHRoZSBmaWx0ZXJlZCByZXN1bHRzIChvbmNlIGZpbHRlciB0ZXh0
dXJlcyBhcmUgbm90IHJldXNlZCkuCiAgICAgSW50UmVjdCBkZXZpY2VSZWN0ID0gZHJhd2luZ1N1
cmZhY2UtPnJlYWRiYWNrRGV2aWNlQ29udGVudFJlY3QodGhpcywgc3VyZmFjZURyYXdUcmFuc2Zv
cm0pOwpAQCAtNTk1LDcgKzU5NSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
QmFja2dyb3VuZEZpbHRlcnMoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqCiAgICAgICAg
IHJldHVybjsKIAogICAgIC8vIFRoaXMgbXVzdCBiZSBjb21wdXRlZCBiZWZvcmUgc3dpdGNoaW5n
IHRoZSB0YXJnZXQgcmVuZGVyIHN1cmZhY2UgdG8gdGhlIGJhY2tncm91bmQgdGV4dHVyZS4KLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50c0RldmljZVRyYW5zZm9ybSA9IGRyYXdpbmdT
dXJmYWNlLT5jb21wdXRlRGV2aWNlVHJhbnNmb3JtKHRoaXMsIHN1cmZhY2VEcmF3VHJhbnNmb3Jt
KTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRzRGV2aWNlVHJh
bnNmb3JtID0gZHJhd2luZ1N1cmZhY2UtPmNvbXB1dGVEZXZpY2VUcmFuc2Zvcm0odGhpcywgc3Vy
ZmFjZURyYXdUcmFuc2Zvcm0pOwogCiAgICAgQ0NSZW5kZXJTdXJmYWNlKiB0YXJnZXRSZW5kZXJT
dXJmYWNlID0gbV9jdXJyZW50UmVuZGVyU3VyZmFjZTsKICAgICBpZiAodXNlTWFuYWdlZFRleHR1
cmUoZHJhd2luZ1N1cmZhY2UtPmJhY2tncm91bmRUZXh0dXJlKCksIGRyYXdpbmdTdXJmYWNlLT5j
b250ZW50UmVjdCgpKSkgewpAQCAtNjI2LDcgKzYyNiw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpkcmF3U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQqIHF1
YWQpCiAKICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcXVhZC0+cXVhZFJlY3QoKTsKIAotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRpbGVUcmFuc2Zvcm0gPSBxdWFkLT5xdWFkVHJhbnNmb3JtKCk7
CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0aWxlVHJhbnNmb3JtID0gcXVh
ZC0+cXVhZFRyYW5zZm9ybSgpOwogICAgIHRpbGVUcmFuc2Zvcm0udHJhbnNsYXRlKHRpbGVSZWN0
LngoKSArIHRpbGVSZWN0LndpZHRoKCkgLyAyLjAsIHRpbGVSZWN0LnkoKSArIHRpbGVSZWN0Lmhl
aWdodCgpIC8gMi4wKTsKIAogICAgIGNvbnN0IENvbG9yJiBjb2xvciA9IHF1YWQtPmNvbG9yKCk7
CkBAIC03MDIsNyArNzAyLDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUaWxl
UXVhZChjb25zdCBDQ1RpbGVEcmF3UXVhZCogcXVhZCkKIAogCiAgICAgRmxvYXRRdWFkIGxvY2Fs
UXVhZDsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VUcmFuc2Zvcm0gPSBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCh3aW5kb3dNYXRyaXgoKSAqIHByb2plY3Rpb25NYXRyaXgoKSAqIHF1YWQt
PnF1YWRUcmFuc2Zvcm0oKSkudG8yZFRyYW5zZm9ybSgpOworICAgIFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXggZGV2aWNlVHJhbnNmb3JtID0gV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCh3aW5kb3dNYXRyaXgoKSAqIHByb2plY3Rpb25NYXRyaXgoKSAqIHF1YWQtPnF1YWRU
cmFuc2Zvcm0oKSkudG8yZFRyYW5zZm9ybSgpOwogICAgIGlmICghZGV2aWNlVHJhbnNmb3JtLmlz
SW52ZXJ0aWJsZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTc5MSw3ICs3OTEsNyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RpbGVRdWFkKGNvbnN0IENDVGlsZURyYXdRdWFk
KiBxdWFkKQogICAgICAgICBDQ0xheWVyUXVhZCBkZXZpY2VRdWFkKGxlZnRFZGdlLCB0b3BFZGdl
LCByaWdodEVkZ2UsIGJvdHRvbUVkZ2UpOwogCiAgICAgICAgIC8vIE1hcCBxdWFkIHRvIGxheWVy
IHNwYWNlLgotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlRGV2aWNlVHJhbnNm
b3JtID0gZGV2aWNlVHJhbnNmb3JtLmludmVyc2UoKTsKKyAgICAgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlRGV2aWNlVHJhbnNmb3JtID0gZGV2aWNlVHJhbnNmb3Jt
LmludmVyc2UoKTsKICAgICAgICAgbG9jYWxRdWFkID0gaW52ZXJzZURldmljZVRyYW5zZm9ybS5t
YXBRdWFkKGRldmljZVF1YWQuZmxvYXRRdWFkKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IE1vdmUgZnJhZ21lbnQgc2hhZGVyIHRyYW5zZm9ybSB0byB2ZXJ0ZXggc2hhZGVyLiBXZSBjYW4g
ZG8gdGhpcyB3aGlsZQpAQCAtMTA2NCw3ICsxMDY0LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdIZWFkc1VwRGlzcGxheShNYW5hZ2VkVGV4dHVyZSogaHVkVGV4dHVyZSwgY29u
c3QKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJv
Z3JhbSgpKSk7CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250ZXh0LT51bmlmb3JtMWkocHJvZ3Jh
bS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOwogCi0gICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbWF0cml4OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggbWF0cml4OwogICAgIG1hdHJpeC50cmFuc2xhdGUzZChodWRTaXplLndpZHRoKCkgKiAwLjUs
IGh1ZFNpemUuaGVpZ2h0KCkgKiAwLjUsIDApOwogICAgIGRyYXdUZXh0dXJlZFF1YWQobWF0cml4
LCBodWRTaXplLndpZHRoKCksIGh1ZFNpemUuaGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAg
ICAxLCBzaGFyZWRHZW9tZXRyeVF1YWQoKSwgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4
TG9jYXRpb24oKSwKQEAgLTEwODUsNyArMTA4NSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpmaW5pc2hEcmF3aW5nRnJhbWUoKQogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5h
Z2VyLT5kZWxldGVFdmljdGVkVGV4dHVyZXMobV9yZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRv
ci5nZXQoKSk7CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0b0dMTWF0cml4KGZs
b2F0KiBmbGF0dGVuZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQordm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnRvR0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKIHsKICAgICBmbGF0dGVuZWRbMF0gPSBt
Lm0xMSgpOwogICAgIGZsYXR0ZW5lZFsxXSA9IG0ubTEyKCk7CkBAIC0xMTA1LDEzICsxMTA1LDEz
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0b0dMTWF0cml4KGZsb2F0KiBmbGF0dGVu
ZWQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0CiAgICAgZmxhdHRlbmVkWzE1XSA9IG0ubTQ0KCk7
CiB9CiAKLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGV4dHVyZWRRdWFkKGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4LAordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdUZXh0dXJlZFF1YWQoY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgZHJhd01hdHJpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNpdHksIGNvbnN0IEZs
b2F0UXVhZCYgcXVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBtYXRyaXhMb2NhdGlvbiwgaW50IGFscGhhTG9jYXRpb24sIGludCBxdWFkTG9jYXRp
b24pCiB7CiAgICAgc3RhdGljIGZsb2F0IGdsTWF0cml4WzE2XTsKIAotICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHJlbmRlck1hdHJpeCA9IGRyYXdNYXRyaXg7CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJNYXRyaXggPSBkcmF3TWF0cml4OwogCiAgICAgLy8gQXBw
bHkgYSBzY2FsaW5nIGZhY3RvciB0byBzaXplIHRoZSBxdWFkIGZyb20gMXgxIHRvIGl0cyBpbnRl
bmRlZCBzaXplLgogICAgIHJlbmRlck1hdHJpeC5zY2FsZTNkKHdpZHRoLCBoZWlnaHQsIDEpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCBkNzNmNzFhZTdkMDE3MDVmNDkw
MDYyNmQ4NjdiMzQ1NzkwNzc1NTI0Li43NGY5MDczYTA3NGI1OWYyNTAyZDA5MmQzYjJkYjEzOGEw
OWE2ODJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMTA5LDggKzEw
OSw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGRlYnVnR0xDYWxsKEdyYXBoaWNzQ29u
dGV4dDNEKiwgY29uc3QgY2hhciogY29tbWFuZCwgY29uc3QgY2hhciogZmlsZSwgaW50IGxpbmUp
OwogCi0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHByb2plY3Rpb25NYXRyaXgoKSBj
b25zdCB7IHJldHVybiBtX3Byb2plY3Rpb25NYXRyaXg7IH0KLSAgICBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgd2luZG93TWF0cml4KCkgY29uc3QgeyByZXR1cm4gbV93aW5kb3dNYXRyaXg7
IH0KKyAgICBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9u
TWF0cml4KCkgY29uc3QgeyByZXR1cm4gbV9wcm9qZWN0aW9uTWF0cml4OyB9CisgICAgY29uc3Qg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgd2luZG93TWF0cml4KCkgY29uc3QgeyBy
ZXR1cm4gbV93aW5kb3dNYXRyaXg7IH0KIAogICAgIGNvbnN0IEdlb21ldHJ5QmluZGluZyogc2hh
cmVkR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdlb21ldHJ5LmdldCgpOyB9CiAg
ICAgY29uc3QgRmxvYXRRdWFkJiBzaGFyZWRHZW9tZXRyeVF1YWQoKSBjb25zdCB7IHJldHVybiBt
X3NoYXJlZEdlb21ldHJ5UXVhZDsgfQpAQCAtMTMzLDggKzEzMyw4IEBAIHB1YmxpYzoKIAogICAg
IEdDM0RlbnVtIGJlc3RUZXh0dXJlRm9ybWF0KCk7CiAKLSAgICBzdGF0aWMgdm9pZCB0b0dMTWF0
cml4KGZsb2F0KiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKLSAgICB2b2lkIGRyYXdU
ZXh0dXJlZFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyTWF0cml4LAorICAg
IHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBkcmF3VGV4dHVyZWRRdWFkKGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyTWF0cml4LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LCBjb25zdCBG
bG9hdFF1YWQmLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWF0cml4TG9jYXRpb24s
IGludCBhbHBoYUxvY2F0aW9uLCBpbnQgcXVhZExvY2F0aW9uKTsKIApAQCAtMTkyLDggKzE5Miw4
IEBAIHByaXZhdGU6CiAKICAgICBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzIG1fY2FwYWJpbGl0
aWVzOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OwotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fd2luZG93TWF0cml4OworICAgIFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggbV9wcm9qZWN0aW9uTWF0cml4OworICAgIFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggbV93aW5kb3dNYXRyaXg7CiAKICAgICBDQ1JlbmRlclN1cmZhY2Uq
IG1fY3VycmVudFJlbmRlclN1cmZhY2U7CiAgICAgTWFuYWdlZFRleHR1cmUqIG1fY3VycmVudE1h
bmFnZWRUZXh0dXJlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGlua0hpZ2hsaWdodC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmNwcAppbmRleCA1MzUzNmIzMmNlMGFkNzA3
MjYxMzI1NDMyYTBhMTUxNWExNmUwNDg3Li45YjA2NzZiNGRiMWRmNWVjN2EyMjQ0MGVlYmViNDRk
ZDg0OWU2NjJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MaW5rSGlnaGxpZ2h0LmNwcApAQCAtNTIsNyArNTIsNyBAQCBMaW5r
SGlnaGxpZ2h0OjpMaW5rSGlnaGxpZ2h0KEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogcGFyZW50LCBj
b25zdCBQYXRoJiBwYXRoLCBpbgogCiAgICAgbV9jb250ZW50TGF5ZXItPnNldEJvdW5kcyhyZWN0
LnNpemUoKSk7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CisgICAgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CiAgICAgdHJhbnNmb3JtLnRy
YW5zbGF0ZShyZWN0LngoKSArIHJlY3Qud2lkdGgoKSAvIDIsIHJlY3QueSgpICsgcmVjdC5oZWln
aHQoKSAvIDIpOwogICAgIG1fY29udGVudExheWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UmVuZGVyU3VyZmFjZUNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAppbmRleCA0ZDM5OTczNDYxYzEyNTY5
ZDc5MWFjZTc3NWIyNjFlNDA1ZTdhZjllLi45NWY1OGMxNDk2ZjllNjY5OWY3NjgzNDkxZDQwYTMz
ZDNhZjAwYzlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9SZW5kZXJTdXJmYWNlQ2hyb21pdW0uaApAQCAtMzQsNyAr
MzQsNyBAQAogI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5nLmgiCiAjaW5jbHVkZSAiU2hhZGVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgotI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNjQs
MjMgKzY0LDIzIEBAIHB1YmxpYzoKIAogICAgIC8vIFRoaXMgZ29lcyBmcm9tIGNvbnRlbnQgc3Bh
Y2Ugd2l0aCB0aGUgb3JpZ2luIGluIHRoZSBjZW50ZXIgb2YgdGhlIHJlY3QgYmVpbmcgdHJhbnNm
b3JtZWQgdG8gdGhlIHRhcmdldCBzcGFjZSB3aXRoIHRoZSBvcmlnaW4gaW4gdGhlIHRvcCBsZWZ0
IG9mIHRoZQogICAgIC8vIHJlY3QgYmVpbmcgdHJhbnNmb3JtZWQuIFBvc2l0aW9uIHRoZSByZWN0
IHNvIHRoYXQgdGhlIG9yaWdpbiBpcyBpbiB0aGUgY2VudGVyIG9mIGl0IGJlZm9yZSBhcHBseWlu
ZyB0aGlzIHRyYW5zZm9ybS4KLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1Ry
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQotICAgIHZvaWQgc2V0
RHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkg
eyBtX2RyYXdUcmFuc2Zvcm0gPSBkcmF3VHJhbnNmb3JtOyB9CisgICAgY29uc3QgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZHJhd1RyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0RHJhd1RyYW5zZm9ybShjb25zdCBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSB7IG1fZHJhd1RyYW5zZm9y
bSA9IGRyYXdUcmFuc2Zvcm07IH0KIAotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBv
cmlnaW5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX29yaWdpblRyYW5zZm9ybTsgfQotICAg
IHZvaWQgc2V0T3JpZ2luVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmln
aW5UcmFuc2Zvcm0pIHsgbV9vcmlnaW5UcmFuc2Zvcm0gPSBvcmlnaW5UcmFuc2Zvcm07IH0KKyAg
ICBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBtX29yaWdpblRyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0T3JpZ2lu
VHJhbnNmb3JtKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG9yaWdpblRy
YW5zZm9ybSkgeyBtX29yaWdpblRyYW5zZm9ybSA9IG9yaWdpblRyYW5zZm9ybTsgfQogCi0gICAg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVlblNwYWNlVHJhbnNmb3JtKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybTsgfQotICAgIHZvaWQgc2V0U2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVlblNwYWNlVHJhbnNm
b3JtKSB7IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9ybTsgfQor
ICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHNjcmVlblNwYWNlVHJh
bnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5TcGFjZVRyYW5zZm9ybTsgfQorICAgIHZv
aWQgc2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgc2NyZWVuU3BhY2VUcmFuc2Zvcm0pIHsgbV9zY3JlZW5TcGFjZVRyYW5zZm9ybSA9
IHNjcmVlblNwYWNlVHJhbnNmb3JtOyB9CiAKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgcmVwbGljYURyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2FEcmF3VHJh
bnNmb3JtOyB9Ci0gICAgdm9pZCBzZXRSZXBsaWNhRHJhd1RyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgcmVwbGljYURyYXdUcmFuc2Zvcm0pIHsgbV9yZXBsaWNhRHJhd1RyYW5z
Zm9ybSA9IHJlcGxpY2FEcmF3VHJhbnNmb3JtOyB9CisgICAgY29uc3QgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGljYURyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X3JlcGxpY2FEcmF3VHJhbnNmb3JtOyB9CisgICAgdm9pZCBzZXRSZXBsaWNhRHJhd1RyYW5zZm9y
bShjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXBsaWNhRHJhd1RyYW5z
Zm9ybSkgeyBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtID0gcmVwbGljYURyYXdUcmFuc2Zvcm07IH0K
IAotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXBsaWNhT3JpZ2luVHJhbnNmb3Jt
KCkgY29uc3QgeyByZXR1cm4gbV9yZXBsaWNhT3JpZ2luVHJhbnNmb3JtOyB9Ci0gICAgdm9pZCBz
ZXRSZXBsaWNhT3JpZ2luVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXBs
aWNhT3JpZ2luVHJhbnNmb3JtKSB7IG1fcmVwbGljYU9yaWdpblRyYW5zZm9ybSA9IHJlcGxpY2FP
cmlnaW5UcmFuc2Zvcm07IH0KKyAgICBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JiByZXBsaWNhT3JpZ2luVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9yZXBsaWNhT3Jp
Z2luVHJhbnNmb3JtOyB9CisgICAgdm9pZCBzZXRSZXBsaWNhT3JpZ2luVHJhbnNmb3JtKGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0p
IHsgbV9yZXBsaWNhT3JpZ2luVHJhbnNmb3JtID0gcmVwbGljYU9yaWdpblRyYW5zZm9ybTsgfQog
Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlcGxpY2FTY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtOyB9Ci0g
ICAgdm9pZCBzZXRSZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHJlcGxpY2FTY3JlZW5TcGFjZVRyYW5zZm9ybSkgeyBtX3JlcGxpY2FTY3JlZW5T
cGFjZVRyYW5zZm9ybSA9IHJlcGxpY2FTY3JlZW5TcGFjZVRyYW5zZm9ybTsgfQorICAgIGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlcGxpY2FTY3JlZW5TcGFjZVRyYW5z
Zm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtOyB9Cisg
ICAgdm9pZCBzZXRSZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0oY29uc3QgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKSB7IG1fcmVw
bGljYVNjcmVlblNwYWNlVHJhbnNmb3JtID0gcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtOyB9
CiAKICAgICBib29sIHRhcmdldFN1cmZhY2VUcmFuc2Zvcm1zQXJlQW5pbWF0aW5nKCkgY29uc3Qg
eyByZXR1cm4gbV90YXJnZXRTdXJmYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZzsgfQogICAgIHZv
aWQgc2V0VGFyZ2V0U3VyZmFjZVRyYW5zZm9ybXNBcmVBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcp
IHsgbV90YXJnZXRTdXJmYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZyA9IGFuaW1hdGluZzsgfQpA
QCAtMTIxLDEyICsxMjEsMTIgQEAgcHJpdmF0ZToKIAogICAgIGZsb2F0IG1fZHJhd09wYWNpdHk7
CiAgICAgYm9vbCBtX2RyYXdPcGFjaXR5SXNBbmltYXRpbmc7Ci0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9kcmF3VHJhbnNmb3JtOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fb3JpZ2lu
VHJhbnNmb3JtOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc2NyZWVuU3BhY2VUcmFuc2Zv
cm07Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhRHJhd1RyYW5zZm9ybTsKLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FPcmlnaW5UcmFuc2Zvcm07Ci0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm07CisgICAgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2RyYXdUcmFuc2Zvcm07CisgICAgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsKKyAgICBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm07CisgICAgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtOworICAg
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhT3JpZ2luVHJhbnNmb3Jt
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9yZXBsaWNhU2NyZWVuU3Bh
Y2VUcmFuc2Zvcm07CiAgICAgYm9vbCBtX3RhcmdldFN1cmZhY2VUcmFuc2Zvcm1zQXJlQW5pbWF0
aW5nOwogICAgIGJvb2wgbV9zY3JlZW5TcGFjZVRyYW5zZm9ybXNBcmVBbmltYXRpbmc7CiAgICAg
RmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNw
cAppbmRleCA3MWE4NzRiMTgzMGY5ZjdlMzc0YWFmYWQ0OTExZjNiYjE4OTdmNTQ4Li41MDgzYjZi
ZTZiMDY0NjY3ZGRiMDJhNzU2MjhiZmNmN2NhMWQ3MjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTQ3Nyw3ICs0NzcsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6
dXBkYXRlVGlsZXMoYm9vbCBpZGxlLCBpbnQgbGVmdCwgaW50IHRvcCwgaW50IHJpZ2h0LCBpbgog
CiAgICAgICAgICAgICB0aWxlLT50ZXh0dXJlKCktPnByZXBhcmVSZWN0KHNvdXJjZVJlY3QpOwog
ICAgICAgICAgICAgaWYgKG9jY2x1c2lvbikKLSAgICAgICAgICAgICAgICBvY2NsdXNpb24tPm92
ZXJkcmF3TWV0cmljcygpLmRpZFVwbG9hZChUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBzb3VyY2VS
ZWN0LCB0aWxlLT5vcGFxdWVSZWN0KCkpOworICAgICAgICAgICAgICAgIG9jY2x1c2lvbi0+b3Zl
cmRyYXdNZXRyaWNzKCkuZGlkVXBsb2FkKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgc291cmNlUmVjdCwgdGlsZS0+b3BhcXVlUmVjdCgpKTsKIAogICAgICAgICAgICAgY29uc3Qg
SW50UG9pbnQgYW5jaG9yID0gbV90aWxlci0+dGlsZVJlY3QodGlsZSkubG9jYXRpb24oKTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmYxYzY5NTQy
YWIwZDU2NmE1OGI2YTE2YjE4ZTk4OGQ2NGM1ZjQ2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgKQEAgLTAsMCArMSwzIEBACisvLyBGSVhNRTogdGhpcyBmaWxlIGlzIG5vdCBpbnRlbmRl
ZCB0byBiZSBsYW5kZWQgZXZlci4KKworI2luY2x1ZGUgIi4uLy4uLy4uLy4uL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmltYXRpb25DdXJ2
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NBbmlt
YXRpb25DdXJ2ZS5oCmluZGV4IDUzM2FiYWZlZjQ1NDdkNTQ5M2JhNTk3MTFiZTE1NTE2NjdlZTI0
ZjUuLmZhYmFkZTI3OGQ0NzEzMzJlZTAwMmIxM2ZlMmNmOWI5MzgwNTcwYmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQW5pbWF0aW9u
Q3VydmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0FuaW1hdGlvbkN1cnZlLmgKQEAgLTI1LDcgKzI1LDcgQEAKICNpZm5kZWYgQ0NBbmltYXRp
b25DdXJ2ZV9oCiAjZGVmaW5lIENDQW5pbWF0aW9uQ3VydmVfaAogCi0jaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgog
CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIApAQCAtNjUsNyArNjUsNyBAQCBjbGFzcyBD
Q1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIDogcHVibGljIENDQW5pbWF0aW9uQ3VydmUgewogcHVi
bGljOgogICAgIHZpcnR1YWwgfkNDVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7IH0KIAotICAg
IHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggZ2V0VmFsdWUoZG91YmxlIHQsIGNvbnN0IElu
dFNpemUmIGxheWVyU2l6ZSkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6ZSYgbGF5ZXJT
aXplKSBjb25zdCA9IDA7CiAKICAgICAvLyBQYXJ0aWFsIENDQW5pbWF0aW9uIGltcGxlbWVudGF0
aW9uLgogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gVHJhbnNmb3JtOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0RhbWFnZVRyYWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NEYW1hZ2VUcmFja2VyLmNwcAppbmRleCA5NGJiYzFkYzU1MzIxZGNiZTc0
YjJkZmZiZWEyNTgzMDhkMWM4ODMwLi4zOTJmMTBhYTBiOWEzNWJiYTZkM2JhNGZkN2YzNWU1OWZi
Mjg1MDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0RhbWFnZVRyYWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDRGFtYWdlVHJhY2tlci5jcHAKQEAgLTI0Miw3ICsyNDIs
NyBAQCB2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yTGF5ZXIoQ0NMYXllcklt
cGwqIGxheWVyLCBGbG9hdFJlY3QmIHRhcmdldAogICAgIC8vIFByb3BlcnR5IGNoYW5nZXMgdGFr
ZSBwcmlvcml0eSBvdmVyIHVwZGF0ZSByZWN0cy4KIAogICAgIC8vIENvbXB1dGUgdGhlIGxheWVy
J3MgIm9yaWdpblRyYW5zZm9ybSIgYnkgdHJhbnNsYXRpbmcgdGhlIGRyYXdUcmFuc2Zvcm0uCi0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggb3JpZ2luVHJhbnNmb3JtID0gbGF5ZXItPmRyYXdUcmFu
c2Zvcm0oKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG9yaWdpblRyYW5z
Zm9ybSA9IGxheWVyLT5kcmF3VHJhbnNmb3JtKCk7CiAgICAgb3JpZ2luVHJhbnNmb3JtLnRyYW5z
bGF0ZSgtMC41ICogbGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBsYXllci0+Ym91bmRz
KCkuaGVpZ2h0KCkpOwogCiAgICAgYm9vbCBsYXllcklzTmV3ID0gZmFsc2U7CkBAIC0zMDcsMTIg
KzMwNywxMiBAQCB2b2lkIENDRGFtYWdlVHJhY2tlcjo6ZXh0ZW5kRGFtYWdlRm9yUmVuZGVyU3Vy
ZmFjZShDQ0xheWVySW1wbCogbGF5ZXIsIEZsb2F0UmVjdAogCiAgICAgLy8gSWYgdGhlcmUgd2Fz
IGRhbWFnZSwgdHJhbnNmb3JtIGl0IHRvIHRhcmdldCBzcGFjZSwgYW5kIHBvc3NpYmx5IGNvbnRy
aWJ1dGUgaXRzIHJlZmxlY3Rpb24gaWYgbmVlZGVkLgogICAgIGlmICghZGFtYWdlUmVjdEluTG9j
YWxTcGFjZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IG9yaWdpblRyYW5zZm9ybSA9IHJlbmRlclN1cmZhY2UtPm9yaWdpblRyYW5zZm9ybSgpOworICAg
ICAgICBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zv
cm0gPSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKICAgICAgICAgRmxvYXRSZWN0
IGRhbWFnZVJlY3RJblRhcmdldFNwYWNlID0gQ0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3Qob3Jp
Z2luVHJhbnNmb3JtLCBkYW1hZ2VSZWN0SW5Mb2NhbFNwYWNlKTsKICAgICAgICAgdGFyZ2V0RGFt
YWdlUmVjdC51bml0ZUlmTm9uWmVybyhkYW1hZ2VSZWN0SW5UYXJnZXRTcGFjZSk7CiAKICAgICAg
ICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewotICAgICAgICAgICAgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5y
ZXBsaWNhT3JpZ2luVHJhbnNmb3JtKCk7CisgICAgICAgICAgICBjb25zdCBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4JiByZXBsaWNhT3JpZ2luVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFj
ZS0+cmVwbGljYU9yaWdpblRyYW5zZm9ybSgpOwogICAgICAgICAgICAgdGFyZ2V0RGFtYWdlUmVj
dC51bml0ZUlmTm9uWmVybyhDQ01hdGhVdGlsOjptYXBDbGlwcGVkUmVjdChyZXBsaWNhT3JpZ2lu
VHJhbnNmb3JtLCBkYW1hZ2VSZWN0SW5Mb2NhbFNwYWNlKSk7CiAgICAgICAgIH0KICAgICB9CkBA
IC0zMjUsNyArMzI1LDcgQEAgdm9pZCBDQ0RhbWFnZVRyYWNrZXI6OmV4dGVuZERhbWFnZUZvclJl
bmRlclN1cmZhY2UoQ0NMYXllckltcGwqIGxheWVyLCBGbG9hdFJlY3QKICAgICAgICAgcmVtb3Zl
UmVjdEZyb21DdXJyZW50RnJhbWUocmVwbGljYU1hc2tMYXllci0+aWQoKSwgcmVwbGljYUlzTmV3
KTsKIAogICAgICAgICAvLyBDb21wdXRlIHRoZSByZXBsaWNhJ3MgIm9yaWdpblRyYW5zZm9ybSIg
dGhhdCBtYXBzIGZyb20gdGhlIHJlcGxpY2EncyBvcmlnaW4gc3BhY2UgdG8gdGhlIHRhcmdldCBz
dXJmYWNlIG9yaWdpbiBzcGFjZS4KLSAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5yZXBsaWNhT3JpZ2luVHJh
bnNmb3JtKCk7CisgICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5yZXBsaWNhT3JpZ2luVHJh
bnNmb3JtKCk7CiAgICAgICAgIEZsb2F0UmVjdCByZXBsaWNhTWFza0xheWVyUmVjdCA9IENDTWF0
aFV0aWw6Om1hcENsaXBwZWRSZWN0KHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0sIEZsb2F0UmVjdChG
bG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0U2l6ZShyZXBsaWNhTWFza0xheWVyLT5ib3VuZHMoKS53
aWR0aCgpLCByZXBsaWNhTWFza0xheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSkpKTsKICAgICAgICAg
c2F2ZVJlY3RGb3JOZXh0RnJhbWUocmVwbGljYU1hc2tMYXllci0+aWQoKSwgcmVwbGljYU1hc2tM
YXllclJlY3QpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0RyYXdRdWFkLmgKaW5kZXggZjRlZjJkM2YyMWMxZmFlNTc2NjYz
Y2QzMjJmY2IxMjdiODdjYmZlYi4uMzgxY2JhZWFjZjNmMjUyMTc0ZDU3ZmRkMzNmMjA5YjE1OGEx
ZDU5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NEcmF3UXVhZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDRHJhd1F1YWQuaApAQCAtNDcsOCArNDcsOCBAQCBjbGFzcyBDQ0RyYXdR
dWFkIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDQ0RyYXdRdWFkKTsKIHB1YmxpYzoKICAg
ICBjb25zdCBJbnRSZWN0JiBxdWFkUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fcXVhZFJlY3Q7IH0K
LSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5xdWFkVHJhbnNmb3JtKCk7IH0KLSAgICBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3No
YXJlZFF1YWRTdGF0ZS0+bGF5ZXJUcmFuc2Zvcm0oKTsgfQorICAgIGNvbnN0IFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3No
YXJlZFF1YWRTdGF0ZS0+cXVhZFRyYW5zZm9ybSgpOyB9CisgICAgY29uc3QgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3No
YXJlZFF1YWRTdGF0ZS0+bGF5ZXJUcmFuc2Zvcm0oKTsgfQogICAgIGNvbnN0IEludFJlY3QmIGxh
eWVyUmVjdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2hhcmVkUXVhZFN0YXRlLT5sYXllclJlY3QoKTsg
fQogICAgIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRR
dWFkU3RhdGUtPmNsaXBSZWN0KCk7IH0KICAgICBmbG9hdCBvcGFjaXR5KCkgY29uc3QgeyByZXR1
cm4gbV9zaGFyZWRRdWFkU3RhdGUtPm9wYWNpdHkoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25D
dXJ2ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcAppbmRleCBhZTQxZmUwNjk1YjMwZDZhMjk0Nzc1
NTBlZjZmMTk5YjEzMTRjZmQ5Li5iNzM2ZTM4YzUwYWQ2MDI0MmZlMDY1YWZlMDZjYWNkNGRiYjVk
MmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmNw
cApAQCAtMTc2LDcgKzE3Niw3IEBAIFBhc3NPd25QdHI8Q0NUcmFuc2Zvcm1LZXlmcmFtZT4gQ0NU
cmFuc2Zvcm1LZXlmcmFtZTo6Y2xvbmUoKSBjb25zdAogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
VHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVg6IHsKICAgICAgICAgICAgIE1hdHJpeFRyYW5zZm9y
bU9wZXJhdGlvbiogdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8TWF0cml4VHJhbnNmb3JtT3BlcmF0
aW9uKj4obV92YWx1ZS5vcGVyYXRpb25zKClbal0uZ2V0KCkpOwotICAgICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbSA9IHRyYW5zZm9ybS0+bWF0cml4KCk7CisgICAgICAgICAgICBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG0gPSBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4KHRyYW5zZm9ybS0+bWF0cml4KCkpOwogICAgICAgICAgICAgb3BlcmF0aW9ucy5vcGVy
YXRpb25zKCkuYXBwZW5kKE1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbjo6Y3JlYXRlKG0uYSgpLCBt
LmIoKSwgbS5jKCksIG0uZCgpLCBtLmUoKSwgbS5mKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC0yODcsMTcgKzI4NywxNyBAQCBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3Vy
dmU+IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNsb25lKCkgY29uc3QKICAg
ICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBD
Q0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShkb3VibGUgdCwgY29u
c3QgSW50U2l6ZSYgbGF5ZXJTaXplKSBjb25zdAorV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShkb3VibGUg
dCwgY29uc3QgSW50U2l6ZSYgbGF5ZXJTaXplKSBjb25zdAogewotICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRyYW5zZm9ybU1hdHJpeDsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IHRyYW5zZm9ybU1hdHJpeDsKIAogICAgIGlmICh0IDw9IG1fa2V5ZnJhbWVzLmZpcnN0KCkt
PnRpbWUoKSkgewotICAgICAgICBtX2tleWZyYW1lcy5maXJzdCgpLT52YWx1ZSgpLmFwcGx5KGxh
eWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKKyAgICAgICAgbV9rZXlmcmFtZXMuZmlyc3QoKS0+
dmFsdWUoKS5hcHBseShsYXllclNpemUsIHRyYW5zZm9ybU1hdHJpeC50b1dlYkNvcmVUcmFuc2Zv
cm0oKSk7CiAgICAgICAgIHJldHVybiB0cmFuc2Zvcm1NYXRyaXg7CiAgICAgfQogCiAgICAgaWYg
KHQgPj0gbV9rZXlmcmFtZXMubGFzdCgpLT50aW1lKCkpIHsKLSAgICAgICAgbV9rZXlmcmFtZXMu
bGFzdCgpLT52YWx1ZSgpLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4KTsKKyAgICAg
ICAgbV9rZXlmcmFtZXMubGFzdCgpLT52YWx1ZSgpLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3Jt
TWF0cml4LnRvV2ViQ29yZVRyYW5zZm9ybSgpKTsKICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybU1h
dHJpeDsKICAgICB9CiAKQEAgLTMxNCwxMiArMzE0LDEyIEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4
IENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0LCBj
b25zCiAKICAgICBpZiAobV9rZXlmcmFtZXNbaV0tPnZhbHVlKCkub3BlcmF0aW9uc01hdGNoKG1f
a2V5ZnJhbWVzW2krMV0tPnZhbHVlKCkpKSB7CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBq
IDwgbV9rZXlmcmFtZXNbaSsxXS0+dmFsdWUoKS5zaXplKCk7ICsraikKLSAgICAgICAgICAgIG1f
a2V5ZnJhbWVzW2krMV0tPnZhbHVlKCkub3BlcmF0aW9ucygpW2pdLT5ibGVuZChtX2tleWZyYW1l
c1tpXS0+dmFsdWUoKS5hdChqKSwgcHJvZ3Jlc3MpLT5hcHBseSh0cmFuc2Zvcm1NYXRyaXgsIGxh
eWVyU2l6ZSk7CisgICAgICAgICAgICBtX2tleWZyYW1lc1tpKzFdLT52YWx1ZSgpLm9wZXJhdGlv
bnMoKVtqXS0+YmxlbmQobV9rZXlmcmFtZXNbaV0tPnZhbHVlKCkuYXQoaiksIHByb2dyZXNzKS0+
YXBwbHkodHJhbnNmb3JtTWF0cml4LnRvV2ViQ29yZVRyYW5zZm9ybSgpLCBsYXllclNpemUpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNvdXJjZTsKKyAgICAg
ICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzb3VyY2U7CiAKLSAgICAgICAgbV9r
ZXlmcmFtZXNbaV0tPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXplLCBzb3VyY2UpOwotICAgICAgICBt
X2tleWZyYW1lc1tpKzFdLT52YWx1ZSgpLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4
KTsKKyAgICAgICAgbV9rZXlmcmFtZXNbaV0tPnZhbHVlKCkuYXBwbHkobGF5ZXJTaXplLCBzb3Vy
Y2UudG9XZWJDb3JlVHJhbnNmb3JtKCkpOworICAgICAgICBtX2tleWZyYW1lc1tpKzFdLT52YWx1
ZSgpLmFwcGx5KGxheWVyU2l6ZSwgdHJhbnNmb3JtTWF0cml4LnRvV2ViQ29yZVRyYW5zZm9ybSgp
KTsKIAogICAgICAgICB0cmFuc2Zvcm1NYXRyaXguYmxlbmQoc291cmNlLCBwcm9ncmVzcyk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oCmluZGV4
IDhkMWYwZTA1NWY0Mjk3ZDQzNjM3Nzc5OGRjNDI1ZGE4ZDk0ZjUwMWYuLmU3MGNkYWZiNzViMjk4
MDliMGVkYmUzOTBjN2FiYWM5OTBhNWNiZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0tleWZy
YW1lZEFuaW1hdGlvbkN1cnZlLmgKQEAgLTExNiw3ICsxMTYsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBQYXNzT3duUHRyPENDQW5pbWF0aW9uQ3VydmU+IGNsb25lKCkgY29uc3QgT1ZFUlJJREU7
CiAKICAgICAvLyBDQ1RyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGltcGxlbWVudGF0aW9uCi0gICAg
dmlydHVhbCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50
U2l6ZSYpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBnZXRWYWx1ZShkb3VibGUgdCwgY29uc3QgSW50U2l6ZSYpIGNvbnN0IE9WRVJS
SURFOwogCiBwcml2YXRlOgogICAgIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmNwcApp
bmRleCAyZWUxODg4NDhhMDE0ZWQ1ZWM5NGIwYjc5ZGU3YWFiMTA4YTFmOTYxLi41MmVlNmUzMTY3
Mzk4NjZmNzcyN2E2MGYzOTUxNTYxODg5ZDA4NTE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVk
ZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNz
TGF5ZXIuaCIgLy8gZm9yIEtleWZyYW1lVmFsdWVMaXN0Ci0jaW5jbHVkZSAiVHJhbnNmb3JtYXRp
b25NYXRyaXguaCIKKyNpbmNsdWRlICJXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1
ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmlt
YXRpb25DdXJ2ZS5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtNDUzLDcgKzQ1
Myw3IEBAIHZvaWQgQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXI6OnRpY2tBbmltYXRpb25zKGRv
dWJsZSBtb25vdG9uaWNUaW1lKQogCiAgICAgICAgICAgICBjYXNlIENDQWN0aXZlQW5pbWF0aW9u
OjpUcmFuc2Zvcm06IHsKICAgICAgICAgICAgICAgICBjb25zdCBDQ1RyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlKiB0cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA9IG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+
Y3VydmUoKS0+dG9UcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpOwotICAgICAgICAgICAgICAgIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9IHRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
LT5nZXRWYWx1ZSh0cmltbWVkLCBtX2NsaWVudC0+Ym91bmRzKCkpOworICAgICAgICAgICAgICAg
IGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gdHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUtPmdldFZhbHVlKHRyaW1tZWQsIG1fY2xpZW50LT5ib3VuZHMoKSk7CiAg
ICAgICAgICAgICAgICAgaWYgKG1fYWN0aXZlQW5pbWF0aW9uc1tpXS0+aXNGaW5pc2hlZEF0KG1v
bm90b25pY1RpbWUpKQogICAgICAgICAgICAgICAgICAgICBtX2FjdGl2ZUFuaW1hdGlvbnNbaV0t
PnNldFJ1blN0YXRlKENDQWN0aXZlQW5pbWF0aW9uOjpGaW5pc2hlZCwgbW9ub3RvbmljVGltZSk7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oCmluZGV4
IGUyMmY4MDU0ZDYyMzIwN2M0ZDcwYzMxMjFmYjFiMDM5NWEyZTYzMDIuLmE0N2FmNzQwMjJhMzlk
OGQ5MzAxZGYyZTkyN2Q3ZjkwZDA5NTU1ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckFuaW1hdGlvbkNvbnRyb2xsZXIuaApAQCAtMzQsMTIgKzM0LDE0IEBACiAjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCitjbGFzcyBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OworCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFuaW1hdGlvbjsKIGNsYXNzIEludFNpemU7CiBjbGFz
cyBLZXlmcmFtZVZhbHVlTGlzdDsKLWNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4OwogCiBjbGFz
cyBDQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlckNsaWVudCB7CiBwdWJsaWM6CkBAIC00OCw4ICs1
MCw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0T3BhY2l0eUZyb21BbmltYXRpb24oZmxvYXQpID0gMDsKICAgICB2aXJ0dWFs
IGZsb2F0IG9wYWNpdHkoKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9y
bUZyb21BbmltYXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7Ci0gICAgdmly
dHVhbCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKCkgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKSA9IDA7CisgICAgdmlydHVhbCBjb25zdCBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCA9IDA7CiB9OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5jcHAKaW5kZXggNmVlOWFhNzFkZTMyYjAzZWVmMTljZTAzNjNiZjFkYWY2Y2IwNjRh
YS4uNzYzN2NhZWJhNmE1ODNhOGM2YzVjNmJjZmQ4ZTYyYWEwMzdhZTM3MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmNwcApAQCAtMTkyLDkgKzE5Miw5IEBAIGNvbnN0IEludFJlY3QgQ0NMYXllcklt
cGw6OmdldERyYXdSZWN0KCkgY29uc3QKICAgICByZXR1cm4gbWFwcGVkUmVjdDsKIH0KIAotVHJh
bnNmb3JtYXRpb25NYXRyaXggQ0NMYXllckltcGw6OnF1YWRUcmFuc2Zvcm0oKSBjb25zdAorV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBDQ0xheWVySW1wbDo6cXVhZFRyYW5zZm9ybSgp
IGNvbnN0CiB7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9ybWF0aW9uID0g
ZHJhd1RyYW5zZm9ybSgpOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcXVh
ZFRyYW5zZm9ybWF0aW9uID0gZHJhd1RyYW5zZm9ybSgpOwogCiAgICAgZmxvYXQgb2Zmc2V0WCA9
IC0wLjUgKiBib3VuZHMoKS53aWR0aCgpOwogICAgIGZsb2F0IG9mZnNldFkgPSAtMC41ICogYm91
bmRzKCkuaGVpZ2h0KCk7CkBAIC0zMDcsNyArMzA3LDcgQEAgdm9pZCBDQ0xheWVySW1wbDo6c2V0
T3BhY2l0eUZyb21BbmltYXRpb24oZmxvYXQgb3BhY2l0eSkKICAgICBzZXRPcGFjaXR5KG9wYWNp
dHkpOwogfQogCi12b2lkIENDTGF5ZXJJbXBsOjpzZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCit2b2lkIENDTGF5ZXJJbXBsOjpz
ZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSkKIHsKICAgICBzZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKIH0KQEAg
LTQ1Myw3ICs0NTMsNyBAQCB2b2lkIENDTGF5ZXJJbXBsOjpzZXRQcmVzZXJ2ZXMzRChib29sIHBy
ZXNlcnZlczNEKQogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZEZvclN1YnRyZWUoKTsKIH0K
IAotdm9pZCBDQ0xheWVySW1wbDo6c2V0U3VibGF5ZXJUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHN1YmxheWVyVHJhbnNmb3JtKQordm9pZCBDQ0xheWVySW1wbDo6c2V0U3Vi
bGF5ZXJUcmFuc2Zvcm0oY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3Vi
bGF5ZXJUcmFuc2Zvcm0pCiB7CiAgICAgaWYgKG1fc3VibGF5ZXJUcmFuc2Zvcm0gPT0gc3VibGF5
ZXJUcmFuc2Zvcm0pCiAgICAgICAgIHJldHVybjsKQEAgLTQ2Myw3ICs0NjMsNyBAQCB2b2lkIEND
TGF5ZXJJbXBsOjpzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgc3VibGF5ZXJUcmFucwogICAgIG5vdGVMYXllclByb3BlcnR5Q2hhbmdlZEZvckRlc2NlbmRh
bnRzKCk7CiB9CiAKLXZvaWQgQ0NMYXllckltcGw6OnNldFRyYW5zZm9ybShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKQordm9pZCBDQ0xheWVySW1wbDo6c2V0VHJhbnNmb3Jt
KGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKICAg
ICBpZiAobV90cmFuc2Zvcm0gPT0gdHJhbnNmb3JtKQogICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaAppbmRleCBiZGJmZTY5MmU2YzJiYmE5OWZkZWZjMmQ2YWNmNDhkZWQ0ZmFkYTA3
Li5kZTM2YzdkNmNjZWJkNjczYTZkYTM3NWJkOGJmZmMyNTM5MzhhNzQxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmgKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVk
ZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgotI2luY2x1ZGUgIlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgImNjL0ND
UmVuZGVyU3VyZmFjZS5oIgogI2luY2x1ZGUgImNjL0NDU2hhcmVkUXVhZFN0YXRlLmgiCkBAIC02
MSw4ICs2MSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBpZCgpIGNvbnN0IE9WRVJSSURF
IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRPcGFjaXR5RnJvbUFu
aW1hdGlvbihmbG9hdCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29u
c3QgT1ZFUlJJREUgeyByZXR1cm4gbV9vcGFjaXR5OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFRy
YW5zZm9ybUZyb21BbmltYXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBPVkVSUklE
RTsKLSAgICB2aXJ0dWFsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBj
b25zdCBPVkVSUklERSB7IHJldHVybiBtX3RyYW5zZm9ybTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRUcmFuc2Zvcm1Gcm9tQW5pbWF0aW9uKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdHJhbnNm
b3JtOyB9CiAgICAgdmlydHVhbCBjb25zdCBJbnRTaXplJiBib3VuZHMoKSBjb25zdCBPVkVSUklE
RSB7IHJldHVybiBtX2JvdW5kczsgfQogCiAgICAgLy8gVHJlZSBzdHJ1Y3R1cmUuCkBAIC0xMzMs
OCArMTMzLDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0SXNOb25Db21wb3NpdGVkQ29udGVudChi
b29sIGlzTm9uQ29tcG9zaXRlZENvbnRlbnQpIHsgbV9pc05vbkNvbXBvc2l0ZWRDb250ZW50ID0g
aXNOb25Db21wb3NpdGVkQ29udGVudDsgfQogICAgIGJvb2wgaXNOb25Db21wb3NpdGVkQ29udGVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1faXNOb25Db21wb3NpdGVkQ29udGVudDsgfQogCi0gICAgdm9p
ZCBzZXRTdWJsYXllclRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwotICAg
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0IHsg
cmV0dXJuIG1fc3VibGF5ZXJUcmFuc2Zvcm07IH0KKyAgICB2b2lkIHNldFN1YmxheWVyVHJhbnNm
b3JtKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICBjb25zdCBX
ZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3VibGF5ZXJUcmFuc2Zvcm07IH0KIAogICAgIC8vIERlYnVnIGxheWVyIGJv
cmRlciAtIHZpc3VhbCBlZmZlY3Qgb25seSwgZG8gbm90IGNoYW5nZSBnZW9tZXRyeS9jbGlwcGlu
Zy9ldGMuCiAgICAgdm9pZCBzZXREZWJ1Z0JvcmRlckNvbG9yKENvbG9yKTsKQEAgLTIwOSwxMyAr
MjA5LDEzIEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIHRoZSByZWN0IGNvbnRhaW50YWluaW5n
IHRoaXMgbGF5ZXIgaW4gdGhlIGN1cnJlbnQgdmlldydzIGNvb3JkaW5hdGUgc3lzdGVtLgogICAg
IGNvbnN0IEludFJlY3QgZ2V0RHJhd1JlY3QoKSBjb25zdDsKIAotICAgIHZvaWQgc2V0VHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgdm9pZCBzZXRUcmFuc2Zvcm0o
Y29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIGJvb2wgdHJhbnNm
b3JtSXNBbmltYXRpbmcoKSBjb25zdDsKIAotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBkcmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3VHJhbnNmb3JtOyB9Ci0gICAg
dm9pZCBzZXREcmF3VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgp
IHsgbV9kcmF3VHJhbnNmb3JtID0gbWF0cml4OyB9Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHNjcmVlblNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9zY3JlZW5TcGFj
ZVRyYW5zZm9ybTsgfQotICAgIHZvaWQgc2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkgeyBtX3NjcmVlblNwYWNlVHJhbnNmb3JtID0gbWF0
cml4OyB9CisgICAgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1Ry
YW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd1RyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0
RHJhd1RyYW5zZm9ybShjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRy
aXgpIHsgbV9kcmF3VHJhbnNmb3JtID0gbWF0cml4OyB9CisgICAgY29uc3QgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgc2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVy
biBtX3NjcmVlblNwYWNlVHJhbnNmb3JtOyB9CisgICAgdm9pZCBzZXRTY3JlZW5TcGFjZVRyYW5z
Zm9ybShjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpIHsgbV9z
Y3JlZW5TcGFjZVRyYW5zZm9ybSA9IG1hdHJpeDsgfQogCiAgICAgYm9vbCBkcmF3VHJhbnNmb3Jt
SXNBbmltYXRpbmcoKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFuc2Zvcm1Jc0FuaW1hdGluZzsg
fQogICAgIHZvaWQgc2V0RHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5nKGJvb2wgYW5pbWF0aW5nKSB7
IG1fZHJhd1RyYW5zZm9ybUlzQW5pbWF0aW5nID0gYW5pbWF0aW5nOyB9CkBAIC0yNTAsNyArMjUw
LDcgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0m
LCBpbnQgaW5kZW50KTsKIAogICAgIC8vIFRyYW5zZm9ybWF0aW9uIHVzZWQgdG8gdHJhbnNmb3Jt
IHF1YWRzIHByb3ZpZGVkIGluIGFwcGVuZFF1YWRzLgotICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRp
b25NYXRyaXggcXVhZFRyYW5zZm9ybSgpIGNvbnN0OworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkVHJhbnNmb3JtKCkgY29uc3Q7CiAKIHByaXZhdGU6CiAg
ICAgdm9pZCBzZXRQYXJlbnQoQ0NMYXllckltcGwqIHBhcmVudCkgeyBtX3BhcmVudCA9IHBhcmVu
dDsgfQpAQCAtMzAxLDggKzMwMSw4IEBAIHByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0
aW9uOwogICAgIGJvb2wgbV9wcmVzZXJ2ZXMzRDsKICAgICBib29sIG1fZHJhd0NoZWNrZXJib2Fy
ZEZvck1pc3NpbmdUaWxlczsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3N1YmxheWVyVHJh
bnNmb3JtOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOworICAgIFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9zdWJsYXllclRyYW5zZm9ybTsKKyAgICBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG1fdHJhbnNmb3JtOwogICAgIGJvb2wgbV91c2Vz
TGF5ZXJDbGlwcGluZzsKICAgICBib29sIG1faXNOb25Db21wb3NpdGVkQ29udGVudDsKIApAQCAt
MzM1LDggKzMzNSw4IEBAIHByaXZhdGU6CiAgICAgRmlsdGVyT3BlcmF0aW9ucyBtX2ZpbHRlcnM7
CiAgICAgRmlsdGVyT3BlcmF0aW9ucyBtX2JhY2tncm91bmRGaWx0ZXJzOwogCi0gICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fc2NyZWVuU3BhY2VUcmFuc2Zvcm07CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtX2RyYXdUcmFuc2Zvcm07CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBtX3NjcmVlblNwYWNlVHJhbnNmb3JtOwogICAgIGJvb2wgbV9kcmF3VHJhbnNmb3JtSXNBbmlt
YXRpbmc7CiAgICAgYm9vbCBtX3NjcmVlblNwYWNlVHJhbnNmb3JtSXNBbmltYXRpbmc7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJTb3J0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclNvcnRlci5jcHAKaW5kZXggMWFmNjM5YzhiMDk2YjQ0OTA5NTgxMTEwZWVh
YzAyZWUxZjM2NzU1YS4uNzQwYmI3YTc4NjRhMjBkZTZlZThjMjM1YWE0ZTc4YjhhODljYmVmNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclNvcnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1
ZGUgImNjL0NDTGF5ZXJTb3J0ZXIuaCIKIAotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJjYy9D
Q01hdGhVdGlsLmgiCiAjaW5jbHVkZSAiY2MvQ0NSZW5kZXJTdXJmYWNlLmgiCiAjaW5jbHVkZSA8
bGltaXRzLmg+CkBAIC0xNTEsNyArMTUxLDcgQEAgQ0NMYXllclNvcnRlcjo6QUJDb21wYXJlUmVz
dWx0IENDTGF5ZXJTb3J0ZXI6OmNoZWNrT3ZlcmxhcChMYXllclNoYXBlKiBhLCBMYXllclMKICAg
ICByZXR1cm4gQkJlZm9yZUE7CiB9CiAKLUNDTGF5ZXJTb3J0ZXI6OkxheWVyU2hhcGU6OkxheWVy
U2hhcGUoZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGRyYXdUcmFuc2Zvcm0pCitDQ0xheWVyU29ydGVyOjpMYXllclNoYXBlOjpMYXllclNoYXBl
KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pCiB7CiAgICAgRmxvYXRRdWFkIGxheWVyUXVhZChGbG9h
dFBvaW50KC13aWR0aCAqIDAuNSwgaGVpZ2h0ICogMC41KSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIEZsb2F0UG9pbnQod2lkdGggKiAwLjUsIGhlaWdodCAqIDAuNSksCkBAIC0yMzYsNyArMjM2
LDcgQEAgdm9pZCBDQ0xheWVyU29ydGVyOjpjcmVhdGVHcmFwaE5vZGVzKExheWVyTGlzdDo6aXRl
cmF0b3IgZmlyc3QsIExheWVyTGlzdDo6aXRlcmEKICAgICAgICAgTE9HKENDTGF5ZXJTb3J0ZXIs
ICJMYXllciAlZCAoJWQgeCAlZClcbiIsIG5vZGUubGF5ZXItPmlkKCksIG5vZGUubGF5ZXItPmJv
dW5kcygpLndpZHRoKCksIG5vZGUubGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKTsKICNlbmRpZgog
Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFuc2Zvcm07CisgICAgICAgIFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybTsKICAgICAgICAgZmxv
YXQgbGF5ZXJXaWR0aCwgbGF5ZXJIZWlnaHQ7CiAgICAgICAgIGlmIChyZW5kZXJTdXJmYWNlKSB7
CiAgICAgICAgICAgICBkcmF3VHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZS0+ZHJhd1RyYW5zZm9y
bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclNvcnRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5oCmluZGV4IDNlMmE4OGM5MjE5M2JiNzAxMDQ0MzE0
N2UwZmZmYjc1M2E3NGIyOTkuLjUxMDM4YTczOWJjMWFkYjYyNTdmYmUyMTlmOWI5YzI0OTlmYmY0
ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJTb3J0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmgKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgog
ICAgIC8vIEhvbGRzIHZhcmlvdXMgdXNlZnVsIHByb3BlcnRpZXMgZGVyaXZlZCBmcm9tIGEgbGF5
ZXIncyAzRCBvdXRsaW5lLgogICAgIHN0cnVjdCBMYXllclNoYXBlIHsKICAgICAgICAgTGF5ZXJT
aGFwZSgpIHsgfQotICAgICAgICBMYXllclNoYXBlKGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKTsKKyAgICAgICAgTGF5
ZXJTaGFwZShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKTsKIAogICAgICAgICBmbG9hdCBsYXllclpG
cm9tUHJvamVjdGVkUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0LmNwcAppbmRleCBhMDgxYzJiZTU4MzI3OWFmOTBhYzgxYzRjZmZhMzNi
OTE5YzI2OGJiLi45ZjhhZDBkNzU5OTI5NDkzNWIyZjE2MzM4N2VjMjhkYWRjZDU1MTk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTQ4OSw3ICs0ODksNyBAQCB2b2lkIEND
TGF5ZXJUcmVlSG9zdDo6dXBkYXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgQ0NU
ZXh0dXJlVXBkYXRlciYgdQogICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcm9vdFJlbmRlclN1
cmZhY2UgPSByb290TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICByb290UmVuZGVyU3VyZmFj
ZS0+Y2xlYXJMYXllckxpc3QoKTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5
TWF0cml4OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7CiAgICAgewogICAgICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVM
YXllcnM6OmNhbGNEcmF3RXRjIiwgdGhpcywgMCk7CiAgICAgICAgIENDTGF5ZXJUcmVlSG9zdENv
bW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RMYXllciwgcm9v
dExheWVyLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIHVwZGF0ZUxpc3QsIHJvb3RS
ZW5kZXJTdXJmYWNlLT5sYXllckxpc3QoKSwgbGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygpLm1h
eFRleHR1cmVTaXplKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggNTI4ZWVjMjQ0
ZTkwOGQ0NTA3NDJhZTdmNTBiMzQ1MTU0YzdkZGE4Ni4uNmExMzAyZGFkYjJlZjdmMjY2ZTQ1ODNk
OTA1MzQ5YjNhYmYyZmM3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTMwLDcg
KzMwLDcgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5o
IgogI2luY2x1ZGUgIlJhdGVMaW1pdGVyLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKKyNpbmNsdWRlICJXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgImNj
L0NDQW5pbWF0aW9uRXZlbnRzLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5jcHAKaW5kZXggNTExZTgzN2RjOGRhYmMzYzVjOTExNmJmMzNlNTJmMDRhZTZh
YjUzNi4uMDJkNTYzMGQ2MjljY2M1Y2U0ZjM5NTBiYjE1NjllZWZkYjZjZGM0MiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0Q29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uY3BwCkBAIC0zMSw3ICszMSw3IEBACiAj
aW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgorI2luY2x1ZGUgIldlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiY2Mv
Q0NBY3RpdmVBbmltYXRpb24uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCkBAIC00Miw3ICs0Miw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW50UmVjdCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNh
bGN1bGF0ZVZpc2libGVSZWN0KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0LCBjb25z
dCBJbnRSZWN0JiBsYXllckJvdW5kUmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRy
YW5zZm9ybSkKK0ludFJlY3QgQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVWaXNpYmxl
UmVjdChjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50UmVjdCYgbGF5
ZXJCb3VuZFJlY3QsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSkKIHsKICAgICAvLyBJcyB0aGlzIGxheWVyIGZ1bGx5IGNvbnRhaW5lZCB3aXRoaW4gdGhl
IHRhcmdldCBzdXJmYWNlPwogICAgIEludFJlY3QgbGF5ZXJJblN1cmZhY2VTcGFjZSA9IENDTWF0
aFV0aWw6Om1hcENsaXBwZWRSZWN0KHRyYW5zZm9ybSwgbGF5ZXJCb3VuZFJlY3QpOwpAQCAtNTks
NyArNTksNyBAQCBJbnRSZWN0IENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlVmlzaWJs
ZVJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZQogICAgIC8vIFRoaXMgYm91bmRpbmcg
cmVjdGFuZ2xlIG1heSBiZSBsYXJnZXIgdGhhbiBpdCBuZWVkcyB0byBiZSAoYmVpbmcKICAgICAv
LyBheGlzLWFsaWduZWQpLCBidXQgaXMgYSByZWFzb25hYmxlIGZpbHRlciBvbiB0aGUgc3BhY2Ug
dG8gY29uc2lkZXIuCiAgICAgLy8gTm9uLWludmVydGlibGUgdHJhbnNmb3JtcyB3aWxsIGNyZWF0
ZSBhbiBlbXB0eSByZWN0IGhlcmUuCi0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggc3Vy
ZmFjZVRvTGF5ZXIgPSB0cmFuc2Zvcm0uaW52ZXJzZSgpOworICAgIGNvbnN0IFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggc3VyZmFjZVRvTGF5ZXIgPSB0cmFuc2Zvcm0uaW52ZXJzZSgp
OwogICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChDQ01hdGhVdGlsOjpw
cm9qZWN0Q2xpcHBlZFJlY3Qoc3VyZmFjZVRvTGF5ZXIsIEZsb2F0UmVjdChtaW5pbWFsU3VyZmFj
ZVJlY3QpKSk7CiAgICAgbGF5ZXJSZWN0LmludGVyc2VjdChsYXllckJvdW5kUmVjdCk7CiAgICAg
cmV0dXJuIGxheWVyUmVjdDsKQEAgLTg4LDcgKzg4LDcgQEAgc3RhdGljIEludFJlY3QgY2FsY3Vs
YXRlVmlzaWJsZUxheWVyUmVjdChMYXllclR5cGUqIGxheWVyKQogICAgIGNvbnN0IEludFNpemUm
IGNvbnRlbnRCb3VuZHMgPSBsYXllci0+Y29udGVudEJvdW5kcygpOwogCiAgICAgY29uc3QgSW50
UmVjdCBsYXllckJvdW5kUmVjdCA9IEludFJlY3QoSW50UG9pbnQoKSwgY29udGVudEJvdW5kcyk7
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gbGF5ZXItPmRyYXdUcmFuc2Zv
cm0oKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IGxh
eWVyLT5kcmF3VHJhbnNmb3JtKCk7CiAKICAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJv
dW5kcy53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzLndpZHRoKCkp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzLmhlaWdodCgpIC8gc3RhdGlj
X2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzLmhlaWdodCgpKSk7CkBAIC05OCw3ICs5OCw3IEBA
IHN0YXRpYyBJbnRSZWN0IGNhbGN1bGF0ZVZpc2libGVMYXllclJlY3QoTGF5ZXJUeXBlKiBsYXll
cikKICAgICByZXR1cm4gdmlzaWJsZUxheWVyUmVjdDsKIH0KIAotc3RhdGljIGJvb2wgaXNTY2Fs
ZU9yVHJhbnNsYXRpb24oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCitzdGF0aWMgYm9v
bCBpc1NjYWxlT3JUcmFuc2xhdGlvbihjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JiBtKQogewogICAgIHJldHVybiAhbS5tMTIoKSAmJiAhbS5tMTMoKSAmJiAhbS5tMTQoKQog
ICAgICAgICAgICAmJiAhbS5tMjEoKSAmJiAhbS5tMjMoKSAmJiAhbS5tMjQoKQpAQCAtMjM0LDcg
KzIzNCw3IEBAIHN0YXRpYyBib29sIHN1YnRyZWVTaG91bGRSZW5kZXJUb1NlcGFyYXRlU3VyZmFj
ZShMYXllclR5cGUqIGxheWVyLCBib29sIGF4aXNBbGlnCiAvLyBSZWN1cnNpdmVseSB3YWxrcyB0
aGUgbGF5ZXIgdHJlZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxs
IHRoZQogLy8gbmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9ucywgY2xpcFJlY3RzLCByZW5kZXIgc3Vy
ZmFjZXMsIGV0Yy4KIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZSwgdHlwZW5hbWUgTGF5ZXJM
aXN0LCB0eXBlbmFtZSBSZW5kZXJTdXJmYWNlVHlwZSwgdHlwZW5hbWUgTGF5ZXJTb3J0ZXI+Ci1z
dGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChM
YXllclR5cGUqIGxheWVyLCBMYXllclR5cGUqIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxI
aWVyYXJjaHlNYXRyaXgsIFJlbmRlclN1cmZhY2VUeXBlKiBuZWFyZXN0QW5jZXN0b3JUaGF0TW92
ZXNQaXhlbHMsIExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBs
YXllckxpc3QsIExheWVyU29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVTaXplKQor
c3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwo
TGF5ZXJUeXBlKiBsYXllciwgTGF5ZXJUeXBlKiByb290TGF5ZXIsIGNvbnN0IFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgUmVuZGVyU3VyZmFjZVR5cGUq
IG5lYXJlc3RBbmNlc3RvclRoYXRNb3Zlc1BpeGVscywgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVyTGlzdCwgTGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVy
LCBpbnQgbWF4VGV4dHVyZVNpemUpCiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0
aGUgbmV3IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbnMgcmVjdXJzaXZlbHkgZm9yIHRoaXMKICAgICAv
LyBsYXllciBhbmQgYWxsIGl0cyBkZXNjZW5kYW50cy4gSXQgYWxzbyBjb21wdXRlcyB0aGUgYXBw
cm9wcmlhdGUgcmVuZGVyIHN1cmZhY2VzLgpAQCAtMjQ4LDcgKzI0OCw3IEBAIHN0YXRpYyBib29s
IGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSog
bGF5ZXIsIExheWVyCiAgICAgLy8gICAgcHJvamVjdGlvbiBhcHBsaWVkIGF0IGRyYXcgdGltZSBm
bGlwcyB0aGUgWSBheGlzIGFwcHJvcHJpYXRlbHkuCiAgICAgLy8KICAgICAvLyAyLiBUaGUgYW5j
aG9yIHBvaW50LCB3aGVuIGdpdmVuIGFzIGEgRmxvYXRQb2ludCBvYmplY3QsIGlzIHNwZWNpZmll
ZCBpbiAidW5pdCBsYXllciBzcGFjZSIsCi0gICAgLy8gICAgd2hlcmUgdGhlIGJvdW5kcyBvZiB0
aGUgbGF5ZXIgbWFwIHRvIFswLCAxXS4gSG93ZXZlciwgYXMgYSBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBvYmplY3QsCisgICAgLy8gICAgd2hlcmUgdGhlIGJvdW5kcyBvZiB0aGUgbGF5ZXIgbWFwIHRv
IFswLCAxXS4gSG93ZXZlciwgYXMgYSBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG9i
amVjdCwKICAgICAvLyAgICB0aGUgdHJhbnNmb3JtIHRvIHRoZSBhbmNob3IgcG9pbnQgaXMgc3Bl
Y2lmaWVkIGluICJwaXhlbCBsYXllciBzcGFjZSIsIHdoZXJlIHRoZSBib3VuZHMKICAgICAvLyAg
ICBvZiB0aGUgbGF5ZXIgbWFwIHRvIFtib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgpXS4K
ICAgICAvLwpAQCAtMzUxLDcgKzM1MSw3IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAg
ZmxvYXQgY2VudGVyT2Zmc2V0WCA9ICgwLjUgLSBhbmNob3JQb2ludC54KCkpICogYm91bmRzLndp
ZHRoKCk7CiAgICAgZmxvYXQgY2VudGVyT2Zmc2V0WSA9ICgwLjUgLSBhbmNob3JQb2ludC55KCkp
ICogYm91bmRzLmhlaWdodCgpOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJMb2Nh
bFRyYW5zZm9ybTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyTG9j
YWxUcmFuc2Zvcm07CiAgICAgLy8gTFQgPSBUcltvcmlnaW5dICogU1twYWdlU2NhbGVEZWx0YV0K
ICAgICBsYXllckxvY2FsVHJhbnNmb3JtLnNjYWxlKGxheWVyLT5wYWdlU2NhbGVEZWx0YSgpKTsK
ICAgICAvLyBMVCA9IFRyW29yaWdpbl0gKiBTW3BhZ2VTY2FsZURlbHRhXSAqIFRyW29yaWdpbjJh
bmNob3JdCkBAIC0zNjEsOCArMzYxLDggQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKICAgICAv
LyBMVCA9IFRyW29yaWdpbl0gKiBTW3BhZ2VTY2FsZURlbHRhXSAqIFRyW29yaWdpbjJhbmNob3Jd
ICogTVtsYXllcl0gKiBUclthbmNob3IyY2VudGVyXQogICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0u
dHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwgLWxheWVyLT5hbmNob3JQ
b2ludFooKSk7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybSA9
IHBhcmVudE1hdHJpeDsKLSAgICBjb21iaW5lZFRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3Jt
Lm11bHRpcGx5KGxheWVyTG9jYWxUcmFuc2Zvcm0pOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggY29tYmluZWRUcmFuc2Zvcm0gPSBwYXJlbnRNYXRyaXg7CisgICAgY29tYmlu
ZWRUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXJMb2NhbFRyYW5zZm9ybSk7CiAKICAgICBib29sIGFu
aW1hdGluZ1RyYW5zZm9ybVRvVGFyZ2V0ID0gbGF5ZXItPnRyYW5zZm9ybUlzQW5pbWF0aW5nKCk7
CiAgICAgYm9vbCBhbmltYXRpbmdUcmFuc2Zvcm1Ub1NjcmVlbiA9IGFuaW1hdGluZ1RyYW5zZm9y
bVRvVGFyZ2V0OwpAQCAtMzc2LDcgKzM3Niw3IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdU
cmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAK
ICAgICAvLyBmdWxsSGllcmFyY2h5TWF0cml4IGlzIHRoZSBtYXRyaXggdGhhdCB0cmFuc2Zvcm1z
IG9iamVjdHMgYmV0d2VlbiBzY3JlZW4gc3BhY2UgKGV4Y2VwdCBwcm9qZWN0aW9uIG1hdHJpeCkg
YW5kIHRoZSBtb3N0IHJlY2VudCBSZW5kZXJTdXJmYWNlJ3Mgc3BhY2UuCiAgICAgLy8gbmV4dEhp
ZXJhcmNoeU1hdHJpeCB3aWxsIG9ubHkgY2hhbmdlIGlmIHRoaXMgbGF5ZXIgdXNlcyBhIG5ldyBS
ZW5kZXJTdXJmYWNlLCBvdGhlcndpc2UgcmVtYWlucyB0aGUgc2FtZS4KLSAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBuZXh0SGllcmFyY2h5TWF0cml4ID0gZnVsbEhpZXJhcmNoeU1hdHJpeDsKKyAg
ICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG5leHRIaWVyYXJjaHlNYXRyaXggPSBm
dWxsSGllcmFyY2h5TWF0cml4OwogCiAgICAgLy8gRklYTUU6IFRoaXMgc2VlbXMgbGlrZSB0aGUg
d3JvbmcgcGxhY2UgdG8gc2V0IHRoaXMKICAgICBsYXllci0+c2V0VXNlc0xheWVyQ2xpcHBpbmco
ZmFsc2UpOwpAQCAtMzg5LDcgKzM4OSw3IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAgICAg
ICAgIHJlbmRlclN1cmZhY2UtPmNsZWFyTGF5ZXJMaXN0KCk7CiAKICAgICAgICAgLy8gVGhlIG9y
aWdpbiBvZiB0aGUgbmV3IHN1cmZhY2UgaXMgdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBs
YXllci4KLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybTsKKyAgICAg
ICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3VHJhbnNmb3JtOwogICAgICAg
ICBkcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKDAuNSAqIGJvdW5kcy53aWR0aCgpLCAwLjUgKiBi
b3VuZHMuaGVpZ2h0KCksIDApOwogICAgICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3
VHJhbnNmb3JtKTsKIApAQCAtNDAxLDcgKzQwMSw3IEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVy
CiAgICAgICAgIGxheWVyLT5zZXREcmF3T3BhY2l0eSgxKTsKICAgICAgICAgbGF5ZXItPnNldERy
YXdPcGFjaXR5SXNBbmltYXRpbmcoZmFsc2UpOwogCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybTsKKyAgICAgICAg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdXJmYWNlT3JpZ2luVHJhbnNmb3JtID0g
Y29tYmluZWRUcmFuc2Zvcm07CiAgICAgICAgIHN1cmZhY2VPcmlnaW5UcmFuc2Zvcm0udHJhbnNs
YXRlM2QoLTAuNSAqIGJvdW5kcy53aWR0aCgpLCAtMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsK
ICAgICAgICAgcmVuZGVyU3VyZmFjZS0+c2V0T3JpZ2luVHJhbnNmb3JtKHN1cmZhY2VPcmlnaW5U
cmFuc2Zvcm0pOwogCkBAIC00NzcsNyArNDc3LDcgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJh
d1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIK
IAogICAgIC8vIE5vdGUgdGhhdCBhdCB0aGlzIHBvaW50LCBsYXllci0+ZHJhd1RyYW5zZm9ybSgp
IGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyBsb2NhbCB2YXJpYWJsZSBkcmF3VHJhbnNm
b3JtLgogICAgIC8vIGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gcmVwcmVzZW50cyB0aGUgdHJh
bnNmb3JtIGJldHdlZW4gcm9vdCBsYXllcidzICJzY3JlZW4gc3BhY2UiIGFuZCBsb2NhbCBsYXll
ciBzcGFjZS4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclNjcmVlblNwYWNlVHJhbnNm
b3JtID0gbmV4dEhpZXJhcmNoeU1hdHJpeDsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBuZXh0SGllcmFyY2h5TWF0cml4Owog
ICAgIGxheWVyU2NyZWVuU3BhY2VUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXItPmRyYXdUcmFuc2Zv
cm0oKSk7CiAgICAgbGF5ZXJTY3JlZW5TcGFjZVRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMC41ICog
Ym91bmRzLndpZHRoKCksIC0wLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOwogICAgIGxheWVyLT5z
ZXRTY3JlZW5TcGFjZVRyYW5zZm9ybShsYXllclNjcmVlblNwYWNlVHJhbnNmb3JtKTsKQEAgLTQ5
Miw3ICs0OTIsNyBAQCBzdGF0aWMgYm9vbCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHlJbnRlcm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgIH0gZWxzZQogICAgICAg
ICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KCkpOwogCi0gICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggc3VibGF5ZXJNYXRyaXggPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOwor
ICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJNYXRyaXggPSBsYXll
ci0+ZHJhd1RyYW5zZm9ybSgpOwogCiAgICAgLy8gRmxhdHRlbiB0byAyRCBpZiB0aGUgbGF5ZXIg
ZG9lc24ndCBwcmVzZXJ2ZSAzRC4KICAgICBpZiAoIWxheWVyLT5wcmVzZXJ2ZXMzRCgpKSB7CkBA
IC01NzgsNyArNTc4LDcgQEAgc3RhdGljIGJvb2wgY2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRW
aXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKICAgICAgICAgbGF5ZXIt
PnNldENsaXBSZWN0KGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwogCiAgICAgICAgIC8v
IEFkanVzdCB0aGUgb3JpZ2luIG9mIHRoZSB0cmFuc2Zvcm0gdG8gYmUgdGhlIGNlbnRlciBvZiB0
aGUgcmVuZGVyIHN1cmZhY2UuCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRyYXdUcmFu
c2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICAgICAgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3VHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZS0+
b3JpZ2luVHJhbnNmb3JtKCk7CiAgICAgICAgIGRyYXdUcmFuc2Zvcm0udHJhbnNsYXRlM2Qoc3Vy
ZmFjZUNlbnRlci54KCkgKyBjZW50ZXJPZmZzZXREdWVUb0NsaXBwaW5nLndpZHRoKCksIHN1cmZh
Y2VDZW50ZXIueSgpICsgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZy5oZWlnaHQoKSwgMCk7CiAg
ICAgICAgIHJlbmRlclN1cmZhY2UtPnNldERyYXdUcmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSk7CiAK
QEAgLTU4NywyMyArNTg3LDIzIEBAIHN0YXRpYyBib29sIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eUludGVybmFsKExheWVyVHlwZSogbGF5ZXIsIExheWVyCiAKICAgICAgICAg
aWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewogICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUg
dHJhbnNmb3JtYXRpb24gbWF0cml4IHVzZWQgdG8gZHJhdyB0aGUgc3VyZmFjZSdzIHJlcGxpY2Eg
dG8gdGhlIHRhcmdldCBzdXJmYWNlLgotICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
cmVwbGljYURyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsK
KyAgICAgICAgICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYURyYXdU
cmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKICAgICAgICAgICAg
IHJlcGxpY2FEcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZShsYXllci0+cmVwbGljYUxheWVyKCktPnBv
c2l0aW9uKCkueCgpLCBsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgpKTsKICAg
ICAgICAgICAgIHJlcGxpY2FEcmF3VHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT5yZXBsaWNhTGF5
ZXIoKS0+dHJhbnNmb3JtKCkpOwogICAgICAgICAgICAgcmVwbGljYURyYXdUcmFuc2Zvcm0udHJh
bnNsYXRlKHN1cmZhY2VDZW50ZXIueCgpIC0gYW5jaG9yUG9pbnQueCgpICogYm91bmRzLndpZHRo
KCksIHN1cmZhY2VDZW50ZXIueSgpIC0gYW5jaG9yUG9pbnQueSgpICogYm91bmRzLmhlaWdodCgp
KTsKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFJlcGxpY2FEcmF3VHJhbnNmb3JtKHJl
cGxpY2FEcmF3VHJhbnNmb3JtKTsKIAotICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
c3VyZmFjZU9yaWdpblRvUmVwbGljYU9yaWdpblRyYW5zZm9ybTsKKyAgICAgICAgICAgIFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggc3VyZmFjZU9yaWdpblRvUmVwbGljYU9yaWdpblRy
YW5zZm9ybTsKICAgICAgICAgICAgIHN1cmZhY2VPcmlnaW5Ub1JlcGxpY2FPcmlnaW5UcmFuc2Zv
cm0udHJhbnNsYXRlKGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54KCksIGxheWVy
LT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS55KCkpOwogICAgICAgICAgICAgc3VyZmFjZU9y
aWdpblRvUmVwbGljYU9yaWdpblRyYW5zZm9ybS5tdWx0aXBseShsYXllci0+cmVwbGljYUxheWVy
KCktPnRyYW5zZm9ybSgpKTsKICAgICAgICAgICAgIHN1cmZhY2VPcmlnaW5Ub1JlcGxpY2FPcmln
aW5UcmFuc2Zvcm0udHJhbnNsYXRlKC1hbmNob3JQb2ludC54KCkgKiBib3VuZHMud2lkdGgoKSwg
LWFuY2hvclBvaW50LnkoKSAqIGJvdW5kcy5oZWlnaHQoKSk7CiAKICAgICAgICAgICAgIC8vIENv
bXB1dGUgdGhlIHJlcGxpY2EncyAib3JpZ2luVHJhbnNmb3JtIiB0aGF0IG1hcHMgZnJvbSB0aGUg
cmVwbGljYSdzIG9yaWdpbiBzcGFjZSB0byB0aGUgdGFyZ2V0IHN1cmZhY2Ugb3JpZ2luIHNwYWNl
LgotICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYU9yaWdpblRyYW5zZm9y
bSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpICogc3VyZmFjZU9y
aWdpblRvUmVwbGljYU9yaWdpblRyYW5zZm9ybTsKKyAgICAgICAgICAgIFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggcmVwbGljYU9yaWdpblRyYW5zZm9ybSA9IGxheWVyLT5yZW5kZXJT
dXJmYWNlKCktPm9yaWdpblRyYW5zZm9ybSgpICogc3VyZmFjZU9yaWdpblRvUmVwbGljYU9yaWdp
blRyYW5zZm9ybTsKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPnNldFJlcGxpY2FPcmlnaW5U
cmFuc2Zvcm0ocmVwbGljYU9yaWdpblRyYW5zZm9ybSk7CiAKICAgICAgICAgICAgIC8vIENvbXB1
dGUgdGhlIHJlcGxpY2EncyAic2NyZWVuU3BhY2VUcmFuc2Zvcm0iIHRoYXQgbWFwcyBmcm9tIHRo
ZSByZXBsaWNhJ3Mgb3JpZ2luIHNwYWNlIHRvIHRoZSBzY3JlZW4ncyBvcmlnaW4gc3BhY2UuCi0g
ICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zv
cm0gPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpICogc3Vy
ZmFjZU9yaWdpblRvUmVwbGljYU9yaWdpblRyYW5zZm9ybTsKKyAgICAgICAgICAgIFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtID0gbGF5
ZXItPnJlbmRlclN1cmZhY2UoKS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSAqIHN1cmZhY2VPcmln
aW5Ub1JlcGxpY2FPcmlnaW5UcmFuc2Zvcm07CiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5z
ZXRSZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0ocmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3Jt
KTsKICAgICAgICAgfQogCkBAIC02NTYsMTMgKzY1NiwxMyBAQCBzdGF0aWMgdm9pZCB3YWxrTGF5
ZXJzQW5kQ2FsY3VsYXRlVmlzaWJsZUxheWVyUmVjdHMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYQogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURy
YXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShMYXllckNocm9taXVtKiBsYXllciwgTGF5ZXJDaHJv
bWl1bSogcm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8
UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyTGlzdCwgaW50IG1heFRleHR1cmVTaXplKQor
dm9pZCBDQ0xheWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlz
aWJpbGl0eShMYXllckNocm9taXVtKiBsYXllciwgTGF5ZXJDaHJvbWl1bSogcm9vdExheWVyLCBj
b25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3QsIGludCBtYXhUZXh0dXJlU2l6
ZSkKIHsKICAgICBXZWJDb3JlOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJ
bnRlcm5hbDxMYXllckNocm9taXVtLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4sIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSwgdm9pZD4obGF5ZXIsIHJvb3RMYXllciwgcGFyZW50TWF0cml4
LCBmdWxsSGllcmFyY2h5TWF0cml4LCAwLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxp
c3QsIDAsIG1heFRleHR1cmVTaXplKTsKICAgICB3YWxrTGF5ZXJzQW5kQ2FsY3VsYXRlVmlzaWJs
ZUxheWVyUmVjdHM8TGF5ZXJDaHJvbWl1bSwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+
LCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0+KHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogfQogCi12
b2lkIENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNp
YmlsaXR5KENDTGF5ZXJJbXBsKiBsYXllciwgQ0NMYXllckltcGwqIHJvb3RMYXllciwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0LCBDQ0xheWVy
U29ydGVyKiBsYXllclNvcnRlciwgaW50IG1heFRleHR1cmVTaXplKQordm9pZCBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xheWVy
SW1wbCogbGF5ZXIsIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4m
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBsYXllckxpc3Qs
IENDTGF5ZXJTb3J0ZXIqIGxheWVyU29ydGVyLCBpbnQgbWF4VGV4dHVyZVNpemUpCiB7CiAgICAg
Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWw8Q0NMYXllckltcGws
IFZlY3RvcjxDQ0xheWVySW1wbCo+LCBDQ1JlbmRlclN1cmZhY2UsIENDTGF5ZXJTb3J0ZXI+KGxh
eWVyLCByb290TGF5ZXIsIHBhcmVudE1hdHJpeCwgZnVsbEhpZXJhcmNoeU1hdHJpeCwgMCwgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LCBsYXllclNvcnRlciwgbWF4VGV4dHVyZVNp
emUpOwogICAgIHdhbGtMYXllcnNBbmRDYWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0czxDQ0xheWVy
SW1wbCwgVmVjdG9yPENDTGF5ZXJJbXBsKj4sIENDUmVuZGVyU3VyZmFjZT4ocmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCmluZGV4
IDM3NjJmNjRiMTliMzEzNDk5OGU0MGI0NDc2MzhhMjQ2ZjEyNDhiYmIuLjY3Yjc4NDI4MmIyNGI2
YmMwZmI1NGE3ZGJjMzdiZWRjMjIwNWNkMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAj
aW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisj
aW5jbHVkZSAiV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC0zOSwxMCArMzksMTAgQEAgY2xhc3Mg
TGF5ZXJDaHJvbWl1bTsKIAogY2xhc3MgQ0NMYXllclRyZWVIb3N0Q29tbW9uIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgSW50UmVjdCBjYWxjdWxhdGVWaXNpYmxlUmVjdChjb25zdCBJbnRSZWN0JiB0
YXJnZXRTdXJmYWNlUmVjdCwgY29uc3QgSW50UmVjdCYgbGF5ZXJCb3VuZFJlY3QsIGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgc3RhdGljIEludFJlY3QgY2FsY3VsYXRlVmlzaWJs
ZVJlY3QoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QsIGNvbnN0IEludFJlY3QmIGxh
eWVyQm91bmRSZWN0LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAK
LSAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5
ZXJDaHJvbWl1bSosIExheWVyQ2hyb21pdW0qIHJvb3RMYXllciwgY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGZ1bGxI
aWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckxpc3Qs
IGludCBtYXhUZXh0dXJlU2l6ZSk7Ci0gICAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5KENDTGF5ZXJJbXBsKiwgQ0NMYXllckltcGwqIHJvb3RMYXllciwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGZ1bGxIaWVyYXJjaHlNYXRyaXgsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8Q0NMYXllckltcGwqPiYgbGF5ZXJMaXN0LCBD
Q0xheWVyU29ydGVyKiwgaW50IG1heFRleHR1cmVTaXplKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxj
dWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoTGF5ZXJDaHJvbWl1bSosIExheWVyQ2hy
b21pdW0qIHJvb3RMYXllciwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
cGFyZW50TWF0cml4LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmdWxs
SGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJMaXN0
LCBpbnQgbWF4VGV4dHVyZVNpemUpOworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFu
c2Zvcm1zQW5kVmlzaWJpbGl0eShDQ0xheWVySW1wbCosIENDTGF5ZXJJbXBsKiByb290TGF5ZXIs
IGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgY29u
c3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwg
VmVjdG9yPENDTGF5ZXJJbXBsKj4mIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIFZlY3RvcjxDQ0xh
eWVySW1wbCo+JiBsYXllckxpc3QsIENDTGF5ZXJTb3J0ZXIqLCBpbnQgbWF4VGV4dHVyZVNpemUp
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGF5ZXJUeXBlPiBzdGF0aWMgYm9vbCByZW5kZXJT
dXJmYWNlQ29udHJpYnV0ZXNUb1RhcmdldChMYXllclR5cGUqLCBpbnQgdGFyZ2V0U3VyZmFjZUxh
eWVySUQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IGI1
ZDllYjQ2ZmY0ODMzMTBkOGFlZTg0NzNhZjQ2MmM0Zjk0YTA4YWYuLmJhZjU2ODljYjVjNjVhMWVh
N2Q0OGQzZTM4YTUyMjRkNzBiMGJmYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuY3BwCkBAIC0yMjcsNyArMjI3LDcgQEAgc3RhdGljIEZsb2F0UmVjdCBkYW1hZ2VJblN1
cmZhY2VTcGFjZShDQ0xheWVySW1wbCogcmVuZGVyU3VyZmFjZUxheWVyLCBjb25zdCBGbG8KICAg
ICBGbG9hdFJlY3Qgc3VyZmFjZURhbWFnZVJlY3Q7CiAgICAgLy8gRm9yIG5vdywgd2UgY29uc2Vy
dmF0aXZlbHkgdXNlIHRoZSByb290IGRhbWFnZSBhcyB0aGUgZGFtYWdlIGZvcgogICAgIC8vIGFs
bCBzdXJmYWNlcywgZXhjZXB0IHBlcnNwZWN0aXZlIHRyYW5zZm9ybXMuCi0gICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHNjcmVlblNwYWNlVHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZUxh
eWVyLT5yZW5kZXJTdXJmYWNlKCktPnNjcmVlblNwYWNlVHJhbnNmb3JtKCk7CisgICAgY29uc3Qg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBy
ZW5kZXJTdXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0o
KTsKICAgICBpZiAoc2NyZWVuU3BhY2VUcmFuc2Zvcm0uaGFzUGVyc3BlY3RpdmUoKSkgewogICAg
ICAgICAvLyBQZXJzcGVjdGl2ZSBwcm9qZWN0aW9ucyBkbyBub3QgcGxheSBuaWNlIHdpdGggbWFw
UmVjdCBvZgogICAgICAgICAvLyBpbnZlcnNlIHRyYW5zZm9ybXMuIEluIHRoaXMgdW5jb21tb24g
Y2FzZSwgaXRzIHNpbXBsZXIgdG8KQEAgLTIzNiw3ICsyMzYsNyBAQCBzdGF0aWMgRmxvYXRSZWN0
IGRhbWFnZUluU3VyZmFjZVNwYWNlKENDTGF5ZXJJbXBsKiByZW5kZXJTdXJmYWNlTGF5ZXIsIGNv
bnN0IEZsbwogICAgICAgICBDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UgPSByZW5kZXJT
dXJmYWNlTGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICAgICAgc3VyZmFjZURhbWFnZVJlY3Qg
PSByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdCgpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGludmVyc2VTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHNjcmVlblNw
YWNlVHJhbnNmb3JtLmludmVyc2UoKTsKKyAgICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBpbnZlcnNlU2NyZWVuU3BhY2VUcmFuc2Zvcm0gPSBzY3JlZW5TcGFjZVRyYW5zZm9y
bS5pbnZlcnNlKCk7CiAgICAgICAgIHN1cmZhY2VEYW1hZ2VSZWN0ID0gaW52ZXJzZVNjcmVlblNw
YWNlVHJhbnNmb3JtLm1hcFJlY3Qocm9vdERhbWFnZVJlY3QpOwogICAgIH0KICAgICByZXR1cm4g
c3VyZmFjZURhbWFnZVJlY3Q7CkBAIC0yNTYsNyArMjU2LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpjYWxjdWxhdGVSZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KENDTGF5ZXJMaXN0JiByZW5k
ZXJTdXIKICAgICBtX3Jvb3RMYXllckltcGwtPnNldENsaXBSZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgdmlld3BvcnRTaXplKCkpKTsKIAogICAgIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHlNYXRyaXg7CisgICAgICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggaWRlbnRpdHlNYXRyaXg7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJDQ0xheWVyVHJlZUhvc3RJ
bXBsOjpjYWxjRHJhd0V0YyIsIHRoaXMsIDApOwogICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21t
b246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShtX3Jvb3RMYXllckltcGwu
Z2V0KCksIG1fcm9vdExheWVySW1wbC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0
cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX3Jvb3RMYXllckltcGwtPnJlbmRlclN1cmZh
Y2UoKS0+bGF5ZXJMaXN0KCksICZtX2xheWVyU29ydGVyLCBsYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzKCkubWF4VGV4dHVyZVNpemUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaAppbmRleCA4ZjE2ZjlmZDQwNjQ3ZTlhNTNjYTgxZWY2YmFhZTY3OTcyY2M0MjlkLi5k
MDlhZThkOWIxZTRkYWNjYmY4NDRhMWNlZGIwNGU1YTgwZmQyYmY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJ
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0zNiw2ICszNiw4IEBACiAjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKK2NsYXNzIFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXg7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NB
Y3RpdmVHZXN0dXJlQW5pbWF0aW9uOwpAQCAtNTAsNyArNTIsNiBAQCBjbGFzcyBDQ0xheWVyVHJl
ZUhvc3RJbXBsVGltZVNvdXJjZUFkYXB0ZXI7CiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW07
CiBjbGFzcyBUZXh0dXJlQWxsb2NhdG9yOwogc3RydWN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXM7Ci1jbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogLy8gQ0NMYXllclRyZWVIb3N0LT5D
Q1Byb3h5IGNhbGxiYWNrIGludGVyZmFjZS4KIGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxDbGll
bnQgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NNYXRoVXRpbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ01hdGhVdGlsLmNwcAppbmRleCA0MjkzMzY4OGJiZDM2N2E0NjQ1Y2NlNDA5
Y2IyYWUzMDJiNDExYTIwLi43YTRjYzRhMzU2YWI1ZjJmMjM3MDhjNGI4NTkyY2FjNTFiZjA4OTJl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ01hdGhVdGlsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ01hdGhVdGlsLmNwcApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkZs
b2F0UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJJbnRSZWN0Lmgi
Ci0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTY0LDcgKzY0LDcg
QEAgc3RydWN0IEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSB7CiAgICAgZG91YmxlIHc7CiB9OwogCi1z
dGF0aWMgSG9tb2dlbmVvdXNDb29yZGluYXRlIHByb2plY3RQb2ludChjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwKQorc3RhdGljIEhvbW9n
ZW5lb3VzQ29vcmRpbmF0ZSBwcm9qZWN0UG9pbnQoY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwKQogewogICAgIC8vIElu
IHRoaXMgY2FzZSwgdGhlIGxheWVyIHdlIGFyZSB0cnlpbmcgdG8gcHJvamVjdCBvbnRvIGlzIHBl
cnBlbmRpY3VsYXIgdG8gcmF5CiAgICAgLy8gKHBvaW50IHAgYW5kIHotYXhpcyBkaXJlY3Rpb24p
IHRoYXQgd2UgYXJlIHRyeWluZyB0byBwcm9qZWN0LiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUKQEAg
LTg2LDcgKzg2LDcgQEAgc3RhdGljIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBwcm9qZWN0UG9pbnQo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwKICAgICByZXR1cm4gSG9tb2dl
bmVvdXNDb29yZGluYXRlKG91dFgsIG91dFksIG91dFosIG91dFcpOwogfQogCi1zdGF0aWMgSG9t
b2dlbmVvdXNDb29yZGluYXRlIG1hcFBvaW50KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIHApCitzdGF0aWMgSG9tb2dlbmVvdXNDb29yZGlu
YXRlIG1hcFBvaW50KGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcCkKIHsKICAgICBkb3VibGUgeCA9IHAueCgpOwogICAg
IGRvdWJsZSB5ID0gcC55KCk7CkBAIC0xOTMsMTIgKzE5MywxMiBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgYWRkVmVydGV4VG9DbGlwcGVkUXVhZChjb25zdCBGbG9hdFBvaW50JiBuZXdWZXJ0ZXgsIEZs
b2F0UG9pbgogICAgIG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCsrOwogfQogCi1JbnRSZWN0IEND
TWF0aFV0aWw6Om1hcENsaXBwZWRSZWN0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFu
c2Zvcm0sIGNvbnN0IEludFJlY3QmIHNyY1JlY3QpCitJbnRSZWN0IENDTWF0aFV0aWw6Om1hcENs
aXBwZWRSZWN0KGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bSwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCkKIHsKICAgICByZXR1cm4gZW5jbG9zaW5nSW50UmVj
dChtYXBDbGlwcGVkUmVjdCh0cmFuc2Zvcm0sIEZsb2F0UmVjdChzcmNSZWN0KSkpOwogfQogCi1G
bG9hdFJlY3QgQ0NNYXRoVXRpbDo6bWFwQ2xpcHBlZFJlY3QoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KQorRmxvYXRSZWN0IEND
TWF0aFV0aWw6Om1hcENsaXBwZWRSZWN0KGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KQogewogICAgIGlmICh0
cmFuc2Zvcm0uaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSkgewogICAgICAgICBGbG9hdFJlY3Qg
bWFwcGVkUmVjdChzcmNSZWN0KTsKQEAgLTIxNiw3ICsyMTYsNyBAQCBGbG9hdFJlY3QgQ0NNYXRo
VXRpbDo6bWFwQ2xpcHBlZFJlY3QoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bSwgY29ucwogICAgIHJldHVybiBjb21wdXRlRW5jbG9zaW5nUmVjdChoMSwgaDIsIGgzLCBoNCk7
CiB9CiAKLUZsb2F0UmVjdCBDQ01hdGhVdGlsOjpwcm9qZWN0Q2xpcHBlZFJlY3QoY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0KQor
RmxvYXRSZWN0IENDTWF0aFV0aWw6OnByb2plY3RDbGlwcGVkUmVjdChjb25zdCBXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCkKIHsKICAgICAvLyBQZXJmb3JtIHRoZSBwcm9qZWN0aW9uLCBidXQgcmV0YWluIHRoZSByZXN1
bHQgaW4gaG9tb2dlbmVvdXMgY29vcmRpbmF0ZXMuCiAgICAgRmxvYXRRdWFkIHEgPSBGbG9hdFF1
YWQoRmxvYXRSZWN0KHNyY1JlY3QpKTsKQEAgLTIyOCw3ICsyMjgsNyBAQCBGbG9hdFJlY3QgQ0NN
YXRoVXRpbDo6cHJvamVjdENsaXBwZWRSZWN0KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0sCiAgICAgcmV0dXJuIGNvbXB1dGVFbmNsb3NpbmdSZWN0KGgxLCBoMiwgaDMsIGg0
KTsKIH0KIAotdm9pZCBDQ01hdGhVdGlsOjptYXBDbGlwcGVkUXVhZChjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFF1YWQmIHNyY1F1YWQsIEZsb2F0UG9p
bnQgY2xpcHBlZFF1YWRbOF0sIGludCYgbnVtVmVydGljZXNJbkNsaXBwZWRRdWFkKQordm9pZCBD
Q01hdGhVdGlsOjptYXBDbGlwcGVkUXVhZChjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UXVhZCYgc3JjUXVhZCwgRmxvYXRQb2ludCBj
bGlwcGVkUXVhZFs4XSwgaW50JiBudW1WZXJ0aWNlc0luQ2xpcHBlZFF1YWQpCiB7CiAgICAgSG9t
b2dlbmVvdXNDb29yZGluYXRlIGgxID0gbWFwUG9pbnQodHJhbnNmb3JtLCBzcmNRdWFkLnAxKCkp
OwogICAgIEhvbW9nZW5lb3VzQ29vcmRpbmF0ZSBoMiA9IG1hcFBvaW50KHRyYW5zZm9ybSwgc3Jj
UXVhZC5wMigpKTsKQEAgLTI4Miw3ICsyODIsNyBAQCBGbG9hdFJlY3QgQ0NNYXRoVXRpbDo6Y29t
cHV0ZUVuY2xvc2luZ1JlY3RPZlZlcnRpY2VzKEZsb2F0UG9pbnQgdmVydGljZXNbXSwgaW50CiAg
ICAgcmV0dXJuIEZsb2F0UmVjdChGbG9hdFBvaW50KHhtaW4sIHltaW4pLCBGbG9hdFNpemUoeG1h
eCAtIHhtaW4sIHltYXggLSB5bWluKSk7CiB9CiAKLUZsb2F0UXVhZCBDQ01hdGhVdGlsOjptYXBR
dWFkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UXVh
ZCYgcSwgYm9vbCYgY2xpcHBlZCkKK0Zsb2F0UXVhZCBDQ01hdGhVdGlsOjptYXBRdWFkKGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRR
dWFkJiBxLCBib29sJiBjbGlwcGVkKQogewogICAgIGlmICh0cmFuc2Zvcm0uaXNJZGVudGl0eU9y
VHJhbnNsYXRpb24oKSkgewogICAgICAgICBGbG9hdFF1YWQgbWFwcGVkUXVhZChxKTsKQEAgLTMw
Miw3ICszMDIsNyBAQCBGbG9hdFF1YWQgQ0NNYXRoVXRpbDo6bWFwUXVhZChjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdAogICAgIHJldHVybiBGbG9hdFF1
YWQoaDEuY2FydGVzaWFuUG9pbnQyZCgpLCBoMi5jYXJ0ZXNpYW5Qb2ludDJkKCksIGgzLmNhcnRl
c2lhblBvaW50MmQoKSwgaDQuY2FydGVzaWFuUG9pbnQyZCgpKTsKIH0KIAotRmxvYXRRdWFkIEND
TWF0aFV0aWw6OnByb2plY3RRdWFkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UXVhZCYgcSwgYm9vbCYgY2xpcHBlZCkKK0Zsb2F0UXVhZCBDQ01hdGhV
dGlsOjpwcm9qZWN0UXVhZChjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UXVhZCYgcSwgYm9vbCYgY2xpcHBlZCkKIHsKICAgICBGbG9h
dFF1YWQgcHJvamVjdGVkUXVhZDsKICAgICBib29sIGNsaXBwZWRQb2ludDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWF0aFV0aWwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTWF0aFV0
aWwuaAppbmRleCAzOTg2MDRkOWE3NDVmMDM3ODA1ZDI1YWEwNDBjYzU5YzFmMjcwOTZlLi5kZDdi
MTViMmE4NDBmMDY2ZGM4NmIxMTJlMzBkY2M0OTZkNzhiMTUwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ01hdGhVdGlsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NNYXRoVXRpbC5o
CkBAIC0yNSwyMCArMjUsMjMgQEAKICNpZm5kZWYgQ0NNYXRoVXRpbF9oCiAjZGVmaW5lIENDTWF0
aFV0aWxfaAogCituYW1lc3BhY2UgV2ViS2l0IHsKK2NsYXNzIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4OworfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEludFJlY3Q7CiBjbGFzcyBG
bG9hdFBvaW50OwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgRmxvYXRRdWFkOwotY2xhc3MgVHJh
bnNmb3JtYXRpb25NYXRyaXg7CiAKIC8vIFRoaXMgY2xhc3MgY29udGFpbnMgbWF0aCBoZWxwZXIg
ZnVuY3Rpb25hbGl0eSB0aGF0IGRvZXMgbm90IGJlbG9uZyBpbiBXZWJDb3JlLgogLy8gSXQgaXMg
cG9zc2libGUgdGhhdCB0aGlzIGZ1bmN0aW9uYWxpdHkgc2hvdWxkIGJlIG1pZ3JhdGVkIHRvIFdl
YkNvcmUgZXZlbnR1YWxseS4KIGNsYXNzIENDTWF0aFV0aWwgewogcHVibGljOgogCi0gICAgLy8g
QmFja2dyb3VuZDogVHJhbnNmb3JtYXRpb25NYXRyaXggY29kZSBpbiBXZWJDb3JlIGRvZXMgbm90
IGRvIHRoZSByaWdodCB0aGluZyBpbgorICAgIC8vIEJhY2tncm91bmQ6IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggY29kZSBpbiBXZWJDb3JlIGRvZXMgbm90IGRvIHRoZSByaWdodCB0
aGluZyBpbgogICAgIC8vIG1hcFJlY3QgLyBtYXBRdWFkIC8gcHJvamVjdFF1YWQgd2hlbiB0aGVy
ZSBpcyBhIHBlcnNwZWN0aXZlIHByb2plY3Rpb24gdGhhdCBjYXVzZXMKICAgICAvLyBvbmUgb2Yg
dGhlIHRyYW5zZm9ybWVkIHZlcnRpY2VzIHRvIGdvIHRvIHcgPCAwLiBJbiB0aG9zZSBjYXNlcywg
aXQgaXMgbmVjZXNzYXJ5IHRvCiAgICAgLy8gcGVyZm9ybSBjbGlwcGluZyBpbiBob21vZ2VuZW91
cyBjb29yZGluYXRlcywgYWZ0ZXIgYXBwbHlpbmcgdGhlIHRyYW5zZm9ybSwgYmVmb3JlCkBAIC00
NiwyMSArNDksMjEgQEAgcHVibGljOgogICAgIC8vCiAgICAgLy8gVGhlc2UgZnVuY3Rpb25zIHJl
dHVybiB0aGUgYXhpcy1hbGlnbmVkIHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgY29ycmVjdGx5IGNs
aXBwZWQsCiAgICAgLy8gdHJhbnNmb3JtZWQgcG9seWdvbi4KLSAgICBzdGF0aWMgSW50UmVjdCBt
YXBDbGlwcGVkUmVjdChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGNvbnN0IEludFJlY3Qm
KTsKLSAgICBzdGF0aWMgRmxvYXRSZWN0IG1hcENsaXBwZWRSZWN0KGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgc3RhdGljIEZsb2F0UmVjdCBwcm9q
ZWN0Q2xpcHBlZFJlY3QoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFJl
Y3QmKTsKKyAgICBzdGF0aWMgSW50UmVjdCBtYXBDbGlwcGVkUmVjdChjb25zdCBXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgSW50UmVjdCYpOworICAgIHN0YXRpYyBGbG9h
dFJlY3QgbWFwQ2xpcHBlZFJlY3QoY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGNvbnN0IEZsb2F0UmVjdCYpOworICAgIHN0YXRpYyBGbG9hdFJlY3QgcHJvamVjdENsaXBw
ZWRSZWN0KGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9h
dFJlY3QmKTsKIAogICAgIC8vIFJldHVybnMgYW4gYXJyYXkgb2YgdmVydGljZXMgdGhhdCByZXBy
ZXNlbnQgdGhlIGNsaXBwZWQgcG9seWdvbi4gQWZ0ZXIgcmV0dXJuaW5nLCBpbmRleGVzIGZyb20K
ICAgICAvLyAwIHRvIG51bVZlcnRpY2VzSW5DbGlwcGVkUXVhZCBhcmUgdmFsaWQgaW4gdGhlIGNs
aXBwZWRRdWFkIGFycmF5LiBOb3RlIHRoYXQKICAgICAvLyBudW1WZXJ0aWNlc0luQ2xpcHBlZFF1
YWQgbWF5IGJlIHplcm8sIHdoaWNoIG1lYW5zIHRoZSBlbnRpcmUgcXVhZCB3YXMgY2xpcHBlZCwg
YW5kCiAgICAgLy8gbm9uZSBvZiB0aGUgdmVydGljZXMgaW4gdGhlIGFycmF5IGFyZSB2YWxpZC4K
LSAgICBzdGF0aWMgdm9pZCBtYXBDbGlwcGVkUXVhZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYsIGNvbnN0IEZsb2F0UXVhZCYgc3JjUXVhZCwgRmxvYXRQb2ludCBjbGlwcGVkUXVhZFs4XSwg
aW50JiBudW1WZXJ0aWNlc0luQ2xpcHBlZFF1YWQpOworICAgIHN0YXRpYyB2b2lkIG1hcENsaXBw
ZWRRdWFkKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9h
dFF1YWQmIHNyY1F1YWQsIEZsb2F0UG9pbnQgY2xpcHBlZFF1YWRbOF0sIGludCYgbnVtVmVydGlj
ZXNJbkNsaXBwZWRRdWFkKTsKICAgICBzdGF0aWMgRmxvYXRSZWN0IGNvbXB1dGVFbmNsb3NpbmdS
ZWN0T2ZWZXJ0aWNlcyhGbG9hdFBvaW50IHZlcnRpY2VzW10sIGludCBudW1WZXJ0aWNlcyk7CiAK
ICAgICAvLyBOT1RFOiBUaGVzZSBmdW5jdGlvbnMgZG8gbm90IGRvIGNvcnJlY3QgY2xpcHBpbmcg
YWdhaW5zdCB3ID0gMCBwbGFuZSwgYnV0IHRoZXkKICAgICAvLyBjb3JyZWN0bHkgZGV0ZWN0IHRo
ZSBjbGlwcGVkIGNvbmRpdGlvbiB2aWEgdGhlIGJvb2xlYW4gY2xpcHBlZC4KLSAgICBzdGF0aWMg
RmxvYXRRdWFkIG1hcFF1YWQoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9h
dFF1YWQmLCBib29sJiBjbGlwcGVkKTsKLSAgICBzdGF0aWMgRmxvYXRRdWFkIHByb2plY3RRdWFk
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiwgY29uc3QgRmxvYXRRdWFkJiwgYm9vbCYgY2xp
cHBlZCk7CisgICAgc3RhdGljIEZsb2F0UXVhZCBtYXBRdWFkKGNvbnN0IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFF1YWQmLCBib29sJiBjbGlwcGVkKTsKKyAg
ICBzdGF0aWMgRmxvYXRRdWFkIHByb2plY3RRdWFkKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmLCBjb25zdCBGbG9hdFF1YWQmLCBib29sJiBjbGlwcGVkKTsKIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIuY3Bw
CmluZGV4IDc5MmY4NjI5YTNiYzMyOWI2OGY4Mzk4Yzc1N2Q1OWExYTZmMmUxMjcuLjcwMmQxZTQz
YTI2YTk1MjdmNzA5MWU3ZTdlN2EyODkxZTk5YmM2NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2Ns
dXNpb25UcmFja2VyLmNwcApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgQ0NPY2NsdXNpb25UcmFj
a2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6ZmluaXNoZWRUYXJnZXRSZW5k
ZXJTCiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFJlbmRlclN1cmZhY2VUeXBlPgotc3RhdGljIGlu
bGluZSBSZWdpb24gdHJhbnNmb3JtU3VyZmFjZU9wYXF1ZVJlZ2lvbihjb25zdCBSZW5kZXJTdXJm
YWNlVHlwZSogc3VyZmFjZSwgY29uc3QgUmVnaW9uJiByZWdpb24sIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0cmFuc2Zvcm0pCitzdGF0aWMgaW5saW5lIFJlZ2lvbiB0cmFuc2Zvcm1TdXJm
YWNlT3BhcXVlUmVnaW9uKGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBzdXJmYWNlLCBjb25zdCBS
ZWdpb24mIHJlZ2lvbiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJh
bnNmb3JtKQogewogICAgIC8vIFZlcmlmeSB0aGF0IHJlY3RzIHdpdGhpbiB0aGUgfHN1cmZhY2V8
IHdpbGwgcmVtYWluIHJlY3RzIGluIGl0cyB0YXJnZXQgc3VyZmFjZSBhZnRlciBhcHBseWluZyB8
dHJhbnNmb3JtfC4gSWYgdGhpcyBpcyB0cnVlLCB0aGVuCiAgICAgLy8gYXBwbHkgfHRyYW5zZm9y
bXwgdG8gZWFjaCByZWN0IHdpdGhpbiB8cmVnaW9ufCBpbiBvcmRlciB0byB0cmFuc2Zvcm0gdGhl
IGVudGlyZSBSZWdpb24uCkBAIC0xOTQsNyArMTk0LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJl
ZHVjZU9jY2x1c2lvbihjb25zdCBJbnRSZWN0JiBhZmZlY3RlZEFyZWEsIGNvbnN0IEludFJlY3Qm
IGUKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci1zdGF0aWMgdm9p
ZCByZWR1Y2VPY2NsdXNpb25CZWxvd1N1cmZhY2UoUmVuZGVyU3VyZmFjZVR5cGUqIHN1cmZhY2Us
IGNvbnN0IEludFJlY3QmIHN1cmZhY2VSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
c3VyZmFjZVRyYW5zZm9ybSwgUmVuZGVyU3VyZmFjZVR5cGUqIHN1cmZhY2VUYXJnZXQsIFJlZ2lv
biYgb2NjbHVzaW9uSW5UYXJnZXQsIFJlZ2lvbiYgb2NjbHVzaW9uSW5TY3JlZW4pCitzdGF0aWMg
dm9pZCByZWR1Y2VPY2NsdXNpb25CZWxvd1N1cmZhY2UoUmVuZGVyU3VyZmFjZVR5cGUqIHN1cmZh
Y2UsIGNvbnN0IEludFJlY3QmIHN1cmZhY2VSZWN0LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4JiBzdXJmYWNlVHJhbnNmb3JtLCBSZW5kZXJTdXJmYWNlVHlwZSogc3VyZmFj
ZVRhcmdldCwgUmVnaW9uJiBvY2NsdXNpb25JblRhcmdldCwgUmVnaW9uJiBvY2NsdXNpb25JblNj
cmVlbikKIHsKICAgICBpZiAoc3VyZmFjZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CkBAIC0yNjAsMTMgKzI2MCwxMyBAQCB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJU
eXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmxlYXZlVG9UYXJnZXRSZW5kZXJTdQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+Ci1zdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNmb3JtKGNvbnN0IExheWVyVHlwZSogbGF5ZXIp
CitzdGF0aWMgaW5saW5lIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggY29udGVudFRv
U2NyZWVuU3BhY2VUcmFuc2Zvcm0oY29uc3QgTGF5ZXJUeXBlKiBsYXllcikKIHsKICAgICBBU1NF
UlQobGF5ZXJUcmFuc2Zvcm1zVG9TY3JlZW5Lbm93bihsYXllcikpOwogICAgIEludFNpemUgYm91
bmRzSW5MYXllclNwYWNlID0gbGF5ZXItPmJvdW5kcygpOwogICAgIEludFNpemUgYm91bmRzSW5D
b250ZW50U3BhY2UgPSBsYXllci0+Y29udGVudEJvdW5kcygpOwogCi0gICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggdHJhbnNmb3JtID0gbGF5ZXItPnNjcmVlblNwYWNlVHJhbnNmb3JtKCk7CisgICAg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBsYXllci0+c2NyZWVu
U3BhY2VUcmFuc2Zvcm0oKTsKIAogICAgIGlmIChib3VuZHNJbkNvbnRlbnRTcGFjZS5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CkBAIC0yNzksMTMgKzI3OSwxMyBAQCBzdGF0
aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1NjcmVlblNwYWNlVHJhbnNm
b3JtKGNvbnN0IExheWVyVHlwZQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBMYXllclR5cGU+Ci1z
dGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRUb1RhcmdldFN1cmZhY2VU
cmFuc2Zvcm0oY29uc3QgTGF5ZXJUeXBlKiBsYXllcikKK3N0YXRpYyBpbmxpbmUgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb250ZW50VG9UYXJnZXRTdXJmYWNlVHJhbnNmb3JtKGNv
bnN0IExheWVyVHlwZSogbGF5ZXIpCiB7CiAgICAgQVNTRVJUKGxheWVyVHJhbnNmb3Jtc1RvVGFy
Z2V0S25vd24obGF5ZXIpKTsKICAgICBJbnRTaXplIGJvdW5kc0luTGF5ZXJTcGFjZSA9IGxheWVy
LT5ib3VuZHMoKTsKICAgICBJbnRTaXplIGJvdW5kc0luQ29udGVudFNwYWNlID0gbGF5ZXItPmNv
bnRlbnRCb3VuZHMoKTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IGxh
eWVyLT5kcmF3VHJhbnNmb3JtKCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0cmFuc2Zvcm0gPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOwogCiAgICAgaWYgKGJvdW5kc0lu
Q29udGVudFNwYWNlLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRyYW5zZm9ybTsKQEAgLTMw
Miw3ICszMDIsNyBAQCBzdGF0aWMgaW5saW5lIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRU
b1RhcmdldFN1cmZhY2VUcmFuc2Zvcm0oY29uc3QgTGF5ZXJUeQogCiAvLyBGSVhNRTogUmVtb3Zl
IHVzZVBhaW50VHJhY2tpbmcgd2hlbiBwYWludCB0cmFja2luZyBpcyBvbiBmb3IgcGFpbnQgY3Vs
bGluZy4KIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgdm9pZCBh
ZGRPY2NsdXNpb25CZWhpbmRMYXllcihSZWdpb24mIHJlZ2lvbiwgY29uc3QgTGF5ZXJUeXBlKiBs
YXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgUmVnaW9u
JiBvcGFxdWVDb250ZW50cywgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGNvbnN0IEludFNp
emUmIG1pbmltdW1UcmFja2luZ1NpemUpCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkT2NjbHVzaW9u
QmVoaW5kTGF5ZXIoUmVnaW9uJiByZWdpb24sIGNvbnN0IExheWVyVHlwZSogbGF5ZXIsIGNvbnN0
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgUmVnaW9u
JiBvcGFxdWVDb250ZW50cywgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGNvbnN0IEludFNp
emUmIG1pbmltdW1UcmFja2luZ1NpemUpCiB7CiAgICAgQVNTRVJUKGxheWVyLT52aXNpYmxlTGF5
ZXJSZWN0KCkuY29udGFpbnMob3BhcXVlQ29udGVudHMuYm91bmRzKCkpKTsKIApAQCAtMzQ1LDcg
KzM0NSw3IEBAIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1
cmZhY2VUeXBlPjo6bWFya09jY2x1ZGVkQmVoaW5kTGF5CiAgICAgLy8gcmVtYWluIHJlY3RpbGlu
ZWFyLCB0aGVuIHdlIGRvbid0IGFkZCBhbnkgb2NjbHVzaW9uIGluIHNjcmVlbiBzcGFjZS4KIAog
ICAgIGlmIChsYXllclRyYW5zZm9ybXNUb1NjcmVlbktub3duKGxheWVyKSkgewotICAgICAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCB0YXJnZXRUb1NjcmVlblRyYW5zZm9ybSA9IG1fc3RhY2subGFz
dCgpLnN1cmZhY2UtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCk7CisgICAgICAgIFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggdGFyZ2V0VG9TY3JlZW5UcmFuc2Zvcm0gPSBtX3N0YWNrLmxh
c3QoKS5zdXJmYWNlLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpOwogICAgICAgICBib29sIGNsaXBw
ZWQ7CiAgICAgICAgIEZsb2F0UXVhZCBzY2lzc29ySW5TY3JlZW5RdWFkID0gQ0NNYXRoVXRpbDo6
bWFwUXVhZCh0YXJnZXRUb1NjcmVlblRyYW5zZm9ybSwgRmxvYXRRdWFkKEZsb2F0UmVjdChzY2lz
c29ySW5UYXJnZXQpKSwgY2xpcHBlZCk7CiAgICAgICAgIC8vIEZJWE1FOiBGaW5kIGEgcmVjdCBp
bnRlcmlvciB0byB0aGUgdHJhbnNmb3JtZWQgc2Npc3NvciBxdWFkLgpAQCAtMzU2LDcgKzM1Niw3
IEBAIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VU
eXBlPjo6bWFya09jY2x1ZGVkQmVoaW5kTGF5CiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIGJv
b2wgdGVzdENvbnRlbnRSZWN0T2NjbHVkZWQoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IElu
dFJlY3QmIHNjaXNzb3JSZWN0LCBjb25zdCBSZWdpb24mIG9jY2x1c2lvbikKK3N0YXRpYyBpbmxp
bmUgYm9vbCB0ZXN0Q29udGVudFJlY3RPY2NsdWRlZChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVj
dCwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudFNwYWNlVHJh
bnNmb3JtLCBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCwgY29uc3QgUmVnaW9uJiBvY2NsdXNp
b24pCiB7CiAgICAgRmxvYXRSZWN0IHRyYW5zZm9ybWVkUmVjdCA9IENDTWF0aFV0aWw6Om1hcENs
aXBwZWRSZWN0KGNvbnRlbnRTcGFjZVRyYW5zZm9ybSwgRmxvYXRSZWN0KGNvbnRlbnRSZWN0KSk7
CiAgICAgLy8gVGFrZSB0aGUgZW5jbG9zaW5nSW50UmVjdCwgYXMgd2Ugd2FudCB0byBpbmNsdWRl
IHBhcnRpYWwgcGl4ZWxzIGluIHRoZSB0ZXN0LgpAQCAtMzkxLDcgKzM5MSw3IEBAIHN0YXRpYyBp
bmxpbmUgSW50UmVjdCByZWN0U3VidHJhY3RSZWdpb24oY29uc3QgSW50UmVjdCYgcmVjdCwgY29u
c3QgUmVnaW9uJiByZWdpCiAgICAgcmV0dXJuIHJlY3RSZWdpb24uYm91bmRzKCk7CiB9CiAKLXN0
YXRpYyBpbmxpbmUgSW50UmVjdCBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNvbnN0IElu
dFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgY29udGVudFNw
YWNlVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBzY2lzc29yUmVjdCwgY29uc3QgUmVnaW9uJiBv
Y2NsdXNpb24pCitzdGF0aWMgaW5saW5lIEludFJlY3QgY29tcHV0ZVVub2NjbHVkZWRDb250ZW50
UmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgY29udGVudFNwYWNlVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBzY2lz
c29yUmVjdCwgY29uc3QgUmVnaW9uJiBvY2NsdXNpb24pCiB7CiAgICAgaWYgKCFjb250ZW50U3Bh
Y2VUcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJldHVybiBjb250ZW50UmVjdDsK
QEAgLTQ1NCw4ICs0NTQsOCBAQCBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJU
eXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OnVub2NjbHVkZWRDb250cmlidQogICAgICAgICBzdXJm
YWNlQ2xpcFJlY3QgPSBpbnRlcnNlY3Rpb24odGFyZ2V0U3VyZmFjZS0+Y29udGVudFJlY3QoKSwg
ZW5jbG9zaW5nSW50UmVjdChzdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpKTsKICAgICB9
CiAKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtVG9TY3JlZW4gPSBm
b3JSZXBsaWNhID8gc3VyZmFjZS0+cmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtKCkgOiBzdXJm
YWNlLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpOwotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0cmFuc2Zvcm1Ub1RhcmdldCA9IGZvclJlcGxpY2EgPyBzdXJmYWNlLT5yZXBsaWNhT3Jp
Z2luVHJhbnNmb3JtKCkgOiBzdXJmYWNlLT5vcmlnaW5UcmFuc2Zvcm0oKTsKKyAgICBjb25zdCBX
ZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1Ub1NjcmVlbiA9IGZvclJl
cGxpY2EgPyBzdXJmYWNlLT5yZXBsaWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSA6IHN1cmZhY2Ut
PnNjcmVlblNwYWNlVHJhbnNmb3JtKCk7CisgICAgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdHJhbnNmb3JtVG9UYXJnZXQgPSBmb3JSZXBsaWNhID8gc3VyZmFjZS0+cmVw
bGljYU9yaWdpblRyYW5zZm9ybSgpIDogc3VyZmFjZS0+b3JpZ2luVHJhbnNmb3JtKCk7CiAKICAg
ICBJbnRSZWN0IHVub2NjbHVkZWRJblNjcmVlbiA9IGNvbnRlbnRSZWN0OwogICAgIGlmIChzdXJm
YWNlVHJhbnNmb3Jtc1RvU2NyZWVuS25vd24oc3VyZmFjZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVz
aW9uVHJhY2tlci5oCmluZGV4IDIzMjg3NDUyM2RhOTgzNThiNTc0OGRhMTNmMjA5YTJkNDZlNTUw
ZDQuLjAwNDE2MzdmOWViZTkwYzliMGRhNGRlNWU2OTAwODRhMjkyNzcyMWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9u
VHJhY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpbmNsdWRlICJG
bG9hdFF1YWQuaCIKICNpbmNsdWRlICJSZWdpb24uaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgorI2luY2x1ZGUgIldlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2MvQ0NPdmVyZHJhd01ldHJpY3Mu
aCIKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NPdmVyZHJhd01ldHJpY3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NPdmVyZHJhd01ldHJpY3MuY3BwCmluZGV4IDNiMDE5M2VjNGE5
NDcyNTdhNTE5NTI2NWY0NmExNGMyZGRmNzk4YjEuLjViZWRiZWU0OTUyNWNlMWZlNmYwNmI1NWZj
NDE3Y2JjNTNmMDYwMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRyaWNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092ZXJkcmF3TWV0cmljcy5jcHAKQEAg
LTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgi
CiAjaW5jbHVkZSA8cHVibGljL1BsYXRmb3JtLmg+CkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgQ0NP
dmVyZHJhd01ldHJpY3M6OmRpZEN1bGxUaWxlRm9yVXBsb2FkKCkKICAgICAgICAgKyttX3RpbGVz
Q3VsbGVkRm9yVXBsb2FkOwogfQogCi12b2lkIENDT3ZlcmRyYXdNZXRyaWNzOjpkaWRVcGxvYWQo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybVRvVGFyZ2V0LCBjb25zdCBJbnRS
ZWN0JiB1cGxvYWRSZWN0LCBjb25zdCBJbnRSZWN0JiBvcGFxdWVSZWN0KQordm9pZCBDQ092ZXJk
cmF3TWV0cmljczo6ZGlkVXBsb2FkKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybVRvVGFyZ2V0LCBjb25zdCBJbnRSZWN0JiB1cGxvYWRSZWN0LCBjb25zdCBJ
bnRSZWN0JiBvcGFxdWVSZWN0KQogewogICAgIGlmICghbV9yZWNvcmRNZXRyaWNzRm9yRnJhbWUp
CiAgICAgICAgIHJldHVybjsKQEAgLTkwLDcgKzkwLDcgQEAgdm9pZCBDQ092ZXJkcmF3TWV0cmlj
czo6ZGlkVXBsb2FkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1Ub1Rhcmdl
dCwKICAgICBtX3BpeGVsc1VwbG9hZGVkVHJhbnNsdWNlbnQgKz0gdXBsb2FkQXJlYSAtIHVwbG9h
ZE9wYXF1ZUFyZWE7CiB9CiAKLXZvaWQgQ0NPdmVyZHJhd01ldHJpY3M6OmRpZEN1bGxGb3JEcmF3
aW5nKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1Ub1RhcmdldCwgY29uc3Qg
SW50UmVjdCYgYmVmb3JlQ3VsbFJlY3QsIGNvbnN0IEludFJlY3QmIGFmdGVyQ3VsbFJlY3QpCit2
b2lkIENDT3ZlcmRyYXdNZXRyaWNzOjpkaWRDdWxsRm9yRHJhd2luZyhjb25zdCBXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1Ub1RhcmdldCwgY29uc3QgSW50UmVjdCYg
YmVmb3JlQ3VsbFJlY3QsIGNvbnN0IEludFJlY3QmIGFmdGVyQ3VsbFJlY3QpCiB7CiAgICAgaWYg
KCFtX3JlY29yZE1ldHJpY3NGb3JGcmFtZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAxLDcgKzEw
MSw3IEBAIHZvaWQgQ0NPdmVyZHJhd01ldHJpY3M6OmRpZEN1bGxGb3JEcmF3aW5nKGNvbnN0IFRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1UCiAgICAgbV9waXhlbHNDdWxsZWRGb3JEcmF3
aW5nICs9IGJlZm9yZUN1bGxBcmVhIC0gYWZ0ZXJDdWxsQXJlYTsKIH0KIAotdm9pZCBDQ092ZXJk
cmF3TWV0cmljczo6ZGlkRHJhdyhjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3Jt
VG9UYXJnZXQsIGNvbnN0IEludFJlY3QmIGFmdGVyQ3VsbFJlY3QsIGNvbnN0IEludFJlY3QmIG9w
YXF1ZVJlY3QpCit2b2lkIENDT3ZlcmRyYXdNZXRyaWNzOjpkaWREcmF3KGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybVRvVGFyZ2V0LCBjb25zdCBJbnRSZWN0
JiBhZnRlckN1bGxSZWN0LCBjb25zdCBJbnRSZWN0JiBvcGFxdWVSZWN0KQogewogICAgIGlmICgh
bV9yZWNvcmRNZXRyaWNzRm9yRnJhbWUpCiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRyYXdNZXRy
aWNzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ092
ZXJkcmF3TWV0cmljcy5oCmluZGV4IDUxNTZjM2MzOWIzMzRlMzA5NjgxNmNmMjJmNzJlMTQzNGFj
NmE5MGIuLjcxNWY1ZTE1MWJiYWRkYTE3OTc2YzdlMzlmZTM3MTM3N2JkZjhlMzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT3ZlcmRy
YXdNZXRyaWNzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NPdmVyZHJhd01ldHJpY3MuaApAQCAtMjcsOSArMjcsMTIgQEAKIAogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAKK25hbWVzcGFjZSBXZWJLaXQgeworY2xhc3MgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXg7Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEludFJlY3Q7
Ci1jbGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdDsKIGNs
YXNzIENDTGF5ZXJUcmVlSG9zdEltcGw7CiAKQEAgLTQ1LDE0ICs0OCwxNCBAQCBwdWJsaWM6CiAg
ICAgLy8gUmVjb3JkcyB0aGF0IGFuIGludmFsaWQgdGlsZSB3YXMgY3VsbGVkIGFuZCBkaWQgbm90
IG5lZWQgdG8gYmUgcGFpbnRlZC91cGxvYWRlZCwgYW5kIGRpZCBub3QgY29udHJpYnV0ZSB0byBv
dGhlciB0aWxlcyBuZWVkaW5nIHRvIGJlIHBhaW50ZWQuCiAgICAgdm9pZCBkaWRDdWxsVGlsZUZv
clVwbG9hZCgpOwogICAgIC8vIFJlY29yZHMgcGl4ZWxzIHRoYXQgd2VyZSB1cGxvYWRlZCB0byB0
ZXh0dXJlIG1lbW9yeS4KLSAgICB2b2lkIGRpZFVwbG9hZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtVG9UYXJnZXQsIGNvbnN0IEludFJlY3QmIHVwbG9hZFJlY3QsIGNvbnN0
IEludFJlY3QmIG9wYXF1ZVJlY3QpOworICAgIHZvaWQgZGlkVXBsb2FkKGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybVRvVGFyZ2V0LCBjb25zdCBJbnRSZWN0
JiB1cGxvYWRSZWN0LCBjb25zdCBJbnRSZWN0JiBvcGFxdWVSZWN0KTsKIAogICAgIC8vIFRoZXNl
IG1ldGhvZHMgYXJlIHVzZWQgZm9yIHNhdmluZyBtZXRyaWNzIGR1cmluZyBkcmF3LgogCiAgICAg
Ly8gUmVjb3JkIHBpeGVscyB0aGF0IHdlcmUgbm90IGRyYXduIHRvIHNjcmVlbi4KLSAgICB2b2lk
IGRpZEN1bGxGb3JEcmF3aW5nKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1U
b1RhcmdldCwgY29uc3QgSW50UmVjdCYgYmVmb3JlQ3VsbFJlY3QsIGNvbnN0IEludFJlY3QmIGFm
dGVyQ3VsbFJlY3QpOworICAgIHZvaWQgZGlkQ3VsbEZvckRyYXdpbmcoY29uc3QgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtVG9UYXJnZXQsIGNvbnN0IEludFJlY3Qm
IGJlZm9yZUN1bGxSZWN0LCBjb25zdCBJbnRSZWN0JiBhZnRlckN1bGxSZWN0KTsKICAgICAvLyBS
ZWNvcmQgcGl4ZWxzIHRoYXQgd2VyZSBkcmF3biB0byBzY3JlZW4uCi0gICAgdm9pZCBkaWREcmF3
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm1Ub1RhcmdldCwgY29uc3QgSW50
UmVjdCYgYWZ0ZXJDdWxsUmVjdCwgY29uc3QgSW50UmVjdCYgb3BhcXVlUmVjdCk7CisgICAgdm9p
ZCBkaWREcmF3KGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9y
bVRvVGFyZ2V0LCBjb25zdCBJbnRSZWN0JiBhZnRlckN1bGxSZWN0LCBjb25zdCBJbnRSZWN0JiBv
cGFxdWVSZWN0KTsKIAogICAgIHZvaWQgcmVjb3JkTWV0cmljcyhjb25zdCBDQ0xheWVyVHJlZUhv
c3QqKSBjb25zdDsKICAgICB2b2lkIHJlY29yZE1ldHJpY3MoY29uc3QgQ0NMYXllclRyZWVIb3N0
SW1wbCopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAKaW5kZXggMzY0NjI0ODY2MjQ1
NjY5MGI1YmZiY2UyYTljOGMxZWIzNTg3NDhiNy4uOGY1Njc1YWM1NGZhOTFhYjY3ZWIwNGRiOWY2
NTRhNjcxNGZjMWFkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCkBAIC0zMCw3ICszMCw3
IEBACiAjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCiAKICNpbmNsdWRlICJSZWdpb24uaCIK
LSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCiAj
aW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ092ZXJkcmF3TWV0cmlj
cy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHAKaW5kZXggODQ4NzMwYTJjN2I2MGI3NjIzODk5
ZmQ3ZjliNDEzMzBhMmU5N2NiNy4uMTllNmEyYmRhYmMzNjdhZWRlZTA4NTIwZGEwOTVlNWRmODcy
YzhlYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NSZW5kZXJQYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3MuY3BwCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9p
ZCBDQ1JlbmRlclBhc3M6OmFwcGVuZFF1YWRzVG9GaWxsU2NyZWVuKENDTGF5ZXJJbXBsKiByb290
TGF5ZXIsIGNvbnN0IENvbG9yJgogICAgICAgICByZXR1cm47CiAKICAgICBPd25QdHI8Q0NTaGFy
ZWRRdWFkU3RhdGU+IHNoYXJlZFF1YWRTdGF0ZSA9IHJvb3RMYXllci0+Y3JlYXRlU2hhcmVkUXVh
ZFN0YXRlKCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtVG9MYXllclNwYWNl
ID0gcm9vdExheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpLmludmVyc2UoKTsKKyAgICBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybVRvTGF5ZXJTcGFjZSA9IHJvb3RM
YXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKS5pbnZlcnNlKCk7CiAgICAgVmVjdG9yPEludFJl
Y3Q+IGZpbGxSZWN0cyA9IGZpbGxSZWdpb24ucmVjdHMoKTsKICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGZpbGxSZWN0cy5zaXplKCk7ICsraSkgewogICAgICAgICBJbnRSZWN0IGxheWVyUmVj
dCA9IHRyYW5zZm9ybVRvTGF5ZXJTcGFjZS5tYXBSZWN0KGZpbGxSZWN0c1tpXSk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCBhN2I0MmM1NGQ0NTJkOTQ4YzVmZDRjYzJiN2Ix
YTc0MGIzMjUwNGQyLi45ZjAzZDBjMjNhMGE4NTAyMDI5MDA5YzUyYmM2YjAyZjc5ODllNWU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTEyOCwxOCArMTI4LDE4IEBAIHZv
aWQgQ0NSZW5kZXJTdXJmYWNlOjpyZWxlYXNlQmFja2dyb3VuZFRleHR1cmUoKQogICAgIG1fYmFj
a2dyb3VuZFRleHR1cmUtPnVucmVzZXJ2ZSgpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJpeCBD
Q1JlbmRlclN1cmZhY2U6OmNvbXB1dGVEZXZpY2VUcmFuc2Zvcm0oTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5z
Zm9ybSkgY29uc3QKK1dlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggQ0NSZW5kZXJTdXJm
YWNlOjpjb21wdXRlRGV2aWNlVHJhbnNmb3JtKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJS
ZW5kZXJlciwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5z
Zm9ybSkgY29uc3QKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZW5kZXJUcmFuc2Zvcm0g
PSBkcmF3VHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVu
ZGVyVHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybTsKICAgICAvLyBBcHBseSBhIHNjYWxpbmcgZmFj
dG9yIHRvIHNpemUgdGhlIHF1YWQgZnJvbSAxeDEgdG8gaXRzIGludGVuZGVkIHNpemUuCiAgICAg
cmVuZGVyVHJhbnNmb3JtLnNjYWxlM2QobV9jb250ZW50UmVjdC53aWR0aCgpLCBtX2NvbnRlbnRS
ZWN0LmhlaWdodCgpLCAxKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VUcmFuc2Zv
cm0gPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeChsYXllclJlbmRlcmVyLT53aW5kb3dNYXRyaXgoKSAq
IGxheWVyUmVuZGVyZXItPnByb2plY3Rpb25NYXRyaXgoKSAqIHJlbmRlclRyYW5zZm9ybSkudG8y
ZFRyYW5zZm9ybSgpOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNl
VHJhbnNmb3JtID0gV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChsYXllclJlbmRlcmVy
LT53aW5kb3dNYXRyaXgoKSAqIGxheWVyUmVuZGVyZXItPnByb2plY3Rpb25NYXRyaXgoKSAqIHJl
bmRlclRyYW5zZm9ybSkudG8yZFRyYW5zZm9ybSgpOwogICAgIHJldHVybiBkZXZpY2VUcmFuc2Zv
cm07CiB9CiAKLUludFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpjb21wdXRlRGV2aWNlQm91bmRpbmdC
b3goTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgY29uc3QKK0ludFJlY3QgQ0NSZW5kZXJTdXJmYWNl
Ojpjb21wdXRlRGV2aWNlQm91bmRpbmdCb3goTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJl
bmRlcmVyLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNm
b3JtKSBjb25zdAogewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRzRGV2aWNlVHJh
bnNmb3JtID0gY29tcHV0ZURldmljZVRyYW5zZm9ybShsYXllclJlbmRlcmVyLCBkcmF3VHJhbnNm
b3JtKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbnRlbnRzRGV2aWNl
VHJhbnNmb3JtID0gY29tcHV0ZURldmljZVRyYW5zZm9ybShsYXllclJlbmRlcmVyLCBkcmF3VHJh
bnNmb3JtKTsKIAogICAgIC8vIENhbiBvbmx5IGRyYXcgc3VyZmFjZSBpZiBkZXZpY2UgbWF0cml4
IGlzIGludmVydGlibGUuCiAgICAgaWYgKCFjb250ZW50c0RldmljZVRyYW5zZm9ybS5pc0ludmVy
dGlibGUoKSkKQEAgLTE0OSw3ICsxNDksNyBAQCBJbnRSZWN0IENDUmVuZGVyU3VyZmFjZTo6Y29t
cHV0ZURldmljZUJvdW5kaW5nQm94KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZQogICAg
IHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGRldmljZVF1YWQuYm91bmRpbmdCb3goKSk7CiB9CiAK
LUludFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpjb21wdXRlUmVhZGJhY2tEZXZpY2VCb3VuZGluZ0Jv
eChMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSBjb25zdAorSW50UmVjdCBDQ1JlbmRlclN1cmZhY2U6
OmNvbXB1dGVSZWFkYmFja0RldmljZUJvdW5kaW5nQm94KExheWVyUmVuZGVyZXJDaHJvbWl1bSog
bGF5ZXJSZW5kZXJlciwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJh
d1RyYW5zZm9ybSkgY29uc3QKIHsKICAgICBJbnRSZWN0IGRldmljZVJlY3QgPSBjb21wdXRlRGV2
aWNlQm91bmRpbmdCb3gobGF5ZXJSZW5kZXJlciwgZHJhd1RyYW5zZm9ybSk7CiAKQEAgLTE2NCwx
MiArMTY0LDEyIEBAIEludFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpjb21wdXRlUmVhZGJhY2tEZXZp
Y2VCb3VuZGluZ0JveChMYXllclJlbmRlcmVyQ2hyb21pdW0qCiAgICAgcmV0dXJuIGRldmljZVJl
Y3Q7CiB9CiAKLUludFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpyZWFkYmFja0RldmljZUNvbnRlbnRS
ZWN0KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pIGNvbnN0CitJbnRSZWN0IENDUmVuZGVyU3VyZmFj
ZTo6cmVhZGJhY2tEZXZpY2VDb250ZW50UmVjdChMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFu
c2Zvcm0pIGNvbnN0CiB7CiAgICAgcmV0dXJuIGNvbXB1dGVSZWFkYmFja0RldmljZUJvdW5kaW5n
Qm94KGxheWVyUmVuZGVyZXIsIGRyYXdUcmFuc2Zvcm0pOwogfQogCi12b2lkIENDUmVuZGVyU3Vy
ZmFjZTo6Y29weVRleHR1cmVUb0ZyYW1lYnVmZmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5
ZXJSZW5kZXJlciwgaW50IHRleHR1cmVJZCwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd01hdHJpeCkKK3ZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpj
b3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRl
cmVyLCBpbnQgdGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGNvbnN0IFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdNYXRyaXgpCiB7CiAgICAgY29uc3QgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpSZW5kZXJTdXJmYWNlUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVu
ZGVyZXItPnJlbmRlclN1cmZhY2VQcm9ncmFtKCk7CiAKQEAgLTE4NiwxNCArMTg2LDE0IEBAIHZv
aWQgQ0NSZW5kZXJTdXJmYWNlOjpjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKiBsYXllclJlbmRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAtMSk7CiB9CiAKLXZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpjb3B5RGV2aWNlVG9CYWNrZ3JvdW5k
VGV4dHVyZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGludCBkZXZpY2VC
YWNrZ3JvdW5kVGV4dHVyZUlkLCBjb25zdCBJbnRSZWN0JiBkZXZpY2VUZXh0dXJlUmVjdCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSkgY29uc3QKK3ZvaWQgQ0NS
ZW5kZXJTdXJmYWNlOjpjb3B5RGV2aWNlVG9CYWNrZ3JvdW5kVGV4dHVyZShMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGludCBkZXZpY2VCYWNrZ3JvdW5kVGV4dHVyZUlkLCBj
b25zdCBJbnRSZWN0JiBkZXZpY2VUZXh0dXJlUmVjdCwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtKSBjb25zdAogewogICAgIEFTU0VSVCghbV9i
YWNrZ3JvdW5kRmlsdGVycy5pc0VtcHR5KCkpOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
ZGV2aWNlVG9TdXJmYWNlVHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggZGV2aWNlVG9TdXJmYWNlVHJhbnNmb3JtOwogICAgIGRldmljZVRvU3VyZmFjZVRyYW5z
Zm9ybS50cmFuc2xhdGUobV9jb250ZW50UmVjdC53aWR0aCgpIC8gMi4wLCBtX2NvbnRlbnRSZWN0
LmhlaWdodCgpIC8gMi4wKTsKICAgICBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm0uc2NhbGUzZCht
X2NvbnRlbnRSZWN0LndpZHRoKCksIG1fY29udGVudFJlY3QuaGVpZ2h0KCksIDEpOwotICAgIGRl
dmljZVRvU3VyZmFjZVRyYW5zZm9ybSAqPSBkZXZpY2VUcmFuc2Zvcm0uaW52ZXJzZSgpOworICAg
IGRldmljZVRvU3VyZmFjZVRyYW5zZm9ybS5tdWx0aXBseShkZXZpY2VUcmFuc2Zvcm0uaW52ZXJz
ZSgpKTsKICAgICBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm0udHJhbnNsYXRlKGRldmljZVRleHR1
cmVSZWN0LndpZHRoKCkgLyAyLjAsIGRldmljZVRleHR1cmVSZWN0LmhlaWdodCgpIC8gMi4wKTsK
ICAgICBkZXZpY2VUb1N1cmZhY2VUcmFuc2Zvcm0udHJhbnNsYXRlKGRldmljZVRleHR1cmVSZWN0
LngoKSwgZGV2aWNlVGV4dHVyZVJlY3QueSgpKTsKIApAQCAtMjU4LDkgKzI1OCw5IEBAIHZvaWQg
Q0NSZW5kZXJTdXJmYWNlOjpkcmF3UmVwbGljYShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIpCiAgICAgZHJhd0xheWVyKGxheWVyUmVuZGVyZXIsIHJlcGxpY2FNYXNrTGF5ZXIs
IG1fcmVwbGljYURyYXdUcmFuc2Zvcm0sIGNvbnRlbnRzVGV4dHVyZUlkKTsKIH0KIAotdm9pZCBD
Q1JlbmRlclN1cmZhY2U6OmRyYXdMYXllcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVu
ZGVyZXIsIENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBkcmF3VHJhbnNmb3JtLCBpbnQgY29udGVudHNUZXh0dXJlSWQpCit2b2lkIENDUmVuZGVyU3Vy
ZmFjZTo6ZHJhd0xheWVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgQ0NM
YXllckltcGwqIG1hc2tMYXllciwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgZHJhd1RyYW5zZm9ybSwgaW50IGNvbnRlbnRzVGV4dHVyZUlkKQogewotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IGRldmljZU1hdHJpeCA9IGNvbXB1dGVEZXZpY2VUcmFuc2Zvcm0obGF5ZXJS
ZW5kZXJlciwgZHJhd1RyYW5zZm9ybSk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBkZXZpY2VNYXRyaXggPSBjb21wdXRlRGV2aWNlVHJhbnNmb3JtKGxheWVyUmVuZGVyZXIs
IGRyYXdUcmFuc2Zvcm0pOwogCiAgICAgLy8gQ2FuIG9ubHkgZHJhdyBzdXJmYWNlIGlmIGRldmlj
ZSBtYXRyaXggaXMgaW52ZXJ0aWJsZS4KICAgICBpZiAoIWRldmljZU1hdHJpeC5pc0ludmVydGli
bGUoKSkKQEAgLTMwOSw3ICszMDksNyBAQCB2b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhd0xheWVy
KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgQ0NMYXllckltcAogfQogCiB0
ZW1wbGF0ZSA8Y2xhc3MgVD4KLXZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpkcmF3U3VyZmFjZShMYXll
clJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtLCBjb25zdCBDQ0xheWVyUXVhZCYgZGV2aWNl
UmVjdCwgY29uc3QgQ0NMYXllclF1YWQmIGxheWVyUXVhZCwgaW50IGNvbnRlbnRzVGV4dHVyZUlk
LCBjb25zdCBUKiBwcm9ncmFtLCBpbnQgc2hhZGVyTWFza1NhbXBsZXJMb2NhdGlvbiwgaW50IHNo
YWRlclF1YWRMb2NhdGlvbiwgaW50IHNoYWRlckVkZ2VMb2NhdGlvbikKK3ZvaWQgQ0NSZW5kZXJT
dXJmYWNlOjpkcmF3U3VyZmFjZShMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIs
IENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGRyYXdUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGRldmljZVRyYW5zZm9ybSwgY29uc3QgQ0NMYXllclF1YWQmIGRldmljZVJlY3QsIGNvbnN0
IENDTGF5ZXJRdWFkJiBsYXllclF1YWQsIGludCBjb250ZW50c1RleHR1cmVJZCwgY29uc3QgVCog
cHJvZ3JhbSwgaW50IHNoYWRlck1hc2tTYW1wbGVyTG9jYXRpb24sIGludCBzaGFkZXJRdWFkTG9j
YXRpb24sIGludCBzaGFkZXJFZGdlTG9jYXRpb24pCiB7CiAgICAgR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQzRCA9IGxheWVyUmVuZGVyZXItPmNvbnRleHQoKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRl
clN1cmZhY2UuaAppbmRleCBmNzc5NDVjNTFkYTlkOWU2ZGRiMmIwMWUzYjliNzExYzQ0NWEyYjMx
Li4xNTdjYWE3MzUzYWZlNDI1YjBiY2JjZjQwYjEyNWJkZGUzNGRjZDg0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZh
Y2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1JlbmRlclN1cmZhY2UuaApAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIkludFJlY3QuaCIK
ICNpbmNsdWRlICJTa0JpdG1hcC5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCi0jaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJRdWFkLmgiCiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgogCiAgICAgLy8gVGFrZXMg
YSB0ZXh0dXJlIHdpdGggcGl4ZWxzIGluIGRldmljZSBzcGFjZSwgYW5kIGEgdHJhbnNmb3JtIGZy
b20gY29udGVudCBzcGFjZSB0byB0aGUgZGV2aWNlLiBDb3BpZXMgdGhlIGRldmljZS1zcGFjZSB0
ZXh0dXJlIGJhY2sgaW50bwogICAgIC8vIGNvbnRlbnQgc3BhY2UgZm9yIHRoZSBzdXJmYWNlLCBz
dG9yaW5nIHRoZSByZXN1bHQgaW4gdGhlIGJhY2tncm91bmRUZXh0dXJlKCkuIFRoZSBzdXJmYWNl
J3MgYmFja2dyb3VuZFRleHR1cmUoKSBtdXN0IGJlIHRoZSBhY3RpdmUgZHJhd2luZyB0YXJnZXQu
Ci0gICAgdm9pZCBjb3B5RGV2aWNlVG9CYWNrZ3JvdW5kVGV4dHVyZShMYXllclJlbmRlcmVyQ2hy
b21pdW0qLCBpbnQgZGV2aWNlQmFja2dyb3VuZFRleHR1cmVJZCwgY29uc3QgSW50UmVjdCYgZGV2
aWNlVGV4dHVyZVJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkZXZpY2VUcmFuc2Zv
cm0pIGNvbnN0OworICAgIHZvaWQgY29weURldmljZVRvQmFja2dyb3VuZFRleHR1cmUoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiwgaW50IGRldmljZUJhY2tncm91bmRUZXh0dXJlSWQsIGNvbnN0IElu
dFJlY3QmIGRldmljZVRleHR1cmVSZWN0LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4JiBkZXZpY2VUcmFuc2Zvcm0pIGNvbnN0OwogCiAgICAgU3RyaW5nIG5hbWUoKSBjb25z
dDsKICAgICB2b2lkIGR1bXBTdXJmYWNlKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsK
QEAgLTc1LDEwICs3NSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyB0aGUgcmVjdCB0aGF0
IGVuY2xvc2VzIHRoZSBSZW5kZXJTdXJmYWNlIGluY2x1ZGluZyBhbnkgcmVmbGVjdGlvbi4KICAg
ICBGbG9hdFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCgpIGNvbnN0OwogICAgIC8vIFJldHVybnMg
dGhlIHJlY3QgdGhhdCBlbmNsb3NlcyB0aGUgcGl4ZWxzIHRoYXQgbWF5IGFmZmVjdCB0aGUgcGl4
ZWwgdmFsdWVzIGluIHRoaXMgc3VyZmFjZSB0aHJvdWdoIGJhY2tncm91bmQgZmlsdGVycy4KLSAg
ICBJbnRSZWN0IHJlYWRiYWNrRGV2aWNlQ29udGVudFJlY3QoTGF5ZXJSZW5kZXJlckNocm9taXVt
KiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pIGNvbnN0OworICAg
IEludFJlY3QgcmVhZGJhY2tEZXZpY2VDb250ZW50UmVjdChMYXllclJlbmRlcmVyQ2hyb21pdW0q
LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSBj
b25zdDsKIAogICAgIC8vIEdpdmVzIHRoZSB0cmFuc2Zvcm0gZnJvbSB0aGUgc3VyZmFjZSBjb250
ZW50IHNwYWNlLCB3aXRoIG9yaWdpbiBpbiB0aGUgdG9wIGxlZnQsIHRvIHRoZSBjdXJyZW50IHRh
cmdldCBkZXZpY2Ugc3BhY2UsIHdpdGggb3JpZ2luIGluIHRoZSB0b3AgbGVmdC4KLSAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBjb21wdXRlRGV2aWNlVHJhbnNmb3JtKExheWVyUmVuZGVyZXJDaHJv
bWl1bSosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSBjb25zdDsK
KyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbXB1dGVEZXZpY2VUcmFuc2Zv
cm0oTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgY29uc3Q7CiAKICAgICBmbG9hdCBkcmF3T3BhY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fZHJhd09wYWNpdHk7IH0KICAgICB2b2lkIHNldERyYXdPcGFjaXR5
KGZsb2F0IG9wYWNpdHkpIHsgbV9kcmF3T3BhY2l0eSA9IG9wYWNpdHk7IH0KQEAgLTk2LDIzICs5
NiwyMyBAQCBwdWJsaWM6CiAgICAgYm9vbCBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9kcmF3T3BhY2l0eUlzQW5pbWF0aW5nOyB9CiAgICAgdm9pZCBzZXREcmF3T3Bh
Y2l0eUlzQW5pbWF0aW5nKGJvb2wgZHJhd09wYWNpdHlJc0FuaW1hdGluZykgeyBtX2RyYXdPcGFj
aXR5SXNBbmltYXRpbmcgPSBkcmF3T3BhY2l0eUlzQW5pbWF0aW5nOyB9CiAKLSAgICB2b2lkIHNl
dERyYXdUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0p
IHsgbV9kcmF3VHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybTsgfQotICAgIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4gbV9kcmF3VHJhbnNm
b3JtOyB9CisgICAgdm9pZCBzZXREcmF3VHJhbnNmb3JtKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGRyYXdUcmFuc2Zvcm0pIHsgbV9kcmF3VHJhbnNmb3JtID0gZHJhd1Ry
YW5zZm9ybTsgfQorICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRy
YXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2RyYXdUcmFuc2Zvcm07IH0KIAotICAgIHZv
aWQgc2V0T3JpZ2luVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5U
cmFuc2Zvcm0pIHsgbV9vcmlnaW5UcmFuc2Zvcm0gPSBvcmlnaW5UcmFuc2Zvcm07IH0KLSAgICBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3JpZ2luVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1
cm4gbV9vcmlnaW5UcmFuc2Zvcm07IH0KKyAgICB2b2lkIHNldE9yaWdpblRyYW5zZm9ybShjb25z
dCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zvcm0pIHsgbV9v
cmlnaW5UcmFuc2Zvcm0gPSBvcmlnaW5UcmFuc2Zvcm07IH0KKyAgICBjb25zdCBXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiBvcmlnaW5UcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBt
X29yaWdpblRyYW5zZm9ybTsgfQogCi0gICAgdm9pZCBzZXRTY3JlZW5TcGFjZVRyYW5zZm9ybShj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc2NyZWVuU3BhY2VUcmFuc2Zvcm0pIHsgbV9zY3Jl
ZW5TcGFjZVRyYW5zZm9ybSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtOyB9Ci0gICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHNjcmVlblNwYWNlVHJhbnNmb3JtKCkgY29uc3QgeyByZXR1cm4g
bV9zY3JlZW5TcGFjZVRyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0U2NyZWVuU3BhY2VUcmFuc2Zv
cm0oY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc2NyZWVuU3BhY2VUcmFu
c2Zvcm0pIHsgbV9zY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHNjcmVlblNwYWNlVHJhbnNmb3JtOyB9
CisgICAgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc2NyZWVuU3BhY2VU
cmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3NjcmVlblNwYWNlVHJhbnNmb3JtOyB9CiAKLSAg
ICB2b2lkIHNldFJlcGxpY2FEcmF3VHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiByZXBsaWNhRHJhd1RyYW5zZm9ybSkgeyBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtID0gcmVwbGlj
YURyYXdUcmFuc2Zvcm07IH0KLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGlj
YURyYXdUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2FEcmF3VHJhbnNmb3JtOyB9
CisgICAgdm9pZCBzZXRSZXBsaWNhRHJhd1RyYW5zZm9ybShjb25zdCBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiByZXBsaWNhRHJhd1RyYW5zZm9ybSkgeyBtX3JlcGxpY2FEcmF3VHJh
bnNmb3JtID0gcmVwbGljYURyYXdUcmFuc2Zvcm07IH0KKyAgICBjb25zdCBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4JiByZXBsaWNhRHJhd1RyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVwbGljYURyYXdUcmFuc2Zvcm07IH0KIAotICAgIHZvaWQgc2V0UmVwbGljYU9yaWdpblRy
YW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcmVwbGljYU9yaWdpblRyYW5zZm9y
bSkgeyBtX3JlcGxpY2FPcmlnaW5UcmFuc2Zvcm0gPSByZXBsaWNhT3JpZ2luVHJhbnNmb3JtOyB9
Ci0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0o
KSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2FPcmlnaW5UcmFuc2Zvcm07IH0KKyAgICB2b2lkIHNl
dFJlcGxpY2FPcmlnaW5UcmFuc2Zvcm0oY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcmVwbGljYU9yaWdpblRyYW5zZm9ybSkgeyBtX3JlcGxpY2FPcmlnaW5UcmFuc2Zvcm0g
PSByZXBsaWNhT3JpZ2luVHJhbnNmb3JtOyB9CisgICAgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgcmVwbGljYU9yaWdpblRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVwbGljYU9yaWdpblRyYW5zZm9ybTsgfQogCi0gICAgdm9pZCBzZXRSZXBsaWNhU2NyZWVuU3Bh
Y2VUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlcGxpY2FTY3JlZW5TcGFj
ZVRyYW5zZm9ybSkgeyBtX3JlcGxpY2FTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHJlcGxpY2FTY3Jl
ZW5TcGFjZVRyYW5zZm9ybTsgfQotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiByZXBs
aWNhU2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2FTY3JlZW5T
cGFjZVRyYW5zZm9ybTsgfQorICAgIHZvaWQgc2V0UmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3Jt
KGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHJlcGxpY2FTY3JlZW5TcGFj
ZVRyYW5zZm9ybSkgeyBtX3JlcGxpY2FTY3JlZW5TcGFjZVRyYW5zZm9ybSA9IHJlcGxpY2FTY3Jl
ZW5TcGFjZVRyYW5zZm9ybTsgfQorICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHJlcGxpY2FTY3JlZW5TcGFjZVRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
bGljYVNjcmVlblNwYWNlVHJhbnNmb3JtOyB9CiAKICAgICBib29sIHRhcmdldFN1cmZhY2VUcmFu
c2Zvcm1zQXJlQW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXRTdXJmYWNlVHJhbnNm
b3Jtc0FyZUFuaW1hdGluZzsgfQogICAgIHZvaWQgc2V0VGFyZ2V0U3VyZmFjZVRyYW5zZm9ybXNB
cmVBbmltYXRpbmcoYm9vbCBhbmltYXRpbmcpIHsgbV90YXJnZXRTdXJmYWNlVHJhbnNmb3Jtc0Fy
ZUFuaW1hdGluZyA9IGFuaW1hdGluZzsgfQpAQCAtMTU0LDE0ICsxNTQsMTQgQEAgcHVibGljOgog
ICAgIFBhc3NPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+IGNyZWF0ZVJlcGxpY2FTaGFyZWRRdWFk
U3RhdGUoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBJbnRSZWN0IGNvbXB1dGVEZXZpY2VCb3Vu
ZGluZ0JveChMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgZHJhd1RyYW5zZm9ybSkgY29uc3Q7Ci0gICAgSW50UmVjdCBjb21wdXRlUmVhZGJhY2tEZXZp
Y2VCb3VuZGluZ0JveChMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgY29uc3Q7CisgICAgSW50UmVjdCBjb21wdXRlRGV2aWNl
Qm91bmRpbmdCb3goTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgY29uc3QgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSkgY29uc3Q7CisgICAgSW50UmVjdCBjb21w
dXRlUmVhZGJhY2tEZXZpY2VCb3VuZGluZ0JveChMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25z
dCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtKSBjb25zdDsK
IAotICAgIHZvaWQgZHJhd0xheWVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIENDTGF5ZXJJbXBs
KiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBpbnQgY29udGVudHNUZXh0dXJlSWQpOwor
ICAgIHZvaWQgZHJhd0xheWVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIENDTGF5ZXJJbXBsKiwg
Y29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGludCBjb250ZW50c1RleHR1
cmVJZCk7CiAgICAgdGVtcGxhdGUgPGNsYXNzIFQ+Ci0gICAgdm9pZCBkcmF3U3VyZmFjZShMYXll
clJlbmRlcmVyQ2hyb21pdW0qLCBDQ0xheWVySW1wbCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBkcmF3VHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJh
bnNmb3JtLCBjb25zdCBDQ0xheWVyUXVhZCYgZGV2aWNlUmVjdCwgY29uc3QgQ0NMYXllclF1YWQm
LCBpbnQgY29udGVudHNUZXh0dXJlSWQsIGNvbnN0IFQqIHByb2dyYW0sIGludCBzaGFkZXJNYXNr
U2FtcGxlckxvY2F0aW9uLCBpbnQgc2hhZGVyUXVhZExvY2F0aW9uLCBpbnQgc2hhZGVyRWRnZUxv
Y2F0aW9uKTsKKyAgICB2b2lkIGRyYXdTdXJmYWNlKExheWVyUmVuZGVyZXJDaHJvbWl1bSosIEND
TGF5ZXJJbXBsKiwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1Ry
YW5zZm9ybSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJh
bnNmb3JtLCBjb25zdCBDQ0xheWVyUXVhZCYgZGV2aWNlUmVjdCwgY29uc3QgQ0NMYXllclF1YWQm
LCBpbnQgY29udGVudHNUZXh0dXJlSWQsIGNvbnN0IFQqIHByb2dyYW0sIGludCBzaGFkZXJNYXNr
U2FtcGxlckxvY2F0aW9uLCBpbnQgc2hhZGVyUXVhZExvY2F0aW9uLCBpbnQgc2hhZGVyRWRnZUxv
Y2F0aW9uKTsKIAotICAgIHN0YXRpYyB2b2lkIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihMYXll
clJlbmRlcmVyQ2hyb21pdW0qLCBpbnQgdGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiBib3VuZHMs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4KTsKKyAgICBzdGF0aWMgdm9p
ZCBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgaW50IHRl
eHR1cmVJZCwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4JiBkcmF3TWF0cml4KTsKIAogICAgIENDTGF5ZXJJbXBsKiBtX293bmluZ0xh
eWVyOwogICAgIENDTGF5ZXJJbXBsKiBtX21hc2tMYXllcjsKQEAgLTE3NSwxMiArMTc1LDEyIEBA
IHByaXZhdGU6CiAKICAgICBmbG9hdCBtX2RyYXdPcGFjaXR5OwogICAgIGJvb2wgbV9kcmF3T3Bh
Y2l0eUlzQW5pbWF0aW5nOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1fZHJhd1RyYW5zZm9y
bTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX29yaWdpblRyYW5zZm9ybTsKLSAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBtX3NjcmVlblNwYWNlVHJhbnNmb3JtOwotICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IG1fcmVwbGljYURyYXdUcmFuc2Zvcm07Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggbV9yZXBsaWNhT3JpZ2luVHJhbnNmb3JtOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1f
cmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggbV9kcmF3VHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggbV9vcmlnaW5UcmFuc2Zvcm07CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBtX3NjcmVlblNwYWNlVHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggbV9yZXBsaWNhRHJhd1RyYW5zZm9ybTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IG1fcmVwbGljYU9yaWdpblRyYW5zZm9ybTsKKyAgICBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IG1fcmVwbGljYVNjcmVlblNwYWNlVHJhbnNmb3JtOwogICAgIGJv
b2wgbV90YXJnZXRTdXJmYWNlVHJhbnNmb3Jtc0FyZUFuaW1hdGluZzsKICAgICBib29sIG1fc2Ny
ZWVuU3BhY2VUcmFuc2Zvcm1zQXJlQW5pbWF0aW5nOwogICAgIEZpbHRlck9wZXJhdGlvbnMgbV9m
aWx0ZXJzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaGFyZWRRdWFkU3RhdGUuY3BwCmluZGV4IDliZjc2OTI1
YmI4Y2YyYmJhYzUzOWMwMTQzMWM1NTc4NDMzOWZkMDUuLmRkNWZjNTliMTE4Nzc2ZjA1YjU4NTMx
OWYzZWU5NzlkMzI4NWYzOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRTdGF0ZS5jcHAK
QEAgLTI5LDEyICsyOSwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBhc3NPd25QdHI8
Q0NTaGFyZWRRdWFkU3RhdGU+IENDU2hhcmVkUXVhZFN0YXRlOjpjcmVhdGUoY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBsYXllclRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBjb25zdCBJbnRSZWN0
JiBjbGlwUmVjdCwgZmxvYXQgb3BhY2l0eSwgYm9vbCBvcGFxdWUpCitQYXNzT3duUHRyPENDU2hh
cmVkUXVhZFN0YXRlPiBDQ1NoYXJlZFF1YWRTdGF0ZTo6Y3JlYXRlKGNvbnN0IFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJl
Y3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSkK
IHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IENDU2hhcmVkUXVhZFN0YXRlKHF1YWRUcmFuc2Zv
cm0sIGxheWVyVHJhbnNmb3JtLCBsYXllclJlY3QsIGNsaXBSZWN0LCBvcGFjaXR5LCBvcGFxdWUp
KTsKIH0KIAotQ0NTaGFyZWRRdWFkU3RhdGU6OkNDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVj
dCYgY2xpcFJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKQorQ0NTaGFyZWRRdWFkU3Rh
dGU6OkNDU2hhcmVkUXVhZFN0YXRlKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgm
IGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJlY3Qm
IGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSkKICAgICA6IG1fcXVhZFRyYW5z
Zm9ybShxdWFkVHJhbnNmb3JtKQogICAgICwgbV9sYXllclRyYW5zZm9ybShsYXllclRyYW5zZm9y
bSkKICAgICAsIG1fbGF5ZXJSZWN0KGxheWVyUmVjdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRlLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NoYXJlZFF1YWRT
dGF0ZS5oCmluZGV4IDQyMDZhYTVjMmRlMmE3NTRjOWNhOTFmNGU4ZTg4OTM4MjIxMWZmMjIuLmE5
NWQyOWEzMzU5NDgwNmI5MDliMGJjMTFmNDE1M2UyYTI5NTBkNWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2hhcmVkUXVhZFN0YXRl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
aGFyZWRRdWFkU3RhdGUuaApAQCAtMjgsNyArMjgsNyBAQAogCiAjaW5jbHVkZSAiRmxvYXRRdWFk
LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgiCisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0zNiwxMiArMzYsMTIgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ0NTaGFyZWRRdWFkU3RhdGUgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKENDU2hhcmVkUXVhZFN0YXRlKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMg
UGFzc093blB0cjxDQ1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlKGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBxdWFkVHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJU
cmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxD
Q1NoYXJlZFF1YWRTdGF0ZT4gY3JlYXRlKGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgmIHF1YWRUcmFuc2Zvcm0sIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSk7CiAKICAgICAvLyBUaGUg
dHJhbnNmb3JtIHRoYXQgcXVhZHMgaW4gYSBDQ0RyYXdRdWFkIHNob3VsZCBiZSB0cmFuc2Zvcm1l
ZCB3aXRoLgotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBxdWFkVHJhbnNmb3JtKCkg
Y29uc3QgeyByZXR1cm4gbV9xdWFkVHJhbnNmb3JtOyB9CisgICAgY29uc3QgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1fcXVh
ZFRyYW5zZm9ybTsgfQogICAgIC8vIFRoZSB0cmFuc2Zvcm0gdGhhdCBsYXllclJlY3QoKSBzaG91
bGQgYmUgdHJhbnNmb3JtZWQgd2l0aC4KLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
bGF5ZXJUcmFuc2Zvcm0oKSBjb25zdCB7IHJldHVybiBtX2xheWVyVHJhbnNmb3JtOyB9CisgICAg
Y29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFuc2Zvcm0oKSBj
b25zdCB7IHJldHVybiBtX2xheWVyVHJhbnNmb3JtOyB9CiAgICAgY29uc3QgSW50UmVjdCYgbGF5
ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9sYXllclJlY3Q7IH0KICAgICAvLyBVc2FnZTogaWYg
Y2xpcFJlY3QgaXMgZW1wdHksIHRoaXMgY2xpcFJlY3Qgc2hvdWxkIG5vdCBiZSB1c2VkLgogICAg
IGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9jbGlwUmVjdDsgfQpA
QCAtNTEsMTAgKzUxLDEwIEBAIHB1YmxpYzoKICAgICBib29sIGlzTGF5ZXJBeGlzQWxpZ25lZElu
dFJlY3QoKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBDQ1NoYXJlZFF1YWRTdGF0ZShjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGxheWVyVHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QsIGNvbnN0IElu
dFJlY3QmIGNsaXBSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29sIG9wYXF1ZSk7CisgICAgQ0NTaGFy
ZWRRdWFkU3RhdGUoY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcXVhZFRy
YW5zZm9ybSwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJUcmFu
c2Zvcm0sIGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3Qs
IGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlKTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IG1fcXVhZFRyYW5zZm9ybTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX2xheWVyVHJhbnNm
b3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9xdWFkVHJhbnNmb3Jt
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbV9sYXllclRyYW5zZm9ybTsK
ICAgICBJbnRSZWN0IG1fbGF5ZXJSZWN0OwogICAgIEludFJlY3QgbV9jbGlwUmVjdDsKICAgICBm
bG9hdCBtX29wYWNpdHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTb2xpZENvbG9yTGF5ZXJJbXBsLmNw
cAppbmRleCA2YWUzYTE3Mjk4ZTljNmMzMTgyN2FkNjllYWI0NmI5ZThlZDNlNDYzLi5kMzA0ZjRh
YTAzZjg3Nzc0MDU5ZTYzNWQ5NzAzZTU2ZTA4YTA3YTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
U29saWRDb2xvckxheWVySW1wbC5jcHAKQEAgLTQ5LDkgKzQ5LDkgQEAgQ0NTb2xpZENvbG9yTGF5
ZXJJbXBsOjp+Q0NTb2xpZENvbG9yTGF5ZXJJbXBsKCkKIHsKIH0KIAotVHJhbnNmb3JtYXRpb25N
YXRyaXggQ0NTb2xpZENvbG9yTGF5ZXJJbXBsOjpxdWFkVHJhbnNmb3JtKCkgY29uc3QKK1dlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggQ0NTb2xpZENvbG9yTGF5ZXJJbXBsOjpxdWFkVHJh
bnNmb3JtKCkgY29uc3QKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzb2xpZENvbG9yVHJh
bnNmb3JtID0gZHJhd1RyYW5zZm9ybSgpOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggc29saWRDb2xvclRyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm0oKTsKICAgICBzb2xpZENv
bG9yVHJhbnNmb3JtLnRyYW5zbGF0ZSgtYm91bmRzKCkud2lkdGgoKSAvIDIuMCwgLWJvdW5kcygp
LmhlaWdodCgpIC8gMi4wKTsKIAogICAgIHJldHVybiBzb2xpZENvbG9yVHJhbnNmb3JtOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NT
b2xpZENvbG9yTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuaAppbmRleCBkOGZjZTM3NjE3ZDZhYjRk
OWFkZjM4OGU3NTExYjlkZmFmYTNmMTUyLi4wNTJlZTA5NTM3MWE0MWUwZWYxOGNhMTI0MjVjMTBl
YjRjNzc5MjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NvbGlkQ29sb3JMYXllckltcGwuaApAQCAt
MjYsNyArMjYsNyBAQAogI2lmbmRlZiBDQ1NvbGlkQ29sb3JMYXllckltcGxfaAogI2RlZmluZSBD
Q1NvbGlkQ29sb3JMYXllckltcGxfaAogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCIKKyNpbmNsdWRlICJXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQxLDcgKzQxLDcgQEAgcHVi
bGljOgogICAgIH0KICAgICB2aXJ0dWFsIH5DQ1NvbGlkQ29sb3JMYXllckltcGwoKTsKIAotICAg
IHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXggcXVhZFRyYW5zZm9ybSgpIGNvbnN0IE9WRVJS
SURFOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkVHJh
bnNmb3JtKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFF1YWRzKEND
UXVhZEN1bGxlciYsIGNvbnN0IENDU2hhcmVkUXVhZFN0YXRlKiwgYm9vbCYgaGFkTWlzc2luZ1Rp
bGVzKSBPVkVSUklERTsKIAogcHJvdGVjdGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBs
LmNwcAppbmRleCBlYzIyYTlmZDY3NmI5MDgyZjcwODVjOWEyOWE1MGE0Y2RhZTIxOWFlLi5hMjcy
NGEyYzliY2JmN2Q2YWYyNjlkN2MwMTYyN2QyODAyZTQwMTI2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Rp
bGVkTGF5ZXJJbXBsLmNwcApAQCAtMTIxLDkgKzEyMSw5IEBAIERyYXdhYmxlVGlsZSogQ0NUaWxl
ZExheWVySW1wbDo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCiAgICAgcmV0dXJuIGFkZGVkVGls
ZTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggQ0NUaWxlZExheWVySW1wbDo6cXVhZFRyYW5z
Zm9ybSgpIGNvbnN0CitXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IENDVGlsZWRMYXll
ckltcGw6OnF1YWRUcmFuc2Zvcm0oKSBjb25zdAogewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHRyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm0oKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4IHRyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm0oKTsKIAogICAgIGlmIChjb250ZW50
Qm91bmRzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gdHJhbnNmb3JtOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExh
eWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaWxlZExheWVySW1wbC5oCmluZGV4IGJkMTQ2NjUwYmFkNWE3YWQ2MDIxZjlhYTcyZGRlZTc3
NTJhYTE1YmUuLjk4MWEwNzM1ODNhZjUwMjU1NjQyMjY0ODU1ZDNiMTAwMDhhMWY1MjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGls
ZWRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgQ0NU
aWxlZExheWVySW1wbF9oCiAKICNpbmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCi0jaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NM
YXllclRpbGluZ0RhdGEuaCIKIApAQCAtNjUsNyArNjUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9v
bCBoYXNUaWxlQXQoaW50LCBpbnQpIGNvbnN0OwogICAgIGJvb2wgaGFzVGV4dHVyZUlkRm9yVGls
ZUF0KGludCwgaW50KSBjb25zdDsKIAotICAgIHZpcnR1YWwgVHJhbnNmb3JtYXRpb25NYXRyaXgg
cXVhZFRyYW5zZm9ybSgpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBxdWFkVHJhbnNmb3JtKCkgY29uc3QgT1ZFUlJJREU7CiAKIHBy
aXZhdGU6CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmUxMjQ0MzZhZmEzZDRlYzE0ODQ2NzE0NDVjYTg5ZmJlNjM0ZTRjMWYKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9X
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCkBAIC0wLDAgKzEsMyBAQAorLy8gRklYTUU6IHRoaXMg
ZmlsZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgbGFuZGVkIGV2ZXIuCisKKyNpbmNsdWRlICIuLi8u
Li8uLi8uLi8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXguaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAwNmRhNDFlOTE0OGI5MWJiMzBm
N2M2ZDg0OWViYzRlOGEwYjY5OTY2Li4zNjdhOTAzNGQ5ZmM3YjZlNTQ5MzQ2MGQ4ZGJhZjc5M2Yw
NTJlM2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0zMzYsNiArMzM2LDcgQEAK
ICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlN0cmluZy5oJywKICAgICAgICAg
ICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlRocmVhZC5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL3BsYXRmb3JtL1dlYlRocmVhZFNhZmVEYXRhLmgnLAorICAgICAgICAgICAgICAgICdw
dWJsaWMvcGxhdGZvcm0vV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCcsCiAgICAgICAgICAgICAg
ICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJVUkwuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9w
bGF0Zm9ybS9XZWJVUkxFcnJvci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3Jt
L1dlYlVSTExvYWRUaW1pbmcuaCcsCkBAIC02NTcsNiArNjU4LDcgQEAKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYlN0b3JhZ2VRdW90YUNhbGxiYWNrc0ltcGwuaCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJTdXJyb3VuZGluZ1RleHQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlRl
eHRSdW4uY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxMb2FkVGltaW5nLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJTY29wZWRVc2VyR2VzdHVyZS5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViVXNlck1lZGlhUmVxdWVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlRyYW5zZm9ybWF0aW9u
TWF0cml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYWNiNzRjYjhlNmY5NjdjYWI1MDJmM2FiZDQ2NTFiMzQyMmM3
Njg4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3Bs
YXRmb3JtL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmgKQEAgLTAsMCArMSwyNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkxheWVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkxheWVyLmNwcApp
bmRleCBlY2Y3NDUyZmM2NTRhMWY3NmU3ZWE2Mzk4OGY3NmU2M2VkZDE5MDY2Li5lNDVkMzdjMjM3
ODYwYTU5YzNlZGZmYWUxZjZjNTEyOTJkNTQxNzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJMYXllci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViTGF5ZXIuY3BwCkBAIC0yMjUsMjIgKzIyNSwyMiBAQCBXZWJGbG9hdFBvaW50IFdlYkxh
eWVyOjpwb3NpdGlvbigpIGNvbnN0CiAKIHZvaWQgV2ViTGF5ZXI6OnNldFN1YmxheWVyVHJhbnNm
b3JtKGNvbnN0IFNrTWF0cml4NDQmIG1hdHJpeCkKIHsKLSAgICBtX3ByaXZhdGUtPnNldFN1Ymxh
eWVyVHJhbnNmb3JtKHRyYW5zZm9ybWF0aW9uTWF0cml4RnJvbVNrTWF0cml4NDQobWF0cml4KSk7
CisgICAgbV9wcml2YXRlLT5zZXRTdWJsYXllclRyYW5zZm9ybShXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCh0cmFuc2Zvcm1hdGlvbk1hdHJpeEZyb21Ta01hdHJpeDQ0KG1hdHJpeCkpKTsKIH0KIAog
U2tNYXRyaXg0NCBXZWJMYXllcjo6c3VibGF5ZXJUcmFuc2Zvcm0oKSBjb25zdAogewotICAgIHJl
dHVybiBza01hdHJpeDQ0RnJvbVRyYW5zZm9ybWF0aW9uTWF0cml4KG1fcHJpdmF0ZS0+c3VibGF5
ZXJUcmFuc2Zvcm0oKSk7CisgICAgcmV0dXJuIHNrTWF0cml4NDRGcm9tVHJhbnNmb3JtYXRpb25N
YXRyaXgobV9wcml2YXRlLT5zdWJsYXllclRyYW5zZm9ybSgpLnRvV2ViQ29yZVRyYW5zZm9ybSgp
KTsKIH0KIAogdm9pZCBXZWJMYXllcjo6c2V0VHJhbnNmb3JtKGNvbnN0IFNrTWF0cml4NDQmIG1h
dHJpeCkKIHsKLSAgICBtX3ByaXZhdGUtPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm1hdGlvbk1hdHJp
eEZyb21Ta01hdHJpeDQ0KG1hdHJpeCkpOworICAgIG1fcHJpdmF0ZS0+c2V0VHJhbnNmb3JtKFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4KHRyYW5zZm9ybWF0aW9uTWF0cml4RnJvbVNrTWF0cml4NDQo
bWF0cml4KSkpOwogfQogCiBTa01hdHJpeDQ0IFdlYkxheWVyOjp0cmFuc2Zvcm0oKSBjb25zdAog
ewotICAgIHJldHVybiBza01hdHJpeDQ0RnJvbVRyYW5zZm9ybWF0aW9uTWF0cml4KG1fcHJpdmF0
ZS0+dHJhbnNmb3JtKCkpOworICAgIHJldHVybiBza01hdHJpeDQ0RnJvbVRyYW5zZm9ybWF0aW9u
TWF0cml4KG1fcHJpdmF0ZS0+dHJhbnNmb3JtKCkudG9XZWJDb3JlVHJhbnNmb3JtKCkpOwogfQog
CiB2b2lkIFdlYkxheWVyOjpzZXREZWJ1Z0JvcmRlckNvbG9yKGNvbnN0IFdlYkNvbG9yJiBjb2xv
cikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlRyYW5zZm9ybWF0
aW9uTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlRyYW5zZm9ybWF0
aW9uTWF0cml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTJkNzIyMzBmYWFiZDY0NTE0NmZhZmQ2YmM1MmQ0
N2E2MjEzNGJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCkBAIC0wLDAgKzEsNDU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dlYlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCisKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgIldU
Ri9QYXNzT3duUHRyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4KCkKKyAgICA6IG1fcHJpdmF0ZShuZXcgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkKK3sKKyAg
ICAvLyBGSVhNRTogVGhlIG92ZXJoZWFkIG9mIGFsbG9jYXRpbmcgYSBuZXcgVHJhbnNmb3JtYXRp
b25NYXRyaXggbmVlZHMgdG8gZ28gYXdheSBhcyBzb29uIGFzIHBvc3NpYmxlLgorfQorCitXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoZG91YmxlIGEsIGRv
dWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBkb3VibGUgZikKKyAgICA6IG1f
cHJpdmF0ZShuZXcgVHJhbnNmb3JtYXRpb25NYXRyaXgoYSwgYiwgYywgZCwgZSwgZikpCit7Cisg
ICAgLy8gRklYTUU6IFRoZSBvdmVyaGVhZCBvZiBhbGxvY2F0aW5nIGEgbmV3IFRyYW5zZm9ybWF0
aW9uTWF0cml4IG5lZWRzIHRvIGdvIGF3YXkgYXMgc29vbiBhcyBwb3NzaWJsZS4KK30KKworV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXg6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0IFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4JiB0KQorICAgIDogbV9wcml2YXRlKG5ldyBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgqdC5tX3ByaXZhdGUuZ2V0KCkpKQoreworICAgIC8vIEZJWE1FOiBUaGUgb3Zlcmhl
YWQgb2YgYWxsb2NhdGluZyBhIG5ldyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBuZWVkcyB0byBnbyBh
d2F5IGFzIHNvb24gYXMgcG9zc2libGUuCit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKKyAg
ICA6IG1fcHJpdmF0ZShuZXcgVHJhbnNmb3JtYXRpb25NYXRyaXgodCkpCit7CisgICAgLy8gRklY
TUU6IFRoZSBvdmVyaGVhZCBvZiBhbGxvY2F0aW5nIGEgbmV3IFRyYW5zZm9ybWF0aW9uTWF0cml4
IG5lZWRzIHRvIGdvIGF3YXkgYXMgc29vbiBhcyBwb3NzaWJsZS4KK30KKworVHJhbnNmb3JtYXRp
b25NYXRyaXgmIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0b1dlYkNvcmVUcmFuc2Zvcm0oKSBj
b25zdAoreworICAgIHJldHVybiAqbV9wcml2YXRlLmdldCgpOworfQorCitXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yPShjb25zdCBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3sKKyAgICAqbV9wcml2YXRlLmdldCgpID0gKnQubV9w
cml2YXRlLmdldCgpOworICAgIHJldHVybiAqdGhpczsKK30KKworYm9vbCBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6b3BlcmF0b3I9PShjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkg
Y29uc3QKK3sKKyAgICBib29sIGlzRXF1YWwgPSAoKm1fcHJpdmF0ZS5nZXQoKSA9PSAqdC5tX3By
aXZhdGUuZ2V0KCkpOworICAgIHJldHVybiBpc0VxdWFsOworfQorCitXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3IqKGNvbnN0IFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4JiB0KSBjb25zdAoreworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IHJlc3VsdCA9ICp0aGlzOworICAgIHJlc3VsdC5tdWx0aXBseSh0KTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6aW52ZXJzZSgpIGNvbnN0Cit7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVzdWx0
OworICAgICpyZXN1bHQubV9wcml2YXRlLmdldCgpID0gbV9wcml2YXRlLT5pbnZlcnNlKCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXg6OnRvMmRUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IHJlc3VsdDsKKyAgICAqcmVzdWx0Lm1fcHJpdmF0ZS5nZXQoKSA9IG1fcHJp
dmF0ZS0+dG8yZFRyYW5zZm9ybSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXg6Om11bHRpcGx5KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0KQoreworICAgIG1fcHJpdmF0ZS0+bXVsdGlwbHkoKnQubV9wcml2YXRlLmdldCgpKTsK
K30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFrZUlkZW50aXR5KCkKK3sKKyAg
ICBtX3ByaXZhdGUtPm1ha2VJZGVudGl0eSgpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4Ojp0cmFuc2xhdGUoZG91YmxlIHR4LCBkb3VibGUgdHkpCit7CisgICAgbV9wcml2YXRl
LT50cmFuc2xhdGUodHgsIHR5KTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
dHJhbnNsYXRlM2QoZG91YmxlIHR4LCBkb3VibGUgdHksIGRvdWJsZSB0eikKK3sKKyAgICBtX3By
aXZhdGUtPnRyYW5zbGF0ZTNkKHR4LCB0eSwgdHopOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4Ojp0cmFuc2xhdGVSaWdodDNkKGRvdWJsZSB0eCwgZG91YmxlIHR5LCBkb3VibGUg
dHopCit7CisgICAgbV9wcml2YXRlLT50cmFuc2xhdGVSaWdodDNkKHR4LCB0eSwgdHopOworfQor
Cit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzY2FsZShkb3VibGUgcykKK3sKKyAgICBt
X3ByaXZhdGUtPnNjYWxlKHMpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpz
Y2FsZU5vblVuaWZvcm0oZG91YmxlIHN4LCBkb3VibGUgc3kpCit7CisgICAgbV9wcml2YXRlLT5z
Y2FsZU5vblVuaWZvcm0oc3gsIHN5KTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6c2NhbGUzZChkb3VibGUgc3gsIGRvdWJsZSBzeSwgZG91YmxlIHN6KQoreworICAgIG1fcHJp
dmF0ZS0+c2NhbGUzZChzeCwgc3ksIHN6KTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6cm90YXRlKGRvdWJsZSBhbmdsZSkKK3sKKyAgICBtX3ByaXZhdGUtPnJvdGF0ZShhbmds
ZSk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJvdGF0ZTNkKGRvdWJsZSBy
eCwgZG91YmxlIHJ5LCBkb3VibGUgcnopCit7CisgICAgbV9wcml2YXRlLT5yb3RhdGUzZChyeCwg
cnksIHJ6KTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cm90YXRlM2QoZG91
YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlIGFuZ2xlKQoreworICAgIG1fcHJpdmF0
ZS0+cm90YXRlM2QoeCwgeSwgeiwgYW5nbGUpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4Ojpza2V3WChkb3VibGUgYW5nbGUpCit7CisgICAgbV9wcml2YXRlLT5za2V3WChhbmds
ZSk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNrZXdZKGRvdWJsZSBhbmds
ZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNrZXdZKGFuZ2xlKTsKK30KKwordm9pZCBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6YXBwbHlQZXJzcGVjdGl2ZShkb3VibGUgcCkKK3sKKyAgICBtX3ByaXZh
dGUtPmFwcGx5UGVyc3BlY3RpdmUocCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXg6OmJsZW5kKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBmcm9tLCBkb3VibGUgcHJv
Z3Jlc3MpCit7CisgICAgbV9wcml2YXRlLT5ibGVuZCgqZnJvbS5tX3ByaXZhdGUuZ2V0KCksIHBy
b2dyZXNzKTsKK30KKworYm9vbCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6aGFzUGVyc3BlY3Rp
dmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmhhc1BlcnNwZWN0aXZlKCk7Cit9
CisKK2Jvb2wgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmlzSW52ZXJ0aWJsZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNJbnZlcnRpYmxlKCk7Cit9CisKK2Jvb2wgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXg6OmlzQmFja0ZhY2VWaXNpYmxlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5pc0JhY2tGYWNlVmlzaWJsZSgpOworfQorCitib29sIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4Ojppc0lkZW50aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5pc0lkZW50aXR5KCk7Cit9CisKK2Jvb2wgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmlzSWRl
bnRpdHlPclRyYW5zbGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0lk
ZW50aXR5T3JUcmFuc2xhdGlvbigpOworfQorCitib29sIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
Ojppc0ludGVnZXJUcmFuc2xhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
aXNJbnRlZ2VyVHJhbnNsYXRpb24oKTsKK30KKworRmxvYXRSZWN0IFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4OjptYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5tYXBSZWN0KHJlY3QpOworfQorCitJbnRSZWN0IFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4OjptYXBSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+bWFwUmVjdChyZWN0KTsKK30KKworRmxvYXRQb2ludDNEIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4OjptYXBQb2ludChjb25zdCBGbG9hdFBvaW50M0QmIHApIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFwUG9pbnQocCk7Cit9CisKK0Zsb2F0UG9pbnQgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFBvaW50KGNvbnN0IEZsb2F0UG9pbnQmIHApIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFwUG9pbnQocCk7Cit9CisKK0ludFBvaW50IFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBQb2ludChjb25zdCBJbnRQb2ludCYgcCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tYXBQb2ludChwKTsKK30KKworRmxvYXRRdWFkIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBRdWFkKGNvbnN0IEZsb2F0UXVhZCYgcXVhZCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tYXBRdWFkKHF1YWQpOworfQorCitGbG9hdFBv
aW50IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpwcm9qZWN0UG9pbnQoY29uc3QgRmxvYXRQb2lu
dCYgcCwgYm9vbCogY2xhbXBlZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5wcm9q
ZWN0UG9pbnQocCwgY2xhbXBlZCk7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6bTExKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tMTEoKTsKK30KKwordm9p
ZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTExKGRvdWJsZSBmKQoreworICAgIG1fcHJp
dmF0ZS0+c2V0TTExKGYpOworfQorCitkb3VibGUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0x
MigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bTEyKCk7Cit9CisKK3ZvaWQgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE0xMihkb3VibGUgZikKK3sKKyAgICBtX3ByaXZhdGUt
PnNldE0xMihmKTsKK30KKworZG91YmxlIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMTMoKSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm0xMygpOworfQorCit2b2lkIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpzZXRNMTMoZG91YmxlIGYpCit7CisgICAgbV9wcml2YXRlLT5zZXRN
MTMoZik7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTE0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tMTQoKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6c2V0TTE0KGRvdWJsZSBmKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TTE0KGYp
OworfQorCitkb3VibGUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0yMSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+bTIxKCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXg6OnNldE0yMShkb3VibGUgZikKK3sKKyAgICBtX3ByaXZhdGUtPnNldE0yMShmKTsKK30K
KworZG91YmxlIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMjIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPm0yMigpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
OjpzZXRNMjIoZG91YmxlIGYpCit7CisgICAgbV9wcml2YXRlLT5zZXRNMjIoZik7Cit9CisKK2Rv
dWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTIzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5tMjMoKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0
TTIzKGRvdWJsZSBmKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TTIzKGYpOworfQorCitkb3VibGUg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0yNCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+bTI0KCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE0yNChk
b3VibGUgZikKK3sKKyAgICBtX3ByaXZhdGUtPnNldE0yNChmKTsKK30KKworZG91YmxlIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4OjptMzEoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUt
Pm0zMSgpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNMzEoZG91Ymxl
IGYpCit7CisgICAgbV9wcml2YXRlLT5zZXRNMzEoZik7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6bTMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tMzIo
KTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTMyKGRvdWJsZSBmKQor
eworICAgIG1fcHJpdmF0ZS0+c2V0TTMyKGYpOworfQorCitkb3VibGUgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXg6Om0zMygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bTMzKCk7Cit9
CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE0zMyhkb3VibGUgZikKK3sKKyAg
ICBtX3ByaXZhdGUtPnNldE0zMyhmKTsKK30KKworZG91YmxlIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4OjptMzQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm0zNCgpOworfQorCit2
b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNMzQoZG91YmxlIGYpCit7CisgICAgbV9w
cml2YXRlLT5zZXRNMzQoZik7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
bTQxKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tNDEoKTsKK30KKwordm9pZCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTQxKGRvdWJsZSBmKQoreworICAgIG1fcHJpdmF0
ZS0+c2V0TTQxKGYpOworfQorCitkb3VibGUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om00Migp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bTQyKCk7Cit9CisKK3ZvaWQgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXg6OnNldE00Mihkb3VibGUgZikKK3sKKyAgICBtX3ByaXZhdGUtPnNl
dE00MihmKTsKK30KKworZG91YmxlIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptNDMoKSBjb25z
dAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm00MygpOworfQorCit2b2lkIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4OjpzZXRNNDMoZG91YmxlIGYpCit7CisgICAgbV9wcml2YXRlLT5zZXRNNDMo
Zik7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTQ0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5tNDQoKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6c2V0TTQ0KGRvdWJsZSBmKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TTQ0KGYpOwor
fQorCitkb3VibGUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmEoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmEoKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
c2V0QShkb3VibGUgYSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldEEoYSk7Cit9CisKK2RvdWJsZSBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+YigpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRCKGRvdWJsZSBi
KQoreworICAgIG1fcHJpdmF0ZS0+c2V0QihiKTsKK30KKworZG91YmxlIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4OjpjKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jKCk7Cit9CisK
K3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEMoZG91YmxlIGMpCit7CisgICAgbV9w
cml2YXRlLT5zZXRDKGMpOworfQorCitkb3VibGUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmQo
KSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmQoKTsKK30KKwordm9pZCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6c2V0RChkb3VibGUgZCkKK3sKKyAgICBtX3ByaXZhdGUtPnNldEQo
ZCk7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6ZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZSgpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4OjpzZXRFKGRvdWJsZSBlKQoreworICAgIG1fcHJpdmF0ZS0+c2V0RShlKTsKK30KKworZG91
YmxlIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpmKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5mKCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEYoZG91
YmxlIGYpCit7CisgICAgbV9wcml2YXRlLT5zZXRGKGYpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRp
b25UZXN0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NBbmltYXRp
b25UZXN0Q29tbW9uLmNwcAppbmRleCAzNmY3OTgxOGVmMDllODM4Y2M5ODI3YjhmYTE2MjU4ODE5
NTBkYTQyLi4wZThjMWE0MDFmNmM4YmJkZTIyMzIzMWQyYzkzZmQ5ODRiMzUyMTNhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21t
b24uY3BwCkBAIC05OSw5ICs5OSw5IEBAIEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjp+RmFrZVRy
YW5zZm9ybVRyYW5zaXRpb24oKQogewogfQogCi1XZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBGYWtlVHJhbnNmb3JtVHJhbnNpdGlvbjo6Z2V0VmFsdWUoZG91YmxlIHRpbWUsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHNpemUpIGNvbnN0CitXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IEZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpnZXRWYWx1ZShkb3VibGUgdGltZSwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgc2l6ZSkgY29uc3QKIHsKLSAgICByZXR1cm4gV2ViQ29yZTo6VHJh
bnNmb3JtYXRpb25NYXRyaXgoKTsKKyAgICByZXR1cm4gV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpOwogfQogCiBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IEZh
a2VUcmFuc2Zvcm1UcmFuc2l0aW9uOjpjbG9uZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9DQ0FuaW1hdGlvblRlc3RDb21tb24uaAppbmRleCA3NzZiNzVj
OGQ2ZjZlYWU0OWNiMmMyOGVlOGQ2M2MyMWJlMTIzODM0Li41NThiNDViMDg3ZjljNTE5MDFkMGZj
MmEzY2M4OTAyOWUwOGU0ZjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDQW5pbWF0aW9uVGVzdENvbW1vbi5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NBbmltYXRpb25UZXN0Q29tbW9uLmgKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgfkZha2VUcmFuc2Zvcm1UcmFuc2l0aW9uKCk7CiAKICAgICB2aXJ0dWFsIGRv
dWJsZSBkdXJhdGlvbigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fZHVyYXRpb247IH0KLSAg
ICB2aXJ0dWFsIFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0
aW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgY29uc3QgT1ZFUlJJREU7CisgICAgdmlydHVh
bCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVlKGRvdWJsZSB0aW1lLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJikgY29uc3QgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIFBh
c3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gY2xvbmUoKSBjb25zdCBPVkVSUklE
RTsKIApAQCAtODYsMTMgKzg2LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBpZCgpIGNv
bnN0IE9WRVJSSURFIHsgcmV0dXJuIDA7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0T3BhY2l0eUZy
b21BbmltYXRpb24oZmxvYXQgb3BhY2l0eSkgT1ZFUlJJREUgeyBtX29wYWNpdHkgPSBvcGFjaXR5
OyB9CiAgICAgdmlydHVhbCBmbG9hdCBvcGFjaXR5KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4g
bV9vcGFjaXR5OyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybUZyb21BbmltYXRpb24o
Y29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSkgT1ZFUlJJREUg
eyBtX3RyYW5zZm9ybSA9IHRyYW5zZm9ybTsgfQotICAgIHZpcnR1YWwgY29uc3QgV2ViQ29yZTo6
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJu
IG1fdHJhbnNmb3JtOyB9CisgICAgdmlydHVhbCB2b2lkIHNldFRyYW5zZm9ybUZyb21BbmltYXRp
b24oY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtKSBPVkVS
UklERSB7IG1fdHJhbnNmb3JtID0gdHJhbnNmb3JtOyB9CisgICAgdmlydHVhbCBjb25zdCBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0oKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBtX3RyYW5zZm9ybTsgfQogICAgIHZpcnR1YWwgY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYgYm91bmRzKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9ib3VuZHM7IH0KIAogcHJpdmF0
ZToKICAgICBmbG9hdCBtX29wYWNpdHk7Ci0gICAgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRy
aXggbV90cmFuc2Zvcm07CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtX3Ry
YW5zZm9ybTsKICAgICBXZWJDb3JlOjpJbnRTaXplIG1fYm91bmRzOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NEYW1hZ2VUcmFja2VyVGVzdC5jcHAKaW5k
ZXggMTFhODg3ODRiOWUxYzJkOTdlYWZhMjdiNGFmMzA5ZTE3NWEzZGM4OC4uZDE2ZjU5MjFmMDY1
ZWRjYjUxOWUwYmZmZTI2NWFmMTNhYjEwMTZhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9DQ0RhbWFnZVRyYWNrZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDRGFtYWdlVHJhY2tlclRlc3QuY3BwCkBAIC00Myw3ICs0Myw3IEBA
IG5hbWVzcGFjZSB7CiB2b2lkIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2li
aWxpdHkoQ0NMYXllckltcGwqIHJvb3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KQogewogICAgIENDTGF5ZXJTb3J0ZXIgbGF5ZXJTb3J0ZXI7Ci0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBWZWN0b3I8Q0NMYXllckltcGwqPiBk
dW1teUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKIApAQCAt
Mjg4LDcgKzI4OCw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2ZXJpZnlEYW1hZ2VG
b3JUcmFuc2Zvcm1lZExheWVyKQogICAgIE93blB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IGNyZWF0
ZUFuZFNldFVwVGVzdFRyZWVXaXRoT25lU3VyZmFjZSgpOwogICAgIENDTGF5ZXJJbXBsKiBjaGls
ZCA9IHJvb3QtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCByb3RhdGlvbjsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJvdGF0aW9u
OwogICAgIHJvdGF0aW9uLnJvdGF0ZSg0NSk7CiAKICAgICAvLyBOb3RlIGNhcmVmdWxseSwgdGhl
IGFuY2hvciBpcyBhY3R1YWxseSBwYXJ0IG9mIGxheWVyLT5wb3NpdGlvbigpLiBCeSBzZXR0aW5n
IGFuY2hvcgpAQCAtMzI5LDcgKzMyOSw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNrZXJUZXN0LCB2
ZXJpZnlEYW1hZ2VGb3JQZXJzcGVjdGl2ZUNsaXBwZWRMYXllcikKICAgICBPd25QdHI8Q0NMYXll
ckltcGw+IHJvb3QgPSBjcmVhdGVBbmRTZXRVcFRlc3RUcmVlV2l0aE9uZVN1cmZhY2UoKTsKICAg
ICBDQ0xheWVySW1wbCogY2hpbGQgPSByb290LT5jaGlsZHJlbigpWzBdLmdldCgpOwogCi0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggdHJhbnNmb3JtOwogICAgIHRyYW5zZm9ybS5hcHBseVBlcnNwZWN0aXZlKDEp
OwogICAgIHRyYW5zZm9ybS50cmFuc2xhdGUzZCgtMTUwLCAtNTAsIDApOwogICAgIHRyYW5zZm9y
bS5yb3RhdGUzZCgwLCA0NSwgMCk7CkBAIC03NTUsNyArNzU1LDcgQEAgVEVTVF9GKENDRGFtYWdl
VHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclJlcGxpY2EpCiAgICAgICAgIE93blB0cjxDQ0xh
eWVySW1wbD4gZ3JhbmRDaGlsZDFSZXBsaWNhID0gQ0NMYXllckltcGw6OmNyZWF0ZSg3KTsKICAg
ICAgICAgZ3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50Ojp6ZXJvKCkp
OwogICAgICAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQ6
Onplcm8oKSk7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlZmxlY3Rpb247CisgICAg
ICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVmbGVjdGlvbjsKICAgICAgICAg
cmVmbGVjdGlvbi5zY2FsZTNkKC0xLjAsIDEuMCwgMS4wKTsKICAgICAgICAgZ3JhbmRDaGlsZDFS
ZXBsaWNhLT5zZXRUcmFuc2Zvcm0ocmVmbGVjdGlvbik7CiAgICAgICAgIGdyYW5kQ2hpbGQxLT5z
ZXRSZXBsaWNhTGF5ZXIoZ3JhbmRDaGlsZDFSZXBsaWNhLnJlbGVhc2UoKSk7CkBAIC04OTQsNyAr
ODk0LDcgQEAgVEVTVF9GKENDRGFtYWdlVHJhY2tlclRlc3QsIHZlcmlmeURhbWFnZUZvclJlcGxp
Y2FNYXNrKQogICAgICAgICBPd25QdHI8Q0NMYXllckltcGw+IGdyYW5kQ2hpbGQxUmVwbGljYSA9
IENDTGF5ZXJJbXBsOjpjcmVhdGUoNik7CiAgICAgICAgIGdyYW5kQ2hpbGQxUmVwbGljYS0+c2V0
UG9zaXRpb24oRmxvYXRQb2ludDo6emVybygpKTsKICAgICAgICAgZ3JhbmRDaGlsZDFSZXBsaWNh
LT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50Ojp6ZXJvKCkpOwotICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCByZWZsZWN0aW9uOworICAgICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IHJlZmxlY3Rpb247CiAgICAgICAgIHJlZmxlY3Rpb24uc2NhbGUzZCgtMS4wLCAxLjAs
IDEuMCk7CiAgICAgICAgIGdyYW5kQ2hpbGQxUmVwbGljYS0+c2V0VHJhbnNmb3JtKHJlZmxlY3Rp
b24pOwogICAgICAgICBncmFuZENoaWxkMS0+c2V0UmVwbGljYUxheWVyKGdyYW5kQ2hpbGQxUmVw
bGljYS5yZWxlYXNlKCkpOwpAQCAtOTU0LDcgKzk1NCw3IEBAIFRFU1RfRihDQ0RhbWFnZVRyYWNr
ZXJUZXN0LCB2ZXJpZnlEYW1hZ2VGb3JSZXBsaWNhTWFza1dpdGhBbmNob3IpCiAgICAgICAgIE93
blB0cjxDQ0xheWVySW1wbD4gZ3JhbmRDaGlsZDFSZXBsaWNhID0gQ0NMYXllckltcGw6OmNyZWF0
ZSg2KTsKICAgICAgICAgZ3JhbmRDaGlsZDFSZXBsaWNhLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50
Ojp6ZXJvKCkpOwogICAgICAgICBncmFuZENoaWxkMVJlcGxpY2EtPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQ6Onplcm8oKSk7IC8vIG5vdGUsIHRoaXMgaXMgbm90IHRoZSBhbmNob3IgYmVpbmcg
dGVzdGVkLgotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZWZsZWN0aW9uOworICAgICAg
ICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJlZmxlY3Rpb247CiAgICAgICAgIHJl
ZmxlY3Rpb24uc2NhbGUzZCgtMS4wLCAxLjAsIDEuMCk7CiAgICAgICAgIGdyYW5kQ2hpbGQxUmVw
bGljYS0+c2V0VHJhbnNmb3JtKHJlZmxlY3Rpb24pOwogICAgICAgICBncmFuZENoaWxkMS0+c2V0
UmVwbGljYUxheWVyKGdyYW5kQ2hpbGQxUmVwbGljYS5yZWxlYXNlKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlVGVz
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJhbWVkQW5pbWF0aW9u
Q3VydmVUZXN0LmNwcAppbmRleCAxNWI1NTRhMDY5MDU3NTJmMWJkZWZjYjhhZWJiODcyOGZlZWZh
NTVhLi5kMDhiNDlmNTk3M2E5YmEwNjI5NDIyODQwMTY2NGY2OTA1M2Y0OTZmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmVU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDS2V5ZnJhbWVkQW5p
bWF0aW9uQ3VydmVUZXN0LmNwcApAQCAtMzgsMTEgKzM4LDExIEBAIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCiBuYW1lc3BhY2UgewogCi12b2lkIGV4cGVjdFRyYW5zbGF0ZVgoZG91YmxlIHRy
YW5zbGF0ZVgsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgpCit2b2lkIGV4cGVj
dFRyYW5zbGF0ZVgoZG91YmxlIHRyYW5zbGF0ZVgsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCkKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6RGVjb21w
b3NlZFR5cGUgZGVjb21wb3NlZFR5cGU7Ci0gICAgbWF0cml4LmRlY29tcG9zZShkZWNvbXBvc2Vk
VHlwZSk7Ci0gICAgRVhQRUNUX0ZMT0FUX0VRKHRyYW5zbGF0ZVgsIGRlY29tcG9zZWRUeXBlLnRy
YW5zbGF0ZVgpOworICAgIC8vV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6RGVjb21w
b3NlZFR5cGUgZGVjb21wb3NlZFR5cGU7CisgICAgLy9tYXRyaXguZGVjb21wb3NlKGRlY29tcG9z
ZWRUeXBlKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEodHJhbnNsYXRlWCwgbWF0cml4Lm00MSgpKTsK
IH0KIAogLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIG9uZSBrZXlmcmFtZSB3
b3JrcyBhcyBleHBlY3RlZC4KQEAgLTE5MSwxMCArMTkxLDEwIEBAIFRFU1QoQ0NLZXlmcmFtZWRB
bmltYXRpb25DdXJ2ZVRlc3QsIFJlcGVhdGVkVHJhbnNmb3JtS2V5VGltZXMpCiAgICAgZXhwZWN0
VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41LCBsYXllclNpemUpKTsKIAogICAgIC8v
IFRoZXJlIGlzIGEgZGlzY29udGludWl0eSBhdCAxLiBBbnkgdmFsdWUgYmV0d2VlbiA0IGFuZCA2
IGlzIHZhbGlkLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZhbHVlID0gY3VydmUtPmdldFZh
bHVlKDEsIGxheWVyU2l6ZSk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXg6OkRlY29tcG9zZWRU
eXBlIGRlY29tcG9zZWRUeXBlOwotICAgIHZhbHVlLmRlY29tcG9zZShkZWNvbXBvc2VkVHlwZSk7
Ci0gICAgRVhQRUNUX1RSVUUoZGVjb21wb3NlZFR5cGUudHJhbnNsYXRlWCA+PSA0ICYmIGRlY29t
cG9zZWRUeXBlLnRyYW5zbGF0ZVggPD0gNik7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCB2YWx1ZSA9IGN1cnZlLT5nZXRWYWx1ZSgxLCBsYXllclNpemUpOworICAgIC8vV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NlZFR5
cGU7CisgICAgLy92YWx1ZS5kZWNvbXBvc2UoZGVjb21wb3NlZFR5cGUpOworICAgIEVYUEVDVF9U
UlVFKHZhbHVlLm00MSgpID49IDQgJiYgdmFsdWUubTQxKCkgPD0gNik7CiAKICAgICBleHBlY3RU
cmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUsIGxheWVyU2l6ZSkpOwogICAgIGV4cGVj
dFRyYW5zbGF0ZVgoNiwgY3VydmUtPmdldFZhbHVlKDIsIGxheWVyU2l6ZSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9uQ29udHJvbGxl
clRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyQW5pbWF0aW9u
Q29udHJvbGxlclRlc3QuY3BwCmluZGV4IDFkNTQwOWY5OGVkZDFhMzk0ZWU0Zjk5OWRhNmQ0NzUy
Y2E2NjU4ZTMuLmRjMTUyYjAxMGY1ZTBhNzZmYjNhOGMxMTk2NmEzNzdhMTc3NzFkMTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckFuaW1hdGlvbkNvbnRy
b2xsZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyVGVzdC5jcHAKQEAgLTQyLDExICs0MiwxMiBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViS2l0VGVzdHM7CiAKIG5hbWVzcGFjZSB7CiAKLXZvaWQgZXhwZWN0VHJhbnNsYXRl
WChkb3VibGUgdHJhbnNsYXRlWCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkK
K3ZvaWQgZXhwZWN0VHJhbnNsYXRlWChkb3VibGUgdHJhbnNsYXRlWCwgY29uc3QgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4KQogewotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4OjpEZWNvbXBvc2VkVHlwZSBkZWNvbXBvc2VkVHlwZTsKLSAgICBtYXRyaXguZGVjb21wb3Nl
KGRlY29tcG9zZWRUeXBlKTsKLSAgICBFWFBFQ1RfRkxPQVRfRVEodHJhbnNsYXRlWCwgZGVjb21w
b3NlZFR5cGUudHJhbnNsYXRlWCk7CisgICAgLy9XZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NlZFR5cGU7CisgICAgLy9tYXRyaXguZGVjb21wb3Nl
KGRlY29tcG9zZWRUeXBlKTsKKyAgICAvL0VYUEVDVF9GTE9BVF9FUSh0cmFuc2xhdGVYLCBkZWNv
bXBvc2VkVHlwZS50cmFuc2xhdGVYKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEodHJhbnNsYXRlWCwg
bWF0cml4Lm00MSgpKTsKIH0KIAogUGFzc093blB0cjxDQ0FjdGl2ZUFuaW1hdGlvbj4gY3JlYXRl
QWN0aXZlQW5pbWF0aW9uKFBhc3NPd25QdHI8Q0NBbmltYXRpb25DdXJ2ZT4gY3VydmUsIGludCBp
ZCwgQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHByb3BlcnR5KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySW1wbFRlc3QuY3BwCmluZGV4IDM2YzEw
ODJiNzU4MzdkN2Y5OGUyMDdjYmQ5NzM4ZWRlN2ZjODYxNmUuLjU4YzIxNWY3YjcxMjRkYjE5NTE4
MDc3MzI3OTMwY2FjOWYzODEwNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllckltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJJbXBsVGVzdC5jcHAKQEAgLTgzLDcgKzgzLDcgQEAgVEVTVChDQ0xheWVySW1w
bFRlc3QsIHZlcmlmeUxheWVyQ2hhbmdlc0FyZVRyYWNrZWRQcm9wZXJseSkKICAgICBJbnRSZWN0
IGFyYml0cmFyeUludFJlY3QgPSBJbnRSZWN0KGFyYml0cmFyeUludFBvaW50LCBhcmJpdHJhcnlJ
bnRTaXplKTsKICAgICBGbG9hdFJlY3QgYXJiaXRyYXJ5RmxvYXRSZWN0ID0gRmxvYXRSZWN0KGFy
Yml0cmFyeUZsb2F0UG9pbnQsIEZsb2F0U2l6ZSgxLjIzNGYsIDUuNjc4ZikpOwogICAgIENvbG9y
IGFyYml0cmFyeUNvbG9yID0gQ29sb3IoMTAsIDIwLCAzMCk7Ci0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggYXJiaXRyYXJ5VHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggYXJiaXRyYXJ5VHJhbnNmb3JtOwogICAgIGFyYml0cmFyeVRyYW5zZm9ybS5zY2FsZTNk
KDAuMSwgMC4yLCAwLjMpOwogICAgIEZpbHRlck9wZXJhdGlvbnMgYXJiaXRyYXJ5RmlsdGVyczsK
ICAgICBhcmJpdHJhcnlGaWx0ZXJzLm9wZXJhdGlvbnMoKS5hcHBlbmQoQmFzaWNDb21wb25lbnRU
cmFuc2ZlckZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKDAuNSwgRmlsdGVyT3BlcmF0aW9uOjpPUEFD
SVRZKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJ
dGVyYXRvclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVySXRl
cmF0b3JUZXN0LmNwcAppbmRleCBmNWVhZTdmODRkZDUxMjVjODA5OTViOWNkNDI5Yjk5YmNiZjY5
MzM0Li4zMzU5ZmE4OWM1ZmRiZWVlYmViNTZiYTYwOTI2MDdlYWYxNTBiYjIyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJJdGVyYXRvclRlc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllckl0ZXJhdG9yVGVzdC5jcHAK
QEAgLTEzOSw3ICsxMzksNyBAQCBURVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIHNpbXBsZVRyZWUp
CiAgICAgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+IGxheWVyTGlzdDsKICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChyb290TGF5ZXIuZ2V0KCkpOwogICAgIENDTGF5ZXJU
cmVlSG9zdENvbW1vbjo6Y2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KHJvb3RM
YXllci5nZXQoKSwgcm9vdExheWVyLmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpLCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgbGF5ZXJMaXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI1Nik7CiAKQEAgLTE4
Niw3ICsxODYsNyBAQCBURVNUKENDTGF5ZXJJdGVyYXRvclRlc3QsIGNvbXBsZXhUcmVlKQogICAg
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBsYXllckxpc3Q7CiAgICAgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdC5hcHBlbmQocm9vdExheWVyLmdldCgpKTsKICAgICBDQ0xheWVyVHJlZUhv
c3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShyb290TGF5ZXIu
Z2V0KCksIHJvb3RMYXllci5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgoKSwgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRl
clN1cmZhY2VMYXllckxpc3QsIGxheWVyTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTYpOwogCkBAIC0yNDUsNyAr
MjQ1LDcgQEAgVEVTVChDQ0xheWVySXRlcmF0b3JUZXN0LCBjb21wbGV4VHJlZU11bHRpU3VyZmFj
ZSkKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gbGF5ZXJMaXN0OwogICAgIHJl
bmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKHJvb3RMYXllci5nZXQoKSk7CiAgICAgQ0NMYXll
clRyZWVIb3N0Q29tbW9uOjpjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkocm9v
dExheWVyLmdldCgpLCByb290TGF5ZXIuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXgoKSwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4KCksIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBsYXllckxpc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjU2KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyU29ydGVyVGVzdC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJTb3J0ZXJUZXN0LmNwcApp
bmRleCA2NWRiNTQ5YmFmODE0ZjBjZmYzNGUwNjg4YjM5YThjYTJkYTEyZDI5Li42OTZmN2U1ZDY0
YWRlMjFmODI1ODY2ZGFkMjdhYjdkMDE5M2Q5NTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJTb3J0ZXJUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJTb3J0ZXJUZXN0LmNwcApAQCAtNDYsMTEgKzQ2LDExIEBA
IFRFU1QoQ0NMYXllclNvcnRlclRlc3QsIEJhc2ljT3ZlcmxhcCkKICAgICBmbG9hdCB3ZWlnaHQg
PSAwOwogCiAgICAgLy8gVHJpdmlhbCB0ZXN0LCB3aXRoIG9uZSBsYXllciBkaXJlY3RseSBvYnNj
dXJpbmcgdGhlIG90aGVyLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG5lZzRUcmFuc2xhdGU7
CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBuZWc0VHJhbnNsYXRlOwogICAg
IG5lZzRUcmFuc2xhdGUudHJhbnNsYXRlM2QoMCwgMCwgLTQpOwogICAgIENDTGF5ZXJTb3J0ZXI6
OkxheWVyU2hhcGUgZnJvbnQoMiwgMiwgbmVnNFRyYW5zbGF0ZSk7CiAKLSAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBuZWc1VHJhbnNsYXRlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggbmVnNVRyYW5zbGF0ZTsKICAgICBuZWc1VHJhbnNsYXRlLnRyYW5zbGF0ZTNkKDAsIDAs
IC01KTsKICAgICBDQ0xheWVyU29ydGVyOjpMYXllclNoYXBlIGJhY2soMiwgMiwgbmVnNVRyYW5z
bGF0ZSk7CiAKQEAgLTYzLDcgKzYzLDcgQEAgVEVTVChDQ0xheWVyU29ydGVyVGVzdCwgQmFzaWNP
dmVybGFwKQogICAgIEVYUEVDVF9FUSgxLCB3ZWlnaHQpOwogCiAgICAgLy8gT25lIGxheWVyIHRy
YW5zbGF0ZWQgb2ZmIHRvIHRoZSByaWdodC4gTm8gb3ZlcmxhcCBzaG91bGQgYmUgZGV0ZWN0ZWQu
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmlnaHRUcmFuc2xhdGU7CisgICAgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByaWdodFRyYW5zbGF0ZTsKICAgICByaWdodFRyYW5zbGF0
ZS50cmFuc2xhdGUzZCgxMCwgMCwgLTUpOwogICAgIENDTGF5ZXJTb3J0ZXI6OkxheWVyU2hhcGUg
YmFja1JpZ2h0KDIsIDIsIHJpZ2h0VHJhbnNsYXRlKTsKICAgICBvdmVybGFwUmVzdWx0ID0gQ0NM
YXllclNvcnRlcjo6Y2hlY2tPdmVybGFwKCZmcm9udCwgJmJhY2tSaWdodCwgelRocmVzaG9sZCwg
d2VpZ2h0KTsKQEAgLTgwLDE0ICs4MCwxNSBAQCBURVNUKENDTGF5ZXJTb3J0ZXJUZXN0LCBSaWdo
dEFuZ2xlT3ZlcmxhcCkKICAgICBjb25zdCBmbG9hdCB6VGhyZXNob2xkID0gMC4xZjsKICAgICBm
bG9hdCB3ZWlnaHQgPSAwOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGVyc3BlY3RpdmVN
YXRyaXg7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwZXJzcGVjdGl2ZU1h
dHJpeDsKICAgICBwZXJzcGVjdGl2ZU1hdHJpeC5hcHBseVBlcnNwZWN0aXZlKDEwMDApOwogCiAg
ICAgLy8gVHdvIGxheWVycyBmb3JtaW5nIGEgcmlnaHQgYW5nbGUgd2l0aCBhIHBlcnNwZWN0aXZl
IHZpZXdpbmcgdHJhbnNmb3JtLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxlZnRGYWNlTWF0
cml4OwotICAgIGxlZnRGYWNlTWF0cml4LnJvdGF0ZTNkKDAsIDEsIDAsIC05MCkudHJhbnNsYXRl
UmlnaHQzZCgtMSwgMCwgLTUpOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGVmdEZhY2VNYXRyaXg7CisgICAgbGVmdEZhY2VNYXRyaXgucm90YXRlM2QoMCwgMSwgMCwgLTkw
KTsKKyAgICBsZWZ0RmFjZU1hdHJpeC50cmFuc2xhdGVSaWdodDNkKC0xLCAwLCAtNSk7CiAgICAg
Q0NMYXllclNvcnRlcjo6TGF5ZXJTaGFwZSBsZWZ0RmFjZSgyLCAyLCBwZXJzcGVjdGl2ZU1hdHJp
eCAqIGxlZnRGYWNlTWF0cml4KTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9udEZhY2VN
YXRyaXg7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9udEZhY2VNYXRy
aXg7CiAgICAgZnJvbnRGYWNlTWF0cml4LnRyYW5zbGF0ZTNkKDAsIDAsIC00KTsKICAgICBDQ0xh
eWVyU29ydGVyOjpMYXllclNoYXBlIGZyb250RmFjZSgyLCAyLCBwZXJzcGVjdGl2ZU1hdHJpeCAq
IGZyb250RmFjZU1hdHJpeCk7CiAKQEAgLTEwMSwxNyArMTAyLDE4IEBAIFRFU1QoQ0NMYXllclNv
cnRlclRlc3QsIEludGVyc2VjdGluZ0xheWVyT3ZlcmxhcCkKICAgICBjb25zdCBmbG9hdCB6VGhy
ZXNob2xkID0gMC4xZjsKICAgICBmbG9hdCB3ZWlnaHQgPSAwOwogCi0gICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggcGVyc3BlY3RpdmVNYXRyaXg7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBwZXJzcGVjdGl2ZU1hdHJpeDsKICAgICBwZXJzcGVjdGl2ZU1hdHJpeC5hcHBseVBl
cnNwZWN0aXZlKDEwMDApOwogCiAgICAgLy8gSW50ZXJzZWN0aW5nIGxheWVycy4gQW4gZXhwbGlj
aXQgb3JkZXIgd2lsbCBiZSByZXR1cm5lZCBiYXNlZCBvbiByZWxhdGl2ZSB6CiAgICAgLy8gdmFs
dWVzIGF0IHRoZSBvdmVybGFwcGluZyBmZWF0dXJlcyBidXQgdGhlIHdlaWdodCByZXR1cm5lZCBz
aG91bGQgYmUgemVyby4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9udEZhY2VNYXRyaXg7
CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBmcm9udEZhY2VNYXRyaXg7CiAg
ICAgZnJvbnRGYWNlTWF0cml4LnRyYW5zbGF0ZTNkKDAsIDAsIC00KTsKICAgICBDQ0xheWVyU29y
dGVyOjpMYXllclNoYXBlIGZyb250RmFjZSgyLCAyLCBwZXJzcGVjdGl2ZU1hdHJpeCAqIGZyb250
RmFjZU1hdHJpeCk7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0aHJvdWdoTWF0cml4Owot
ICAgIHRocm91Z2hNYXRyaXgucm90YXRlM2QoMCwgMSwgMCwgNDUpLnRyYW5zbGF0ZVJpZ2h0M2Qo
MCwgMCwgLTQpOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdGhyb3VnaE1h
dHJpeDsKKyAgICB0aHJvdWdoTWF0cml4LnJvdGF0ZTNkKDAsIDEsIDAsIDQ1KTsKKyAgICB0aHJv
dWdoTWF0cml4LnRyYW5zbGF0ZVJpZ2h0M2QoMCwgMCwgLTQpOwogICAgIENDTGF5ZXJTb3J0ZXI6
OkxheWVyU2hhcGUgcm90YXRlZEZhY2UoMiwgMiwgcGVyc3BlY3RpdmVNYXRyaXggKiB0aHJvdWdo
TWF0cml4KTsKICAgICBvdmVybGFwUmVzdWx0ID0gQ0NMYXllclNvcnRlcjo6Y2hlY2tPdmVybGFw
KCZmcm9udEZhY2UsICZyb3RhdGVkRmFjZSwgelRocmVzaG9sZCwgd2VpZ2h0KTsKICAgICBFWFBF
Q1RfTkUoQ0NMYXllclNvcnRlcjo6Tm9uZSwgb3ZlcmxhcFJlc3VsdCk7CkBAIC0xMzYsMTUgKzEz
OCwxNSBAQCBURVNUKENDTGF5ZXJTb3J0ZXJUZXN0LCBMYXllcnNBdEFuZ2xlT3ZlcmxhcCkKICAg
ICAvLyBDIGlzIGluIGZyb250IG9mIEEgYW5kIGJlaGluZCBCIChub3Qgd2hhdCB5b3UnZCBleHBl
Y3QgYnkgY29tcGFyaW5nIGNlbnRlcnMpLgogICAgIC8vIEEgYW5kIEIgZG9uJ3Qgb3ZlcmxhcCwg
c28gdGhleSdyZSBpbmNvbXBhcmFibGUuCiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFu
c2Zvcm1BOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtQTsK
ICAgICB0cmFuc2Zvcm1BLnRyYW5zbGF0ZTNkKC02LCAwLCAxKTsKICAgICBDQ0xheWVyU29ydGVy
OjpMYXllclNoYXBlIGxheWVyQSg4LCAyMCwgdHJhbnNmb3JtQSk7CiAKLSAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCB0cmFuc2Zvcm1COworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggdHJhbnNmb3JtQjsKICAgICB0cmFuc2Zvcm1CLnRyYW5zbGF0ZTNkKDYsIDAsIC0xKTsKICAg
ICBDQ0xheWVyU29ydGVyOjpMYXllclNoYXBlIGxheWVyQig4LCAyMCwgdHJhbnNmb3JtQik7CiAK
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1DOworICAgIFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtQzsKICAgICB0cmFuc2Zvcm1DLnJvdGF0ZTNkKDAs
IDEsIDAsIDQwKTsKICAgICBDQ0xheWVyU29ydGVyOjpMYXllclNoYXBlIGxheWVyQyg4LCAyMCwg
dHJhbnNmb3JtQyk7CiAKQEAgLTE2NywxMCArMTY5LDEwIEBAIFRFU1QoQ0NMYXllclNvcnRlclRl
c3QsIExheWVyc1VuZGVyUGF0aG9sb2dpY2FsUGVyc3BlY3RpdmVUcmFuc2Zvcm0pCiAgICAgLy8g
d2hlcmUgdyA8IDAuIElmIHRoZSBjb2RlIHVzZXMgdGhlIGludmFsaWQgdmFsdWUsIGl0IHdpbGwg
dGhpbmsgdGhhdCBhIGxheWVyIGhhcwogICAgIC8vIGRpZmZlcmVudCBib3VuZHMgdGhhbiBpdCBy
ZWFsbHkgZG9lcywgd2hpY2ggY2FuIGNhdXNlIHRoaW5ncyB0byBzb3J0IGluY29ycmVjdGx5Lgog
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGVyc3BlY3RpdmVNYXRyaXg7CisgICAgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwZXJzcGVjdGl2ZU1hdHJpeDsKICAgICBwZXJzcGVj
dGl2ZU1hdHJpeC5hcHBseVBlcnNwZWN0aXZlKDEpOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggdHJhbnNmb3JtQTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5z
Zm9ybUE7CiAgICAgdHJhbnNmb3JtQS50cmFuc2xhdGUzZCgtMTUsIDAsIC0yKTsKICAgICBDQ0xh
eWVyU29ydGVyOjpMYXllclNoYXBlIGxheWVyQSgxMCwgMTAsIHBlcnNwZWN0aXZlTWF0cml4ICog
dHJhbnNmb3JtQSk7CiAKQEAgLTE3OCw3ICsxODAsNyBAQCBURVNUKENDTGF5ZXJTb3J0ZXJUZXN0
LCBMYXllcnNVbmRlclBhdGhvbG9naWNhbFBlcnNwZWN0aXZlVHJhbnNmb3JtKQogICAgIC8vIHZp
c2libGUgb24gdGhlIGxlZnQgaGFsZiBvZiB0aGUgcHJvamVjdGlvbiBwbGFuZSwgaW4gZnJvbnQg
b2YgbGF5ZXJBLiBXaGVuIGl0IGlzCiAgICAgLy8gbm90IGNsaXBwZWQsIGl0cyBib3VuZHMgd2ls
bCBhY3R1YWxseSBpbmNvcnJlY3RseSBhcHBlYXIgbXVjaCBzbWFsbGVyIGFuZCB0aGUKICAgICAv
LyBjb3JyZWN0IHNvcnRpbmcgZGVwZW5kZW5jeSB3aWxsIG5vdCBiZSBmb3VuZC4KLSAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm1COworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggdHJhbnNmb3JtQjsKICAgICB0cmFuc2Zvcm1CLnRyYW5zbGF0ZTNkKDAsIDAsIDAu
Nyk7CiAgICAgdHJhbnNmb3JtQi5yb3RhdGUzZCgwLCA0NSwgMCk7CiAgICAgQ0NMYXllclNvcnRl
cjo6TGF5ZXJTaGFwZSBsYXllckIoMTAsIDEwLCBwZXJzcGVjdGl2ZU1hdHJpeCAqIHRyYW5zZm9y
bUIpOwpAQCAtMjE2LDkgKzIxOCw5IEBAIFRFU1QoQ0NMYXllclNvcnRlclRlc3QsIHZlcmlmeUV4
aXN0aW5nT3JkZXJpbmdQcmVzZXJ2ZWRXaGVuTm9aRGlmZikKICAgICBPd25QdHI8Q0NMYXllcklt
cGw+IGxheWVyNCA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoNCk7CiAgICAgT3duUHRyPENDTGF5ZXJJ
bXBsPiBsYXllcjUgPSBDQ0xheWVySW1wbDo6Y3JlYXRlKDUpOwogCi0gICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggQmVoaW5kTWF0cml4OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggQmVoaW5kTWF0cml4OwogICAgIEJlaGluZE1hdHJpeC50cmFuc2xhdGUzZCgwLCAwLCAyKTsK
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBGcm9udE1hdHJpeDsKKyAgICBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IEZyb250TWF0cml4OwogICAgIEZyb250TWF0cml4LnRyYW5zbGF0
ZTNkKDAsIDAsIDEpOwogCiAgICAgbGF5ZXIxLT5zZXRCb3VuZHMoSW50U2l6ZSgxMCwgMTApKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
Q29tbW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVl
SG9zdENvbW1vblRlc3QuY3BwCmluZGV4IGQyNDNhZWU0YWYxNjY0YjA1OTg5NWI2NjZkNmM4NTI5
NWM4OGJmOWEuLmY3NGE3NDg4ZmQzMjQwOTllMDdkNmUyMjA5MjMyN2I0MTczZGIwYzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RDb21tb25UZXN0LmNwcApAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgIkNDQW5pbWF0aW9u
VGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkNDTGF5ZXJUcmVlVGVzdENvbW1vbi5oIgogI2luY2x1
ZGUgIkxheWVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgor
I2luY2x1ZGUgInBsYXRmb3JtL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAjaW5jbHVkZSAi
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1h
dGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ01hdGhVdGlsLmgiCkBAIC00Miw3ICs0
Miw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0czsKIAogbmFtZXNwYWNlIHsKIAotdm9p
ZCBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgc3VibGF5ZXJUcmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9pbnQmIGFuY2hvciwgY29uc3Qg
RmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIGJvdW5kcywgYm9vbCBwcmVzZXJ2
ZXMzRCkKK3ZvaWQgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVtKiBs
YXllciwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBj
b25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBzdWJsYXllclRyYW5zZm9ybSwg
Y29uc3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29u
c3QgSW50U2l6ZSYgYm91bmRzLCBib29sIHByZXNlcnZlczNEKQogewogICAgIGxheWVyLT5zZXRU
cmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0oc3Vi
bGF5ZXJUcmFuc2Zvcm0pOwpAQCAtNTQsMTYgKzU0LDE2IEBAIHZvaWQgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyCiAKIHZvaWQgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShM
YXllckNocm9taXVtKiByb290TGF5ZXIpCiB7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRl
bnRpdHlNYXRyaXg7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0
eU1hdHJpeDsKICAgICBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4gZHVtbXlSZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0OwogICAgIFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiBkdW1t
eUxheWVyTGlzdDsKICAgICBpbnQgZHVtbXlNYXhUZXh0dXJlU2l6ZSA9IDUxMjsKICAgICBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShy
b290TGF5ZXIsIHJvb3RMYXllciwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBkdW1t
eVJlbmRlclN1cmZhY2VMYXllckxpc3QsIGR1bW15TGF5ZXJMaXN0LCBkdW1teU1heFRleHR1cmVT
aXplKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggcmVtb3ZlM0RDb21wb25lbnRPZk1hdHJp
eChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0KQorV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCByZW1vdmUzRENvbXBvbmVudE9mTWF0cml4KGNvbnN0IFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIG1hdCkKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXQg
PSBtYXQ7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXQgPSBtYXQ7CiAg
ICAgcmV0LnNldE0xMygwKTsKICAgICByZXQuc2V0TTIzKDApOwogICAgIHJldC5zZXRNMzEoMCk7
CkBAIC05OCw3ICs5OCw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5
VHJhbnNmb3Jtc0Zvck5vT3BMYXllcikKICAgICBwYXJlbnQtPmFkZENoaWxkKGNoaWxkKTsKICAg
ICBjaGlsZC0+YWRkQ2hpbGQoZ3JhbmRDaGlsZCk7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBpZGVudGl0eU1hdHJpeDsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlk
ZW50aXR5TWF0cml4OwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcocGFyZW50Lmdl
dCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4w
ZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMCwgMCksIGZhbHNlKTsKICAgICBz
ZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwg
aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwg
MC4wZiksIEludFNpemUoMCwgMCksIGZhbHNlKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JU
ZXN0aW5nKGdyYW5kQ2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwg
RmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgw
LCAwKSwgZmFsc2UpOwpAQCAtMTIwLDEyICsxMjAsMTIgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RD
b21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlTGF5ZXIpCiAgICAgLy8gdmFsdWUg
b2YgTGF5ZXJDaHJvbWl1bTo6cG9zaXRpb24oKSBjaGFuZ2VzIGlmIHRoZSBhbmNob3IgY2hhbmdl
cywgZXZlbiB0aG91Z2ggdGhlIGxheWVyIGlzIG5vdCBhY3R1YWxseSBsb2NhdGVkIGluIGEKICAg
ICAvLyBkaWZmZXJlbnQgcG9zaXRpb24uIFdoZW4gd2UgaW5pdGlhbGl6ZSBsYXllcnMgZm9yIHRl
c3RpbmcgaGVyZSwgd2UgbmVlZCB0byBpbml0aWFsaXplIHRoYXQgdW5pbnR1dGl2ZSBwb3NpdGlv
biB2YWx1ZS4KIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAg
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGxheWVyID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAg
bGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKIAogICAgIC8vIENhc2UgMTogc2V0dGluZyB0
aGUgc3VibGF5ZXIgdHJhbnNmb3JtIHNob3VsZCBub3QgYWZmZWN0IHRoaXMgbGF5ZXIncyBkcmF3
IHRyYW5zZm9ybSBvciBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtLgotICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGFyYml0cmFyeVRyYW5zbGF0aW9uOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggYXJiaXRyYXJ5VHJhbnNsYXRpb247CiAgICAgYXJiaXRyYXJ5VHJhbnNsYXRpb24u
dHJhbnNsYXRlKDEwLjAsIDIwLjApOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
bGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBhcmJpdHJhcnlUcmFuc2xhdGlvbiwgRmxvYXRQ
b2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6ZSgwLCAwKSwg
ZmFsc2UpOwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHko
bGF5ZXIuZ2V0KCkpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29t
bW9uVGVzdCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogCiAgICAgLy8gQ2FzZSAy
OiBzZXR0aW5nIHRoZSBib3VuZHMgb2YgdGhlIGxheWVyIHNob3VsZCByZXN1bHQgaW4gYSBkcmF3
IHRyYW5zZm9ybSB0aGF0IHRyYW5zbGF0ZXMgdG8gaGFsZiB0aGUgd2lkdGggYW5kIGhlaWdodC4K
ICAgICAvLyAgICAgICAgIFRoZSBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtIHNob3VsZCByZW1haW4g
YXMgdGhlIGlkZW50aXR5LCBiZWNhdXNlIGl0IGRvZXMgbm90IGRlYWwgd2l0aCB0cmFuc2Zvcm1p
bmcgdG8vZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4KLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0cmFuc2xhdGlvblRvQ2VudGVyOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggdHJhbnNsYXRpb25Ub0NlbnRlcjsKICAgICB0cmFuc2xhdGlvblRvQ2VudGVyLnRyYW5z
bGF0ZSg1LjAsIDYuMCk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhsYXllci5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMGYsIDAu
MGYpLCBGbG9hdFBvaW50KDAuMGYsIDAuMGYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAg
ICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5KGxheWVyLmdldCgp
KTsKQEAgLTE0OCw3ICsxNDgsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZl
cmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05f
TUFUUklYX0VRKGlkZW50aXR5TWF0cml4LCBsYXllci0+c2NyZWVuU3BhY2VUcmFuc2Zvcm0oKSk7
CiAKICAgICAvLyBDYXNlIDQ6IEEgY2hhbmdlIGluICJhY3R1YWwiIHBvc2l0aW9uIGFmZmVjdHMg
Ym90aCB0aGUgZHJhdyB0cmFuc2Zvcm0gYW5kIHNjcmVlbiBzcGFjZSB0cmFuc2Zvcm0uCi0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggcG9zaXRpb25UcmFuc2Zvcm07CisgICAgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBwb3NpdGlvblRyYW5zZm9ybTsKICAgICBwb3NpdGlvblRyYW5z
Zm9ybS50cmFuc2xhdGUoMC4wLCAxLjIpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rp
bmcobGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2lu
dCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBvaW50KDIuNWYsIDQuMmYpLCBJbnRTaXplKDEwLCAxMiks
IGZhbHNlKTsKICAgICBleGVjdXRlQ2FsY3VsYXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5
KGxheWVyLmdldCgpKTsKQEAgLTE1Nyw3ICsxNTcsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW5nbGVMYXllcikKIAogICAgIC8vIENhc2Ug
NTogSW4gdGhlIGNvcnJlY3Qgc2VxdWVuY2Ugb2YgdHJhbnNmb3JtcywgdGhlIGxheWVyIHRyYW5z
Zm9ybSBzaG91bGQgcHJlLW11bHRpcGx5IHRoZSB0cmFuc2xhdGlvblRvQ2VudGVyLiBUaGlzIGlz
IGVhc2lseSB0ZXN0ZWQgYnkKICAgICAvLyAgICAgICAgIHVzaW5nIGEgc2NhbGUgdHJhbnNmb3Jt
LCBiZWNhdXNlIHNjYWxlIGFuZCB0cmFuc2xhdGlvbiBhcmUgbm90IGNvbW11dGF0aXZlLgotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CiAgICAgbGF5ZXJUcmFuc2Zvcm0uc2Nh
bGUzZCgyLjAsIDIuMCwgMS4wKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKGxh
eWVyLmdldCgpLCBsYXllclRyYW5zZm9ybSwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMC4w
ZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2Up
OwogICAgIGV4ZWN1dGVDYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkobGF5ZXIu
Z2V0KCkpOwpAQCAtMTY1LDkgKzE2NSw5IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVz
dCwgdmVyaWZ5VHJhbnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogICAgIEVYUEVDVF9UUkFOU0ZPUk1B
VElPTl9NQVRSSVhfRVEobGF5ZXJUcmFuc2Zvcm0sIGxheWVyLT5zY3JlZW5TcGFjZVRyYW5zZm9y
bSgpKTsKIAogICAgIC8vIENhc2UgNjogVGhlIGxheWVyIHRyYW5zZm9ybSBzaG91bGQgb2NjdXIg
d2l0aCByZXNwZWN0IHRvIHRoZSBhbmNob3IgcG9pbnQuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggdHJhbnNsYXRpb25Ub0FuY2hvcjsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IHRyYW5zbGF0aW9uVG9BbmNob3I7CiAgICAgdHJhbnNsYXRpb25Ub0FuY2hvci50cmFuc2xh
dGUoNS4wLCAwLjApOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGV4cGVjdGVkUmVzdWx0ID0g
dHJhbnNsYXRpb25Ub0FuY2hvciAqIGxheWVyVHJhbnNmb3JtICogdHJhbnNsYXRpb25Ub0FuY2hv
ci5pbnZlcnNlKCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBleHBlY3Rl
ZFJlc3VsdCA9IHRyYW5zbGF0aW9uVG9BbmNob3IgKiBsYXllclRyYW5zZm9ybSAqIHRyYW5zbGF0
aW9uVG9BbmNob3IuaW52ZXJzZSgpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
bGF5ZXIuZ2V0KCksIGxheWVyVHJhbnNmb3JtLCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgw
LjVmLCAwLjBmKSwgRmxvYXRQb2ludCg1LjBmLCAwLjBmKSwgSW50U2l6ZSgxMCwgMTIpLCBmYWxz
ZSk7CiAgICAgZXhlY3V0ZUNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eShsYXll
ci5nZXQoKSk7CiAgICAgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9FUShleHBlY3RlZFJl
c3VsdCAqIHRyYW5zbGF0aW9uVG9DZW50ZXIsIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOwpAQCAt
MTg1LDcgKzE4NSw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJh
bnNmb3Jtc0ZvclNpbmdsZUxheWVyKQogCiBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3Qs
IHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVIaWVyYXJjaHkpCiB7Ci0gICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcGFyZW50ID0g
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGNoaWxk
ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGdy
YW5kQ2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKQEAgLTE5NCw3ICsxOTQsNyBAQCBU
RVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9ybXNGb3JTaW1wbGVI
aWVyYXJjaHkpCiAgICAgY2hpbGQtPmFkZENoaWxkKGdyYW5kQ2hpbGQpOwogCiAgICAgLy8gQ2Fz
ZSAxOiBwYXJlbnQncyBhbmNob3JQb2ludCBzaG91bGQgbm90IGFmZmVjdCBjaGlsZCBvciBncmFu
ZENoaWxkLgotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRl
ciwgZ3JhbmRDaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXI7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIsIGdyYW5kQ2hpbGRUcmFuc2xh
dGlvblRvQ2VudGVyOwogICAgIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoOC4w
LCA5LjApOwogICAgIGdyYW5kQ2hpbGRUcmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSgzOC4w
LCAzOS4wKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1Ziks
IEZsb2F0UG9pbnQoMi41ZiwgMy4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOwpAQCAtMjA3
LDcgKzIwNyw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VHJhbnNm
b3Jtc0ZvclNpbXBsZUhpZXJhcmNoeSkKICAgICBFWFBFQ1RfVFJBTlNGT1JNQVRJT05fTUFUUklY
X0VRKGlkZW50aXR5TWF0cml4LCBncmFuZENoaWxkLT5zY3JlZW5TcGFjZVRyYW5zZm9ybSgpKTsK
IAogICAgIC8vIENhc2UgMjogcGFyZW50J3MgcG9zaXRpb24gYWZmZWN0cyBjaGlsZCBhbmQgZ3Jh
bmRDaGlsZC4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRQb3NpdGlvblRyYW5zZm9y
bTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFBvc2l0aW9uVHJh
bnNmb3JtOwogICAgIHBhcmVudFBvc2l0aW9uVHJhbnNmb3JtLnRyYW5zbGF0ZSgwLjAsIDEuMik7
CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhwYXJlbnQuZ2V0KCksIGlkZW50aXR5
TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjI1ZiwgMC4yNWYpLCBGbG9hdFBv
aW50KDIuNWYsIDQuMmYpLCBJbnRTaXplKDEwLCAxMiksIGZhbHNlKTsKICAgICBzZXRMYXllclBy
b3BlcnRpZXNGb3JUZXN0aW5nKGNoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIElu
dFNpemUoMTYsIDE4KSwgZmFsc2UpOwpAQCAtMjE5LDExICsyMTksMTEgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQog
ICAgIEVYUEVDVF9UUkFOU0ZPUk1BVElPTl9NQVRSSVhfRVEocGFyZW50UG9zaXRpb25UcmFuc2Zv
cm0sIGdyYW5kQ2hpbGQtPnNjcmVlblNwYWNlVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gQ2FzZSAz
OiBwYXJlbnQncyBsb2NhbCB0cmFuc2Zvcm0gYWZmZWN0cyBjaGlsZCBhbmQgZ3JhbmRjaGlsZAot
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudExheWVyVHJhbnNmb3JtOworICAgIFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50TGF5ZXJUcmFuc2Zvcm07CiAgICAgcGFy
ZW50TGF5ZXJUcmFuc2Zvcm0uc2NhbGUzZCgyLjAsIDIuMCwgMS4wKTsKLSAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yOworICAgIFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvcjsKICAgICBwYXJlbnRU
cmFuc2xhdGlvblRvQW5jaG9yLnRyYW5zbGF0ZSgyLjUsIDMuMCk7Ci0gICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggcGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtID0gcGFyZW50VHJhbnNsYXRpb25Ub0Fu
Y2hvciAqIHBhcmVudExheWVyVHJhbnNmb3JtICogcGFyZW50VHJhbnNsYXRpb25Ub0FuY2hvci5p
bnZlcnNlKCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRDb21w
b3NpdGVUcmFuc2Zvcm0gPSBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yICogcGFyZW50TGF5ZXJU
cmFuc2Zvcm0gKiBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKTsKICAgICBzZXRM
YXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgcGFyZW50TGF5ZXJUcmFuc2Zv
cm0sIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAwLjI1ZiksIEZsb2F0UG9pbnQo
Mi41ZiwgMy4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOwogICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJp
eCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgSW50U2l6
ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhncmFu
ZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQo
MC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEludFNpemUoNzYsIDc4KSwgZmFs
c2UpOwpAQCAtMjM3LDE0ICsyMzcsMTQgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0
LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2ltcGxlSGllcmFyY2h5KQogICAgIC8vICAgICAgICAgc2Nh
bGluZyBpcyB1c2VkIGhlcmUgYWdhaW4gc28gdGhhdCB0aGUgY29ycmVjdCBzZXF1ZW5jZSBvZiB0
cmFuc2Zvcm1zIGlzIHByb3Blcmx5IHRlc3RlZC4KICAgICAvLyAgICAgICAgIE5vdGUgdGhhdCBw
cmVzZXJ2ZXMzRCBpcyBmYWxzZSwgYnV0IHRoZSBzdWJsYXllciBtYXRyaXggc2hvdWxkIHJldGFp
biBpdHMgM0QgcHJvcGVydGllcyB3aGVuIGdpdmVuIHRvIGNoaWxkLgogICAgIC8vICAgICAgICAg
QnV0IHRoZW4sIHRoZSBjaGlsZCBhbHNvIGRvZXMgbm90IHByZXNlcnZlM0QuIFdoZW4gaXQgZ2l2
ZXMgaXRzIGhpZXJhcmNoeSB0byB0aGUgZ3JhbmRDaGlsZCwgaXQgc2hvdWxkIGJlIGZsYXR0ZW5l
ZCB0byAyRC4KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRTdWJsYXllck1hdHJpeDsK
KyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFN1YmxheWVyTWF0cml4
OwogICAgIHBhcmVudFN1YmxheWVyTWF0cml4LnNjYWxlM2QoMTAuMCwgMTAuMCwgMy4zKTsKLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyOworICAgIFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlcjsK
ICAgICBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg1LjAsIDYuMCk7CiAgICAg
Ly8gU3VibGF5ZXIgbWF0cml4IGlzIGFwcGxpZWQgdG8gdGhlIGNlbnRlciBvZiB0aGUgcGFyZW50
IGxheWVyLgogICAgIHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSA9IHBhcmVudFRyYW5zbGF0aW9u
VG9BbmNob3IgKiBwYXJlbnRMYXllclRyYW5zZm9ybSAqIHBhcmVudFRyYW5zbGF0aW9uVG9BbmNo
b3IuaW52ZXJzZSgpCiAgICAgICAgICAgICAqIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIgKiBw
YXJlbnRTdWJsYXllck1hdHJpeCAqIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIuaW52ZXJzZSgp
OwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5zZm9ybSA9
IHJlbW92ZTNEQ29tcG9uZW50T2ZNYXRyaXgocGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtKTsKKyAg
ICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGZsYXR0ZW5lZENvbXBvc2l0ZVRyYW5z
Zm9ybSA9IHJlbW92ZTNEQ29tcG9uZW50T2ZNYXRyaXgocGFyZW50Q29tcG9zaXRlVHJhbnNmb3Jt
KTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5nKHBhcmVudC5nZXQoKSwgcGFyZW50
TGF5ZXJUcmFuc2Zvcm0sIHBhcmVudFN1YmxheWVyTWF0cml4LCBGbG9hdFBvaW50KDAuMjVmLCAw
LjI1ZiksIEZsb2F0UG9pbnQoMi41ZiwgMy4wZiksIEludFNpemUoMTAsIDEyKSwgZmFsc2UpOwog
ICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludCgwLjBmLCAwLjBmKSwgRmxvYXRQb2ludCgw
LjBmLCAwLjBmKSwgSW50U2l6ZSgxNiwgMTgpLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0
aWVzRm9yVGVzdGluZyhncmFuZENoaWxkLmdldCgpLCBpZGVudGl0eU1hdHJpeCwgaWRlbnRpdHlN
YXRyaXgsIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIEZsb2F0UG9pbnQoMC4wZiwgMC4wZiksIElu
dFNpemUoNzYsIDc4KSwgZmFsc2UpOwpAQCAtMjc4LDE4ICsyNzgsMTggQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yU2luZ2xlUmVuZGVyU3VyZmFj
ZSkKICAgICAvLyBDaGlsZCBpcyBzZXQgdXAgc28gdGhhdCBhIG5ldyByZW5kZXIgc3VyZmFjZSBz
aG91bGQgYmUgY3JlYXRlZC4KICAgICBjaGlsZC0+c2V0T3BhY2l0eSgwLjVmKTsKIAotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwotICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHBhcmVudExheWVyVHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBwYXJlbnRMYXllclRyYW5zZm9ybTsKICAgICBwYXJlbnRMYXllclRyYW5zZm9ybS5zY2FsZTNk
KDIuMCwgMi4wLCAxLjApOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFRyYW5zbGF0
aW9uVG9BbmNob3I7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRU
cmFuc2xhdGlvblRvQW5jaG9yOwogICAgIHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IudHJhbnNs
YXRlKDIuNSwgMy4wKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRTdWJsYXllck1h
dHJpeDsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFN1YmxheWVy
TWF0cml4OwogICAgIHBhcmVudFN1YmxheWVyTWF0cml4LnNjYWxlM2QoMTAuMCwgMTAuMCwgMy4z
KTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyOwor
ICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50VHJhbnNsYXRpb25Ub0Nl
bnRlcjsKICAgICBwYXJlbnRUcmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg1LjAsIDYuMCk7
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtID0gcGFy
ZW50VHJhbnNsYXRpb25Ub0FuY2hvciAqIHBhcmVudExheWVyVHJhbnNmb3JtICogcGFyZW50VHJh
bnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCkKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IHBhcmVudENvbXBvc2l0ZVRyYW5zZm9ybSA9IHBhcmVudFRyYW5zbGF0aW9uVG9BbmNo
b3IgKiBwYXJlbnRMYXllclRyYW5zZm9ybSAqIHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3IuaW52
ZXJzZSgpCiAgICAgICAgICAgICAqIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIgKiBwYXJlbnRT
dWJsYXllck1hdHJpeCAqIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIuaW52ZXJzZSgpOwotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlcjsKKyAgICBXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlcjsKICAg
ICBjaGlsZFRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRlKDguMCwgOS4wKTsKIAogICAgIC8v
IENoaWxkJ3MgcmVuZGVyIHN1cmZhY2Ugc2hvdWxkIG5vdCBleGlzdCB5ZXQuCkBAIC0zMzEsMjIg
KzMzMSwyMiBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeVRyYW5zZm9y
bXNGb3JSZXBsaWNhKQogICAgIC8vIENoaWxkIGlzIHNldCB1cCBzbyB0aGF0IGEgbmV3IHJlbmRl
ciBzdXJmYWNlIHNob3VsZCBiZSBjcmVhdGVkLgogICAgIGNoaWxkLT5zZXRPcGFjaXR5KDAuNWYp
OwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggcGFyZW50TGF5ZXJUcmFuc2Zvcm07CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IHBhcmVudExheWVyVHJhbnNmb3JtOwogICAgIHBhcmVudExheWVyVHJhbnNm
b3JtLnNjYWxlM2QoMi4wLCAyLjAsIDEuMCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFy
ZW50VHJhbnNsYXRpb25Ub0FuY2hvcjsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IHBhcmVudFRyYW5zbGF0aW9uVG9BbmNob3I7CiAgICAgcGFyZW50VHJhbnNsYXRpb25Ub0Fu
Y2hvci50cmFuc2xhdGUoMi41LCAzLjApOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVu
dFN1YmxheWVyTWF0cml4OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcGFy
ZW50U3VibGF5ZXJNYXRyaXg7CiAgICAgcGFyZW50U3VibGF5ZXJNYXRyaXguc2NhbGUzZCgxMC4w
LCAxMC4wLCAzLjMpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBhcmVudFRyYW5zbGF0aW9u
VG9DZW50ZXI7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUcmFu
c2xhdGlvblRvQ2VudGVyOwogICAgIHBhcmVudFRyYW5zbGF0aW9uVG9DZW50ZXIudHJhbnNsYXRl
KDUuMCwgNi4wKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRDb21wb3NpdGVUcmFu
c2Zvcm0gPSBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yICogcGFyZW50TGF5ZXJUcmFuc2Zvcm0g
KiBwYXJlbnRUcmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKQorICAgIFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggcGFyZW50Q29tcG9zaXRlVHJhbnNmb3JtID0gcGFyZW50VHJhbnNs
YXRpb25Ub0FuY2hvciAqIHBhcmVudExheWVyVHJhbnNmb3JtICogcGFyZW50VHJhbnNsYXRpb25U
b0FuY2hvci5pbnZlcnNlKCkKICAgICAgICAgICAgICogcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRl
ciAqIHBhcmVudFN1YmxheWVyTWF0cml4ICogcGFyZW50VHJhbnNsYXRpb25Ub0NlbnRlci5pbnZl
cnNlKCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2xhdGlvblRvQ2VudGVy
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2xhdGlvblRv
Q2VudGVyOwogICAgIGNoaWxkVHJhbnNsYXRpb25Ub0NlbnRlci50cmFuc2xhdGUoOC4wLCA5LjAp
OwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2FMYXllclRyYW5zZm9ybTsKKyAgICBX
ZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJlcGxpY2FMYXllclRyYW5zZm9ybTsKICAg
ICByZXBsaWNhTGF5ZXJUcmFuc2Zvcm0uc2NhbGUzZCgzLjAsIDMuMCwgMS4wKTsKLSAgICBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCByZXBsaWNhQ29tcG9zaXRlVHJhbnNmb3JtID0gcGFyZW50Q29tcG9z
aXRlVHJhbnNmb3JtICogcmVwbGljYUxheWVyVHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggcmVwbGljYUNvbXBvc2l0ZVRyYW5zZm9ybSA9IHBhcmVudENvbXBv
c2l0ZVRyYW5zZm9ybSAqIHJlcGxpY2FMYXllclRyYW5zZm9ybTsKIAogICAgIC8vIENoaWxkJ3Mg
cmVuZGVyIHN1cmZhY2Ugc2hvdWxkIG5vdCBleGlzdCB5ZXQuCiAgICAgQVNTRVJUX0ZBTFNFKGNo
aWxkLT5yZW5kZXJTdXJmYWNlKCkpOwpAQCAtNDA4LDIwICs0MDgsMjAgQEAgVEVTVChDQ0xheWVy
VHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlUcmFuc2Zvcm1zRm9yUmVuZGVyU3VyZmFjZUhpZXJh
cmNoeSkKICAgICAvLwogICAgIC8vIHggY29tcG9uZW50IHRlc3RzIHRoYXQgbGF5ZXJUcmFuc2Zv
cm0gYW5kIHN1YmxheWVyVHJhbnNmb3JtIGFyZSBkb25lIGluIHRoZSByaWdodCBvcmRlciAodHJh
bnNsYXRpb24gYW5kIHNjYWxlIGFyZSBub25jb21tdXRhdGl2ZSkuCiAgICAgLy8geSBjb21wb25l
bnQgaGFzIGEgdHJhbnNsYXRpb24gYnkgMS4wIGZvciBldmVyeSBhbmNlc3Rvciwgd2hpY2ggaW5k
aWNhdGVzIHRoZSAiZGVwdGgiIG9mIHRoZSBsYXllciBpbiB0aGUgaGllcmFyY2h5LgotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zbGF0aW9uVG9BbmNob3I7CisgICAgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2xhdGlvblRvQW5jaG9yOwogICAgIHRyYW5zbGF0aW9u
VG9BbmNob3IudHJhbnNsYXRlKDIuNSwgMC4wKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2xhdGlvblRvQ2VudGVyOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
dHJhbnNsYXRpb25Ub0NlbnRlcjsKICAgICB0cmFuc2xhdGlvblRvQ2VudGVyLnRyYW5zbGF0ZSg1
LjAsIDUuMCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybTsKICAgICBsYXll
clRyYW5zZm9ybS50cmFuc2xhdGUoMS4wLCAxLjApOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHN1YmxheWVyVHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgg
c3VibGF5ZXJUcmFuc2Zvcm07CiAgICAgc3VibGF5ZXJUcmFuc2Zvcm0uc2NhbGUzZCgxMC4wLCAx
LjAsIDEuMCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYUxheWVyVHJhbnNmb3Jt
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVwbGljYUxheWVyVHJhbnNm
b3JtOwogICAgIHJlcGxpY2FMYXllclRyYW5zZm9ybS5zY2FsZTNkKC0yLjAsIDUuMCwgMS4wKTsK
IAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IEEgPSB0cmFuc2xhdGlvblRvQW5jaG9yICogbGF5
ZXJUcmFuc2Zvcm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKTsKLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBCID0gdHJhbnNsYXRpb25Ub0NlbnRlciAqIHN1YmxheWVyVHJhbnNmb3Jt
ICogdHJhbnNsYXRpb25Ub0NlbnRlci5pbnZlcnNlKCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggUiA9IEEgKiB0cmFuc2xhdGlvblRvQW5jaG9yICogcmVwbGljYUxheWVyVHJhbnNmb3JtICog
dHJhbnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBBID0gdHJhbnNsYXRpb25Ub0FuY2hvciAqIGxheWVyVHJhbnNmb3JtICogdHJh
bnNsYXRpb25Ub0FuY2hvci5pbnZlcnNlKCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBCID0gdHJhbnNsYXRpb25Ub0NlbnRlciAqIHN1YmxheWVyVHJhbnNmb3JtICogdHJh
bnNsYXRpb25Ub0NlbnRlci5pbnZlcnNlKCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBSID0gQSAqIHRyYW5zbGF0aW9uVG9BbmNob3IgKiByZXBsaWNhTGF5ZXJUcmFuc2Zv
cm0gKiB0cmFuc2xhdGlvblRvQW5jaG9yLmludmVyc2UoKTsKIAogICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcocGFyZW50LmdldCgpLCBsYXllclRyYW5zZm9ybSwgc3VibGF5ZXJUcmFu
c2Zvcm0sIEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50KDIuNWYsIDAuMGYpLCBJ
bnRTaXplKDEwLCAxMCksIGZhbHNlKTsKICAgICBzZXRMYXllclByb3BlcnRpZXNGb3JUZXN0aW5n
KHJlbmRlclN1cmZhY2UxLmdldCgpLCBsYXllclRyYW5zZm9ybSwgc3VibGF5ZXJUcmFuc2Zvcm0s
IEZsb2F0UG9pbnQoMC4yNWYsIDAuMGYpLCBGbG9hdFBvaW50KDIuNWYsIDAuMGYpLCBJbnRTaXpl
KDEwLCAxMCksIGZhbHNlKTsKQEAgLTUzMSw3ICs1MzEsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9z
dENvbW1vblRlc3QsIHZlcmlmeVJlbmRlclN1cmZhY2VMaXN0Rm9yQ2xpcExheWVyKQogICAgIFJl
ZlB0cjxMYXllckNocm9taXVtV2l0aEZvcmNlZERyYXdzQ29udGVudD4gY2hpbGQgPSBhZG9wdFJl
ZihuZXcgTGF5ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CiAgICAgcmVuZGVy
U3VyZmFjZTEtPnNldE9wYWNpdHkoMC45Zik7CiAKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
cmVuZGVyU3VyZmFjZTEuZ2V0KCksIGlkZW50aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxv
YXRQb2ludDo6emVybygpLCBGbG9hdFBvaW50Ojp6ZXJvKCksIEludFNpemUoMTAsIDEwKSwgZmFs
c2UpOwogICAgIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoY2hpbGQuZ2V0KCksIGlkZW50
aXR5TWF0cml4LCBpZGVudGl0eU1hdHJpeCwgRmxvYXRQb2ludDo6emVybygpLCBGbG9hdFBvaW50
KDMwLCAzMCksIEludFNpemUoMTAsIDEwKSwgZmFsc2UpOwogCkBAIC01NjAsNyArNTYwLDcgQEAg
VEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlSZW5kZXJTdXJmYWNlTGlzdEZv
clRyYW5zcGFyZW50Q2hpbGQpCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW1XaXRoRm9yY2VkRHJh
d3NDb250ZW50PiBjaGlsZCA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9taXVtV2l0aEZvcmNlZERy
YXdzQ29udGVudCgpKTsKICAgICByZW5kZXJTdXJmYWNlMS0+c2V0T3BhY2l0eSgwKTsKIAotICAg
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIGNvbnN0IFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAgc2V0TGF5
ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhyZW5kZXJTdXJmYWNlMS5nZXQoKSwgaWRlbnRpdHlNYXRy
aXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50Ojp6ZXJvKCksIEZsb2F0UG9pbnQ6Onplcm8o
KSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7CiAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVz
dGluZyhjaGlsZC5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIGlkZW50aXR5TWF0cml4LCBGbG9hdFBv
aW50Ojp6ZXJvKCksIEZsb2F0UG9pbnQ6Onplcm8oKSwgSW50U2l6ZSgxMCwgMTApLCBmYWxzZSk7
CiAKQEAgLTU5Nyw3ICs1OTcsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZl
cmlmeUNsaXBSZWN0Q3VsbHNSZW5kZXJTdXJmYWNlcykKICAgICAvLyBjbGlwUmVjdCwgYW5kIHRo
ZXkgc2hvdWxkIG5ldmVyIGdldCBzY2hlZHVsZWQgb24gdGhlIGxpc3Qgb2YgcmVuZGVyU3VyZmFj
ZXMuCiAgICAgLy8KIAotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0
cml4OworICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlN
YXRyaXg7CiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21p
dW06OmNyZWF0ZSgpOwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkID0gTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CkBAIC02NDYsNyArNjQ2LDcgQEAgVEVTVChDQ0xheWVyVHJl
ZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlDbGlwUmVjdEN1bGxzUmVuZGVyU3VyZmFjZXNDcmFzaFJl
cHJvKQogICAgIC8vIFRoaXMgaXMgYSBzaW1pbGFyIHNpdHVhdGlvbiBhcyB2ZXJpZnlDbGlwUmVj
dEN1bGxzUmVuZGVyU3VyZmFjZXMsIGV4Y2VwdCB0aGF0CiAgICAgLy8gaXQgcmVwcm9kdWNlcyBh
IGNyYXNoIGJ1ZyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFp
bD9pZD0xMDY3MzQuCiAKLSAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1h
dHJpeDsKKyAgICBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5
TWF0cml4OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBwYXJlbnQgPSBMYXllckNocm9taXVt
OjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gY2hpbGQgPSBMYXllckNocm9t
aXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gZ3JhbmRDaGlsZCA9IExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgpOwpAQCAtNzEwLDcgKzcxMCw3IEBAIFRFU1QoQ0NMYXllclRy
ZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb0xh
eWVycykKICAgICAvLyAgIGdyYW5kQ2hpbGQ0IC0gb3V0c2lkZSBwYXJlbnQncyBjbGlwUmVjdCwg
YW5kIG1hc2tzVG9Cb3VuZHM7IHRoZSBjbGlwUmVjdCBzaG91bGQgYmUgZW1wdHkuCiAgICAgLy8K
IAotICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgIGNv
bnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CiAgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IHBhcmVudCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwog
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBjaGlsZCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgp
OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBncmFuZENoaWxkMSA9IExheWVyQ2hyb21pdW06
OmNyZWF0ZSgpOwpAQCAtNzY4LDcgKzc2OCw3IEBAIFRFU1QoQ0NMYXllclRyZWVIb3N0Q29tbW9u
VGVzdCwgdmVyaWZ5Q2xpcFJlY3RJc1Byb3BhZ2F0ZWRDb3JyZWN0bHlUb1N1cmZhY2VzKQogICAg
IC8vIGhhdmUgYSBjbGlwUmVjdCBvZiB0aGVpciBvd24gbGF5ZXIgYm91bmRzLCBob3dldmVyLCBp
ZiBtYXNrc1RvQm91bmRzIHdhcyB0cnVlLgogICAgIC8vCiAKLSAgICBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwogICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBw
YXJlbnQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gY2hpbGQgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gZ3JhbmRDaGlsZDEgPSBMYXllckNocm9taXVtOjpjcmVhdGUoKTsKQEAgLTg2OSw5ICs4
NjksOSBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUFuaW1hdGlvbnNG
b3JSZW5kZXJTdXJmYWNlSGllcmFyY2h5KQogICAgIC8vIEFsc28gcHV0IGFuIGFuaW1hdGVkIG9w
YWNpdHkgb24gYSBsYXllciB3aXRob3V0IGRlc2NlbmRhbnRzLgogICAgIGFkZE9wYWNpdHlUcmFu
c2l0aW9uVG9Db250cm9sbGVyKCpncmFuZENoaWxkT2ZSb290LT5sYXllckFuaW1hdGlvbkNvbnRy
b2xsZXIoKSwgMTAsIDEsIDAsIGZhbHNlKTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxh
eWVyVHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJU
cmFuc2Zvcm07CiAgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDEuMCwgMS4wKTsKLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllclRyYW5zZm9ybTsKKyAgICBXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyVHJhbnNmb3JtOwogICAgIHN1YmxheWVyVHJhbnNm
b3JtLnNjYWxlM2QoMTAuMCwgMS4wLCAxLjApOwogCiAgICAgLy8gSW4gY29tYmluYXRpb24gd2l0
aCBkZXNjZW5kYW50RHJhd3NDb250ZW50LCBhbiBhbmltYXRlZCB0cmFuc2Zvcm0gZm9yY2VzIHRo
ZSBsYXllciB0byBoYXZlIGEgbmV3IHJlbmRlclN1cmZhY2UuCkBAIC05ODUsNyArOTg1LDcgQEAg
VEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlWaXNpYmxlUmVjdEZvcklkZW50
aXR5VHJhbnNmb3JtKQogICAgIC8vIFRlc3QgdGhlIGNhbGN1bGF0ZVZpc2libGVSZWN0KCkgZnVu
Y3Rpb24gd29ya3MgY29ycmVjdGx5IGZvciBpZGVudGl0eSB0cmFuc2Zvcm1zLgogCiAgICAgSW50
UmVjdCB0YXJnZXRTdXJmYWNlUmVjdCA9IEludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUo
MTAwLCAxMDApKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRvU3VyZmFjZVRyYW5z
Zm9ybTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVG9TdXJmYWNl
VHJhbnNmb3JtOwogCiAgICAgLy8gQ2FzZSAxOiBMYXllciBpcyBjb250YWluZWQgd2l0aGluIHRo
ZSBzdXJmYWNlLgogICAgIEludFJlY3QgbGF5ZXJDb250ZW50UmVjdCA9IEludFJlY3QoSW50UG9p
bnQoMTAsIDEwKSwgSW50U2l6ZSgzMCwgMzApKTsKQEAgLTEwMTEsNyArMTAxMSw3IEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VmlzaWJsZVJlY3RGb3JUcmFuc2xhdGlv
bnMpCiAKICAgICBJbnRSZWN0IHRhcmdldFN1cmZhY2VSZWN0ID0gSW50UmVjdChJbnRQb2ludCgw
LCAwKSwgSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIEludFJlY3QgbGF5ZXJDb250ZW50UmVjdCA9
IEludFJlY3QoSW50UG9pbnQoMCwgMCksIEludFNpemUoMzAsIDMwKSk7Ci0gICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbGF5ZXJUb1N1cmZhY2VUcmFuc2Zvcm07CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCBsYXllclRvU3VyZmFjZVRyYW5zZm9ybTsKIAogICAgIC8vIENhc2Ug
MTogTGF5ZXIgaXMgY29udGFpbmVkIHdpdGhpbiB0aGUgc3VyZmFjZS4KICAgICBsYXllclRvU3Vy
ZmFjZVRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKQEAgLTEwNDEsNyArMTA0MSw3IEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5VmlzaWJsZVJlY3RGb3IyRFJvdGF0aW9u
cykKIAogICAgIEludFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAs
IDApLCBJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAgSW50UmVjdCBsYXllckNvbnRlbnRSZWN0ID0g
SW50UmVjdChJbnRQb2ludCgwLCAwKSwgSW50U2l6ZSgzMCwgMzApKTsKLSAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBsYXllclRvU3VyZmFjZVRyYW5zZm9ybTsKKyAgICBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IGxheWVyVG9TdXJmYWNlVHJhbnNmb3JtOwogCiAgICAgLy8gQ2FzZSAx
OiBMYXllciBpcyBjb250YWluZWQgd2l0aGluIHRoZSBzdXJmYWNlLgogICAgIGxheWVyVG9TdXJm
YWNlVHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOwpAQCAtMTA4OCw3ICsxMDg4LDcgQEAgVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlWaXNpYmxlUmVjdEZvcjNkT3J0aG9ncmFw
aGljVHJhbnNmb3JtKQogCiAgICAgSW50UmVjdCB0YXJnZXRTdXJmYWNlUmVjdCA9IEludFJlY3Qo
SW50UG9pbnQoMCwgMCksIEludFNpemUoMTAwLCAxMDApKTsKICAgICBJbnRSZWN0IGxheWVyQ29u
dGVudFJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSk7Ci0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUb1N1cmZhY2VUcmFuc2Zvcm07CisgICAgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRvU3VyZmFjZVRyYW5zZm9ybTsKIAog
ICAgIC8vIENhc2UgMTogT3J0aG9ncmFwaGljIHByb2plY3Rpb24gb2YgYSBsYXllciByb3RhdGVk
IGFib3V0IHktYXhpcyBieSA0NSBkZWdyZWVzLCBzaG91bGQgYmUgZnVsbHkgY29udGFpbmVkIGlu
IHRoZSByZW5kZXJTdXJmYWNlLgogICAgIGxheWVyVG9TdXJmYWNlVHJhbnNmb3JtLm1ha2VJZGVu
dGl0eSgpOwpAQCAtMTExNiw3ICsxMTE2LDcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25U
ZXN0LCB2ZXJpZnlWaXNpYmxlUmVjdEZvcjNkUGVyc3BlY3RpdmVUcmFuc2Zvcm0pCiAKICAgICBJ
bnRSZWN0IHRhcmdldFN1cmZhY2VSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCAwKSwgSW50U2l6
ZSgxMDAsIDEwMCkpOwogICAgIEludFJlY3QgbGF5ZXJDb250ZW50UmVjdCA9IEludFJlY3QoSW50
UG9pbnQoLTUwLCAtNTApLCBJbnRTaXplKDIwMCwgMjAwKSk7Ci0gICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggbGF5ZXJUb1N1cmZhY2VUcmFuc2Zvcm07CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBsYXllclRvU3VyZmFjZVRyYW5zZm9ybTsKIAogICAgIC8vIENhc2UgMTogRXZl
biB0aG91Z2ggdGhlIGxheWVyIGlzIHR3aWNlIGFzIGxhcmdlIGFzIHRoZSBzdXJmYWNlLCBkdWUg
dG8gcGVyc3BlY3RpdmUKICAgICAvLyAgICAgICAgIGZvcmVzaG9ydGVuaW5nLCB0aGUgbGF5ZXIg
d2lsbCBmaXQgZnVsbHkgaW4gdGhlIHN1cmZhY2Ugd2hlbiBpdHMgdHJhbnNsYXRlZApAQCAtMTE1
OCw3ICsxMTU4LDcgQEAgVEVTVChDQ0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlWaXNp
YmxlUmVjdEZvcjNkT3J0aG9ncmFwaGljSXNOb3RDbGlwcGVkQmUKIAogICAgIEludFJlY3QgdGFy
Z2V0U3VyZmFjZVJlY3QgPSBJbnRSZWN0KEludFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAw
KSk7CiAgICAgSW50UmVjdCBsYXllckNvbnRlbnRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgwLCAw
KSwgSW50U2l6ZSgxMDAsIDEwMCkpOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVG9T
dXJmYWNlVHJhbnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5
ZXJUb1N1cmZhY2VUcmFuc2Zvcm07CiAKICAgICAvLyBUaGlzIHNlcXVlbmNlIG9mIHRyYW5zZm9y
bXMgZWZmZWN0aXZlbHkgcm90YXRlcyB0aGUgbGF5ZXIgYWJvdXQgdGhlIHktYXhpcyBhdCB0aGUK
ICAgICAvLyBjZW50ZXIgb2YgdGhlIGxheWVyLgpAQCAtMTE4Miw3ICsxMTgyLDcgQEAgVEVTVChD
Q0xheWVyVHJlZUhvc3RDb21tb25UZXN0LCB2ZXJpZnlWaXNpYmxlUmVjdEZvcjNkUGVyc3BlY3Rp
dmVXaGVuQ2xpcHBlZEJ5VykKIAogICAgIEludFJlY3QgdGFyZ2V0U3VyZmFjZVJlY3QgPSBJbnRS
ZWN0KEludFBvaW50KC01MCwgLTUwKSwgSW50U2l6ZSgxMDAsIDEwMCkpOwogICAgIEludFJlY3Qg
bGF5ZXJDb250ZW50UmVjdCA9IEludFJlY3QoSW50UG9pbnQoLTEwLCAtMSksIEludFNpemUoMjAs
IDIpKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRvU3VyZmFjZVRyYW5zZm9ybTsK
KyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyVG9TdXJmYWNlVHJhbnNm
b3JtOwogCiAgICAgLy8gVGhlIGxheWVyIGlzIHBvc2l0aW9uZWQgc28gdGhhdCB0aGUgcmlnaHQg
aGFsZiBvZiB0aGUgbGF5ZXIgc2hvdWxkIGJlIGluIGZyb250IG9mCiAgICAgLy8gdGhlIGNhbWVy
YSwgd2hpbGUgdGhlIG90aGVyIGhhbGYgaXMgYmVoaW5kIHRoZSBzdXJmYWNlJ3MgcHJvamVjdGlv
biBwbGFuZS4gVGhlCkBAIC0xMjE2LDcgKzEyMTYsNyBAQCBURVNUKENDTGF5ZXJUcmVlSG9zdENv
bW1vblRlc3QsIHZlcmlmeVZpc2libGVSZWN0Rm9yUGVyc3BlY3RpdmVVbnByb2plY3Rpb24pCiAg
ICAgLy8gVGhpcyBzZXF1ZW5jZSBvZiB0cmFuc2Zvcm1zIGNhdXNlcyBvbmUgY29ybmVyIG9mIHRo
ZSBsYXllciB0byBwcm90cnVkZSBhY3Jvc3MgdGhlIHcgPSAwIHBsYW5lLCBhbmQgc2hvdWxkIGJl
IGNsaXBwZWQuCiAgICAgSW50UmVjdCB0YXJnZXRTdXJmYWNlUmVjdCA9IEludFJlY3QoSW50UG9p
bnQoLTUwLCAtNTApLCBJbnRTaXplKDEwMCwgMTAwKSk7CiAgICAgSW50UmVjdCBsYXllckNvbnRl
bnRSZWN0ID0gSW50UmVjdChJbnRQb2ludCgtMTAsIC0xMCksIEludFNpemUoMjAsIDIwKSk7Ci0g
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUb1N1cmZhY2VUcmFuc2Zvcm07CisgICAgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRvU3VyZmFjZVRyYW5zZm9ybTsKICAg
ICBsYXllclRvU3VyZmFjZVRyYW5zZm9ybS5tYWtlSWRlbnRpdHkoKTsKICAgICBsYXllclRvU3Vy
ZmFjZVRyYW5zZm9ybS5hcHBseVBlcnNwZWN0aXZlKDEpOwogICAgIGxheWVyVG9TdXJmYWNlVHJh
bnNmb3JtLnRyYW5zbGF0ZTNkKDAsIDAsIC01KTsKQEAgLTEyNDYsNyArMTI0Niw3IEBAIFRFU1Qo
Q0NMYXllclRyZWVIb3N0Q29tbW9uVGVzdCwgdmVyaWZ5QmFja0ZhY2VDdWxsaW5nKQogICAgIC8v
IHRyZWF0ZWQgYXMgInVua25vd24iIHNvIHdlIGNhbiBub3QgYmUgc3VyZSB0aGF0IHRoZWlyIGJh
Y2sgZmFjZSBpcyByZWFsbHkgc2hvd2luZy4KICAgICAvLwogCi0gICAgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7CisgICAgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
cGFyZW50ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCk7CiAgICAgUmVmUHRyPExheWVyQ2hyb21p
dW1XaXRoRm9yY2VkRHJhd3NDb250ZW50PiBjaGlsZCA9IGFkb3B0UmVmKG5ldyBMYXllckNocm9t
aXVtV2l0aEZvcmNlZERyYXdzQ29udGVudCgpKTsKICAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bVdp
dGhGb3JjZWREcmF3c0NvbnRlbnQ+IGFuaW1hdGluZ1N1cmZhY2UgPSBhZG9wdFJlZihuZXcgTGF5
ZXJDaHJvbWl1bVdpdGhGb3JjZWREcmF3c0NvbnRlbnQoKSk7CkBAIC0xMjY4LDcgKzEyNjgsNyBA
QCBURVNUKENDTGF5ZXJUcmVlSG9zdENvbW1vblRlc3QsIHZlcmlmeUJhY2tGYWNlQ3VsbGluZykK
ICAgICBjaGlsZE9mQW5pbWF0aW5nU3VyZmFjZS0+c2V0RG91YmxlU2lkZWQoZmFsc2UpOwogICAg
IGFuaW1hdGluZ0NoaWxkLT5zZXREb3VibGVTaWRlZChmYWxzZSk7CiAKLSAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBiYWNrZmFjZU1hdHJpeDsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4IGJhY2tmYWNlTWF0cml4OwogICAgIGJhY2tmYWNlTWF0cml4LnRyYW5zbGF0ZSg1MCwg
NTApOwogICAgIGJhY2tmYWNlTWF0cml4LnJvdGF0ZTNkKDAsIDEsIDAsIDE4MCk7CiAgICAgYmFj
a2ZhY2VNYXRyaXgudHJhbnNsYXRlKC01MCwgLTUwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IGE1NjBiZThjMGJj
Zjc5ZGRiNDU2ZGVmNGYzMzU1NzhkN2Y2YzRjNDEuLjUxMWNhMjlhYzEyMDJiMGQyZGVjZjNkZmU5
ODk4NDAyZDdhM2U3MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMTgzMSw3ICsxODMxLDcgQEAgVEVTVF9GKEND
TGF5ZXJUcmVlSG9zdFRlc3RBdG9taWNDb21taXQsIHJ1bk11bHRpVGhyZWFkKQogICAgIHJ1blRl
c3QodHJ1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRlc3Rpbmco
TGF5ZXJDaHJvbWl1bSogbGF5ZXIsIExheWVyQ2hyb21pdW0qIHBhcmVudCwgY29uc3QgVHJhbnNm
b3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25z
dCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBib29sIG9wYXF1
ZSkKK3N0YXRpYyB2b2lkIHNldExheWVyUHJvcGVydGllc0ZvclRlc3RpbmcoTGF5ZXJDaHJvbWl1
bSogbGF5ZXIsIExheWVyQ2hyb21pdW0qIHBhcmVudCwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3IsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJvb2wgb3BhcXVl
KQogewogICAgIGxheWVyLT5yZW1vdmVBbGxDaGlsZHJlbigpOwogICAgIGlmIChwYXJlbnQpCkBA
IC0xODU5LDcgKzE4NTksNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+c2V0
Um9vdExheWVyKG1fcGFyZW50KTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5zZXRWaWV3cG9y
dFNpemUoSW50U2l6ZSgxMCwgMjApKTsKIAotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
ZGVudGl0eU1hdHJpeDsKKyAgICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBp
ZGVudGl0eU1hdHJpeDsKICAgICAgICAgc2V0TGF5ZXJQcm9wZXJ0aWVzRm9yVGVzdGluZyhtX3Bh
cmVudC5nZXQoKSwgMCwgaWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCksIEZsb2F0UG9p
bnQoMCwgMCksIEludFNpemUoMTAsIDIwKSwgdHJ1ZSk7CiAgICAgICAgIHNldExheWVyUHJvcGVy
dGllc0ZvclRlc3RpbmcobV9jaGlsZC5nZXQoKSwgbV9wYXJlbnQuZ2V0KCksIGlkZW50aXR5TWF0
cml4LCBGbG9hdFBvaW50KDAsIDApLCBGbG9hdFBvaW50KDAsIDEwKSwgSW50U2l6ZSgxMCwgMTAp
LCBmYWxzZSk7CiAKQEAgLTIwMjUsNyArMjAyNSw3IEBAIHByaXZhdGU6CiAgICAgUmVnaW9uIG1f
b2NjbHVkZWRTY3JlZW5TcGFjZTsKIH07CiAKLXN0YXRpYyB2b2lkIHNldFRlc3RMYXllclByb3Bl
cnRpZXNGb3JUZXN0aW5nKFRlc3RMYXllckNocm9taXVtKiBsYXllciwgTGF5ZXJDaHJvbWl1bSog
cGFyZW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXpl
JiBib3VuZHMsIGJvb2wgb3BhcXVlKQorc3RhdGljIHZvaWQgc2V0VGVzdExheWVyUHJvcGVydGll
c0ZvclRlc3RpbmcoVGVzdExheWVyQ2hyb21pdW0qIGxheWVyLCBMYXllckNocm9taXVtKiBwYXJl
bnQsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgYW5jaG9yLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3Qg
SW50U2l6ZSYgYm91bmRzLCBib29sIG9wYXF1ZSkKIHsKICAgICBzZXRMYXllclByb3BlcnRpZXNG
b3JUZXN0aW5nKGxheWVyLCBwYXJlbnQsIHRyYW5zZm9ybSwgYW5jaG9yLCBwb3NpdGlvbiwgYm91
bmRzLCBvcGFxdWUpOwogICAgIGxheWVyLT5jbGVhck9jY2x1ZGVkU2NyZWVuU3BhY2UoKTsKQEAg
LTIwNDMsOCArMjA0Myw4IEBAIHB1YmxpYzoKICAgICAgICAgUmVmUHRyPFRlc3RMYXllckNocm9t
aXVtPiBncmFuZENoaWxkID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0ZSgpOwogICAgICAgICBS
ZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+IG1hc2sgPSBUZXN0TGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCk7CiAKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Ci0gICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOworICAgICAgICBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OworICAgICAgICBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOwogICAgICAgICBjaGlsZFRy
YW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOwogICAgICAgICBjaGlsZFRyYW5zZm9ybS5yb3Rh
dGUoOTApOwogICAgICAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CkBA
IC0yMjQ1LDggKzIyNDUsOCBAQCBwdWJsaWM6CiAgICAgICAgIFJlZlB0cjxUZXN0TGF5ZXJDaHJv
bWl1bT4gZ3JhbmRDaGlsZCA9IFRlc3RMYXllckNocm9taXVtOjpjcmVhdGUoKTsKICAgICAgICAg
UmVmUHRyPFRlc3RMYXllckNocm9taXVtPiBtYXNrID0gVGVzdExheWVyQ2hyb21pdW06OmNyZWF0
ZSgpOwogCi0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGlkZW50aXR5TWF0cml4OwotICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKKyAgICAgICAgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICAgICAgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5zZm9ybTsKICAgICAgICAgY2hpbGRU
cmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsKICAgICAgICAgY2hpbGRUcmFuc2Zvcm0ucm90
YXRlKDkwKTsKICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOwpA
QCAtMjMzMSw3ICsyMzMxLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgLy8gV2UgY3JlYXRl
IGVub3VnaCBSZW5kZXJTdXJmYWNlcyB0aGF0IGl0IHdpbGwgdHJpZ2dlciBWZWN0b3IgcmVhbGxv
Y2F0aW9uIHdoaWxlIGNvbXB1dGluZyBvY2NsdXNpb24uCiAgICAgICAgIFJlZ2lvbiBvY2NsdWRl
ZDsKLSAgICAgICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRyaXg7Cisg
ICAgICAgIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7CiAgICAgICAgIFZlY3RvcjxSZWZQdHI8VGVzdExheWVyQ2hyb21pdW0+ID4gbGF5ZXJzOwog
ICAgICAgICBWZWN0b3I8UmVmUHRyPFRlc3RMYXllckNocm9taXVtPiA+IGNoaWxkcmVuOwogICAg
ICAgICBpbnQgbnVtU3VyZmFjZXMgPSAyMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVUZXN0Q29tbW9uLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlVGVzdENvbW1vbi5oCmluZGV4IDc1ZTQ4N2E0YTdlZjQ2ZTcz
YjYyODNjM2ZmNDUwYTVlNDVjYTg2MGMuLjI1OGNiZDY0YTNhNTA1NTk0NzNhMDc2MmJjYzYyZGU1
YjA5NzQwYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVUZXN0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZVRlc3RDb21tb24uaApAQCAtNDEsNyArNDEsNyBAQCBuYW1lc3BhY2UgV2ViS2l0VGVz
dHMgewogICAgIEVYUEVDVF9FUSgoZXhwZWN0ZWQpLnNpemUoKS5oZWlnaHQoKSwgKGFjdHVhbCku
c2l6ZSgpLmhlaWdodCgpKQogCiAvLyBUaGlzIGlzIGEgbWFjcm8gaW5zdGVhZCBvZiBhIGZ1bmN0
aW9uIHNvIHRoYXQgd2UgZ2V0IHVzZWZ1bCBsaW5lIG51bWJlcnMgd2hlcmUgYSB0ZXN0IGZhaWxl
ZC4KLS8vIEV2ZW4gdGhvdWdoIFRyYW5zZm9ybWF0aW9uTWF0cml4IHZhbHVlcyBhcmUgZG91Ymxl
IHByZWNpc2lvbiwgdGhlcmUgYXJlIG1hbnkgb3RoZXIgZmxvYXRpbmctcG9pbnQgdmFsdWVzIHVz
ZWQgdGhhdCBhZmZlY3QKKy8vIEV2ZW4gdGhvdWdoIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggdmFsdWVzIGFyZSBkb3VibGUgcHJlY2lzaW9uLCB0aGVyZSBhcmUgbWFueSBvdGhlciBm
bG9hdGluZy1wb2ludCB2YWx1ZXMgdXNlZCB0aGF0IGFmZmVjdAogLy8gdGhlIHRyYW5zZm9ybXMs
IGFuZCBzbyB3ZSBvbmx5IGV4cGVjdCB0aGVtIHRvIGJlIGFjY3VyYXRlIHVwIHRvIGZsb2F0aW5n
LXBvaW50IHByZWNpc2lvbi4KICNkZWZpbmUgRVhQRUNUX1RSQU5TRk9STUFUSU9OX01BVFJJWF9F
UShleHBlY3RlZCwgYWN0dWFsKSAgICAgICBcCiAgICAgRVhQRUNUX0ZMT0FUX0VRKChleHBlY3Rl
ZCkubTExKCksIChhY3R1YWwpLm0xMSgpKTsgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ01hdGhVdGlsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL0NDTWF0aFV0aWxUZXN0LmNwcAppbmRleCAzOTA5Njc3YTUyYTUzMDZh
ZWY4ZDBlMTc3M2Y5YzA2MzE4MGY3OTI5Li45Y2NhZTNhMWMwNWE5Njc0MDhlMmQxZTNkODM5MmRk
ODVkZTU3MjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTWF0
aFV0aWxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTWF0aFV0
aWxUZXN0LmNwcApAQCAtMjYsNyArMjYsNyBAQAogCiAjaW5jbHVkZSAiY2MvQ0NNYXRoVXRpbC5o
IgogCi0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJwbGF0Zm9y
bS9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSA8Z21vY2svZ21vY2suaD4K
ICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2Ugewog
CiBURVNUKENDTWF0aFV0aWxUZXN0LCB2ZXJpZnlCYWNrZmFjZVZpc2liaWxpdHlCYXNpY0Nhc2Vz
KQogewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICBXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKIAogICAgIHRyYW5zZm9ybS5tYWtlSWRl
bnRpdHkoKTsKICAgICBFWFBFQ1RfRkFMU0UodHJhbnNmb3JtLmlzQmFja0ZhY2VWaXNpYmxlKCkp
OwpAQCAtNTgsNyArNTgsNyBAQCBURVNUKENDTWF0aFV0aWxUZXN0LCB2ZXJpZnlCYWNrZmFjZVZp
c2liaWxpdHlCYXNpY0Nhc2VzKQogCiBURVNUKENDTWF0aFV0aWxUZXN0LCB2ZXJpZnlCYWNrZmFj
ZVZpc2liaWxpdHlGb3JQZXJzcGVjdGl2ZSkKIHsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBs
YXllclNwYWNlVG9Qcm9qZWN0aW9uUGxhbmU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCBsYXllclNwYWNlVG9Qcm9qZWN0aW9uUGxhbmU7CiAKICAgICAvLyBUaGlzIHRlc3Rz
IGlmIGlzQmFja0ZhY2VWaXNpYmxlIHdvcmtzIHByb3Blcmx5IHVuZGVyIHBlcnNwZWN0aXZlIHRy
YW5zZm9ybXMuCiAgICAgLy8gU3BlY2lmaWNhbGx5LCBsYXllcnMgdGhhdCBtYXkgaGF2ZSB0aGVp
ciBiYWNrIGZhY2UgdmlzaWJsZSBpbiBvcnRob2dyYXBoaWMKQEAgLTEwNCw3ICsxMDQsNyBAQCBU
RVNUKENDTWF0aFV0aWxUZXN0LCB2ZXJpZnlQcm9qZWN0aW9uT2ZQZXJwZW5kaWN1bGFyUGxhbmUp
CiAgICAgLy8gSW4gdGhpcyBjYXNlLCB0aGUgbTMzKCkgZWxlbWVudCBvZiB0aGUgdHJhbnNmb3Jt
IGJlY29tZXMgemVybywgd2hpY2ggY291bGQgY2F1c2UgYQogICAgIC8vIGRpdmlkZS1ieS16ZXJv
IHdoZW4gcHJvamVjdGluZyBwb2ludHMvcXVhZHMuCiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0cmFuc2Zvcm07CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zv
cm07CiAgICAgdHJhbnNmb3JtLm1ha2VJZGVudGl0eSgpOwogICAgIHRyYW5zZm9ybS5zZXRNMzMo
MCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNp
b25UcmFja2VyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVz
aW9uVHJhY2tlclRlc3QuY3BwCmluZGV4IDg5MWMzMDViMDE5ZjA0MTE3MWJjYTFkNGEwYjIxN2M5
ZWRkYjBiNWUuLjU2ZDU3MTRiOTVjMmFlNjEzYzc3MjFjODNhYzkwMGE4YzQ0NmNhZDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2VyVGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNr
ZXJUZXN0LmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMu
aCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCi0jaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlv
bi5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllckltcGwuaCIKQEAgLTE3Niw3ICsxNzYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
ICAgIENDTGF5ZXJUcmVlSG9zdDo6c2V0TmVlZHNGaWx0ZXJDb250ZXh0KGZhbHNlKTsKICAgICB9
CiAKLSAgICB0eXBlbmFtZSBUeXBlczo6Q29udGVudExheWVyVHlwZSogY3JlYXRlUm9vdChjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwb3Np
dGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQorICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50
TGF5ZXJUeXBlKiBjcmVhdGVSb290KGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUm
IGJvdW5kcykKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5ZXJQdHJU
eXBlIGxheWVyKFR5cGVzOjpjcmVhdGVDb250ZW50TGF5ZXIoKSk7CiAgICAgICAgIHR5cGVuYW1l
IFR5cGVzOjpDb250ZW50TGF5ZXJUeXBlKiBsYXllclB0ciA9IGxheWVyLmdldCgpOwpAQCAtMTg3
LDcgKzE4Nyw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIGxheWVyUHRyOwogICAgIH0K
IAotICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGNyZWF0ZUxheWVyKHR5cGVuYW1lIFR5
cGVzOjpMYXllclR5cGUqIHBhcmVudCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5z
Zm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIGJvdW5kcykK
KyAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBjcmVhdGVMYXllcih0eXBlbmFtZSBUeXBl
czo6TGF5ZXJUeXBlKiBwYXJlbnQsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUm
IGJvdW5kcykKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclB0clR5cGUgbGF5
ZXIoVHlwZXM6OmNyZWF0ZUxheWVyKCkpOwogICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJU
eXBlKiBsYXllclB0ciA9IGxheWVyLmdldCgpOwpAQCAtMTk2LDcgKzE5Niw3IEBAIHByb3RlY3Rl
ZDoKICAgICAgICAgcmV0dXJuIGxheWVyUHRyOwogICAgIH0KIAotICAgIHR5cGVuYW1lIFR5cGVz
OjpMYXllclR5cGUqIGNyZWF0ZVN1cmZhY2UodHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogcGFy
ZW50LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBv
aW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQorICAgIHR5cGVuYW1lIFR5cGVz
OjpMYXllclR5cGUqIGNyZWF0ZVN1cmZhY2UodHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogcGFy
ZW50LCBjb25zdCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCiAgICAgewog
ICAgICAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBsYXllciA9IGNyZWF0ZUxheWVyKHBh
cmVudCwgdHJhbnNmb3JtLCBwb3NpdGlvbiwgYm91bmRzKTsKICAgICAgICAgRmlsdGVyT3BlcmF0
aW9ucyBmaWx0ZXJzOwpAQCAtMjA1LDcgKzIwNSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0
dXJuIGxheWVyOwogICAgIH0KIAotICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5ZXJUeXBl
KiBjcmVhdGVEcmF3aW5nTGF5ZXIodHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogcGFyZW50LCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBw
b3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBib29sIG9wYXF1ZSkKKyAgICB0eXBlbmFt
ZSBUeXBlczo6Q29udGVudExheWVyVHlwZSogY3JlYXRlRHJhd2luZ0xheWVyKHR5cGVuYW1lIFR5
cGVzOjpMYXllclR5cGUqIHBhcmVudCwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6
ZSYgYm91bmRzLCBib29sIG9wYXF1ZSkKICAgICB7CiAgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpD
b250ZW50TGF5ZXJQdHJUeXBlIGxheWVyKFR5cGVzOjpjcmVhdGVDb250ZW50TGF5ZXIoKSk7CiAg
ICAgICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5ZXJUeXBlKiBsYXllclB0ciA9IGxheWVy
LmdldCgpOwpAQCAtMjI1LDcgKzIyNSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIGxh
eWVyUHRyOwogICAgIH0KIAotICAgIHR5cGVuYW1lIFR5cGVzOjpMYXllclR5cGUqIGNyZWF0ZVJl
cGxpY2FMYXllcih0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBvd25pbmdMYXllciwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRp
b24sIGNvbnN0IEludFNpemUmIGJvdW5kcykKKyAgICB0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBl
KiBjcmVhdGVSZXBsaWNhTGF5ZXIodHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogb3duaW5nTGF5
ZXIsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIGJvdW5kcykKICAgICB7CiAg
ICAgICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5ZXJQdHJUeXBlIGxheWVyKFR5cGVzOjpj
cmVhdGVDb250ZW50TGF5ZXIoKSk7CiAgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5
ZXJUeXBlKiBsYXllclB0ciA9IGxheWVyLmdldCgpOwpAQCAtMjQzLDcgKzI0Myw3IEBAIHByb3Rl
Y3RlZDoKICAgICAgICAgcmV0dXJuIGxheWVyUHRyOwogICAgIH0KIAotICAgIHR5cGVuYW1lIFR5
cGVzOjpDb250ZW50TGF5ZXJUeXBlKiBjcmVhdGVEcmF3aW5nU3VyZmFjZSh0eXBlbmFtZSBUeXBl
czo6TGF5ZXJUeXBlKiBwYXJlbnQsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zv
cm0sIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGJv
b2wgb3BhcXVlKQorICAgIHR5cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5ZXJUeXBlKiBjcmVhdGVE
cmF3aW5nU3VyZmFjZSh0eXBlbmFtZSBUeXBlczo6TGF5ZXJUeXBlKiBwYXJlbnQsIGNvbnN0IFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2lu
dCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIGJvdW5kcywgYm9vbCBvcGFxdWUpCiAgICAgewog
ICAgICAgICB0eXBlbmFtZSBUeXBlczo6Q29udGVudExheWVyVHlwZSogbGF5ZXIgPSBjcmVhdGVE
cmF3aW5nTGF5ZXIocGFyZW50LCB0cmFuc2Zvcm0sIHBvc2l0aW9uLCBib3VuZHMsIG9wYXF1ZSk7
CiAgICAgICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyczsKQEAgLTMzNSwyNCArMzM1LDI0IEBA
IHByb3RlY3RlZDoKICAgICAgICAgbV9sYXllckl0ZXJhdG9yID0gbV9sYXllckl0ZXJhdG9yQmVn
aW47CiAgICAgfQogCi0gICAgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7CisgICAgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpZGVudGl0eU1h
dHJpeDsKIAogcHJpdmF0ZToKLSAgICB2b2lkIHNldEJhc2VQcm9wZXJ0aWVzKHR5cGVuYW1lIFR5
cGVzOjpMYXllclR5cGUqIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNm
b3JtLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQor
ICAgIHZvaWQgc2V0QmFzZVByb3BlcnRpZXModHlwZW5hbWUgVHlwZXM6OkxheWVyVHlwZSogbGF5
ZXIsIGNvbnN0IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29u
c3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIGJvdW5kcykKICAgICB7CiAg
ICAgICAgIGxheWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKLSAgICAgICAgbGF5ZXItPnNl
dFN1YmxheWVyVHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KCkpOworICAgICAgICBsYXll
ci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0oV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
KTsKICAgICAgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQoMCwgMCkpOwogICAg
ICAgICBsYXllci0+c2V0UG9zaXRpb24ocG9zaXRpb24pOwogICAgICAgICBsYXllci0+c2V0Qm91
bmRzKGJvdW5kcyk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRQcm9wZXJ0aWVzKExheWVyQ2hyb21p
dW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBG
bG9hdFBvaW50JiBwb3NpdGlvbiwgY29uc3QgSW50U2l6ZSYgYm91bmRzKQorICAgIHZvaWQgc2V0
UHJvcGVydGllcyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9hdFBvaW50JiBwb3NpdGlvbiwgY29u
c3QgSW50U2l6ZSYgYm91bmRzKQogICAgIHsKICAgICAgICAgc2V0QmFzZVByb3BlcnRpZXMobGF5
ZXIsIHRyYW5zZm9ybSwgcG9zaXRpb24sIGJvdW5kcyk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRQ
cm9wZXJ0aWVzKENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgm
IHRyYW5zZm9ybSwgY29uc3QgRmxvYXRQb2ludCYgcG9zaXRpb24sIGNvbnN0IEludFNpemUmIGJv
dW5kcykKKyAgICB2b2lkIHNldFByb3BlcnRpZXMoQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBX
ZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXplJiBib3VuZHMpCiAgICAgewogICAgICAgICBzZXRC
YXNlUHJvcGVydGllcyhsYXllciwgdHJhbnNmb3JtLCBwb3NpdGlvbiwgYm91bmRzKTsKIApAQCAt
NDg2LDcgKzQ4Niw3IEBAIGNsYXNzIENDT2NjbHVzaW9uVHJhY2tlclRlc3RSb3RhdGVkQ2hpbGQg
OiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFja2VyVGVzdDxUeXBlcywKIHByb3RlY3RlZDoKICAgICB2
b2lkIHJ1bk15VGVzdCgpCiAgICAgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXll
clRyYW5zZm9ybTsKKyAgICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXll
clRyYW5zZm9ybTsKICAgICAgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsK
ICAgICAgICAgbGF5ZXJUcmFuc2Zvcm0ucm90YXRlKDkwKTsKICAgICAgICAgbGF5ZXJUcmFuc2Zv
cm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOwpAQCAtNTM5LDcgKzUzOSw3IEBAIGNsYXNzIENDT2Nj
bHVzaW9uVHJhY2tlclRlc3RUcmFuc2xhdGVkQ2hpbGQgOiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFj
a2VyVGVzdDxUeXBlCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBydW5NeVRlc3QoKQogICAgIHsKLSAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CisgICAgICAgIFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm07CiAgICAgICAgIGxheWVy
VHJhbnNmb3JtLnRyYW5zbGF0ZSgyMCwgMjApOwogCiAgICAgICAgIHR5cGVuYW1lIFR5cGVzOjpD
b250ZW50TGF5ZXJUeXBlKiBwYXJlbnQgPSB0aGlzLT5jcmVhdGVSb290KHRoaXMtPmlkZW50aXR5
TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDEwMCwgMTAwKSk7CkBAIC02MDIsNyAr
NjAyLDcgQEAgY2xhc3MgQ0NPY2NsdXNpb25UcmFja2VyVGVzdENoaWxkSW5Sb3RhdGVkQ2hpbGQg
OiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFja2VyVGVzdDwKIHByb3RlY3RlZDoKICAgICB2b2lkIHJ1
bk15VGVzdCgpCiAgICAgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5z
Zm9ybTsKKyAgICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZFRyYW5z
Zm9ybTsKICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsKICAgICAg
ICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRlKDkwKTsKICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHJh
bnNsYXRlKC0yNTAsIC0yNTApOwpAQCAtNjk1LDcgKzY5NSw3IEBAIGNsYXNzIENDT2NjbHVzaW9u
VHJhY2tlclRlc3RWaXNpdFRhcmdldFR3b1RpbWVzIDogcHVibGljIENDT2NjbHVzaW9uVHJhY2tl
clRlc3Q8CiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBydW5NeVRlc3QoKQogICAgIHsKLSAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2Zvcm07CisgICAgICAgIFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2Zvcm07CiAgICAgICAgIGNoaWxkVHJhbnNm
b3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CiAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5
MCk7CiAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgtMjUwLCAtMjUwKTsKQEAgLTg0
MSwxMiArODQxLDEyIEBAIGNsYXNzIENDT2NjbHVzaW9uVHJhY2tlclRlc3RTdXJmYWNlUm90YXRl
ZE9mZkF4aXMgOiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFja2VyVGVzCiBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBydW5NeVRlc3QoKQogICAgIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hp
bGRUcmFuc2Zvcm07CisgICAgICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggY2hp
bGRUcmFuc2Zvcm07CiAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7
CiAgICAgICAgIGNoaWxkVHJhbnNmb3JtLnJvdGF0ZSg5NSk7CiAgICAgICAgIGNoaWxkVHJhbnNm
b3JtLnRyYW5zbGF0ZSgtMjUwLCAtMjUwKTsKIAotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBsYXllclRyYW5zZm9ybTsKKyAgICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBsYXllclRyYW5zZm9ybTsKICAgICAgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKDEwLCAx
MCk7CiAKICAgICAgICAgdHlwZW5hbWUgVHlwZXM6OkNvbnRlbnRMYXllclR5cGUqIHBhcmVudCA9
IHRoaXMtPmNyZWF0ZVJvb3QodGhpcy0+aWRlbnRpdHlNYXRyaXgsIEZsb2F0UG9pbnQoMCwgMCks
IEludFNpemUoMTAwLCAxMDApKTsKQEAgLTkwNyw3ICs5MDcsNyBAQCBjbGFzcyBDQ09jY2x1c2lv
blRyYWNrZXJUZXN0U3VyZmFjZVdpdGhUd29PcGFxdWVDaGlsZHJlbiA6IHB1YmxpYyBDQ09jY2x1
c2lvblRyYQogcHJvdGVjdGVkOgogICAgIHZvaWQgcnVuTXlUZXN0KCkKICAgICB7Ci0gICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOworICAgICAgICBXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkVHJhbnNmb3JtOwogICAgICAgICBjaGlsZFRyYW5z
Zm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOwogICAgICAgICBjaGlsZFRyYW5zZm9ybS5yb3RhdGUo
OTApOwogICAgICAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoLTI1MCwgLTI1MCk7CkBAIC05
OTUsNyArOTk1LDcgQEAgY2xhc3MgQ0NPY2NsdXNpb25UcmFja2VyVGVzdE92ZXJsYXBwaW5nU3Vy
ZmFjZVNpYmxpbmdzIDogcHVibGljIENDT2NjbHVzaW9uVHJhY2sKIHByb3RlY3RlZDoKICAgICB2
b2lkIHJ1bk15VGVzdCgpCiAgICAgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGls
ZFRyYW5zZm9ybTsKKyAgICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGls
ZFRyYW5zZm9ybTsKICAgICAgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsK
ICAgICAgICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRlKDkwKTsKICAgICAgICAgY2hpbGRUcmFuc2Zv
cm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOwpAQCAtMTEwNCwxMiArMTEwNCwxMiBAQCBjbGFzcyBD
Q09jY2x1c2lvblRyYWNrZXJUZXN0T3ZlcmxhcHBpbmdTdXJmYWNlU2libGluZ3NXaXRoVHdvVHJh
bnNmb3JtcyA6IHB1YmxpYwogcHJvdGVjdGVkOgogICAgIHZvaWQgcnVuTXlUZXN0KCkKICAgICB7
Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkMVRyYW5zZm9ybTsKKyAgICAgICAg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjaGlsZDFUcmFuc2Zvcm07CiAgICAgICAg
IGNoaWxkMVRyYW5zZm9ybS50cmFuc2xhdGUoMjUwLCAyNTApOwogICAgICAgICBjaGlsZDFUcmFu
c2Zvcm0ucm90YXRlKC05MCk7CiAgICAgICAgIGNoaWxkMVRyYW5zZm9ybS50cmFuc2xhdGUoLTI1
MCwgLTI1MCk7CiAKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY2hpbGQyVHJhbnNmb3Jt
OworICAgICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGNoaWxkMlRyYW5zZm9y
bTsKICAgICAgICAgY2hpbGQyVHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDI1MCk7CiAgICAgICAg
IGNoaWxkMlRyYW5zZm9ybS5yb3RhdGUoOTApOwogICAgICAgICBjaGlsZDJUcmFuc2Zvcm0udHJh
bnNsYXRlKC0yNTAsIC0yNTApOwpAQCAtMTIxMSw3ICsxMjExLDcgQEAgY2xhc3MgQ0NPY2NsdXNp
b25UcmFja2VyVGVzdEZpbHRlcnMgOiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFja2VyVGVzdDxUeXBl
cywgb3BhcXUKIHByb3RlY3RlZDoKICAgICB2b2lkIHJ1bk15VGVzdCgpCiAgICAgewotICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybTsKKyAgICAgICAgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllclRyYW5zZm9ybTsKICAgICAgICAgbGF5ZXJUcmFu
c2Zvcm0udHJhbnNsYXRlKDI1MCwgMjUwKTsKICAgICAgICAgbGF5ZXJUcmFuc2Zvcm0ucm90YXRl
KDkwKTsKICAgICAgICAgbGF5ZXJUcmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC0yNTApOwpAQCAt
MTg0Nyw3ICsxODQ3LDcgQEAgY2xhc3MgQ0NPY2NsdXNpb25UcmFja2VyVGVzdDNkVHJhbnNmb3Jt
IDogcHVibGljIENDT2NjbHVzaW9uVHJhY2tlclRlc3Q8VHlwZXMsIG8KIHByb3RlY3RlZDoKICAg
ICB2b2lkIHJ1bk15VGVzdCgpCiAgICAgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm07CisgICAgICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNm
b3JtOwogICAgICAgICB0cmFuc2Zvcm0ucm90YXRlM2QoMCwgMzAsIDApOwogCiAgICAgICAgIHR5
cGVuYW1lIFR5cGVzOjpDb250ZW50TGF5ZXJUeXBlKiBwYXJlbnQgPSB0aGlzLT5jcmVhdGVSb290
KHRoaXMtPmlkZW50aXR5TWF0cml4LCBGbG9hdFBvaW50KDAsIDApLCBJbnRTaXplKDMwMCwgMzAw
KSk7CkBAIC0xODcwLDcgKzE4NzAsNyBAQCBjbGFzcyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0UGVy
c3BlY3RpdmVUcmFuc2Zvcm0gOiBwdWJsaWMgQ0NPY2NsdXNpb25UcmFja2VyVGVzdAogcHJvdGVj
dGVkOgogICAgIHZvaWQgcnVuTXlUZXN0KCkKICAgICB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRyYW5zZm9ybTsKKyAgICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0cmFuc2Zvcm07CiAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoMTUwLCAxNTApOwogICAg
ICAgICB0cmFuc2Zvcm0uYXBwbHlQZXJzcGVjdGl2ZSg0MDApOwogICAgICAgICB0cmFuc2Zvcm0u
cm90YXRlM2QoMSwgMCwgMCwgLTMwKTsKQEAgLTE4OTgsNyArMTg5OCw3IEBAIHByb3RlY3RlZDoK
ICAgICB2b2lkIHJ1bk15VGVzdCgpCiAgICAgewogICAgICAgICAvLyBUaGlzIHRlc3QgaXMgYmFz
ZWQgb24gdGhlIHBsYXRmb3JtL2Nocm9taXVtL2NvbXBvc2l0aW5nLzNkLWNvcm5lcnMuaHRtbCBs
YXlvdXQgdGVzdC4KLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOworICAg
ICAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKICAgICAgICAg
dHJhbnNmb3JtLnRyYW5zbGF0ZSgyNTAsIDUwKTsKICAgICAgICAgdHJhbnNmb3JtLmFwcGx5UGVy
c3BlY3RpdmUoMTApOwogICAgICAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC0yNTAsIC01MCk7CkBA
IC0xOTI5LDcgKzE5MjksNyBAQCBjbGFzcyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0TGF5ZXJCZWhp
bmRDYW1lcmFEb2VzTm90T2NjbHVkZSA6IHB1YmxpYyBDQ09jY2x1c2lvbgogcHJvdGVjdGVkOgog
ICAgIHZvaWQgcnVuTXlUZXN0KCkKICAgICB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHRyYW5zZm9ybTsKKyAgICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFu
c2Zvcm07CiAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKICAgICAgICAgdHJh
bnNmb3JtLmFwcGx5UGVyc3BlY3RpdmUoMTAwKTsKICAgICAgICAgdHJhbnNmb3JtLnRyYW5zbGF0
ZTNkKDAsIDAsIDExMCk7CkBAIC0xOTU4LDcgKzE5NTgsNyBAQCBjbGFzcyBDQ09jY2x1c2lvblRy
YWNrZXJUZXN0TGFyZ2VQaXhlbHNPY2NsdWRlSW5zaWRlQ2xpcFJlY3QgOiBwdWJsaWMgQ0NPY2Ns
dXNpbwogcHJvdGVjdGVkOgogICAgIHZvaWQgcnVuTXlUZXN0KCkKICAgICB7Ci0gICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07CiAgICAgICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoNTAs
IDUwKTsKICAgICAgICAgdHJhbnNmb3JtLmFwcGx5UGVyc3BlY3RpdmUoMTAwKTsKICAgICAgICAg
dHJhbnNmb3JtLnRyYW5zbGF0ZTNkKDAsIDAsIDk5KTsKQEAgLTIxODYsNyArMjE4Niw3IEBAIGNs
YXNzIENDT2NjbHVzaW9uVHJhY2tlclRlc3RTdXJmYWNlT2NjbHVzaW9uVHJhbnNsYXRlc1RvUGFy
ZW50IDogcHVibGljIENDT2NjbHVzCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBydW5NeVRlc3QoKQog
ICAgIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VyZmFjZVRyYW5zZm9ybTsKKyAg
ICAgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdXJmYWNlVHJhbnNmb3JtOwog
ICAgICAgICBzdXJmYWNlVHJhbnNmb3JtLnRyYW5zbGF0ZSgzMDAsIDMwMCk7CiAgICAgICAgIHN1
cmZhY2VUcmFuc2Zvcm0uc2NhbGUoMik7CiAgICAgICAgIHN1cmZhY2VUcmFuc2Zvcm0udHJhbnNs
YXRlKC0xNTAsIC0xNTApOwpAQCAtMjQ3OSw3ICsyNDc5LDcgQEAgY2xhc3MgQ0NPY2NsdXNpb25U
cmFja2VyVGVzdERvbnRPY2NsdWRlUGl4ZWxzTmVlZGVkRm9yQmFja2dyb3VuZEZpbHRlciA6IHB1
YmxpYwogcHJvdGVjdGVkOgogICAgIHZvaWQgcnVuTXlUZXN0KCkKICAgICB7Ci0gICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHNjYWxlQnlIYWxmOworICAgICAgICBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IHNjYWxlQnlIYWxmOwogICAgICAgICBzY2FsZUJ5SGFsZi5zY2FsZSgw
LjUpOwogCiAgICAgICAgIC8vIE1ha2UgYSBzdXJmYWNlIGFuZCBpdHMgcmVwbGljYSwgZWFjaCA1
MHg1MCwgdGhhdCBhcmUgY29tcGxldGVseSBzdXJyb3VuZGVkIGJ5IG9wYXF1ZSBsYXllcnMgd2hp
Y2ggYXJlIGFib3ZlIHRoZW0gaW4gdGhlIHotb3JkZXIuCkBAIC0yNjA0LDcgKzI2MDQsNyBAQCBj
bGFzcyBDQ09jY2x1c2lvblRyYWNrZXJUZXN0VHdvQmFja2dyb3VuZEZpbHRlcnNSZWR1Y2VPY2Ns
dXNpb25Ud2ljZSA6IHB1YmxpYyBDQwogcHJvdGVjdGVkOgogICAgIHZvaWQgcnVuTXlUZXN0KCkK
ICAgICB7Ci0gICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHNjYWxlQnlIYWxmOworICAgICAg
ICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHNjYWxlQnlIYWxmOwogICAgICAgICBz
Y2FsZUJ5SGFsZi5zY2FsZSgwLjUpOwogCiAgICAgICAgIC8vIE1ha2VzIHR3byBzdXJmYWNlcyB0
aGF0IGNvbXBsZXRlbHkgY292ZXIgfHBhcmVudHwuIFRoZSBvY2NsdXNpb24gYm90aCBhYm92ZSBh
bmQgYmVsb3cgdGhlIGZpbHRlcnMgd2lsbCBiZSByZWR1Y2VkIGJ5IGVhY2ggb2YgdGhlbS4KQEAg
LTI3OTEsNyArMjc5MSw3IEBAIGNsYXNzIENDT2NjbHVzaW9uVHJhY2tlclRlc3REb250UmVkdWNl
T2NjbHVzaW9uQmVsb3dCYWNrZ3JvdW5kRmlsdGVyIDogcHVibGljIENDCiBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBydW5NeVRlc3QoKQogICAgIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
c2NhbGVCeUhhbGY7CisgICAgICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nh
bGVCeUhhbGY7CiAgICAgICAgIHNjYWxlQnlIYWxmLnNjYWxlKDAuNSk7CiAKICAgICAgICAgLy8g
TWFrZSBhIHN1cmZhY2UgYW5kIGl0cyByZXBsaWNhLCBlYWNoIDUweDUwLCB3aXRoIGEgc21hbGxl
ciAzMHgzMCBsYXllciBjZW50ZXJlZCBiZWxvdyBlYWNoLgpAQCAtMjg0MCw3ICsyODQwLDcgQEAg
Y2xhc3MgQ0NPY2NsdXNpb25UcmFja2VyVGVzdERvbnRSZWR1Y2VPY2NsdXNpb25JZkJhY2tncm91
bmRGaWx0ZXJJc09jY2x1ZGVkIDogcHUKIHByb3RlY3RlZDoKICAgICB2b2lkIHJ1bk15VGVzdCgp
CiAgICAgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY2FsZUJ5SGFsZjsKKyAgICAg
ICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzY2FsZUJ5SGFsZjsKICAgICAgICAg
c2NhbGVCeUhhbGYuc2NhbGUoMC41KTsKIAogICAgICAgICAvLyBNYWtlIGEgc3VyZmFjZSBhbmQg
aXRzIHJlcGxpY2EsIGVhY2ggNTB4NTAsIHRoYXQgYXJlIGNvbXBsZXRlbHkgb2NjbHVkZWQgYnkg
b3BhcXVlIGxheWVycyB3aGljaCBhcmUgYWJvdmUgdGhlbSBpbiB0aGUgei1vcmRlci4KQEAgLTI4
ODgsNyArMjg4OCw3IEBAIGNsYXNzIENDT2NjbHVzaW9uVHJhY2tlclRlc3RSZWR1Y2VPY2NsdXNp
b25XaGVuQmFja2dyb3VuZEZpbHRlcklzUGFydGlhbGx5T2NjbHVkCiBwcm90ZWN0ZWQ6CiAgICAg
dm9pZCBydW5NeVRlc3QoKQogICAgIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2Nh
bGVCeUhhbGY7CisgICAgICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggc2NhbGVC
eUhhbGY7CiAgICAgICAgIHNjYWxlQnlIYWxmLnNjYWxlKDAuNSk7CiAKICAgICAgICAgLy8gTWFr
ZSBhIHN1cmZhY2UgYW5kIGl0cyByZXBsaWNhLCBlYWNoIDUweDUwLCB0aGF0IGFyZSBwYXJ0aWFs
bHkgb2NjbHVkZWQgYnkgb3BhcXVlIGxheWVycyB3aGljaCBhcmUgYWJvdmUgdGhlbSBpbiB0aGUg
ei1vcmRlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NRdWFk
Q3VsbGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUXVhZEN1bGxl
clRlc3QuY3BwCmluZGV4IDYzNGEyNWM3YTgzYWJmYjZlZGIwM2UyNzU0YTQxOTRhZWIzNTQ2NWMu
LjFhOWY1MThjNDM5MTJmMWVmY2I4OTVkNmRlOTZhNWY4OTgwZTU2YmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NRdWFkQ3VsbGVyVGVzdC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1F1YWRDdWxsZXJUZXN0LmNwcApAQCAtNTUsNyAr
NTUsNyBAQCBwcml2YXRlOgogCiB0eXBlZGVmIENDTGF5ZXJJdGVyYXRvcjxDQ0xheWVySW1wbCwg
VmVjdG9yPENDTGF5ZXJJbXBsKj4sIENDUmVuZGVyU3VyZmFjZSwgQ0NMYXllckl0ZXJhdG9yQWN0
aW9uczo6RnJvbnRUb0JhY2s+IENDTGF5ZXJJdGVyYXRvclR5cGU7CiAKLXN0YXRpYyBQYXNzT3du
UHRyPENDVGlsZWRMYXllckltcGw+IG1ha2VMYXllcihDQ1RpbGVkTGF5ZXJJbXBsKiBwYXJlbnQs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJhbnNmb3JtLCBjb25zdCBJbnRSZWN0
JiBsYXllclJlY3QsIGZsb2F0IG9wYWNpdHksIGJvb2wgb3BhcXVlLCBjb25zdCBJbnRSZWN0JiBs
YXllck9wYXF1ZVJlY3QsIFZlY3RvcjxDQ0xheWVySW1wbCo+JiBzdXJmYWNlTGF5ZXJMaXN0KQor
c3RhdGljIFBhc3NPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gbWFrZUxheWVyKENDVGlsZWRMYXll
ckltcGwqIHBhcmVudCwgY29uc3QgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJh
d1RyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0LCBmbG9hdCBvcGFjaXR5LCBib29s
IG9wYXF1ZSwgY29uc3QgSW50UmVjdCYgbGF5ZXJPcGFxdWVSZWN0LCBWZWN0b3I8Q0NMYXllcklt
cGwqPiYgc3VyZmFjZUxheWVyTGlzdCkKIHsKICAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4g
bGF5ZXIgPSBDQ1RpbGVkTGF5ZXJJbXBsOjpjcmVhdGUoMCk7CiAgICAgT3duUHRyPENDTGF5ZXJU
aWxpbmdEYXRhPiB0aWxlciA9IENDTGF5ZXJUaWxpbmdEYXRhOjpjcmVhdGUoSW50U2l6ZSgxMDAs
IDEwMCksIENDTGF5ZXJUaWxpbmdEYXRhOjpOb0JvcmRlclRleGVscyk7CkBAIC0xMDUsNyArMTA1
LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkTGlzdCYgcXVhZExpc3QsIFZlY3Rv
cjxPd25QdHI8Q0NTaGFyZWRRdWFkU3RhdGU+ID4KICAgICBDQ1F1YWRMaXN0IHF1YWRMaXN0OyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIFZlY3RvcjxPd25QdHI8Q0NTaGFy
ZWRRdWFkU3RhdGU+ID4gc2hhcmVkU3RhdGVMaXN0OyBcCiAgICAgVmVjdG9yPENDTGF5ZXJJbXBs
Kj4gcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsgICAgICAgIFwKLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBjaGlsZFRyYW5zZm9ybTsgICAgICAgICAgICAgICAgXAorICAgIFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXggY2hpbGRUcmFuc2Zvcm07ICAgICAgICAgICAgICAgIFwKICAgICBJ
bnRTaXplIHJvb3RTaXplID0gSW50U2l6ZSgzMDAsIDMwMCk7ICAgICAgICAgICAgICAgXAogICAg
IEludFJlY3Qgcm9vdFJlY3QgPSBJbnRSZWN0KEludFBvaW50KCksIHJvb3RTaXplKTsgICBcCiAg
ICAgSW50U2l6ZSBjaGlsZFNpemUgPSBJbnRTaXplKDIwMCwgMjAwKTsgICAgICAgICAgICAgIFwK
QEAgLTExNSw4ICsxMTUsOCBAQCBURVNUKENDUXVhZEN1bGxlclRlc3QsIHZlcmlmeU5vQ3VsbGlu
ZykKIHsKICAgICBERUNMQVJFX0FORF9JTklUSUFMSVpFX1RFU1RfUVVBRFMKIAotICAgIE93blB0
cjxDQ1RpbGVkTGF5ZXJJbXBsPiByb290TGF5ZXIgPSBtYWtlTGF5ZXIoMCwgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgcm9vdFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKLSAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gY2hpbGRMYXllciA9IG1h
a2VMYXllcihyb290TGF5ZXIuZ2V0KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVj
dCwgMS4wLCBmYWxzZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBP
d25QdHI8Q0NUaWxlZExheWVySW1wbD4gcm9vdExheWVyID0gbWFrZUxheWVyKDAsIFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgp
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4g
Y2hpbGRMYXllciA9IG1ha2VMYXllcihyb290TGF5ZXIuZ2V0KCksIFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCAxLjAsIGZhbHNlLCBJbnRSZWN0KCksIHJlbmRl
clN1cmZhY2VMYXllckxpc3QpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXJJbXBsIG9jY2x1
c2lvblRyYWNrZXIoSW50UmVjdCgtMTAwLCAtMTAwLCAxMDAwLCAxMDAwKSk7CiAgICAgQ0NMYXll
ckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKIApAQCAtMTMyLDggKzEzMiw4IEBAIFRFU1QoQ0NRdWFkQ3VsbGVyVGVz
dCwgdmVyaWZ5Q3VsbENoaWxkTGluZXNVcFRvcExlZnQpCiB7CiAgICAgREVDTEFSRV9BTkRfSU5J
VElBTElaRV9URVNUX1FVQURTCiAKLSAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gcm9vdExh
eWVyID0gbWFrZUxheWVyKDAsIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RSZWN0LCAxLjAs
IHRydWUsIEludFJlY3QoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0gICAgT3duUHRyPEND
VGlsZWRMYXllckltcGw+IGNoaWxkTGF5ZXIgPSBtYWtlTGF5ZXIocm9vdExheWVyLmdldCgpLCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgpLCBy
ZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gcm9v
dExheWVyID0gbWFrZUxheWVyKDAsIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwg
cm9vdFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsK
KyAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gY2hpbGRMYXllciA9IG1ha2VMYXllcihyb290
TGF5ZXIuZ2V0KCksIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0
LCAxLjAsIHRydWUsIEludFJlY3QoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgVGVz
dENDT2NjbHVzaW9uVHJhY2tlckltcGwgb2NjbHVzaW9uVHJhY2tlcihJbnRSZWN0KC0xMDAsIC0x
MDAsIDEwMDAsIDEwMDApKTsKICAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0
ZXJhdG9yVHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogCkBAIC0xNDksNyAr
MTQ5LDcgQEAgVEVTVChDQ1F1YWRDdWxsZXJUZXN0LCB2ZXJpZnlDdWxsV2hlbkNoaWxkT3BhY2l0
eU5vdE9uZSkKIHsKICAgICBERUNMQVJFX0FORF9JTklUSUFMSVpFX1RFU1RfUVVBRFMKIAotICAg
IE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiByb290TGF5ZXIgPSBtYWtlTGF5ZXIoMCwgVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIDEsIHRydWUsIEludFJlY3QoKSwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7CisgICAgT3duUHRyPENDVGlsZWRMYXllckltcGw+IHJvb3RMYXllciA9
IG1ha2VMYXllcigwLCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RSZWN0
LCAxLCB0cnVlLCBJbnRSZWN0KCksIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIE93blB0
cjxDQ1RpbGVkTGF5ZXJJbXBsPiBjaGlsZExheWVyID0gbWFrZUxheWVyKHJvb3RMYXllci5nZXQo
KSwgY2hpbGRUcmFuc2Zvcm0sIGNoaWxkUmVjdCwgMC45ZiwgdHJ1ZSwgSW50UmVjdCgpLCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VySW1wbCBvY2Ns
dXNpb25UcmFja2VyKEludFJlY3QoLTEwMCwgLTEwMCwgMTAwMCwgMTAwMCkpOwogICAgIENDTGF5
ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCk7CkBAIC0xNjYsNyArMTY2LDcgQEAgVEVTVChDQ1F1YWRDdWxsZXJUZXN0
LCB2ZXJpZnlDdWxsV2hlbkNoaWxkT3BhcXVlRmxhZ0ZhbHNlKQogewogICAgIERFQ0xBUkVfQU5E
X0lOSVRJQUxJWkVfVEVTVF9RVUFEUwogCi0gICAgT3duUHRyPENDVGlsZWRMYXllckltcGw+IHJv
b3RMYXllciA9IG1ha2VMYXllcigwLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwg
MS4wLCB0cnVlLCBJbnRSZWN0KCksIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIE93blB0
cjxDQ1RpbGVkTGF5ZXJJbXBsPiByb290TGF5ZXIgPSBtYWtlTGF5ZXIoMCwgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgMS4wLCB0cnVlLCBJbnRSZWN0KCksIHJl
bmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiBjaGls
ZExheWVyID0gbWFrZUxheWVyKHJvb3RMYXllci5nZXQoKSwgY2hpbGRUcmFuc2Zvcm0sIGNoaWxk
UmVjdCwgMS4wLCBmYWxzZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAg
ICBUZXN0Q0NPY2NsdXNpb25UcmFja2VySW1wbCBvY2NsdXNpb25UcmFja2VyKEludFJlY3QoLTEw
MCwgLTEwMCwgMTAwMCwgMTAwMCkpOwogICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xh
eWVySXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CkBAIC0xODUs
NyArMTg1LDcgQEAgVEVTVChDQ1F1YWRDdWxsZXJUZXN0LCB2ZXJpZnlDdWxsQ2VudGVyVGlsZU9u
bHkpCiAKICAgICBjaGlsZFRyYW5zZm9ybS50cmFuc2xhdGUoNTAsIDUwKTsKIAotICAgIE93blB0
cjxDQ1RpbGVkTGF5ZXJJbXBsPiByb290TGF5ZXIgPSBtYWtlTGF5ZXIoMCwgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgcm9vdFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKKyAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gcm9vdExheWVyID0gbWFr
ZUxheWVyKDAsIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIDEu
MCwgdHJ1ZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBPd25QdHI8
Q0NUaWxlZExheWVySW1wbD4gY2hpbGRMYXllciA9IG1ha2VMYXllcihyb290TGF5ZXIuZ2V0KCks
IGNoaWxkVHJhbnNmb3JtLCBjaGlsZFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgpLCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VySW1wbCBvY2NsdXNp
b25UcmFja2VyKEludFJlY3QoLTEwMCwgLTEwMCwgMTAwMCwgMTAwMCkpOwogICAgIENDTGF5ZXJJ
dGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CkBAIC0yMjIsNyArMjIyLDcgQEAgVEVTVChDQ1F1YWRDdWxsZXJUZXN0LCB2
ZXJpZnlDdWxsQ2VudGVyVGlsZU5vbkludGVncmFsU2l6ZTEpCiAKICAgICAvLyBNYWtlIHRoZSBy
b290IGxheWVyJ3MgcXVhZCBoYXZlIGV4dGVudCAoOTkuMSwgOTkuMSkgLT4gKDIwMC45LCAyMDAu
OSkgdG8gbWFrZQogICAgIC8vIHN1cmUgaXQgZG9lc24ndCBnZXQgY3VsbGVkIGR1ZSB0byB0cmFu
c2Zvcm0gcm91bmRpbmcuCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcm9vdFRyYW5zZm9ybTsK
KyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJvb3RUcmFuc2Zvcm07CiAgICAg
cm9vdFRyYW5zZm9ybS50cmFuc2xhdGUoOTkuMSwgOTkuMSk7CiAgICAgcm9vdFRyYW5zZm9ybS5z
Y2FsZSgxLjAxOCk7CiAKQEAgLTI1MSw3ICsyNTEsNyBAQCBURVNUKENDUXVhZEN1bGxlclRlc3Qs
IHZlcmlmeUN1bGxDZW50ZXJUaWxlTm9uSW50ZWdyYWxTaXplMikKICAgICBjaGlsZFRyYW5zZm9y
bS50cmFuc2xhdGUoMTAwLjEsIDEwMC4xKTsKICAgICBjaGlsZFRyYW5zZm9ybS5zY2FsZSgwLjk4
Mik7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByb290VHJhbnNmb3JtOworICAgIFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcm9vdFRyYW5zZm9ybTsKICAgICByb290VHJhbnNm
b3JtLnRyYW5zbGF0ZSgxMDAsIDEwMCk7CiAKICAgICByb290UmVjdCA9IGNoaWxkUmVjdCA9IElu
dFJlY3QoMCwgMCwgMTAwLCAxMDApOwpAQCAtMjc2LDcgKzI3Niw3IEBAIFRFU1QoQ0NRdWFkQ3Vs
bGVyVGVzdCwgdmVyaWZ5Q3VsbENoaWxkTGluZXNVcEJvdHRvbVJpZ2h0KQogCiAgICAgY2hpbGRU
cmFuc2Zvcm0udHJhbnNsYXRlKDEwMCwgMTAwKTsKIAotICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJ
bXBsPiByb290TGF5ZXIgPSBtYWtlTGF5ZXIoMCwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9v
dFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAg
ICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gcm9vdExheWVyID0gbWFrZUxheWVyKDAsIFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVj
dCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKICAgICBPd25QdHI8Q0NUaWxlZExheWVySW1w
bD4gY2hpbGRMYXllciA9IG1ha2VMYXllcihyb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNmb3Jt
LCBjaGlsZFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VySW1wbCBvY2NsdXNpb25UcmFja2VyKEludFJl
Y3QoLTEwMCwgLTEwMCwgMTAwMCwgMTAwMCkpOwogICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgaXQg
PSBDQ0xheWVySXRlcmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CkBA
IC0yOTUsNyArMjk1LDcgQEAgVEVTVChDQ1F1YWRDdWxsZXJUZXN0LCB2ZXJpZnlDdWxsU3ViUmVn
aW9uKQogCiAgICAgY2hpbGRUcmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA1MCk7CiAKLSAgICBPd25Q
dHI8Q0NUaWxlZExheWVySW1wbD4gcm9vdExheWVyID0gbWFrZUxheWVyKDAsIFRyYW5zZm9ybWF0
aW9uTWF0cml4KCksIHJvb3RSZWN0LCAxLjAsIHRydWUsIEludFJlY3QoKSwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7CisgICAgT3duUHRyPENDVGlsZWRMYXllckltcGw+IHJvb3RMYXllciA9IG1h
a2VMYXllcigwLCBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RSZWN0LCAx
LjAsIHRydWUsIEludFJlY3QoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgSW50UmVj
dCBjaGlsZE9wYXF1ZVJlY3QoY2hpbGRSZWN0LngoKSArIGNoaWxkUmVjdC53aWR0aCgpIC8gNCwg
Y2hpbGRSZWN0LnkoKSArIGNoaWxkUmVjdC5oZWlnaHQoKSAvIDQsIGNoaWxkUmVjdC53aWR0aCgp
IC8gMiwgY2hpbGRSZWN0LmhlaWdodCgpIC8gMik7CiAgICAgT3duUHRyPENDVGlsZWRMYXllcklt
cGw+IGNoaWxkTGF5ZXIgPSBtYWtlTGF5ZXIocm9vdExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9y
bSwgY2hpbGRSZWN0LCAxLjAsIGZhbHNlLCBjaGlsZE9wYXF1ZVJlY3QsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXJJbXBsIG9jY2x1c2lvblRyYWNr
ZXIoSW50UmVjdCgtMTAwLCAtMTAwLCAxMDAwLCAxMDAwKSk7CkBAIC0zMTUsNyArMzE1LDcgQEAg
VEVTVChDQ1F1YWRDdWxsZXJUZXN0LCB2ZXJpZnlDdWxsU3ViUmVnaW9uMikKIAogICAgIGNoaWxk
VHJhbnNmb3JtLnRyYW5zbGF0ZSg1MCwgMTApOwogCi0gICAgT3duUHRyPENDVGlsZWRMYXllcklt
cGw+IHJvb3RMYXllciA9IG1ha2VMYXllcigwLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290
UmVjdCwgMS4wLCB0cnVlLCBJbnRSZWN0KCksIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAg
IE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiByb290TGF5ZXIgPSBtYWtlTGF5ZXIoMCwgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgMS4wLCB0cnVlLCBJbnRSZWN0
KCksIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIEludFJlY3QgY2hpbGRPcGFxdWVSZWN0
KGNoaWxkUmVjdC54KCkgKyBjaGlsZFJlY3Qud2lkdGgoKSAvIDQsIGNoaWxkUmVjdC55KCkgKyBj
aGlsZFJlY3QuaGVpZ2h0KCkgLyA0LCBjaGlsZFJlY3Qud2lkdGgoKSAvIDIsIGNoaWxkUmVjdC5o
ZWlnaHQoKSAqIDMgLyA0KTsKICAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gY2hpbGRMYXll
ciA9IG1ha2VMYXllcihyb290TGF5ZXIuZ2V0KCksIGNoaWxkVHJhbnNmb3JtLCBjaGlsZFJlY3Qs
IDEuMCwgZmFsc2UsIGNoaWxkT3BhcXVlUmVjdCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAg
ICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlckltcGwgb2NjbHVzaW9uVHJhY2tlcihJbnRSZWN0KC0x
MDAsIC0xMDAsIDEwMDAsIDEwMDApKTsKQEAgLTMzNSw3ICszMzUsNyBAQCBURVNUKENDUXVhZEN1
bGxlclRlc3QsIHZlcmlmeUN1bGxTdWJSZWdpb25DaGVja092ZXJjdWxsKQogCiAgICAgY2hpbGRU
cmFuc2Zvcm0udHJhbnNsYXRlKDUwLCA0OSk7CiAKLSAgICBPd25QdHI8Q0NUaWxlZExheWVySW1w
bD4gcm9vdExheWVyID0gbWFrZUxheWVyKDAsIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RS
ZWN0LCAxLjAsIHRydWUsIEludFJlY3QoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CisgICAg
T3duUHRyPENDVGlsZWRMYXllckltcGw+IHJvb3RMYXllciA9IG1ha2VMYXllcigwLCBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RSZWN0LCAxLjAsIHRydWUsIEludFJlY3Qo
KSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgSW50UmVjdCBjaGlsZE9wYXF1ZVJlY3Qo
Y2hpbGRSZWN0LngoKSArIGNoaWxkUmVjdC53aWR0aCgpIC8gNCwgY2hpbGRSZWN0LnkoKSArIGNo
aWxkUmVjdC5oZWlnaHQoKSAvIDQsIGNoaWxkUmVjdC53aWR0aCgpIC8gMiwgY2hpbGRSZWN0Lmhl
aWdodCgpIC8gMik7CiAgICAgT3duUHRyPENDVGlsZWRMYXllckltcGw+IGNoaWxkTGF5ZXIgPSBt
YWtlTGF5ZXIocm9vdExheWVyLmdldCgpLCBjaGlsZFRyYW5zZm9ybSwgY2hpbGRSZWN0LCAxLjAs
IGZhbHNlLCBjaGlsZE9wYXF1ZVJlY3QsIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIFRl
c3RDQ09jY2x1c2lvblRyYWNrZXJJbXBsIG9jY2x1c2lvblRyYWNrZXIoSW50UmVjdCgtMTAwLCAt
MTAwLCAxMDAwLCAxMDAwKSk7CkBAIC0zNTYsNyArMzU2LDcgQEAgVEVTVChDQ1F1YWRDdWxsZXJU
ZXN0LCB2ZXJpZnlOb25BeGlzQWxpZ25lZFF1YWRzRG9udE9jY2x1ZGUpCiAgICAgLy8gVXNlIGEg
c21hbGwgcm90YXRpb24gc28gYXMgdG8gbm90IGRpc3R1cmIgdGhlIGdlb21ldHJ5IHNpZ25pZmlj
YW50bHkuCiAgICAgY2hpbGRUcmFuc2Zvcm0ucm90YXRlKDEpOwogCi0gICAgT3duUHRyPENDVGls
ZWRMYXllckltcGw+IHJvb3RMYXllciA9IG1ha2VMYXllcigwLCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCByb290UmVjdCwgMS4wLCB0cnVlLCBJbnRSZWN0KCksIHJlbmRlclN1cmZhY2VMYXllckxp
c3QpOworICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiByb290TGF5ZXIgPSBtYWtlTGF5ZXIo
MCwgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgMS4wLCB0cnVl
LCBJbnRSZWN0KCksIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIE93blB0cjxDQ1RpbGVk
TGF5ZXJJbXBsPiBjaGlsZExheWVyID0gbWFrZUxheWVyKHJvb3RMYXllci5nZXQoKSwgY2hpbGRU
cmFuc2Zvcm0sIGNoaWxkUmVjdCwgMS4wLCB0cnVlLCBJbnRSZWN0KCksIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpOwogICAgIFRlc3RDQ09jY2x1c2lvblRyYWNrZXJJbXBsIG9jY2x1c2lvblRyYWNr
ZXIoSW50UmVjdCgtMTAwLCAtMTAwLCAxMDAwLCAxMDAwKSk7CiAgICAgQ0NMYXllckl0ZXJhdG9y
VHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKQEAgLTM3OSwxMSArMzc5LDExIEBAIFRFU1QoQ0NRdWFkQ3VsbGVyVGVzdCwgdmVyaWZ5
Tm9uQXhpc0FsaWduZWRRdWFkc1NhZmVseUN1bGxlZCkKICAgICBERUNMQVJFX0FORF9JTklUSUFM
SVpFX1RFU1RfUVVBRFMKIAogICAgIC8vIFVzZSBhIHNtYWxsIHJvdGF0aW9uIHNvIGFzIHRvIG5v
dCBkaXN0dXJiIHRoZSBnZW9tZXRyeSBzaWduaWZpY2FudGx5LgotICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHBhcmVudFRyYW5zZm9ybTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IHBhcmVudFRyYW5zZm9ybTsKICAgICBwYXJlbnRUcmFuc2Zvcm0ucm90YXRlKDEpOwogCiAg
ICAgT3duUHRyPENDVGlsZWRMYXllckltcGw+IHJvb3RMYXllciA9IG1ha2VMYXllcigwLCBwYXJl
bnRUcmFuc2Zvcm0sIHJvb3RSZWN0LCAxLjAsIHRydWUsIEludFJlY3QoKSwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7Ci0gICAgT3duUHRyPENDVGlsZWRMYXllckltcGw+IGNoaWxkTGF5ZXIgPSBt
YWtlTGF5ZXIocm9vdExheWVyLmdldCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJl
Y3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBP
d25QdHI8Q0NUaWxlZExheWVySW1wbD4gY2hpbGRMYXllciA9IG1ha2VMYXllcihyb290TGF5ZXIu
Z2V0KCksIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCAxLjAs
IHRydWUsIEludFJlY3QoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgVGVzdENDT2Nj
bHVzaW9uVHJhY2tlckltcGwgb2NjbHVzaW9uVHJhY2tlcihJbnRSZWN0KC0xMDAsIC0xMDAsIDEw
MDAsIDEwMDApKTsKICAgICBDQ0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJhdG9y
VHlwZTo6YmVnaW4oJnJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogCkBAIC0zOTksOCArMzk5LDgg
QEAgVEVTVChDQ1F1YWRDdWxsZXJUZXN0LCB2ZXJpZnlDdWxsT3V0c2lkZVNjaXNzb3JPdmVyVGls
ZSkKIHsKICAgICBERUNMQVJFX0FORF9JTklUSUFMSVpFX1RFU1RfUVVBRFMKIAotICAgIE93blB0
cjxDQ1RpbGVkTGF5ZXJJbXBsPiByb290TGF5ZXIgPSBtYWtlTGF5ZXIoMCwgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgcm9vdFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KTsKLSAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gY2hpbGRMYXllciA9IG1h
a2VMYXllcihyb290TGF5ZXIuZ2V0KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVj
dCwgMS4wLCB0cnVlLCBJbnRSZWN0KCksIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIE93
blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiByb290TGF5ZXIgPSBtYWtlTGF5ZXIoMCwgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCByb290UmVjdCwgMS4wLCB0cnVlLCBJbnRSZWN0KCks
IHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiBj
aGlsZExheWVyID0gbWFrZUxheWVyKHJvb3RMYXllci5nZXQoKSwgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgpLCByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VySW1wbCBvY2NsdXNp
b25UcmFja2VyKEludFJlY3QoMjAwLCAxMDAsIDEwMCwgMTAwKSk7CiAgICAgQ0NMYXllckl0ZXJh
dG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZyZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0KTsKIApAQCAtNDE2LDggKzQxNiw4IEBAIFRFU1QoQ0NRdWFkQ3VsbGVyVGVzdCwgdmVy
aWZ5Q3VsbE91dHNpZGVTY2lzc29yT3ZlckN1bGxlZFRpbGUpCiB7CiAgICAgREVDTEFSRV9BTkRf
SU5JVElBTElaRV9URVNUX1FVQURTCiAKLSAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gcm9v
dExheWVyID0gbWFrZUxheWVyKDAsIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RSZWN0LCAx
LjAsIHRydWUsIEludFJlY3QoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0gICAgT3duUHRy
PENDVGlsZWRMYXllckltcGw+IGNoaWxkTGF5ZXIgPSBtYWtlTGF5ZXIocm9vdExheWVyLmdldCgp
LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgp
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4g
cm9vdExheWVyID0gbWFrZUxheWVyKDAsIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgo
KSwgcm9vdFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsKKyAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gY2hpbGRMYXllciA9IG1ha2VMYXllcihy
b290TGF5ZXIuZ2V0KCksIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2hpbGRS
ZWN0LCAxLjAsIHRydWUsIEludFJlY3QoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAg
VGVzdENDT2NjbHVzaW9uVHJhY2tlckltcGwgb2NjbHVzaW9uVHJhY2tlcihJbnRSZWN0KDEwMCwg
MTAwLCAxMDAsIDEwMCkpOwogICAgIENDTGF5ZXJJdGVyYXRvclR5cGUgaXQgPSBDQ0xheWVySXRl
cmF0b3JUeXBlOjpiZWdpbigmcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKQEAgLTQzMyw4ICs0
MzMsOCBAQCBURVNUKENDUXVhZEN1bGxlclRlc3QsIHZlcmlmeUN1bGxPdXRzaWRlU2Npc3Nvck92
ZXJQYXJ0aWFsVGlsZXMpCiB7CiAgICAgREVDTEFSRV9BTkRfSU5JVElBTElaRV9URVNUX1FVQURT
CiAKLSAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gcm9vdExheWVyID0gbWFrZUxheWVyKDAs
IFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIHJvb3RSZWN0LCAxLjAsIHRydWUsIEludFJlY3QoKSwg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7Ci0gICAgT3duUHRyPENDVGlsZWRMYXllckltcGw+IGNo
aWxkTGF5ZXIgPSBtYWtlTGF5ZXIocm9vdExheWVyLmdldCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCBjaGlsZFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKKyAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gcm9vdExheWVyID0gbWFrZUxheWVy
KDAsIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIDEuMCwgdHJ1
ZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBPd25QdHI8Q0NUaWxl
ZExheWVySW1wbD4gY2hpbGRMYXllciA9IG1ha2VMYXllcihyb290TGF5ZXIuZ2V0KCksIFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCAxLjAsIHRydWUsIEludFJl
Y3QoKSwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tl
ckltcGwgb2NjbHVzaW9uVHJhY2tlcihJbnRSZWN0KDUwLCA1MCwgMjAwLCAyMDApKTsKICAgICBD
Q0xheWVySXRlcmF0b3JUeXBlIGl0ID0gQ0NMYXllckl0ZXJhdG9yVHlwZTo6YmVnaW4oJnJlbmRl
clN1cmZhY2VMYXllckxpc3QpOwogCkBAIC00NTAsOCArNDUwLDggQEAgVEVTVChDQ1F1YWRDdWxs
ZXJUZXN0LCB2ZXJpZnlDdWxsT3V0c2lkZVNjaXNzb3JPdmVyTm9UaWxlcykKIHsKICAgICBERUNM
QVJFX0FORF9JTklUSUFMSVpFX1RFU1RfUVVBRFMKIAotICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJ
bXBsPiByb290TGF5ZXIgPSBtYWtlTGF5ZXIoMCwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9v
dFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKLSAg
ICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4gY2hpbGRMYXllciA9IG1ha2VMYXllcihyb290TGF5
ZXIuZ2V0KCksIFRyYW5zZm9ybWF0aW9uTWF0cml4KCksIGNoaWxkUmVjdCwgMS4wLCB0cnVlLCBJ
bnRSZWN0KCksIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOworICAgIE93blB0cjxDQ1RpbGVkTGF5
ZXJJbXBsPiByb290TGF5ZXIgPSBtYWtlTGF5ZXIoMCwgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgpLCByb290UmVjdCwgMS4wLCB0cnVlLCBJbnRSZWN0KCksIHJlbmRlclN1cmZhY2VM
YXllckxpc3QpOworICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsPiBjaGlsZExheWVyID0gbWFr
ZUxheWVyKHJvb3RMYXllci5nZXQoKSwgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgp
LCBjaGlsZFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KTsKICAgICBUZXN0Q0NPY2NsdXNpb25UcmFja2VySW1wbCBvY2NsdXNpb25UcmFja2VyKEludFJl
Y3QoNTAwLCA1MDAsIDEwMCwgMTAwKSk7CiAgICAgQ0NMYXllckl0ZXJhdG9yVHlwZSBpdCA9IEND
TGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIApAQCAt
NDY3LDggKzQ2Nyw4IEBAIFRFU1QoQ0NRdWFkQ3VsbGVyVGVzdCwgdmVyaWZ5V2l0aG91dE1ldHJp
Y3MpCiB7CiAgICAgREVDTEFSRV9BTkRfSU5JVElBTElaRV9URVNUX1FVQURTCiAKLSAgICBPd25Q
dHI8Q0NUaWxlZExheWVySW1wbD4gcm9vdExheWVyID0gbWFrZUxheWVyKDAsIFRyYW5zZm9ybWF0
aW9uTWF0cml4KCksIHJvb3RSZWN0LCAxLjAsIHRydWUsIEludFJlY3QoKSwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCk7Ci0gICAgT3duUHRyPENDVGlsZWRMYXllckltcGw+IGNoaWxkTGF5ZXIgPSBt
YWtlTGF5ZXIocm9vdExheWVyLmdldCgpLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCBjaGlsZFJl
Y3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgpLCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBP
d25QdHI8Q0NUaWxlZExheWVySW1wbD4gcm9vdExheWVyID0gbWFrZUxheWVyKDAsIFdlYktpdDo6
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgcm9vdFJlY3QsIDEuMCwgdHJ1ZSwgSW50UmVjdCgp
LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKKyAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbD4g
Y2hpbGRMYXllciA9IG1ha2VMYXllcihyb290TGF5ZXIuZ2V0KCksIFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgoKSwgY2hpbGRSZWN0LCAxLjAsIHRydWUsIEludFJlY3QoKSwgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCk7CiAgICAgVGVzdENDT2NjbHVzaW9uVHJhY2tlckltcGwgb2NjbHVz
aW9uVHJhY2tlcihJbnRSZWN0KDUwLCA1MCwgMjAwLCAyMDApLCBmYWxzZSk7CiAgICAgQ0NMYXll
ckl0ZXJhdG9yVHlwZSBpdCA9IENDTGF5ZXJJdGVyYXRvclR5cGU6OmJlZ2luKCZyZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ1JlbmRlclN1cmZhY2VUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NSZW5kZXJTdXJmYWNlVGVzdC5jcHAKaW5kZXggN2RhYzAwNWQyNGNhZmFjYzI3MWI4NmFkNWZk
ZTM4NTY2ZDBiZDg3NC4uOGVlYTJhYjM1MTkwOGYzY2VlOWUxNzIyYjAyN2JjMTJlYzBmNGE0NiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ1JlbmRlclN1cmZhY2VU
ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDUmVuZGVyU3VyZmFj
ZVRlc3QuY3BwCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZh
Y2UuaCIKIAotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAicGxh
dGZvcm0vV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1w
bC5oIgogI2luY2x1ZGUgImNjL0NDU2hhcmVkUXVhZFN0YXRlLmgiCiAjaW5jbHVkZSAiY2MvQ0NT
aW5nbGVUaHJlYWRQcm94eS5oIgpAQCAtNzcsNyArNzcsNyBAQCBURVNUKENDUmVuZGVyU3VyZmFj
ZVRlc3QsIHZlcmlmeVN1cmZhY2VDaGFuZ2VzQXJlVHJhY2tlZFByb3Blcmx5KQogICAgIEVYRUNV
VEVfQU5EX1ZFUklGWV9TVVJGQUNFX0RJRF9OT1RfQ0hBTkdFKHJlbmRlclN1cmZhY2UtPnNldENv
bnRlbnRSZWN0KHRlc3RSZWN0KSk7CiAKICAgICBPd25QdHI8Q0NMYXllckltcGw+IGR1bW15TWFz
ayA9IENDTGF5ZXJJbXBsOjpjcmVhdGUoMSk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHVt
bXlNYXRyaXg7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkdW1teU1hdHJp
eDsKICAgICBkdW1teU1hdHJpeC50cmFuc2xhdGUoMS4wLCAyLjApOwogCiAgICAgLy8gVGhlIHJl
c3Qgb2YgdGhlIHN1cmZhY2UgcHJvcGVydGllcyBhcmUgZWl0aGVyIGludGVybmFsIGFuZCBzaG91
bGQgbm90IGNhdXNlIGNoYW5nZSwKQEAgLTEwMyw4ICsxMDMsOCBAQCBURVNUKENDUmVuZGVyU3Vy
ZmFjZVRlc3QsIHNhbml0eUNoZWNrU3VyZmFjZUNyZWF0ZXNDb3JyZWN0U2hhcmVkUXVhZFN0YXRl
KQogCiAgICAgSW50UmVjdCBjb250ZW50UmVjdCA9IEludFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
SW50U2l6ZSg1MCwgNTApKTsKICAgICBJbnRSZWN0IGNsaXBSZWN0ID0gSW50UmVjdChJbnRQb2lu
dCg1LCA1KSwgSW50U2l6ZSg0MCwgNDApKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkcmF3
OwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG9yaWdpbjsKKyAgICBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IGRyYXc7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBvcmlnaW47CiAKICAgICBkcmF3LnRyYW5zbGF0ZSgzMCwgNDApOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Zsb2F0UXVhZFRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9GbG9hdFF1YWRUZXN0LmNwcAppbmRleCA2YzcwOTFjYTQ5ZDY2
MzU4MmVjNGQzM2E0MmZiZTNlM2I5M2NjOTc3Li5iNTI3Y2IzODM1MmM3M2E3ZWRmNTE3YmVjZmUz
ZTUyOTRiYjk4NmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0Zs
b2F0UXVhZFRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvRmxvYXRR
dWFkVGVzdC5jcHAKQEAgLTI3LDcgKzI3LDcgQEAKIAogI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgog
Ci0jaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9X
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIApA
QCAtMzgsNyArMzgsNyBAQCBuYW1lc3BhY2UgewogVEVTVChGbG9hdFF1YWRUZXN0LCBJc1JlY3Rp
bGluZWFyVGVzdCkKIHsKICAgICBjb25zdCBpbnQgbnVtUmVjdGlsaW5lYXIgPSA4OwotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHJlY3RpbGluZWFyVHJhbnNbbnVtUmVjdGlsaW5lYXJdOworICAg
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVjdGlsaW5lYXJUcmFuc1tudW1SZWN0
aWxpbmVhcl07CiAgICAgcmVjdGlsaW5lYXJUcmFuc1sxXS5yb3RhdGUoOTApOwogICAgIHJlY3Rp
bGluZWFyVHJhbnNbMl0ucm90YXRlKDE4MCk7CiAgICAgcmVjdGlsaW5lYXJUcmFuc1szXS5yb3Rh
dGUoMjcwKTsKQEAgLTU1LDcgKzU1LDcgQEAgVEVTVChGbG9hdFF1YWRUZXN0LCBJc1JlY3RpbGlu
ZWFyVGVzdCkKICAgICB9CiAKICAgICBjb25zdCBpbnQgbnVtTm9uUmVjdGlsaW5lYXIgPSAxMDsK
LSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBub25SZWN0aWxpbmVhclRyYW5zW251bU5vblJlY3Rp
bGluZWFyXTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG5vblJlY3RpbGlu
ZWFyVHJhbnNbbnVtTm9uUmVjdGlsaW5lYXJdOwogICAgIG5vblJlY3RpbGluZWFyVHJhbnNbMF0u
cm90YXRlKDM1OS45OTkpOwogICAgIG5vblJlY3RpbGluZWFyVHJhbnNbMV0ucm90YXRlKDAuMDAw
MDAwMSk7CiAgICAgbm9uUmVjdGlsaW5lYXJUcmFuc1syXS5yb3RhdGUoODkuOTk5OTk5KTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAK
aW5kZXggYTkzZWFjN2ZhZTM5NDc1OWVhYTY0MTA3ZWVlNTBhZDYxYWM5YWYxOS4uZmU1OWNmYzg0
MDI1NDI3ODQwN2JjOGY5ODU0OGY4OTU4Njg1ZWUyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKQEAgLTQ5Niw4ICs0OTYsOCBA
QCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJvcGVydHlDaGFuZ2VDYXVzZXNDb3Jy
ZWN0QmVoYXZpb3IpCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVI
QVZJT1IoMCwgdGVzdExheWVyLT5zZXREcmF3T3BhY2l0eSgwLjVmKSk7CiAgICAgRVhFQ1VURV9B
TkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMCwgdGVzdExheWVyLT5zZXRDbGlw
UmVjdChJbnRSZWN0KDMsIDMsIDgsIDgpKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9O
RUVEU19DT01NSVRfQkVIQVZJT1IoMCwgdGVzdExheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNl
KDApKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigw
LCB0ZXN0TGF5ZXItPnNldERyYXdUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpOwot
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RM
YXllci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoKSkpOwor
ICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDAsIHRlc3RM
YXllci0+c2V0RHJhd1RyYW5zZm9ybShXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KCkp
KTsKKyAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigwLCB0
ZXN0TGF5ZXItPnNldFNjcmVlblNwYWNlVHJhbnNmb3JtKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JF
SEFWSU9SKDAsIHRlc3RMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KDQsIDUs
IDYsIDcpKSk7CiAgICAgRVhQRUNUX0ZBTFNFKHRlc3RMYXllci0+bmVlZHNEaXNwbGF5KCkpOwog
CkBAIC01MTIsMTMgKzUxMiwxMyBAQCBURVNUX0YoTGF5ZXJDaHJvbWl1bVRlc3QsIGNoZWNrUHJv
cGVydHlDaGFuZ2VDYXVzZXNDb3JyZWN0QmVoYXZpb3IpCiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZ
X1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRPcGFxdWUodHJ1ZSkp
OwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRl
c3RMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQb2ludCg0LjBmLCA5LjBmKSkpOwogICAgIEVYRUNV
VEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0
UmVwbGljYUxheWVyKGR1bW15TGF5ZXIuZ2V0KCkpKTsKLSAgICBFWEVDVVRFX0FORF9WRVJJRllf
U0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldFN1YmxheWVyVHJhbnNm
b3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KDAsIDAsIDAsIDAsIDAsIDApKSk7CisgICAgRVhFQ1VU
RV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXRT
dWJsYXllclRyYW5zZm9ybShXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KDAsIDAsIDAs
IDAsIDAsIDApKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVI
QVZJT1IoMSwgdGVzdExheWVyLT5zZXRTY3JvbGxhYmxlKHRydWUpKTsKICAgICBFWEVDVVRFX0FO
RF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldFNob3Vs
ZFNjcm9sbE9uTWFpblRocmVhZCh0cnVlKSk7CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9O
RUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVzdExheWVyLT5zZXROb25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbihSZWdpb24oSW50UmVjdCgxLCAxLCAyLCAyKSkpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJ
RllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldEhhdmVXaGVlbEV2
ZW50SGFuZGxlcnModHJ1ZSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09N
TUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0U2Nyb2xsUG9zaXRpb24oSW50UG9pbnQoMTAs
IDEwKSkpOwotICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9S
KDEsIHRlc3RMYXllci0+c2V0VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KDAsIDAsIDAs
IDAsIDAsIDApKSk7CisgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVI
QVZJT1IoMSwgdGVzdExheWVyLT5zZXRUcmFuc2Zvcm0oV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCgwLCAwLCAwLCAwLCAwLCAwKSkpOwogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRf
TkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0RG91YmxlU2lkZWQoZmFsc2Up
KTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0
ZXN0TGF5ZXItPnNldERlYnVnTmFtZSgiVGVzdCBMYXllciIpKTsKICAgICBFWEVDVVRFX0FORF9W
RVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldERyYXdDaGVj
a2VyYm9hcmRGb3JNaXNzaW5nVGlsZXMoIXRlc3RMYXllci0+ZHJhd0NoZWNrZXJib2FyZEZvck1p
c3NpbmdUaWxlcygpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L0xpbmtIaWdobGlnaHRUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGlu
a0hpZ2hsaWdodFRlc3QuY3BwCmluZGV4IGVkY2ZkNGE2Mzc4MTA4NjVlNzVjNDFhYjM5M2U3MTQ3
OTM2NDIxNGYuLmFlOWQxYzUyZDUzMTE2ZjBjNzMyNDBlMTU0NjJiY2YzNmM4YjNmOTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGlua0hpZ2hsaWdodFRlc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvTGlua0hpZ2hsaWdodFRlc3QuY3Bw
CkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsaWVudC5oIgogI2lu
Y2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSAiVHJhbnNmb3Jt
YXRpb25NYXRyaXguaCIKKyNpbmNsdWRlICJwbGF0Zm9ybS9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KIApAQCAtNjMsMTEgKzYzLDExIEBAIFRFU1QoTGlua0hpZ2hsaWdodFRlc3QsIHZlcmlmeUxp
bmtIaWdobGlnaHRMYXllcikKICAgICBFWFBFQ1RfVFJVRShjb250ZW50TGF5ZXItPnRyYW5zZm9y
bSgpLmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkpOwogICAgIEVYUEVDVF9UUlVFKGNvbnRlbnRM
YXllci0+dHJhbnNmb3JtKCkuaXNJbnRlZ2VyVHJhbnNsYXRpb24oKSk7CiAKLSAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6RGVjb21wb3NlZFR5cGUgZGVjb21wb3NpdGlvbjsKLSAgICBFWFBFQ1Rf
VFJVRShjb250ZW50TGF5ZXItPnRyYW5zZm9ybSgpLmRlY29tcG9zZShkZWNvbXBvc2l0aW9uKSk7
CisgICAgLy9XZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkVHlwZSBk
ZWNvbXBvc2l0aW9uOworICAgIC8vRVhQRUNUX1RSVUUoY29udGVudExheWVyLT50cmFuc2Zvcm0o
KS5kZWNvbXBvc2UoZGVjb21wb3NpdGlvbikpOwogCiAgICAgRmxvYXRQb2ludCBleHBlY3RlZFRy
YW5zbGF0aW9uKHBhdGhCb3VuZGluZ1JlY3QueCgpICsgcGF0aEJvdW5kaW5nUmVjdC53aWR0aCgp
IC8gMiwgcGF0aEJvdW5kaW5nUmVjdC55KCkgKyBwYXRoQm91bmRpbmdSZWN0LmhlaWdodCgpIC8g
Mik7Ci0gICAgRVhQRUNUX0VRKEZsb2F0UG9pbnQoZGVjb21wb3NpdGlvbi50cmFuc2xhdGVYLCBk
ZWNvbXBvc2l0aW9uLnRyYW5zbGF0ZVkpLCBleHBlY3RlZFRyYW5zbGF0aW9uKTsKKyAgICBFWFBF
Q1RfRVEoRmxvYXRQb2ludChjb250ZW50TGF5ZXItPnRyYW5zZm9ybSgpLm00MSgpLCBjb250ZW50
TGF5ZXItPnRyYW5zZm9ybSgpLm00MigpKSwgZXhwZWN0ZWRUcmFuc2xhdGlvbik7CiB9CiAKIFRF
U1QoTGlua0hpZ2hsaWdodFRlc3QsIHZlcmlmeUdyYXBoaWNzTGF5ZXJDaHJvbWl1bUVtYmVkZGlu
ZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNo
cm9taXVtVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwCmluZGV4IGM5MTI1YTg1MjliMTExOGQ4ZmFmMzI1MmQyMWQ3MzAzYjI5
OTM2MjIuLjkxMDIzOTFiNjhlODdmMzJhMDQ2YzcxOTVhOTFjYjlmMWQwNzU0YjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1U
ZXN0LmNwcApAQCAtMTA5LDcgKzEwOSw3IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwg
cHVzaE9jY2x1ZGVkRGlydHlUaWxlcykKIAogICAgIC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEw
MCwgc28gdGhpcyBpbnZhbGlkYXRlcyBhbmQgdGhlbiBwYWludHMgdHdvIHRpbGVzLgogICAgIGxh
eWVyLT5zZXRCb3VuZHMoSW50U2l6ZSgxMDAsIDIwMCkpOwotICAgIGxheWVyLT5zZXREcmF3VHJh
bnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KDEsIDAsIDAsIDEsIGxheWVyLT5ib3VuZHMoKS53
aWR0aCgpIC8gMi4wLCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkgLyAyLjApKTsKKyAgICBsYXll
ci0+c2V0RHJhd1RyYW5zZm9ybShXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KDEsIDAs
IDAsIDEsIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpIC8gMi4wLCBsYXllci0+Ym91bmRzKCkuaGVp
Z2h0KCkgLyAyLjApKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJbnRSZWN0KDAs
IDAsIDEwMCwgMjAwKSk7CiAgICAgbGF5ZXItPmludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwg
MTAwLCAyMDApKTsKICAgICBsYXllci0+dXBkYXRlTGF5ZXJSZWN0KHVwZGF0ZXIsIEludFJlY3Qo
MCwgMCwgMTAwLCAyMDApLCAmb2NjbHVkZWQpOwpAQCAtMzI3LDcgKzMyNyw3IEBAIFRFU1QoVGls
ZWRMYXllckNocm9taXVtVGVzdCwgcHVzaElkbGVQYWludGVkT2NjbHVkZWRUaWxlcykKICAgICBv
Y2NsdWRlZC5zZXRPY2NsdXNpb24oSW50UmVjdCgwLCAwLCAxMDAsIDEwMCkpOwogCiAgICAgbGF5
ZXItPnNldEJvdW5kcyhJbnRTaXplKDEwMCwgMTAwKSk7Ci0gICAgbGF5ZXItPnNldERyYXdUcmFu
c2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoMSwgMCwgMCwgMSwgbGF5ZXItPmJvdW5kcygpLndp
ZHRoKCkgLyAyLjAsIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSAvIDIuMCkpOworICAgIGxheWVy
LT5zZXREcmF3VHJhbnNmb3JtKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoMSwgMCwg
MCwgMSwgbGF5ZXItPmJvdW5kcygpLndpZHRoKCkgLyAyLjAsIGxheWVyLT5ib3VuZHMoKS5oZWln
aHQoKSAvIDIuMCkpOwogICAgIGxheWVyLT5zZXRWaXNpYmxlTGF5ZXJSZWN0KEludFJlY3QoMCwg
MCwgMTAwLCAxMDApKTsKICAgICBsYXllci0+aW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCAx
MDAsIDEwMCkpOwogICAgIGxheWVyLT51cGRhdGVMYXllclJlY3QodXBkYXRlciwgSW50UmVjdCgw
LCAwLCAxMDAsIDEwMCksICZvY2NsdWRlZCk7CkBAIC0xMDE4LDcgKzEwMTgsNyBAQCBURVNUKFRp
bGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb24pCiAgICAgLy8g
VGhlIHRpbGUgc2l6ZSBpcyAxMDB4MTAwLgogCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXpl
KDYwMCwgNjAwKSk7Ci0gICAgbGF5ZXItPnNldERyYXdUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25N
YXRyaXgoMSwgMCwgMCwgMSwgbGF5ZXItPmJvdW5kcygpLndpZHRoKCkgLyAyLjAsIGxheWVyLT5i
b3VuZHMoKS5oZWlnaHQoKSAvIDIuMCkpOworICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtKFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoMSwgMCwgMCwgMSwgbGF5ZXItPmJvdW5kcygp
LndpZHRoKCkgLyAyLjAsIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSAvIDIuMCkpOwogCiAgICAg
b2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMjAwLCAyMDAsIDMwMCwgMTAwKSk7CiAgICAg
bGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+Ym91
bmRzKCkpKTsKQEAgLTEwNjMsNyArMTA2Myw3IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFZpc2libGl0eUNvbnN0cmFpbnRzKQogICAg
IC8vIFRoZSB0aWxlIHNpemUgaXMgMTAweDEwMC4KIAogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50
U2l6ZSg2MDAsIDYwMCkpOwotICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtKFRyYW5zZm9ybWF0
aW9uTWF0cml4KDEsIDAsIDAsIDEsIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpIC8gMi4wLCBsYXll
ci0+Ym91bmRzKCkuaGVpZ2h0KCkgLyAyLjApKTsKKyAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9y
bShXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KDEsIDAsIDAsIDEsIGxheWVyLT5ib3Vu
ZHMoKS53aWR0aCgpIC8gMi4wLCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkgLyAyLjApKTsKIAog
ICAgIC8vIFRoZSBwYXJ0aWFsbHkgb2NjbHVkZWQgdGlsZXMgKGJ5IHRoZSAxNTAgb2NjbHVzaW9u
IGhlaWdodCkgYXJlIHZpc2libGUgYmV5b25kIHRoZSBvY2NsdXNpb24sIHNvIG5vdCBjdWxsZWQu
CiAgICAgb2NjbHVkZWQuc2V0T2NjbHVzaW9uKEludFJlY3QoMjAwLCAyMDAsIDMwMCwgMTUwKSk7
CkBAIC0xMTE0LDcgKzExMTQsNyBAQCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVz
Tm90UGFpbnRlZFdpdGhvdXRJbnZhbGlkYXRpb24pCiAgICAgLy8gVGhlIHRpbGUgc2l6ZSBpcyAx
MDB4MTAwLgogCiAgICAgbGF5ZXItPnNldEJvdW5kcyhJbnRTaXplKDYwMCwgNjAwKSk7Ci0gICAg
bGF5ZXItPnNldERyYXdUcmFuc2Zvcm0oVHJhbnNmb3JtYXRpb25NYXRyaXgoMSwgMCwgMCwgMSwg
bGF5ZXItPmJvdW5kcygpLndpZHRoKCkgLyAyLjAsIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSAv
IDIuMCkpOworICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtKFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgoMSwgMCwgMCwgMSwgbGF5ZXItPmJvdW5kcygpLndpZHRoKCkgLyAyLjAsIGxh
eWVyLT5ib3VuZHMoKS5oZWlnaHQoKSAvIDIuMCkpOwogCiAgICAgb2NjbHVkZWQuc2V0T2NjbHVz
aW9uKEludFJlY3QoMjAwLCAyMDAsIDMwMCwgMTAwKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVM
YXllclJlY3QoSW50UmVjdCgwLCAwLCA2MDAsIDYwMCkpOwpAQCAtMTE0OSwxMCArMTE0OSwxMCBA
QCBURVNUKFRpbGVkTGF5ZXJDaHJvbWl1bVRlc3QsIHRpbGVzUGFpbnRlZFdpdGhPY2NsdXNpb25B
bmRUcmFuc2Zvcm1zKQogICAgIC8vIFRoaXMgbWFrZXMgc3VyZSB0aGUgcGFpbnRpbmcgd29ya3Mg
d2hlbiB0aGUgb2NjbHVkZWQgcmVnaW9uIChpbiBzY3JlZW4gc3BhY2UpCiAgICAgLy8gaXMgdHJh
bnNmb3JtZWQgZGlmZmVyZW50bHkgdGhhbiB0aGUgbGF5ZXIuCiAgICAgbGF5ZXItPnNldEJvdW5k
cyhJbnRTaXplKDYwMCwgNjAwKSk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuVHJh
bnNmb3JtOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggc2NyZWVuVHJhbnNm
b3JtOwogICAgIHNjcmVlblRyYW5zZm9ybS5zY2FsZSgwLjUpOwogICAgIGxheWVyLT5zZXRTY3Jl
ZW5TcGFjZVRyYW5zZm9ybShzY3JlZW5UcmFuc2Zvcm0pOwotICAgIGxheWVyLT5zZXREcmF3VHJh
bnNmb3JtKHNjcmVlblRyYW5zZm9ybSAqIFRyYW5zZm9ybWF0aW9uTWF0cml4KDEsIDAsIDAsIDEs
IGxheWVyLT5ib3VuZHMoKS53aWR0aCgpIC8gMi4wLCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkg
LyAyLjApKTsKKyAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShzY3JlZW5UcmFuc2Zvcm0gKiBX
ZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KDEsIDAsIDAsIDEsIGxheWVyLT5ib3VuZHMo
KS53aWR0aCgpIC8gMi4wLCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkgLyAyLjApKTsKIAogICAg
IG9jY2x1ZGVkLnNldE9jY2x1c2lvbihJbnRSZWN0KDEwMCwgMTAwLCAxNTAsIDUwKSk7CiAgICAg
bGF5ZXItPnNldFZpc2libGVMYXllclJlY3QoSW50UmVjdChJbnRQb2ludCgpLCBsYXllci0+Ym91
bmRzKCkpKTsKQEAgLTExNzksNyArMTE3OSw3IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVz
dCwgdGlsZXNQYWludGVkV2l0aE9jY2x1c2lvbkFuZFNjYWxpbmcpCiAgICAgLy8gcGl4ZWxzLCB3
aGljaCBtZWFucyBub25lIHNob3VsZCBiZSBvY2NsdWRlZC4KICAgICBsYXllci0+c2V0Q29udGVu
dHNTY2FsZSgwLjUpOwogICAgIGxheWVyLT5zZXRCb3VuZHMoSW50U2l6ZSg2MDAsIDYwMCkpOwot
ICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KDEsIDAsIDAs
IDEsIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpIC8gMi4wLCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0
KCkgLyAyLjApKTsKKyAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4KDEsIDAsIDAsIDEsIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpIC8gMi4w
LCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkgLyAyLjApKTsKIAogICAgIG9jY2x1ZGVkLnNldE9j
Y2x1c2lvbihJbnRSZWN0KDIwMCwgMjAwLCAzMDAsIDEwMCkpOwogICAgIGxheWVyLT5zZXRWaXNp
YmxlTGF5ZXJSZWN0KEludFJlY3QoSW50UG9pbnQoKSwgbGF5ZXItPmJvdW5kcygpKSk7CkBAIC0x
MjEyLDEwICsxMjEyLDEwIEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgdGlsZXNQYWlu
dGVkV2l0aE9jY2x1c2lvbkFuZFNjYWxpbmcpCiAgICAgbGF5ZXItPmZha2VMYXllclRleHR1cmVV
cGRhdGVyKCktPmNsZWFyUHJlcGFyZVJlY3RDb3VudCgpOwogCiAgICAgLy8gVGhpcyBtYWtlcyBz
dXJlIGNvbnRlbnQgc2NhbGluZyBhbmQgdHJhbnNmb3JtcyB3b3JrIHRvZ2V0aGVyLgotICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IHNjcmVlblRyYW5zZm9ybTsKKyAgICBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4IHNjcmVlblRyYW5zZm9ybTsKICAgICBzY3JlZW5UcmFuc2Zvcm0uc2Nh
bGUoMC41KTsKICAgICBsYXllci0+c2V0U2NyZWVuU3BhY2VUcmFuc2Zvcm0oc2NyZWVuVHJhbnNm
b3JtKTsKLSAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShzY3JlZW5UcmFuc2Zvcm0gKiBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgxLCAwLCAwLCAxLCBsYXllci0+Ym91bmRzKCkud2lkdGgoKSAvIDIu
MCwgbGF5ZXItPmJvdW5kcygpLmhlaWdodCgpIC8gMi4wKSk7CisgICAgbGF5ZXItPnNldERyYXdU
cmFuc2Zvcm0oc2NyZWVuVHJhbnNmb3JtICogV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgxLCAwLCAwLCAxLCBsYXllci0+Ym91bmRzKCkud2lkdGgoKSAvIDIuMCwgbGF5ZXItPmJvdW5k
cygpLmhlaWdodCgpIC8gMi4wKSk7CiAKICAgICBvY2NsdWRlZC5zZXRPY2NsdXNpb24oSW50UmVj
dCgxMDAsIDEwMCwgMTUwLCAxMDApKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdChJ
bnRSZWN0KEludFBvaW50KCksIGxheWVyLT5ib3VuZHMoKSkpOwpAQCAtMTI0NCw3ICsxMjQ0LDcg
QEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lv
bikKICAgICBJbnRSZWN0IHZpc2libGVCb3VuZHMgPSBJbnRSZWN0KDAsIDAsIDEwMCwgMTUwKTsK
IAogICAgIGxheWVyLT5zZXRCb3VuZHMoY29udGVudEJvdW5kcy5zaXplKCkpOwotICAgIGxheWVy
LT5zZXREcmF3VHJhbnNmb3JtKFRyYW5zZm9ybWF0aW9uTWF0cml4KDEsIDAsIDAsIDEsIGxheWVy
LT5ib3VuZHMoKS53aWR0aCgpIC8gMi4wLCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkgLyAyLjAp
KTsKKyAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4KDEsIDAsIDAsIDEsIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpIC8gMi4wLCBsYXllci0+
Ym91bmRzKCkuaGVpZ2h0KCkgLyAyLjApKTsKICAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVj
dCh2aXNpYmxlQm91bmRzKTsKICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkoMSk7CiAKQEAgLTEz
MzgsNyArMTMzOCw3IEBAIFRFU1QoVGlsZWRMYXllckNocm9taXVtVGVzdCwgcGl4ZWxzUGFpbnRl
ZE1ldHJpY3MpCiAgICAgSW50UmVjdCB2aXNpYmxlQm91bmRzID0gSW50UmVjdCgwLCAwLCAxMDAs
IDMwMCk7CiAKICAgICBsYXllci0+c2V0Qm91bmRzKGNvbnRlbnRCb3VuZHMuc2l6ZSgpKTsKLSAg
ICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShUcmFuc2Zvcm1hdGlvbk1hdHJpeCgxLCAwLCAwLCAx
LCBsYXllci0+Ym91bmRzKCkud2lkdGgoKSAvIDIuMCwgbGF5ZXItPmJvdW5kcygpLmhlaWdodCgp
IC8gMi4wKSk7CisgICAgbGF5ZXItPnNldERyYXdUcmFuc2Zvcm0oV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgxLCAwLCAwLCAxLCBsYXllci0+Ym91bmRzKCkud2lkdGgoKSAvIDIuMCwg
bGF5ZXItPmJvdW5kcygpLmhlaWdodCgpIC8gMi4wKSk7CiAgICAgbGF5ZXItPnNldFZpc2libGVM
YXllclJlY3QodmlzaWJsZUJvdW5kcyk7CiAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141278</attachid>
            <date>2012-05-10 15:18:39 -0700</date>
            <delta_ts>2012-05-11 11:28:40 -0700</delta_ts>
            <desc>Patch for review</desc>
            <filename>bug-86049-20120510151838.patch</filename>
            <type>text/plain</type>
            <size>25959</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2NjkyCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA2MjdjN2UwZmY3MWM1
ZTVmMTdhMzk0NTU0NzNkYjNkY2E1NDcxMTA4Li5hYzg3OTUwYmNkY2RjNzJiZTRkNWM3NTgwYzk2
ODcxNmI0NTEzNGI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wNS0xMCAg
U2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENyZWF0ZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnRlcmZhY2UgZm9yIGNocm9taXVt
IHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04NjA0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogUGxhdGZvcm0uZ3lwaToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXguaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktp
dCk6CisgICAgICAgIChXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCk6CisKIDIwMTItMDUtMTAgIE1h
cmsgUGlsZ3JpbSAgPHBpbGdyaW1AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJvbWl1bV0g
UmVtb3ZlIFdFQktJVF9VU0lOR19TS0lBIGlmZGVmcyB0aGF0IGFyZSBhbHdheXMgdHJ1ZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBhMGU2YTU4MTJiYmZhZDlkZTgxNzIzMGY0OTlhYWRk
YTQ4ZGQxMTRmLi5hMzg4YWFjODdmMTQ1YzUxOGNjMmM1OTFlMDRmNDk2MGFiMGI4NDk4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk1IEBACisyMDEyLTA1LTEwICBTaGF3
biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0g
Q3JlYXRlIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGludGVyZmFjZSBmb3IgY2hyb21pdW0gcGxh
dGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2
MDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhp
cyBwYXRjaCBjcmVhdGVzIGEgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaW50ZXJmYWNlLiBJdCB3
aWxsCisgICAgICAgIHJlbWFpbiB1bnVzZWQgYXQgdGhlIG1vbWVudCwgdW50aWwgKGEpIHVuaXQg
dGVzdHMgYXJlIGNyZWF0ZWQKKyAgICAgICAgYW5kIChiKSB3aGVuIHdlIGFyZSByZWFkeSB0byBt
YWtlIGEgYnJpZWYgdHJhbnNpdGlvbiBvZiBhbGwgb3RoZXIKKyAgICAgICAgY2hyb21pdW0gY29k
ZSB0byB1c2UgaXQuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9w
bGF0Zm9ybS9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oOiBBZGRlZC4KKyAgICAgICAgKiBzcmMv
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0b1dl
YkNvcmVUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
b3BlcmF0b3IqKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Omlu
dmVyc2UpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6dG8yZFRy
YW5zZm9ybSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptdWx0
aXBseSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptYWtlSWRl
bnRpdHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6dHJhbnNs
YXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnRyYW5zbGF0
ZTNkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnRyYW5zbGF0
ZVJpZ2h0M2QpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2Nh
bGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2NhbGVOb25V
bmlmb3JtKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNjYWxl
M2QpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cm90YXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnJvdGF0ZTNkKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNrZXdYKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNrZXdZKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmFwcGx5UGVyc3BlY3RpdmUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YmxlbmQpOgorICAgICAgICAoV2ViS2l0
OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6aGFzUGVyc3BlY3RpdmUpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6aXNJbnZlcnRpYmxlKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmlzQmFja0ZhY2VWaXNpYmxlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmlzSWRlbnRpdHkpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6aXNJZGVudGl0eU9yVHJhbnNsYXRp
b24pOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6aXNJbnRlZ2Vy
VHJhbnNsYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
bWFwUmVjdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBQ
b2ludCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBRdWFk
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnByb2plY3RQb2lu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMTEpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTExKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0xMik6CisgICAgICAgIChXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNMTIpOgorICAgICAgICAoV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTEzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OnNldE0xMyk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4OjptMTQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
c2V0TTE0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0yMSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNMjEpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTIyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE0yMik6CisgICAgICAgIChXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMjMpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTIzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXg6Om0yNCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4OjpzZXRNMjQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
bTMxKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE0zMSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMzIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTMyKToKKyAgICAgICAgKFdl
YktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0zMyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNMzMpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6bTM0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnNldE0zNCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4OjptNDEpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0
TTQxKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om00Mik6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNNDIpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTQzKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE00Myk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4OjptNDQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6c2V0TTQ0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXg6OmEpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
c2V0QSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpiKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEIpOgorICAgICAgICAo
V2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6Yyk6CisgICAgICAgIChXZWJLaXQ6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRDKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXg6OmQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6c2V0RCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEUpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6Zik6CisgICAgICAgIChXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRGKToKKwogMjAxMi0wNS0xMCAgTWFyayBQ
aWxncmltICA8cGlsZ3JpbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBDYWxs
IGFkZFRyYWNlRXZlbnQgYW5kIGdldFRyYWNlQ2F0ZWdvcnlFbmFibGVkRmxhZyBkaXJlY3RseQpk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkgYi9Tb3VyY2UvUGxhdGZv
cm0vUGxhdGZvcm0uZ3lwaQppbmRleCA5YTgyNzhhY2I1MjNhOWRjMDE2MGE3MzZjMzRmOGU5MjAz
NmZiYTA2Li5lNTQ5OTM0ZjU4NmIyZjM2YmMwN2YyMzdmYjVhM2VhZGE0NjIyOGI2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQorKysgYi9Tb3VyY2UvUGxhdGZvcm0v
UGxhdGZvcm0uZ3lwaQpAQCAtOTIsNiArOTIsNyBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1
YmxpYy9XZWJTdHJpbmcuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlRocmVh
ZC5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVGhyZWFkU2FmZURhdGEuaCcs
CisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4Lmgn
LAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaCcsCiAgICAgICAgICAgICAn
Y2hyb21pdW0vcHVibGljL1dlYlVSTEVycm9yLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1
YmxpYy9XZWJVUkxMb2FkVGltaW5nLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2No
cm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIGIvU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQx
MjNmYTgzOTIxMGZiNDhiMWM5NTJkMGM0ZTRiZDYxNzc4MTgwODEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4
LmgKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4X2gKKyNk
ZWZpbmUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXhfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgi
CisKKyNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIKKyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNp
bmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZU93blB0ci5oIgorCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXggeworCitwdWJsaWM6CisgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgoKTsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIs
IGRvdWJsZSBjLCBkb3VibGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKTsKKyAgICBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeChjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworCisgICAgLy8g
Q29udmVyc2lvbnMgYmV0d2VlbiBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGFuZCBX
ZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeAorICAgIGV4cGxpY2l0IFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4KGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisgICAgV2Vi
Q29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIHRvV2ViQ29yZVRyYW5zZm9ybSgpIGNvbnN0Owor
CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG9wZXJhdG9yPShjb25zdCBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYpOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYpIGNvbnN0OworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IG9wZXJhdG9y
Kihjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0OworCisgICAgLy8gT3BlcmF0
aW9ucyB0aGF0IHJldHVybiBhIHNlcGFyYXRlIG1hdHJpeCBhbmQgZG8gbm90IG1vZGlmeSB0aGlz
IG9uZS4KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnZlcnNlKCkgY29uc3Q7CisgICAg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdG8yZFRyYW5zZm9ybSgpIGNvbnN0OworICAgCisgICAg
Ly8gT3BlcmF0aW9ucyB0aGF0IG1vZGlmeSB0aGlzIG1hdHJpeAorICAgIHZvaWQgbXVsdGlwbHko
Y29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmKTsKKyAgICB2b2lkIG1ha2VJZGVudGl0eSgp
OworICAgIHZvaWQgdHJhbnNsYXRlKGRvdWJsZSB0eCwgZG91YmxlIHR5KTsKKyAgICB2b2lkIHRy
YW5zbGF0ZTNkKGRvdWJsZSB0eCwgZG91YmxlIHR5LCBkb3VibGUgdHopOworICAgIHZvaWQgdHJh
bnNsYXRlUmlnaHQzZChkb3VibGUgdHgsIGRvdWJsZSB0eSwgZG91YmxlIHR6KTsKKyAgICB2b2lk
IHNjYWxlKGRvdWJsZSBzKTsKKyAgICB2b2lkIHNjYWxlTm9uVW5pZm9ybShkb3VibGUgc3gsIGRv
dWJsZSBzeSk7CisgICAgdm9pZCBzY2FsZTNkKGRvdWJsZSBzeCwgZG91YmxlIHN5LCBkb3VibGUg
c3opOworICAgIHZvaWQgcm90YXRlKGRvdWJsZSBhbmdsZSk7CisgICAgdm9pZCByb3RhdGUzZChk
b3VibGUgcngsIGRvdWJsZSByeSwgZG91YmxlIHJ6KTsKKyAgICB2b2lkIHJvdGF0ZTNkKGRvdWJs
ZSB4LCBkb3VibGUgeSwgZG91YmxlIHosIGRvdWJsZSBhbmdsZSk7CisgICAgdm9pZCBza2V3WChk
b3VibGUgYW5nbGUpOworICAgIHZvaWQgc2tld1koZG91YmxlIGFuZ2xlKTsKKyAgICB2b2lkIGFw
cGx5UGVyc3BlY3RpdmUoZG91YmxlIHApOworICAgIHZvaWQgYmxlbmQoY29uc3QgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXgmIGZyb20sIGRvdWJsZSBwcm9ncmVzcyk7CisKKyAgICBib29sIGhhc1Bl
cnNwZWN0aXZlKCkgY29uc3Q7CisgICAgYm9vbCBpc0ludmVydGlibGUoKSBjb25zdDsKKyAgICBi
b29sIGlzQmFja0ZhY2VWaXNpYmxlKCkgY29uc3Q7CisgICAgYm9vbCBpc0lkZW50aXR5KCkgY29u
c3Q7CisgICAgYm9vbCBpc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpIGNvbnN0OworICAgIGJvb2wg
aXNJbnRlZ2VyVHJhbnNsYXRpb24oKSBjb25zdDsKKworICAgIC8vIEZJWE1FOiB0aGVzZSBtYXAg
ZnVuY3Rpb25zIHNob3VsZCBub3QgZXhpc3QsIHNob3VsZCBiZSB1c2luZyBDQ01hdGhVdGlsCisg
ICAgLy8gaW5zdGVhZC4gRXZlbnR1YWxseSBDQ01hdGhVdGlsIGZ1bmN0aW9ucyBjb3VsZCBiZSBt
ZXJnZWQgaGVyZSwgYnV0IGl0cworICAgIC8vIG5vdCB5ZXQgdGhlIHJpZ2h0IHRpbWUgZm9yIHRo
YXQuCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1hcFJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRS
ZWN0JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtYXBSZWN0KGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmKSBjb25zdDsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50M0QgbWFwUG9pbnQoY29u
c3QgV2ViQ29yZTo6RmxvYXRQb2ludDNEJikgY29uc3Q7CisgICAgV2ViQ29yZTo6RmxvYXRQb2lu
dCBtYXBQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikgY29uc3Q7CisgICAgV2ViQ29y
ZTo6SW50UG9pbnQgbWFwUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKyAg
ICBXZWJDb3JlOjpGbG9hdFF1YWQgbWFwUXVhZChjb25zdCBXZWJDb3JlOjpGbG9hdFF1YWQmKSBj
b25zdDsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHByb2plY3RQb2ludChjb25zdCBXZWJDb3Jl
OjpGbG9hdFBvaW50JiwgYm9vbCogY2xhbXBlZCA9IDApIGNvbnN0OworCisgICAgLy8gQWNjZXNz
b3JzCisgICAgZG91YmxlIG0xMSgpIGNvbnN0OworICAgIHZvaWQgc2V0TTExKGRvdWJsZSBmKTsK
KyAgICBkb3VibGUgbTEyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNMTIoZG91YmxlIGYpOworICAg
IGRvdWJsZSBtMTMoKSBjb25zdDsKKyAgICB2b2lkIHNldE0xMyhkb3VibGUgZik7CisgICAgZG91
YmxlIG0xNCgpIGNvbnN0OworICAgIHZvaWQgc2V0TTE0KGRvdWJsZSBmKTsKKyAgICBkb3VibGUg
bTIxKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNMjEoZG91YmxlIGYpOworICAgIGRvdWJsZSBtMjIo
KSBjb25zdDsKKyAgICB2b2lkIHNldE0yMihkb3VibGUgZik7CisgICAgZG91YmxlIG0yMygpIGNv
bnN0OworICAgIHZvaWQgc2V0TTIzKGRvdWJsZSBmKTsKKyAgICBkb3VibGUgbTI0KCkgY29uc3Q7
CisgICAgdm9pZCBzZXRNMjQoZG91YmxlIGYpOworICAgIGRvdWJsZSBtMzEoKSBjb25zdDsKKyAg
ICB2b2lkIHNldE0zMShkb3VibGUgZik7CisgICAgZG91YmxlIG0zMigpIGNvbnN0OworICAgIHZv
aWQgc2V0TTMyKGRvdWJsZSBmKTsKKyAgICBkb3VibGUgbTMzKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRNMzMoZG91YmxlIGYpOworICAgIGRvdWJsZSBtMzQoKSBjb25zdDsKKyAgICB2b2lkIHNldE0z
NChkb3VibGUgZik7CisgICAgZG91YmxlIG00MSgpIGNvbnN0OworICAgIHZvaWQgc2V0TTQxKGRv
dWJsZSBmKTsKKyAgICBkb3VibGUgbTQyKCkgY29uc3Q7CisgICAgdm9pZCBzZXRNNDIoZG91Ymxl
IGYpOworICAgIGRvdWJsZSBtNDMoKSBjb25zdDsKKyAgICB2b2lkIHNldE00Myhkb3VibGUgZik7
CisgICAgZG91YmxlIG00NCgpIGNvbnN0OworICAgIHZvaWQgc2V0TTQ0KGRvdWJsZSBmKTsKKyAg
ICBkb3VibGUgYSgpIGNvbnN0OworICAgIHZvaWQgc2V0QShkb3VibGUgYSk7CisgICAgZG91Ymxl
IGIoKSBjb25zdDsKKyAgICB2b2lkIHNldEIoZG91YmxlIGIpOworICAgIGRvdWJsZSBjKCkgY29u
c3Q7CisgICAgdm9pZCBzZXRDKGRvdWJsZSBjKTsKKyAgICBkb3VibGUgZCgpIGNvbnN0OworICAg
IHZvaWQgc2V0RChkb3VibGUgZCk7CisgICAgZG91YmxlIGUoKSBjb25zdDsKKyAgICB2b2lkIHNl
dEUoZG91YmxlIGUpOworICAgIGRvdWJsZSBmKCkgY29uc3Q7CisgICAgdm9pZCBzZXRGKGRvdWJs
ZSBmKTsKKworcHJvdGVjdGVkOgorICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6VHJhbnNm
b3JtYXRpb25NYXRyaXg+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAwNmRhNDFlOTE0OGI5MWJi
MzBmN2M2ZDg0OWViYzRlOGEwYjY5OTY2Li4zNjdhOTAzNGQ5ZmM3YjZlNTQ5MzQ2MGQ4ZGJhZjc5
M2YwNTJlM2I1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0zMzYsNiArMzM2LDcg
QEAKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlN0cmluZy5oJywKICAgICAg
ICAgICAgICAgICAncHVibGljL3BsYXRmb3JtL1dlYlRocmVhZC5oJywKICAgICAgICAgICAgICAg
ICAncHVibGljL3BsYXRmb3JtL1dlYlRocmVhZFNhZmVEYXRhLmgnLAorICAgICAgICAgICAgICAg
ICdwdWJsaWMvcGxhdGZvcm0vV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCcsCiAgICAgICAgICAg
ICAgICAgJ3B1YmxpYy9wbGF0Zm9ybS9XZWJVUkwuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9wbGF0Zm9ybS9XZWJVUkxFcnJvci5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3BsYXRm
b3JtL1dlYlVSTExvYWRUaW1pbmcuaCcsCkBAIC02NTcsNiArNjU4LDcgQEAKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYlN0b3JhZ2VRdW90YUNhbGxiYWNrc0ltcGwuaCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJTdXJyb3VuZGluZ1RleHQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YlRleHRSdW4uY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlRyYW5zZm9ybWF0aW9uTWF0
cml4LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxMb2FkVGltaW5nLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJTY29wZWRVc2VyR2VzdHVyZS5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViVXNlck1lZGlhUmVxdWVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvcGxhdGZvcm0vV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgu
aCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL3BsYXRmb3JtL1dlYlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWNiNzRjYjhlNmY5NjdjYWI1MDJmM2FiZDQ2NTFiMzQy
MmM3Njg4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L3BsYXRmb3JtL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmgKQEAgLTAsMCArMSwyNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisg
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICIuLi8uLi8uLi8uLi9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXguaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MTJkNzIyMzBmYWFi
ZDY0NTE0NmZhZmQ2YmM1MmQ0N2E2MjEzNGJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCkBAIC0wLDAgKzEs
NDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInBsYXRmb3JtL1dl
YlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oIgorI2luY2x1ZGUgIldURi9QYXNzT3duUHRyLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Oldl
YlRyYW5zZm9ybWF0aW9uTWF0cml4KCkKKyAgICA6IG1fcHJpdmF0ZShuZXcgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSkKK3sKKyAgICAvLyBGSVhNRTogVGhlIG92ZXJoZWFkIG9mIGFsbG9jYXRpbmcg
YSBuZXcgVHJhbnNmb3JtYXRpb25NYXRyaXggbmVlZHMgdG8gZ28gYXdheSBhcyBzb29uIGFzIHBv
c3NpYmxlLgorfQorCitXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6V2ViVHJhbnNmb3JtYXRpb25N
YXRyaXgoZG91YmxlIGEsIGRvdWJsZSBiLCBkb3VibGUgYywgZG91YmxlIGQsIGRvdWJsZSBlLCBk
b3VibGUgZikKKyAgICA6IG1fcHJpdmF0ZShuZXcgVHJhbnNmb3JtYXRpb25NYXRyaXgoYSwgYiwg
YywgZCwgZSwgZikpCit7CisgICAgLy8gRklYTUU6IFRoZSBvdmVyaGVhZCBvZiBhbGxvY2F0aW5n
IGEgbmV3IFRyYW5zZm9ybWF0aW9uTWF0cml4IG5lZWRzIHRvIGdvIGF3YXkgYXMgc29vbiBhcyBw
b3NzaWJsZS4KK30KKworV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQorICAgIDogbV9wcml2YXRl
KG5ldyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgqdC5tX3ByaXZhdGUuZ2V0KCkpKQoreworICAgIC8v
IEZJWE1FOiBUaGUgb3ZlcmhlYWQgb2YgYWxsb2NhdGluZyBhIG5ldyBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBuZWVkcyB0byBnbyBhd2F5IGFzIHNvb24gYXMgcG9zc2libGUuCit9CisKK1dlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgdCkKKyAgICA6IG1fcHJpdmF0ZShuZXcgVHJhbnNmb3JtYXRpb25NYXRyaXgo
dCkpCit7CisgICAgLy8gRklYTUU6IFRoZSBvdmVyaGVhZCBvZiBhbGxvY2F0aW5nIGEgbmV3IFRy
YW5zZm9ybWF0aW9uTWF0cml4IG5lZWRzIHRvIGdvIGF3YXkgYXMgc29vbiBhcyBwb3NzaWJsZS4K
K30KKworVHJhbnNmb3JtYXRpb25NYXRyaXgmIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0b1dl
YkNvcmVUcmFuc2Zvcm0oKSBjb25zdAoreworICAgIHJldHVybiAqbV9wcml2YXRlLmdldCgpOwor
fQorCitXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om9w
ZXJhdG9yPShjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdCkKK3sKKyAgICAqbV9wcml2
YXRlLmdldCgpID0gKnQubV9wcml2YXRlLmdldCgpOworICAgIHJldHVybiAqdGhpczsKK30KKwor
Ym9vbCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0b3I9PShjb25zdCBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdCkgY29uc3QKK3sKKyAgICBib29sIGlzRXF1YWwgPSAoKm1fcHJpdmF0
ZS5nZXQoKSA9PSAqdC5tX3ByaXZhdGUuZ2V0KCkpOworICAgIHJldHVybiBpc0VxdWFsOworfQor
CitXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6b3BlcmF0
b3IqKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KSBjb25zdAoreworICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4IHJlc3VsdCA9ICp0aGlzOworICAgIHJlc3VsdC5tdWx0aXBseSh0
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6aW52ZXJzZSgpIGNvbnN0Cit7CisgICAgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXggcmVzdWx0OworICAgICpyZXN1bHQubV9wcml2YXRlLmdldCgpID0gbV9wcml2
YXRlLT5pbnZlcnNlKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXggV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnRvMmRUcmFuc2Zvcm0oKSBjb25zdAor
eworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHJlc3VsdDsKKyAgICAqcmVzdWx0Lm1fcHJp
dmF0ZS5nZXQoKSA9IG1fcHJpdmF0ZS0+dG8yZFRyYW5zZm9ybSgpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om11bHRpcGx5KGNvbnN0IFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KQoreworICAgIG1fcHJpdmF0ZS0+bXVsdGlwbHkoKnQu
bV9wcml2YXRlLmdldCgpKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFr
ZUlkZW50aXR5KCkKK3sKKyAgICBtX3ByaXZhdGUtPm1ha2VJZGVudGl0eSgpOworfQorCit2b2lk
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0cmFuc2xhdGUoZG91YmxlIHR4LCBkb3VibGUgdHkp
Cit7CisgICAgbV9wcml2YXRlLT50cmFuc2xhdGUodHgsIHR5KTsKK30KKwordm9pZCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6dHJhbnNsYXRlM2QoZG91YmxlIHR4LCBkb3VibGUgdHksIGRvdWJs
ZSB0eikKK3sKKyAgICBtX3ByaXZhdGUtPnRyYW5zbGF0ZTNkKHR4LCB0eSwgdHopOworfQorCit2
b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0cmFuc2xhdGVSaWdodDNkKGRvdWJsZSB0eCwg
ZG91YmxlIHR5LCBkb3VibGUgdHopCit7CisgICAgbV9wcml2YXRlLT50cmFuc2xhdGVSaWdodDNk
KHR4LCB0eSwgdHopOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzY2FsZShk
b3VibGUgcykKK3sKKyAgICBtX3ByaXZhdGUtPnNjYWxlKHMpOworfQorCit2b2lkIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpzY2FsZU5vblVuaWZvcm0oZG91YmxlIHN4LCBkb3VibGUgc3kpCit7
CisgICAgbV9wcml2YXRlLT5zY2FsZU5vblVuaWZvcm0oc3gsIHN5KTsKK30KKwordm9pZCBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2NhbGUzZChkb3VibGUgc3gsIGRvdWJsZSBzeSwgZG91Ymxl
IHN6KQoreworICAgIG1fcHJpdmF0ZS0+c2NhbGUzZChzeCwgc3ksIHN6KTsKK30KKwordm9pZCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6cm90YXRlKGRvdWJsZSBhbmdsZSkKK3sKKyAgICBtX3By
aXZhdGUtPnJvdGF0ZShhbmdsZSk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6
OnJvdGF0ZTNkKGRvdWJsZSByeCwgZG91YmxlIHJ5LCBkb3VibGUgcnopCit7CisgICAgbV9wcml2
YXRlLT5yb3RhdGUzZChyeCwgcnksIHJ6KTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6cm90YXRlM2QoZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlIGFuZ2xl
KQoreworICAgIG1fcHJpdmF0ZS0+cm90YXRlM2QoeCwgeSwgeiwgYW5nbGUpOworfQorCit2b2lk
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpza2V3WChkb3VibGUgYW5nbGUpCit7CisgICAgbV9w
cml2YXRlLT5za2V3WChhbmdsZSk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6
OnNrZXdZKGRvdWJsZSBhbmdsZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNrZXdZKGFuZ2xlKTsKK30K
Kwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YXBwbHlQZXJzcGVjdGl2ZShkb3VibGUg
cCkKK3sKKyAgICBtX3ByaXZhdGUtPmFwcGx5UGVyc3BlY3RpdmUocCk7Cit9CisKK3ZvaWQgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXg6OmJsZW5kKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
JiBmcm9tLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgbV9wcml2YXRlLT5ibGVuZCgqZnJvbS5t
X3ByaXZhdGUuZ2V0KCksIHByb2dyZXNzKTsKK30KKworYm9vbCBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6aGFzUGVyc3BlY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmhh
c1BlcnNwZWN0aXZlKCk7Cit9CisKK2Jvb2wgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmlzSW52
ZXJ0aWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXNJbnZlcnRpYmxlKCk7
Cit9CisKK2Jvb2wgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmlzQmFja0ZhY2VWaXNpYmxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0JhY2tGYWNlVmlzaWJsZSgpOworfQor
Citib29sIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojppc0lkZW50aXR5KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5pc0lkZW50aXR5KCk7Cit9CisKK2Jvb2wgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5pc0lkZW50aXR5T3JUcmFuc2xhdGlvbigpOworfQorCitib29sIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4Ojppc0ludGVnZXJUcmFuc2xhdGlvbigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+aXNJbnRlZ2VyVHJhbnNsYXRpb24oKTsKK30KKworRmxvYXRSZWN0
IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tYXBSZWN0KHJlY3QpOworfQorCitJbnRS
ZWN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBSZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFwUmVjdChyZWN0KTsKK30KKworRmxv
YXRQb2ludDNEIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBQb2ludChjb25zdCBGbG9hdFBv
aW50M0QmIHApIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFwUG9pbnQocCk7Cit9
CisKK0Zsb2F0UG9pbnQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFBvaW50KGNvbnN0IEZs
b2F0UG9pbnQmIHApIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFwUG9pbnQocCk7
Cit9CisKK0ludFBvaW50IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBQb2ludChjb25zdCBJ
bnRQb2ludCYgcCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tYXBQb2ludChwKTsK
K30KKworRmxvYXRRdWFkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptYXBRdWFkKGNvbnN0IEZs
b2F0UXVhZCYgcXVhZCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tYXBRdWFkKHF1
YWQpOworfQorCitGbG9hdFBvaW50IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpwcm9qZWN0UG9p
bnQoY29uc3QgRmxvYXRQb2ludCYgcCwgYm9vbCogY2xhbXBlZCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5wcm9qZWN0UG9pbnQocCwgY2xhbXBlZCk7Cit9CisKK2RvdWJsZSBXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTExKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5tMTEoKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTExKGRvdWJs
ZSBmKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TTExKGYpOworfQorCitkb3VibGUgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXg6Om0xMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bTEy
KCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE0xMihkb3VibGUgZikK
K3sKKyAgICBtX3ByaXZhdGUtPnNldE0xMihmKTsKK30KKworZG91YmxlIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4OjptMTMoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm0xMygpOwor
fQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNMTMoZG91YmxlIGYpCit7Cisg
ICAgbV9wcml2YXRlLT5zZXRNMTMoZik7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6bTE0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tMTQoKTsKK30KKwor
dm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTE0KGRvdWJsZSBmKQoreworICAgIG1f
cHJpdmF0ZS0+c2V0TTE0KGYpOworfQorCitkb3VibGUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6
Om0yMSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bTIxKCk7Cit9CisKK3ZvaWQg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE0yMShkb3VibGUgZikKK3sKKyAgICBtX3ByaXZh
dGUtPnNldE0yMShmKTsKK30KKworZG91YmxlIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMjIo
KSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm0yMigpOworfQorCit2b2lkIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNMjIoZG91YmxlIGYpCit7CisgICAgbV9wcml2YXRlLT5z
ZXRNMjIoZik7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTIzKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tMjMoKTsKK30KKwordm9pZCBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6c2V0TTIzKGRvdWJsZSBmKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TTIz
KGYpOworfQorCitkb3VibGUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0yNCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bTI0KCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnNldE0yNChkb3VibGUgZikKK3sKKyAgICBtX3ByaXZhdGUtPnNldE0yNChmKTsK
K30KKworZG91YmxlIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMzEoKSBjb25zdAoreworICAg
IHJldHVybiBtX3ByaXZhdGUtPm0zMSgpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4OjpzZXRNMzEoZG91YmxlIGYpCit7CisgICAgbV9wcml2YXRlLT5zZXRNMzEoZik7Cit9CisK
K2RvdWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTMyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5tMzIoKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
c2V0TTMyKGRvdWJsZSBmKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TTMyKGYpOworfQorCitkb3Vi
bGUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0zMygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+bTMzKCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE0z
Myhkb3VibGUgZikKK3sKKyAgICBtX3ByaXZhdGUtPnNldE0zMyhmKTsKK30KKworZG91YmxlIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMzQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZh
dGUtPm0zNCgpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNMzQoZG91
YmxlIGYpCit7CisgICAgbV9wcml2YXRlLT5zZXRNMzQoZik7Cit9CisKK2RvdWJsZSBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6bTQxKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5t
NDEoKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTQxKGRvdWJsZSBm
KQoreworICAgIG1fcHJpdmF0ZS0+c2V0TTQxKGYpOworfQorCitkb3VibGUgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXg6Om00MigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bTQyKCk7
Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE00Mihkb3VibGUgZikKK3sK
KyAgICBtX3ByaXZhdGUtPnNldE00MihmKTsKK30KKworZG91YmxlIFdlYlRyYW5zZm9ybWF0aW9u
TWF0cml4OjptNDMoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm00MygpOworfQor
Cit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNNDMoZG91YmxlIGYpCit7CisgICAg
bV9wcml2YXRlLT5zZXRNNDMoZik7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6bTQ0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tNDQoKTsKK30KKwordm9p
ZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTQ0KGRvdWJsZSBmKQoreworICAgIG1fcHJp
dmF0ZS0+c2V0TTQ0KGYpOworfQorCitkb3VibGUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmEo
KSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmEoKTsKK30KKwordm9pZCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6c2V0QShkb3VibGUgYSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldEEo
YSk7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+YigpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4OjpzZXRCKGRvdWJsZSBiKQoreworICAgIG1fcHJpdmF0ZS0+c2V0QihiKTsKK30KKworZG91
YmxlIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpjKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5jKCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEMoZG91
YmxlIGMpCit7CisgICAgbV9wcml2YXRlLT5zZXRDKGMpOworfQorCitkb3VibGUgV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXg6OmQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmQoKTsK
K30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0RChkb3VibGUgZCkKK3sKKyAg
ICBtX3ByaXZhdGUtPnNldEQoZCk7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZSgpOworfQorCit2b2lkIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRFKGRvdWJsZSBlKQoreworICAgIG1fcHJpdmF0ZS0+
c2V0RShlKTsKK30KKworZG91YmxlIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpmKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5mKCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnNldEYoZG91YmxlIGYpCit7CisgICAgbV9wcml2YXRlLT5zZXRGKGYpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141458</attachid>
            <date>2012-05-11 11:28:44 -0700</date>
            <delta_ts>2012-05-11 12:49:43 -0700</delta_ts>
            <desc>Addressed reviewer comments</desc>
            <filename>bug-86049-20120511112843.patch</filename>
            <type>text/plain</type>
            <size>24414</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE2Nzg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA2MjdjN2UwZmY3MWM1
ZTVmMTdhMzk0NTU0NzNkYjNkY2E1NDcxMTA4Li5iZmY3ZmZiYTlkYWFkNjEwMjk5MjZjZDhkMmM4
ZjE5ZDk5Y2I5NGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAxMi0wNS0xMSAg
U2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENyZWF0ZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbnRlcmZhY2UgZm9yIGNocm9taXVt
IHBsYXRmb3JtCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04NjA0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogUGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5cDoKKyAgICAgICAgKiBQbGF0Zm9ybS5neXBpOgor
ICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4KToKKwogMjAxMi0wNS0xMCAgTWFyayBQaWxncmltICA8cGlsZ3Jp
bUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBSZW1vdmUgV0VCS0lUX1VTSU5H
X1NLSUEgaWZkZWZzIHRoYXQgYXJlIGFsd2F5cyB0cnVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWE0Zjk3MjFj
NDg2MTA1MzA3NTgwYzY1MTdhZjA2MTkyYTE0MWM5Zi4uYzhhODE3MDY2OTMzMDFhMTRhZmQyNzZl
ZDFjMTA1NWY1MDM1YmJlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk0IEBACisyMDEyLTA1LTEx
ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJv
bWl1bV0gQ3JlYXRlIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGludGVyZmFjZSBmb3IgY2hyb21p
dW0gcGxhdGZvcm0KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg2MDQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBjcmVhdGVzIGEgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggaW50ZXJmYWNl
LiBJdCB3aWxsCisgICAgICAgIHJlbWFpbiB1bnVzZWQgYXQgdGhlIG1vbWVudCwgdW50aWwgKGEp
IHVuaXQgdGVzdHMgYXJlIGNyZWF0ZWQKKyAgICAgICAgYW5kIChiKSB3aGVuIHdlIGFyZSByZWFk
eSB0byBtYWtlIGEgYnJpZWYgdHJhbnNpdGlvbiBvZiBhbGwgb3RoZXIKKyAgICAgICAgY2hyb21p
dW0gY29kZSB0byB1c2UgaXQuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICog
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXg6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRy
YW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXg6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4OjppbnZlcnNlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OnRvMmRUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6bXVsdGlwbHkpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6bWFrZUlkZW50aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OnRyYW5zbGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4Ojp0cmFuc2xhdGUzZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4Ojp0cmFuc2xhdGVSaWdodDNkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXg6OnNjYWxlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnNjYWxlTm9uVW5pZm9ybSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9y
bWF0aW9uTWF0cml4OjpzY2FsZTNkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnJvdGF0ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4Ojpyb3RhdGUzZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4
Ojpza2V3WCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpza2V3
WSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjphcHBseVBlcnNw
ZWN0aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmJsZW5k
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Omhhc1BlcnNwZWN0
aXZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmlzSW52ZXJ0
aWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojppc0JhY2tG
YWNlVmlzaWJsZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpp
c0lkZW50aXR5KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Omlz
SWRlbnRpdHlPclRyYW5zbGF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRp
b25NYXRyaXg6OmlzSW50ZWdlclRyYW5zbGF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJh
bnNmb3JtYXRpb25NYXRyaXg6Om0xMSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4OjpzZXRNMTEpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeDo6bTEyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNl
dE0xMik6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMTMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTEzKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0xNCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNMTQpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTIxKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXg6OnNldE0yMSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4OjptMjIpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6c2V0TTIyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0y
Myk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNMjMpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTI0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE0yNCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMzEpOgorICAgICAgICAoV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTMxKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNm
b3JtYXRpb25NYXRyaXg6Om0zMik6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4OjpzZXRNMzIpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eDo6bTMzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE0z
Myk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMzQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTM0KToKKyAgICAgICAg
KFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om00MSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNNDEpOgorICAgICAgICAoV2ViS2l0OjpXZWJU
cmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTQyKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OnNldE00Mik6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4OjptNDMpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
c2V0TTQzKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om00NCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNNDQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YSk6CisgICAgICAgIChXZWJL
aXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRBKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXg6OmIpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6c2V0Qik6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0
cml4OjpjKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEMp
OgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6ZCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXREKToKKyAgICAgICAgKFdlYktp
dDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6c2V0RSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0
aW9uTWF0cml4OjpmKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6
OnNldEYpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6dG9XZWJD
b3JlVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6
Om1hcFJlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFw
UG9pbnQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUXVh
ZCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpwcm9qZWN0UG9p
bnQpOgorCiAyMDEyLTA1LTExICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFtjaHJvbWl1bV0gRW5zdXJlIHRoYXQgYW5pbWF0aW9ucyBjb250aW51ZSB0byBy
dW4gd2hlbiB0cmFuc2Zvcm0tc3R5bGUgaXMgY2hhbmdlZApkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL1BsYXRmb3JtLmd5cC9QbGF0Zm9ybS5neXAgYi9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZv
cm0uZ3lwL1BsYXRmb3JtLmd5cAppbmRleCA1MTIyZjQ2YmQ5MmM5NTE3NGQ2NWU5NWQ0MDg4ZDYy
ZGQ3ODQ5NDQ2Li45MTExMTZhOWY3NjFiMzc5Y2I1NDI0YmVmODRhOTc2ZDg0ZTEwOWJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5cAorKysgYi9T
b3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwL1BsYXRmb3JtLmd5cApAQCAtNTksNiArNTksNyBA
QAogICAgICAgICAgICAgICAgICMgZGlyZWN0b3J5IGZvciBhbGwgcG9ydHMgYW5kIGp1c3QgdXNl
IHRoZW0gYXMgbm9ybWFsLgogICAgICAgICAgICAgICAgICd3ZWJjb3JlX2hlYWRlcnMnOiBbCiAg
ICAgICAgICAgICAgICAgICAgICcuLi8uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQuaCcsCisgICAgICAgICAgICAgICAgICAgICcuLi8uLi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0UG9pbnQzRC5oJywKICAgICAgICAgICAgICAgICAgICAgJy4uLy4uL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRRdWFkLmgnLAogICAgICAgICAgICAgICAgICAgICAn
Li4vLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFJlY3QuaCcsCiAgICAgICAgICAg
ICAgICAgICAgICcuLi8uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpIGIvU291cmNlL1BsYXRm
b3JtL1BsYXRmb3JtLmd5cGkKaW5kZXggOWE4Mjc4YWNiNTIzYTlkYzAxNjBhNzM2YzM0ZjhlOTIw
MzZmYmEwNi4uZTU0OTkzNGY1ODZiMmYzNmJjMDdmMjM3ZmI1YTNlYWRhNDYyMjhiNiAxMDA2NDQK
LS0tIGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKKysrIGIvU291cmNlL1BsYXRmb3Jt
L1BsYXRmb3JtLmd5cGkKQEAgLTkyLDYgKzkyLDcgQEAKICAgICAgICAgICAgICdjaHJvbWl1bS9w
dWJsaWMvV2ViU3RyaW5nLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJUaHJl
YWQuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlRocmVhZFNhZmVEYXRhLmgn
LAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
JywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVVJMLmgnLAogICAgICAgICAgICAg
J2Nocm9taXVtL3B1YmxpYy9XZWJVUkxFcnJvci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9w
dWJsaWMvV2ViVVJMTG9hZFRpbWluZy5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCBiL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45
MzNiODZhMTgzZGM5NGM2MzEzOTQwMjlhYzA5NGY0NDJkOGE3MWEyCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeF9oCisj
ZGVmaW5lIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4X2gKKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50M0QuaCIK
KyNpbmNsdWRlICJGbG9hdFF1YWQuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgi
CisjaW5jbHVkZSAiV2ViUHJpdmF0ZU93blB0ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2Ns
YXNzIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHsKK3B1YmxpYzoKKyAgICBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCgpOworICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4KGRvdWJsZSBhLCBkb3Vi
bGUgYiwgZG91YmxlIGMsIGRvdWJsZSBkLCBkb3VibGUgZSwgZG91YmxlIGYpOworICAgIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CisKKyAg
ICAvLyBPcGVyYXRpb25zIHRoYXQgcmV0dXJuIGEgc2VwYXJhdGUgbWF0cml4IGFuZCBkbyBub3Qg
bW9kaWZ5IHRoaXMgb25lLgorICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGludmVyc2UoKSBj
b25zdDsKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0bzJkVHJhbnNmb3JtKCkgY29uc3Q7
CisKKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgb3BlcmF0b3I9KGNvbnN0IFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4Jik7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4JikgY29uc3Q7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggb3BlcmF0
b3IqKGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JikgY29uc3Q7CisKKyAgICAvLyBPcGVy
YXRpb25zIHRoYXQgbW9kaWZ5IHRoaXMgbWF0cml4CisgICAgdm9pZCBtdWx0aXBseShjb25zdCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIHZvaWQgbWFrZUlkZW50aXR5KCk7CisgICAg
dm9pZCB0cmFuc2xhdGUoZG91YmxlIHR4LCBkb3VibGUgdHkpOworICAgIHZvaWQgdHJhbnNsYXRl
M2QoZG91YmxlIHR4LCBkb3VibGUgdHksIGRvdWJsZSB0eik7CisgICAgdm9pZCB0cmFuc2xhdGVS
aWdodDNkKGRvdWJsZSB0eCwgZG91YmxlIHR5LCBkb3VibGUgdHopOworICAgIHZvaWQgc2NhbGUo
ZG91YmxlIHMpOworICAgIHZvaWQgc2NhbGVOb25Vbmlmb3JtKGRvdWJsZSBzeCwgZG91YmxlIHN5
KTsKKyAgICB2b2lkIHNjYWxlM2QoZG91YmxlIHN4LCBkb3VibGUgc3ksIGRvdWJsZSBzeik7Cisg
ICAgdm9pZCByb3RhdGUoZG91YmxlIGFuZ2xlKTsKKyAgICB2b2lkIHJvdGF0ZTNkKGRvdWJsZSBy
eCwgZG91YmxlIHJ5LCBkb3VibGUgcnopOworICAgIHZvaWQgcm90YXRlM2QoZG91YmxlIHgsIGRv
dWJsZSB5LCBkb3VibGUgeiwgZG91YmxlIGFuZ2xlKTsKKyAgICB2b2lkIHNrZXdYKGRvdWJsZSBh
bmdsZSk7CisgICAgdm9pZCBza2V3WShkb3VibGUgYW5nbGUpOworICAgIHZvaWQgYXBwbHlQZXJz
cGVjdGl2ZShkb3VibGUgcCk7CisgICAgdm9pZCBibGVuZChjb25zdCBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgZnJvbSwgZG91YmxlIHByb2dyZXNzKTsKKworICAgIGJvb2wgaGFzUGVyc3BlY3Rp
dmUoKSBjb25zdDsKKyAgICBib29sIGlzSW52ZXJ0aWJsZSgpIGNvbnN0OworICAgIGJvb2wgaXNC
YWNrRmFjZVZpc2libGUoKSBjb25zdDsKKyAgICBib29sIGlzSWRlbnRpdHkoKSBjb25zdDsKKyAg
ICBib29sIGlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCkgY29uc3Q7CisgICAgYm9vbCBpc0ludGVn
ZXJUcmFuc2xhdGlvbigpIGNvbnN0OworCisgICAgLy8gQWNjZXNzb3JzCisgICAgZG91YmxlIG0x
MSgpIGNvbnN0OworICAgIHZvaWQgc2V0TTExKGRvdWJsZSk7CisgICAgZG91YmxlIG0xMigpIGNv
bnN0OworICAgIHZvaWQgc2V0TTEyKGRvdWJsZSk7CisgICAgZG91YmxlIG0xMygpIGNvbnN0Owor
ICAgIHZvaWQgc2V0TTEzKGRvdWJsZSk7CisgICAgZG91YmxlIG0xNCgpIGNvbnN0OworICAgIHZv
aWQgc2V0TTE0KGRvdWJsZSk7CisgICAgZG91YmxlIG0yMSgpIGNvbnN0OworICAgIHZvaWQgc2V0
TTIxKGRvdWJsZSk7CisgICAgZG91YmxlIG0yMigpIGNvbnN0OworICAgIHZvaWQgc2V0TTIyKGRv
dWJsZSk7CisgICAgZG91YmxlIG0yMygpIGNvbnN0OworICAgIHZvaWQgc2V0TTIzKGRvdWJsZSk7
CisgICAgZG91YmxlIG0yNCgpIGNvbnN0OworICAgIHZvaWQgc2V0TTI0KGRvdWJsZSk7CisgICAg
ZG91YmxlIG0zMSgpIGNvbnN0OworICAgIHZvaWQgc2V0TTMxKGRvdWJsZSk7CisgICAgZG91Ymxl
IG0zMigpIGNvbnN0OworICAgIHZvaWQgc2V0TTMyKGRvdWJsZSk7CisgICAgZG91YmxlIG0zMygp
IGNvbnN0OworICAgIHZvaWQgc2V0TTMzKGRvdWJsZSk7CisgICAgZG91YmxlIG0zNCgpIGNvbnN0
OworICAgIHZvaWQgc2V0TTM0KGRvdWJsZSk7CisgICAgZG91YmxlIG00MSgpIGNvbnN0OworICAg
IHZvaWQgc2V0TTQxKGRvdWJsZSk7CisgICAgZG91YmxlIG00MigpIGNvbnN0OworICAgIHZvaWQg
c2V0TTQyKGRvdWJsZSk7CisgICAgZG91YmxlIG00MygpIGNvbnN0OworICAgIHZvaWQgc2V0TTQz
KGRvdWJsZSk7CisgICAgZG91YmxlIG00NCgpIGNvbnN0OworICAgIHZvaWQgc2V0TTQ0KGRvdWJs
ZSk7CisKKyAgICBkb3VibGUgYSgpIGNvbnN0OworICAgIHZvaWQgc2V0QShkb3VibGUpOworICAg
IGRvdWJsZSBiKCkgY29uc3Q7CisgICAgdm9pZCBzZXRCKGRvdWJsZSk7CisgICAgZG91YmxlIGMo
KSBjb25zdDsKKyAgICB2b2lkIHNldEMoZG91YmxlKTsKKyAgICBkb3VibGUgZCgpIGNvbnN0Owor
ICAgIHZvaWQgc2V0RChkb3VibGUpOworICAgIGRvdWJsZSBlKCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRFKGRvdWJsZSk7CisgICAgZG91YmxlIGYoKSBjb25zdDsKKyAgICB2b2lkIHNldEYoZG91Ymxl
KTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIC8vIENvbnZlcnNpb25zIGJldHdl
ZW4gV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBhbmQgV2ViQ29yZTo6VHJhbnNmb3Jt
YXRpb25NYXRyaXgKKyAgICBleHBsaWNpdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChjb25zdCBX
ZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOworICAgIFdlYkNvcmU6OlRyYW5zZm9ybWF0
aW9uTWF0cml4JiB0b1dlYkNvcmVUcmFuc2Zvcm0oKSBjb25zdDsKKworICAgIC8vIEZJWE1FOiB0
aGVzZSBtYXAgZnVuY3Rpb25zIHNob3VsZCBub3QgZXhpc3QsIHNob3VsZCBiZSB1c2luZyBDQ01h
dGhVdGlsCisgICAgLy8gaW5zdGVhZC4gRXZlbnR1YWxseSBDQ01hdGhVdGlsIGZ1bmN0aW9ucyBj
b3VsZCBiZSBtZXJnZWQgaGVyZSwgYnV0IGl0cworICAgIC8vIG5vdCB5ZXQgdGhlIHJpZ2h0IHRp
bWUgZm9yIHRoYXQuCisgICAgV2ViQ29yZTo6RmxvYXRSZWN0IG1hcFJlY3QoY29uc3QgV2ViQ29y
ZTo6RmxvYXRSZWN0JikgY29uc3Q7CisgICAgV2ViQ29yZTo6SW50UmVjdCBtYXBSZWN0KGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmKSBjb25zdDsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50M0QgbWFw
UG9pbnQoY29uc3QgV2ViQ29yZTo6RmxvYXRQb2ludDNEJikgY29uc3Q7CisgICAgV2ViQ29yZTo6
RmxvYXRQb2ludCBtYXBQb2ludChjb25zdCBXZWJDb3JlOjpGbG9hdFBvaW50JikgY29uc3Q7Cisg
ICAgV2ViQ29yZTo6SW50UG9pbnQgbWFwUG9pbnQoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBj
b25zdDsKKyAgICBXZWJDb3JlOjpGbG9hdFF1YWQgbWFwUXVhZChjb25zdCBXZWJDb3JlOjpGbG9h
dFF1YWQmKSBjb25zdDsKKyAgICBXZWJDb3JlOjpGbG9hdFBvaW50IHByb2plY3RQb2ludChjb25z
dCBXZWJDb3JlOjpGbG9hdFBvaW50JiwgYm9vbCogY2xhbXBlZCA9IDApIGNvbnN0OworI2VuZGlm
CisKK3Byb3RlY3RlZDoKKyAgICBXZWJQcml2YXRlT3duUHRyPFdlYkNvcmU6OlRyYW5zZm9ybWF0
aW9uTWF0cml4PiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZTc3NDZlNjQ3MWU5NDY3NjBkOWE1OThmMDhkZjk5YjRl
ZWMwMjA5Mi4uNThkNmZkMDE5N2EwOTczNmI3MGU0MjM0YjhiMzdmNTQ2NTk5YWYzNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQpAQCAtODI4OSw2ICs4Mjg5LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9zdXBwb3J0L1dlYk1lZGlhU3RyZWFtU291cmNlLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJNZWRpYVN0cmVhbVNvdXJjZXNSZXF1ZXN0LmNw
cCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUaHJlYWRTYWZl
RGF0YS5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXguY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9z
dXBwb3J0L1dlYlVSTC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBv
cnQvV2ViVVJMRXJyb3IuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBw
b3J0L1dlYlVSTFJlcXVlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGYzNzc5MzhiODFhM2Q1NDJlZGM0ZjkyZmM1Y2YxMWE1M2E5Y2Mw
NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL3N1
cHBvcnQvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguY3BwCkBAIC0wLDAgKzEsNDYxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oPgorCisjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKyNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKKy8vIEZJWE1FOiBUaGUgb3ZlcmhlYWQgb2YgYWxsb2NhdGluZyBhIG5l
dyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBpbiB0aGVzZSBjb25zdHJ1Y3RvcnMgbmVlZHMgdG8gZ28g
YXdheSBhcyBzb29uCisvLyAgICAgICAgYXMgcG9zc2libGUuCisKK1dlYlRyYW5zZm9ybWF0aW9u
TWF0cml4OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpCisgICAgOiBtX3ByaXZhdGUobmV3IFRy
YW5zZm9ybWF0aW9uTWF0cml4KCkpCit7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeChkb3VibGUgYSwgZG91YmxlIGIsIGRvdWJsZSBjLCBkb3Vi
bGUgZCwgZG91YmxlIGUsIGRvdWJsZSBmKQorICAgIDogbV9wcml2YXRlKG5ldyBUcmFuc2Zvcm1h
dGlvbk1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKSkKK3sKK30KKworV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXg6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JiB0KQorICAgIDogbV9wcml2YXRlKG5ldyBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgqdC5tX3By
aXZhdGUuZ2V0KCkpKQoreworfQorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCitXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXgoY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHQpCisgICAgOiBtX3ByaXZhdGUobmV3IFRyYW5zZm9ybWF0aW9uTWF0cml4
KHQpKQoreworfQorI2VuZGlmCisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6b3BlcmF0b3I9KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0
KQoreworICAgICptX3ByaXZhdGUuZ2V0KCkgPSAqdC5tX3ByaXZhdGUuZ2V0KCk7CisgICAgcmV0
dXJuICp0aGlzOworfQorCitib29sIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpvcGVyYXRvcj09
KGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0KSBjb25zdAoreworICAgIGJvb2wgaXNF
cXVhbCA9ICgqbV9wcml2YXRlLmdldCgpID09ICp0Lm1fcHJpdmF0ZS5nZXQoKSk7CisgICAgcmV0
dXJuIGlzRXF1YWw7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4IFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4OjpvcGVyYXRvciooY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpIGNv
bnN0Cit7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVzdWx0ID0gKnRoaXM7CisgICAg
cmVzdWx0Lm11bHRpcGx5KHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1dlYlRyYW5zZm9y
bWF0aW9uTWF0cml4IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjppbnZlcnNlKCkgY29uc3QKK3sK
KyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXN1bHQ7CisgICAgKnJlc3VsdC5tX3ByaXZh
dGUuZ2V0KCkgPSBtX3ByaXZhdGUtPmludmVyc2UoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6dG8yZFRy
YW5zZm9ybSgpIGNvbnN0Cit7CisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggcmVzdWx0Owor
ICAgICpyZXN1bHQubV9wcml2YXRlLmdldCgpID0gbV9wcml2YXRlLT50bzJkVHJhbnNmb3JtKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
bXVsdGlwbHkoY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpCit7CisgICAgbV9wcml2
YXRlLT5tdWx0aXBseSgqdC5tX3ByaXZhdGUuZ2V0KCkpOworfQorCit2b2lkIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4OjptYWtlSWRlbnRpdHkoKQoreworICAgIG1fcHJpdmF0ZS0+bWFrZUlkZW50
aXR5KCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnRyYW5zbGF0ZShkb3Vi
bGUgdHgsIGRvdWJsZSB0eSkKK3sKKyAgICBtX3ByaXZhdGUtPnRyYW5zbGF0ZSh0eCwgdHkpOwor
fQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0cmFuc2xhdGUzZChkb3VibGUgdHgs
IGRvdWJsZSB0eSwgZG91YmxlIHR6KQoreworICAgIG1fcHJpdmF0ZS0+dHJhbnNsYXRlM2QodHgs
IHR5LCB0eik7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnRyYW5zbGF0ZVJp
Z2h0M2QoZG91YmxlIHR4LCBkb3VibGUgdHksIGRvdWJsZSB0eikKK3sKKyAgICBtX3ByaXZhdGUt
PnRyYW5zbGF0ZVJpZ2h0M2QodHgsIHR5LCB0eik7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnNjYWxlKGRvdWJsZSBzKQoreworICAgIG1fcHJpdmF0ZS0+c2NhbGUocyk7Cit9
CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNjYWxlTm9uVW5pZm9ybShkb3VibGUg
c3gsIGRvdWJsZSBzeSkKK3sKKyAgICBtX3ByaXZhdGUtPnNjYWxlTm9uVW5pZm9ybShzeCwgc3kp
OworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzY2FsZTNkKGRvdWJsZSBzeCwg
ZG91YmxlIHN5LCBkb3VibGUgc3opCit7CisgICAgbV9wcml2YXRlLT5zY2FsZTNkKHN4LCBzeSwg
c3opOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpyb3RhdGUoZG91YmxlIGFu
Z2xlKQoreworICAgIG1fcHJpdmF0ZS0+cm90YXRlKGFuZ2xlKTsKK30KKwordm9pZCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6cm90YXRlM2QoZG91YmxlIHJ4LCBkb3VibGUgcnksIGRvdWJsZSBy
eikKK3sKKyAgICBtX3ByaXZhdGUtPnJvdGF0ZTNkKHJ4LCByeSwgcnopOworfQorCit2b2lkIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpyb3RhdGUzZChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJs
ZSB6LCBkb3VibGUgYW5nbGUpCit7CisgICAgbV9wcml2YXRlLT5yb3RhdGUzZCh4LCB5LCB6LCBh
bmdsZSk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNrZXdYKGRvdWJsZSBh
bmdsZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNrZXdYKGFuZ2xlKTsKK30KKwordm9pZCBXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeDo6c2tld1koZG91YmxlIGFuZ2xlKQoreworICAgIG1fcHJpdmF0ZS0+
c2tld1koYW5nbGUpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjphcHBseVBl
cnNwZWN0aXZlKGRvdWJsZSBwKQoreworICAgIG1fcHJpdmF0ZS0+YXBwbHlQZXJzcGVjdGl2ZShw
KTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YmxlbmQoY29uc3QgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGZyb20sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBtX3ByaXZh
dGUtPmJsZW5kKCpmcm9tLm1fcHJpdmF0ZS5nZXQoKSwgcHJvZ3Jlc3MpOworfQorCitib29sIFdl
YlRyYW5zZm9ybWF0aW9uTWF0cml4OjpoYXNQZXJzcGVjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+aGFzUGVyc3BlY3RpdmUoKTsKK30KKworYm9vbCBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6aXNJbnZlcnRpYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRl
LT5pc0ludmVydGlibGUoKTsKK30KKworYm9vbCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6aXNC
YWNrRmFjZVZpc2libGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzQmFja0Zh
Y2VWaXNpYmxlKCk7Cit9CisKK2Jvb2wgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmlzSWRlbnRp
dHkoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzSWRlbnRpdHkoKTsKK30KKwor
Ym9vbCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6aXNJZGVudGl0eU9yVHJhbnNsYXRpb24oKSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmlzSWRlbnRpdHlPclRyYW5zbGF0aW9uKCk7
Cit9CisKK2Jvb2wgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OmlzSW50ZWdlclRyYW5zbGF0aW9u
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0ludGVnZXJUcmFuc2xhdGlvbigp
OworfQorCitkb3VibGUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0xMSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+bTExKCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXg6OnNldE0xMShkb3VibGUgZikKK3sKKyAgICBtX3ByaXZhdGUtPnNldE0xMShmKTsKK30K
KworZG91YmxlIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMTIoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPm0xMigpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
OjpzZXRNMTIoZG91YmxlIGYpCit7CisgICAgbV9wcml2YXRlLT5zZXRNMTIoZik7Cit9CisKK2Rv
dWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTEzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9wcml2YXRlLT5tMTMoKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0
TTEzKGRvdWJsZSBmKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TTEzKGYpOworfQorCitkb3VibGUg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0xNCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+bTE0KCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE0xNChk
b3VibGUgZikKK3sKKyAgICBtX3ByaXZhdGUtPnNldE0xNChmKTsKK30KKworZG91YmxlIFdlYlRy
YW5zZm9ybWF0aW9uTWF0cml4OjptMjEoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUt
Pm0yMSgpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNMjEoZG91Ymxl
IGYpCit7CisgICAgbV9wcml2YXRlLT5zZXRNMjEoZik7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zv
cm1hdGlvbk1hdHJpeDo6bTIyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tMjIo
KTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTIyKGRvdWJsZSBmKQor
eworICAgIG1fcHJpdmF0ZS0+c2V0TTIyKGYpOworfQorCitkb3VibGUgV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXg6Om0yMygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bTIzKCk7Cit9
CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE0yMyhkb3VibGUgZikKK3sKKyAg
ICBtX3ByaXZhdGUtPnNldE0yMyhmKTsKK30KKworZG91YmxlIFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4OjptMjQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm0yNCgpOworfQorCit2
b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRNMjQoZG91YmxlIGYpCit7CisgICAgbV9w
cml2YXRlLT5zZXRNMjQoZik7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6
bTMxKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tMzEoKTsKK30KKwordm9pZCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTMxKGRvdWJsZSBmKQoreworICAgIG1fcHJpdmF0
ZS0+c2V0TTMxKGYpOworfQorCitkb3VibGUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om0zMigp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+bTMyKCk7Cit9CisKK3ZvaWQgV2ViVHJh
bnNmb3JtYXRpb25NYXRyaXg6OnNldE0zMihkb3VibGUgZikKK3sKKyAgICBtX3ByaXZhdGUtPnNl
dE0zMihmKTsKK30KKworZG91YmxlIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptMzMoKSBjb25z
dAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm0zMygpOworfQorCit2b2lkIFdlYlRyYW5zZm9y
bWF0aW9uTWF0cml4OjpzZXRNMzMoZG91YmxlIGYpCit7CisgICAgbV9wcml2YXRlLT5zZXRNMzMo
Zik7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTM0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5tMzQoKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6c2V0TTM0KGRvdWJsZSBmKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TTM0KGYpOwor
fQorCitkb3VibGUgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om00MSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+bTQxKCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXg6OnNldE00MShkb3VibGUgZikKK3sKKyAgICBtX3ByaXZhdGUtPnNldE00MShmKTsKK30KKwor
ZG91YmxlIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjptNDIoKSBjb25zdAoreworICAgIHJldHVy
biBtX3ByaXZhdGUtPm00MigpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojpz
ZXRNNDIoZG91YmxlIGYpCit7CisgICAgbV9wcml2YXRlLT5zZXRNNDIoZik7Cit9CisKK2RvdWJs
ZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bTQzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9w
cml2YXRlLT5tNDMoKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0TTQz
KGRvdWJsZSBmKQoreworICAgIG1fcHJpdmF0ZS0+c2V0TTQzKGYpOworfQorCitkb3VibGUgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXg6Om00NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+bTQ0KCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldE00NChkb3Vi
bGUgZikKK3sKKyAgICBtX3ByaXZhdGUtPnNldE00NChmKTsKK30KKworZG91YmxlIFdlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4OjphKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5hKCk7
Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNldEEoZG91YmxlIGEpCit7Cisg
ICAgbV9wcml2YXRlLT5zZXRBKGEpOworfQorCitkb3VibGUgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXg6OmIoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmIoKTsKK30KKwordm9pZCBX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0Qihkb3VibGUgYikKK3sKKyAgICBtX3ByaXZhdGUt
PnNldEIoYik7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6YygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+YygpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybWF0
aW9uTWF0cml4OjpzZXRDKGRvdWJsZSBjKQoreworICAgIG1fcHJpdmF0ZS0+c2V0QyhjKTsKK30K
KworZG91YmxlIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpkKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9wcml2YXRlLT5kKCk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnNl
dEQoZG91YmxlIGQpCit7CisgICAgbV9wcml2YXRlLT5zZXREKGQpOworfQorCitkb3VibGUgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXg6OmUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUt
PmUoKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6c2V0RShkb3VibGUgZSkK
K3sKKyAgICBtX3ByaXZhdGUtPnNldEUoZSk7Cit9CisKK2RvdWJsZSBXZWJUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6ZigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+ZigpOworfQorCit2
b2lkIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4OjpzZXRGKGRvdWJsZSBmKQoreworICAgIG1fcHJp
dmF0ZS0+c2V0RihmKTsKK30KKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4Ojp0b1dlYkNvcmVUcmFuc2Zvcm0o
KSBjb25zdAoreworICAgIHJldHVybiAqbV9wcml2YXRlLmdldCgpOworfQorCitGbG9hdFJlY3Qg
V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1hcFJlY3QocmVjdCk7Cit9CisKK0ludFJl
Y3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tYXBSZWN0KHJlY3QpOworfQorCitGbG9h
dFBvaW50M0QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFBvaW50KGNvbnN0IEZsb2F0UG9p
bnQzRCYgcCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tYXBQb2ludChwKTsKK30K
KworRmxvYXRQb2ludCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6bWFwUG9pbnQoY29uc3QgRmxv
YXRQb2ludCYgcCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tYXBQb2ludChwKTsK
K30KKworSW50UG9pbnQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFBvaW50KGNvbnN0IElu
dFBvaW50JiBwKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1hcFBvaW50KHApOwor
fQorCitGbG9hdFF1YWQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6Om1hcFF1YWQoY29uc3QgRmxv
YXRRdWFkJiBxdWFkKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPm1hcFF1YWQocXVh
ZCk7Cit9CisKK0Zsb2F0UG9pbnQgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXg6OnByb2plY3RQb2lu
dChjb25zdCBGbG9hdFBvaW50JiBwLCBib29sKiBjbGFtcGVkKSBjb25zdAoreworICAgIHJldHVy
biBtX3ByaXZhdGUtPnByb2plY3RQb2ludChwLCBjbGFtcGVkKTsKK30KKyNlbmRpZgorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="147595"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>