<?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>90303</bug_id>
          
          <creation_ts>2012-06-29 13:23:55 -0700</creation_ts>
          <short_desc>[chromium] Create a WebKit::Web* wrapper for the cc animation classes</short_desc>
          <delta_ts>2012-07-05 13:08:34 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</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>
          
          <blocked>90468</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>vollick</reporter>
          <assigned_to>vollick</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>keishi</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>660737</commentid>
    <comment_count>0</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-06-29 13:23:55 -0700</bug_when>
    <thetext>Specifically, we&apos;ll need a wrapper for: 
 - CCActiveAnimation
 - CCKeyframedFloatAnimationCurve and CCFloatKeyframe (likewise for transforms)

In a subsequent patch, GraphicsLayerChromium will create these WebAnimations using AnimationTranslationUtil.

The API&apos;s can be quite minimal, as they should be used only for creating and scheduling new animations -- there should be no need to manipulate a WebAnimation object after it has been created.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660745</commentid>
    <comment_count>1</comment_count>
      <attachid>150248</attachid>
    <who name="">vollick</who>
    <bug_when>2012-06-29 13:28:24 -0700</bug_when>
    <thetext>Created attachment 150248
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660747</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-29 13:32:51 -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>660750</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-29 13:33:14 -0700</bug_when>
    <thetext>Attachment 150248 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/WebKit/chromium/tests/WebAnimationTest.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebKit/chromium/tests/WebAnimationCurveTest.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 2 in 11 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>660753</commentid>
    <comment_count>4</comment_count>
    <who name="">vollick</who>
    <bug_when>2012-06-29 13:36:25 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Attachment 150248 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/Platform/ChangeLog&apos;, u&apos;Source/Platf...&quot; exit_code: 1
&gt; Source/WebKit/chromium/tests/WebAnimationTest.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
&gt; Source/WebKit/chromium/tests/WebAnimationCurveTest.cpp:31:  Alphabetical sorting problem.  [build/include_order] [4]
&gt; Total errors found: 2 in 11 files
&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against check-webkit-style.

This is a style-bot error. It doesn&apos;t like it when &lt;public/WebMyClass.h&gt; is first in the includes in the test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660850</commentid>
    <comment_count>5</comment_count>
      <attachid>150248</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-29 16:18:05 -0700</bug_when>
    <thetext>Comment on attachment 150248
Patch

Attachment 150248 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13117460</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660869</commentid>
    <comment_count>6</comment_count>
      <attachid>150248</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-29 16:57:25 -0700</bug_when>
    <thetext>Comment on attachment 150248
Patch

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

Looks pretty close!  I think the compile error is probably release-only, but still a valid-ish complaint.

&gt; Source/Platform/chromium/public/WebAnimationCurve.h:51
&gt; +struct WebFloatKeyframe {

one header per top-level type in the WebKit API, sorry - http://trac.webkit.org/wiki/ChromiumWebKitAPI.

&gt; Source/WebKit/chromium/src/WebAnimation.cpp:43
&gt; +struct WebAnimationPrivate {
&gt; +    OwnPtr&lt;CCActiveAnimation&gt; animation;
&gt; +};

I think this indirection is not necessary - it&apos;s fine to forward declare a WebCore class outside of #if WEBKIT_IMPLEMENTATION and have a WebPrivateOwnPtr&lt;WebCore::Type&gt; for that type, so long as the header does not have any inline functions that try to create/destroy such an object.  See WebLayer for instance, it just has a WebPrivatePtr&lt;WebCore::LayerChromium&gt; member.  The FooPrivate indirection is useful for when you have additional state you want to store along with the wrapped class.

&gt; Source/WebKit/chromium/src/WebAnimation.cpp:46
&gt; +int WebAnimation::iterations() const { return m_private-&gt;animation-&gt;iterations(); }
&gt; +void WebAnimation::setIterations(int n) { m_private-&gt;animation-&gt;setIterations(n); }

nit: I&apos;d prefer that you expand these out, it&apos;s more typing but it makes the code a lot more readable IMO.

&gt; Source/WebKit/chromium/src/WebAnimation.cpp:57
&gt; +#if WEBKIT_IMPLEMENTATION

the .cpp is all WEBKIT_IMPLEMENTATION, no need for a guard here. #if WEBKIT.. should only appear in headers that may be used by both WebKit and non-WebKit code (i.e. public headers)

&gt; Source/WebKit/chromium/src/WebAnimation.cpp:70
&gt; +    case WebAnimation::WebAnimationTransform: return CCActiveAnimation::Transform;
&gt; +    case WebAnimation::WebAnimationOpacity: return CCActiveAnimation::Opacity;

nit: I would expand out the return statements to their own line, this is a bit hard to read.

For enums, we often make sure that the enum values match, add a compile-time check to AssertMatchingEnums.cpp, and then just static_cast&lt;&gt; between the two enum types (http://trac.webkit.org/wiki/ChromiumWebKitAPI, near the bottom) - it&apos;s much shorter code and a bit easier to read.

&gt; Source/WebKit/chromium/src/WebAnimationCurve.cpp:43
&gt; +struct WebFloatAnimationCurvePrivate {
&gt; +    OwnPtr&lt;WebCore::CCKeyframedFloatAnimationCurve&gt; curve;
&gt; +};
&gt; +
&gt; +struct WebTransformAnimationCurvePrivate {
&gt; +    OwnPtr&lt;WebCore::CCKeyframedTransformAnimationCurve&gt; curve;
&gt; +};

probably don&apos;t need these wrappers either

&gt; Source/WebKit/chromium/src/WebAnimationCurve.cpp:45
&gt; +PassOwnPtr&lt;WebCore::CCTimingFunction&gt; getTimingFunction(WebTimingFunctionType type)

this isn&apos;t really a getter - maybe createTimingFunction() ?

&gt; Source/WebKit/chromium/src/WebAnimationCurve.cpp:48
&gt; +    case WebTimingFunctionEase: return WebCore::CCEaseTimingFunction::create();

put return statements on their own lines, please

&gt; Source/WebKit/chromium/src/WebAnimationCurve.cpp:54
&gt; +    ASSERT_NOT_REACHED();

i think you may still need a return nullptr; statement here to make the compiler happy since ASSERT_NOT_REACHED() is compiled away to nothing in release builds.

the compiler will check that we have a case: for every possible value enum value so the assert isn&apos;t all that useful

&gt; Source/WebKit/chromium/src/WebAnimationCurve.cpp:72
&gt; +#if WEBKIT_IMPLEMENTATION

no #if WEBKIT_IMPLEMENTATION in .cpp files

&gt; Source/WebKit/chromium/src/WebAnimationCurve.cpp:105
&gt; +#if WEBKIT_IMPLEMENTATION

no #if

&gt;&gt; Source/WebKit/chromium/tests/WebAnimationCurveTest.cpp:31
&gt;&gt; +
&gt; 
&gt; Alphabetical sorting problem.  [build/include_order] [4]

I think the style bot is actually correct here - you should sort all the includes (&lt;public/... and &quot;cc/...&quot; together, and I&apos;m pretty sure the &lt;public/WebTran...&gt; includes will sort below the &quot;cc/...&quot; ones

&gt;&gt; Source/WebKit/chromium/tests/WebAnimationTest.cpp:30
&gt;&gt; +
&gt; 
&gt; Alphabetical sorting problem.  [build/include_order] [4]

same here - &lt;public/WebAnimationCurve.h&gt; should be sorted below &quot;cc/CCActiveAnimation.h&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660927</commentid>
    <comment_count>7</comment_count>
      <attachid>150289</attachid>
    <who name="">vollick</who>
    <bug_when>2012-06-29 18:47:34 -0700</bug_when>
    <thetext>Created attachment 150289
Patch

(In reply to comment #6)
&gt; (From update of attachment 150248 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=150248&amp;action=review
&gt;
&gt; Looks pretty close!  I think the compile error is probably release-only, but still a valid-ish complaint.
&gt;
&gt; &gt; Source/Platform/chromium/public/WebAnimationCurve.h:51
&gt; &gt; +struct WebFloatKeyframe {
&gt;
&gt; one header per top-level type in the WebKit API, sorry - http://trac.webkit.org/wiki/ChromiumWebKitAPI.
Fixed.
&gt;
&gt; &gt; Source/WebKit/chromium/src/WebAnimation.cpp:43
&gt; &gt; +struct WebAnimationPrivate {
&gt; &gt; +    OwnPtr&lt;CCActiveAnimation&gt; animation;
&gt; &gt; +};
&gt;
&gt; I think this indirection is not necessary - it&apos;s fine to forward declare a WebCore class outside of #if WEBKIT_IMPLEMENTATION and have a WebPrivateOwnPtr&lt;WebCore::Type&gt; for that type, so long as the header does not have any inline functions that try to create/destroy such an object.  See WebLayer for instance, it just has a WebPrivatePtr&lt;WebCore::LayerChromium&gt; member.  The FooPrivate indirection is useful for when you have additional state you want to store along with the wrapped class.
Sweet. Removed.
&gt;
&gt; &gt; Source/WebKit/chromium/src/WebAnimation.cpp:46
&gt; &gt; +int WebAnimation::iterations() const { return m_private-&gt;animation-&gt;iterations(); }
&gt; &gt; +void WebAnimation::setIterations(int n) { m_private-&gt;animation-&gt;setIterations(n); }
&gt;
&gt; nit: I&apos;d prefer that you expand these out, it&apos;s more typing but it makes the code a lot more readable IMO.
Done.
&gt;
&gt; &gt; Source/WebKit/chromium/src/WebAnimation.cpp:57
&gt; &gt; +#if WEBKIT_IMPLEMENTATION
&gt;
&gt; the .cpp is all WEBKIT_IMPLEMENTATION, no need for a guard here. #if WEBKIT.. should only appear in headers that may be used by both WebKit and non-WebKit code (i.e. public headers)
Removed.
&gt;
&gt; &gt; Source/WebKit/chromium/src/WebAnimation.cpp:70
&gt; &gt; +    case WebAnimation::WebAnimationTransform: return CCActiveAnimation::Transform;
&gt; &gt; +    case WebAnimation::WebAnimationOpacity: return CCActiveAnimation::Opacity;
&gt;
&gt; nit: I would expand out the return statements to their own line, this is a bit hard to read.
This is gone now due to the the next point.
&gt;
&gt; For enums, we often make sure that the enum values match, add a compile-time check to AssertMatchingEnums.cpp, and then just static_cast&lt;&gt; between the two enum types (http://trac.webkit.org/wiki/ChromiumWebKitAPI, near the bottom) - it&apos;s much shorter code and a bit easier to read.
Done.
&gt;
&gt; &gt; Source/WebKit/chromium/src/WebAnimationCurve.cpp:43
&gt; &gt; +struct WebFloatAnimationCurvePrivate {
&gt; &gt; +    OwnPtr&lt;WebCore::CCKeyframedFloatAnimationCurve&gt; curve;
&gt; &gt; +};
&gt; &gt; +
&gt; &gt; +struct WebTransformAnimationCurvePrivate {
&gt; &gt; +    OwnPtr&lt;WebCore::CCKeyframedTransformAnimationCurve&gt; curve;
&gt; &gt; +};
&gt;
&gt; probably don&apos;t need these wrappers either
Removed.
&gt;
&gt; &gt; Source/WebKit/chromium/src/WebAnimationCurve.cpp:45
&gt; &gt; +PassOwnPtr&lt;WebCore::CCTimingFunction&gt; getTimingFunction(WebTimingFunctionType type)
&gt;
&gt; this isn&apos;t really a getter - maybe createTimingFunction() ?
Done (and moved somewhere visible by both the float and keyframe animation curves).
&gt;
&gt; &gt; Source/WebKit/chromium/src/WebAnimationCurve.cpp:48
&gt; &gt; +    case WebTimingFunctionEase: return WebCore::CCEaseTimingFunction::create();
&gt;
&gt; put return statements on their own lines, please
Done.
&gt;
&gt; &gt; Source/WebKit/chromium/src/WebAnimationCurve.cpp:54
&gt; &gt; +    ASSERT_NOT_REACHED();
&gt;
&gt; i think you may still need a return nullptr; statement here to make the compiler happy since ASSERT_NOT_REACHED() is compiled away to nothing in release builds.
Done.
&gt;
&gt; the compiler will check that we have a case: for every possible value enum value so the assert isn&apos;t all that useful
Removed.
&gt;
&gt; &gt; Source/WebKit/chromium/src/WebAnimationCurve.cpp:72
&gt; &gt; +#if WEBKIT_IMPLEMENTATION
&gt;
&gt; no #if WEBKIT_IMPLEMENTATION in .cpp files
Removed.
&gt;
&gt; &gt; Source/WebKit/chromium/src/WebAnimationCurve.cpp:105
&gt; &gt; +#if WEBKIT_IMPLEMENTATION
&gt;
&gt; no #if
Removed.
&gt;
&gt; &gt;&gt; Source/WebKit/chromium/tests/WebAnimationCurveTest.cpp:31
&gt; &gt;&gt; +
&gt; &gt;
&gt; &gt; Alphabetical sorting problem.  [build/include_order] [4]
&gt;
&gt; I think the style bot is actually correct here - you should sort all the includes (&lt;public/... and &quot;cc/...&quot; together, and I&apos;m pretty sure the &lt;public/WebTran...&gt; includes will sort below the &quot;cc/...&quot; ones
Whoops -- I remembered there being a problem before, and just assumed it was the same thing. Switched.
&gt;
&gt; &gt;&gt; Source/WebKit/chromium/tests/WebAnimationTest.cpp:30
&gt; &gt;&gt; +
&gt; &gt;
&gt; &gt; Alphabetical sorting problem.  [build/include_order] [4]
&gt;
&gt; same here - &lt;public/WebAnimationCurve.h&gt; should be sorted below &quot;cc/CCActiveAnimation.h&quot;
Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660969</commentid>
    <comment_count>8</comment_count>
      <attachid>150289</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-29 20:49:05 -0700</bug_when>
    <thetext>Comment on attachment 150289
Patch

Attachment 150289 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13111607</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661034</commentid>
    <comment_count>9</comment_count>
      <attachid>150315</attachid>
    <who name="">vollick</who>
    <bug_when>2012-06-30 06:23:41 -0700</bug_when>
    <thetext>Created attachment 150315
Patch

It looks like you can&apos;t use stuff in WEBKIT_IMPLEMENTATION blocks in unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661035</commentid>
    <comment_count>10</comment_count>
      <attachid>150315</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-30 06:28:26 -0700</bug_when>
    <thetext>Comment on attachment 150315
Patch

Attachment 150315 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13118596</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661040</commentid>
    <comment_count>11</comment_count>
      <attachid>150319</attachid>
    <who name="">vollick</who>
    <bug_when>2012-06-30 07:04:57 -0700</bug_when>
    <thetext>Created attachment 150319
Patch

Was still using code hidden in WEBKIT_IMPLEMENTATION blocks. Should hopefully be fixed now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661041</commentid>
    <comment_count>12</comment_count>
      <attachid>150319</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-30 07:08:23 -0700</bug_when>
    <thetext>Comment on attachment 150319
Patch

Attachment 150319 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13111729</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661066</commentid>
    <comment_count>13</comment_count>
      <attachid>150322</attachid>
    <who name="">vollick</who>
    <bug_when>2012-06-30 12:15:04 -0700</bug_when>
    <thetext>Created attachment 150322
Patch

Another attempt at appeasing the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661163</commentid>
    <comment_count>14</comment_count>
      <attachid>150322</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-07-01 14:20:17 -0700</bug_when>
    <thetext>Comment on attachment 150322
Patch

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

&gt; Source/Platform/chromium/public/WebTimingFunctionType.h:30
&gt; +enum WebTimingFunctionType {

I don&apos;t think this enum really stands on its own - when you know it&apos;s part of an animation system it makes sense, but as just a standalone header in the Platform APi it seems odd.  It looks like it&apos;s only used in subclasses of WebAnimationCurve, could this perhaps be an enum in this class?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661197</commentid>
    <comment_count>15</comment_count>
      <attachid>150345</attachid>
    <who name="">vollick</who>
    <bug_when>2012-07-01 16:51:21 -0700</bug_when>
    <thetext>Created attachment 150345
Patch

(In reply to comment #14)
&gt; (From update of attachment 150322 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=150322&amp;action=review
&gt;
&gt; &gt; Source/Platform/chromium/public/WebTimingFunctionType.h:30
&gt; &gt; +enum WebTimingFunctionType {
&gt;
&gt; I don&apos;t think this enum really stands on its own - when you know it&apos;s part of an animation system it makes sense, but as just a standalone header in the Platform APi it seems odd.  It looks like it&apos;s only used in subclasses of WebAnimationCurve, could this perhaps be an enum in this class?

Sounds good -- done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661215</commentid>
    <comment_count>16</comment_count>
      <attachid>150345</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-07-01 18:24:52 -0700</bug_when>
    <thetext>Comment on attachment 150345
Patch

Great! R=me and bombs away</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661232</commentid>
    <comment_count>17</comment_count>
      <attachid>150345</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-01 19:21:34 -0700</bug_when>
    <thetext>Comment on attachment 150345
Patch

Clearing flags on attachment: 150345

Committed r121650: &lt;http://trac.webkit.org/changeset/121650&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661233</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-01 19:21:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661250</commentid>
    <comment_count>19</comment_count>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-07-01 22:11:45 -0700</bug_when>
    <thetext>Reverted r121650 for reason:

runhooks is failing for chromium win bots and WebAnimationTest.DefaultSettings is crashing

Committed r121655: &lt;http://trac.webkit.org/changeset/121655&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661259</commentid>
    <comment_count>20</comment_count>
    <who name="Keishi Hattori">keishi</who>
    <bug_when>2012-07-01 22:33:46 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; Reverted r121650 for reason:
&gt; 
&gt; runhooks is failing for chromium win bots and WebAnimationTest.DefaultSettings is crashing
&gt; 
&gt; Committed r121655: &lt;http://trac.webkit.org/changeset/121655&gt;

Here is the log for runhooks

(view as text)
gclient runhooks
 in dir C:\b\build\slave\webkit-win-latest-rel\build (timeout 300 secs)
 watching logfiles {}
 argv: [&apos;gclient&apos;, &apos;runhooks&apos;]
 environment:
  APPDATA=C:\Users\chrome-bot\AppData\Roaming
  CHROME_HEADLESS=1
  COMPUTERNAME=BUILD20-M1
  COMSPEC=C:\Windows\system32\cmd.exe
  DEPOT_TOOLS_UPDATE=0
  GYP_DEFINES= component=static_library
  GYP_GENERATOR_FLAGS= msvs_error_on_missing_sources=1
  GYP_MSVS_VERSION=2010
  HOMEDRIVE=C:
  HOMEPATH=\Users\chrome-bot
  LOCALAPPDATA=C:\Users\chrome-bot\AppData\Local
  LOGNAME=chrome-bot
  NUMBER_OF_PROCESSORS=16
  OS=Windows_NT
  PATH=C:\b\depot_tools;C:\b\depot_tools\python_bin;C:\Windows\system32;C:\Windows\system32\WBEM;C:\b\build_internal\tools
  PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
  PROCESSOR_ARCHITECTURE=x86
  PROCESSOR_ARCHITEW6432=AMD64
  PROGRAMFILES=C:\Program Files (x86)
  PROGRAMW6432=C:\Program Files
  PWD=C:\b\build\slave\webkit-win-latest-rel\build
  PYTHONPATH=C:\b\build\site_config;C:\b\build\scripts;C:\b\build\scripts\release;C:\b\build\third_party;C:\b\build_internal\site_config;C:\b\build_internal\symsrc;C:\b\build\slave;C:\b\build\third_party\buildbot_7_12;C:\b\build\third_party\twisted_8_1;
  SYSTEMDRIVE=C:
  SYSTEMROOT=C:\Windows
  TEMP=C:\Users\CHROME~1\AppData\Local\Temp\1
  TMP=C:\Users\CHROME~1\AppData\Local\Temp\1
  USERDOMAIN=GOLO
  USERNAME=chrome-bot
  USERPROFILE=C:\Users\chrome-bot
  VS100COMNTOOLS=c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\
  WINDIR=C:\Windows
 closing stdin
 using PTY: False

________ running &apos;C:\b\depot_tools\python_bin\python.exe src/build/download_nacl_toolchains.py --no-arm-trusted --optional-pnacl --pnacl-version 9044 --file-hash pnacl_linux_x86_32 e8cfbe1ec6e56594a705a8cbb85ba4f2e6a15cbd --file-hash pnacl_linux_x86_64 3ccf6a31f97a5ea779fc08e4150725cacb7204dc --file-hash pnacl_translator 43a6a7469d679f21263aa1f9b99bf0aa8fa64c1f --file-hash pnacl_mac_x86_32 45e0c17aeedb747797a5ff2ef50f3444384d232e --file-hash pnacl_win_x86_32 c0ba23e5a40c89cb1555eabbf9439840e208ea67 --x86-version 8953 --file-hash mac_x86_newlib bc203d116aefbbe38e547f344be6c5b0ab4ce650 --file-hash win_x86_newlib fb74e29baef7185e302a86685a9e61a24cb4ac13 --file-hash linux_x86_newlib 4cbdc174e3d179eb354e52f5021595a8ee3ee5be --file-hash mac_x86 01088800f6e9b1655e937826d26260631141dd78 --file-hash win_x86 2dfdac268b8c32380483361e47399dcea8f0af0e --file-hash linux_x86 114e0c2fbe33adc887377b4121c2e25c17404a9e --save-downloads-dir src/native_client_sdk/src/build_tools/toolchain_archives --keep&apos; in &apos;C:\b\build\slave\webkit-win-latest-rel\build&apos;
C:\b\build\slave\webkit-win-latest-rel\build\src\native_client\toolchain\.tars\toolchain_win_x86.tar.bz2 is already up to date.
win_x86: already up to date.
C:\b\build\slave\webkit-win-latest-rel\build\src\native_client\toolchain\.tars\naclsdk_win_x86.tgz is already up to date.
win_x86_newlib: already up to date.

________ running &apos;C:\b\depot_tools\python_bin\python.exe src/tools/clang/scripts/update.py --mac-only&apos; in &apos;C:\b\build\slave\webkit-win-latest-rel\build&apos;

________ running &apos;C:\b\depot_tools\python_bin\python.exe src/build/win/setup_cygwin_mount.py --win-only&apos; in &apos;C:\b\build\slave\webkit-win-latest-rel\build&apos;

________ running &apos;C:\b\depot_tools\python_bin\python.exe src/build/util/lastchange.py -o src/build/util/LASTCHANGE&apos; in &apos;C:\b\build\slave\webkit-win-latest-rel\build&apos;

________ running &apos;C:\b\depot_tools\python_bin\python.exe src/build/gyp_chromium&apos; in &apos;C:\b\build\slave\webkit-win-latest-rel\build&apos;
Enabled Psyco JIT.
Updating projects from gyp files...
Traceback (most recent call last):
  File &quot;src/build/gyp_chromium&quot;, line 173, in &lt;module&gt;
    sys.exit(gyp.main(args))
  File &quot;C:\b\build\slave\webkit-win-latest-rel\build\src\tools\gyp\pylib\gyp\__init__.py&quot;, line 480, in main
    generator.GenerateOutput(flat_list, targets, data, params)
  File &quot;C:\b\build\slave\webkit-win-latest-rel\build\src\tools\gyp\pylib\gyp\generator\msvs.py&quot;, line 1830, in GenerateOutput
    raise Exception(error_message)
Exception: Missing input files:
src\third_party\WebKit\Source\Platform\Platform.gyp\..\chromium\public\WebAnimation.hchromium\public\WebAnimationCurve.h
Error: Command C:\b\depot_tools\python_bin\python.exe src/build/gyp_chromium returned non-zero exit status 1 in C:\b\build\slave\webkit-win-latest-rel\build
program finished with exit code 2
elapsedTime=49.281000







Here is the log for webkit_unit_tests

(view as text)
python ../../../scripts/slave/runtest.py --target Release --build-dir src/build --build-properties={&quot;blamelist&quot;:&quot;jamesr@google.com&quot;,&quot;branch&quot;:&quot;trunk&quot;,&quot;buildername&quot;:&quot;Webkit Linux 32&quot;,&quot;buildnumber&quot;:&quot;20432&quot;,&quot;got_revision&quot;:&quot;145117&quot;,&quot;mastername&quot;:&quot;chromium.webkit&quot;,&quot;parentname&quot;:&quot;&quot;,&quot;parentslavename&quot;:&quot;&quot;,&quot;revision&quot;:&quot;121651&quot;,&quot;scheduler&quot;:&quot;s6_webkit_rel&quot;,&quot;slavename&quot;:&quot;vm59-m1&quot;} --factory-properties={&quot;archive_webkit_results&quot;:true,&quot;gclient_env&quot;:{&quot;DEPOT_TOOLS_UPDATE&quot;:&quot;0&quot;,&quot;GYP_DEFINES&quot;:&quot; component=static_library&quot;,&quot;GYP_GENERATOR_FLAGS&quot;:&quot;&quot;},&quot;test_results_server&quot;:&quot;test-results.appspot.com&quot;,&quot;webkit_dir&quot;:&quot;third_party/WebKit/Source&quot;} webkit_unit_tests --gtest_print_time
 in dir /mnt/data/b/build/slave/Webkit_Linux_32/build (timeout 600 secs)
 watching logfiles {}
 argv: [&apos;python&apos;, &apos;../../../scripts/slave/runtest.py&apos;, &apos;--target&apos;, &apos;Release&apos;, &apos;--build-dir&apos;, &apos;src/build&apos;, u&apos;--build-properties={&quot;blamelist&quot;:&quot;jamesr@google.com&quot;,&quot;branch&quot;:&quot;trunk&quot;,&quot;buildername&quot;:&quot;Webkit Linux 32&quot;,&quot;buildnumber&quot;:&quot;20432&quot;,&quot;got_revision&quot;:&quot;145117&quot;,&quot;mastername&quot;:&quot;chromium.webkit&quot;,&quot;parentname&quot;:&quot;&quot;,&quot;parentslavename&quot;:&quot;&quot;,&quot;revision&quot;:&quot;121651&quot;,&quot;scheduler&quot;:&quot;s6_webkit_rel&quot;,&quot;slavename&quot;:&quot;vm59-m1&quot;}&apos;, &apos;--factory-properties={&quot;archive_webkit_results&quot;:true,&quot;gclient_env&quot;:{&quot;DEPOT_TOOLS_UPDATE&quot;:&quot;0&quot;,&quot;GYP_DEFINES&quot;:&quot; component=static_library&quot;,&quot;GYP_GENERATOR_FLAGS&quot;:&quot;&quot;},&quot;test_results_server&quot;:&quot;test-results.appspot.com&quot;,&quot;webkit_dir&quot;:&quot;third_party/WebKit/Source&quot;}&apos;, &apos;webkit_unit_tests&apos;, &apos;--gtest_print_time&apos;]
 environment:
  CHROME_HEADLESS=1
  DISPLAY=:0.0
  HOME=/home/chrome-bot
  LANG=en_US.UTF-8
  LOGNAME=chrome-bot
  PAGER=cat
  PATH=/mnt/data/b/depot_tools:/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
  PWD=/mnt/data/b/build/slave/Webkit_Linux_32/build
  PYTHONPATH=/mnt/data/b/build/site_config:/mnt/data/b/build/scripts:/mnt/data/b/build/scripts/release:/mnt/data/b/build/third_party:/mnt/data/b/build_internal/site_config:/mnt/data/b/build_internal/symsrc:/mnt/data/b/build/slave:/mnt/data/b/build/third_party/buildbot_7_12:/mnt/data/b/build/third_party/twisted_8_1:
  SHELL=/bin/bash
  USER=chrome-bot
 closing stdin
 using PTY: True
[Running on builder: &quot;None&quot;]
Disabling sandbox.  Setting environment variable:
  CHROME_DEVEL_SANDBOX=&quot;&quot;
Verifying Xvfb is not running ...
Verifying Xvfb has started...
xdisplaycheck succeeded after 0 seconds.
xdisplaycheck output:
&gt; Connected after 0 retries
...OK
Window manager (icewm) started.

/mnt/data/b/build/slave/Webkit_Linux_32/build/src/build/../sconsbuild/Release/webkit_unit_tests --gtest_print_time
[==========] Running 1039 tests from 288 test cases.
[----------] Global test environment set-up.
[----------] 4 tests from RenderTableRowDeathTest
[ RUN      ] RenderTableRowDeathTest.CanSetRow
[25999:25999:0701/200737:756153634:WARNING:test_suite.cc(97)] AtExitManager: items were added to the callback list by RenderTableRowDeathTest.CanSetRow. Global state should be cleaned up before a test exits.
[       OK ] RenderTableRowDeathTest.CanSetRow (3 ms)
[ RUN      ] RenderTableRowDeathTest.CanSetRowToMaxRowIndex
[       OK ] RenderTableRowDeathTest.CanSetRowToMaxRowIndex (0 ms)
[ RUN      ] RenderTableRowDeathTest.CrashIfRowOverflowOnSetting

[WARNING] testing/gtest/src/gtest-death-test.cc:827:: Death tests use fork(), which is unsafe particularly in a threaded context. For this test, Google Test couldn&apos;t detect the number of threads.
[       OK ] RenderTableRowDeathTest.CrashIfRowOverflowOnSetting (28 ms)
[ RUN      ] RenderTableRowDeathTest.CrashIfSettingUnsetRowIndex

[WARNING] testing/gtest/src/gtest-death-test.cc:827:: Death tests use fork(), which is unsafe particularly in a threaded context. For this test, Google Test couldn&apos;t detect the number of threads.
[       OK ] RenderTableRowDeathTest.CrashIfSettingUnsetRowIndex (27 ms)
[----------] 4 tests from RenderTableRowDeathTest (59 ms total)

[----------] 4 tests from RenderTableCellDeathTest
[ RUN      ] RenderTableCellDeathTest.CanSetColumn
[       OK ] RenderTableCellDeathTest.CanSetColumn (1 ms)
[ RUN      ] RenderTableCellDeathTest.CanSetColumnToMaxColumnIndex
[       OK ] RenderTableCellDeathTest.CanSetColumnToMaxColumnIndex (0 ms)
[ RUN      ] RenderTableCellDeathTest.CrashIfColumnOverflowOnSetting

[WARNING] testing/gtest/src/gtest-death-test.cc:827:: Death tests use fork(), which is unsafe particularly in a threaded context. For this test, Google Test couldn&apos;t detect the number of threads.
[       OK ] RenderTableCellDeathTest.CrashIfColumnOverflowOnSetting (27 ms)
[ RUN      ] RenderTableCellDeathTest.CrashIfSettingUnsetColumnIndex

[WARNING] testing/gtest/src/gtest-death-test.cc:827:: Death tests use fork(), which is unsafe particularly in a threaded context. For this test, Google Test couldn&apos;t detect the number of threads.
[       OK ] RenderTableCellDeathTest.CrashIfSettingUnsetColumnIndex (27 ms)
[----------] 4 tests from RenderTableCellDeathTest (55 ms total)

[----------] 3 tests from WebInputEventFactoryTest
[ RUN      ] WebInputEventFactoryTest.DoubleClick
[       OK ] WebInputEventFactoryTest.DoubleClick (2 ms)
[ RUN      ] WebInputEventFactoryTest.MouseUpClickCount
[       OK ] WebInputEventFactoryTest.MouseUpClickCount (0 ms)
[ RUN      ] WebInputEventFactoryTest.NumPadConversion
[       OK ] WebInputEventFactoryTest.NumPadConversion (0 ms)
[----------] 3 tests from WebInputEventFactoryTest (2 ms total)

[----------] 3 tests from ScrollAnimatorEnabled
[ RUN      ] ScrollAnimatorEnabled.Enabled
[25999:25999:0701/200737:756266720:WARNING:test_suite.cc(97)] AtExitManager: items were added to the callback list by ScrollAnimatorEnabled.Enabled. Global state should be cleaned up before a test exits.
[       OK ] ScrollAnimatorEnabled.Enabled (0 ms)
[ RUN      ] ScrollAnimatorEnabled.flingScrollEncoding
[       OK ] ScrollAnimatorEnabled.flingScrollEncoding (0 ms)
[ RUN      ] ScrollAnimatorEnabled.Disabled
[       OK ] ScrollAnimatorEnabled.Disabled (0 ms)
[----------] 3 tests from ScrollAnimatorEnabled (1 ms total)

[----------] 34 tests from ScrollAnimatorNoneTest
[ RUN      ] ScrollAnimatorNoneTest.CurveMathLinear
[       OK ] ScrollAnimatorNoneTest.CurveMathLinear (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.CurveMathQuadratic
[       OK ] ScrollAnimatorNoneTest.CurveMathQuadratic (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.CurveMathCubic
[       OK ] ScrollAnimatorNoneTest.CurveMathCubic (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.CurveMathQuartic
[       OK ] ScrollAnimatorNoneTest.CurveMathQuartic (1 ms)
[ RUN      ] ScrollAnimatorNoneTest.CurveMathBounce
[       OK ] ScrollAnimatorNoneTest.CurveMathBounce (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.CurveMathCoast
[       OK ] ScrollAnimatorNoneTest.CurveMathCoast (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollOnceLinear
[       OK ] ScrollAnimatorNoneTest.ScrollOnceLinear (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollOnceQuadratic
[       OK ] ScrollAnimatorNoneTest.ScrollOnceQuadratic (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollLongQuadratic
[       OK ] ScrollAnimatorNoneTest.ScrollLongQuadratic (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollQuadraticNoSustain
[       OK ] ScrollAnimatorNoneTest.ScrollQuadraticNoSustain (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollQuadraticSmoothed
[       OK ] ScrollAnimatorNoneTest.ScrollQuadraticSmoothed (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollOnceCubic
[       OK ] ScrollAnimatorNoneTest.ScrollOnceCubic (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollOnceQuartic
[       OK ] ScrollAnimatorNoneTest.ScrollOnceQuartic (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollOnceShort
[       OK ] ScrollAnimatorNoneTest.ScrollOnceShort (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollTwiceQuadratic
[       OK ] ScrollAnimatorNoneTest.ScrollTwiceQuadratic (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollLotsQuadratic
[       OK ] ScrollAnimatorNoneTest.ScrollLotsQuadratic (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollLotsQuadraticSmoothed
[       OK ] ScrollAnimatorNoneTest.ScrollLotsQuadraticSmoothed (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollTwiceCubic
[       OK ] ScrollAnimatorNoneTest.ScrollTwiceCubic (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollLotsCubic
[       OK ] ScrollAnimatorNoneTest.ScrollLotsCubic (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollLotsCubicSmoothed
[       OK ] ScrollAnimatorNoneTest.ScrollLotsCubicSmoothed (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollWheelTrace
[       OK ] ScrollAnimatorNoneTest.ScrollWheelTrace (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollWheelTraceSmoothed
[       OK ] ScrollAnimatorNoneTest.ScrollWheelTraceSmoothed (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.LinuxTrackPadTrace
[       OK ] ScrollAnimatorNoneTest.LinuxTrackPadTrace (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.LinuxTrackPadTraceSmoothed
[       OK ] ScrollAnimatorNoneTest.LinuxTrackPadTraceSmoothed (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollDownToBumper
[       OK ] ScrollAnimatorNoneTest.ScrollDownToBumper (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollUpToBumper
[       OK ] ScrollAnimatorNoneTest.ScrollUpToBumper (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollUpToBumperCoast
[       OK ] ScrollAnimatorNoneTest.ScrollUpToBumperCoast (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollDownToBumperCoast
[       OK ] ScrollAnimatorNoneTest.ScrollDownToBumperCoast (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.VaryingInputsEquivalency
[       OK ] ScrollAnimatorNoneTest.VaryingInputsEquivalency (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.VaryingInputsEquivalencyCoast
[       OK ] ScrollAnimatorNoneTest.VaryingInputsEquivalencyCoast (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.VaryingInputsEquivalencyCoastLarge
[       OK ] ScrollAnimatorNoneTest.VaryingInputsEquivalencyCoastLarge (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.VaryingInputsEquivalencyCoastSteep
[       OK ] ScrollAnimatorNoneTest.VaryingInputsEquivalencyCoastSteep (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ScrollStopInMiddle
[       OK ] ScrollAnimatorNoneTest.ScrollStopInMiddle (0 ms)
[ RUN      ] ScrollAnimatorNoneTest.ReverseInMiddle
[       OK ] ScrollAnimatorNoneTest.ReverseInMiddle (0 ms)
[----------] 34 tests from ScrollAnimatorNoneTest (2 ms total)

[----------] 9 tests from WebViewTest
[ RUN      ] WebViewTest.FocusIsInactive
[       OK ] WebViewTest.FocusIsInactive (15 ms)
[ RUN      ] WebViewTest.ActiveState
[       OK ] WebViewTest.ActiveState (1 ms)
[ RUN      ] WebViewTest.AutoResizeMinimumSize
[25999:25999:0701/200737:756297549:WARNING:test_suite.cc(97)] AtExitManager: items were added to the callback list by WebViewTest.AutoResizeMinimumSize. Global state should be cleaned up before a test exits.
[       OK ] WebViewTest.AutoResizeMinimumSize (12 ms)
[ RUN      ] WebViewTest.AutoResizeHeightOverflowAndFixedWidth
[       OK ] WebViewTest.AutoResizeHeightOverflowAndFixedWidth (6 ms)
[ RUN      ] WebViewTest.AutoResizeFixedHeightAndWidthOverflow
[       OK ] WebViewTest.AutoResizeFixedHeightAndWidthOverflow (6 ms)
[ RUN      ] WebViewTest.AutoResizeInBetweenSizes
[       OK ] WebViewTest.AutoResizeInBetweenSizes (5 ms)
[ RUN      ] WebViewTest.AutoResizeOverflowSizes
[       OK ] WebViewTest.AutoResizeOverflowSizes (7 ms)
[ RUN      ] WebViewTest.AutoResizeMaxSize
[       OK ] WebViewTest.AutoResizeMaxSize (5 ms)
[ RUN      ] WebViewTest.SetEditableSelectionOffsetsAndTextInputInfo
[       OK ] WebViewTest.SetEditableSelectionOffsetsAndTextInputInfo (34 ms)
[----------] 9 tests from WebViewTest (91 ms total)

[----------] 1 test from WebURLResponseTest
[ RUN      ] WebURLResponseTest.ExtraData
[       OK ] WebURLResponseTest.ExtraData (0 ms)
[----------] 1 test from WebURLResponseTest (0 ms total)

[----------] 1 test from WebURLRequestTest
[ RUN      ] WebURLRequestTest.ExtraData
[       OK ] WebURLRequestTest.ExtraData (0 ms)
[----------] 1 test from WebURLRequestTest (0 ms total)

[----------] 13 tests from WebTransformOperationTest
[ RUN      ] WebTransformOperationTest.transformTypesAreUnique
[       OK ] WebTransformOperationTest.transformTypesAreUnique (0 ms)
[ RUN      ] WebTransformOperationTest.matchTypesSameLength
[       OK ] WebTransformOperationTest.matchTypesSameLength (0 ms)
[ RUN      ] WebTransformOperationTest.matchTypesDifferentLength
[       OK ] WebTransformOperationTest.matchTypesDifferentLength (0 ms)
[ RUN      ] WebTransformOperationTest.applyTranslate
[       OK ] WebTransformOperationTest.applyTranslate (0 ms)
[ RUN      ] WebTransformOperationTest.applyRotate
[       OK ] WebTransformOperationTest.applyRotate (0 ms)
[ RUN      ] WebTransformOperationTest.applyScale
[       OK ] WebTransformOperationTest.applyScale (0 ms)
[ RUN      ] WebTransformOperationTest.applySkew
[       OK ] WebTransformOperationTest.applySkew (0 ms)
[ RUN      ] WebTransformOperationTest.applyPerspective
[       OK ] WebTransformOperationTest.applyPerspective (0 ms)
[ RUN      ] WebTransformOperationTest.applyMatrix
[       OK ] WebTransformOperationTest.applyMatrix (0 ms)
[ RUN      ] WebTransformOperationTest.applyOrder
[       OK ] WebTransformOperationTest.applyOrder (0 ms)
[ RUN      ] WebTransformOperationTest.blendOrder
[       OK ] WebTransformOperationTest.blendOrder (0 ms)
[ RUN      ] WebTransformOperationTest.blendProgress
[       OK ] WebTransformOperationTest.blendProgress (0 ms)
[ RUN      ] WebTransformOperationTest.blendWhenTypesDoNotMatch
[       OK ] WebTransformOperationTest.blendWhenTypesDoNotMatch (0 ms)
[----------] 13 tests from WebTransformOperationTest (0 ms total)

[----------] 39 tests from WebTransformationMatrixTest
[ RUN      ] WebTransformationMatrixTest.verifyDefaultConstructorCreatesIdentityMatrix
[       OK ] WebTransformationMatrixTest.verifyDefaultConstructorCreatesIdentityMatrix (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyConstructorFor2dElements
[       OK ] WebTransformationMatrixTest.verifyConstructorFor2dElements (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyConstructorForAllElements
[       OK ] WebTransformationMatrixTest.verifyConstructorForAllElements (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyCopyConstructor
[       OK ] WebTransformationMatrixTest.verifyCopyConstructor (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyMatrixInversion
[       OK ] WebTransformationMatrixTest.verifyMatrixInversion (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyTo2DTransform
[       OK ] WebTransformationMatrixTest.verifyTo2DTransform (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyAssignmentOperator
[       OK ] WebTransformationMatrixTest.verifyAssignmentOperator (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyEqualsBooleanOperator
[       OK ] WebTransformationMatrixTest.verifyEqualsBooleanOperator (1 ms)
[ RUN      ] WebTransformationMatrixTest.verifyMultiplyOperator
[       OK ] WebTransformationMatrixTest.verifyMultiplyOperator (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyMatrixMultiplication
[       OK ] WebTransformationMatrixTest.verifyMatrixMultiplication (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyMakeIdentiy
[       OK ] WebTransformationMatrixTest.verifyMakeIdentiy (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyTranslate
[       OK ] WebTransformationMatrixTest.verifyTranslate (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyTranslate3d
[       OK ] WebTransformationMatrixTest.verifyTranslate3d (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyTranslateRight3d
[       OK ] WebTransformationMatrixTest.verifyTranslateRight3d (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyScale
[       OK ] WebTransformationMatrixTest.verifyScale (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyNonUniformScale
[       OK ] WebTransformationMatrixTest.verifyNonUniformScale (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyScale3d
[       OK ] WebTransformationMatrixTest.verifyScale3d (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyRotate
[       OK ] WebTransformationMatrixTest.verifyRotate (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyRotate3d
[       OK ] WebTransformationMatrixTest.verifyRotate3d (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyRotate3dOrderOfCompositeRotations
[       OK ] WebTransformationMatrixTest.verifyRotate3dOrderOfCompositeRotations (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyRotateAxisAngle3d
[       OK ] WebTransformationMatrixTest.verifyRotateAxisAngle3d (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyRotateAxisAngle3dForArbitraryAxis
[       OK ] WebTransformationMatrixTest.verifyRotateAxisAngle3dForArbitraryAxis (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyRotateAxisAngle3dForDegenerateAxis
[       OK ] WebTransformationMatrixTest.verifyRotateAxisAngle3dForDegenerateAxis (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifySkewX
[       OK ] WebTransformationMatrixTest.verifySkewX (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifySkewY
[       OK ] WebTransformationMatrixTest.verifySkewY (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyApplyPerspective
[       OK ] WebTransformationMatrixTest.verifyApplyPerspective (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyHasPerspective
[       OK ] WebTransformationMatrixTest.verifyHasPerspective (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyIsInvertible
[       OK ] WebTransformationMatrixTest.verifyIsInvertible (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyIsIdentity
[       OK ] WebTransformationMatrixTest.verifyIsIdentity (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyIsIdentityOrTranslation
[       OK ] WebTransformationMatrixTest.verifyIsIdentityOrTranslation (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyIsIntegerTranslation
[       OK ] WebTransformationMatrixTest.verifyIsIntegerTranslation (2 ms)
[ RUN      ] WebTransformationMatrixTest.verifyBlendForTranslation
[       OK ] WebTransformationMatrixTest.verifyBlendForTranslation (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyBlendForScale
[       OK ] WebTransformationMatrixTest.verifyBlendForScale (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyBlendForSkewX
[       OK ] WebTransformationMatrixTest.verifyBlendForSkewX (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyBlendForSkewY
[       OK ] WebTransformationMatrixTest.verifyBlendForSkewY (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyBlendForRotationAboutX
[       OK ] WebTransformationMatrixTest.verifyBlendForRotationAboutX (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyBlendForRotationAboutY
[       OK ] WebTransformationMatrixTest.verifyBlendForRotationAboutY (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyBlendForRotationAboutZ
[       OK ] WebTransformationMatrixTest.verifyBlendForRotationAboutZ (0 ms)
[ RUN      ] WebTransformationMatrixTest.verifyBlendForCompositeTransform
[       OK ] WebTransformationMatrixTest.verifyBlendForCompositeTransform (0 ms)
[----------] 39 tests from WebTransformationMatrixTest (4 ms total)

[----------] 13 tests from WebTransformAnimationCurveTest
[ RUN      ] WebTransformAnimationCurveTest.OneTransformKeyframe
[       OK ] WebTransformAnimationCurveTest.OneTransformKeyframe (0 ms)
[ RUN      ] WebTransformAnimationCurveTest.TwoTransformKeyframe
[       OK ] WebTransformAnimationCurveTest.TwoTransformKeyframe (0 ms)
[ RUN      ] WebTransformAnimationCurveTest.ThreeTransformKeyframe
[       OK ] WebTransformAnimationCurveTest.ThreeTransformKeyframe (0 ms)
[ RUN      ] WebTransformAnimationCurveTest.RepeatedTransformKeyTimes
[       OK ] WebTransformAnimationCurveTest.RepeatedTransformKeyTimes (0 ms)
[ RUN      ] WebTransformAnimationCurveTest.UnsortedKeyframes
[       OK ] WebTransformAnimationCurveTest.UnsortedKeyframes (0 ms)
[ RUN      ] WebTransformAnimationCurveTest.CubicBezierTimingFunction
[       OK ] WebTransformAnimationCurveTest.CubicBezierTimingFunction (0 ms)
[ RUN      ] WebTransformAnimationCurveTest.EaseTimingFunction
[       OK ] WebTransformAnimationCurveTest.EaseTimingFunction (0 ms)
[ RUN      ] WebTransformAnimationCurveTest.LinearTimingFunction
[       OK ] WebTransformAnimationCurveTest.LinearTimingFunction (0 ms)
[ RUN      ] WebTransformAnimationCurveTest.EaseInTimingFunction
[       OK ] WebTransformAnimationCurveTest.EaseInTimingFunction (0 ms)
[ RUN      ] WebTransformAnimationCurveTest.EaseOutTimingFunction
[       OK ] WebTransformAnimationCurveTest.EaseOutTimingFunction (0 ms)
[ RUN      ] WebTransformAnimationCurveTest.EaseInOutTimingFunction
[       OK ] WebTransformAnimationCurveTest.EaseInOutTimingFunction (0 ms)
[ RUN      ] WebTransformAnimationCurveTest.CustomBezierTimingFunction
[       OK ] WebTransformAnimationCurveTest.CustomBezierTimingFunction (0 ms)
[ RUN      ] WebTransformAnimationCurveTest.DefaultTimingFunction
[       OK ] WebTransformAnimationCurveTest.DefaultTimingFunction (0 ms)
[----------] 13 tests from WebTransformAnimationCurveTest (0 ms total)

[----------] 5 tests from WebSocketExtensionDispatcherTest
[ RUN      ] WebSocketExtensionDispatcherTest.TestSingle
[       OK ] WebSocketExtensionDispatcherTest.TestSingle (0 ms)
[ RUN      ] WebSocketExtensionDispatcherTest.TestParameters
[       OK ] WebSocketExtensionDispatcherTest.TestParameters (0 ms)
[ RUN      ] WebSocketExtensionDispatcherTest.TestMultiple
[       OK ] WebSocketExtensionDispatcherTest.TestMultiple (0 ms)
[ RUN      ] WebSocketExtensionDispatcherTest.TestQuotedString
[       OK ] WebSocketExtensionDispatcherTest.TestQuotedString (0 ms)
[ RUN      ] WebSocketExtensionDispatcherTest.TestInvalid
[       OK ] WebSocketExtensionDispatcherTest.TestInvalid (0 ms)
[----------] 5 tests from WebSocketExtensionDispatcherTest (0 ms total)

[----------] 5 tests from WebSocketDeflaterTest
[ RUN      ] WebSocketDeflaterTest.TestCompressHello
[       OK ] WebSocketDeflaterTest.TestCompressHello (0 ms)
[ RUN      ] WebSocketDeflaterTest.TestMultipleAddBytesCalls
[       OK ] WebSocketDeflaterTest.TestMultipleAddBytesCalls (0 ms)
[ RUN      ] WebSocketDeflaterTest.TestNoContextTakeOver
[       OK ] WebSocketDeflaterTest.TestNoContextTakeOver (0 ms)
[ RUN      ] WebSocketDeflaterTest.TestWindowBits
[       OK ] WebSocketDeflaterTest.TestWindowBits (0 ms)
[ RUN      ] WebSocketDeflaterTest.TestLargeData
[       OK ] WebSocketDeflaterTest.TestLargeData (366 ms)
[----------] 5 tests from WebSocketDeflaterTest (366 ms total)

[----------] 2 tests from WebPageSerializerTest
[ RUN      ] WebPageSerializerTest.HTMLNodes
[25999:26007:0701/200738:756734875:WARNING:proxy_service.cc(966)] PAC support disabled because there is no system implementation
[25999:25999:0701/200738:756738034:WARNING:test_suite.cc(97)] AtExitManager: items were added to the callback list by WebPageSerializerTest.HTMLNodes. Global state should be cleaned up before a test exits.
[       OK ] WebPageSerializerTest.HTMLNodes (8 ms)
[ RUN      ] WebPageSerializerTest.MultipleFrames
[       OK ] WebPageSerializerTest.MultipleFrames (19 ms)
[----------] 2 tests from WebPageSerializerTest (27 ms total)

[----------] 5 tests from WebPageNewSerializeTest
[ RUN      ] WebPageNewSerializeTest.PageWithFrames
[       OK ] WebPageNewSerializeTest.PageWithFrames (9 ms)
[ RUN      ] WebPageNewSerializeTest.FAILS_CSSResources
[       OK ] WebPageNewSerializeTest.FAILS_CSSResources (17 ms)
[ RUN      ] WebPageNewSerializeTest.BlankFrames
[       OK ] WebPageNewSerializeTest.BlankFrames (30 ms)
[ RUN      ] WebPageNewSerializeTest.SerializeXMLHasRightDeclaration
[       OK ] WebPageNewSerializeTest.SerializeXMLHasRightDeclaration (1 ms)
[ RUN      ] WebPageNewSerializeTest.FAILS_TestMHTMLEncoding
[       OK ] WebPageNewSerializeTest.FAILS_TestMHTMLEncoding (10 ms)
[----------] 5 tests from WebPageNewSerializeTest (67 ms total)

[----------] 4 tests from WebMediaPlayerClientImplTest
[ RUN      ] WebMediaPlayerClientImplTest.InitialNullVideoClient
[       OK ] WebMediaPlayerClientImplTest.InitialNullVideoClient (0 ms)
[ RUN      ] WebMediaPlayerClientImplTest.SetAndUnsetVideoClient
[       OK ] WebMediaPlayerClientImplTest.SetAndUnsetVideoClient (0 ms)
[ RUN      ] WebMediaPlayerClientImplTest.DestroyProvider
[       OK ] WebMediaPlayerClientImplTest.DestroyProvider (0 ms)
[ RUN      ] WebMediaPlayerClientImplTest.SetMultipleVideoClients
[       OK ] WebMediaPlayerClientImplTest.SetMultipleVideoClients (0 ms)
[----------] 4 tests from WebMediaPlayerClientImplTest (0 ms total)

[----------] 1 test from WebLayerTreeViewSingleThreadTest
[ RUN      ] WebLayerTreeViewSingleThreadTest.InstrumentationCallbacks
[       OK ] WebLayerTreeViewSingleThreadTest.InstrumentationCallbacks (0 ms)
[----------] 1 test from WebLayerTreeViewSingleThreadTest (0 ms total)

[----------] 1 test from WebLayerTreeViewThreadedTest
[ RUN      ] WebLayerTreeViewThreadedTest.InstrumentationCallbacks
[       OK ] WebLayerTreeViewThreadedTest.InstrumentationCallbacks (1 ms)
[----------] 1 test from WebLayerTreeViewThreadedTest (1 ms total)

[----------] 2 tests from WebLayerTest
[ RUN      ] WebLayerTest.Client
[       OK ] WebLayerTest.Client (1 ms)
[ RUN      ] WebLayerTest.Hierarchy
[       OK ] WebLayerTest.Hierarchy (0 ms)
[----------] 2 tests from WebLayerTest (1 ms total)

[----------] 20 tests from WebFrameTest
[ RUN      ] WebFrameTest.ContentText
[       OK ] WebFrameTest.ContentText (4 ms)
[ RUN      ] WebFrameTest.FrameForEnteredContext
[       OK ] WebFrameTest.FrameForEnteredContext (9 ms)
[ RUN      ] WebFrameTest.FormWithNullFrame
[       OK ] WebFrameTest.FormWithNullFrame (1 ms)
[ RUN      ] WebFrameTest.ChromePageJavascript
[       OK ] WebFrameTest.ChromePageJavascript (5 ms)
[ RUN      ] WebFrameTest.ChromePageNoJavascript
[       OK ] WebFrameTest.ChromePageNoJavascript (1 ms)
[ RUN      ] WebFrameTest.DispatchMessageEventWithOriginCheck
[       OK ] WebFrameTest.DispatchMessageEventWithOriginCheck (5 ms)
[ RUN      ] WebFrameTest.DeviceScaleFactorUsesDefaultWithoutViewportTag
[       OK ] WebFrameTest.DeviceScaleFactorUsesDefaultWithoutViewportTag (2 ms)
[ RUN      ] WebFrameTest.FixedLayoutInitializeAtMinimumPageScale
[       OK ] WebFrameTest.FixedLayoutInitializeAtMinimumPageScale (1 ms)
[ RUN      ] WebFrameTest.CanOverrideMaximumScaleFactor
[       OK ] WebFrameTest.CanOverrideMaximumScaleFactor (2 ms)
[ RUN      ] WebFrameTest.DivAutoZoomParamsTest
[       OK ] WebFrameTest.DivAutoZoomParamsTest (3 ms)
[ RUN      ] WebFrameTest.ReloadDoesntSetRedirect
[       OK ] WebFrameTest.ReloadDoesntSetRedirect (2 ms)
[ RUN      ] WebFrameTest.ReloadWithOverrideURLPreservesState
[       OK ] WebFrameTest.ReloadWithOverrideURLPreservesState (6 ms)
[ RUN      ] WebFrameTest.IframeRedirect
[       OK ] WebFrameTest.IframeRedirect (12 ms)
[ RUN      ] WebFrameTest.ClearFocusedNodeTest
[       OK ] WebFrameTest.ClearFocusedNodeTest (10 ms)
[ RUN      ] WebFrameTest.ContextNotificationsLoadUnload
[       OK ] WebFrameTest.ContextNotificationsLoadUnload (8 ms)
[ RUN      ] WebFrameTest.ContextNotificationsReload
[       OK ] WebFrameTest.ContextNotificationsReload (15 ms)
[ RUN      ] WebFrameTest.ContextNotificationsIsolatedWorlds
[       OK ] WebFrameTest.ContextNotificationsIsolatedWorlds (26 ms)
[ RUN      ] WebFrameTest.FindInPage
[       OK ] WebFrameTest.FindInPage (5 ms)
[ RUN      ] WebFrameTest.GetContentAsPlainText
[       OK ] WebFrameTest.GetContentAsPlainText (3 ms)
[ RUN      ] WebFrameTest.GetFullHtmlOfPage
[       OK ] WebFrameTest.GetFullHtmlOfPage (2 ms)
[----------] 20 tests from WebFrameTest (122 ms total)

[----------] 13 tests from WebFloatAnimationCurveTest
[ RUN      ] WebFloatAnimationCurveTest.OneFloatKeyframe
[       OK ] WebFloatAnimationCurveTest.OneFloatKeyframe (0 ms)
[ RUN      ] WebFloatAnimationCurveTest.TwoFloatKeyframe
[       OK ] WebFloatAnimationCurveTest.TwoFloatKeyframe (0 ms)
[ RUN      ] WebFloatAnimationCurveTest.ThreeFloatKeyframe
[       OK ] WebFloatAnimationCurveTest.ThreeFloatKeyframe (0 ms)
[ RUN      ] WebFloatAnimationCurveTest.RepeatedFloatKeyTimes
[       OK ] WebFloatAnimationCurveTest.RepeatedFloatKeyTimes (0 ms)
[ RUN      ] WebFloatAnimationCurveTest.UnsortedKeyframes
[       OK ] WebFloatAnimationCurveTest.UnsortedKeyframes (0 ms)
[ RUN      ] WebFloatAnimationCurveTest.CubicBezierTimingFunction
[       OK ] WebFloatAnimationCurveTest.CubicBezierTimingFunction (0 ms)
[ RUN      ] WebFloatAnimationCurveTest.EaseTimingFunction
[       OK ] WebFloatAnimationCurveTest.EaseTimingFunction (0 ms)
[ RUN      ] WebFloatAnimationCurveTest.LinearTimingFunction
[       OK ] WebFloatAnimationCurveTest.LinearTimingFunction (0 ms)
[ RUN      ] WebFloatAnimationCurveTest.EaseInTimingFunction
[       OK ] WebFloatAnimationCurveTest.EaseInTimingFunction (0 ms)
[ RUN      ] WebFloatAnimationCurveTest.EaseOutTimingFunction
[       OK ] WebFloatAnimationCurveTest.EaseOutTimingFunction (0 ms)
[ RUN      ] WebFloatAnimationCurveTest.EaseInOutTimingFunction
[       OK ] WebFloatAnimationCurveTest.EaseInOutTimingFunction (1 ms)
[ RUN      ] WebFloatAnimationCurveTest.CustomBezierTimingFunction
[       OK ] WebFloatAnimationCurveTest.CustomBezierTimingFunction (0 ms)
[ RUN      ] WebFloatAnimationCurveTest.DefaultTimingFunction
[       OK ] WebFloatAnimationCurveTest.DefaultTimingFunction (0 ms)
[----------] 13 tests from WebFloatAnimationCurveTest (1 ms total)

[----------] 1 test from WebCompositorInputHandlerImpl
[ RUN      ] WebCompositorInputHandlerImpl.fromIdentifier
[       OK ] WebCompositorInputHandlerImpl.fromIdentifier (0 ms)
[----------] 1 test from WebCompositorInputHandlerImpl (0 ms total)

[----------] 9 tests from WebCompositorInputHandlerImplTest
[ RUN      ] WebCompositorInputHandlerImplTest.gestureScrollStarted
[       OK ] WebCompositorInputHandlerImplTest.gestureScrollStarted (0 ms)
[ RUN      ] WebCompositorInputHandlerImplTest.gestureScrollOnMainThread
[       OK ] WebCompositorInputHandlerImplTest.gestureScrollOnMainThread (0 ms)
[ RUN      ] WebCompositorInputHandlerImplTest.gestureScrollIgnored
[       OK ] WebCompositorInputHandlerImplTest.gestureScrollIgnored (0 ms)
[ RUN      ] WebCompositorInputHandlerImplTest.gesturePinch
[       OK ] WebCompositorInputHandlerImplTest.gesturePinch (0 ms)
[ RUN      ] WebCompositorInputHandlerImplTest.gestureFlingStarted
[       OK ] WebCompositorInputHandlerImplTest.gestureFlingStarted (0 ms)
[ RUN      ] WebCompositorInputHandlerImplTest.gestureFlingFailed
[       OK ] WebCompositorInputHandlerImplTest.gestureFlingFailed (0 ms)
[ RUN      ] WebCompositorInputHandlerImplTest.gestureFlingIgnored
[       OK ] WebCompositorInputHandlerImplTest.gestureFlingIgnored (0 ms)
[ RUN      ] WebCompositorInputHandlerImplTest.gestureFlingAnimates
[       OK ] WebCompositorInputHandlerImplTest.gestureFlingAnimates (0 ms)
[ RUN      ] WebCompositorInputHandlerImplTest.gestureFlingTransferResets
[       OK ] WebCompositorInputHandlerImplTest.gestureFlingTransferResets (0 ms)
[----------] 9 tests from WebCompositorInputHandlerImplTest (1 ms total)

[----------] 2 tests from WebAnimationTest
[ RUN      ] WebAnimationTest.DefaultSettings
	base::debug::StackTrace::StackTrace() [0x88aabc2]
	base::(anonymous namespace)::StackDumpSignalHandler() [0x88a249d]
	0xb7774400
	(anonymous namespace)::WebAnimationTest_DefaultSettings_Test::TestBody() [0x86bea52]
	testing::internal::HandleExceptionsInMethodIfSupported&lt;&gt;() [0x8886ee2]
	testing::Test::Run() [0x8887d81]
	testing::TestInfo::Run() [0x8887e32]
	testing::TestCase::Run() [0x8887f74]
	testing::internal::UnitTestImpl::RunAllTests() [0x888828e]
	testing::UnitTest::Run() [0x8886e6e]
	base::TestSuite::Run() [0x88b23fb]
	main [0x805c073]
	0xb6a71bd6
	0x805bf51
Stopping Xvfb with pid 25996 ...
Xvfb pid file removed
4 new files were left in /tmp: Fix the tests to clean up themselves.
program finished with exit code 1
elapsedTime=1.128414</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663153</commentid>
    <comment_count>21</comment_count>
      <attachid>150840</attachid>
    <who name="">vollick</who>
    <bug_when>2012-07-04 13:57:14 -0700</bug_when>
    <thetext>Created attachment 150840
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663698</commentid>
    <comment_count>22</comment_count>
      <attachid>150840</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-05 13:08:15 -0700</bug_when>
    <thetext>Comment on attachment 150840
Patch for landing

Clearing flags on attachment: 150840

Committed r121922: &lt;http://trac.webkit.org/changeset/121922&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>663699</commentid>
    <comment_count>23</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-05 13:08:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150248</attachid>
            <date>2012-06-29 13:28:24 -0700</date>
            <delta_ts>2012-06-29 18:47:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90303-20120629162823.patch</filename>
            <type>text/plain</type>
            <size>43439</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA4MmU5ZDRiOGI5MTlm
YWYyM2JlOWE2MWExOTAxZWNlYWJlN2QzZDk0Li41MzQ1YTIwY2Q1ZDE3YjEzMGIyZWU5YTY5YzRm
ZTg3ZjAwNTI0ZThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNCBAQAorMjAxMi0wNi0yOSAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IENyZWF0ZSBhIFdlYktpdDo6V2ViKiB3cmFwcGVyIGZvciB0aGUgY2MgYW5pbWF0aW9uIGNsYXNz
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMzAz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0
Zm9ybS5neXBpOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb24uaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJB
bmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb246OldlYkFuaW1hdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6fldlYkFuaW1hdGlvbik6CisgICAgICAg
ICogY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEtl
eWZyYW1lOjpXZWJGbG9hdEtleWZyYW1lKToKKyAgICAgICAgKFdlYkZsb2F0S2V5ZnJhbWUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1LZXlmcmFtZTo6V2ViVHJhbnNmb3JtS2V5ZnJh
bWUpOgorICAgICAgICAoV2ViVHJhbnNmb3JtS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQW5pbWF0
aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb25DdXJ2ZTo6fldlYkFuaW1h
dGlvbkN1cnZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uQ3VydmU6OldlYkFuaW1h
dGlvbkN1cnZlKToKKyAgICAgICAgKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6fldlYkZsb2F0QW5pbWF0
aW9uQ3VydmUpOgorICAgICAgICAoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6V2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
fldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKToKKwogMjAxMi0wNi0yOCAgQWRyaWVubmUgV2Fs
a2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0gU3BsaXQgV2ViU2Ny
b2xsYmFyIGludG8gV2ViUGx1Z2luU2Nyb2xsYmFyIGFuZCBXZWJTY3JvbGxiYXIKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKaW5kZXggMmY2MDJiYzgwOTI4Nzk0YmE0ZDIzZjkzNDY3NjcwZmQzMDAx
MTFhOS4uNjNiMTE0ZDZlZWYwMDMxNzU3ZTAyYjJmNmZiNDI2Njc3NTk0NTRjOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMi0wNi0yOSAgSWFuIFZvbGxp
Y2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBh
IFdlYktpdDo6V2ViKiB3cmFwcGVyIGZvciB0aGUgY2MgYW5pbWF0aW9uIGNsYXNzZXMKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMzAzCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgor
ICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHNyYy9XZWJBbmltYXRpb24uY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJBbmltYXRpb25Qcml2YXRlKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjppdGVyYXRpb25zKToKKyAgICAgICAgKFdl
YktpdDo6V2ViQW5pbWF0aW9uOjpzZXRJdGVyYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QW5pbWF0aW9uOjpzdGFydFRpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb246OnNl
dFN0YXJ0VGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6dGltZU9mZnNldCk6
CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6c2V0VGltZU9mZnNldCk6CisgICAgICAg
IChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6YWx0ZXJuYXRlc0RpcmVjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYkFuaW1hdGlvbjo6c2V0QWx0ZXJuYXRlc0RpcmVjdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYkFuaW1hdGlvbjo6dG9DQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OnRvQ0NBY3RpdmVBbmltYXRpb25UYXJnZXRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkFuaW1hdGlvbjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlv
bjo6ZGVzdHJveSk6CisgICAgICAgICogc3JjL1dlYkFuaW1hdGlvbkN1cnZlLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVByaXZh
dGUpOgorICAgICAgICAoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVQcml2YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6Z2V0VGltaW5nRnVuY3Rpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9h
dEFuaW1hdGlvbkN1cnZlOjphZGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlOjp0b0NDQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFu
aW1hdGlvbkN1cnZlOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZTo6ZGVzdHJveSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlOjphZGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZTo6dG9DQ0FuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmU6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZTo6ZGVzdHJveSk6CisgICAgICAgICogdGVzdHMvV2ViQW5pbWF0aW9u
Q3VydmVUZXN0LmNwcDogQWRkZWQuCisgICAgICAgICogdGVzdHMvV2ViQW5pbWF0aW9uVGVzdC5j
cHA6IEFkZGVkLgorCiAyMDEyLTA2LTI5ICBFcmljIFBlbm5lciAgPGVwZW5uZXJAZ29vZ2xlLmNv
bT4KIAogICAgICAgICBbY2hyb21pdW1dIEFkZGluZyBQcmlvcml0aXplZFRleHR1cmUgYW5kIHJl
cGxhY2luZyBDb250ZW50c1RleHR1cmVNYW5hZ2VyCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZv
cm0vUGxhdGZvcm0uZ3lwaSBiL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCmluZGV4IDdk
NTY0Zjc0YmQ0MTUwMDVkNWViYmU2MzZjY2Q4OTgzNmI3NDBlYjMuLmEyYTZmOTg2ZjUxMzYwYThj
MWJiZGE4Y2NjOWIzYzQzOTg5Yjg4NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0
Zm9ybS5neXBpCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCkBAIC0zMiw2ICsz
Miw4IEBACiAgICAgJ3ZhcmlhYmxlcyc6IHsKICAgICAgICAgJ3BsYXRmb3JtX2ZpbGVzJzogWwog
ICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9QbGF0Zm9ybS5oJywKKyAgICAgICAgICAgICdj
aHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uLmgnCisgICAgICAgICAgICAnY2hyb21pdW0vcHVi
bGljL1dlYkFuaW1hdGlvbkN1cnZlLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9X
ZWJBdWRpb0J1cy5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViQXVkaW9EZXZp
Y2UuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkJsb2JEYXRhLmgnLApkaWZm
IC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb24uaCBi
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjE1MTQzNjdmZTIxNjBlMGZlNThlYjRmZGVjODRhMDJmMGQwZTM5MgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uLmgKQEAg
LTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJBbmltYXRpb25faAorI2Rl
ZmluZSBXZWJBbmltYXRpb25faAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAi
V2ViTm9uQ29weWFibGUuaCIKKyNpbmNsdWRlICJXZWJQcml2YXRlT3duUHRyLmgiCisKKyNpZiBX
RUJLSVRfSU1QTEVNRU5UQVRJT04KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorbmFtZXNwYWNl
IFdlYkNvcmUgeworY2xhc3MgQ0NBY3RpdmVBbmltYXRpb247Cit9CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkFuaW1hdGlvbkN1cnZlOworc3RydWN0IFdlYkFuaW1h
dGlvblByaXZhdGU7CisKKy8vIEEgY29tcG9zaXRvciBkcml2ZW4gYW5pbWF0aW9uLgorY2xhc3Mg
V2ViQW5pbWF0aW9uIDogcHVibGljIFdlYk5vbkNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICBlbnVt
IFRhcmdldFByb3BlcnR5IHsKKyAgICAgICAgV2ViQW5pbWF0aW9uVHJhbnNmb3JtID0gMSwKKyAg
ICAgICAgV2ViQW5pbWF0aW9uT3BhY2l0eQorICAgIH07CisKKyAgICBXZWJBbmltYXRpb24oY29u
c3QgV2ViQW5pbWF0aW9uQ3VydmUmIGN1cnZlLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0
eSkgeyBpbml0aWFsaXplKGN1cnZlLCB0YXJnZXRQcm9wZXJ0eSk7IH0KKyAgICB+V2ViQW5pbWF0
aW9uKCkgeyBkZXN0cm95KCk7IH0KKworICAgIC8vIFRoaXMgaXMgdGhlIG51bWJlciBvZiB0aW1l
cyB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCBwbGF5LiBJZiB0aGlzCisgICAgLy8gdmFsdWUgaXMg
emVybyB0aGUgYW5pbWF0aW9uIHdpbGwgbm90IHBsYXkuIElmIGl0IGlzIG5lZ2F0aXZlLCB0aGVu
CisgICAgLy8gdGhlIGFuaW1hdGlvbiB3aWxsIGxvb3AgaW5kZWZpbml0ZWx5LgorICAgIFdFQktJ
VF9FWFBPUlQgaW50IGl0ZXJhdGlvbnMoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
c2V0SXRlcmF0aW9ucyhpbnQpOworCisgICAgV0VCS0lUX0VYUE9SVCBkb3VibGUgc3RhcnRUaW1l
KCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFN0YXJ0VGltZShkb3VibGUgbW9u
b3RvbmljVGltZSk7CisgICAgV0VCS0lUX0VYUE9SVCBib29sIGhhc1NldFN0YXJ0VGltZSgpIGNv
bnN0OworCisgICAgV0VCS0lUX0VYUE9SVCBkb3VibGUgdGltZU9mZnNldCgpIGNvbnN0OworICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBzZXRUaW1lT2Zmc2V0KGRvdWJsZSBtb25vdG9uaWNUaW1lKTsK
KworICAgIC8vIElmIGFsdGVybmF0ZXNEaXJlY3Rpb24gaXMgdHJ1ZSwgb24gb2RkIG51bWJlcmVk
IGl0ZXJhdGlvbnMgd2UgcmV2ZXJzZSB0aGUgY3VydmUuCisgICAgV0VCS0lUX0VYUE9SVCBib29s
IGFsdGVybmF0ZXNEaXJlY3Rpb24oKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0
QWx0ZXJuYXRlc0RpcmVjdGlvbihib29sKTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgor
ICAgIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb24+IHRvQ0NBY3RpdmVBbmlt
YXRpb24oKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBpbml0aWFsaXplKGNvbnN0IFdlYkFuaW1hdGlvbkN1cnZlJiwgVGFyZ2V0UHJvcGVydHkpOwor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKGNvbnN0IFdlYkFuaW1hdGlvbiYpOwor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBkZXN0cm95KCk7CisKKyAgICBXZWJQcml2YXRlT3duUHRy
PFdlYkFuaW1hdGlvblByaXZhdGU+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdAorCisjZW5kaWYgLy8gV2ViQW5pbWF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaCBiL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMmRkYmJl
YjEwMjYzNWQxNjdmNGUzNzRlM2M0ZWQ2ZDFmZTdmZGRmCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb25DdXJ2ZS5oCkBAIC0wLDAg
KzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkFuaW1hdGlvbkN1cnZlX2gKKyNk
ZWZpbmUgV2ViQW5pbWF0aW9uQ3VydmVfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5j
bHVkZSAiV2ViTm9uQ29weWFibGUuaCIKKyNpbmNsdWRlICJXZWJQcml2YXRlT3duUHRyLmgiCisK
KyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oPgorCisjaWYgV0VCS0lU
X0lNUExFTUVOVEFUSU9OCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIENDQW5pbWF0aW9uQ3VydmU7Cit9CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YktpdCB7CisKK2VudW0gV2ViVGltaW5nRnVuY3Rpb25UeXBlIHsKKyAgICBXZWJUaW1pbmdGdW5j
dGlvbkVhc2UsCisgICAgV2ViVGltaW5nRnVuY3Rpb25FYXNlSW4sCisgICAgV2ViVGltaW5nRnVu
Y3Rpb25FYXNlT3V0LAorICAgIFdlYlRpbWluZ0Z1bmN0aW9uRWFzZUluT3V0LAorICAgIFdlYlRp
bWluZ0Z1bmN0aW9uTGluZWFyCit9OworCitzdHJ1Y3QgV2ViRmxvYXRLZXlmcmFtZSB7CisgICAg
V2ViRmxvYXRLZXlmcmFtZShkb3VibGUgdGltZSwgZmxvYXQgdmFsdWUpCisgICAgICAgIDogdGlt
ZSh0aW1lKQorICAgICAgICAsIHZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBkb3Vi
bGUgdGltZTsKKyAgICBmbG9hdCB2YWx1ZTsKK307CisKK3N0cnVjdCBXZWJUcmFuc2Zvcm1LZXlm
cmFtZSB7CisgICAgV2ViVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0IFdlYlRy
YW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlKQorICAgICAgICA6IHRpbWUodGltZSkKKyAgICAgICAg
LCB2YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgZG91YmxlIHRpbWU7CisgICAgV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyB2YWx1ZTsKK307CisKK3N0cnVjdCBXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlUHJpdmF0ZTsKK3N0cnVjdCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVByaXZhdGU7
CisKK2NsYXNzIFdlYkFuaW1hdGlvbkN1cnZlIDogcHVibGljIFdlYk5vbkNvcHlhYmxlIHsKK3B1
YmxpYzoKKyAgICB2aXJ0dWFsIH5XZWJBbmltYXRpb25DdXJ2ZSgpIHsgfQorCisjaWYgV0VCS0lU
X0lNUExFTUVOVEFUSU9OCisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0
aW9uQ3VydmU+IHRvQ0NBbmltYXRpb25DdXJ2ZSgpIGNvbnN0ID0gMDsKKyNlbmRpZgorCitwcm90
ZWN0ZWQ6CisgICAgV2ViQW5pbWF0aW9uQ3VydmUoKSB7IH0KK307CisKKy8vIEEga2V5ZnJhbWVk
IGZsb2F0IGFuaW1hdGlvbiBjdXJ2ZS4KK2NsYXNzIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgOiBw
dWJsaWMgV2ViQW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIFdlYkZsb2F0QW5pbWF0aW9u
Q3VydmUoKSB7IGluaXRpYWxpemUoKTsgfQorICAgIHZpcnR1YWwgfldlYkZsb2F0QW5pbWF0aW9u
Q3VydmUoKSB7IGRlc3Ryb3koKTsgfQorCisgICAgLy8gQWRkcyB0aGUga2V5ZnJhbWUgd2l0aCB0
aGUgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gKGVhc2UpLgorICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBhZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFtZSYpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBh
ZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFtZSYsIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZSk7CisgICAg
Ly8gQWRkcyB0aGUga2V5ZnJhbWUgd2l0aCBhIGN1c3RvbSwgYmV6aWVyIHRpbWluZyBmdW5jdGlv
bi4gTm90ZSwgaXQgaXMKKyAgICAvLyBhc3N1bWVkIHRoYXQgeDAgPSB5MCA9IDAsIGFuZCB4MyA9
IHkzID0gMS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRkKGNvbnN0IFdlYkZsb2F0S2V5ZnJh
bWUmLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpOworCisjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgdmlydHVhbCBQYXNzT3duUHRyPFdlYkNvcmU6OkND
QW5pbWF0aW9uQ3VydmU+IHRvQ0NBbmltYXRpb25DdXJ2ZSgpIGNvbnN0OworI2VuZGlmCisKK3By
aXZhdGU6CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgZGVzdHJveSgpOworCisgICAgV2ViUHJpdmF0ZU93blB0cjxXZWJGbG9hdEFu
aW1hdGlvbkN1cnZlUHJpdmF0ZT4gbV9wcml2YXRlOworfTsKKworLy8gQSBrZXlmcmFtZWQgdHJh
bnNmb3JtIGFuaW1hdGlvbiBjdXJ2ZS4KK2NsYXNzIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
IDogcHVibGljIFdlYkFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSgpIHsgaW5pdGlhbGl6ZSgpOyB9CisgICAgdmlydHVhbCB+V2ViVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUoKSB7IGRlc3Ryb3koKTsgfQorCisgICAgLy8gQWRkcyB0aGUga2V5
ZnJhbWUgd2l0aCB0aGUgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gKGVhc2UpLgorICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBhZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmKTsKKyAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgYWRkKGNvbnN0IFdlYlRyYW5zZm9ybUtleWZyYW1lJiwgV2ViVGltaW5n
RnVuY3Rpb25UeXBlKTsKKyAgICAvLyBBZGRzIHRoZSBrZXlmcmFtZSB3aXRoIGEgY3VzdG9tLCBi
ZXppZXIgdGltaW5nIGZ1bmN0aW9uLiBOb3RlLCBpdCBpcworICAgIC8vIGFzc3VtZWQgdGhhdCB4
MCA9IHkwID0gMCwgYW5kIHgzID0geTMgPSAxLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhZGQo
Y29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91Ymxl
IHgyLCBkb3VibGUgeTIpOworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgdmlydHVh
bCBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+IHRvQ0NBbmltYXRpb25DdXJ2
ZSgpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGlu
aXRpYWxpemUoKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgZGVzdHJveSgpOworCisgICAgV2Vi
UHJpdmF0ZU93blB0cjxXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVByaXZhdGU+IG1fcHJpdmF0
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViQW5pbWF0aW9u
Q3VydmVfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggNzhlNDI4YjIyODVkMzYz
ZTU0NzhkZjdmYTIzOGYzNmYzZWJlZjkwNy4uYmNiYTQ4Y2RiMzIyZDVhOWY5MTJkNWUwM2FmYjBh
MGUwYmVhMWM4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNDc3LDggKzQ3Nywx
MCBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViVGV4dENoZWNraW5nQ29tcGxldGlvbkltcGwu
Y3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlRleHRDaGVja2luZ1Jlc3VsdC5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAnLAorICAgICAg
ICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJBbmltYXRpb25Db250cm9sbGVySW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
QW5pbWF0aW9uQ29udHJvbGxlckltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJBbmlt
YXRpb25DdXJ2ZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQXJyYXlCdWZmZXIuY3Bw
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkFycmF5QnVmZmVyVmlldy5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViQmluZGluZ3MuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCmluZGV4IDhiZmNlOWNmNDNlMmIzZWFlZjJjOWU1NGNjOWQzMDU4YWVlZGEzZWYuLjkyYmMz
MTk2OTYwNjcwNjQwZWFiNGEzM2E1MTA3YmY0YjBhMjQ1ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaQpAQCAtMTQ4LDYgKzE0OCw4IEBACiAgICAgICAgICAgICAndGVzdHMvVHJlZVN5
bmNocm9uaXplclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UcmVlVGVzdEhlbHBlcnMu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UcmVlVGVzdEhlbHBlcnMuaCcsCisgICAgICAgICAg
ICAndGVzdHMvV2ViQW5pbWF0aW9uQ3VydmVUZXN0LmNwcCcsCisgICAgICAgICAgICAndGVzdHMv
V2ViQW5pbWF0aW9uVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkNvbXBvc2l0b3JJ
bnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkZyYW1lVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzM3ZDE3YmY3
MWI3YjRkNDEzMzIwNjRhOTIzMTEyNzUwODhlZTIxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbi5jcHAKQEAgLTAsMCArMSw5MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUwor
ICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8cHVibGljL1dl
YkFuaW1hdGlvbi5oPgorCisjaW5jbHVkZSAiQW5pbWF0aW9uSWRWZW5kb3IuaCIKKyNpbmNsdWRl
ICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUu
aCIKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaD4KKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwordXNpbmcgV2ViQ29yZTo6
QW5pbWF0aW9uSWRWZW5kb3I7Cit1c2luZyBXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjsKKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJBbmltYXRpb25Qcml2YXRlIHsKKyAgICBP
d25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGFuaW1hdGlvbjsKK307CisKK2ludCBXZWJBbmltYXRp
b246Oml0ZXJhdGlvbnMoKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGUtPmFuaW1hdGlvbi0+aXRl
cmF0aW9ucygpOyB9Cit2b2lkIFdlYkFuaW1hdGlvbjo6c2V0SXRlcmF0aW9ucyhpbnQgbikgeyBt
X3ByaXZhdGUtPmFuaW1hdGlvbi0+c2V0SXRlcmF0aW9ucyhuKTsgfQorCitkb3VibGUgV2ViQW5p
bWF0aW9uOjpzdGFydFRpbWUoKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGUtPmFuaW1hdGlvbi0+
c3RhcnRUaW1lKCk7IH0KK3ZvaWQgV2ViQW5pbWF0aW9uOjpzZXRTdGFydFRpbWUoZG91YmxlIG1v
bm90b25pY1RpbWUpIHsgbV9wcml2YXRlLT5hbmltYXRpb24tPnNldFN0YXJ0VGltZShtb25vdG9u
aWNUaW1lKTsgfQorCitkb3VibGUgV2ViQW5pbWF0aW9uOjp0aW1lT2Zmc2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcml2YXRlLT5hbmltYXRpb24tPnRpbWVPZmZzZXQoKTsgfQordm9pZCBXZWJBbmlt
YXRpb246OnNldFRpbWVPZmZzZXQoZG91YmxlIG1vbm90b25pY1RpbWUpIHsgbV9wcml2YXRlLT5h
bmltYXRpb24tPnNldFRpbWVPZmZzZXQobW9ub3RvbmljVGltZSk7IH0KKworYm9vbCBXZWJBbmlt
YXRpb246OmFsdGVybmF0ZXNEaXJlY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3ByaXZhdGUtPmFu
aW1hdGlvbi0+YWx0ZXJuYXRlc0RpcmVjdGlvbigpOyB9Cit2b2lkIFdlYkFuaW1hdGlvbjo6c2V0
QWx0ZXJuYXRlc0RpcmVjdGlvbihib29sIGFsdGVybmF0ZXMpIHsgbV9wcml2YXRlLT5hbmltYXRp
b24tPnNldEFsdGVybmF0ZXNEaXJlY3Rpb24oYWx0ZXJuYXRlcyk7IH0KKworI2lmIFdFQktJVF9J
TVBMRU1FTlRBVElPTgorUGFzc093blB0cjxXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbj4gV2Vi
QW5pbWF0aW9uOjp0b0NDQWN0aXZlQW5pbWF0aW9uKCkgY29uc3QKK3sKKyAgICBPd25QdHI8V2Vi
Q29yZTo6Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKG1fcHJpdmF0ZS0+YW5pbWF0aW9uLT5j
bG9uZUZvckltcGxUaHJlYWQoKSk7CisgICAgdG9SZXR1cm4tPnNldE5lZWRzU3luY2hyb25pemVk
U3RhcnRUaW1lKHRydWUpOworICAgIHJldHVybiB0b1JldHVybi5yZWxlYXNlKCk7Cit9CisjZW5k
aWYKKworQ0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRvQ0NBY3RpdmVBbmltYXRp
b25UYXJnZXRQcm9wZXJ0eShXZWJBbmltYXRpb246OlRhcmdldFByb3BlcnR5IHRhcmdldFByb3Bl
cnR5KQoreworICAgIHN3aXRjaCAodGFyZ2V0UHJvcGVydHkpIHsKKyAgICBjYXNlIFdlYkFuaW1h
dGlvbjo6V2ViQW5pbWF0aW9uVHJhbnNmb3JtOiByZXR1cm4gQ0NBY3RpdmVBbmltYXRpb246OlRy
YW5zZm9ybTsKKyAgICBjYXNlIFdlYkFuaW1hdGlvbjo6V2ViQW5pbWF0aW9uT3BhY2l0eTogcmV0
dXJuIENDQWN0aXZlQW5pbWF0aW9uOjpPcGFjaXR5OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gQ0NBY3RpdmVBbmltYXRpb246OlRyYW5zZm9ybTsKK30KKwor
dm9pZCBXZWJBbmltYXRpb246OmluaXRpYWxpemUoY29uc3QgV2ViQW5pbWF0aW9uQ3VydmUmIGN1
cnZlLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3sKKyAgICBtX3ByaXZhdGUucmVz
ZXQobmV3IFdlYkFuaW1hdGlvblByaXZhdGUpOworICAgIG1fcHJpdmF0ZS0+YW5pbWF0aW9uID0g
Q0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZS50b0NDQW5pbWF0aW9uQ3VydmUoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5pbWF0
aW9uSWRWZW5kb3I6OmdldE5leHRBbmltYXRpb25JZCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmltYXRpb25JZFZlbmRvcjo6Z2V0TmV4
dEdyb3VwSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdG9DQ0FjdGl2ZUFuaW1hdGlvblRhcmdldFByb3BlcnR5KHRhcmdldFByb3BlcnR5
KSk7Cit9CisKK3ZvaWQgV2ViQW5pbWF0aW9uOjpkZXN0cm95KCkKK3sKKyAgICBtX3ByaXZhdGUu
cmVzZXQoMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uQ3VydmUuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uQ3VydmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3YjkwM2Zl
NjM4OTZmOWMyMzMxODBmYThjOWQxNWRiZmNiMzg0NTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb25DdXJ2ZS5jcHAKQEAgLTAsMCArMSwx
MjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHB1
YmxpYy9XZWJBbmltYXRpb25DdXJ2ZS5oPgorCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmlt
YXRpb25DdXJ2ZS5oIgorI2luY2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKKworI2luY2x1
ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworc3RydWN0IFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVQcml2YXRlIHsKKyAg
ICBPd25QdHI8V2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZTsK
K307CisKK3N0cnVjdCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVByaXZhdGUgeworICAgIE93
blB0cjxXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZTsK
K307CisKK1Bhc3NPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gZ2V0VGltaW5nRnVu
Y3Rpb24oV2ViVGltaW5nRnVuY3Rpb25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBXZWJUaW1pbmdGdW5jdGlvbkVhc2U6IHJldHVybiBXZWJDb3JlOjpDQ0Vhc2VU
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCk7CisgICAgY2FzZSBXZWJUaW1pbmdGdW5jdGlvbkVhc2VJ
bjogcmV0dXJuIFdlYkNvcmU6OkNDRWFzZUluVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOworICAg
IGNhc2UgV2ViVGltaW5nRnVuY3Rpb25FYXNlT3V0OiByZXR1cm4gV2ViQ29yZTo6Q0NFYXNlT3V0
VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOworICAgIGNhc2UgV2ViVGltaW5nRnVuY3Rpb25FYXNl
SW5PdXQ6IHJldHVybiBXZWJDb3JlOjpDQ0Vhc2VJbk91dFRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUo
KTsKKyAgICBjYXNlIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyOiByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgV2ViRmxvYXRBbmltYXRp
b25DdXJ2ZTo6YWRkKGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmIGtleWZyYW1lKQoreworICAgIGFk
ZChrZXlmcmFtZSwgV2ViVGltaW5nRnVuY3Rpb25FYXNlKTsKK30KKwordm9pZCBXZWJGbG9hdEFu
aW1hdGlvbkN1cnZlOjphZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFtZSYga2V5ZnJhbWUsIFdlYlRp
bWluZ0Z1bmN0aW9uVHlwZSB0eXBlKQoreworICAgIG1fcHJpdmF0ZS0+Y3VydmUtPmFkZEtleWZy
YW1lKFdlYkNvcmU6OkNDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZy
YW1lLnZhbHVlLCBnZXRUaW1pbmdGdW5jdGlvbih0eXBlKSkpOworfQorCit2b2lkIFdlYkZsb2F0
QW5pbWF0aW9uQ3VydmU6OmFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiBrZXlmcmFtZSwgZG91
YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyKQoreworICAgIG1fcHJpdmF0
ZS0+Y3VydmUtPmFkZEtleWZyYW1lKFdlYkNvcmU6OkNDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKGtl
eWZyYW1lLnRpbWUsIGtleWZyYW1lLnZhbHVlLCBXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb246OmNyZWF0ZSh4MSwgeTEsIHgyLCB5MikpKTsKK30KKworI2lmIFdFQktJVF9JTVBM
RU1FTlRBVElPTgorUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBXZWJGbG9h
dEFuaW1hdGlvbkN1cnZlOjp0b0NDQW5pbWF0aW9uQ3VydmUoKSBjb25zdAoreworICAgIHJldHVy
biBtX3ByaXZhdGUtPmN1cnZlLT5jbG9uZSgpOworfQorI2VuZGlmCisKK3ZvaWQgV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZTo6aW5pdGlhbGl6ZSgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KG5ldyBX
ZWJGbG9hdEFuaW1hdGlvbkN1cnZlUHJpdmF0ZSk7CisgICAgbV9wcml2YXRlLT5jdXJ2ZSA9IFdl
YkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCk7Cit9CisKK3Zv
aWQgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6ZGVzdHJveSgpCit7CisgICAgbV9wcml2YXRlLnJl
c2V0KDApOworfQorCit2b2lkIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjphZGQoY29uc3Qg
V2ViVHJhbnNmb3JtS2V5ZnJhbWUmIGtleWZyYW1lKQoreworICAgIGFkZChrZXlmcmFtZSwgV2Vi
VGltaW5nRnVuY3Rpb25FYXNlKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZTo6YWRkKGNvbnN0IFdlYlRyYW5zZm9ybUtleWZyYW1lJiBrZXlmcmFtZSwgV2ViVGltaW5nRnVu
Y3Rpb25UeXBlIHR5cGUpCit7CisgICAgbV9wcml2YXRlLT5jdXJ2ZS0+YWRkS2V5ZnJhbWUoV2Vi
Q29yZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZyYW1l
LnZhbHVlLCBnZXRUaW1pbmdGdW5jdGlvbih0eXBlKSkpOworfQorCit2b2lkIFdlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlOjphZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmIGtleWZyYW1l
LCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpCit7CisgICAgbV9w
cml2YXRlLT5jdXJ2ZS0+YWRkS2V5ZnJhbWUoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZTo6
Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZyYW1lLnZhbHVlLCBXZWJDb3JlOjpDQ0N1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSh4MSwgeTEsIHgyLCB5MikpKTsKK30KKworI2lmIFdF
QktJVF9JTVBMRU1FTlRBVElPTgorUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZl
PiBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6dG9DQ0FuaW1hdGlvbkN1cnZlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jdXJ2ZS0+Y2xvbmUoKTsKK30KKyNlbmRpZgorCit2
b2lkIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjppbml0aWFsaXplKCkKK3sKKyAgICBtX3By
aXZhdGUucmVzZXQobmV3IFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlUHJpdmF0ZSk7CisgICAg
bV9wcml2YXRlLT5jdXJ2ZSA9IFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmU6OmNyZWF0ZSgpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpk
ZXN0cm95KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoMCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJBbmlt
YXRpb25DdXJ2ZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJBbmlt
YXRpb25DdXJ2ZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlZTA0YjQ2MmQwNDNhNDUyN2U1OTcwMzE3
Yjc5YmMxYTBmZDAyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1dlYkFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKQEAgLTAsMCArMSwzNTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJBbmlt
YXRpb25DdXJ2ZS5oPgorCisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMu
aD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KKworI2luY2x1
ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmlt
YXRpb25DdXJ2ZS5oIgorI2luY2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKKworI2luY2x1
ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBXZWJDb3Jl
OjpDQ0FjdGl2ZUFuaW1hdGlvbjsKK3VzaW5nIFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmlt
YXRpb25DdXJ2ZTsKK3VzaW5nIFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmU7CisKK25hbWVzcGFjZSB7CisKK3ZvaWQgZXhwZWN0VHJhbnNsYXRlWChkb3VibGUgdHJh
bnNsYXRlWCwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCkKK3sKKyAgICBF
WFBFQ1RfRkxPQVRfRVEodHJhbnNsYXRlWCwgbWF0cml4Lm00MSgpKTsKK30KKworLy8gVGVzdHMg
dGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIG9uZSBrZXlmcmFtZSB3b3JrcyBhcyBleHBlY3Rl
ZC4KK1RFU1QoV2ViQW5pbWF0aW9uQ3VydmVUZXN0LCBPbmVGbG9hdEtleWZyYW1lKQoreworICAg
IFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZs
b2F0S2V5ZnJhbWUoMCwgMiksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICBPd25QdHI8
Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShhZG9wdFB0cihzdGF0aWNfY2Fz
dDxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUqPih3ZWJDdXJ2ZS50b0NDQW5pbWF0aW9u
Q3VydmUoKS5sZWFrUHRyKCkpKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRW
YWx1ZSgtMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgxKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIs
IGN1cnZlLT5nZXRWYWx1ZSgyKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRp
b24gd2l0aCB0d28ga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJBbmltYXRp
b25DdXJ2ZVRlc3QsIFR3b0Zsb2F0S2V5ZnJhbWUpCit7CisgICAgV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZSB3ZWJDdXJ2ZTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAyKSwg
V2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOworICAgIHdlYkN1cnZlLmFkZChXZWJGbG9hdEtleWZy
YW1lKDEsIDQpLCBXZWJUaW1pbmdGdW5jdGlvbkxpbmVhcik7CisgICAgT3duUHRyPENDS2V5ZnJh
bWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoYWRvcHRQdHIoc3RhdGljX2Nhc3Q8Q0NLZXlm
cmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKj4od2ViQ3VydmUudG9DQ0FuaW1hdGlvbkN1cnZlKCku
bGVha1B0cigpKSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMywgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIEVYUEVDVF9GTE9BVF9F
USg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+
Z2V0VmFsdWUoMikpOworfQorCisvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGgg
dGhyZWUga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJBbmltYXRpb25DdXJ2
ZVRlc3QsIFRocmVlRmxvYXRLZXlmcmFtZSkKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZl
IHdlYkN1cnZlOworICAgIHdlYkN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDIpLCBXZWJU
aW1pbmdGdW5jdGlvbkxpbmVhcik7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUo
MSwgNCksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxv
YXRLZXlmcmFtZSgyLCA4KSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOworICAgIE93blB0cjxD
Q0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKGFkb3B0UHRyKHN0YXRpY19jYXN0
PENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSo+KHdlYkN1cnZlLnRvQ0NBbmltYXRpb25D
dXJ2ZSgpLmxlYWtQdHIoKSkpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZh
bHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwg
Y3VydmUtPmdldFZhbHVlKDEuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0
VmFsdWUoMikpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMykpOwor
fQorCisvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggbXVsdGlwbGUga2V5cyBh
dCBhIGdpdmVuIHRpbWUgd29ya3Mgc2FuZWx5LgorVEVTVChXZWJBbmltYXRpb25DdXJ2ZVRlc3Qs
IFJlcGVhdGVkRmxvYXRLZXlUaW1lcykKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIHdl
YkN1cnZlOworICAgIHdlYkN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDQpLCBXZWJUaW1p
bmdGdW5jdGlvbkxpbmVhcik7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwg
NCksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRL
ZXlmcmFtZSgxLCA2KSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOworICAgIHdlYkN1cnZlLmFk
ZChXZWJGbG9hdEtleWZyYW1lKDIsIDYpLCBXZWJUaW1pbmdGdW5jdGlvbkxpbmVhcik7CisgICAg
T3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoYWRvcHRQdHIoc3Rh
dGljX2Nhc3Q8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKj4od2ViQ3VydmUudG9DQ0Fu
aW1hdGlvbkN1cnZlKCkubGVha1B0cigpKSkpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1
cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFs
dWUoMCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisK
KyAgICAvLyBUaGVyZSBpcyBhIGRpc2NvbnRpbnVpdHkgYXQgMS4gQW55IHZhbHVlIGJldHdlZW4g
NCBhbmQgNiBpcyB2YWxpZC4KKyAgICBmbG9hdCB2YWx1ZSA9IGN1cnZlLT5nZXRWYWx1ZSgxKTsK
KyAgICBFWFBFQ1RfVFJVRSh2YWx1ZSA+PSA0ICYmIHZhbHVlIDw9IDYpOworCisgICAgRVhQRUNU
X0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
NiwgY3VydmUtPmdldFZhbHVlKDIpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdl
dFZhbHVlKDMpKTsKK30KKworCisvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3
aXRoIG9uZSBrZXlmcmFtZSB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViQW5pbWF0aW9uQ3Vy
dmVUZXN0LCBPbmVUcmFuc2Zvcm1LZXlmcmFtZSkKK3sKKyAgICBXZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3Bl
cmF0aW9uczsKKyAgICBvcGVyYXRpb25zLmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAwKTsKKyAgICB3
ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9ucyksIFdlYlRpbWlu
Z0Z1bmN0aW9uTGluZWFyKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZT4gY3VydmUoYWRvcHRQdHIoc3RhdGljX2Nhc3Q8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSo+KHdlYkN1cnZlLnRvQ0NBbmltYXRpb25DdXJ2ZSgpLmxlYWtQdHIoKSkp
KTsKKworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAg
ZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwg
Y3VydmUtPmdldFZhbHVlKDEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRW
YWx1ZSgyKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGgg
dHdvIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViQW5pbWF0aW9uQ3VydmVU
ZXN0LCBUd29UcmFuc2Zvcm1LZXlmcmFtZSkKK3sKKyAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZSB3ZWJDdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDIsIDAsIDApOworICAgIFdl
YktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25z
Mi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CisgICAgd2ViQ3VydmUuYWRkKFdlYlRyYW5zZm9y
bUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOworICAg
IHdlYkN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYlRp
bWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZT4gY3VydmUoYWRvcHRQdHIoc3RhdGljX2Nhc3Q8Q0NLZXlmcmFtZWRUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSo+KHdlYkN1cnZlLnRvQ0NBbmltYXRpb25DdXJ2ZSgpLmxlYWtQdHIo
KSkpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAg
IGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBleHBlY3RUcmFu
c2xhdGVYKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDQs
IGN1cnZlLT5nZXRWYWx1ZSgxKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0LCBjdXJ2ZS0+Z2V0
VmFsdWUoMikpOworfQorCisvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRo
IHRocmVlIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViQW5pbWF0aW9uQ3Vy
dmVUZXN0LCBUaHJlZVRyYW5zZm9ybUtleWZyYW1lKQoreworICAgIFdlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlIHdlYkN1cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMiwgMCwgMCk7Cisg
ICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJh
dGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSg0LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczM7CisgICAgb3BlcmF0aW9uczMuYXBwZW5kVHJhbnNsYXRl
KDgsIDAsIDApOworICAgIHdlYkN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVy
YXRpb25zMSksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2Vi
VHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJUaW1pbmdGdW5jdGlvbkxpbmVh
cik7CisgICAgd2ViQ3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDIsIG9wZXJhdGlvbnMz
KSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOworICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShhZG9wdFB0cihzdGF0aWNfY2FzdDxDQ0tleWZyYW1l
ZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKj4od2ViQ3VydmUudG9DQ0FuaW1hdGlvbkN1cnZlKCku
bGVha1B0cigpKSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoMiwgY3VydmUtPmdldFZhbHVlKC0x
KSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4
cGVjdFRyYW5zbGF0ZVgoMywgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIGV4cGVjdFRyYW5z
bGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKDEpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1
cnZlLT5nZXRWYWx1ZSgxLjUpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDgsIGN1cnZlLT5nZXRW
YWx1ZSgyKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMykpOwor
fQorCisvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG11bHRpcGxlIGtl
eXMgYXQgYSBnaXZlbiB0aW1lIHdvcmtzIHNhbmVseS4KK1RFU1QoV2ViQW5pbWF0aW9uQ3VydmVU
ZXN0LCBSZXBlYXRlZFRyYW5zZm9ybUtleVRpbWVzKQoreworICAgIC8vIEEgc3RlcCBmdW5jdGlv
bi4KKyAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICBXZWJLaXQ6
OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBw
ZW5kVHJhbnNsYXRlKDQsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9u
cyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7
CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOworICAgIG9w
ZXJhdGlvbnMzLmFwcGVuZFRyYW5zbGF0ZSg2LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczQ7CisgICAgb3BlcmF0aW9uczQuYXBwZW5kVHJhbnNs
YXRlKDYsIDAsIDApOworICAgIHdlYkN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBv
cGVyYXRpb25zMSksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQo
V2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJUaW1pbmdGdW5jdGlvbkxp
bmVhcik7CisgICAgd2ViQ3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlv
bnMzKSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOworICAgIHdlYkN1cnZlLmFkZChXZWJUcmFu
c2Zvcm1LZXlmcmFtZSgyLCBvcGVyYXRpb25zNCksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsK
KyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoYWRv
cHRQdHIoc3RhdGljX2Nhc3Q8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSo+KHdl
YkN1cnZlLnRvQ0NBbmltYXRpb25DdXJ2ZSgpLmxlYWtQdHIoKSkpKTsKKworICAgIGV4cGVjdFRy
YW5zbGF0ZVgoNCwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgZXhwZWN0VHJhbnNsYXRlWCg0
LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNCwgY3VydmUtPmdl
dFZhbHVlKDAuNSkpOworCisgICAgLy8gVGhlcmUgaXMgYSBkaXNjb250aW51aXR5IGF0IDEuIEFu
eSB2YWx1ZSBiZXR3ZWVuIDQgYW5kIDYgaXMgdmFsaWQuCisgICAgV2ViVHJhbnNmb3JtYXRpb25N
YXRyaXggdmFsdWUgPSBjdXJ2ZS0+Z2V0VmFsdWUoMSk7CisgICAgRVhQRUNUX1RSVUUodmFsdWUu
bTQxKCkgPj0gNCAmJiB2YWx1ZS5tNDEoKSA8PSA2KTsKKworICAgIGV4cGVjdFRyYW5zbGF0ZVgo
NiwgY3VydmUtPmdldFZhbHVlKDEuNSkpOworICAgIGV4cGVjdFRyYW5zbGF0ZVgoNiwgY3VydmUt
PmdldFZhbHVlKDIpKTsKKyAgICBleHBlY3RUcmFuc2xhdGVYKDYsIGN1cnZlLT5nZXRWYWx1ZSgz
KSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgdGhlIGtleWZyYW1lcyBtYXkgYmUgYWRkZWQgb3V0IG9m
IG9yZGVyLgorVEVTVChXZWJBbmltYXRpb25DdXJ2ZVRlc3QsIFVuc29ydGVkS2V5ZnJhbWVzKQor
eworICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgd2ViQ3VydmUuYWRk
KFdlYkZsb2F0S2V5ZnJhbWUoMiwgOCksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICB3
ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAyKSwgV2ViVGltaW5nRnVuY3Rpb25MaW5l
YXIpOworICAgIHdlYkN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDQpLCBXZWJUaW1pbmdG
dW5jdGlvbkxpbmVhcik7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2
ZT4gY3VydmUoYWRvcHRQdHIoc3RhdGljX2Nhc3Q8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1
cnZlKj4od2ViQ3VydmUudG9DQ0FuaW1hdGlvbkN1cnZlKCkubGVha1B0cigpKSkpOworCisgICAg
RVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2
ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1
ZSgxKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUtPmdldFZhbHVlKDIpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoOCwgY3VydmUtPmdldFZhbHVlKDMpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIGN1Ymlj
IGJlemllciB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYkFuaW1h
dGlvbkN1cnZlVGVzdCwgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBXZWJGbG9h
dEFuaW1hdGlvbkN1cnZlIHdlYkN1cnZlOworICAgIHdlYkN1cnZlLmFkZChXZWJGbG9hdEtleWZy
YW1lKDAsIDApLCAwLjI1LCAwLCAwLjc1LCAxKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRL
ZXlmcmFtZSgxLCAxKSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOworICAgIE93blB0cjxDQ0tl
eWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKGFkb3B0UHRyKHN0YXRpY19jYXN0PEND
S2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSo+KHdlYkN1cnZlLnRvQ0NBbmltYXRpb25DdXJ2
ZSgpLmxlYWtQdHIoKSkpKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgwLCBjdXJ2ZS0+Z2V0VmFs
dWUoMCkpOworICAgIEVYUEVDVF9MVCgwLCBjdXJ2ZS0+Z2V0VmFsdWUoMC4yNSkpOworICAgIEVY
UEVDVF9HVCgwLjI1LCBjdXJ2ZS0+Z2V0VmFsdWUoMC4yNSkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgwLjUsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfTFQoMC43NSwgY3VydmUt
PmdldFZhbHVlKDAuNzUpKTsKKyAgICBFWFBFQ1RfR1QoMSwgY3VydmUtPmdldFZhbHVlKDAuNzUp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgY3VydmUtPmdldFZhbHVlKDEpKTsKK30KKworLy8g
VGVzdHMgdGhhdCBhbiBlYXNlIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KK1RF
U1QoV2ViQW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNlVGltaW5nRnVuY3Rpb24pCit7CisgICAgV2Vi
RmxvYXRBbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRL
ZXlmcmFtZSgwLCAwKSwgV2ViVGltaW5nRnVuY3Rpb25FYXNlKTsKKyAgICB3ZWJDdXJ2ZS5hZGQo
V2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOworICAgIE93
blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKGFkb3B0UHRyKHN0YXRp
Y19jYXN0PENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSo+KHdlYkN1cnZlLnRvQ0NBbmlt
YXRpb25DdXJ2ZSgpLmxlYWtQdHIoKSkpKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWlu
Z0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6
Y3JlYXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBj
b25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGlt
aW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkpOworICAg
IH0KK30KKworLy8gVGVzdHMgdXNpbmcgYSBsaW5lYXIgdGltaW5nIGZ1bmN0aW9uLgorVEVTVChX
ZWJBbmltYXRpb25DdXJ2ZVRlc3QsIExpbmVhclRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYkZs
b2F0QW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5
ZnJhbWUoMCwgMCksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQo
V2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOworICAgIE93
blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKGFkb3B0UHRyKHN0YXRp
Y19jYXN0PENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSo+KHdlYkN1cnZlLnRvQ0NBbmlt
YXRpb25DdXJ2ZSgpLmxlYWtQdHIoKSkpKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7
ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBF
WFBFQ1RfRkxPQVRfRVEodGltZSwgY3VydmUtPmdldFZhbHVlKHRpbWUpKTsKKyAgICB9Cit9CisK
Ky8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0
ZWQuCitURVNUKFdlYkFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZUluVGltaW5nRnVuY3Rpb24pCit7
CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICB3ZWJDdXJ2ZS5hZGQo
V2ViRmxvYXRLZXlmcmFtZSgwLCAwKSwgV2ViVGltaW5nRnVuY3Rpb25FYXNlSW4pOworICAgIHdl
YkN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJUaW1pbmdGdW5jdGlvbkxpbmVh
cik7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoYWRv
cHRQdHIoc3RhdGljX2Nhc3Q8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKj4od2ViQ3Vy
dmUudG9DQ0FuaW1hdGlvbkN1cnZlKCkubGVha1B0cigpKSkpOworCisgICAgT3duUHRyPFdlYkNv
cmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFzZUluVGlt
aW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kp
IHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKKyAgICAgICAgRVhQRUNU
X0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVl
KHRpbWUpKTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVu
Y3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYkFuaW1hdGlvbkN1cnZlVGVzdCwgRWFz
ZU91dFRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgd2ViQ3Vy
dmU7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIFdlYlRpbWluZ0Z1
bmN0aW9uRWFzZU91dCk7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSks
IFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFu
aW1hdGlvbkN1cnZlPiBjdXJ2ZShhZG9wdFB0cihzdGF0aWNfY2FzdDxDQ0tleWZyYW1lZEZsb2F0
QW5pbWF0aW9uQ3VydmUqPih3ZWJDdXJ2ZS50b0NDQW5pbWF0aW9uQ3VydmUoKS5sZWFrUHRyKCkp
KSk7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rp
b24oV2ViQ29yZTo6Q0NFYXNlT3V0VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBp
ICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1
ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpKTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRo
YXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdl
YkFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZUluT3V0VGltaW5nRnVuY3Rpb24pCit7CisgICAgV2Vi
RmxvYXRBbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRL
ZXlmcmFtZSgwLCAwKSwgV2ViVGltaW5nRnVuY3Rpb25FYXNlSW5PdXQpOworICAgIHdlYkN1cnZl
LmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJUaW1pbmdGdW5jdGlvbkxpbmVhcik7Cisg
ICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoYWRvcHRQdHIo
c3RhdGljX2Nhc3Q8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKj4od2ViQ3VydmUudG9D
Q0FuaW1hdGlvbkN1cnZlKCkubGVha1B0cigpKSkpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkND
VGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFzZUluT3V0VGltaW5n
RnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsK
KyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZM
T0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVlKHRp
bWUpKTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rp
b24gd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYkFuaW1hdGlvbkN1cnZlVGVzdCwgQ3VzdG9t
QmV6aWVyVGltaW5nRnVuY3Rpb24pCit7CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSB3ZWJD
dXJ2ZTsKKyAgICBkb3VibGUgeDEgPSAwLjM7CisgICAgZG91YmxlIHkxID0gMC4yOworICAgIGRv
dWJsZSB4MiA9IDAuODsKKyAgICBkb3VibGUgeTIgPSAwLjc7CisgICAgd2ViQ3VydmUuYWRkKFdl
YkZsb2F0S2V5ZnJhbWUoMCwgMCksIHgxLCB5MSwgeDIsIHkyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQo
V2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOworICAgIE93
blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKGFkb3B0UHRyKHN0YXRp
Y19jYXN0PENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSo+KHdlYkN1cnZlLnRvQ0NBbmlt
YXRpb25DdXJ2ZSgpLmxlYWtQdHIoKSkpKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWlu
Z0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVu
Y3Rpb246OmNyZWF0ZSh4MSwgeTEsIHgyLCB5MikpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9
IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAg
ICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS0+
Z2V0VmFsdWUodGltZSkpOworICAgIH0KK30KKworLy8gVGVzdHMgdGhhdCB0aGUgZGVmYXVsdCB0
aW1pbmcgZnVuY3Rpb24gaXMgaW5kZWVkIGVhc2UuCitURVNUKFdlYkFuaW1hdGlvbkN1cnZlVGVz
dCwgRGVmYXVsdFRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUg
d2ViQ3VydmU7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCkpOworICAg
IHdlYkN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJUaW1pbmdGdW5jdGlvbkxp
bmVhcik7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUo
YWRvcHRQdHIoc3RhdGljX2Nhc3Q8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKj4od2Vi
Q3VydmUudG9DQ0FuaW1hdGlvbkN1cnZlKCkubGVha1B0cigpKSkpOworCisgICAgT3duUHRyPFdl
YkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFzZVRp
bWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytp
KSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVD
VF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLT5nZXRWYWx1
ZSh0aW1lKSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJBbmltYXRpb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvV2ViQW5pbWF0aW9uVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTlkNGZh
NTdiYmI2Njk3NzJmNzBjNmRkNDk3OWMxNmM3MzE4ODdmNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQW5pbWF0aW9uVGVzdC5jcHAKQEAgLTAsMCAr
MSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8
cHVibGljL1dlYkFuaW1hdGlvbi5oPgorCisjaW5jbHVkZSA8cHVibGljL1dlYkFuaW1hdGlvbkN1
cnZlLmg+CisKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFuaW1hdGlvbi5oIgorCisjaW5jbHVkZSA8
Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIFdlYkNvcmU6OkND
QWN0aXZlQW5pbWF0aW9uOworCituYW1lc3BhY2UgeworCitURVNUKFdlYkFuaW1hdGlvblRlc3Qs
IERlZmF1bHRTZXR0aW5ncykKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOwor
ICAgIFdlYkFuaW1hdGlvbiBhbmltYXRpb24oY3VydmUsIFdlYkFuaW1hdGlvbjo6V2ViQW5pbWF0
aW9uT3BhY2l0eSk7CisKKyAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGVmYXVsdHMgYXJlIGNvcnJl
Y3QuCisgICAgRVhQRUNUX0VRKDEsIGFuaW1hdGlvbi5pdGVyYXRpb25zKCkpOworICAgIEVYUEVD
VF9FUSgwLCBhbmltYXRpb24uc3RhcnRUaW1lKCkpOworICAgIEVYUEVDVF9FUSgwLCBhbmltYXRp
b24udGltZU9mZnNldCgpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIGFuaW1hdGlvbi5hbHRlcm5h
dGVzRGlyZWN0aW9uKCkpOworCisgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRlZmF1bHRzIGNvbnRp
bnVlIHRvIGJlIGNvcnJlY3QgYWZ0ZXIgY29udmVydGluZy4KKyAgICBPd25QdHI8Q0NBY3RpdmVB
bmltYXRpb24+IGNjQW5pbWF0aW9uID0gYW5pbWF0aW9uLnRvQ0NBY3RpdmVBbmltYXRpb24oKTsK
KyAgICBFWFBFQ1RfRVEoMSwgY2NBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7CisgICAgRVhQRUNU
X0VRKDAsIGNjQW5pbWF0aW9uLT5zdGFydFRpbWUoKSk7CisgICAgRVhQRUNUX0VRKDAsIGNjQW5p
bWF0aW9uLT50aW1lT2Zmc2V0KCkpOworICAgIEVYUEVDVF9FUShmYWxzZSwgY2NBbmltYXRpb24t
PmFsdGVybmF0ZXNEaXJlY3Rpb24oKSk7CisKKyAgICAvLyBUaGlzIHNob3VsZCBhbHdheXMgYmUg
dHJ1ZSBmb3Igd2ViIGFuaW1hdGlvbnMuCisgICAgRVhQRUNUX0VRKHRydWUsIGNjQW5pbWF0aW9u
LT5uZWVkc1N5bmNocm9uaXplZFN0YXJ0VGltZSgpKTsKK30KKworVEVTVChXZWJBbmltYXRpb25U
ZXN0LCBNb2RpZmllZFNldHRpbmdzKQoreworICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3Vy
dmU7CisgICAgV2ViQW5pbWF0aW9uIGFuaW1hdGlvbihjdXJ2ZSwgV2ViQW5pbWF0aW9uOjpXZWJB
bmltYXRpb25PcGFjaXR5KTsKKyAgICBhbmltYXRpb24uc2V0SXRlcmF0aW9ucygyKTsKKyAgICBh
bmltYXRpb24uc2V0U3RhcnRUaW1lKDIpOworICAgIGFuaW1hdGlvbi5zZXRUaW1lT2Zmc2V0KDIp
OworICAgIGFuaW1hdGlvbi5zZXRBbHRlcm5hdGVzRGlyZWN0aW9uKHRydWUpOworCisgICAgLy8g
RW5zdXJlIHRoYXQgdGhlIGRlZmF1bHRzIGFyZSBjb3JyZWN0LgorICAgIEVYUEVDVF9FUSgyLCBh
bmltYXRpb24uaXRlcmF0aW9ucygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgYW5pbWF0aW9uLnN0YXJ0
VGltZSgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgYW5pbWF0aW9uLnRpbWVPZmZzZXQoKSk7CisgICAg
RVhQRUNUX0VRKHRydWUsIGFuaW1hdGlvbi5hbHRlcm5hdGVzRGlyZWN0aW9uKCkpOworCisgICAg
Ly8gRW5zdXJlIHRoYXQgdGhlIGRlZmF1bHRzIGNvbnRpbnVlIHRvIGJlIGNvcnJlY3QgYWZ0ZXIg
Y29udmVydGluZy4KKyAgICBPd25QdHI8Q0NBY3RpdmVBbmltYXRpb24+IGNjQW5pbWF0aW9uID0g
YW5pbWF0aW9uLnRvQ0NBY3RpdmVBbmltYXRpb24oKTsKKyAgICBFWFBFQ1RfRVEoMiwgY2NBbmlt
YXRpb24tPml0ZXJhdGlvbnMoKSk7CisgICAgRVhQRUNUX0VRKDIsIGNjQW5pbWF0aW9uLT5zdGFy
dFRpbWUoKSk7CisgICAgRVhQRUNUX0VRKDIsIGNjQW5pbWF0aW9uLT50aW1lT2Zmc2V0KCkpOwor
ICAgIEVYUEVDVF9FUSh0cnVlLCBjY0FuaW1hdGlvbi0+YWx0ZXJuYXRlc0RpcmVjdGlvbigpKTsK
KworICAgIC8vIFNob3VsZCBhbHdheXMgYmUgdHJ1ZS4KKyAgICBFWFBFQ1RfRVEodHJ1ZSwgY2NB
bmltYXRpb24tPm5lZWRzU3luY2hyb25pemVkU3RhcnRUaW1lKCkpOworfQorCit9IC8vIG5hbWVz
cGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150289</attachid>
            <date>2012-06-29 18:47:34 -0700</date>
            <delta_ts>2012-06-30 06:23:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90303-20120629214734.patch</filename>
            <type>text/plain</type>
            <size>71999</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNjAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAwYjFhNjQ3MTc0ZjZm
YzY5YzJlY2JiYWU4YjVjMzA1YTkzNTgwYjQ3Li5mMjc2YzM2NTUwNzM5NTM4MzhkYzU2MTVmMjNh
MmFjYzJjMDQ3ZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAxMi0wNi0yOSAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IENyZWF0ZSBhIFdlYktpdDo6V2ViKiB3cmFwcGVyIGZvciB0aGUgY2MgYW5pbWF0aW9uIGNsYXNz
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMzAz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0
Zm9ybS5neXBpOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb24uaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJB
bmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb246OldlYkFuaW1hdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6fldlYkFuaW1hdGlvbik6CisgICAgICAg
ICogY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViQW5pbWF0aW9uQ3VydmUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb25DdXJ2ZTo6fldlYkFuaW1hdGlvbkN1cnZl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uQ3VydmU6OldlYkFuaW1hdGlvbkN1cnZl
KToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YkZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlOjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxv
YXRBbmltYXRpb25DdXJ2ZTo6fldlYkZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIGNo
cm9taXVtL3B1YmxpYy9XZWJGbG9hdEtleWZyYW1lLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRLZXlmcmFtZTo6V2ViRmxvYXRLZXlmcmFtZSk6
CisgICAgICAgIChXZWJGbG9hdEtleWZyYW1lKToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMv
V2ViVGltaW5nRnVuY3Rpb25UeXBlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlOjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjp+V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUp
OgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUtleWZy
YW1lOjpXZWJUcmFuc2Zvcm1LZXlmcmFtZSk6CisgICAgICAgIChXZWJUcmFuc2Zvcm1LZXlmcmFt
ZSk6CisKIDIwMTItMDYtMjkgIFRvbnkgUGF5bmUgIDx0cGF5bmVAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJlbW92ZSB0eXBlIGZyb20gc2NyZWVuQ29sb3JQcm9maWxlIEFQSQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCBhZDYyNmFhZTAzODVhOTU4OWEyZmFjNjUyOWIzZDQzZTdkYjll
MzM4Li4xYmE1MjdlZjg2M2YwZDljM2U0ODBhZGY5MWEzMTliNGRhNWFjMjc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA2LTI5ICBJYW4gVm9sbGlj
ayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3JlYXRlIGEg
V2ViS2l0OjpXZWIqIHdyYXBwZXIgZm9yIHRoZSBjYyBhbmltYXRpb24gY2xhc3NlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAzMDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6Cisg
ICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogc3JjL1dlYkFuaW1hdGlvbi5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjpp
dGVyYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjpzZXRJdGVyYXRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjpzdGFydFRpbWUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJBbmltYXRpb246OnNldFN0YXJ0VGltZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkFuaW1hdGlvbjo6dGltZU9mZnNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6
c2V0VGltZU9mZnNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6YWx0ZXJuYXRl
c0RpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6c2V0QWx0ZXJuYXRl
c0RpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6dG9DQ0FjdGl2ZUFu
aW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6ZGVzdHJveSk6CisgICAgICAgICogc3JjL1dl
YkFuaW1hdGlvbkN1cnZlQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViS2l0OjpjcmVhdGVUaW1pbmdGdW5jdGlvbik6CisgICAgICAgICogc3JjL1dlYkFu
aW1hdGlvbkN1cnZlQ29tbW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlOjphZGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjp0
b0NDQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRBbmltYXRpb25DdXJ2
ZTo6ZGVzdHJveSk6CisgICAgICAgICogc3JjL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZTo6YWRkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6OnRvQ0NBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmRlc3Ryb3kpOgorICAgICAgICAqIHRlc3RzL1dlYkFu
aW1hdGlvblRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9XZWJGbG9hdEFuaW1hdGlv
bkN1cnZlVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL1dlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlVGVzdC5jcHA6IEFkZGVkLgorCiAyMDEyLTA2LTI5ICBBZGFtIEJhcnRoICA8YWJh
cnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBXZWJGb250UmVuZGVyaW5nLmNw
cCByZXF1aXJlcyBzb21lIE9TKEFORFJPSUQpIGlmZGVmcyB0byBidWlsZCBkb3duc3RyZWFtCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaSBiL1NvdXJjZS9QbGF0Zm9y
bS9QbGF0Zm9ybS5neXBpCmluZGV4IDdkNTY0Zjc0YmQ0MTUwMDVkNWViYmU2MzZjY2Q4OTgzNmI3
NDBlYjMuLjg4ZTk2ZTY5MTQ2NTQ3YjNhZjYxNGM1YjBhODJhZmRjYTJkNGI1NGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9Q
bGF0Zm9ybS5neXBpCkBAIC0zMiw2ICszMiw4IEBACiAgICAgJ3ZhcmlhYmxlcyc6IHsKICAgICAg
ICAgJ3BsYXRmb3JtX2ZpbGVzJzogWwogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9QbGF0
Zm9ybS5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uLmgnCisg
ICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmgnLAogICAgICAg
ICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJBdWRpb0J1cy5oJywKICAgICAgICAgICAgICdjaHJv
bWl1bS9wdWJsaWMvV2ViQXVkaW9EZXZpY2UuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVi
bGljL1dlYkJsb2JEYXRhLmgnLApAQCAtNTQsNiArNTYsOCBAQAogICAgICAgICAgICAgJ2Nocm9t
aXVtL3B1YmxpYy9XZWJGaWxlVXRpbGl0aWVzLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1
YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGlj
L1dlYkZpbHRlck9wZXJhdGlvbnMuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dl
YkZsb2F0QW5pbWF0aW9uQ3VydmUuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dl
YkZsb2F0S2V5ZnJhbWUuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkZsb2F0
UG9pbnQuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UXVhZC5oJywK
ICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRSZWN0LmgnLApAQCAtMTA3LDcg
KzExMSwxMCBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJTdHJpbmcuaCcsCiAg
ICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlRocmVhZC5oJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9wdWJsaWMvV2ViVGhyZWFkU2FmZURhdGEuaCcsCisgICAgICAgICAgICAnY2hyb21p
dW0vcHVibGljL1dlYlRpbWluZ0Z1bmN0aW9uVHlwZS5oJywKICAgICAgICAgICAgICdjaHJvbWl1
bS9wdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaCcsCisgICAgICAgICAgICAnY2hyb21p
dW0vcHVibGljL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmgnLAorICAgICAgICAgICAgJ2No
cm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oJywKICAgICAgICAgICAgICdjaHJv
bWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oJywKICAgICAgICAgICAgICdjaHJv
bWl1bS9wdWJsaWMvV2ViUHJlcmVuZGVyLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1Ymxp
Yy9XZWJVUkwuaCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGlj
L1dlYkFuaW1hdGlvbi5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJBbmlt
YXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44MWRjNWFmODdhZDFkY2NmZWFhYTBiNzk1YTE0OWQ3N2JhZWVk
YzZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9X
ZWJBbmltYXRpb24uaApAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YkFuaW1hdGlvbl9oCisjZGVmaW5lIFdlYkFuaW1hdGlvbl9oCisKKyNpbmNsdWRlICJXZWJDb21t
b24uaCIKKyNpbmNsdWRlICJXZWJOb25Db3B5YWJsZS5oIgorI2luY2x1ZGUgIldlYlByaXZhdGVP
d25QdHIuaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorI2luY2x1ZGUgPHd0Zi9Gb3J3
YXJkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ0NBY3RpdmVBbmlt
YXRpb247Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBXZWJBbmltYXRpb25DdXJ2
ZTsKKworLy8gQSBjb21wb3NpdG9yIGRyaXZlbiBhbmltYXRpb24uCitjbGFzcyBXZWJBbmltYXRp
b24gOiBwdWJsaWMgV2ViTm9uQ29weWFibGUgeworcHVibGljOgorICAgIGVudW0gVGFyZ2V0UHJv
cGVydHkgeworICAgICAgICBXZWJBbmltYXRpb25UcmFuc2Zvcm0gPSAxLAorICAgICAgICBXZWJB
bmltYXRpb25PcGFjaXR5CisgICAgfTsKKworICAgIFdlYkFuaW1hdGlvbihjb25zdCBXZWJBbmlt
YXRpb25DdXJ2ZSYgY3VydmUsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KSB7IGluaXRp
YWxpemUoY3VydmUsIHRhcmdldFByb3BlcnR5KTsgfQorICAgIH5XZWJBbmltYXRpb24oKSB7IGRl
c3Ryb3koKTsgfQorCisgICAgLy8gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhl
IGFuaW1hdGlvbiB3aWxsIHBsYXkuIElmIHRoaXMKKyAgICAvLyB2YWx1ZSBpcyB6ZXJvIHRoZSBh
bmltYXRpb24gd2lsbCBub3QgcGxheS4gSWYgaXQgaXMgbmVnYXRpdmUsIHRoZW4KKyAgICAvLyB0
aGUgYW5pbWF0aW9uIHdpbGwgbG9vcCBpbmRlZmluaXRlbHkuCisgICAgV0VCS0lUX0VYUE9SVCBp
bnQgaXRlcmF0aW9ucygpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRJdGVyYXRp
b25zKGludCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIGRvdWJsZSBzdGFydFRpbWUoKSBjb25zdDsK
KyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0U3RhcnRUaW1lKGRvdWJsZSBtb25vdG9uaWNUaW1l
KTsKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaGFzU2V0U3RhcnRUaW1lKCkgY29uc3Q7CisKKyAg
ICBXRUJLSVRfRVhQT1JUIGRvdWJsZSB0aW1lT2Zmc2V0KCkgY29uc3Q7CisgICAgV0VCS0lUX0VY
UE9SVCB2b2lkIHNldFRpbWVPZmZzZXQoZG91YmxlIG1vbm90b25pY1RpbWUpOworCisgICAgLy8g
SWYgYWx0ZXJuYXRlc0RpcmVjdGlvbiBpcyB0cnVlLCBvbiBvZGQgbnVtYmVyZWQgaXRlcmF0aW9u
cyB3ZSByZXZlcnNlIHRoZSBjdXJ2ZS4KKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgYWx0ZXJuYXRl
c0RpcmVjdGlvbigpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRBbHRlcm5hdGVz
RGlyZWN0aW9uKGJvb2wpOworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgUGFzc093
blB0cjxXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9DQ0FjdGl2ZUFuaW1hdGlvbigpIGNv
bnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxp
emUoY29uc3QgV2ViQW5pbWF0aW9uQ3VydmUmLCBUYXJnZXRQcm9wZXJ0eSk7CisgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIGluaXRpYWxpemUoY29uc3QgV2ViQW5pbWF0aW9uJik7CisgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIGRlc3Ryb3koKTsKKworICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6
Q0NBY3RpdmVBbmltYXRpb24+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gV2ViQW5pbWF0aW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODU0NjhiMDU2
OTVkMzNjNzY1MGFiODBlNDdiM2UxYjQ0MDlmNTQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb25DdXJ2ZS5oCkBAIC0wLDAgKzEs
NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQW5pbWF0aW9uQ3VydmVfaAorI2RlZmlu
ZSBXZWJBbmltYXRpb25DdXJ2ZV9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRl
ICJXZWJOb25Db3B5YWJsZS5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBD
Q0FuaW1hdGlvbkN1cnZlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworY2xhc3MgV2ViQW5p
bWF0aW9uQ3VydmUgOiBwdWJsaWMgV2ViTm9uQ29weWFibGUgeworcHVibGljOgorICAgIHZpcnR1
YWwgfldlYkFuaW1hdGlvbkN1cnZlKCkgeyB9CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
KyAgICB2aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gdG9DQ0Fu
aW1hdGlvbkN1cnZlKCkgY29uc3QgPSAwOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBXZWJB
bmltYXRpb25DdXJ2ZSgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBXZWJBbmltYXRpb25DdXJ2ZV9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9j
aHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTY0
NTI4OWY5YjM2YjA3NTk5MjljMTI5ZThhZjczZTlmNjBiMGM1ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5o
CkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRmxvYXRBbmltYXRp
b25DdXJ2ZV9oCisjZGVmaW5lIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVfaAorCisjaW5jbHVkZSAi
V2ViQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUg
IldlYkZsb2F0S2V5ZnJhbWUuaCIKKyNpbmNsdWRlICJXZWJQcml2YXRlT3duUHRyLmgiCisjaW5j
bHVkZSAiV2ViVGltaW5nRnVuY3Rpb25UeXBlLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKK2NsYXNzIENDQW5pbWF0aW9uQ3VydmU7CitjbGFzcyBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0
aW9uQ3VydmU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBBIGtleWZyYW1lZCBmbG9h
dCBhbmltYXRpb24gY3VydmUuCitjbGFzcyBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIDogcHVibGlj
IFdlYkFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZl
KCkgeyBpbml0aWFsaXplKCk7IH0KKyAgICB2aXJ0dWFsIH5XZWJGbG9hdEFuaW1hdGlvbkN1cnZl
KCkgeyBkZXN0cm95KCk7IH0KKworICAgIC8vIEFkZHMgdGhlIGtleWZyYW1lIHdpdGggdGhlIGRl
ZmF1bHQgdGltaW5nIGZ1bmN0aW9uIChlYXNlKS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRk
KGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRkKGNv
bnN0IFdlYkZsb2F0S2V5ZnJhbWUmLCBXZWJUaW1pbmdGdW5jdGlvblR5cGUpOworICAgIC8vIEFk
ZHMgdGhlIGtleWZyYW1lIHdpdGggYSBjdXN0b20sIGJlemllciB0aW1pbmcgZnVuY3Rpb24uIE5v
dGUsIGl0IGlzCisgICAgLy8gYXNzdW1lZCB0aGF0IHgwID0geTAgPSAwLCBhbmQgeDMgPSB5MyA9
IDEuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiwg
ZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyKTsKKworI2lmIFdFQktJ
VF9JTVBMRU1FTlRBVElPTgorICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1h
dGlvbkN1cnZlPiB0b0NDQW5pbWF0aW9uQ3VydmUoKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRl
OgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKCk7CisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIGRlc3Ryb3koKTsKKworICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6Q0NLZXlm
cmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEtleWZyYW1lLmggYi9T
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0S2V5ZnJhbWUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kMjc2NDE4ZmY4ZjAxYTI2NmMxZDc5MmNjZjNmMGIzYjJiN2FkOWM2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEtleWZyYW1l
LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJGbG9hdEtleWZy
YW1lX2gKKyNkZWZpbmUgV2ViRmxvYXRLZXlmcmFtZV9oCisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitzdHJ1Y3QgV2ViRmxvYXRLZXlmcmFtZSB7CisgICAgV2ViRmxvYXRLZXlmcmFtZShkb3VibGUg
dGltZSwgZmxvYXQgdmFsdWUpCisgICAgICAgIDogdGltZSh0aW1lKQorICAgICAgICAsIHZhbHVl
KHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBkb3VibGUgdGltZTsKKyAgICBmbG9hdCB2YWx1
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViRmxvYXRLZXlm
cmFtZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRp
bWluZ0Z1bmN0aW9uVHlwZS5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJU
aW1pbmdGdW5jdGlvblR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41N2VkOTU0MjY5NWFhZTg2OTExNjdhOWM1
MzhlZWJiOWIyMGVjNzcyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJUaW1pbmdGdW5jdGlvblR5cGUuaApAQCAtMCwwICsxLDQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZV9oCisjZGVmaW5lIFdlYlRp
bWluZ0Z1bmN0aW9uVHlwZV9oCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIFdlYlRpbWlu
Z0Z1bmN0aW9uVHlwZSB7CisgICAgV2ViVGltaW5nRnVuY3Rpb25FYXNlLAorICAgIFdlYlRpbWlu
Z0Z1bmN0aW9uRWFzZUluLAorICAgIFdlYlRpbWluZ0Z1bmN0aW9uRWFzZU91dCwKKyAgICBXZWJU
aW1pbmdGdW5jdGlvbkVhc2VJbk91dCwKKyAgICBXZWJUaW1pbmdGdW5jdGlvbkxpbmVhcgorfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJUaW1pbmdGdW5jdGlvblR5
cGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9X
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY4YzQ0OTYzNjJhMTQxNmM3
MzA4OTIyYTdhYjgyNDU4ODNjMTkxMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZv
cm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmgKQEAgLTAsMCAr
MSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZV9oCisjZGVmaW5lIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlX2gKKworI2luY2x1ZGUgIldl
YkFuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJX
ZWJQcml2YXRlT3duUHRyLmgiCisjaW5jbHVkZSAiV2ViVGltaW5nRnVuY3Rpb25UeXBlLmgiCisj
aW5jbHVkZSAiV2ViVHJhbnNmb3JtS2V5ZnJhbWUuaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgQ0NBbmltYXRpb25DdXJ2ZTsKK2NsYXNzIENDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBBIGtleWZyYW1l
ZCB0cmFuc2Zvcm0gYW5pbWF0aW9uIGN1cnZlLgorY2xhc3MgV2ViVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUgOiBwdWJsaWMgV2ViQW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIFdlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlKCkgeyBpbml0aWFsaXplKCk7IH0KKyAgICB2aXJ0dWFsIH5XZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSgpIHsgZGVzdHJveSgpOyB9CisKKyAgICAvLyBBZGRzIHRo
ZSBrZXlmcmFtZSB3aXRoIHRoZSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiAoZWFzZSkuCisgICAg
V0VCS0lUX0VYUE9SVCB2b2lkIGFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYpOworICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBhZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmLCBXZWJU
aW1pbmdGdW5jdGlvblR5cGUpOworICAgIC8vIEFkZHMgdGhlIGtleWZyYW1lIHdpdGggYSBjdXN0
b20sIGJlemllciB0aW1pbmcgZnVuY3Rpb24uIE5vdGUsIGl0IGlzCisgICAgLy8gYXNzdW1lZCB0
aGF0IHgwID0geTAgPSAwLCBhbmQgeDMgPSB5MyA9IDEuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lk
IGFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYsIGRvdWJsZSB4MSwgZG91YmxlIHkxLCBk
b3VibGUgeDIsIGRvdWJsZSB5Mik7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICB2
aXJ0dWFsIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4gdG9DQ0FuaW1hdGlv
bkN1cnZlKCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgaW5pdGlhbGl6ZSgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBkZXN0cm95KCk7CisKKyAg
ICBXZWJQcml2YXRlT3duUHRyPFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmU+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oIGIvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5
OWVmNTU4N2JhM2QzZjUyM2IwYmZmOGY3M2ExOTMzZjBjYWJhZTQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtleWZyYW1lLmgK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUcmFuc2Zvcm1LZXlm
cmFtZV9oCisjZGVmaW5lIFdlYlRyYW5zZm9ybUtleWZyYW1lX2gKKworI2luY2x1ZGUgIldlYlRy
YW5zZm9ybU9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJU
cmFuc2Zvcm1LZXlmcmFtZSB7CisgICAgV2ViVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUs
IGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlKQorICAgICAgICA6IHRpbWUodGlt
ZSkKKyAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgZG91YmxlIHRp
bWU7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB2YWx1ZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViVHJhbnNmb3JtS2V5ZnJhbWVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCmluZGV4IDc4ZTQyOGIyMjg1ZDM2M2U1NDc4ZGY3ZmEyMzhmMzZmM2Vi
ZWY5MDcuLjJmZWVjYzczODlkM2M1ODFkNGY0M2ZiOTQ0NjAyZTNiMDdkNTMyNTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTQ3Nyw4ICs0NzcsMTEgQEAKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYlRleHRDaGVja2luZ0NvbXBsZXRpb25JbXBsLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJUZXh0Q2hlY2tpbmdSZXN1bHQuY3BwJywKICAgICAgICAgICAgICAgICAnc3Jj
L1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkFu
aW1hdGlvbi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkFuaW1hdGlvbkNvbnRyb2xsZXJJ
bXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ3VydmVDb21tb24uY3Bw
JywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmgnLAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViQXJyYXlCdWZmZXIuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYkFycmF5QnVmZmVyVmlldy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQmlu
ZGluZ3MuY3BwJywKQEAgLTUyNyw2ICs1MzAsNyBAQAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
RmlsZUNob29zZXJDb21wbGV0aW9uSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGaWxl
U3lzdGVtQ2FsbGJhY2tzSW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkZsb2F0QW5p
bWF0aW9uQ3VydmUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRDYWNoZS5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvV2ViRm9udERlc2NyaXB0aW9uLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJGb250SW1wbC5jcHAnLApAQCAtNjUxLDYgKzY1NSw3IEBACiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJTdXJyb3VuZGluZ1RleHQuY3BwJywKICAgICAgICAgICAgICAg
ICAnc3JjL1dlYlRleHRJbnB1dEluZm8uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlRl
eHRSdW4uY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxMb2FkVGltaW5nLmNwcCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJTY29wZWRVc2VyR2VzdHVyZS5jcHAnLAogICAgICAgICAg
ICAgICAgICdzcmMvV2ViVGV4dEZpZWxkRGVjb3JhdG9yQ2xpZW50LmNwcCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQppbmRleCA4YmZjZTljZjQzZTJiM2VhZWYyYzllNTRjYzlkMzA1OGFl
ZWRhM2VmLi5lNTE1YTVlZDExYzlhM2I3MTA1N2NmZGYzN2QxYzgwMDM0YjA0ZGEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTE0OCw3ICsxNDgsOSBAQAogICAgICAgICAgICAg
J3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvVHJl
ZVRlc3RIZWxwZXJzLmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvVHJlZVRlc3RIZWxwZXJzLmgn
LAorICAgICAgICAgICAgJ3Rlc3RzL1dlYkFuaW1hdGlvblRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwJywKKyAgICAgICAg
ICAgICd0ZXN0cy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAnLAogICAgICAgICAgICAg
J3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkxheWVyVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkxheWVyVHJlZVZpZXdUZXN0LmNwcCcsCkBA
IC0xNTcsNiArMTU5LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9XZWJTb2NrZXREZWZsYXRlclRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAn
LAorICAgICAgICAgICAgJ3Rlc3RzL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4VGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvV2ViVVJMUmVxdWVzdFRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJBbmltYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4MjYwOGI2NmJhOWFlNWFl
MDhhMGJiNWRiZDExZDEyOTZkYTM2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQW5pbWF0
aW9uLmg+CisKKyNpbmNsdWRlICJBbmltYXRpb25JZFZlbmRvci5oIgorI2luY2x1ZGUgImNjL0ND
QWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgorI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJBbmltYXRpb25DdXJ2ZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIu
aD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1c2luZyBXZWJDb3JlOjpBbmltYXRp
b25JZFZlbmRvcjsKK3VzaW5nIFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworaW50IFdlYkFuaW1hdGlvbjo6aXRlcmF0aW9ucygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXRlcmF0aW9ucygpOworfQorCit2b2lkIFdlYkFuaW1hdGlv
bjo6c2V0SXRlcmF0aW9ucyhpbnQgbikKK3sKKyAgICBtX3ByaXZhdGUtPnNldEl0ZXJhdGlvbnMo
bik7Cit9CisKK2RvdWJsZSBXZWJBbmltYXRpb246OnN0YXJ0VGltZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fcHJpdmF0ZS0+c3RhcnRUaW1lKCk7Cit9CisKK3ZvaWQgV2ViQW5pbWF0aW9uOjpz
ZXRTdGFydFRpbWUoZG91YmxlIG1vbm90b25pY1RpbWUpCit7CisgICAgbV9wcml2YXRlLT5zZXRT
dGFydFRpbWUobW9ub3RvbmljVGltZSk7Cit9CisKK2RvdWJsZSBXZWJBbmltYXRpb246OnRpbWVP
ZmZzZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnRpbWVPZmZzZXQoKTsKK30K
Kwordm9pZCBXZWJBbmltYXRpb246OnNldFRpbWVPZmZzZXQoZG91YmxlIG1vbm90b25pY1RpbWUp
Cit7CisgICAgbV9wcml2YXRlLT5zZXRUaW1lT2Zmc2V0KG1vbm90b25pY1RpbWUpOworfQorCiti
b29sIFdlYkFuaW1hdGlvbjo6YWx0ZXJuYXRlc0RpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+YWx0ZXJuYXRlc0RpcmVjdGlvbigpOworfQorCit2b2lkIFdlYkFuaW1h
dGlvbjo6c2V0QWx0ZXJuYXRlc0RpcmVjdGlvbihib29sIGFsdGVybmF0ZXMpCit7CisgICAgbV9w
cml2YXRlLT5zZXRBbHRlcm5hdGVzRGlyZWN0aW9uKGFsdGVybmF0ZXMpOworfQorCitQYXNzT3du
UHRyPFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uPiBXZWJBbmltYXRpb246OnRvQ0NBY3RpdmVB
bmltYXRpb24oKSBjb25zdAoreworICAgIE93blB0cjxXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlv
bj4gdG9SZXR1cm4obV9wcml2YXRlLT5jbG9uZUZvckltcGxUaHJlYWQoKSk7CisgICAgdG9SZXR1
cm4tPnNldE5lZWRzU3luY2hyb25pemVkU3RhcnRUaW1lKHRydWUpOworICAgIHJldHVybiB0b1Jl
dHVybi5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgV2ViQW5pbWF0aW9uOjppbml0aWFsaXplKGNvbnN0
IFdlYkFuaW1hdGlvbkN1cnZlJiBjdXJ2ZSwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkp
Cit7CisgICAgbV9wcml2YXRlLnJlc2V0KENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUu
dG9DQ0FuaW1hdGlvbkN1cnZlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQW5pbWF0aW9uSWRWZW5kb3I6OmdldE5leHRBbmltYXRpb25JZCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuaW1hdGlvbklkVmVu
ZG9yOjpnZXROZXh0R3JvdXBJZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpUYXJn
ZXRQcm9wZXJ0eT4odGFyZ2V0UHJvcGVydHkpKS5sZWFrUHRyKCkpOworfQorCit2b2lkIFdlYkFu
aW1hdGlvbjo6ZGVzdHJveSgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KDApOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NjI5NDdjNzZmY2I1ZTJj
OTQ2NDhhZjMxZDZiZDI4MjBjYTI5ZWE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uQ3VydmVDb21tb24uY3BwCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIldlYkFu
aW1hdGlvbkN1cnZlQ29tbW9uLmgiCisKKyNpbmNsdWRlICJjYy9DQ1RpbWluZ0Z1bmN0aW9uLmgi
CisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
KworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5j
dGlvbj4gY3JlYXRlVGltaW5nRnVuY3Rpb24oV2ViVGltaW5nRnVuY3Rpb25UeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBXZWJUaW1pbmdGdW5jdGlvbkVhc2U6Cisg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCk7Cisg
ICAgY2FzZSBXZWJUaW1pbmdGdW5jdGlvbkVhc2VJbjoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6
OkNDRWFzZUluVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOworICAgIGNhc2UgV2ViVGltaW5nRnVu
Y3Rpb25FYXNlT3V0OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q0NFYXNlT3V0VGltaW5nRnVu
Y3Rpb246OmNyZWF0ZSgpOworICAgIGNhc2UgV2ViVGltaW5nRnVuY3Rpb25FYXNlSW5PdXQ6Cisg
ICAgICAgIHJldHVybiBXZWJDb3JlOjpDQ0Vhc2VJbk91dFRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUo
KTsKKyAgICBjYXNlIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyOgorICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9u
Q3VydmVDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbkN1
cnZlQ29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmM1NjJlMzlkZWExYzQ4OTE0OGFkNTg3MWU4MzllMDdh
NGVmMDNlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkFuaW1hdGlvbkN1cnZlQ29tbW9uLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAq
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJBbmltYXRpb25DdXJ2ZUNvbW1vbl9oCisjZGVmaW5lIFdlYkFuaW1hdGlvbkN1
cnZlQ29tbW9uX2gKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJUaW1pbmdGdW5jdGlvblR5cGUuaD4K
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBD
Q1RpbWluZ0Z1bmN0aW9uOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1Bhc3NPd25QdHI8V2Vi
Q29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gY3JlYXRlVGltaW5nRnVuY3Rpb24oV2ViVGltaW5nRnVu
Y3Rpb25UeXBlKTsKK30KKworI2VuZGlmIC8vIFdlYkFuaW1hdGlvbkN1cnZlQ29tbW9uX2gKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3Vy
dmUuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmxvYXRBbmltYXRpb25DdXJ2
ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjY1YmJkMjA3MGE0OWM4M2YyNjA1YWRmZmM3ZmQzYzdlNDM1YWMw
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZsb2F0
QW5pbWF0aW9uQ3VydmUuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZl
Lmg+CisKKyNpbmNsdWRlICJXZWJBbmltYXRpb25DdXJ2ZUNvbW1vbi5oIgorI2luY2x1ZGUgImNj
L0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRlICJjYy9DQ1RpbWluZ0Z1bmN0
aW9uLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6
OmFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiBrZXlmcmFtZSkKK3sKKyAgICBhZGQoa2V5ZnJh
bWUsIFdlYlRpbWluZ0Z1bmN0aW9uRWFzZSk7Cit9CisKK3ZvaWQgV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZTo6YWRkKGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmIGtleWZyYW1lLCBXZWJUaW1pbmdGdW5j
dGlvblR5cGUgdHlwZSkKK3sKKyAgICBtX3ByaXZhdGUtPmFkZEtleWZyYW1lKFdlYkNvcmU6OkND
RmxvYXRLZXlmcmFtZTo6Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZyYW1lLnZhbHVlLCBjcmVh
dGVUaW1pbmdGdW5jdGlvbih0eXBlKSkpOworfQorCit2b2lkIFdlYkZsb2F0QW5pbWF0aW9uQ3Vy
dmU6OmFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiBrZXlmcmFtZSwgZG91YmxlIHgxLCBkb3Vi
bGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyKQoreworICAgIG1fcHJpdmF0ZS0+YWRkS2V5ZnJh
bWUoV2ViQ29yZTo6Q0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoa2V5ZnJhbWUudGltZSwga2V5ZnJh
bWUudmFsdWUsIFdlYkNvcmU6OkNDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHgx
LCB5MSwgeDIsIHkyKSkpOworfQorCitQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3Vy
dmU+IFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OnRvQ0NBbmltYXRpb25DdXJ2ZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y2xvbmUoKTsKK30KKwordm9pZCBXZWJGbG9hdEFuaW1h
dGlvbkN1cnZlOjppbml0aWFsaXplKCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoV2ViQ29yZTo6
Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKS5sZWFrUHRyKCkpOworfQor
Cit2b2lkIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmRlc3Ryb3koKQoreworICAgIG1fcHJpdmF0
ZS5yZXNldCgwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYWY4OGUzNTVjNzMzMTdlMTNmMTdlMGMxMjFiYzQ1MDIyMmUyNzZkNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlLmNwcApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUuaD4KKworI2luY2x1ZGUgIldlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmgiCisjaW5jbHVkZSAi
Y2MvQ0NLZXlmcmFtZWRBbmltYXRpb25DdXJ2ZS5oIgorI2luY2x1ZGUgImNjL0NDVGltaW5nRnVu
Y3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmU6OmFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYga2V5ZnJhbWUpCit7CisgICAg
YWRkKGtleWZyYW1lLCBXZWJUaW1pbmdGdW5jdGlvbkVhc2UpOworfQorCit2b2lkIFdlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlOjphZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmIGtleWZy
YW1lLCBXZWJUaW1pbmdGdW5jdGlvblR5cGUgdHlwZSkKK3sKKyAgICBtX3ByaXZhdGUtPmFkZEtl
eWZyYW1lKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZShrZXlmcmFtZS50aW1l
LCBrZXlmcmFtZS52YWx1ZSwgY3JlYXRlVGltaW5nRnVuY3Rpb24odHlwZSkpKTsKK30KKwordm9p
ZCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6YWRkKGNvbnN0IFdlYlRyYW5zZm9ybUtleWZy
YW1lJiBrZXlmcmFtZSwgZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHky
KQoreworICAgIG1fcHJpdmF0ZS0+YWRkS2V5ZnJhbWUoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1LZXlm
cmFtZTo6Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZyYW1lLnZhbHVlLCBXZWJDb3JlOjpDQ0N1
YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSh4MSwgeTEsIHgyLCB5MikpKTsKK30KKwor
UGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPiBXZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZTo6dG9DQ0FuaW1hdGlvbkN1cnZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5jbG9uZSgpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjppbml0
aWFsaXplKCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkubGVha1B0cigpKTsKK30KKwordm9pZCBXZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6ZGVzdHJveSgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0
KDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvV2ViQW5pbWF0aW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1dlYkFuaW1hdGlvblRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdjODYyODM2ZjE0
NGJmMGQ4OTMyZmNlMzVjZTEzMTA2YWI4OWZhYTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkFuaW1hdGlvblRlc3QuY3BwCkBAIC0wLDAgKzEsODkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
CisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHB1Ymxp
Yy9XZWJBbmltYXRpb24uaD4KKworI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisK
KyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJGbG9hdEFuaW1h
dGlvbkN1cnZlLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBXZWJDb3JlOjpDQ0Fj
dGl2ZUFuaW1hdGlvbjsKKworbmFtZXNwYWNlIHsKKworVEVTVChXZWJBbmltYXRpb25UZXN0LCBE
ZWZhdWx0U2V0dGluZ3MpCit7CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAg
ICBXZWJBbmltYXRpb24gYW5pbWF0aW9uKGN1cnZlLCBXZWJBbmltYXRpb246OldlYkFuaW1hdGlv
bk9wYWNpdHkpOworCisgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRlZmF1bHRzIGFyZSBjb3JyZWN0
LgorICAgIEVYUEVDVF9FUSgxLCBhbmltYXRpb24uaXRlcmF0aW9ucygpKTsKKyAgICBFWFBFQ1Rf
RVEoMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgYW5pbWF0aW9u
LnRpbWVPZmZzZXQoKSk7CisgICAgRVhQRUNUX0VRKGZhbHNlLCBhbmltYXRpb24uYWx0ZXJuYXRl
c0RpcmVjdGlvbigpKTsKKworICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0cyBjb250aW51
ZSB0byBiZSBjb3JyZWN0IGFmdGVyIGNvbnZlcnRpbmcuCisgICAgT3duUHRyPENDQWN0aXZlQW5p
bWF0aW9uPiBjY0FuaW1hdGlvbiA9IGFuaW1hdGlvbi50b0NDQWN0aXZlQW5pbWF0aW9uKCk7Cisg
ICAgRVhQRUNUX0VRKDEsIGNjQW5pbWF0aW9uLT5pdGVyYXRpb25zKCkpOworICAgIEVYUEVDVF9F
USgwLCBjY0FuaW1hdGlvbi0+c3RhcnRUaW1lKCkpOworICAgIEVYUEVDVF9FUSgwLCBjY0FuaW1h
dGlvbi0+dGltZU9mZnNldCgpKTsKKyAgICBFWFBFQ1RfRVEoZmFsc2UsIGNjQW5pbWF0aW9uLT5h
bHRlcm5hdGVzRGlyZWN0aW9uKCkpOworCisgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIGJlIHRy
dWUgZm9yIHdlYiBhbmltYXRpb25zLgorICAgIEVYUEVDVF9FUSh0cnVlLCBjY0FuaW1hdGlvbi0+
bmVlZHNTeW5jaHJvbml6ZWRTdGFydFRpbWUoKSk7Cit9CisKK1RFU1QoV2ViQW5pbWF0aW9uVGVz
dCwgTW9kaWZpZWRTZXR0aW5ncykKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZl
OworICAgIFdlYkFuaW1hdGlvbiBhbmltYXRpb24oY3VydmUsIFdlYkFuaW1hdGlvbjo6V2ViQW5p
bWF0aW9uT3BhY2l0eSk7CisgICAgYW5pbWF0aW9uLnNldEl0ZXJhdGlvbnMoMik7CisgICAgYW5p
bWF0aW9uLnNldFN0YXJ0VGltZSgyKTsKKyAgICBhbmltYXRpb24uc2V0VGltZU9mZnNldCgyKTsK
KyAgICBhbmltYXRpb24uc2V0QWx0ZXJuYXRlc0RpcmVjdGlvbih0cnVlKTsKKworICAgIC8vIEVu
c3VyZSB0aGF0IHRoZSBkZWZhdWx0cyBhcmUgY29ycmVjdC4KKyAgICBFWFBFQ1RfRVEoMiwgYW5p
bWF0aW9uLml0ZXJhdGlvbnMoKSk7CisgICAgRVhQRUNUX0VRKDIsIGFuaW1hdGlvbi5zdGFydFRp
bWUoKSk7CisgICAgRVhQRUNUX0VRKDIsIGFuaW1hdGlvbi50aW1lT2Zmc2V0KCkpOworICAgIEVY
UEVDVF9FUSh0cnVlLCBhbmltYXRpb24uYWx0ZXJuYXRlc0RpcmVjdGlvbigpKTsKKworICAgIC8v
IEVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0cyBjb250aW51ZSB0byBiZSBjb3JyZWN0IGFmdGVyIGNv
bnZlcnRpbmcuCisgICAgT3duUHRyPENDQWN0aXZlQW5pbWF0aW9uPiBjY0FuaW1hdGlvbiA9IGFu
aW1hdGlvbi50b0NDQWN0aXZlQW5pbWF0aW9uKCk7CisgICAgRVhQRUNUX0VRKDIsIGNjQW5pbWF0
aW9uLT5pdGVyYXRpb25zKCkpOworICAgIEVYUEVDVF9FUSgyLCBjY0FuaW1hdGlvbi0+c3RhcnRU
aW1lKCkpOworICAgIEVYUEVDVF9FUSgyLCBjY0FuaW1hdGlvbi0+dGltZU9mZnNldCgpKTsKKyAg
ICBFWFBFQ1RfRVEodHJ1ZSwgY2NBbmltYXRpb24tPmFsdGVybmF0ZXNEaXJlY3Rpb24oKSk7CisK
KyAgICAvLyBTaG91bGQgYWx3YXlzIGJlIHRydWUuCisgICAgRVhQRUNUX0VRKHRydWUsIGNjQW5p
bWF0aW9uLT5uZWVkc1N5bmNocm9uaXplZFN0YXJ0VGltZSgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGbG9h
dEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDMzNWMzODA4OTQ4MmYzZTViZTYy
YWVkNWYwNzE1Yzg0MDFjOTYzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwCkBAIC0wLDAgKzEsMjUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxwdWJs
aWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oPgorCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmlt
YXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCisjaW5j
bHVkZSAiY2MvQ0NUaW1pbmdGdW5jdGlvbi5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4K
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKK3VzaW5nIFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9u
OwordXNpbmcgV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlOworCituYW1l
c3BhY2UgeworCisvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggb25lIGtleWZy
YW1lIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwg
T25lRmxvYXRLZXlmcmFtZSkKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIHdlYkN1cnZl
OworICAgIHdlYkN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDIpLCBXZWJUaW1pbmdGdW5j
dGlvbkxpbmVhcik7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4g
Y3VydmUoYWRvcHRQdHIoc3RhdGljX2Nhc3Q8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZl
Kj4od2ViQ3VydmUudG9DQ0FuaW1hdGlvbkN1cnZlKCkubGVha1B0cigpKSkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
MiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdl
dFZhbHVlKDAuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMSkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworfQorCisvLyBU
ZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggdHdvIGtleWZyYW1lcyB3b3JrcyBhcyBl
eHBlY3RlZC4KK1RFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIFR3b0Zsb2F0S2V5ZnJh
bWUpCit7CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICB3ZWJDdXJ2
ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAyKSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOwor
ICAgIHdlYkN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDQpLCBXZWJUaW1pbmdGdW5jdGlv
bkxpbmVhcik7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3Vy
dmUoYWRvcHRQdHIoc3RhdGljX2Nhc3Q8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKj4o
d2ViQ3VydmUudG9DQ0FuaW1hdGlvbkN1cnZlKCkubGVha1B0cigpKSkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwg
Y3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUtPmdldFZh
bHVlKDAuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworfQorCisvLyBUZXN0
cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggdGhyZWUga2V5ZnJhbWVzIHdvcmtzIGFzIGV4
cGVjdGVkLgorVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgVGhyZWVGbG9hdEtleWZy
YW1lKQoreworICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgd2ViQ3Vy
dmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMiksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsK
KyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCA0KSwgV2ViVGltaW5nRnVuY3Rp
b25MaW5lYXIpOworICAgIHdlYkN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDIsIDgpLCBXZWJU
aW1pbmdGdW5jdGlvbkxpbmVhcik7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRp
b25DdXJ2ZT4gY3VydmUoYWRvcHRQdHIoc3RhdGljX2Nhc3Q8Q0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlKj4od2ViQ3VydmUudG9DQ0FuaW1hdGlvbkN1cnZlKCkubGVha1B0cigpKSkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywg
Y3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0
VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLT5nZXRWYWx1ZSgyKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDgsIGN1cnZlLT5nZXRWYWx1ZSgzKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSBm
bG9hdCBhbmltYXRpb24gd2l0aCBtdWx0aXBsZSBrZXlzIGF0IGEgZ2l2ZW4gdGltZSB3b3JrcyBz
YW5lbHkuCitURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBSZXBlYXRlZEZsb2F0S2V5
VGltZXMpCit7CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICB3ZWJD
dXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCA0KSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIp
OworICAgIHdlYkN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDQpLCBXZWJUaW1pbmdGdW5j
dGlvbkxpbmVhcik7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgNiksIFdl
YlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFt
ZSgyLCA2KSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOworICAgIE93blB0cjxDQ0tleWZyYW1l
ZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKGFkb3B0UHRyKHN0YXRpY19jYXN0PENDS2V5ZnJh
bWVkRmxvYXRBbmltYXRpb25DdXJ2ZSo+KHdlYkN1cnZlLnRvQ0NBbmltYXRpb25DdXJ2ZSgpLmxl
YWtQdHIoKSkpKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoLTEp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDAuNSkpOworCisgICAgLy8gVGhlcmUgaXMg
YSBkaXNjb250aW51aXR5IGF0IDEuIEFueSB2YWx1ZSBiZXR3ZWVuIDQgYW5kIDYgaXMgdmFsaWQu
CisgICAgZmxvYXQgdmFsdWUgPSBjdXJ2ZS0+Z2V0VmFsdWUoMSk7CisgICAgRVhQRUNUX1RSVUUo
dmFsdWUgPj0gNCAmJiB2YWx1ZSA8PSA2KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2
ZS0+Z2V0VmFsdWUoMS41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1
ZSgyKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgzKSk7Cit9CisK
Ky8vIFRlc3RzIHRoYXQgdGhlIGtleWZyYW1lcyBtYXkgYmUgYWRkZWQgb3V0IG9mIG9yZGVyLgor
VEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgVW5zb3J0ZWRLZXlmcmFtZXMpCit7Cisg
ICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2Vi
RmxvYXRLZXlmcmFtZSgyLCA4KSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOworICAgIHdlYkN1
cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDIpLCBXZWJUaW1pbmdGdW5jdGlvbkxpbmVhcik7
CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgNCksIFdlYlRpbWluZ0Z1bmN0
aW9uTGluZWFyKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBj
dXJ2ZShhZG9wdFB0cihzdGF0aWNfY2FzdDxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUq
Pih3ZWJDdXJ2ZS50b0NDQW5pbWF0aW9uQ3VydmUoKS5sZWFrUHRyKCkpKSk7CisKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDIsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5n
ZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDEp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDEuNSkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMikpOworICAgIEVYUEVDVF9GTE9BVF9F
USg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMykpOworfQorCisvLyBUZXN0cyB0aGF0IGEgY3ViaWMgYmV6
aWVyIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZVRlc3QsIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24pCit7CisgICAgV2ViRmxv
YXRBbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRLZXlm
cmFtZSgwLCAwKSwgMC4yNSwgMCwgMC43NSwgMSk7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0
S2V5ZnJhbWUoMSwgMSksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICBPd25QdHI8Q0NL
ZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShhZG9wdFB0cihzdGF0aWNfY2FzdDxD
Q0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUqPih3ZWJDdXJ2ZS50b0NDQW5pbWF0aW9uQ3Vy
dmUoKS5sZWFrUHRyKCkpKSk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgY3VydmUtPmdldFZh
bHVlKDApKTsKKyAgICBFWFBFQ1RfTFQoMCwgY3VydmUtPmdldFZhbHVlKDAuMjUpKTsKKyAgICBF
WFBFQ1RfR1QoMC4yNSwgY3VydmUtPmdldFZhbHVlKDAuMjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMC41LCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAgRVhQRUNUX0xUKDAuNzUsIGN1cnZl
LT5nZXRWYWx1ZSgwLjc1KSk7CisgICAgRVhQRUNUX0dUKDEsIGN1cnZlLT5nZXRWYWx1ZSgwLjc1
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGN1cnZlLT5nZXRWYWx1ZSgxKSk7Cit9CisKKy8v
IFRlc3RzIHRoYXQgYW4gZWFzZSB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCitU
RVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNlVGltaW5nRnVuY3Rpb24pCit7Cisg
ICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2Vi
RmxvYXRLZXlmcmFtZSgwLCAwKSwgV2ViVGltaW5nRnVuY3Rpb25FYXNlKTsKKyAgICB3ZWJDdXJ2
ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOwor
ICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU+IGN1cnZlKGFkb3B0UHRy
KHN0YXRpY19jYXN0PENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSo+KHdlYkN1cnZlLnRv
Q0NBbmltYXRpb25DdXJ2ZSgpLmxlYWtQdHIoKSkpKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpD
Q1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VUaW1pbmdGdW5j
dGlvbjo6Y3JlYXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAg
ICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRf
RVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkp
OworICAgIH0KK30KKworLy8gVGVzdHMgdXNpbmcgYSBsaW5lYXIgdGltaW5nIGZ1bmN0aW9uLgor
VEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgTGluZWFyVGltaW5nRnVuY3Rpb24pCit7
CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICB3ZWJDdXJ2ZS5hZGQo
V2ViRmxvYXRLZXlmcmFtZSgwLCAwKSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOworICAgIHdl
YkN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJUaW1pbmdGdW5jdGlvbkxpbmVh
cik7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoYWRv
cHRQdHIoc3RhdGljX2Nhc3Q8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKj4od2ViQ3Vy
dmUudG9DQ0FuaW1hdGlvbkN1cnZlKCkubGVha1B0cigpKSkpOworCisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7
CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1lLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkpOwor
ICAgIH0KK30KKworLy8gVGVzdHMgdGhhdCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3Jr
cyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VJblRp
bWluZ0Z1bmN0aW9uKQoreworICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7Cisg
ICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIFdlYlRpbWluZ0Z1bmN0aW9u
RWFzZUluKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViVGlt
aW5nRnVuY3Rpb25MaW5lYXIpOworICAgIE93blB0cjxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9u
Q3VydmU+IGN1cnZlKGFkb3B0UHRyKHN0YXRpY19jYXN0PENDS2V5ZnJhbWVkRmxvYXRBbmltYXRp
b25DdXJ2ZSo+KHdlYkN1cnZlLnRvQ0NBbmltYXRpb25DdXJ2ZSgpLmxlYWtQdHIoKSkpKTsKKwor
ICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJD
b3JlOjpDQ0Vhc2VJblRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CisgICAgZm9yIChpbnQgaSA9
IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7
CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSks
IGN1cnZlLT5nZXRWYWx1ZSh0aW1lKSk7CisgICAgfQorfQorCisvLyBUZXN0cyB0aGF0IGFuIGVh
c2UgaW4gdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJGbG9hdEFu
aW1hdGlvbkN1cnZlVGVzdCwgRWFzZU91dFRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYkZsb2F0
QW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJh
bWUoMCwgMCksIFdlYlRpbWluZ0Z1bmN0aW9uRWFzZU91dCk7CisgICAgd2ViQ3VydmUuYWRkKFdl
YkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICBPd25Q
dHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBjdXJ2ZShhZG9wdFB0cihzdGF0aWNf
Y2FzdDxDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUqPih3ZWJDdXJ2ZS50b0NDQW5pbWF0
aW9uQ3VydmUoKS5sZWFrUHRyKCkpKSk7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdG
dW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNlT3V0VGltaW5nRnVuY3Rpb246
OmNyZWF0ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAg
Y29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRp
bWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpKTsKKyAg
ICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3Mg
YXMgZXhwZWN0ZWQuCitURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNlSW5PdXRU
aW1pbmdGdW5jdGlvbikKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIHdlYkN1cnZlOwor
ICAgIHdlYkN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCBXZWJUaW1pbmdGdW5jdGlv
bkVhc2VJbk91dCk7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdl
YlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlPiBjdXJ2ZShhZG9wdFB0cihzdGF0aWNfY2FzdDxDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmUqPih3ZWJDdXJ2ZS50b0NDQW5pbWF0aW9uQ3VydmUoKS5sZWFrUHRyKCkpKSk7
CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24o
V2ViQ29yZTo6Q0NFYXNlSW5PdXRUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkg
KiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVl
KHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkpOworICAgIH0KK30KKworLy8gVGVzdHMgdGhh
dCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2Vi
RmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIEN1c3RvbUJlemllclRpbWluZ0Z1bmN0aW9uKQorewor
ICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgZG91YmxlIHgxID0gMC4z
OworICAgIGRvdWJsZSB5MSA9IDAuMjsKKyAgICBkb3VibGUgeDIgPSAwLjg7CisgICAgZG91Ymxl
IHkyID0gMC43OworICAgIHdlYkN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCB4MSwg
eTEsIHgyLCB5Mik7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdl
YlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlPiBjdXJ2ZShhZG9wdFB0cihzdGF0aWNfY2FzdDxDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmUqPih3ZWJDdXJ2ZS50b0NDQW5pbWF0aW9uQ3VydmUoKS5sZWFrUHRyKCkpKSk7
CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24o
V2ViQ29yZTo6Q0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoeDEsIHkxLCB4Miwg
eTIpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3Qg
ZG91YmxlIHRpbWUgPSBpICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1
bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpKTsKKyAgICB9Cit9
CisKKy8vIFRlc3RzIHRoYXQgdGhlIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGlzIGluZGVlZCBl
YXNlLgorVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgRGVmYXVsdFRpbWluZ0Z1bmN0
aW9uKQoreworICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgd2ViQ3Vy
dmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCkpOworICAgIHdlYkN1cnZlLmFkZChXZWJGbG9h
dEtleWZyYW1lKDEsIDEpLCBXZWJUaW1pbmdGdW5jdGlvbkxpbmVhcik7CisgICAgT3duUHRyPEND
S2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZT4gY3VydmUoYWRvcHRQdHIoc3RhdGljX2Nhc3Q8
Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKj4od2ViQ3VydmUudG9DQ0FuaW1hdGlvbkN1
cnZlKCkubGVha1B0cigpKSkpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rp
b24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUo
KSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRv
dWJsZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5j
dGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLT5nZXRWYWx1ZSh0aW1lKSk7CisgICAgfQorfQor
Cit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmYwOTgxZWM2OTEwNDllMWU5Yjc3ODY0MDEzZDA1Y2M5NDgzNTVlZGIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlVGVzdC5jcHAKQEAgLTAsMCArMSwzMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5o
PgorCisjaW5jbHVkZSAiY2MvQ0NBY3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0tl
eWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCisjaW5jbHVkZSAiY2MvQ0NUaW1pbmdGdW5jdGlvbi5o
IgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNm
b3JtT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgV2ViQ29yZTo6Q0NBY3RpdmVBbmlt
YXRpb247Cit1c2luZyBXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
OworCituYW1lc3BhY2UgeworCisvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3
aXRoIG9uZSBrZXlmcmFtZSB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmVUZXN0LCBPbmVUcmFuc2Zvcm1LZXlmcmFtZSkKK3sKKyAgICBXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJh
dGlvbnMgb3BlcmF0aW9uczsKKyAgICBvcGVyYXRpb25zLmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAw
KTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9ucyks
IFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoYWRvcHRQdHIoc3RhdGljX2Nhc3Q8Q0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSo+KHdlYkN1cnZlLnRvQ0NBbmltYXRpb25DdXJ2ZSgpLmxl
YWtQdHIoKSkpKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEp
Lm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApLm00MSgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDAuNSkubTQxKCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMSkubTQxKCkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMikubTQxKCkpOworfQorCisvLyBUZXN0
cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHR3byBrZXlmcmFtZXMgd29ya3MgYXMg
ZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgVHdvVHJhbnNm
b3JtS2V5ZnJhbWUpCit7CisgICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7
CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9w
ZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNs
YXRlKDQsIDAsIDApOworICAgIHdlYkN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBv
cGVyYXRpb25zMSksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQo
V2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJUaW1pbmdGdW5jdGlvbkxp
bmVhcik7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1
cnZlKGFkb3B0UHRyKHN0YXRpY19jYXN0PENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUqPih3ZWJDdXJ2ZS50b0NDQW5pbWF0aW9uQ3VydmUoKS5sZWFrUHRyKCkpKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkubTQxKCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQs
IGN1cnZlLT5nZXRWYWx1ZSgxKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZl
LT5nZXRWYWx1ZSgyKS5tNDEoKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5p
bWF0aW9uIHdpdGggdGhyZWUga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIFRocmVlVHJhbnNmb3JtS2V5ZnJhbWUpCit7Cisg
ICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRy
YW5zbGF0ZSgyLCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3Bl
cmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQsIDAsIDApOworICAg
IFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKKyAgICBvcGVyYXRp
b25zMy5hcHBlbmRUcmFuc2xhdGUoOCwgMCwgMCk7CisgICAgd2ViQ3VydmUuYWRkKFdlYlRyYW5z
Zm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViVGltaW5nRnVuY3Rpb25MaW5lYXIpOwor
ICAgIHdlYkN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdl
YlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5
ZnJhbWUoMiwgb3BlcmF0aW9uczMpLCBXZWJUaW1pbmdGdW5jdGlvbkxpbmVhcik7CisgICAgT3du
UHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlKGFkb3B0UHRyKHN0
YXRpY19jYXN0PENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqPih3ZWJDdXJ2ZS50
b0NDQW5pbWF0aW9uQ3VydmUoKS5sZWFrUHRyKCkpKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIs
IGN1cnZlLT5nZXRWYWx1ZSgtMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2
ZS0+Z2V0VmFsdWUoMCkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS0+Z2V0
VmFsdWUoMC41KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1
ZSgxKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUp
Lm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUtPmdldFZhbHVlKDIpLm00MSgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUtPmdldFZhbHVlKDMpLm00MSgpKTsKK30K
KworLy8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCBtdWx0aXBsZSBrZXlz
IGF0IGEgZ2l2ZW4gdGltZSB3b3JrcyBzYW5lbHkuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlVGVzdCwgUmVwZWF0ZWRUcmFuc2Zvcm1LZXlUaW1lcykKK3sKKyAgICAvLyBBIHN0ZXAg
ZnVuY3Rpb24uCisgICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlv
bnMxLmFwcGVuZFRyYW5zbGF0ZSg0LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQs
IDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsK
KyAgICBvcGVyYXRpb25zMy5hcHBlbmRUcmFuc2xhdGUoNiwgMCwgMCk7CisgICAgV2ViS2l0OjpX
ZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM0OworICAgIG9wZXJhdGlvbnM0LmFwcGVu
ZFRyYW5zbGF0ZSg2LCAwLCAwKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJh
bWUoMCwgb3BlcmF0aW9uczEpLCBXZWJUaW1pbmdGdW5jdGlvbkxpbmVhcik7CisgICAgd2ViQ3Vy
dmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViVGltaW5nRnVu
Y3Rpb25MaW5lYXIpOworICAgIHdlYkN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBv
cGVyYXRpb25zMyksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQo
V2ViVHJhbnNmb3JtS2V5ZnJhbWUoMiwgb3BlcmF0aW9uczQpLCBXZWJUaW1pbmdGdW5jdGlvbkxp
bmVhcik7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1
cnZlKGFkb3B0UHRyKHN0YXRpY19jYXN0PENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUqPih3ZWJDdXJ2ZS50b0NDQW5pbWF0aW9uQ3VydmUoKS5sZWFrUHRyKCkpKSk7CisKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKC0xKS5tNDEoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgwKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpLm00MSgpKTsKKworICAgIC8vIFRoZXJlIGlzIGEg
ZGlzY29udGludWl0eSBhdCAxLiBBbnkgdmFsdWUgYmV0d2VlbiA0IGFuZCA2IGlzIHZhbGlkLgor
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHZhbHVlID0gY3VydmUtPmdldFZhbHVlKDEpOwor
ICAgIEVYUEVDVF9UUlVFKHZhbHVlLm00MSgpID49IDQgJiYgdmFsdWUubTQxKCkgPD0gNik7CisK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDEuNSkubTQxKCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMikubTQxKCkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMykubTQxKCkpOworfQorCisvLyBUZXN0cyB0
aGF0IHRoZSBrZXlmcmFtZXMgbWF5IGJlIGFkZGVkIG91dCBvZiBvcmRlci4KK1RFU1QoV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBVbnNvcnRlZEtleWZyYW1lcykKK3sKKyAgICBXZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRl
KDIsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CisgICAgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOworICAgIG9wZXJhdGlvbnMzLmFw
cGVuZFRyYW5zbGF0ZSg4LCAwLCAwKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5
ZnJhbWUoMiwgb3BlcmF0aW9uczMpLCBXZWJUaW1pbmdGdW5jdGlvbkxpbmVhcik7CisgICAgd2Vi
Q3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViVGltaW5n
RnVuY3Rpb25MaW5lYXIpOworICAgIHdlYkN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgx
LCBvcGVyYXRpb25zMiksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICBPd25QdHI8Q0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoYWRvcHRQdHIoc3RhdGljX2Nh
c3Q8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSo+KHdlYkN1cnZlLnRvQ0NBbmlt
YXRpb25DdXJ2ZSgpLmxlYWtQdHIoKSkpKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2
ZS0+Z2V0VmFsdWUoLTEpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdl
dFZhbHVlKDApLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUtPmdldFZhbHVl
KDAuNSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSku
bTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KS5tNDEo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLT5nZXRWYWx1ZSgyKS5tNDEoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLT5nZXRWYWx1ZSgzKS5tNDEoKSk7Cit9CisKKy8v
IFRlc3RzIHRoYXQgYSBjdWJpYyBiZXppZXIgdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVj
dGVkLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIEN1YmljQmV6aWVyVGlt
aW5nRnVuY3Rpb24pCit7CisgICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7
CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9w
ZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNs
YXRlKDEsIDAsIDApOworICAgIHdlYkN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBv
cGVyYXRpb25zMSksIDAuMjUsIDAsIDAuNzUsIDEpOworICAgIHdlYkN1cnZlLmFkZChXZWJUcmFu
c2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsK
KyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoYWRv
cHRQdHIoc3RhdGljX2Nhc3Q8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSo+KHdl
YkN1cnZlLnRvQ0NBbmltYXRpb25DdXJ2ZSgpLmxlYWtQdHIoKSkpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMCwgY3VydmUtPmdldFZhbHVlKDApLm00MSgpKTsKKyAgICBFWFBFQ1RfTFQoMCwgY3Vy
dmUtPmdldFZhbHVlKDAuMjUpLm00MSgpKTsKKyAgICBFWFBFQ1RfR1QoMC4yNSwgY3VydmUtPmdl
dFZhbHVlKDAuMjUpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBjdXJ2ZS0+Z2V0
VmFsdWUoMC41KS5tNDEoKSk7CisgICAgRVhQRUNUX0xUKDAuNzUsIGN1cnZlLT5nZXRWYWx1ZSgw
Ljc1KS5tNDEoKSk7CisgICAgRVhQRUNUX0dUKDEsIGN1cnZlLT5nZXRWYWx1ZSgwLjc1KS5tNDEo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGN1cnZlLT5nZXRWYWx1ZSgxKS5tNDEoKSk7Cit9
CisKKy8vIFRlc3RzIHRoYXQgYW4gZWFzZSB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0
ZWQuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZVRpbWluZ0Z1bmN0
aW9uKQoreworICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHdlYkN1cnZlOworICAgIFdl
YktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25z
MS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAw
LCAwKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9u
czEpLCBXZWJUaW1pbmdGdW5jdGlvbkVhc2UpOworICAgIHdlYkN1cnZlLmFkZChXZWJUcmFuc2Zv
cm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAg
ICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoYWRvcHRQ
dHIoc3RhdGljX2Nhc3Q8Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSo+KHdlYkN1
cnZlLnRvQ0NBbmltYXRpb25DdXJ2ZSgpLmxlYWtQdHIoKSkpKTsKKworICAgIE93blB0cjxXZWJD
b3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VUaW1p
bmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkg
eworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1Rf
RkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUo
dGltZSkubTQxKCkpOworICAgIH0KK30KKworLy8gVGVzdHMgdXNpbmcgYSBsaW5lYXIgdGltaW5n
IGZ1bmN0aW9uLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIExpbmVhclRp
bWluZ0Z1bmN0aW9uKQoreworICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHdlYkN1cnZl
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBv
cGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5z
bGF0ZSgxLCAwLCAwKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwg
b3BlcmF0aW9uczEpLCBXZWJUaW1pbmdGdW5jdGlvbkxpbmVhcik7CisgICAgd2ViQ3VydmUuYWRk
KFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViVGltaW5nRnVuY3Rpb25M
aW5lYXIpOworICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlPiBj
dXJ2ZShhZG9wdFB0cihzdGF0aWNfY2FzdDxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlKj4od2ViQ3VydmUudG9DQ0FuaW1hdGlvbkN1cnZlKCkubGVha1B0cigpKSkpOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1l
ID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1lLCBjdXJ2ZS0+Z2V0VmFs
dWUodGltZSkubTQxKCkpOworICAgIH0KK30KKworLy8gVGVzdHMgdGhhdCBhbiBlYXNlIGluIHRp
bWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmVUZXN0LCBFYXNlSW5UaW1pbmdGdW5jdGlvbikKK3sKKyAgICBXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDAp
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBv
cGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7CisgICAgd2ViQ3VydmUuYWRkKFdl
YlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViVGltaW5nRnVuY3Rpb25FYXNl
SW4pOworICAgIHdlYkN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25z
MiksIFdlYlRpbWluZ0Z1bmN0aW9uTGluZWFyKTsKKyAgICBPd25QdHI8Q0NLZXlmcmFtZWRUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZT4gY3VydmUoYWRvcHRQdHIoc3RhdGljX2Nhc3Q8Q0NLZXlmcmFt
ZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSo+KHdlYkN1cnZlLnRvQ0NBbmltYXRpb25DdXJ2ZSgp
LmxlYWtQdHIoKSkpKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0
aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VJblRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJs
ZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlv
bi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLT5nZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CisgICAgfQor
fQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4
cGVjdGVkLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VPdXRUaW1p
bmdGdW5jdGlvbikKK3sKKyAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsK
KyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3Bl
cmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xh
dGUoMSwgMCwgMCk7CisgICAgd2ViQ3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9w
ZXJhdGlvbnMxKSwgV2ViVGltaW5nRnVuY3Rpb25FYXNlT3V0KTsKKyAgICB3ZWJDdXJ2ZS5hZGQo
V2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJUaW1pbmdGdW5jdGlvbkxp
bmVhcik7CisgICAgT3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1
cnZlKGFkb3B0UHRyKHN0YXRpY19jYXN0PENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUqPih3ZWJDdXJ2ZS50b0NDQW5pbWF0aW9uQ3VydmUoKS5sZWFrUHRyKCkpKSk7CisKKyAgICBP
d25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6
Q0NFYXNlT3V0VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKKyAg
ICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3Vy
dmUtPmdldFZhbHVlKHRpbWUpLm00MSgpKTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgYW4g
ZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZUluT3V0VGltaW5nRnVuY3Rpb24pCit7CisgICAg
V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5z
bGF0ZSgwLCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOworICAgIHdl
YkN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdlYlRpbWlu
Z0Z1bmN0aW9uRWFzZUluT3V0KTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJh
bWUoMSwgb3BlcmF0aW9uczIpLCBXZWJUaW1pbmdGdW5jdGlvbkxpbmVhcik7CisgICAgT3duUHRy
PENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlKGFkb3B0UHRyKHN0YXRp
Y19jYXN0PENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqPih3ZWJDdXJ2ZS50b0ND
QW5pbWF0aW9uQ3VydmUoKS5sZWFrUHRyKCkpKSk7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NU
aW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNlSW5PdXRUaW1pbmdG
dW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgewor
ICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxP
QVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGlt
ZSkubTQxKCkpOworICAgIH0KK30KKworLy8gVGVzdHMgdGhhdCBhbiBlYXNlIGluIHRpbWluZyBm
dW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmVUZXN0LCBDdXN0b21CZXppZXJUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICBkb3VibGUgeDEgPSAwLjM7CisgICAgZG91Ymxl
IHkxID0gMC4yOworICAgIGRvdWJsZSB4MiA9IDAuODsKKyAgICBkb3VibGUgeTIgPSAwLjc7Cisg
ICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJh
dGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRl
KDEsIDAsIDApOworICAgIHdlYkN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVy
YXRpb25zMSksIHgxLCB5MSwgeDIsIHkyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3Jt
S2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJUaW1pbmdGdW5jdGlvbkxpbmVhcik7CisgICAg
T3duUHRyPENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IGN1cnZlKGFkb3B0UHRy
KHN0YXRpY19jYXN0PENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqPih3ZWJDdXJ2
ZS50b0NDQW5pbWF0aW9uQ3VydmUoKS5sZWFrUHRyKCkpKSk7CisKKyAgICBPd25QdHI8V2ViQ29y
ZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NDdWJpY0Jlemll
clRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoeDEsIHkxLCB4MiwgeTIpKTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4y
NTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1l
KSwgY3VydmUtPmdldFZhbHVlKHRpbWUpLm00MSgpKTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRo
YXQgdGhlIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGlzIGluZGVlZCBlYXNlLgorVEVTVChXZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIERlZmF1bHRUaW1pbmdGdW5jdGlvbikKK3sKKyAg
ICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJh
bnNsYXRlKDAsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7CisgICAg
d2ViQ3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSk7CisgICAg
d2ViQ3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViVGlt
aW5nRnVuY3Rpb25MaW5lYXIpOworICAgIE93blB0cjxDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlPiBjdXJ2ZShhZG9wdFB0cihzdGF0aWNfY2FzdDxDQ0tleWZyYW1lZFRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlKj4od2ViQ3VydmUudG9DQ0FuaW1hdGlvbkN1cnZlKCkubGVha1B0cigp
KSkpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0
aW9uKFdlYkNvcmU6OkNDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAq
IDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUo
dGltZSksIGN1cnZlLT5nZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CisgICAgfQorfQorCit9IC8vIG5h
bWVzcGFjZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150315</attachid>
            <date>2012-06-30 06:23:41 -0700</date>
            <delta_ts>2012-06-30 07:04:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90303-20120630092341.patch</filename>
            <type>text/plain</type>
            <size>71130</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAwYjFhNjQ3MTc0ZjZm
YzY5YzJlY2JiYWU4YjVjMzA1YTkzNTgwYjQ3Li5mMjc2YzM2NTUwNzM5NTM4MzhkYzU2MTVmMjNh
MmFjYzJjMDQ3ZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAxMi0wNi0yOSAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IENyZWF0ZSBhIFdlYktpdDo6V2ViKiB3cmFwcGVyIGZvciB0aGUgY2MgYW5pbWF0aW9uIGNsYXNz
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMzAz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0
Zm9ybS5neXBpOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb24uaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJB
bmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb246OldlYkFuaW1hdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6fldlYkFuaW1hdGlvbik6CisgICAgICAg
ICogY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViQW5pbWF0aW9uQ3VydmUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb25DdXJ2ZTo6fldlYkFuaW1hdGlvbkN1cnZl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uQ3VydmU6OldlYkFuaW1hdGlvbkN1cnZl
KToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YkZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlOjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxv
YXRBbmltYXRpb25DdXJ2ZTo6fldlYkZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIGNo
cm9taXVtL3B1YmxpYy9XZWJGbG9hdEtleWZyYW1lLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRLZXlmcmFtZTo6V2ViRmxvYXRLZXlmcmFtZSk6
CisgICAgICAgIChXZWJGbG9hdEtleWZyYW1lKToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMv
V2ViVGltaW5nRnVuY3Rpb25UeXBlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlOjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjp+V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUp
OgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUtleWZy
YW1lOjpXZWJUcmFuc2Zvcm1LZXlmcmFtZSk6CisgICAgICAgIChXZWJUcmFuc2Zvcm1LZXlmcmFt
ZSk6CisKIDIwMTItMDYtMjkgIFRvbnkgUGF5bmUgIDx0cGF5bmVAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJlbW92ZSB0eXBlIGZyb20gc2NyZWVuQ29sb3JQcm9maWxlIEFQSQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCAzZWJhZjBmNTRjMGRhYzcyNGFlNTA3NWQ3YmJmNWIyNTA3Mjhl
YTI3Li5jNWI0MWIyMDBiOWRlZWRmNTJjNzFiNjczZjBiMDQwMzlkMWQxNTZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA2LTI5ICBJYW4gVm9sbGlj
ayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3JlYXRlIGEg
V2ViS2l0OjpXZWIqIHdyYXBwZXIgZm9yIHRoZSBjYyBhbmltYXRpb24gY2xhc3NlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAzMDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6Cisg
ICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogc3JjL1dlYkFuaW1hdGlvbi5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjpp
dGVyYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjpzZXRJdGVyYXRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjpzdGFydFRpbWUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJBbmltYXRpb246OnNldFN0YXJ0VGltZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkFuaW1hdGlvbjo6dGltZU9mZnNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6
c2V0VGltZU9mZnNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6YWx0ZXJuYXRl
c0RpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6c2V0QWx0ZXJuYXRl
c0RpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6dG9DQ0FjdGl2ZUFu
aW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6ZGVzdHJveSk6CisgICAgICAgICogc3JjL1dl
YkFuaW1hdGlvbkN1cnZlQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViS2l0OjpjcmVhdGVUaW1pbmdGdW5jdGlvbik6CisgICAgICAgICogc3JjL1dlYkFu
aW1hdGlvbkN1cnZlQ29tbW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlOjphZGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjp0
b0NDQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRBbmltYXRpb25DdXJ2
ZTo6ZGVzdHJveSk6CisgICAgICAgICogc3JjL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZTo6YWRkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6OnRvQ0NBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmRlc3Ryb3kpOgorICAgICAgICAqIHRlc3RzL1dlYkFu
aW1hdGlvblRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9XZWJGbG9hdEFuaW1hdGlv
bkN1cnZlVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL1dlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlVGVzdC5jcHA6IEFkZGVkLgorCiAyMDEyLTA2LTI5ICBKb3NodWEgQmVsbCAgPGpz
YmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBLZWVwIGRpcmVjdGlvbiBv
biBJREJDdXJzb3IgdG8gYXZvaWQgY2FsbHMgdG8gYmFjayBlbmQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkK
aW5kZXggN2Q1NjRmNzRiZDQxNTAwNWQ1ZWJiZTYzNmNjZDg5ODM2Yjc0MGViMy4uODhlOTZlNjkx
NDY1NDdiM2FmNjE0YzViMGE4MmFmZGNhMmQ0YjU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRm
b3JtL1BsYXRmb3JtLmd5cGkKKysrIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKQEAg
LTMyLDYgKzMyLDggQEAKICAgICAndmFyaWFibGVzJzogewogICAgICAgICAncGxhdGZvcm1fZmls
ZXMnOiBbCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1BsYXRmb3JtLmgnLAorICAgICAg
ICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb24uaCcKKyAgICAgICAgICAgICdjaHJv
bWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0v
cHVibGljL1dlYkF1ZGlvQnVzLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJB
dWRpb0RldmljZS5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEu
aCcsCkBAIC01NCw2ICs1Niw4IEBACiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkZp
bGVVdGlsaXRpZXMuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkZpbHRlck9w
ZXJhdGlvbi5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmlsdGVyT3BlcmF0
aW9ucy5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZS5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRLZXlmcmFtZS5o
JywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRQb2ludC5oJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRRdWFkLmgnLAogICAgICAgICAgICAgJ2No
cm9taXVtL3B1YmxpYy9XZWJGbG9hdFJlY3QuaCcsCkBAIC0xMDcsNyArMTExLDEwIEBACiAgICAg
ICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oJywKICAgICAgICAgICAgICdjaHJv
bWl1bS9wdWJsaWMvV2ViVGhyZWFkLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9X
ZWJUaHJlYWRTYWZlRGF0YS5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVGlt
aW5nRnVuY3Rpb25UeXBlLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dl
YlRyYW5zZm9ybUtleWZyYW1lLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJU
cmFuc2Zvcm1PcGVyYXRpb25zLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJQ
cmVyZW5kZXIuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlVSTC5oJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmVlOTIxODA4NGQyN2FhMmZkMmE3NWQwNmNkZDEzMTBkMmU3MWY4NTEKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbi5oCkBA
IC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQW5pbWF0aW9uX2gKKyNk
ZWZpbmUgV2ViQW5pbWF0aW9uX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUg
IldlYk5vbkNvcHlhYmxlLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZU93blB0ci5oIgorCisjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDQ0FjdGl2ZUFuaW1hdGlvbjsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkFuaW1hdGlvbkN1cnZlOworCisvLyBBIGNvbXBv
c2l0b3IgZHJpdmVuIGFuaW1hdGlvbi4KK2NsYXNzIFdlYkFuaW1hdGlvbiA6IHB1YmxpYyBXZWJO
b25Db3B5YWJsZSB7CitwdWJsaWM6CisgICAgZW51bSBUYXJnZXRQcm9wZXJ0eSB7CisgICAgICAg
IFdlYkFuaW1hdGlvblRyYW5zZm9ybSA9IDEsCisgICAgICAgIFdlYkFuaW1hdGlvbk9wYWNpdHkK
KyAgICB9OworCisgICAgV2ViQW5pbWF0aW9uKGNvbnN0IFdlYkFuaW1hdGlvbkN1cnZlJiBjdXJ2
ZSwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCisgICAgeworICAgICAgICBpbml0aWFs
aXplKGN1cnZlLCB0YXJnZXRQcm9wZXJ0eSk7CisgICAgfQorCisgICAgfldlYkFuaW1hdGlvbigp
CisgICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB0aGUg
bnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIHBsYXkuIElmIHRoaXMKKyAg
ICAvLyB2YWx1ZSBpcyB6ZXJvIHRoZSBhbmltYXRpb24gd2lsbCBub3QgcGxheS4gSWYgaXQgaXMg
bmVnYXRpdmUsIHRoZW4KKyAgICAvLyB0aGUgYW5pbWF0aW9uIHdpbGwgbG9vcCBpbmRlZmluaXRl
bHkuCisgICAgV0VCS0lUX0VYUE9SVCBpbnQgaXRlcmF0aW9ucygpIGNvbnN0OworICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBzZXRJdGVyYXRpb25zKGludCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIGRv
dWJsZSBzdGFydFRpbWUoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0U3RhcnRU
aW1lKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaGFzU2V0
U3RhcnRUaW1lKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIGRvdWJsZSB0aW1lT2Zmc2V0
KCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFRpbWVPZmZzZXQoZG91YmxlIG1v
bm90b25pY1RpbWUpOworCisgICAgLy8gSWYgYWx0ZXJuYXRlc0RpcmVjdGlvbiBpcyB0cnVlLCBv
biBvZGQgbnVtYmVyZWQgaXRlcmF0aW9ucyB3ZSByZXZlcnNlIHRoZSBjdXJ2ZS4KKyAgICBXRUJL
SVRfRVhQT1JUIGJvb2wgYWx0ZXJuYXRlc0RpcmVjdGlvbigpIGNvbnN0OworICAgIFdFQktJVF9F
WFBPUlQgdm9pZCBzZXRBbHRlcm5hdGVzRGlyZWN0aW9uKGJvb2wpOworCisjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCisgICAgb3BlcmF0b3IgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FjdGl2ZUFu
aW1hdGlvbj4oKSBjb25zdDsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIGluaXRpYWxpemUoY29uc3QgV2ViQW5pbWF0aW9uQ3VydmUmLCBUYXJnZXRQcm9wZXJ0
eSk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGluaXRpYWxpemUoY29uc3QgV2ViQW5pbWF0aW9u
Jik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGRlc3Ryb3koKTsKKworICAgIFdlYlByaXZhdGVP
d25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb24+IG1fcHJpdmF0ZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViQW5pbWF0aW9uX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaCBiL1Nv
dXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44ZjBkNGFhMDZhZmMxNzgyZmQwM2M0YjE5Y2JjZjY3NjM5YWY3MmYzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb25DdXJ2
ZS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQW5pbWF0aW9u
Q3VydmVfaAorI2RlZmluZSBXZWJBbmltYXRpb25DdXJ2ZV9oCisKKyNpbmNsdWRlICJXZWJDb21t
b24uaCIKKyNpbmNsdWRlICJXZWJOb25Db3B5YWJsZS5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVO
VEFUSU9OCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CitjbGFzcyBDQ0FuaW1hdGlvbkN1cnZlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
KworY2xhc3MgV2ViQW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMgV2ViTm9uQ29weWFibGUgeworcHVi
bGljOgorICAgIHZpcnR1YWwgfldlYkFuaW1hdGlvbkN1cnZlKCkgeyB9CisKKyNpZiBXRUJLSVRf
SU1QTEVNRU5UQVRJT04KKyAgICB2aXJ0dWFsIG9wZXJhdG9yIFBhc3NPd25QdHI8V2ViQ29yZTo6
Q0NBbmltYXRpb25DdXJ2ZT4oKSBjb25zdCA9IDA7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAg
IFdlYkFuaW1hdGlvbkN1cnZlKCkgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFdlYkFuaW1hdGlvbkN1cnZlX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmggYi9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li4yMzQ0MDVjNjA3OGNkOWE4YWFkMDhlN2IzNzY5NWM3YmQ1MTQzZjk5Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEFuaW1hdGlvbkN1
cnZlLmgKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJGbG9hdEFu
aW1hdGlvbkN1cnZlX2gKKyNkZWZpbmUgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZV9oCisKKyNpbmNs
dWRlICJXZWJBbmltYXRpb25DdXJ2ZS5oIgorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5j
bHVkZSAiV2ViRmxvYXRLZXlmcmFtZS5oIgorI2luY2x1ZGUgIldlYlByaXZhdGVPd25QdHIuaCIK
KyNpbmNsdWRlICJXZWJUaW1pbmdGdW5jdGlvblR5cGUuaCIKKworI2lmIFdFQktJVF9JTVBMRU1F
TlRBVElPTgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgQ0NBbmltYXRpb25DdXJ2ZTsKK2NsYXNzIENDS2V5ZnJhbWVkRmxvYXRB
bmltYXRpb25DdXJ2ZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEEga2V5ZnJhbWVk
IGZsb2F0IGFuaW1hdGlvbiBjdXJ2ZS4KK2NsYXNzIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgOiBw
dWJsaWMgV2ViQW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIFdlYkZsb2F0QW5pbWF0aW9u
Q3VydmUoKSB7IGluaXRpYWxpemUoKTsgfQorICAgIHZpcnR1YWwgfldlYkZsb2F0QW5pbWF0aW9u
Q3VydmUoKSB7IGRlc3Ryb3koKTsgfQorCisgICAgLy8gQWRkcyB0aGUga2V5ZnJhbWUgd2l0aCB0
aGUgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gKGVhc2UpLgorICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBhZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFtZSYpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBh
ZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFtZSYsIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZSk7CisgICAg
Ly8gQWRkcyB0aGUga2V5ZnJhbWUgd2l0aCBhIGN1c3RvbSwgYmV6aWVyIHRpbWluZyBmdW5jdGlv
bi4gTm90ZSwgaXQgaXMKKyAgICAvLyBhc3N1bWVkIHRoYXQgeDAgPSB5MCA9IDAsIGFuZCB4MyA9
IHkzID0gMS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRkKGNvbnN0IFdlYkZsb2F0S2V5ZnJh
bWUmLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpOworCisjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAgdmlydHVhbCBvcGVyYXRvciBQYXNzT3duUHRyPFdl
YkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+KCkgY29uc3Q7CisjZW5kaWYKKworcHJvdGVjdGVkOgor
ICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIGRlc3Ryb3koKTsKKworICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6Q0NLZXlmcmFt
ZWRGbG9hdEFuaW1hdGlvbkN1cnZlPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKKworI2VuZGlmIC8vIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEtleWZyYW1lLmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0S2V5ZnJhbWUuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kMjc2NDE4ZmY4ZjAxYTI2NmMxZDc5MmNjZjNmMGIzYjJiN2FkOWM2Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEtleWZyYW1lLmgK
QEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJGbG9hdEtleWZyYW1l
X2gKKyNkZWZpbmUgV2ViRmxvYXRLZXlmcmFtZV9oCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitz
dHJ1Y3QgV2ViRmxvYXRLZXlmcmFtZSB7CisgICAgV2ViRmxvYXRLZXlmcmFtZShkb3VibGUgdGlt
ZSwgZmxvYXQgdmFsdWUpCisgICAgICAgIDogdGltZSh0aW1lKQorICAgICAgICAsIHZhbHVlKHZh
bHVlKQorICAgIHsKKyAgICB9CisKKyAgICBkb3VibGUgdGltZTsKKyAgICBmbG9hdCB2YWx1ZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViRmxvYXRLZXlmcmFt
ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRpbWlu
Z0Z1bmN0aW9uVHlwZS5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUaW1p
bmdGdW5jdGlvblR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYzQyOTE5ZjU2NDJmMzcxMmY0YTE2NjkyNWI0
OWU4OWM3NDA4NDkzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVt
L3B1YmxpYy9XZWJUaW1pbmdGdW5jdGlvblR5cGUuaApAQCAtMCwwICsxLDQwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZV9oCisjZGVmaW5lIFdlYlRpbWlu
Z0Z1bmN0aW9uVHlwZV9oCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitlbnVtIFdlYlRpbWluZ0Z1
bmN0aW9uVHlwZSB7CisgICAgV2ViVGltaW5nRnVuY3Rpb25UeXBlRWFzZSwKKyAgICBXZWJUaW1p
bmdGdW5jdGlvblR5cGVFYXNlSW4sCisgICAgV2ViVGltaW5nRnVuY3Rpb25UeXBlRWFzZU91dCwK
KyAgICBXZWJUaW1pbmdGdW5jdGlvblR5cGVFYXNlSW5PdXQsCisgICAgV2ViVGltaW5nRnVuY3Rp
b25UeXBlTGluZWFyCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdl
YlRpbWluZ0Z1bmN0aW9uVHlwZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vcHVibGljL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmggYi9Tb3VyY2UvUGxhdGZvcm0v
Y2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MzJmMTI3OTc0MDU3YmYyOWIyZDc1ZTljN2M1YTIzZjMyYTM0NDQ0MgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlX2gKKyNkZWZpbmUgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVf
aAorCisjaW5jbHVkZSAiV2ViQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgIldlYkNvbW1v
bi5oIgorI2luY2x1ZGUgIldlYlByaXZhdGVPd25QdHIuaCIKKyNpbmNsdWRlICJXZWJUaW1pbmdG
dW5jdGlvblR5cGUuaCIKKyNpbmNsdWRlICJXZWJUcmFuc2Zvcm1LZXlmcmFtZS5oIgorCisjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDQ0FuaW1hdGlvbkN1cnZlOworY2xhc3MgQ0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7
CisKKy8vIEEga2V5ZnJhbWVkIHRyYW5zZm9ybSBhbmltYXRpb24gY3VydmUuCitjbGFzcyBXZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA6IHB1YmxpYyBXZWJBbmltYXRpb25DdXJ2ZSB7CitwdWJs
aWM6CisgICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7IGluaXRpYWxpemUoKTsgfQor
ICAgIHZpcnR1YWwgfldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCkgeyBkZXN0cm95KCk7IH0K
KworICAgIC8vIEFkZHMgdGhlIGtleWZyYW1lIHdpdGggdGhlIGRlZmF1bHQgdGltaW5nIGZ1bmN0
aW9uIChlYXNlKS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRkKGNvbnN0IFdlYlRyYW5zZm9y
bUtleWZyYW1lJik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFkZChjb25zdCBXZWJUcmFuc2Zv
cm1LZXlmcmFtZSYsIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZSk7CisgICAgLy8gQWRkcyB0aGUga2V5
ZnJhbWUgd2l0aCBhIGN1c3RvbSwgYmV6aWVyIHRpbWluZyBmdW5jdGlvbi4gTm90ZSwgaXQgaXMK
KyAgICAvLyBhc3N1bWVkIHRoYXQgeDAgPSB5MCA9IDAsIGFuZCB4MyA9IHkzID0gMS4KKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgYWRkKGNvbnN0IFdlYlRyYW5zZm9ybUtleWZyYW1lJiwgZG91Ymxl
IHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyKTsKKworI2lmIFdFQktJVF9JTVBM
RU1FTlRBVElPTgorICAgIHZpcnR1YWwgb3BlcmF0b3IgUGFzc093blB0cjxXZWJDb3JlOjpDQ0Fu
aW1hdGlvbkN1cnZlPigpIGNvbnN0OworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBkZXN0cm95
KCk7CisKKyAgICBXZWJQcml2YXRlT3duUHRyPFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmU+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAor
CisjZW5kaWYgLy8gV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVfaApkaWZmIC0tZ2l0IGEvU291
cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oIGIvU291
cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmM5OWVmNTU4N2JhM2QzZjUyM2IwYmZmOGY3M2ExOTMzZjBjYWJhZTQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtl
eWZyYW1lLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUcmFu
c2Zvcm1LZXlmcmFtZV9oCisjZGVmaW5lIFdlYlRyYW5zZm9ybUtleWZyYW1lX2gKKworI2luY2x1
ZGUgIldlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0
cnVjdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSB7CisgICAgV2ViVHJhbnNmb3JtS2V5ZnJhbWUoZG91
YmxlIHRpbWUsIGNvbnN0IFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlKQorICAgICAgICA6
IHRpbWUodGltZSkKKyAgICAgICAgLCB2YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAg
ZG91YmxlIHRpbWU7CisgICAgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB2YWx1ZTsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViVHJhbnNmb3JtS2V5ZnJhbWVfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IDc4ZTQyOGIyMjg1ZDM2M2U1NDc4ZGY3ZmEy
MzhmMzZmM2ViZWY5MDcuLjJmZWVjYzczODlkM2M1ODFkNGY0M2ZiOTQ0NjAyZTNiMDdkNTMyNTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTQ3Nyw4ICs0NzcsMTEgQEAKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYlRleHRDaGVja2luZ0NvbXBsZXRpb25JbXBsLmNwcCcsCiAgICAg
ICAgICAgICAgICAgJ3NyYy9XZWJUZXh0Q2hlY2tpbmdSZXN1bHQuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3QuY3BwJywKKyAgICAgICAgICAgICAgICAn
c3JjL1dlYkFuaW1hdGlvbi5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9u
Q29udHJvbGxlckltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkFuaW1hdGlvbkNv
bnRyb2xsZXJJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ3VydmVD
b21tb24uY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9u
LmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQXJyYXlCdWZmZXIuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYkFycmF5QnVmZmVyVmlldy5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViQmluZGluZ3MuY3BwJywKQEAgLTUyNyw2ICs1MzAsNyBAQAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViRmlsZUNob29zZXJDb21wbGV0aW9uSW1wbC5oJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYkZpbGVTeXN0ZW1DYWxsYmFja3NJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJGaWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dl
YkZsb2F0QW5pbWF0aW9uQ3VydmUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRD
YWNoZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRm9udERlc2NyaXB0aW9uLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGb250SW1wbC5jcHAnLApAQCAtNjUxLDYgKzY1NSw3
IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTdXJyb3VuZGluZ1RleHQuY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYlRleHRJbnB1dEluZm8uY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL1dlYlRleHRSdW4uY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxMb2FkVGltaW5n
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJTY29wZWRVc2VyR2VzdHVyZS5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViVGV4dEZpZWxkRGVjb3JhdG9yQ2xpZW50LmNwcCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCA4YmZjZTljZjQzZTJiM2VhZWYyYzllNTRj
YzlkMzA1OGFlZWRhM2VmLi5lNTE1YTVlZDExYzlhM2I3MTA1N2NmZGYzN2QxYzgwMDM0YjA0ZGEz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTE0OCw3ICsxNDgsOSBAQAogICAg
ICAgICAgICAgJ3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvVHJlZVRlc3RIZWxwZXJzLmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvVHJlZVRlc3RI
ZWxwZXJzLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL1dlYkFuaW1hdGlvblRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9XZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwJywK
KyAgICAgICAgICAgICd0ZXN0cy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dl
YkxheWVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkxheWVyVHJlZVZpZXdUZXN0
LmNwcCcsCkBAIC0xNTcsNiArMTU5LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlU2Vy
aWFsaXplclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9XZWJTb2NrZXREZWZsYXRlclRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVy
VGVzdC5jcHAnLAorICAgICAgICAgICAgJ3Rlc3RzL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4VGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvV2ViVVJMUmVxdWVzdFRlc3QuY3BwJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdkZGRmYzI0
MTM2OTY4NWYyOGRmOTI5YmEwMGU0NTU2NDM4NTk1NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEsMTAxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxwdWJsaWMv
V2ViQW5pbWF0aW9uLmg+CisKKyNpbmNsdWRlICJBbmltYXRpb25JZFZlbmRvci5oIgorI2luY2x1
ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2
ZS5oIgorI2luY2x1ZGUgPHB1YmxpYy9XZWJBbmltYXRpb25DdXJ2ZS5oPgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1c2luZyBXZWJDb3Jl
OjpBbmltYXRpb25JZFZlbmRvcjsKK3VzaW5nIFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOwor
CituYW1lc3BhY2UgV2ViS2l0IHsKKworaW50IFdlYkFuaW1hdGlvbjo6aXRlcmF0aW9ucygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+aXRlcmF0aW9ucygpOworfQorCit2b2lkIFdl
YkFuaW1hdGlvbjo6c2V0SXRlcmF0aW9ucyhpbnQgbikKK3sKKyAgICBtX3ByaXZhdGUtPnNldEl0
ZXJhdGlvbnMobik7Cit9CisKK2RvdWJsZSBXZWJBbmltYXRpb246OnN0YXJ0VGltZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+c3RhcnRUaW1lKCk7Cit9CisKK3ZvaWQgV2ViQW5p
bWF0aW9uOjpzZXRTdGFydFRpbWUoZG91YmxlIG1vbm90b25pY1RpbWUpCit7CisgICAgbV9wcml2
YXRlLT5zZXRTdGFydFRpbWUobW9ub3RvbmljVGltZSk7Cit9CisKK2RvdWJsZSBXZWJBbmltYXRp
b246OnRpbWVPZmZzZXQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnRpbWVPZmZz
ZXQoKTsKK30KKwordm9pZCBXZWJBbmltYXRpb246OnNldFRpbWVPZmZzZXQoZG91YmxlIG1vbm90
b25pY1RpbWUpCit7CisgICAgbV9wcml2YXRlLT5zZXRUaW1lT2Zmc2V0KG1vbm90b25pY1RpbWUp
OworfQorCitib29sIFdlYkFuaW1hdGlvbjo6YWx0ZXJuYXRlc0RpcmVjdGlvbigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+YWx0ZXJuYXRlc0RpcmVjdGlvbigpOworfQorCit2b2lk
IFdlYkFuaW1hdGlvbjo6c2V0QWx0ZXJuYXRlc0RpcmVjdGlvbihib29sIGFsdGVybmF0ZXMpCit7
CisgICAgbV9wcml2YXRlLT5zZXRBbHRlcm5hdGVzRGlyZWN0aW9uKGFsdGVybmF0ZXMpOworfQor
CitXZWJBbmltYXRpb246Om9wZXJhdG9yIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVBbmlt
YXRpb24+KCkgY29uc3QKK3sKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb24+
IHRvUmV0dXJuKG1fcHJpdmF0ZS0+Y2xvbmVGb3JJbXBsVGhyZWFkKCkpOworICAgIHRvUmV0dXJu
LT5zZXROZWVkc1N5bmNocm9uaXplZFN0YXJ0VGltZSh0cnVlKTsKKyAgICByZXR1cm4gdG9SZXR1
cm4ucmVsZWFzZSgpOworfQorCit2b2lkIFdlYkFuaW1hdGlvbjo6aW5pdGlhbGl6ZShjb25zdCBX
ZWJBbmltYXRpb25DdXJ2ZSYgY3VydmUsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQor
eworICAgIG1fcHJpdmF0ZS5yZXNldChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuaW1hdGlvbklk
VmVuZG9yOjpnZXROZXh0QW5pbWF0aW9uSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBbmltYXRpb25JZFZlbmRvcjo6Z2V0TmV4dEdyb3VwSWQoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHk+KHRhcmdldFByb3Bl
cnR5KSkubGVha1B0cigpKTsKK30KKwordm9pZCBXZWJBbmltYXRpb246OmRlc3Ryb3koKQorewor
ICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb25DdXJ2ZUNvbW1v
bi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb25DdXJ2ZUNvbW1v
bi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTJkMGI0ODQyYTdmMDc3MGVkNGQyMGEzN2U2N2M0MTkzYjQ3MDNh
MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1h
dGlvbkN1cnZlQ29tbW9uLmNwcApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJBbmltYXRpb25DdXJ2ZUNvbW1vbi5oIgor
CisjaW5jbHVkZSAiY2MvQ0NUaW1pbmdGdW5jdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitQYXNzT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IGNyZWF0ZVRpbWluZ0Z1bmN0
aW9uKFdlYlRpbWluZ0Z1bmN0aW9uVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgV2ViVGltaW5nRnVuY3Rpb25UeXBlRWFzZToKKyAgICAgICAgcmV0dXJuIFdlYkNv
cmU6OkNDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKTsKKyAgICBjYXNlIFdlYlRpbWluZ0Z1
bmN0aW9uVHlwZUVhc2VJbjoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNDRWFzZUluVGltaW5n
RnVuY3Rpb246OmNyZWF0ZSgpOworICAgIGNhc2UgV2ViVGltaW5nRnVuY3Rpb25UeXBlRWFzZU91
dDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNDRWFzZU91dFRpbWluZ0Z1bmN0aW9uOjpjcmVh
dGUoKTsKKyAgICBjYXNlIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VJbk91dDoKKyAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OkNDRWFzZUluT3V0VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOworICAg
IGNhc2UgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyOgorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uQ3Vy
dmVDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbkN1cnZl
Q29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMmM1NjJlMzlkZWExYzQ4OTE0OGFkNTg3MWU4MzllMDdhNGVm
MDNlYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFu
aW1hdGlvbkN1cnZlQ29tbW9uLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBXZWJBbmltYXRpb25DdXJ2ZUNvbW1vbl9oCisjZGVmaW5lIFdlYkFuaW1hdGlvbkN1cnZl
Q29tbW9uX2gKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJUaW1pbmdGdW5jdGlvblR5cGUuaD4KKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDQ1Rp
bWluZ0Z1bmN0aW9uOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1Bhc3NPd25QdHI8V2ViQ29y
ZTo6Q0NUaW1pbmdGdW5jdGlvbj4gY3JlYXRlVGltaW5nRnVuY3Rpb24oV2ViVGltaW5nRnVuY3Rp
b25UeXBlKTsKK30KKworI2VuZGlmIC8vIFdlYkFuaW1hdGlvbkN1cnZlQ29tbW9uX2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZDVmZjVlZGZjMjQwN2E3MTk5NzMwMTg4ZDNlMzI1M2UxODdhMWVkNQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZsb2F0QW5p
bWF0aW9uQ3VydmUuY3BwCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmg+
CisKKyNpbmNsdWRlICJXZWJBbmltYXRpb25DdXJ2ZUNvbW1vbi5oIgorI2luY2x1ZGUgImNjL0ND
S2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRlICJjYy9DQ1RpbWluZ0Z1bmN0aW9u
LmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmFk
ZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiBrZXlmcmFtZSkKK3sKKyAgICBhZGQoa2V5ZnJhbWUs
IFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2UpOworfQorCit2b2lkIFdlYkZsb2F0QW5pbWF0aW9u
Q3VydmU6OmFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiBrZXlmcmFtZSwgV2ViVGltaW5nRnVu
Y3Rpb25UeXBlIHR5cGUpCit7CisgICAgbV9wcml2YXRlLT5hZGRLZXlmcmFtZShXZWJDb3JlOjpD
Q0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZShrZXlmcmFtZS50aW1lLCBrZXlmcmFtZS52YWx1ZSwgY3Jl
YXRlVGltaW5nRnVuY3Rpb24odHlwZSkpKTsKK30KKwordm9pZCBXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlOjphZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFtZSYga2V5ZnJhbWUsIGRvdWJsZSB4MSwgZG91
YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MikKK3sKKyAgICBtX3ByaXZhdGUtPmFkZEtleWZy
YW1lKFdlYkNvcmU6OkNDRmxvYXRLZXlmcmFtZTo6Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZy
YW1lLnZhbHVlLCBXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSh4
MSwgeTEsIHgyLCB5MikpKTsKK30KKworV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6b3BlcmF0b3Ig
UGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPigpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fcHJpdmF0ZS0+Y2xvbmUoKTsKK30KKwordm9pZCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZl
Ojppbml0aWFsaXplKCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoV2ViQ29yZTo6Q0NLZXlmcmFt
ZWRGbG9hdEFuaW1hdGlvbkN1cnZlOjpjcmVhdGUoKS5sZWFrUHRyKCkpOworfQorCit2b2lkIFdl
YkZsb2F0QW5pbWF0aW9uQ3VydmU6OmRlc3Ryb3koKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgw
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjFjZDc3Zjc1NWEwMWI1NTA5NjdiMDk0ZTA0ZDAxNGY3ZGQ3MDRkZQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlLmNwcApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuaD4KKwor
I2luY2x1ZGUgIldlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NLZXlm
cmFtZWRBbmltYXRpb25DdXJ2ZS5oIgorI2luY2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rpb24uaCIK
KyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwor
bmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmFk
ZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYga2V5ZnJhbWUpCit7CisgICAgYWRkKGtleWZy
YW1lLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVFYXNlKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZTo6YWRkKGNvbnN0IFdlYlRyYW5zZm9ybUtleWZyYW1lJiBrZXlmcmFtZSwg
V2ViVGltaW5nRnVuY3Rpb25UeXBlIHR5cGUpCit7CisgICAgbV9wcml2YXRlLT5hZGRLZXlmcmFt
ZShXZWJDb3JlOjpDQ1RyYW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoa2V5ZnJhbWUudGltZSwga2V5
ZnJhbWUudmFsdWUsIGNyZWF0ZVRpbWluZ0Z1bmN0aW9uKHR5cGUpKSk7Cit9CisKK3ZvaWQgV2Vi
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYg
a2V5ZnJhbWUsIGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MikKK3sK
KyAgICBtX3ByaXZhdGUtPmFkZEtleWZyYW1lKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6
OmNyZWF0ZShrZXlmcmFtZS50aW1lLCBrZXlmcmFtZS52YWx1ZSwgV2ViQ29yZTo6Q0NDdWJpY0Jl
emllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoeDEsIHkxLCB4MiwgeTIpKSk7Cit9CisKK1dlYlRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpvcGVyYXRvciBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5p
bWF0aW9uQ3VydmU+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jbG9uZSgpOwor
fQorCit2b2lkIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjppbml0aWFsaXplKCkKK3sKKyAg
ICBtX3ByaXZhdGUucmVzZXQoV2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZTo6Y3JlYXRlKCkubGVha1B0cigpKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZTo6ZGVzdHJveSgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KDApOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvV2ViQW5pbWF0aW9uVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dl
YkFuaW1hdGlvblRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiYjAwZDUzMWU1OTAwNTJmNzI2YzZhYzVi
ODZkOGFkMjgyZGIyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL1dlYkFuaW1hdGlvblRlc3QuY3BwCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJBbmltYXRpb24u
aD4KKworI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisKKyNpbmNsdWRlIDxndGVz
dC9ndGVzdC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7Cit1c2luZyBXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjsK
KworbmFtZXNwYWNlIHsKKworY2xhc3MgTW9ja1dlYkFuaW1hdGlvbiA6IHB1YmxpYyBXZWJBbmlt
YXRpb24geworcHVibGljOgorICAgIE1vY2tXZWJBbmltYXRpb24oY29uc3QgV2ViQW5pbWF0aW9u
Q3VydmUmIGN1cnZlLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKKyAgICAgICAgOiBX
ZWJBbmltYXRpb24oY3VydmUsIHRhcmdldFByb3BlcnR5KQorICAgIHsKKyAgICB9CisKKyAgICB2
aXJ0dWFsIH5Nb2NrV2ViQW5pbWF0aW9uKCkKKyAgICB7CisgICAgfQorCisgICAgQ0NBY3RpdmVB
bmltYXRpb24qIHRvQ0NBY3RpdmVBbmltYXRpb24oKSB7IHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7
IH0KK307CisKK1RFU1QoV2ViQW5pbWF0aW9uVGVzdCwgRGVmYXVsdFNldHRpbmdzKQoreworICAg
IFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgTW9ja1dlYkFuaW1hdGlvbiBhbmlt
YXRpb24oY3VydmUsIFdlYkFuaW1hdGlvbjo6V2ViQW5pbWF0aW9uT3BhY2l0eSk7CisKKyAgICAv
LyBFbnN1cmUgdGhhdCB0aGUgZGVmYXVsdHMgYXJlIGNvcnJlY3QuCisgICAgRVhQRUNUX0VRKDEs
IGFuaW1hdGlvbi5pdGVyYXRpb25zKCkpOworICAgIEVYUEVDVF9FUSgwLCBhbmltYXRpb24uc3Rh
cnRUaW1lKCkpOworICAgIEVYUEVDVF9FUSgwLCBhbmltYXRpb24udGltZU9mZnNldCgpKTsKKyAg
ICBFWFBFQ1RfRVEoZmFsc2UsIGFuaW1hdGlvbi5hbHRlcm5hdGVzRGlyZWN0aW9uKCkpOworCisg
ICAgQ0NBY3RpdmVBbmltYXRpb24qIGNjQW5pbWF0aW9uID0gYW5pbWF0aW9uLnRvQ0NBY3RpdmVB
bmltYXRpb24oKTsKKyAgICBFWFBFQ1RfRVEoMSwgY2NBbmltYXRpb24tPml0ZXJhdGlvbnMoKSk7
CisgICAgRVhQRUNUX0VRKDAsIGNjQW5pbWF0aW9uLT5zdGFydFRpbWUoKSk7CisgICAgRVhQRUNU
X0VRKDAsIGNjQW5pbWF0aW9uLT50aW1lT2Zmc2V0KCkpOworICAgIEVYUEVDVF9FUShmYWxzZSwg
Y2NBbmltYXRpb24tPmFsdGVybmF0ZXNEaXJlY3Rpb24oKSk7Cit9CisKK1RFU1QoV2ViQW5pbWF0
aW9uVGVzdCwgTW9kaWZpZWRTZXR0aW5ncykKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZl
IGN1cnZlOworICAgIE1vY2tXZWJBbmltYXRpb24gYW5pbWF0aW9uKGN1cnZlLCBXZWJBbmltYXRp
b246OldlYkFuaW1hdGlvbk9wYWNpdHkpOworICAgIGFuaW1hdGlvbi5zZXRJdGVyYXRpb25zKDIp
OworICAgIGFuaW1hdGlvbi5zZXRTdGFydFRpbWUoMik7CisgICAgYW5pbWF0aW9uLnNldFRpbWVP
ZmZzZXQoMik7CisgICAgYW5pbWF0aW9uLnNldEFsdGVybmF0ZXNEaXJlY3Rpb24odHJ1ZSk7CisK
KyAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZGVmYXVsdHMgYXJlIGNvcnJlY3QuCisgICAgRVhQRUNU
X0VRKDIsIGFuaW1hdGlvbi5pdGVyYXRpb25zKCkpOworICAgIEVYUEVDVF9FUSgyLCBhbmltYXRp
b24uc3RhcnRUaW1lKCkpOworICAgIEVYUEVDVF9FUSgyLCBhbmltYXRpb24udGltZU9mZnNldCgp
KTsKKyAgICBFWFBFQ1RfRVEodHJ1ZSwgYW5pbWF0aW9uLmFsdGVybmF0ZXNEaXJlY3Rpb24oKSk7
CisKKyAgICBDQ0FjdGl2ZUFuaW1hdGlvbiogY2NBbmltYXRpb24gPSBhbmltYXRpb24udG9DQ0Fj
dGl2ZUFuaW1hdGlvbigpOworICAgIEVYUEVDVF9FUSgyLCBjY0FuaW1hdGlvbi0+aXRlcmF0aW9u
cygpKTsKKyAgICBFWFBFQ1RfRVEoMiwgY2NBbmltYXRpb24tPnN0YXJ0VGltZSgpKTsKKyAgICBF
WFBFQ1RfRVEoMiwgY2NBbmltYXRpb24tPnRpbWVPZmZzZXQoKSk7CisgICAgRVhQRUNUX0VRKHRy
dWUsIGNjQW5pbWF0aW9uLT5hbHRlcm5hdGVzRGlyZWN0aW9uKCkpOworfQorCit9IC8vIG5hbWVz
cGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGbG9hdEFu
aW1hdGlvbkN1cnZlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZs
b2F0QW5pbWF0aW9uQ3VydmVUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYjMwNzgwNDg5NTY3OTNkNjJh
NjYwNzg4M2YwYzIwZWQ2YjgyYjhkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKQEAgLTAsMCArMSwy
NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHB1
YmxpYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmg+CisKKyNpbmNsdWRlICJjYy9DQ0FjdGl2ZUFu
aW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKKyNp
bmNsdWRlICJjYy9DQ1RpbWluZ0Z1bmN0aW9uLmgiCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5o
PgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwordXNpbmcgV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRp
b247Cit1c2luZyBXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU7CisKK25h
bWVzcGFjZSB7CisKK2NsYXNzIE1vY2tXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIDogcHVibGljIFdl
YkZsb2F0QW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIENDS2V5ZnJhbWVkRmxvYXRBbmlt
YXRpb25DdXJ2ZSogdG9DQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUoKSB7IHJldHVybiBt
X3ByaXZhdGUuZ2V0KCk7IH0KK307CisKKy8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24g
d2l0aCBvbmUga2V5ZnJhbWUgd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYkZsb2F0QW5pbWF0
aW9uQ3VydmVUZXN0LCBPbmVGbG9hdEtleWZyYW1lKQoreworICAgIE1vY2tXZWJGbG9hdEFuaW1h
dGlvbkN1cnZlIHdlYkN1cnZlOworICAgIHdlYkN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAs
IDIpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIENDS2V5ZnJhbWVkRmxvYXRB
bmltYXRpb25DdXJ2ZSogY3VydmUgPSB3ZWJDdXJ2ZS50b0NDS2V5ZnJhbWVkRmxvYXRBbmltYXRp
b25DdXJ2ZSgpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDAuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgy
LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0
VmFsdWUoMikpOworfQorCisvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggdHdv
IGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2
ZVRlc3QsIFR3b0Zsb2F0S2V5ZnJhbWUpCit7CisgICAgTW9ja1dlYkZsb2F0QW5pbWF0aW9uQ3Vy
dmUgd2ViQ3VydmU7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMiksIFdl
YlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5
ZnJhbWUoMSwgNCksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgQ0NLZXlmcmFt
ZWRGbG9hdEFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IHdlYkN1cnZlLnRvQ0NLZXlmcmFtZWRGbG9h
dEFuaW1hdGlvbkN1cnZlKCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1
ZSgtMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS0+Z2V0VmFsdWUoMC41KSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgxKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1
cnZlLT5nZXRWYWx1ZSgyKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24g
d2l0aCB0aHJlZSBrZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYkZsb2F0QW5p
bWF0aW9uQ3VydmVUZXN0LCBUaHJlZUZsb2F0S2V5ZnJhbWUpCit7CisgICAgTW9ja1dlYkZsb2F0
QW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJh
bWUoMCwgMiksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgd2ViQ3VydmUuYWRk
KFdlYkZsb2F0S2V5ZnJhbWUoMSwgNCksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7Cisg
ICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMiwgOCksIFdlYlRpbWluZ0Z1bmN0aW9u
VHlwZUxpbmVhcik7CisgICAgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9
IHdlYkN1cnZlLnRvQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKCk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgtMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgy
LCBjdXJ2ZS0+Z2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS0+Z2V0
VmFsdWUoMC41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgxKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgxLjUpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoOCwgY3VydmUtPmdldFZhbHVlKDIpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEo
OCwgY3VydmUtPmdldFZhbHVlKDMpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1h
dGlvbiB3aXRoIG11bHRpcGxlIGtleXMgYXQgYSBnaXZlbiB0aW1lIHdvcmtzIHNhbmVseS4KK1RF
U1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIFJlcGVhdGVkRmxvYXRLZXlUaW1lcykKK3sK
KyAgICBNb2NrV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICB3ZWJDdXJ2ZS5h
ZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCA0KSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsK
KyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCA0KSwgV2ViVGltaW5nRnVuY3Rp
b25UeXBlTGluZWFyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCA2KSwg
V2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRL
ZXlmcmFtZSgyLCA2KSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBDQ0tleWZy
YW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gd2ViQ3VydmUudG9DQ0tleWZyYW1lZEZs
b2F0QW5pbWF0aW9uQ3VydmUoKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS0+Z2V0
VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDApKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDAuNSkpOworCisgICAgLy8g
VGhlcmUgaXMgYSBkaXNjb250aW51aXR5IGF0IDEuIEFueSB2YWx1ZSBiZXR3ZWVuIDQgYW5kIDYg
aXMgdmFsaWQuCisgICAgZmxvYXQgdmFsdWUgPSBjdXJ2ZS0+Z2V0VmFsdWUoMSk7CisgICAgRVhQ
RUNUX1RSVUUodmFsdWUgPj0gNCAmJiB2YWx1ZSA8PSA2KTsKKworICAgIEVYUEVDVF9GTE9BVF9F
USg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMS41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZl
LT5nZXRWYWx1ZSgyKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLT5nZXRWYWx1ZSgz
KSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgdGhlIGtleWZyYW1lcyBtYXkgYmUgYWRkZWQgb3V0IG9m
IG9yZGVyLgorVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgVW5zb3J0ZWRLZXlmcmFt
ZXMpCit7CisgICAgTW9ja1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgd2Vi
Q3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMiwgOCksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxp
bmVhcik7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMiksIFdlYlRpbWlu
Z0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUo
MSwgNCksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgQ0NLZXlmcmFtZWRGbG9h
dEFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IHdlYkN1cnZlLnRvQ0NLZXlmcmFtZWRGbG9hdEFuaW1h
dGlvbkN1cnZlKCk7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKC0x
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoNCwgY3VydmUtPmdldFZhbHVlKDEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUt
PmdldFZhbHVlKDEuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0VmFsdWUo
MikpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMykpOworfQorCisv
LyBUZXN0cyB0aGF0IGEgY3ViaWMgYmV6aWVyIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBl
Y3RlZC4KK1RFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIEN1YmljQmV6aWVyVGltaW5n
RnVuY3Rpb24pCit7CisgICAgTW9ja1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7Cisg
ICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIDAuMjUsIDAsIDAuNzUsIDEp
OworICAgIHdlYkN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJUaW1pbmdGdW5j
dGlvblR5cGVMaW5lYXIpOworICAgIENDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSogY3Vy
dmUgPSB3ZWJDdXJ2ZS50b0NDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZSgpOworCisgICAg
RVhQRUNUX0ZMT0FUX0VRKDAsIGN1cnZlLT5nZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0xUKDAs
IGN1cnZlLT5nZXRWYWx1ZSgwLjI1KSk7CisgICAgRVhQRUNUX0dUKDAuMjUsIGN1cnZlLT5nZXRW
YWx1ZSgwLjI1KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgY3VydmUtPmdldFZhbHVlKDAu
NSkpOworICAgIEVYUEVDVF9MVCgwLjc1LCBjdXJ2ZS0+Z2V0VmFsdWUoMC43NSkpOworICAgIEVY
UEVDVF9HVCgxLCBjdXJ2ZS0+Z2V0VmFsdWUoMC43NSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgx
LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkpOworfQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2UgdGltaW5n
IGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZl
VGVzdCwgRWFzZVRpbWluZ0Z1bmN0aW9uKQoreworICAgIE1vY2tXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlIHdlYkN1cnZlOworICAgIHdlYkN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCBX
ZWJUaW1pbmdGdW5jdGlvblR5cGVFYXNlKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRLZXlm
cmFtZSgxLCAxKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBDQ0tleWZyYW1l
ZEZsb2F0QW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gd2ViQ3VydmUudG9DQ0tleWZyYW1lZEZsb2F0
QW5pbWF0aW9uQ3VydmUoKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9u
PiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkp
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3Vi
bGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rp
b24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkpOworICAgIH0KK30KKwor
Ly8gVGVzdHMgdXNpbmcgYSBsaW5lYXIgdGltaW5nIGZ1bmN0aW9uLgorVEVTVChXZWJGbG9hdEFu
aW1hdGlvbkN1cnZlVGVzdCwgTGluZWFyVGltaW5nRnVuY3Rpb24pCit7CisgICAgTW9ja1dlYkZs
b2F0QW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5
ZnJhbWUoMCwgMCksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgd2ViQ3VydmUu
YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7
CisgICAgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IHdlYkN1cnZlLnRv
Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKCk7CisKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKKyAg
ICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWUsIGN1cnZlLT5nZXRWYWx1ZSh0aW1lKSk7CisgICAg
fQorfQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFz
IGV4cGVjdGVkLgorVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZUluVGltaW5n
RnVuY3Rpb24pCit7CisgICAgTW9ja1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7Cisg
ICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIFdlYlRpbWluZ0Z1bmN0aW9u
VHlwZUVhc2VJbik7CisgICAgd2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdl
YlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlv
bkN1cnZlKiBjdXJ2ZSA9IHdlYkN1cnZlLnRvQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZl
KCk7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rp
b24oV2ViQ29yZTo6Q0NFYXNlSW5UaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkg
KiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVl
KHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkpOworICAgIH0KK30KKworLy8gVGVzdHMgdGhh
dCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2Vi
RmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VPdXRUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBN
b2NrV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2Vi
RmxvYXRLZXlmcmFtZSgwLCAwKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlRWFzZU91dCk7CisgICAg
d2ViQ3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYlRpbWluZ0Z1bmN0aW9uVHlw
ZUxpbmVhcik7CisgICAgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IHdl
YkN1cnZlLnRvQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKCk7CisKKyAgICBPd25QdHI8
V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNl
T3V0VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0
OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKKyAgICAgICAg
RVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdl
dFZhbHVlKHRpbWUpKTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1p
bmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3Vy
dmVUZXN0LCBFYXNlSW5PdXRUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBNb2NrV2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgw
LCAwKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlRWFzZUluT3V0KTsKKyAgICB3ZWJDdXJ2ZS5hZGQo
V2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAg
ICBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gd2ViQ3VydmUudG9DQ0tl
eWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmUoKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1Rp
bWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VJbk91dFRpbWluZ0Z1
bmN0aW9uOjpjcmVhdGUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9B
VF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLT5nZXRWYWx1ZSh0aW1l
KSk7CisgICAgfQorfQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0aW9u
IHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgQ3Vz
dG9tQmV6aWVyVGltaW5nRnVuY3Rpb24pCit7CisgICAgTW9ja1dlYkZsb2F0QW5pbWF0aW9uQ3Vy
dmUgd2ViQ3VydmU7CisgICAgZG91YmxlIHgxID0gMC4zOworICAgIGRvdWJsZSB5MSA9IDAuMjsK
KyAgICBkb3VibGUgeDIgPSAwLjg7CisgICAgZG91YmxlIHkyID0gMC43OworICAgIHdlYkN1cnZl
LmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCB4MSwgeTEsIHgyLCB5Mik7CisgICAgd2ViQ3Vy
dmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVh
cik7CisgICAgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKiBjdXJ2ZSA9IHdlYkN1cnZl
LnRvQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1cnZlKCk7CisKKyAgICBPd25QdHI8V2ViQ29y
ZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NDdWJpY0Jlemll
clRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoeDEsIHkxLCB4MiwgeTIpKTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4y
NTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1l
KSwgY3VydmUtPmdldFZhbHVlKHRpbWUpKTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgdGhl
IGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGlzIGluZGVlZCBlYXNlLgorVEVTVChXZWJGbG9hdEFu
aW1hdGlvbkN1cnZlVGVzdCwgRGVmYXVsdFRpbWluZ0Z1bmN0aW9uKQoreworICAgIE1vY2tXZWJG
bG9hdEFuaW1hdGlvbkN1cnZlIHdlYkN1cnZlOworICAgIHdlYkN1cnZlLmFkZChXZWJGbG9hdEtl
eWZyYW1lKDAsIDApKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwg
V2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBDQ0tleWZyYW1lZEZsb2F0QW5pbWF0
aW9uQ3VydmUqIGN1cnZlID0gd2ViQ3VydmUudG9DQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3Vy
dmUoKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5j
dGlvbihXZWJDb3JlOjpDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkg
KiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVl
KHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2Vi
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zMGVjMTg0NDJhMTg0
YTZlNjRkYTJmNjBkZjE1MjA4YzIwMjY4NmZlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QuY3BwCkBA
IC0wLDAgKzEsMzE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuaD4KKworI2luY2x1ZGUg
ImNjL0NDQWN0aXZlQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRp
b25DdXJ2ZS5oIgorI2luY2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKKworI2luY2x1ZGUg
PGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMu
aD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKK3VzaW5nIFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOwordXNpbmcg
V2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTsKKworbmFtZXNwYWNl
IHsKKworY2xhc3MgTW9ja1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIDogcHVibGljIFdlYlRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBDQ0tleWZyYW1lZFRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlKiB0b0NDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKSB7
IHJldHVybiBtX3ByaXZhdGUuZ2V0KCk7IH0KK307CisKKy8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zv
cm0gYW5pbWF0aW9uIHdpdGggb25lIGtleWZyYW1lIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChX
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIE9uZVRyYW5zZm9ybUtleWZyYW1lKQorewor
ICAgIE1vY2tXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICBXZWJLaXQ6
OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICBvcGVyYXRpb25zLmFwcGVu
ZFRyYW5zbGF0ZSgyLCAwLCAwKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJh
bWUoMCwgb3BlcmF0aW9ucyksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgQ0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSB3ZWJDdXJ2ZS50b0NDS2V5
ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgy
LCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3Vy
dmUtPmdldFZhbHVlKDApLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdl
dFZhbHVlKDAuNSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFs
dWUoMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoMiku
bTQxKCkpOworfQorCisvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHR3
byBrZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlVGVzdCwgVHdvVHJhbnNmb3JtS2V5ZnJhbWUpCit7CisgICAgTW9ja1dlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlIHdlYkN1cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMiwgMCwg
MCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAg
IG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSg0LCAwLCAwKTsKKyAgICB3ZWJDdXJ2ZS5hZGQo
V2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJUaW1pbmdGdW5jdGlvblR5
cGVMaW5lYXIpOworICAgIHdlYkN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVy
YXRpb25zMiksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgQ0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSB3ZWJDdXJ2ZS50b0NDS2V5ZnJhbWVkVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdl
dFZhbHVlKC0xKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1
ZSgwKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUp
Lm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDEpLm00MSgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDIpLm00MSgpKTsKK30K
KworLy8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCB0aHJlZSBrZXlmcmFt
ZXMgd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVz
dCwgVGhyZWVUcmFuc2Zvcm1LZXlmcmFtZSkKK3sKKyAgICBNb2NrV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9w
ZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAwKTsKKyAg
ICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0
aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKKyAgICBvcGVyYXRpb25zMy5hcHBlbmRUcmFuc2xhdGUo
OCwgMCwgMCk7CisgICAgd2ViQ3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJh
dGlvbnMxKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQo
V2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJUaW1pbmdGdW5jdGlvblR5
cGVMaW5lYXIpOworICAgIHdlYkN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgyLCBvcGVy
YXRpb25zMyksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgQ0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSB3ZWJDdXJ2ZS50b0NDS2V5ZnJhbWVkVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUtPmdl
dFZhbHVlKC0xKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLT5nZXRWYWx1
ZSgwKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLT5nZXRWYWx1ZSgwLjUp
Lm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKDEpLm00MSgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDEuNSkubTQxKCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMikubTQxKCkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS0+Z2V0VmFsdWUoMykubTQxKCkpOworfQorCisvLyBUZXN0
cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG11bHRpcGxlIGtleXMgYXQgYSBnaXZl
biB0aW1lIHdvcmtzIHNhbmVseS4KK1RFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0
LCBSZXBlYXRlZFRyYW5zZm9ybUtleVRpbWVzKQoreworICAgIC8vIEEgc3RlcCBmdW5jdGlvbi4K
KyAgICBNb2NrV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFw
cGVuZFRyYW5zbGF0ZSg0LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQsIDAsIDAp
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKKyAgICBv
cGVyYXRpb25zMy5hcHBlbmRUcmFuc2xhdGUoNiwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM0OworICAgIG9wZXJhdGlvbnM0LmFwcGVuZFRyYW5z
bGF0ZSg2LCAwLCAwKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwg
b3BlcmF0aW9uczEpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIHdlYkN1cnZl
LmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYlRpbWluZ0Z1bmN0
aW9uVHlwZUxpbmVhcik7CisgICAgd2ViQ3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEs
IG9wZXJhdGlvbnMzKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICB3ZWJDdXJ2
ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMiwgb3BlcmF0aW9uczQpLCBXZWJUaW1pbmdGdW5j
dGlvblR5cGVMaW5lYXIpOworICAgIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUq
IGN1cnZlID0gd2ViQ3VydmUudG9DQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7
CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUtPmdldFZhbHVlKC0xKS5tNDEoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgwKS5tNDEoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDQsIGN1cnZlLT5nZXRWYWx1ZSgwLjUpLm00MSgpKTsKKworICAgIC8vIFRo
ZXJlIGlzIGEgZGlzY29udGludWl0eSBhdCAxLiBBbnkgdmFsdWUgYmV0d2VlbiA0IGFuZCA2IGlz
IHZhbGlkLgorICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHZhbHVlID0gY3VydmUtPmdldFZh
bHVlKDEpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLm00MSgpID49IDQgJiYgdmFsdWUubTQxKCkg
PD0gNik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUtPmdldFZhbHVlKDEuNSkubTQx
KCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMikubTQxKCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS0+Z2V0VmFsdWUoMykubTQxKCkpOworfQorCisv
LyBUZXN0cyB0aGF0IHRoZSBrZXlmcmFtZXMgbWF5IGJlIGFkZGVkIG91dCBvZiBvcmRlci4KK1RF
U1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBVbnNvcnRlZEtleWZyYW1lcykKK3sK
KyAgICBNb2NrV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFw
cGVuZFRyYW5zbGF0ZSgyLCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQsIDAsIDAp
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKKyAgICBv
cGVyYXRpb25zMy5hcHBlbmRUcmFuc2xhdGUoOCwgMCwgMCk7CisgICAgd2ViQ3VydmUuYWRkKFdl
YlRyYW5zZm9ybUtleWZyYW1lKDIsIG9wZXJhdGlvbnMzKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBl
TGluZWFyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0
aW9uczEpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIHdlYkN1cnZlLmFkZChX
ZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYlRpbWluZ0Z1bmN0aW9uVHlw
ZUxpbmVhcik7CisgICAgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUg
PSB3ZWJDdXJ2ZS50b0NDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKworICAg
IEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS0+Z2V0VmFsdWUoLTEpLm00MSgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMiwgY3VydmUtPmdldFZhbHVlKDApLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxP
QVRfRVEoMywgY3VydmUtPmdldFZhbHVlKDAuNSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USg0LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBj
dXJ2ZS0+Z2V0VmFsdWUoMS41KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZl
LT5nZXRWYWx1ZSgyKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLT5nZXRW
YWx1ZSgzKS5tNDEoKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSBjdWJpYyBiZXppZXIgdGltaW5n
IGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZVRlc3QsIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24pCit7CisgICAgTW9ja1dlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlIHdlYkN1cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwg
MCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwor
ICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKKyAgICB3ZWJDdXJ2ZS5h
ZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCAwLjI1LCAwLCAwLjc1LCAx
KTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIp
LCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIENDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gd2ViQ3VydmUudG9DQ0tleWZyYW1lZFRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlKCk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGN1cnZlLT5nZXRWYWx1ZSgw
KS5tNDEoKSk7CisgICAgRVhQRUNUX0xUKDAsIGN1cnZlLT5nZXRWYWx1ZSgwLjI1KS5tNDEoKSk7
CisgICAgRVhQRUNUX0dUKDAuMjUsIGN1cnZlLT5nZXRWYWx1ZSgwLjI1KS5tNDEoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDAuNSwgY3VydmUtPmdldFZhbHVlKDAuNSkubTQxKCkpOworICAgIEVY
UEVDVF9MVCgwLjc1LCBjdXJ2ZS0+Z2V0VmFsdWUoMC43NSkubTQxKCkpOworICAgIEVYUEVDVF9H
VCgxLCBjdXJ2ZS0+Z2V0VmFsdWUoMC43NSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgx
LCBjdXJ2ZS0+Z2V0VmFsdWUoMSkubTQxKCkpOworfQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2Ug
dGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZVRlc3QsIEVhc2VUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBNb2NrV2ViVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAw
LCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7Cisg
ICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOworICAgIHdlYkN1cnZlLmFk
ZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdlYlRpbWluZ0Z1bmN0aW9u
VHlwZUVhc2UpOworICAgIHdlYkN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVy
YXRpb25zMiksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgQ0NLZXlmcmFtZWRU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSB3ZWJDdXJ2ZS50b0NDS2V5ZnJhbWVkVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1
bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3Jl
YXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25z
dCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5n
RnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkubTQxKCkpOwor
ICAgIH0KK30KKworLy8gVGVzdHMgdXNpbmcgYSBsaW5lYXIgdGltaW5nIGZ1bmN0aW9uLgorVEVT
VChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIExpbmVhclRpbWluZ0Z1bmN0aW9uKQor
eworICAgIE1vY2tXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICBXZWJL
aXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEu
YXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwg
MCk7CisgICAgd2ViQ3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMx
KSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJh
bnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5l
YXIpOworICAgIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gd2Vi
Q3VydmUudG9DQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlKCk7CisKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBp
ICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWUsIGN1cnZlLT5nZXRWYWx1ZSh0
aW1lKS5tNDEoKSk7CisgICAgfQorfQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGltaW5n
IGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZVRlc3QsIEVhc2VJblRpbWluZ0Z1bmN0aW9uKQoreworICAgIE1vY2tXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDAp
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBv
cGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7CisgICAgd2ViQ3VydmUuYWRkKFdl
YlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBl
RWFzZUluKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0
aW9uczIpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIENDS2V5ZnJhbWVkVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gd2ViQ3VydmUudG9DQ0tleWZyYW1lZFRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlKCk7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5j
dGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNlSW5UaW1pbmdGdW5jdGlvbjo6Y3Jl
YXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25z
dCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5n
RnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS0+Z2V0VmFsdWUodGltZSkubTQxKCkpOwor
ICAgIH0KK30KKworLy8gVGVzdHMgdGhhdCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3Jr
cyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNl
T3V0VGltaW5nRnVuY3Rpb24pCit7CisgICAgTW9ja1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
IHdlYkN1cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFw
cGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5
ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVFYXNlT3V0KTsKKyAg
ICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJU
aW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUqIGN1cnZlID0gd2ViQ3VydmUudG9DQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlKCk7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5n
RnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNlT3V0VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRp
bWUgPSBpICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5n
ZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVlKHRpbWUpLm00MSgpKTsKKyAgICB9Cit9CisK
Ky8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0
ZWQuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZUluT3V0VGltaW5n
RnVuY3Rpb24pCit7CisgICAgTW9ja1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIHdlYkN1cnZl
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBv
cGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5z
bGF0ZSgxLCAwLCAwKTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwg
b3BlcmF0aW9uczEpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVFYXNlSW5PdXQpOworICAgIHdlYkN1
cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYlRpbWluZ0Z1
bmN0aW9uVHlwZUxpbmVhcik7CisgICAgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZSogY3VydmUgPSB3ZWJDdXJ2ZS50b0NDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUo
KTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlv
bihXZWJDb3JlOjpDQ0Vhc2VJbk91dFRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0g
aSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFs
dWUodGltZSksIGN1cnZlLT5nZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CisgICAgfQorfQorCisvLyBU
ZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgor
VEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIEN1c3RvbUJlemllclRpbWluZ0Z1
bmN0aW9uKQoreworICAgIE1vY2tXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSB3ZWJDdXJ2ZTsK
KyAgICBkb3VibGUgeDEgPSAwLjM7CisgICAgZG91YmxlIHkxID0gMC4yOworICAgIGRvdWJsZSB4
MiA9IDAuODsKKyAgICBkb3VibGUgeTIgPSAwLjc7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgw
LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7
CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOworICAgIHdlYkN1cnZl
LmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIHgxLCB5MSwgeDIsIHky
KTsKKyAgICB3ZWJDdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIp
LCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIENDS2V5ZnJhbWVkVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmUqIGN1cnZlID0gd2ViQ3VydmUudG9DQ0tleWZyYW1lZFRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlKCk7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4g
dGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVh
dGUoeDEsIHkxLCB4MiwgeTIpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsK
KyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZM
T0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUtPmdldFZhbHVlKHRp
bWUpLm00MSgpKTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgdGhlIGRlZmF1bHQgdGltaW5n
IGZ1bmN0aW9uIGlzIGluZGVlZCBlYXNlLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZVRlc3QsIERlZmF1bHRUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBNb2NrV2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUgd2ViQ3VydmU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25z
IG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsK
KyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3Bl
cmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOworICAgIHdlYkN1cnZlLmFkZChXZWJU
cmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSkpOworICAgIHdlYkN1cnZlLmFkZChXZWJU
cmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxp
bmVhcik7CisgICAgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSogY3VydmUgPSB3
ZWJDdXJ2ZS50b0NDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUoKTsKKworICAgIE93
blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpD
Q0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9
IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAg
ICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS0+
Z2V0VmFsdWUodGltZSkubTQxKCkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150319</attachid>
            <date>2012-06-30 07:04:57 -0700</date>
            <delta_ts>2012-06-30 12:14:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90303-20120630100457.patch</filename>
            <type>text/plain</type>
            <size>66933</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAwYjFhNjQ3MTc0ZjZm
YzY5YzJlY2JiYWU4YjVjMzA1YTkzNTgwYjQ3Li5mMjc2YzM2NTUwNzM5NTM4MzhkYzU2MTVmMjNh
MmFjYzJjMDQ3ZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAxMi0wNi0yOSAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IENyZWF0ZSBhIFdlYktpdDo6V2ViKiB3cmFwcGVyIGZvciB0aGUgY2MgYW5pbWF0aW9uIGNsYXNz
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMzAz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0
Zm9ybS5neXBpOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb24uaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJB
bmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb246OldlYkFuaW1hdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6fldlYkFuaW1hdGlvbik6CisgICAgICAg
ICogY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViQW5pbWF0aW9uQ3VydmUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb25DdXJ2ZTo6fldlYkFuaW1hdGlvbkN1cnZl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uQ3VydmU6OldlYkFuaW1hdGlvbkN1cnZl
KToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YkZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlOjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxv
YXRBbmltYXRpb25DdXJ2ZTo6fldlYkZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIGNo
cm9taXVtL3B1YmxpYy9XZWJGbG9hdEtleWZyYW1lLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRLZXlmcmFtZTo6V2ViRmxvYXRLZXlmcmFtZSk6
CisgICAgICAgIChXZWJGbG9hdEtleWZyYW1lKToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMv
V2ViVGltaW5nRnVuY3Rpb25UeXBlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlOjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjp+V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUp
OgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUtleWZy
YW1lOjpXZWJUcmFuc2Zvcm1LZXlmcmFtZSk6CisgICAgICAgIChXZWJUcmFuc2Zvcm1LZXlmcmFt
ZSk6CisKIDIwMTItMDYtMjkgIFRvbnkgUGF5bmUgIDx0cGF5bmVAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJlbW92ZSB0eXBlIGZyb20gc2NyZWVuQ29sb3JQcm9maWxlIEFQSQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCAzZWJhZjBmNTRjMGRhYzcyNGFlNTA3NWQ3YmJmNWIyNTA3Mjhl
YTI3Li5jNWI0MWIyMDBiOWRlZWRmNTJjNzFiNjczZjBiMDQwMzlkMWQxNTZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA2LTI5ICBJYW4gVm9sbGlj
ayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3JlYXRlIGEg
V2ViS2l0OjpXZWIqIHdyYXBwZXIgZm9yIHRoZSBjYyBhbmltYXRpb24gY2xhc3NlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAzMDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6Cisg
ICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogc3JjL1dlYkFuaW1hdGlvbi5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjpp
dGVyYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjpzZXRJdGVyYXRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjpzdGFydFRpbWUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJBbmltYXRpb246OnNldFN0YXJ0VGltZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkFuaW1hdGlvbjo6dGltZU9mZnNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6
c2V0VGltZU9mZnNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6YWx0ZXJuYXRl
c0RpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6c2V0QWx0ZXJuYXRl
c0RpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6dG9DQ0FjdGl2ZUFu
aW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6ZGVzdHJveSk6CisgICAgICAgICogc3JjL1dl
YkFuaW1hdGlvbkN1cnZlQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViS2l0OjpjcmVhdGVUaW1pbmdGdW5jdGlvbik6CisgICAgICAgICogc3JjL1dlYkFu
aW1hdGlvbkN1cnZlQ29tbW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlOjphZGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjp0
b0NDQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRBbmltYXRpb25DdXJ2
ZTo6ZGVzdHJveSk6CisgICAgICAgICogc3JjL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZTo6YWRkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6OnRvQ0NBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmRlc3Ryb3kpOgorICAgICAgICAqIHRlc3RzL1dlYkFu
aW1hdGlvblRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9XZWJGbG9hdEFuaW1hdGlv
bkN1cnZlVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL1dlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlVGVzdC5jcHA6IEFkZGVkLgorCiAyMDEyLTA2LTI5ICBKb3NodWEgQmVsbCAgPGpz
YmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBLZWVwIGRpcmVjdGlvbiBv
biBJREJDdXJzb3IgdG8gYXZvaWQgY2FsbHMgdG8gYmFjayBlbmQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkK
aW5kZXggN2Q1NjRmNzRiZDQxNTAwNWQ1ZWJiZTYzNmNjZDg5ODM2Yjc0MGViMy4uODhlOTZlNjkx
NDY1NDdiM2FmNjE0YzViMGE4MmFmZGNhMmQ0YjU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRm
b3JtL1BsYXRmb3JtLmd5cGkKKysrIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKQEAg
LTMyLDYgKzMyLDggQEAKICAgICAndmFyaWFibGVzJzogewogICAgICAgICAncGxhdGZvcm1fZmls
ZXMnOiBbCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1BsYXRmb3JtLmgnLAorICAgICAg
ICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb24uaCcKKyAgICAgICAgICAgICdjaHJv
bWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0v
cHVibGljL1dlYkF1ZGlvQnVzLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJB
dWRpb0RldmljZS5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEu
aCcsCkBAIC01NCw2ICs1Niw4IEBACiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkZp
bGVVdGlsaXRpZXMuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkZpbHRlck9w
ZXJhdGlvbi5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmlsdGVyT3BlcmF0
aW9ucy5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZS5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRLZXlmcmFtZS5o
JywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRQb2ludC5oJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRRdWFkLmgnLAogICAgICAgICAgICAgJ2No
cm9taXVtL3B1YmxpYy9XZWJGbG9hdFJlY3QuaCcsCkBAIC0xMDcsNyArMTExLDEwIEBACiAgICAg
ICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oJywKICAgICAgICAgICAgICdjaHJv
bWl1bS9wdWJsaWMvV2ViVGhyZWFkLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9X
ZWJUaHJlYWRTYWZlRGF0YS5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVGlt
aW5nRnVuY3Rpb25UeXBlLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dl
YlRyYW5zZm9ybUtleWZyYW1lLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJU
cmFuc2Zvcm1PcGVyYXRpb25zLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJQ
cmVyZW5kZXIuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlVSTC5oJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmI3MTVlMDUwZjYxODMzNDcyN2YyNTJhZTViZTVhMjExM2ViODBkZGUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbi5oCkBA
IC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQW5pbWF0aW9uX2gKKyNk
ZWZpbmUgV2ViQW5pbWF0aW9uX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUg
IldlYk5vbkNvcHlhYmxlLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZU93blB0ci5oIgorCisjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDQ0FjdGl2ZUFuaW1hdGlvbjsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkFuaW1hdGlvbkN1cnZlOworCisvLyBBIGNvbXBv
c2l0b3IgZHJpdmVuIGFuaW1hdGlvbi4KK2NsYXNzIFdlYkFuaW1hdGlvbiA6IHB1YmxpYyBXZWJO
b25Db3B5YWJsZSB7CitwdWJsaWM6CisgICAgZW51bSBUYXJnZXRQcm9wZXJ0eSB7CisgICAgICAg
IFdlYkFuaW1hdGlvblRyYW5zZm9ybSA9IDEsCisgICAgICAgIFdlYkFuaW1hdGlvbk9wYWNpdHkK
KyAgICB9OworCisgICAgV2ViQW5pbWF0aW9uKGNvbnN0IFdlYkFuaW1hdGlvbkN1cnZlJiBjdXJ2
ZSwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCisgICAgeworICAgICAgICBpbml0aWFs
aXplKGN1cnZlLCB0YXJnZXRQcm9wZXJ0eSk7CisgICAgfQorCisgICAgfldlYkFuaW1hdGlvbigp
CisgICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB0aGUg
bnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIHBsYXkuIElmIHRoaXMKKyAg
ICAvLyB2YWx1ZSBpcyB6ZXJvIHRoZSBhbmltYXRpb24gd2lsbCBub3QgcGxheS4gSWYgaXQgaXMg
bmVnYXRpdmUsIHRoZW4KKyAgICAvLyB0aGUgYW5pbWF0aW9uIHdpbGwgbG9vcCBpbmRlZmluaXRl
bHkuCisgICAgV0VCS0lUX0VYUE9SVCBpbnQgaXRlcmF0aW9ucygpIGNvbnN0OworICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBzZXRJdGVyYXRpb25zKGludCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIGRv
dWJsZSBzdGFydFRpbWUoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0U3RhcnRU
aW1lKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaGFzU2V0
U3RhcnRUaW1lKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIGRvdWJsZSB0aW1lT2Zmc2V0
KCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFRpbWVPZmZzZXQoZG91YmxlIG1v
bm90b25pY1RpbWUpOworCisgICAgLy8gSWYgYWx0ZXJuYXRlc0RpcmVjdGlvbiBpcyB0cnVlLCBv
biBvZGQgbnVtYmVyZWQgaXRlcmF0aW9ucyB3ZSByZXZlcnNlIHRoZSBjdXJ2ZS4KKyAgICBXRUJL
SVRfRVhQT1JUIGJvb2wgYWx0ZXJuYXRlc0RpcmVjdGlvbigpIGNvbnN0OworICAgIFdFQktJVF9F
WFBPUlQgdm9pZCBzZXRBbHRlcm5hdGVzRGlyZWN0aW9uKGJvb2wpOworCisjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCisgICAgb3BlcmF0b3IgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FjdGl2ZUFu
aW1hdGlvbj4oKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdFQktJVF9FWFBPUlQg
dm9pZCBpbml0aWFsaXplKGNvbnN0IFdlYkFuaW1hdGlvbkN1cnZlJiwgVGFyZ2V0UHJvcGVydHkp
OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKGNvbnN0IFdlYkFuaW1hdGlvbiYp
OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBkZXN0cm95KCk7CisKKyAgICBXZWJQcml2YXRlT3du
UHRyPFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkFuaW1hdGlvbl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOGYwZDRhYTA2YWZjMTc4MmZkMDNjNGIxOWNiY2Y2NzYzOWFmNzJmMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUu
aApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkFuaW1hdGlvbkN1
cnZlX2gKKyNkZWZpbmUgV2ViQW5pbWF0aW9uQ3VydmVfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9u
LmgiCisjaW5jbHVkZSAiV2ViTm9uQ29weWFibGUuaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgQ0NBbmltYXRpb25DdXJ2ZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkFuaW1hdGlvbkN1cnZlIDogcHVibGljIFdlYk5vbkNvcHlhYmxlIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5XZWJBbmltYXRpb25DdXJ2ZSgpIHsgfQorCisjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCisgICAgdmlydHVhbCBvcGVyYXRvciBQYXNzT3duUHRyPFdlYkNvcmU6OkND
QW5pbWF0aW9uQ3VydmU+KCkgY29uc3QgPSAwOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBX
ZWJBbmltYXRpb25DdXJ2ZSgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBXZWJBbmltYXRpb25DdXJ2ZV9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzdiYjhmMmU4NTNkZTJjNDAxNTI2MzlhNzQ4MWFhMjQ2M2VkNTZhNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2
ZS5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZV9oCisjZGVmaW5lIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVfaAorCisjaW5jbHVk
ZSAiV2ViQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1
ZGUgIldlYkZsb2F0S2V5ZnJhbWUuaCIKKyNpbmNsdWRlICJXZWJQcml2YXRlT3duUHRyLmgiCisj
aW5jbHVkZSAiV2ViVGltaW5nRnVuY3Rpb25UeXBlLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5U
QVRJT04KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIENDQW5pbWF0aW9uQ3VydmU7CitjbGFzcyBDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBBIGtleWZyYW1lZCBm
bG9hdCBhbmltYXRpb24gY3VydmUuCitjbGFzcyBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIDogcHVi
bGljIFdlYkFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlKCkgeyBpbml0aWFsaXplKCk7IH0KKyAgICB2aXJ0dWFsIH5XZWJGbG9hdEFuaW1hdGlvbkN1
cnZlKCkgeyBkZXN0cm95KCk7IH0KKworICAgIC8vIEFkZHMgdGhlIGtleWZyYW1lIHdpdGggdGhl
IGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIChlYXNlKS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
YWRkKGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRk
KGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmLCBXZWJUaW1pbmdGdW5jdGlvblR5cGUpOworICAgIC8v
IEFkZHMgdGhlIGtleWZyYW1lIHdpdGggYSBjdXN0b20sIGJlemllciB0aW1pbmcgZnVuY3Rpb24u
IE5vdGUsIGl0IGlzCisgICAgLy8gYXNzdW1lZCB0aGF0IHgwID0geTAgPSAwLCBhbmQgeDMgPSB5
MyA9IDEuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1l
JiwgZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyKTsKKworICAgIFdF
QktJVF9FWFBPUlQgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0OworCisjaWYgV0VC
S0lUX0lNUExFTUVOVEFUSU9OCisgICAgdmlydHVhbCBvcGVyYXRvciBQYXNzT3duUHRyPFdlYkNv
cmU6OkNDQW5pbWF0aW9uQ3VydmU+KCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBk
ZXN0cm95KCk7CisKKyAgICBXZWJQcml2YXRlT3duUHRyPFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxv
YXRBbmltYXRpb25DdXJ2ZT4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRLZXlmcmFtZS5oIGIvU291cmNlL1Bs
YXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEtleWZyYW1lLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDI3
NjQxOGZmOGYwMWEyNjZjMWQ3OTJjY2YzZjBiM2IyYjdhZDljNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRLZXlmcmFtZS5oCkBAIC0w
LDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRmxvYXRLZXlmcmFtZV9oCisj
ZGVmaW5lIFdlYkZsb2F0S2V5ZnJhbWVfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0
IFdlYkZsb2F0S2V5ZnJhbWUgeworICAgIFdlYkZsb2F0S2V5ZnJhbWUoZG91YmxlIHRpbWUsIGZs
b2F0IHZhbHVlKQorICAgICAgICA6IHRpbWUodGltZSkKKyAgICAgICAgLCB2YWx1ZSh2YWx1ZSkK
KyAgICB7CisgICAgfQorCisgICAgZG91YmxlIHRpbWU7CisgICAgZmxvYXQgdmFsdWU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkZsb2F0S2V5ZnJhbWVfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUaW1pbmdGdW5j
dGlvblR5cGUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVGltaW5nRnVu
Y3Rpb25UeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2M0MjkxOWY1NjQyZjM3MTJmNGExNjY5MjViNDllODlj
NzQwODQ5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJs
aWMvV2ViVGltaW5nRnVuY3Rpb25UeXBlLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXZWJUaW1pbmdGdW5jdGlvblR5cGVfaAorI2RlZmluZSBXZWJUaW1pbmdGdW5j
dGlvblR5cGVfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBXZWJUaW1pbmdGdW5jdGlv
blR5cGUgeworICAgIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2UsCisgICAgV2ViVGltaW5nRnVu
Y3Rpb25UeXBlRWFzZUluLAorICAgIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VPdXQsCisgICAg
V2ViVGltaW5nRnVuY3Rpb25UeXBlRWFzZUluT3V0LAorICAgIFdlYlRpbWluZ0Z1bmN0aW9uVHlw
ZUxpbmVhcgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJUaW1p
bmdGdW5jdGlvblR5cGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1
YmxpYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4OWE3
MTY3ZTVjMjBiZDFlM2Y1MzU4MTNlZDlhN2VhNWNlNmU2MGMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
LmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZV9oCisjZGVmaW5lIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlX2gKKwor
I2luY2x1ZGUgIldlYkFuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIK
KyNpbmNsdWRlICJXZWJQcml2YXRlT3duUHRyLmgiCisjaW5jbHVkZSAiV2ViVGltaW5nRnVuY3Rp
b25UeXBlLmgiCisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtS2V5ZnJhbWUuaCIKKyNpbmNsdWRlICJX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBDQ0FuaW1hdGlvbkN1cnZlOworY2xhc3MgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEEga2V5ZnJhbWVkIHRyYW5z
Zm9ybSBhbmltYXRpb24gY3VydmUuCitjbGFzcyBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA6
IHB1YmxpYyBXZWJBbmltYXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgV2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUoKSB7IGluaXRpYWxpemUoKTsgfQorICAgIHZpcnR1YWwgfldlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlKCkgeyBkZXN0cm95KCk7IH0KKworICAgIC8vIEFkZHMgdGhlIGtleWZy
YW1lIHdpdGggdGhlIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIChlYXNlKS4KKyAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgYWRkKGNvbnN0IFdlYlRyYW5zZm9ybUtleWZyYW1lJik7CisgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIGFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYsIFdlYlRpbWluZ0Z1
bmN0aW9uVHlwZSk7CisgICAgLy8gQWRkcyB0aGUga2V5ZnJhbWUgd2l0aCBhIGN1c3RvbSwgYmV6
aWVyIHRpbWluZyBmdW5jdGlvbi4gTm90ZSwgaXQgaXMKKyAgICAvLyBhc3N1bWVkIHRoYXQgeDAg
PSB5MCA9IDAsIGFuZCB4MyA9IHkzID0gMS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRkKGNv
bnN0IFdlYlRyYW5zZm9ybUtleWZyYW1lJiwgZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4
MiwgZG91YmxlIHkyKTsKKworICAgIFdFQktJVF9FWFBPUlQgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFU
SU9OCisgICAgdmlydHVhbCBvcGVyYXRvciBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9u
Q3VydmU+KCkgY29uc3Q7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIFdFQktJVF9FWFBPUlQg
dm9pZCBpbml0aWFsaXplKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGRlc3Ryb3koKTsKKwor
ICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZT4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtleWZyYW1lLmggYi9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtleWZyYW1lLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Yzk5ZWY1NTg3YmEzZDNmNTIzYjBiZmY4ZjczYTE5MzNmMGNhYmFlNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtS2V5ZnJhbWUu
aApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRyYW5zZm9ybUtl
eWZyYW1lX2gKKyNkZWZpbmUgV2ViVHJhbnNmb3JtS2V5ZnJhbWVfaAorCisjaW5jbHVkZSAiV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdl
YlRyYW5zZm9ybUtleWZyYW1lIHsKKyAgICBXZWJUcmFuc2Zvcm1LZXlmcmFtZShkb3VibGUgdGlt
ZSwgY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUpCisgICAgICAgIDogdGltZSh0
aW1lKQorICAgICAgICAsIHZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBkb3VibGUg
dGltZTsKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHZhbHVlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJUcmFuc2Zvcm1LZXlmcmFtZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAKaW5kZXggNzhlNDI4YjIyODVkMzYzZTU0NzhkZjdmYTIzOGYzNmYz
ZWJlZjkwNy4uMmZlZWNjNzM4OWQzYzU4MWQ0ZjQzZmI5NDQ2MDJlM2IwN2Q1MzI1MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNDc3LDggKzQ3NywxMSBAQAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViVGV4dENoZWNraW5nQ29tcGxldGlvbkltcGwuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYlRleHRDaGVja2luZ1Jlc3VsdC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2Vi
QW5pbWF0aW9uLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJBbmltYXRpb25Db250cm9s
bGVySW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJBbmltYXRpb25DdXJ2ZUNvbW1vbi5j
cHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ3VydmVDb21tb24uaCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJBcnJheUJ1ZmZlci5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViQXJyYXlCdWZmZXJWaWV3LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJC
aW5kaW5ncy5jcHAnLApAQCAtNTI3LDYgKzUzMCw3IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJGaWxlQ2hvb3NlckNvbXBsZXRpb25JbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRm9udENhY2hlLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGb250RGVzY3JpcHRpb24uY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYkZvbnRJbXBsLmNwcCcsCkBAIC02NTEsNiArNjU1LDcgQEAKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYlN1cnJvdW5kaW5nVGV4dC5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViVGV4dElucHV0SW5mby5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
VGV4dFJ1bi5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlVSTExvYWRUaW1pbmcuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYlNjb3BlZFVzZXJHZXN0dXJlLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJUZXh0RmllbGREZWNvcmF0b3JDbGllbnQuY3BwJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpCmluZGV4IDhiZmNlOWNmNDNlMmIzZWFlZjJjOWU1NGNjOWQzMDU4
YWVlZGEzZWYuLmU1MTVhNWVkMTFjOWEzYjcxMDU3Y2ZkZjM3ZDFjODAwMzRiMDRkYTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtMTQ4LDcgKzE0OCw5IEBACiAgICAgICAgICAg
ICAndGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9U
cmVlVGVzdEhlbHBlcnMuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UcmVlVGVzdEhlbHBlcnMu
aCcsCisgICAgICAgICAgICAndGVzdHMvV2ViQW5pbWF0aW9uVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAnLAorICAgICAg
ICAgICAgJ3Rlc3RzL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvV2ViRnJhbWVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvV2ViTGF5ZXJU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvV2ViTGF5ZXJUcmVlVmlld1Rlc3QuY3BwJywK
QEAgLTE1Nyw2ICsxNTksNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVy
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlNvY2tldERlZmxhdGVyVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNw
cCcsCisgICAgICAgICAgICAndGVzdHMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXhUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1Rlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9XZWJVUkxSZXF1ZXN0VGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2RkZGZjMjQxMzY5Njg1
ZjI4ZGY5MjliYTAwZTQ1NTY0Mzg1OTU2OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbi5jcHAKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJBbmlt
YXRpb24uaD4KKworI2luY2x1ZGUgIkFuaW1hdGlvbklkVmVuZG9yLmgiCisjaW5jbHVkZSAiY2Mv
Q0NBY3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisj
aW5jbHVkZSA8cHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIFdlYkNvcmU6OkFuaW1h
dGlvbklkVmVuZG9yOwordXNpbmcgV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb247CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitpbnQgV2ViQW5pbWF0aW9uOjppdGVyYXRpb25zKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5pdGVyYXRpb25zKCk7Cit9CisKK3ZvaWQgV2ViQW5pbWF0
aW9uOjpzZXRJdGVyYXRpb25zKGludCBuKQoreworICAgIG1fcHJpdmF0ZS0+c2V0SXRlcmF0aW9u
cyhuKTsKK30KKworZG91YmxlIFdlYkFuaW1hdGlvbjo6c3RhcnRUaW1lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5zdGFydFRpbWUoKTsKK30KKwordm9pZCBXZWJBbmltYXRpb246
OnNldFN0YXJ0VGltZShkb3VibGUgbW9ub3RvbmljVGltZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNl
dFN0YXJ0VGltZShtb25vdG9uaWNUaW1lKTsKK30KKworZG91YmxlIFdlYkFuaW1hdGlvbjo6dGlt
ZU9mZnNldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+dGltZU9mZnNldCgpOwor
fQorCit2b2lkIFdlYkFuaW1hdGlvbjo6c2V0VGltZU9mZnNldChkb3VibGUgbW9ub3RvbmljVGlt
ZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFRpbWVPZmZzZXQobW9ub3RvbmljVGltZSk7Cit9CisK
K2Jvb2wgV2ViQW5pbWF0aW9uOjphbHRlcm5hdGVzRGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5hbHRlcm5hdGVzRGlyZWN0aW9uKCk7Cit9CisKK3ZvaWQgV2ViQW5p
bWF0aW9uOjpzZXRBbHRlcm5hdGVzRGlyZWN0aW9uKGJvb2wgYWx0ZXJuYXRlcykKK3sKKyAgICBt
X3ByaXZhdGUtPnNldEFsdGVybmF0ZXNEaXJlY3Rpb24oYWx0ZXJuYXRlcyk7Cit9CisKK1dlYkFu
aW1hdGlvbjo6b3BlcmF0b3IgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbj4o
KSBjb25zdAoreworICAgIE93blB0cjxXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1
cm4obV9wcml2YXRlLT5jbG9uZUZvckltcGxUaHJlYWQoKSk7CisgICAgdG9SZXR1cm4tPnNldE5l
ZWRzU3luY2hyb25pemVkU3RhcnRUaW1lKHRydWUpOworICAgIHJldHVybiB0b1JldHVybi5yZWxl
YXNlKCk7Cit9CisKK3ZvaWQgV2ViQW5pbWF0aW9uOjppbml0aWFsaXplKGNvbnN0IFdlYkFuaW1h
dGlvbkN1cnZlJiBjdXJ2ZSwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCit7CisgICAg
bV9wcml2YXRlLnJlc2V0KENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5pbWF0aW9uSWRWZW5kb3I6
OmdldE5leHRBbmltYXRpb25JZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdlYkNv
cmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eT4odGFyZ2V0UHJvcGVydHkpKS5s
ZWFrUHRyKCkpOworfQorCit2b2lkIFdlYkFuaW1hdGlvbjo6ZGVzdHJveSgpCit7CisgICAgbV9w
cml2YXRlLnJlc2V0KDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45MmQwYjQ4NDJhN2YwNzcwZWQ0ZDIwYTM3ZTY3YzQxOTNiNDcwM2EwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uQ3Vy
dmVDb21tb24uY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIldlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmgiCisKKyNpbmNs
dWRlICJjYy9DQ1RpbWluZ0Z1bmN0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NP
d25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gY3JlYXRlVGltaW5nRnVuY3Rpb24oV2Vi
VGltaW5nRnVuY3Rpb25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBXZWJUaW1pbmdGdW5jdGlvblR5cGVFYXNlOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q0NF
YXNlVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOworICAgIGNhc2UgV2ViVGltaW5nRnVuY3Rpb25U
eXBlRWFzZUluOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q0NFYXNlSW5UaW1pbmdGdW5jdGlv
bjo6Y3JlYXRlKCk7CisgICAgY2FzZSBXZWJUaW1pbmdGdW5jdGlvblR5cGVFYXNlT3V0OgorICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6Q0NFYXNlT3V0VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOwor
ICAgIGNhc2UgV2ViVGltaW5nRnVuY3Rpb25UeXBlRWFzZUluT3V0OgorICAgICAgICByZXR1cm4g
V2ViQ29yZTo6Q0NFYXNlSW5PdXRUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCk7CisgICAgY2FzZSBX
ZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXI6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb25DdXJ2ZUNvbW1v
bi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uQ3VydmVDb21tb24u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yYzU2MmUzOWRlYTFjNDg5MTQ4YWQ1ODcxZTgzOWUwN2E0ZWYwM2VhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9u
Q3VydmVDb21tb24uaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YkFuaW1hdGlvbkN1cnZlQ29tbW9uX2gKKyNkZWZpbmUgV2ViQW5pbWF0aW9uQ3VydmVDb21tb25f
aAorCisjaW5jbHVkZSA8cHVibGljL1dlYlRpbWluZ0Z1bmN0aW9uVHlwZS5oPgorI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENDVGltaW5nRnVu
Y3Rpb247Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworUGFzc093blB0cjxXZWJDb3JlOjpDQ1Rp
bWluZ0Z1bmN0aW9uPiBjcmVhdGVUaW1pbmdGdW5jdGlvbihXZWJUaW1pbmdGdW5jdGlvblR5cGUp
OworfQorCisjZW5kaWYgLy8gV2ViQW5pbWF0aW9uQ3VydmVDb21tb25faApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hZDlmNjNjNzUwZjM0MWI5YTNmOTY3NDBkM2I4NDRhMjA4NTE4OWRjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZS5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSA8cHVibGljL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuaD4KKworI2lu
Y2x1ZGUgIldlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFt
ZWRBbmltYXRpb25DdXJ2ZS5oIgorI2luY2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6YWRkKGNvbnN0
IFdlYkZsb2F0S2V5ZnJhbWUmIGtleWZyYW1lKQoreworICAgIGFkZChrZXlmcmFtZSwgV2ViVGlt
aW5nRnVuY3Rpb25UeXBlRWFzZSk7Cit9CisKK3ZvaWQgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6
YWRkKGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmIGtleWZyYW1lLCBXZWJUaW1pbmdGdW5jdGlvblR5
cGUgdHlwZSkKK3sKKyAgICBtX3ByaXZhdGUtPmFkZEtleWZyYW1lKFdlYkNvcmU6OkNDRmxvYXRL
ZXlmcmFtZTo6Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZyYW1lLnZhbHVlLCBjcmVhdGVUaW1p
bmdGdW5jdGlvbih0eXBlKSkpOworfQorCit2b2lkIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmFk
ZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiBrZXlmcmFtZSwgZG91YmxlIHgxLCBkb3VibGUgeTEs
IGRvdWJsZSB4MiwgZG91YmxlIHkyKQoreworICAgIG1fcHJpdmF0ZS0+YWRkS2V5ZnJhbWUoV2Vi
Q29yZTo6Q0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoa2V5ZnJhbWUudGltZSwga2V5ZnJhbWUudmFs
dWUsIFdlYkNvcmU6OkNDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHgxLCB5MSwg
eDIsIHkyKSkpOworfQorCitmbG9hdCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShk
b3VibGUgdGltZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRWYWx1ZSh0aW1l
KTsKK30KKworV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6b3BlcmF0b3IgUGFzc093blB0cjxXZWJD
b3JlOjpDQ0FuaW1hdGlvbkN1cnZlPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
Y2xvbmUoKTsKK30KKwordm9pZCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjppbml0aWFsaXplKCkK
K3sKKyAgICBtX3ByaXZhdGUucmVzZXQoV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlv
bkN1cnZlOjpjcmVhdGUoKS5sZWFrUHRyKCkpOworfQorCit2b2lkIFdlYkZsb2F0QW5pbWF0aW9u
Q3VydmU6OmRlc3Ryb3koKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDVhMTE4YzAxZGY5
NzEyNDFjZTRmOTM0MWNjNDU4NDQ5MjUxMzU5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmNwcApAQCAtMCww
ICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
IDxwdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuaD4KKworI2luY2x1ZGUgIldlYkFu
aW1hdGlvbkN1cnZlQ29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25D
dXJ2ZS5oIgorI2luY2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3ZvaWQgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmFkZChjb25zdCBXZWJUcmFu
c2Zvcm1LZXlmcmFtZSYga2V5ZnJhbWUpCit7CisgICAgYWRkKGtleWZyYW1lLCBXZWJUaW1pbmdG
dW5jdGlvblR5cGVFYXNlKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
YWRkKGNvbnN0IFdlYlRyYW5zZm9ybUtleWZyYW1lJiBrZXlmcmFtZSwgV2ViVGltaW5nRnVuY3Rp
b25UeXBlIHR5cGUpCit7CisgICAgbV9wcml2YXRlLT5hZGRLZXlmcmFtZShXZWJDb3JlOjpDQ1Ry
YW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoa2V5ZnJhbWUudGltZSwga2V5ZnJhbWUudmFsdWUsIGNy
ZWF0ZVRpbWluZ0Z1bmN0aW9uKHR5cGUpKSk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmU6OmFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYga2V5ZnJhbWUsIGRvdWJs
ZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MikKK3sKKyAgICBtX3ByaXZhdGUt
PmFkZEtleWZyYW1lKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZShrZXlmcmFt
ZS50aW1lLCBrZXlmcmFtZS52YWx1ZSwgV2ViQ29yZTo6Q0NDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uOjpjcmVhdGUoeDEsIHkxLCB4MiwgeTIpKSk7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShkb3VibGUgdGltZSkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRWYWx1ZSh0aW1lKTsKK30KKworV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmU6Om9wZXJhdG9yIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmlt
YXRpb25DdXJ2ZT4oKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmNsb25lKCk7Cit9
CisKK3ZvaWQgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmluaXRpYWxpemUoKQoreworICAg
IG1fcHJpdmF0ZS5yZXNldChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlOjpjcmVhdGUoKS5sZWFrUHRyKCkpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlOjpkZXN0cm95KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoMCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9XZWJBbmltYXRpb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2Vi
QW5pbWF0aW9uVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTZmM2FlYmQ2Yzc2ODU1YmRiZjAxYzM3ZjNi
Y2M1ZDM4NWExNTRjMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvV2ViQW5pbWF0aW9uVGVzdC5jcHAKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8cHVibGljL1dlYkFuaW1hdGlvbi5o
PgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2Ugewor
CitURVNUKFdlYkFuaW1hdGlvblRlc3QsIERlZmF1bHRTZXR0aW5ncykKK3sKKyAgICBXZWJGbG9h
dEFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIFdlYkFuaW1hdGlvbiBhbmltYXRpb24oY3VydmUs
IFdlYkFuaW1hdGlvbjo6V2ViQW5pbWF0aW9uT3BhY2l0eSk7CisKKyAgICAvLyBFbnN1cmUgdGhh
dCB0aGUgZGVmYXVsdHMgYXJlIGNvcnJlY3QuCisgICAgRVhQRUNUX0VRKDEsIGFuaW1hdGlvbi5p
dGVyYXRpb25zKCkpOworICAgIEVYUEVDVF9FUSgwLCBhbmltYXRpb24uc3RhcnRUaW1lKCkpOwor
ICAgIEVYUEVDVF9FUSgwLCBhbmltYXRpb24udGltZU9mZnNldCgpKTsKKyAgICBFWFBFQ1RfRVEo
ZmFsc2UsIGFuaW1hdGlvbi5hbHRlcm5hdGVzRGlyZWN0aW9uKCkpOworfQorCitURVNUKFdlYkFu
aW1hdGlvblRlc3QsIE1vZGlmaWVkU2V0dGluZ3MpCit7CisgICAgV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZSBjdXJ2ZTsKKyAgICBXZWJBbmltYXRpb24gYW5pbWF0aW9uKGN1cnZlLCBXZWJBbmltYXRp
b246OldlYkFuaW1hdGlvbk9wYWNpdHkpOworICAgIGFuaW1hdGlvbi5zZXRJdGVyYXRpb25zKDIp
OworICAgIGFuaW1hdGlvbi5zZXRTdGFydFRpbWUoMik7CisgICAgYW5pbWF0aW9uLnNldFRpbWVP
ZmZzZXQoMik7CisgICAgYW5pbWF0aW9uLnNldEFsdGVybmF0ZXNEaXJlY3Rpb24odHJ1ZSk7CisK
KyAgICBFWFBFQ1RfRVEoMiwgYW5pbWF0aW9uLml0ZXJhdGlvbnMoKSk7CisgICAgRVhQRUNUX0VR
KDIsIGFuaW1hdGlvbi5zdGFydFRpbWUoKSk7CisgICAgRVhQRUNUX0VRKDIsIGFuaW1hdGlvbi50
aW1lT2Zmc2V0KCkpOworICAgIEVYUEVDVF9FUSh0cnVlLCBhbmltYXRpb24uYWx0ZXJuYXRlc0Rp
cmVjdGlvbigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwIGIvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTY1ZWI4NWE0ODdlOTZhYjliYjg0ZjgzMWNmNmVmZDcxYjg5YWQ5NwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRmxvYXRBbmltYXRp
b25DdXJ2ZVRlc3QuY3BwCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5o
PgorCisjaW5jbHVkZSAiY2MvQ0NUaW1pbmdGdW5jdGlvbi5oIgorCisjaW5jbHVkZSA8Z3Rlc3Qv
Z3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIHsKKworLy8gVGVz
dHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIG9uZSBrZXlmcmFtZSB3b3JrcyBhcyBleHBl
Y3RlZC4KK1RFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIE9uZUZsb2F0S2V5ZnJhbWUp
Cit7CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBjdXJ2ZS5hZGQoV2Vi
RmxvYXRLZXlmcmFtZSgwLCAyKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMiwgY3VydmUuZ2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5n
ZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMSkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgyKSk7Cit9CisKKy8vIFRl
c3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCB0d28ga2V5ZnJhbWVzIHdvcmtzIGFzIGV4
cGVjdGVkLgorVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgVHdvRmxvYXRLZXlmcmFt
ZSkKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIGN1cnZlLmFkZChX
ZWJGbG9hdEtleWZyYW1lKDAsIDIpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAg
IGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDQpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVM
aW5lYXIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgtMSkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDMsIGN1cnZlLmdldFZhbHVlKDAuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2
ZS5nZXRWYWx1ZSgxKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDIp
KTsKK30KKworLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIHRocmVlIGtleWZy
YW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3Qs
IFRocmVlRmxvYXRLZXlmcmFtZSkKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZl
OworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDIpLCBXZWJUaW1pbmdGdW5jdGlv
blR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDQpLCBXZWJU
aW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1l
KDIsIDgpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIEVYUEVDVF9GTE9BVF9F
USgyLCBjdXJ2ZS5nZXRWYWx1ZSgtMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5n
ZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLmdldFZhbHVlKDAuNSkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1ZSgxKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZhbHVlKDEuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4
LCBjdXJ2ZS5nZXRWYWx1ZSgyKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLmdldFZh
bHVlKDMpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3aXRoIG11bHRp
cGxlIGtleXMgYXQgYSBnaXZlbiB0aW1lIHdvcmtzIHNhbmVseS4KK1RFU1QoV2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZVRlc3QsIFJlcGVhdGVkRmxvYXRLZXlUaW1lcykKK3sKKyAgICBXZWJGbG9hdEFu
aW1hdGlvbkN1cnZlIGN1cnZlOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDQp
LCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtl
eWZyYW1lKDEsIDQpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFk
ZChXZWJGbG9hdEtleWZyYW1lKDEsIDYpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwor
ICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDIsIDYpLCBXZWJUaW1pbmdGdW5jdGlvblR5
cGVMaW5lYXIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKC0xKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoMC41KSk7CisKKyAgICAvLyBUaGVyZSBpcyBhIGRp
c2NvbnRpbnVpdHkgYXQgMS4gQW55IHZhbHVlIGJldHdlZW4gNCBhbmQgNiBpcyB2YWxpZC4KKyAg
ICBmbG9hdCB2YWx1ZSA9IGN1cnZlLmdldFZhbHVlKDEpOworICAgIEVYUEVDVF9UUlVFKHZhbHVl
ID49IDQgJiYgdmFsdWUgPD0gNik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0
VmFsdWUoMS41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZhbHVlKDIpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMykpOworfQorCisvLyBUZXN0
cyB0aGF0IHRoZSBrZXlmcmFtZXMgbWF5IGJlIGFkZGVkIG91dCBvZiBvcmRlci4KK1RFU1QoV2Vi
RmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIFVuc29ydGVkS2V5ZnJhbWVzKQoreworICAgIFdlYkZs
b2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUo
MiwgOCksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUuYWRkKFdlYkZs
b2F0S2V5ZnJhbWUoMCwgMiksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3Vy
dmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgNCksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVh
cik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoLTEpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgzLCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUu
Z2V0VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS5nZXRWYWx1ZSgxLjUp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUuZ2V0VmFsdWUoMikpOworICAgIEVYUEVD
VF9GTE9BVF9FUSg4LCBjdXJ2ZS5nZXRWYWx1ZSgzKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSBj
dWJpYyBiZXppZXIgdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJG
bG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbikKK3sKKyAg
ICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtl
eWZyYW1lKDAsIDApLCAwLjI1LCAwLCAwLjc1LCAxKTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRL
ZXlmcmFtZSgxLCAxKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIEVYUEVD
VF9GTE9BVF9FUSgwLCBjdXJ2ZS5nZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0xUKDAsIGN1cnZl
LmdldFZhbHVlKDAuMjUpKTsKKyAgICBFWFBFQ1RfR1QoMC4yNSwgY3VydmUuZ2V0VmFsdWUoMC4y
NSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgwLjUsIGN1cnZlLmdldFZhbHVlKDAuNSkpOworICAg
IEVYUEVDVF9MVCgwLjc1LCBjdXJ2ZS5nZXRWYWx1ZSgwLjc1KSk7CisgICAgRVhQRUNUX0dUKDEs
IGN1cnZlLmdldFZhbHVlKDAuNzUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMSwgY3VydmUuZ2V0
VmFsdWUoMSkpOworfQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2UgdGltaW5nIGZ1bmN0aW9uIHdv
cmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZVRp
bWluZ0Z1bmN0aW9uKQoreworICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAg
Y3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUVh
c2UpOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJUaW1pbmdGdW5j
dGlvblR5cGVMaW5lYXIpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+
IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJs
ZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlv
bi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpKTsKKyAgICB9Cit9CisKKy8v
IFRlc3RzIHVzaW5nIGEgbGluZWFyIHRpbWluZyBmdW5jdGlvbi4KK1RFU1QoV2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZVRlc3QsIExpbmVhclRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYkZsb2F0QW5p
bWF0aW9uQ3VydmUgY3VydmU7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCks
IFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5
ZnJhbWUoMSwgMSksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICog
MC4yNTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWUsIGN1cnZlLmdldFZhbHVlKHRpbWUp
KTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24g
d29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNl
SW5UaW1pbmdGdW5jdGlvbikKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOwor
ICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCBXZWJUaW1pbmdGdW5jdGlvblR5
cGVFYXNlSW4pOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJUaW1p
bmdGdW5jdGlvblR5cGVMaW5lYXIpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVu
Y3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFzZUluVGltaW5nRnVuY3Rpb246OmNy
ZWF0ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29u
c3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWlu
Z0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUuZ2V0VmFsdWUodGltZSkpOworICAgIH0K
K30KKworLy8gVGVzdHMgdGhhdCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBl
eHBlY3RlZC4KK1RFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VPdXRUaW1pbmdG
dW5jdGlvbikKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIGN1cnZl
LmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVFYXNlT3V0
KTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViVGltaW5nRnVuY3Rp
b25UeXBlTGluZWFyKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0
aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VPdXRUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkp
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3Vi
bGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rp
b24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKSk7CisgICAgfQorfQorCisv
LyBUZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVk
LgorVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZUluT3V0VGltaW5nRnVuY3Rp
b24pCit7CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBjdXJ2ZS5hZGQo
V2ViRmxvYXRLZXlmcmFtZSgwLCAwKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlRWFzZUluT3V0KTsK
KyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViVGltaW5nRnVuY3Rpb25U
eXBlTGluZWFyKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1p
bmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VJbk91dFRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJs
ZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlv
bi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpKTsKKyAgICB9Cit9CisKKy8v
IFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQu
CitURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBDdXN0b21CZXppZXJUaW1pbmdGdW5j
dGlvbikKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIGRvdWJsZSB4
MSA9IDAuMzsKKyAgICBkb3VibGUgeTEgPSAwLjI7CisgICAgZG91YmxlIHgyID0gMC44OworICAg
IGRvdWJsZSB5MiA9IDAuNzsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAwKSwg
eDEsIHkxLCB4MiwgeTIpOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBX
ZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDVGlt
aW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDQ3ViaWNCZXppZXJUaW1pbmdG
dW5jdGlvbjo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkg
PD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7CisgICAg
ICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZl
LmdldFZhbHVlKHRpbWUpKTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgdGhlIGRlZmF1bHQg
dGltaW5nIGZ1bmN0aW9uIGlzIGluZGVlZCBlYXNlLgorVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlVGVzdCwgRGVmYXVsdFRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYkZsb2F0QW5pbWF0aW9u
Q3VydmUgY3VydmU7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCkpOworICAg
IGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVM
aW5lYXIpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1
bmN0aW9uKFdlYkNvcmU6OkNDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0g
aSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFs
dWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNw
YWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dl
YlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmJmODMxMTRiOTk4
N2QyYWJjNjBmMmZhNDVkOGNhZDk1N2M4YTY3OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LmNwcApA
QCAtMCwwICsxLDI5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmg+CisKKyNpbmNsdWRl
ICJjYy9DQ1RpbWluZ0Z1bmN0aW9uLmgiCisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zLmg+CisjaW5jbHVkZSA8cHVibGlj
L1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25h
bWVzcGFjZSB7CisKKy8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggb25l
IGtleWZyYW1lIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZVRlc3QsIE9uZVRyYW5zZm9ybUtleWZyYW1lKQoreworICAgIFdlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlIGN1cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zOworICAgIG9wZXJhdGlvbnMuYXBwZW5kVHJhbnNsYXRlKDIsIDAsIDApOworICAgIGN1
cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zKSwgV2ViVGltaW5nRnVu
Y3Rpb25UeXBlTGluZWFyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1
ZSgtMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgwKS5t
NDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDAuNSkubTQxKCkp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgxKS5tNDEoKSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDIpLm00MSgpKTsKK30KKworLy8gVGVz
dHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCB0d28ga2V5ZnJhbWVzIHdvcmtzIGFz
IGV4cGVjdGVkLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIFR3b1RyYW5z
Zm9ybUtleWZyYW1lKQoreworICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOwor
ICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVy
YXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMiwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0
ZSg0LCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0
aW9uczEpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFkZChXZWJU
cmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxp
bmVhcik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKC0xKS5tNDEoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDApLm00MSgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMywgY3VydmUuZ2V0VmFsdWUoMC41KS5tNDEoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDEpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoNCwgY3VydmUuZ2V0VmFsdWUoMikubTQxKCkpOworfQorCisvLyBUZXN0cyB0aGF0IGEgdHJh
bnNmb3JtIGFuaW1hdGlvbiB3aXRoIHRocmVlIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4K
K1RFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBUaHJlZVRyYW5zZm9ybUtleWZy
YW1lKQoreworICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIFdlYktp
dDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5h
cHBlbmRUcmFuc2xhdGUoMiwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSg0LCAwLCAw
KTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczM7CisgICAg
b3BlcmF0aW9uczMuYXBwZW5kVHJhbnNsYXRlKDgsIDAsIDApOworICAgIGN1cnZlLmFkZChXZWJU
cmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxp
bmVhcik7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMy
KSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNm
b3JtS2V5ZnJhbWUoMiwgb3BlcmF0aW9uczMpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIp
OworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgtMSkubTQxKCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgwKS5tNDEoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDMsIGN1cnZlLmdldFZhbHVlKDAuNSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSg0LCBjdXJ2ZS5nZXRWYWx1ZSgxKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYs
IGN1cnZlLmdldFZhbHVlKDEuNSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2
ZS5nZXRWYWx1ZSgyKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLmdldFZh
bHVlKDMpLm00MSgpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24g
d2l0aCBtdWx0aXBsZSBrZXlzIGF0IGEgZ2l2ZW4gdGltZSB3b3JrcyBzYW5lbHkuCitURVNUKFdl
YlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRUcmFuc2Zvcm1LZXlUaW1lcykK
K3sKKyAgICAvLyBBIHN0ZXAgZnVuY3Rpb24uCisgICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUgY3VydmU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMx
OworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSg0LCAwLCAwKTsKKyAgICBXZWJLaXQ6
OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBw
ZW5kVHJhbnNsYXRlKDQsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9u
cyBvcGVyYXRpb25zMzsKKyAgICBvcGVyYXRpb25zMy5hcHBlbmRUcmFuc2xhdGUoNiwgMCwgMCk7
CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM0OworICAgIG9w
ZXJhdGlvbnM0LmFwcGVuZFRyYW5zbGF0ZSg2LCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJh
bnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5l
YXIpOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiks
IFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9y
bUtleWZyYW1lKDEsIG9wZXJhdGlvbnMzKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsK
KyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMiwgb3BlcmF0aW9uczQpLCBXZWJU
aW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZl
LmdldFZhbHVlKC0xKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZh
bHVlKDApLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoMC41
KS5tNDEoKSk7CisKKyAgICAvLyBUaGVyZSBpcyBhIGRpc2NvbnRpbnVpdHkgYXQgMS4gQW55IHZh
bHVlIGJldHdlZW4gNCBhbmQgNiBpcyB2YWxpZC4KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB2YWx1ZSA9IGN1cnZlLmdldFZhbHVlKDEpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLm00MSgp
ID49IDQgJiYgdmFsdWUubTQxKCkgPD0gNik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3Vy
dmUuZ2V0VmFsdWUoMS41KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdl
dFZhbHVlKDIpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUo
MykubTQxKCkpOworfQorCisvLyBUZXN0cyB0aGF0IHRoZSBrZXlmcmFtZXMgbWF5IGJlIGFkZGVk
IG91dCBvZiBvcmRlci4KK1RFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBVbnNv
cnRlZEtleWZyYW1lcykKK3sKKyAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsK
KyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3Bl
cmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDIsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xh
dGUoNCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlv
bnMzOworICAgIG9wZXJhdGlvbnMzLmFwcGVuZFRyYW5zbGF0ZSg4LCAwLCAwKTsKKyAgICBjdXJ2
ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMiwgb3BlcmF0aW9uczMpLCBXZWJUaW1pbmdGdW5j
dGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBv
cGVyYXRpb25zMSksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUuYWRk
KFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViVGltaW5nRnVuY3Rpb25U
eXBlTGluZWFyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgtMSku
bTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgwKS5tNDEoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLmdldFZhbHVlKDAuNSkubTQxKCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1ZSgxKS5tNDEoKSk7CisgICAgRVhQRUNU
X0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZhbHVlKDEuNSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSg4LCBjdXJ2ZS5nZXRWYWx1ZSgyKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgs
IGN1cnZlLmdldFZhbHVlKDMpLm00MSgpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIGN1YmljIGJl
emllciB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlVGVzdCwgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBX
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRl
KDAsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7CisgICAgY3VydmUu
YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgMC4yNSwgMCwgMC43NSwg
MSk7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwg
V2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgY3Vy
dmUuZ2V0VmFsdWUoMCkubTQxKCkpOworICAgIEVYUEVDVF9MVCgwLCBjdXJ2ZS5nZXRWYWx1ZSgw
LjI1KS5tNDEoKSk7CisgICAgRVhQRUNUX0dUKDAuMjUsIGN1cnZlLmdldFZhbHVlKDAuMjUpLm00
MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpLm00MSgp
KTsKKyAgICBFWFBFQ1RfTFQoMC43NSwgY3VydmUuZ2V0VmFsdWUoMC43NSkubTQxKCkpOworICAg
IEVYUEVDVF9HVCgxLCBjdXJ2ZS5nZXRWYWx1ZSgwLjc1KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDEsIGN1cnZlLmdldFZhbHVlKDEpLm00MSgpKTsKK30KKworLy8gVGVzdHMgdGhhdCBh
biBlYXNlIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNlVGltaW5nRnVuY3Rpb24pCit7CisgICAgV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAw
LCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7Cisg
ICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOworICAgIGN1cnZlLmFkZChX
ZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdlYlRpbWluZ0Z1bmN0aW9uVHlw
ZUVhc2UpOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25z
MiksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6
Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNlVGltaW5nRnVu
Y3Rpb246OmNyZWF0ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKKyAg
ICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZMT0FU
X0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUuZ2V0VmFsdWUodGltZSku
bTQxKCkpOworICAgIH0KK30KKworLy8gVGVzdHMgdXNpbmcgYSBsaW5lYXIgdGltaW5nIGZ1bmN0
aW9uLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIExpbmVhclRpbWluZ0Z1
bmN0aW9uKQoreworICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIFdl
YktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25z
MS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAw
LCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEp
LCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zv
cm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7
CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91
YmxlIHRpbWUgPSBpICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWUsIGN1cnZl
LmdldFZhbHVlKHRpbWUpLm00MSgpKTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgYW4gZWFz
ZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZUluVGltaW5nRnVuY3Rpb24pCit7CisgICAgV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAw
LCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7Cisg
ICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOworICAgIGN1cnZlLmFkZChX
ZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdlYlRpbWluZ0Z1bmN0aW9uVHlw
ZUVhc2VJbik7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlv
bnMyKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIE93blB0cjxXZWJDb3Jl
OjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VJblRpbWlu
Z0Z1bmN0aW9uOjpjcmVhdGUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7
CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9G
TE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRp
bWUpLm00MSgpKTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcg
ZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlVGVzdCwgRWFzZU91dFRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlIGN1cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlv
bnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3Jt
S2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVFYXNlT3V0KTsK
KyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJU
aW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5n
RnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFzZU91dFRpbWluZ0Z1bmN0aW9u
OjpjcmVhdGUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAg
IGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0
aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpLm00MSgp
KTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24g
d29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwg
RWFzZUluT3V0VGltaW5nRnVuY3Rpb24pCit7CisgICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUgY3VydmU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMx
OworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICBXZWJLaXQ6
OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBw
ZW5kVHJhbnNsYXRlKDEsIDAsIDApOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFt
ZSgwLCBvcGVyYXRpb25zMSksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VJbk91dCk7CisgICAg
Y3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViVGltaW5n
RnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0
aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VJbk91dFRpbWluZ0Z1bmN0aW9uOjpj
cmVhdGUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNv
bnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1p
bmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpLm00MSgpKTsK
KyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29y
a3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgQ3Vz
dG9tQmV6aWVyVGltaW5nRnVuY3Rpb24pCit7CisgICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUgY3VydmU7CisgICAgZG91YmxlIHgxID0gMC4zOworICAgIGRvdWJsZSB5MSA9IDAuMjsKKyAg
ICBkb3VibGUgeDIgPSAwLjg7CisgICAgZG91YmxlIHkyID0gMC43OworICAgIFdlYktpdDo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRU
cmFuc2xhdGUoMCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9w
ZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKKyAg
ICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCB4MSwgeTEs
IHgyLCB5Mik7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlv
bnMyKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIE93blB0cjxXZWJDb3Jl
OjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0N1YmljQmV6aWVy
VGltaW5nRnVuY3Rpb246OmNyZWF0ZSh4MSwgeTEsIHgyLCB5MikpOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1
OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUp
LCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CisgICAgfQorfQorCisvLyBUZXN0cyB0aGF0
IHRoZSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBpcyBpbmRlZWQgZWFzZS4KK1RFU1QoV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBEZWZhdWx0VGltaW5nRnVuY3Rpb24pCit7CisgICAg
V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zv
cm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0
ZSgwLCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9u
czI7CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOworICAgIGN1cnZl
LmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSkpOworICAgIGN1cnZlLmFk
ZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYlRpbWluZ0Z1bmN0aW9u
VHlwZUxpbmVhcik7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGlt
aW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNlVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRp
bWUgPSBpICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5n
ZXRWYWx1ZSh0aW1lKSwgY3VydmUuZ2V0VmFsdWUodGltZSkubTQxKCkpOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150322</attachid>
            <date>2012-06-30 12:15:04 -0700</date>
            <delta_ts>2012-07-01 16:51:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90303-20120630151503.patch</filename>
            <type>text/plain</type>
            <size>66925</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAwYjFhNjQ3MTc0ZjZm
YzY5YzJlY2JiYWU4YjVjMzA1YTkzNTgwYjQ3Li5mMjc2YzM2NTUwNzM5NTM4MzhkYzU2MTVmMjNh
MmFjYzJjMDQ3ZGRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NiBAQAorMjAxMi0wNi0yOSAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IENyZWF0ZSBhIFdlYktpdDo6V2ViKiB3cmFwcGVyIGZvciB0aGUgY2MgYW5pbWF0aW9uIGNsYXNz
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMzAz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0
Zm9ybS5neXBpOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb24uaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJB
bmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb246OldlYkFuaW1hdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6fldlYkFuaW1hdGlvbik6CisgICAgICAg
ICogY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViQW5pbWF0aW9uQ3VydmUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb25DdXJ2ZTo6fldlYkFuaW1hdGlvbkN1cnZl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uQ3VydmU6OldlYkFuaW1hdGlvbkN1cnZl
KToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YkZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlOjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxv
YXRBbmltYXRpb25DdXJ2ZTo6fldlYkZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIGNo
cm9taXVtL3B1YmxpYy9XZWJGbG9hdEtleWZyYW1lLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRLZXlmcmFtZTo6V2ViRmxvYXRLZXlmcmFtZSk6
CisgICAgICAgIChXZWJGbG9hdEtleWZyYW1lKToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMv
V2ViVGltaW5nRnVuY3Rpb25UeXBlLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJUcmFu
c2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlOjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjp+V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUp
OgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUtleWZy
YW1lOjpXZWJUcmFuc2Zvcm1LZXlmcmFtZSk6CisgICAgICAgIChXZWJUcmFuc2Zvcm1LZXlmcmFt
ZSk6CisKIDIwMTItMDYtMjkgIFRvbnkgUGF5bmUgIDx0cGF5bmVAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJlbW92ZSB0eXBlIGZyb20gc2NyZWVuQ29sb3JQcm9maWxlIEFQSQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCAzZWJhZjBmNTRjMGRhYzcyNGFlNTA3NWQ3YmJmNWIyNTA3Mjhl
YTI3Li5jNWI0MWIyMDBiOWRlZWRmNTJjNzFiNjczZjBiMDQwMzlkMWQxNTZkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDEyLTA2LTI5ICBJYW4gVm9sbGlj
ayAgPHZvbGxpY2tAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3JlYXRlIGEg
V2ViS2l0OjpXZWIqIHdyYXBwZXIgZm9yIHRoZSBjYyBhbmltYXRpb24gY2xhc3NlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAzMDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6Cisg
ICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogc3JjL1dlYkFuaW1hdGlvbi5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjpp
dGVyYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjpzZXRJdGVyYXRpb25z
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjpzdGFydFRpbWUpOgorICAgICAgICAo
V2ViS2l0OjpXZWJBbmltYXRpb246OnNldFN0YXJ0VGltZSk6CisgICAgICAgIChXZWJLaXQ6Oldl
YkFuaW1hdGlvbjo6dGltZU9mZnNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6
c2V0VGltZU9mZnNldCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6YWx0ZXJuYXRl
c0RpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6c2V0QWx0ZXJuYXRl
c0RpcmVjdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6dG9DQ0FjdGl2ZUFu
aW1hdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6aW5pdGlhbGl6ZSk6Cisg
ICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6ZGVzdHJveSk6CisgICAgICAgICogc3JjL1dl
YkFuaW1hdGlvbkN1cnZlQ29tbW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViS2l0OjpjcmVhdGVUaW1pbmdGdW5jdGlvbik6CisgICAgICAgICogc3JjL1dlYkFu
aW1hdGlvbkN1cnZlQ29tbW9uLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
IChXZWJLaXQpOgorICAgICAgICAqIHNyYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlOjphZGQpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjp0
b0NDQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRBbmltYXRpb25DdXJ2
ZTo6ZGVzdHJveSk6CisgICAgICAgICogc3JjL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZTo6YWRkKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6OnRvQ0NBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2Vi
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmRlc3Ryb3kpOgorICAgICAgICAqIHRlc3RzL1dlYkFu
aW1hdGlvblRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9XZWJGbG9hdEFuaW1hdGlv
bkN1cnZlVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL1dlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlVGVzdC5jcHA6IEFkZGVkLgorCiAyMDEyLTA2LTI5ICBKb3NodWEgQmVsbCAgPGpz
YmVsbEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiBLZWVwIGRpcmVjdGlvbiBv
biBJREJDdXJzb3IgdG8gYXZvaWQgY2FsbHMgdG8gYmFjayBlbmQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkK
aW5kZXggN2Q1NjRmNzRiZDQxNTAwNWQ1ZWJiZTYzNmNjZDg5ODM2Yjc0MGViMy4uODhlOTZlNjkx
NDY1NDdiM2FmNjE0YzViMGE4MmFmZGNhMmQ0YjU0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRm
b3JtL1BsYXRmb3JtLmd5cGkKKysrIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKQEAg
LTMyLDYgKzMyLDggQEAKICAgICAndmFyaWFibGVzJzogewogICAgICAgICAncGxhdGZvcm1fZmls
ZXMnOiBbCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1BsYXRmb3JtLmgnLAorICAgICAg
ICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb24uaCcKKyAgICAgICAgICAgICdjaHJv
bWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0v
cHVibGljL1dlYkF1ZGlvQnVzLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJB
dWRpb0RldmljZS5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEu
aCcsCkBAIC01NCw2ICs1Niw4IEBACiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkZp
bGVVdGlsaXRpZXMuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkZpbHRlck9w
ZXJhdGlvbi5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmlsdGVyT3BlcmF0
aW9ucy5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZS5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRLZXlmcmFtZS5o
JywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRQb2ludC5oJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRRdWFkLmgnLAogICAgICAgICAgICAgJ2No
cm9taXVtL3B1YmxpYy9XZWJGbG9hdFJlY3QuaCcsCkBAIC0xMDcsNyArMTExLDEwIEBACiAgICAg
ICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlN0cmluZy5oJywKICAgICAgICAgICAgICdjaHJv
bWl1bS9wdWJsaWMvV2ViVGhyZWFkLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9X
ZWJUaHJlYWRTYWZlRGF0YS5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVGlt
aW5nRnVuY3Rpb25UeXBlLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dl
YlRyYW5zZm9ybUtleWZyYW1lLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJU
cmFuc2Zvcm1PcGVyYXRpb25zLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJQ
cmVyZW5kZXIuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlVSTC5oJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uLmgg
Yi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbi5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmI3MTVlMDUwZjYxODMzNDcyN2YyNTJhZTViZTVhMjExM2ViODBkZGUKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbi5oCkBA
IC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQW5pbWF0aW9uX2gKKyNk
ZWZpbmUgV2ViQW5pbWF0aW9uX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUg
IldlYk5vbkNvcHlhYmxlLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZU93blB0ci5oIgorCisjaWYg
V0VCS0lUX0lNUExFTUVOVEFUSU9OCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNlbmRpZgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDQ0FjdGl2ZUFuaW1hdGlvbjsKK30KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkFuaW1hdGlvbkN1cnZlOworCisvLyBBIGNvbXBv
c2l0b3IgZHJpdmVuIGFuaW1hdGlvbi4KK2NsYXNzIFdlYkFuaW1hdGlvbiA6IHB1YmxpYyBXZWJO
b25Db3B5YWJsZSB7CitwdWJsaWM6CisgICAgZW51bSBUYXJnZXRQcm9wZXJ0eSB7CisgICAgICAg
IFdlYkFuaW1hdGlvblRyYW5zZm9ybSA9IDEsCisgICAgICAgIFdlYkFuaW1hdGlvbk9wYWNpdHkK
KyAgICB9OworCisgICAgV2ViQW5pbWF0aW9uKGNvbnN0IFdlYkFuaW1hdGlvbkN1cnZlJiBjdXJ2
ZSwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCisgICAgeworICAgICAgICBpbml0aWFs
aXplKGN1cnZlLCB0YXJnZXRQcm9wZXJ0eSk7CisgICAgfQorCisgICAgfldlYkFuaW1hdGlvbigp
CisgICAgeworICAgICAgICBkZXN0cm95KCk7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB0aGUg
bnVtYmVyIG9mIHRpbWVzIHRoYXQgdGhlIGFuaW1hdGlvbiB3aWxsIHBsYXkuIElmIHRoaXMKKyAg
ICAvLyB2YWx1ZSBpcyB6ZXJvIHRoZSBhbmltYXRpb24gd2lsbCBub3QgcGxheS4gSWYgaXQgaXMg
bmVnYXRpdmUsIHRoZW4KKyAgICAvLyB0aGUgYW5pbWF0aW9uIHdpbGwgbG9vcCBpbmRlZmluaXRl
bHkuCisgICAgV0VCS0lUX0VYUE9SVCBpbnQgaXRlcmF0aW9ucygpIGNvbnN0OworICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBzZXRJdGVyYXRpb25zKGludCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIGRv
dWJsZSBzdGFydFRpbWUoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0U3RhcnRU
aW1lKGRvdWJsZSBtb25vdG9uaWNUaW1lKTsKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaGFzU2V0
U3RhcnRUaW1lKCkgY29uc3Q7CisKKyAgICBXRUJLSVRfRVhQT1JUIGRvdWJsZSB0aW1lT2Zmc2V0
KCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFRpbWVPZmZzZXQoZG91YmxlIG1v
bm90b25pY1RpbWUpOworCisgICAgLy8gSWYgYWx0ZXJuYXRlc0RpcmVjdGlvbiBpcyB0cnVlLCBv
biBvZGQgbnVtYmVyZWQgaXRlcmF0aW9ucyB3ZSByZXZlcnNlIHRoZSBjdXJ2ZS4KKyAgICBXRUJL
SVRfRVhQT1JUIGJvb2wgYWx0ZXJuYXRlc0RpcmVjdGlvbigpIGNvbnN0OworICAgIFdFQktJVF9F
WFBPUlQgdm9pZCBzZXRBbHRlcm5hdGVzRGlyZWN0aW9uKGJvb2wpOworCisjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCisgICAgb3BlcmF0b3IgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FjdGl2ZUFu
aW1hdGlvbj4oKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdFQktJVF9FWFBPUlQg
dm9pZCBpbml0aWFsaXplKGNvbnN0IFdlYkFuaW1hdGlvbkN1cnZlJiwgVGFyZ2V0UHJvcGVydHkp
OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKGNvbnN0IFdlYkFuaW1hdGlvbiYp
OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBkZXN0cm95KCk7CisKKyAgICBXZWJQcml2YXRlT3du
UHRyPFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkFuaW1hdGlvbl9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmggYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOGYwZDRhYTA2YWZjMTc4MmZkMDNjNGIxOWNiY2Y2NzYzOWFmNzJmMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUu
aApAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkFuaW1hdGlvbkN1
cnZlX2gKKyNkZWZpbmUgV2ViQW5pbWF0aW9uQ3VydmVfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9u
LmgiCisjaW5jbHVkZSAiV2ViTm9uQ29weWFibGUuaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworY2xhc3MgQ0NBbmltYXRpb25DdXJ2ZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkFuaW1hdGlvbkN1cnZlIDogcHVibGljIFdlYk5vbkNvcHlhYmxlIHsKK3B1Ymxp
YzoKKyAgICB2aXJ0dWFsIH5XZWJBbmltYXRpb25DdXJ2ZSgpIHsgfQorCisjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCisgICAgdmlydHVhbCBvcGVyYXRvciBQYXNzT3duUHRyPFdlYkNvcmU6OkND
QW5pbWF0aW9uQ3VydmU+KCkgY29uc3QgPSAwOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBX
ZWJBbmltYXRpb25DdXJ2ZSgpIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNl
bmRpZiAvLyBXZWJBbmltYXRpb25DdXJ2ZV9oCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9y
bS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NzdiYjhmMmU4NTNkZTJjNDAxNTI2MzlhNzQ4MWFhMjQ2M2VkNTZhNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2
ZS5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZV9oCisjZGVmaW5lIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVfaAorCisjaW5jbHVk
ZSAiV2ViQW5pbWF0aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1
ZGUgIldlYkZsb2F0S2V5ZnJhbWUuaCIKKyNpbmNsdWRlICJXZWJQcml2YXRlT3duUHRyLmgiCisj
aW5jbHVkZSAiV2ViVGltaW5nRnVuY3Rpb25UeXBlLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5U
QVRJT04KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIENDQW5pbWF0aW9uQ3VydmU7CitjbGFzcyBDQ0tleWZyYW1lZEZsb2F0QW5p
bWF0aW9uQ3VydmU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBBIGtleWZyYW1lZCBm
bG9hdCBhbmltYXRpb24gY3VydmUuCitjbGFzcyBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIDogcHVi
bGljIFdlYkFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlKCkgeyBpbml0aWFsaXplKCk7IH0KKyAgICB2aXJ0dWFsIH5XZWJGbG9hdEFuaW1hdGlvbkN1
cnZlKCkgeyBkZXN0cm95KCk7IH0KKworICAgIC8vIEFkZHMgdGhlIGtleWZyYW1lIHdpdGggdGhl
IGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIChlYXNlKS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQg
YWRkKGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRk
KGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmLCBXZWJUaW1pbmdGdW5jdGlvblR5cGUpOworICAgIC8v
IEFkZHMgdGhlIGtleWZyYW1lIHdpdGggYSBjdXN0b20sIGJlemllciB0aW1pbmcgZnVuY3Rpb24u
IE5vdGUsIGl0IGlzCisgICAgLy8gYXNzdW1lZCB0aGF0IHgwID0geTAgPSAwLCBhbmQgeDMgPSB5
MyA9IDEuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1l
JiwgZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4MiwgZG91YmxlIHkyKTsKKworICAgIFdF
QktJVF9FWFBPUlQgZmxvYXQgZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0OworCisjaWYgV0VC
S0lUX0lNUExFTUVOVEFUSU9OCisgICAgdmlydHVhbCBvcGVyYXRvciBQYXNzT3duUHRyPFdlYkNv
cmU6OkNDQW5pbWF0aW9uQ3VydmU+KCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZSgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBk
ZXN0cm95KCk7CisKKyAgICBXZWJQcml2YXRlT3duUHRyPFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxv
YXRBbmltYXRpb25DdXJ2ZT4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0
CisKKyNlbmRpZiAvLyBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlX2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRLZXlmcmFtZS5oIGIvU291cmNlL1Bs
YXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEtleWZyYW1lLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDI3
NjQxOGZmOGYwMWEyNjZjMWQ3OTJjY2YzZjBiM2IyYjdhZDljNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRLZXlmcmFtZS5oCkBAIC0w
LDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRmxvYXRLZXlmcmFtZV9oCisj
ZGVmaW5lIFdlYkZsb2F0S2V5ZnJhbWVfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0
IFdlYkZsb2F0S2V5ZnJhbWUgeworICAgIFdlYkZsb2F0S2V5ZnJhbWUoZG91YmxlIHRpbWUsIGZs
b2F0IHZhbHVlKQorICAgICAgICA6IHRpbWUodGltZSkKKyAgICAgICAgLCB2YWx1ZSh2YWx1ZSkK
KyAgICB7CisgICAgfQorCisgICAgZG91YmxlIHRpbWU7CisgICAgZmxvYXQgdmFsdWU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkZsb2F0S2V5ZnJhbWVfaApk
aWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUaW1pbmdGdW5j
dGlvblR5cGUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVGltaW5nRnVu
Y3Rpb25UeXBlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2M0MjkxOWY1NjQyZjM3MTJmNGExNjY5MjViNDllODlj
NzQwODQ5MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJs
aWMvV2ViVGltaW5nRnVuY3Rpb25UeXBlLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBXZWJUaW1pbmdGdW5jdGlvblR5cGVfaAorI2RlZmluZSBXZWJUaW1pbmdGdW5j
dGlvblR5cGVfaAorCituYW1lc3BhY2UgV2ViS2l0IHsKKworZW51bSBXZWJUaW1pbmdGdW5jdGlv
blR5cGUgeworICAgIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2UsCisgICAgV2ViVGltaW5nRnVu
Y3Rpb25UeXBlRWFzZUluLAorICAgIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VPdXQsCisgICAg
V2ViVGltaW5nRnVuY3Rpb25UeXBlRWFzZUluT3V0LAorICAgIFdlYlRpbWluZ0Z1bmN0aW9uVHlw
ZUxpbmVhcgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJUaW1p
bmdGdW5jdGlvblR5cGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1
YmxpYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE4OWE3
MTY3ZTVjMjBiZDFlM2Y1MzU4MTNlZDlhN2VhNWNlNmU2MGMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
LmgKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZV9oCisjZGVmaW5lIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlX2gKKwor
I2luY2x1ZGUgIldlYkFuaW1hdGlvbkN1cnZlLmgiCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIK
KyNpbmNsdWRlICJXZWJQcml2YXRlT3duUHRyLmgiCisjaW5jbHVkZSAiV2ViVGltaW5nRnVuY3Rp
b25UeXBlLmgiCisjaW5jbHVkZSAiV2ViVHJhbnNmb3JtS2V5ZnJhbWUuaCIKKyNpbmNsdWRlICJX
ZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBDQ0FuaW1hdGlvbkN1cnZlOworY2xhc3MgQ0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEEga2V5ZnJhbWVkIHRyYW5z
Zm9ybSBhbmltYXRpb24gY3VydmUuCitjbGFzcyBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSA6
IHB1YmxpYyBXZWJBbmltYXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgV2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmUoKSB7IGluaXRpYWxpemUoKTsgfQorICAgIHZpcnR1YWwgfldlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlKCkgeyBkZXN0cm95KCk7IH0KKworICAgIC8vIEFkZHMgdGhlIGtleWZy
YW1lIHdpdGggdGhlIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIChlYXNlKS4KKyAgICBXRUJLSVRf
RVhQT1JUIHZvaWQgYWRkKGNvbnN0IFdlYlRyYW5zZm9ybUtleWZyYW1lJik7CisgICAgV0VCS0lU
X0VYUE9SVCB2b2lkIGFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYsIFdlYlRpbWluZ0Z1
bmN0aW9uVHlwZSk7CisgICAgLy8gQWRkcyB0aGUga2V5ZnJhbWUgd2l0aCBhIGN1c3RvbSwgYmV6
aWVyIHRpbWluZyBmdW5jdGlvbi4gTm90ZSwgaXQgaXMKKyAgICAvLyBhc3N1bWVkIHRoYXQgeDAg
PSB5MCA9IDAsIGFuZCB4MyA9IHkzID0gMS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRkKGNv
bnN0IFdlYlRyYW5zZm9ybUtleWZyYW1lJiwgZG91YmxlIHgxLCBkb3VibGUgeTEsIGRvdWJsZSB4
MiwgZG91YmxlIHkyKTsKKworICAgIFdFQktJVF9FWFBPUlQgV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXggZ2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0OworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFU
SU9OCisgICAgdmlydHVhbCBvcGVyYXRvciBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9u
Q3VydmU+KCkgY29uc3Q7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIFdFQktJVF9FWFBPUlQg
dm9pZCBpbml0aWFsaXplKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGRlc3Ryb3koKTsKKwor
ICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6Q0NLZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZT4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRp
ZiAvLyBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtleWZyYW1lLmggYi9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtleWZyYW1lLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
Yzk5ZWY1NTg3YmEzZDNmNTIzYjBiZmY4ZjczYTE5MzNmMGNhYmFlNAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtS2V5ZnJhbWUu
aApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRyYW5zZm9ybUtl
eWZyYW1lX2gKKyNkZWZpbmUgV2ViVHJhbnNmb3JtS2V5ZnJhbWVfaAorCisjaW5jbHVkZSAiV2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdl
YlRyYW5zZm9ybUtleWZyYW1lIHsKKyAgICBXZWJUcmFuc2Zvcm1LZXlmcmFtZShkb3VibGUgdGlt
ZSwgY29uc3QgV2ViVHJhbnNmb3JtT3BlcmF0aW9ucyYgdmFsdWUpCisgICAgICAgIDogdGltZSh0
aW1lKQorICAgICAgICAsIHZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBkb3VibGUg
dGltZTsKKyAgICBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIHZhbHVlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJUcmFuc2Zvcm1LZXlmcmFtZV9oCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXAKaW5kZXggNzhlNDI4YjIyODVkMzYzZTU0NzhkZjdmYTIzOGYzNmYz
ZWJlZjkwNy4uMmZlZWNjNzM4OWQzYzU4MWQ0ZjQzZmI5NDQ2MDJlM2IwN2Q1MzI1MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNDc3LDggKzQ3NywxMSBAQAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViVGV4dENoZWNraW5nQ29tcGxldGlvbkltcGwuY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL1dlYlRleHRDaGVja2luZ1Jlc3VsdC5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2Vi
QW5pbWF0aW9uLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJBbmltYXRpb25Db250cm9s
bGVySW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ29udHJvbGxl
ckltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJBbmltYXRpb25DdXJ2ZUNvbW1vbi5j
cHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ3VydmVDb21tb24uaCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9XZWJBcnJheUJ1ZmZlci5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvV2ViQXJyYXlCdWZmZXJWaWV3LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJC
aW5kaW5ncy5jcHAnLApAQCAtNTI3LDYgKzUzMCw3IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJGaWxlQ2hvb3NlckNvbXBsZXRpb25JbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
RmlsZVN5c3RlbUNhbGxiYWNrc0ltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZp
bGVTeXN0ZW1DYWxsYmFja3NJbXBsLmgnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRm9udENhY2hlLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGb250RGVzY3JpcHRpb24uY3BwJywKICAgICAg
ICAgICAgICAgICAnc3JjL1dlYkZvbnRJbXBsLmNwcCcsCkBAIC02NTEsNiArNjU1LDcgQEAKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYlN1cnJvdW5kaW5nVGV4dC5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViVGV4dElucHV0SW5mby5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2Vi
VGV4dFJ1bi5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvV2ViVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlVSTExvYWRUaW1pbmcuY3BwJywK
ICAgICAgICAgICAgICAgICAnc3JjL1dlYlNjb3BlZFVzZXJHZXN0dXJlLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9XZWJUZXh0RmllbGREZWNvcmF0b3JDbGllbnQuY3BwJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL1dlYktpdC5neXBpCmluZGV4IDhiZmNlOWNmNDNlMmIzZWFlZjJjOWU1NGNjOWQzMDU4
YWVlZGEzZWYuLmU1MTVhNWVkMTFjOWEzYjcxMDU3Y2ZkZjM3ZDFjODAwMzRiMDRkYTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtMTQ4LDcgKzE0OCw5IEBACiAgICAgICAgICAg
ICAndGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9U
cmVlVGVzdEhlbHBlcnMuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UcmVlVGVzdEhlbHBlcnMu
aCcsCisgICAgICAgICAgICAndGVzdHMvV2ViQW5pbWF0aW9uVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL1dlYkNvbXBvc2l0b3JJbnB1dEhhbmRsZXJJbXBsVGVzdC5jcHAnLAorICAgICAg
ICAgICAgJ3Rlc3RzL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvV2ViRnJhbWVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvV2ViTGF5ZXJU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvV2ViTGF5ZXJUcmVlVmlld1Rlc3QuY3BwJywK
QEAgLTE1Nyw2ICsxNTksNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlBhZ2VTZXJpYWxpemVy
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlNvY2tldERlZmxhdGVyVGVzdC5jcHAn
LAogICAgICAgICAgICAgJ3Rlc3RzL1dlYlNvY2tldEV4dGVuc2lvbkRpc3BhdGNoZXJUZXN0LmNw
cCcsCisgICAgICAgICAgICAndGVzdHMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LmNw
cCcsCiAgICAgICAgICAgICAndGVzdHMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXhUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvV2ViVHJhbnNmb3JtT3BlcmF0aW9uc1Rlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9XZWJVUkxSZXF1ZXN0VGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2RkZGZjMjQxMzY5Njg1
ZjI4ZGY5MjliYTAwZTQ1NTY0Mzg1OTU2OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbi5jcHAKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJBbmlt
YXRpb24uaD4KKworI2luY2x1ZGUgIkFuaW1hdGlvbklkVmVuZG9yLmgiCisjaW5jbHVkZSAiY2Mv
Q0NBY3RpdmVBbmltYXRpb24uaCIKKyNpbmNsdWRlICJjYy9DQ0FuaW1hdGlvbkN1cnZlLmgiCisj
aW5jbHVkZSA8cHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmg+CisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIFdlYkNvcmU6OkFuaW1h
dGlvbklkVmVuZG9yOwordXNpbmcgV2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb247CisKK25hbWVz
cGFjZSBXZWJLaXQgeworCitpbnQgV2ViQW5pbWF0aW9uOjppdGVyYXRpb25zKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9wcml2YXRlLT5pdGVyYXRpb25zKCk7Cit9CisKK3ZvaWQgV2ViQW5pbWF0
aW9uOjpzZXRJdGVyYXRpb25zKGludCBuKQoreworICAgIG1fcHJpdmF0ZS0+c2V0SXRlcmF0aW9u
cyhuKTsKK30KKworZG91YmxlIFdlYkFuaW1hdGlvbjo6c3RhcnRUaW1lKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9wcml2YXRlLT5zdGFydFRpbWUoKTsKK30KKwordm9pZCBXZWJBbmltYXRpb246
OnNldFN0YXJ0VGltZShkb3VibGUgbW9ub3RvbmljVGltZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNl
dFN0YXJ0VGltZShtb25vdG9uaWNUaW1lKTsKK30KKworZG91YmxlIFdlYkFuaW1hdGlvbjo6dGlt
ZU9mZnNldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+dGltZU9mZnNldCgpOwor
fQorCit2b2lkIFdlYkFuaW1hdGlvbjo6c2V0VGltZU9mZnNldChkb3VibGUgbW9ub3RvbmljVGlt
ZSkKK3sKKyAgICBtX3ByaXZhdGUtPnNldFRpbWVPZmZzZXQobW9ub3RvbmljVGltZSk7Cit9CisK
K2Jvb2wgV2ViQW5pbWF0aW9uOjphbHRlcm5hdGVzRGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5hbHRlcm5hdGVzRGlyZWN0aW9uKCk7Cit9CisKK3ZvaWQgV2ViQW5p
bWF0aW9uOjpzZXRBbHRlcm5hdGVzRGlyZWN0aW9uKGJvb2wgYWx0ZXJuYXRlcykKK3sKKyAgICBt
X3ByaXZhdGUtPnNldEFsdGVybmF0ZXNEaXJlY3Rpb24oYWx0ZXJuYXRlcyk7Cit9CisKK1dlYkFu
aW1hdGlvbjo6b3BlcmF0b3IgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbj4o
KSBjb25zdAoreworICAgIE93blB0cjxXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbj4gdG9SZXR1
cm4obV9wcml2YXRlLT5jbG9uZUZvckltcGxUaHJlYWQoKSk7CisgICAgdG9SZXR1cm4tPnNldE5l
ZWRzU3luY2hyb25pemVkU3RhcnRUaW1lKHRydWUpOworICAgIHJldHVybiB0b1JldHVybi5yZWxl
YXNlKCk7Cit9CisKK3ZvaWQgV2ViQW5pbWF0aW9uOjppbml0aWFsaXplKGNvbnN0IFdlYkFuaW1h
dGlvbkN1cnZlJiBjdXJ2ZSwgVGFyZ2V0UHJvcGVydHkgdGFyZ2V0UHJvcGVydHkpCit7CisgICAg
bV9wcml2YXRlLnJlc2V0KENDQWN0aXZlQW5pbWF0aW9uOjpjcmVhdGUoY3VydmUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5pbWF0aW9uSWRWZW5kb3I6
OmdldE5leHRBbmltYXRpb25JZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0R3JvdXBJZCgpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdlYkNv
cmU6OkNDQWN0aXZlQW5pbWF0aW9uOjpUYXJnZXRQcm9wZXJ0eT4odGFyZ2V0UHJvcGVydHkpKS5s
ZWFrUHRyKCkpOworfQorCit2b2lkIFdlYkFuaW1hdGlvbjo6ZGVzdHJveSgpCit7CisgICAgbV9w
cml2YXRlLnJlc2V0KDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmNwcCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45MmQwYjQ4NDJhN2YwNzcwZWQ0ZDIwYTM3ZTY3YzQxOTNiNDcwM2EwCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uQ3Vy
dmVDb21tb24uY3BwCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIldlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmgiCisKKyNpbmNs
dWRlICJjYy9DQ1RpbWluZ0Z1bmN0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK1Bhc3NP
d25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gY3JlYXRlVGltaW5nRnVuY3Rpb24oV2Vi
VGltaW5nRnVuY3Rpb25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBXZWJUaW1pbmdGdW5jdGlvblR5cGVFYXNlOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q0NF
YXNlVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOworICAgIGNhc2UgV2ViVGltaW5nRnVuY3Rpb25U
eXBlRWFzZUluOgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q0NFYXNlSW5UaW1pbmdGdW5jdGlv
bjo6Y3JlYXRlKCk7CisgICAgY2FzZSBXZWJUaW1pbmdGdW5jdGlvblR5cGVFYXNlT3V0OgorICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6Q0NFYXNlT3V0VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOwor
ICAgIGNhc2UgV2ViVGltaW5nRnVuY3Rpb25UeXBlRWFzZUluT3V0OgorICAgICAgICByZXR1cm4g
V2ViQ29yZTo6Q0NFYXNlSW5PdXRUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCk7CisgICAgY2FzZSBX
ZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXI6CisgICAgICAgIHJldHVybiBudWxscHRyOworICAg
IH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb25DdXJ2ZUNvbW1v
bi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uQ3VydmVDb21tb24u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yYzU2MmUzOWRlYTFjNDg5MTQ4YWQ1ODcxZTgzOWUwN2E0ZWYwM2VhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9u
Q3VydmVDb21tb24uaApAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YkFuaW1hdGlvbkN1cnZlQ29tbW9uX2gKKyNkZWZpbmUgV2ViQW5pbWF0aW9uQ3VydmVDb21tb25f
aAorCisjaW5jbHVkZSA8cHVibGljL1dlYlRpbWluZ0Z1bmN0aW9uVHlwZS5oPgorI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIENDVGltaW5nRnVu
Y3Rpb247Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworUGFzc093blB0cjxXZWJDb3JlOjpDQ1Rp
bWluZ0Z1bmN0aW9uPiBjcmVhdGVUaW1pbmdGdW5jdGlvbihXZWJUaW1pbmdGdW5jdGlvblR5cGUp
OworfQorCisjZW5kaWYgLy8gV2ViQW5pbWF0aW9uQ3VydmVDb21tb25faApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hZDlmNjNjNzUwZjM0MWI5YTNmOTY3NDBkM2I4NDRhMjA4NTE4OWRjCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZS5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSA8cHVibGljL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuaD4KKworI2lu
Y2x1ZGUgIldlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFt
ZWRBbmltYXRpb25DdXJ2ZS5oIgorI2luY2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6YWRkKGNvbnN0
IFdlYkZsb2F0S2V5ZnJhbWUmIGtleWZyYW1lKQoreworICAgIGFkZChrZXlmcmFtZSwgV2ViVGlt
aW5nRnVuY3Rpb25UeXBlRWFzZSk7Cit9CisKK3ZvaWQgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6
YWRkKGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUmIGtleWZyYW1lLCBXZWJUaW1pbmdGdW5jdGlvblR5
cGUgdHlwZSkKK3sKKyAgICBtX3ByaXZhdGUtPmFkZEtleWZyYW1lKFdlYkNvcmU6OkNDRmxvYXRL
ZXlmcmFtZTo6Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZyYW1lLnZhbHVlLCBjcmVhdGVUaW1p
bmdGdW5jdGlvbih0eXBlKSkpOworfQorCit2b2lkIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmFk
ZChjb25zdCBXZWJGbG9hdEtleWZyYW1lJiBrZXlmcmFtZSwgZG91YmxlIHgxLCBkb3VibGUgeTEs
IGRvdWJsZSB4MiwgZG91YmxlIHkyKQoreworICAgIG1fcHJpdmF0ZS0+YWRkS2V5ZnJhbWUoV2Vi
Q29yZTo6Q0NGbG9hdEtleWZyYW1lOjpjcmVhdGUoa2V5ZnJhbWUudGltZSwga2V5ZnJhbWUudmFs
dWUsIFdlYkNvcmU6OkNDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHgxLCB5MSwg
eDIsIHkyKSkpOworfQorCitmbG9hdCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShk
b3VibGUgdGltZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRWYWx1ZSh0aW1l
KTsKK30KKworV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6b3BlcmF0b3IgUGFzc093blB0cjxXZWJD
b3JlOjpDQ0FuaW1hdGlvbkN1cnZlPigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
Y2xvbmUoKTsKK30KKwordm9pZCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjppbml0aWFsaXplKCkK
K3sKKyAgICBtX3ByaXZhdGUucmVzZXQoV2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlv
bkN1cnZlOjpjcmVhdGUoKS5sZWFrUHRyKCkpOworfQorCit2b2lkIFdlYkZsb2F0QW5pbWF0aW9u
Q3VydmU6OmRlc3Ryb3koKQoreworICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDVhMTE4YzAxZGY5
NzEyNDFjZTRmOTM0MWNjNDU4NDQ5MjUxMzU5ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmNwcApAQCAtMCww
ICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
IDxwdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuaD4KKworI2luY2x1ZGUgIldlYkFu
aW1hdGlvbkN1cnZlQ29tbW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NLZXlmcmFtZWRBbmltYXRpb25D
dXJ2ZS5oIgorI2luY2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK3ZvaWQgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmFkZChjb25zdCBXZWJUcmFu
c2Zvcm1LZXlmcmFtZSYga2V5ZnJhbWUpCit7CisgICAgYWRkKGtleWZyYW1lLCBXZWJUaW1pbmdG
dW5jdGlvblR5cGVFYXNlKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6
YWRkKGNvbnN0IFdlYlRyYW5zZm9ybUtleWZyYW1lJiBrZXlmcmFtZSwgV2ViVGltaW5nRnVuY3Rp
b25UeXBlIHR5cGUpCit7CisgICAgbV9wcml2YXRlLT5hZGRLZXlmcmFtZShXZWJDb3JlOjpDQ1Ry
YW5zZm9ybUtleWZyYW1lOjpjcmVhdGUoa2V5ZnJhbWUudGltZSwga2V5ZnJhbWUudmFsdWUsIGNy
ZWF0ZVRpbWluZ0Z1bmN0aW9uKHR5cGUpKSk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmU6OmFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYga2V5ZnJhbWUsIGRvdWJs
ZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MikKK3sKKyAgICBtX3ByaXZhdGUt
PmFkZEtleWZyYW1lKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OmNyZWF0ZShrZXlmcmFt
ZS50aW1lLCBrZXlmcmFtZS52YWx1ZSwgV2ViQ29yZTo6Q0NDdWJpY0JlemllclRpbWluZ0Z1bmN0
aW9uOjpjcmVhdGUoeDEsIHkxLCB4MiwgeTIpKSk7Cit9CisKK1dlYlRyYW5zZm9ybWF0aW9uTWF0
cml4IFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpnZXRWYWx1ZShkb3VibGUgdGltZSkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5nZXRWYWx1ZSh0aW1lKTsKK30KKworV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmU6Om9wZXJhdG9yIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmlt
YXRpb25DdXJ2ZT4oKSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmNsb25lKCk7Cit9
CisKK3ZvaWQgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmluaXRpYWxpemUoKQoreworICAg
IG1fcHJpdmF0ZS5yZXNldChXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlOjpjcmVhdGUoKS5sZWFrUHRyKCkpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlOjpkZXN0cm95KCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoMCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9XZWJBbmltYXRpb25UZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2Vi
QW5pbWF0aW9uVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWMwZjJkNWZiM2Q4ZTBkODVjNDU2ZTRjNjgy
N2JhZmE0YTkyYjJhOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvV2ViQW5pbWF0aW9uVGVzdC5jcHAKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8cHVibGljL1dlYkFuaW1hdGlvbi5o
PgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYv
UGFzc093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2Ugewor
CitURVNUKFdlYkFuaW1hdGlvblRlc3QsIERlZmF1bHRTZXR0aW5ncykKK3sKKyAgICBXZWJGbG9h
dEFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIFdlYkFuaW1hdGlvbiBhbmltYXRpb24oY3VydmUs
IFdlYkFuaW1hdGlvbjo6V2ViQW5pbWF0aW9uT3BhY2l0eSk7CisKKyAgICAvLyBFbnN1cmUgdGhh
dCB0aGUgZGVmYXVsdHMgYXJlIGNvcnJlY3QuCisgICAgRVhQRUNUX0VRKDEsIGFuaW1hdGlvbi5p
dGVyYXRpb25zKCkpOworICAgIEVYUEVDVF9FUSgwLCBhbmltYXRpb24uc3RhcnRUaW1lKCkpOwor
ICAgIEVYUEVDVF9FUSgwLCBhbmltYXRpb24udGltZU9mZnNldCgpKTsKKyAgICBFWFBFQ1RfRkFM
U0UoYW5pbWF0aW9uLmFsdGVybmF0ZXNEaXJlY3Rpb24oKSk7Cit9CisKK1RFU1QoV2ViQW5pbWF0
aW9uVGVzdCwgTW9kaWZpZWRTZXR0aW5ncykKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZl
IGN1cnZlOworICAgIFdlYkFuaW1hdGlvbiBhbmltYXRpb24oY3VydmUsIFdlYkFuaW1hdGlvbjo6
V2ViQW5pbWF0aW9uT3BhY2l0eSk7CisgICAgYW5pbWF0aW9uLnNldEl0ZXJhdGlvbnMoMik7Cisg
ICAgYW5pbWF0aW9uLnNldFN0YXJ0VGltZSgyKTsKKyAgICBhbmltYXRpb24uc2V0VGltZU9mZnNl
dCgyKTsKKyAgICBhbmltYXRpb24uc2V0QWx0ZXJuYXRlc0RpcmVjdGlvbih0cnVlKTsKKworICAg
IEVYUEVDVF9FUSgyLCBhbmltYXRpb24uaXRlcmF0aW9ucygpKTsKKyAgICBFWFBFQ1RfRVEoMiwg
YW5pbWF0aW9uLnN0YXJ0VGltZSgpKTsKKyAgICBFWFBFQ1RfRVEoMiwgYW5pbWF0aW9uLnRpbWVP
ZmZzZXQoKSk7CisgICAgRVhQRUNUX1RSVUUoYW5pbWF0aW9uLmFsdGVybmF0ZXNEaXJlY3Rpb24o
KSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjU2NWViODVhNDg3ZTk2YWI5YmI4NGY4MzFjZjZlZmQ3MWI4OWFkOTcKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmVU
ZXN0LmNwcApAQCAtMCwwICsxLDIzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisg
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSA8cHVibGljL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuaD4KKworI2lu
Y2x1ZGUgImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+
CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSB7CisKKy8vIFRlc3RzIHRoYXQg
YSBmbG9hdCBhbmltYXRpb24gd2l0aCBvbmUga2V5ZnJhbWUgd29ya3MgYXMgZXhwZWN0ZWQuCitU
RVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBPbmVGbG9hdEtleWZyYW1lKQoreworICAg
IFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5
ZnJhbWUoMCwgMiksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1
cnZlLmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUo
MC41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDEpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMikpOworfQorCisvLyBUZXN0cyB0aGF0
IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggdHdvIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4K
K1RFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIFR3b0Zsb2F0S2V5ZnJhbWUpCit7Cisg
ICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRL
ZXlmcmFtZSgwLCAyKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS5h
ZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCA0KSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBj
dXJ2ZS5nZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFs
dWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1ZSgyKSk7Cit9CisK
Ky8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCB0aHJlZSBrZXlmcmFtZXMgd29y
a3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBUaHJlZUZs
b2F0S2V5ZnJhbWUpCit7CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBj
dXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAyKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGlu
ZWFyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCA0KSwgV2ViVGltaW5nRnVu
Y3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgyLCA4KSwg
V2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3Vy
dmUuZ2V0VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUo
MCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9F
USg2LCBjdXJ2ZS5nZXRWYWx1ZSgxLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUu
Z2V0VmFsdWUoMikpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS5nZXRWYWx1ZSgzKSk7
Cit9CisKKy8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmltYXRpb24gd2l0aCBtdWx0aXBsZSBrZXlz
IGF0IGEgZ2l2ZW4gdGltZSB3b3JrcyBzYW5lbHkuCitURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3Vy
dmVUZXN0LCBSZXBlYXRlZEZsb2F0S2V5VGltZXMpCit7CisgICAgV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZSBjdXJ2ZTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCA0KSwgV2ViVGlt
aW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgx
LCA0KSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxv
YXRLZXlmcmFtZSgxLCA2KSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2
ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgyLCA2KSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFy
KTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1ZSgtMSkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDQsIGN1cnZlLmdldFZhbHVlKDAuNSkpOworCisgICAgLy8gVGhlcmUgaXMgYSBkaXNjb250aW51
aXR5IGF0IDEuIEFueSB2YWx1ZSBiZXR3ZWVuIDQgYW5kIDYgaXMgdmFsaWQuCisgICAgZmxvYXQg
dmFsdWUgPSBjdXJ2ZS5nZXRWYWx1ZSgxKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZSA+PSA0ICYm
IHZhbHVlIDw9IDYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZhbHVlKDEu
NSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS5nZXRWYWx1ZSgyKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZhbHVlKDMpKTsKK30KKworLy8gVGVzdHMgdGhhdCB0
aGUga2V5ZnJhbWVzIG1heSBiZSBhZGRlZCBvdXQgb2Ygb3JkZXIuCitURVNUKFdlYkZsb2F0QW5p
bWF0aW9uQ3VydmVUZXN0LCBVbnNvcnRlZEtleWZyYW1lcykKK3sKKyAgICBXZWJGbG9hdEFuaW1h
dGlvbkN1cnZlIGN1cnZlOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDIsIDgpLCBX
ZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZy
YW1lKDAsIDIpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFkZChX
ZWJGbG9hdEtleWZyYW1lKDEsIDQpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworCisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3Vy
dmUuZ2V0VmFsdWUoMC41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVl
KDEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMS41KSk7CisgICAg
RVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLmdldFZhbHVlKDIpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoOCwgY3VydmUuZ2V0VmFsdWUoMykpOworfQorCisvLyBUZXN0cyB0aGF0IGEgY3ViaWMgYmV6
aWVyIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViRmxvYXRBbmlt
YXRpb25DdXJ2ZVRlc3QsIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24pCit7CisgICAgV2ViRmxv
YXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgw
LCAwKSwgMC4yNSwgMCwgMC43NSwgMSk7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUo
MSwgMSksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMCwgY3VydmUuZ2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9MVCgwLCBjdXJ2ZS5nZXRWYWx1
ZSgwLjI1KSk7CisgICAgRVhQRUNUX0dUKDAuMjUsIGN1cnZlLmdldFZhbHVlKDAuMjUpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1Rf
TFQoMC43NSwgY3VydmUuZ2V0VmFsdWUoMC43NSkpOworICAgIEVYUEVDVF9HVCgxLCBjdXJ2ZS5n
ZXRWYWx1ZSgwLjc1KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGN1cnZlLmdldFZhbHVlKDEp
KTsKK30KKworLy8gVGVzdHMgdGhhdCBhbiBlYXNlIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBl
eHBlY3RlZC4KK1RFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VUaW1pbmdGdW5j
dGlvbikKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIGN1cnZlLmFk
ZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVFYXNlKTsKKyAg
ICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBl
TGluZWFyKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdG
dW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9
IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZh
bHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKSk7CisgICAgfQorfQorCisvLyBUZXN0cyB1
c2luZyBhIGxpbmVhciB0aW1pbmcgZnVuY3Rpb24uCitURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3Vy
dmVUZXN0LCBMaW5lYXJUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlIGN1cnZlOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCBXZWJUaW1p
bmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEs
IDEpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworCisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7Cisg
ICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1lLCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKSk7CisgICAg
fQorfQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFz
IGV4cGVjdGVkLgorVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZUluVGltaW5n
RnVuY3Rpb24pCit7CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBjdXJ2
ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAwKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlRWFzZUlu
KTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViVGltaW5nRnVuY3Rp
b25UeXBlTGluZWFyKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0
aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VJblRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7
CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJs
ZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlv
bi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpKTsKKyAgICB9Cit9CisKKy8v
IFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQu
CitURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNlT3V0VGltaW5nRnVuY3Rpb24p
Cit7CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBjdXJ2ZS5hZGQoV2Vi
RmxvYXRLZXlmcmFtZSgwLCAwKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlRWFzZU91dCk7CisgICAg
Y3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxp
bmVhcik7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVu
Y3Rpb24oV2ViQ29yZTo6Q0NFYXNlT3V0VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUg
PSBpICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRW
YWx1ZSh0aW1lKSwgY3VydmUuZ2V0VmFsdWUodGltZSkpOworICAgIH0KK30KKworLy8gVGVzdHMg
dGhhdCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1Qo
V2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VJbk91dFRpbWluZ0Z1bmN0aW9uKQorewor
ICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0
S2V5ZnJhbWUoMCwgMCksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VJbk91dCk7CisgICAgY3Vy
dmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVh
cik7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rp
b24oV2ViQ29yZTo6Q0NFYXNlSW5PdXRUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9
IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZh
bHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKSk7CisgICAgfQorfQorCisvLyBUZXN0cyB0
aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChX
ZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgQ3VzdG9tQmV6aWVyVGltaW5nRnVuY3Rpb24pCit7
CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBkb3VibGUgeDEgPSAwLjM7
CisgICAgZG91YmxlIHkxID0gMC4yOworICAgIGRvdWJsZSB4MiA9IDAuODsKKyAgICBkb3VibGUg
eTIgPSAwLjc7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIHgxLCB5MSwg
eDIsIHkyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViVGltaW5n
RnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0
aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246
OmNyZWF0ZSh4MSwgeTEsIHgyLCB5MikpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsr
aSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBF
Q1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1
ZSh0aW1lKSk7CisgICAgfQorfQorCisvLyBUZXN0cyB0aGF0IHRoZSBkZWZhdWx0IHRpbWluZyBm
dW5jdGlvbiBpcyBpbmRlZWQgZWFzZS4KK1RFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3Qs
IERlZmF1bHRUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1
cnZlOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApKTsKKyAgICBjdXJ2ZS5h
ZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsK
KworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihX
ZWJDb3JlOjpDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGZvciAoaW50IGkg
PSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1
OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUp
LCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiZjgzMTE0Yjk5ODdkMmFiYzYw
ZjJmYTQ1ZDhjYWQ5NTdjOGE2NzkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKQEAgLTAsMCAr
MSwyOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
PHB1YmxpYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5oPgorCisjaW5jbHVkZSAiY2MvQ0NU
aW1pbmdGdW5jdGlvbi5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxw
dWJsaWMvV2ViVHJhbnNmb3JtT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2Ug
eworCisvLyBUZXN0cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG9uZSBrZXlmcmFt
ZSB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0
LCBPbmVUcmFuc2Zvcm1LZXlmcmFtZSkKK3sKKyAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZSBjdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsK
KyAgICBvcGVyYXRpb25zLmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQo
V2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9ucyksIFdlYlRpbWluZ0Z1bmN0aW9uVHlw
ZUxpbmVhcik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoLTEpLm00
MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMCkubTQxKCkpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpLm00MSgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMSkubTQxKCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgyKS5tNDEoKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQg
YSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggdHdvIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3Rl
ZC4KK1RFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBUd29UcmFuc2Zvcm1LZXlm
cmFtZSkKK3sKKyAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBXZWJL
aXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEu
YXBwZW5kVHJhbnNsYXRlKDIsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwg
MCk7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwg
V2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3Jt
S2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwor
ICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgtMSkubTQxKCkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgwKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZM
T0FUX0VRKDMsIGN1cnZlLmdldFZhbHVlKDAuNSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USg0LCBjdXJ2ZS5nZXRWYWx1ZSgxKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1
cnZlLmdldFZhbHVlKDIpLm00MSgpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBh
bmltYXRpb24gd2l0aCB0aHJlZSBrZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdl
YlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgVGhyZWVUcmFuc2Zvcm1LZXlmcmFtZSkKK3sK
KyAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJh
bnNsYXRlKDIsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CisgICAg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOworICAgIG9wZXJhdGlv
bnMzLmFwcGVuZFRyYW5zbGF0ZSg4LCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3Jt
S2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwor
ICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYlRp
bWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZy
YW1lKDIsIG9wZXJhdGlvbnMzKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoLTEpLm00MSgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMCkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgzLCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwg
Y3VydmUuZ2V0VmFsdWUoMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS5n
ZXRWYWx1ZSgxLjUpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUuZ2V0VmFs
dWUoMikubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS5nZXRWYWx1ZSgzKS5t
NDEoKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggbXVs
dGlwbGUga2V5cyBhdCBhIGdpdmVuIHRpbWUgd29ya3Mgc2FuZWx5LgorVEVTVChXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZVRlc3QsIFJlcGVhdGVkVHJhbnNmb3JtS2V5VGltZXMpCit7CisgICAg
Ly8gQSBzdGVwIGZ1bmN0aW9uLgorICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZl
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBv
cGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5z
bGF0ZSg0LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9uczM7CisgICAgb3BlcmF0aW9uczMuYXBwZW5kVHJhbnNsYXRlKDYsIDAsIDApOworICAgIFdl
YktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zNDsKKyAgICBvcGVyYXRpb25z
NC5hcHBlbmRUcmFuc2xhdGUoNiwgMCwgMCk7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtl
eWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAg
ICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJUaW1p
bmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFt
ZSgxLCBvcGVyYXRpb25zMyksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3Vy
dmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDIsIG9wZXJhdGlvbnM0KSwgV2ViVGltaW5nRnVu
Y3Rpb25UeXBlTGluZWFyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1
ZSgtMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1ZSgwKS5t
NDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDAuNSkubTQxKCkp
OworCisgICAgLy8gVGhlcmUgaXMgYSBkaXNjb250aW51aXR5IGF0IDEuIEFueSB2YWx1ZSBiZXR3
ZWVuIDQgYW5kIDYgaXMgdmFsaWQuCisgICAgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggdmFsdWUg
PSBjdXJ2ZS5nZXRWYWx1ZSgxKTsKKyAgICBFWFBFQ1RfVFJVRSh2YWx1ZS5tNDEoKSA+PSA0ICYm
IHZhbHVlLm00MSgpIDw9IDYpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZh
bHVlKDEuNSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS5nZXRWYWx1ZSgy
KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZhbHVlKDMpLm00MSgp
KTsKK30KKworLy8gVGVzdHMgdGhhdCB0aGUga2V5ZnJhbWVzIG1heSBiZSBhZGRlZCBvdXQgb2Yg
b3JkZXIuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgVW5zb3J0ZWRLZXlm
cmFtZXMpCit7CisgICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMx
LmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJh
dGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQsIDAs
IDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKKyAg
ICBvcGVyYXRpb25zMy5hcHBlbmRUcmFuc2xhdGUoOCwgMCwgMCk7CisgICAgY3VydmUuYWRkKFdl
YlRyYW5zZm9ybUtleWZyYW1lKDIsIG9wZXJhdGlvbnMzKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBl
TGluZWFyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9u
czEpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFkZChXZWJUcmFu
c2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVh
cik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoLTEpLm00MSgpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMCkubTQxKCkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpLm00MSgpKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USg2LCBjdXJ2ZS5nZXRWYWx1ZSgxLjUpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOCwg
Y3VydmUuZ2V0VmFsdWUoMikubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS5n
ZXRWYWx1ZSgzKS5tNDEoKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSBjdWJpYyBiZXppZXIgdGlt
aW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZVRlc3QsIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb24pCit7CisgICAgV2ViVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAw
KTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAg
b3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOworICAgIGN1cnZlLmFkZChXZWJU
cmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIDAuMjUsIDAsIDAuNzUsIDEpOworICAg
IGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYlRpbWlu
Z0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGN1cnZlLmdldFZh
bHVlKDApLm00MSgpKTsKKyAgICBFWFBFQ1RfTFQoMCwgY3VydmUuZ2V0VmFsdWUoMC4yNSkubTQx
KCkpOworICAgIEVYUEVDVF9HVCgwLjI1LCBjdXJ2ZS5nZXRWYWx1ZSgwLjI1KS5tNDEoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwgY3VydmUuZ2V0VmFsdWUoMC41KS5tNDEoKSk7CisgICAg
RVhQRUNUX0xUKDAuNzUsIGN1cnZlLmdldFZhbHVlKDAuNzUpLm00MSgpKTsKKyAgICBFWFBFQ1Rf
R1QoMSwgY3VydmUuZ2V0VmFsdWUoMC43NSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgx
LCBjdXJ2ZS5nZXRWYWx1ZSgxKS5tNDEoKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYW4gZWFzZSB0
aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlVGVzdCwgRWFzZVRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlIGN1cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7Cisg
ICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJh
dGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNm
b3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVFYXNlKTsK
KyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJU
aW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5n
RnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFzZVRpbWluZ0Z1bmN0aW9uOjpj
cmVhdGUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNv
bnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1p
bmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpLm00MSgpKTsK
KyAgICB9Cit9CisKKy8vIFRlc3RzIHVzaW5nIGEgbGluZWFyIHRpbWluZyBmdW5jdGlvbi4KK1RF
U1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBMaW5lYXJUaW1pbmdGdW5jdGlvbikK
K3sKKyAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBXZWJLaXQ6Oldl
YlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5k
VHJhbnNsYXRlKDAsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7Cisg
ICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViVGlt
aW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJh
bWUoMSwgb3BlcmF0aW9uczIpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworCisgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1l
ID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1lLCBjdXJ2ZS5nZXRWYWx1
ZSh0aW1lKS5tNDEoKSk7CisgICAgfQorfQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGlt
aW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZVRlc3QsIEVhc2VJblRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlIGN1cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7Cisg
ICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJh
dGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNm
b3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVFYXNlSW4p
OworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdl
YlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1p
bmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNlSW5UaW1pbmdGdW5jdGlv
bjo6Y3JlYXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAg
ICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEo
dGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKS5tNDEo
KSk7CisgICAgfQorfQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0aW9u
IHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3Qs
IEVhc2VPdXRUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZSBjdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7
CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIFdlYktpdDo6
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBl
bmRUcmFuc2xhdGUoMSwgMCwgMCk7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1l
KDAsIG9wZXJhdGlvbnMxKSwgV2ViVGltaW5nRnVuY3Rpb25UeXBlRWFzZU91dCk7CisgICAgY3Vy
dmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViVGltaW5nRnVu
Y3Rpb25UeXBlTGluZWFyKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9u
PiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VPdXRUaW1pbmdGdW5jdGlvbjo6Y3JlYXRl
KCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25zdCBk
b3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVu
Y3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CisgICAg
fQorfQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFz
IGV4cGVjdGVkLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VJbk91
dFRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZl
OworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBv
cGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5z
bGF0ZSgxLCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3Bl
cmF0aW9uczEpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVFYXNlSW5PdXQpOworICAgIGN1cnZlLmFk
ZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYlRpbWluZ0Z1bmN0aW9u
VHlwZUxpbmVhcik7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGlt
aW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNlSW5PdXRUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkp
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3Vi
bGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rp
b24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CisgICAgfQor
fQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4
cGVjdGVkLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIEN1c3RvbUJlemll
clRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZl
OworICAgIGRvdWJsZSB4MSA9IDAuMzsKKyAgICBkb3VibGUgeTEgPSAwLjI7CisgICAgZG91Ymxl
IHgyID0gMC44OworICAgIGRvdWJsZSB5MiA9IDAuNzsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9y
bU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRl
KDAsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7CisgICAgY3VydmUu
YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgeDEsIHkxLCB4MiwgeTIp
OworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdl
YlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1p
bmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uOjpjcmVhdGUoeDEsIHkxLCB4MiwgeTIpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8
PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKKyAgICAg
ICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUu
Z2V0VmFsdWUodGltZSkubTQxKCkpOworICAgIH0KK30KKworLy8gVGVzdHMgdGhhdCB0aGUgZGVm
YXVsdCB0aW1pbmcgZnVuY3Rpb24gaXMgaW5kZWVkIGVhc2UuCitURVNUKFdlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlVGVzdCwgRGVmYXVsdFRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwg
MCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAg
IG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2Vi
VHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJh
bnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJUaW1pbmdGdW5jdGlvblR5cGVMaW5l
YXIpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0
aW9uKFdlYkNvcmU6OkNDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAq
IDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUo
dGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpLm00MSgpKTsKKyAgICB9Cit9CisKK30gLy8gbmFt
ZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150345</attachid>
            <date>2012-07-01 16:51:21 -0700</date>
            <delta_ts>2012-07-04 13:57:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-90303-20120701195119.patch</filename>
            <type>text/plain</type>
            <size>65743</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxNjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCAwYjFhNjQ3MTc0ZjZm
YzY5YzJlY2JiYWU4YjVjMzA1YTkzNTgwYjQ3Li5iNzlkYmE5MjQ1NDZiNGJkYjk1YjFkNDA4NDYz
NDg0YWQwNDA2OWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMi0wNi0yOSAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IENyZWF0ZSBhIFdlYktpdDo6V2ViKiB3cmFwcGVyIGZvciB0aGUgY2MgYW5pbWF0aW9uIGNsYXNz
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMzAz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0
Zm9ybS5neXBpOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb24uaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJB
bmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb246OldlYkFuaW1hdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6fldlYkFuaW1hdGlvbik6CisgICAgICAg
ICogY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViQW5pbWF0aW9uQ3VydmUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb25DdXJ2ZTo6fldlYkFuaW1hdGlvbkN1cnZl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uQ3VydmU6OldlYkFuaW1hdGlvbkN1cnZl
KToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YkZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlOjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxv
YXRBbmltYXRpb25DdXJ2ZTo6fldlYkZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIGNo
cm9taXVtL3B1YmxpYy9XZWJGbG9hdEtleWZyYW1lLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRLZXlmcmFtZTo6V2ViRmxvYXRLZXlmcmFtZSk6
CisgICAgICAgIChXZWJGbG9hdEtleWZyYW1lKToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMv
V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlOjp+V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIGNocm9taXVt
L3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUtleWZyYW1lOjpXZWJUcmFuc2Zvcm1LZXlm
cmFtZSk6CisgICAgICAgIChXZWJUcmFuc2Zvcm1LZXlmcmFtZSk6CisKIDIwMTItMDYtMjkgIFRv
bnkgUGF5bmUgIDx0cGF5bmVAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJlbW92ZSB0eXBlIGZy
b20gc2NyZWVuQ29sb3JQcm9maWxlIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAz
ZWJhZjBmNTRjMGRhYzcyNGFlNTA3NWQ3YmJmNWIyNTA3MjhlYTI3Li5jNWI0MWIyMDBiOWRlZWRm
NTJjNzFiNjczZjBiMDQwMzlkMWQxNTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDQ3IEBACisyMDEyLTA2LTI5ICBJYW4gVm9sbGljayAgPHZvbGxpY2tAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gQ3JlYXRlIGEgV2ViS2l0OjpXZWIqIHdyYXBwZXIg
Zm9yIHRoZSBjYyBhbmltYXRpb24gY2xhc3NlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTAzMDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAgICogV2ViS2l0Lmd5cGk6
CisgICAgICAgICogc3JjL1dlYkFuaW1hdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjppdGVyYXRpb25zKToKKyAgICAgICAg
KFdlYktpdDo6V2ViQW5pbWF0aW9uOjpzZXRJdGVyYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6
V2ViQW5pbWF0aW9uOjpzdGFydFRpbWUpOgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb246
OnNldFN0YXJ0VGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6dGltZU9mZnNl
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6c2V0VGltZU9mZnNldCk6CisgICAg
ICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6YWx0ZXJuYXRlc0RpcmVjdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6c2V0QWx0ZXJuYXRlc0RpcmVjdGlvbik6CisgICAgICAg
IChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6dG9DQ0FjdGl2ZUFuaW1hdGlvbik6CisgICAgICAgIChX
ZWJLaXQ6OldlYkFuaW1hdGlvbjo6aW5pdGlhbGl6ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkFu
aW1hdGlvbjo6ZGVzdHJveSk6CisgICAgICAgICogc3JjL1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9u
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpjcmVhdGVU
aW1pbmdGdW5jdGlvbik6CisgICAgICAgICogc3JjL1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAq
IHNyYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQp
OgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjphZGQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjp0b0NDQW5pbWF0aW9uQ3VydmUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjppbml0aWFsaXplKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6ZGVzdHJveSk6CisgICAgICAg
ICogc3JjL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJLaXQpOgorICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6YWRk
KToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OnRvQ0NBbmlt
YXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
Ojppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmU6OmRlc3Ryb3kpOgorICAgICAgICAqIHRlc3RzL1dlYkFuaW1hdGlvblRlc3QuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKiB0ZXN0cy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdC5jcHA6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdC5jcHA6IEFk
ZGVkLgorCiAyMDEyLTA2LTI5ICBKb3NodWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgSW5kZXhlZERCOiBLZWVwIGRpcmVjdGlvbiBvbiBJREJDdXJzb3IgdG8gYXZvaWQg
Y2FsbHMgdG8gYmFjayBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5n
eXBpIGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKaW5kZXggN2Q1NjRmNzRiZDQxNTAw
NWQ1ZWJiZTYzNmNjZDg5ODM2Yjc0MGViMy4uNjI5MGNhOTIxOWZiMDRiZDM1ODA1ZDhlYzJiNTQ4
ODBjNjliOTlmNyAxMDA2NDQKLS0tIGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKKysr
IGIvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkKQEAgLTMyLDYgKzMyLDggQEAKICAgICAn
dmFyaWFibGVzJzogewogICAgICAgICAncGxhdGZvcm1fZmlsZXMnOiBbCiAgICAgICAgICAgICAn
Y2hyb21pdW0vcHVibGljL1BsYXRmb3JtLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1Ymxp
Yy9XZWJBbmltYXRpb24uaCcKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0
aW9uQ3VydmUuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkF1ZGlvQnVzLmgn
LAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJBdWRpb0RldmljZS5oJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViQmxvYkRhdGEuaCcsCkBAIC01NCw2ICs1Niw4IEBA
CiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkZpbGVVdGlsaXRpZXMuaCcsCiAgICAg
ICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkZpbHRlck9wZXJhdGlvbi5oJywKICAgICAgICAg
ICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9ucy5oJywKKyAgICAgICAgICAg
ICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oJywKKyAgICAgICAgICAg
ICdjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRLZXlmcmFtZS5oJywKICAgICAgICAgICAgICdjaHJv
bWl1bS9wdWJsaWMvV2ViRmxvYXRQb2ludC5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJs
aWMvV2ViRmxvYXRRdWFkLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJGbG9h
dFJlY3QuaCcsCkBAIC0xMDgsNiArMTEyLDggQEAKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJs
aWMvV2ViVGhyZWFkLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJUaHJlYWRT
YWZlRGF0YS5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtYXRp
b25NYXRyaXguaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zv
cm1LZXlmcmFtZS5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucy5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViUHJlcmVuZGVy
LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJVUkwuaCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbi5oIGIvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb24uaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzE1
ZTA1MGY2MTgzMzQ3MjdmMjUyYWU1YmU1YTIxMTNlYjgwZGRlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb24uaApAQCAtMCwwICsx
LDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkFuaW1hdGlvbl9oCisjZGVmaW5lIFdl
YkFuaW1hdGlvbl9oCisKKyNpbmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJOb25D
b3B5YWJsZS5oIgorI2luY2x1ZGUgIldlYlByaXZhdGVPd25QdHIuaCIKKworI2lmIFdFQktJVF9J
TVBMRU1FTlRBVElPTgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworY2xhc3MgQ0NBY3RpdmVBbmltYXRpb247Cit9CisKK25hbWVzcGFjZSBX
ZWJLaXQgeworCitjbGFzcyBXZWJBbmltYXRpb25DdXJ2ZTsKKworLy8gQSBjb21wb3NpdG9yIGRy
aXZlbiBhbmltYXRpb24uCitjbGFzcyBXZWJBbmltYXRpb24gOiBwdWJsaWMgV2ViTm9uQ29weWFi
bGUgeworcHVibGljOgorICAgIGVudW0gVGFyZ2V0UHJvcGVydHkgeworICAgICAgICBXZWJBbmlt
YXRpb25UcmFuc2Zvcm0gPSAxLAorICAgICAgICBXZWJBbmltYXRpb25PcGFjaXR5CisgICAgfTsK
KworICAgIFdlYkFuaW1hdGlvbihjb25zdCBXZWJBbmltYXRpb25DdXJ2ZSYgY3VydmUsIFRhcmdl
dFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZShjdXJ2
ZSwgdGFyZ2V0UHJvcGVydHkpOworICAgIH0KKworICAgIH5XZWJBbmltYXRpb24oKQorICAgIHsK
KyAgICAgICAgZGVzdHJveSgpOworICAgIH0KKworICAgIC8vIFRoaXMgaXMgdGhlIG51bWJlciBv
ZiB0aW1lcyB0aGF0IHRoZSBhbmltYXRpb24gd2lsbCBwbGF5LiBJZiB0aGlzCisgICAgLy8gdmFs
dWUgaXMgemVybyB0aGUgYW5pbWF0aW9uIHdpbGwgbm90IHBsYXkuIElmIGl0IGlzIG5lZ2F0aXZl
LCB0aGVuCisgICAgLy8gdGhlIGFuaW1hdGlvbiB3aWxsIGxvb3AgaW5kZWZpbml0ZWx5LgorICAg
IFdFQktJVF9FWFBPUlQgaW50IGl0ZXJhdGlvbnMoKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JU
IHZvaWQgc2V0SXRlcmF0aW9ucyhpbnQpOworCisgICAgV0VCS0lUX0VYUE9SVCBkb3VibGUgc3Rh
cnRUaW1lKCkgY29uc3Q7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIHNldFN0YXJ0VGltZShkb3Vi
bGUgbW9ub3RvbmljVGltZSk7CisgICAgV0VCS0lUX0VYUE9SVCBib29sIGhhc1NldFN0YXJ0VGlt
ZSgpIGNvbnN0OworCisgICAgV0VCS0lUX0VYUE9SVCBkb3VibGUgdGltZU9mZnNldCgpIGNvbnN0
OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRUaW1lT2Zmc2V0KGRvdWJsZSBtb25vdG9uaWNU
aW1lKTsKKworICAgIC8vIElmIGFsdGVybmF0ZXNEaXJlY3Rpb24gaXMgdHJ1ZSwgb24gb2RkIG51
bWJlcmVkIGl0ZXJhdGlvbnMgd2UgcmV2ZXJzZSB0aGUgY3VydmUuCisgICAgV0VCS0lUX0VYUE9S
VCBib29sIGFsdGVybmF0ZXNEaXJlY3Rpb24oKSBjb25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZv
aWQgc2V0QWx0ZXJuYXRlc0RpcmVjdGlvbihib29sKTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRB
VElPTgorICAgIG9wZXJhdG9yIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb24+
KCkgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5p
dGlhbGl6ZShjb25zdCBXZWJBbmltYXRpb25DdXJ2ZSYsIFRhcmdldFByb3BlcnR5KTsKKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgaW5pdGlhbGl6ZShjb25zdCBXZWJBbmltYXRpb24mKTsKKyAgICBX
RUJLSVRfRVhQT1JUIHZvaWQgZGVzdHJveSgpOworCisgICAgV2ViUHJpdmF0ZU93blB0cjxXZWJD
b3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbj4gbV9wcml2YXRlOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0CisKKyNlbmRpZiAvLyBXZWJBbmltYXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1Bs
YXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb25DdXJ2ZS5oIGIvU291cmNlL1BsYXRm
b3JtL2Nocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb25DdXJ2ZS5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU5ZWNj
MWVkYTQxOThlYzM2MzE0ZjQ0MDcyNTNkZjAzYzU3ODQ1OGEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmgKQEAgLTAs
MCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJBbmltYXRpb25DdXJ2ZV9oCisj
ZGVmaW5lIFdlYkFuaW1hdGlvbkN1cnZlX2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2lu
Y2x1ZGUgIldlYk5vbkNvcHlhYmxlLmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2Ns
YXNzIENDQW5pbWF0aW9uQ3VydmU7Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitjbGFzcyBX
ZWJBbmltYXRpb25DdXJ2ZSA6IHB1YmxpYyBXZWJOb25Db3B5YWJsZSB7CitwdWJsaWM6CisgICAg
dmlydHVhbCB+V2ViQW5pbWF0aW9uQ3VydmUoKSB7IH0KKworICAgIGVudW0gVGltaW5nRnVuY3Rp
b25UeXBlIHsKKyAgICAgICAgVGltaW5nRnVuY3Rpb25UeXBlRWFzZSwKKyAgICAgICAgVGltaW5n
RnVuY3Rpb25UeXBlRWFzZUluLAorICAgICAgICBUaW1pbmdGdW5jdGlvblR5cGVFYXNlT3V0LAor
ICAgICAgICBUaW1pbmdGdW5jdGlvblR5cGVFYXNlSW5PdXQsCisgICAgICAgIFRpbWluZ0Z1bmN0
aW9uVHlwZUxpbmVhcgorICAgIH07CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAgICB2
aXJ0dWFsIG9wZXJhdG9yIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4oKSBj
b25zdCA9IDA7CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIFdlYkFuaW1hdGlvbkN1cnZlKCkg
eyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYkFuaW1hdGlv
bkN1cnZlX2gKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9X
ZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGlj
L1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NWE3ZjI0MzhjZmFkMmYyYjdj
YjYxZTcxZjkzNzlhMTg3Njc5YzZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3Jt
L2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmgKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlX2gKKyNkZWZp
bmUgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZV9oCisKKyNpbmNsdWRlICJXZWJBbmltYXRpb25DdXJ2
ZS5oIgorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2ViRmxvYXRLZXlmcmFt
ZS5oIgorI2luY2x1ZGUgIldlYlByaXZhdGVPd25QdHIuaCIKKworI2lmIFdFQktJVF9JTVBMRU1F
TlRBVElPTgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworY2xhc3MgQ0NBbmltYXRpb25DdXJ2ZTsKK2NsYXNzIENDS2V5ZnJhbWVkRmxvYXRB
bmltYXRpb25DdXJ2ZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKKy8vIEEga2V5ZnJhbWVk
IGZsb2F0IGFuaW1hdGlvbiBjdXJ2ZS4KK2NsYXNzIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgOiBw
dWJsaWMgV2ViQW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIFdlYkZsb2F0QW5pbWF0aW9u
Q3VydmUoKSB7IGluaXRpYWxpemUoKTsgfQorICAgIHZpcnR1YWwgfldlYkZsb2F0QW5pbWF0aW9u
Q3VydmUoKSB7IGRlc3Ryb3koKTsgfQorCisgICAgLy8gQWRkcyB0aGUga2V5ZnJhbWUgd2l0aCB0
aGUgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gKGVhc2UpLgorICAgIFdFQktJVF9FWFBPUlQgdm9p
ZCBhZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFtZSYpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBh
ZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFtZSYsIFRpbWluZ0Z1bmN0aW9uVHlwZSk7CisgICAgLy8g
QWRkcyB0aGUga2V5ZnJhbWUgd2l0aCBhIGN1c3RvbSwgYmV6aWVyIHRpbWluZyBmdW5jdGlvbi4g
Tm90ZSwgaXQgaXMKKyAgICAvLyBhc3N1bWVkIHRoYXQgeDAgPSB5MCA9IDAsIGFuZCB4MyA9IHkz
ID0gMS4KKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgYWRkKGNvbnN0IFdlYkZsb2F0S2V5ZnJhbWUm
LCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBkb3VibGUgeTIpOworCisgICAgV0VC
S0lUX0VYUE9SVCBmbG9hdCBnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3Q7CisKKyNpZiBXRUJL
SVRfSU1QTEVNRU5UQVRJT04KKyAgICB2aXJ0dWFsIG9wZXJhdG9yIFBhc3NPd25QdHI8V2ViQ29y
ZTo6Q0NBbmltYXRpb25DdXJ2ZT4oKSBjb25zdDsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIFdF
QktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKCk7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGRl
c3Ryb3koKTsKKworICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6Q0NLZXlmcmFtZWRGbG9h
dEFuaW1hdGlvbkN1cnZlPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
KworI2VuZGlmIC8vIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEtleWZyYW1lLmggYi9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0S2V5ZnJhbWUuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMjc2
NDE4ZmY4ZjAxYTI2NmMxZDc5MmNjZjNmMGIzYjJiN2FkOWM2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJGbG9hdEtleWZyYW1lLmgKQEAgLTAs
MCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJGbG9hdEtleWZyYW1lX2gKKyNk
ZWZpbmUgV2ViRmxvYXRLZXlmcmFtZV9oCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3Qg
V2ViRmxvYXRLZXlmcmFtZSB7CisgICAgV2ViRmxvYXRLZXlmcmFtZShkb3VibGUgdGltZSwgZmxv
YXQgdmFsdWUpCisgICAgICAgIDogdGltZSh0aW1lKQorICAgICAgICAsIHZhbHVlKHZhbHVlKQor
ICAgIHsKKyAgICB9CisKKyAgICBkb3VibGUgdGltZTsKKyAgICBmbG9hdCB2YWx1ZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViRmxvYXRLZXlmcmFtZV9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTljYjY3MDU1ZDc2ZTc3Mzk0MDNiODdm
MDI1YWNkYmQ4MTI4YzczOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJv
bWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuaApAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlX2gKKyNk
ZWZpbmUgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVfaAorCisjaW5jbHVkZSAiV2ViQW5pbWF0
aW9uQ3VydmUuaCIKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYlByaXZh
dGVPd25QdHIuaCIKKyNpbmNsdWRlICJXZWJUcmFuc2Zvcm1LZXlmcmFtZS5oIgorI2luY2x1ZGUg
IldlYlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04K
KyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
K2NsYXNzIENDQW5pbWF0aW9uQ3VydmU7CitjbGFzcyBDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1h
dGlvbkN1cnZlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gQSBrZXlmcmFtZWQgdHJh
bnNmb3JtIGFuaW1hdGlvbiBjdXJ2ZS4KK2NsYXNzIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZl
IDogcHVibGljIFdlYkFuaW1hdGlvbkN1cnZlIHsKK3B1YmxpYzoKKyAgICBXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSgpIHsgaW5pdGlhbGl6ZSgpOyB9CisgICAgdmlydHVhbCB+V2ViVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUoKSB7IGRlc3Ryb3koKTsgfQorCisgICAgLy8gQWRkcyB0aGUga2V5
ZnJhbWUgd2l0aCB0aGUgZGVmYXVsdCB0aW1pbmcgZnVuY3Rpb24gKGVhc2UpLgorICAgIFdFQktJ
VF9FWFBPUlQgdm9pZCBhZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmKTsKKyAgICBXRUJL
SVRfRVhQT1JUIHZvaWQgYWRkKGNvbnN0IFdlYlRyYW5zZm9ybUtleWZyYW1lJiwgVGltaW5nRnVu
Y3Rpb25UeXBlKTsKKyAgICAvLyBBZGRzIHRoZSBrZXlmcmFtZSB3aXRoIGEgY3VzdG9tLCBiZXpp
ZXIgdGltaW5nIGZ1bmN0aW9uLiBOb3RlLCBpdCBpcworICAgIC8vIGFzc3VtZWQgdGhhdCB4MCA9
IHkwID0gMCwgYW5kIHgzID0geTMgPSAxLgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBhZGQoY29u
c3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgy
LCBkb3VibGUgeTIpOworCisgICAgV0VCS0lUX0VYUE9SVCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eCBnZXRWYWx1ZShkb3VibGUgdGltZSkgY29uc3Q7CisKKyNpZiBXRUJLSVRfSU1QTEVNRU5UQVRJ
T04KKyAgICB2aXJ0dWFsIG9wZXJhdG9yIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25D
dXJ2ZT4oKSBjb25zdDsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIGluaXRpYWxpemUoKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgZGVzdHJveSgpOworCisg
ICAgV2ViUHJpdmF0ZU93blB0cjxXZWJDb3JlOjpDQ0tleWZyYW1lZFRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2VuZGlm
IC8vIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9QbGF0
Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtS2V5ZnJhbWUuaCBiL1NvdXJjZS9QbGF0
Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtS2V5ZnJhbWUuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5j
OTllZjU1ODdiYTNkM2Y1MjNiMGJmZjhmNzNhMTkzM2YwY2FiYWU0Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5o
CkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViVHJhbnNmb3JtS2V5
ZnJhbWVfaAorI2RlZmluZSBXZWJUcmFuc2Zvcm1LZXlmcmFtZV9oCisKKyNpbmNsdWRlICJXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgV2Vi
VHJhbnNmb3JtS2V5ZnJhbWUgeworICAgIFdlYlRyYW5zZm9ybUtleWZyYW1lKGRvdWJsZSB0aW1l
LCBjb25zdCBXZWJUcmFuc2Zvcm1PcGVyYXRpb25zJiB2YWx1ZSkKKyAgICAgICAgOiB0aW1lKHRp
bWUpCisgICAgICAgICwgdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIGRvdWJsZSB0
aW1lOworICAgIFdlYlRyYW5zZm9ybU9wZXJhdGlvbnMgdmFsdWU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKKworI2VuZGlmIC8vIFdlYlRyYW5zZm9ybUtleWZyYW1lX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cAppbmRleCA3OGU0MjhiMjI4NWQzNjNlNTQ3OGRmN2ZhMjM4ZjM2ZjNl
YmVmOTA3Li4yZmVlY2M3Mzg5ZDNjNTgxZDRmNDNmYjk0NDYwMmUzYjA3ZDUzMjUzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC00NzcsOCArNDc3LDExIEBACiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJUZXh0Q2hlY2tpbmdDb21wbGV0aW9uSW1wbC5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViVGV4dENoZWNraW5nUmVzdWx0LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3Ny
Yy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJB
bmltYXRpb24uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkFuaW1hdGlvbkNvbnRyb2xs
ZXJJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJBbmltYXRpb25Db250cm9sbGVy
SW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmNw
cCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJBbmltYXRpb25DdXJ2ZUNvbW1vbi5oJywKICAg
ICAgICAgICAgICAgICAnc3JjL1dlYkFycmF5QnVmZmVyLmNwcCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJBcnJheUJ1ZmZlclZpZXcuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkJp
bmRpbmdzLmNwcCcsCkBAIC01MjcsNiArNTMwLDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dl
YkZpbGVDaG9vc2VyQ29tcGxldGlvbkltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJG
aWxlU3lzdGVtQ2FsbGJhY2tzSW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViRmls
ZVN5c3RlbUNhbGxiYWNrc0ltcGwuaCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJGbG9hdEFu
aW1hdGlvbkN1cnZlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGb250Q2FjaGUuY3Bw
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnREZXNjcmlwdGlvbi5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViRm9udEltcGwuY3BwJywKQEAgLTY1MSw2ICs2NTUsNyBAQAogICAg
ICAgICAgICAgICAgICdzcmMvV2ViU3Vycm91bmRpbmdUZXh0LmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJUZXh0SW5wdXRJbmZvLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJU
ZXh0UnVuLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9XZWJUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViVVJMTG9hZFRpbWluZy5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvV2ViU2NvcGVkVXNlckdlc3R1cmUuY3BwJywKICAgICAgICAg
ICAgICAgICAnc3JjL1dlYlRleHRGaWVsZERlY29yYXRvckNsaWVudC5jcHAnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggOGJmY2U5Y2Y0M2UyYjNlYWVmMmM5ZTU0Y2M5ZDMwNThh
ZWVkYTNlZi4uZTUxNWE1ZWQxMWM5YTNiNzEwNTdjZmRmMzdkMWM4MDAzNGIwNGRhMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC0xNDgsNyArMTQ4LDkgQEAKICAgICAgICAgICAg
ICd0ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1Ry
ZWVUZXN0SGVscGVycy5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RyZWVUZXN0SGVscGVycy5o
JywKKyAgICAgICAgICAgICd0ZXN0cy9XZWJBbmltYXRpb25UZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvV2ViQ29tcG9zaXRvcklucHV0SGFuZGxlckltcGxUZXN0LmNwcCcsCisgICAgICAg
ICAgICAndGVzdHMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwJywKICAgICAgICAgICAg
ICd0ZXN0cy9XZWJGcmFtZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9XZWJMYXllclRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9XZWJMYXllclRyZWVWaWV3VGVzdC5jcHAnLApA
QCAtMTU3LDYgKzE1OSw3IEBACiAgICAgICAgICAgICAndGVzdHMvV2ViUGFnZVNlcmlhbGl6ZXJU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvV2ViU29ja2V0RGVmbGF0ZXJUZXN0LmNwcCcs
CiAgICAgICAgICAgICAndGVzdHMvV2ViU29ja2V0RXh0ZW5zaW9uRGlzcGF0Y2hlclRlc3QuY3Bw
JywKKyAgICAgICAgICAgICd0ZXN0cy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeFRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25zVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1dlYlVSTFJlcXVlc3RUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZGRkZmMyNDEzNjk2ODVm
MjhkZjkyOWJhMDBlNDU1NjQzODU5NTY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8cHVibGljL1dlYkFuaW1h
dGlvbi5oPgorCisjaW5jbHVkZSAiQW5pbWF0aW9uSWRWZW5kb3IuaCIKKyNpbmNsdWRlICJjYy9D
Q0FjdGl2ZUFuaW1hdGlvbi5oIgorI2luY2x1ZGUgImNjL0NDQW5pbWF0aW9uQ3VydmUuaCIKKyNp
bmNsdWRlIDxwdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwordXNpbmcgV2ViQ29yZTo6QW5pbWF0
aW9uSWRWZW5kb3I7Cit1c2luZyBXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbjsKKworbmFtZXNw
YWNlIFdlYktpdCB7CisKK2ludCBXZWJBbmltYXRpb246Oml0ZXJhdGlvbnMoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3ByaXZhdGUtPml0ZXJhdGlvbnMoKTsKK30KKwordm9pZCBXZWJBbmltYXRp
b246OnNldEl0ZXJhdGlvbnMoaW50IG4pCit7CisgICAgbV9wcml2YXRlLT5zZXRJdGVyYXRpb25z
KG4pOworfQorCitkb3VibGUgV2ViQW5pbWF0aW9uOjpzdGFydFRpbWUoKSBjb25zdAoreworICAg
IHJldHVybiBtX3ByaXZhdGUtPnN0YXJ0VGltZSgpOworfQorCit2b2lkIFdlYkFuaW1hdGlvbjo6
c2V0U3RhcnRUaW1lKGRvdWJsZSBtb25vdG9uaWNUaW1lKQoreworICAgIG1fcHJpdmF0ZS0+c2V0
U3RhcnRUaW1lKG1vbm90b25pY1RpbWUpOworfQorCitkb3VibGUgV2ViQW5pbWF0aW9uOjp0aW1l
T2Zmc2V0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT50aW1lT2Zmc2V0KCk7Cit9
CisKK3ZvaWQgV2ViQW5pbWF0aW9uOjpzZXRUaW1lT2Zmc2V0KGRvdWJsZSBtb25vdG9uaWNUaW1l
KQoreworICAgIG1fcHJpdmF0ZS0+c2V0VGltZU9mZnNldChtb25vdG9uaWNUaW1lKTsKK30KKwor
Ym9vbCBXZWJBbmltYXRpb246OmFsdGVybmF0ZXNEaXJlY3Rpb24oKSBjb25zdAoreworICAgIHJl
dHVybiBtX3ByaXZhdGUtPmFsdGVybmF0ZXNEaXJlY3Rpb24oKTsKK30KKwordm9pZCBXZWJBbmlt
YXRpb246OnNldEFsdGVybmF0ZXNEaXJlY3Rpb24oYm9vbCBhbHRlcm5hdGVzKQoreworICAgIG1f
cHJpdmF0ZS0+c2V0QWx0ZXJuYXRlc0RpcmVjdGlvbihhbHRlcm5hdGVzKTsKK30KKworV2ViQW5p
bWF0aW9uOjpvcGVyYXRvciBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uPigp
IGNvbnN0Cit7CisgICAgT3duUHRyPFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uPiB0b1JldHVy
bihtX3ByaXZhdGUtPmNsb25lRm9ySW1wbFRocmVhZCgpKTsKKyAgICB0b1JldHVybi0+c2V0TmVl
ZHNTeW5jaHJvbml6ZWRTdGFydFRpbWUodHJ1ZSk7CisgICAgcmV0dXJuIHRvUmV0dXJuLnJlbGVh
c2UoKTsKK30KKwordm9pZCBXZWJBbmltYXRpb246OmluaXRpYWxpemUoY29uc3QgV2ViQW5pbWF0
aW9uQ3VydmUmIGN1cnZlLCBUYXJnZXRQcm9wZXJ0eSB0YXJnZXRQcm9wZXJ0eSkKK3sKKyAgICBt
X3ByaXZhdGUucmVzZXQoQ0NBY3RpdmVBbmltYXRpb246OmNyZWF0ZShjdXJ2ZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbmltYXRpb25JZFZlbmRvcjo6
Z2V0TmV4dEFuaW1hdGlvbklkKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQW5pbWF0aW9uSWRWZW5kb3I6OmdldE5leHRHcm91cElkKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6Q0NBY3RpdmVBbmltYXRpb246OlRhcmdldFByb3BlcnR5Pih0YXJnZXRQcm9wZXJ0eSkpLmxl
YWtQdHIoKSk7Cit9CisKK3ZvaWQgV2ViQW5pbWF0aW9uOjpkZXN0cm95KCkKK3sKKyAgICBtX3By
aXZhdGUucmVzZXQoMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uQ3VydmVDb21tb24uY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViQW5pbWF0aW9uQ3VydmVDb21tb24uY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmI1Yjk4YjBhMzAwMGVkYzM1NzE2YTdhNzA0OGJmODJmZGRmOTNiZDgKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb25DdXJ2
ZUNvbW1vbi5jcHAKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaW5jbHVkZSAiV2ViQW5pbWF0aW9uQ3VydmVDb21tb24uaCIKKworI2luY2x1
ZGUgImNjL0NDVGltaW5nRnVuY3Rpb24uaCIKKworI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKworUGFzc093
blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiBjcmVhdGVUaW1pbmdGdW5jdGlvbihXZWJB
bmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgY2FzZSBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlRWFz
ZToKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUo
KTsKKyAgICBjYXNlIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlSW46
CisgICAgICAgIHJldHVybiBXZWJDb3JlOjpDQ0Vhc2VJblRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUo
KTsKKyAgICBjYXNlIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlT3V0
OgorICAgICAgICByZXR1cm4gV2ViQ29yZTo6Q0NFYXNlT3V0VGltaW5nRnVuY3Rpb246OmNyZWF0
ZSgpOworICAgIGNhc2UgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VJ
bk91dDoKKyAgICAgICAgcmV0dXJuIFdlYkNvcmU6OkNDRWFzZUluT3V0VGltaW5nRnVuY3Rpb246
OmNyZWF0ZSgpOworICAgIGNhc2UgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlw
ZUxpbmVhcjoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBudWxs
cHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb25DdXJ2ZUNvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2MmI2
ZWI4ZDEzMTYzNTFkZDdmMmM0YjhhNDU4YzI2NDllNGM1ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb25DdXJ2ZUNvbW1vbi5oCkBAIC0w
LDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViQW5pbWF0aW9uQ3VydmVDb21t
b25faAorI2RlZmluZSBXZWJBbmltYXRpb25DdXJ2ZUNvbW1vbl9oCisKKyNpbmNsdWRlIDxwdWJs
aWMvV2ViQW5pbWF0aW9uQ3VydmUuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CitjbGFzcyBDQ1RpbWluZ0Z1bmN0aW9uOworfQorCituYW1lc3BhY2Ug
V2ViS2l0IHsKK1Bhc3NPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gY3JlYXRlVGlt
aW5nRnVuY3Rpb24oV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZSk7Cit9CisK
KyNlbmRpZiAvLyBXZWJBbmltYXRpb25DdXJ2ZUNvbW1vbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmQ4Y2M5YmI5OGRmZGM0NzQ2YmIwZDJhZmM4ZDQ1MDFkODZmMTE0MjkKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmNw
cApAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlIDxwdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oPgorCisjaW5jbHVkZSAi
V2ViQW5pbWF0aW9uQ3VydmVDb21tb24uaCIKKyNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1h
dGlvbkN1cnZlLmgiCisjaW5jbHVkZSAiY2MvQ0NUaW1pbmdGdW5jdGlvbi5oIgorI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2Ug
V2ViS2l0IHsKKwordm9pZCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjphZGQoY29uc3QgV2ViRmxv
YXRLZXlmcmFtZSYga2V5ZnJhbWUpCit7CisgICAgYWRkKGtleWZyYW1lLCBUaW1pbmdGdW5jdGlv
blR5cGVFYXNlKTsKK30KKwordm9pZCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjphZGQoY29uc3Qg
V2ViRmxvYXRLZXlmcmFtZSYga2V5ZnJhbWUsIFRpbWluZ0Z1bmN0aW9uVHlwZSB0eXBlKQorewor
ICAgIG1fcHJpdmF0ZS0+YWRkS2V5ZnJhbWUoV2ViQ29yZTo6Q0NGbG9hdEtleWZyYW1lOjpjcmVh
dGUoa2V5ZnJhbWUudGltZSwga2V5ZnJhbWUudmFsdWUsIGNyZWF0ZVRpbWluZ0Z1bmN0aW9uKHR5
cGUpKSk7Cit9CisKK3ZvaWQgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6YWRkKGNvbnN0IFdlYkZs
b2F0S2V5ZnJhbWUmIGtleWZyYW1lLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBk
b3VibGUgeTIpCit7CisgICAgbV9wcml2YXRlLT5hZGRLZXlmcmFtZShXZWJDb3JlOjpDQ0Zsb2F0
S2V5ZnJhbWU6OmNyZWF0ZShrZXlmcmFtZS50aW1lLCBrZXlmcmFtZS52YWx1ZSwgV2ViQ29yZTo6
Q0NDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoeDEsIHkxLCB4MiwgeTIpKSk7Cit9
CisKK2Zsb2F0IFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0aW1lKSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmdldFZhbHVlKHRpbWUpOworfQorCitXZWJG
bG9hdEFuaW1hdGlvbkN1cnZlOjpvcGVyYXRvciBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0
aW9uQ3VydmU+KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5jbG9uZSgpOworfQor
Cit2b2lkIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmluaXRpYWxpemUoKQoreworICAgIG1fcHJp
dmF0ZS5yZXNldChXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9uQ3VydmU6OmNyZWF0
ZSgpLmxlYWtQdHIoKSk7Cit9CisKK3ZvaWQgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6ZGVzdHJv
eSgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJL
aXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTk1ZmEzOWVkYmU3YTg2MmUzYzBlMWY4
ODI0YWQxNjJkYmFjMTE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuY3BwCkBAIC0wLDAgKzEsNzIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5oPgorCisjaW5jbHVkZSAiV2ViQW5pbWF0aW9uQ3VydmVD
b21tb24uaCIKKyNpbmNsdWRlICJjYy9DQ0tleWZyYW1lZEFuaW1hdGlvbkN1cnZlLmgiCisjaW5j
bHVkZSAiY2MvQ0NUaW1pbmdGdW5jdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBX
ZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6YWRkKGNvbnN0IFdlYlRyYW5zZm9ybUtleWZyYW1l
JiBrZXlmcmFtZSkKK3sKKyAgICBhZGQoa2V5ZnJhbWUsIFRpbWluZ0Z1bmN0aW9uVHlwZUVhc2Up
OworfQorCit2b2lkIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjphZGQoY29uc3QgV2ViVHJh
bnNmb3JtS2V5ZnJhbWUmIGtleWZyYW1lLCBUaW1pbmdGdW5jdGlvblR5cGUgdHlwZSkKK3sKKyAg
ICBtX3ByaXZhdGUtPmFkZEtleWZyYW1lKFdlYkNvcmU6OkNDVHJhbnNmb3JtS2V5ZnJhbWU6OmNy
ZWF0ZShrZXlmcmFtZS50aW1lLCBrZXlmcmFtZS52YWx1ZSwgY3JlYXRlVGltaW5nRnVuY3Rpb24o
dHlwZSkpKTsKK30KKwordm9pZCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6YWRkKGNvbnN0
IFdlYlRyYW5zZm9ybUtleWZyYW1lJiBrZXlmcmFtZSwgZG91YmxlIHgxLCBkb3VibGUgeTEsIGRv
dWJsZSB4MiwgZG91YmxlIHkyKQoreworICAgIG1fcHJpdmF0ZS0+YWRkS2V5ZnJhbWUoV2ViQ29y
ZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZyYW1lLnZh
bHVlLCBXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSh4MSwgeTEs
IHgyLCB5MikpKTsKK30KKworV2ViVHJhbnNmb3JtYXRpb25NYXRyaXggV2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmU6OmdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdAoreworICAgIHJldHVybiBt
X3ByaXZhdGUtPmdldFZhbHVlKHRpbWUpOworfQorCitXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZTo6b3BlcmF0b3IgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y2xvbmUoKTsKK30KKwordm9pZCBXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZTo6aW5pdGlhbGl6ZSgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KFdl
YkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmNyZWF0ZSgpLmxlYWtQ
dHIoKSk7Cit9CisKK3ZvaWQgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmRlc3Ryb3koKQor
eworICAgIG1fcHJpdmF0ZS5yZXNldCgwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkFuaW1hdGlvblRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJBbmltYXRpb25UZXN0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hYzBmMmQ1ZmIzZDhlMGQ4NWM0NTZlNGM2ODI3YmFmYTRhOTJiMmE4Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJBbmltYXRpb25U
ZXN0LmNwcApAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQW5pbWF0aW9uLmg+CisKKyNpbmNsdWRlIDxndGVz
dC9ndGVzdC5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmg+Cisj
aW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSB7CisKK1RFU1QoV2ViQW5pbWF0aW9u
VGVzdCwgRGVmYXVsdFNldHRpbmdzKQoreworICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3Vy
dmU7CisgICAgV2ViQW5pbWF0aW9uIGFuaW1hdGlvbihjdXJ2ZSwgV2ViQW5pbWF0aW9uOjpXZWJB
bmltYXRpb25PcGFjaXR5KTsKKworICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0cyBhcmUg
Y29ycmVjdC4KKyAgICBFWFBFQ1RfRVEoMSwgYW5pbWF0aW9uLml0ZXJhdGlvbnMoKSk7CisgICAg
RVhQRUNUX0VRKDAsIGFuaW1hdGlvbi5zdGFydFRpbWUoKSk7CisgICAgRVhQRUNUX0VRKDAsIGFu
aW1hdGlvbi50aW1lT2Zmc2V0KCkpOworICAgIEVYUEVDVF9GQUxTRShhbmltYXRpb24uYWx0ZXJu
YXRlc0RpcmVjdGlvbigpKTsKK30KKworVEVTVChXZWJBbmltYXRpb25UZXN0LCBNb2RpZmllZFNl
dHRpbmdzKQoreworICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgV2ViQW5p
bWF0aW9uIGFuaW1hdGlvbihjdXJ2ZSwgV2ViQW5pbWF0aW9uOjpXZWJBbmltYXRpb25PcGFjaXR5
KTsKKyAgICBhbmltYXRpb24uc2V0SXRlcmF0aW9ucygyKTsKKyAgICBhbmltYXRpb24uc2V0U3Rh
cnRUaW1lKDIpOworICAgIGFuaW1hdGlvbi5zZXRUaW1lT2Zmc2V0KDIpOworICAgIGFuaW1hdGlv
bi5zZXRBbHRlcm5hdGVzRGlyZWN0aW9uKHRydWUpOworCisgICAgRVhQRUNUX0VRKDIsIGFuaW1h
dGlvbi5pdGVyYXRpb25zKCkpOworICAgIEVYUEVDVF9FUSgyLCBhbmltYXRpb24uc3RhcnRUaW1l
KCkpOworICAgIEVYUEVDVF9FUSgyLCBhbmltYXRpb24udGltZU9mZnNldCgpKTsKKyAgICBFWFBF
Q1RfVFJVRShhbmltYXRpb24uYWx0ZXJuYXRlc0RpcmVjdGlvbigpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJG
bG9hdEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmRmZTRlYzdkOTI5NTI5OGNh
NjQ2YjZlYTY5MjQ0YjU0MGI1NWE0NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QuY3BwCkBAIC0wLDAgKzEs
MjM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxw
dWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oPgorCisjaW5jbHVkZSAiY2MvQ0NUaW1pbmdG
dW5jdGlvbi5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDx3dGYvT3du
UHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworbmFtZXNwYWNlIHsKKworLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlvbiB3
aXRoIG9uZSBrZXlmcmFtZSB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViRmxvYXRBbmltYXRp
b25DdXJ2ZVRlc3QsIE9uZUZsb2F0S2V5ZnJhbWUpCit7CisgICAgV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZSBjdXJ2ZTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAyKSwgV2ViQW5p
bWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDIsIGN1cnZlLmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZl
LmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMC41
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDEpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMikpOworfQorCisvLyBUZXN0cyB0aGF0IGEg
ZmxvYXQgYW5pbWF0aW9uIHdpdGggdHdvIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KK1RF
U1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIFR3b0Zsb2F0S2V5ZnJhbWUpCit7CisgICAg
V2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlm
cmFtZSgwLCAyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7
CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgNCksIFdlYkFuaW1hdGlvbkN1cnZl
OjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2
ZS5nZXRWYWx1ZSgtMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgw
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLmdldFZhbHVlKDAuNSkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1ZSgxKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDQsIGN1cnZlLmdldFZhbHVlKDIpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1h
dGlvbiB3aXRoIHRocmVlIGtleWZyYW1lcyB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViRmxv
YXRBbmltYXRpb25DdXJ2ZVRlc3QsIFRocmVlRmxvYXRLZXlmcmFtZSkKK3sKKyAgICBXZWJGbG9h
dEFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAs
IDIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBj
dXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCA0KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWlu
Z0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMiwg
OCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgtMSkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgyLCBjdXJ2ZS5nZXRWYWx1ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLmdl
dFZhbHVlKDAuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1ZSgxKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZhbHVlKDEuNSkpOworICAgIEVYUEVD
VF9GTE9BVF9FUSg4LCBjdXJ2ZS5nZXRWYWx1ZSgyKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgs
IGN1cnZlLmdldFZhbHVlKDMpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhIGZsb2F0IGFuaW1hdGlv
biB3aXRoIG11bHRpcGxlIGtleXMgYXQgYSBnaXZlbiB0aW1lIHdvcmtzIHNhbmVseS4KK1RFU1Qo
V2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIFJlcGVhdGVkRmxvYXRLZXlUaW1lcykKK3sKKyAg
ICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtl
eWZyYW1lKDAsIDQpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFy
KTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCA0KSwgV2ViQW5pbWF0aW9uQ3Vy
dmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5
ZnJhbWUoMSwgNiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIp
OworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDIsIDYpLCBXZWJBbmltYXRpb25DdXJ2
ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBj
dXJ2ZS5nZXRWYWx1ZSgtMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1
ZSgwKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDAuNSkpOworCisg
ICAgLy8gVGhlcmUgaXMgYSBkaXNjb250aW51aXR5IGF0IDEuIEFueSB2YWx1ZSBiZXR3ZWVuIDQg
YW5kIDYgaXMgdmFsaWQuCisgICAgZmxvYXQgdmFsdWUgPSBjdXJ2ZS5nZXRWYWx1ZSgxKTsKKyAg
ICBFWFBFQ1RfVFJVRSh2YWx1ZSA+PSA0ICYmIHZhbHVlIDw9IDYpOworCisgICAgRVhQRUNUX0ZM
T0FUX0VRKDYsIGN1cnZlLmdldFZhbHVlKDEuNSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBj
dXJ2ZS5nZXRWYWx1ZSgyKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZhbHVl
KDMpKTsKK30KKworLy8gVGVzdHMgdGhhdCB0aGUga2V5ZnJhbWVzIG1heSBiZSBhZGRlZCBvdXQg
b2Ygb3JkZXIuCitURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBVbnNvcnRlZEtleWZy
YW1lcykKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIGN1cnZlLmFk
ZChXZWJGbG9hdEtleWZyYW1lKDIsIDgpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rp
b25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAyKSwgV2Vi
QW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUuYWRk
KFdlYkZsb2F0S2V5ZnJhbWUoMSwgNCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlv
blR5cGVMaW5lYXIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKC0x
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDApKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMywgY3VydmUuZ2V0VmFsdWUoMC41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDQsIGN1cnZlLmdldFZhbHVlKDEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0
VmFsdWUoMS41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLmdldFZhbHVlKDIpKTsK
KyAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUuZ2V0VmFsdWUoMykpOworfQorCisvLyBUZXN0
cyB0aGF0IGEgY3ViaWMgYmV6aWVyIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4K
K1RFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rp
b24pCit7CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBjdXJ2ZS5hZGQo
V2ViRmxvYXRLZXlmcmFtZSgwLCAwKSwgMC4yNSwgMCwgMC43NSwgMSk7CisgICAgY3VydmUuYWRk
KFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlv
blR5cGVMaW5lYXIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGN1cnZlLmdldFZhbHVlKDAp
KTsKKyAgICBFWFBFQ1RfTFQoMCwgY3VydmUuZ2V0VmFsdWUoMC4yNSkpOworICAgIEVYUEVDVF9H
VCgwLjI1LCBjdXJ2ZS5nZXRWYWx1ZSgwLjI1KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAuNSwg
Y3VydmUuZ2V0VmFsdWUoMC41KSk7CisgICAgRVhQRUNUX0xUKDAuNzUsIGN1cnZlLmdldFZhbHVl
KDAuNzUpKTsKKyAgICBFWFBFQ1RfR1QoMSwgY3VydmUuZ2V0VmFsdWUoMC43NSkpOworICAgIEVY
UEVDVF9GTE9BVF9FUSgxLCBjdXJ2ZS5nZXRWYWx1ZSgxKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQg
YW4gZWFzZSB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYkZsb2F0
QW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNlVGltaW5nRnVuY3Rpb24pCit7CisgICAgV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAw
KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2UpOworICAgIGN1cnZl
LmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVu
Y3Rpb25UeXBlTGluZWFyKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9u
PiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkp
OworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3Vi
bGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rp
b24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKSk7CisgICAgfQorfQorCisv
LyBUZXN0cyB1c2luZyBhIGxpbmVhciB0aW1pbmcgZnVuY3Rpb24uCitURVNUKFdlYkZsb2F0QW5p
bWF0aW9uQ3VydmVUZXN0LCBMaW5lYXJUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBXZWJGbG9hdEFu
aW1hdGlvbkN1cnZlIGN1cnZlOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDAp
LCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2
ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1
bmN0aW9uVHlwZUxpbmVhcik7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsK
KyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZM
T0FUX0VRKHRpbWUsIGN1cnZlLmdldFZhbHVlKHRpbWUpKTsKKyAgICB9Cit9CisKKy8vIFRlc3Rz
IHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCitURVNU
KFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNlSW5UaW1pbmdGdW5jdGlvbikKK3sKKyAg
ICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtl
eWZyYW1lKDAsIDApLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlRWFzZUlu
KTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCAxKSwgV2ViQW5pbWF0aW9uQ3Vy
dmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NU
aW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNlSW5UaW1pbmdGdW5j
dGlvbjo6Y3JlYXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAg
ICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRf
RVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKSk7
CisgICAgfQorfQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0aW9uIHdv
cmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZU91
dFRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7Cisg
ICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIFdlYkFuaW1hdGlvbkN1cnZlOjpU
aW1pbmdGdW5jdGlvblR5cGVFYXNlT3V0KTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFt
ZSgxLCAxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisK
KyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2Vi
Q29yZTo6Q0NFYXNlT3V0VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4y
NTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1l
KSwgY3VydmUuZ2V0VmFsdWUodGltZSkpOworICAgIH0KK30KKworLy8gVGVzdHMgdGhhdCBhbiBl
YXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VJbk91dFRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYkZs
b2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUo
MCwgMCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlSW5PdXQpOwor
ICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6
VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWlu
Z0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VJbk91dFRpbWluZ0Z1bmN0
aW9uOjpjcmVhdGUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAg
ICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9F
USh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpKTsK
KyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29y
a3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBDdXN0b21C
ZXppZXJUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZl
OworICAgIGRvdWJsZSB4MSA9IDAuMzsKKyAgICBkb3VibGUgeTEgPSAwLjI7CisgICAgZG91Ymxl
IHgyID0gMC44OworICAgIGRvdWJsZSB5MiA9IDAuNzsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRL
ZXlmcmFtZSgwLCAwKSwgeDEsIHkxLCB4MiwgeTIpOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtl
eWZyYW1lKDEsIDEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFy
KTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlv
bihXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSh4MSwgeTEsIHgy
LCB5MikpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25z
dCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5n
RnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKSk7CisgICAgfQor
fQorCisvLyBUZXN0cyB0aGF0IHRoZSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiBpcyBpbmRlZWQg
ZWFzZS4KK1RFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIERlZmF1bHRUaW1pbmdGdW5j
dGlvbikKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIGN1cnZlLmFk
ZChXZWJGbG9hdEtleWZyYW1lKDAsIDApKTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFt
ZSgxLCAxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisK
KyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2Vi
Q29yZTo6Q0NFYXNlVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICBmb3IgKGludCBpID0g
MDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsK
KyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwg
Y3VydmUuZ2V0VmFsdWUodGltZSkpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmVUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViVHJhbnNmb3Jt
QW5pbWF0aW9uQ3VydmVUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mMThmODdiZTIwM2IyMGI5OWM1Mjc1
MmUxNjI4ZDQxZGEzY2I3NDQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QuY3BwCkBAIC0wLDAgKzEs
Mjk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxw
dWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuaD4KKworI2luY2x1ZGUgImNjL0NDVGlt
aW5nRnVuY3Rpb24uaCIKKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8cHVi
bGljL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXguaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1Bhc3NPd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIHsK
KworLy8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCBvbmUga2V5ZnJhbWUg
d29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwg
T25lVHJhbnNmb3JtS2V5ZnJhbWUpCit7CisgICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUg
Y3VydmU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Cisg
ICAgb3BlcmF0aW9ucy5hcHBlbmRUcmFuc2xhdGUoMiwgMCwgMCk7CisgICAgY3VydmUuYWRkKFdl
YlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGlt
aW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5n
ZXRWYWx1ZSgtMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1
ZSgwKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDAuNSku
bTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgxKS5tNDEoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDIpLm00MSgpKTsKK30KKwor
Ly8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCB0d28ga2V5ZnJhbWVzIHdv
cmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIFR3
b1RyYW5zZm9ybUtleWZyYW1lKQoreworICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1
cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAg
ICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMiwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRy
YW5zbGF0ZSg0LCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwg
b3BlcmF0aW9uczEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFy
KTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBX
ZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBFWFBFQ1Rf
RkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoLTEpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMiwgY3VydmUuZ2V0VmFsdWUoMCkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBj
dXJ2ZS5nZXRWYWx1ZSgwLjUpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUu
Z2V0VmFsdWUoMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1
ZSgyKS5tNDEoKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSB0cmFuc2Zvcm0gYW5pbWF0aW9uIHdp
dGggdGhyZWUga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZVRlc3QsIFRocmVlVHJhbnNmb3JtS2V5ZnJhbWUpCit7CisgICAgV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgyLCAw
LCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7Cisg
ICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQsIDAsIDApOworICAgIFdlYktpdDo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMzsKKyAgICBvcGVyYXRpb25zMy5hcHBlbmRU
cmFuc2xhdGUoOCwgMCwgMCk7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAs
IG9wZXJhdGlvbnMxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVh
cik7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwg
V2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUu
YWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDIsIG9wZXJhdGlvbnMzKSwgV2ViQW5pbWF0aW9uQ3Vy
dmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1
cnZlLmdldFZhbHVlKC0xKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdl
dFZhbHVlKDApLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUuZ2V0VmFsdWUo
MC41KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDEpLm00
MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMS41KS5tNDEoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLmdldFZhbHVlKDIpLm00MSgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUuZ2V0VmFsdWUoMykubTQxKCkpOworfQorCisvLyBUZXN0
cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG11bHRpcGxlIGtleXMgYXQgYSBnaXZl
biB0aW1lIHdvcmtzIHNhbmVseS4KK1RFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0
LCBSZXBlYXRlZFRyYW5zZm9ybUtleVRpbWVzKQoreworICAgIC8vIEEgc3RlcCBmdW5jdGlvbi4K
KyAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJh
bnNsYXRlKDQsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVy
YXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CisgICAg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOworICAgIG9wZXJhdGlv
bnMzLmFwcGVuZFRyYW5zbGF0ZSg2LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczQ7CisgICAgb3BlcmF0aW9uczQuYXBwZW5kVHJhbnNsYXRlKDYs
IDAsIDApOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25z
MSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1
cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlv
bkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFkZChXZWJUcmFu
c2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMyksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdG
dW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgy
LCBvcGVyYXRpb25zNCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5l
YXIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKC0xKS5tNDEoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDApLm00MSgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoMC41KS5tNDEoKSk7CisKKyAgICAvLyBU
aGVyZSBpcyBhIGRpc2NvbnRpbnVpdHkgYXQgMS4gQW55IHZhbHVlIGJldHdlZW4gNCBhbmQgNiBp
cyB2YWxpZC4KKyAgICBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCB2YWx1ZSA9IGN1cnZlLmdldFZh
bHVlKDEpOworICAgIEVYUEVDVF9UUlVFKHZhbHVlLm00MSgpID49IDQgJiYgdmFsdWUubTQxKCkg
PD0gNik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMS41KS5tNDEo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZhbHVlKDIpLm00MSgpKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMykubTQxKCkpOworfQorCisvLyBU
ZXN0cyB0aGF0IHRoZSBrZXlmcmFtZXMgbWF5IGJlIGFkZGVkIG91dCBvZiBvcmRlci4KK1RFU1Qo
V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBVbnNvcnRlZEtleWZyYW1lcykKK3sKKyAg
ICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNs
YXRlKDIsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRp
b25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CisgICAgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMzOworICAgIG9wZXJhdGlvbnMz
LmFwcGVuZFRyYW5zbGF0ZSg4LCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5
ZnJhbWUoMiwgb3BlcmF0aW9uczMpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25U
eXBlTGluZWFyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0
aW9uczEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAg
ICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJBbmlt
YXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIEVYUEVDVF9GTE9B
VF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgtMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgy
LCBjdXJ2ZS5nZXRWYWx1ZSgwKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZl
LmdldFZhbHVlKDAuNSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRW
YWx1ZSgxKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZhbHVlKDEu
NSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg4LCBjdXJ2ZS5nZXRWYWx1ZSgyKS5tNDEo
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLmdldFZhbHVlKDMpLm00MSgpKTsKK30K
KworLy8gVGVzdHMgdGhhdCBhIGN1YmljIGJlemllciB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMg
ZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2
ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAg
b3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJh
bnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFu
c2xhdGUoMSwgMCwgMCk7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9w
ZXJhdGlvbnMxKSwgMC4yNSwgMCwgMC43NSwgMSk7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9y
bUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0
aW9uVHlwZUxpbmVhcik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDAsIGN1cnZlLmdldFZhbHVlKDAp
Lm00MSgpKTsKKyAgICBFWFBFQ1RfTFQoMCwgY3VydmUuZ2V0VmFsdWUoMC4yNSkubTQxKCkpOwor
ICAgIEVYUEVDVF9HVCgwLjI1LCBjdXJ2ZS5nZXRWYWx1ZSgwLjI1KS5tNDEoKSk7CisgICAgRVhQ
RUNUX0ZMT0FUX0VRKDAuNSwgY3VydmUuZ2V0VmFsdWUoMC41KS5tNDEoKSk7CisgICAgRVhQRUNU
X0xUKDAuNzUsIGN1cnZlLmdldFZhbHVlKDAuNzUpLm00MSgpKTsKKyAgICBFWFBFQ1RfR1QoMSwg
Y3VydmUuZ2V0VmFsdWUoMC43NSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgxLCBjdXJ2
ZS5nZXRWYWx1ZSgxKS5tNDEoKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYW4gZWFzZSB0aW1pbmcg
ZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlVGVzdCwgRWFzZVRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlIGN1cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRp
b25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMy
LmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5
ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25U
eXBlRWFzZSk7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlv
bnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisKKyAg
ICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29y
ZTo6Q0NFYXNlVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4yNTsKKyAg
ICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3Vy
dmUuZ2V0VmFsdWUodGltZSkubTQxKCkpOworICAgIH0KK30KKworLy8gVGVzdHMgdXNpbmcgYSBs
aW5lYXIgdGltaW5nIGZ1bmN0aW9uLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRl
c3QsIExpbmVhclRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlIGN1cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFw
cGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJh
bWUoMCwgb3BlcmF0aW9uczEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBl
TGluZWFyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9u
czIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAg
IGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGlt
ZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltZSwgY3VydmUuZ2V0VmFs
dWUodGltZSkubTQxKCkpOworICAgIH0KK30KKworLy8gVGVzdHMgdGhhdCBhbiBlYXNlIGluIHRp
bWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmVUZXN0LCBFYXNlSW5UaW1pbmdGdW5jdGlvbikKK3sKKyAgICBXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMg
b3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOwor
ICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVy
YXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7CisgICAgY3VydmUuYWRkKFdlYlRyYW5z
Zm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1
bmN0aW9uVHlwZUVhc2VJbik7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEs
IG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVh
cik7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rp
b24oV2ViQ29yZTo6Q0NFYXNlSW5UaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGZvciAo
aW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkg
KiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVl
KHRpbWUpLCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CisgICAgfQorfQorCisvLyBUZXN0
cyB0aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVT
VChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VPdXRUaW1pbmdGdW5jdGlvbikK
K3sKKyAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBXZWJLaXQ6Oldl
YlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5k
VHJhbnNsYXRlKDAsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7Cisg
ICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5p
bWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VPdXQpOworICAgIGN1cnZlLmFkZChX
ZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpU
aW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5n
RnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFzZU91dFRpbWluZ0Z1bmN0aW9u
OjpjcmVhdGUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAg
IGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0
aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpLm00MSgp
KTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24g
d29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwg
RWFzZUluT3V0VGltaW5nRnVuY3Rpb24pCit7CisgICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUgY3VydmU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMx
OworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICBXZWJLaXQ6
OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBw
ZW5kVHJhbnNsYXRlKDEsIDAsIDApOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFt
ZSgwLCBvcGVyYXRpb25zMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVF
YXNlSW5PdXQpOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRp
b25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworCisg
ICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNv
cmU6OkNDRWFzZUluT3V0VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICBmb3IgKGludCBp
ID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUgPSBpICogMC4y
NTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRWYWx1ZSh0aW1l
KSwgY3VydmUuZ2V0VmFsdWUodGltZSkubTQxKCkpOworICAgIH0KK30KKworLy8gVGVzdHMgdGhh
dCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2Vi
VHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBDdXN0b21CZXppZXJUaW1pbmdGdW5jdGlvbikK
K3sKKyAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBkb3VibGUgeDEg
PSAwLjM7CisgICAgZG91YmxlIHkxID0gMC4yOworICAgIGRvdWJsZSB4MiA9IDAuODsKKyAgICBk
b3VibGUgeTIgPSAwLjc7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJh
dGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICBX
ZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9u
czIuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1L
ZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIHgxLCB5MSwgeDIsIHkyKTsKKyAgICBjdXJ2ZS5hZGQo
V2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6
VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWlu
Z0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0N1YmljQmV6aWVyVGltaW5nRnVu
Y3Rpb246OmNyZWF0ZSh4MSwgeTEsIHgyLCB5MikpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9
IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAg
ICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5n
ZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CisgICAgfQorfQorCisvLyBUZXN0cyB0aGF0IHRoZSBkZWZh
dWx0IHRpbWluZyBmdW5jdGlvbiBpcyBpbmRlZWQgZWFzZS4KK1RFU1QoV2ViVHJhbnNmb3JtQW5p
bWF0aW9uQ3VydmVUZXN0LCBEZWZhdWx0VGltaW5nRnVuY3Rpb24pCit7CisgICAgV2ViVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRp
b25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAw
KTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAg
b3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDEsIDAsIDApOworICAgIGN1cnZlLmFkZChXZWJU
cmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSkpOworICAgIGN1cnZlLmFkZChXZWJUcmFu
c2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdG
dW5jdGlvblR5cGVMaW5lYXIpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rp
b24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUo
KSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRv
dWJsZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5j
dGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpLm00MSgpKTsKKyAgICB9
Cit9CisKK30gLy8gbmFtZXNwYWNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150840</attachid>
            <date>2012-07-04 13:57:14 -0700</date>
            <delta_ts>2012-07-05 13:08:14 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-90303-20120704165713.patch</filename>
            <type>text/plain</type>
            <size>65790</size>
            <attacher>vollick</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxODY4CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCBhNTcxNzdmN2E2NDY2
NjhkYjVjYzZmZDY0OTEwNGUzMzU4ZWM4NWZmLi4yMGYzNWNjYjZhZjUzNThhZjRjNGM5YzExOGEz
OGEyZTg2YjRlNzRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NCBAQAorMjAxMi0wNi0yOSAg
SWFuIFZvbGxpY2sgIDx2b2xsaWNrQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1d
IENyZWF0ZSBhIFdlYktpdDo6V2ViKiB3cmFwcGVyIGZvciB0aGUgY2MgYW5pbWF0aW9uIGNsYXNz
ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkwMzAz
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgSmFtZXMgUm9iaW5zb24uCisKKyAgICAgICAgKiBQbGF0
Zm9ybS5neXBpOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb24uaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJB
bmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb246OldlYkFuaW1hdGlvbik6
CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6fldlYkFuaW1hdGlvbik6CisgICAgICAg
ICogY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViQW5pbWF0aW9uQ3VydmUp
OgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb25DdXJ2ZTo6fldlYkFuaW1hdGlvbkN1cnZl
KToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uQ3VydmU6OldlYkFuaW1hdGlvbkN1cnZl
KToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdl
YkZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAoV2ViS2l0OjpXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlOjpXZWJGbG9hdEFuaW1hdGlvbkN1cnZlKToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxv
YXRBbmltYXRpb25DdXJ2ZTo6fldlYkZsb2F0QW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIGNo
cm9taXVtL3B1YmxpYy9XZWJGbG9hdEtleWZyYW1lLmg6IEFkZGVkLgorICAgICAgICAoV2ViS2l0
KToKKyAgICAgICAgKFdlYktpdDo6V2ViRmxvYXRLZXlmcmFtZTo6V2ViRmxvYXRLZXlmcmFtZSk6
CisgICAgICAgIChXZWJGbG9hdEtleWZyYW1lKToKKyAgICAgICAgKiBjaHJvbWl1bS9wdWJsaWMv
V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSk6
CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlOjp+V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUpOgorICAgICAgICAqIGNocm9taXVt
L3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6
CisgICAgICAgIChXZWJLaXQ6OldlYlRyYW5zZm9ybUtleWZyYW1lOjpXZWJUcmFuc2Zvcm1LZXlm
cmFtZSk6CisgICAgICAgIChXZWJUcmFuc2Zvcm1LZXlmcmFtZSk6CisKIDIwMTItMDctMDMgIEFs
ZXggU2FraGFydGNob3VrICA8YWxleHN0QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21p
dW1dIEF2b2lkIGNhbGxpbmcgZ2V0VW5pZm9ybUxvY2F0aW9uPz8oKSBpbiB0aGUgY29tcG9zaXRv
ciBzdGFydHVwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IDkyNjQ0ZTMxODg3ZDE4ODNi
OWE3YjQ5NmRlMWZkNmJhOThjMDFkYzkuLmQ2NTgzYmM2NTBkNDBlNmU1NzFkOTYyNmQyMTMwMTll
NDQzYTA5NDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIw
MTItMDYtMjkgIElhbiBWb2xsaWNrICA8dm9sbGlja0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
W2Nocm9taXVtXSBDcmVhdGUgYSBXZWJLaXQ6OldlYiogd3JhcHBlciBmb3IgdGhlIGNjIGFuaW1h
dGlvbiBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD05MDMwMworCisgICAgICAgIFJldmlld2VkIGJ5IEphbWVzIFJvYmluc29uLgorCisgICAg
ICAgICogV2ViS2l0Lmd5cDoKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiBzcmMv
V2ViQW5pbWF0aW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJBbmltYXRpb246Oml0ZXJhdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJBbmlt
YXRpb246OnNldEl0ZXJhdGlvbnMpOgorICAgICAgICAoV2ViS2l0OjpXZWJBbmltYXRpb246OnN0
YXJ0VGltZSk6CisgICAgICAgIChXZWJLaXQ6OldlYkFuaW1hdGlvbjo6c2V0U3RhcnRUaW1lKToK
KyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjp0aW1lT2Zmc2V0KToKKyAgICAgICAgKFdl
YktpdDo6V2ViQW5pbWF0aW9uOjpzZXRUaW1lT2Zmc2V0KToKKyAgICAgICAgKFdlYktpdDo6V2Vi
QW5pbWF0aW9uOjphbHRlcm5hdGVzRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5p
bWF0aW9uOjpzZXRBbHRlcm5hdGVzRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5p
bWF0aW9uOjp0b0NDQWN0aXZlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0
aW9uOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYktpdDo6V2ViQW5pbWF0aW9uOjpkZXN0cm95
KToKKyAgICAgICAgKiBzcmMvV2ViQW5pbWF0aW9uQ3VydmVDb21tb24uY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OmNyZWF0ZVRpbWluZ0Z1bmN0aW9uKToK
KyAgICAgICAgKiBzcmMvV2ViQW5pbWF0aW9uQ3VydmVDb21tb24uaDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgICogc3JjL1dlYkZsb2F0QW5p
bWF0aW9uQ3VydmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmFkZCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZs
b2F0QW5pbWF0aW9uQ3VydmU6OnRvQ0NBbmltYXRpb25DdXJ2ZSk6CisgICAgICAgIChXZWJLaXQ6
OldlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmluaXRpYWxpemUpOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpkZXN0cm95KToKKyAgICAgICAgKiBzcmMvV2ViVHJhbnNm
b3JtQW5pbWF0aW9uQ3VydmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAg
IChXZWJLaXQ6OldlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjphZGQpOgorICAgICAgICAoV2Vi
S2l0OjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6dG9DQ0FuaW1hdGlvbkN1cnZlKToKKyAg
ICAgICAgKFdlYktpdDo6V2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmluaXRpYWxpemUpOgor
ICAgICAgICAoV2ViS2l0OjpXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6ZGVzdHJveSk6Cisg
ICAgICAgICogdGVzdHMvV2ViQW5pbWF0aW9uVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAqIHRl
c3RzL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LmNwcDogQWRkZWQuCisgICAgICAgICogdGVz
dHMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LmNwcDogQWRkZWQuCisKIDIwMTItMDct
MDQgIERhbmEgSmFuc2VucyAgPGRhbmFrakBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9t
aXVtXSBDbGVhciBSZW5kZXJTdXJmYWNlcyBzdGlsbCB3aGVuIG5vIGlkbGUgcGFpbnQgd2lsbCBi
ZSBkb25lCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaSBiL1NvdXJj
ZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCmluZGV4IDdkNTY0Zjc0YmQ0MTUwMDVkNWViYmU2MzZj
Y2Q4OTgzNmI3NDBlYjMuLmE2YjM1ZmQ5MzhlOGEwODkyN2E2Y2UxY2Y5NzQ0ZDcxZTRjNGE2MzIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9QbGF0Zm9ybS9QbGF0Zm9ybS5neXBpCisrKyBiL1NvdXJjZS9Q
bGF0Zm9ybS9QbGF0Zm9ybS5neXBpCkBAIC0zMiw2ICszMiw4IEBACiAgICAgJ3ZhcmlhYmxlcyc6
IHsKICAgICAgICAgJ3BsYXRmb3JtX2ZpbGVzJzogWwogICAgICAgICAgICAgJ2Nocm9taXVtL3B1
YmxpYy9QbGF0Zm9ybS5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0
aW9uLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJBbmltYXRpb25DdXJ2ZS5o
JywKICAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViQXVkaW9CdXMuaCcsCiAgICAgICAg
ICAgICAnY2hyb21pdW0vcHVibGljL1dlYkF1ZGlvRGV2aWNlLmgnLAogICAgICAgICAgICAgJ2No
cm9taXVtL3B1YmxpYy9XZWJCbG9iRGF0YS5oJywKQEAgLTU0LDYgKzU2LDggQEAKICAgICAgICAg
ICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViRmlsZVV0aWxpdGllcy5oJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9wdWJsaWMvV2ViRmlsdGVyT3BlcmF0aW9uLmgnLAogICAgICAgICAgICAgJ2Nocm9t
aXVtL3B1YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb25zLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVt
L3B1YmxpYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVt
L3B1YmxpYy9XZWJGbG9hdEtleWZyYW1lLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1Ymxp
Yy9XZWJGbG9hdFBvaW50LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJGbG9h
dFF1YWQuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYkZsb2F0UmVjdC5oJywK
QEAgLTEwOCw2ICsxMTIsOCBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJUaHJl
YWQuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlRocmVhZFNhZmVEYXRhLmgn
LAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5o
JywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtleWZyYW1l
LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1PcGVyYXRpb25z
LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJQcmVyZW5kZXIuaCcsCiAgICAg
ICAgICAgICAnY2hyb21pdW0vcHVibGljL1dlYlVSTC5oJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9Q
bGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uLmggYi9Tb3VyY2UvUGxhdGZvcm0v
Y2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3MTVlMDUwZjYxODMz
NDcyN2YyNTJhZTViZTVhMjExM2ViODBkZGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkFuaW1hdGlvbi5oCkBAIC0wLDAgKzEsOTMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgV2ViQW5pbWF0aW9uX2gKKyNkZWZpbmUgV2ViQW5pbWF0aW9u
X2gKKworI2luY2x1ZGUgIldlYkNvbW1vbi5oIgorI2luY2x1ZGUgIldlYk5vbkNvcHlhYmxlLmgi
CisjaW5jbHVkZSAiV2ViUHJpdmF0ZU93blB0ci5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFU
SU9OCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CitjbGFzcyBDQ0FjdGl2ZUFuaW1hdGlvbjsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisK
K2NsYXNzIFdlYkFuaW1hdGlvbkN1cnZlOworCisvLyBBIGNvbXBvc2l0b3IgZHJpdmVuIGFuaW1h
dGlvbi4KK2NsYXNzIFdlYkFuaW1hdGlvbiA6IHB1YmxpYyBXZWJOb25Db3B5YWJsZSB7CitwdWJs
aWM6CisgICAgZW51bSBUYXJnZXRQcm9wZXJ0eSB7CisgICAgICAgIFdlYkFuaW1hdGlvblRyYW5z
Zm9ybSA9IDEsCisgICAgICAgIFdlYkFuaW1hdGlvbk9wYWNpdHkKKyAgICB9OworCisgICAgV2Vi
QW5pbWF0aW9uKGNvbnN0IFdlYkFuaW1hdGlvbkN1cnZlJiBjdXJ2ZSwgVGFyZ2V0UHJvcGVydHkg
dGFyZ2V0UHJvcGVydHkpCisgICAgeworICAgICAgICBpbml0aWFsaXplKGN1cnZlLCB0YXJnZXRQ
cm9wZXJ0eSk7CisgICAgfQorCisgICAgfldlYkFuaW1hdGlvbigpCisgICAgeworICAgICAgICBk
ZXN0cm95KCk7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRo
YXQgdGhlIGFuaW1hdGlvbiB3aWxsIHBsYXkuIElmIHRoaXMKKyAgICAvLyB2YWx1ZSBpcyB6ZXJv
IHRoZSBhbmltYXRpb24gd2lsbCBub3QgcGxheS4gSWYgaXQgaXMgbmVnYXRpdmUsIHRoZW4KKyAg
ICAvLyB0aGUgYW5pbWF0aW9uIHdpbGwgbG9vcCBpbmRlZmluaXRlbHkuCisgICAgV0VCS0lUX0VY
UE9SVCBpbnQgaXRlcmF0aW9ucygpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRJ
dGVyYXRpb25zKGludCk7CisKKyAgICBXRUJLSVRfRVhQT1JUIGRvdWJsZSBzdGFydFRpbWUoKSBj
b25zdDsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgc2V0U3RhcnRUaW1lKGRvdWJsZSBtb25vdG9u
aWNUaW1lKTsKKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgaGFzU2V0U3RhcnRUaW1lKCkgY29uc3Q7
CisKKyAgICBXRUJLSVRfRVhQT1JUIGRvdWJsZSB0aW1lT2Zmc2V0KCkgY29uc3Q7CisgICAgV0VC
S0lUX0VYUE9SVCB2b2lkIHNldFRpbWVPZmZzZXQoZG91YmxlIG1vbm90b25pY1RpbWUpOworCisg
ICAgLy8gSWYgYWx0ZXJuYXRlc0RpcmVjdGlvbiBpcyB0cnVlLCBvbiBvZGQgbnVtYmVyZWQgaXRl
cmF0aW9ucyB3ZSByZXZlcnNlIHRoZSBjdXJ2ZS4KKyAgICBXRUJLSVRfRVhQT1JUIGJvb2wgYWx0
ZXJuYXRlc0RpcmVjdGlvbigpIGNvbnN0OworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBzZXRBbHRl
cm5hdGVzRGlyZWN0aW9uKGJvb2wpOworCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAg
b3BlcmF0b3IgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FjdGl2ZUFuaW1hdGlvbj4oKSBjb25zdDsK
KyNlbmRpZgorCitwcml2YXRlOgorICAgIFdFQktJVF9FWFBPUlQgdm9pZCBpbml0aWFsaXplKGNv
bnN0IFdlYkFuaW1hdGlvbkN1cnZlJiwgVGFyZ2V0UHJvcGVydHkpOworICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBpbml0aWFsaXplKGNvbnN0IFdlYkFuaW1hdGlvbiYpOworICAgIFdFQktJVF9FWFBP
UlQgdm9pZCBkZXN0cm95KCk7CisKKyAgICBXZWJQcml2YXRlT3duUHRyPFdlYkNvcmU6OkNDQWN0
aXZlQW5pbWF0aW9uPiBtX3ByaXZhdGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKwor
I2VuZGlmIC8vIFdlYkFuaW1hdGlvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hy
b21pdW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmggYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21p
dW0vcHVibGljL1dlYkFuaW1hdGlvbkN1cnZlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTllY2MxZWRhNDE5OGVj
MzYzMTRmNDQwNzI1M2RmMDNjNTc4NDU4YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9QbGF0
Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViQW5pbWF0aW9uQ3VydmUuaApAQCAtMCwwICsxLDY0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkFuaW1hdGlvbkN1cnZlX2gKKyNkZWZpbmUgV2Vi
QW5pbWF0aW9uQ3VydmVfaAorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2Vi
Tm9uQ29weWFibGUuaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ0NBbmlt
YXRpb25DdXJ2ZTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK2NsYXNzIFdlYkFuaW1hdGlv
bkN1cnZlIDogcHVibGljIFdlYk5vbkNvcHlhYmxlIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5X
ZWJBbmltYXRpb25DdXJ2ZSgpIHsgfQorCisgICAgZW51bSBUaW1pbmdGdW5jdGlvblR5cGUgewor
ICAgICAgICBUaW1pbmdGdW5jdGlvblR5cGVFYXNlLAorICAgICAgICBUaW1pbmdGdW5jdGlvblR5
cGVFYXNlSW4sCisgICAgICAgIFRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VPdXQsCisgICAgICAgIFRp
bWluZ0Z1bmN0aW9uVHlwZUVhc2VJbk91dCwKKyAgICAgICAgVGltaW5nRnVuY3Rpb25UeXBlTGlu
ZWFyCisgICAgfTsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIHZpcnR1YWwgb3Bl
cmF0b3IgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPigpIGNvbnN0ID0gMDsK
KyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgV2ViQW5pbWF0aW9uQ3VydmUoKSB7IH0KK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViQW5pbWF0aW9uQ3VydmVfaAor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0QW5p
bWF0aW9uQ3VydmUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1YTdmMjQzOGNmYWQyZjJiN2NiNjFlNzFmOTM3
OWExODc2NzljNmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxhdGZvcm0vY2hyb21pdW0v
cHVibGljL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuaApAQCAtMCwwICsxLDczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZuZGVmIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVfaAorI2RlZmluZSBXZWJGbG9h
dEFuaW1hdGlvbkN1cnZlX2gKKworI2luY2x1ZGUgIldlYkFuaW1hdGlvbkN1cnZlLmgiCisKKyNp
bmNsdWRlICJXZWJDb21tb24uaCIKKyNpbmNsdWRlICJXZWJGbG9hdEtleWZyYW1lLmgiCisjaW5j
bHVkZSAiV2ViUHJpdmF0ZU93blB0ci5oIgorCisjaWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisj
aW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBDQ0FuaW1hdGlvbkN1cnZlOworY2xhc3MgQ0NLZXlmcmFtZWRGbG9hdEFuaW1hdGlvbkN1
cnZlOworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworLy8gQSBrZXlmcmFtZWQgZmxvYXQgYW5p
bWF0aW9uIGN1cnZlLgorY2xhc3MgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSA6IHB1YmxpYyBXZWJB
bmltYXRpb25DdXJ2ZSB7CitwdWJsaWM6CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSgpIHsg
aW5pdGlhbGl6ZSgpOyB9CisgICAgdmlydHVhbCB+V2ViRmxvYXRBbmltYXRpb25DdXJ2ZSgpIHsg
ZGVzdHJveSgpOyB9CisKKyAgICAvLyBBZGRzIHRoZSBrZXlmcmFtZSB3aXRoIHRoZSBkZWZhdWx0
IHRpbWluZyBmdW5jdGlvbiAoZWFzZSkuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFkZChjb25z
dCBXZWJGbG9hdEtleWZyYW1lJik7CisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFkZChjb25zdCBX
ZWJGbG9hdEtleWZyYW1lJiwgVGltaW5nRnVuY3Rpb25UeXBlKTsKKyAgICAvLyBBZGRzIHRoZSBr
ZXlmcmFtZSB3aXRoIGEgY3VzdG9tLCBiZXppZXIgdGltaW5nIGZ1bmN0aW9uLiBOb3RlLCBpdCBp
cworICAgIC8vIGFzc3VtZWQgdGhhdCB4MCA9IHkwID0gMCwgYW5kIHgzID0geTMgPSAxLgorICAg
IFdFQktJVF9FWFBPUlQgdm9pZCBhZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFtZSYsIGRvdWJsZSB4
MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5Mik7CisKKyAgICBXRUJLSVRfRVhQT1JU
IGZsb2F0IGdldFZhbHVlKGRvdWJsZSB0aW1lKSBjb25zdDsKKworI2lmIFdFQktJVF9JTVBMRU1F
TlRBVElPTgorICAgIHZpcnR1YWwgb3BlcmF0b3IgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1h
dGlvbkN1cnZlPigpIGNvbnN0OworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgV0VCS0lUX0VYUE9S
VCB2b2lkIGluaXRpYWxpemUoKTsKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgZGVzdHJveSgpOwor
CisgICAgV2ViUHJpdmF0ZU93blB0cjxXZWJDb3JlOjpDQ0tleWZyYW1lZEZsb2F0QW5pbWF0aW9u
Q3VydmU+IG1fcHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYg
Ly8gV2ViRmxvYXRBbmltYXRpb25DdXJ2ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Y2hyb21pdW0vcHVibGljL1dlYkZsb2F0S2V5ZnJhbWUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJv
bWl1bS9wdWJsaWMvV2ViRmxvYXRLZXlmcmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyNzY0MThmZjhmMDFh
MjY2YzFkNzkyY2NmM2YwYjNiMmI3YWQ5YzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvUGxh
dGZvcm0vY2hyb21pdW0vcHVibGljL1dlYkZsb2F0S2V5ZnJhbWUuaApAQCAtMCwwICsxLDQzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdlYkZsb2F0S2V5ZnJhbWVfaAorI2RlZmluZSBXZWJG
bG9hdEtleWZyYW1lX2gKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJGbG9hdEtl
eWZyYW1lIHsKKyAgICBXZWJGbG9hdEtleWZyYW1lKGRvdWJsZSB0aW1lLCBmbG9hdCB2YWx1ZSkK
KyAgICAgICAgOiB0aW1lKHRpbWUpCisgICAgICAgICwgdmFsdWUodmFsdWUpCisgICAgeworICAg
IH0KKworICAgIGRvdWJsZSB0aW1lOworICAgIGZsb2F0IHZhbHVlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJGbG9hdEtleWZyYW1lX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUuaCBiL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViVHJhbnNmb3JtQW5pbWF0
aW9uQ3VydmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWNiNjcwNTVkNzZlNzczOTQwM2I4N2YwMjVhY2RiZDgx
MjhjNzM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1BsYXRmb3JtL2Nocm9taXVtL3B1Ymxp
Yy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVfaAorI2RlZmluZSBXZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZV9oCisKKyNpbmNsdWRlICJXZWJBbmltYXRpb25DdXJ2ZS5o
IgorCisjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCisjaW5jbHVkZSAiV2ViUHJpdmF0ZU93blB0ci5o
IgorI2luY2x1ZGUgIldlYlRyYW5zZm9ybUtleWZyYW1lLmgiCisjaW5jbHVkZSAiV2ViVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgQ0NB
bmltYXRpb25DdXJ2ZTsKK2NsYXNzIENDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU7
Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCisvLyBBIGtleWZyYW1lZCB0cmFuc2Zvcm0gYW5p
bWF0aW9uIGN1cnZlLgorY2xhc3MgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgOiBwdWJsaWMg
V2ViQW5pbWF0aW9uQ3VydmUgeworcHVibGljOgorICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlKCkgeyBpbml0aWFsaXplKCk7IH0KKyAgICB2aXJ0dWFsIH5XZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSgpIHsgZGVzdHJveSgpOyB9CisKKyAgICAvLyBBZGRzIHRoZSBrZXlmcmFtZSB3aXRo
IHRoZSBkZWZhdWx0IHRpbWluZyBmdW5jdGlvbiAoZWFzZSkuCisgICAgV0VCS0lUX0VYUE9SVCB2
b2lkIGFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlmcmFtZSYpOworICAgIFdFQktJVF9FWFBPUlQg
dm9pZCBhZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmLCBUaW1pbmdGdW5jdGlvblR5cGUp
OworICAgIC8vIEFkZHMgdGhlIGtleWZyYW1lIHdpdGggYSBjdXN0b20sIGJlemllciB0aW1pbmcg
ZnVuY3Rpb24uIE5vdGUsIGl0IGlzCisgICAgLy8gYXNzdW1lZCB0aGF0IHgwID0geTAgPSAwLCBh
bmQgeDMgPSB5MyA9IDEuCisgICAgV0VCS0lUX0VYUE9SVCB2b2lkIGFkZChjb25zdCBXZWJUcmFu
c2Zvcm1LZXlmcmFtZSYsIGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5
Mik7CisKKyAgICBXRUJLSVRfRVhQT1JUIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IGdldFZhbHVl
KGRvdWJsZSB0aW1lKSBjb25zdDsKKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIHZp
cnR1YWwgb3BlcmF0b3IgUGFzc093blB0cjxXZWJDb3JlOjpDQ0FuaW1hdGlvbkN1cnZlPigpIGNv
bnN0OworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBXRUJLSVRfRVhQT1JUIHZvaWQgaW5pdGlh
bGl6ZSgpOworICAgIFdFQktJVF9FWFBPUlQgdm9pZCBkZXN0cm95KCk7CisKKyAgICBXZWJQcml2
YXRlT3duUHRyPFdlYkNvcmU6OkNDS2V5ZnJhbWVkVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU+IG1f
cHJpdmF0ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViVHJh
bnNmb3JtQW5pbWF0aW9uQ3VydmVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oIGIvU291cmNlL1BsYXRmb3JtL2Nocm9t
aXVtL3B1YmxpYy9XZWJUcmFuc2Zvcm1LZXlmcmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5OWVmNTU4N2Jh
M2QzZjUyM2IwYmZmOGY3M2ExOTMzZjBjYWJhZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlRyYW5zZm9ybUtleWZyYW1lLmgKQEAgLTAsMCAr
MSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJUcmFuc2Zvcm1LZXlmcmFtZV9oCisj
ZGVmaW5lIFdlYlRyYW5zZm9ybUtleWZyYW1lX2gKKworI2luY2x1ZGUgIldlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJUcmFuc2Zvcm1L
ZXlmcmFtZSB7CisgICAgV2ViVHJhbnNmb3JtS2V5ZnJhbWUoZG91YmxlIHRpbWUsIGNvbnN0IFdl
YlRyYW5zZm9ybU9wZXJhdGlvbnMmIHZhbHVlKQorICAgICAgICA6IHRpbWUodGltZSkKKyAgICAg
ICAgLCB2YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgZG91YmxlIHRpbWU7CisgICAg
V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyB2YWx1ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktp
dAorCisjZW5kaWYgLy8gV2ViVHJhbnNmb3JtS2V5ZnJhbWVfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwCmluZGV4IDc4ZTQyOGIyMjg1ZDM2M2U1NDc4ZGY3ZmEyMzhmMzZmM2ViZWY5MDcuLjJm
ZWVjYzczODlkM2M1ODFkNGY0M2ZiOTQ0NjAyZTNiMDdkNTMyNTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAKQEAgLTQ3Nyw4ICs0NzcsMTEgQEAKICAgICAgICAgICAgICAgICAnc3JjL1dl
YlRleHRDaGVja2luZ0NvbXBsZXRpb25JbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9X
ZWJUZXh0Q2hlY2tpbmdSZXN1bHQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkFjY2Vz
c2liaWxpdHlPYmplY3QuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkFuaW1hdGlvbi5j
cHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ29udHJvbGxlckltcGwuY3Bw
JywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkFuaW1hdGlvbkNvbnRyb2xsZXJJbXBsLmgnLAor
ICAgICAgICAgICAgICAgICdzcmMvV2ViQW5pbWF0aW9uQ3VydmVDb21tb24uY3BwJywKKyAgICAg
ICAgICAgICAgICAnc3JjL1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmgnLAogICAgICAgICAgICAg
ICAgICdzcmMvV2ViQXJyYXlCdWZmZXIuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkFy
cmF5QnVmZmVyVmlldy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvV2ViQmluZGluZ3MuY3Bw
JywKQEAgLTUyNyw2ICs1MzAsNyBAQAogICAgICAgICAgICAgICAgICdzcmMvV2ViRmlsZUNob29z
ZXJDb21wbGV0aW9uSW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZpbGVTeXN0ZW1D
YWxsYmFja3NJbXBsLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJGaWxlU3lzdGVtQ2Fs
bGJhY2tzSW1wbC5oJywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3Vy
dmUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYkZvbnRDYWNoZS5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvV2ViRm9udERlc2NyaXB0aW9uLmNwcCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9XZWJGb250SW1wbC5jcHAnLApAQCAtNjUxLDYgKzY1NSw3IEBACiAgICAgICAgICAgICAg
ICAgJ3NyYy9XZWJTdXJyb3VuZGluZ1RleHQuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dl
YlRleHRJbnB1dEluZm8uY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1dlYlRleHRSdW4uY3Bw
JywKKyAgICAgICAgICAgICAgICAnc3JjL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9XZWJVUkxMb2FkVGltaW5nLmNwcCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9XZWJTY29wZWRVc2VyR2VzdHVyZS5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvV2ViVGV4dEZpZWxkRGVjb3JhdG9yQ2xpZW50LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQppbmRleCA1ZTI4OTAzOTQyMjUxOGY1MGExZWI4NGNhN2U2YTExYzYzYThkMDJkLi43
YjNlNjhjOGI4MmFmZWUxMWQxOGFhNzIwZjY4OWU0ZjJlNjUxNTRhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKQEAgLTE0OSw3ICsxNDksOSBAQAogICAgICAgICAgICAgJ3Rlc3RzL1Ry
ZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvVHJlZVRlc3RIZWxw
ZXJzLmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvVHJlZVRlc3RIZWxwZXJzLmgnLAorICAgICAg
ICAgICAgJ3Rlc3RzL1dlYkFuaW1hdGlvblRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9X
ZWJDb21wb3NpdG9ySW5wdXRIYW5kbGVySW1wbFRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0
cy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dl
YkZyYW1lVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkxheWVyVGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL1dlYkxheWVyVHJlZVZpZXdUZXN0LmNwcCcsCkBAIC0xNTgsNiAr
MTYwLDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9XZWJQYWdlU2VyaWFsaXplclRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9XZWJTb2NrZXREZWZsYXRlclRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9XZWJTb2NrZXRFeHRlbnNpb25EaXNwYXRjaGVyVGVzdC5jcHAnLAorICAgICAg
ICAgICAgJ3Rlc3RzL1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdC5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4VGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL1dlYlRyYW5zZm9ybU9wZXJhdGlvbnNUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvV2ViVVJMUmVxdWVzdFRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJBbmltYXRpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdkZGRmYzI0MTM2OTY4NWYyOGRmOTI5YmEw
MGU0NTU2NDM4NTk1NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICog
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViQW5pbWF0aW9uLmg+CisK
KyNpbmNsdWRlICJBbmltYXRpb25JZFZlbmRvci5oIgorI2luY2x1ZGUgImNjL0NDQWN0aXZlQW5p
bWF0aW9uLmgiCisjaW5jbHVkZSAiY2MvQ0NBbmltYXRpb25DdXJ2ZS5oIgorI2luY2x1ZGUgPHB1
YmxpYy9XZWJBbmltYXRpb25DdXJ2ZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1c2luZyBXZWJDb3JlOjpBbmltYXRpb25JZFZlbmRv
cjsKK3VzaW5nIFdlYkNvcmU6OkNDQWN0aXZlQW5pbWF0aW9uOworCituYW1lc3BhY2UgV2ViS2l0
IHsKKworaW50IFdlYkFuaW1hdGlvbjo6aXRlcmF0aW9ucygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fcHJpdmF0ZS0+aXRlcmF0aW9ucygpOworfQorCit2b2lkIFdlYkFuaW1hdGlvbjo6c2V0SXRl
cmF0aW9ucyhpbnQgbikKK3sKKyAgICBtX3ByaXZhdGUtPnNldEl0ZXJhdGlvbnMobik7Cit9CisK
K2RvdWJsZSBXZWJBbmltYXRpb246OnN0YXJ0VGltZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+c3RhcnRUaW1lKCk7Cit9CisKK3ZvaWQgV2ViQW5pbWF0aW9uOjpzZXRTdGFydFRp
bWUoZG91YmxlIG1vbm90b25pY1RpbWUpCit7CisgICAgbV9wcml2YXRlLT5zZXRTdGFydFRpbWUo
bW9ub3RvbmljVGltZSk7Cit9CisKK2RvdWJsZSBXZWJBbmltYXRpb246OnRpbWVPZmZzZXQoKSBj
b25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPnRpbWVPZmZzZXQoKTsKK30KKwordm9pZCBX
ZWJBbmltYXRpb246OnNldFRpbWVPZmZzZXQoZG91YmxlIG1vbm90b25pY1RpbWUpCit7CisgICAg
bV9wcml2YXRlLT5zZXRUaW1lT2Zmc2V0KG1vbm90b25pY1RpbWUpOworfQorCitib29sIFdlYkFu
aW1hdGlvbjo6YWx0ZXJuYXRlc0RpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJp
dmF0ZS0+YWx0ZXJuYXRlc0RpcmVjdGlvbigpOworfQorCit2b2lkIFdlYkFuaW1hdGlvbjo6c2V0
QWx0ZXJuYXRlc0RpcmVjdGlvbihib29sIGFsdGVybmF0ZXMpCit7CisgICAgbV9wcml2YXRlLT5z
ZXRBbHRlcm5hdGVzRGlyZWN0aW9uKGFsdGVybmF0ZXMpOworfQorCitXZWJBbmltYXRpb246Om9w
ZXJhdG9yIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb24+KCkgY29uc3QKK3sK
KyAgICBPd25QdHI8V2ViQ29yZTo6Q0NBY3RpdmVBbmltYXRpb24+IHRvUmV0dXJuKG1fcHJpdmF0
ZS0+Y2xvbmVGb3JJbXBsVGhyZWFkKCkpOworICAgIHRvUmV0dXJuLT5zZXROZWVkc1N5bmNocm9u
aXplZFN0YXJ0VGltZSh0cnVlKTsKKyAgICByZXR1cm4gdG9SZXR1cm4ucmVsZWFzZSgpOworfQor
Cit2b2lkIFdlYkFuaW1hdGlvbjo6aW5pdGlhbGl6ZShjb25zdCBXZWJBbmltYXRpb25DdXJ2ZSYg
Y3VydmUsIFRhcmdldFByb3BlcnR5IHRhcmdldFByb3BlcnR5KQoreworICAgIG1fcHJpdmF0ZS5y
ZXNldChDQ0FjdGl2ZUFuaW1hdGlvbjo6Y3JlYXRlKGN1cnZlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuaW1hdGlvbklkVmVuZG9yOjpnZXROZXh0QW5p
bWF0aW9uSWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBbmltYXRpb25JZFZlbmRvcjo6Z2V0TmV4dEdyb3VwSWQoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpDQ0FjdGl2
ZUFuaW1hdGlvbjo6VGFyZ2V0UHJvcGVydHk+KHRhcmdldFByb3BlcnR5KSkubGVha1B0cigpKTsK
K30KKwordm9pZCBXZWJBbmltYXRpb246OmRlc3Ryb3koKQoreworICAgIG1fcHJpdmF0ZS5yZXNl
dCgwKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb25DdXJ2ZUNvbW1vbi5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJBbmltYXRpb25DdXJ2ZUNvbW1vbi5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YjViOThiMGEzMDAwZWRjMzU3MTZhN2E3MDQ4YmY4MmZkZGY5M2JkOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmNw
cApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJXZWJBbmltYXRpb25DdXJ2ZUNvbW1vbi5oIgorCisjaW5jbHVkZSAiY2MvQ0NU
aW1pbmdGdW5jdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitQYXNzT3duUHRyPFdlYkNv
cmU6OkNDVGltaW5nRnVuY3Rpb24+IGNyZWF0ZVRpbWluZ0Z1bmN0aW9uKFdlYkFuaW1hdGlvbkN1
cnZlOjpUaW1pbmdGdW5jdGlvblR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlOgorICAgICAg
ICByZXR1cm4gV2ViQ29yZTo6Q0NFYXNlVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOworICAgIGNh
c2UgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VJbjoKKyAgICAgICAg
cmV0dXJuIFdlYkNvcmU6OkNDRWFzZUluVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpOworICAgIGNh
c2UgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VPdXQ6CisgICAgICAg
IHJldHVybiBXZWJDb3JlOjpDQ0Vhc2VPdXRUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCk7CisgICAg
Y2FzZSBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlRWFzZUluT3V0OgorICAg
ICAgICByZXR1cm4gV2ViQ29yZTo6Q0NFYXNlSW5PdXRUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCk7
CisgICAgY2FzZSBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyOgor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViQW5pbWF0aW9uQ3VydmVDb21tb24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTYyYjZlYjhkMTMxNjM1
MWRkN2YyYzRiOGE0NThjMjY0OWU0YzVkNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkFuaW1hdGlvbkN1cnZlQ29tbW9uLmgKQEAgLTAsMCArMSwzOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
KyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJBbmltYXRpb25DdXJ2ZUNvbW1vbl9oCisjZGVm
aW5lIFdlYkFuaW1hdGlvbkN1cnZlQ29tbW9uX2gKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJBbmlt
YXRpb25DdXJ2ZS5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIENDVGltaW5nRnVuY3Rpb247Cit9CisKK25hbWVzcGFjZSBXZWJLaXQgewor
UGFzc093blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiBjcmVhdGVUaW1pbmdGdW5jdGlv
bihXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlKTsKK30KKworI2VuZGlmIC8v
IFdlYkFuaW1hdGlvbkN1cnZlQ29tbW9uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuY3BwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViRmxvYXRBbmltYXRpb25DdXJ2ZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDhjYzliYjk4
ZGZkYzQ3NDZiYjBkMmFmYzhkNDUwMWQ4NmYxMTQyOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuY3BwCkBAIC0wLDAg
KzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUg
PHB1YmxpYy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlLmg+CisKKyNpbmNsdWRlICJXZWJBbmltYXRp
b25DdXJ2ZUNvbW1vbi5oIgorI2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUu
aCIKKyNpbmNsdWRlICJjYy9DQ1RpbWluZ0Z1bmN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL093blB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgewor
Cit2b2lkIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmFkZChjb25zdCBXZWJGbG9hdEtleWZyYW1l
JiBrZXlmcmFtZSkKK3sKKyAgICBhZGQoa2V5ZnJhbWUsIFRpbWluZ0Z1bmN0aW9uVHlwZUVhc2Up
OworfQorCit2b2lkIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmU6OmFkZChjb25zdCBXZWJGbG9hdEtl
eWZyYW1lJiBrZXlmcmFtZSwgVGltaW5nRnVuY3Rpb25UeXBlIHR5cGUpCit7CisgICAgbV9wcml2
YXRlLT5hZGRLZXlmcmFtZShXZWJDb3JlOjpDQ0Zsb2F0S2V5ZnJhbWU6OmNyZWF0ZShrZXlmcmFt
ZS50aW1lLCBrZXlmcmFtZS52YWx1ZSwgY3JlYXRlVGltaW5nRnVuY3Rpb24odHlwZSkpKTsKK30K
Kwordm9pZCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjphZGQoY29uc3QgV2ViRmxvYXRLZXlmcmFt
ZSYga2V5ZnJhbWUsIGRvdWJsZSB4MSwgZG91YmxlIHkxLCBkb3VibGUgeDIsIGRvdWJsZSB5MikK
K3sKKyAgICBtX3ByaXZhdGUtPmFkZEtleWZyYW1lKFdlYkNvcmU6OkNDRmxvYXRLZXlmcmFtZTo6
Y3JlYXRlKGtleWZyYW1lLnRpbWUsIGtleWZyYW1lLnZhbHVlLCBXZWJDb3JlOjpDQ0N1YmljQmV6
aWVyVGltaW5nRnVuY3Rpb246OmNyZWF0ZSh4MSwgeTEsIHgyLCB5MikpKTsKK30KKworZmxvYXQg
V2ViRmxvYXRBbmltYXRpb25DdXJ2ZTo6Z2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fcHJpdmF0ZS0+Z2V0VmFsdWUodGltZSk7Cit9CisKK1dlYkZsb2F0QW5pbWF0
aW9uQ3VydmU6Om9wZXJhdG9yIFBhc3NPd25QdHI8V2ViQ29yZTo6Q0NBbmltYXRpb25DdXJ2ZT4o
KSBjb25zdAoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmNsb25lKCk7Cit9CisKK3ZvaWQgV2Vi
RmxvYXRBbmltYXRpb25DdXJ2ZTo6aW5pdGlhbGl6ZSgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0
KFdlYkNvcmU6OkNDS2V5ZnJhbWVkRmxvYXRBbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkubGVha1B0
cigpKTsKK30KKwordm9pZCBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlOjpkZXN0cm95KCkKK3sKKyAg
ICBtX3ByaXZhdGUucmVzZXQoMCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3Vy
dmUuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVHJhbnNmb3JtQW5pbWF0aW9u
Q3VydmUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhOTVmYTM5ZWRiZTdhODYyZTNjMGUxZjg4MjRhZDE2MmRi
YWMxMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5jcHAKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04K
KyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybUFu
aW1hdGlvbkN1cnZlLmg+CisKKyNpbmNsdWRlICJXZWJBbmltYXRpb25DdXJ2ZUNvbW1vbi5oIgor
I2luY2x1ZGUgImNjL0NDS2V5ZnJhbWVkQW5pbWF0aW9uQ3VydmUuaCIKKyNpbmNsdWRlICJjYy9D
Q1RpbWluZ0Z1bmN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYlRyYW5zZm9y
bUFuaW1hdGlvbkN1cnZlOjphZGQoY29uc3QgV2ViVHJhbnNmb3JtS2V5ZnJhbWUmIGtleWZyYW1l
KQoreworICAgIGFkZChrZXlmcmFtZSwgVGltaW5nRnVuY3Rpb25UeXBlRWFzZSk7Cit9CisKK3Zv
aWQgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmU6OmFkZChjb25zdCBXZWJUcmFuc2Zvcm1LZXlm
cmFtZSYga2V5ZnJhbWUsIFRpbWluZ0Z1bmN0aW9uVHlwZSB0eXBlKQoreworICAgIG1fcHJpdmF0
ZS0+YWRkS2V5ZnJhbWUoV2ViQ29yZTo6Q0NUcmFuc2Zvcm1LZXlmcmFtZTo6Y3JlYXRlKGtleWZy
YW1lLnRpbWUsIGtleWZyYW1lLnZhbHVlLCBjcmVhdGVUaW1pbmdGdW5jdGlvbih0eXBlKSkpOwor
fQorCit2b2lkIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjphZGQoY29uc3QgV2ViVHJhbnNm
b3JtS2V5ZnJhbWUmIGtleWZyYW1lLCBkb3VibGUgeDEsIGRvdWJsZSB5MSwgZG91YmxlIHgyLCBk
b3VibGUgeTIpCit7CisgICAgbV9wcml2YXRlLT5hZGRLZXlmcmFtZShXZWJDb3JlOjpDQ1RyYW5z
Zm9ybUtleWZyYW1lOjpjcmVhdGUoa2V5ZnJhbWUudGltZSwga2V5ZnJhbWUudmFsdWUsIFdlYkNv
cmU6OkNDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKSkp
OworfQorCitXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZTo6Z2V0VmFsdWUoZG91YmxlIHRpbWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+
Z2V0VmFsdWUodGltZSk7Cit9CisKK1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlOjpvcGVyYXRv
ciBQYXNzT3duUHRyPFdlYkNvcmU6OkNDQW5pbWF0aW9uQ3VydmU+KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV9wcml2YXRlLT5jbG9uZSgpOworfQorCit2b2lkIFdlYlRyYW5zZm9ybUFuaW1hdGlv
bkN1cnZlOjppbml0aWFsaXplKCkKK3sKKyAgICBtX3ByaXZhdGUucmVzZXQoV2ViQ29yZTo6Q0NL
ZXlmcmFtZWRUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6Y3JlYXRlKCkubGVha1B0cigpKTsKK30K
Kwordm9pZCBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZTo6ZGVzdHJveSgpCit7CisgICAgbV9w
cml2YXRlLnJlc2V0KDApOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvV2ViQW5pbWF0aW9uVGVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkFuaW1hdGlvblRlc3QuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmFjMGYyZDVmYjNkOGUwZDg1YzQ1NmU0YzY4MjdiYWZhNGE5MmIyYTgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkFuaW1hdGlvblRlc3QuY3BwCkBA
IC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgPHB1YmxpYy9XZWJBbmltYXRpb24uaD4KKworI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+
CisjaW5jbHVkZSA8cHVibGljL1dlYkZsb2F0QW5pbWF0aW9uQ3VydmUuaD4KKyNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwordXNpbmcgbmFtZXNw
YWNlIFdlYktpdDsKKworbmFtZXNwYWNlIHsKKworVEVTVChXZWJBbmltYXRpb25UZXN0LCBEZWZh
dWx0U2V0dGluZ3MpCit7CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBX
ZWJBbmltYXRpb24gYW5pbWF0aW9uKGN1cnZlLCBXZWJBbmltYXRpb246OldlYkFuaW1hdGlvbk9w
YWNpdHkpOworCisgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRlZmF1bHRzIGFyZSBjb3JyZWN0Lgor
ICAgIEVYUEVDVF9FUSgxLCBhbmltYXRpb24uaXRlcmF0aW9ucygpKTsKKyAgICBFWFBFQ1RfRVEo
MCwgYW5pbWF0aW9uLnN0YXJ0VGltZSgpKTsKKyAgICBFWFBFQ1RfRVEoMCwgYW5pbWF0aW9uLnRp
bWVPZmZzZXQoKSk7CisgICAgRVhQRUNUX0ZBTFNFKGFuaW1hdGlvbi5hbHRlcm5hdGVzRGlyZWN0
aW9uKCkpOworfQorCitURVNUKFdlYkFuaW1hdGlvblRlc3QsIE1vZGlmaWVkU2V0dGluZ3MpCit7
CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBXZWJBbmltYXRpb24gYW5p
bWF0aW9uKGN1cnZlLCBXZWJBbmltYXRpb246OldlYkFuaW1hdGlvbk9wYWNpdHkpOworICAgIGFu
aW1hdGlvbi5zZXRJdGVyYXRpb25zKDIpOworICAgIGFuaW1hdGlvbi5zZXRTdGFydFRpbWUoMik7
CisgICAgYW5pbWF0aW9uLnNldFRpbWVPZmZzZXQoMik7CisgICAgYW5pbWF0aW9uLnNldEFsdGVy
bmF0ZXNEaXJlY3Rpb24odHJ1ZSk7CisKKyAgICBFWFBFQ1RfRVEoMiwgYW5pbWF0aW9uLml0ZXJh
dGlvbnMoKSk7CisgICAgRVhQRUNUX0VRKDIsIGFuaW1hdGlvbi5zdGFydFRpbWUoKSk7CisgICAg
RVhQRUNUX0VRKDIsIGFuaW1hdGlvbi50aW1lT2Zmc2V0KCkpOworICAgIEVYUEVDVF9UUlVFKGFu
aW1hdGlvbi5hbHRlcm5hdGVzRGlyZWN0aW9uKCkpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJGbG9hdEFuaW1hdGlvbkN1
cnZlVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1dlYkZsb2F0QW5pbWF0
aW9uQ3VydmVUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZGZlNGVjN2Q5Mjk1Mjk4Y2E2NDZiNmVhNjky
NDRiNTQwYjU1YTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9XZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKQEAgLTAsMCArMSwyMzYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJG
bG9hdEFuaW1hdGlvbkN1cnZlLmg+CisKKyNpbmNsdWRlICJjYy9DQ1RpbWluZ0Z1bmN0aW9uLmgi
CisKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitu
YW1lc3BhY2UgeworCisvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggb25lIGtl
eWZyYW1lIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVz
dCwgT25lRmxvYXRLZXlmcmFtZSkKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZl
OworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDIpLCBXZWJBbmltYXRpb25DdXJ2
ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3Vy
dmUuZ2V0VmFsdWUoLTEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUo
MCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgyLCBjdXJ2ZS5nZXRWYWx1ZSgyKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSBmbG9hdCBhbmlt
YXRpb24gd2l0aCB0d28ga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJGbG9h
dEFuaW1hdGlvbkN1cnZlVGVzdCwgVHdvRmxvYXRLZXlmcmFtZSkKK3sKKyAgICBXZWJGbG9hdEFu
aW1hdGlvbkN1cnZlIGN1cnZlOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDIp
LCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2
ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCA0KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1
bmN0aW9uVHlwZUxpbmVhcik7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVl
KC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDApKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMywgY3VydmUuZ2V0VmFsdWUoMC41KSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDQsIGN1cnZlLmdldFZhbHVlKDEpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUu
Z2V0VmFsdWUoMikpOworfQorCisvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGgg
dGhyZWUga2V5ZnJhbWVzIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJGbG9hdEFuaW1hdGlv
bkN1cnZlVGVzdCwgVGhyZWVGbG9hdEtleWZyYW1lKQoreworICAgIFdlYkZsb2F0QW5pbWF0aW9u
Q3VydmUgY3VydmU7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMiksIFdlYkFu
aW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFkZChX
ZWJGbG9hdEtleWZyYW1lKDEsIDQpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25U
eXBlTGluZWFyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgyLCA4KSwgV2ViQW5p
bWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDIsIGN1cnZlLmdldFZhbHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZl
LmdldFZhbHVlKDApKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUuZ2V0VmFsdWUoMC41
KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDEpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMS41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VR
KDgsIGN1cnZlLmdldFZhbHVlKDIpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUuZ2V0
VmFsdWUoMykpOworfQorCisvLyBUZXN0cyB0aGF0IGEgZmxvYXQgYW5pbWF0aW9uIHdpdGggbXVs
dGlwbGUga2V5cyBhdCBhIGdpdmVuIHRpbWUgd29ya3Mgc2FuZWx5LgorVEVTVChXZWJGbG9hdEFu
aW1hdGlvbkN1cnZlVGVzdCwgUmVwZWF0ZWRGbG9hdEtleVRpbWVzKQoreworICAgIFdlYkZsb2F0
QW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwg
NCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1
cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDQpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5n
RnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgxLCA2
KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3Vy
dmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMiwgNiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdG
dW5jdGlvblR5cGVMaW5lYXIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZh
bHVlKC0xKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDApKTsKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoMC41KSk7CisKKyAgICAvLyBUaGVy
ZSBpcyBhIGRpc2NvbnRpbnVpdHkgYXQgMS4gQW55IHZhbHVlIGJldHdlZW4gNCBhbmQgNiBpcyB2
YWxpZC4KKyAgICBmbG9hdCB2YWx1ZSA9IGN1cnZlLmdldFZhbHVlKDEpOworICAgIEVYUEVDVF9U
UlVFKHZhbHVlID49IDQgJiYgdmFsdWUgPD0gNik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwg
Y3VydmUuZ2V0VmFsdWUoMS41KSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDYsIGN1cnZlLmdldFZh
bHVlKDIpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMykpOworfQor
CisvLyBUZXN0cyB0aGF0IHRoZSBrZXlmcmFtZXMgbWF5IGJlIGFkZGVkIG91dCBvZiBvcmRlci4K
K1RFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIFVuc29ydGVkS2V5ZnJhbWVzKQorewor
ICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0
S2V5ZnJhbWUoMiwgOCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5l
YXIpOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDIpLCBXZWJBbmltYXRpb25D
dXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRL
ZXlmcmFtZSgxLCA0KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVh
cik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoLTEpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMCkpOworICAgIEVYUEVDVF9GTE9BVF9F
USgzLCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUu
Z2V0VmFsdWUoMSkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS5nZXRWYWx1ZSgxLjUp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUuZ2V0VmFsdWUoMikpOworICAgIEVYUEVD
VF9GTE9BVF9FUSg4LCBjdXJ2ZS5nZXRWYWx1ZSgzKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSBj
dWJpYyBiZXppZXIgdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJG
bG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbikKK3sKKyAg
ICBXZWJGbG9hdEFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtl
eWZyYW1lKDAsIDApLCAwLjI1LCAwLCAwLjc1LCAxKTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRL
ZXlmcmFtZSgxLCAxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVh
cik7CisKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgY3VydmUuZ2V0VmFsdWUoMCkpOworICAgIEVY
UEVDVF9MVCgwLCBjdXJ2ZS5nZXRWYWx1ZSgwLjI1KSk7CisgICAgRVhQRUNUX0dUKDAuMjUsIGN1
cnZlLmdldFZhbHVlKDAuMjUpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMC41LCBjdXJ2ZS5nZXRW
YWx1ZSgwLjUpKTsKKyAgICBFWFBFQ1RfTFQoMC43NSwgY3VydmUuZ2V0VmFsdWUoMC43NSkpOwor
ICAgIEVYUEVDVF9HVCgxLCBjdXJ2ZS5nZXRWYWx1ZSgwLjc1KSk7CisgICAgRVhQRUNUX0ZMT0FU
X0VRKDEsIGN1cnZlLmdldFZhbHVlKDEpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhbiBlYXNlIHRp
bWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViRmxvYXRBbmltYXRpb25D
dXJ2ZVRlc3QsIEVhc2VUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlIGN1cnZlOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAsIDApLCBXZWJBbmlt
YXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlRWFzZSk7CisgICAgY3VydmUuYWRkKFdlYkZs
b2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVM
aW5lYXIpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1
bmN0aW9uKFdlYkNvcmU6OkNDRWFzZVRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0g
aSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFs
dWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpKTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHVz
aW5nIGEgbGluZWFyIHRpbWluZyBmdW5jdGlvbi4KK1RFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2
ZVRlc3QsIExpbmVhclRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3Vy
dmUgY3VydmU7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwgMCksIFdlYkFuaW1h
dGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFkZChXZWJG
bG9hdEtleWZyYW1lKDEsIDEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBl
TGluZWFyKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsraSkgeworICAgICAgICBj
b25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBFQ1RfRkxPQVRfRVEodGlt
ZSwgY3VydmUuZ2V0VmFsdWUodGltZSkpOworICAgIH0KK30KKworLy8gVGVzdHMgdGhhdCBhbiBl
YXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViRmxvYXRB
bmltYXRpb25DdXJ2ZVRlc3QsIEVhc2VJblRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYkZsb2F0
QW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMCwg
MCksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlSW4pOworICAgIGN1
cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5n
RnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0
aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VJblRpbWluZ0Z1bmN0aW9uOjpjcmVh
dGUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0
IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdG
dW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpKTsKKyAgICB9Cit9
CisKKy8vIFRlc3RzIHRoYXQgYW4gZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhw
ZWN0ZWQuCitURVNUKFdlYkZsb2F0QW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNlT3V0VGltaW5nRnVu
Y3Rpb24pCit7CisgICAgV2ViRmxvYXRBbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBjdXJ2ZS5h
ZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAwKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0
aW9uVHlwZUVhc2VPdXQpOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBX
ZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIE93blB0
cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vh
c2VPdXRUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9
IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAg
ICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5n
ZXRWYWx1ZSh0aW1lKSk7CisgICAgfQorfQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGlt
aW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJGbG9hdEFuaW1hdGlvbkN1
cnZlVGVzdCwgRWFzZUluT3V0VGltaW5nRnVuY3Rpb24pCit7CisgICAgV2ViRmxvYXRBbmltYXRp
b25DdXJ2ZSBjdXJ2ZTsKKyAgICBjdXJ2ZS5hZGQoV2ViRmxvYXRLZXlmcmFtZSgwLCAwKSwgV2Vi
QW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VJbk91dCk7CisgICAgY3VydmUu
YWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwgMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5j
dGlvblR5cGVMaW5lYXIpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+
IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDRWFzZUluT3V0VGltaW5nRnVuY3Rpb246OmNyZWF0
ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3Qg
ZG91YmxlIHRpbWUgPSBpICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1
bmN0aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUuZ2V0VmFsdWUodGltZSkpOworICAgIH0KK30K
KworLy8gVGVzdHMgdGhhdCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBl
Y3RlZC4KK1RFU1QoV2ViRmxvYXRBbmltYXRpb25DdXJ2ZVRlc3QsIEN1c3RvbUJlemllclRpbWlu
Z0Z1bmN0aW9uKQoreworICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgZG91
YmxlIHgxID0gMC4zOworICAgIGRvdWJsZSB5MSA9IDAuMjsKKyAgICBkb3VibGUgeDIgPSAwLjg7
CisgICAgZG91YmxlIHkyID0gMC43OworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDAs
IDApLCB4MSwgeTEsIHgyLCB5Mik7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0S2V5ZnJhbWUoMSwg
MSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworCisgICAg
T3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6
OkNDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKHgxLCB5MSwgeDIsIHkyKSk7Cisg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSB0
aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+
Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRpbWUpKTsKKyAgICB9Cit9CisKKy8vIFRl
c3RzIHRoYXQgdGhlIGRlZmF1bHQgdGltaW5nIGZ1bmN0aW9uIGlzIGluZGVlZCBlYXNlLgorVEVT
VChXZWJGbG9hdEFuaW1hdGlvbkN1cnZlVGVzdCwgRGVmYXVsdFRpbWluZ0Z1bmN0aW9uKQorewor
ICAgIFdlYkZsb2F0QW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAgY3VydmUuYWRkKFdlYkZsb2F0
S2V5ZnJhbWUoMCwgMCkpOworICAgIGN1cnZlLmFkZChXZWJGbG9hdEtleWZyYW1lKDEsIDEpLCBX
ZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIE93blB0
cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vh
c2VUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7
ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBF
WFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRW
YWx1ZSh0aW1lKSk7CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3Qu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9XZWJUcmFuc2Zvcm1BbmltYXRpb25D
dXJ2ZVRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxOGY4N2JlMjAzYjIwYjk5YzUyNzUyZTE2MjhkNDFk
YTNjYjc0NDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3Rz
L1dlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdC5jcHAKQEAgLTAsMCArMSwyOTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAq
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgPHB1YmxpYy9XZWJU
cmFuc2Zvcm1BbmltYXRpb25DdXJ2ZS5oPgorCisjaW5jbHVkZSAiY2MvQ0NUaW1pbmdGdW5jdGlv
bi5oIgorCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVHJh
bnNmb3JtT3BlcmF0aW9ucy5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0
ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgeworCisvLyBUZXN0
cyB0aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIG9uZSBrZXlmcmFtZSB3b3JrcyBhcyBl
eHBlY3RlZC4KK1RFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBPbmVUcmFuc2Zv
cm1LZXlmcmFtZSkKK3sKKyAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsKKyAg
ICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczsKKyAgICBvcGVyYXRp
b25zLmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3Jt
S2V5ZnJhbWUoMCwgb3BlcmF0aW9ucyksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlv
blR5cGVMaW5lYXIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKC0x
KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDApLm00MSgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMC41KS5tNDEoKSk7Cisg
ICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdldFZhbHVlKDEpLm00MSgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMikubTQxKCkpOworfQorCisvLyBUZXN0cyB0
aGF0IGEgdHJhbnNmb3JtIGFuaW1hdGlvbiB3aXRoIHR3byBrZXlmcmFtZXMgd29ya3MgYXMgZXhw
ZWN0ZWQuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgVHdvVHJhbnNmb3Jt
S2V5ZnJhbWUpCit7CisgICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgY3VydmU7CisgICAg
V2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9wZXJhdGlv
bnMxLmFwcGVuZFRyYW5zbGF0ZSgyLCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9w
ZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNsYXRlKDQs
IDAsIDApOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25z
MSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1
cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlv
bkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIEVYUEVDVF9GTE9BVF9FUSgy
LCBjdXJ2ZS5nZXRWYWx1ZSgtMSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgyLCBjdXJ2
ZS5nZXRWYWx1ZSgwKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDMsIGN1cnZlLmdldFZh
bHVlKDAuNSkubTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSg0LCBjdXJ2ZS5nZXRWYWx1ZSgx
KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDIpLm00MSgp
KTsKK30KKworLy8gVGVzdHMgdGhhdCBhIHRyYW5zZm9ybSBhbmltYXRpb24gd2l0aCB0aHJlZSBr
ZXlmcmFtZXMgd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlVGVzdCwgVGhyZWVUcmFuc2Zvcm1LZXlmcmFtZSkKK3sKKyAgICBXZWJUcmFuc2Zvcm1Bbmlt
YXRpb25DdXJ2ZSBjdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3Bl
cmF0aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDIsIDAsIDApOworICAg
IFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRp
b25zMi5hcHBlbmRUcmFuc2xhdGUoNCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1P
cGVyYXRpb25zIG9wZXJhdGlvbnMzOworICAgIG9wZXJhdGlvbnMzLmFwcGVuZFRyYW5zbGF0ZSg4
LCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9u
czEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBj
dXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJBbmltYXRp
b25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJh
bnNmb3JtS2V5ZnJhbWUoMiwgb3BlcmF0aW9uczMpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5n
RnVuY3Rpb25UeXBlTGluZWFyKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFs
dWUoLTEpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMiwgY3VydmUuZ2V0VmFsdWUoMCku
bTQxKCkpOworICAgIEVYUEVDVF9GTE9BVF9FUSgzLCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpLm00MSgp
KTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoMSkubTQxKCkpOworICAg
IEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS5nZXRWYWx1ZSgxLjUpLm00MSgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoOCwgY3VydmUuZ2V0VmFsdWUoMikubTQxKCkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSg4LCBjdXJ2ZS5nZXRWYWx1ZSgzKS5tNDEoKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQgYSB0
cmFuc2Zvcm0gYW5pbWF0aW9uIHdpdGggbXVsdGlwbGUga2V5cyBhdCBhIGdpdmVuIHRpbWUgd29y
a3Mgc2FuZWx5LgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRlc3QsIFJlcGVhdGVk
VHJhbnNmb3JtS2V5VGltZXMpCit7CisgICAgLy8gQSBzdGVwIGZ1bmN0aW9uLgorICAgIFdlYlRy
YW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3Bl
cmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoNCwg
MCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOwor
ICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSg0LCAwLCAwKTsKKyAgICBXZWJLaXQ6Oldl
YlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczM7CisgICAgb3BlcmF0aW9uczMuYXBwZW5k
VHJhbnNsYXRlKDYsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBv
cGVyYXRpb25zNDsKKyAgICBvcGVyYXRpb25zNC5hcHBlbmRUcmFuc2xhdGUoNiwgMCwgMCk7Cisg
ICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJhdGlvbnMxKSwgV2ViQW5p
bWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUuYWRkKFdl
YlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRp
bWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZy
YW1lKDEsIG9wZXJhdGlvbnMzKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlw
ZUxpbmVhcik7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDIsIG9wZXJhdGlv
bnM0KSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisKKyAg
ICBFWFBFQ1RfRkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoLTEpLm00MSgpKTsKKyAgICBFWFBF
Q1RfRkxPQVRfRVEoNCwgY3VydmUuZ2V0VmFsdWUoMCkubTQxKCkpOworICAgIEVYUEVDVF9GTE9B
VF9FUSg0LCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpLm00MSgpKTsKKworICAgIC8vIFRoZXJlIGlzIGEg
ZGlzY29udGludWl0eSBhdCAxLiBBbnkgdmFsdWUgYmV0d2VlbiA0IGFuZCA2IGlzIHZhbGlkLgor
ICAgIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4IHZhbHVlID0gY3VydmUuZ2V0VmFsdWUoMSk7Cisg
ICAgRVhQRUNUX1RSVUUodmFsdWUubTQxKCkgPj0gNCAmJiB2YWx1ZS5tNDEoKSA8PSA2KTsKKwor
ICAgIEVYUEVDVF9GTE9BVF9FUSg2LCBjdXJ2ZS5nZXRWYWx1ZSgxLjUpLm00MSgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMikubTQxKCkpOworICAgIEVYUEVDVF9G
TE9BVF9FUSg2LCBjdXJ2ZS5nZXRWYWx1ZSgzKS5tNDEoKSk7Cit9CisKKy8vIFRlc3RzIHRoYXQg
dGhlIGtleWZyYW1lcyBtYXkgYmUgYWRkZWQgb3V0IG9mIG9yZGVyLgorVEVTVChXZWJUcmFuc2Zv
cm1BbmltYXRpb25DdXJ2ZVRlc3QsIFVuc29ydGVkS2V5ZnJhbWVzKQoreworICAgIFdlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0
aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMiwgMCwg
MCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAg
IG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSg0LCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczM7CisgICAgb3BlcmF0aW9uczMuYXBwZW5kVHJh
bnNsYXRlKDgsIDAsIDApOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgyLCBv
cGVyYXRpb25zMyksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIp
OworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVyYXRpb25zMSksIFdl
YkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworICAgIGN1cnZlLmFk
ZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZl
OjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworCisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1
cnZlLmdldFZhbHVlKC0xKS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDIsIGN1cnZlLmdl
dFZhbHVlKDApLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMywgY3VydmUuZ2V0VmFsdWUo
MC41KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDQsIGN1cnZlLmdldFZhbHVlKDEpLm00
MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoNiwgY3VydmUuZ2V0VmFsdWUoMS41KS5tNDEoKSk7
CisgICAgRVhQRUNUX0ZMT0FUX0VRKDgsIGN1cnZlLmdldFZhbHVlKDIpLm00MSgpKTsKKyAgICBF
WFBFQ1RfRkxPQVRfRVEoOCwgY3VydmUuZ2V0VmFsdWUoMykubTQxKCkpOworfQorCisvLyBUZXN0
cyB0aGF0IGEgY3ViaWMgYmV6aWVyIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZC4K
K1RFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBDdWJpY0JlemllclRpbWluZ0Z1
bmN0aW9uKQoreworICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIFdl
YktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25z
MS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVy
YXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAw
LCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEp
LCAwLjI1LCAwLCAwLjc1LCAxKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUo
MSwgb3BlcmF0aW9uczIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGlu
ZWFyKTsKKyAgICBFWFBFQ1RfRkxPQVRfRVEoMCwgY3VydmUuZ2V0VmFsdWUoMCkubTQxKCkpOwor
ICAgIEVYUEVDVF9MVCgwLCBjdXJ2ZS5nZXRWYWx1ZSgwLjI1KS5tNDEoKSk7CisgICAgRVhQRUNU
X0dUKDAuMjUsIGN1cnZlLmdldFZhbHVlKDAuMjUpLm00MSgpKTsKKyAgICBFWFBFQ1RfRkxPQVRf
RVEoMC41LCBjdXJ2ZS5nZXRWYWx1ZSgwLjUpLm00MSgpKTsKKyAgICBFWFBFQ1RfTFQoMC43NSwg
Y3VydmUuZ2V0VmFsdWUoMC43NSkubTQxKCkpOworICAgIEVYUEVDVF9HVCgxLCBjdXJ2ZS5nZXRW
YWx1ZSgwLjc1KS5tNDEoKSk7CisgICAgRVhQRUNUX0ZMT0FUX0VRKDEsIGN1cnZlLmdldFZhbHVl
KDEpLm00MSgpKTsKK30KKworLy8gVGVzdHMgdGhhdCBhbiBlYXNlIHRpbWluZyBmdW5jdGlvbiB3
b3JrcyBhcyBleHBlY3RlZC4KK1RFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBF
YXNlVGltaW5nRnVuY3Rpb24pCit7CisgICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgY3Vy
dmU7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAg
IG9wZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRy
YW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJh
bnNsYXRlKDEsIDAsIDApOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBv
cGVyYXRpb25zMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVFYXNlKTsK
KyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9uczIpLCBXZWJB
bmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAgIE93blB0cjxX
ZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3JlOjpDQ0Vhc2VU
aW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IDQ7ICsr
aSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAgICBFWFBF
Q1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5nZXRWYWx1
ZSh0aW1lKS5tNDEoKSk7CisgICAgfQorfQorCisvLyBUZXN0cyB1c2luZyBhIGxpbmVhciB0aW1p
bmcgZnVuY3Rpb24uCitURVNUKFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgTGluZWFy
VGltaW5nRnVuY3Rpb24pCit7CisgICAgV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmUgY3VydmU7
CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMxOworICAgIG9w
ZXJhdGlvbnMxLmFwcGVuZFRyYW5zbGF0ZSgwLCAwLCAwKTsKKyAgICBXZWJLaXQ6OldlYlRyYW5z
Zm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczI7CisgICAgb3BlcmF0aW9uczIuYXBwZW5kVHJhbnNs
YXRlKDEsIDAsIDApOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgwLCBvcGVy
YXRpb25zMSksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOwor
ICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zvcm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFu
aW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5jdGlvblR5cGVMaW5lYXIpOworCisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAu
MjU7CisgICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1lLCBjdXJ2ZS5nZXRWYWx1ZSh0aW1lKS5t
NDEoKSk7CisgICAgfQorfQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2UgaW4gdGltaW5nIGZ1bmN0
aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZVRl
c3QsIEVhc2VJblRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdlYlRyYW5zZm9ybUFuaW1hdGlvbkN1
cnZlIGN1cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25z
MTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUoMCwgMCwgMCk7CisgICAgV2ViS2l0
OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMyOworICAgIG9wZXJhdGlvbnMyLmFw
cGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJh
bWUoMCwgb3BlcmF0aW9uczEpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBl
RWFzZUluKTsKKyAgICBjdXJ2ZS5hZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMSwgb3BlcmF0aW9u
czIpLCBXZWJBbmltYXRpb25DdXJ2ZTo6VGltaW5nRnVuY3Rpb25UeXBlTGluZWFyKTsKKworICAg
IE93blB0cjxXZWJDb3JlOjpDQ1RpbWluZ0Z1bmN0aW9uPiB0aW1pbmdGdW5jdGlvbihXZWJDb3Jl
OjpDQ0Vhc2VJblRpbWluZ0Z1bmN0aW9uOjpjcmVhdGUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7
IGkgPD0gNDsgKytpKSB7CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7Cisg
ICAgICAgIEVYUEVDVF9GTE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1
cnZlLmdldFZhbHVlKHRpbWUpLm00MSgpKTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgYW4g
ZWFzZSBpbiB0aW1pbmcgZnVuY3Rpb24gd29ya3MgYXMgZXhwZWN0ZWQuCitURVNUKFdlYlRyYW5z
Zm9ybUFuaW1hdGlvbkN1cnZlVGVzdCwgRWFzZU91dFRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdl
YlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIFdlYktpdDo6V2ViVHJhbnNmb3Jt
T3BlcmF0aW9ucyBvcGVyYXRpb25zMTsKKyAgICBvcGVyYXRpb25zMS5hcHBlbmRUcmFuc2xhdGUo
MCwgMCwgMCk7CisgICAgV2ViS2l0OjpXZWJUcmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnMy
OworICAgIG9wZXJhdGlvbnMyLmFwcGVuZFRyYW5zbGF0ZSgxLCAwLCAwKTsKKyAgICBjdXJ2ZS5h
ZGQoV2ViVHJhbnNmb3JtS2V5ZnJhbWUoMCwgb3BlcmF0aW9uczEpLCBXZWJBbmltYXRpb25DdXJ2
ZTo6VGltaW5nRnVuY3Rpb25UeXBlRWFzZU91dCk7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9y
bUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0
aW9uVHlwZUxpbmVhcik7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4g
dGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNlT3V0VGltaW5nRnVuY3Rpb246OmNyZWF0ZSgp
KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91
YmxlIHRpbWUgPSBpICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0
aW9uLT5nZXRWYWx1ZSh0aW1lKSwgY3VydmUuZ2V0VmFsdWUodGltZSkubTQxKCkpOworICAgIH0K
K30KKworLy8gVGVzdHMgdGhhdCBhbiBlYXNlIGluIHRpbWluZyBmdW5jdGlvbiB3b3JrcyBhcyBl
eHBlY3RlZC4KK1RFU1QoV2ViVHJhbnNmb3JtQW5pbWF0aW9uQ3VydmVUZXN0LCBFYXNlSW5PdXRU
aW1pbmdGdW5jdGlvbikKK3sKKyAgICBXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2ZSBjdXJ2ZTsK
KyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7CisgICAgb3Bl
cmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIFdlYktpdDo6V2ViVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRUcmFuc2xh
dGUoMSwgMCwgMCk7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAsIG9wZXJh
dGlvbnMxKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUVhc2VJbk91dCk7
CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDEsIG9wZXJhdGlvbnMyKSwgV2Vi
QW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlwZUxpbmVhcik7CisKKyAgICBPd25QdHI8
V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5nRnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNl
SW5PdXRUaW1pbmdGdW5jdGlvbjo6Y3JlYXRlKCkpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9
IDQ7ICsraSkgeworICAgICAgICBjb25zdCBkb3VibGUgdGltZSA9IGkgKiAwLjI1OworICAgICAg
ICBFWFBFQ1RfRkxPQVRfRVEodGltaW5nRnVuY3Rpb24tPmdldFZhbHVlKHRpbWUpLCBjdXJ2ZS5n
ZXRWYWx1ZSh0aW1lKS5tNDEoKSk7CisgICAgfQorfQorCisvLyBUZXN0cyB0aGF0IGFuIGVhc2Ug
aW4gdGltaW5nIGZ1bmN0aW9uIHdvcmtzIGFzIGV4cGVjdGVkLgorVEVTVChXZWJUcmFuc2Zvcm1B
bmltYXRpb25DdXJ2ZVRlc3QsIEN1c3RvbUJlemllclRpbWluZ0Z1bmN0aW9uKQoreworICAgIFdl
YlRyYW5zZm9ybUFuaW1hdGlvbkN1cnZlIGN1cnZlOworICAgIGRvdWJsZSB4MSA9IDAuMzsKKyAg
ICBkb3VibGUgeTEgPSAwLjI7CisgICAgZG91YmxlIHgyID0gMC44OworICAgIGRvdWJsZSB5MiA9
IDAuNzsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0aW9uczE7Cisg
ICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIFdlYktpdDo6V2Vi
VHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25zMi5hcHBlbmRU
cmFuc2xhdGUoMSwgMCwgMCk7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZyYW1lKDAs
IG9wZXJhdGlvbnMxKSwgeDEsIHkxLCB4MiwgeTIpOworICAgIGN1cnZlLmFkZChXZWJUcmFuc2Zv
cm1LZXlmcmFtZSgxLCBvcGVyYXRpb25zMiksIFdlYkFuaW1hdGlvbkN1cnZlOjpUaW1pbmdGdW5j
dGlvblR5cGVMaW5lYXIpOworCisgICAgT3duUHRyPFdlYkNvcmU6OkNDVGltaW5nRnVuY3Rpb24+
IHRpbWluZ0Z1bmN0aW9uKFdlYkNvcmU6OkNDQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6Y3Jl
YXRlKHgxLCB5MSwgeDIsIHkyKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gNDsgKytpKSB7
CisgICAgICAgIGNvbnN0IGRvdWJsZSB0aW1lID0gaSAqIDAuMjU7CisgICAgICAgIEVYUEVDVF9G
TE9BVF9FUSh0aW1pbmdGdW5jdGlvbi0+Z2V0VmFsdWUodGltZSksIGN1cnZlLmdldFZhbHVlKHRp
bWUpLm00MSgpKTsKKyAgICB9Cit9CisKKy8vIFRlc3RzIHRoYXQgdGhlIGRlZmF1bHQgdGltaW5n
IGZ1bmN0aW9uIGlzIGluZGVlZCBlYXNlLgorVEVTVChXZWJUcmFuc2Zvcm1BbmltYXRpb25DdXJ2
ZVRlc3QsIERlZmF1bHRUaW1pbmdGdW5jdGlvbikKK3sKKyAgICBXZWJUcmFuc2Zvcm1BbmltYXRp
b25DdXJ2ZSBjdXJ2ZTsKKyAgICBXZWJLaXQ6OldlYlRyYW5zZm9ybU9wZXJhdGlvbnMgb3BlcmF0
aW9uczE7CisgICAgb3BlcmF0aW9uczEuYXBwZW5kVHJhbnNsYXRlKDAsIDAsIDApOworICAgIFdl
YktpdDo6V2ViVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zMjsKKyAgICBvcGVyYXRpb25z
Mi5hcHBlbmRUcmFuc2xhdGUoMSwgMCwgMCk7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtl
eWZyYW1lKDAsIG9wZXJhdGlvbnMxKSk7CisgICAgY3VydmUuYWRkKFdlYlRyYW5zZm9ybUtleWZy
YW1lKDEsIG9wZXJhdGlvbnMyKSwgV2ViQW5pbWF0aW9uQ3VydmU6OlRpbWluZ0Z1bmN0aW9uVHlw
ZUxpbmVhcik7CisKKyAgICBPd25QdHI8V2ViQ29yZTo6Q0NUaW1pbmdGdW5jdGlvbj4gdGltaW5n
RnVuY3Rpb24oV2ViQ29yZTo6Q0NFYXNlVGltaW5nRnVuY3Rpb246OmNyZWF0ZSgpKTsKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8PSA0OyArK2kpIHsKKyAgICAgICAgY29uc3QgZG91YmxlIHRpbWUg
PSBpICogMC4yNTsKKyAgICAgICAgRVhQRUNUX0ZMT0FUX0VRKHRpbWluZ0Z1bmN0aW9uLT5nZXRW
YWx1ZSh0aW1lKSwgY3VydmUuZ2V0VmFsdWUodGltZSkubTQxKCkpOworICAgIH0KK30KKworfSAv
LyBuYW1lc3BhY2UK
</data>

          </attachment>
      

    </bug>

</bugzilla>